@crestapps/ai-chat-ui 1.0.0-preview.23 → 1.0.0-preview.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-chat-widget.js +0 -4
- package/dist/ai-chat-widget.js.map +1 -1
- package/dist/ai-chat-widget.min.js +1 -1
- package/dist/ai-chat-widget.min.js.map +1 -1
- package/dist/ai-chat.js +56 -16
- package/dist/ai-chat.js.map +1 -1
- package/dist/ai-chat.min.js +1 -1
- package/dist/ai-chat.min.js.map +1 -1
- package/dist/chat-interaction.js +54 -10
- package/dist/chat-interaction.js.map +1 -1
- package/dist/chat-interaction.min.js +1 -1
- package/dist/chat-interaction.min.js.map +1 -1
- package/package.json +1 -1
- package/README.md +0 -145
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["chat-interaction.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","chatInteractionManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","codeCopiedText","assistantLabel","messageTemplate","indicatorTemplate","untitledText","clearHistoryTitle","clearHistoryMessage","clearHistoryOkText","clearHistoryCancelText","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","getCitationLabel","buildCitationDisplay","content","processedContent","messageReferences","keys","citations","citedRefs","filter","_ref6","_ref7","includes","sort","_ref8","_ref9","_ref0","_ref1","b","displayIndex","_iterator","_step","_step$value","placeholder","concat","replaceAll","referenceKey","label","isDownload","err","_i2","_citations","citation","map","_ref10","_excluded","buildCopyContent","copyContent","_iterator2","_step2","_iterator3","_step3","trimEnd","updateMessagePresentation","message","rawContent","citationDisplay","displayContent","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","data","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","charts","requestAnimationFrame","_iterator4","_step4","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","app","Vue","createApp","inputElement","buttonElement","chatContainer","isInteractionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","prompt","initialFieldValues","Map","settingsDirty","saveSettingsTimeout","saveIndicatorTimeout","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","Math","random","conversationModeEnabled","conversationButton","isConversationMode","notifications","notificationDismissTimers","computed","lastAssistantIndex","role","methods","handleBeforeUnload","startConnection","_this","_callee","_t","_context","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","initializeInteraction","itemId","titleInput","querySelector","forEach","msg","addMessage","$nextTick","historyItem","showSaveIndicator","stopRecording","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","messageId","responseId","appearance","hideTypingIndicator","j","msgIndex","newMessage","id","normalizeAssistantAppearance","base64Audio","contentType","binaryString","atob","bytes","Uint8Array","charCodeAt","playCollectedAudio","showPlaceholder","clearHistoryBtn","classList","add","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","reloadCurrentInteraction","onclose","addMessageInternal","_this2","fireEvent","CustomEvent","detail","_this3","_message$rawContent","remove","event","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","isIndicator","sendMessage","_this4","_callee2","trimmedPrompt","_context2","flushPendingSave","streamMessage","_this5","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentItemId","getItemId","subscribe","chunk","sessionId","setItemId","_i3","_Object$entries2","_normalizeReference2","_Object$entries2$_i","complete","_this5$stream","processReferences","streamingFinished","synthesizeSpeech","_this5$stream2","getServiceDownMessage","_this6","_ref11","_message$rawContent2","stopIcon","getAttribute","replaceChildren","RETURN_DOM_FRAGMENT","startIcon","icons","querySelectorAll","debouncedSaveSettings","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this7","buttons","button","buttonIndex","Number","isPlaying","iconHtml","toggle","setAttribute","cacheIndex","_this8","_ttsCacheIndex","invoke","toggleMessageTts","_this9","playAudioBlob","_this0","totalLength","reduce","sum","combined","offset","_iterator5","_step5","set","blob","Blob","_this1","URL","createObjectURL","audio","Audio","addEventListener","revokeObjectURL","playNextInQueue","play","_this10","nextBlob","shift","conversationModeOnAudioEnded","_this11","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this12","updateConversationButton","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","_conversationSubject","Subject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","pendingChunk","analyser","interruptVolumeThreshold","size","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee3","uint8Array","base64","_context3","arrayBuffer","str","byte","String","fromCharCode","btoa","getTracks","track","stop","documentElement","send","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","originalLength","removedCount","_this13","setTimeout","scrollTop","scrollHeight","clientHeight","handleUserInput","target","getSaveIndicatorElement","saveIndicatorElementSelector","className","_this14","indicator","clearTimeout","clearPendingSettingsSave","getFieldLabel","input","_input$closest","closest","dataset","setting","getValidationFeedbackElement","feedback","nextElementSibling","contains","insertAdjacentElement","clearSettingValidationError","removeAttribute","setSettingValidationError","getSettingValidationMessage","disabled","number","fieldLabel","isNaN","min","max","validateSettingInput","validateSettings","_this15","isValid","getSettingInputs","queueSettingsSave","explicitInputs","getSelectedGroupValues","groupName","fallbackSelector","explicitSelections","values","checkbox","checkboxes","baseName","hiddenInput","getPromptTemplateSelections","promptTemplates","card","templateIdInput","promptParametersInput","templateId","promptParameters","clearNotificationDismiss","findIndex","splice","scheduleNotificationDismiss","_this16","timerId","dismissNotification","handleNotificationAction","actionName","resetInteraction","initializeApp","_this17","placeholderElementSelector","loadInteraction","threshold","atBottom","shiftKey","click","lastMsg","pop","chatInteractionItems","getElementsByClassName","preventDefault","btn","block","codeEl","clipboard","writeText","copiedText","matches","clearHistory","micButtonElementSelector","style","display","toggleRecording","conversationButtonElementSelector","self","clearHistoryConfirmed","confirmDialog","okText","cancelText","callback","confirmed","confirm","_this18","saveSettings","getSelectedToolNames","getSelectedMcpConnectionIds","getSelectedA2AConnectionIds","getSelectedAgentNames","_this19","settings","inputs","match","checked","parseFloat","toolNames","mcpConnectionIds","a2aConnectionIds","agentNames","promptTemplateIds","template","force","copyResponse","_ref13","_message$copyContent","startRecording","_this20","subject","_callee4","_context4","updateMicButton","watch","active","mounted","_this21","_callee5","_context5","beforeUnmount","removeEventListener","mount","chatInteractionDocumentManager","managerStateKey","normalizeDocumentInfo","documentId","DocumentId","fileName","FileName","fileSize","FileSize","formatFileSize","toFixed","getDocumentKey","isDuplicateFile","file","knownKeys","has","getDocumentsFromDom","container","element","chatDocumentId","chatDocumentName","chatDocumentSize","fileInput","documentsList","status","progressContainer","progressBar","uploadQueue","previousState","interactionDocuments","existingDocuments","uploadItems","isUploadingDocuments","createTextElement","tagName","renderDocuments","appendChild","documentInfo","row","details","prepend","removeButton","removeIcon","removeDocument","showUploadStatus","showUploadProgress","progress","width","roundedProgress","round","getUploadStatePresentation","state","badgeClass","progressClass","formatUploadMessage","item","renderUploadQueue","presentation","header","fileDetails","badge","progressState","createUploadItem","lastModified","Date","now","updateUploadItem","updates","removeUploadItems","predicate","uploadSingleDocument","itemIdToUpdate","fileIndex","totalFiles","reject","formData","FormData","append","xhr","XMLHttpRequest","open","uploadDocumentUrl","upload","lengthComputable","fileProgress","loaded","total","overallProgress","responseText","Error","uploadDocuments","_x","_uploadDocuments","_callee6","files","filesToUpload","duplicateItems","knownDocumentKeys","pendingItems","uploadedCount","failedUploads","pendingItem","result","uploaded","failed","missingUploadMessage","failedMessage","errorMessage","_t2","_t3","_context6","Set","join","entry","_x2","_removeDocument","_callee7","response","serverDocuments","_t4","_t5","_context7","removeDocumentUrl","fetch","method","headers","body","stringify","ok","documents","onFileInputChange","selectedFiles","download","toDataURL","img","startsWith","res","removeChild"],"mappings":";;;;;;0BACA,uKAAAA,CAAA,EAAAC,CAAA,EAAAC,CAAA,wBAAAC,MAAA,GAAAA,MAAA,OAAAC,CAAA,GAAAF,CAAA,CAAAG,QAAA,kBAAAC,CAAA,GAAAJ,CAAA,CAAAK,WAAA,8BAAAC,EAAAN,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAC,CAAA,GAAAL,CAAA,IAAAA,CAAA,CAAAM,SAAA,YAAAC,SAAA,GAAAP,CAAA,GAAAO,SAAA,EAAAC,CAAA,GAAAC,MAAA,CAAAC,MAAA,CAAAL,CAAA,CAAAC,SAAA,UAAAK,mBAAA,CAAAH,CAAA,uBAAAV,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAE,CAAA,EAAAC,CAAA,EAAAG,CAAA,EAAAI,CAAA,MAAAC,CAAA,GAAAX,CAAA,QAAAY,CAAA,OAAAC,CAAA,KAAAF,CAAA,KAAAb,CAAA,KAAAgB,CAAA,EAAApB,CAAA,EAAAqB,CAAA,EAAAC,CAAA,EAAAN,CAAA,EAAAM,CAAA,CAAAC,IAAA,CAAAvB,CAAA,MAAAsB,CAAA,WAAAA,EAAArB,CAAA,EAAAC,CAAA,WAAAM,CAAA,GAAAP,CAAA,EAAAQ,CAAA,MAAAG,CAAA,GAAAZ,CAAA,EAAAmB,CAAA,CAAAf,CAAA,GAAAF,CAAA,EAAAmB,CAAA,gBAAAC,EAAApB,CAAA,EAAAE,CAAA,SAAAK,CAAA,GAAAP,CAAA,EAAAU,CAAA,GAAAR,CAAA,EAAAH,CAAA,OAAAiB,CAAA,IAAAF,CAAA,KAAAV,CAAA,IAAAL,CAAA,GAAAgB,CAAA,CAAAO,MAAA,EAAAvB,CAAA,UAAAK,CAAA,EAAAE,CAAA,GAAAS,CAAA,CAAAhB,CAAA,GAAAqB,CAAA,GAAAH,CAAA,CAAAF,CAAA,EAAAQ,CAAA,GAAAjB,CAAA,KAAAN,CAAA,QAAAI,CAAA,GAAAmB,CAAA,KAAArB,CAAA,MAAAQ,CAAA,GAAAJ,CAAA,EAAAC,CAAA,GAAAD,CAAA,YAAAC,CAAA,WAAAD,CAAA,MAAAA,CAAA,MAAAR,CAAA,IAAAQ,CAAA,OAAAc,CAAA,MAAAhB,CAAA,GAAAJ,CAAA,QAAAoB,CAAA,GAAAd,CAAA,QAAAC,CAAA,MAAAU,CAAA,CAAAC,CAAA,GAAAhB,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAI,CAAA,OAAAc,CAAA,GAAAG,CAAA,KAAAnB,CAAA,GAAAJ,CAAA,QAAAM,CAAA,MAAAJ,CAAA,IAAAA,CAAA,GAAAqB,CAAA,MAAAjB,CAAA,MAAAN,CAAA,EAAAM,CAAA,MAAAJ,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAqB,CAAA,EAAAhB,CAAA,cAAAH,CAAA,IAAAJ,CAAA,aAAAmB,CAAA,QAAAH,CAAA,OAAAd,CAAA,qBAAAE,CAAA,EAAAW,CAAA,EAAAQ,CAAA,QAAAT,CAAA,YAAAU,SAAA,uCAAAR,CAAA,UAAAD,CAAA,IAAAK,CAAA,CAAAL,CAAA,EAAAQ,CAAA,GAAAhB,CAAA,GAAAQ,CAAA,EAAAL,CAAA,GAAAa,CAAA,GAAAxB,CAAA,GAAAQ,CAAA,OAAAT,CAAA,GAAAY,CAAA,MAAAM,CAAA,KAAAV,CAAA,KAAAC,CAAA,GAAAA,CAAA,QAAAA,CAAA,SAAAU,CAAA,CAAAf,CAAA,QAAAkB,CAAA,CAAAb,CAAA,EAAAG,CAAA,KAAAO,CAAA,CAAAf,CAAA,GAAAQ,CAAA,GAAAO,CAAA,CAAAC,CAAA,GAAAR,CAAA,aAAAI,CAAA,MAAAR,CAAA,QAAAC,CAAA,KAAAH,CAAA,YAAAL,CAAA,GAAAO,CAAA,CAAAF,CAAA,WAAAL,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,EAAAI,CAAA,UAAAc,SAAA,2CAAAzB,CAAA,CAAA2B,IAAA,SAAA3B,CAAA,EAAAW,CAAA,GAAAX,CAAA,CAAA4B,KAAA,EAAApB,CAAA,SAAAA,CAAA,oBAAAA,CAAA,KAAAR,CAAA,GAAAO,CAAA,eAAAP,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,GAAAC,CAAA,SAAAG,CAAA,GAAAc,SAAA,uCAAApB,CAAA,gBAAAG,CAAA,OAAAD,CAAA,GAAAR,CAAA,cAAAC,CAAA,IAAAiB,CAAA,GAAAC,CAAA,CAAAf,CAAA,QAAAQ,CAAA,GAAAV,CAAA,CAAAyB,IAAA,CAAAvB,CAAA,EAAAe,CAAA,OAAAE,CAAA,kBAAApB,CAAA,IAAAO,CAAA,GAAAR,CAAA,EAAAS,CAAA,MAAAG,CAAA,GAAAX,CAAA,cAAAe,CAAA,mBAAAa,KAAA,EAAA5B,CAAA,EAAA2B,IAAA,EAAAV,CAAA,SAAAhB,CAAA,EAAAI,CAAA,EAAAE,CAAA,QAAAI,CAAA,QAAAS,CAAA,gBAAAV,UAAA,cAAAmB,kBAAA,cAAAC,2BAAA,KAAA9B,CAAA,GAAAY,MAAA,CAAAmB,cAAA,MAAAvB,CAAA,MAAAL,CAAA,IAAAH,CAAA,CAAAA,CAAA,IAAAG,CAAA,SAAAW,mBAAA,CAAAd,CAAA,OAAAG,CAAA,iCAAAH,CAAA,GAAAW,CAAA,GAAAmB,0BAAA,CAAArB,SAAA,GAAAC,SAAA,CAAAD,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAL,CAAA,YAAAO,EAAAhB,CAAA,WAAAa,MAAA,CAAAoB,cAAA,GAAApB,MAAA,CAAAoB,cAAA,CAAAjC,CAAA,EAAA+B,0BAAA,KAAA/B,CAAA,CAAAkC,SAAA,GAAAH,0BAAA,EAAAhB,mBAAA,CAAAf,CAAA,EAAAM,CAAA,yBAAAN,CAAA,CAAAU,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAF,CAAA,GAAAZ,CAAA,WAAA8B,iBAAA,CAAApB,SAAA,GAAAqB,0BAAA,EAAAhB,mBAAA,CAAAH,CAAA,iBAAAmB,0BAAA,GAAAhB,mBAAA,CAAAgB,0BAAA,iBAAAD,iBAAA,GAAAA,iBAAA,CAAAK,WAAA,wBAAApB,mBAAA,CAAAgB,0BAAA,EAAAzB,CAAA,wBAAAS,mBAAA,CAAAH,CAAA,GAAAG,mBAAA,CAAAH,CAAA,EAAAN,CAAA,gBAAAS,mBAAA,CAAAH,CAAA,EAAAR,CAAA,iCAAAW,mBAAA,CAAAH,CAAA,8DAAAwB,YAAA,YAAAA,aAAA,aAAAC,CAAA,EAAA7B,CAAA,EAAA8B,CAAA,EAAAtB,CAAA;AAAA,SAAAD,oBAAAf,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA,QAAAO,CAAA,GAAAK,MAAA,CAAA0B,cAAA,QAAA/B,CAAA,uBAAAR,CAAA,IAAAQ,CAAA,QAAAO,mBAAA,YAAAyB,mBAAAxC,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA,aAAAK,EAAAJ,CAAA,EAAAE,CAAA,IAAAW,mBAAA,CAAAf,CAAA,EAAAE,CAAA,YAAAF,CAAA,gBAAAyC,OAAA,CAAAvC,CAAA,EAAAE,CAAA,EAAAJ,CAAA,SAAAE,CAAA,GAAAM,CAAA,GAAAA,CAAA,CAAAR,CAAA,EAAAE,CAAA,IAAA2B,KAAA,EAAAzB,CAAA,EAAAsC,UAAA,GAAAzC,CAAA,EAAA0C,YAAA,GAAA1C,CAAA,EAAA2C,QAAA,GAAA3C,CAAA,MAAAD,CAAA,CAAAE,CAAA,IAAAE,CAAA,IAAAE,CAAA,aAAAA,CAAA,cAAAA,CAAA,mBAAAS,mBAAA,CAAAf,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA;AAAA,SAAA4C,mBAAAzC,CAAA,EAAAH,CAAA,EAAAD,CAAA,EAAAE,CAAA,EAAAI,CAAA,EAAAe,CAAA,EAAAZ,CAAA,cAAAD,CAAA,GAAAJ,CAAA,CAAAiB,CAAA,EAAAZ,CAAA,GAAAG,CAAA,GAAAJ,CAAA,CAAAqB,KAAA,WAAAzB,CAAA,gBAAAJ,CAAA,CAAAI,CAAA,KAAAI,CAAA,CAAAoB,IAAA,GAAA3B,CAAA,CAAAW,CAAA,IAAAkC,OAAA,CAAAC,OAAA,CAAAnC,CAAA,EAAAoC,IAAA,CAAA9C,CAAA,EAAAI,CAAA;AAAA,SAAA2C,kBAAA7C,CAAA,6BAAAH,CAAA,SAAAD,CAAA,GAAAkD,SAAA,aAAAJ,OAAA,WAAA5C,CAAA,EAAAI,CAAA,QAAAe,CAAA,GAAAjB,CAAA,CAAA+C,KAAA,CAAAlD,CAAA,EAAAD,CAAA,YAAAoD,MAAAhD,CAAA,IAAAyC,kBAAA,CAAAxB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA8C,KAAA,EAAAC,MAAA,UAAAjD,CAAA,cAAAiD,OAAAjD,CAAA,IAAAyC,kBAAA,CAAAxB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA8C,KAAA,EAAAC,MAAA,WAAAjD,CAAA,KAAAgD,KAAA;AAAA,SAAAE,mBAAApD,CAAA,WAAAqD,kBAAA,CAAArD,CAAA,KAAAsD,gBAAA,CAAAtD,CAAA,KAAAuD,2BAAA,CAAAvD,CAAA,KAAAwD,kBAAA;AAAA,SAAAA,mBAAA,cAAAhC,SAAA;AAAA,SAAA8B,iBAAAtD,CAAA,8BAAAC,MAAA,YAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,aAAAH,CAAA,uBAAAyD,KAAA,CAAAC,IAAA,CAAA1D,CAAA;AAAA,SAAAqD,mBAAArD,CAAA,QAAAyD,KAAA,CAAAE,OAAA,CAAA3D,CAAA,UAAA4D,iBAAA,CAAA5D,CAAA;AAAA,SAAA6D,yBAAA/D,CAAA,EAAAC,CAAA,gBAAAD,CAAA,iBAAAM,CAAA,EAAAJ,CAAA,EAAAM,CAAA,GAAAwD,6BAAA,CAAAhE,CAAA,EAAAC,CAAA,OAAAY,MAAA,CAAAoD,qBAAA,QAAA7D,CAAA,GAAAS,MAAA,CAAAoD,qBAAA,CAAAjE,CAAA,QAAAE,CAAA,MAAAA,CAAA,GAAAE,CAAA,CAAAoB,MAAA,EAAAtB,CAAA,IAAAI,CAAA,GAAAF,CAAA,CAAAF,CAAA,UAAAD,CAAA,CAAAiE,OAAA,CAAA5D,CAAA,QAAA6D,oBAAA,CAAAxC,IAAA,CAAA3B,CAAA,EAAAM,CAAA,MAAAE,CAAA,CAAAF,CAAA,IAAAN,CAAA,CAAAM,CAAA,aAAAE,CAAA;AAAA,SAAAwD,8BAAA9D,CAAA,EAAAF,CAAA,gBAAAE,CAAA,iBAAAD,CAAA,gBAAAG,CAAA,IAAAF,CAAA,SAAAkE,cAAA,CAAAzC,IAAA,CAAAzB,CAAA,EAAAE,CAAA,gBAAAJ,CAAA,CAAAkE,OAAA,CAAA9D,CAAA,aAAAH,CAAA,CAAAG,CAAA,IAAAF,CAAA,CAAAE,CAAA,YAAAH,CAAA;AAAA,SAAAoE,2BAAAnE,CAAA,EAAAF,CAAA,QAAAC,CAAA,yBAAAE,MAAA,IAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,KAAAH,CAAA,qBAAAD,CAAA,QAAA0D,KAAA,CAAAE,OAAA,CAAA3D,CAAA,MAAAD,CAAA,GAAAwD,2BAAA,CAAAvD,CAAA,MAAAF,CAAA,IAAAE,CAAA,uBAAAA,CAAA,CAAAsB,MAAA,IAAAvB,CAAA,KAAAC,CAAA,GAAAD,CAAA,OAAAqE,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAnE,CAAA,WAAAA,EAAA,WAAAkE,EAAA,IAAApE,CAAA,CAAAsB,MAAA,KAAAI,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAA3B,CAAA,CAAAoE,EAAA,UAAAtE,CAAA,WAAAA,EAAAE,CAAA,UAAAA,CAAA,KAAAc,CAAA,EAAAuD,CAAA,gBAAA7C,SAAA,iJAAApB,CAAA,EAAAe,CAAA,OAAAT,CAAA,gBAAA4D,CAAA,WAAAA,EAAA,IAAAvE,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAzB,CAAA,MAAAE,CAAA,WAAAA,EAAA,QAAAF,CAAA,GAAAD,CAAA,CAAAwE,IAAA,WAAApD,CAAA,GAAAnB,CAAA,CAAA0B,IAAA,EAAA1B,CAAA,KAAAF,CAAA,WAAAA,EAAAE,CAAA,IAAAU,CAAA,OAAAN,CAAA,GAAAJ,CAAA,KAAAc,CAAA,WAAAA,EAAA,UAAAK,CAAA,YAAApB,CAAA,cAAAA,CAAA,8BAAAW,CAAA,QAAAN,CAAA;AAAA,SAAAoE,eAAAxE,CAAA,EAAAF,CAAA,WAAA2E,eAAA,CAAAzE,CAAA,KAAA0E,qBAAA,CAAA1E,CAAA,EAAAF,CAAA,KAAAyD,2BAAA,CAAAvD,CAAA,EAAAF,CAAA,KAAA6E,gBAAA;AAAA,SAAAA,iBAAA,cAAAnD,SAAA;AAAA,SAAA+B,4BAAAvD,CAAA,EAAAmB,CAAA,QAAAnB,CAAA,2BAAAA,CAAA,SAAA4D,iBAAA,CAAA5D,CAAA,EAAAmB,CAAA,OAAApB,CAAA,MAAA6E,QAAA,CAAAnD,IAAA,CAAAzB,CAAA,EAAA6E,KAAA,6BAAA9E,CAAA,IAAAC,CAAA,CAAA8E,WAAA,KAAA/E,CAAA,GAAAC,CAAA,CAAA8E,WAAA,CAAAC,IAAA,aAAAhF,CAAA,cAAAA,CAAA,GAAA0D,KAAA,CAAAC,IAAA,CAAA1D,CAAA,oBAAAD,CAAA,+CAAAiF,IAAA,CAAAjF,CAAA,IAAA6D,iBAAA,CAAA5D,CAAA,EAAAmB,CAAA;AAAA,SAAAyC,kBAAA5D,CAAA,EAAAmB,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAAnB,CAAA,CAAAsB,MAAA,MAAAH,CAAA,GAAAnB,CAAA,CAAAsB,MAAA,YAAAxB,CAAA,MAAAI,CAAA,GAAAuD,KAAA,CAAAtC,CAAA,GAAArB,CAAA,GAAAqB,CAAA,EAAArB,CAAA,IAAAI,CAAA,CAAAJ,CAAA,IAAAE,CAAA,CAAAF,CAAA,UAAAI,CAAA;AAAA,SAAAwE,sBAAA1E,CAAA,EAAAuB,CAAA,QAAAxB,CAAA,WAAAC,CAAA,gCAAAC,MAAA,IAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,KAAAH,CAAA,4BAAAD,CAAA,QAAAD,CAAA,EAAAI,CAAA,EAAAI,CAAA,EAAAI,CAAA,EAAAS,CAAA,OAAAL,CAAA,OAAAV,CAAA,iBAAAE,CAAA,IAAAP,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAzB,CAAA,GAAAuE,IAAA,QAAAhD,CAAA,QAAAZ,MAAA,CAAAZ,CAAA,MAAAA,CAAA,UAAAe,CAAA,uBAAAA,CAAA,IAAAhB,CAAA,GAAAQ,CAAA,CAAAmB,IAAA,CAAA1B,CAAA,GAAA2B,IAAA,MAAAP,CAAA,CAAA8D,IAAA,CAAAnF,CAAA,CAAA6B,KAAA,GAAAR,CAAA,CAAAG,MAAA,KAAAC,CAAA,GAAAT,CAAA,iBAAAd,CAAA,IAAAI,CAAA,OAAAF,CAAA,GAAAF,CAAA,yBAAAc,CAAA,YAAAf,CAAA,eAAAW,CAAA,GAAAX,CAAA,cAAAY,MAAA,CAAAD,CAAA,MAAAA,CAAA,2BAAAN,CAAA,QAAAF,CAAA,aAAAiB,CAAA;AAAA,SAAAsD,gBAAAzE,CAAA,QAAAyD,KAAA,CAAAE,OAAA,CAAA3D,CAAA,UAAAA,CAAA;AAAA,SAAAkF,QAAA9E,CAAA,sCAAA8E,OAAA,wBAAAjF,MAAA,uBAAAA,MAAA,CAAAE,QAAA,aAAAC,CAAA,kBAAAA,CAAA,gBAAAA,CAAA,WAAAA,CAAA,yBAAAH,MAAA,IAAAG,CAAA,CAAA0E,WAAA,KAAA7E,MAAA,IAAAG,CAAA,KAAAH,MAAA,CAAAO,SAAA,qBAAAJ,CAAA,KAAA8E,OAAA,CAAA9E,CAAA;AADA+E,MAAM,CAACC,sBAAsB,GAAG,YAAY;EAExC;EACA,IAAIC,aAAa,GAAG;IAChB;IACAC,qBAAqB,EAAE,iBAAiB;IACxCC,sBAAsB,EAAE,GAAG;IAC3BC,kBAAkB,EAAE,gBAAgB;IACpCC,kBAAkB,EAAE,yBAAyB;IAC7CC,uBAAuB,EAAE,UAAU;IACnCC,cAAc,EAAE,SAAS;IACzBC,cAAc,EAAE,WAAW;IAE3BC,eAAe,srIA6Cd;IACDC,iBAAiB,qQAKhB;IACD;IACAC,YAAY,EAAE,UAAU;IACxBC,iBAAiB,EAAE,eAAe;IAClCC,mBAAmB,EAAE,yIAAyI;IAC9JC,kBAAkB,EAAE,KAAK;IACzBC,sBAAsB,EAAE;EAC5B,CAAC;;EAED;EACA,SAASC,WAAWA,CAACC,GAAG,EAAE;IACtB,IAAI,CAACA,GAAG,EAAE,OAAO,EAAE;IACnB,IAAIC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;IACxB,IAAI,eAAe,CAACvB,IAAI,CAACsB,OAAO,CAAC,IAAI,aAAa,CAACtB,IAAI,CAACsB,OAAO,CAAC,IAAI,mBAAmB,CAACtB,IAAI,CAACsB,OAAO,CAAC,EAAE;MACnG,OAAO,EAAE;IACb;IACA,OAAOD,GAAG;EACd;;EAEA;EACA,SAASG,kBAAkBA,CAACC,IAAI,EAAE;IAC9B,IAAIC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;IACzCF,IAAI,CAACG,WAAW,GAAGJ,IAAI;IACvB,OAAOC,IAAI,CAACI,SAAS;EACzB;EAEA,SAASC,kBAAkBA,CAACC,SAAS,EAAE;IAAA,IAAAC,IAAA,EAAAC,iBAAA,EAAAC,KAAA,EAAAC,gBAAA,EAAAC,KAAA,EAAAC,iBAAA,EAAAC,KAAA,EAAAC,gBAAA,EAAAC,KAAA,EAAAC,qBAAA;IACnC,IAAI,CAACV,SAAS,IAAI9B,OAAA,CAAO8B,SAAS,MAAK,QAAQ,EAAE;MAC7C,OAAO,IAAI;IACf;IAEA,IAAMW,UAAU,GAAGhH,MAAM,CAACiH,MAAM,CAAC,CAAC,CAAC,EAAEZ,SAAS,CAAC;IAC/CW,UAAU,CAACE,KAAK,IAAAZ,IAAA,IAAAC,iBAAA,GAAGS,UAAU,CAACE,KAAK,cAAAX,iBAAA,cAAAA,iBAAA,GAAIS,UAAU,CAACG,KAAK,cAAAb,IAAA,cAAAA,IAAA,GAAI,CAAC;IAC5DU,UAAU,CAAClB,IAAI,IAAAU,KAAA,IAAAC,gBAAA,GAAGO,UAAU,CAAClB,IAAI,cAAAW,gBAAA,cAAAA,gBAAA,GAAIO,UAAU,CAACI,IAAI,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI;IAC5DQ,UAAU,CAACK,KAAK,IAAAX,KAAA,IAAAC,iBAAA,GAAGK,UAAU,CAACK,KAAK,cAAAV,iBAAA,cAAAA,iBAAA,GAAIK,UAAU,CAACM,KAAK,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI;IAC/DM,UAAU,CAACO,IAAI,GAAG9B,WAAW,EAAAmB,KAAA,IAAAC,gBAAA,GAACG,UAAU,CAACO,IAAI,cAAAV,gBAAA,cAAAA,gBAAA,GAAIG,UAAU,CAACQ,IAAI,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI,CAAC;IACzEI,UAAU,CAACS,aAAa,IAAAX,KAAA,IAAAC,qBAAA,GAAGC,UAAU,CAACS,aAAa,cAAAV,qBAAA,cAAAA,qBAAA,GAAIC,UAAU,CAACU,aAAa,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI;IAEvF,OAAOE,UAAU;EACrB;EAEA,SAASW,2BAA2BA,CAACtB,SAAS,EAAE;IAC5C,IAAI,CAACA,SAAS,IAAI9B,OAAA,CAAO8B,SAAS,MAAK,QAAQ,EAAE;MAC7C,OAAO,KAAK;IAChB;IAEA,IAAI,OAAOA,SAAS,CAACoB,aAAa,KAAK,QAAQ,IAAIpB,SAAS,CAACoB,aAAa,CAACG,WAAW,CAAC,CAAC,KAAK,UAAU,EAAE;MACrG,OAAO,IAAI;IACf;IAEA,IAAI,OAAOvB,SAAS,CAACkB,IAAI,KAAK,QAAQ,IAAI,wCAAwC,CAAClD,IAAI,CAACgC,SAAS,CAACkB,IAAI,CAAC,EAAE;MACrG,OAAO,IAAI;IACf;IAEA,OAAO,KAAK;EAChB;EAEA,SAASM,mBAAmBA,CAACC,UAAU,EAAE;IACrC,IAAI,CAACA,UAAU,IAAIvD,OAAA,CAAOuD,UAAU,MAAK,QAAQ,EAAE;MAC/C,OAAO,CAAC,CAAC;IACb;IAEA,IAAMd,UAAU,GAAG,CAAC,CAAC;IAErB,SAAAe,EAAA,MAAAC,eAAA,GAA2BhI,MAAM,CAACiI,OAAO,CAACH,UAAU,CAAC,EAAAC,EAAA,GAAAC,eAAA,CAAArH,MAAA,EAAAoH,EAAA,IAAE;MAAA,IAAAG,mBAAA;MAAlD,IAAAC,kBAAA,GAAAtE,cAAA,CAAAmE,eAAA,CAAAD,EAAA;QAAOK,GAAG,GAAAD,kBAAA;QAAEnH,KAAK,GAAAmH,kBAAA;MAClBnB,UAAU,CAACoB,GAAG,CAAC,IAAAF,mBAAA,GAAG9B,kBAAkB,CAACpF,KAAK,CAAC,cAAAkH,mBAAA,cAAAA,mBAAA,GAAI,CAAC,CAAC;IACrD;IAEA,OAAOlB,UAAU;EACrB;EAEA,SAASqB,gBAAgBA,CAAChC,SAAS,EAAE+B,GAAG,EAAE;IACtC,OAAO/B,SAAS,CAACgB,KAAK,IAAIhB,SAAS,CAACP,IAAI,IAAIsC,GAAG;EACnD;EAEA,SAASE,oBAAoBA,CAACC,OAAO,EAAET,UAAU,EAAE;IAC/C,IAAIU,gBAAgB,GAAG,CAACD,OAAO,IAAI,EAAE,EAAE3C,IAAI,CAAC,CAAC;IAC7C,IAAM6C,iBAAiB,GAAGZ,mBAAmB,CAACC,UAAU,CAAC;IAEzD,IAAI,CAACU,gBAAgB,IAAI,CAACxI,MAAM,CAAC0I,IAAI,CAACD,iBAAiB,CAAC,CAAC9H,MAAM,EAAE;MAC7D,OAAO;QAAE4H,OAAO,EAAEC,gBAAgB;QAAEG,SAAS,EAAE;MAAG,CAAC;IACvD;IAEA,IAAMC,SAAS,GAAG5I,MAAM,CAACiI,OAAO,CAACQ,iBAAiB,CAAC,CAACI,MAAM,CAAC,UAAAC,KAAA;MAAA,IAAAC,KAAA,GAAAlF,cAAA,CAAAiF,KAAA;QAAEV,GAAG,GAAAW,KAAA;MAAA,OAAMP,gBAAgB,CAACQ,QAAQ,CAACZ,GAAG,CAAC;IAAA,EAAC;IAErG,IAAI,CAACQ,SAAS,CAACjI,MAAM,EAAE;MACnB,OAAO;QAAE4H,OAAO,EAAEC,gBAAgB;QAAEG,SAAS,EAAE;MAAG,CAAC;IACvD;IAEAC,SAAS,CAACK,IAAI,CAAC,UAAAC,KAAA,EAAAC,KAAA;MAAA,IAAAC,KAAA,GAAAvF,cAAA,CAAAqF,KAAA;QAAI1I,CAAC,GAAA4I,KAAA;MAAA,IAAAC,KAAA,GAAAxF,cAAA,CAAAsF,KAAA;QAAMG,CAAC,GAAAD,KAAA;MAAA,OAAM7I,CAAC,CAAC0G,KAAK,GAAGoC,CAAC,CAACpC,KAAK;IAAA,EAAC;IAEnD,IAAMyB,SAAS,GAAG,EAAE;IACpB,IAAIY,YAAY,GAAG,CAAC;IAAC,IAAAC,SAAA,GAAAhG,0BAAA,CAEMoF,SAAS;MAAAa,KAAA;IAAA;MAApC,KAAAD,SAAA,CAAA7F,CAAA,MAAA8F,KAAA,GAAAD,SAAA,CAAAjK,CAAA,IAAAwB,IAAA,GAAsC;QAAA,IAAA2I,WAAA,GAAA7F,cAAA,CAAA4F,KAAA,CAAAzI,KAAA;UAA1BoH,GAAG,GAAAsB,WAAA;UAAE1I,KAAK,GAAA0I,WAAA;QAClB,IAAMC,WAAW,aAAAC,MAAA,CAAaL,YAAY,OAAAK,MAAA,CAAI5I,KAAK,CAACkG,KAAK,IAAIqC,YAAY,OAAI;QAC7Ef,gBAAgB,GAAGA,gBAAgB,CAACqB,UAAU,CAACzB,GAAG,EAAEuB,WAAW,CAAC;QAChEhB,SAAS,CAACrE,IAAI,CAAC;UACXwF,YAAY,EAAE1B,GAAG;UACjBmB,YAAY,EAAEA,YAAY;UAC1BQ,KAAK,EAAE1B,gBAAgB,CAACrH,KAAK,EAAEoH,GAAG,CAAC;UACnCb,IAAI,EAAEvG,KAAK,CAACuG,IAAI,IAAI,IAAI;UACxByC,UAAU,EAAErC,2BAA2B,CAAC3G,KAAK,CAAC;UAC9C2I,WAAW,EAAEA;QACjB,CAAC,CAAC;QAEFJ,YAAY,EAAE;MAClB;IAAC,SAAAU,GAAA;MAAAT,SAAA,CAAArK,CAAA,CAAA8K,GAAA;IAAA;MAAAT,SAAA,CAAArJ,CAAA;IAAA;IAED,SAAA+J,GAAA,MAAAC,UAAA,GAAuBxB,SAAS,EAAAuB,GAAA,GAAAC,UAAA,CAAAxJ,MAAA,EAAAuJ,GAAA,IAAE;MAA7B,IAAME,QAAQ,GAAAD,UAAA,CAAAD,GAAA;MACf1B,gBAAgB,GAAGA,gBAAgB,CAACqB,UAAU,CAACO,QAAQ,CAACT,WAAW,UAAAC,MAAA,CAAUQ,QAAQ,CAACb,YAAY,WAAQ,CAAC;IAC/G;IAEAf,gBAAgB,GAAGA,gBAAgB,CAACqB,UAAU,CAAC,aAAa,EAAE,yBAAyB,CAAC;IAExF,OAAO;MACHtB,OAAO,EAAEC,gBAAgB;MACzBG,SAAS,EAAEA,SAAS,CAAC0B,GAAG,CAAC,UAAAC,MAAA;QAAA,IAAGX,WAAW,GAAAW,MAAA,CAAXX,WAAW;UAAKS,QAAQ,GAAAlH,wBAAA,CAAAoH,MAAA,EAAAC,SAAA;QAAA,OAAOH,QAAQ;MAAA;IACvE,CAAC;EACL;EAEA,SAASI,gBAAgBA,CAACjC,OAAO,EAAEI,SAAS,EAAE;IAC1C,IAAI8B,WAAW,GAAG,CAAClC,OAAO,IAAI,EAAE,EAAE3C,IAAI,CAAC,CAAC;IAExC,IAAI,CAAC6E,WAAW,IAAI,CAAC3H,KAAK,CAACE,OAAO,CAAC2F,SAAS,CAAC,IAAIA,SAAS,CAAChI,MAAM,KAAK,CAAC,EAAE;MACrE,OAAO8J,WAAW;IACtB;IAAC,IAAAC,UAAA,GAAAlH,0BAAA,CAEsBmF,SAAS;MAAAgC,MAAA;IAAA;MAAhC,KAAAD,UAAA,CAAA/G,CAAA,MAAAgH,MAAA,GAAAD,UAAA,CAAAnL,CAAA,IAAAwB,IAAA,GAAkC;QAAA,IAAvBqJ,QAAQ,GAAAO,MAAA,CAAA3J,KAAA;QACfyJ,WAAW,GAAGA,WAAW,CAACZ,UAAU,CAACO,QAAQ,CAACN,YAAY,MAAAF,MAAA,CAAMQ,QAAQ,CAACb,YAAY,MAAG,CAAC;MAC7F;IAAC,SAAAU,GAAA;MAAAS,UAAA,CAAAvL,CAAA,CAAA8K,GAAA;IAAA;MAAAS,UAAA,CAAAvK,CAAA;IAAA;IAEDsK,WAAW,IAAI,mBAAmB;IAAC,IAAAG,UAAA,GAAApH,0BAAA,CAEZmF,SAAS;MAAAkC,MAAA;IAAA;MAAhC,KAAAD,UAAA,CAAAjH,CAAA,MAAAkH,MAAA,GAAAD,UAAA,CAAArL,CAAA,IAAAwB,IAAA,GAAkC;QAAA,IAAvBqJ,SAAQ,GAAAS,MAAA,CAAA7J,KAAA;QACfyJ,WAAW,OAAAb,MAAA,CAAOQ,SAAQ,CAACb,YAAY,QAAAK,MAAA,CAAKQ,SAAQ,CAACL,KAAK,CAAE;QAE5D,IAAIK,SAAQ,CAAC7C,IAAI,EAAE;UACfkD,WAAW,UAAAb,MAAA,CAAUQ,SAAQ,CAAC7C,IAAI,CAAE;QACxC;QAEAkD,WAAW,IAAI,IAAI;MACvB;IAAC,SAAAR,GAAA;MAAAW,UAAA,CAAAzL,CAAA,CAAA8K,GAAA;IAAA;MAAAW,UAAA,CAAAzK,CAAA;IAAA;IAED,OAAOsK,WAAW,CAACK,OAAO,CAAC,CAAC;EAChC;EAEA,SAASC,yBAAyBA,CAACC,OAAO,EAAElD,UAAU,EAAE;IACpD,IAAMW,iBAAiB,GAAGZ,mBAAmB,CAACC,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAIkD,OAAO,CAAClD,UAAU,CAAC;IAC/E,IAAMmD,UAAU,GAAG,OAAOD,OAAO,CAACC,UAAU,KAAK,QAAQ,GACnDD,OAAO,CAACC,UAAU,GAClB,OAAOD,OAAO,CAACzC,OAAO,KAAK,QAAQ,GAC/ByC,OAAO,CAACzC,OAAO,GACf,EAAE;IACZ,IAAM2C,eAAe,GAAG5C,oBAAoB,CAAC2C,UAAU,EAAExC,iBAAiB,CAAC;IAE3EuC,OAAO,CAACC,UAAU,GAAGA,UAAU;IAC/BD,OAAO,CAACzC,OAAO,GAAG0C,UAAU;IAC5BD,OAAO,CAACG,cAAc,GAAGD,eAAe,CAAC3C,OAAO;IAChDyC,OAAO,CAAClD,UAAU,GAAGW,iBAAiB;IACtCuC,OAAO,CAACI,kBAAkB,GAAGF,eAAe,CAACvC,SAAS;IACtDqC,OAAO,CAACP,WAAW,GAAGD,gBAAgB,CAACS,UAAU,EAAEC,eAAe,CAACvC,SAAS,CAAC;IAC7EqC,OAAO,CAACK,WAAW,GAAGC,oBAAoB,CAACJ,eAAe,CAAC3C,OAAO,EAAEyC,OAAO,CAAC;IAE5E,OAAOA,OAAO;EAClB;EAEA,IAAMO,QAAQ,GAAG,IAAIC,MAAM,CAACC,QAAQ,CAAC,CAAC;;EAEtC;EACAF,QAAQ,CAAChE,IAAI,GAAG,UAAUmE,IAAI,EAAE;IAC5B,IAAIC,IAAI,GAAGlG,WAAW,CAACiG,IAAI,CAACC,IAAI,CAAC;IACjC,IAAI,CAACA,IAAI,EAAE,OAAOD,IAAI,CAAC5F,IAAI,IAAI,EAAE;IACjC,oBAAA8D,MAAA,CAAmB+B,IAAI,uDAAA/B,MAAA,CAA+C8B,IAAI,CAAC5F,IAAI;EACnF,CAAC;;EAED;EACAyF,QAAQ,CAACK,IAAI,GAAG,UAAUF,IAAI,EAAE;IAC5B,IAAIE,IAAI,GAAGF,IAAI,CAAC5F,IAAI,IAAI,EAAE;IAC1B,IAAI+F,IAAI,GAAG,CAACH,IAAI,CAACG,IAAI,IAAI,EAAE,EAAEjG,IAAI,CAAC,CAAC;IACnC,IAAIkG,WAAW,GAAGF,IAAI;IAEtB,IAAI,OAAOG,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAIF,IAAI,IAAIE,IAAI,CAACC,WAAW,CAACH,IAAI,CAAC,EAAE;QAChC,IAAI;UACAC,WAAW,GAAGC,IAAI,CAACE,SAAS,CAACL,IAAI,EAAE;YAAEM,QAAQ,EAAEL;UAAK,CAAC,CAAC,CAAC7K,KAAK;QAChE,CAAC,CAAC,OAAOmL,CAAC,EAAE,CAAE;MAClB,CAAC,MAAM;QACH,IAAI;UACAL,WAAW,GAAGC,IAAI,CAACK,aAAa,CAACR,IAAI,CAAC,CAAC5K,KAAK;QAChD,CAAC,CAAC,OAAOmL,CAAC,EAAE,CAAE;MAClB;IACJ,CAAC,MAAM;MACHL,WAAW,GAAGjG,kBAAkB,CAAC+F,IAAI,CAAC;IAC1C;IAEA,IAAIS,WAAW,GAAGR,IAAI,GAAGhG,kBAAkB,CAACgG,IAAI,CAAC,GAAG,MAAM;IAC1D,2IAAAjC,MAAA,CAAmIyC,WAAW,oKAAAzC,MAAA,CAAwJiC,IAAI,GAAG,YAAY,GAAGA,IAAI,GAAG,EAAE,SAAAjC,MAAA,CAAKkC,WAAW;EACzV,CAAC;;EAED;EACA;EACAP,QAAQ,CAACe,KAAK,GAAG,UAAUZ,IAAI,EAAE;IAC7B,IAAMa,GAAG,GAAG9G,WAAW,CAACiG,IAAI,CAACC,IAAI,CAAC;IAClC,IAAI,CAACY,GAAG,EAAE,OAAO,EAAE;IACnB,IAAMC,GAAG,GAAGd,IAAI,CAAC5F,IAAI,IAAIpB,aAAa,CAACC,qBAAqB;IAC5D,IAAM8H,QAAQ,GAAG/H,aAAa,CAACE,sBAAsB;IACrD,4EAAAgF,MAAA,CACgB2C,GAAG,eAAA3C,MAAA,CAAU4C,GAAG,oDAAA5C,MAAA,CAA6C6C,QAAQ,0FAAA7C,MAAA,CAElE2C,GAAG,sCAAA3C,MAAA,CAA+B4C,GAAG,iBAAA5C,MAAA,CAAYlF,aAAa,CAACG,kBAAkB;EAKxG,CAAC;;EAED;EACA,IAAI6H,YAAY,GAAG,CAAC;;EAEpB;EACA,IAAIC,cAAc,GAAG,EAAE;;EAEvB;EACAnI,MAAM,CAACoI,cAAc,GAAGpI,MAAM,CAACoI,cAAc,IAAI,CAAC,CAAC;EAEnD,SAASC,eAAeA,CAACC,OAAO,EAAE;IAC9B,OAAO,oIAAAlD,MAAA,CACckD,OAAO,iBAAa,WAC3B,yBACY,4GAAAlD,MAAA,CACgFkD,OAAO,iBAAAlD,MAAA,CAAYlF,aAAa,CAACI,kBAAkB,QAAI,mDAAA8E,MAAA,CAC7GlF,aAAa,CAACK,uBAAuB,CAAE,cAC1E,WACH;EAClB;;EAEA;EACA;EACAyG,MAAM,CAACuB,GAAG,CAAC;IACPC,UAAU,EAAE,CAAC;MACT5I,IAAI,EAAE,OAAO;MACb6I,KAAK,EAAE,OAAO;MACdC,KAAK,WAALA,KAAKA,CAACX,GAAG,EAAE;QACP,IAAMY,GAAG,GAAGZ,GAAG,CAAClJ,OAAO,CAAC,SAAS,CAAC;QAClC,OAAO8J,GAAG,IAAI,CAAC,GAAGA,GAAG,GAAGC,SAAS;MACrC,CAAC;MACDC,SAAS,WAATA,SAASA,CAACd,GAAG,EAAE;QACX,IAAMe,SAAS,GAAGC,qBAAqB,CAAChB,GAAG,CAAC;QAC5C,IAAI,CAACe,SAAS,IAAIA,SAAS,CAACE,UAAU,KAAK,CAAC,EAAE;UAC1C,OAAOJ,SAAS;QACpB;QAEA,IAAMN,OAAO,iBAAAlD,MAAA,CAAiB,EAAE8C,YAAY,CAAE;QAE9C,OAAO;UACHe,IAAI,EAAE,OAAO;UACbC,GAAG,EAAEnB,GAAG,CAACoB,SAAS,CAAC,CAAC,EAAEL,SAAS,CAACM,QAAQ,CAAC;UACzCd,OAAO,EAAEA,OAAO;UAChBe,IAAI,EAAEP,SAAS,CAACO;QACpB,CAAC;MACL,CAAC;MACDtC,QAAQ,WAARA,QAAQA,CAACuC,KAAK,EAAE;QACZnB,cAAc,CAACrI,IAAI,CAAC;UAAEwI,OAAO,EAAEgB,KAAK,CAAChB,OAAO;UAAEiB,MAAM,EAAED,KAAK,CAACD;QAAK,CAAC,CAAC;QACnErJ,MAAM,CAACoI,cAAc,CAACkB,KAAK,CAAChB,OAAO,CAAC,GAAGgB,KAAK,CAACD,IAAI;QACjD,OAAOhB,eAAe,CAACiB,KAAK,CAAChB,OAAO,CAAC;MACzC;IACJ,CAAC;EACL,CAAC,CAAC;;EAEF;EACA,SAASS,qBAAqBA,CAACzH,IAAI,EAAE;IACjC,IAAMgI,KAAK,GAAG,SAAS;IACvB,IAAMZ,KAAK,GAAGpH,IAAI,CAACzC,OAAO,CAACyK,KAAK,CAAC;IACjC,IAAIZ,KAAK,GAAG,CAAC,EAAE;MACX,OAAO,IAAI;IACf;;IAEA;IACA,IAAMc,SAAS,GAAGd,KAAK,GAAGY,KAAK,CAACnN,MAAM;IACtC,IAAIhB,CAAC,GAAGqO,SAAS;IACjB,OAAOrO,CAAC,GAAGmG,IAAI,CAACnF,MAAM,KAAKmF,IAAI,CAACnG,CAAC,CAAC,KAAK,GAAG,IAAImG,IAAI,CAACnG,CAAC,CAAC,KAAK,IAAI,IAAImG,IAAI,CAACnG,CAAC,CAAC,KAAK,IAAI,IAAImG,IAAI,CAACnG,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;MACrGA,CAAC,EAAE;IACP;IAEA,IAAIA,CAAC,IAAImG,IAAI,CAACnF,MAAM,IAAImF,IAAI,CAACnG,CAAC,CAAC,KAAK,GAAG,EAAE;MACrC,OAAO,IAAI;IACf;IAEA,IAAIsO,KAAK,GAAG,CAAC;IACb,IAAIC,QAAQ,GAAG,KAAK;IACpB,IAAIC,MAAM,GAAG,KAAK;IAElB,OAAOxO,CAAC,GAAGmG,IAAI,CAACnF,MAAM,EAAEhB,CAAC,EAAE,EAAE;MACzB,IAAMyO,EAAE,GAAGtI,IAAI,CAACnG,CAAC,CAAC;MAElB,IAAIuO,QAAQ,EAAE;QACV,IAAIC,MAAM,EAAE;UACRA,MAAM,GAAG,KAAK;UACd;QACJ;QACA,IAAIC,EAAE,KAAK,IAAI,EAAE;UACbD,MAAM,GAAG,IAAI;UACb;QACJ;QACA,IAAIC,EAAE,KAAK,GAAG,EAAE;UACZF,QAAQ,GAAG,KAAK;QACpB;QACA;MACJ;MAEA,IAAIE,EAAE,KAAK,GAAG,EAAE;QACZF,QAAQ,GAAG,IAAI;QACf;MACJ;MAEA,IAAIE,EAAE,KAAK,GAAG,EAAE;QACZH,KAAK,EAAE;MACX,CAAC,MAAM,IAAIG,EAAE,KAAK,GAAG,EAAE;QACnBH,KAAK,EAAE;QACP,IAAIA,KAAK,KAAK,CAAC,EAAE;UACb,IAAMI,OAAO,GAAG1O,CAAC;UACjB;UACA,IAAM2O,iBAAiB,GAAGxI,IAAI,CAACzC,OAAO,CAAC,GAAG,EAAEgL,OAAO,GAAG,CAAC,CAAC;UACxD,IAAIC,iBAAiB,GAAG,CAAC,EAAE;YACvB,OAAO,IAAI;UACf;UAEA,IAAMT,IAAI,GAAG/H,IAAI,CAAC6H,SAAS,CAACK,SAAS,EAAEK,OAAO,GAAG,CAAC,CAAC,CAACzI,IAAI,CAAC,CAAC;UAC1D,OAAO;YACH4H,UAAU,EAAEN,KAAK;YACjBU,QAAQ,EAAEU,iBAAiB,GAAG,CAAC;YAC/BT,IAAI,EAAEA;UACV,CAAC;QACL;MACJ;IACJ;IAEA,OAAO,IAAI;EACf;EAEA,SAASU,qBAAqBA,CAACvD,OAAO,EAAE;IACpC,IAAI,CAACA,OAAO,IAAI,CAACA,OAAO,CAAC2B,cAAc,IAAI,CAAC3B,OAAO,CAAC2B,cAAc,CAAChM,MAAM,EAAE;MACvE;IACJ;;IAEA;IACA,IAAM6N,MAAM,GAAA/L,kBAAA,CAAOuI,OAAO,CAAC2B,cAAc,CAAC;IAC1C3B,OAAO,CAAC2B,cAAc,GAAG,EAAE;;IAE3B;IACA;IACA8B,qBAAqB,CAAC,YAAM;MAAA,IAAAC,UAAA,GAAAlL,0BAAA,CACRgL,MAAM;QAAAG,MAAA;MAAA;QAAtB,KAAAD,UAAA,CAAA/K,CAAA,MAAAgL,MAAA,GAAAD,UAAA,CAAAnP,CAAA,IAAAwB,IAAA,GAAwB;UAAA,IAAbnB,CAAC,GAAA+O,MAAA,CAAA3N,KAAA;UACR,IAAM4N,MAAM,GAAG5I,QAAQ,CAAC6I,cAAc,CAACjP,CAAC,CAACkN,OAAO,CAAC;UACjD,IAAI,CAAC8B,MAAM,EAAE;YACT;UACJ;UAEA,IAAI,OAAOE,KAAK,KAAK,WAAW,EAAE;YAC9BC,OAAO,CAACC,IAAI,CAAC,+LAA+L,CAAC;YAC7M;UACJ;;UAEA;UACA;UACA,IAAIJ,MAAM,CAACK,YAAY,KAAK,IAAI,EAAE;YAC9BzK,MAAM,CAACoI,cAAc,CAAChN,CAAC,CAACkN,OAAO,CAAC,GAAGlN,CAAC,CAACmO,MAAM;YAC3C;UACJ;UAEA,IAAI;YAAA,IAAAmB,YAAA,EAAAC,aAAA,EAAAC,qBAAA;YACA;YACA,IAAIR,MAAM,CAACS,cAAc,EAAE;cACvBT,MAAM,CAACS,cAAc,CAACC,OAAO,CAAC,CAAC;YACnC;YAEA,IAAMC,GAAG,GAAG,OAAO3P,CAAC,CAACmO,MAAM,KAAK,QAAQ,GAAGyB,IAAI,CAACC,KAAK,CAAC7P,CAAC,CAACmO,MAAM,CAAC,GAAGnO,CAAC,CAACmO,MAAM;YAC1E,CAAAmB,YAAA,GAAAK,GAAG,CAACG,OAAO,cAAAR,YAAA,cAAAA,YAAA,GAAXK,GAAG,CAACG,OAAO,GAAK,CAAC,CAAC;YAClBH,GAAG,CAACG,OAAO,CAACC,UAAU,GAAG,IAAI;YAC7BJ,GAAG,CAACG,OAAO,CAACE,mBAAmB,GAAG,IAAI;YACtC,CAAAR,qBAAA,IAAAD,aAAA,GAAAI,GAAG,CAACG,OAAO,EAACG,WAAW,cAAAT,qBAAA,cAAAA,qBAAA,GAAvBD,aAAA,CAAYU,WAAW,GAAK,CAAC,GAAG,CAAC;YAEjCjB,MAAM,CAACS,cAAc,GAAG,IAAIP,KAAK,CAACF,MAAM,EAAEW,GAAG,CAAC;UAClD,CAAC,CAAC,OAAOpQ,CAAC,EAAE;YACR4P,OAAO,CAACe,KAAK,CAAC,uBAAuB,EAAE3Q,CAAC,CAAC;UAC7C;QACJ;MAAC,SAAA8K,GAAA;QAAAyE,UAAA,CAAAvP,CAAA,CAAA8K,GAAA;MAAA;QAAAyE,UAAA,CAAAvO,CAAA;MAAA;IACL,CAAC,CAAC;EACN;;EAEA;EACA;EACA;EACA,SAASmL,oBAAoBA,CAAC/C,OAAO,EAAEyC,OAAO,EAAE;IAC5C2B,cAAc,GAAG,EAAE;IACnB,IAAMoD,IAAI,GAAGvE,MAAM,CAACiE,KAAK,CAAClH,OAAO,EAAE;MAAEgD,QAAQ,EAARA;IAAS,CAAC,CAAC;IAChDP,OAAO,CAAC2B,cAAc,GAAGA,cAAc,CAAChM,MAAM,GAAG,CAAC,GAAA8B,kBAAA,CAAOkK,cAAc,IAAI,EAAE;IAC7E,OAAOqD,SAAS,CAACC,QAAQ,CAACF,IAAI,EAAE;MAAEG,QAAQ,EAAE,CAAC,QAAQ,CAAC;MAAEC,QAAQ,EAAE,CAAC,QAAQ;IAAE,CAAC,CAAC;EACnF;EAEA,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,cAAc,EAAK;IAEnC,IAAMtC,MAAM,GAAG/N,MAAM,CAACiH,MAAM,CAAC,CAAC,CAAC,EAAEvC,aAAa,EAAE2L,cAAc,CAAC;IAC/D;IACA3L,aAAa,GAAGqJ,MAAM;IAEtB,IAAI,CAACA,MAAM,CAACuC,aAAa,EAAE;MACvBvB,OAAO,CAACe,KAAK,CAAC,gCAAgC,CAAC;MAC/C;IACJ;IAEA,IAAI,CAAC/B,MAAM,CAACwC,kBAAkB,EAAE;MAC5BxB,OAAO,CAACe,KAAK,CAAC,qCAAqC,CAAC;MACpD;IACJ;IAEA,IAAI,CAAC/B,MAAM,CAACyC,4BAA4B,EAAE;MACtCzB,OAAO,CAACe,KAAK,CAAC,+CAA+C,CAAC;MAC9D;IACJ;IAEA,IAAI,CAAC/B,MAAM,CAAC0C,oBAAoB,EAAE;MAC9B1B,OAAO,CAACe,KAAK,CAAC,uCAAuC,CAAC;MACtD;IACJ;IAEA,IAAI,CAAC/B,MAAM,CAAC2C,yBAAyB,EAAE;MACnC3B,OAAO,CAACe,KAAK,CAAC,4CAA4C,CAAC;MAC3D;IACJ;IAEA,IAAMa,GAAG,GAAGC,GAAG,CAACC,SAAS,CAAC;MACtBnF,IAAI,WAAJA,IAAIA,CAAA,EAAG;QACH,OAAO;UACHoF,YAAY,EAAE,IAAI;UAClBC,aAAa,EAAE,IAAI;UACnBC,aAAa,EAAE,IAAI;UACnBrH,WAAW,EAAE,IAAI;UACjBsH,oBAAoB,EAAE,KAAK;UAC3BC,oBAAoB,EAAE,IAAI;UAC1BC,WAAW,EAAE,KAAK;UAClBC,gBAAgB,EAAE,KAAK;UACvBC,UAAU,EAAE,IAAI;UAChBC,MAAM,EAAE,IAAI;UACZC,QAAQ,EAAE,EAAE;UACZC,MAAM,EAAE,EAAE;UACVC,kBAAkB,EAAE,IAAIC,GAAG,CAAC,CAAC;UAC7BC,aAAa,EAAE,KAAK;UACpBC,mBAAmB,EAAE,IAAI;UACzBC,oBAAoB,EAAE,IAAI;UAC1BC,WAAW,EAAE,KAAK;UAClBC,aAAa,EAAE,IAAI;UACnBC,kBAAkB,EAAE,EAAE;UACtBC,SAAS,EAAE,IAAI;UACfC,mBAAmB,EAAEnE,MAAM,CAACoE,QAAQ,KAAK,YAAY,IAAIpE,MAAM,CAACoE,QAAQ,KAAK,cAAc;UAC3FC,mBAAmB,EAAErE,MAAM,CAACoE,QAAQ,KAAK,cAAc,IAAI,CAAC,CAACpE,MAAM,CAACqE,mBAAmB;UACvFC,YAAY,EAAEtE,MAAM,CAACsE,YAAY,IAAI,IAAI;UACzCC,WAAW,EAAE,EAAE;UACfC,cAAc,EAAE,EAAE;UAClBC,cAAc,EAAE,KAAK;UACrBC,mBAAmB,EAAE,IAAI;UACzBC,eAAe,EAAE,IAAI;UACrBC,sBAAsB,EAAE,CAAC,CAAC;UAC1BC,aAAa,EAAE,CAAC,CAAC;UACjBC,aAAa,EAAE,mBAAmB,GAAGC,IAAI,CAACC,MAAM,CAAC,CAAC,CAAC9O,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;UACxE8O,uBAAuB,EAAEjF,MAAM,CAACoE,QAAQ,KAAK,cAAc;UAC3Dc,kBAAkB,EAAE,IAAI;UACxBC,kBAAkB,EAAE,KAAK;UACzBC,aAAa,EAAE,EAAE;UACjBC,yBAAyB,EAAE,CAAC;QAChC,CAAC;MACL,CAAC;MACDC,QAAQ,EAAE;QACNC,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UACjB,KAAK,IAAI3T,CAAC,GAAG,IAAI,CAAC4R,QAAQ,CAAC5Q,MAAM,GAAG,CAAC,EAAEhB,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC4R,QAAQ,CAAC5R,CAAC,CAAC,CAAC4T,IAAI,KAAK,WAAW,EAAE;cACvC,OAAO5T,CAAC;YACZ;UACJ;UACA,OAAO,CAAC,CAAC;QACb;MACJ,CAAC;MACD6T,OAAO,EAAE;QACLC,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UACjB,IAAI,CAACrC,gBAAgB,GAAG,IAAI;QAChC,CAAC;QACKsC,eAAe,WAAfA,eAAeA,CAAA,EAAG;UAAA,IAAAC,KAAA;UAAA,OAAAvR,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAAmS,QAAA;YAAA,IAAAC,EAAA;YAAA,OAAAtS,YAAA,GAAAC,CAAA,WAAAsS,QAAA;cAAA,kBAAAA,QAAA,CAAA1T,CAAA,GAAA0T,QAAA,CAAAvU,CAAA;gBAAA;kBACpBoU,KAAI,CAACI,UAAU,GAAG,IAAIC,OAAO,CAACC,oBAAoB,CAAC,CAAC,CAC/CC,OAAO,CAACnG,MAAM,CAACuC,aAAa,CAAC,CAC7B6D,sBAAsB,CAAC,CAAC,CACxBC,KAAK,CAAC,CAAC;;kBAEZ;kBACA;kBACAT,KAAI,CAACI,UAAU,CAACM,2BAA2B,GAAG,MAAM;kBACpDV,KAAI,CAACI,UAAU,CAACO,+BAA+B,GAAG,KAAK;kBAEvDX,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,iBAAiB,EAAE,UAAC7I,IAAI,EAAK;oBAAA,IAAA8I,cAAA;oBAC5Cb,KAAI,CAACc,qBAAqB,CAAC/I,IAAI,CAACgJ,MAAM,EAAE,IAAI,CAAC;oBAC7Cf,KAAI,CAACpC,QAAQ,GAAG,EAAE,CAAC;oBACnB,IAAMoD,UAAU,GAAG3O,QAAQ,CAAC4O,aAAa,CAAC,+HAA+H,CAAC;oBAC1K,IAAID,UAAU,IAAIjJ,IAAI,CAACrE,KAAK,EAAE;sBAC1BsN,UAAU,CAAC3T,KAAK,GAAG0K,IAAI,CAACrE,KAAK;oBACjC;oBAEA,EAAAmN,cAAA,GAAC9I,IAAI,CAAC6F,QAAQ,cAAAiD,cAAA,cAAAA,cAAA,GAAI,EAAE,EAAEK,OAAO,CAAC,UAAAC,GAAG,EAAI;sBACjCnB,KAAI,CAACoB,UAAU,CAACD,GAAG,CAAC;sBAEpBnB,KAAI,CAACqB,SAAS,CAAC,YAAM;wBACjBzG,qBAAqB,CAACuG,GAAG,CAAC;sBAC9B,CAAC,CAAC;oBACN,CAAC,CAAC;kBACN,CAAC,CAAC;kBAEFnB,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,eAAe,EAAE,UAACG,MAAM,EAAErN,KAAK,EAAK;oBACnD;oBACA;oBACA,IAAM4N,WAAW,GAAGjP,QAAQ,CAAC4O,aAAa,yDAAAhL,MAAA,CAAwD8K,MAAM,QAAI,CAAC;oBAC7G,IAAIO,WAAW,EAAE;sBACbA,WAAW,CAAC/O,WAAW,GAAGmB,KAAK,IAAI0G,MAAM,CAAC3I,YAAY;oBAC1D;oBAEA,IAAMuP,UAAU,GAAG3O,QAAQ,CAAC4O,aAAa,CAAC,+HAA+H,CAAC;oBAC1K,IAAID,UAAU,IAAItN,KAAK,EAAE;sBACrBsN,UAAU,CAAC3T,KAAK,GAAGqG,KAAK;oBAC5B;oBAEAsM,KAAI,CAACuB,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC;kBACnD,CAAC,CAAC;kBAEFvB,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,cAAc,EAAE,UAACzE,KAAK,EAAK;oBAC1Cf,OAAO,CAACe,KAAK,CAAC,iBAAiB,EAAEA,KAAK,CAAC;oBACvC6D,KAAI,CAACuB,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC;oBAEpD,IAAIvB,KAAI,CAAC7B,WAAW,EAAE;sBAClB6B,KAAI,CAACwB,aAAa,CAAC,CAAC;oBACxB;kBACJ,CAAC,CAAC;kBAEFxB,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mBAAmB,EAAE,UAACG,MAAM,EAAE5O,IAAI,EAAEsP,OAAO,EAAK;oBAC/D,IAAIzB,KAAI,CAACT,kBAAkB,EAAE;sBACzB,IAAI,CAACkC,OAAO,IAAItP,IAAI,EAAE;wBAClB6N,KAAI,CAAC0B,8BAA8B,GAAGvP,IAAI;wBAC1C,IAAIwP,OAAO,GAAGxP,IAAI,CAACyP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;wBACrF,IAAIxF,IAAI,GAAG,mCAAmC,GAAGuF,OAAO,GAAG,MAAM;;wBAEjE;wBACA,IAAI,CAAC3B,KAAI,CAAC6B,2BAA2B,EAAE;0BACnC7B,KAAI,CAAC8B,eAAe,CAAC,CAAC;0BACtB9B,KAAI,CAAC6B,2BAA2B,GAAG;4BAC/BjC,IAAI,EAAE,MAAM;4BACZhL,OAAO,EAAEzC,IAAI;4BACbuF,WAAW,EAAE0E,IAAI;4BACjB2F,SAAS,EAAE;0BACf,CAAC;0BACD/B,KAAI,CAACpC,QAAQ,CAACjN,IAAI,CAACqP,KAAI,CAAC6B,2BAA2B,CAAC;wBACxD,CAAC,MAAM;0BACH7B,KAAI,CAAC6B,2BAA2B,CAACjN,OAAO,GAAGzC,IAAI;0BAC/C6N,KAAI,CAAC6B,2BAA2B,CAACnK,WAAW,GAAG0E,IAAI;wBACvD;wBACA4D,KAAI,CAACgC,cAAc,CAAC,CAAC;sBACzB;sBACA;oBACJ;oBAEA,IAAI7P,IAAI,IAAI,CAAC6N,KAAI,CAACiC,eAAe,EAAE;sBAC/BjC,KAAI,CAACnC,MAAM,GAAGmC,KAAI,CAAC3B,kBAAkB,GAAGlM,IAAI;sBAC5C,IAAI6N,KAAI,CAAC7C,YAAY,EAAE;wBACnB6C,KAAI,CAAC7C,YAAY,CAAC9P,KAAK,GAAG2S,KAAI,CAACnC,MAAM;wBACrCmC,KAAI,CAAC7C,YAAY,CAAC+E,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,CAAC,CAAC;sBACvD;oBACJ;kBACJ,CAAC,CAAC;kBAEFnC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,gCAAgC,EAAE,UAACG,MAAM,EAAE5O,IAAI,EAAK;oBACnE,IAAIA,IAAI,EAAE;sBACN6N,KAAI,CAACoC,SAAS,CAAC,CAAC;;sBAEhB;sBACA;sBACA,IAAIpC,KAAI,CAACqC,6BAA6B,EAAE;wBACpC,IAAIC,MAAM,GAAGtC,KAAI,CAACpC,QAAQ,CAACoC,KAAI,CAACqC,6BAA6B,CAAC9O,KAAK,CAAC;wBACpE,IAAI+O,MAAM,EAAE;0BACRA,MAAM,CAAC9E,WAAW,GAAG,KAAK;wBAC9B;wBACAwC,KAAI,CAACqC,6BAA6B,GAAG,IAAI;sBAC7C;;sBAEA;sBACA,IAAIrC,KAAI,CAAC6B,2BAA2B,EAAE;wBAClC,IAAIF,OAAO,GAAGxP,IAAI,CAACyP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;wBACrF5B,KAAI,CAAC6B,2BAA2B,CAACjN,OAAO,GAAGzC,IAAI;wBAC/C6N,KAAI,CAAC6B,2BAA2B,CAACnK,WAAW,GAAG,KAAK,GAAGiK,OAAO,GAAG,MAAM;wBACvE3B,KAAI,CAAC6B,2BAA2B,CAACE,SAAS,GAAG,KAAK;wBAClD/B,KAAI,CAAC6B,2BAA2B,GAAG,IAAI;sBAC3C,CAAC,MAAM;wBACH7B,KAAI,CAACoB,UAAU,CAAC;0BACZxB,IAAI,EAAE,MAAM;0BACZhL,OAAO,EAAEzC;wBACb,CAAC,CAAC;sBACN;sBACA6N,KAAI,CAACgC,cAAc,CAAC,CAAC;oBACzB;kBACJ,CAAC,CAAC;kBAEFhC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mCAAmC,EAAE,UAACG,MAAM,EAAEwB,SAAS,EAAEpI,KAAK,EAAEqI,UAAU,EAAErO,UAAU,EAAEsO,UAAU,EAAK;oBACtH,IAAI,CAACzC,KAAI,CAACqC,6BAA6B,EAAE;sBACrCrC,KAAI,CAACoC,SAAS,CAAC,CAAC;sBAChBpC,KAAI,CAAC0C,mBAAmB,CAAC,CAAC;;sBAE1B;sBACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG3C,KAAI,CAACpC,QAAQ,CAAC5Q,MAAM,EAAE2V,CAAC,EAAE,EAAE;wBAC3C,IAAI3C,KAAI,CAACpC,QAAQ,CAAC+E,CAAC,CAAC,CAACnF,WAAW,EAAE;0BAC9BwC,KAAI,CAACpC,QAAQ,CAAC+E,CAAC,CAAC,CAACnF,WAAW,GAAG,KAAK;wBACxC;sBACJ;sBAEA,IAAIoF,QAAQ,GAAG5C,KAAI,CAACpC,QAAQ,CAAC5Q,MAAM;sBACnC,IAAI6V,UAAU,GAAG;wBACbC,EAAE,EAAEP,SAAS;wBACb3C,IAAI,EAAE,WAAW;wBACjBhL,OAAO,EAAE,EAAE;wBACX8C,WAAW,EAAE,EAAE;wBACf8F,WAAW,EAAE,IAAI;wBACjBiF,UAAU,EAAEzC,KAAI,CAAC+C,4BAA4B,CAACN,UAAU,CAAC;wBACzDtO,UAAU,EAAE,CAAC;sBACjB,CAAC;sBACD6L,KAAI,CAACpC,QAAQ,CAACjN,IAAI,CAACkS,UAAU,CAAC;sBAC9B7C,KAAI,CAACqC,6BAA6B,GAAG;wBAAE9O,KAAK,EAAEqP,QAAQ;wBAAEhO,OAAO,EAAE;sBAAG,CAAC;oBACzE;oBAEAoL,KAAI,CAACqC,6BAA6B,CAACzN,OAAO,IAAIuF,KAAK;oBACnD,IAAIgH,GAAG,GAAGnB,KAAI,CAACpC,QAAQ,CAACoC,KAAI,CAACqC,6BAA6B,CAAC9O,KAAK,CAAC;oBACjE,IAAI4N,GAAG,EAAE;sBACL,IAAI,CAACA,GAAG,CAACsB,UAAU,EAAE;wBACjBtB,GAAG,CAACsB,UAAU,GAAGzC,KAAI,CAAC+C,4BAA4B,CAACN,UAAU,CAAC;sBAClE;sBACAtB,GAAG,CAAC7J,UAAU,GAAG0I,KAAI,CAACqC,6BAA6B,CAACzN,OAAO;sBAC3DuM,GAAG,CAAChN,UAAU,GAAGD,mBAAmB,CAAC7H,MAAM,CAACiH,MAAM,CAAC,CAAC,CAAC,EAAE6N,GAAG,CAAChN,UAAU,IAAI,CAAC,CAAC,EAAEA,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;sBAC/FiD,yBAAyB,CAAC+J,GAAG,EAAEA,GAAG,CAAChN,UAAU,CAAC;sBAC9C6L,KAAI,CAACqB,SAAS,CAAC,YAAM;wBACjBzG,qBAAqB,CAACuG,GAAG,CAAC;wBAC1BnB,KAAI,CAACgC,cAAc,CAAC,CAAC;sBACzB,CAAC,CAAC;oBACN;kBACJ,CAAC,CAAC;kBAEFhC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,sCAAsC,EAAE,UAACG,MAAM,EAAEwB,SAAS,EAAEpO,UAAU,EAAK;oBAC1F,IAAI6L,KAAI,CAACqC,6BAA6B,EAAE;sBACpC,IAAIlB,GAAG,GAAGnB,KAAI,CAACpC,QAAQ,CAACoC,KAAI,CAACqC,6BAA6B,CAAC9O,KAAK,CAAC;sBACjE,IAAI4N,GAAG,EAAE;wBACLA,GAAG,CAAC3D,WAAW,GAAG,KAAK;wBACvB2D,GAAG,CAAChN,UAAU,GAAGD,mBAAmB,CAAC7H,MAAM,CAACiH,MAAM,CAAC,CAAC,CAAC,EAAE6N,GAAG,CAAChN,UAAU,IAAI,CAAC,CAAC,EAAEA,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC/FiD,yBAAyB,CAAC+J,GAAG,EAAEA,GAAG,CAAChN,UAAU,CAAC;sBAClD;sBACA6L,KAAI,CAACqC,6BAA6B,GAAG,IAAI;oBAC7C;kBACJ,CAAC,CAAC;kBAEFrC,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mBAAmB,EAAE,UAACG,MAAM,EAAEiC,WAAW,EAAEC,WAAW,EAAK;oBAC1E,IAAID,WAAW,EAAE;sBACb,IAAME,YAAY,GAAGC,IAAI,CAACH,WAAW,CAAC;sBACtC,IAAMI,KAAK,GAAG,IAAIC,UAAU,CAACH,YAAY,CAAClW,MAAM,CAAC;sBACjD,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkX,YAAY,CAAClW,MAAM,EAAEhB,CAAC,EAAE,EAAE;wBAC1CoX,KAAK,CAACpX,CAAC,CAAC,GAAGkX,YAAY,CAACI,UAAU,CAACtX,CAAC,CAAC;sBACzC;sBACAgU,KAAI,CAACrB,WAAW,CAAChO,IAAI,CAACyS,KAAK,CAAC;oBAChC;kBACJ,CAAC,CAAC;kBAEFpD,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,sBAAsB,EAAE,UAACG,MAAM,EAAK;oBACnDf,KAAI,CAACuD,kBAAkB,CAAC,CAAC;kBAC7B,CAAC,CAAC;kBAEFvD,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,gBAAgB,EAAE,UAACG,MAAM,EAAK;oBAC7C;oBACAf,KAAI,CAACpC,QAAQ,GAAG,EAAE;oBAClBoC,KAAI,CAACwD,eAAe,CAAC,CAAC;;oBAEtB;oBACA,IAAMC,eAAe,GAAGpR,QAAQ,CAAC6I,cAAc,CAAC,iBAAiB,CAAC;oBAClE,IAAIuI,eAAe,EAAE;sBACjBA,eAAe,CAACC,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;oBAC3C;kBACJ,CAAC,CAAC;kBAEF3D,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,qBAAqB,EAAE,UAACgD,YAAY,EAAK;oBACxD5D,KAAI,CAAC6D,mBAAmB,CAACD,YAAY,CAAC;kBAC1C,CAAC,CAAC;kBAEF5D,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,oBAAoB,EAAE,UAACgD,YAAY,EAAK;oBACvD5D,KAAI,CAAC8D,kBAAkB,CAACF,YAAY,CAAC;kBACzC,CAAC,CAAC;kBAEF5D,KAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,oBAAoB,EAAE,UAACmD,gBAAgB,EAAK;oBAC3D/D,KAAI,CAACgE,kBAAkB,CAACD,gBAAgB,CAAC;kBAC7C,CAAC,CAAC;kBAEF/D,KAAI,CAACI,UAAU,CAAC6D,cAAc,CAAC,YAAM;oBACjC7I,OAAO,CAACC,IAAI,CAAC,0BAA0B,CAAC;kBAC5C,CAAC,CAAC;kBAEF2E,KAAI,CAACI,UAAU,CAAC8D,aAAa,CAAC,YAAM;oBAChC9I,OAAO,CAAC+I,IAAI,CAAC,uBAAuB,CAAC;oBACrCnE,KAAI,CAACoE,wBAAwB,CAAC,CAAC;kBACnC,CAAC,CAAC;kBAEFpE,KAAI,CAACI,UAAU,CAACiE,OAAO,CAAC,UAAClI,KAAK,EAAK;oBAC/B,IAAI6D,KAAI,CAACvC,gBAAgB,EAAE;sBACvB;oBACJ;oBAEA,IAAItB,KAAK,EAAE;sBACPf,OAAO,CAACC,IAAI,CAAC,uCAAuC,EAAEc,KAAK,CAAC9E,OAAO,IAAI8E,KAAK,CAAC;oBACjF;kBACJ,CAAC,CAAC;kBAACgE,QAAA,CAAA1T,CAAA;kBAAA0T,QAAA,CAAAvU,CAAA;kBAAA,OAGOoU,KAAI,CAACI,UAAU,CAAC7G,KAAK,CAAC,CAAC;gBAAA;kBAAA4G,QAAA,CAAAvU,CAAA;kBAAA;gBAAA;kBAAAuU,QAAA,CAAA1T,CAAA;kBAAAyT,EAAA,GAAAC,QAAA,CAAAvT,CAAA;kBAE7BwO,OAAO,CAACe,KAAK,CAAC,4BAA4B,EAAA+D,EAAK,CAAC;gBAAC;kBAAA,OAAAC,QAAA,CAAAtT,CAAA;cAAA;YAAA,GAAAoT,OAAA;UAAA;QAEzD,CAAC;QACDqE,kBAAkB,WAAlBA,kBAAkBA,CAACjN,OAAO,EAAE;UAAA,IAAAkN,MAAA;UACxB,IAAIlN,OAAO,CAACuI,IAAI,KAAK,WAAW,EAAE;YAC9BvI,OAAO,CAACoL,UAAU,GAAG,IAAI,CAACM,4BAA4B,CAAC1L,OAAO,CAACoL,UAAU,CAAC;UAC9E;UAEA,IAAIpL,OAAO,CAACzC,OAAO,IAAI,CAACyC,OAAO,CAACK,WAAW,EAAE;YACzCL,OAAO,CAACK,WAAW,GAAGC,oBAAoB,CAACN,OAAO,CAACzC,OAAO,EAAEyC,OAAO,CAAC;UACxE;UACA,IAAI,CAACmN,SAAS,CAAC,IAAIC,WAAW,CAAC,8BAA8B,EAAE;YAAEC,MAAM,EAAE;cAAErN,OAAO,EAAEA;YAAQ;UAAE,CAAC,CAAC,CAAC;UACjG,IAAI,CAACuG,QAAQ,CAACjN,IAAI,CAAC0G,OAAO,CAAC;UAE3B,IAAI,CAACgK,SAAS,CAAC,YAAM;YACjBkD,MAAI,CAACC,SAAS,CAAC,IAAIC,WAAW,CAAC,6BAA6B,EAAE;cAAEC,MAAM,EAAE;gBAAErN,OAAO,EAAEA;cAAQ;YAAE,CAAC,CAAC,CAAC;UACpG,CAAC,CAAC;QACN,CAAC;QACD+J,UAAU,WAAVA,UAAUA,CAAC/J,OAAO,EAAE;UAAA,IAAAsN,MAAA;UAChB,IAAItN,OAAO,CAACzC,OAAO,EAAE;YAAA,IAAAgQ,mBAAA;YACjBvN,OAAO,CAACC,UAAU,IAAAsN,mBAAA,GAAGvN,OAAO,CAACC,UAAU,cAAAsN,mBAAA,cAAAA,mBAAA,GAAIvN,OAAO,CAACzC,OAAO;YAC1DwC,yBAAyB,CAACC,OAAO,EAAEA,OAAO,CAAClD,UAAU,CAAC;UAC1D;UAEA,IAAI,CAACmQ,kBAAkB,CAACjN,OAAO,CAAC;UAChC,IAAI,CAACyK,eAAe,CAAC,CAAC;UAEtB,IAAI,CAACT,SAAS,CAAC,YAAM;YACjB;YACAzG,qBAAqB,CAACvD,OAAO,CAAC;YAC9BsN,MAAI,CAAC3C,cAAc,CAAC,CAAC;UACzB,CAAC,CAAC;QACN,CAAC;QACDF,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAAC9L,WAAW,EAAE;YAClB,IAAI,CAACA,WAAW,CAAC0N,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;UAC5C;UACA,IAAI,CAACpG,oBAAoB,GAAG,KAAK;QACrC,CAAC;QACDiG,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAACxN,WAAW,EAAE;YAClB,IAAI,CAACA,WAAW,CAAC0N,SAAS,CAACmB,MAAM,CAAC,QAAQ,CAAC;UAC/C;UACA,IAAI,CAACtH,oBAAoB,GAAG,IAAI;QACpC,CAAC;QACDiH,SAAS,WAATA,SAASA,CAACM,KAAK,EAAE;UACbzS,QAAQ,CAAC6P,aAAa,CAAC4C,KAAK,CAAC;QACjC,CAAC;QACD/B,4BAA4B,WAA5BA,4BAA4BA,CAACN,UAAU,EAAE;UACrC,IAAI,CAACA,UAAU,EAAE;YACb,OAAO,IAAI;UACf;UAEA,IAAIrM,KAAK,GAAG,OAAOqM,UAAU,CAACrM,KAAK,KAAK,QAAQ,GAAGqM,UAAU,CAACrM,KAAK,CAACnE,IAAI,CAAC,CAAC,GAAG,EAAE;UAC/E,IAAI8S,IAAI,GAAG,OAAOtC,UAAU,CAACsC,IAAI,KAAK,QAAQ,GAAGtC,UAAU,CAACsC,IAAI,CAAC9S,IAAI,CAAC,CAAC,GAAG,EAAE;UAC5E,IAAI+S,QAAQ,GAAG,OAAOvC,UAAU,CAACuC,QAAQ,KAAK,QAAQ,GAAGvC,UAAU,CAACuC,QAAQ,CAAC/S,IAAI,CAAC,CAAC,GAAG,EAAE;UACxF,IAAIgT,yBAAyB,GAAG,CAAC,CAACxC,UAAU,CAACwC,yBAAyB;UAEtE,IAAI,CAAC7O,KAAK,IAAI,CAAC2O,IAAI,IAAI,CAACC,QAAQ,IAAI,CAACC,yBAAyB,EAAE;YAC5D,OAAO,IAAI;UACf;UAEA,OAAO;YACH7O,KAAK,EAAEA,KAAK;YACZ2O,IAAI,EAAEA,IAAI;YACVC,QAAQ,EAAEA,QAAQ;YAClBC,yBAAyB,EAAEA;UAC/B,CAAC;QACL,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAAC7N,OAAO,EAAE;UACvB,IAAIoL,UAAU,GAAGpL,OAAO,GAAG,IAAI,CAAC0L,4BAA4B,CAAC1L,OAAO,CAACoL,UAAU,CAAC,GAAG,IAAI;UACvF,OAAOA,UAAU,IAAIA,UAAU,CAACrM,KAAK,GAAGqM,UAAU,CAACrM,KAAK,GAAGrF,aAAa,CAACO,cAAc;QAC3F,CAAC;QACD6T,uBAAuB,WAAvBA,uBAAuBA,CAAC9N,OAAO,EAAE;UAC7B,IAAIoL,UAAU,GAAGpL,OAAO,GAAG,IAAI,CAAC0L,4BAA4B,CAAC1L,OAAO,CAACoL,UAAU,CAAC,GAAG,IAAI;UACvF,IAAI2C,OAAO,GAAG,CAAC,kBAAkB,CAAC;UAElC,IAAI3C,UAAU,IAAIA,UAAU,CAACuC,QAAQ,EAAE;YACnCI,OAAO,CAACzU,IAAI,CAAC8R,UAAU,CAACuC,QAAQ,CAAC;UACrC,CAAC,MAAM;YACHI,OAAO,CAACzU,IAAI,CAAC,4BAA4B,CAAC;UAC9C;UAEA,OAAOyU,OAAO;QAClB,CAAC;QACDC,uBAAuB,WAAvBA,uBAAuBA,CAAChO,OAAO,EAAE9D,KAAK,EAAE;UACpC,IAAIkP,UAAU,GAAGpL,OAAO,GAAG,IAAI,CAAC0L,4BAA4B,CAAC1L,OAAO,CAACoL,UAAU,CAAC,GAAG,IAAI;UACvF,OAAO,CAAC,IAAI,CAAC6C,0BAA0B,CAACjO,OAAO,EAAE9D,KAAK,CAAC,GAAG,mBAAmB,GAAG,aAAa,EAAEkP,UAAU,IAAIA,UAAU,CAACuC,QAAQ,GAAGvC,UAAU,CAACuC,QAAQ,GAAG,EAAE,CAAC;QAChK,CAAC;QACDO,gBAAgB,WAAhBA,gBAAgBA,CAAClO,OAAO,EAAE;UACtB,IAAIoL,UAAU,GAAGpL,OAAO,GAAG,IAAI,CAAC0L,4BAA4B,CAAC1L,OAAO,CAACoL,UAAU,CAAC,GAAG,IAAI;UACvF,OAAOA,UAAU,IAAIA,UAAU,CAACsC,IAAI,GAAGtC,UAAU,CAACsC,IAAI,GAAG,aAAa;QAC1E,CAAC;QACDO,0BAA0B,WAA1BA,0BAA0BA,CAACjO,OAAO,EAAE9D,KAAK,EAAE;UACvC,IAAIkP,UAAU,GAAGpL,OAAO,GAAG,IAAI,CAAC0L,4BAA4B,CAAC1L,OAAO,CAACoL,UAAU,CAAC,GAAG,IAAI;UACvF,OAAO,CAAC,CAACpL,OAAO,IACZA,OAAO,CAACmG,WAAW,IACnBjK,KAAK,KAAK,IAAI,CAACoM,kBAAkB,IACjC,EAAE8C,UAAU,IAAIA,UAAU,CAACwC,yBAAyB,CAAC;QAC7D,CAAC;QACDO,WAAW,WAAXA,WAAWA,CAACnO,OAAO,EAAE;UACjB,OAAOA,OAAO,CAACuI,IAAI,KAAK,WAAW;QACvC,CAAC;QACK6F,WAAW,WAAXA,WAAWA,CAAA,EAAG;UAAA,IAAAC,MAAA;UAAA,OAAAjX,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAA6X,SAAA;YAAA,IAAAC,aAAA,EAAAnC,eAAA;YAAA,OAAA7V,YAAA,GAAAC,CAAA,WAAAgY,SAAA;cAAA,kBAAAA,SAAA,CAAAja,CAAA;gBAAA;kBACZga,aAAa,GAAGF,MAAI,CAAC7H,MAAM,CAAC5L,IAAI,CAAC,CAAC;kBAAA,IAEjC2T,aAAa;oBAAAC,SAAA,CAAAja,CAAA;oBAAA;kBAAA;kBAAA,OAAAia,SAAA,CAAAhZ,CAAA;gBAAA;kBAIlB;kBACA,IAAI6Y,MAAI,CAACvH,WAAW,EAAE;oBAClBuH,MAAI,CAAClE,aAAa,CAAC,CAAC;kBACxB;;kBAEA;kBACAkE,MAAI,CAACzD,eAAe,GAAG,IAAI;;kBAE3B;kBACA;kBAAA4D,SAAA,CAAAja,CAAA;kBAAA,OACM8Z,MAAI,CAACI,gBAAgB,CAAC,CAAC;gBAAA;kBAE7BJ,MAAI,CAACtE,UAAU,CAAC;oBACZxB,IAAI,EAAE,MAAM;oBACZhL,OAAO,EAAEgR;kBACb,CAAC,CAAC;;kBAEF;kBACMnC,eAAe,GAAGpR,QAAQ,CAAC6I,cAAc,CAAC,iBAAiB,CAAC;kBAClE,IAAIuI,eAAe,EAAE;oBACjBA,eAAe,CAACC,SAAS,CAACmB,MAAM,CAAC,QAAQ,CAAC;kBAC9C;kBAEAa,MAAI,CAACK,aAAa,CAACH,aAAa,CAAC;kBACjCF,MAAI,CAACvI,YAAY,CAAC9P,KAAK,GAAG,EAAE;kBAC5BqY,MAAI,CAAC7H,MAAM,GAAG,EAAE;gBAAC;kBAAA,OAAAgI,SAAA,CAAAhZ,CAAA;cAAA;YAAA,GAAA8Y,QAAA;UAAA;QACrB,CAAC;QACDI,aAAa,WAAbA,aAAaA,CAACH,aAAa,EAAE;UAAA,IAAAI,MAAA;UACzB,IAAI,IAAI,CAACrI,MAAM,EAAE;YACb,IAAI,CAACA,MAAM,CAACsI,OAAO,CAAC,CAAC;YACrB,IAAI,CAACtI,MAAM,GAAG,IAAI;UACtB;UAEA,IAAI,CAACuI,gBAAgB,CAAC,CAAC;UACvB,IAAI,CAACC,mBAAmB,CAAC,CAAC;UAC1B,IAAI,CAACzI,UAAU,GAAG,IAAI;UAEtB,IAAI9I,OAAO,GAAG,EAAE;UAChB,IAAIT,UAAU,GAAG,CAAC,CAAC;UACnB,IAAIiS,cAAc,GAAG,IAAI;UAEzB,IAAIC,YAAY,GAAG,IAAI,CAACzI,QAAQ,CAAC5Q,MAAM;UACvC,IAAIsZ,aAAa,GAAG,IAAI,CAACC,SAAS,CAAC,CAAC;UAEpC,IAAI,CAAC5I,MAAM,GAAG,IAAI,CAACyC,UAAU,CAACzC,MAAM,CAAC,aAAa,EAAE2I,aAAa,EAAEV,aAAa,CAAC,CAC5EY,SAAS,CAAC;YACPvW,IAAI,EAAE,SAANA,IAAIA,CAAGwW,KAAK,EAAK;cACb,IAAIpP,OAAO,GAAG2O,MAAI,CAACpI,QAAQ,CAACyI,YAAY,CAAC;cAEzC,IAAI,CAAChP,OAAO,EAAE;gBACV,IAAIoP,KAAK,CAACC,SAAS,IAAI,CAACJ,aAAa,EAAE;kBACnCN,MAAI,CAACW,SAAS,CAACF,KAAK,CAACC,SAAS,CAAC;gBACnC;gBAEAV,MAAI,CAACtD,mBAAmB,CAAC,CAAC;gBAC1B2D,YAAY,GAAGL,MAAI,CAACpI,QAAQ,CAAC5Q,MAAM;gBACnC,IAAI6V,UAAU,GAAG;kBACbjD,IAAI,EAAE,WAAW;kBACjBhL,OAAO,EAAE,EAAE;kBACX8C,WAAW,EAAE,EAAE;kBACf8F,WAAW,EAAE;gBACjB,CAAC;gBAEDwI,MAAI,CAACpI,QAAQ,CAACjN,IAAI,CAACkS,UAAU,CAAC;gBAC9BxL,OAAO,GAAGwL,UAAU;cACxB;cAEA,IAAI4D,KAAK,CAACtS,UAAU,IAAIvD,OAAA,CAAO6V,KAAK,CAACtS,UAAU,MAAK,QAAQ,IAAI9H,MAAM,CAAC0I,IAAI,CAAC0R,KAAK,CAACtS,UAAU,CAAC,CAACnH,MAAM,EAAE;gBAClG,SAAA4Z,GAAA,MAAAC,gBAAA,GAA2Bxa,MAAM,CAACiI,OAAO,CAACmS,KAAK,CAACtS,UAAU,CAAC,EAAAyS,GAAA,GAAAC,gBAAA,CAAA7Z,MAAA,EAAA4Z,GAAA,IAAE;kBAAA,IAAAE,oBAAA;kBAAxD,IAAAC,mBAAA,GAAA7W,cAAA,CAAA2W,gBAAA,CAAAD,GAAA;oBAAOnS,GAAG,GAAAsS,mBAAA;oBAAE1Z,KAAK,GAAA0Z,mBAAA;kBAClB5S,UAAU,CAACM,GAAG,CAAC,IAAAqS,oBAAA,GAAGrU,kBAAkB,CAACpF,KAAK,CAAC,cAAAyZ,oBAAA,cAAAA,oBAAA,GAAI,CAAC,CAAC;gBACrD;cACJ;cAEA,IAAIL,KAAK,CAAC7R,OAAO,EAAE;gBACf;gBACA;gBACA,IAAI6R,KAAK,CAACjE,UAAU,IAAI4D,cAAc,IAAIK,KAAK,CAACjE,UAAU,KAAK4D,cAAc,EAAE;kBAC3ExR,OAAO,IAAI,MAAM;gBACrB;gBAEA,IAAI6R,KAAK,CAACjE,UAAU,EAAE;kBAClB4D,cAAc,GAAGK,KAAK,CAACjE,UAAU;gBACrC;gBAEA5N,OAAO,IAAI6R,KAAK,CAAC7R,OAAO;cAC5B;cAEAyC,OAAO,CAACC,UAAU,GAAG1C,OAAO;cAC5BwC,yBAAyB,CAACC,OAAO,EAAElD,UAAU,CAAC;cAE9C6R,MAAI,CAACpI,QAAQ,CAACyI,YAAY,CAAC,GAAGhP,OAAO;cAErC2O,MAAI,CAAC3E,SAAS,CAAC,YAAM;gBACjBzG,qBAAqB,CAACvD,OAAO,CAAC;gBAC9B2O,MAAI,CAAChE,cAAc,CAAC,CAAC;cACzB,CAAC,CAAC;YACN,CAAC;YACDgF,QAAQ,EAAE,SAAVA,QAAQA,CAAA,EAAQ;cAAA,IAAAC,aAAA;cACZjB,MAAI,CAACkB,iBAAiB,CAAC/S,UAAU,EAAEkS,YAAY,CAAC;cAChDL,MAAI,CAACmB,iBAAiB,CAAC,CAAC;cAExB,IAAIhG,GAAG,GAAG6E,MAAI,CAACpI,QAAQ,CAACyI,YAAY,CAAC;cACrC,IAAIlF,GAAG,EAAE;gBACLA,GAAG,CAAC3D,WAAW,GAAG,KAAK;cAC3B;cAEA,IAAI,CAAC2D,GAAG,IAAI,CAACA,GAAG,CAACvM,OAAO,EAAE;gBACtB;gBACAoR,MAAI,CAACtD,mBAAmB,CAAC,CAAC;cAC9B;;cAEA;cACA,IAAIsD,MAAI,CAACzG,kBAAkB,IAAIyG,MAAI,CAACvH,mBAAmB,IAAI0C,GAAG,IAAIA,GAAG,CAACvM,OAAO,EAAE;gBAC3EoR,MAAI,CAACoB,gBAAgB,CAACjG,GAAG,CAACvM,OAAO,CAAC;cACtC;cAEA,CAAAqS,aAAA,GAAAjB,MAAI,CAACrI,MAAM,cAAAsJ,aAAA,eAAXA,aAAA,CAAahB,OAAO,CAAC,CAAC;cACtBD,MAAI,CAACrI,MAAM,GAAG,IAAI;YACtB,CAAC;YACDxB,KAAK,EAAE,SAAPA,KAAKA,CAAG7F,GAAG,EAAK;cAAA,IAAA+Q,cAAA;cACZrB,MAAI,CAACkB,iBAAiB,CAAC/S,UAAU,EAAEkS,YAAY,CAAC;cAChDL,MAAI,CAACmB,iBAAiB,CAAC,CAAC;cAExB,IAAIhG,GAAG,GAAG6E,MAAI,CAACpI,QAAQ,CAACyI,YAAY,CAAC;cACrC,IAAIlF,GAAG,EAAE;gBACLA,GAAG,CAAC3D,WAAW,GAAG,KAAK;cAC3B;cAEAwI,MAAI,CAACtD,mBAAmB,CAAC,CAAC;cAE1B,IAAI,CAACsD,MAAI,CAACvI,gBAAgB,EAAE;gBACxBuI,MAAI,CAAC5E,UAAU,CAAC4E,MAAI,CAACsB,qBAAqB,CAAC,CAAC,CAAC;cACjD;cAEA,CAAAD,cAAA,GAAArB,MAAI,CAACrI,MAAM,cAAA0J,cAAA,eAAXA,cAAA,CAAapB,OAAO,CAAC,CAAC;cACtBD,MAAI,CAACrI,MAAM,GAAG,IAAI;cAElBvC,OAAO,CAACe,KAAK,CAAC,eAAe,EAAE7F,GAAG,CAAC;YACvC;UACJ,CAAC,CAAC;QACV,CAAC;QACDgR,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UACpB,OAAO;YACH1H,IAAI,EAAE,WAAW;YACjBhL,OAAO,EAAE,mGAAmG;YAC5G8C,WAAW,EAAE;UACjB,CAAC;QACL,CAAC;QACDwP,iBAAiB,WAAjBA,iBAAiBA,CAAC/S,UAAU,EAAEkS,YAAY,EAAE;UAAA,IAAAkB,MAAA;UACxCpT,UAAU,GAAGD,mBAAmB,CAACC,UAAU,CAAC;UAE5C,IAAI9H,MAAM,CAAC0I,IAAI,CAACZ,UAAU,CAAC,CAACnH,MAAM,EAAE;YAAA,IAAAwa,MAAA,EAAAC,oBAAA;YAChC,IAAIpQ,OAAO,GAAG,IAAI,CAACuG,QAAQ,CAACyI,YAAY,CAAC;YACzChP,OAAO,CAACC,UAAU,IAAAkQ,MAAA,IAAAC,oBAAA,GAAGpQ,OAAO,CAACC,UAAU,cAAAmQ,oBAAA,cAAAA,oBAAA,GAAIpQ,OAAO,CAACzC,OAAO,cAAA4S,MAAA,cAAAA,MAAA,GAAI,EAAE;YAChEpQ,yBAAyB,CAACC,OAAO,EAAElD,UAAU,CAAC;YAE9C,IAAI,CAACyJ,QAAQ,CAACyI,YAAY,CAAC,GAAGhP,OAAO;YAErC,IAAI,CAACgK,SAAS,CAAC,YAAM;cACjBzG,qBAAqB,CAACvD,OAAO,CAAC;cAC9BkQ,MAAI,CAACvF,cAAc,CAAC,CAAC;YACzB,CAAC,CAAC;UACN;QACJ,CAAC;QACDkE,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAIwB,QAAQ,GAAG,IAAI,CAACtK,aAAa,CAACuK,YAAY,CAAC,gBAAgB,CAAC;UAEhE,IAAID,QAAQ,EAAE;YACV,IAAI,CAACtK,aAAa,CAACwK,eAAe,CAACvL,SAAS,CAACC,QAAQ,CAACoL,QAAQ,EAAE;cAAEG,mBAAmB,EAAE;YAAK,CAAC,CAAC,CAAC;UACnG;QACJ,CAAC;QACDV,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAG;UAChB,IAAIW,SAAS,GAAG,IAAI,CAAC1K,aAAa,CAACuK,YAAY,CAAC,iBAAiB,CAAC;UAElE,IAAIG,SAAS,EAAE;YACX,IAAI,CAAC1K,aAAa,CAACwK,eAAe,CAACvL,SAAS,CAACC,QAAQ,CAACwL,SAAS,EAAE;cAAED,mBAAmB,EAAE;YAAK,CAAC,CAAC,CAAC;UACpG;;UAEA;UACA,IAAI,IAAI,CAACxK,aAAa,EAAE;YACpB,IAAI0K,KAAK,GAAG,IAAI,CAAC1K,aAAa,CAAC2K,gBAAgB,CAAC,oBAAoB,CAAC;YACrE,KAAK,IAAIhc,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+b,KAAK,CAAC/a,MAAM,EAAEhB,CAAC,EAAE,EAAE;cACnC+b,KAAK,CAAC/b,CAAC,CAAC,CAAC0X,SAAS,CAACmB,MAAM,CAAC,mBAAmB,CAAC;cAC9CkD,KAAK,CAAC/b,CAAC,CAAC,CAAC0X,SAAS,CAACC,GAAG,CAAC,aAAa,CAAC;YACzC;UACJ;;UAEA;UACA,KAAK,IAAI3X,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC4R,QAAQ,CAAC5Q,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC4R,QAAQ,CAAC5R,CAAC,CAAC,CAACwR,WAAW,EAAE;cAC9B,IAAI,CAACI,QAAQ,CAAC5R,CAAC,CAAC,CAACwR,WAAW,GAAG,KAAK;YACxC;UACJ;;UAEA;UACA,IAAI,IAAI,CAACQ,aAAa,EAAE;YACpB,IAAI,CAACiK,qBAAqB,CAAC,CAAC;UAChC;QACJ,CAAC;QACDC,qBAAqB,WAArBA,qBAAqBA,CAAC1c,CAAC,EAAE;UAAA,IAAA2c,SAAA;UACrB,IAAI,CAAA3c,CAAC,aAADA,CAAC,gBAAA2c,SAAA,GAAD3c,CAAC,CAAEkZ,MAAM,cAAAyD,SAAA,uBAATA,SAAA,CAAWC,QAAQ,MAAK,IAAI,CAAClJ,aAAa,EAAE;YAC5C;UACJ;UAEA,IAAI,CAACkD,SAAS,CAAC,KAAK,CAAC;QACzB,CAAC;QACDiG,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UAAA,IAAAC,MAAA;UACvB,IAAI,CAAC,IAAI,CAACjL,aAAa,EAAE;YACrB;UACJ;UAEA,IAAIkL,OAAO,GAAG,IAAI,CAAClL,aAAa,CAAC2K,gBAAgB,CAAC,0BAA0B,CAAC;UAE7EO,OAAO,CAACrH,OAAO,CAAC,UAAAsH,MAAM,EAAI;YACtB,IAAIC,WAAW,GAAGC,MAAM,CAACF,MAAM,CAACb,YAAY,CAAC,wBAAwB,CAAC,CAAC;YACvE,IAAIgB,SAAS,GAAGF,WAAW,KAAKH,MAAI,CAACtJ,sBAAsB;YAC3D,IAAI4J,QAAQ,GAAGD,SAAS,GAClB,gDAAgD,GAChD,+CAA+C;YAErDH,MAAM,CAAC9E,SAAS,CAACmF,MAAM,CAAC,aAAa,EAAEF,SAAS,CAAC;YACjDH,MAAM,CAACM,YAAY,CAAC,OAAO,EAAEH,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC;YACtEH,MAAM,CAACZ,eAAe,CAACvL,SAAS,CAACC,QAAQ,CAACsM,QAAQ,EAAE;cAAEf,mBAAmB,EAAE;YAAK,CAAC,CAAC,CAAC;UACvF,CAAC,CAAC;QACN,CAAC;QACDT,gBAAgB,WAAhBA,gBAAgBA,CAACjV,IAAI,EAAE4W,UAAU,EAAE;UAAA,IAAAC,MAAA;UAC/B,IAAI,CAAC,IAAI,CAACvK,mBAAmB,IAAI,CAACtM,IAAI,IAAI,CAAC,IAAI,CAACiO,UAAU,EAAE;YACxD;UACJ;UAEA,IAAI,CAACzB,WAAW,GAAG,EAAE;UACrB,IAAI,CAACE,cAAc,GAAG,IAAI;UAC1B,IAAI,CAACoK,cAAc,GAAGF,UAAU,KAAKtP,SAAS,GAAGsP,UAAU,GAAG,CAAC,CAAC;UAEhE,IAAI,CAAC3I,UAAU,CAAC8I,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC3C,SAAS,CAAC,CAAC,EAAEpU,IAAI,EAAE,IAAI,CAACuM,YAAY,CAAC,SAC3E,CAAC,UAAApI,GAAG,EAAI;YACV8E,OAAO,CAACe,KAAK,CAAC,sBAAsB,EAAE7F,GAAG,CAAC;YAC1C0S,MAAI,CAACnK,cAAc,GAAG,KAAK;YAC3BmK,MAAI,CAAChK,sBAAsB,GAAG,CAAC,CAAC;YAChCgK,MAAI,CAACC,cAAc,GAAG,CAAC,CAAC;YACxBD,MAAI,CAAC3H,SAAS,CAAC;cAAA,OAAM2H,MAAI,CAACX,wBAAwB,CAAC,CAAC;YAAA,EAAC;UACzD,CAAC,CAAC;QACV,CAAC;QACDc,gBAAgB,WAAhBA,gBAAgBA,CAAC9R,OAAO,EAAE9D,KAAK,EAAE;UAAA,IAAA6V,MAAA;UAC7B,IAAI,IAAI,CAACpK,sBAAsB,KAAKzL,KAAK,EAAE;YACvC,IAAI,CAAC6O,SAAS,CAAC,CAAC;YAChB;UACJ;UAEA,IAAI,CAACA,SAAS,CAAC,KAAK,CAAC;UACrBvR,MAAM,CAACqR,aAAa,CAAC,IAAIuC,WAAW,CAAC,4BAA4B,EAAE;YAC/DC,MAAM,EAAE;cAAE0D,QAAQ,EAAE,IAAI,CAAClJ;YAAc;UAC3C,CAAC,CAAC,CAAC;UACH,IAAI,CAACF,sBAAsB,GAAGzL,KAAK;UACnC,IAAI,CAAC8N,SAAS,CAAC;YAAA,OAAM+H,MAAI,CAACf,wBAAwB,CAAC,CAAC;UAAA,EAAC;UAErD,IAAI,IAAI,CAACpJ,aAAa,CAAC1L,KAAK,CAAC,EAAE;YAC3B,IAAI,CAAC8V,aAAa,CAAC,IAAI,CAACpK,aAAa,CAAC1L,KAAK,CAAC,CAAC;YAC7C;UACJ;UAEA,IAAI,CAAC6T,gBAAgB,CAAC/P,OAAO,CAACzC,OAAO,EAAErB,KAAK,CAAC;QACjD,CAAC;QACDgQ,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UAAA,IAAA+F,MAAA;UACjB,IAAI,IAAI,CAAC3K,WAAW,CAAC3R,MAAM,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC6R,cAAc,IAAI,IAAI,CAACD,cAAc,CAAC5R,MAAM,KAAK,CAAC,EAAE;cAC1D,IAAI,CAAC6R,cAAc,GAAG,KAAK;cAC3B,IAAI,CAACG,sBAAsB,GAAG,CAAC,CAAC;cAChC,IAAI,CAACqC,SAAS,CAAC;gBAAA,OAAMiI,MAAI,CAACjB,wBAAwB,CAAC,CAAC;cAAA,EAAC;YACzD;YACA;UACJ;UAEA,IAAMkB,WAAW,GAAG,IAAI,CAAC5K,WAAW,CAAC6K,MAAM,CAAC,UAACC,GAAG,EAAEhD,KAAK;YAAA,OAAKgD,GAAG,GAAGhD,KAAK,CAACzZ,MAAM;UAAA,GAAE,CAAC,CAAC;UAClF,IAAM0c,QAAQ,GAAG,IAAIrG,UAAU,CAACkG,WAAW,CAAC;UAC5C,IAAII,MAAM,GAAG,CAAC;UAAC,IAAAC,UAAA,GAAA/Z,0BAAA,CACK,IAAI,CAAC8O,WAAW;YAAAkL,MAAA;UAAA;YAApC,KAAAD,UAAA,CAAA5Z,CAAA,MAAA6Z,MAAA,GAAAD,UAAA,CAAAhe,CAAA,IAAAwB,IAAA,GAAsC;cAAA,IAA3BqZ,KAAK,GAAAoD,MAAA,CAAAxc,KAAA;cACZqc,QAAQ,CAACI,GAAG,CAACrD,KAAK,EAAEkD,MAAM,CAAC;cAC3BA,MAAM,IAAIlD,KAAK,CAACzZ,MAAM;YAC1B;UAAC,SAAAsJ,GAAA;YAAAsT,UAAA,CAAApe,CAAA,CAAA8K,GAAA;UAAA;YAAAsT,UAAA,CAAApd,CAAA;UAAA;UACD,IAAI,CAACmS,WAAW,GAAG,EAAE;UAErB,IAAMoL,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACN,QAAQ,CAAC,EAAE;YAAE5P,IAAI,EAAE;UAAY,CAAC,CAAC;UAExD,IAAI,IAAI,CAACmP,cAAc,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAChK,aAAa,CAAC,IAAI,CAACgK,cAAc,CAAC,GAAGc,IAAI;YAC9C,IAAI,CAACd,cAAc,GAAG,CAAC,CAAC;UAC5B;;UAEA;UACA,IAAI,IAAI,CAACpK,cAAc,IAAI,IAAI,CAACC,mBAAmB,EAAE;YACjD,IAAI,CAACF,cAAc,CAACjO,IAAI,CAACoZ,IAAI,CAAC;YAC9B;UACJ;UAEA,IAAI,CAACV,aAAa,CAACU,IAAI,CAAC;QAC5B,CAAC;QACDV,aAAa,WAAbA,aAAaA,CAACU,IAAI,EAAE;UAAA,IAAAE,MAAA;UAChB,IAAMlY,GAAG,GAAGmY,GAAG,CAACC,eAAe,CAACJ,IAAI,CAAC;UACrC,IAAMK,KAAK,GAAG,IAAIC,KAAK,CAACtY,GAAG,CAAC;UAE5B,IAAI,CAACgN,eAAe,GAAGhN,GAAG;UAC1B,IAAI,CAAC+M,mBAAmB,GAAGsL,KAAK;UAChC,IAAI,CAACvL,cAAc,GAAG,IAAI;UAE1BuL,KAAK,CAACE,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAClCL,MAAI,CAACnL,mBAAmB,GAAG,IAAI;YAC/BmL,MAAI,CAAClL,eAAe,GAAG,IAAI;YAC3BmL,GAAG,CAACK,eAAe,CAACxY,GAAG,CAAC;YACxBkY,MAAI,CAACO,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC;UAEFJ,KAAK,CAACE,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAClCL,MAAI,CAACnL,mBAAmB,GAAG,IAAI;YAC/BmL,MAAI,CAAClL,eAAe,GAAG,IAAI;YAC3BmL,GAAG,CAACK,eAAe,CAACxY,GAAG,CAAC;YACxBkY,MAAI,CAACO,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC;UAEFJ,KAAK,CAACK,IAAI,CAAC,CAAC,SAAM,CAAC,UAAAnU,GAAG,EAAI;YACtB8E,OAAO,CAACe,KAAK,CAAC,uBAAuB,EAAE7F,GAAG,CAAC;YAC3C2T,MAAI,CAACnL,mBAAmB,GAAG,IAAI;YAC/BmL,MAAI,CAAClL,eAAe,GAAG,IAAI;YAC3BmL,GAAG,CAACK,eAAe,CAACxY,GAAG,CAAC;YACxBkY,MAAI,CAACrL,cAAc,GAAG,EAAE;YACxBqL,MAAI,CAACpL,cAAc,GAAG,KAAK;YAC3BoL,MAAI,CAACjL,sBAAsB,GAAG,CAAC,CAAC;YAChCiL,MAAI,CAAC5I,SAAS,CAAC;cAAA,OAAM4I,MAAI,CAAC5B,wBAAwB,CAAC,CAAC;YAAA,EAAC;UACzD,CAAC,CAAC;QACN,CAAC;QACDmC,eAAe,WAAfA,eAAeA,CAAA,EAAG;UAAA,IAAAE,OAAA;UACd,IAAI,IAAI,CAAC9L,cAAc,CAAC5R,MAAM,GAAG,CAAC,EAAE;YAChC,IAAM2d,QAAQ,GAAG,IAAI,CAAC/L,cAAc,CAACgM,KAAK,CAAC,CAAC;YAC5C,IAAI,CAACvB,aAAa,CAACsB,QAAQ,CAAC;UAChC,CAAC,MAAM;YACH,IAAI,CAAC9L,cAAc,GAAG,KAAK;YAC3B,IAAI,CAACG,sBAAsB,GAAG,CAAC,CAAC;YAChC,IAAI,CAACqC,SAAS,CAAC;cAAA,OAAMqJ,OAAI,CAACrC,wBAAwB,CAAC,CAAC;YAAA,EAAC;YACrD,IAAI,CAACwC,4BAA4B,CAAC,CAAC;UACvC;QACJ,CAAC;QACDzI,SAAS,WAATA,SAASA,CAAA,EAAG;UAAA,IAAA0I,OAAA;UACR,IAAI,IAAI,CAAChM,mBAAmB,EAAE;YAC1B,IAAI,CAACA,mBAAmB,CAACiM,KAAK,CAAC,CAAC;YAChC,IAAI,CAACjM,mBAAmB,CAACkM,WAAW,GAAG,CAAC;YACxC,IAAI,CAAClM,mBAAmB,GAAG,IAAI;UACnC;UACA,IAAI,IAAI,CAACC,eAAe,EAAE;YACtBmL,GAAG,CAACK,eAAe,CAAC,IAAI,CAACxL,eAAe,CAAC;YACzC,IAAI,CAACA,eAAe,GAAG,IAAI;UAC/B;UACA,IAAI,CAACJ,WAAW,GAAG,EAAE;UACrB,IAAI,CAACC,cAAc,GAAG,EAAE;UACxB,IAAI,CAACC,cAAc,GAAG,KAAK;UAC3B,IAAI,CAACG,sBAAsB,GAAG,CAAC,CAAC;UAChC,IAAI,CAACqC,SAAS,CAAC;YAAA,OAAMyJ,OAAI,CAACzC,wBAAwB,CAAC,CAAC;UAAA,EAAC;QACzD,CAAC;QACD4C,sBAAsB,WAAtBA,sBAAsBA,CAAA,EAAG;UACrB,IAAI,IAAI,CAAC1L,kBAAkB,EAAE;YACzB,IAAI,CAAC2L,oBAAoB,CAAC,CAAC;UAC/B,CAAC,MAAM;YACH,IAAI,CAACC,qBAAqB,CAAC,CAAC;UAChC;QACJ,CAAC;QACDA,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACpB,IAAI,CAAC,IAAI,CAAC/L,uBAAuB,IAAI,IAAI,CAACE,kBAAkB,IAAI,CAAC,IAAI,CAACa,UAAU,EAAE;YAC9E;UACJ;UAEA,IAAI,CAACb,kBAAkB,GAAG,IAAI;UAC9B,IAAI,CAAC8L,wBAAwB,CAAC,CAAC;UAC/B,IAAI,CAAC3J,8BAA8B,GAAG,EAAE;UACxC,IAAI,CAACW,6BAA6B,GAAG,IAAI;UACzC,IAAI,CAACR,2BAA2B,GAAG,IAAI;;UAEvC;UACA,IAAI,CAACmC,kBAAkB,CAAC,oBAAoB,CAAC;UAE7CsH,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;YAAEpB,KAAK,EAAE;cAAEqB,gBAAgB,EAAE,IAAI;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,eAAe,EAAE;YAAK;UAAE,CAAC,CAAC,CACpHnd,IAAI,CAAC,UAAAmP,MAAM,EAAI;YACZ,IAAIiO,QAAQ,GAAGC,aAAa,CAACC,eAAe,CAAC,uBAAuB,CAAC,GAC/D,uBAAuB,GACvBD,aAAa,CAACC,eAAe,CAAC,wBAAwB,CAAC,GACnD,wBAAwB,GACxB,YAAY;YAEtBV,OAAI,CAAChN,aAAa,GAAG,IAAIyN,aAAa,CAAClO,MAAM,EAAE;cAC3CiO,QAAQ,EAAEA,QAAQ;cAClBG,kBAAkB,EAAE;YACxB,CAAC,CAAC;YAEFX,OAAI,CAACY,oBAAoB,GAAG,IAAI3L,OAAO,CAAC4L,OAAO,CAAC,CAAC;YACjDb,OAAI,CAACc,mBAAmB,GAAGvO,MAAM;;YAEjC;YACA,IAAIwO,QAAQ,GAAGtb,MAAM,CAACub,YAAY,IAAIvb,MAAM,CAACwb,kBAAkB;YAC/D,IAAIF,QAAQ,EAAE;cACVf,OAAI,CAACkB,qBAAqB,GAAG,IAAIH,QAAQ,CAAC,CAAC;cAC3Cf,OAAI,CAACmB,qBAAqB,GAAGnB,OAAI,CAACkB,qBAAqB,CAACE,cAAc,CAAC,CAAC;cACxEpB,OAAI,CAACmB,qBAAqB,CAACE,OAAO,GAAG,GAAG;cACxC,IAAIC,SAAS,GAAGtB,OAAI,CAACkB,qBAAqB,CAACK,uBAAuB,CAAChP,MAAM,CAAC;cAC1E+O,SAAS,CAACE,OAAO,CAACxB,OAAI,CAACmB,qBAAqB,CAAC;YACjD;YAEA,IAAIM,YAAY,GAAGve,OAAO,CAACC,OAAO,CAAC,CAAC;YACpC,IAAIue,QAAQ,GAAG1B,OAAI,CAACmB,qBAAqB;YACzC,IAAIQ,wBAAwB,GAAG,EAAE;YAEjC3B,OAAI,CAAChN,aAAa,CAACkM,gBAAgB,CAAC,eAAe,EAAE,UAAC9e,CAAC,EAAK;cACxD,IAAIA,CAAC,CAACuM,IAAI,IAAIvM,CAAC,CAACuM,IAAI,CAACiV,IAAI,GAAG,CAAC,EAAE;gBAC3B;gBACA;gBACA,IAAI5B,OAAI,CAACvM,cAAc,IAAIiO,QAAQ,EAAE;kBACjC,IAAIG,QAAQ,GAAG,IAAI5J,UAAU,CAACyJ,QAAQ,CAACI,iBAAiB,CAAC;kBACzDJ,QAAQ,CAACK,oBAAoB,CAACF,QAAQ,CAAC;kBACvC,IAAIxD,GAAG,GAAG,CAAC;kBACX,KAAK,IAAI2D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAACjgB,MAAM,EAAEogB,CAAC,EAAE,EAAE;oBAAE3D,GAAG,IAAIwD,QAAQ,CAACG,CAAC,CAAC;kBAAE;kBAChE,IAAIC,GAAG,GAAG5D,GAAG,GAAGwD,QAAQ,CAACjgB,MAAM;kBAE/B,IAAIqgB,GAAG,IAAIN,wBAAwB,EAAE;oBACjC;oBACA3B,OAAI,CAAChJ,SAAS,CAAC,CAAC;kBACpB;gBACJ;;gBAEA;gBACA;gBACA;gBACAyK,YAAY,GAAGA,YAAY,CAACre,IAAI,cAAAC,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAwf,SAAA;kBAAA,IAAAvV,IAAA,EAAAwV,UAAA,EAAArK,YAAA,EAAAsK,MAAA;kBAAA,OAAA5f,YAAA,GAAAC,CAAA,WAAA4f,SAAA;oBAAA,kBAAAA,SAAA,CAAA7hB,CAAA;sBAAA;wBAAA6hB,SAAA,CAAA7hB,CAAA;wBAAA,OACZJ,CAAC,CAACuM,IAAI,CAAC2V,WAAW,CAAC,CAAC;sBAAA;wBAAjC3V,IAAI,GAAA0V,SAAA,CAAA7gB,CAAA;wBACJ2gB,UAAU,GAAG,IAAIlK,UAAU,CAACtL,IAAI,CAAC;wBACjCmL,YAAY,GAAGqK,UAAU,CAAC/D,MAAM,CAAC,UAAUmE,GAAG,EAAEC,KAAI,EAAE;0BAAE,OAAOD,GAAG,GAAGE,MAAM,CAACC,YAAY,CAACF,KAAI,CAAC;wBAAE,CAAC,EAAE,EAAE,CAAC;wBACtGJ,MAAM,GAAGO,IAAI,CAAC7K,YAAY,CAAC;wBAC/B,IAAI;0BACAkI,OAAI,CAACY,oBAAoB,CAAC/b,IAAI,CAACud,MAAM,CAAC;wBAC1C,CAAC,CAAC,OAAOlX,GAAG,EAAE;0BACV;wBAAA;sBACH;wBAAA,OAAAmX,SAAA,CAAA5gB,CAAA;oBAAA;kBAAA,GAAAygB,QAAA;gBAAA,CACJ,GAAC;cACN;YACJ,CAAC,CAAC;YAEFlC,OAAI,CAAChN,aAAa,CAACkM,gBAAgB,CAAC,MAAM,EAAE,YAAM;cAC9C3M,MAAM,CAACqQ,SAAS,CAAC,CAAC,CAAC9M,OAAO,CAAC,UAAA+M,KAAK;gBAAA,OAAIA,KAAK,CAACC,IAAI,CAAC,CAAC;cAAA,EAAC;cACjDrB,YAAY,CAACre,IAAI,CAAC,YAAM;gBACpB,IAAI;kBACA4c,OAAI,CAACY,oBAAoB,CAAChF,QAAQ,CAAC,CAAC;gBACxC,CAAC,CAAC,OAAO1Q,GAAG,EAAE;kBACV;gBAAA;cAER,CAAC,CAAC;YACN,CAAC,CAAC;YAEF,IAAIyK,MAAM,GAAGqK,OAAI,CAAC7E,SAAS,CAAC,CAAC;YAE7B,IAAIhO,QAAQ,GAAG+S,SAAS,CAAC/S,QAAQ,IAAIlG,QAAQ,CAAC8b,eAAe,CAACjW,IAAI,IAAI,OAAO;YAC7EkT,OAAI,CAAChL,UAAU,CAACgO,IAAI,CAAC,mBAAmB,EAAErN,MAAM,EAAEqK,OAAI,CAACY,oBAAoB,EAAEJ,QAAQ,EAAErT,QAAQ,CAAC;YAChG6S,OAAI,CAAChN,aAAa,CAAC7E,KAAK,CAAC,GAAG,CAAC;YAC7B6R,OAAI,CAACjN,WAAW,GAAG,IAAI;UAC3B,CAAC,CAAC,SACI,CAAC,UAAA7H,GAAG,EAAI;YACV8E,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAE7F,GAAG,CAAC;YAC/C8U,OAAI,CAAC7L,kBAAkB,GAAG,KAAK;YAC/B6L,OAAI,CAACC,wBAAwB,CAAC,CAAC;UACnC,CAAC,CAAC;QACV,CAAC;QACDH,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;UACnB,IAAI,CAAC,IAAI,CAAC3L,kBAAkB,EAAE;YAC1B;UACJ;UAEA,IAAI,CAACA,kBAAkB,GAAG,KAAK;UAC/B,IAAI,CAAC8L,wBAAwB,CAAC,CAAC;;UAE/B;UACA,IAAI,IAAI,CAACjL,UAAU,EAAE;YACjB,IAAI,CAACA,UAAU,CAAC8I,MAAM,CAAC,kBAAkB,CAAC,SAAM,CAAC,YAAY,CAAE,CAAC,CAAC;UACrE;UAEA,IAAI,IAAI,CAAC/K,WAAW,IAAI,IAAI,CAACC,aAAa,EAAE;YACxC,IAAI,CAACA,aAAa,CAAC8P,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC/P,WAAW,GAAG,KAAK;UAC5B;UAEA,IAAI,CAACiE,SAAS,CAAC,CAAC;UAChB,IAAI,CAACV,8BAA8B,GAAG,EAAE;UACxC,IAAI,CAACG,2BAA2B,GAAG,IAAI;;UAEvC;UACA,IAAI,IAAI,CAACyK,qBAAqB,EAAE;YAC5B,IAAI,CAACA,qBAAqB,CAAC+B,KAAK,CAAC,CAAC,SAAM,CAAC,YAAY,CAAE,CAAC,CAAC;YACzD,IAAI,CAAC/B,qBAAqB,GAAG,IAAI;YACjC,IAAI,CAACC,qBAAqB,GAAG,IAAI;UACrC;;UAEA;UACA,IAAI,IAAI,CAAClK,6BAA6B,EAAE;YACpC,IAAIlB,GAAG,GAAG,IAAI,CAACvD,QAAQ,CAAC,IAAI,CAACyE,6BAA6B,CAAC9O,KAAK,CAAC;YACjE,IAAI4N,GAAG,EAAE;cACLA,GAAG,CAAC3D,WAAW,GAAG,KAAK;YAC3B;YACA,IAAI,CAAC6E,6BAA6B,GAAG,IAAI;UAC7C;;UAEA;UACA,KAAK,IAAIrW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC4R,QAAQ,CAAC5Q,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC4R,QAAQ,CAAC5R,CAAC,CAAC,CAACwR,WAAW,EAAE;cAC9B,IAAI,CAACI,QAAQ,CAAC5R,CAAC,CAAC,CAACwR,WAAW,GAAG,KAAK;YACxC;UACJ;;UAEA;UACA,IAAI,CAACqG,mBAAmB,CAAC;YACrB/J,IAAI,EAAE,oBAAoB;YAC1BlF,OAAO,EAAE,qBAAqB;YAC9BmQ,IAAI,EAAE,0BAA0B;YAChCuJ,WAAW,EAAE,IAAI;YACjBC,aAAa,EAAE;UACnB,CAAC,CAAC;QACN,CAAC;QACDlD,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UACvB,IAAI,CAAC,IAAI,CAAC/L,kBAAkB,EAAE;YAC1B;UACJ;UAEA,IAAI,IAAI,CAACC,kBAAkB,EAAE;YACzB,IAAI,CAACD,kBAAkB,CAACoE,SAAS,CAACC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC;YAC9D,IAAI,CAACrE,kBAAkB,CAACoE,SAAS,CAACmB,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,uBAAuB,CAAC;YACjG,IAAI,CAACvF,kBAAkB,CAAC5L,KAAK,GAAG,IAAI,CAAC4L,kBAAkB,CAACqI,YAAY,CAAC,gBAAgB,CAAC,IAAI,kBAAkB;YAC5G,IAAI6G,OAAO,GAAG,IAAI,CAAClP,kBAAkB,CAACqI,YAAY,CAAC,eAAe,CAAC;YACnE,IAAI6G,OAAO,EAAE;cACT,IAAI,CAAClP,kBAAkB,CAACsI,eAAe,CAACvL,SAAS,CAACC,QAAQ,CAACkS,OAAO,EAAE;gBAAE3G,mBAAmB,EAAE;cAAK,CAAC,CAAC,CAAC;YACvG;UACJ,CAAC,MAAM;YACH,IAAI,CAACvI,kBAAkB,CAACoE,SAAS,CAACmB,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;YACjE,IAAI,CAACvF,kBAAkB,CAACoE,SAAS,CAACmB,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;YAC7E,IAAI,CAACvF,kBAAkB,CAACoE,SAAS,CAACC,GAAG,CAAC,kBAAkB,CAAC;YACzD,IAAI,CAACrE,kBAAkB,CAACmP,IAAI,CAAC,CAAC;YAC9B,IAAI,CAACnP,kBAAkB,CAAC5L,KAAK,GAAG,IAAI,CAAC4L,kBAAkB,CAACqI,YAAY,CAAC,kBAAkB,CAAC,IAAI,oBAAoB;YAChH,IAAI+G,SAAS,GAAG,IAAI,CAACpP,kBAAkB,CAACqI,YAAY,CAAC,iBAAiB,CAAC;YACvE,IAAI+G,SAAS,EAAE;cACX,IAAI,CAACpP,kBAAkB,CAACsI,eAAe,CAACvL,SAAS,CAACC,QAAQ,CAACoS,SAAS,EAAE;gBAAE7G,mBAAmB,EAAE;cAAK,CAAC,CAAC,CAAC;YACzG;UACJ;QACJ,CAAC;QACD8G,0BAA0B,WAA1BA,0BAA0BA,CAAA,EAAG;UACzB;QAAA,CACH;QACD9D,4BAA4B,WAA5BA,4BAA4BA,CAAA,EAAG;UAC3B;UACA;QAAA,CACH;QACD1E,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UAClB,IAAI,CAAC/E,UAAU,CAAC;YACZxB,IAAI,EAAE,WAAW;YACjBlI,WAAW,EAAE0C,MAAM,CAAC5I;UACxB,CAAC,CAAC;QACN,CAAC;QACDkR,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UAClB,IAAMkM,cAAc,GAAG,IAAI,CAAChR,QAAQ,CAAC5Q,MAAM;UAC3C,IAAI,CAAC4Q,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAC1I,MAAM,CAAC,UAAAiM,GAAG;YAAA,OAAIA,GAAG,CAACvB,IAAI,KAAK,WAAW;UAAA,EAAC;UACrE,IAAMiP,YAAY,GAAGD,cAAc,GAAG,IAAI,CAAChR,QAAQ,CAAC5Q,MAAM;UAC1D,OAAO6hB,YAAY;QACvB,CAAC;QACD7M,cAAc,WAAdA,cAAcA,CAAA,EAAG;UAAA,IAAA8M,OAAA;UACb,IAAI,CAAC,IAAI,CAACpR,UAAU,EAAE;YAClB;UACJ;UACAqR,UAAU,CAAC,YAAM;YACbD,OAAI,CAACzR,aAAa,CAAC2R,SAAS,GAAGF,OAAI,CAACzR,aAAa,CAAC4R,YAAY,GAAGH,OAAI,CAACzR,aAAa,CAAC6R,YAAY;UACpG,CAAC,EAAE,EAAE,CAAC;QACV,CAAC;QACDC,eAAe,WAAfA,eAAeA,CAACrK,KAAK,EAAE;UACnB,IAAI,CAACjH,MAAM,GAAGiH,KAAK,CAACsK,MAAM,CAAC/hB,KAAK;QACpC,CAAC;QACDkZ,SAAS,WAATA,SAASA,CAAA,EAAG;UACR,OAAO,IAAI,CAACpJ,YAAY,CAACwK,YAAY,CAAC,qBAAqB,CAAC,IACrD,IAAI,CAACxK,YAAY,CAACwK,YAAY,CAAC,cAAc,CAAC;QACzD,CAAC;QACD0H,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;UACtB,IAAIjV,MAAM,CAACkV,4BAA4B,EAAE;YACrC,OAAOjd,QAAQ,CAAC4O,aAAa,CAAC7G,MAAM,CAACkV,4BAA4B,CAAC;UACtE;UAEA,OAAOjd,QAAQ,CAAC4O,aAAa,CAAC,wCAAwC,CAAC;QAC3E,CAAC;QACDM,iBAAiB,WAAjBA,iBAAiBA,CAACpP,IAAI,EAAEod,SAAS,EAAE;UAAA,IAAAC,OAAA;UAC/B,IAAMC,SAAS,GAAG,IAAI,CAACJ,uBAAuB,CAAC,CAAC;UAChD,IAAI,CAACI,SAAS,EAAE;YACZ;UACJ;UAEAA,SAAS,CAACld,WAAW,GAAGJ,IAAI,IAAI,EAAE;UAClCsd,SAAS,CAACF,SAAS,GAAG,0BAA0B,IAAIA,SAAS,IAAI,YAAY,CAAC;UAE9E,IAAI,IAAI,CAACrR,oBAAoB,EAAE;YAC3BwR,YAAY,CAAC,IAAI,CAACxR,oBAAoB,CAAC;YACvC,IAAI,CAACA,oBAAoB,GAAG,IAAI;UACpC;UAEA,IAAI,CAAC/L,IAAI,EAAE;YACP;UACJ;UAEA,IAAI,CAAC+L,oBAAoB,GAAG6Q,UAAU,CAAC,YAAM;YACzCU,SAAS,CAACld,WAAW,GAAG,EAAE;YAC1Bid,OAAI,CAACtR,oBAAoB,GAAG,IAAI;UACpC,CAAC,EAAE,IAAI,CAAC;QACZ,CAAC;QACDyR,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UACvB,IAAI,IAAI,CAAC1R,mBAAmB,EAAE;YAC1ByR,YAAY,CAAC,IAAI,CAACzR,mBAAmB,CAAC;YACtC,IAAI,CAACA,mBAAmB,GAAG,IAAI;UACnC;QACJ,CAAC;QACD2R,aAAa,WAAbA,aAAaA,CAACC,KAAK,EAAE;UAAA,IAAAC,cAAA;UACjB,IAAM1Z,KAAK,IAAA0Z,cAAA,GAAGD,KAAK,CACdE,OAAO,CAAC,kDAAkD,CAAC,cAAAD,cAAA,uBADlDA,cAAA,CAER7O,aAAa,CAAC,OAAO,CAAC;UAE5B,IAAI,CAAC7K,KAAK,EAAE;YACR,OAAOyZ,KAAK,CAACG,OAAO,CAACC,OAAO,IAAI,YAAY;UAChD;UAEA,OAAO,CAAC7Z,KAAK,CAAC7D,WAAW,IAAI,EAAE,EAC1BqP,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CACpB3P,IAAI,CAAC,CAAC,IACJ4d,KAAK,CAACG,OAAO,CAACC,OAAO,IACrB,YAAY;QACvB,CAAC;QACDC,4BAA4B,WAA5BA,4BAA4BA,CAACL,KAAK,EAAE;UAChC,IAAIM,QAAQ,GAAGN,KAAK,CAACO,kBAAkB;UACvC,IAAID,QAAQ,IAAIA,QAAQ,CAACzM,SAAS,CAAC2M,QAAQ,CAAC,kBAAkB,CAAC,EAAE;YAC7D,OAAOF,QAAQ;UACnB;UAEAA,QAAQ,GAAG9d,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;UACxC6d,QAAQ,CAACZ,SAAS,GAAG,kBAAkB;UACvCM,KAAK,CAACS,qBAAqB,CAAC,UAAU,EAAEH,QAAQ,CAAC;UAEjD,OAAOA,QAAQ;QACnB,CAAC;QACDI,2BAA2B,WAA3BA,2BAA2BA,CAACV,KAAK,EAAE;UAC/BA,KAAK,CAACnM,SAAS,CAACmB,MAAM,CAAC,YAAY,CAAC;UACpCgL,KAAK,CAACW,eAAe,CAAC,cAAc,CAAC;UAErC,IAAML,QAAQ,GAAGN,KAAK,CAACO,kBAAkB;UACzC,IAAID,QAAQ,IAAIA,QAAQ,CAACzM,SAAS,CAAC2M,QAAQ,CAAC,kBAAkB,CAAC,EAAE;YAC7DF,QAAQ,CAAC5d,WAAW,GAAG,EAAE;UAC7B;QACJ,CAAC;QACDke,yBAAyB,WAAzBA,yBAAyBA,CAACZ,KAAK,EAAExY,OAAO,EAAE;UACtC,IAAM8Y,QAAQ,GAAG,IAAI,CAACD,4BAA4B,CAACL,KAAK,CAAC;UACzDA,KAAK,CAACnM,SAAS,CAACC,GAAG,CAAC,YAAY,CAAC;UACjCkM,KAAK,CAAC/G,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;UAC1CqH,QAAQ,CAAC5d,WAAW,GAAG8E,OAAO;QAClC,CAAC;QACDqZ,2BAA2B,WAA3BA,2BAA2BA,CAACb,KAAK,EAAE;UAC/B,IAAI,CAACA,KAAK,IAAIA,KAAK,CAACc,QAAQ,IAAId,KAAK,CAAC/V,IAAI,KAAK,QAAQ,EAAE;YACrD,OAAO,IAAI;UACf;UAEA,IAAMzM,KAAK,GAAG,CAACwiB,KAAK,CAACxiB,KAAK,IAAI,EAAE,EAAE4E,IAAI,CAAC,CAAC;UACxC,IAAI,CAAC5E,KAAK,EAAE;YACR,OAAO,IAAI;UACf;UAEA,IAAMujB,MAAM,GAAGlI,MAAM,CAACrb,KAAK,CAAC;UAC5B,IAAMwjB,UAAU,GAAG,IAAI,CAACjB,aAAa,CAACC,KAAK,CAAC;UAE5C,IAAInH,MAAM,CAACoI,KAAK,CAACF,MAAM,CAAC,EAAE;YACtB,UAAA3a,MAAA,CAAU4a,UAAU;UACxB;UAEA,IAAME,GAAG,GAAGlB,KAAK,CAAClI,YAAY,CAAC,KAAK,CAAC;UACrC,IAAIoJ,GAAG,KAAK,IAAI,IAAIH,MAAM,GAAGlI,MAAM,CAACqI,GAAG,CAAC,EAAE;YACtC,UAAA9a,MAAA,CAAU4a,UAAU,eAAA5a,MAAA,CAAY8a,GAAG;UACvC;UAEA,IAAMC,GAAG,GAAGnB,KAAK,CAAClI,YAAY,CAAC,KAAK,CAAC;UACrC,IAAIqJ,GAAG,KAAK,IAAI,IAAIJ,MAAM,GAAGlI,MAAM,CAACsI,GAAG,CAAC,EAAE;YACtC,UAAA/a,MAAA,CAAU4a,UAAU,eAAA5a,MAAA,CAAY+a,GAAG;UACvC;UAEA,OAAO,IAAI;QACf,CAAC;QACDC,oBAAoB,WAApBA,oBAAoBA,CAACpB,KAAK,EAAE;UACxB,IAAMxY,OAAO,GAAG,IAAI,CAACqZ,2BAA2B,CAACb,KAAK,CAAC;UACvD,IAAI,CAACxY,OAAO,EAAE;YACV,IAAI,CAACkZ,2BAA2B,CAACV,KAAK,CAAC;YACvC,OAAO,IAAI;UACf;UAEA,IAAI,CAACY,yBAAyB,CAACZ,KAAK,EAAExY,OAAO,CAAC;UAC9C,OAAO,KAAK;QAChB,CAAC;QACD6Z,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACf,IAAIC,OAAO,GAAG,IAAI;UAElB,IAAI,CAACC,gBAAgB,CAAC,CAAC,CAACnQ,OAAO,CAAC,UAAA2O,KAAK,EAAI;YACrCuB,OAAO,GAAGD,OAAI,CAACF,oBAAoB,CAACpB,KAAK,CAAC,IAAIuB,OAAO;UACzD,CAAC,CAAC;UAEF,OAAOA,OAAO;QAClB,CAAC;QACDE,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAG;UAChB,IAAI,CAAC,IAAI,CAACJ,gBAAgB,CAAC,CAAC,EAAE;YAC1B,IAAI,CAACvB,wBAAwB,CAAC,CAAC;YAC/B,IAAI,CAAC3R,aAAa,GAAG,KAAK;YAC1B,IAAI,CAACuD,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC;YACnD;UACJ;UAEA,IAAI,CAACvD,aAAa,GAAG,IAAI;UACzB,IAAI,CAACuD,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC;UACnD,IAAI,CAAC0G,qBAAqB,CAAC,CAAC;QAChC,CAAC;QACDoJ,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAME,cAAc,GAAGlf,QAAQ,CAAC2V,gBAAgB,CAAC,8BAA8B,CAAC;UAChF,IAAIuJ,cAAc,CAACvkB,MAAM,GAAG,CAAC,EAAE;YAC3B,OAAOukB,cAAc;UACzB;UAEA,OAAOlf,QAAQ,CAAC2V,gBAAgB,CAC5B,uFAAuF,GACvF,wFAAwF,GACxF,wFACJ,CAAC;QACL,CAAC;QACDwJ,sBAAsB,WAAtBA,sBAAsBA,CAACC,SAAS,EAAEC,gBAAgB,EAAE;UAChD,IAAMC,kBAAkB,GAAGtf,QAAQ,CAAC2V,gBAAgB,2CAAA/R,MAAA,CAA0Cwb,SAAS,qDAAAxb,MAAA,CAAgDwb,SAAS,gBAAY,CAAC;UAC7K,IAAIE,kBAAkB,CAAC3kB,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAM4kB,OAAM,GAAG,EAAE;YAEjBD,kBAAkB,CAACzQ,OAAO,CAAC,UAAA2Q,QAAQ,EAAI;cACnC,IAAMxkB,KAAK,GAAGwkB,QAAQ,CAAClK,YAAY,CAAC,cAAc,CAAC,IAAIkK,QAAQ,CAACxkB,KAAK;cACrE,IAAIA,KAAK,EAAE;gBACPukB,OAAM,CAACjhB,IAAI,CAACtD,KAAK,CAAC;cACtB;YACJ,CAAC,CAAC;YAEF,OAAOukB,OAAM;UACjB;UAEA,IAAI,CAACF,gBAAgB,EAAE;YACnB,OAAO,EAAE;UACb;UAEA,IAAME,MAAM,GAAG,EAAE;UACjB,IAAME,UAAU,GAAGzf,QAAQ,CAAC2V,gBAAgB,CAAC0J,gBAAgB,CAAC;UAE9DI,UAAU,CAAC5Q,OAAO,CAAC,UAAA2Q,QAAQ,EAAI;YAC3B,IAAME,QAAQ,GAAGF,QAAQ,CAACphB,IAAI,CAACmR,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC;YAChE,IAAMoQ,WAAW,GAAG3f,QAAQ,CAAC4O,aAAa,kCAAAhL,MAAA,CAA+B8b,QAAQ,QAAI,CAAC;YAEtF,IAAIC,WAAW,IAAIA,WAAW,CAAC3kB,KAAK,EAAE;cAClCukB,MAAM,CAACjhB,IAAI,CAACqhB,WAAW,CAAC3kB,KAAK,CAAC;YAClC;UACJ,CAAC,CAAC;UAEF,OAAOukB,MAAM;QACjB,CAAC;QACDK,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAAG;UAC1B,IAAMC,eAAe,GAAG,EAAE;UAE1B7f,QAAQ,CAAC2V,gBAAgB,CAAC,uBAAuB,CAAC,CAAC9G,OAAO,CAAC,UAAAiR,IAAI,EAAI;YAC/D,IAAMC,eAAe,GAAGD,IAAI,CAAClR,aAAa,CAAC,2BAA2B,CAAC;YACvE,IAAMoR,qBAAqB,GAAGF,IAAI,CAAClR,aAAa,CAAC,mCAAmC,CAAC;YACrF,IAAMqR,UAAU,GAAGF,eAAe,GAAGA,eAAe,CAAC/kB,KAAK,GAAG8kB,IAAI,CAACxK,YAAY,CAAC,kBAAkB,CAAC;YAElG,IAAI,CAAC2K,UAAU,EAAE;cACb;YACJ;YAEAJ,eAAe,CAACvhB,IAAI,CAAC;cACjB2hB,UAAU,EAAEA,UAAU;cACtBC,gBAAgB,EAAEF,qBAAqB,GAAG,CAACA,qBAAqB,CAAChlB,KAAK,IAAI,EAAE,EAAE4E,IAAI,CAAC,CAAC,GAAG;YAC3F,CAAC,CAAC;UACN,CAAC,CAAC;UAEF,OAAOigB,eAAe;QAC1B,CAAC;QACDrO,mBAAmB,WAAnBA,mBAAmBA,CAACD,YAAY,EAAE;UAC9B,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAAC9J,IAAI,EAAE;YACrC;UACJ;UACA,IAAI,CAAC0Y,wBAAwB,CAAC5O,YAAY,CAAC9J,IAAI,CAAC;UAChD;UACA,IAAIN,GAAG,GAAG,IAAI,CAACgG,aAAa,CAACiT,SAAS,CAAC,UAAA7mB,CAAC;YAAA,OAAIA,CAAC,CAACkO,IAAI,KAAK8J,YAAY,CAAC9J,IAAI;UAAA,EAAC;UACzE,IAAIN,GAAG,IAAI,CAAC,EAAE;YACV,IAAI,CAACgG,aAAa,CAACkT,MAAM,CAAClZ,GAAG,EAAE,CAAC,EAAEoK,YAAY,CAAC;UACnD,CAAC,MAAM;YACH,IAAI,CAACpE,aAAa,CAAC7O,IAAI,CAACiT,YAAY,CAAC;UACzC;UACA,IAAI,CAAC+O,2BAA2B,CAAC/O,YAAY,CAAC;UAC9C,IAAI,CAAC5B,cAAc,CAAC,CAAC;QACzB,CAAC;QACD8B,kBAAkB,WAAlBA,kBAAkBA,CAACF,YAAY,EAAE;UAC7B,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAAC9J,IAAI,EAAE;YACrC;UACJ;UACA,IAAI,CAAC0Y,wBAAwB,CAAC5O,YAAY,CAAC9J,IAAI,CAAC;UAChD,IAAIN,GAAG,GAAG,IAAI,CAACgG,aAAa,CAACiT,SAAS,CAAC,UAAA7mB,CAAC;YAAA,OAAIA,CAAC,CAACkO,IAAI,KAAK8J,YAAY,CAAC9J,IAAI;UAAA,EAAC;UACzE,IAAIN,GAAG,IAAI,CAAC,EAAE;YACV,IAAI,CAACgG,aAAa,CAACkT,MAAM,CAAClZ,GAAG,EAAE,CAAC,EAAEoK,YAAY,CAAC;YAC/C,IAAI,CAAC+O,2BAA2B,CAAC/O,YAAY,CAAC;YAC9C,IAAI,CAAC5B,cAAc,CAAC,CAAC;UACzB;QACJ,CAAC;QACD2Q,2BAA2B,WAA3BA,2BAA2BA,CAAC/O,YAAY,EAAE;UAAA,IAAAgP,OAAA;UACtC,IAAI,CAAChP,YAAY,IAAI,CAACA,YAAY,CAAC9J,IAAI,IAAI,CAAC8J,YAAY,CAAC2K,aAAa,IAAI3K,YAAY,CAAC2K,aAAa,IAAI,CAAC,EAAE;YACvG;UACJ;UACA,IAAI,CAAC9O,yBAAyB,CAACmE,YAAY,CAAC9J,IAAI,CAAC,GAAGiV,UAAU,CAAC,YAAM;YACjE6D,OAAI,CAAC5O,kBAAkB,CAACJ,YAAY,CAAC9J,IAAI,CAAC;UAC9C,CAAC,EAAE8J,YAAY,CAAC2K,aAAa,CAAC;QAClC,CAAC;QACDiE,wBAAwB,WAAxBA,wBAAwBA,CAACzO,gBAAgB,EAAE;UACvC,IAAI8O,OAAO,GAAG,IAAI,CAACpT,yBAAyB,CAACsE,gBAAgB,CAAC;UAC9D,IAAI,CAAC8O,OAAO,EAAE;YACV;UACJ;UACAnD,YAAY,CAACmD,OAAO,CAAC;UACrB,OAAO,IAAI,CAACpT,yBAAyB,CAACsE,gBAAgB,CAAC;QAC3D,CAAC;QACDC,kBAAkB,WAAlBA,kBAAkBA,CAACD,gBAAgB,EAAE;UACjC,IAAI,CAACyO,wBAAwB,CAACzO,gBAAgB,CAAC;UAC/C,IAAI,CAACvE,aAAa,GAAG,IAAI,CAACA,aAAa,CAACtK,MAAM,CAAC,UAAAtJ,CAAC;YAAA,OAAIA,CAAC,CAACkO,IAAI,KAAKiK,gBAAgB;UAAA,EAAC;QACpF,CAAC;QACD+O,mBAAmB,WAAnBA,mBAAmBA,CAAC/O,gBAAgB,EAAE;UAClC,IAAI,CAACC,kBAAkB,CAACD,gBAAgB,CAAC;QAC7C,CAAC;QACDgP,wBAAwB,WAAxBA,wBAAwBA,CAAChP,gBAAgB,EAAEiP,UAAU,EAAE;UACnD,IAAI,CAAC,IAAI,CAAC5S,UAAU,EAAE;YAClB;UACJ;UACA,IAAIW,MAAM,GAAG,IAAI,CAACwF,SAAS,CAAC,CAAC;UAC7B,IAAI,CAACnG,UAAU,CAAC8I,MAAM,CAAC,0BAA0B,EAAEnI,MAAM,EAAEgD,gBAAgB,EAAEiP,UAAU,CAAC,SAC9E,CAAC,UAAA1c,GAAG;YAAA,OAAI8E,OAAO,CAACe,KAAK,CAAC,uCAAuC,EAAE7F,GAAG,CAAC;UAAA,EAAC;QAClF,CAAC;QACDqQ,SAAS,WAATA,SAASA,CAAC5F,MAAM,EAAE;UACd,IAAI,CAAC5D,YAAY,CAAC2L,YAAY,CAAC,qBAAqB,EAAE/H,MAAM,IAAI,EAAE,CAAC;UACnE,IAAI,CAAC5D,YAAY,CAAC2L,YAAY,CAAC,cAAc,EAAE/H,MAAM,IAAI,EAAE,CAAC;QAChE,CAAC;QACDkS,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAI,CAACtM,SAAS,CAAC,EAAE,CAAC;UAClB,IAAI,CAACrJ,oBAAoB,GAAG,KAAK;UACjC,IAAI,CAACM,QAAQ,GAAG,EAAE;UAClB,IAAI,CAAC4F,eAAe,CAAC,CAAC;QAC1B,CAAC;QACD0P,aAAa,WAAbA,aAAaA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACZ,IAAI,CAAChW,YAAY,GAAG9K,QAAQ,CAAC4O,aAAa,CAAC7G,MAAM,CAAC0C,oBAAoB,CAAC;UACvE,IAAI,CAACM,aAAa,GAAG/K,QAAQ,CAAC4O,aAAa,CAAC7G,MAAM,CAAC2C,yBAAyB,CAAC;UAC7E,IAAI,CAACM,aAAa,GAAGhL,QAAQ,CAAC4O,aAAa,CAAC7G,MAAM,CAACyC,4BAA4B,CAAC;UAChF,IAAI,CAAC7G,WAAW,GAAG3D,QAAQ,CAAC4O,aAAa,CAAC7G,MAAM,CAACgZ,0BAA0B,CAAC;UAE5E,IAAMrS,MAAM,GAAG,IAAI,CAACwF,SAAS,CAAC,CAAC;UAC/B,IAAIxF,MAAM,EAAE;YACR,IAAI,CAACsS,eAAe,CAACtS,MAAM,CAAC;UAChC;;UAEA;UACA,IAAI,CAAC1D,aAAa,CAACiN,gBAAgB,CAAC,QAAQ,EAAE,YAAM;YAChD,IAAI,CAAC6I,OAAI,CAACxV,MAAM,EAAE;cACd;YACJ;YACA,IAAM2V,SAAS,GAAG,EAAE;YACpB,IAAMC,QAAQ,GAAGJ,OAAI,CAAC9V,aAAa,CAAC4R,YAAY,GAAGkE,OAAI,CAAC9V,aAAa,CAAC6R,YAAY,GAAGiE,OAAI,CAAC9V,aAAa,CAAC2R,SAAS,IAAIsE,SAAS;YAC9HH,OAAI,CAACzV,UAAU,GAAG6V,QAAQ;UAC9B,CAAC,CAAC;UAEF,IAAI,CAACpW,YAAY,CAACmN,gBAAgB,CAAC,OAAO,EAAE,UAAAxF,KAAK,EAAI;YACjD,IAAIqO,OAAI,CAACxV,MAAM,IAAI,IAAI,EAAE;cACrB;YACJ;YAEA,IAAImH,KAAK,CAACrQ,GAAG,KAAK,OAAO,IAAI,CAACqQ,KAAK,CAAC0O,QAAQ,EAAE;cAC1CL,OAAI,CAAC/V,aAAa,CAACqW,KAAK,CAAC,CAAC;YAC9B;UACJ,CAAC,CAAC;UAEF,IAAI,CAACtW,YAAY,CAACmN,gBAAgB,CAAC,OAAO,EAAE,UAAC9e,CAAC,EAAK;YAC/C2nB,OAAI,CAAChE,eAAe,CAAC3jB,CAAC,CAAC;YAEvB,IAAIA,CAAC,CAAC4jB,MAAM,CAAC/hB,KAAK,CAAC4E,IAAI,CAAC,CAAC,EAAE;cACvBkhB,OAAI,CAAC/V,aAAa,CAACoT,eAAe,CAAC,UAAU,CAAC;YAClD,CAAC,MAAM;cACH2C,OAAI,CAAC/V,aAAa,CAAC0L,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;YACrD;UACJ,CAAC,CAAC;UAEF,IAAI,CAAC3L,YAAY,CAACmN,gBAAgB,CAAC,OAAO,EAAE,UAAC9e,CAAC,EAAK;YAC/C;YACAujB,UAAU,CAAC,YAAM;cACboE,OAAI,CAACtV,MAAM,GAAGsV,OAAI,CAAChW,YAAY,CAAC9P,KAAK;cACrC,IAAI8lB,OAAI,CAAChW,YAAY,CAAC9P,KAAK,CAAC4E,IAAI,CAAC,CAAC,EAAE;gBAChCkhB,OAAI,CAAC/V,aAAa,CAACoT,eAAe,CAAC,UAAU,CAAC;cAClD,CAAC,MAAM;gBACH2C,OAAI,CAAC/V,aAAa,CAAC0L,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;cACrD;YACJ,CAAC,EAAE,CAAC,CAAC;UACT,CAAC,CAAC;UAEF,IAAI,CAAC1L,aAAa,CAACkN,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAC/C,IAAI6I,OAAI,CAACxV,MAAM,IAAI,IAAI,EAAE;cACrBwV,OAAI,CAACxV,MAAM,CAACsI,OAAO,CAAC,CAAC;cACrBkN,OAAI,CAACxV,MAAM,GAAG,IAAI;cAElBwV,OAAI,CAAChM,iBAAiB,CAAC,CAAC;cACxBgM,OAAI,CAACzQ,mBAAmB,CAAC,CAAC;;cAE1B;cACA,IAAIyQ,OAAI,CAACvV,QAAQ,CAAC5Q,MAAM,GAAG,CAAC,EAAE;gBAC1B,IAAM0mB,OAAO,GAAGP,OAAI,CAACvV,QAAQ,CAACuV,OAAI,CAACvV,QAAQ,CAAC5Q,MAAM,GAAG,CAAC,CAAC;gBACvD,IAAI0mB,OAAO,CAAC9T,IAAI,KAAK,WAAW,IAAI,CAAC8T,OAAO,CAAC9e,OAAO,EAAE;kBAClDue,OAAI,CAACvV,QAAQ,CAAC+V,GAAG,CAAC,CAAC;gBACvB,CAAC,MAAM,IAAID,OAAO,CAAClW,WAAW,EAAE;kBAC5BkW,OAAO,CAAClW,WAAW,GAAG,KAAK;gBAC/B;cACJ;cAEA;YACJ;YAEA2V,OAAI,CAAC1N,WAAW,CAAC,CAAC;UACtB,CAAC,CAAC;UAEF,IAAMmO,oBAAoB,GAAGvhB,QAAQ,CAACwhB,sBAAsB,CAAC,+BAA+B,CAAC;UAE7F,KAAK,IAAI7nB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4nB,oBAAoB,CAAC5mB,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAClD4nB,oBAAoB,CAAC5nB,CAAC,CAAC,CAACse,gBAAgB,CAAC,OAAO,EAAE,UAAC9e,CAAC,EAAK;cACrDA,CAAC,CAACsoB,cAAc,CAAC,CAAC;cAElB,IAAI/S,MAAM,GAAGvV,CAAC,CAAC4jB,MAAM,CAACzH,YAAY,CAAC,qBAAqB,CAAC;cAEzD,IAAI,CAAC5G,MAAM,EAAE;gBACT3F,OAAO,CAACe,KAAK,CAAC,0FAA0F,CAAC;gBACzG;cACJ;cAEAgX,OAAI,CAACE,eAAe,CAACtS,MAAM,CAAC;YAChC,CAAC,CAAC;UACN;UAEA,KAAK,IAAI/U,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGoO,MAAM,CAACwD,QAAQ,CAAC5Q,MAAM,EAAEhB,GAAC,EAAE,EAAE;YAC7C,IAAI,CAACoV,UAAU,CAAChH,MAAM,CAACwD,QAAQ,CAAC5R,GAAC,CAAC,CAAC;UACvC;;UAEA;UACA,IAAI,IAAI,CAACqR,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,CAACiN,gBAAgB,CAAC,OAAO,EAAE,UAAC9e,CAAC,EAAK;cAChD,IAAIuoB,GAAG,GAAGvoB,CAAC,CAAC4jB,MAAM,CAACW,OAAO,CAAC,mBAAmB,CAAC;cAC/C,IAAI,CAACgE,GAAG,EAAE;gBACN;cACJ;cAEA,IAAIC,KAAK,GAAGD,GAAG,CAAChE,OAAO,CAAC,gBAAgB,CAAC,IAAIgE,GAAG,CAAChE,OAAO,CAAC,KAAK,CAAC;cAC/D,IAAI,CAACiE,KAAK,EAAE;gBACR;cACJ;cAEA,IAAIC,MAAM,GAAGD,KAAK,CAAC/S,aAAa,CAAC,MAAM,CAAC;cACxC,IAAIgT,MAAM,EAAE;gBACR3I,SAAS,CAAC4I,SAAS,CAACC,SAAS,CAACF,MAAM,CAAC1hB,WAAW,CAAC;gBACjD,IAAI6hB,UAAU,GAAGha,MAAM,CAAC/I,cAAc,IAAI,SAAS;gBACnD0iB,GAAG,CAACvhB,SAAS,GAAG,0CAA0C,GAAG4hB,UAAU;gBACvErF,UAAU,CAAC,YAAM;kBACbgF,GAAG,CAACvhB,SAAS,GAAG,0CAA0C;gBAC9D,CAAC,EAAE,IAAI,CAAC;cACZ;YACJ,CAAC,CAAC;UACN;UAEAH,QAAQ,CAACiY,gBAAgB,CAAC,OAAO,EAAE,UAAAxF,KAAK,EAAI;YACxC,IAAIA,KAAK,CAACsK,MAAM,CAACiF,OAAO,CAAC,8BAA8B,CAAC,EAAE;cACtDlB,OAAI,CAAClC,oBAAoB,CAACnM,KAAK,CAACsK,MAAM,CAAC;cACvC+D,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;YAC5B;UACJ,CAAC,CAAC;UAEFjf,QAAQ,CAACiY,gBAAgB,CAAC,QAAQ,EAAE,UAAAxF,KAAK,EAAI;YACzC,IAAIA,KAAK,CAACsK,MAAM,CAACiF,OAAO,CAAC,+IAA+I,CAAC,EAAE;cACvK,IAAIvP,KAAK,CAACsK,MAAM,CAACiF,OAAO,CAAC,8BAA8B,CAAC,EAAE;gBACtDlB,OAAI,CAAClC,oBAAoB,CAACnM,KAAK,CAACsK,MAAM,CAAC;cAC3C;cAEA+D,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;cACxB;YACJ;YAEA,IAAIxM,KAAK,CAACsK,MAAM,CAACW,OAAO,CAAC,8DAA8D,CAAC,EAAE;cACtFoD,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;YAC5B;UACJ,CAAC,CAAC;UAEFjf,QAAQ,CAACiY,gBAAgB,CAAC,OAAO,EAAE,UAAAxF,KAAK,EAAI;YACxC,IAAI,CAACA,KAAK,CAACsK,MAAM,CAACW,OAAO,CAAC,uDAAuD,CAAC,EAAE;cAChF;YACJ;YAEAhB,UAAU,CAAC,YAAM;cACboE,OAAI,CAAC7B,iBAAiB,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC,CAAC;UACT,CAAC,CAAC;;UAEF;UACA,IAAM7N,eAAe,GAAGpR,QAAQ,CAAC6I,cAAc,CAAC,iBAAiB,CAAC;UAClE,IAAIuI,eAAe,EAAE;YACjBA,eAAe,CAAC6G,gBAAgB,CAAC,OAAO,EAAE,YAAM;cAC5C,IAAMvJ,MAAM,GAAG0C,eAAe,CAACkE,YAAY,CAAC,qBAAqB,CAAC;cAClE,IAAI5G,MAAM,EAAE;gBACRoS,OAAI,CAACmB,YAAY,CAACvT,MAAM,CAAC;cAC7B;YACJ,CAAC,CAAC;UACN;;UAEA;UACA,IAAI,IAAI,CAACxC,mBAAmB,IAAInE,MAAM,CAACma,wBAAwB,EAAE;YAC7D,IAAI,CAACjW,SAAS,GAAGjM,QAAQ,CAAC4O,aAAa,CAAC7G,MAAM,CAACma,wBAAwB,CAAC;YACxE,IAAI,IAAI,CAACjW,SAAS,EAAE;cAChB,IAAI,CAACA,SAAS,CAACkW,KAAK,CAACC,OAAO,GAAG,EAAE;cACjC,IAAI,CAACnW,SAAS,CAACgM,gBAAgB,CAAC,OAAO,EAAE,YAAM;gBAC3C6I,OAAI,CAACuB,eAAe,CAAC,CAAC;cAC1B,CAAC,CAAC;YACN;UACJ;;UAEA;UACA,IAAI,IAAI,CAACrV,uBAAuB,IAAIjF,MAAM,CAACua,iCAAiC,EAAE;YAC1E,IAAI,CAACrV,kBAAkB,GAAGjN,QAAQ,CAAC4O,aAAa,CAAC7G,MAAM,CAACua,iCAAiC,CAAC;YAC1F,IAAI,IAAI,CAACrV,kBAAkB,EAAE;cACzB,IAAI,CAACA,kBAAkB,CAACgL,gBAAgB,CAAC,OAAO,EAAE,YAAM;gBACpD6I,OAAI,CAAClI,sBAAsB,CAAC,CAAC;cACjC,CAAC,CAAC;YACN;UACJ;QACJ,CAAC;QACDoI,eAAe,WAAfA,eAAeA,CAACtS,MAAM,EAAE;UACpB,IAAI,CAACX,UAAU,CAAC8I,MAAM,CAAC,iBAAiB,EAAEnI,MAAM,CAAC,SAAM,CAAC,UAAAzK,GAAG;YAAA,OAAI8E,OAAO,CAACe,KAAK,CAAC7F,GAAG,CAAC;UAAA,EAAC;QACtF,CAAC;QACD8N,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UACvB,IAAMrD,MAAM,GAAG,IAAI,CAACwF,SAAS,CAAC,CAAC;UAC/B,IAAIxF,MAAM,EAAE;YACR,IAAI,CAACsS,eAAe,CAACtS,MAAM,CAAC;UAChC;QACJ,CAAC;QACDuT,YAAY,WAAZA,YAAYA,CAACvT,MAAM,EAAE;UACjB,IAAM6T,IAAI,GAAG,IAAI;UACjB,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAA,EAAS;YAChC;YACA,IAAID,IAAI,CAACjX,MAAM,EAAE;cACbiX,IAAI,CAACjX,MAAM,CAACsI,OAAO,CAAC,CAAC;cACrB2O,IAAI,CAACjX,MAAM,GAAG,IAAI;cAClBiX,IAAI,CAAClS,mBAAmB,CAAC,CAAC;cAC1BkS,IAAI,CAACzN,iBAAiB,CAAC,CAAC;YAC5B;YAEAyN,IAAI,CAACxU,UAAU,CAAC8I,MAAM,CAAC,cAAc,EAAEnI,MAAM,CAAC,SACpC,CAAC,UAAAzK,GAAG;cAAA,OAAI8E,OAAO,CAACe,KAAK,CAAC,yBAAyB,EAAE7F,GAAG,CAAC;YAAA,EAAC;UACpE,CAAC;UAED,IAAI,OAAOwe,aAAa,KAAK,UAAU,EAAE;YACrCA,aAAa,CAAC;cACVphB,KAAK,EAAE0G,MAAM,CAAC1I,iBAAiB;cAC/B2F,OAAO,EAAE+C,MAAM,CAACzI,mBAAmB;cACnCojB,MAAM,EAAE3a,MAAM,CAACxI,kBAAkB;cACjCojB,UAAU,EAAE5a,MAAM,CAACvI,sBAAsB;cACzCojB,QAAQ,EAAE,SAAVA,QAAQA,CAAYC,SAAS,EAAE;gBAC3B,IAAIA,SAAS,EAAE;kBACXL,qBAAqB,CAAC,CAAC;gBAC3B;cACJ;YACJ,CAAC,CAAC;YAEF;UACJ;UAEA,IAAIhkB,MAAM,CAACskB,OAAO,CAAC/a,MAAM,CAACzI,mBAAmB,IAAI,qBAAqB,CAAC,EAAE;YACrEkjB,qBAAqB,CAAC,CAAC;UAC3B;QACJ,CAAC;QACD5M,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UAAA,IAAAmN,OAAA;UACpB;UACA,IAAI,CAACzF,wBAAwB,CAAC,CAAC;;UAE/B;UACA,IAAI,IAAI,CAAChS,MAAM,EAAE;YACb;UACJ;;UAEA;UACA,IAAI,CAACM,mBAAmB,GAAG8Q,UAAU,CAAC,YAAM;YACxC,IAAIqG,OAAI,CAACpX,aAAa,EAAE;cACpBoX,OAAI,CAACC,YAAY,CAAC,CAAC;cACnBD,OAAI,CAACpX,aAAa,GAAG,KAAK;YAC9B;YACAoX,OAAI,CAACnX,mBAAmB,GAAG,IAAI;UACnC,CAAC,EAAE,GAAG,CAAC;QACX,CAAC;QACDqX,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;UACnB,OAAO,IAAI,CAAC9D,sBAAsB,CAC9B,WAAW,EACX,sFACJ,CAAC;QACL,CAAC;QACD+D,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAAG;UAC1B,OAAO,IAAI,CAAC/D,sBAAsB,CAC9B,kBAAkB,EAClB,4FACJ,CAAC;QACL,CAAC;QACDgE,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAAG;UAC1B,OAAO,IAAI,CAAChE,sBAAsB,CAAC,kBAAkB,CAAC;QAC1D,CAAC;QACDiE,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UACpB,OAAO,IAAI,CAACjE,sBAAsB,CAC9B,YAAY,EACZ,uFACJ,CAAC;QACL,CAAC;QACD6D,YAAY,WAAZA,YAAYA,CAAA,EAAG;UAAA,IAAAK,OAAA;UACX,IAAM3U,MAAM,GAAG,IAAI,CAACwF,SAAS,CAAC,CAAC;UAC/B,IAAI,CAACxF,MAAM,EAAE;YACT,OAAOzS,OAAO,CAACC,OAAO,CAAC,CAAC;UAC5B;UAEA,IAAI,CAAC,IAAI,CAAC2iB,gBAAgB,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC3P,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC;YACnD,OAAOjT,OAAO,CAACC,OAAO,CAAC,CAAC;UAC5B;UAEA,IAAMonB,QAAQ,GAAG,CAAC,CAAC;;UAEnB;UACA;UACA;UACA,IAAMC,MAAM,GAAG,IAAI,CAACvE,gBAAgB,CAAC,CAAC;UAEtCuE,MAAM,CAAC1U,OAAO,CAAC,UAAA2O,KAAK,EAAI;YACpB,IAAMpb,GAAG,GAAGob,KAAK,CAACG,OAAO,CAACC,OAAO,IACzB,CAACJ,KAAK,CAACpf,IAAI,IAAI,EAAE,EAAEmR,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,QAAQ,EAAE,UAAAiU,KAAK;cAAA,OAAIA,KAAK,CAAC5hB,WAAW,CAAC,CAAC;YAAA,EAAE;YAE3G,IAAI,CAACQ,GAAG,EAAE;cACN;YACJ;YAEA,IAAIob,KAAK,CAAC/V,IAAI,KAAK,UAAU,EAAE;cAC3B6b,QAAQ,CAAClhB,GAAG,CAAC,GAAGob,KAAK,CAACiG,OAAO;YACjC,CAAC,MAAM,IAAIjG,KAAK,CAAC/V,IAAI,KAAK,QAAQ,EAAE;cAChC6b,QAAQ,CAAClhB,GAAG,CAAC,GAAGob,KAAK,CAACxiB,KAAK,GAAG0oB,UAAU,CAAClG,KAAK,CAACxiB,KAAK,CAAC,GAAG,IAAI;YAChE,CAAC,MAAM;cACHsoB,QAAQ,CAAClhB,GAAG,CAAC,GAAGob,KAAK,CAACxiB,KAAK,IAAI,IAAI;YACvC;UACJ,CAAC,CAAC;;UAEF;UACAsoB,QAAQ,CAACK,SAAS,GAAG,IAAI,CAACV,oBAAoB,CAAC,CAAC;UAChDK,QAAQ,CAACM,gBAAgB,GAAG,IAAI,CAACV,2BAA2B,CAAC,CAAC;UAC9DI,QAAQ,CAACO,gBAAgB,GAAG,IAAI,CAACV,2BAA2B,CAAC,CAAC;UAC9DG,QAAQ,CAACQ,UAAU,GAAG,IAAI,CAACV,qBAAqB,CAAC,CAAC;UAElD,IAAMvD,eAAe,GAAG,IAAI,CAACD,2BAA2B,CAAC,CAAC;UAC1D,IAAIC,eAAe,CAACllB,MAAM,GAAG,CAAC,EAAE;YAC5B2oB,QAAQ,CAACzD,eAAe,GAAGA,eAAe;YAC1CyD,QAAQ,CAACS,iBAAiB,GAAGlE,eAAe,CAACxb,GAAG,CAAC,UAAA2f,QAAQ;cAAA,OAAIA,QAAQ,CAAC/D,UAAU;YAAA,EAAC;UACrF;UAEA,OAAO,IAAI,CAAClS,UAAU,CAAC8I,MAAM,CAAC,cAAc,EAAEnI,MAAM,EAAE4U,QAAQ,CAAC,SACrD,CAAC,UAAArf,GAAG,EAAI;YACV8E,OAAO,CAACe,KAAK,CAAC,wBAAwB,EAAE7F,GAAG,CAAC;YAC5Cof,OAAI,CAACnU,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC;UACxD,CAAC,CAAC;QACV,CAAC;QACDuE,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAI,IAAI,CAAC7H,mBAAmB,EAAE;YAC1ByR,YAAY,CAAC,IAAI,CAACzR,mBAAmB,CAAC;YACtC,IAAI,CAACA,mBAAmB,GAAG,IAAI;UACnC;UAEA,IAAI,IAAI,CAACD,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,GAAG,KAAK;YAC1B,OAAO,IAAI,CAACqX,YAAY,CAAC,CAAC;UAC9B;UAEA,OAAO/mB,OAAO,CAACC,OAAO,CAAC,CAAC;QAC5B,CAAC;QACDuS,qBAAqB,WAArBA,qBAAqBA,CAACC,MAAM,EAAEuV,KAAK,EAAE;UACjC,IAAI,IAAI,CAAChZ,oBAAoB,IAAI,CAACgZ,KAAK,EAAE;YACrC;UACJ;UACA,IAAI,CAAC9R,SAAS,CAAC,IAAIC,WAAW,CAAC,6BAA6B,EAAE;YAAEC,MAAM,EAAE;cAAE3D,MAAM,EAAEA;YAAO;UAAE,CAAC,CAAC,CAAC;UAC9F,IAAI,CAAC4F,SAAS,CAAC5F,MAAM,CAAC;UACtB,IAAI,CAACzD,oBAAoB,GAAG,IAAI;QACpC,CAAC;QACDiZ,YAAY,WAAZA,YAAYA,CAAClf,OAAO,EAAE;UAAA,IAAAmf,MAAA,EAAAC,oBAAA;UAClB,IAAMtkB,IAAI,GAAGkF,OAAO,IAAIzG,OAAA,CAAOyG,OAAO,MAAK,QAAQ,IAAAmf,MAAA,IAAAC,oBAAA,GAC7Cpf,OAAO,CAACP,WAAW,cAAA2f,oBAAA,cAAAA,oBAAA,GAAIpf,OAAO,CAACzC,OAAO,cAAA4hB,MAAA,cAAAA,MAAA,GAAI,EAAE,GAC5Cnf,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE;UAEnBiU,SAAS,CAAC4I,SAAS,CAACC,SAAS,CAAChiB,IAAI,CAAC;QACvC,CAAC;QACDukB,cAAc,WAAdA,cAAcA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACb,IAAI,IAAI,CAACxY,WAAW,IAAI,CAAC,IAAI,CAACiC,UAAU,EAAE;YACtC;UACJ;UAEAkL,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;YAAEpB,KAAK,EAAE;cAAEqB,gBAAgB,EAAE,IAAI;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,eAAe,EAAE;YAAK;UAAE,CAAC,CAAC,CACpHnd,IAAI,CAAC,UAAAmP,MAAM,EAAI;YACZ,IAAIiO,QAAQ,GAAGC,aAAa,CAACC,eAAe,CAAC,uBAAuB,CAAC,GAC/D,uBAAuB,GACvBD,aAAa,CAACC,eAAe,CAAC,wBAAwB,CAAC,GACnD,wBAAwB,GACxB,YAAY;YAEtB6K,OAAI,CAACvY,aAAa,GAAG,IAAIyN,aAAa,CAAClO,MAAM,EAAE;cAC3CiO,QAAQ,EAAEA,QAAQ;cAClBG,kBAAkB,EAAE;YACxB,CAAC,CAAC;YAEF4K,OAAI,CAACtY,kBAAkB,GAAGsY,OAAI,CAAC9Y,MAAM;YACrC8Y,OAAI,CAAC1U,eAAe,GAAG,KAAK;YAE5B,IAAI2U,OAAO,GAAG,IAAIvW,OAAO,CAAC4L,OAAO,CAAC,CAAC;YACnC,IAAIlL,MAAM,GAAG4V,OAAI,CAACpQ,SAAS,CAAC,CAAC;YAC7B,IAAIsG,YAAY,GAAGve,OAAO,CAACC,OAAO,CAAC,CAAC;YAEpCooB,OAAI,CAACvY,aAAa,CAACkM,gBAAgB,CAAC,eAAe,EAAE,UAAC9e,CAAC,EAAK;cACxD,IAAIA,CAAC,CAACuM,IAAI,IAAIvM,CAAC,CAACuM,IAAI,CAACiV,IAAI,GAAG,CAAC,EAAE;gBAC3BH,YAAY,GAAGA,YAAY,CAACre,IAAI,cAAAC,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAA+oB,SAAA;kBAAA,IAAA9e,IAAA,EAAAwV,UAAA,EAAArK,YAAA,EAAAsK,MAAA;kBAAA,OAAA5f,YAAA,GAAAC,CAAA,WAAAipB,SAAA;oBAAA,kBAAAA,SAAA,CAAAlrB,CAAA;sBAAA;wBAAAkrB,SAAA,CAAAlrB,CAAA;wBAAA,OACZJ,CAAC,CAACuM,IAAI,CAAC2V,WAAW,CAAC,CAAC;sBAAA;wBAAjC3V,IAAI,GAAA+e,SAAA,CAAAlqB,CAAA;wBACJ2gB,UAAU,GAAG,IAAIlK,UAAU,CAACtL,IAAI,CAAC;wBACjCmL,YAAY,GAAGqK,UAAU,CAAC/D,MAAM,CAAC,UAAUmE,GAAG,EAAEC,MAAI,EAAE;0BAAE,OAAOD,GAAG,GAAGE,MAAM,CAACC,YAAY,CAACF,MAAI,CAAC;wBAAE,CAAC,EAAE,EAAE,CAAC;wBACtGJ,MAAM,GAAGO,IAAI,CAAC7K,YAAY,CAAC;wBAC/B0T,OAAO,CAAC3mB,IAAI,CAACud,MAAM,CAAC;sBAAC;wBAAA,OAAAsJ,SAAA,CAAAjqB,CAAA;oBAAA;kBAAA,GAAAgqB,QAAA;gBAAA,CACxB,GAAC;cACN;YACJ,CAAC,CAAC;YAEFF,OAAI,CAACvY,aAAa,CAACkM,gBAAgB,CAAC,MAAM,EAAE,YAAM;cAC9C3M,MAAM,CAACqQ,SAAS,CAAC,CAAC,CAAC9M,OAAO,CAAC,UAAA+M,KAAK;gBAAA,OAAIA,KAAK,CAACC,IAAI,CAAC,CAAC;cAAA,EAAC;cACjDrB,YAAY,CAACre,IAAI,CAAC;gBAAA,OAAMooB,OAAO,CAAC5P,QAAQ,CAAC,CAAC;cAAA,EAAC;YAC/C,CAAC,CAAC;YAEF,IAAIzO,QAAQ,GAAG+S,SAAS,CAAC/S,QAAQ,IAAIlG,QAAQ,CAAC8b,eAAe,CAACjW,IAAI,IAAI,OAAO;YAC7Eye,OAAI,CAACvW,UAAU,CAACgO,IAAI,CAAC,iBAAiB,EAAErN,MAAM,EAAE6V,OAAO,EAAEhL,QAAQ,EAAErT,QAAQ,CAAC;YAC5Eoe,OAAI,CAACvY,aAAa,CAAC7E,KAAK,CAAC,GAAG,CAAC;YAC7Bod,OAAI,CAACxY,WAAW,GAAG,IAAI;YACvBwY,OAAI,CAACI,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC,SACI,CAAC,UAAAzgB,GAAG,EAAI;YACV8E,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAE7F,GAAG,CAAC;UACnD,CAAC,CAAC;QACV,CAAC;QACDkL,aAAa,WAAbA,aAAaA,CAAA,EAAG;UACZ,IAAI,CAAC,IAAI,CAACrD,WAAW,IAAI,CAAC,IAAI,CAACC,aAAa,EAAE;YAC1C;UACJ;UAEA,IAAI,CAACA,aAAa,CAAC8P,IAAI,CAAC,CAAC;UACzB,IAAI,CAAC/P,WAAW,GAAG,KAAK;UACxB,IAAI,CAAC4Y,eAAe,CAAC,CAAC;QAC1B,CAAC;QACDrC,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAACvW,WAAW,EAAE;YAClB,IAAI,CAACqD,aAAa,CAAC,CAAC;UACxB,CAAC,MAAM;YACH,IAAI,CAACkV,cAAc,CAAC,CAAC;UACzB;QACJ,CAAC;QACDK,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,CAAC,IAAI,CAACzY,SAAS,EAAE;YACjB;UACJ;UAEA,IAAI,IAAI,CAACH,WAAW,EAAE;YAClB,IAAI,CAACG,SAAS,CAACoF,SAAS,CAACC,GAAG,CAAC,eAAe,CAAC;YAC7C,IAAI,CAACrF,SAAS,CAAC9L,SAAS,GAAG,wCAAwC;UACvE,CAAC,MAAM;YACH,IAAI,CAAC8L,SAAS,CAACoF,SAAS,CAACmB,MAAM,CAAC,eAAe,CAAC;YAChD,IAAI,CAACvG,SAAS,CAAC9L,SAAS,GAAG,8CAA8C;UAC7E;QACJ;MACJ,CAAC;MACDwkB,KAAK,EAAE;QACHnY,cAAc,WAAdA,cAAcA,CAAA,EAAG;UACb;UACA;QAAA,CACH;QACDU,kBAAkB,WAAlBA,kBAAkBA,CAAC0X,MAAM,EAAE;UACvB,IAAI,IAAI,CAAC3Y,SAAS,EAAE;YAChB,IAAI,CAACA,SAAS,CAACkW,KAAK,CAACC,OAAO,GAAGwC,MAAM,GAAG,MAAM,GAAI,IAAI,CAAC1Y,mBAAmB,GAAG,EAAE,GAAG,MAAO;UAC7F;UAEA,IAAI,IAAI,CAACnB,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,CAACoX,KAAK,CAACC,OAAO,GAAGwC,MAAM,GAAG,MAAM,GAAG,EAAE;UAC3D;UAEA,IAAI,IAAI,CAAC9Z,YAAY,EAAE;YACnB,IAAI,CAACA,YAAY,CAACwT,QAAQ,GAAGsG,MAAM;YACnC,IAAIA,MAAM,EAAE;cACR,IAAI,CAAC9Z,YAAY,CAACnH,WAAW,GAAG,EAAE;YACtC;UACJ;QACJ;MACJ,CAAC;MACDkhB,OAAO,WAAPA,OAAOA,CAAA,EAAG;QAAA,IAAAC,OAAA;QACN1oB,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAspB,SAAA;UAAA,OAAAxpB,YAAA,GAAAC,CAAA,WAAAwpB,SAAA;YAAA,kBAAAA,SAAA,CAAAzrB,CAAA;cAAA;gBAAAyrB,SAAA,CAAAzrB,CAAA;gBAAA,OACSurB,OAAI,CAACpX,eAAe,CAAC,CAAC;cAAA;gBAC5BoX,OAAI,CAACjE,aAAa,CAAC,CAAC;cAAC;gBAAA,OAAAmE,SAAA,CAAAxqB,CAAA;YAAA;UAAA,GAAAuqB,QAAA;QAAA,CACxB,GAAE,CAAC;QAEJvmB,MAAM,CAACyZ,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAACxK,kBAAkB,CAAC;QAChEjP,MAAM,CAACyZ,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,CAACpC,qBAAqB,CAAC;MACrF,CAAC;MACDoP,aAAa,WAAbA,aAAaA,CAAA,EAAG;QACZzmB,MAAM,CAAC0mB,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAACzX,kBAAkB,CAAC;QACnEjP,MAAM,CAAC0mB,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,CAACrP,qBAAqB,CAAC;QAEpF,IAAI,CAAC9F,SAAS,CAAC,KAAK,CAAC;QAErB,IAAI,IAAI,CAACzE,MAAM,EAAE;UACb,IAAI,CAACA,MAAM,CAACsI,OAAO,CAAC,CAAC;UACrB,IAAI,CAACtI,MAAM,GAAG,IAAI;QACtB;QACA,IAAI,IAAI,CAACyC,UAAU,EAAE;UACjB,IAAI,CAACA,UAAU,CAAC8N,IAAI,CAAC,CAAC;QAC1B;MACJ,CAAC;MACDmI,QAAQ,EAAEjc,MAAM,CAAC7I;IACrB,CAAC,CAAC,CAACimB,KAAK,CAACpd,MAAM,CAACwC,kBAAkB,CAAC;IAEnC,OAAOI,GAAG;EACd,CAAC;EAED,OAAO;IACHP,UAAU,EAAEA;EAChB,CAAC;AACL,CAAC,CAAC,CAAC;AAEH5L,MAAM,CAAC4mB,8BAA8B,GAAG,YAAY;EAChD,IAAMC,eAAe,GAAG,uCAAuC;EAE/D,SAASC,qBAAqBA,CAACtlB,QAAQ,EAAE;IACrC,IAAI,CAACA,QAAQ,IAAIzB,OAAA,CAAOyB,QAAQ,MAAK,QAAQ,EAAE;MAC3C,OAAO,IAAI;IACf;IAEA,OAAO;MACHulB,UAAU,EAAEvlB,QAAQ,CAACulB,UAAU,IAAIvlB,QAAQ,CAACwlB,UAAU,IAAI,EAAE;MAC5DC,QAAQ,EAAEzlB,QAAQ,CAACylB,QAAQ,IAAIzlB,QAAQ,CAAC0lB,QAAQ,IAAI,EAAE;MACtDC,QAAQ,EAAE3lB,QAAQ,CAAC2lB,QAAQ,IAAI3lB,QAAQ,CAAC4lB,QAAQ,IAAI;IACxD,CAAC;EACL;EAEA,SAASC,cAAcA,CAAC9U,KAAK,EAAE;IAC3B,IAAI,CAACA,KAAK,IAAIA,KAAK,GAAG,IAAI,EAAE;MACxB,OAAO,CAACA,KAAK,IAAI,CAAC,IAAI,IAAI;IAC9B;IAEA,IAAIA,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE;MACrB,OAAO,CAACA,KAAK,GAAG,IAAI,EAAE+U,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;IAC5C;IAEA,OAAO,CAAC/U,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE+U,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;EACrD;EAEA,SAASC,cAAcA,CAACN,QAAQ,EAAEE,QAAQ,EAAE;IACxC,OAAQ,CAACF,QAAQ,IAAI,EAAE,EAAE7lB,IAAI,CAAC,CAAC,CAACgC,WAAW,CAAC,CAAC,GAAI,IAAI,IAAI+jB,QAAQ,IAAI,CAAC,CAAC;EAC3E;EAEA,SAASK,eAAeA,CAACC,IAAI,EAAEC,SAAS,EAAE;IACtC,OAAOA,SAAS,CAACC,GAAG,CAACJ,cAAc,CAACE,IAAI,CAAC7nB,IAAI,EAAE6nB,IAAI,CAACtL,IAAI,CAAC,CAAC;EAC9D;EAEA,SAASyL,mBAAmBA,CAACC,SAAS,EAAE;IACpC,IAAI,CAACA,SAAS,EAAE;MACZ,OAAO,EAAE;IACb;IAEA,OAAOvpB,KAAK,CAACC,IAAI,CAACspB,SAAS,CAAC1Q,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,CACnEtR,GAAG,CAAC,UAAAiiB,OAAO;MAAA,OAAIhB,qBAAqB,CAAC;QAClCC,UAAU,EAAEe,OAAO,CAAC3I,OAAO,CAAC4I,cAAc;QAC1Cd,QAAQ,EAAEa,OAAO,CAAC3I,OAAO,CAAC6I,gBAAgB;QAC1Cb,QAAQ,EAAEtP,MAAM,CAACiQ,OAAO,CAAC3I,OAAO,CAAC8I,gBAAgB,IAAI,CAAC;MAC1D,CAAC,CAAC;IAAA,EAAC,CACF5jB,MAAM,CAAC,UAAA7C,QAAQ;MAAA,OAAIA,QAAQ,IAAIA,QAAQ,CAACulB,UAAU;IAAA,EAAC;EAC5D;EAEA,SAASnb,UAAUA,CAACrC,MAAM,EAAE;IACxB,IAAI,CAACA,MAAM,IAAI,CAACA,MAAM,CAAC2G,MAAM,EAAE;MAC3B;IACJ;IAEA,IAAMgY,SAAS,GAAG1mB,QAAQ,CAAC6I,cAAc,CAAC,iBAAiB,CAAC;IAC5D,IAAM8d,aAAa,GAAG3mB,QAAQ,CAAC6I,cAAc,CAAC,qBAAqB,CAAC;IACpE,IAAM+d,MAAM,GAAG5mB,QAAQ,CAAC6I,cAAc,CAAC,wBAAwB,CAAC;IAChE,IAAMge,iBAAiB,GAAG7mB,QAAQ,CAAC6I,cAAc,CAAC,0BAA0B,CAAC;IAC7E,IAAMie,WAAW,GAAG9mB,QAAQ,CAAC6I,cAAc,CAAC,8BAA8B,CAAC;IAC3E,IAAMke,WAAW,GAAG/mB,QAAQ,CAAC6I,cAAc,CAAC,uBAAuB,CAAC;IAEpE,IAAI,CAAC6d,SAAS,IAAI,CAACC,aAAa,IAAI,CAACC,MAAM,IAAI,CAACC,iBAAiB,IAAI,CAACC,WAAW,IAAI,CAACC,WAAW,EAAE;MAC/F;IACJ;IAEA,IAAMC,aAAa,GAAGN,SAAS,CAACrB,eAAe,CAAC;IAChD,IAAI2B,aAAa,IAAI,OAAOA,aAAa,CAACpT,OAAO,KAAK,UAAU,EAAE;MAC9DoT,aAAa,CAACpT,OAAO,CAAC,CAAC;IAC3B;IAEA,IAAIqT,oBAAoB,GAAG,CAACnqB,KAAK,CAACE,OAAO,CAAC+K,MAAM,CAACmf,iBAAiB,CAAC,GAAGnf,MAAM,CAACmf,iBAAiB,GAAG,EAAE,EAC9F7iB,GAAG,CAACihB,qBAAqB,CAAC,CAC1BziB,MAAM,CAAC,UAAA7C,QAAQ;MAAA,OAAIA,QAAQ,IAAIA,QAAQ,CAACulB,UAAU;IAAA,EAAC;IAExD,IAAI0B,oBAAoB,CAACtsB,MAAM,KAAK,CAAC,EAAE;MACnCssB,oBAAoB,GAAGb,mBAAmB,CAACO,aAAa,CAAC;IAC7D;IAEA,IAAIQ,WAAW,GAAG,EAAE;IACpB,IAAIC,oBAAoB,GAAG,KAAK;IAEhC,SAASC,iBAAiBA,CAACC,OAAO,EAAEpK,SAAS,EAAEpd,IAAI,EAAE;MACjD,IAAMwmB,OAAO,GAAGtmB,QAAQ,CAACC,aAAa,CAACqnB,OAAO,CAAC;MAC/C,IAAIpK,SAAS,EAAE;QACXoJ,OAAO,CAACpJ,SAAS,GAAGA,SAAS;MACjC;MAEAoJ,OAAO,CAACpmB,WAAW,GAAGJ,IAAI;MAC1B,OAAOwmB,OAAO;IAClB;IAEA,SAASiB,eAAeA,CAAA,EAAG;MACvBZ,aAAa,CAACxmB,SAAS,GAAG,EAAE;MAE5B,IAAI8mB,oBAAoB,CAACtsB,MAAM,KAAK,CAAC,EAAE;QACnCgsB,aAAa,CAACa,WAAW,CAACH,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;QACrG;MACJ;MAEAJ,oBAAoB,CAACpY,OAAO,CAAC,UAAA4Y,YAAY,EAAI;QACzC,IAAMC,GAAG,GAAGlpB,MAAM,CAACwB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAChDynB,GAAG,CAACxK,SAAS,GAAG,4GAA4G;QAC5HwK,GAAG,CAAC/J,OAAO,CAAC4I,cAAc,GAAGkB,YAAY,CAAClC,UAAU;QACpDmC,GAAG,CAAC/J,OAAO,CAAC6I,gBAAgB,GAAGiB,YAAY,CAAChC,QAAQ;QACpDiC,GAAG,CAAC/J,OAAO,CAAC8I,gBAAgB,GAAGgB,YAAY,CAAC9B,QAAQ;QAEpD,IAAMgC,OAAO,GAAGnpB,MAAM,CAACwB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACpD0nB,OAAO,CAACzK,SAAS,GAAG,cAAc;QAElC,IAAM9e,IAAI,GAAGipB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,EAAEI,YAAY,CAAChC,QAAQ,IAAI,UAAU,CAAC;QAC/F,IAAM/S,IAAI,GAAGlU,MAAM,CAACwB,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;QAC/CyS,IAAI,CAACwK,SAAS,GAAG,8BAA8B;QAC/C9e,IAAI,CAACwpB,OAAO,CAAClV,IAAI,CAAC;QAElB,IAAMiI,IAAI,GAAG0M,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAExB,cAAc,CAAC4B,YAAY,CAAC9B,QAAQ,CAAC,CAAC;QAEhGgC,OAAO,CAACH,WAAW,CAACppB,IAAI,CAAC;QACzBupB,OAAO,CAACH,WAAW,CAAC7M,IAAI,CAAC;QAEzB,IAAMkN,YAAY,GAAGR,iBAAiB,CAAC,QAAQ,EAAE,wDAAwD,EAAE,SAAS,CAAC;QACrHQ,YAAY,CAACpgB,IAAI,GAAG,QAAQ;QAC5BogB,YAAY,CAAClK,OAAO,CAAC4H,UAAU,GAAGkC,YAAY,CAAClC,UAAU;QACzD,IAAMuC,UAAU,GAAGtpB,MAAM,CAACwB,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;QACrD6nB,UAAU,CAAC5K,SAAS,GAAG,aAAa;QACpC2K,YAAY,CAACD,OAAO,CAACE,UAAU,CAAC;QAChCD,YAAY,CAAC5P,gBAAgB,CAAC,OAAO,EAAE;UAAA,OAAM8P,cAAc,CAACN,YAAY,CAAClC,UAAU,CAAC;QAAA,EAAC;QAErFmC,GAAG,CAACF,WAAW,CAACG,OAAO,CAAC;QACxBD,GAAG,CAACF,WAAW,CAACK,YAAY,CAAC;QAC7BlB,aAAa,CAACa,WAAW,CAACE,GAAG,CAAC;MAClC,CAAC,CAAC;IACN;IAEA,SAASM,gBAAgBA,CAAChjB,OAAO,EAAE2N,QAAQ,EAAE;MACzC,IAAI,CAAC3N,OAAO,EAAE;QACV4hB,MAAM,CAAC1mB,WAAW,GAAG,EAAE;QACvB0mB,MAAM,CAAC1J,SAAS,GAAG,mBAAmB;QACtC;MACJ;MAEA0J,MAAM,CAAC1mB,WAAW,GAAG8E,OAAO;MAC5B4hB,MAAM,CAAC1J,SAAS,GAAG,aAAa,IAAIvK,QAAQ,IAAI,YAAY,CAAC;IACjE;IAEA,SAASsV,kBAAkBA,CAACC,QAAQ,EAAEljB,OAAO,EAAE2N,QAAQ,EAAE;MACrD,IAAIuV,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK9gB,SAAS,EAAE;QAC7Cyf,iBAAiB,CAAC3J,SAAS,GAAG,sBAAsB;QACpD2J,iBAAiB,CAACpQ,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC;QACpDqQ,WAAW,CAAC5J,SAAS,GAAG,yDAAyD;QACjF4J,WAAW,CAAC3E,KAAK,CAACgG,KAAK,GAAG,IAAI;QAC9BrB,WAAW,CAAC5mB,WAAW,GAAG,IAAI;QAC9B;MACJ;MAEA,IAAMkoB,eAAe,GAAGtb,IAAI,CAAC6R,GAAG,CAAC,CAAC,EAAE7R,IAAI,CAAC4R,GAAG,CAAC,GAAG,EAAE5R,IAAI,CAACub,KAAK,CAACH,QAAQ,CAAC,CAAC,CAAC;MACxErB,iBAAiB,CAAC3J,SAAS,GAAG,eAAe;MAC7C2J,iBAAiB,CAACpQ,YAAY,CAAC,eAAe,EAAE2R,eAAe,CAACnqB,QAAQ,CAAC,CAAC,CAAC;MAC3E6oB,WAAW,CAAC5J,SAAS,GAAG,eAAe,IAAIvK,QAAQ,IAAI,4CAA4C,CAAC;MACpGmU,WAAW,CAAC3E,KAAK,CAACgG,KAAK,GAAGC,eAAe,GAAG,GAAG;MAC/CtB,WAAW,CAAC5mB,WAAW,GAAG8E,OAAO,IAAKojB,eAAe,GAAG,GAAI;IAChE;IAEA,SAASE,0BAA0BA,CAACC,KAAK,EAAE;MACvC,QAAQA,KAAK;QACT,KAAK,UAAU;UACX,OAAO;YAAExkB,KAAK,EAAE,UAAU;YAAEykB,UAAU,EAAE,iBAAiB;YAAEC,aAAa,EAAE;UAAa,CAAC;QAC5F,KAAK,QAAQ;UACT,OAAO;YAAE1kB,KAAK,EAAE,QAAQ;YAAEykB,UAAU,EAAE,gBAAgB;YAAEC,aAAa,EAAE;UAAY,CAAC;QACxF,KAAK,WAAW;UACZ,OAAO;YAAE1kB,KAAK,EAAE,WAAW;YAAEykB,UAAU,EAAE,iBAAiB;YAAEC,aAAa,EAAE;UAAwD,CAAC;QACxI;UACI,OAAO;YAAE1kB,KAAK,EAAE,QAAQ;YAAEykB,UAAU,EAAE,mBAAmB;YAAEC,aAAa,EAAE;UAA0D,CAAC;MAC7I;IACJ;IAEA,SAASC,mBAAmBA,CAACC,IAAI,EAAE;MAC/B,IAAIA,IAAI,CAAC/B,MAAM,KAAK,QAAQ,IAAI+B,IAAI,CAAC7e,KAAK,EAAE;QACxC,OAAO6e,IAAI,CAAC7e,KAAK;MACrB;MAEA,IAAI6e,IAAI,CAAC/B,MAAM,KAAK,UAAU,EAAE;QAC5B,OAAO,gCAAgC;MAC3C;MAEA,IAAI+B,IAAI,CAAC/B,MAAM,KAAK,WAAW,EAAE;QAC7B,OAAO+B,IAAI,CAACT,QAAQ,GAAG,YAAY;MACvC;MAEA,OAAO,sBAAsB;IACjC;IAEA,SAASU,iBAAiBA,CAAA,EAAG;MACzB7B,WAAW,CAAC5mB,SAAS,GAAG,EAAE;MAE1BgnB,WAAW,CAACtY,OAAO,CAAC,UAAA8Z,IAAI,EAAI;QACxB,IAAME,YAAY,GAAGP,0BAA0B,CAACK,IAAI,CAAC/B,MAAM,CAAC;QAC5D,IAAM9G,IAAI,GAAG9f,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC1C6f,IAAI,CAAC5C,SAAS,GAAG,mCAAmC;QAEpD,IAAM4L,MAAM,GAAG9oB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC5C6oB,MAAM,CAAC5L,SAAS,GAAG,wDAAwD;QAE3E,IAAM6L,WAAW,GAAG/oB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACjD8oB,WAAW,CAAC7L,SAAS,GAAG,qBAAqB;QAC7C6L,WAAW,CAACvB,WAAW,CAACH,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,EAAEsB,IAAI,CAAClD,QAAQ,CAAC,CAAC;QACrFsD,WAAW,CAACvB,WAAW,CAACH,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAExB,cAAc,CAAC8C,IAAI,CAAChD,QAAQ,CAAC,CAAC,CAAC;QAEpG,IAAMqD,KAAK,GAAG3B,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAGwB,YAAY,CAACL,UAAU,EAAEK,YAAY,CAAC9kB,KAAK,CAAC;QAE/F+kB,MAAM,CAACtB,WAAW,CAACuB,WAAW,CAAC;QAC/BD,MAAM,CAACtB,WAAW,CAACwB,KAAK,CAAC;QAEzB,IAAMd,QAAQ,GAAGloB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QAC9CioB,QAAQ,CAAChL,SAAS,GAAG,eAAe;QACpCgL,QAAQ,CAACzR,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC;QAC5CyR,QAAQ,CAACzR,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC;QAC3CyR,QAAQ,CAACzR,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC;QAC7CyR,QAAQ,CAACzR,YAAY,CAAC,eAAe,EAAEkS,IAAI,CAACT,QAAQ,CAACjqB,QAAQ,CAAC,CAAC,CAAC;QAEhE,IAAMgrB,aAAa,GAAGjpB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;QACnDgpB,aAAa,CAAC/L,SAAS,GAAG,eAAe,GAAG2L,YAAY,CAACJ,aAAa;QACtEQ,aAAa,CAAC9G,KAAK,CAACgG,KAAK,GAAGQ,IAAI,CAACT,QAAQ,GAAG,GAAG;QAC/Ce,aAAa,CAAC/oB,WAAW,GAAGyoB,IAAI,CAACT,QAAQ,GAAG,GAAG;QAC/CA,QAAQ,CAACV,WAAW,CAACyB,aAAa,CAAC;QAEnC,IAAMjkB,OAAO,GAAGqiB,iBAAiB,CAAC,KAAK,EAAEsB,IAAI,CAAC/B,MAAM,KAAK,QAAQ,GAAG,wBAAwB,GAAG,uBAAuB,EAAE8B,mBAAmB,CAACC,IAAI,CAAC,CAAC;QAElJ7I,IAAI,CAAC0H,WAAW,CAACsB,MAAM,CAAC;QACxBhJ,IAAI,CAAC0H,WAAW,CAACU,QAAQ,CAAC;QAC1BpI,IAAI,CAAC0H,WAAW,CAACxiB,OAAO,CAAC;QACzB+hB,WAAW,CAACS,WAAW,CAAC1H,IAAI,CAAC;MACjC,CAAC,CAAC;IACN;IAEA,SAASoJ,gBAAgBA,CAACjD,IAAI,EAAE/kB,KAAK,EAAE;MACnC,OAAO;QACHuP,EAAE,EAAEwV,IAAI,CAAC7nB,IAAI,GAAG,IAAI,GAAG6nB,IAAI,CAACtL,IAAI,GAAG,IAAI,GAAGsL,IAAI,CAACkD,YAAY,GAAG,IAAI,GAAGjoB,KAAK,GAAG,IAAI,GAAGkoB,IAAI,CAACC,GAAG,CAAC,CAAC;QAC9F5D,QAAQ,EAAEQ,IAAI,CAAC7nB,IAAI;QACnBunB,QAAQ,EAAEM,IAAI,CAACtL,IAAI;QACnBiM,MAAM,EAAE,QAAQ;QAChBsB,QAAQ,EAAE,CAAC;QACXpe,KAAK,EAAE;MACX,CAAC;IACL;IAEA,SAASwf,gBAAgBA,CAAC5a,MAAM,EAAE6a,OAAO,EAAE;MACvCpC,WAAW,GAAGA,WAAW,CAAC9iB,GAAG,CAAC,UAAAskB,IAAI;QAAA,OAAIA,IAAI,CAAClY,EAAE,KAAK/B,MAAM,GAAG1U,MAAM,CAACiH,MAAM,CAAC,CAAC,CAAC,EAAE0nB,IAAI,EAAEY,OAAO,CAAC,GAAGZ,IAAI;MAAA,EAAC;MACnGC,iBAAiB,CAAC,CAAC;IACvB;IAEA,SAASY,iBAAiBA,CAACC,SAAS,EAAE;MAClCtC,WAAW,GAAGA,WAAW,CAACtkB,MAAM,CAAC,UAAA8lB,IAAI;QAAA,OAAI,CAACc,SAAS,CAACd,IAAI,CAAC;MAAA,EAAC;MAC1DC,iBAAiB,CAAC,CAAC;IACvB;IAEA,SAASc,oBAAoBA,CAACzD,IAAI,EAAE0D,cAAc,EAAEC,SAAS,EAAEC,UAAU,EAAE;MACvE,OAAO,IAAI5tB,OAAO,CAAC,UAACC,OAAO,EAAE4tB,MAAM,EAAK;QACpC,IAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;QAC/BD,QAAQ,CAACE,MAAM,CAAC,mBAAmB,EAAEliB,MAAM,CAAC2G,MAAM,CAAC;QACnDqb,QAAQ,CAACE,MAAM,CAAC,OAAO,EAAEhE,IAAI,CAAC;QAE9B,IAAMiE,GAAG,GAAG,IAAIC,cAAc,CAAC,CAAC;QAChCD,GAAG,CAACE,IAAI,CAAC,MAAM,EAAEriB,MAAM,CAACsiB,iBAAiB,EAAE,IAAI,CAAC;QAEhDH,GAAG,CAACI,MAAM,CAACrS,gBAAgB,CAAC,UAAU,EAAE,UAAAxF,KAAK,EAAI;UAC7C,IAAI,CAACA,KAAK,CAAC8X,gBAAgB,EAAE;YACzB;UACJ;UAEA,IAAMC,YAAY,GAAG1d,IAAI,CAACub,KAAK,CAAE5V,KAAK,CAACgY,MAAM,GAAGhY,KAAK,CAACiY,KAAK,GAAI,GAAG,CAAC;UACnEpB,gBAAgB,CAACK,cAAc,EAAE;YAC7B/C,MAAM,EAAE,WAAW;YACnBsB,QAAQ,EAAEsC;UACd,CAAC,CAAC;UAEF,IAAMG,eAAe,GAAI,CAACf,SAAS,GAAInX,KAAK,CAACgY,MAAM,GAAGhY,KAAK,CAACiY,KAAM,IAAIb,UAAU,GAAI,GAAG;UACvF5B,kBAAkB,CAAC0C,eAAe,EAAE,YAAY,IAAIf,SAAS,GAAG,CAAC,CAAC,GAAG,MAAM,GAAGC,UAAU,EAAE,4CAA4C,CAAC;QAC3I,CAAC,CAAC;QAEFK,GAAG,CAACjS,gBAAgB,CAAC,MAAM,EAAE,YAAM;UAC/B,IAAIiS,GAAG,CAACtD,MAAM,IAAI,GAAG,IAAIsD,GAAG,CAACtD,MAAM,GAAG,GAAG,EAAE;YACvC,IAAI;cACA1qB,OAAO,CAACsN,IAAI,CAACC,KAAK,CAACygB,GAAG,CAACU,YAAY,CAAC,CAAC;YACzC,CAAC,CAAC,OAAO9gB,KAAK,EAAE;cACZggB,MAAM,CAAC,IAAIe,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAChE;YAEA;UACJ;UAEAf,MAAM,CAAC,IAAIe,KAAK,CAAC,CAACX,GAAG,CAACU,YAAY,IAAI,gBAAgB,EAAEhrB,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC;QAEFsqB,GAAG,CAACjS,gBAAgB,CAAC,OAAO,EAAE,YAAM;UAChC6R,MAAM,CAAC,IAAIe,KAAK,CAAC,4DAA4D,CAAC,CAAC;QACnF,CAAC,CAAC;QAEFX,GAAG,CAACnO,IAAI,CAACgO,QAAQ,CAAC;MACtB,CAAC,CAAC;IACN;IAAC,SAEce,eAAeA,CAAAC,EAAA;MAAA,OAAAC,gBAAA,CAAA1uB,KAAA,OAAAD,SAAA;IAAA;IAAA,SAAA2uB,iBAAA;MAAAA,gBAAA,GAAA5uB,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAA9B,SAAAwvB,SAA+BC,KAAK;QAAA,IAAAC,aAAA,EAAAC,cAAA,EAAAC,iBAAA,EAAAC,YAAA,EAAAC,aAAA,EAAAC,aAAA,EAAA7xB,CAAA,EAAAssB,IAAA,EAAAwF,WAAA,EAAAC,MAAA,EAAAC,QAAA,EAAAC,MAAA,EAAAC,oBAAA,EAAAC,aAAA,EAAAC,YAAA,EAAAC,GAAA,EAAAC,GAAA;QAAA,OAAA1wB,YAAA,GAAAC,CAAA,WAAA0wB,SAAA;UAAA,kBAAAA,SAAA,CAAA9xB,CAAA,GAAA8xB,SAAA,CAAA3yB,CAAA;YAAA;cAAA,MAC5B,CAACwO,MAAM,CAACsiB,iBAAiB,IAAI,CAACa,KAAK,IAAIA,KAAK,CAACvwB,MAAM,KAAK,CAAC;gBAAAuxB,SAAA,CAAA3yB,CAAA;gBAAA;cAAA;cAAA,OAAA2yB,SAAA,CAAA1xB,CAAA;YAAA;cAAA,KAIzD4sB,oBAAoB;gBAAA8E,SAAA,CAAA3yB,CAAA;gBAAA;cAAA;cACpByuB,gBAAgB,CAAC,2CAA2C,EAAE,cAAc,CAAC;cAAC,OAAAkE,SAAA,CAAA1xB,CAAA;YAAA;cAIlF4sB,oBAAoB,GAAG,IAAI;cAErB+D,aAAa,GAAG,EAAE;cAClBC,cAAc,GAAG,EAAE;cACnBC,iBAAiB,GAAG,IAAIc,GAAG,CAAClF,oBAAoB,CAAC5iB,GAAG,CAAC,UAAArE,QAAQ;gBAAA,OAAI+lB,cAAc,CAAC/lB,QAAQ,CAACylB,QAAQ,EAAEzlB,QAAQ,CAAC2lB,QAAQ,CAAC;cAAA,EAAC,CAAC;cAE7H7oB,KAAK,CAACC,IAAI,CAACmuB,KAAK,CAAC,CAACrc,OAAO,CAAC,UAAAoX,IAAI,EAAI;gBAC9B,IAAID,eAAe,CAACC,IAAI,EAAEoF,iBAAiB,CAAC,EAAE;kBAC1CD,cAAc,CAAC9sB,IAAI,CAAC2nB,IAAI,CAAC;kBACzB;gBACJ;gBAEAoF,iBAAiB,CAAC/Z,GAAG,CAACyU,cAAc,CAACE,IAAI,CAAC7nB,IAAI,EAAE6nB,IAAI,CAACtL,IAAI,CAAC,CAAC;gBAC3DwQ,aAAa,CAAC7sB,IAAI,CAAC2nB,IAAI,CAAC;cAC5B,CAAC,CAAC;cAEF,IAAImF,cAAc,CAACzwB,MAAM,GAAG,CAAC,EAAE;gBAC3BwsB,WAAW,GAAGA,WAAW,CAACvjB,MAAM,CAACwnB,cAAc,CAAC/mB,GAAG,CAAC,UAAC4hB,IAAI,EAAE/kB,KAAK;kBAAA,OAAKlH,MAAM,CAACiH,MAAM,CAACioB,gBAAgB,CAACjD,IAAI,EAAE/kB,KAAK,CAAC,EAAE;oBAC9G0lB,MAAM,EAAE,QAAQ;oBAChBsB,QAAQ,EAAE,GAAG;oBACbpe,KAAK,EAAE;kBACX,CAAC,CAAC;gBAAA,EAAC,CAAC;gBACJ8e,iBAAiB,CAAC,CAAC;cACvB;cAAC,MAEGuC,aAAa,CAACxwB,MAAM,KAAK,CAAC;gBAAAuxB,SAAA,CAAA3yB,CAAA;gBAAA;cAAA;cAC1B6tB,oBAAoB,GAAG,KAAK;cAC5BY,gBAAgB,CAACoD,cAAc,CAAC/mB,GAAG,CAAC,UAAA4hB,IAAI;gBAAA,OAAIA,IAAI,CAAC7nB,IAAI,GAAG,sCAAsC;cAAA,EAAC,CAACguB,IAAI,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;cAC5HnE,kBAAkB,CAAC,IAAI,CAAC;cAAC,OAAAiE,SAAA,CAAA1xB,CAAA;YAAA;cAIvB8wB,YAAY,GAAGH,aAAa,CAAC9mB,GAAG,CAAC6kB,gBAAgB,CAAC;cACxD/B,WAAW,GAAGA,WAAW,CAACvjB,MAAM,CAAC0nB,YAAY,CAAC;cAC9C1C,iBAAiB,CAAC,CAAC;cACnBX,kBAAkB,CAAC,CAAC,EAAE,qBAAqB,EAAE,4CAA4C,CAAC;cAC1FvB,SAAS,CAACpI,QAAQ,GAAG,IAAI;cAAC4N,SAAA,CAAA9xB,CAAA;cAGlBmxB,aAAa,GAAG,CAAC;cACfC,aAAa,GAAGJ,cAAc,CAAC/mB,GAAG,CAAC,UAAA4hB,IAAI;gBAAA,OAAIA,IAAI,CAAC7nB,IAAI,GAAG,sCAAsC;cAAA,EAAC;cAE3FzE,CAAC,GAAG,CAAC;YAAA;cAAA,MAAEA,CAAC,GAAGwxB,aAAa,CAACxwB,MAAM;gBAAAuxB,SAAA,CAAA3yB,CAAA;gBAAA;cAAA;cAC9B0sB,IAAI,GAAGkF,aAAa,CAACxxB,CAAC,CAAC;cACvB8xB,WAAW,GAAGH,YAAY,CAAC3xB,CAAC,CAAC;cAEnC2vB,gBAAgB,CAACmC,WAAW,CAAChb,EAAE,EAAE;gBAC7BmW,MAAM,EAAE,WAAW;gBACnBsB,QAAQ,EAAE,CAAC;gBACXpe,KAAK,EAAE;cACX,CAAC,CAAC;cAEFke,gBAAgB,CAAC,YAAY,IAAIruB,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAGwxB,aAAa,CAACxwB,MAAM,GAAG,iBAAiB,EAAE,cAAc,CAAC;cAACuxB,SAAA,CAAA9xB,CAAA;cAAA8xB,SAAA,CAAA3yB,CAAA;cAAA,OAGpFmwB,oBAAoB,CAACzD,IAAI,EAAEwF,WAAW,CAAChb,EAAE,EAAE9W,CAAC,EAAEwxB,aAAa,CAACxwB,MAAM,CAAC;YAAA;cAAlF+wB,MAAM,GAAAQ,SAAA,CAAA3xB,CAAA;cACNoxB,QAAQ,GAAG,CAAC7uB,KAAK,CAACE,OAAO,CAAC0uB,MAAM,CAACC,QAAQ,CAAC,GAAGD,MAAM,CAACC,QAAQ,GAAG,EAAE,EAClEtnB,GAAG,CAACihB,qBAAqB,CAAC,CAC1BziB,MAAM,CAAC,UAAA7C,QAAQ;gBAAA,OAAIA,QAAQ,IAAIA,QAAQ,CAACulB,UAAU;cAAA,EAAC;cAClDqG,MAAM,GAAG9uB,KAAK,CAACE,OAAO,CAAC0uB,MAAM,CAACE,MAAM,CAAC,GAAGF,MAAM,CAACE,MAAM,GAAG,EAAE;cAEhE,IAAID,QAAQ,CAAChxB,MAAM,GAAG,CAAC,EAAE;gBACrB4wB,aAAa,IAAII,QAAQ,CAAChxB,MAAM;gBAChCssB,oBAAoB,GAAGA,oBAAoB,CAACrjB,MAAM,CAAC+nB,QAAQ,CAAC;gBAC5DrC,gBAAgB,CAACmC,WAAW,CAAChb,EAAE,EAAE;kBAC7BmW,MAAM,EAAE,UAAU;kBAClBsB,QAAQ,EAAE,GAAG;kBACbpe,KAAK,EAAE;gBACX,CAAC,CAAC;cACN,CAAC,MAAM;gBACG+hB,oBAAoB,GAAGD,MAAM,CAACjxB,MAAM,GAAG,CAAC,GACxCixB,MAAM,CAACvnB,GAAG,CAAC,UAAAgoB,KAAK;kBAAA,OAAIA,KAAK,CAAC5G,QAAQ,GAAG,IAAI,GAAG4G,KAAK,CAACviB,KAAK;gBAAA,EAAC,CAACsiB,IAAI,CAAC,KAAK,CAAC,GACpE,wDAAwD;gBAC9D,IAAIR,MAAM,CAACjxB,MAAM,KAAK,CAAC,EAAE;kBACrB6wB,aAAa,CAACltB,IAAI,CAACutB,oBAAoB,CAAC;gBAC5C;gBACAvC,gBAAgB,CAACmC,WAAW,CAAChb,EAAE,EAAE;kBAC7BmW,MAAM,EAAE,QAAQ;kBAChBsB,QAAQ,EAAE,GAAG;kBACbpe,KAAK,EAAE+hB;gBACX,CAAC,CAAC;cACN;cAEA,IAAID,MAAM,CAACjxB,MAAM,GAAG,CAAC,EAAE;gBACbmxB,aAAa,GAAGF,MAAM,CAACvnB,GAAG,CAAC,UAAAgoB,KAAK;kBAAA,OAAIA,KAAK,CAAC5G,QAAQ,GAAG,IAAI,GAAG4G,KAAK,CAACviB,KAAK;gBAAA,EAAC,CAACsiB,IAAI,CAAC,KAAK,CAAC;gBAC1FZ,aAAa,CAACltB,IAAI,CAACwtB,aAAa,CAAC;gBACjCxC,gBAAgB,CAACmC,WAAW,CAAChb,EAAE,EAAE;kBAC7BmW,MAAM,EAAE,QAAQ;kBAChBsB,QAAQ,EAAE,GAAG;kBACbpe,KAAK,EAAEgiB;gBACX,CAAC,CAAC;cACN;cAACI,SAAA,CAAA3yB,CAAA;cAAA;YAAA;cAAA2yB,SAAA,CAAA9xB,CAAA;cAAA4xB,GAAA,GAAAE,SAAA,CAAA3xB,CAAA;cAEKwxB,YAAY,GAAGC,GAAA,IAASA,GAAA,CAAMhnB,OAAO,GACrCgnB,GAAA,CAAMhnB,OAAO,GACb,kCAAkC;cACxC+D,OAAO,CAACe,KAAK,CAAC,gBAAgB,EAAAkiB,GAAO,CAAC;cACtCR,aAAa,CAACltB,IAAI,CAAC2nB,IAAI,CAAC7nB,IAAI,GAAG,IAAI,GAAG2tB,YAAY,CAAC;cACnDzC,gBAAgB,CAACmC,WAAW,CAAChb,EAAE,EAAE;gBAC7BmW,MAAM,EAAE,QAAQ;gBAChBsB,QAAQ,EAAEuD,WAAW,CAACvD,QAAQ,IAAI,CAAC;gBACnCpe,KAAK,EAAEiiB;cACX,CAAC,CAAC;YAAC;cA5D+BpyB,CAAC,EAAE;cAAAuyB,SAAA,CAAA3yB,CAAA;cAAA;YAAA;cAgE7CguB,eAAe,CAAC,CAAC;cAAC,MAEdiE,aAAa,CAAC7wB,MAAM,GAAG,CAAC;gBAAAuxB,SAAA,CAAA3yB,CAAA;gBAAA;cAAA;cACxBiwB,iBAAiB,CAAC,UAAAb,IAAI;gBAAA,OAAIA,IAAI,CAAC/B,MAAM,KAAK,UAAU;cAAA,EAAC;cACrDoB,gBAAgB,CACZ,CAACuD,aAAa,GAAG,CAAC,GAAI,WAAW,GAAGA,aAAa,GAAG,gBAAgB,GAAI,EAAE,IAAIC,aAAa,CAACY,IAAI,CAAC,KAAK,CAAC,EACvGb,aAAa,GAAG,CAAC,GAAG,cAAc,GAAG,aAAa,CAAC;cACvDtD,kBAAkB,CAAC,IAAI,CAAC;cAAC,OAAAiE,SAAA,CAAA1xB,CAAA;YAAA;cAI7BgvB,iBAAiB,CAAC;gBAAA,OAAM,IAAI;cAAA,EAAC;cAC7BxB,gBAAgB,CAAC,WAAW,GAAGuD,aAAa,GAAG,eAAe,EAAE,cAAc,CAAC;cAC/EtD,kBAAkB,CAAC,IAAI,CAAC;cAACiE,SAAA,CAAA3yB,CAAA;cAAA;YAAA;cAAA2yB,SAAA,CAAA9xB,CAAA;cAAA6xB,GAAA,GAAAC,SAAA,CAAA3xB,CAAA;cAEzBwO,OAAO,CAACe,KAAK,CAAC,gBAAgB,EAAAmiB,GAAO,CAAC;cACtCjE,gBAAgB,CAAC,kCAAkC,EAAE,aAAa,CAAC;cACnEC,kBAAkB,CAAC,IAAI,CAAC;YAAC;cAAAiE,SAAA,CAAA9xB,CAAA;cAEzBgtB,oBAAoB,GAAG,KAAK;cAC5BV,SAAS,CAACpI,QAAQ,GAAG,KAAK;cAC1BoI,SAAS,CAAC1rB,KAAK,GAAG,EAAE;cAAC,OAAAkxB,SAAA,CAAA/xB,CAAA;YAAA;cAAA,OAAA+xB,SAAA,CAAA1xB,CAAA;UAAA;QAAA,GAAAywB,QAAA;MAAA,CAE5B;MAAA,OAAAD,gBAAA,CAAA1uB,KAAA,OAAAD,SAAA;IAAA;IAAA,SAEc0rB,cAAcA,CAAAuE,GAAA;MAAA,OAAAC,eAAA,CAAAjwB,KAAA,OAAAD,SAAA;IAAA;IAAA,SAAAkwB,gBAAA;MAAAA,eAAA,GAAAnwB,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAA7B,SAAA+wB,SAA8BjH,UAAU;QAAA,IAAAkH,QAAA,EAAAf,MAAA,EAAAgB,eAAA,EAAAC,GAAA,EAAAC,GAAA;QAAA,OAAArxB,YAAA,GAAAC,CAAA,WAAAqxB,SAAA;UAAA,kBAAAA,SAAA,CAAAzyB,CAAA,GAAAyyB,SAAA,CAAAtzB,CAAA;YAAA;cAAA,MAChC,CAACwO,MAAM,CAAC+kB,iBAAiB,IAAI,CAACvH,UAAU,IAAI,CAAC/mB,MAAM,CAACskB,OAAO,CAAC,uBAAuB,CAAC;gBAAA+J,SAAA,CAAAtzB,CAAA;gBAAA;cAAA;cAAA,OAAAszB,SAAA,CAAAryB,CAAA;YAAA;cAAAqyB,SAAA,CAAAzyB,CAAA;cAAAyyB,SAAA,CAAAtzB,CAAA;cAAA,OAK7DwzB,KAAK,CAAChlB,MAAM,CAAC+kB,iBAAiB,EAAE;gBACnDE,MAAM,EAAE,MAAM;gBACdC,OAAO,EAAE;kBACL,cAAc,EAAE;gBACpB,CAAC;gBACDC,IAAI,EAAE1jB,IAAI,CAAC2jB,SAAS,CAAC;kBACjBze,MAAM,EAAE3G,MAAM,CAAC2G,MAAM;kBACrB6W,UAAU,EAAEA;gBAChB,CAAC;cACL,CAAC,CAAC;YAAA;cATIkH,QAAQ,GAAAI,SAAA,CAAAtyB,CAAA;cAAA,IAWTkyB,QAAQ,CAACW,EAAE;gBAAAP,SAAA,CAAAtzB,CAAA;gBAAA;cAAA;cAAAozB,GAAA,GACZ5jB,OAAO;cAAA8jB,SAAA,CAAAtzB,CAAA;cAAA,OAA2CkzB,QAAQ,CAAC3sB,IAAI,CAAC,CAAC;YAAA;cAAA6sB,GAAA,CAAzD7iB,KAAK,CAAAhP,IAAA,CAAA6xB,GAAA,EAAC,4BAA4B,EAAAE,SAAA,CAAAtyB,CAAA;cAC1CytB,gBAAgB,CAAC,4BAA4B,EAAE,aAAa,CAAC;cAAC,OAAA6E,SAAA,CAAAryB,CAAA;YAAA;cAAAqyB,SAAA,CAAAtzB,CAAA;cAAA,OAI7CkzB,QAAQ,CAAC5kB,IAAI,CAAC,CAAC;YAAA;cAA9B6jB,MAAM,GAAAmB,SAAA,CAAAtyB,CAAA;cACNmyB,eAAe,GAAG,CAAC5vB,KAAK,CAACE,OAAO,CAAC0uB,MAAM,CAAC2B,SAAS,CAAC,GAAG3B,MAAM,CAAC2B,SAAS,GAAG,EAAE,EAC3EhpB,GAAG,CAACihB,qBAAqB,CAAC,CAC1BziB,MAAM,CAAC,UAAA7C,QAAQ;gBAAA,OAAIA,QAAQ,IAAIA,QAAQ,CAACulB,UAAU;cAAA,EAAC;cAExD0B,oBAAoB,GAAGyF,eAAe,CAAC/xB,MAAM,GAAG,CAAC,GAC3C+xB,eAAe,GACfzF,oBAAoB,CAACpkB,MAAM,CAAC,UAAA7C,QAAQ;gBAAA,OAAIA,QAAQ,CAACulB,UAAU,KAAKA,UAAU;cAAA,EAAC;cACjFgC,eAAe,CAAC,CAAC;cACjBS,gBAAgB,CAAC,mBAAmB,EAAE,cAAc,CAAC;cAAC6E,SAAA,CAAAtzB,CAAA;cAAA;YAAA;cAAAszB,SAAA,CAAAzyB,CAAA;cAAAwyB,GAAA,GAAAC,SAAA,CAAAtyB,CAAA;cAEtDwO,OAAO,CAACe,KAAK,CAAC,gBAAgB,EAAA8iB,GAAO,CAAC;cACtC5E,gBAAgB,CAAC,4BAA4B,EAAE,aAAa,CAAC;YAAC;cAAA,OAAA6E,SAAA,CAAAryB,CAAA;UAAA;QAAA,GAAAgyB,QAAA;MAAA,CAErE;MAAA,OAAAD,eAAA,CAAAjwB,KAAA,OAAAD,SAAA;IAAA;IAED,IAAMixB,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAG7a,KAAK,EAAI;MAC/B,IAAM8a,aAAa,GAAG9a,KAAK,CAACsK,MAAM,CAACmO,KAAK,GAAGpuB,KAAK,CAACC,IAAI,CAAC0V,KAAK,CAACsK,MAAM,CAACmO,KAAK,CAAC,GAAG,EAAE;MAC9EJ,eAAe,CAACyC,aAAa,CAAC;IAClC,CAAC;IAED7G,SAAS,CAACzO,gBAAgB,CAAC,QAAQ,EAAEqV,iBAAiB,CAAC;IACvD5G,SAAS,CAACrB,eAAe,CAAC,GAAG;MACzBzR,OAAO,EAAE,SAATA,OAAOA,CAAA,EAAQ;QACX8S,SAAS,CAACxB,mBAAmB,CAAC,QAAQ,EAAEoI,iBAAiB,CAAC;MAC9D;IACJ,CAAC;IAED/F,eAAe,CAAC,CAAC;IACjBqB,iBAAiB,CAAC,CAAC;IACnBZ,gBAAgB,CAAC,IAAI,CAAC;IACtBC,kBAAkB,CAAC,IAAI,CAAC;EAC5B;EAEA,OAAO;IACH7d,UAAU,EAAEA;EAChB,CAAC;AACL,CAAC,CAAC,CAAC;;AAEH;AACApK,QAAQ,CAACiY,gBAAgB,CAAC,OAAO,EAAE,UAAU9e,CAAC,EAAE;EAC5C,IAAMuoB,GAAG,GAAGvoB,CAAC,CAAC4jB,MAAM,CAACW,OAAO,CAAC,qBAAqB,CAAC;EACnD,IAAI,CAACgE,GAAG,EAAE;IACN;EACJ;EACA,IAAM5a,OAAO,GAAG4a,GAAG,CAACpM,YAAY,CAAC,eAAe,CAAC;EACjD,IAAM1M,MAAM,GAAG9B,OAAO,GAAG9G,QAAQ,CAAC6I,cAAc,CAAC/B,OAAO,CAAC,GAAG,IAAI;EAChE,IAAI,CAAC8B,MAAM,EAAE;IACTG,OAAO,CAACe,KAAK,CAAC,yBAAyB,EAAEhD,OAAO,CAAC;IACjD;EACJ;EACA,IAAMvF,IAAI,GAAGvB,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;EACxCsB,IAAI,CAACisB,QAAQ,GAAG,QAAQ,GAAG1mB,OAAO,GAAG,MAAM;EAC3CvF,IAAI,CAACoE,IAAI,GAAGiD,MAAM,CAAC6kB,SAAS,CAAC,WAAW,CAAC;EACzClsB,IAAI,CAAC6f,KAAK,CAAC,CAAC;AAChB,CAAC,CAAC;;AAEF;AACAphB,QAAQ,CAACiY,gBAAgB,CAAC,OAAO,EAAE,UAAU9e,CAAC,EAAE;EAC5C,IAAMoI,IAAI,GAAGpI,CAAC,CAAC4jB,MAAM,CAACW,OAAO,CAAC,oBAAoB,CAAC;EACnD,IAAI,CAACnc,IAAI,EAAE;IACP;EACJ;EAEA,IAAM8kB,SAAS,GAAG9kB,IAAI,CAACmc,OAAO,CAAC,4BAA4B,CAAC;EAC5D,IAAMgQ,GAAG,GAAGrH,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEzX,aAAa,CAAC,KAAK,CAAC;EAC3C,IAAI,CAAC8e,GAAG,EAAE;IACN;EACJ;EAEA,IAAMnnB,GAAG,GAAGmnB,GAAG,CAACnnB,GAAG;EACnB,IAAI,CAACA,GAAG,IAAI,CAACA,GAAG,CAAConB,UAAU,CAAC,OAAO,CAAC,EAAE;IAClC,OAAO,CAAC;EACZ;EAEAx0B,CAAC,CAACsoB,cAAc,CAAC,CAAC;EAElBsL,KAAK,CAACxmB,GAAG,CAAC,CACLpK,IAAI,CAAC,UAAUyxB,GAAG,EAAE;IAAE,OAAOA,GAAG,CAAClW,IAAI,CAAC,CAAC;EAAE,CAAC,CAAC,CAC3Cvb,IAAI,CAAC,UAAUub,IAAI,EAAE;IAClB,IAAMhY,GAAG,GAAGmY,GAAG,CAACC,eAAe,CAACJ,IAAI,CAAC;IACrC,IAAMld,CAAC,GAAGwF,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;IACrCzF,CAAC,CAACmL,IAAI,GAAGjG,GAAG;IACZlF,CAAC,CAACgzB,QAAQ,GAAGjsB,IAAI,CAAC+T,YAAY,CAAC,UAAU,CAAC,IAAI,qBAAqB;IACnEtV,QAAQ,CAACktB,IAAI,CAAC1F,WAAW,CAAChtB,CAAC,CAAC;IAC5BA,CAAC,CAAC4mB,KAAK,CAAC,CAAC;IACTphB,QAAQ,CAACktB,IAAI,CAACW,WAAW,CAACrzB,CAAC,CAAC;IAC5BkiB,UAAU,CAAC,YAAY;MAAE7E,GAAG,CAACK,eAAe,CAACxY,GAAG,CAAC;IAAE,CAAC,EAAE,GAAG,CAAC;EAC9D,CAAC,CAAC,SACI,CAAC,UAAUuE,GAAG,EAAE;IAAE8E,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAE7F,GAAG,CAAC;EAAE,CAAC,CAAC;AACnF,CAAC,CAAC","file":"chat-interaction.js","sourcesContent":["window.chatInteractionManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n codeCopiedText: 'Copied!',\n assistantLabel: 'Assistant',\n\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">You</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><span :class=\"getAssistantIcon(message)\"></span></span>\n {{ getAssistantLabel(message) }}\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <button v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message)\" title=\"Click here to copy response to clipboard.\">\n <span class=\"fa-solid fa-copy\"></span>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <span v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></span>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <span class=\"fa-solid fa-xmark\"></span>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <span v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></span>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><span class=\"fa fa-robot\" style=\"display: inline-block;\"></span></span>\n Assistant\n </div>\n `,\n // Localizable strings\n untitledText: 'Untitled',\n clearHistoryTitle: 'Clear History',\n clearHistoryMessage: 'Are you sure you want to clear the chat history? This action cannot be undone. Your documents, parameters, and tools will be preserved.',\n clearHistoryOkText: 'Yes',\n clearHistoryCancelText: 'Cancel'\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n function buildCitationDisplay(content, references) {\n let processedContent = (content || '').trim();\n const messageReferences = normalizeReferences(references);\n\n if (!processedContent || !Object.keys(messageReferences).length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = Object.entries(messageReferences).filter(([key]) => processedContent.includes(key));\n\n if (!citedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${displayIndex}_${value.index || displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: isDownloadCitationReference(value),\n placeholder: placeholder,\n });\n\n displayIndex++;\n }\n\n for (const citation of citations) {\n processedContent = processedContent.replaceAll(citation.placeholder, `<sup>${citation.displayIndex}</sup>`);\n }\n\n processedContent = processedContent.replaceAll('</sup><sup>', '</sup><sup>,</sup><sup>');\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n for (const citation of citations) {\n copyContent = copyContent.replaceAll(citation.referenceKey, `[${citation.displayIndex}]`);\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n const citationDisplay = buildCitationDisplay(rawContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n message.copyContent = buildCopyContent(rawContent, citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><span class=\"fa-solid fa-code\"></span> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><span class=\"fa-regular fa-copy\"></span></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <span class=\"fa-solid fa-download\"></span>\n </a>\n </div>\n </div>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map shared with ai-chat.js\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<span class=\"fa-solid fa-download\"></span> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = tryExtractChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n const canvas = document.getElementById(c.chartId);\n if (!canvas) {\n continue;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n continue;\n }\n\n // When the canvas is inside a hidden container (e.g., display:none),\n // it has zero dimensions. Keep the config for later rendering.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[c.chartId] = c.config;\n continue;\n }\n\n try {\n // Destroy existing chart instance if re-rendering\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof c.config === 'string' ? JSON.parse(c.config) : c.config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n } catch (e) {\n console.error('Error creating chart:', e);\n }\n }\n });\n }\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = marked.parse(content, { renderer });\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const app = Vue.createApp({\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isInteractionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n prompt: '',\n initialFieldValues: new Map(),\n settingsDirty: false,\n saveSettingsTimeout: null,\n saveIndicatorTimeout: null,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'chat-interaction-' + Math.random().toString(36).slice(2),\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n notifications: [],\n notificationDismissTimers: {},\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadInteraction\", (data) => {\n this.initializeInteraction(data.itemId, true);\n this.messages = [];// Update the title field if it exists\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && data.title) {\n titleInput.value = data.title;\n }\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n });\n });\n });\n\n this.connection.on(\"SettingsSaved\", (itemId, title) => {\n // Update the history list item if it exists\n // Use a more specific selector to only target history list items, not other elements like the Clear History button\n const historyItem = document.querySelector(`.chat-interaction-history-item[data-interaction-id=\"${itemId}\"]`);\n if (historyItem) {\n historyItem.textContent = title || config.untitledText;\n }\n\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && title) {\n titleInput.value = title;\n }\n\n this.showSaveIndicator('Saved', 'text-success');\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n this.showSaveIndicator('Save failed', 'text-danger');\n\n if (this.isRecording) {\n this.stopRecording();\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (itemId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (itemId, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (itemId, messageId, token, responseId, references, appearance) => {\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (itemId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (itemId, base64Audio, contentType) => {\n if (base64Audio) {\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (itemId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"HistoryCleared\", (itemId) => {\n // Clear messages and show placeholder\n this.messages = [];\n this.showPlaceholder();\n\n // Hide the clear history button since there's no history now\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.add('d-none');\n }\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n this.reloadCurrentInteraction();\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingChatInteractionMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedChatInteractionMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : defaultConfig.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n async sendMessage() {\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // Flush any pending settings save before sending a message\n // to prevent concurrent hub calls that can cause database deadlocks.\n await this.flushPendingSave();\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n // Show the clear history button since we now have prompts\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.remove('d-none');\n }\n\n this.streamMessage(trimmedPrompt);\n this.inputElement.value = '';\n this.prompt = '';\n },\n streamMessage(trimmedPrompt) {\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n var messageIndex = this.messages.length;\n var currentItemId = this.getItemId();\n\n this.stream = this.connection.stream(\"SendMessage\", currentItemId, trimmedPrompt)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n if (chunk.sessionId && !currentItemId) {\n this.setItemId(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n messageIndex = this.messages.length;\n let newMessage = {\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n };\n\n this.messages.push(newMessage);\n message = newMessage;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n return {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Save any settings that were deferred during streaming.\n if (this.settingsDirty) {\n this.debouncedSaveSettings();\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n var iconHtml = isPlaying\n ? '<span class=\"fa-solid fa-circle-pause\"></span>'\n : '<span class=\"fa-solid fa-circle-play\"></span>';\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getItemId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.isPlayingAudio && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is currently playing, queue this blob for later.\n if (this.isPlayingAudio && this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n const nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var itemId = this.getItemId();\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"StartConversation\", itemId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, continuation is handled\n // by the persistent stream.\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getItemId() {\n return this.inputElement.getAttribute('data-interaction-id')\n || this.inputElement.getAttribute('data-item-id');\n },\n getSaveIndicatorElement() {\n if (config.saveIndicatorElementSelector) {\n return document.querySelector(config.saveIndicatorElementSelector);\n }\n\n return document.querySelector('[data-chat-interaction-save-indicator]');\n },\n showSaveIndicator(text, className) {\n const indicator = this.getSaveIndicatorElement();\n if (!indicator) {\n return;\n }\n\n indicator.textContent = text || '';\n indicator.className = 'settings-save-indicator ' + (className || 'text-muted');\n\n if (this.saveIndicatorTimeout) {\n clearTimeout(this.saveIndicatorTimeout);\n this.saveIndicatorTimeout = null;\n }\n\n if (!text) {\n return;\n }\n\n this.saveIndicatorTimeout = setTimeout(() => {\n indicator.textContent = '';\n this.saveIndicatorTimeout = null;\n }, 3000);\n },\n clearPendingSettingsSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n },\n getFieldLabel(input) {\n const label = input\n .closest('.mb-3, .col-6, .col, .form-group, .form-floating')\n ?.querySelector('label');\n\n if (!label) {\n return input.dataset.setting || 'This field';\n }\n\n return (label.textContent || '')\n .replace(/\\s+/g, ' ')\n .trim()\n || input.dataset.setting\n || 'This field';\n },\n getValidationFeedbackElement(input) {\n let feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n return feedback;\n }\n\n feedback = document.createElement('div');\n feedback.className = 'invalid-feedback';\n input.insertAdjacentElement('afterend', feedback);\n\n return feedback;\n },\n clearSettingValidationError(input) {\n input.classList.remove('is-invalid');\n input.removeAttribute('aria-invalid');\n\n const feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n feedback.textContent = '';\n }\n },\n setSettingValidationError(input, message) {\n const feedback = this.getValidationFeedbackElement(input);\n input.classList.add('is-invalid');\n input.setAttribute('aria-invalid', 'true');\n feedback.textContent = message;\n },\n getSettingValidationMessage(input) {\n if (!input || input.disabled || input.type !== 'number') {\n return null;\n }\n\n const value = (input.value || '').trim();\n if (!value) {\n return null;\n }\n\n const number = Number(value);\n const fieldLabel = this.getFieldLabel(input);\n\n if (Number.isNaN(number)) {\n return `${fieldLabel} must be a valid number.`;\n }\n\n const min = input.getAttribute('min');\n if (min !== null && number < Number(min)) {\n return `${fieldLabel} must be ${min} or greater.`;\n }\n\n const max = input.getAttribute('max');\n if (max !== null && number > Number(max)) {\n return `${fieldLabel} must be ${max} or less.`;\n }\n\n return null;\n },\n validateSettingInput(input) {\n const message = this.getSettingValidationMessage(input);\n if (!message) {\n this.clearSettingValidationError(input);\n return true;\n }\n\n this.setSettingValidationError(input, message);\n return false;\n },\n validateSettings() {\n let isValid = true;\n\n this.getSettingInputs().forEach(input => {\n isValid = this.validateSettingInput(input) && isValid;\n });\n\n return isValid;\n },\n queueSettingsSave() {\n if (!this.validateSettings()) {\n this.clearPendingSettingsSave();\n this.settingsDirty = false;\n this.showSaveIndicator('Fix errors', 'text-danger');\n return;\n }\n\n this.settingsDirty = true;\n this.showSaveIndicator('Saving...', 'text-warning');\n this.debouncedSaveSettings();\n },\n getSettingInputs() {\n const explicitInputs = document.querySelectorAll('.setting-input[data-setting]');\n if (explicitInputs.length > 0) {\n return explicitInputs;\n }\n\n return document.querySelectorAll(\n 'input[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'select[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'textarea[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"])'\n );\n },\n getSelectedGroupValues(groupName, fallbackSelector) {\n const explicitSelections = document.querySelectorAll(`.capability-checkbox[data-save-group=\"${groupName}\"]:checked, .capability-checkbox[data-group=\"${groupName}\"]:checked`);\n if (explicitSelections.length > 0) {\n const values = [];\n\n explicitSelections.forEach(checkbox => {\n const value = checkbox.getAttribute('data-item-id') || checkbox.value;\n if (value) {\n values.push(value);\n }\n });\n\n return values;\n }\n\n if (!fallbackSelector) {\n return [];\n }\n\n const values = [];\n const checkboxes = document.querySelectorAll(fallbackSelector);\n\n checkboxes.forEach(checkbox => {\n const baseName = checkbox.name.replace('.IsSelected', '.ItemId');\n const hiddenInput = document.querySelector(`input[type=\"hidden\"][name=\"${baseName}\"]`);\n\n if (hiddenInput && hiddenInput.value) {\n values.push(hiddenInput.value);\n }\n });\n\n return values;\n },\n getPromptTemplateSelections() {\n const promptTemplates = [];\n\n document.querySelectorAll('.prompt-template-card').forEach(card => {\n const templateIdInput = card.querySelector('.prompt-template-id-input');\n const promptParametersInput = card.querySelector('.prompt-template-parameters-input');\n const templateId = templateIdInput ? templateIdInput.value : card.getAttribute('data-template-id');\n\n if (!templateId) {\n return;\n }\n\n promptTemplates.push({\n templateId: templateId,\n promptParameters: promptParametersInput ? (promptParametersInput.value || '').trim() : ''\n });\n });\n\n return promptTemplates;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n // Replace existing notification with same type, or add new one.\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var itemId = this.getItemId();\n this.connection.invoke('HandleNotificationAction', itemId, notificationType, actionName)\n .catch(err => console.error('Failed to handle notification action:', err));\n },\n setItemId(itemId) {\n this.inputElement.setAttribute('data-interaction-id', itemId || '');\n this.inputElement.setAttribute('data-item-id', itemId || '');\n },\n resetInteraction() {\n this.setItemId('');\n this.isInteractionStarted = false;\n this.messages = [];\n this.showPlaceholder();\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keyup', event => {\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.inputElement.addEventListener('paste', (e) => {\n // Use setTimeout to allow the paste to complete before checking the value\n setTimeout(() => {\n this.prompt = this.inputElement.value;\n if (this.inputElement.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n }, 0);\n });\n\n this.buttonElement.addEventListener('click', () => {\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const chatInteractionItems = document.getElementsByClassName('chat-interaction-history-item');\n\n for (var i = 0; i < chatInteractionItems.length; i++) {\n chatInteractionItems[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var itemId = e.target.getAttribute('data-interaction-id');\n\n if (!itemId) {\n console.error('An element with the class chat-interaction-history-item with no data-interaction-id set.');\n return;\n }\n\n this.loadInteraction(itemId);\n });\n }\n\n for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\n }\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<span class=\"fa-solid fa-check\"></span> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<span class=\"fa-regular fa-copy\"></span>';\n }, 2000);\n }\n });\n }\n\n document.addEventListener('input', event => {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('change', event => {\n if (event.target.matches('.setting-input[data-setting], .capability-checkbox[data-save-group], .capability-checkbox[data-group], .group-toggle, .ci-agent-global-toggle')) {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n }\n\n this.queueSettingsSave();\n return;\n }\n\n if (event.target.closest('.prompt-template-parameters-input, .prompt-template-id-input')) {\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('click', event => {\n if (!event.target.closest('.prompt-template-add-btn, .remove-prompt-template-btn')) {\n return;\n }\n\n setTimeout(() => {\n this.queueSettingsSave();\n }, 0);\n });\n\n // Add event listener for clear history button\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.addEventListener('click', () => {\n const itemId = clearHistoryBtn.getAttribute('data-interaction-id');\n if (itemId) {\n this.clearHistory(itemId);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n },\n loadInteraction(itemId) {\n this.connection.invoke(\"LoadInteraction\", itemId).catch(err => console.error(err));\n },\n reloadCurrentInteraction() {\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n },\n clearHistory(itemId) {\n const self = this;\n const clearHistoryConfirmed = () => {\n // Cancel any active stream before clearing history.\n if (self.stream) {\n self.stream.dispose();\n self.stream = null;\n self.hideTypingIndicator();\n self.streamingFinished();\n }\n\n self.connection.invoke(\"ClearHistory\", itemId)\n .catch(err => console.error('Error clearing history:', err));\n };\n\n if (typeof confirmDialog === 'function') {\n confirmDialog({\n title: config.clearHistoryTitle,\n message: config.clearHistoryMessage,\n okText: config.clearHistoryOkText,\n cancelText: config.clearHistoryCancelText,\n callback: function (confirmed) {\n if (confirmed) {\n clearHistoryConfirmed();\n }\n }\n });\n\n return;\n }\n\n if (window.confirm(config.clearHistoryMessage || 'Clear all messages?')) {\n clearHistoryConfirmed();\n }\n },\n debouncedSaveSettings() {\n // Clear any existing timeout to reset the debounce timer\n this.clearPendingSettingsSave();\n\n // Don't save while streaming — it will be saved when streaming completes.\n if (this.stream) {\n return;\n }\n\n // Set a new timeout to save after 850ms of no changes\n this.saveSettingsTimeout = setTimeout(() => {\n if (this.settingsDirty) {\n this.saveSettings();\n this.settingsDirty = false;\n }\n this.saveSettingsTimeout = null;\n }, 850);\n },\n getSelectedToolNames() {\n return this.getSelectedGroupValues(\n 'toolNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Tools[\"]:checked'\n );\n },\n getSelectedMcpConnectionIds() {\n return this.getSelectedGroupValues(\n 'mcpConnectionIds',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Connections[\"]:checked'\n );\n },\n getSelectedA2AConnectionIds() {\n return this.getSelectedGroupValues('a2aConnectionIds');\n },\n getSelectedAgentNames() {\n return this.getSelectedGroupValues(\n 'agentNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Agents[\"]:checked'\n );\n },\n saveSettings() {\n const itemId = this.getItemId();\n if (!itemId) {\n return Promise.resolve();\n }\n\n if (!this.validateSettings()) {\n this.showSaveIndicator('Fix errors', 'text-danger');\n return Promise.resolve();\n }\n\n const settings = {};\n\n // Collect all form inputs with the \"ChatInteraction.\" prefix generically.\n // This avoids coupling the JS to specific field names — new fields added by\n // any module are automatically included.\n const inputs = this.getSettingInputs();\n\n inputs.forEach(input => {\n const key = input.dataset.setting\n || ((input.name || '').replace('ChatInteraction.', '').replace(/^[A-Z]/, match => match.toLowerCase()));\n\n if (!key) {\n return;\n }\n\n if (input.type === 'checkbox') {\n settings[key] = input.checked;\n } else if (input.type === 'number') {\n settings[key] = input.value ? parseFloat(input.value) : null;\n } else {\n settings[key] = input.value || null;\n }\n });\n\n // Add tool, MCP connection, and agent collections (special handling).\n settings.toolNames = this.getSelectedToolNames();\n settings.mcpConnectionIds = this.getSelectedMcpConnectionIds();\n settings.a2aConnectionIds = this.getSelectedA2AConnectionIds();\n settings.agentNames = this.getSelectedAgentNames();\n\n const promptTemplates = this.getPromptTemplateSelections();\n if (promptTemplates.length > 0) {\n settings.promptTemplates = promptTemplates;\n settings.promptTemplateIds = promptTemplates.map(template => template.templateId);\n }\n\n return this.connection.invoke(\"SaveSettings\", itemId, settings)\n .catch(err => {\n console.error('Error saving settings:', err);\n this.showSaveIndicator('Save failed', 'text-danger');\n });\n },\n flushPendingSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n\n if (this.settingsDirty) {\n this.settingsDirty = false;\n return this.saveSettings();\n }\n\n return Promise.resolve();\n },\n initializeInteraction(itemId, force) {\n if (this.isInteractionStarted && !force) {\n return;\n }\n this.fireEvent(new CustomEvent(\"initializingChatInteraction\", { detail: { itemId: itemId } }));\n this.setItemId(itemId);\n this.isInteractionStarted = true;\n },\n copyResponse(message) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n\n navigator.clipboard.writeText(text);\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var itemId = this.getItemId();\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", itemId, subject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-stop\"></span>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-microphone\"></span>';\n }\n }\n },\n watch: {\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n this.initializeApp();\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n },\n template: config.messageTemplate\n }).mount(config.appElementSelector);\n\n return app;\n };\n\n return {\n initialize: initialize\n };\n}();\n\nwindow.chatInteractionDocumentManager = function () {\n const managerStateKey = '__chatInteractionDocumentManagerState';\n\n function normalizeDocumentInfo(document) {\n if (!document || typeof document !== 'object') {\n return null;\n }\n\n return {\n documentId: document.documentId || document.DocumentId || '',\n fileName: document.fileName || document.FileName || '',\n fileSize: document.fileSize || document.FileSize || 0\n };\n }\n\n function formatFileSize(bytes) {\n if (!bytes || bytes < 1024) {\n return (bytes || 0) + ' B';\n }\n\n if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(1) + ' KB';\n }\n\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n\n function getDocumentKey(fileName, fileSize) {\n return ((fileName || '').trim().toLowerCase()) + '::' + (fileSize || 0);\n }\n\n function isDuplicateFile(file, knownKeys) {\n return knownKeys.has(getDocumentKey(file.name, file.size));\n }\n\n function getDocumentsFromDom(container) {\n if (!container) {\n return [];\n }\n\n return Array.from(container.querySelectorAll('[data-chat-document-id]'))\n .map(element => normalizeDocumentInfo({\n documentId: element.dataset.chatDocumentId,\n fileName: element.dataset.chatDocumentName,\n fileSize: Number(element.dataset.chatDocumentSize || 0)\n }))\n .filter(document => document && document.documentId);\n }\n\n function initialize(config) {\n if (!config || !config.itemId) {\n return;\n }\n\n const fileInput = document.getElementById('chat-doc-upload');\n const documentsList = document.getElementById('chat-documents-list');\n const status = document.getElementById('chat-doc-upload-status');\n const progressContainer = document.getElementById('chat-doc-upload-progress');\n const progressBar = document.getElementById('chat-doc-upload-progress-bar');\n const uploadQueue = document.getElementById('chat-doc-upload-queue');\n\n if (!fileInput || !documentsList || !status || !progressContainer || !progressBar || !uploadQueue) {\n return;\n }\n\n const previousState = fileInput[managerStateKey];\n if (previousState && typeof previousState.dispose === 'function') {\n previousState.dispose();\n }\n\n let interactionDocuments = (Array.isArray(config.existingDocuments) ? config.existingDocuments : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n if (interactionDocuments.length === 0) {\n interactionDocuments = getDocumentsFromDom(documentsList);\n }\n\n let uploadItems = [];\n let isUploadingDocuments = false;\n\n function createTextElement(tagName, className, text) {\n const element = document.createElement(tagName);\n if (className) {\n element.className = className;\n }\n\n element.textContent = text;\n return element;\n }\n\n function renderDocuments() {\n documentsList.innerHTML = '';\n\n if (interactionDocuments.length === 0) {\n documentsList.appendChild(createTextElement('div', 'text-muted small', 'No documents uploaded yet.'));\n return;\n }\n\n interactionDocuments.forEach(documentInfo => {\n const row = window.document.createElement('div');\n row.className = 'd-flex justify-content-between align-items-start gap-2 border rounded px-2 py-2 bg-white chat-document-row';\n row.dataset.chatDocumentId = documentInfo.documentId;\n row.dataset.chatDocumentName = documentInfo.fileName;\n row.dataset.chatDocumentSize = documentInfo.fileSize;\n\n const details = window.document.createElement('div');\n details.className = 'me-2 min-w-0';\n\n const name = createTextElement('div', 'fw-semibold small', documentInfo.fileName || 'Document');\n const icon = window.document.createElement('i');\n icon.className = 'bi bi-file-earmark-text me-1';\n name.prepend(icon);\n\n const size = createTextElement('div', 'text-muted small', formatFileSize(documentInfo.fileSize));\n\n details.appendChild(name);\n details.appendChild(size);\n\n const removeButton = createTextElement('button', 'btn btn-sm btn-outline-danger remove-chat-document-btn', ' Remove');\n removeButton.type = 'button';\n removeButton.dataset.documentId = documentInfo.documentId;\n const removeIcon = window.document.createElement('i');\n removeIcon.className = 'bi bi-trash';\n removeButton.prepend(removeIcon);\n removeButton.addEventListener('click', () => removeDocument(documentInfo.documentId));\n\n row.appendChild(details);\n row.appendChild(removeButton);\n documentsList.appendChild(row);\n });\n }\n\n function showUploadStatus(message, cssClass) {\n if (!message) {\n status.textContent = '';\n status.className = 'small mt-2 d-none';\n return;\n }\n\n status.textContent = message;\n status.className = 'small mt-2 ' + (cssClass || 'text-muted');\n }\n\n function showUploadProgress(progress, message, cssClass) {\n if (progress === null || progress === undefined) {\n progressContainer.className = 'progress mt-2 d-none';\n progressContainer.setAttribute('aria-valuenow', '0');\n progressBar.className = 'progress-bar progress-bar-striped progress-bar-animated';\n progressBar.style.width = '0%';\n progressBar.textContent = '0%';\n return;\n }\n\n const roundedProgress = Math.max(0, Math.min(100, Math.round(progress)));\n progressContainer.className = 'progress mt-2';\n progressContainer.setAttribute('aria-valuenow', roundedProgress.toString());\n progressBar.className = 'progress-bar ' + (cssClass || 'progress-bar-striped progress-bar-animated');\n progressBar.style.width = roundedProgress + '%';\n progressBar.textContent = message || (roundedProgress + '%');\n }\n\n function getUploadStatePresentation(state) {\n switch (state) {\n case 'uploaded':\n return { label: 'Uploaded', badgeClass: 'text-bg-success', progressClass: 'bg-success' };\n case 'failed':\n return { label: 'Failed', badgeClass: 'text-bg-danger', progressClass: 'bg-danger' };\n case 'uploading':\n return { label: 'Uploading', badgeClass: 'text-bg-warning', progressClass: 'bg-warning progress-bar-striped progress-bar-animated' };\n default:\n return { label: 'Queued', badgeClass: 'text-bg-secondary', progressClass: 'bg-secondary progress-bar-striped progress-bar-animated' };\n }\n }\n\n function formatUploadMessage(item) {\n if (item.status === 'failed' && item.error) {\n return item.error;\n }\n\n if (item.status === 'uploaded') {\n return 'Upload completed successfully.';\n }\n\n if (item.status === 'uploading') {\n return item.progress + '% uploaded';\n }\n\n return 'Waiting to upload...';\n }\n\n function renderUploadQueue() {\n uploadQueue.innerHTML = '';\n\n uploadItems.forEach(item => {\n const presentation = getUploadStatePresentation(item.status);\n const card = document.createElement('div');\n card.className = 'border rounded px-2 py-2 bg-white';\n\n const header = document.createElement('div');\n header.className = 'd-flex justify-content-between align-items-start gap-2';\n\n const fileDetails = document.createElement('div');\n fileDetails.className = 'flex-grow-1 min-w-0';\n fileDetails.appendChild(createTextElement('div', 'fw-semibold small', item.fileName));\n fileDetails.appendChild(createTextElement('div', 'text-muted small', formatFileSize(item.fileSize)));\n\n const badge = createTextElement('span', 'badge ' + presentation.badgeClass, presentation.label);\n\n header.appendChild(fileDetails);\n header.appendChild(badge);\n\n const progress = document.createElement('div');\n progress.className = 'progress mt-2';\n progress.setAttribute('role', 'progressbar');\n progress.setAttribute('aria-valuemin', '0');\n progress.setAttribute('aria-valuemax', '100');\n progress.setAttribute('aria-valuenow', item.progress.toString());\n\n const progressState = document.createElement('div');\n progressState.className = 'progress-bar ' + presentation.progressClass;\n progressState.style.width = item.progress + '%';\n progressState.textContent = item.progress + '%';\n progress.appendChild(progressState);\n\n const message = createTextElement('div', item.status === 'failed' ? 'small text-danger mt-2' : 'small text-muted mt-2', formatUploadMessage(item));\n\n card.appendChild(header);\n card.appendChild(progress);\n card.appendChild(message);\n uploadQueue.appendChild(card);\n });\n }\n\n function createUploadItem(file, index) {\n return {\n id: file.name + '::' + file.size + '::' + file.lastModified + '::' + index + '::' + Date.now(),\n fileName: file.name,\n fileSize: file.size,\n status: 'queued',\n progress: 0,\n error: null\n };\n }\n\n function updateUploadItem(itemId, updates) {\n uploadItems = uploadItems.map(item => item.id === itemId ? Object.assign({}, item, updates) : item);\n renderUploadQueue();\n }\n\n function removeUploadItems(predicate) {\n uploadItems = uploadItems.filter(item => !predicate(item));\n renderUploadQueue();\n }\n\n function uploadSingleDocument(file, itemIdToUpdate, fileIndex, totalFiles) {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append('chatInteractionId', config.itemId);\n formData.append('files', file);\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', config.uploadDocumentUrl, true);\n\n xhr.upload.addEventListener('progress', event => {\n if (!event.lengthComputable) {\n return;\n }\n\n const fileProgress = Math.round((event.loaded / event.total) * 100);\n updateUploadItem(itemIdToUpdate, {\n status: 'uploading',\n progress: fileProgress\n });\n\n const overallProgress = ((fileIndex + (event.loaded / event.total)) / totalFiles) * 100;\n showUploadProgress(overallProgress, 'Uploading ' + (fileIndex + 1) + ' of ' + totalFiles, 'progress-bar-striped progress-bar-animated');\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n resolve(JSON.parse(xhr.responseText));\n } catch (error) {\n reject(new Error('Upload failed: invalid server response.'));\n }\n\n return;\n }\n\n reject(new Error((xhr.responseText || 'Upload failed.').trim()));\n });\n\n xhr.addEventListener('error', () => {\n reject(new Error('Upload failed. Please check your connection and try again.'));\n });\n\n xhr.send(formData);\n });\n }\n\n async function uploadDocuments(files) {\n if (!config.uploadDocumentUrl || !files || files.length === 0) {\n return;\n }\n\n if (isUploadingDocuments) {\n showUploadStatus('A document upload is already in progress.', 'text-warning');\n return;\n }\n\n isUploadingDocuments = true;\n\n const filesToUpload = [];\n const duplicateItems = [];\n const knownDocumentKeys = new Set(interactionDocuments.map(document => getDocumentKey(document.fileName, document.fileSize)));\n\n Array.from(files).forEach(file => {\n if (isDuplicateFile(file, knownDocumentKeys)) {\n duplicateItems.push(file);\n return;\n }\n\n knownDocumentKeys.add(getDocumentKey(file.name, file.size));\n filesToUpload.push(file);\n });\n\n if (duplicateItems.length > 0) {\n uploadItems = uploadItems.concat(duplicateItems.map((file, index) => Object.assign(createUploadItem(file, index), {\n status: 'failed',\n progress: 100,\n error: 'This document is already attached.'\n })));\n renderUploadQueue();\n }\n\n if (filesToUpload.length === 0) {\n isUploadingDocuments = false;\n showUploadStatus(duplicateItems.map(file => file.name + ': This document is already attached.').join(' | '), 'text-warning');\n showUploadProgress(null);\n return;\n }\n\n const pendingItems = filesToUpload.map(createUploadItem);\n uploadItems = uploadItems.concat(pendingItems);\n renderUploadQueue();\n showUploadProgress(0, 'Preparing upload...', 'progress-bar-striped progress-bar-animated');\n fileInput.disabled = true;\n\n try {\n let uploadedCount = 0;\n const failedUploads = duplicateItems.map(file => file.name + ': This document is already attached.');\n\n for (let i = 0; i < filesToUpload.length; i++) {\n const file = filesToUpload[i];\n const pendingItem = pendingItems[i];\n\n updateUploadItem(pendingItem.id, {\n status: 'uploading',\n progress: 0,\n error: null\n });\n\n showUploadStatus('Uploading ' + (i + 1) + ' of ' + filesToUpload.length + ' document(s)...', 'text-warning');\n\n try {\n const result = await uploadSingleDocument(file, pendingItem.id, i, filesToUpload.length);\n const uploaded = (Array.isArray(result.uploaded) ? result.uploaded : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n const failed = Array.isArray(result.failed) ? result.failed : [];\n\n if (uploaded.length > 0) {\n uploadedCount += uploaded.length;\n interactionDocuments = interactionDocuments.concat(uploaded);\n updateUploadItem(pendingItem.id, {\n status: 'uploaded',\n progress: 100,\n error: null\n });\n } else {\n const missingUploadMessage = failed.length > 0\n ? failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ')\n : 'The server did not confirm that the file was uploaded.';\n if (failed.length === 0) {\n failedUploads.push(missingUploadMessage);\n }\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: missingUploadMessage\n });\n }\n\n if (failed.length > 0) {\n const failedMessage = failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ');\n failedUploads.push(failedMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: failedMessage\n });\n }\n } catch (error) {\n const errorMessage = error && error.message\n ? error.message\n : 'Upload failed. Please try again.';\n console.error('Upload failed:', error);\n failedUploads.push(file.name + ': ' + errorMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: pendingItem.progress || 0,\n error: errorMessage\n });\n }\n }\n\n renderDocuments();\n\n if (failedUploads.length > 0) {\n removeUploadItems(item => item.status === 'uploaded');\n showUploadStatus(\n (uploadedCount > 0 ? ('Uploaded ' + uploadedCount + ' document(s). ') : '') + failedUploads.join(' | '),\n uploadedCount > 0 ? 'text-warning' : 'text-danger');\n showUploadProgress(null);\n return;\n }\n\n removeUploadItems(() => true);\n showUploadStatus('Uploaded ' + uploadedCount + ' document(s).', 'text-success');\n showUploadProgress(null);\n } catch (error) {\n console.error('Upload failed:', error);\n showUploadStatus('Upload failed. Please try again.', 'text-danger');\n showUploadProgress(null);\n } finally {\n isUploadingDocuments = false;\n fileInput.disabled = false;\n fileInput.value = '';\n }\n }\n\n async function removeDocument(documentId) {\n if (!config.removeDocumentUrl || !documentId || !window.confirm('Remove this document?')) {\n return;\n }\n\n try {\n const response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n itemId: config.itemId,\n documentId: documentId\n })\n });\n\n if (!response.ok) {\n console.error('Failed to remove document:', await response.text());\n showUploadStatus('Failed to remove document.', 'text-danger');\n return;\n }\n\n const result = await response.json();\n const serverDocuments = (Array.isArray(result.documents) ? result.documents : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n interactionDocuments = serverDocuments.length > 0\n ? serverDocuments\n : interactionDocuments.filter(document => document.documentId !== documentId);\n renderDocuments();\n showUploadStatus('Document removed.', 'text-success');\n } catch (error) {\n console.error('Remove failed:', error);\n showUploadStatus('Failed to remove document.', 'text-danger');\n }\n }\n\n const onFileInputChange = event => {\n const selectedFiles = event.target.files ? Array.from(event.target.files) : [];\n uploadDocuments(selectedFiles);\n };\n\n fileInput.addEventListener('change', onFileInputChange);\n fileInput[managerStateKey] = {\n dispose: () => {\n fileInput.removeEventListener('change', onFileInputChange);\n }\n };\n\n renderDocuments();\n renderUploadQueue();\n showUploadStatus(null);\n showUploadProgress(null);\n }\n\n return {\n initialize: initialize\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["chat-interaction.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","chatInteractionManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","codeCopiedText","assistantLabel","messageTemplate","indicatorTemplate","untitledText","clearHistoryTitle","clearHistoryMessage","clearHistoryOkText","clearHistoryCancelText","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","containsFontAwesomePlaceholders","root","nodeType","selector","matches","querySelector","refreshFontAwesomeIcons","fontAwesome","FontAwesome","dom","i2svg","node","observeFontAwesomeIcons","MutationObserver","observer","mutations","forEach","mutation","addedNodes","observe","childList","subtree","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","getCitationLabel","buildCitationDisplay","content","processedContent","messageReferences","keys","citations","citedRefs","filter","_ref6","_ref7","includes","sort","_ref8","_ref9","_ref0","_ref1","b","displayIndex","_iterator","_step","_step$value","placeholder","concat","replaceAll","referenceKey","label","isDownload","err","_i2","_citations","citation","map","_ref10","_excluded","buildCopyContent","copyContent","_iterator2","_step2","_iterator3","_step3","trimEnd","updateMessagePresentation","message","rawContent","citationDisplay","displayContent","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","data","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","charts","requestAnimationFrame","_iterator4","_step4","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","app","Vue","createApp","inputElement","buttonElement","chatContainer","isInteractionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","prompt","initialFieldValues","Map","settingsDirty","saveSettingsTimeout","saveIndicatorTimeout","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","Math","random","conversationModeEnabled","conversationButton","isConversationMode","notifications","notificationDismissTimers","computed","lastAssistantIndex","role","methods","handleBeforeUnload","startConnection","_this","_callee","_t","_context","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","initializeInteraction","itemId","titleInput","msg","addMessage","$nextTick","historyItem","showSaveIndicator","stopRecording","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","messageId","responseId","appearance","hideTypingIndicator","j","msgIndex","newMessage","id","normalizeAssistantAppearance","base64Audio","contentType","binaryString","atob","bytes","Uint8Array","charCodeAt","playCollectedAudio","showPlaceholder","clearHistoryBtn","classList","add","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","reloadCurrentInteraction","onclose","addMessageInternal","_this2","fireEvent","CustomEvent","detail","_this3","_message$rawContent","remove","event","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","isIndicator","sendMessage","_this4","_callee2","trimmedPrompt","_context2","flushPendingSave","streamMessage","_this5","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentItemId","getItemId","subscribe","chunk","sessionId","setItemId","_i3","_Object$entries2","_normalizeReference2","_Object$entries2$_i","complete","_this5$stream","processReferences","streamingFinished","synthesizeSpeech","_this5$stream2","getServiceDownMessage","_this6","_ref11","_message$rawContent2","stopIcon","getAttribute","replaceChildren","RETURN_DOM_FRAGMENT","startIcon","icons","querySelectorAll","debouncedSaveSettings","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this7","buttons","button","buttonIndex","Number","isPlaying","iconHtml","toggle","setAttribute","cacheIndex","_this8","_ttsCacheIndex","invoke","toggleMessageTts","_this9","playAudioBlob","_this0","totalLength","reduce","sum","combined","offset","_iterator5","_step5","set","blob","Blob","_this1","URL","createObjectURL","audio","Audio","addEventListener","revokeObjectURL","playNextInQueue","play","_this10","nextBlob","shift","conversationModeOnAudioEnded","_this11","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this12","updateConversationButton","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","_conversationSubject","Subject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","pendingChunk","analyser","interruptVolumeThreshold","size","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee3","uint8Array","base64","_context3","arrayBuffer","str","byte","String","fromCharCode","btoa","getTracks","track","stop","documentElement","send","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","originalLength","removedCount","_this13","setTimeout","scrollTop","scrollHeight","clientHeight","handleUserInput","target","getSaveIndicatorElement","saveIndicatorElementSelector","className","_this14","indicator","clearTimeout","clearPendingSettingsSave","getFieldLabel","input","_input$closest","closest","dataset","setting","getValidationFeedbackElement","feedback","nextElementSibling","contains","insertAdjacentElement","clearSettingValidationError","removeAttribute","setSettingValidationError","getSettingValidationMessage","disabled","number","fieldLabel","isNaN","min","max","validateSettingInput","validateSettings","_this15","isValid","getSettingInputs","queueSettingsSave","explicitInputs","getSelectedGroupValues","groupName","fallbackSelector","explicitSelections","values","checkbox","checkboxes","baseName","hiddenInput","getPromptTemplateSelections","promptTemplates","card","templateIdInput","promptParametersInput","templateId","promptParameters","clearNotificationDismiss","findIndex","splice","scheduleNotificationDismiss","_this16","timerId","dismissNotification","handleNotificationAction","actionName","resetInteraction","initializeApp","_this17","placeholderElementSelector","loadInteraction","threshold","atBottom","shiftKey","click","lastMsg","pop","chatInteractionItems","getElementsByClassName","preventDefault","btn","block","codeEl","clipboard","writeText","copiedText","clearHistory","micButtonElementSelector","style","display","toggleRecording","conversationButtonElementSelector","self","clearHistoryConfirmed","confirmDialog","okText","cancelText","callback","confirmed","confirm","_this18","saveSettings","getSelectedToolNames","getSelectedMcpConnectionIds","getSelectedA2AConnectionIds","getSelectedAgentNames","_this19","settings","inputs","match","checked","parseFloat","toolNames","mcpConnectionIds","a2aConnectionIds","agentNames","promptTemplateIds","template","force","copyResponse","_ref13","_message$copyContent","startRecording","_this20","subject","_callee4","_context4","updateMicButton","watch","active","mounted","_this21","_callee5","_context5","$el","fontAwesomeObserver","beforeUnmount","removeEventListener","disconnect","mount","chatInteractionDocumentManager","managerStateKey","normalizeDocumentInfo","documentId","DocumentId","fileName","FileName","fileSize","FileSize","formatFileSize","toFixed","getDocumentKey","isDuplicateFile","file","knownKeys","has","getDocumentsFromDom","container","element","chatDocumentId","chatDocumentName","chatDocumentSize","fileInput","documentsList","status","progressContainer","progressBar","uploadQueue","previousState","interactionDocuments","existingDocuments","uploadItems","isUploadingDocuments","createTextElement","tagName","renderDocuments","appendChild","documentInfo","row","details","prepend","removeButton","removeIcon","removeDocument","showUploadStatus","showUploadProgress","progress","width","roundedProgress","round","getUploadStatePresentation","state","badgeClass","progressClass","formatUploadMessage","item","renderUploadQueue","presentation","header","fileDetails","badge","progressState","createUploadItem","lastModified","Date","now","updateUploadItem","updates","removeUploadItems","predicate","uploadSingleDocument","itemIdToUpdate","fileIndex","totalFiles","reject","formData","FormData","append","xhr","XMLHttpRequest","open","uploadDocumentUrl","upload","lengthComputable","fileProgress","loaded","total","overallProgress","responseText","Error","uploadDocuments","_x","_uploadDocuments","_callee6","files","filesToUpload","duplicateItems","knownDocumentKeys","pendingItems","uploadedCount","failedUploads","pendingItem","result","uploaded","failed","missingUploadMessage","failedMessage","errorMessage","_t2","_t3","_context6","Set","join","entry","_x2","_removeDocument","_callee7","response","serverDocuments","_t4","_t5","_context7","removeDocumentUrl","fetch","method","headers","body","stringify","ok","documents","onFileInputChange","selectedFiles","download","toDataURL","img","startsWith","res","removeChild"],"mappings":"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","file":"chat-interaction.js","sourcesContent":["window.chatInteractionManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n codeCopiedText: 'Copied!',\n assistantLabel: 'Assistant',\n\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">You</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n {{ getAssistantLabel(message) }}\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <button v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <i :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></i>\n </button>\n <button class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message)\" title=\"Click here to copy response to clipboard.\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n Assistant\n </div>\n `,\n // Localizable strings\n untitledText: 'Untitled',\n clearHistoryTitle: 'Clear History',\n clearHistoryMessage: 'Are you sure you want to clear the chat history? This action cannot be undone. Your documents, parameters, and tools will be preserved.',\n clearHistoryOkText: 'Yes',\n clearHistoryCancelText: 'Cancel'\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function containsFontAwesomePlaceholders(root) {\n if (!root || root.nodeType !== 1) {\n return false;\n }\n\n var selector = 'i[class*=\"fa-\"],i.fa,i.fas,i.far,i.fab';\n if (typeof root.matches === 'function' && root.matches(selector)) {\n return true;\n }\n\n return typeof root.querySelector === 'function' && !!root.querySelector(selector);\n }\n\n function refreshFontAwesomeIcons(root) {\n var fontAwesome = window.FontAwesome;\n if (!containsFontAwesomePlaceholders(root) || !fontAwesome || !fontAwesome.dom || typeof fontAwesome.dom.i2svg !== 'function') {\n return;\n }\n\n fontAwesome.dom.i2svg({ node: root });\n }\n\n function observeFontAwesomeIcons(root) {\n if (!root || typeof MutationObserver === 'undefined') {\n return null;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n refreshFontAwesomeIcons(node);\n });\n });\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n function buildCitationDisplay(content, references) {\n let processedContent = (content || '').trim();\n const messageReferences = normalizeReferences(references);\n\n if (!processedContent || !Object.keys(messageReferences).length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = Object.entries(messageReferences).filter(([key]) => processedContent.includes(key));\n\n if (!citedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${displayIndex}_${value.index || displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: isDownloadCitationReference(value),\n placeholder: placeholder,\n });\n\n displayIndex++;\n }\n\n for (const citation of citations) {\n processedContent = processedContent.replaceAll(citation.placeholder, `<sup>${citation.displayIndex}</sup>`);\n }\n\n processedContent = processedContent.replaceAll('</sup><sup>', '</sup><sup>,</sup><sup>');\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n for (const citation of citations) {\n copyContent = copyContent.replaceAll(citation.referenceKey, `[${citation.displayIndex}]`);\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n const citationDisplay = buildCitationDisplay(rawContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n message.copyContent = buildCopyContent(rawContent, citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <i class=\"fa-solid fa-download\"></i>\n </a>\n </div>\n </div>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map shared with ai-chat.js\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<i class=\"fa-solid fa-download\"></i> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = tryExtractChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n const canvas = document.getElementById(c.chartId);\n if (!canvas) {\n continue;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n continue;\n }\n\n // When the canvas is inside a hidden container (e.g., display:none),\n // it has zero dimensions. Keep the config for later rendering.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[c.chartId] = c.config;\n continue;\n }\n\n try {\n // Destroy existing chart instance if re-rendering\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof c.config === 'string' ? JSON.parse(c.config) : c.config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n } catch (e) {\n console.error('Error creating chart:', e);\n }\n }\n });\n }\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = marked.parse(content, { renderer });\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const app = Vue.createApp({\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isInteractionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n prompt: '',\n initialFieldValues: new Map(),\n settingsDirty: false,\n saveSettingsTimeout: null,\n saveIndicatorTimeout: null,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'chat-interaction-' + Math.random().toString(36).slice(2),\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n notifications: [],\n notificationDismissTimers: {},\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadInteraction\", (data) => {\n this.initializeInteraction(data.itemId, true);\n this.messages = [];// Update the title field if it exists\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && data.title) {\n titleInput.value = data.title;\n }\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n });\n });\n });\n\n this.connection.on(\"SettingsSaved\", (itemId, title) => {\n // Update the history list item if it exists\n // Use a more specific selector to only target history list items, not other elements like the Clear History button\n const historyItem = document.querySelector(`.chat-interaction-history-item[data-interaction-id=\"${itemId}\"]`);\n if (historyItem) {\n historyItem.textContent = title || config.untitledText;\n }\n\n const titleInput = document.querySelector('[data-chat-interaction-title], .setting-input[data-setting=\"title\"], input[name=\"ChatInteraction.Title\"], input[name=\"Title\"]');\n if (titleInput && title) {\n titleInput.value = title;\n }\n\n this.showSaveIndicator('Saved', 'text-success');\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n this.showSaveIndicator('Save failed', 'text-danger');\n\n if (this.isRecording) {\n this.stopRecording();\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (itemId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (itemId, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (itemId, messageId, token, responseId, references, appearance) => {\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (itemId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (itemId, base64Audio, contentType) => {\n if (base64Audio) {\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (itemId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"HistoryCleared\", (itemId) => {\n // Clear messages and show placeholder\n this.messages = [];\n this.showPlaceholder();\n\n // Hide the clear history button since there's no history now\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.add('d-none');\n }\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n this.reloadCurrentInteraction();\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingChatInteractionMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedChatInteractionMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : defaultConfig.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n async sendMessage() {\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // Flush any pending settings save before sending a message\n // to prevent concurrent hub calls that can cause database deadlocks.\n await this.flushPendingSave();\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n // Show the clear history button since we now have prompts\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.classList.remove('d-none');\n }\n\n this.streamMessage(trimmedPrompt);\n this.inputElement.value = '';\n this.prompt = '';\n },\n streamMessage(trimmedPrompt) {\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n var messageIndex = this.messages.length;\n var currentItemId = this.getItemId();\n\n this.stream = this.connection.stream(\"SendMessage\", currentItemId, trimmedPrompt)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n if (chunk.sessionId && !currentItemId) {\n this.setItemId(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n messageIndex = this.messages.length;\n let newMessage = {\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n };\n\n this.messages.push(newMessage);\n message = newMessage;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n return {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Save any settings that were deferred during streaming.\n if (this.settingsDirty) {\n this.debouncedSaveSettings();\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n var iconHtml = isPlaying\n ? '<i class=\"fa-solid fa-circle-pause\"></i>'\n : '<i class=\"fa-solid fa-circle-play\"></i>';\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getItemId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.isPlayingAudio && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is currently playing, queue this blob for later.\n if (this.isPlayingAudio && this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n const nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var itemId = this.getItemId();\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"StartConversation\", itemId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, continuation is handled\n // by the persistent stream.\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getItemId() {\n return this.inputElement.getAttribute('data-interaction-id')\n || this.inputElement.getAttribute('data-item-id');\n },\n getSaveIndicatorElement() {\n if (config.saveIndicatorElementSelector) {\n return document.querySelector(config.saveIndicatorElementSelector);\n }\n\n return document.querySelector('[data-chat-interaction-save-indicator]');\n },\n showSaveIndicator(text, className) {\n const indicator = this.getSaveIndicatorElement();\n if (!indicator) {\n return;\n }\n\n indicator.textContent = text || '';\n indicator.className = 'settings-save-indicator ' + (className || 'text-muted');\n\n if (this.saveIndicatorTimeout) {\n clearTimeout(this.saveIndicatorTimeout);\n this.saveIndicatorTimeout = null;\n }\n\n if (!text) {\n return;\n }\n\n this.saveIndicatorTimeout = setTimeout(() => {\n indicator.textContent = '';\n this.saveIndicatorTimeout = null;\n }, 3000);\n },\n clearPendingSettingsSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n },\n getFieldLabel(input) {\n const label = input\n .closest('.mb-3, .col-6, .col, .form-group, .form-floating')\n ?.querySelector('label');\n\n if (!label) {\n return input.dataset.setting || 'This field';\n }\n\n return (label.textContent || '')\n .replace(/\\s+/g, ' ')\n .trim()\n || input.dataset.setting\n || 'This field';\n },\n getValidationFeedbackElement(input) {\n let feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n return feedback;\n }\n\n feedback = document.createElement('div');\n feedback.className = 'invalid-feedback';\n input.insertAdjacentElement('afterend', feedback);\n\n return feedback;\n },\n clearSettingValidationError(input) {\n input.classList.remove('is-invalid');\n input.removeAttribute('aria-invalid');\n\n const feedback = input.nextElementSibling;\n if (feedback && feedback.classList.contains('invalid-feedback')) {\n feedback.textContent = '';\n }\n },\n setSettingValidationError(input, message) {\n const feedback = this.getValidationFeedbackElement(input);\n input.classList.add('is-invalid');\n input.setAttribute('aria-invalid', 'true');\n feedback.textContent = message;\n },\n getSettingValidationMessage(input) {\n if (!input || input.disabled || input.type !== 'number') {\n return null;\n }\n\n const value = (input.value || '').trim();\n if (!value) {\n return null;\n }\n\n const number = Number(value);\n const fieldLabel = this.getFieldLabel(input);\n\n if (Number.isNaN(number)) {\n return `${fieldLabel} must be a valid number.`;\n }\n\n const min = input.getAttribute('min');\n if (min !== null && number < Number(min)) {\n return `${fieldLabel} must be ${min} or greater.`;\n }\n\n const max = input.getAttribute('max');\n if (max !== null && number > Number(max)) {\n return `${fieldLabel} must be ${max} or less.`;\n }\n\n return null;\n },\n validateSettingInput(input) {\n const message = this.getSettingValidationMessage(input);\n if (!message) {\n this.clearSettingValidationError(input);\n return true;\n }\n\n this.setSettingValidationError(input, message);\n return false;\n },\n validateSettings() {\n let isValid = true;\n\n this.getSettingInputs().forEach(input => {\n isValid = this.validateSettingInput(input) && isValid;\n });\n\n return isValid;\n },\n queueSettingsSave() {\n if (!this.validateSettings()) {\n this.clearPendingSettingsSave();\n this.settingsDirty = false;\n this.showSaveIndicator('Fix errors', 'text-danger');\n return;\n }\n\n this.settingsDirty = true;\n this.showSaveIndicator('Saving...', 'text-warning');\n this.debouncedSaveSettings();\n },\n getSettingInputs() {\n const explicitInputs = document.querySelectorAll('.setting-input[data-setting]');\n if (explicitInputs.length > 0) {\n return explicitInputs;\n }\n\n return document.querySelectorAll(\n 'input[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'select[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"]), ' +\n 'textarea[name^=\"ChatInteraction.\"]:not([name*=\".Tools[\"]):not([name*=\".Connections[\"])'\n );\n },\n getSelectedGroupValues(groupName, fallbackSelector) {\n const explicitSelections = document.querySelectorAll(`.capability-checkbox[data-save-group=\"${groupName}\"]:checked, .capability-checkbox[data-group=\"${groupName}\"]:checked`);\n if (explicitSelections.length > 0) {\n const values = [];\n\n explicitSelections.forEach(checkbox => {\n const value = checkbox.getAttribute('data-item-id') || checkbox.value;\n if (value) {\n values.push(value);\n }\n });\n\n return values;\n }\n\n if (!fallbackSelector) {\n return [];\n }\n\n const values = [];\n const checkboxes = document.querySelectorAll(fallbackSelector);\n\n checkboxes.forEach(checkbox => {\n const baseName = checkbox.name.replace('.IsSelected', '.ItemId');\n const hiddenInput = document.querySelector(`input[type=\"hidden\"][name=\"${baseName}\"]`);\n\n if (hiddenInput && hiddenInput.value) {\n values.push(hiddenInput.value);\n }\n });\n\n return values;\n },\n getPromptTemplateSelections() {\n const promptTemplates = [];\n\n document.querySelectorAll('.prompt-template-card').forEach(card => {\n const templateIdInput = card.querySelector('.prompt-template-id-input');\n const promptParametersInput = card.querySelector('.prompt-template-parameters-input');\n const templateId = templateIdInput ? templateIdInput.value : card.getAttribute('data-template-id');\n\n if (!templateId) {\n return;\n }\n\n promptTemplates.push({\n templateId: templateId,\n promptParameters: promptParametersInput ? (promptParametersInput.value || '').trim() : ''\n });\n });\n\n return promptTemplates;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n // Replace existing notification with same type, or add new one.\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var idx = this.notifications.findIndex(n => n.type === notification.type);\n if (idx >= 0) {\n this.notifications.splice(idx, 1, notification);\n this.scheduleNotificationDismiss(notification);\n this.scrollToBottom();\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var itemId = this.getItemId();\n this.connection.invoke('HandleNotificationAction', itemId, notificationType, actionName)\n .catch(err => console.error('Failed to handle notification action:', err));\n },\n setItemId(itemId) {\n this.inputElement.setAttribute('data-interaction-id', itemId || '');\n this.inputElement.setAttribute('data-item-id', itemId || '');\n },\n resetInteraction() {\n this.setItemId('');\n this.isInteractionStarted = false;\n this.messages = [];\n this.showPlaceholder();\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keyup', event => {\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.inputElement.addEventListener('paste', (e) => {\n // Use setTimeout to allow the paste to complete before checking the value\n setTimeout(() => {\n this.prompt = this.inputElement.value;\n if (this.inputElement.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n }, 0);\n });\n\n this.buttonElement.addEventListener('click', () => {\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const chatInteractionItems = document.getElementsByClassName('chat-interaction-history-item');\n\n for (var i = 0; i < chatInteractionItems.length; i++) {\n chatInteractionItems[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var itemId = e.target.getAttribute('data-interaction-id');\n\n if (!itemId) {\n console.error('An element with the class chat-interaction-history-item with no data-interaction-id set.');\n return;\n }\n\n this.loadInteraction(itemId);\n });\n }\n\n for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\n }\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n document.addEventListener('input', event => {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('change', event => {\n if (event.target.matches('.setting-input[data-setting], .capability-checkbox[data-save-group], .capability-checkbox[data-group], .group-toggle, .ci-agent-global-toggle')) {\n if (event.target.matches('.setting-input[data-setting]')) {\n this.validateSettingInput(event.target);\n }\n\n this.queueSettingsSave();\n return;\n }\n\n if (event.target.closest('.prompt-template-parameters-input, .prompt-template-id-input')) {\n this.queueSettingsSave();\n }\n });\n\n document.addEventListener('click', event => {\n if (!event.target.closest('.prompt-template-add-btn, .remove-prompt-template-btn')) {\n return;\n }\n\n setTimeout(() => {\n this.queueSettingsSave();\n }, 0);\n });\n\n // Add event listener for clear history button\n const clearHistoryBtn = document.getElementById('clearHistoryBtn');\n if (clearHistoryBtn) {\n clearHistoryBtn.addEventListener('click', () => {\n const itemId = clearHistoryBtn.getAttribute('data-interaction-id');\n if (itemId) {\n this.clearHistory(itemId);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n },\n loadInteraction(itemId) {\n this.connection.invoke(\"LoadInteraction\", itemId).catch(err => console.error(err));\n },\n reloadCurrentInteraction() {\n const itemId = this.getItemId();\n if (itemId) {\n this.loadInteraction(itemId);\n }\n },\n clearHistory(itemId) {\n const self = this;\n const clearHistoryConfirmed = () => {\n // Cancel any active stream before clearing history.\n if (self.stream) {\n self.stream.dispose();\n self.stream = null;\n self.hideTypingIndicator();\n self.streamingFinished();\n }\n\n self.connection.invoke(\"ClearHistory\", itemId)\n .catch(err => console.error('Error clearing history:', err));\n };\n\n if (typeof confirmDialog === 'function') {\n confirmDialog({\n title: config.clearHistoryTitle,\n message: config.clearHistoryMessage,\n okText: config.clearHistoryOkText,\n cancelText: config.clearHistoryCancelText,\n callback: function (confirmed) {\n if (confirmed) {\n clearHistoryConfirmed();\n }\n }\n });\n\n return;\n }\n\n if (window.confirm(config.clearHistoryMessage || 'Clear all messages?')) {\n clearHistoryConfirmed();\n }\n },\n debouncedSaveSettings() {\n // Clear any existing timeout to reset the debounce timer\n this.clearPendingSettingsSave();\n\n // Don't save while streaming — it will be saved when streaming completes.\n if (this.stream) {\n return;\n }\n\n // Set a new timeout to save after 850ms of no changes\n this.saveSettingsTimeout = setTimeout(() => {\n if (this.settingsDirty) {\n this.saveSettings();\n this.settingsDirty = false;\n }\n this.saveSettingsTimeout = null;\n }, 850);\n },\n getSelectedToolNames() {\n return this.getSelectedGroupValues(\n 'toolNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Tools[\"]:checked'\n );\n },\n getSelectedMcpConnectionIds() {\n return this.getSelectedGroupValues(\n 'mcpConnectionIds',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Connections[\"]:checked'\n );\n },\n getSelectedA2AConnectionIds() {\n return this.getSelectedGroupValues('a2aConnectionIds');\n },\n getSelectedAgentNames() {\n return this.getSelectedGroupValues(\n 'agentNames',\n 'input[type=\"checkbox\"][name$=\"].IsSelected\"][name^=\"ChatInteraction.Agents[\"]:checked'\n );\n },\n saveSettings() {\n const itemId = this.getItemId();\n if (!itemId) {\n return Promise.resolve();\n }\n\n if (!this.validateSettings()) {\n this.showSaveIndicator('Fix errors', 'text-danger');\n return Promise.resolve();\n }\n\n const settings = {};\n\n // Collect all form inputs with the \"ChatInteraction.\" prefix generically.\n // This avoids coupling the JS to specific field names — new fields added by\n // any module are automatically included.\n const inputs = this.getSettingInputs();\n\n inputs.forEach(input => {\n const key = input.dataset.setting\n || ((input.name || '').replace('ChatInteraction.', '').replace(/^[A-Z]/, match => match.toLowerCase()));\n\n if (!key) {\n return;\n }\n\n if (input.type === 'checkbox') {\n settings[key] = input.checked;\n } else if (input.type === 'number') {\n settings[key] = input.value ? parseFloat(input.value) : null;\n } else {\n settings[key] = input.value || null;\n }\n });\n\n // Add tool, MCP connection, and agent collections (special handling).\n settings.toolNames = this.getSelectedToolNames();\n settings.mcpConnectionIds = this.getSelectedMcpConnectionIds();\n settings.a2aConnectionIds = this.getSelectedA2AConnectionIds();\n settings.agentNames = this.getSelectedAgentNames();\n\n const promptTemplates = this.getPromptTemplateSelections();\n if (promptTemplates.length > 0) {\n settings.promptTemplates = promptTemplates;\n settings.promptTemplateIds = promptTemplates.map(template => template.templateId);\n }\n\n return this.connection.invoke(\"SaveSettings\", itemId, settings)\n .catch(err => {\n console.error('Error saving settings:', err);\n this.showSaveIndicator('Save failed', 'text-danger');\n });\n },\n flushPendingSave() {\n if (this.saveSettingsTimeout) {\n clearTimeout(this.saveSettingsTimeout);\n this.saveSettingsTimeout = null;\n }\n\n if (this.settingsDirty) {\n this.settingsDirty = false;\n return this.saveSettings();\n }\n\n return Promise.resolve();\n },\n initializeInteraction(itemId, force) {\n if (this.isInteractionStarted && !force) {\n return;\n }\n this.fireEvent(new CustomEvent(\"initializingChatInteraction\", { detail: { itemId: itemId } }));\n this.setItemId(itemId);\n this.isInteractionStarted = true;\n },\n copyResponse(message) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n\n navigator.clipboard.writeText(text);\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var itemId = this.getItemId();\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", itemId, subject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n }\n },\n watch: {\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n this.initializeApp();\n\n this.$nextTick(() => {\n refreshFontAwesomeIcons(this.$el);\n this.fontAwesomeObserver = observeFontAwesomeIcons(this.$el);\n });\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n if (this.fontAwesomeObserver) {\n this.fontAwesomeObserver.disconnect();\n this.fontAwesomeObserver = null;\n }\n\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n },\n template: config.messageTemplate\n }).mount(config.appElementSelector);\n\n return app;\n };\n\n return {\n initialize: initialize\n };\n}();\n\nwindow.chatInteractionDocumentManager = function () {\n const managerStateKey = '__chatInteractionDocumentManagerState';\n\n function normalizeDocumentInfo(document) {\n if (!document || typeof document !== 'object') {\n return null;\n }\n\n return {\n documentId: document.documentId || document.DocumentId || '',\n fileName: document.fileName || document.FileName || '',\n fileSize: document.fileSize || document.FileSize || 0\n };\n }\n\n function formatFileSize(bytes) {\n if (!bytes || bytes < 1024) {\n return (bytes || 0) + ' B';\n }\n\n if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(1) + ' KB';\n }\n\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n\n function getDocumentKey(fileName, fileSize) {\n return ((fileName || '').trim().toLowerCase()) + '::' + (fileSize || 0);\n }\n\n function isDuplicateFile(file, knownKeys) {\n return knownKeys.has(getDocumentKey(file.name, file.size));\n }\n\n function getDocumentsFromDom(container) {\n if (!container) {\n return [];\n }\n\n return Array.from(container.querySelectorAll('[data-chat-document-id]'))\n .map(element => normalizeDocumentInfo({\n documentId: element.dataset.chatDocumentId,\n fileName: element.dataset.chatDocumentName,\n fileSize: Number(element.dataset.chatDocumentSize || 0)\n }))\n .filter(document => document && document.documentId);\n }\n\n function initialize(config) {\n if (!config || !config.itemId) {\n return;\n }\n\n const fileInput = document.getElementById('chat-doc-upload');\n const documentsList = document.getElementById('chat-documents-list');\n const status = document.getElementById('chat-doc-upload-status');\n const progressContainer = document.getElementById('chat-doc-upload-progress');\n const progressBar = document.getElementById('chat-doc-upload-progress-bar');\n const uploadQueue = document.getElementById('chat-doc-upload-queue');\n\n if (!fileInput || !documentsList || !status || !progressContainer || !progressBar || !uploadQueue) {\n return;\n }\n\n const previousState = fileInput[managerStateKey];\n if (previousState && typeof previousState.dispose === 'function') {\n previousState.dispose();\n }\n\n let interactionDocuments = (Array.isArray(config.existingDocuments) ? config.existingDocuments : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n if (interactionDocuments.length === 0) {\n interactionDocuments = getDocumentsFromDom(documentsList);\n }\n\n let uploadItems = [];\n let isUploadingDocuments = false;\n\n function createTextElement(tagName, className, text) {\n const element = document.createElement(tagName);\n if (className) {\n element.className = className;\n }\n\n element.textContent = text;\n return element;\n }\n\n function renderDocuments() {\n documentsList.innerHTML = '';\n\n if (interactionDocuments.length === 0) {\n documentsList.appendChild(createTextElement('div', 'text-muted small', 'No documents uploaded yet.'));\n return;\n }\n\n interactionDocuments.forEach(documentInfo => {\n const row = window.document.createElement('div');\n row.className = 'd-flex justify-content-between align-items-start gap-2 border rounded px-2 py-2 bg-white chat-document-row';\n row.dataset.chatDocumentId = documentInfo.documentId;\n row.dataset.chatDocumentName = documentInfo.fileName;\n row.dataset.chatDocumentSize = documentInfo.fileSize;\n\n const details = window.document.createElement('div');\n details.className = 'me-2 min-w-0';\n\n const name = createTextElement('div', 'fw-semibold small', documentInfo.fileName || 'Document');\n const icon = window.document.createElement('i');\n icon.className = 'bi bi-file-earmark-text me-1';\n name.prepend(icon);\n\n const size = createTextElement('div', 'text-muted small', formatFileSize(documentInfo.fileSize));\n\n details.appendChild(name);\n details.appendChild(size);\n\n const removeButton = createTextElement('button', 'btn btn-sm btn-outline-danger remove-chat-document-btn', ' Remove');\n removeButton.type = 'button';\n removeButton.dataset.documentId = documentInfo.documentId;\n const removeIcon = window.document.createElement('i');\n removeIcon.className = 'bi bi-trash';\n removeButton.prepend(removeIcon);\n removeButton.addEventListener('click', () => removeDocument(documentInfo.documentId));\n\n row.appendChild(details);\n row.appendChild(removeButton);\n documentsList.appendChild(row);\n });\n }\n\n function showUploadStatus(message, cssClass) {\n if (!message) {\n status.textContent = '';\n status.className = 'small mt-2 d-none';\n return;\n }\n\n status.textContent = message;\n status.className = 'small mt-2 ' + (cssClass || 'text-muted');\n }\n\n function showUploadProgress(progress, message, cssClass) {\n if (progress === null || progress === undefined) {\n progressContainer.className = 'progress mt-2 d-none';\n progressContainer.setAttribute('aria-valuenow', '0');\n progressBar.className = 'progress-bar progress-bar-striped progress-bar-animated';\n progressBar.style.width = '0%';\n progressBar.textContent = '0%';\n return;\n }\n\n const roundedProgress = Math.max(0, Math.min(100, Math.round(progress)));\n progressContainer.className = 'progress mt-2';\n progressContainer.setAttribute('aria-valuenow', roundedProgress.toString());\n progressBar.className = 'progress-bar ' + (cssClass || 'progress-bar-striped progress-bar-animated');\n progressBar.style.width = roundedProgress + '%';\n progressBar.textContent = message || (roundedProgress + '%');\n }\n\n function getUploadStatePresentation(state) {\n switch (state) {\n case 'uploaded':\n return { label: 'Uploaded', badgeClass: 'text-bg-success', progressClass: 'bg-success' };\n case 'failed':\n return { label: 'Failed', badgeClass: 'text-bg-danger', progressClass: 'bg-danger' };\n case 'uploading':\n return { label: 'Uploading', badgeClass: 'text-bg-warning', progressClass: 'bg-warning progress-bar-striped progress-bar-animated' };\n default:\n return { label: 'Queued', badgeClass: 'text-bg-secondary', progressClass: 'bg-secondary progress-bar-striped progress-bar-animated' };\n }\n }\n\n function formatUploadMessage(item) {\n if (item.status === 'failed' && item.error) {\n return item.error;\n }\n\n if (item.status === 'uploaded') {\n return 'Upload completed successfully.';\n }\n\n if (item.status === 'uploading') {\n return item.progress + '% uploaded';\n }\n\n return 'Waiting to upload...';\n }\n\n function renderUploadQueue() {\n uploadQueue.innerHTML = '';\n\n uploadItems.forEach(item => {\n const presentation = getUploadStatePresentation(item.status);\n const card = document.createElement('div');\n card.className = 'border rounded px-2 py-2 bg-white';\n\n const header = document.createElement('div');\n header.className = 'd-flex justify-content-between align-items-start gap-2';\n\n const fileDetails = document.createElement('div');\n fileDetails.className = 'flex-grow-1 min-w-0';\n fileDetails.appendChild(createTextElement('div', 'fw-semibold small', item.fileName));\n fileDetails.appendChild(createTextElement('div', 'text-muted small', formatFileSize(item.fileSize)));\n\n const badge = createTextElement('span', 'badge ' + presentation.badgeClass, presentation.label);\n\n header.appendChild(fileDetails);\n header.appendChild(badge);\n\n const progress = document.createElement('div');\n progress.className = 'progress mt-2';\n progress.setAttribute('role', 'progressbar');\n progress.setAttribute('aria-valuemin', '0');\n progress.setAttribute('aria-valuemax', '100');\n progress.setAttribute('aria-valuenow', item.progress.toString());\n\n const progressState = document.createElement('div');\n progressState.className = 'progress-bar ' + presentation.progressClass;\n progressState.style.width = item.progress + '%';\n progressState.textContent = item.progress + '%';\n progress.appendChild(progressState);\n\n const message = createTextElement('div', item.status === 'failed' ? 'small text-danger mt-2' : 'small text-muted mt-2', formatUploadMessage(item));\n\n card.appendChild(header);\n card.appendChild(progress);\n card.appendChild(message);\n uploadQueue.appendChild(card);\n });\n }\n\n function createUploadItem(file, index) {\n return {\n id: file.name + '::' + file.size + '::' + file.lastModified + '::' + index + '::' + Date.now(),\n fileName: file.name,\n fileSize: file.size,\n status: 'queued',\n progress: 0,\n error: null\n };\n }\n\n function updateUploadItem(itemId, updates) {\n uploadItems = uploadItems.map(item => item.id === itemId ? Object.assign({}, item, updates) : item);\n renderUploadQueue();\n }\n\n function removeUploadItems(predicate) {\n uploadItems = uploadItems.filter(item => !predicate(item));\n renderUploadQueue();\n }\n\n function uploadSingleDocument(file, itemIdToUpdate, fileIndex, totalFiles) {\n return new Promise((resolve, reject) => {\n const formData = new FormData();\n formData.append('chatInteractionId', config.itemId);\n formData.append('files', file);\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', config.uploadDocumentUrl, true);\n\n xhr.upload.addEventListener('progress', event => {\n if (!event.lengthComputable) {\n return;\n }\n\n const fileProgress = Math.round((event.loaded / event.total) * 100);\n updateUploadItem(itemIdToUpdate, {\n status: 'uploading',\n progress: fileProgress\n });\n\n const overallProgress = ((fileIndex + (event.loaded / event.total)) / totalFiles) * 100;\n showUploadProgress(overallProgress, 'Uploading ' + (fileIndex + 1) + ' of ' + totalFiles, 'progress-bar-striped progress-bar-animated');\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n resolve(JSON.parse(xhr.responseText));\n } catch (error) {\n reject(new Error('Upload failed: invalid server response.'));\n }\n\n return;\n }\n\n reject(new Error((xhr.responseText || 'Upload failed.').trim()));\n });\n\n xhr.addEventListener('error', () => {\n reject(new Error('Upload failed. Please check your connection and try again.'));\n });\n\n xhr.send(formData);\n });\n }\n\n async function uploadDocuments(files) {\n if (!config.uploadDocumentUrl || !files || files.length === 0) {\n return;\n }\n\n if (isUploadingDocuments) {\n showUploadStatus('A document upload is already in progress.', 'text-warning');\n return;\n }\n\n isUploadingDocuments = true;\n\n const filesToUpload = [];\n const duplicateItems = [];\n const knownDocumentKeys = new Set(interactionDocuments.map(document => getDocumentKey(document.fileName, document.fileSize)));\n\n Array.from(files).forEach(file => {\n if (isDuplicateFile(file, knownDocumentKeys)) {\n duplicateItems.push(file);\n return;\n }\n\n knownDocumentKeys.add(getDocumentKey(file.name, file.size));\n filesToUpload.push(file);\n });\n\n if (duplicateItems.length > 0) {\n uploadItems = uploadItems.concat(duplicateItems.map((file, index) => Object.assign(createUploadItem(file, index), {\n status: 'failed',\n progress: 100,\n error: 'This document is already attached.'\n })));\n renderUploadQueue();\n }\n\n if (filesToUpload.length === 0) {\n isUploadingDocuments = false;\n showUploadStatus(duplicateItems.map(file => file.name + ': This document is already attached.').join(' | '), 'text-warning');\n showUploadProgress(null);\n return;\n }\n\n const pendingItems = filesToUpload.map(createUploadItem);\n uploadItems = uploadItems.concat(pendingItems);\n renderUploadQueue();\n showUploadProgress(0, 'Preparing upload...', 'progress-bar-striped progress-bar-animated');\n fileInput.disabled = true;\n\n try {\n let uploadedCount = 0;\n const failedUploads = duplicateItems.map(file => file.name + ': This document is already attached.');\n\n for (let i = 0; i < filesToUpload.length; i++) {\n const file = filesToUpload[i];\n const pendingItem = pendingItems[i];\n\n updateUploadItem(pendingItem.id, {\n status: 'uploading',\n progress: 0,\n error: null\n });\n\n showUploadStatus('Uploading ' + (i + 1) + ' of ' + filesToUpload.length + ' document(s)...', 'text-warning');\n\n try {\n const result = await uploadSingleDocument(file, pendingItem.id, i, filesToUpload.length);\n const uploaded = (Array.isArray(result.uploaded) ? result.uploaded : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n const failed = Array.isArray(result.failed) ? result.failed : [];\n\n if (uploaded.length > 0) {\n uploadedCount += uploaded.length;\n interactionDocuments = interactionDocuments.concat(uploaded);\n updateUploadItem(pendingItem.id, {\n status: 'uploaded',\n progress: 100,\n error: null\n });\n } else {\n const missingUploadMessage = failed.length > 0\n ? failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ')\n : 'The server did not confirm that the file was uploaded.';\n if (failed.length === 0) {\n failedUploads.push(missingUploadMessage);\n }\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: missingUploadMessage\n });\n }\n\n if (failed.length > 0) {\n const failedMessage = failed.map(entry => entry.fileName + ': ' + entry.error).join(' | ');\n failedUploads.push(failedMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: 100,\n error: failedMessage\n });\n }\n } catch (error) {\n const errorMessage = error && error.message\n ? error.message\n : 'Upload failed. Please try again.';\n console.error('Upload failed:', error);\n failedUploads.push(file.name + ': ' + errorMessage);\n updateUploadItem(pendingItem.id, {\n status: 'failed',\n progress: pendingItem.progress || 0,\n error: errorMessage\n });\n }\n }\n\n renderDocuments();\n\n if (failedUploads.length > 0) {\n removeUploadItems(item => item.status === 'uploaded');\n showUploadStatus(\n (uploadedCount > 0 ? ('Uploaded ' + uploadedCount + ' document(s). ') : '') + failedUploads.join(' | '),\n uploadedCount > 0 ? 'text-warning' : 'text-danger');\n showUploadProgress(null);\n return;\n }\n\n removeUploadItems(() => true);\n showUploadStatus('Uploaded ' + uploadedCount + ' document(s).', 'text-success');\n showUploadProgress(null);\n } catch (error) {\n console.error('Upload failed:', error);\n showUploadStatus('Upload failed. Please try again.', 'text-danger');\n showUploadProgress(null);\n } finally {\n isUploadingDocuments = false;\n fileInput.disabled = false;\n fileInput.value = '';\n }\n }\n\n async function removeDocument(documentId) {\n if (!config.removeDocumentUrl || !documentId || !window.confirm('Remove this document?')) {\n return;\n }\n\n try {\n const response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n itemId: config.itemId,\n documentId: documentId\n })\n });\n\n if (!response.ok) {\n console.error('Failed to remove document:', await response.text());\n showUploadStatus('Failed to remove document.', 'text-danger');\n return;\n }\n\n const result = await response.json();\n const serverDocuments = (Array.isArray(result.documents) ? result.documents : [])\n .map(normalizeDocumentInfo)\n .filter(document => document && document.documentId);\n\n interactionDocuments = serverDocuments.length > 0\n ? serverDocuments\n : interactionDocuments.filter(document => document.documentId !== documentId);\n renderDocuments();\n showUploadStatus('Document removed.', 'text-success');\n } catch (error) {\n console.error('Remove failed:', error);\n showUploadStatus('Failed to remove document.', 'text-danger');\n }\n }\n\n const onFileInputChange = event => {\n const selectedFiles = event.target.files ? Array.from(event.target.files) : [];\n uploadDocuments(selectedFiles);\n };\n\n fileInput.addEventListener('change', onFileInputChange);\n fileInput[managerStateKey] = {\n dispose: () => {\n fileInput.removeEventListener('change', onFileInputChange);\n }\n };\n\n renderDocuments();\n renderUploadQueue();\n showUploadStatus(null);\n showUploadProgress(null);\n }\n\n return {\n initialize: initialize\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
|