{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/monaco-editor/esm/vs/base/common/platform.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-uri/index.js","webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/errors.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/functional.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/iterator.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/lifecycle.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/linkedList.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/stopwatch.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/event.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/types.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/strings.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/worker/simpleWorker.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/diff/diffChange.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/hash.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/diff/diff.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/path.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/uri.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/position.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/range.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/diff/diffComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/uint.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/viewModel/prefixSumComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/mirrorTextModel.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/model/wordHelper.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/characterClassifier.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/linkComputer.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/modes/supports/inplaceReplaceSupport.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/cancellation.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/keyCodes.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneEnums.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/selection.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/core/token.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneBase.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/common/services/editorSimpleWorker.js","webpack:///./node_modules/monaco-editor/esm/vs/editor/editor.worker.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/fillers/vscode-nls.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-languageserver-types/main.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-languageserver-textdocument/lib/esm/main.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/htmlLanguageTypes.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/parser/htmlScanner.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/utils/arrays.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/languageFacts/fact.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/parser/htmlParser.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/parser/htmlEntities.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/utils/strings.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/utils/object.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/utils/markup.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/languageFacts/dataProvider.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/pathCompletion.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlCompletion.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlHover.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/beautify/beautify-css.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/beautify/beautify.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/beautify/beautify-html.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlFormatter.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlLinks.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlHighlighting.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlSymbolsProvider.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlRename.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlMatchingTagPosition.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlLinkedEditing.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlFolding.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/services/htmlSelectionRange.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/languageFacts/data/webCustomData.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/languageFacts/dataManager.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/_deps/vscode-html-languageservice/htmlLanguageService.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/htmlWorker.js","webpack:///./node_modules/monaco-editor/esm/vs/language/html/html.worker.js","webpack:///./node_modules/monaco-editor/esm/vs/base/common/process.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/path-browserify/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_a","LANGUAGE_DEFAULT","_isWindows","_isMacintosh","_isLinux","_isLinuxSnap","_isNative","_isWeb","_isIOS","_locale","undefined","_language","_translationsConfigFile","_userAgent","globals","self","global","nodeProcess","vscode","process","isElectronRenderer","versions","electron","type","navigator","platform","env","rawNlsConfig","nlsConfig","JSON","parse","resolved","availableLanguages","locale","e","console","error","userAgent","indexOf","maxTouchPoints","language","_platform","isWindows","isMacintosh","isWeb","setImmediate","postMessage","importScripts","pending","addEventListener","data","vscodeSetImmediateId","len","length","candidate","id","splice","callback","lastId","myId","push","nextTick","_promise","Promise","resolve","then","LIB","470","TypeError","stringify","a","h","charCodeAt","lastIndexOf","slice","arguments","cwd","normalize","isAbsolute","join","relative","f","u","_makeLong","dirname","basename","extname","format","dir","root","base","ext","sep","delimiter","win32","posix","447","URI","g","Utils","O","setPrototypeOf","__proto__","Array","this","constructor","scheme","authority","path","query","fragment","Error","test","isUri","fsPath","with","toString","C","configurable","v","exec","x","file","replace","substring","from","A","toJSON","revive","_formatted","external","_fsPath","_sep","apply","$mid","y","encodeURIComponent","charAt","substr","b","toLowerCase","String","fromCharCode","w","decodeURIComponent","_","match","P","j","U","joinPath","resolvePath","fn","args","shift","setTimeout","arch","execPath","title","pid","browser","argv","binding","chdir","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","ErrorHandler","listeners","unexpectedErrorHandler","stack","message","forEach","listener","emit","errorHandler","onUnexpectedError","isPromiseCanceledError","transformErrorForSerialization","stacktrace","$isError","canceledName","_this","result","didCall","Iterable","is","thing","iterator","_empty","freeze","empty","single","element","iterable","isEmpty","next","done","first","some","predicate","find","filter","map","index","concat","iterables","concatNested","reduce","reducer","initialValue","arr","to","consume","atMost","Number","POSITIVE_INFINITY","consumed","equals","comparator","at","bt","ai","bi","an","bn","TRACK_DISPOSABLES","disposableTracker","setDisposableTracker","tracker","__is_disposable_tracked__","log","child","parent","Disposable","None","disposable","trackDisposable","markAsDisposed","setParentOfDisposable","setParent","setParentOfDisposables","children","MultiDisposeError","errors","super","dispose","arg","isArray","combinedDisposable","disposables","toDisposable","DisposableStore","_toDispose","Set","_isDisposed","clear","values","DISABLE_DISPOSED_WARNING","warn","add","_store","Undefined","prev","LinkedList","_first","_last","_size","node","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","res","anchor","hasPerformanceNow","performance","now","highResolution","_highResolution","_startTime","_now","_stopTime","Date","Event","once","event","thisArgs","didFire","snapshot","each","signal","any","events","merge","initial","output","emitter","fire","debounce","delay","leading","leakWarningThreshold","subscription","handle","numDebouncedCalls","cur","clearTimeout","_output","latch","cache","firstCall","shouldEmit","split","isT","buffer","_buffer","flush","ChainableEvent","chain","fromNodeEventEmitter","eventName","onFirstListenerAdd","on","onLastListenerRemove","removeListener","fromDOMEventEmitter","removeEventListener","toPromise","_listenerCount","_invocationCount","_elapsedOverall","_name","_idPool","listenerCount","_stopWatch","elapsed","info","toFixed","_globalLeakWarningThreshold","LeakageMonitor","customThreshold","Math","random","_warnCountdown","_stacks","threshold","Map","count","set","topStack","topCount","options","_disposed","_options","_leakageMon","_perfMon","_profName","_event","_listeners","firstListener","remove","onFirstListenerDidAdd","onListenerDidAdd","removeMonitor","check","size","hasListeners","_b","_deliveryQueue","start","stop","_c","_d","_e","getAllPropertyNames","obj","proto","getPrototypeOf","getOwnPropertyNames","getAllMethodNames","methods","prop","createProxyObject","methodNames","invoke","createProxyMethod","method","methodName","splitLines","str","firstNonWhitespaceIndex","chCode","lastNonWhitespaceIndex","startIndex","isUpperAsciiLetter","code","isHighSurrogate","charCode","isLowSurrogate","computeCodePoint","highSurrogate","lowSurrogate","GraphemeBreakTree","_data","getGraphemeBreakRawData","_INSTANCE","codePoint","nodeCount","nodeIndex","INITIALIZE","RequestMessage","vsWorker","req","ReplyMessage","seq","err","SubscribeEventMessage","EventMessage","UnsubscribeEventMessage","handler","_workerId","_handler","_lastSentReq","_pendingReplies","_pendingEmitters","_pendingEvents","workerId","reject","_send","delete","_handleMessage","msg","_handleReplyMessage","_handleRequestMessage","_handleSubscribeEventMessage","_handleEventMessage","_handleUnsubscribeEventMessage","replyMessage","reply","requestMessage","handleMessage","detail","handleEvent","has","transfer","ArrayBuffer","sendMessage","propertyIsEvent","propertyIsDynamicEvent","proxyListen","createProxyDynamicEvent","requestHandlerFactory","_requestHandlerFactory","_requestHandler","_protocol","_handleEvent","initialize","loaderConfig","hostMethods","setWorkerId","proxyMethodRequest","listen","hostProxy","baseUrl","paths","vs","trustedTypesPolicy","catchError","require","config","DiffChange","originalStart","originalLength","modifiedStart","modifiedLength","numberHash","val","initialHashVal","stringHash","hashVal","leftRotate","bits","totalBits","delta","mask","fill","dest","byteLength","leftPad","char","toHexString","bufferOrValue","bitsize","Uint8Array","padStart","_h0","_h1","_h2","_h3","_h4","_buff","_buffDV","DataView","_buffLen","_totalLen","_leftoverHighSurrogate","_finished","strLen","buff","offset","buffLen","leftoverHighSurrogate","nextCharCode","_push","_step","_wrapUp","ml","setUint32","floor","bigBlock32","_bigBlock32","getUint32","k","temp","StringDiffSequence","source","characters","Int32Array","stringDiff","original","modified","pretty","ComputeDiff","changes","Debug","condition","MyArray","sourceArray","sourceIndex","destinationArray","destinationIndex","m_changes","m_originalStart","m_modifiedStart","m_originalCount","m_modifiedCount","originalIndex","modifiedIndex","min","MarkNextChange","reverse","originalSequence","modifiedSequence","continueProcessingPredicate","ContinueProcessingPredicate","_originalSequence","_modifiedSequence","originalStringElements","originalElementsOrHash","originalHasStrings","_getElements","modifiedStringElements","modifiedElementsOrHash","modifiedHasStrings","_hasStrings","_originalStringElements","_originalElementsOrHash","_modifiedStringElements","_modifiedElementsOrHash","m_forwardHistory","m_reverseHistory","sequence","elements","getElements","_isStringArray","hashes","newIndex","ElementsAreEqual","originalElement","_getStrictElement","modifiedElement","getStrictElement","index1","index2","_ComputeDiff","originalEnd","modifiedEnd","quitEarlyArr","ComputeDiffRecursive","PrettifyChanges","quitEarly","Assert","midOriginalArr","midModifiedArr","ComputeRecursionPoint","midOriginal","midModified","leftChanges","rightChanges","ConcatenateChanges","diagonalForwardBase","diagonalForwardStart","diagonalForwardEnd","diagonalForwardOffset","diagonalReverseBase","diagonalReverseStart","diagonalReverseEnd","diagonalReverseOffset","forwardPoints","reversePoints","deltaIsEven","forwardChanges","reverseChanges","changeHelper","diagonalMin","diagonalMax","diagonalRelative","lastOriginalIndex","historyIndex","diagonal","AddModifiedElement","AddOriginalElement","getReverseChanges","originalStartPoint","modifiedStartPoint","lastForwardChange","max","getOriginalEnd","getModifiedEnd","getChanges","maxDifferences","numDiagonals","numDifferences","furthestOriginalIndex","furthestModifiedIndex","ClipDiagonalBound","tempOriginalIndex","abs","WALKTRACE","matchLengthOfLongest","Copy2","change","originalStop","modifiedStop","checkOriginal","checkModified","OriginalElementsAreEqual","ModifiedElementsAreEqual","startStrictEqual","ElementsAreStrictEqual","endStrictEqual","mergedChangeArr","ChangesOverlap","prevChange","bestDelta","bestScore","_boundaryScore","touchingPreviousChange","score","aChange","bChange","matchedLength","aOriginalStart","bOriginalEnd","abOriginalLength","aModifiedStart","bModifiedEnd","abModifiedLength","_findBetterContiguousSequence","originalMatchStart","modifiedMatchStart","desiredLength","originalMax","modifiedMax","bestOriginalStart","bestModifiedStart","_contiguousSequenceScore","_OriginalIsBoundary","_ModifiedIsBoundary","originalScore","_OriginalRegionIsBoundary","modifiedScore","_ModifiedRegionIsBoundary","left","right","Copy","diagonalBaseIndex","diagonalsBelow","diagonalsAbove","diffEven","lowerBoundEven","upperBoundEven","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_DOT","CHAR_FORWARD_SLASH","CHAR_BACKWARD_SLASH","CHAR_COLON","CHAR_QUESTION_MARK","ErrorInvalidArgType","expected","actual","determiner","validateString","isPathSeparator","isPosixPathSeparator","isWindowsDeviceRoot","normalizeString","allowAboveRoot","separator","lastSegmentLength","lastSlash","dots","lastSlashIndex","_format","pathObject","pathSegments","resolvedDevice","resolvedTail","resolvedAbsolute","rootEnd","device","last","firstPart","tail","joined","needsReplace","slashCount","firstLen","fromOrig","toOrig","fromStart","fromEnd","fromLen","toStart","toEnd","toLen","lastCommonSep","fromCode","out","resolvedPath","end","matchedSlash","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","ret","trailingSeparator","hasRoot","_schemePattern","_singleSlashStart","_doubleSlashStart","_validateUri","_strict","_schemeFix","_referenceResolution","_slash","_regexp","schemeOrData","uriToFsPath","Uri","percentDecode","idx","components","uri","pathFragment","newPath","skipEncoding","_asFormatted","_pathSepMarker","encodeTable","encodeURIComponentFast","uriComponent","allowSlash","nativeEncodePos","pos","escaped","encodeURIComponentMinimal","keepDriveLetterCasing","encoder","userinfo","decodeURIComponentGraceful","_rEncodedAsHex","Position","lineNumber","column","newLineNumber","newColumn","deltaLineNumber","deltaColumn","other","isBefore","isBeforeOrEqual","aLineNumber","bLineNumber","aColumn","bColumn","startLineNumber","startColumn","endLineNumber","endColumn","range","position","containsPosition","containsRange","otherRange","strictContainsRange","plusRange","intersectRanges","resultStartLineNumber","resultStartColumn","resultEndLineNumber","resultEndColumn","otherStartLineNumber","otherStartColumn","otherEndLineNumber","otherEndColumn","equalsRange","getEndPosition","getStartPosition","collapseToStart","aStartLineNumber","bStartLineNumber","aStartColumn","bStartColumn","aEndLineNumber","bEndLineNumber","aEndColumn","bEndColumn","aExists","bExists","MINIMUM_MATCHING_CHARACTER_LENGTH","computeDiff","diffAlgo","LineSequence","lines","startColumns","endColumns","getFirstNonBlankColumn","getLastNonBlankColumn","_startColumns","_endColumns","shouldIgnoreTrimWhitespace","endIndex","charCodes","lineNumbers","columns","lineContent","col","CharSequence","_charCodes","_lineNumbers","_columns","CharChange","originalStartLineNumber","originalStartColumn","originalEndLineNumber","originalEndColumn","modifiedStartLineNumber","modifiedStartColumn","modifiedEndLineNumber","modifiedEndColumn","diffChange","originalCharSequence","modifiedCharSequence","getStartLineNumber","getStartColumn","getEndLineNumber","getEndColumn","postProcessCharChanges","rawChanges","currChange","originalMatchingLength","modifiedMatchingLength","matchingLength","LineChange","charChanges","originalLineSequence","modifiedLineSequence","continueCharDiff","shouldComputeCharChanges","shouldPostProcessCharChanges","createCharSequence","createFromDiffChange","DiffComputer","originalLines","modifiedLines","opts","shouldMakePrettyDiff","continueLineDiff","createContinueProcessingPredicate","maxComputationTime","diffResult","lineChanges","createFromDiffResult","originalLineIndex","modifiedLineIndex","nextChange","originalLine","modifiedLine","originalChar","modifiedChar","_pushTrimWhitespaceCharChange","originalMaxColumn","modifiedMaxColumn","originalLineNumber","modifiedLineNumber","_mergeTrimWhitespaceCharChange","txt","defaultValue","maximumRuntime","startTime","toUint8","toUint32","PrefixSumIndexOfResult","remainder","_prefixSumIndexOfResultBrand","prefixSum","Uint32Array","prefixSumValidIndex","insertIndex","insertValues","oldValues","oldPrefixSum","insertValuesLen","subarray","maxCount","_getPrefixSum","sum","getTotalSum","low","high","mid","midStop","midStart","eol","versionId","_uri","_lines","_eol","_versionId","_lineStarts","_cachedTextValue","_acceptDeleteRange","_acceptInsertText","text","eolLength","linesLength","lineStartValues","lineIndex","newValue","changeValue","_setLineText","removeValues","insertText","insertLines","newLengths","USUAL_WORD_SEPARATORS","createWordRegExp","allowInWords","RegExp","DEFAULT_WORD_REGEXP","ensureValidWordDefinition","wordDefinition","flags","ignoreCase","multiline","unicode","lastIndex","_defaultConfig","maxLen","windowSize","timeBudget","getWordAtText","textOffset","t1","prevRegexIndex","regexIndex","thisMatch","_findRegexMatchEnclosingPosition","word","stopPos","matchIndex","_defaultValue","_asciiMap","_createAsciiMap","_map","asciiMap","_value","Uint8Matrix","rows","cols","row","StateMachine","edges","maxCharCode","maxState","states","_states","_maxCharCode","currentState","_stateMachine","getStateMachine","_classifier","getClassifier","FORCE_TERMINATION_CHARACTERS","CANNOT_END_WITH_CHARACTERS","LinkComputer","classifier","line","linkBeginIndex","linkEndIndex","lastIncludedCharIndex","chClass","charCodeBeforeLink","lastCharCodeInLink","url","model","stateMachine","lineCount","getLineCount","getLineContent","linkBeginChCode","state","hasOpenParens","hasOpenSquareBracket","inSquareBrackets","hasOpenCurlyBracket","resetStateMachine","_createLink","nextState","computeLinks","BasicInplaceReplace","_defaultValueSet","range1","text1","range2","text2","up","doNavigateValueSet","numberResult","numberReplace","textReplace","precision","pow","n1","n2","parseFloat","isNaN","valueSetsReplace","valueSets","valueSetReplace","valueSet","INSTANCE","shortcutEvent","context","CancellationToken","isCancellationToken","Cancelled","isCancellationRequested","onCancellationRequested","_isCancelled","_emitter","CancellationTokenSource","_token","_parentListener","cancel","KeyCodeStrMap","_keyCodeToStr","_strToKeyCode","keyCode","uiMap","userSettingsUSMap","userSettingsGeneralMap","EVENT_KEY_CODE_MAP","NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE","scanCodeIntToStr","scanCodeStrToInt","scanCodeLowerCaseStrToInt","IMMUTABLE_CODE_TO_KEY_CODE","IMMUTABLE_KEY_CODE_TO_CODE","KeyCodeUtils","AccessibilitySupport","CompletionItemInsertTextRule","CompletionItemKind","CompletionItemTag","CompletionTriggerKind","ContentWidgetPositionPreference","CursorChangeReason","DefaultEndOfLine","DocumentHighlightKind","EditorAutoIndentStrategy","EditorOption","EndOfLinePreference","EndOfLineSequence","IndentAction","InlayHintKind","InlineCompletionTriggerKind","KeyCode","MarkerSeverity","MarkerTag","MinimapPosition","MouseTargetType","OverlayWidgetPositionPreference","OverviewRulerLane","RenderLineNumbersType","RenderMinimap","ScrollType","ScrollbarVisibility","SelectionDirection","SignatureHelpTriggerKind","SymbolKind","SymbolTag","TextEditorCursorBlinkingStyle","TextEditorCursorStyle","TrackedRangeStickiness","WrappingIndent","KeyChord","secondPart","chordPart","mappings","seenKeyCode","seenScanCode","mapping","_keyCodeOrd","immutable","scanCode","scanCodeStr","keyCodeStr","eventKeyCode","vkey","usUserSettingsLabel","generalUserSettingsLabel","define","keyCodeToStr","fromString","strToKeyCode","toUserSettingsUS","toUserSettingsGeneral","fromUserSettings","toElectronAccelerator","selectionStartLineNumber","selectionStartColumn","positionLineNumber","positionColumn","selectionsEqual","getDirection","sel","direction","Token","_tokenBrand","createMonacoBaseAPI","editor","languages","Emitter","KeyMod","Range","Selection","CtrlCmd","Shift","Alt","WinCtrl","__awaiter","thisArg","_arguments","generator","adopt","fulfilled","step","rejected","getText","wordAtText","wordenize","_wordenize","lineText","wordRangesIdx","wordRanges","content","ranges","words","_validateRange","lineEnding","startLineIndex","endLineIndex","resultLines","_validatePosition","_ensureLineStarts","getPrefixSum","getIndexOf","lineLength","isIPosition","hasChanged","maxCharacter","host","foreignModuleFactory","_host","_models","_foreignModuleFactory","_foreignModule","all","keys","EOL","strURL","onEvents","originalUrl","modifiedUrl","ignoreTrimWhitespace","_getModel","getLinesContent","diffComputer","identical","_modelsAreIdentical","originalLineCount","modifiedLineCount","modelUrl","edits","lastEol","sort","compareRangesUsingStarts","aRng","bRng","getValueInRange","_diffLimit","editOffset","offsetAt","lift","positionAt","newEdit","modelUrls","leadingWord","wordDef","wordDefFlags","sw","wordDefRegExp","seen","outer","_suggestionsLimit","duration","getLineWords","array","selectionText","wordRange","getWordAtPosition","navigateValueSet","createData","foreignHostMethods","fhr","foreignHost","ctx","getMirrorModels","_getModels","monaco","initialized","foreignModule","simpleWorker","onmessage","rest","localize","_i","loadMessageBundle","integer","uinteger","Location","LocationLink","Color","ColorInformation","ColorPresentation","FoldingRangeKind","FoldingRange","DiagnosticRelatedInformation","DiagnosticSeverity","DiagnosticTag","CodeDescription","Diagnostic","Command","TextEdit","ChangeAnnotation","ChangeAnnotationIdentifier","AnnotatedTextEdit","TextDocumentEdit","CreateFile","RenameFile","DeleteFile","WorkspaceEdit","MIN_VALUE","MAX_VALUE","character","Is","objectLiteral","one","two","three","four","defined","string","targetUri","targetRange","targetSelectionRange","originSelectionRange","red","green","blue","alpha","numberRange","color","label","textEdit","additionalTextEdits","typedArray","startLine","endLine","startCharacter","endCharacter","kind","location","Warning","Information","Hint","Unnecessary","Deprecated","href","severity","relatedInformation","number","codeDescription","command","newText","insert","del","needsConfirmation","description","boolean","annotation","annotationId","textDocument","OptionalVersionedTextDocumentIdentifier","overwrite","ignoreIfExists","oldUri","newUri","recursive","ignoreIfNotExists","documentChanges","every","TextDocumentIdentifier","VersionedTextDocumentIdentifier","TextDocumentItem","MarkupKind","MarkupContent","InsertTextFormat","InsertReplaceEdit","InsertTextMode","CompletionItem","CompletionList","MarkedString","Hover","ParameterInformation","SignatureInformation","DocumentHighlight","SymbolInformation","DocumentSymbol","CodeActionKind","CodeActionContext","CodeAction","CodeLens","FormattingOptions","DocumentLink","SelectionRange","TextEditChangeImpl","changeAnnotations","edit","assertChangeAnnotations","manage","ChangeAnnotations","annotations","_annotations","_counter","idOrAnnotation","nextId","WorkspaceChange","workspaceEdit","_textEditChanges","_workspaceEdit","_changeAnnotations","textEditChange","initDocumentChanges","getTextEditChange","version","textDocumentEdit","initChanges","createFile","optionsOrAnnotation","operation","renameFile","deleteFile","languageId","PlainText","Markdown","Text","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","File","Reference","Folder","EnumMember","Constant","Struct","Operator","TypeParameter","asIs","adjustIndentation","items","isIncomplete","fromPlainText","plainText","contents","documentation","parameters","Read","Write","Namespace","Package","Boolean","Key","Null","containerName","selectionRange","deprecated","tags","Empty","QuickFix","Refactor","RefactorExtract","RefactorInline","RefactorRewrite","Source","SourceOrganizeImports","SourceFixAll","diagnostics","only","kindOrCommandOrEdit","checkKind","isPreferred","tabSize","insertSpaces","target","TextDocument","FullTextDocument","func","applyEdits","document","sortedEdits","mergeSort","diff","lastModifiedOffset","startOffset","endOffset","compare","leftIdx","rightIdx","_languageId","_version","_content","_lineOffsets","update","getLineOffsets","lineOffsets","isLineStart","ch","lineOffset","nextLineOffset","TokenType","ScannerState","FileType","__spreadArray","pack","ar","changes_1","isIncremental","getWellformedRange","addedLineOffsets","computeLineOffsets","isFull","rangeLength","isAtLineStart","getWellformedEdit","spans","sortedEdits_1","ClientCapabilities","LATEST","completion","completionItem","documentationFormat","hover","contentFormat","MultiLineStream","eos","getSource","goBackTo","goBack","advance","goToEnd","nextChar","peekChar","advanceIfChar","advanceIfChars","advanceIfRegExp","regex","advanceUntilRegExp","advanceUntilChar","advanceUntilChars","skipWhitespace","advanceWhileChar","_WSP","_TAB","_NWL","_LFD","_CAR","posNow","_BNG","_MIN","_LAN","_RAN","_FSL","_EQS","_DQO","_SQO","htmlScriptContents","createScanner","input","initialOffset","initialState","emitPseudoCloseTags","WithinContent","tokenError","hasSpaceAfterTag","lastTag","lastAttributeName","lastTypeValue","stream","tokenOffset","tokenType","Unknown","nextElementName","nextAttributeName","finishToken","errorMessage","scan","oldState","token","internalScan","EOS","StartTagClose","EndTagClose","WithinComment","EndCommentTag","Comment","WithinDoctype","EndDoctypeTag","Doctype","StartCommentTag","StartDoctypeTag","AfterOpeningEndTag","EndTagOpen","AfterOpeningStartTag","StartTagOpen","Content","tagName","WithinEndTag","EndTag","Whitespace","WithinTag","StartTag","AfterAttributeName","AttributeName","StartTagSelfClose","WithinScriptContent","WithinStyleContent","BeforeAttributeValue","DelimiterAssign","attributeValue","AttributeValue","sciptState","Script","Styles","getTokenType","getTokenOffset","getTokenLength","getTokenEnd","getTokenText","getScannerState","getTokenError","findFirst","binarySearch","comp","VOID_ELEMENTS","isVoidElement","s1","s2","localeCompare","Node","closed","attributes","isSameTag","tagInLowerCase","tag","findNodeBefore","lastChild","findNodeAt","scanner","htmlDocument","curr","endTagStart","endTagName","pendingAttribute","startTagEnd","roots","entities","startsWith","haystack","needle","endsWith","repeat","_z","_A","_Z","_0","_9","isLetterOrDigit","normalizeMarkupContent","HTMLDataProvider","customData","_tags","_tagMap","_valueSetMap","_globalAttributes","globalAttributes","isApplicable","getId","provideTags","provideAttributes","processAttribute","tagEntry","provideValues","attribute","processAttributes","generateDocumentation","item","settings","doesSupportMarkdown","normalizedDescription","references","__generator","body","sent","trys","ops","verb","op","pop","PathCompletionParticipant","readDirectory","atributeCompletions","onHtmlAttributeValue","isPathAttribute","computeCompletions","documentContext","attributeCompletion","fullValue","replaceRange","suggestions","suggestions_1","stripQuotes","isCompletablePath","pathToReplaceRange","providePathSuggestions","valueBeforeCursor","valueBeforeLastSlash","parentDir","infos","infos_1","resolveReference","CharCode_dot","createCompletionItem","Directory","attr","PATH_TAG_AND_ATTR","lastIndexOfSlash","shiftRange","valueAfterLastSlash","startPos","shiftPosition","whitespaceIndex","endPos","isDir","area","form","frame","img","ins","link","q","script","audio","button","embed","html","track","video","HTMLCompletion","lsOptions","dataManager","completionParticipants","setCompletionParticipants","registeredCompletionParticipants","doComplete2","participant","contributedParticipants","pathCompletionResult","fileSystemProvider","doComplete","_doComplete","convertCompletionList","dataProviders","getDataProviders","currentAttributeName","currentTag","getReplaceRange","replaceStart","replaceEnd","collectOpenTagSuggestions","afterOpenBracket","tagNameEnd","provider","insertTextFormat","getLineIndent","isWhiteSpace","collectCloseTagSuggestions","inOpenTag","closeTag","isFollowedBy","filterText","startIndent","endIndent","collectAutoCloseTagSuggestion","tagCloseEnd","hideAutoCompleteProposals","collectTagSuggestions","tagStart","tagEnd","getExistingAttributes","existingAttributes","attributeNames","collectAttributeNameSuggestions","nameStart","nameEnd","currentAttribute","attributeDefaultValue","seenAttributes","codeSnippet","collectDataAttributesSuggestions","dataAttr","dataAttributes","addNodeDataAttributes","collectAttributeValueSuggestions","valueStart","valueEnd","addQuotes","valuePrefix","isQuote","valueContentStart","valueContentEnd","wsBefore","getWordStart","wsAfter","getWordEnd","fullRange","completionParticipants_1","collectCharacterEntityProposals","scanNextForEndPos","nextToken","collectInsideContent","completionParticipants_2","onHtmlContent","characterStart","entity","suggestDoctype","endTagPos","doTagComplete","list","supportsMarkdown","clientCapabilities","intialState","expectedToken","limit","legacy_beautify_css","HTMLHover","doHover","convertContents","getTagHover","currTag","open","_loop_1","markupContent","dataProviders_1","state_1","getAttrHover","currAttr","_loop_2","contentsDoc","dataProviders_2","state_2","getAttrValueHover","currAttrValue","_loop_3","attrValue","dataProviders_3","state_3","getEntityHover","currEntity","filterEntity","toUpperCase","hex","zeroes","getTagNameRange","getEntityRange","characterEnd","tagRange_1","tagRange","attrRange","entityRange","scanAttrAndAttrValue","nodeStart","attrValueStart","prevAttr","attrValueRange","trimQuotes","matchAttr","js_beautify","js_source_text","__webpack_modules__","OutputLine","__parent","__character_count","__indent_count","__alignment_count","__wrap_point_index","__wrap_point_character_count","__wrap_point_indent_count","__wrap_point_alignment_count","__items","IndentStringCache","baseIndentString","__cache","__indent_size","indent_size","__indent_string","indent_char","indent_with_tabs","indent_level","__base_string","__base_string_length","Output","__indent_cache","raw","_end_with_newline","end_with_newline","wrap_line_length","indent_empty_lines","__lines","previous_line","current_line","next_line","space_before_token","non_breaking_space","previous_token_wrapped","__add_outputline","clone_empty","set_indent","has_match","pattern","lastCheckedOutput","indent","alignment","is_empty","get_indent_size","_set_wrap_point","_should_wrap","_allow_wrap","add_new_line","last_newline_index","_remove_indent","_remove_wrap_indent","trim","get_indent_string","__ensure_cache","__add_column","get_line_number","force_newline","just_added_newline","get_code","last_item","sweet_code","set_wrap_point","add_raw_token","newlines","whitespace_before","add_token","printable_token","__add_space_before_token","remove_indent","output_length","eat_newlines","just_added_blankline","ensure_empty_line_above","starts_with","ends_with","potentialEmptyLine","Options","merge_child_field","raw_options","_mergeOpts","disabled","_get_boolean","_get_characters","_get_number","preserve_newlines","max_preserve_newlines","templating","_get_selection_list","allOptions","childFieldName","finalOpts","_normalizeOpts","convertedOpts","newKey","_get_array","default_value","option_value","parseInt","_get_selection","selection_list","_is_valid_selection","normalizeOpts","mergeOpts","regexp_has_sticky","InputScanner","input_string","__input","__input_length","__position","restart","back","hasNext","peek","__match","pattern_match","sticky","testChar","read","starting_pattern","until_pattern","until_after","readUntil","match_index","readUntilAfter","get_regexp","match_from","get_literal_regexp","literal_string","peekUntilAfter","lookBack","testVal","Directives","start_block_pattern","end_block_pattern","__directives_block_pattern","__directive_pattern","__directives_end_ignore_pattern","get_directives","directives","directive_match","readIgnored","__unused_webpack_exports","Beautifier","css_beautify","source_text","beautifier","beautify","defaultOptions","directives_core","lineBreak","allLineBreaks","whitespaceChar","whitespacePattern","block_comment_pattern","comment_pattern","_source_text","_ch","_input","NESTED_AT_RULE","CONDITIONAL_GROUP_RULE","eatString","endChars","eatWhitespace","allowAtLeastOneNewLine","newline_count","foundNestedPseudoClass","openParen","print_string","output_string","_indentLevel","preserveSingleSpace","isAfterSpace","outdent","_nestedLevel","whitespace","previous_ch","parenLevel","insideRule","insidePropertyValue","enteringConditionalGroup","insideAtExtend","insideAtImport","topCharacter","comment","ignore","variableOrRule","newline_between_rules","brace_style","selector_separator_newline","space_around_combinator","sweetCode","BaseOptions","space_around_selector_separator","brace_style_split","bs","__webpack_module_cache__","cachedModule","__webpack_exports__","legacy_beautify_html","html_beautify","html_source","includesEnd","initialIndentLevel","extendedStart","isWhitespace","isEOL","extendedEnd","firstHalf","startOfLineOffset","computeIndentLevel","htmlOptions","getFormatOption","unformatted","getTagsFormatOption","content_unformatted","indent_inner_html","indent_handlebars","extra_liners","wrap_attributes","wrap_attributes_indent_size","indent_scripts","getTemplatingFormatOption","unformatted_content_delimiter","trimLeft","dflt","nChars","comments_before","previous","opened","TokenStream","WhitespacePattern","TOKEN","START","RAW","EOF","Tokenizer","__tokens","_patterns","tokenize","current","_reset","open_token","open_stack","comments","_get_next_token","_is_comment","_is_opening","_is_closing","_is_first_token","previous_token","_readWhitespace","resulting_string","_create_token","current_token","whitespace_before_token","parent_token","__tokens_length","__parent_token","Pattern","input_scanner","_line_regexp","__set_whitespace_patterns","whitespace_chars","newline_chars","_match_pattern","_newline_regexp","matches","__split","matching","_create","_update","regexp","start_index","next_match","_starting_pattern","_until_pattern","_until_after","read_match","until","starting_with","template_names","django","erb","handlebars","php","smarty","TemplatablePattern","__template_pattern","_disabled","assign","_excluded","__patterns","handlebars_comment","handlebars_unescaped","django_value","django_comment","smarty_comment","smarty_literal","__set_templated_pattern","disable","read_options","exclude","_read_template","peek1","style_html","Printer","base_indent_string","alignment_size","current_line_has_match","set_space_before_token","non_breaking","print_preserved_newlines","raw_token","TEXT","print_newline","traverse_whitespace","force","print_token","get_full_indent","level","get_type_attribute","start_token","ATTRIBUTE","EQUALS","VALUE","get_custom_beautifier_name","tag_check","typeAttribute","search","in_array","what","TagFrame","parser_token","tag_name","TagStack","printer","_printer","_current_frame","_js_beautify","_css_beautify","_tag_stack","optionHtml","_is_wrap_attributes_force","_is_wrap_attributes_force_expand_multiline","_is_wrap_attributes_force_aligned","_is_wrap_attributes_aligned_multiple","_is_wrap_attributes_preserve","_is_wrap_attributes_preserve_aligned","get_parser_token","record_tag","new_frame","_try_pop_frame","_get_frame","tag_list","stop_list","try_pop","indent_to_tag","last_token","last_tag_token","TagOpenParserToken","tokens","TAG_OPEN","COMMENT","_handle_tag_open","tag_complete","_handle_inside_tag","TAG_CLOSE","_handle_tag_close","_handle_text","is_unformatted","tag_start_char","has_wrapped_attrs","indent_content","is_content_unformatted","is_inline_element","wrapped","attr_count","force_attr_wrap","peek_token","is_only_attribute","peek_index","custom_beautifier_name","_print_custom_beatifier_text","local","_beautifier","script_indent_level","pre","post","indentation","matched","Child_options","child_options","white","_get_tag_open_token","is_empty_element","_set_tag_position","start_tag_token","tag_check_match","is_start_tag","is_end_tag","multiline_content","void_elements","inline","_do_optional_end_element","foundIfOnCurrentLine","_calcluate_parent_multiline","do_end_expand","indent_head_inner_html","indent_body_inner_html","p_closers","p_parent_excludes","p_parent","BaseTokenizer","BASETOKEN","UNKNOWN","_current_tag_name","templatable_reader","pattern_reader","single_quote","double_quote","element_name","handlebars_open","handlebars_raw_close","cdata","conditional_comment","processing","_unformatted_content_delimiter","literal_regexp","_read_open_handlebars","_read_attribute","_read_close","_read_raw_content","_read_content_word","_read_comment_or_cdata","_read_processing","_read_open","_is_content_unformatted","normalizeRef","validateRef","getWorkspaceUrl","documentUri","tokenContent","pickedScheme","createLink","workspaceUrl","isValidURI","findDocumentLinks","newLinks","afterBase","idLocations","newLinks_1","localWithHash","findDocumentHighlights","startTagRange","endTagRange","covers","pos1","pos2","findDocumentSymbols","symbols","provideFileSymbolsInternal","container","nodeToName","symbol","classes","className","doRename","newName","isWithinTagRange","nodeTag","findMatchingTagPosition","mirrorOffset","findLinkedEditingRanges","tagLength","limitRanges","rangeLimit","r1","r2","top","nestingLevels","nestingLevelCounts","setNestingLevel","entry","entries","maxLevel","getFoldingRanges","lastTagName","prevStart","addRange","stackElement","Region","getSelectionRanges","positions","getSelectionRange","applicableRanges","getApplicableRanges","htmlDoc","currOffset","currNode","getAllParentTagRanges","closeRange","closeText","unshift","attributeLevelRanges","getAttributeLevelRanges","initialNode","getNodeRanges","currNodeRange","currNodeText","relativeOffset","positionOffset","isInsideAttribute","attrStart","valueText","pair","htmlData","HTMLDataManager","setDataProviders","useDefaultDataProvider","customDataProviders","builtIn","providers","defaultLanguageServiceOptions","getLanguageService","htmlHover","htmlCompletion","parseHTMLDocument","findOnTypeRenameRanges","newHTMLDataProvider","__assign","HTMLWorker","_ctx","_languageSettings","languageSettings","_languageService","_getTextDocument","suggest","formattingOptions","textEdits","highlights","links","renames","models","models_1","getValue","safeProcess","sandboxProcess","window","normalizeArray","parts","xs","trailingSlash","fromParts","toParts","samePartsLength","outputParts"],"mappings":"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,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,IAAK,GAAI,OAAQA,EAAOA,GACtE,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,GAAI,OAAQA,EAAOA,GAC5E,CAAC,EAAG,EAAG,GAAgB,QAAS,EAAe,QAAS,GAAI,YAAaA,EAAOA,GAChF,CAAC,EAAG,EAAG,GAAiB,SAAU,EAAgB,SAAU,GAAI,YAAaA,EAAOA,GACpF,CAAC,EAAG,EAAG,GAAoB,YAAa,EAAmB,YAAa,EAAG,UAAWA,EAAOA,GAC7F,CAAC,EAAG,EAAG,GAAc,MAAO,EAAa,MAAO,EAAG,SAAUA,EAAOA,GACpE,CAAC,GAAI,EAAG,GAAgB,QAAS,GAAgB,QAAS,GAAI,WAAYA,EAAOA,GACjF,CAAC,GAAI,EAAG,GAAgB,QAAS,GAAgB,IAAK,IAAK,eAAgB,IAAK,aAChF,CAAC,GAAI,EAAG,GAAgB,QAAS,GAAgB,IAAK,IAAK,cAAe,IAAK,YAC/E,CAAC,GAAI,EAAG,GAAsB,cAAe,GAAsB,IAAK,IAAK,WAAY,IAAK,SAC9F,CAAC,GAAI,EAAG,GAAuB,eAAgB,GAAuB,IAAK,IAAK,WAAY,IAAK,SACjG,CAAC,GAAI,EAAG,GAAoB,YAAa,GAAoB,KAAM,IAAK,WAAY,KAAM,SAC1F,CAAC,EAAG,EAAG,GAAmB,WAAY,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC/E,CAAC,GAAI,EAAG,GAAoB,YAAa,GAAoB,IAAK,IAAK,WAAY,IAAK,SACxF,CAAC,GAAI,EAAG,GAAgB,QAAS,GAAgB,IAAM,IAAK,WAAY,IAAM,SAC9E,CAAC,GAAI,EAAG,GAAoB,YAAa,GAAoB,IAAK,IAAK,WAAY,IAAK,SACxF,CAAC,GAAI,EAAG,GAAgB,QAAS,GAAgB,IAAK,IAAK,eAAgB,IAAK,aAChF,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,IAAK,IAAK,gBAAiB,IAAK,cACpF,CAAC,GAAI,EAAG,GAAgB,QAAS,GAAgB,IAAK,IAAK,WAAY,IAAK,SAC5E,CAAC,EAAG,EAAG,GAAmB,WAAY,EAAkB,WAAY,GAAI,aAAcA,EAAOA,GAC7F,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAa,KAAM,GAAa,KAAM,IAAK,QAASA,EAAOA,GACnE,CAAC,GAAI,EAAG,GAAc,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACxE,CAAC,GAAI,EAAG,GAAc,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACxE,CAAC,GAAI,EAAG,GAAc,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACxE,CAAC,EAAG,EAAG,GAAsB,cAAe,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACrF,CAAC,GAAI,EAAG,GAAqB,aAAc,GAAqB,aAAc,IAAK,YAAaA,EAAOA,GACvG,CAAC,EAAG,EAAG,GAAgB,QAAS,EAAoB,aAAc,GAAI,WAAYA,EAAOA,GACzF,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,SAAU,GAAI,YAAaA,EAAOA,GACtF,CAAC,GAAI,EAAG,GAAe,OAAQ,GAAe,OAAQ,GAAI,UAAWA,EAAOA,GAC5E,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,SAAU,GAAI,WAAYA,EAAOA,GACrF,CAAC,GAAI,EAAG,GAAiB,SAAU,GAAiB,SAAU,GAAI,YAAaA,EAAOA,GACtF,CAAC,GAAI,EAAG,GAAc,MAAO,GAAc,MAAO,GAAI,SAAUA,EAAOA,GACvE,CAAC,GAAI,EAAG,GAAmB,WAAY,GAAmB,WAAY,GAAI,UAAWA,EAAOA,GAC5F,CAAC,GAAI,EAAG,GAAqB,aAAc,GAAqB,aAAc,GAAI,WAAY,QAASA,GACvG,CAAC,GAAI,EAAG,GAAoB,YAAa,GAAoB,YAAa,GAAI,UAAW,OAAQA,GACjG,CAAC,GAAI,EAAG,GAAoB,YAAa,GAAoB,YAAa,GAAI,UAAW,OAAQA,GACjG,CAAC,GAAI,EAAG,GAAkB,UAAW,GAAkB,UAAW,GAAI,QAAS,KAAMA,GACrF,CAAC,GAAI,EAAG,GAAkB,UAAW,GAAkB,UAAW,IAAK,aAAcA,EAAOA,GAC5F,CAAC,IAAK,EAAG,GAAuB,eAAgB,IAAwB,gBAAiB,IAAK,YAAaA,EAAOA,GAClH,CAAC,IAAK,EAAG,GAAyB,iBAAkB,IAA0B,kBAAmB,IAAK,cAAeA,EAAOA,GAC5H,CAAC,IAAK,EAAG,GAAyB,iBAAkB,IAA0B,kBAAmB,IAAK,cAAeA,EAAOA,GAC5H,CAAC,IAAK,EAAG,GAAoB,YAAa,IAAqB,aAAc,IAAK,SAAUA,EAAOA,GACnG,CAAC,EAAG,EAAG,GAAsB,cAAe,EAAeA,EAAO,EAAGA,EAAOA,EAAOA,GACnF,CAAC,GAAI,EAAG,GAAkB,UAAW,GAAkB,UAAW,GAAI,aAAcA,EAAOA,GAC3F,CAAC,GAAI,EAAG,GAAkB,UAAW,GAAkB,UAAW,GAAI,aAAcA,EAAOA,GAC3F,CAAC,GAAI,EAAG,GAAkB,UAAW,GAAkB,UAAW,GAAI,aAAcA,EAAOA,GAC3F,CAAC,GAAI,EAAG,GAAkB,UAAW,GAAkB,UAAW,IAAK,aAAcA,EAAOA,GAC5F,CAAC,GAAI,EAAG,GAAkB,UAAW,GAAkB,UAAW,IAAK,aAAcA,EAAOA,GAC5F,CAAC,GAAI,EAAG,IAAmB,UAAW,GAAkB,UAAW,IAAK,aAAcA,EAAOA,GAC7F,CAAC,IAAK,EAAG,IAAmB,UAAW,IAAmB,UAAW,IAAK,aAAcA,EAAOA,GAC/F,CAAC,IAAK,EAAG,IAAmB,UAAW,IAAmB,UAAW,IAAK,aAAcA,EAAOA,GAC/F,CAAC,IAAK,EAAG,IAAmB,UAAW,IAAmB,UAAW,IAAK,aAAcA,EAAOA,GAC/F,CAAC,GAAI,EAAG,IAAmB,UAAW,GAAkB,UAAW,GAAI,aAAcA,EAAOA,GAC5F,CAAC,IAAK,EAAG,IAAyB,gBAAiB,IAAyB,iBAAkB,IAAK,aAAcA,EAAOA,GACxH,CAAC,GAAI,EAAG,IAAyB,gBAAiB,GAAwB,UAAW,IAAK,aAAcA,EAAOA,GAC/G,CAAC,GAAI,EAAG,IAAuB,cAAe,GAAsB,cAAe,GAAIA,EAAOA,EAAOA,GACrG,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAuB,cAAe,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACtF,CAAC,GAAI,EAAG,IAAe,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACzE,CAAC,GAAI,EAAG,IAAe,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACzE,CAAC,GAAI,EAAG,IAAe,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACzE,CAAC,GAAI,EAAG,IAAe,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACzE,CAAC,GAAI,EAAG,IAAe,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACzE,CAAC,GAAI,EAAG,IAAe,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACzE,CAAC,GAAI,EAAG,IAAe,MAAO,GAAc,MAAO,IAAK,SAAUA,EAAOA,GACzE,CAAC,EAAG,EAAG,IAAe,MAAO,EAAiBA,EAAO,EAAG,SAAUA,EAAOA,GACzE,CAAC,EAAG,EAAG,IAAe,MAAO,EAAiBA,EAAO,EAAG,SAAUA,EAAOA,GACzE,CAAC,EAAG,EAAG,IAAe,MAAO,EAAiBA,EAAO,EAAG,SAAUA,EAAOA,GACzE,CAAC,EAAG,EAAG,IAAe,MAAO,EAAiBA,EAAO,EAAG,SAAUA,EAAOA,GACzE,CAAC,EAAG,EAAG,IAAe,MAAO,EAAiBA,EAAO,EAAG,SAAUA,EAAOA,GACzE,CAAC,EAAG,EAAG,IAAgB,OAAQ,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACxE,CAAC,EAAG,EAAG,IAAgB,OAAQ,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACxE,CAAC,EAAG,EAAG,IAAkB,SAAU,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC5E,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAgB,OAAQ,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACxE,CAAC,EAAG,EAAG,IAAe,MAAO,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACtE,CAAC,EAAG,EAAG,IAAgB,OAAQ,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACxE,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAgB,OAAQ,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACxE,CAAC,EAAG,EAAG,IAA2B,kBAAmB,IAA2B,kBAAmB,IAAK,iBAAkBA,EAAOA,GACjI,CAAC,EAAG,EAAG,IAAyB,gBAAiB,IAAyB,gBAAiB,IAAK,eAAgBA,EAAOA,GACvH,CAAC,EAAG,EAAG,IAA2B,kBAAmB,IAA2B,kBAAmB,IAAK,iBAAkBA,EAAOA,GACjI,CAAC,IAAK,EAAG,IAAuB,cAAe,IAA4B,mBAAoB,IAAK,eAAgBA,EAAOA,GAC3H,CAAC,IAAK,EAAG,IAAkB,SAAU,IAAmB,UAAW,IAAK,aAAcA,EAAOA,GAC7F,CAAC,EAAG,EAAG,IAAoB,WAAY,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAChF,CAAC,EAAG,EAAG,IAAmB,UAAW,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC9E,CAAC,EAAG,EAAG,IAAmB,UAAW,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC9E,CAAC,EAAG,EAAG,IAAsB,aAAc,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACpF,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,EAAG,EAAG,IAA2B,kBAAmB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC9F,CAAC,EAAG,EAAG,IAA4B,mBAAoB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAChG,CAAC,EAAG,EAAG,IAA2B,kBAAmB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC9F,CAAC,EAAG,EAAG,IAA6B,oBAAqB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAClG,CAAC,EAAG,EAAG,IAA8B,qBAAsB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACpG,CAAC,EAAG,EAAG,IAA6B,oBAAqB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAClG,CAAC,EAAG,EAAG,IAA2B,kBAAmB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC9F,CAAC,EAAG,EAAG,IAAgC,uBAAwB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACxG,CAAC,EAAG,EAAG,IAAuB,cAAe,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACtF,CAAC,EAAG,EAAG,IAA4B,mBAAoB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAChG,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAc,OAAQ,GAAI,aAAcA,EAAOA,GAC3E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAe,QAAS,GAAI,WAAYA,EAAOA,GAC3E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAa,MAAO,GAAI,UAAWA,EAAOA,GACtE,CAAC,GAAI,EAAG,EAAcA,EAAO,GAAe,OAAQ,EAAG,aAAcA,EAAOA,GAC5E,CAAC,EAAG,EAAG,IAAuB,cAAe,EAAcA,EAAO,EAAG,cAAeA,EAAOA,GAC3F,CAAC,EAAG,EAAG,IAAqB,YAAa,EAAeA,EAAO,EAAG,YAAaA,EAAOA,GACtF,CAAC,EAAG,EAAG,IAAmB,UAAW,EAAaA,EAAO,EAAG,WAAYA,EAAOA,GAC/E,CAAC,GAAI,EAAG,IAAoB,WAAY,GAAeA,EAAO,EAAG,UAAWA,EAAOA,GACnF,CAAC,EAAG,EAAG,IAAwB,eAAgB,EAAcA,EAAO,EAAG,cAAeA,EAAOA,GAC7F,CAAC,EAAG,EAAG,IAAsB,aAAc,EAAeA,EAAO,EAAG,YAAaA,EAAOA,GACxF,CAAC,EAAG,EAAG,IAAoB,WAAY,EAAaA,EAAO,EAAG,WAAYA,EAAOA,GACjF,CAAC,GAAI,EAAG,IAAqB,YAAa,GAAeA,EAAO,EAAG,UAAWA,EAAOA,GACrF,CAAC,EAAG,EAAG,IAAwB,eAAgB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACxF,CAAC,EAAG,EAAG,IAA0B,iBAAkB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC5F,CAAC,EAAG,EAAG,IAAqB,YAAa,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAClF,CAAC,EAAG,EAAG,IAAuB,cAAe,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACtF,CAAC,EAAG,EAAG,IAA4B,mBAAoB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAChG,CAAC,EAAG,EAAG,IAAuB,cAAe,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACtF,CAAC,IAAK,EAAG,IAA0B,iBAAkB,IAA0B,iBAAkB,IAAK,sBAAuBA,EAAOA,GACpI,CAAC,IAAK,EAAG,IAA8B,qBAAsB,IAA8B,qBAAsB,IAAK,sBAAuBA,EAAOA,GACpJ,CAAC,IAAK,EAAG,IAAqB,YAAa,IAAqB,YAAa,IAAK,gBAAiBA,EAAOA,GAC1G,CAAC,EAAG,EAAG,IAAiB,QAAS,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAC1E,CAAC,IAAK,EAAG,IAA0B,iBAAkB,IAA0B,iBAAkB,IAAK,sBAAuBA,EAAOA,GACpI,CAAC,EAAG,EAAG,IAAuB,cAAe,IAA6B,oBAAqB,IAAK,+BAAgCA,EAAOA,GAC3I,CAAC,EAAG,EAAG,IAAsB,aAAc,IAAsB,aAAc,IAAK,uBAAwBA,EAAOA,GACnH,CAAC,EAAG,EAAG,IAAsB,aAAc,IAAsB,aAAc,IAAK,uBAAwBA,EAAOA,GACnH,CAAC,EAAG,EAAG,IAAsB,aAAc,EAAiBA,EAAO,EAAG,uBAAwBA,EAAOA,GACrG,CAAC,EAAG,EAAG,IAAsB,aAAc,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACpF,CAAC,EAAG,EAAG,IAA6B,oBAAqB,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAClG,CAAC,EAAG,EAAG,IAAyB,gBAAiB,IAAyB,gBAAiB,IAAK,oBAAqBA,EAAOA,GAC5H,CAAC,EAAG,EAAG,IAAuB,cAAe,IAAuB,cAAe,IAAK,kBAAmBA,EAAOA,GAClH,CAAC,IAAK,EAAG,IAAuB,cAAe,IAAuB,cAAe,IAAK,kBAAmBA,EAAOA,GACpH,CAAC,IAAK,EAAG,IAA0B,iBAAkB,IAA0B,iBAAkB,IAAK,qBAAsBA,EAAOA,GACnI,CAAC,EAAG,EAAG,IAAuB,cAAe,EAAiBA,EAAO,EAAG,kBAAmBA,EAAOA,GAClG,CAAC,EAAG,EAAG,IAA0B,iBAAkB,EAAiBA,EAAO,EAAG,qBAAsBA,EAAOA,GAC3G,CAAC,EAAG,EAAG,IAA4B,mBAAoB,EAAiBA,EAAO,EAAG,uBAAwBA,EAAOA,GACjH,CAAC,EAAG,EAAG,IAAsB,aAAc,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACpF,CAAC,EAAG,EAAG,IAAqB,YAAa,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAClF,CAAC,EAAG,EAAG,IAAuB,cAAe,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GACtF,CAAC,EAAG,EAAG,IAAoB,WAAY,EAAiBA,EAAO,EAAGA,EAAOA,EAAOA,GAGhF,CAAC,IAAK,EAAG,EAAcA,EAAO,IAA8B,mBAAoB,IAAKA,EAAOA,EAAOA,GACnG,CAAC,IAAK,EAAG,EAAcA,EAAO,IAAmB,UAAW,IAAK,aAAcA,EAAOA,GACtF,CAAC,GAAI,EAAG,EAAcA,EAAO,GAAgB,QAAS,IAAK,WAAYA,EAAOA,GAC9E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,UAAWA,EAAOA,GACzE,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,YAAaA,EAAOA,GAC3E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,aAAcA,EAAOA,GAC5E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,gBAAiBA,EAAOA,GAC/E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,YAAaA,EAAOA,GAC3E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,gBAAiBA,EAAOA,GAC/E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,YAAaA,EAAOA,GAC3E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,aAAcA,EAAOA,GAC5E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,cAAeA,EAAOA,GAC7E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,UAAWA,EAAOA,GACzE,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,UAAWA,EAAOA,GACzE,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,gBAAiBA,EAAOA,GAC/E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,YAAaA,EAAOA,GAC3E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,kBAAmBA,EAAOA,GACjF,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,kBAAmBA,EAAOA,GACjF,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,UAAWA,EAAOA,GACzE,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,WAAYA,EAAOA,GAC1E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,UAAWA,EAAOA,GACzE,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,UAAWA,EAAOA,GACzE,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,YAAaA,EAAOA,GAC3E,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,SAAUA,EAAOA,GACxE,CAAC,EAAG,EAAG,EAAcA,EAAO,EAAiBA,EAAO,EAAG,eAAgBA,EAAOA,IAElF,IAAI06B,EAAc,GACdC,EAAe,GACnB,IAAK,MAAMC,KAAWH,EAAU,CAC5B,MAAOI,EAAaC,EAAWC,EAAUC,EAAazD,EAAS0D,EAAYC,EAAcC,EAAMC,EAAqBC,GAA4BT,EAkBhJ,GAjBKD,EAAaI,KACdJ,EAAaI,IAAY,EACzBlD,GAAiBkD,GAAYC,EAC7BlD,GAAiBkD,GAAeD,EAChChD,GAA0BiD,EAAYx+B,eAAiBu+B,EACnDD,IACA9C,GAA2B+C,GAAYxD,EACtB,IAAZA,GACe,IAAZA,GACY,IAAZA,GACY,IAAZA,GACY,IAAZA,GACY,KAAZA,IACJU,GAA2BV,GAAWwD,MAI7CL,EAAYnD,GAAU,CAEvB,GADAmD,EAAYnD,IAAW,GAClB0D,EACD,MAAM,IAAItgC,MAAM,8CAA8C48B,sBAA4ByD,KAE9FxD,GAAM8D,OAAO/D,EAAS0D,GACtBxD,GAAkB6D,OAAO/D,EAAS6D,GAAuBH,GACzDvD,GAAuB4D,OAAO/D,EAAS8D,GAA4BD,GAAuBH,GAE1FC,IACAvD,GAAmBuD,GAAgB3D,GAEnC4D,IACAvD,GAAoCuD,GAAQ5D,GAIpDU,GAA2B,GAAiB,IArRhD,GAwRA,SAAWC,GACP,SAASl9B,EAASu8B,GACd,OAAOC,GAAM+D,aAAahE,GAG9B,SAASiE,EAAWroC,GAChB,OAAOqkC,GAAMiE,aAAatoC,GAG9B,SAASuoC,EAAiBnE,GACtB,OAAOE,GAAkB8D,aAAahE,GAG1C,SAASoE,EAAsBpE,GAC3B,OAAOG,GAAuB6D,aAAahE,GAG/C,SAASqE,EAAiBzoC,GACtB,OAAOskC,GAAkBgE,aAAatoC,IAAQukC,GAAuB+D,aAAatoC,GAGtF,SAAS0oC,EAAsBtE,GAC3B,GAAIA,GAAW,IAAoBA,GAAW,IAS1C,OAAO,KAEX,OAAQA,GACJ,KAAK,GACD,MAAO,KACX,KAAK,GACD,MAAO,OACX,KAAK,GACD,MAAO,OACX,KAAK,GACD,MAAO,QAEf,OAAOC,GAAM+D,aAAahE,GAvC9BW,EAAal9B,SAAWA,EAIxBk9B,EAAasD,WAAaA,EAI1BtD,EAAawD,iBAAmBA,EAIhCxD,EAAayD,sBAAwBA,EAIrCzD,EAAa0D,iBAAmBA,EAyBhC1D,EAAa2D,sBAAwBA,EA7CzC,CA8CG3D,KAAiBA,GAAe,KEtW5B,MAAM,WAAkB,GAC3B,YAAY4D,EAA0BC,EAAsBC,EAAoBC,GAC5E34B,MAAMw4B,EAA0BC,EAAsBC,EAAoBC,GAC1E7hC,KAAK0hC,yBAA2BA,EAChC1hC,KAAK2hC,qBAAuBA,EAC5B3hC,KAAK4hC,mBAAqBA,EAC1B5hC,KAAK6hC,eAAiBA,EAK1B,WACI,MAAO,IAAM7hC,KAAK0hC,yBAA2B,IAAM1hC,KAAK2hC,qBAAuB,OAAS3hC,KAAK4hC,mBAAqB,IAAM5hC,KAAK6hC,eAAiB,IAKlJ,gBAAgBlW,GACZ,OAAQ,GAAUmW,gBAAgB9hC,KAAM2rB,GAK5C,uBAAuB7tB,EAAGqE,GACtB,OAAQrE,EAAE4jC,2BAA6Bv/B,EAAEu/B,0BACrC5jC,EAAE6jC,uBAAyBx/B,EAAEw/B,sBAC7B7jC,EAAE8jC,qBAAuBz/B,EAAEy/B,oBAC3B9jC,EAAE+jC,iBAAmB1/B,EAAE0/B,eAK/B,eACI,OAAI7hC,KAAK0hC,2BAA6B1hC,KAAKksB,iBAAmBlsB,KAAK2hC,uBAAyB3hC,KAAKmsB,YACtF,EAEJ,EAKX,eAAeC,EAAeC,GAC1B,OAA4B,IAAxBrsB,KAAK+hC,eACE,IAAI,GAAU/hC,KAAKksB,gBAAiBlsB,KAAKmsB,YAAaC,EAAeC,GAEzE,IAAI,GAAUD,EAAeC,EAAWrsB,KAAKksB,gBAAiBlsB,KAAKmsB,aAK9E,cACI,OAAO,IAAIf,GAASprB,KAAK4hC,mBAAoB5hC,KAAK6hC,gBAKtD,iBAAiB3V,EAAiBC,GAC9B,OAA4B,IAAxBnsB,KAAK+hC,eACE,IAAI,GAAU7V,EAAiBC,EAAansB,KAAKosB,cAAepsB,KAAKqsB,WAEzE,IAAI,GAAUrsB,KAAKosB,cAAepsB,KAAKqsB,UAAWH,EAAiBC,GAM9E,qBAAqBjb,EAAOsX,EAAMtX,GAC9B,OAAO,IAAI,GAAUA,EAAMma,WAAYna,EAAMoa,OAAQ9C,EAAI6C,WAAY7C,EAAI8C,QAK7E,qBAAqB0W,GACjB,OAAO,IAAI,GAAUA,EAAIN,yBAA0BM,EAAIL,qBAAsBK,EAAIJ,mBAAoBI,EAAIH,gBAK7G,0BAA0B/jC,EAAGqE,GACzB,GAAIrE,IAAMqE,IAAMrE,GAAKqE,EACjB,OAAO,EAEX,IAAKrE,IAAMqE,EACP,OAAO,EAEX,GAAIrE,EAAEjB,SAAWsF,EAAEtF,OACf,OAAO,EAEX,IAAK,IAAIrF,EAAI,EAAGoF,EAAMkB,EAAEjB,OAAQrF,EAAIoF,EAAKpF,IACrC,IAAKwI,KAAK8hC,gBAAgBhkC,EAAEtG,GAAI2K,EAAE3K,IAC9B,OAAO,EAGf,OAAO,EAKX,oBAAoBga,GAChB,OAAQA,GACwC,kBAAjCA,EAAIkwB,0BACyB,kBAA7BlwB,EAAImwB,sBACuB,kBAA3BnwB,EAAIowB,oBACmB,kBAAvBpwB,EAAIqwB,eAKvB,2BAA2B3V,EAAiBC,EAAaC,EAAeC,EAAW4V,GAC/E,OAAkB,IAAdA,EACO,IAAI,GAAU/V,EAAiBC,EAAaC,EAAeC,GAE/D,IAAI,GAAUD,EAAeC,EAAWH,EAAiBC,ICtHjE,MAAM+V,GACT,YAAYpoB,EAAQ/e,EAAMiB,GACtBgE,KAAKmiC,iBAAcjoC,EACnB8F,KAAK8Z,OAAkB,EAATA,EACd9Z,KAAKjF,KAAOA,EACZiF,KAAKhE,SAAWA,EAEpB,WACI,MAAO,IAAMgE,KAAK8Z,OAAS,KAAO9Z,KAAKjF,KAAO,MFNtD,SAAWgjC,GAIPA,EAAqBA,EAAqB,WAAa,GAAK,UAC5DA,EAAqBA,EAAqB,YAAc,GAAK,WAC7DA,EAAqBA,EAAqB,WAAa,GAAK,WANhE,CAOGA,KAAyBA,GAAuB,KAEnD,SAAWC,GAKPA,EAA6BA,EAA6B,kBAAoB,GAAK,iBAInFA,EAA6BA,EAA6B,mBAAqB,GAAK,kBATxF,CAUGA,KAAiCA,GAA+B,KAEnE,SAAWC,GACPA,EAAmBA,EAAmB,UAAY,GAAK,SACvDA,EAAmBA,EAAmB,YAAc,GAAK,WACzDA,EAAmBA,EAAmB,eAAiB,GAAK,cAC5DA,EAAmBA,EAAmB,SAAW,GAAK,QACtDA,EAAmBA,EAAmB,YAAc,GAAK,WACzDA,EAAmBA,EAAmB,SAAW,GAAK,QACtDA,EAAmBA,EAAmB,UAAY,GAAK,SACvDA,EAAmBA,EAAmB,aAAe,GAAK,YAC1DA,EAAmBA,EAAmB,UAAY,GAAK,SACvDA,EAAmBA,EAAmB,YAAc,GAAK,WACzDA,EAAmBA,EAAmB,SAAW,IAAM,QACvDA,EAAmBA,EAAmB,YAAc,IAAM,WAC1DA,EAAmBA,EAAmB,QAAU,IAAM,OACtDA,EAAmBA,EAAmB,SAAW,IAAM,QACvDA,EAAmBA,EAAmB,YAAc,IAAM,WAC1DA,EAAmBA,EAAmB,QAAU,IAAM,OACtDA,EAAmBA,EAAmB,cAAgB,IAAM,aAC5DA,EAAmBA,EAAmB,WAAa,IAAM,UACzDA,EAAmBA,EAAmB,QAAU,IAAM,OACtDA,EAAmBA,EAAmB,SAAW,IAAM,QACvDA,EAAmBA,EAAmB,QAAU,IAAM,OACtDA,EAAmBA,EAAmB,aAAe,IAAM,YAC3DA,EAAmBA,EAAmB,eAAiB,IAAM,cAC7DA,EAAmBA,EAAmB,UAAY,IAAM,SACxDA,EAAmBA,EAAmB,iBAAmB,IAAM,gBAC/DA,EAAmBA,EAAmB,QAAU,IAAM,OACtDA,EAAmBA,EAAmB,SAAW,IAAM,QACvDA,EAAmBA,EAAmB,WAAa,IAAM,UA5B7D,CA6BGA,KAAuBA,GAAqB,KAE/C,SAAWC,GACPA,EAAkBA,EAAkB,cAAgB,GAAK,aAD7D,CAEGA,KAAsBA,GAAoB,KAK7C,SAAWC,GACPA,EAAsBA,EAAsB,UAAY,GAAK,SAC7DA,EAAsBA,EAAsB,oBAAsB,GAAK,mBACvEA,EAAsBA,EAAsB,mCAAqC,GAAK,kCAH1F,CAIGA,KAA0BA,GAAwB,KAKrD,SAAWC,GAIPA,EAAgCA,EAAgC,SAAW,GAAK,QAIhFA,EAAgCA,EAAgC,SAAW,GAAK,QAIhFA,EAAgCA,EAAgC,SAAW,GAAK,QAZpF,CAaGA,KAAoCA,GAAkC,KAKzE,SAAWC,GAIPA,EAAmBA,EAAmB,UAAY,GAAK,SAIvDA,EAAmBA,EAAmB,gBAAkB,GAAK,eAI7DA,EAAmBA,EAAmB,sBAAwB,GAAK,qBAInEA,EAAmBA,EAAmB,YAAc,GAAK,WAIzDA,EAAmBA,EAAmB,SAAW,GAAK,QAItDA,EAAmBA,EAAmB,QAAU,GAAK,OAIrDA,EAAmBA,EAAmB,QAAU,GAAK,OA5BzD,CA6BGA,KAAuBA,GAAqB,KAK/C,SAAWC,GAIPA,EAAiBA,EAAiB,MAAQ,GAAK,KAI/CA,EAAiBA,EAAiB,QAAU,GAAK,OARrD,CASGA,KAAqBA,GAAmB,KAK3C,SAAWC,GAIPA,EAAsBA,EAAsB,QAAU,GAAK,OAI3DA,EAAsBA,EAAsB,QAAU,GAAK,OAI3DA,EAAsBA,EAAsB,SAAW,GAAK,QAZhE,CAaGA,KAA0BA,GAAwB,KAKrD,SAAWC,GACPA,EAAyBA,EAAyB,QAAU,GAAK,OACjEA,EAAyBA,EAAyB,QAAU,GAAK,OACjEA,EAAyBA,EAAyB,YAAc,GAAK,WACrEA,EAAyBA,EAAyB,YAAc,GAAK,WACrEA,EAAyBA,EAAyB,QAAU,GAAK,OALrE,CAMGA,KAA6BA,GAA2B,KAE3D,SAAWC,GACPA,EAAaA,EAAa,qCAAuC,GAAK,oCACtEA,EAAaA,EAAa,2BAA6B,GAAK,0BAC5DA,EAAaA,EAAa,wBAA0B,GAAK,uBACzDA,EAAaA,EAAa,yBAA2B,GAAK,wBAC1DA,EAAaA,EAAa,aAAe,GAAK,YAC9CA,EAAaA,EAAa,uBAAyB,GAAK,sBACxDA,EAAaA,EAAa,qBAAuB,GAAK,oBACtDA,EAAaA,EAAa,uBAAyB,GAAK,sBACxDA,EAAaA,EAAa,qBAAuB,GAAK,oBACtDA,EAAaA,EAAa,cAAgB,GAAK,aAC/CA,EAAaA,EAAa,mBAAqB,IAAM,kBACrDA,EAAaA,EAAa,gBAAkB,IAAM,eAClDA,EAAaA,EAAa,2BAA6B,IAAM,0BAC7DA,EAAaA,EAAa,UAAY,IAAM,SAC5CA,EAAaA,EAAa,YAAc,IAAM,WAC9CA,EAAaA,EAAa,sBAAwB,IAAM,qBACxDA,EAAaA,EAAa,oBAAsB,IAAM,mBACtDA,EAAaA,EAAa,mBAAqB,IAAM,kBACrDA,EAAaA,EAAa,mBAAqB,IAAM,kBACrDA,EAAaA,EAAa,YAAc,IAAM,WAC9CA,EAAaA,EAAa,eAAiB,IAAM,cACjDA,EAAaA,EAAa,8BAAgC,IAAM,6BAChEA,EAAaA,EAAa,kBAAoB,IAAM,iBACpDA,EAAaA,EAAa,8BAAgC,IAAM,6BAChEA,EAAaA,EAAa,eAAiB,IAAM,cACjDA,EAAaA,EAAa,0BAA4B,IAAM,yBAC5DA,EAAaA,EAAa,+BAAiC,IAAM,8BACjEA,EAAaA,EAAa,eAAiB,IAAM,cACjDA,EAAaA,EAAa,uBAAyB,IAAM,sBACzDA,EAAaA,EAAa,iCAAmC,IAAM,gCACnEA,EAAaA,EAAa,eAAiB,IAAM,cACjDA,EAAaA,EAAa,eAAiB,IAAM,cACjDA,EAAaA,EAAa,2BAA6B,IAAM,0BAC7DA,EAAaA,EAAa,wBAA0B,IAAM,uBAC1DA,EAAaA,EAAa,yBAA2B,IAAM,wBAC3DA,EAAaA,EAAa,QAAU,IAAM,OAC1CA,EAAaA,EAAa,wBAA0B,IAAM,uBAC1DA,EAAaA,EAAa,WAAa,IAAM,UAC7CA,EAAaA,EAAa,mBAAqB,IAAM,kBACrDA,EAAaA,EAAa,oBAAsB,IAAM,mBACtDA,EAAaA,EAAa,2BAA6B,IAAM,0BAC7DA,EAAaA,EAAa,+BAAiC,IAAM,8BACjEA,EAAaA,EAAa,cAAgB,IAAM,aAChDA,EAAaA,EAAa,YAAc,IAAM,WAC9CA,EAAaA,EAAa,iBAAmB,IAAM,gBACnDA,EAAaA,EAAa,YAAc,IAAM,WAC9CA,EAAaA,EAAa,cAAgB,IAAM,aAChDA,EAAaA,EAAa,iBAAmB,IAAM,gBACnDA,EAAaA,EAAa,gBAAkB,IAAM,eAClDA,EAAaA,EAAa,eAAiB,IAAM,cACjDA,EAAaA,EAAa,gBAAkB,IAAM,eAClDA,EAAaA,EAAa,6BAA+B,IAAM,4BAC/DA,EAAaA,EAAa,SAAW,IAAM,QAC3CA,EAAaA,EAAa,gBAAkB,IAAM,eAClDA,EAAaA,EAAa,iBAAmB,IAAM,gBACnDA,EAAaA,EAAa,iBAAmB,IAAM,gBACnDA,EAAaA,EAAa,aAAe,IAAM,YAC/CA,EAAaA,EAAa,wBAA0B,IAAM,uBAC1DA,EAAaA,EAAa,cAAgB,IAAM,aAChDA,EAAaA,EAAa,eAAiB,IAAM,cACjDA,EAAaA,EAAa,uBAAyB,IAAM,sBACzDA,EAAaA,EAAa,iBAAmB,IAAM,gBACnDA,EAAaA,EAAa,SAAW,IAAM,QAC3CA,EAAaA,EAAa,iBAAmB,IAAM,gBACnDA,EAAaA,EAAa,WAAa,IAAM,UAC7CA,EAAaA,EAAa,cAAgB,IAAM,aAChDA,EAAaA,EAAa,+BAAiC,IAAM,8BACjEA,EAAaA,EAAa,kBAAoB,IAAM,iBACpDA,EAAaA,EAAa,+BAAiC,IAAM,8BACjEA,EAAaA,EAAa,uBAAyB,IAAM,sBACzDA,EAAaA,EAAa,oBAAsB,IAAM,mBACtDA,EAAaA,EAAa,wBAA0B,IAAM,uBAC1DA,EAAaA,EAAa,uBAAyB,IAAM,sBACzDA,EAAaA,EAAa,sBAAwB,IAAM,qBACxDA,EAAaA,EAAa,WAAa,IAAM,UAC7CA,EAAaA,EAAa,kBAAoB,IAAM,iBACpDA,EAAaA,EAAa,0BAA4B,IAAM,yBAC5DA,EAAaA,EAAa,6BAA+B,IAAM,4BAC/DA,EAAaA,EAAa,oBAAsB,IAAM,mBACtDA,EAAaA,EAAa,yBAA2B,IAAM,wBAC3DA,EAAaA,EAAa,YAAc,IAAM,WAC9CA,EAAaA,EAAa,gBAAkB,IAAM,eAClDA,EAAaA,EAAa,2BAA6B,IAAM,0BAC7DA,EAAaA,EAAa,sBAAwB,IAAM,qBACxDA,EAAaA,EAAa,uBAAyB,IAAM,sBACzDA,EAAaA,EAAa,oCAAsC,IAAM,mCACtEA,EAAaA,EAAa,+BAAiC,IAAM,8BACjEA,EAAaA,EAAa,oBAAsB,IAAM,mBACtDA,EAAaA,EAAa,gCAAkC,IAAM,+BAClEA,EAAaA,EAAa,oBAAsB,IAAM,mBACtDA,EAAaA,EAAa,UAAY,IAAM,SAC5CA,EAAaA,EAAa,aAAe,IAAM,YAC/CA,EAAaA,EAAa,0BAA4B,IAAM,yBAC5DA,EAAaA,EAAa,wBAA0B,IAAM,uBAC1DA,EAAaA,EAAa,yBAA2B,IAAM,wBAC3DA,EAAaA,EAAa,sBAAwB,IAAM,qBACxDA,EAAaA,EAAa,sBAAwB,IAAM,qBACxDA,EAAaA,EAAa,uBAAyB,IAAM,sBACzDA,EAAaA,EAAa,uBAAyB,IAAM,sBACzDA,EAAaA,EAAa,cAAgB,IAAM,aAChDA,EAAaA,EAAa,sBAAwB,KAAO,qBACzDA,EAAaA,EAAa,eAAiB,KAAO,cAClDA,EAAaA,EAAa,mBAAqB,KAAO,kBACtDA,EAAaA,EAAa,kBAAoB,KAAO,iBACrDA,EAAaA,EAAa,0BAA4B,KAAO,yBAC7DA,EAAaA,EAAa,WAAa,KAAO,UAC9CA,EAAaA,EAAa,mBAAqB,KAAO,kBACtDA,EAAaA,EAAa,qBAAuB,KAAO,oBACxDA,EAAaA,EAAa,8BAAgC,KAAO,6BACjEA,EAAaA,EAAa,oBAAsB,KAAO,mBACvDA,EAAaA,EAAa,iBAAmB,KAAO,gBACpDA,EAAaA,EAAa,YAAc,KAAO,WAC/CA,EAAaA,EAAa,0BAA4B,KAAO,yBAC7DA,EAAaA,EAAa,gBAAkB,KAAO,eACnDA,EAAaA,EAAa,eAAiB,KAAO,cAClDA,EAAaA,EAAa,kBAAoB,KAAO,iBACrDA,EAAaA,EAAa,YAAc,KAAO,WAC/CA,EAAaA,EAAa,gCAAkC,KAAO,+BACnEA,EAAaA,EAAa,iCAAmC,KAAO,gCACpEA,EAAaA,EAAa,kBAAoB,KAAO,iBACrDA,EAAaA,EAAa,qBAAuB,KAAO,oBACxDA,EAAaA,EAAa,qBAAuB,KAAO,oBACxDA,EAAaA,EAAa,kBAAoB,KAAO,iBACrDA,EAAaA,EAAa,oBAAsB,KAAO,mBACvDA,EAAaA,EAAa,kBAAoB,KAAO,iBACrDA,EAAaA,EAAa,cAAgB,KAAO,aACjDA,EAAaA,EAAa,mBAAqB,KAAO,kBACtDA,EAAaA,EAAa,cAAgB,KAAO,aACjDA,EAAaA,EAAa,gBAAkB,KAAO,eACnDA,EAAaA,EAAa,cAAgB,KAAO,aACjDA,EAAaA,EAAa,gBAAkB,KAAO,eAnIvD,CAoIGA,KAAiBA,GAAe,KAKnC,SAAWC,GAIPA,EAAoBA,EAAoB,eAAiB,GAAK,cAI9DA,EAAoBA,EAAoB,MAAQ,GAAK,KAIrDA,EAAoBA,EAAoB,QAAU,GAAK,OAZ3D,CAaGA,KAAwBA,GAAsB,KAKjD,SAAWC,GAIPA,EAAkBA,EAAkB,MAAQ,GAAK,KAIjDA,EAAkBA,EAAkB,QAAU,GAAK,OARvD,CASGA,KAAsBA,GAAoB,KAK7C,SAAWC,GAIPA,EAAaA,EAAa,QAAU,GAAK,OAIzCA,EAAaA,EAAa,UAAY,GAAK,SAM3CA,EAAaA,EAAa,iBAAmB,GAAK,gBAIlDA,EAAaA,EAAa,WAAa,GAAK,UAlBhD,CAmBGA,KAAiBA,GAAe,KAEnC,SAAWC,GACPA,EAAcA,EAAc,SAAW,GAAK,QAC5CA,EAAcA,EAAc,QAAU,GAAK,OAC3CA,EAAcA,EAAc,aAAe,GAAK,YAHpD,CAIGA,KAAkBA,GAAgB,KAKrC,SAAWC,GAKPA,EAA4BA,EAA4B,aAAe,GAAK,YAK5EA,EAA4BA,EAA4B,YAAc,GAAK,WAV/E,CAWGA,KAAgCA,GAA8B,KAOjE,SAAWC,GACPA,EAAQA,EAAQ,sBAAwB,GAAK,oBAI7CA,EAAQA,EAAQ,WAAa,GAAK,UAClCA,EAAQA,EAAQ,aAAe,GAAK,YACpCA,EAAQA,EAAQ,OAAS,GAAK,MAC9BA,EAAQA,EAAQ,SAAW,GAAK,QAChCA,EAAQA,EAAQ,SAAW,GAAK,QAChCA,EAAQA,EAAQ,QAAU,GAAK,OAC/BA,EAAQA,EAAQ,OAAS,GAAK,MAC9BA,EAAQA,EAAQ,cAAgB,GAAK,aACrCA,EAAQA,EAAQ,YAAc,GAAK,WACnCA,EAAQA,EAAQ,UAAY,GAAK,SACjCA,EAAQA,EAAQ,SAAW,IAAM,QACjCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,YAAc,IAAM,WACpCA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,aAAe,IAAM,YACrCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,cAAgB,IAAM,aACtCA,EAAQA,EAAQ,aAAe,IAAM,YACrCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,UAAY,IAAM,SAClCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,QAAU,IAAM,OAChCA,EAAQA,EAAQ,eAAiB,IAAM,cACvCA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,MAAQ,IAAM,KAC9BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,OAAS,IAAM,MAC/BA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,cAAgB,IAAM,aAKtCA,EAAQA,EAAQ,aAAe,IAAM,YAKrCA,EAAQA,EAAQ,SAAW,IAAM,QAKjCA,EAAQA,EAAQ,SAAW,IAAM,QAKjCA,EAAQA,EAAQ,SAAW,IAAM,QAKjCA,EAAQA,EAAQ,UAAY,IAAM,SAKlCA,EAAQA,EAAQ,SAAW,IAAM,QAKjCA,EAAQA,EAAQ,aAAe,IAAM,YAKrCA,EAAQA,EAAQ,eAAiB,IAAM,cAKvCA,EAAQA,EAAQ,aAAe,IAAM,YAKrCA,EAAQA,EAAQ,gBAAkB,IAAM,eAKxCA,EAAQA,EAAQ,SAAW,IAAM,QAIjCA,EAAQA,EAAQ,SAAW,IAAM,QAIjCA,EAAQA,EAAQ,iBAAmB,IAAM,gBACzCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,WAAa,IAAM,UACnCA,EAAQA,EAAQ,WAAa,KAAO,UACpCA,EAAQA,EAAQ,WAAa,KAAO,UACpCA,EAAQA,EAAQ,WAAa,KAAO,UACpCA,EAAQA,EAAQ,kBAAoB,KAAO,iBAC3CA,EAAQA,EAAQ,aAAe,KAAO,YACtCA,EAAQA,EAAQ,oBAAsB,KAAO,mBAC7CA,EAAQA,EAAQ,kBAAoB,KAAO,iBAC3CA,EAAQA,EAAQ,iBAAmB,KAAO,gBAC1CA,EAAQA,EAAQ,gBAAkB,KAAO,eAIzCA,EAAQA,EAAQ,sBAAwB,KAAO,qBAC/CA,EAAQA,EAAQ,WAAa,KAAO,UACpCA,EAAQA,EAAQ,WAAa,KAAO,UACpCA,EAAQA,EAAQ,mBAAqB,KAAO,kBAC5CA,EAAQA,EAAQ,iBAAmB,KAAO,gBAC1CA,EAAQA,EAAQ,mBAAqB,KAAO,kBAC5CA,EAAQA,EAAQ,iBAAmB,KAAO,gBAC1CA,EAAQA,EAAQ,eAAiB,KAAO,cACxCA,EAAQA,EAAQ,eAAiB,KAAO,cACxCA,EAAQA,EAAQ,kBAAoB,KAAO,iBAC3CA,EAAQA,EAAQ,kBAAoB,KAAO,iBAC3CA,EAAQA,EAAQ,sBAAwB,KAAO,qBAC/CA,EAAQA,EAAQ,aAAe,KAAO,YACtCA,EAAQA,EAAQ,kBAAoB,KAAO,iBAC3CA,EAAQA,EAAQ,qBAAuB,KAAO,oBAC9CA,EAAQA,EAAQ,cAAgB,KAAO,aACvCA,EAAQA,EAAQ,cAAgB,KAAO,aAKvCA,EAAQA,EAAQ,aAAe,KAAO,YA5L1C,CA6LGA,KAAYA,GAAU,KAEzB,SAAWC,GACPA,EAAeA,EAAe,QAAU,GAAK,OAC7CA,EAAeA,EAAe,QAAU,GAAK,OAC7CA,EAAeA,EAAe,WAAa,GAAK,UAChDA,EAAeA,EAAe,SAAW,GAAK,QAJlD,CAKGA,KAAmBA,GAAiB,KAEvC,SAAWC,GACPA,EAAUA,EAAU,eAAiB,GAAK,cAC1CA,EAAUA,EAAU,cAAgB,GAAK,aAF7C,CAGGA,KAAcA,GAAY,KAK7B,SAAWC,GACPA,EAAgBA,EAAgB,UAAY,GAAK,SACjDA,EAAgBA,EAAgB,UAAY,GAAK,SAFrD,CAGGA,KAAoBA,GAAkB,KAKzC,SAAWC,GAIPA,EAAgBA,EAAgB,WAAa,GAAK,UAIlDA,EAAgBA,EAAgB,YAAc,GAAK,WAInDA,EAAgBA,EAAgB,uBAAyB,GAAK,sBAI9DA,EAAgBA,EAAgB,uBAAyB,GAAK,sBAI9DA,EAAgBA,EAAgB,2BAA6B,GAAK,0BAIlEA,EAAgBA,EAAgB,oBAAsB,GAAK,mBAI3DA,EAAgBA,EAAgB,gBAAkB,GAAK,eAIvDA,EAAgBA,EAAgB,iBAAmB,GAAK,gBAIxDA,EAAgBA,EAAgB,qBAAuB,GAAK,oBAI5DA,EAAgBA,EAAgB,kBAAoB,GAAK,iBAIzDA,EAAgBA,EAAgB,kBAAoB,IAAM,iBAI1DA,EAAgBA,EAAgB,aAAe,IAAM,YAIrDA,EAAgBA,EAAgB,kBAAoB,IAAM,iBAI1DA,EAAgBA,EAAgB,kBAAoB,IAAM,iBAxD9D,CAyDGA,KAAoBA,GAAkB,KAKzC,SAAWC,GAIPA,EAAgCA,EAAgC,oBAAsB,GAAK,mBAI3FA,EAAgCA,EAAgC,uBAAyB,GAAK,sBAI9FA,EAAgCA,EAAgC,cAAgB,GAAK,aAZzF,CAaGA,KAAoCA,GAAkC,KAKzE,SAAWC,GACPA,EAAkBA,EAAkB,QAAU,GAAK,OACnDA,EAAkBA,EAAkB,UAAY,GAAK,SACrDA,EAAkBA,EAAkB,SAAW,GAAK,QACpDA,EAAkBA,EAAkB,QAAU,GAAK,OAJvD,CAKGA,KAAsBA,GAAoB,KAE7C,SAAWC,GACPA,EAAsBA,EAAsB,OAAS,GAAK,MAC1DA,EAAsBA,EAAsB,MAAQ,GAAK,KACzDA,EAAsBA,EAAsB,YAAc,GAAK,WAC/DA,EAAsBA,EAAsB,YAAc,GAAK,WAC/DA,EAAsBA,EAAsB,UAAY,GAAK,SALjE,CAMGA,KAA0BA,GAAwB,KAErD,SAAWC,GACPA,EAAcA,EAAc,QAAU,GAAK,OAC3CA,EAAcA,EAAc,QAAU,GAAK,OAC3CA,EAAcA,EAAc,UAAY,GAAK,SAHjD,CAIGA,KAAkBA,GAAgB,KAErC,SAAWC,GACPA,EAAWA,EAAW,UAAY,GAAK,SACvCA,EAAWA,EAAW,aAAe,GAAK,YAF9C,CAGGA,KAAeA,GAAa,KAE/B,SAAWC,GACPA,EAAoBA,EAAoB,QAAU,GAAK,OACvDA,EAAoBA,EAAoB,UAAY,GAAK,SACzDA,EAAoBA,EAAoB,WAAa,GAAK,UAH9D,CAIGA,KAAwBA,GAAsB,KAKjD,SAAWC,GAIPA,EAAmBA,EAAmB,OAAS,GAAK,MAIpDA,EAAmBA,EAAmB,OAAS,GAAK,MARxD,CASGA,KAAuBA,GAAqB,KAE/C,SAAWC,GACPA,EAAyBA,EAAyB,UAAY,GAAK,SACnEA,EAAyBA,EAAyB,oBAAsB,GAAK,mBAC7EA,EAAyBA,EAAyB,iBAAmB,GAAK,gBAH9E,CAIGA,KAA6BA,GAA2B,KAK3D,SAAWC,GACPA,EAAWA,EAAW,QAAU,GAAK,OACrCA,EAAWA,EAAW,UAAY,GAAK,SACvCA,EAAWA,EAAW,aAAe,GAAK,YAC1CA,EAAWA,EAAW,WAAa,GAAK,UACxCA,EAAWA,EAAW,SAAW,GAAK,QACtCA,EAAWA,EAAW,UAAY,GAAK,SACvCA,EAAWA,EAAW,YAAc,GAAK,WACzCA,EAAWA,EAAW,SAAW,GAAK,QACtCA,EAAWA,EAAW,eAAiB,GAAK,cAC5CA,EAAWA,EAAW,QAAU,GAAK,OACrCA,EAAWA,EAAW,aAAe,IAAM,YAC3CA,EAAWA,EAAW,YAAc,IAAM,WAC1CA,EAAWA,EAAW,YAAc,IAAM,WAC1CA,EAAWA,EAAW,YAAc,IAAM,WAC1CA,EAAWA,EAAW,UAAY,IAAM,SACxCA,EAAWA,EAAW,UAAY,IAAM,SACxCA,EAAWA,EAAW,WAAa,IAAM,UACzCA,EAAWA,EAAW,SAAW,IAAM,QACvCA,EAAWA,EAAW,UAAY,IAAM,SACxCA,EAAWA,EAAW,OAAS,IAAM,MACrCA,EAAWA,EAAW,QAAU,IAAM,OACtCA,EAAWA,EAAW,cAAgB,IAAM,aAC5CA,EAAWA,EAAW,UAAY,IAAM,SACxCA,EAAWA,EAAW,SAAW,IAAM,QACvCA,EAAWA,EAAW,YAAc,IAAM,WAC1CA,EAAWA,EAAW,iBAAmB,IAAM,gBA1BnD,CA2BGA,KAAeA,GAAa,KAE/B,SAAWC,GACPA,EAAUA,EAAU,cAAgB,GAAK,aAD7C,CAEGA,KAAcA,GAAY,KAK7B,SAAWC,GAIPA,EAA8BA,EAA8B,UAAY,GAAK,SAI7EA,EAA8BA,EAA8B,SAAW,GAAK,QAI5EA,EAA8BA,EAA8B,UAAY,GAAK,SAI7EA,EAA8BA,EAA8B,SAAW,GAAK,QAI5EA,EAA8BA,EAA8B,UAAY,GAAK,SAI7EA,EAA8BA,EAA8B,SAAW,GAAK,QAxBhF,CAyBGA,KAAkCA,GAAgC,KAKrE,SAAWC,GAIPA,EAAsBA,EAAsB,QAAU,GAAK,OAI3DA,EAAsBA,EAAsB,SAAW,GAAK,QAI5DA,EAAsBA,EAAsB,aAAe,GAAK,YAIhEA,EAAsBA,EAAsB,YAAc,GAAK,WAI/DA,EAAsBA,EAAsB,gBAAkB,GAAK,eAInEA,EAAsBA,EAAsB,iBAAmB,GAAK,gBAxBxE,CAyBGA,KAA0BA,GAAwB,KAMrD,SAAWC,GACPA,EAAuBA,EAAuB,gCAAkC,GAAK,+BACrFA,EAAuBA,EAAuB,+BAAiC,GAAK,8BACpFA,EAAuBA,EAAuB,6BAA+B,GAAK,4BAClFA,EAAuBA,EAAuB,4BAA8B,GAAK,2BAJrF,CAKGA,KAA2BA,GAAyB,KAKvD,SAAWC,GAIPA,EAAeA,EAAe,QAAU,GAAK,OAI7CA,EAAeA,EAAe,QAAU,GAAK,OAI7CA,EAAeA,EAAe,UAAY,GAAK,SAI/CA,EAAeA,EAAe,cAAgB,GAAK,aAhBvD,CAiBGA,KAAmBA,GAAiB,KG30BhC,MAAM,GACT,aAAa3Y,EAAW6Y,GACpB,OAAOD,GAAS5Y,EAAW6Y,IAO5B,SAASiC,KACZ,MAAO,CACHC,YAAQnoC,EACRooC,eAAWpoC,EACX0iC,wBAAyBA,GACzB2F,QAAS,EACTxD,QAAS,GACTyD,OAAQ,GACRpX,SAAUA,GACVqX,MAAO,GACPC,UAAW,GACXhD,mBAAoB,GACpBV,eAAgB,GAChBC,UAAW,GACXpV,IAAK,GACLqY,MAAOA,IAnBf,GAAOS,QAAU,KACjB,GAAOC,MAAQ,KACf,GAAOC,IAAM,IACb,GAAOC,QAAU,ICjBjB,IAAIC,GAAwC,SAAUC,EAASC,EAAYtgC,EAAGugC,GAC1E,SAASC,EAAM1qC,GAAS,OAAOA,aAAiBkK,EAAIlK,EAAQ,IAAIkK,GAAE,SAAUnF,GAAWA,EAAQ/E,MAC/F,OAAO,IAAKkK,IAAMA,EAAIpF,WAAU,SAAUC,EAASoX,GAC/C,SAASwuB,EAAU3qC,GAAS,IAAM4qC,EAAKH,EAAUj9B,KAAKxN,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACpF,SAAS4nC,EAAS7qC,GAAS,IAAM4qC,EAAKH,EAAU,SAASzqC,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACvF,SAAS2nC,EAAKj+B,GAAUA,EAAOc,KAAO1I,EAAQ4H,EAAO3M,OAAS0qC,EAAM/9B,EAAO3M,OAAOgF,KAAK2lC,EAAWE,GAClGD,GAAMH,EAAYA,EAAUrhC,MAAMmhC,EAASC,GAAc,KAAKh9B,YAmB/D,MAAM,WAAoB,GAC7B,UACI,OAAOjG,KAAK80B,KAEhB,UACI,OAAO90B,KAAKg1B,KAEhB,WACI,OAAOh1B,KAAKujC,UAEhB,kBACI,OAAOvjC,KAAK+0B,OAAO72B,MAAM,GAE7B,eACI,OAAO8B,KAAK+0B,OAAOl4B,OAEvB,eAAewuB,GACX,OAAOrrB,KAAK+0B,OAAO1J,EAAa,GAEpC,kBAAkBkB,EAAUiK,GACxB,IAAIgN,EAAatM,GAAc3K,EAASjB,OAAQiL,GAA0BC,GAAiBx2B,KAAK+0B,OAAOxI,EAASlB,WAAa,GAAI,GACjI,OAAImY,EACO,IAAI,GAAMjX,EAASlB,WAAYmY,EAAWrX,YAAaI,EAASlB,WAAYmY,EAAWnX,WAE3F,KAEX,MAAMmK,GACF,MAAMhI,EAAQxuB,KAAK+0B,OACb0O,EAAYzjC,KAAK0jC,WAAW1qC,KAAKgH,MACvC,IAAIqrB,EAAa,EACbsY,EAAW,GACXC,EAAgB,EAChBC,EAAa,GACjB,MAAO,CACH,EAAEtrC,OAAOkN,YACL,MAAO,EACH,GAAIm+B,EAAgBC,EAAWhnC,OAAQ,CACnC,MAAMpE,EAAQkrC,EAASviC,UAAUyiC,EAAWD,GAAe1yB,MAAO2yB,EAAWD,GAAepb,KAC5Fob,GAAiB,QACXnrC,MAEL,CACD,KAAI4yB,EAAamD,EAAM3xB,QAOnB,MANA8mC,EAAWnV,EAAMnD,GACjBwY,EAAaJ,EAAUE,EAAUnN,GACjCoN,EAAgB,EAChBvY,GAAc,KAUtC,aAAaA,EAAYmL,GACrB,IAAIsN,EAAU9jC,KAAK+0B,OAAO1J,EAAa,GACnC0Y,EAAS/jC,KAAK0jC,WAAWI,EAAStN,GAClCwN,EAAQ,GACZ,IAAK,MAAM1X,KAASyX,EAChBC,EAAM5mC,KAAK,CACPq6B,KAAMqM,EAAQ1iC,UAAUkrB,EAAMpb,MAAOob,EAAM9D,KAC3C2D,YAAaG,EAAMpb,MAAQ,EAC3Bmb,UAAWC,EAAM9D,IAAM,IAG/B,OAAOwb,EAEX,WAAWF,EAAStN,GAChB,MAAMpxB,EAAS,GACf,IAAI1C,EACJ8zB,EAAeK,UAAY,EAC3B,MAAOn0B,EAAQ8zB,EAAex1B,KAAK8iC,GAAU,CACzC,GAAwB,IAApBphC,EAAM,GAAG7F,OAET,MAEJuI,EAAOhI,KAAK,CAAE8T,MAAOxO,EAAM+D,MAAO+hB,IAAK9lB,EAAM+D,MAAQ/D,EAAM,GAAG7F,SAElE,OAAOuI,EAEX,gBAAgBknB,GAEZ,GADAA,EAAQtsB,KAAKikC,eAAe3X,GACxBA,EAAMJ,kBAAoBI,EAAMF,cAChC,OAAOpsB,KAAK+0B,OAAOzI,EAAMJ,gBAAkB,GAAG9qB,UAAUkrB,EAAMH,YAAc,EAAGG,EAAMD,UAAY,GAErG,IAAI6X,EAAalkC,KAAKg1B,KAClBmP,EAAiB7X,EAAMJ,gBAAkB,EACzCkY,EAAe9X,EAAMF,cAAgB,EACrCiY,EAAc,GAClBA,EAAYjnC,KAAK4C,KAAK+0B,OAAOoP,GAAgB/iC,UAAUkrB,EAAMH,YAAc,IAC3E,IAAK,IAAI30B,EAAI2sC,EAAiB,EAAG3sC,EAAI4sC,EAAc5sC,IAC/C6sC,EAAYjnC,KAAK4C,KAAK+0B,OAAOv9B,IAGjC,OADA6sC,EAAYjnC,KAAK4C,KAAK+0B,OAAOqP,GAAchjC,UAAU,EAAGkrB,EAAMD,UAAY,IACnEgY,EAAY9lC,KAAK2lC,GAE5B,SAAS3X,GAGL,OAFAA,EAAWvsB,KAAKskC,kBAAkB/X,GAClCvsB,KAAKukC,oBACEvkC,KAAKk1B,YAAYsP,aAAajY,EAASlB,WAAa,IAAMkB,EAASjB,OAAS,GAEvF,WAAWxR,GACPA,EAASxK,KAAKiL,MAAMT,GACpBA,EAASxK,KAAK6R,IAAI,EAAGrH,GACrB9Z,KAAKukC,oBACL,IAAIjc,EAAMtoB,KAAKk1B,YAAYuP,WAAW3qB,GAClC4qB,EAAa1kC,KAAK+0B,OAAOzM,EAAI7hB,OAAO5J,OAExC,MAAO,CACHwuB,WAAY,EAAI/C,EAAI7hB,MACpB6kB,OAAQ,EAAIhc,KAAK+M,IAAIiM,EAAIkL,UAAWkR,IAG5C,eAAepY,GACX,MAAMpb,EAAQlR,KAAKskC,kBAAkB,CAAEjZ,WAAYiB,EAAMJ,gBAAiBZ,OAAQgB,EAAMH,cAClF3D,EAAMxoB,KAAKskC,kBAAkB,CAAEjZ,WAAYiB,EAAMF,cAAed,OAAQgB,EAAMD,YACpF,OAAInb,EAAMma,aAAeiB,EAAMJ,iBACxBhb,EAAMoa,SAAWgB,EAAMH,aACvB3D,EAAI6C,aAAeiB,EAAMF,eACzB5D,EAAI8C,SAAWgB,EAAMD,UACjB,CACHH,gBAAiBhb,EAAMma,WACvBc,YAAajb,EAAMoa,OACnBc,cAAe5D,EAAI6C,WACnBgB,UAAW7D,EAAI8C,QAGhBgB,EAEX,kBAAkBC,GACd,IAAKnB,GAASuZ,YAAYpY,GACtB,MAAM,IAAIhsB,MAAM,gBAEpB,IAAI,WAAE8qB,EAAU,OAAEC,GAAWiB,EACzBqY,GAAa,EACjB,GAAIvZ,EAAa,EACbA,EAAa,EACbC,EAAS,EACTsZ,GAAa,OAEZ,GAAIvZ,EAAarrB,KAAK+0B,OAAOl4B,OAC9BwuB,EAAarrB,KAAK+0B,OAAOl4B,OACzByuB,EAAStrB,KAAK+0B,OAAO1J,EAAa,GAAGxuB,OAAS,EAC9C+nC,GAAa,MAEZ,CACD,IAAIC,EAAe7kC,KAAK+0B,OAAO1J,EAAa,GAAGxuB,OAAS,EACpDyuB,EAAS,GACTA,EAAS,EACTsZ,GAAa,GAERtZ,EAASuZ,IACdvZ,EAASuZ,EACTD,GAAa,GAGrB,OAAKA,EAIM,CAAEvZ,aAAYC,UAHdiB,GAUZ,MAAM,GACT,YAAYuY,EAAMC,GACd/kC,KAAKglC,MAAQF,EACb9kC,KAAKilC,QAAU/sC,OAAOY,OAAO,MAC7BkH,KAAKklC,sBAAwBH,EAC7B/kC,KAAKmlC,eAAiB,KAE1B,UACInlC,KAAKilC,QAAU/sC,OAAOY,OAAO,MAEjC,UAAUmxB,GACN,OAAOjqB,KAAKilC,QAAQhb,GAExB,aACI,IAAImb,EAAM,GAEV,OADAltC,OAAOmtC,KAAKrlC,KAAKilC,SAASxgC,QAAS1L,GAAQqsC,EAAIhoC,KAAK4C,KAAKilC,QAAQlsC,KAC1DqsC,EAEX,eAAe1oC,GACXsD,KAAKilC,QAAQvoC,EAAKm9B,KAAO,IAAI,GAAY,GAAIv+B,MAAMoB,EAAKm9B,KAAMn9B,EAAK8xB,MAAO9xB,EAAK4oC,IAAK5oC,EAAKm4B,WAE7F,mBAAmB0Q,EAAQ7pC,GACvB,IAAKsE,KAAKilC,QAAQM,GACd,OAEJ,IAAIzL,EAAQ95B,KAAKilC,QAAQM,GACzBzL,EAAM0L,SAAS9pC,GAEnB,mBAAmB6pC,GACVvlC,KAAKilC,QAAQM,WAGXvlC,KAAKilC,QAAQM,GAGxB,YAAYE,EAAaC,EAAaC,EAAsB3T,GACxD,OAAO+Q,GAAU/iC,UAAM,OAAQ,GAAQ,YACnC,MAAMkb,EAAWlb,KAAK4lC,UAAUH,GAC1BtqB,EAAWnb,KAAK4lC,UAAUF,GAChC,IAAKxqB,IAAaC,EACd,OAAO,KAEX,MAAMuW,EAAgBxW,EAAS2qB,kBACzBlU,EAAgBxW,EAAS0qB,kBACzBC,EAAe,IAAIrU,GAAaC,EAAeC,EAAe,CAChEN,0BAA0B,EAC1BC,8BAA8B,EAC9BvC,2BAA4B4W,EAC5B9T,sBAAsB,EACtBG,mBAAoBA,IAElBC,EAAa6T,EAAazX,cAC1B0X,IAAa9T,EAAW3W,QAAQze,OAAS,IAAYmD,KAAKgmC,oBAAoB9qB,EAAUC,GAC9F,MAAO,CACH4D,UAAWkT,EAAWlT,UACtBgnB,UAAWA,EACXzqB,QAAS2W,EAAW3W,YAIhC,oBAAoBJ,EAAUC,GAC1B,MAAM8qB,EAAoB/qB,EAAS+e,eAC7BiM,EAAoB/qB,EAAS8e,eACnC,GAAIgM,IAAsBC,EACtB,OAAO,EAEX,IAAK,IAAI5M,EAAO,EAAGA,GAAQ2M,EAAmB3M,IAAQ,CAClD,MAAM/G,EAAerX,EAASgf,eAAeZ,GACvC9G,EAAerX,EAAS+e,eAAeZ,GAC7C,GAAI/G,IAAiBC,EACjB,OAAO,EAGf,OAAO,EAEX,wBAAwB2T,EAAUC,GAC9B,OAAOrD,GAAU/iC,UAAM,OAAQ,GAAQ,YACnC,MAAM85B,EAAQ95B,KAAK4lC,UAAUO,GAC7B,IAAKrM,EACD,OAAOsM,EAEX,MAAMhhC,EAAS,GACf,IAAIihC,OAAUnsC,EACdksC,EAAQA,EAAMloC,MAAM,GAAGooC,KAAK,CAACxoC,EAAGqE,KAC5B,GAAIrE,EAAEwuB,OAASnqB,EAAEmqB,MACb,OAAO,GAAMia,yBAAyBzoC,EAAEwuB,MAAOnqB,EAAEmqB,OAGrD,IAAIka,EAAO1oC,EAAEwuB,MAAQ,EAAI,EACrBma,EAAOtkC,EAAEmqB,MAAQ,EAAI,EACzB,OAAOka,EAAOC,IAElB,IAAK,IAAI,MAAEna,EAAK,KAAEgJ,EAAI,IAAEV,KAASwR,EAAO,CAIpC,GAHmB,kBAARxR,IACPyR,EAAUzR,GAEV,GAAM5uB,QAAQsmB,KAAWgJ,EAEzB,SAEJ,MAAMpa,EAAW4e,EAAM4M,gBAAgBpa,GAEvC,GADAgJ,EAAOA,EAAKn0B,QAAQ,cAAe24B,EAAMlF,KACrC1Z,IAAaoa,EAEb,SAGJ,GAAIhmB,KAAK6R,IAAImU,EAAKz4B,OAAQqe,EAASre,QAAU,GAAmB8pC,WAAY,CACxEvhC,EAAOhI,KAAK,CAAEkvB,QAAOgJ,SACrB,SAGJ,MAAMha,EAAUL,GAAWC,EAAUoa,GAAM,GACrCsR,EAAa9M,EAAM+M,SAAS,GAAMC,KAAKxa,GAAOkB,oBACpD,IAAK,MAAMtL,KAAU5G,EAAS,CAC1B,MAAMpK,EAAQ4oB,EAAMiN,WAAWH,EAAa1kB,EAAO1K,eAC7CgR,EAAMsR,EAAMiN,WAAWH,EAAa1kB,EAAO1K,cAAgB0K,EAAOzK,gBAClEuvB,EAAU,CACZ1R,KAAMA,EAAKpzB,OAAOggB,EAAOxK,cAAewK,EAAOvK,gBAC/C2U,MAAO,CAAEJ,gBAAiBhb,EAAMma,WAAYc,YAAajb,EAAMoa,OAAQc,cAAe5D,EAAI6C,WAAYgB,UAAW7D,EAAI8C,SAErHwO,EAAM4M,gBAAgBM,EAAQ1a,SAAW0a,EAAQ1R,MACjDlwB,EAAOhI,KAAK4pC,IAOxB,MAHuB,kBAAZX,GACPjhC,EAAOhI,KAAK,CAAEw3B,IAAKyR,EAAS/Q,KAAM,GAAIhJ,MAAO,CAAEJ,gBAAiB,EAAGC,YAAa,EAAGC,cAAe,EAAGC,UAAW,KAE7GjnB,KAIf,aAAa+gC,GACT,OAAOpD,GAAU/iC,UAAM,OAAQ,GAAQ,YACnC,IAAI85B,EAAQ95B,KAAK4lC,UAAUO,GAC3B,OAAKrM,EAGEc,GAAad,GAFT,QAKnB,eAAemN,EAAWC,EAAaC,EAASC,GAC5C,OAAOrE,GAAU/iC,UAAM,OAAQ,GAAQ,YACnC,MAAMqnC,EAAK,IAAI,GAAU,GACnBC,EAAgB,IAAIjR,OAAO8Q,EAASC,GACpCG,EAAO,IAAI59B,IACjB69B,EAAO,IAAK,IAAI3N,KAAOoN,EAAW,CAC9B,MAAMnN,EAAQ95B,KAAK4lC,UAAU/L,GAC7B,GAAKC,EAGL,IAAK,IAAIrC,KAAQqC,EAAMkK,MAAMsD,GACzB,GAAI7P,IAASyP,GAAgBrL,MAAMz0B,OAAOqwB,MAG1C8P,EAAKt9B,IAAIwtB,GACL8P,EAAKz2B,KAAO,GAAmB22B,mBAC/B,MAAMD,EAIlB,MAAO,CAAExD,MAAOjkC,MAAMsB,KAAKkmC,GAAOG,SAAUL,EAAGr4B,cAKvD,kBAAkBm3B,EAAU7Z,EAAO6a,EAASC,GACxC,OAAOrE,GAAU/iC,UAAM,OAAQ,GAAQ,YACnC,IAAI85B,EAAQ95B,KAAK4lC,UAAUO,GAC3B,IAAKrM,EACD,OAAO5hC,OAAOY,OAAO,MAEzB,MAAMwuC,EAAgB,IAAIjR,OAAO8Q,EAASC,GACpChiC,EAASlN,OAAOY,OAAO,MAC7B,IAAK,IAAIwgC,EAAOhN,EAAMJ,gBAAiBoN,EAAOhN,EAAMF,cAAekN,IAAQ,CACvE,IAAI0K,EAAQlK,EAAM6N,aAAarO,EAAMgO,GACrC,IAAK,MAAM7P,KAAQuM,EAAO,CACtB,IAAKnI,MAAMz0B,OAAOqwB,EAAKA,OACnB,SAEJ,IAAImQ,EAAQxiC,EAAOqyB,EAAKA,MACnBmQ,IACDA,EAAQ,GACRxiC,EAAOqyB,EAAKA,MAAQmQ,GAExBA,EAAMxqC,KAAK,CACP8uB,gBAAiBoN,EACjBnN,YAAasL,EAAKtL,YAClBC,cAAekN,EACfjN,UAAWoL,EAAKpL,aAI5B,OAAOjnB,KAIf,iBAAiB+gC,EAAU7Z,EAAO6O,EAAIgM,EAASC,GAC3C,OAAOrE,GAAU/iC,UAAM,OAAQ,GAAQ,YACnC,IAAI85B,EAAQ95B,KAAK4lC,UAAUO,GAC3B,IAAKrM,EACD,OAAO,KAEX,IAAIwN,EAAgB,IAAIjR,OAAO8Q,EAASC,GACpC9a,EAAMH,cAAgBG,EAAMD,YAC5BC,EAAQ,CACJJ,gBAAiBI,EAAMJ,gBACvBC,YAAaG,EAAMH,YACnBC,cAAeE,EAAMF,cACrBC,UAAWC,EAAMD,UAAY,IAGrC,IAAIwb,EAAgB/N,EAAM4M,gBAAgBpa,GACtCwb,EAAYhO,EAAMiO,kBAAkB,CAAE1c,WAAYiB,EAAMJ,gBAAiBZ,OAAQgB,EAAMH,aAAemb,GAC1G,IAAKQ,EACD,OAAO,KAEX,IAAIrQ,EAAOqC,EAAM4M,gBAAgBoB,GAC7B1iC,EAASy1B,GAAoBqB,SAAS8L,iBAAiB1b,EAAOub,EAAeC,EAAWrQ,EAAM0D,GAClG,OAAO/1B,KAIf,kBAAkB/N,EAAU4wC,EAAYC,GACpC,MAAMrxB,EAAqB,CAAC1E,EAAQlP,IACzBjD,KAAKglC,MAAMmD,IAAIh2B,EAAQlP,GAE5BmlC,EAAc,EAAwBF,EAAoBrxB,GAChE,IAAIwxB,EAAM,CACNvD,KAAMsD,EACNE,gBAAiB,IACNtoC,KAAKuoC,cAGpB,OAAIvoC,KAAKklC,uBACLllC,KAAKmlC,eAAiBnlC,KAAKklC,sBAAsBmD,EAAKJ,GAE/C1qC,QAAQC,QAAQ,EAAwBwC,KAAKmlC,kBAajD5nC,QAAQqX,OAAO,IAAIrU,MAAM,qBAIpC,IAAI4R,EAAQlP,GACR,IAAKjD,KAAKmlC,gBAAyD,oBAAhCnlC,KAAKmlC,eAAehzB,GACnD,OAAO5U,QAAQqX,OAAO,IAAIrU,MAAM,qCAAuC4R,IAE3E,IACI,OAAO5U,QAAQC,QAAQwC,KAAKmlC,eAAehzB,GAAQtQ,MAAM7B,KAAKmlC,eAAgBliC,IAElF,MAAOvH,GACH,OAAO6B,QAAQqX,OAAOlZ,KAMlC,GAAmBirC,WAAa,IAEhC,GAAmBc,kBAAoB,IAQV,oBAAlBlrC,gBAEP,OAAQisC,OAASpG,MCzdrB,IAAIqG,IAAc,EACX,SAAShyB,GAAWiyB,GACvB,GAAID,GACA,OAEJA,IAAc,EACd,MAAME,EAAe,IAAI,GAAoB3zB,IACzCza,KAAK+B,YAAY0Y,IACjB8vB,GAAS,IAAI,GAAmBA,EAAM4D,IAC1CnuC,KAAKquC,UAAaltC,IACditC,EAAaC,UAAUltC,EAAEgB,OCZjC,SAAS,GAAO8H,EAASvB,GACrB,IAAImC,EAUJ,OARIA,EADgB,IAAhBnC,EAAKpG,OACI2H,EAGAA,EAAQrD,QAAQ,cAAc,SAAUuB,EAAOmmC,GACpD,IAAIpiC,EAAQoiC,EAAK,GACjB,MAA8B,qBAAhB5lC,EAAKwD,GAAyBxD,EAAKwD,GAAS/D,KAG3D0C,EAEX,SAAS0jC,GAAS/vC,EAAKyL,GAEnB,IADA,IAAIvB,EAAO,GACF8lC,EAAK,EAAGA,EAAK5qC,UAAUtB,OAAQksC,IACpC9lC,EAAK8lC,EAAK,GAAK5qC,UAAU4qC,GAE7B,OAAO,GAAOvkC,EAASvB,GAEpB,SAAS+lC,GAAkB9nC,GAC9B,OAAO4nC,GCpBJ,IAAIG,GAKAC,GASA,GA8BA,GA2BAC,GAwBAC,GA4BAC,GA8BAC,GAyBAC,GA2BAC,GAmBAC,GAsCAC,GAwBAC,GAwBAC,GAqBAC,GAYAC,GA2CAC,GA8BAC,GAoCAC,GAqBAC,GAQAC,GA4CAC,GAiBAC,GAuBAC,GAwBAC,GAuBAC,GFtlBXjwC,KAAKquC,UAAaltC,IAET+sC,IACDhyB,GAAW,OEhBnB,SAAWwyB,GACPA,EAAQwB,WAAa,WACrBxB,EAAQyB,UAAY,WAFxB,CAGGzB,KAAYA,GAAU,KAEzB,SAAWC,GACPA,EAASuB,UAAY,EACrBvB,EAASwB,UAAY,WAFzB,CAGGxB,KAAaA,GAAW,KAM3B,SAAW9d,GAMP,SAAStyB,EAAOwgC,EAAMqR,GAOlB,OANIrR,IAASlyB,OAAOsjC,YAChBpR,EAAO4P,GAASwB,WAEhBC,IAAcvjC,OAAOsjC,YACrBC,EAAYzB,GAASwB,WAElB,CAAEpR,KAAMA,EAAMqR,UAAWA,GAMpC,SAASplC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGC,cAAc/tC,IAAc8tC,GAAG1B,SAASpsC,EAAUw8B,OAASsR,GAAG1B,SAASpsC,EAAU6tC,WAN/Fvf,EAAStyB,OAASA,EAQlBsyB,EAAS7lB,GAAKA,EAvBlB,CAwBG,KAAa,GAAW,KAM3B,SAAWk9B,GACP,SAAS3pC,EAAOgyC,EAAKC,EAAKC,EAAOC,GAC7B,GAAIL,GAAG1B,SAAS4B,IAAQF,GAAG1B,SAAS6B,IAAQH,GAAG1B,SAAS8B,IAAUJ,GAAG1B,SAAS+B,GAC1E,MAAO,CAAE/5B,MAAO,GAASpY,OAAOgyC,EAAKC,GAAMviB,IAAK,GAAS1vB,OAAOkyC,EAAOC,IAEtE,GAAI,GAAS1lC,GAAGulC,IAAQ,GAASvlC,GAAGwlC,GACrC,MAAO,CAAE75B,MAAO45B,EAAKtiB,IAAKuiB,GAG1B,MAAM,IAAIxqC,MAAM,8CAAgDuqC,EAAM,KAAOC,EAAM,KAAOC,EAAQ,KAAOC,EAAO,KAOxH,SAAS1lC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGC,cAAc/tC,IAAc,GAASyI,GAAGzI,EAAUoU,QAAU,GAAS3L,GAAGzI,EAAU0rB,KANhGia,EAAM3pC,OAASA,EAQf2pC,EAAMl9B,GAAKA,EApBf,CAqBG,KAAU,GAAQ,KAMrB,SAAW4jC,GAMP,SAASrwC,EAAOmxB,EAAKqC,GACjB,MAAO,CAAErC,IAAKA,EAAKqC,MAAOA,GAM9B,SAAS/mB,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc,GAAMyI,GAAGzI,EAAUwvB,SAAWse,GAAGO,OAAOruC,EAAUmtB,MAAQ2gB,GAAG1wC,UAAU4C,EAAUmtB,MANrHkf,EAASrwC,OAASA,EAQlBqwC,EAAS5jC,GAAKA,EAjBlB,CAkBG4jC,KAAaA,GAAW,KAM3B,SAAWC,GAQP,SAAStwC,EAAOsyC,EAAWC,EAAaC,EAAsBC,GAC1D,MAAO,CAAEH,UAAWA,EAAWC,YAAaA,EAAaC,qBAAsBA,EAAsBC,qBAAsBA,GAM/H,SAAShmC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc,GAAMyI,GAAGzI,EAAUuuC,cAAgBT,GAAGO,OAAOruC,EAAUsuC,aAC/E,GAAM7lC,GAAGzI,EAAUwuC,uBAAyBV,GAAG1wC,UAAU4C,EAAUwuC,yBACnE,GAAM/lC,GAAGzI,EAAUyuC,uBAAyBX,GAAG1wC,UAAU4C,EAAUyuC,uBAR/EnC,EAAatwC,OAASA,EAUtBswC,EAAa7jC,GAAKA,EArBtB,CAsBG6jC,KAAiBA,GAAe,KAMnC,SAAWC,GAIP,SAASvwC,EAAO0yC,EAAKC,EAAOC,EAAMC,GAC9B,MAAO,CACHH,IAAKA,EACLC,MAAOA,EACPC,KAAMA,EACNC,MAAOA,GAOf,SAASpmC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGgB,YAAY9uC,EAAU0uC,IAAK,EAAG,IACjCZ,GAAGgB,YAAY9uC,EAAU2uC,MAAO,EAAG,IACnCb,GAAGgB,YAAY9uC,EAAU4uC,KAAM,EAAG,IAClCd,GAAGgB,YAAY9uC,EAAU6uC,MAAO,EAAG,GAT9CtC,EAAMvwC,OAASA,EAWfuwC,EAAM9jC,GAAKA,EAvBf,CAwBG8jC,KAAUA,GAAQ,KAMrB,SAAWC,GAIP,SAASxwC,EAAOwzB,EAAOuf,GACnB,MAAO,CACHvf,MAAOA,EACPuf,MAAOA,GAOf,SAAStmC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAO,GAAM8M,GAAGzI,EAAUwvB,QAAU+c,GAAM9jC,GAAGzI,EAAU+uC,OAN3DvC,EAAiBxwC,OAASA,EAQ1BwwC,EAAiB/jC,GAAKA,EAlB1B,CAmBG+jC,KAAqBA,GAAmB,KAM3C,SAAWC,GAIP,SAASzwC,EAAOgzC,EAAOC,EAAUC,GAC7B,MAAO,CACHF,MAAOA,EACPC,SAAUA,EACVC,oBAAqBA,GAO7B,SAASzmC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGO,OAAOruC,EAAUgvC,SACnBlB,GAAG1wC,UAAU4C,EAAUivC,WAAa/B,GAASzkC,GAAGzI,MAChD8tC,GAAG1wC,UAAU4C,EAAUkvC,sBAAwBpB,GAAGqB,WAAWnvC,EAAUkvC,oBAAqBhC,GAASzkC,KARjHgkC,EAAkBzwC,OAASA,EAU3BywC,EAAkBhkC,GAAKA,EArB3B,CAsBGgkC,KAAsBA,GAAoB,KAK7C,SAAWC,GAIPA,EAAiB,WAAa,UAI9BA,EAAiB,WAAa,UAI9BA,EAAiB,UAAY,SAZjC,CAaGA,KAAqBA,GAAmB,KAM3C,SAAWC,GAIP,SAAS3wC,EAAOozC,EAAWC,EAASC,EAAgBC,EAAcC,GAC9D,IAAIlnC,EAAS,CACT8mC,UAAWA,EACXC,QAASA,GAWb,OATIvB,GAAGM,QAAQkB,KACXhnC,EAAOgnC,eAAiBA,GAExBxB,GAAGM,QAAQmB,KACXjnC,EAAOinC,aAAeA,GAEtBzB,GAAGM,QAAQoB,KACXlnC,EAAOknC,KAAOA,GAEXlnC,EAMX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAG1B,SAASpsC,EAAUovC,YAActB,GAAG1B,SAASpsC,EAAUovC,aACzDtB,GAAG1wC,UAAU4C,EAAUsvC,iBAAmBxB,GAAG1B,SAASpsC,EAAUsvC,mBAChExB,GAAG1wC,UAAU4C,EAAUuvC,eAAiBzB,GAAG1B,SAASpsC,EAAUuvC,iBAC9DzB,GAAG1wC,UAAU4C,EAAUwvC,OAAS1B,GAAGO,OAAOruC,EAAUwvC,OAThE7C,EAAa3wC,OAASA,EAWtB2wC,EAAalkC,GAAKA,EA/BtB,CAgCGkkC,KAAiBA,GAAe,KAMnC,SAAWC,GAIP,SAAS5wC,EAAOyzC,EAAU/nC,GACtB,MAAO,CACH+nC,SAAUA,EACV/nC,QAASA,GAOjB,SAASe,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAcqsC,GAAS5jC,GAAGzI,EAAUyvC,WAAa3B,GAAGO,OAAOruC,EAAU0H,SAN3FklC,EAA6B5wC,OAASA,EAQtC4wC,EAA6BnkC,GAAKA,EAlBtC,CAmBGmkC,KAAiCA,GAA+B,KAKnE,SAAWC,GAIPA,EAAmBppC,MAAQ,EAI3BopC,EAAmB6C,QAAU,EAI7B7C,EAAmB8C,YAAc,EAIjC9C,EAAmB+C,KAAO,EAhB9B,CAiBG/C,KAAuBA,GAAqB,KAO/C,SAAWC,GAOPA,EAAc+C,YAAc,EAM5B/C,EAAcgD,WAAa,EAb/B,CAcGhD,KAAkBA,GAAgB,KAOrC,SAAWC,GACP,SAAStkC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,YAAqByB,IAAd4C,GAAyC,OAAdA,GAAsB8tC,GAAGO,OAAOruC,EAAU+vC,MAEhFhD,EAAgBtkC,GAAKA,EALzB,CAMGskC,KAAoBA,GAAkB,KAMzC,SAAWC,GAIP,SAAShxC,EAAOwzB,EAAO9nB,EAASsoC,EAAUl6B,EAAMkI,EAAQiyB,GACpD,IAAI3nC,EAAS,CAAEknB,MAAOA,EAAO9nB,QAASA,GAatC,OAZIomC,GAAGM,QAAQ4B,KACX1nC,EAAO0nC,SAAWA,GAElBlC,GAAGM,QAAQt4B,KACXxN,EAAOwN,KAAOA,GAEdg4B,GAAGM,QAAQpwB,KACX1V,EAAO0V,OAASA,GAEhB8vB,GAAGM,QAAQ6B,KACX3nC,EAAO2nC,mBAAqBA,GAEzB3nC,EAMX,SAASG,EAAG9M,GACR,IAAIe,EACAsD,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IACX,GAAMyI,GAAGzI,EAAUwvB,QACnBse,GAAGO,OAAOruC,EAAU0H,WACnBomC,GAAGoC,OAAOlwC,EAAUgwC,WAAalC,GAAG1wC,UAAU4C,EAAUgwC,aACxDlC,GAAG3B,QAAQnsC,EAAU8V,OAASg4B,GAAGO,OAAOruC,EAAU8V,OAASg4B,GAAG1wC,UAAU4C,EAAU8V,SAClFg4B,GAAG1wC,UAAU4C,EAAUmwC,kBAAqBrC,GAAGO,OAA4C,QAApC3xC,EAAKsD,EAAUmwC,uBAAoC,IAAPzzC,OAAgB,EAASA,EAAGqzC,SAC/HjC,GAAGO,OAAOruC,EAAUge,SAAW8vB,GAAG1wC,UAAU4C,EAAUge,WACtD8vB,GAAG1wC,UAAU4C,EAAUiwC,qBAAuBnC,GAAGqB,WAAWnvC,EAAUiwC,mBAAoBrD,GAA6BnkC,KAdnIukC,EAAWhxC,OAASA,EAgBpBgxC,EAAWvkC,GAAKA,EApCpB,CAqCGukC,KAAeA,GAAa,KAM/B,SAAWC,GAIP,SAASjxC,EAAOwK,EAAO4pC,GAEnB,IADA,IAAIjqC,EAAO,GACF8lC,EAAK,EAAGA,EAAK5qC,UAAUtB,OAAQksC,IACpC9lC,EAAK8lC,EAAK,GAAK5qC,UAAU4qC,GAE7B,IAAI3jC,EAAS,CAAE9B,MAAOA,EAAO4pC,QAASA,GAItC,OAHItC,GAAGM,QAAQjoC,IAASA,EAAKpG,OAAS,IAClCuI,EAAOjH,UAAY8E,GAEhBmC,EAMX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAGO,OAAOruC,EAAUwG,QAAUsnC,GAAGO,OAAOruC,EAAUowC,SANtFnD,EAAQjxC,OAASA,EAQjBixC,EAAQxkC,GAAKA,EAvBjB,CAwBGwkC,KAAYA,GAAU,KAMzB,SAAWC,GAMP,SAAS7oC,EAAQmrB,EAAO6gB,GACpB,MAAO,CAAE7gB,MAAOA,EAAO6gB,QAASA,GAQpC,SAASC,EAAO7gB,EAAU4gB,GACtB,MAAO,CAAE7gB,MAAO,CAAEpb,MAAOqb,EAAU/D,IAAK+D,GAAY4gB,QAASA,GAOjE,SAASE,EAAI/gB,GACT,MAAO,CAAEA,MAAOA,EAAO6gB,QAAS,IAGpC,SAAS5nC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGC,cAAc/tC,IACjB8tC,GAAGO,OAAOruC,EAAUqwC,UACpB,GAAM5nC,GAAGzI,EAAUwvB,OAtB9B0d,EAAS7oC,QAAUA,EASnB6oC,EAASoD,OAASA,EAQlBpD,EAASqD,IAAMA,EAOfrD,EAASzkC,GAAKA,EAjClB,CAkCGykC,KAAaA,GAAW,KAE3B,SAAWC,GACP,SAASnxC,EAAOgzC,EAAOwB,EAAmBC,GACtC,IAAInoC,EAAS,CAAE0mC,MAAOA,GAOtB,YAN0B5xC,IAAtBozC,IACAloC,EAAOkoC,kBAAoBA,QAEXpzC,IAAhBqzC,IACAnoC,EAAOmoC,YAAcA,GAElBnoC,EAGX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,YAAqByB,IAAd4C,GAA2B8tC,GAAGC,cAAc/tC,IAAc8tC,GAAGO,OAAOruC,EAAUgvC,SAChFlB,GAAG4C,QAAQ1wC,EAAUwwC,yBAAsDpzC,IAAhC4C,EAAUwwC,qBACrD1C,GAAGO,OAAOruC,EAAUywC,mBAA0CrzC,IAA1B4C,EAAUywC,aALvDtD,EAAiBnxC,OAASA,EAO1BmxC,EAAiB1kC,GAAKA,EAlB1B,CAmBG0kC,KAAqBA,GAAmB,KAE3C,SAAWC,GACP,SAAS3kC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,MAA4B,kBAAdqE,EAElBotC,EAA2B3kC,GAAKA,EALpC,CAMG2kC,KAA+BA,GAA6B,KAE/D,SAAWC,GAQP,SAAShpC,EAAQmrB,EAAO6gB,EAASM,GAC7B,MAAO,CAAEnhB,MAAOA,EAAO6gB,QAASA,EAASO,aAAcD,GAU3D,SAASL,EAAO7gB,EAAU4gB,EAASM,GAC/B,MAAO,CAAEnhB,MAAO,CAAEpb,MAAOqb,EAAU/D,IAAK+D,GAAY4gB,QAASA,EAASO,aAAcD,GASxF,SAASJ,EAAI/gB,EAAOmhB,GAChB,MAAO,CAAEnhB,MAAOA,EAAO6gB,QAAS,GAAIO,aAAcD,GAGtD,SAASloC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOuxC,GAASzkC,GAAGzI,KAAemtC,GAAiB1kC,GAAGzI,EAAU4wC,eAAiBxD,GAA2B3kC,GAAGzI,EAAU4wC,eAxB7HvD,EAAkBhpC,QAAUA,EAW5BgpC,EAAkBiD,OAASA,EAU3BjD,EAAkBkD,IAAMA,EAKxBlD,EAAkB5kC,GAAKA,EArC3B,CAsCG4kC,KAAsBA,GAAoB,KAM7C,SAAWC,GAIP,SAAStxC,EAAO60C,EAAcvH,GAC1B,MAAO,CAAEuH,aAAcA,EAAcvH,MAAOA,GAGhD,SAAS7gC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IACX8wC,GAAwCroC,GAAGzI,EAAU6wC,eACrD5tC,MAAMsJ,QAAQvM,EAAUspC,OALnCgE,EAAiBtxC,OAASA,EAO1BsxC,EAAiB7kC,GAAKA,EAd1B,CAeG6kC,KAAqBA,GAAmB,KAE3C,SAAWC,GACP,SAASvxC,EAAOmxB,EAAKja,EAASy9B,GAC1B,IAAIroC,EAAS,CACTknC,KAAM,SACNriB,IAAKA,GAQT,YANgB/vB,IAAZ8V,QAAgD9V,IAAtB8V,EAAQ69B,gBAAsD3zC,IAA3B8V,EAAQ89B,iBACrE1oC,EAAO4K,QAAUA,QAEF9V,IAAfuzC,IACAroC,EAAOsoC,aAAeD,GAEnBroC,EAGX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,GAAgC,WAAnBA,EAAUwvC,MAAqB1B,GAAGO,OAAOruC,EAAUmtB,YAA+B/vB,IAAtB4C,EAAUkT,eACpD9V,IAAhC4C,EAAUkT,QAAQ69B,WAA2BjD,GAAG4C,QAAQ1wC,EAAUkT,QAAQ69B,mBAAqD3zC,IAArC4C,EAAUkT,QAAQ89B,gBAAgClD,GAAG4C,QAAQ1wC,EAAUkT,QAAQ89B,yBAAkD5zC,IAA3B4C,EAAU4wC,cAA8BxD,GAA2B3kC,GAAGzI,EAAU4wC,eAJ1RrD,EAAWvxC,OAASA,EAMpBuxC,EAAW9kC,GAAKA,EApBpB,CAqBG8kC,KAAeA,GAAa,KAE/B,SAAWC,GACP,SAASxxC,EAAOi1C,EAAQC,EAAQh+B,EAASy9B,GACrC,IAAIroC,EAAS,CACTknC,KAAM,SACNyB,OAAQA,EACRC,OAAQA,GAQZ,YANgB9zC,IAAZ8V,QAAgD9V,IAAtB8V,EAAQ69B,gBAAsD3zC,IAA3B8V,EAAQ89B,iBACrE1oC,EAAO4K,QAAUA,QAEF9V,IAAfuzC,IACAroC,EAAOsoC,aAAeD,GAEnBroC,EAGX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,GAAgC,WAAnBA,EAAUwvC,MAAqB1B,GAAGO,OAAOruC,EAAUixC,SAAWnD,GAAGO,OAAOruC,EAAUkxC,eAAkC9zC,IAAtB4C,EAAUkT,eACtF9V,IAAhC4C,EAAUkT,QAAQ69B,WAA2BjD,GAAG4C,QAAQ1wC,EAAUkT,QAAQ69B,mBAAqD3zC,IAArC4C,EAAUkT,QAAQ89B,gBAAgClD,GAAG4C,QAAQ1wC,EAAUkT,QAAQ89B,yBAAkD5zC,IAA3B4C,EAAU4wC,cAA8BxD,GAA2B3kC,GAAGzI,EAAU4wC,eAJ1RpD,EAAWxxC,OAASA,EAMpBwxC,EAAW/kC,GAAKA,EArBpB,CAsBG+kC,KAAeA,GAAa,KAE/B,SAAWC,GACP,SAASzxC,EAAOmxB,EAAKja,EAASy9B,GAC1B,IAAIroC,EAAS,CACTknC,KAAM,SACNriB,IAAKA,GAQT,YANgB/vB,IAAZ8V,QAAgD9V,IAAtB8V,EAAQi+B,gBAAyD/zC,IAA9B8V,EAAQk+B,oBACrE9oC,EAAO4K,QAAUA,QAEF9V,IAAfuzC,IACAroC,EAAOsoC,aAAeD,GAEnBroC,EAGX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,GAAgC,WAAnBA,EAAUwvC,MAAqB1B,GAAGO,OAAOruC,EAAUmtB,YAA+B/vB,IAAtB4C,EAAUkT,eACpD9V,IAAhC4C,EAAUkT,QAAQi+B,WAA2BrD,GAAG4C,QAAQ1wC,EAAUkT,QAAQi+B,mBAAwD/zC,IAAxC4C,EAAUkT,QAAQk+B,mBAAmCtD,GAAG4C,QAAQ1wC,EAAUkT,QAAQk+B,4BAAqDh0C,IAA3B4C,EAAU4wC,cAA8BxD,GAA2B3kC,GAAGzI,EAAU4wC,eAJhSnD,EAAWzxC,OAASA,EAMpByxC,EAAWhlC,GAAKA,EApBpB,CAqBGglC,KAAeA,GAAa,KAE/B,SAAWC,GACP,SAASjlC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,SACoB5C,IAAtB4C,EAAUwe,cAAuDphB,IAA9B4C,EAAUqxC,wBACfj0C,IAA9B4C,EAAUqxC,iBAAiCrxC,EAAUqxC,gBAAgBC,OAAM,SAAUlsB,GAClF,OAAI0oB,GAAGO,OAAOjpB,EAAOoqB,MACVjC,GAAW9kC,GAAG2c,IAAWooB,GAAW/kC,GAAG2c,IAAWqoB,GAAWhlC,GAAG2c,GAGhEkoB,GAAiB7kC,GAAG2c,OAI3CsoB,EAAcjlC,GAAKA,EAdvB,CAeGilC,KAAkBA,GAAgB,KACrC,IAmTW6D,GAuBAC,GAwBAV,GAwBAW,GA6BAC,GAqBAC,GAcA,GAgCAC,GAwBA,GAYAC,GAwBAC,GAyBAC,GAeAC,GAaAC,GAoBAC,GAiBAC,GAiBAC,GAwBA,GAmBAC,GAkBA,GAiCA,GAOAC,GAwBAC,GA4CAC,GA0EAC,GAsBAC,GAqCAC,GA0BAC,GAsBAC,GAsBAC,GAr/BPC,GAAoC,WACpC,SAASA,EAAmBzJ,EAAO0J,GAC/B9vC,KAAKomC,MAAQA,EACbpmC,KAAK8vC,kBAAoBA,EA4E7B,OA1EAD,EAAmBz2C,UAAUg0C,OAAS,SAAU7gB,EAAU4gB,EAASM,GAC/D,IAAIsC,EACAhzC,EAcJ,QAbmB7C,IAAfuzC,EACAsC,EAAO/F,GAASoD,OAAO7gB,EAAU4gB,GAE5BjD,GAA2B3kC,GAAGkoC,IACnC1wC,EAAK0wC,EACLsC,EAAO5F,GAAkBiD,OAAO7gB,EAAU4gB,EAASM,KAGnDztC,KAAKgwC,wBAAwBhwC,KAAK8vC,mBAClC/yC,EAAKiD,KAAK8vC,kBAAkBG,OAAOxC,GACnCsC,EAAO5F,GAAkBiD,OAAO7gB,EAAU4gB,EAASpwC,IAEvDiD,KAAKomC,MAAMhpC,KAAK2yC,QACL71C,IAAP6C,EACA,OAAOA,GAGf8yC,EAAmBz2C,UAAU+H,QAAU,SAAUmrB,EAAO6gB,EAASM,GAC7D,IAAIsC,EACAhzC,EAcJ,QAbmB7C,IAAfuzC,EACAsC,EAAO/F,GAAS7oC,QAAQmrB,EAAO6gB,GAE1BjD,GAA2B3kC,GAAGkoC,IACnC1wC,EAAK0wC,EACLsC,EAAO5F,GAAkBhpC,QAAQmrB,EAAO6gB,EAASM,KAGjDztC,KAAKgwC,wBAAwBhwC,KAAK8vC,mBAClC/yC,EAAKiD,KAAK8vC,kBAAkBG,OAAOxC,GACnCsC,EAAO5F,GAAkBhpC,QAAQmrB,EAAO6gB,EAASpwC,IAErDiD,KAAKomC,MAAMhpC,KAAK2yC,QACL71C,IAAP6C,EACA,OAAOA,GAGf8yC,EAAmBz2C,UAAU0b,OAAS,SAAUwX,EAAOmhB,GACnD,IAAIsC,EACAhzC,EAcJ,QAbmB7C,IAAfuzC,EACAsC,EAAO/F,GAASqD,IAAI/gB,GAEf4d,GAA2B3kC,GAAGkoC,IACnC1wC,EAAK0wC,EACLsC,EAAO5F,GAAkBkD,IAAI/gB,EAAOmhB,KAGpCztC,KAAKgwC,wBAAwBhwC,KAAK8vC,mBAClC/yC,EAAKiD,KAAK8vC,kBAAkBG,OAAOxC,GACnCsC,EAAO5F,GAAkBkD,IAAI/gB,EAAOvvB,IAExCiD,KAAKomC,MAAMhpC,KAAK2yC,QACL71C,IAAP6C,EACA,OAAOA,GAGf8yC,EAAmBz2C,UAAU6Q,IAAM,SAAU8lC,GACzC/vC,KAAKomC,MAAMhpC,KAAK2yC,IAEpBF,EAAmBz2C,UAAUgsC,IAAM,WAC/B,OAAOplC,KAAKomC,OAEhByJ,EAAmBz2C,UAAUyQ,MAAQ,WACjC7J,KAAKomC,MAAMppC,OAAO,EAAGgD,KAAKomC,MAAMvpC,SAEpCgzC,EAAmBz2C,UAAU42C,wBAA0B,SAAUv3C,GAC7D,QAAcyB,IAAVzB,EACA,MAAM,IAAI8H,MAAM,qEAGjBsvC,EA/E4B,GAoFnCK,GAAmC,WACnC,SAASA,EAAkBC,GACvBnwC,KAAKowC,kBAA+Bl2C,IAAhBi2C,EAA4Bj4C,OAAOY,OAAO,MAAQq3C,EACtEnwC,KAAKqwC,SAAW,EAChBrwC,KAAKwK,MAAQ,EAmCjB,OAjCA0lC,EAAkB92C,UAAUgsC,IAAM,WAC9B,OAAOplC,KAAKowC,cAEhBl4C,OAAOC,eAAe+3C,EAAkB92C,UAAW,OAAQ,CACvDf,IAAK,WACD,OAAO2H,KAAKwK,OAEhBpS,YAAY,EACZ0I,cAAc,IAElBovC,EAAkB92C,UAAU62C,OAAS,SAAUK,EAAgB7C,GAC3D,IAAI1wC,EAQJ,GAPImtC,GAA2B3kC,GAAG+qC,GAC9BvzC,EAAKuzC,GAGLvzC,EAAKiD,KAAKuwC,SACV9C,EAAa6C,QAEap2C,IAA1B8F,KAAKowC,aAAarzC,GAClB,MAAM,IAAIwD,MAAM,MAAQxD,EAAK,uBAEjC,QAAmB7C,IAAfuzC,EACA,MAAM,IAAIltC,MAAM,iCAAmCxD,GAIvD,OAFAiD,KAAKowC,aAAarzC,GAAM0wC,EACxBztC,KAAKwK,QACEzN,GAEXmzC,EAAkB92C,UAAUm3C,OAAS,WAEjC,OADAvwC,KAAKqwC,WACErwC,KAAKqwC,SAASzvC,YAElBsvC,EAvC2B,IA4CD,WACjC,SAASM,EAAgBC,GACrB,IAAItrC,EAAQnF,KACZA,KAAK0wC,iBAAmBx4C,OAAOY,OAAO,WAChBoB,IAAlBu2C,GACAzwC,KAAK2wC,eAAiBF,EAClBA,EAActC,iBACdnuC,KAAK4wC,mBAAqB,IAAIV,GAAkBO,EAAcX,mBAC9DW,EAAcX,kBAAoB9vC,KAAK4wC,mBAAmBxL,MAC1DqL,EAActC,gBAAgB1pC,SAAQ,SAAUyd,GAC5C,GAAIkoB,GAAiB7kC,GAAG2c,GAAS,CAC7B,IAAI2uB,EAAiB,IAAIhB,GAAmB3tB,EAAOkkB,MAAOjhC,EAAMyrC,oBAChEzrC,EAAMurC,iBAAiBxuB,EAAOyrB,aAAa1jB,KAAO4mB,OAIrDJ,EAAcn1B,SACnBpjB,OAAOmtC,KAAKoL,EAAcn1B,SAAS7W,SAAQ,SAAU1L,GACjD,IAAI83C,EAAiB,IAAIhB,GAAmBY,EAAcn1B,QAAQviB,IAClEoM,EAAMurC,iBAAiB33C,GAAO83C,MAKtC7wC,KAAK2wC,eAAiB,GAG9Bz4C,OAAOC,eAAeq4C,EAAgBp3C,UAAW,OAAQ,CAKrDf,IAAK,WAUD,OATA2H,KAAK8wC,2BAC2B52C,IAA5B8F,KAAK4wC,qBACgC,IAAjC5wC,KAAK4wC,mBAAmB9/B,KACxB9Q,KAAK2wC,eAAeb,uBAAoB51C,EAGxC8F,KAAK2wC,eAAeb,kBAAoB9vC,KAAK4wC,mBAAmBxL,OAGjEplC,KAAK2wC,gBAEhBv4C,YAAY,EACZ0I,cAAc,IAElB0vC,EAAgBp3C,UAAU23C,kBAAoB,SAAUh4C,GACpD,GAAI60C,GAAwCroC,GAAGxM,GAAM,CAEjD,GADAiH,KAAK8wC,2BACuC52C,IAAxC8F,KAAK2wC,eAAexC,gBACpB,MAAM,IAAI5tC,MAAM,0DAEpB,IAAIotC,EAAe,CAAE1jB,IAAKlxB,EAAIkxB,IAAK+mB,QAASj4C,EAAIi4C,SAC5C5rC,EAASpF,KAAK0wC,iBAAiB/C,EAAa1jB,KAChD,IAAK7kB,EAAQ,CACT,IAAIghC,EAAQ,GACR6K,EAAmB,CACnBtD,aAAcA,EACdvH,MAAOA,GAEXpmC,KAAK2wC,eAAexC,gBAAgB/wC,KAAK6zC,GACzC7rC,EAAS,IAAIyqC,GAAmBzJ,EAAOpmC,KAAK4wC,oBAC5C5wC,KAAK0wC,iBAAiB/C,EAAa1jB,KAAO7kB,EAE9C,OAAOA,EAIP,GADApF,KAAKkxC,mBAC+Bh3C,IAAhC8F,KAAK2wC,eAAer1B,QACpB,MAAM,IAAI/a,MAAM,kEAEhB6E,EAASpF,KAAK0wC,iBAAiB33C,GACnC,IAAKqM,EAAQ,CACLghC,EAAQ,GACZpmC,KAAK2wC,eAAer1B,QAAQviB,GAAOqtC,EACnChhC,EAAS,IAAIyqC,GAAmBzJ,GAChCpmC,KAAK0wC,iBAAiB33C,GAAOqM,EAEjC,OAAOA,GAGforC,EAAgBp3C,UAAU03C,oBAAsB,gBACA52C,IAAxC8F,KAAK2wC,eAAexC,sBAAiEj0C,IAAhC8F,KAAK2wC,eAAer1B,UACzEtb,KAAK4wC,mBAAqB,IAAIV,GAC9BlwC,KAAK2wC,eAAexC,gBAAkB,GACtCnuC,KAAK2wC,eAAeb,kBAAoB9vC,KAAK4wC,mBAAmBxL,QAGxEoL,EAAgBp3C,UAAU83C,YAAc,gBACQh3C,IAAxC8F,KAAK2wC,eAAexC,sBAAiEj0C,IAAhC8F,KAAK2wC,eAAer1B,UACzEtb,KAAK2wC,eAAer1B,QAAUpjB,OAAOY,OAAO,QAGpD03C,EAAgBp3C,UAAU+3C,WAAa,SAAUlnB,EAAKmnB,EAAqBphC,GAEvE,GADAhQ,KAAK8wC,2BACuC52C,IAAxC8F,KAAK2wC,eAAexC,gBACpB,MAAM,IAAI5tC,MAAM,0DAEpB,IAAIktC,EAOA4D,EACAt0C,EASJ,GAhBIktC,GAAiB1kC,GAAG6rC,IAAwBlH,GAA2B3kC,GAAG6rC,GAC1E3D,EAAa2D,EAGbphC,EAAUohC,OAIKl3C,IAAfuzC,EACA4D,EAAYhH,GAAWvxC,OAAOmxB,EAAKja,IAGnCjT,EAAKmtC,GAA2B3kC,GAAGkoC,GAAcA,EAAaztC,KAAK4wC,mBAAmBX,OAAOxC,GAC7F4D,EAAYhH,GAAWvxC,OAAOmxB,EAAKja,EAASjT,IAEhDiD,KAAK2wC,eAAexC,gBAAgB/wC,KAAKi0C,QAC9Bn3C,IAAP6C,EACA,OAAOA,GAGfyzC,EAAgBp3C,UAAUk4C,WAAa,SAAUvD,EAAQC,EAAQoD,EAAqBphC,GAElF,GADAhQ,KAAK8wC,2BACuC52C,IAAxC8F,KAAK2wC,eAAexC,gBACpB,MAAM,IAAI5tC,MAAM,0DAEpB,IAAIktC,EAOA4D,EACAt0C,EASJ,GAhBIktC,GAAiB1kC,GAAG6rC,IAAwBlH,GAA2B3kC,GAAG6rC,GAC1E3D,EAAa2D,EAGbphC,EAAUohC,OAIKl3C,IAAfuzC,EACA4D,EAAY/G,GAAWxxC,OAAOi1C,EAAQC,EAAQh+B,IAG9CjT,EAAKmtC,GAA2B3kC,GAAGkoC,GAAcA,EAAaztC,KAAK4wC,mBAAmBX,OAAOxC,GAC7F4D,EAAY/G,GAAWxxC,OAAOi1C,EAAQC,EAAQh+B,EAASjT,IAE3DiD,KAAK2wC,eAAexC,gBAAgB/wC,KAAKi0C,QAC9Bn3C,IAAP6C,EACA,OAAOA,GAGfyzC,EAAgBp3C,UAAUm4C,WAAa,SAAUtnB,EAAKmnB,EAAqBphC,GAEvE,GADAhQ,KAAK8wC,2BACuC52C,IAAxC8F,KAAK2wC,eAAexC,gBACpB,MAAM,IAAI5tC,MAAM,0DAEpB,IAAIktC,EAOA4D,EACAt0C,EASJ,GAhBIktC,GAAiB1kC,GAAG6rC,IAAwBlH,GAA2B3kC,GAAG6rC,GAC1E3D,EAAa2D,EAGbphC,EAAUohC,OAIKl3C,IAAfuzC,EACA4D,EAAY9G,GAAWzxC,OAAOmxB,EAAKja,IAGnCjT,EAAKmtC,GAA2B3kC,GAAGkoC,GAAcA,EAAaztC,KAAK4wC,mBAAmBX,OAAOxC,GAC7F4D,EAAY9G,GAAWzxC,OAAOmxB,EAAKja,EAASjT,IAEhDiD,KAAK2wC,eAAexC,gBAAgB/wC,KAAKi0C,QAC9Bn3C,IAAP6C,EACA,OAAOA,IAzKiB,IAoLpC,SAAWsxC,GAKP,SAASv1C,EAAOmxB,GACZ,MAAO,CAAEA,IAAKA,GAMlB,SAAS1kB,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAGO,OAAOruC,EAAUmtB,KANxDokB,EAAuBv1C,OAASA,EAQhCu1C,EAAuB9oC,GAAKA,GAhBhC,CAiBG8oC,KAA2BA,GAAyB,KAMvD,SAAWC,GAMP,SAASx1C,EAAOmxB,EAAK+mB,GACjB,MAAO,CAAE/mB,IAAKA,EAAK+mB,QAASA,GAMhC,SAASzrC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAGO,OAAOruC,EAAUmtB,MAAQ2gB,GAAG3B,QAAQnsC,EAAUk0C,SANrF1C,EAAgCx1C,OAASA,EAQzCw1C,EAAgC/oC,GAAKA,EAjBzC,CAkBG+oC,KAAoCA,GAAkC,KAMzE,SAAWV,GAMP,SAAS90C,EAAOmxB,EAAK+mB,GACjB,MAAO,CAAE/mB,IAAKA,EAAK+mB,QAASA,GAMhC,SAASzrC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAGO,OAAOruC,EAAUmtB,OAA+B,OAAtBntB,EAAUk0C,SAAoBpG,GAAG3B,QAAQnsC,EAAUk0C,UANpHpD,EAAwC90C,OAASA,EAQjD80C,EAAwCroC,GAAKA,EAjBjD,CAkBGqoC,KAA4CA,GAA0C,KAMzF,SAAWW,GAQP,SAASz1C,EAAOmxB,EAAKunB,EAAYR,EAAS1b,GACtC,MAAO,CAAErL,IAAKA,EAAKunB,WAAYA,EAAYR,QAASA,EAAS1b,KAAMA,GAMvE,SAAS/vB,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAGO,OAAOruC,EAAUmtB,MAAQ2gB,GAAGO,OAAOruC,EAAU00C,aAAe5G,GAAG3B,QAAQnsC,EAAUk0C,UAAYpG,GAAGO,OAAOruC,EAAUw4B,MANxJiZ,EAAiBz1C,OAASA,EAQ1By1C,EAAiBhpC,GAAKA,EAnB1B,CAoBGgpC,KAAqBA,GAAmB,KAS3C,SAAWC,GAIPA,EAAWiD,UAAY,YAIvBjD,EAAWkD,SAAW,WAR1B,CASGlD,KAAeA,GAAa,KAC/B,SAAWA,GAIP,SAASjpC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,IAAc0xC,EAAWiD,WAAa30C,IAAc0xC,EAAWkD,SAE1ElD,EAAWjpC,GAAKA,EARpB,CASGipC,KAAeA,GAAa,KAE/B,SAAWC,GAIP,SAASlpC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGC,cAAcpyC,IAAU+1C,GAAWjpC,GAAGzI,EAAUwvC,OAAS1B,GAAGO,OAAOruC,EAAUrE,OAE3Fg2C,EAAclpC,GAAKA,EARvB,CASGkpC,KAAkBA,GAAgB,KAKrC,SAAWxQ,GACPA,EAAmB0T,KAAO,EAC1B1T,EAAmB2T,OAAS,EAC5B3T,EAAmB4T,SAAW,EAC9B5T,EAAmB6T,YAAc,EACjC7T,EAAmB8T,MAAQ,EAC3B9T,EAAmB+T,SAAW,EAC9B/T,EAAmBgU,MAAQ,EAC3BhU,EAAmBiU,UAAY,EAC/BjU,EAAmBkU,OAAS,EAC5BlU,EAAmBmU,SAAW,GAC9BnU,EAAmBoU,KAAO,GAC1BpU,EAAmBqU,MAAQ,GAC3BrU,EAAmBsU,KAAO,GAC1BtU,EAAmBuU,QAAU,GAC7BvU,EAAmBwU,QAAU,GAC7BxU,EAAmBoL,MAAQ,GAC3BpL,EAAmByU,KAAO,GAC1BzU,EAAmB0U,UAAY,GAC/B1U,EAAmB2U,OAAS,GAC5B3U,EAAmB4U,WAAa,GAChC5U,EAAmB6U,SAAW,GAC9B7U,EAAmB8U,OAAS,GAC5B9U,EAAmBryB,MAAQ,GAC3BqyB,EAAmB+U,SAAW,GAC9B/U,EAAmBgV,cAAgB,GAzBvC,CA0BG,KAAuB,GAAqB,KAM/C,SAAWvE,GAIPA,EAAiB+C,UAAY,EAW7B/C,EAAiB+D,QAAU,EAf/B,CAgBG/D,KAAqBA,GAAmB,KAQ3C,SAAWxQ,GAIPA,EAAkB0O,WAAa,EAJnC,CAKG,KAAsB,GAAoB,KAO7C,SAAW+B,GAIP,SAAS71C,EAAOq0C,EAASC,EAAQjsC,GAC7B,MAAO,CAAEgsC,QAASA,EAASC,OAAQA,EAAQjsC,QAASA,GAMxD,SAASoE,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,GAAa8tC,GAAGO,OAAOruC,EAAUqwC,UAAY,GAAM5nC,GAAGzI,EAAUswC,SAAW,GAAM7nC,GAAGzI,EAAUqE,SANzGwtC,EAAkB71C,OAASA,EAQ3B61C,EAAkBppC,GAAKA,EAf3B,CAgBGopC,KAAsBA,GAAoB,KAQ7C,SAAWC,GAQPA,EAAesE,KAAO,EAUtBtE,EAAeuE,kBAAoB,EAlBvC,CAmBGvE,KAAmBA,GAAiB,KAMvC,SAAWC,GAKP,SAAS/1C,EAAOgzC,GACZ,MAAO,CAAEA,MAAOA,GAEpB+C,EAAe/1C,OAASA,EAR5B,CASG+1C,KAAmBA,GAAiB,KAMvC,SAAWC,GAOP,SAASh2C,EAAOs6C,EAAOC,GACnB,MAAO,CAAED,MAAOA,GAAgB,GAAIC,eAAgBA,GAExDvE,EAAeh2C,OAASA,EAV5B,CAWGg2C,KAAmBA,GAAiB,KAEvC,SAAWC,GAMP,SAASuE,EAAcC,GACnB,OAAOA,EAAUpyC,QAAQ,wBAAyB,QAMtD,SAASoE,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGO,OAAOruC,IAAe8tC,GAAGC,cAAc/tC,IAAc8tC,GAAGO,OAAOruC,EAAUd,WAAa4uC,GAAGO,OAAOruC,EAAUrE,OANxHs2C,EAAauE,cAAgBA,EAQ7BvE,EAAaxpC,GAAKA,EAjBtB,CAkBGwpC,KAAiBA,GAAe,KAEnC,SAAWC,GAIP,SAASzpC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,QAASqE,GAAa8tC,GAAGC,cAAc/tC,KAAe2xC,GAAclpC,GAAGzI,EAAU02C,WAC7EzE,GAAaxpC,GAAGzI,EAAU02C,WAC1B5I,GAAGqB,WAAWnvC,EAAU02C,SAAUzE,GAAaxpC,YAAyBrL,IAAhBzB,EAAM6zB,OAAuB,GAAM/mB,GAAG9M,EAAM6zB,QAE5G0iB,EAAMzpC,GAAKA,EAVf,CAWGypC,KAAUA,GAAQ,KAMrB,SAAWC,GAOP,SAASn2C,EAAOgzC,EAAO2H,GACnB,OAAOA,EAAgB,CAAE3H,MAAOA,EAAO2H,cAAeA,GAAkB,CAAE3H,MAAOA,GAErFmD,EAAqBn2C,OAASA,EAVlC,CAWGm2C,KAAyBA,GAAuB,KAMnD,SAAWC,GACP,SAASp2C,EAAOgzC,EAAO2H,GAEnB,IADA,IAAIC,EAAa,GACR3K,EAAK,EAAGA,EAAK5qC,UAAUtB,OAAQksC,IACpC2K,EAAW3K,EAAK,GAAK5qC,UAAU4qC,GAEnC,IAAI3jC,EAAS,CAAE0mC,MAAOA,GAUtB,OATIlB,GAAGM,QAAQuI,KACXruC,EAAOquC,cAAgBA,GAEvB7I,GAAGM,QAAQwI,GACXtuC,EAAOsuC,WAAaA,EAGpBtuC,EAAOsuC,WAAa,GAEjBtuC,EAEX8pC,EAAqBp2C,OAASA,EAlBlC,CAmBGo2C,KAAyBA,GAAuB,KAKnD,SAAW3Q,GAIPA,EAAsBoT,KAAO,EAI7BpT,EAAsBoV,KAAO,EAI7BpV,EAAsBqV,MAAQ,EAZlC,CAaG,KAA0B,GAAwB,KAMrD,SAAWzE,GAKP,SAASr2C,EAAOwzB,EAAOggB,GACnB,IAAIlnC,EAAS,CAAEknB,MAAOA,GAItB,OAHIse,GAAGoC,OAAOV,KACVlnC,EAAOknC,KAAOA,GAEXlnC,EAEX+pC,EAAkBr2C,OAASA,EAZ/B,CAaGq2C,KAAsBA,GAAoB,KAK7C,SAAWvP,GACPA,EAAW8S,KAAO,EAClB9S,EAAWuS,OAAS,EACpBvS,EAAWiU,UAAY,EACvBjU,EAAWkU,QAAU,EACrBlU,EAAWqS,MAAQ,EACnBrS,EAAWgS,OAAS,EACpBhS,EAAWwS,SAAW,EACtBxS,EAAWmS,MAAQ,EACnBnS,EAAWkS,YAAc,EACzBlS,EAAW2S,KAAO,GAClB3S,EAAWsS,UAAY,GACvBtS,EAAWiS,SAAW,GACtBjS,EAAWoS,SAAW,GACtBpS,EAAWkT,SAAW,GACtBlT,EAAWv9B,OAAS,GACpBu9B,EAAWx4B,OAAS,GACpBw4B,EAAWmU,QAAU,GACrBnU,EAAW7/B,MAAQ,GACnB6/B,EAAW1nC,OAAS,GACpB0nC,EAAWoU,IAAM,GACjBpU,EAAWqU,KAAO,GAClBrU,EAAWiT,WAAa,GACxBjT,EAAWmT,OAAS,GACpBnT,EAAWh0B,MAAQ,GACnBg0B,EAAWoT,SAAW,GACtBpT,EAAWqT,cAAgB,GA1B/B,CA2BG,KAAe,GAAa,KAM/B,SAAWpT,GAIPA,EAAU+M,WAAa,EAJ3B,CAKG,KAAc,GAAY,KAE7B,SAAWwC,GAUP,SAASt2C,EAAOf,EAAMu0C,EAAMhgB,EAAOrC,EAAKiqB,GACpC,IAAI9uC,EAAS,CACTrN,KAAMA,EACNu0C,KAAMA,EACNC,SAAU,CAAEtiB,IAAKA,EAAKqC,MAAOA,IAKjC,OAHI4nB,IACA9uC,EAAO8uC,cAAgBA,GAEpB9uC,EAEXgqC,EAAkBt2C,OAASA,EArB/B,CAsBGs2C,KAAsBA,GAAoB,KAE7C,SAAWC,GAWP,SAASv2C,EAAOf,EAAM2d,EAAQ42B,EAAMhgB,EAAO6nB,EAAgBprC,GACvD,IAAI3D,EAAS,CACTrN,KAAMA,EACN2d,OAAQA,EACR42B,KAAMA,EACNhgB,MAAOA,EACP6nB,eAAgBA,GAKpB,YAHiBj6C,IAAb6O,IACA3D,EAAO2D,SAAWA,GAEf3D,EAMX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,GACH8tC,GAAGO,OAAOruC,EAAU/E,OAAS6yC,GAAGoC,OAAOlwC,EAAUwvC,OACjD,GAAM/mC,GAAGzI,EAAUwvB,QAAU,GAAM/mB,GAAGzI,EAAUq3C,uBAC1Bj6C,IAArB4C,EAAU4Y,QAAwBk1B,GAAGO,OAAOruC,EAAU4Y,gBAC7Bxb,IAAzB4C,EAAUs3C,YAA4BxJ,GAAG4C,QAAQ1wC,EAAUs3C,oBACpCl6C,IAAvB4C,EAAUiM,UAA0BhJ,MAAMsJ,QAAQvM,EAAUiM,kBACzC7O,IAAnB4C,EAAUu3C,MAAsBt0C,MAAMsJ,QAAQvM,EAAUu3C,OAZjEhF,EAAev2C,OAASA,EAcxBu2C,EAAe9pC,GAAKA,EAtCxB,CAuCG8pC,KAAmBA,GAAiB,KAKvC,SAAWC,GAIPA,EAAegF,MAAQ,GAIvBhF,EAAeiF,SAAW,WAI1BjF,EAAekF,SAAW,WAY1BlF,EAAemF,gBAAkB,mBAWjCnF,EAAeoF,eAAiB,kBAahCpF,EAAeqF,gBAAkB,mBAMjCrF,EAAesF,OAAS,SAIxBtF,EAAeuF,sBAAwB,yBASvCvF,EAAewF,aAAe,gBAnElC,CAoEGxF,KAAmBA,GAAiB,KAMvC,SAAWC,GAIP,SAASz2C,EAAOi8C,EAAaC,GACzB,IAAI5vC,EAAS,CAAE2vC,YAAaA,GAI5B,YAHa76C,IAAT86C,GAA+B,OAATA,IACtB5vC,EAAO4vC,KAAOA,GAEX5vC,EAMX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAGqB,WAAWnvC,EAAUi4C,YAAajL,GAAWvkC,WAA2BrL,IAAnB4C,EAAUk4C,MAAsBpK,GAAGqB,WAAWnvC,EAAUk4C,KAAMpK,GAAGO,SAN7JoE,EAAkBz2C,OAASA,EAQ3By2C,EAAkBhqC,GAAKA,EAnB3B,CAoBGgqC,KAAsBA,GAAoB,KAE7C,SAAWC,GACP,SAAS12C,EAAOwK,EAAO2xC,EAAqB3I,GACxC,IAAIlnC,EAAS,CAAE9B,MAAOA,GAClB4xC,GAAY,EAchB,MAbmC,kBAAxBD,GACPC,GAAY,EACZ9vC,EAAOknC,KAAO2I,GAETlL,GAAQxkC,GAAG0vC,GAChB7vC,EAAO8nC,QAAU+H,EAGjB7vC,EAAO2qC,KAAOkF,EAEdC,QAAsBh7C,IAAToyC,IACblnC,EAAOknC,KAAOA,GAEXlnC,EAGX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOqE,GAAa8tC,GAAGO,OAAOruC,EAAUwG,cACTpJ,IAA1B4C,EAAUi4C,aAA6BnK,GAAGqB,WAAWnvC,EAAUi4C,YAAajL,GAAWvkC,YACpErL,IAAnB4C,EAAUwvC,MAAsB1B,GAAGO,OAAOruC,EAAUwvC,cACjCpyC,IAAnB4C,EAAUizC,WAA4C71C,IAAtB4C,EAAUowC,gBACpBhzC,IAAtB4C,EAAUowC,SAAyBnD,GAAQxkC,GAAGzI,EAAUowC,iBAC9BhzC,IAA1B4C,EAAUq4C,aAA6BvK,GAAG4C,QAAQ1wC,EAAUq4C,qBACzCj7C,IAAnB4C,EAAUizC,MAAsBvF,GAAcjlC,GAAGzI,EAAUizC,OATpEP,EAAW12C,OAASA,EAWpB02C,EAAWjqC,GAAKA,EA9BpB,CA+BGiqC,KAAeA,GAAa,KAM/B,SAAWC,GAIP,SAAS32C,EAAOwzB,EAAO5vB,GACnB,IAAI0I,EAAS,CAAEknB,MAAOA,GAItB,OAHIse,GAAGM,QAAQxuC,KACX0I,EAAO1I,KAAOA,GAEX0I,EAMX,SAASG,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc,GAAMyI,GAAGzI,EAAUwvB,SAAWse,GAAG1wC,UAAU4C,EAAUowC,UAAYnD,GAAQxkC,GAAGzI,EAAUowC,UAN1HuC,EAAS32C,OAASA,EAQlB22C,EAASlqC,GAAKA,EAnBlB,CAoBGkqC,KAAaA,GAAW,KAM3B,SAAWC,GAIP,SAAS52C,EAAOs8C,EAASC,GACrB,MAAO,CAAED,QAASA,EAASC,aAAcA,GAM7C,SAAS9vC,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAG1B,SAASpsC,EAAUs4C,UAAYxK,GAAG4C,QAAQ1wC,EAAUu4C,cAN3F3F,EAAkB52C,OAASA,EAQ3B42C,EAAkBnqC,GAAKA,EAf3B,CAgBGmqC,KAAsBA,GAAoB,KAM7C,SAAWC,GAIP,SAAS72C,EAAOwzB,EAAOgpB,EAAQ54C,GAC3B,MAAO,CAAE4vB,MAAOA,EAAOgpB,OAAQA,EAAQ54C,KAAMA,GAMjD,SAAS6I,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,OAAOmyC,GAAGM,QAAQpuC,IAAc,GAAMyI,GAAGzI,EAAUwvB,SAAWse,GAAG1wC,UAAU4C,EAAUw4C,SAAW1K,GAAGO,OAAOruC,EAAUw4C,SANxH3F,EAAa72C,OAASA,EAQtB62C,EAAapqC,GAAKA,EAftB,CAgBGoqC,KAAiBA,GAAe,KAMnC,SAAWC,GAMP,SAAS92C,EAAOwzB,EAAOhkB,GACnB,MAAO,CAAEgkB,MAAOA,EAAOhkB,OAAQA,GAGnC,SAAS/C,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,YAAqByB,IAAd4C,GAA2B,GAAMyI,GAAGzI,EAAUwvB,cAAgCpyB,IAArB4C,EAAUwL,QAAwBsnC,EAAerqC,GAAGzI,EAAUwL,SAHlIsnC,EAAe92C,OAASA,EAKxB82C,EAAerqC,GAAKA,EAdxB,CAeGqqC,KAAmBA,GAAiB,KAChC,IAII2F,IACX,SAAWA,GAOP,SAASz8C,EAAOmxB,EAAKunB,EAAYR,EAASlN,GACtC,OAAO,IAAI0R,GAAiBvrB,EAAKunB,EAAYR,EAASlN,GAM1D,SAASv+B,EAAG9M,GACR,IAAIqE,EAAYrE,EAChB,SAAOmyC,GAAGM,QAAQpuC,IAAc8tC,GAAGO,OAAOruC,EAAUmtB,OAAS2gB,GAAG1wC,UAAU4C,EAAU00C,aAAe5G,GAAGO,OAAOruC,EAAU00C,cAAgB5G,GAAG1B,SAASpsC,EAAUk9B,YACtJ4Q,GAAG6K,KAAK34C,EAAUymC,UAAYqH,GAAG6K,KAAK34C,EAAUiqC,aAAe6D,GAAG6K,KAAK34C,EAAU+pC,WAG5F,SAAS6O,EAAWC,EAAUvP,GAU1B,IATA,IAAI9Q,EAAOqgB,EAASpS,UAChBqS,EAAcC,EAAUzP,GAAO,SAAUtoC,EAAGqE,GAC5C,IAAI2zC,EAAOh4C,EAAEwuB,MAAMpb,MAAMooB,KAAOn3B,EAAEmqB,MAAMpb,MAAMooB,KAC9C,OAAa,IAATwc,EACOh4C,EAAEwuB,MAAMpb,MAAMy5B,UAAYxoC,EAAEmqB,MAAMpb,MAAMy5B,UAE5CmL,KAEPC,EAAqBzgB,EAAKz4B,OACrBrF,EAAIo+C,EAAY/4C,OAAS,EAAGrF,GAAK,EAAGA,IAAK,CAC9C,IAAIkE,EAAIk6C,EAAYp+C,GAChBw+C,EAAcL,EAAS9O,SAASnrC,EAAE4wB,MAAMpb,OACxC+kC,EAAYN,EAAS9O,SAASnrC,EAAE4wB,MAAM9D,KAC1C,KAAIytB,GAAaF,GAIb,MAAM,IAAIx1C,MAAM,oBAHhB+0B,EAAOA,EAAKl0B,UAAU,EAAG40C,GAAet6C,EAAEyxC,QAAU7X,EAAKl0B,UAAU60C,EAAW3gB,EAAKz4B,QAKvFk5C,EAAqBC,EAEzB,OAAO1gB,EAGX,SAASugB,EAAUn5C,EAAMw5C,GACrB,GAAIx5C,EAAKG,QAAU,EAEf,OAAOH,EAEX,IAAIpD,EAAKoD,EAAKG,OAAS,EAAK,EACxB+nB,EAAOloB,EAAKwB,MAAM,EAAG5E,GACrBurB,EAAQnoB,EAAKwB,MAAM5E,GACvBu8C,EAAUjxB,EAAMsxB,GAChBL,EAAUhxB,EAAOqxB,GACjB,IAAIC,EAAU,EACVC,EAAW,EACX5+C,EAAI,EACR,MAAO2+C,EAAUvxB,EAAK/nB,QAAUu5C,EAAWvxB,EAAMhoB,OAAQ,CACrD,IAAIksB,EAAMmtB,EAAQtxB,EAAKuxB,GAAUtxB,EAAMuxB,IAGnC15C,EAAKlF,KAFLuxB,GAAO,EAEKnE,EAAKuxB,KAILtxB,EAAMuxB,KAG1B,MAAOD,EAAUvxB,EAAK/nB,OAClBH,EAAKlF,KAAOotB,EAAKuxB,KAErB,MAAOC,EAAWvxB,EAAMhoB,OACpBH,EAAKlF,KAAOqtB,EAAMuxB,KAEtB,OAAO15C,EAjEX64C,EAAaz8C,OAASA,EAStBy8C,EAAahwC,GAAKA,EAyBlBgwC,EAAaG,WAAaA,GA5C9B,CA6EGH,KAAiBA,GAAe,KAInC,IA2GI3K,GA3GA4K,GAAkC,WAClC,SAASA,EAAiBvrB,EAAKunB,EAAYR,EAASlN,GAChD9jC,KAAK80B,KAAO7K,EACZjqB,KAAKq2C,YAAc7E,EACnBxxC,KAAKs2C,SAAWtF,EAChBhxC,KAAKu2C,SAAWzS,EAChB9jC,KAAKw2C,kBAAet8C,EAmGxB,OAjGAhC,OAAOC,eAAeq9C,EAAiBp8C,UAAW,MAAO,CACrDf,IAAK,WACD,OAAO2H,KAAK80B,MAEhB18B,YAAY,EACZ0I,cAAc,IAElB5I,OAAOC,eAAeq9C,EAAiBp8C,UAAW,aAAc,CAC5Df,IAAK,WACD,OAAO2H,KAAKq2C,aAEhBj+C,YAAY,EACZ0I,cAAc,IAElB5I,OAAOC,eAAeq9C,EAAiBp8C,UAAW,UAAW,CACzDf,IAAK,WACD,OAAO2H,KAAKs2C,UAEhBl+C,YAAY,EACZ0I,cAAc,IAElB00C,EAAiBp8C,UAAUmqC,QAAU,SAAUjX,GAC3C,GAAIA,EAAO,CACP,IAAIpb,EAAQlR,KAAK6mC,SAASva,EAAMpb,OAC5BsX,EAAMxoB,KAAK6mC,SAASva,EAAM9D,KAC9B,OAAOxoB,KAAKu2C,SAASn1C,UAAU8P,EAAOsX,GAE1C,OAAOxoB,KAAKu2C,UAEhBf,EAAiBp8C,UAAUq9C,OAAS,SAAU3qC,EAAOklC,GACjDhxC,KAAKu2C,SAAWzqC,EAAMwpB,KACtBt1B,KAAKs2C,SAAWtF,EAChBhxC,KAAKw2C,kBAAet8C,GAExBs7C,EAAiBp8C,UAAUs9C,eAAiB,WACxC,QAA0Bx8C,IAAtB8F,KAAKw2C,aAA4B,CAIjC,IAHA,IAAIG,EAAc,GACdrhB,EAAOt1B,KAAKu2C,SACZK,GAAc,EACTp/C,EAAI,EAAGA,EAAI89B,EAAKz4B,OAAQrF,IAAK,CAC9Bo/C,IACAD,EAAYv5C,KAAK5F,GACjBo/C,GAAc,GAElB,IAAIC,EAAKvhB,EAAKrzB,OAAOzK,GACrBo/C,EAAsB,OAAPC,GAAsB,OAAPA,EACnB,OAAPA,GAAer/C,EAAI,EAAI89B,EAAKz4B,QAAiC,OAAvBy4B,EAAKrzB,OAAOzK,EAAI,IACtDA,IAGJo/C,GAAethB,EAAKz4B,OAAS,GAC7B85C,EAAYv5C,KAAKk4B,EAAKz4B,QAE1BmD,KAAKw2C,aAAeG,EAExB,OAAO32C,KAAKw2C,cAEhBhB,EAAiBp8C,UAAU2tC,WAAa,SAAUjtB,GAC9CA,EAASxK,KAAK6R,IAAI7R,KAAK+M,IAAIvC,EAAQ9Z,KAAKu2C,SAAS15C,QAAS,GAC1D,IAAI85C,EAAc32C,KAAK02C,iBACnBniB,EAAM,EAAGC,EAAOmiB,EAAY95C,OAChC,GAAa,IAAT23B,EACA,OAAO,GAAS17B,OAAO,EAAGghB,GAE9B,MAAOya,EAAMC,EAAM,CACf,IAAIC,EAAMnlB,KAAKiL,OAAOga,EAAMC,GAAQ,GAChCmiB,EAAYliB,GAAO3a,EACnB0a,EAAOC,EAGPF,EAAME,EAAM,EAKpB,IAAI6E,EAAO/E,EAAM,EACjB,OAAO,GAASz7B,OAAOwgC,EAAMxf,EAAS68B,EAAYrd,KAEtDkc,EAAiBp8C,UAAUytC,SAAW,SAAUta,GAC5C,IAAIoqB,EAAc32C,KAAK02C,iBACvB,GAAInqB,EAAS+M,MAAQqd,EAAY95C,OAC7B,OAAOmD,KAAKu2C,SAAS15C,OAEpB,GAAI0vB,EAAS+M,KAAO,EACrB,OAAO,EAEX,IAAIwd,EAAaH,EAAYpqB,EAAS+M,MAClCyd,EAAkBxqB,EAAS+M,KAAO,EAAIqd,EAAY95C,OAAU85C,EAAYpqB,EAAS+M,KAAO,GAAKt5B,KAAKu2C,SAAS15C,OAC/G,OAAOyS,KAAK6R,IAAI7R,KAAK+M,IAAIy6B,EAAavqB,EAASoe,UAAWoM,GAAiBD,IAE/E5+C,OAAOC,eAAeq9C,EAAiBp8C,UAAW,YAAa,CAC3Df,IAAK,WACD,OAAO2H,KAAK02C,iBAAiB75C,QAEjCzE,YAAY,EACZ0I,cAAc,IAEX00C,EAzG0B,IA4GrC,SAAW5K,GACP,IAAIhqC,EAAW1I,OAAOkB,UAAUwH,SAChC,SAASsqC,EAAQzyC,GACb,MAAwB,qBAAVA,EAGlB,SAASyB,EAAUzB,GACf,MAAwB,qBAAVA,EAGlB,SAAS+0C,EAAQ/0C,GACb,OAAiB,IAAVA,IAA4B,IAAVA,EAG7B,SAAS0yC,EAAO1yC,GACZ,MAAgC,oBAAzBmI,EAASjJ,KAAKc,GAGzB,SAASu0C,EAAOv0C,GACZ,MAAgC,oBAAzBmI,EAASjJ,KAAKc,GAGzB,SAASmzC,EAAYnzC,EAAO4jB,EAAK8E,GAC7B,MAAgC,oBAAzBvgB,EAASjJ,KAAKc,IAAgC4jB,GAAO5jB,GAASA,GAAS0oB,EAGlF,SAAS8nB,EAAQxwC,GACb,MAAgC,oBAAzBmI,EAASjJ,KAAKc,KAAiC,YAAcA,GAASA,GAAS,WAG1F,SAASywC,EAASzwC,GACd,MAAgC,oBAAzBmI,EAASjJ,KAAKc,IAAgC,GAAKA,GAASA,GAAS,WAGhF,SAASg9C,EAAKh9C,GACV,MAAgC,sBAAzBmI,EAASjJ,KAAKc,GAGzB,SAASoyC,EAAcpyC,GAInB,OAAiB,OAAVA,GAAmC,kBAAVA,EAGpC,SAASwzC,EAAWxzC,EAAOoY,GACvB,OAAO9Q,MAAMsJ,QAAQ5Q,IAAUA,EAAM21C,MAAMv9B,GAzC/C+5B,EAAGM,QAAUA,EAIbN,EAAG1wC,UAAYA,EAIf0wC,EAAG4C,QAAUA,EAIb5C,EAAGO,OAASA,EAIZP,EAAGoC,OAASA,EAIZpC,EAAGgB,YAAcA,EAIjBhB,EAAG3B,QAAUA,EAIb2B,EAAG1B,SAAWA,EAId0B,EAAG6K,KAAOA,EAOV7K,EAAGC,cAAgBA,EAInBD,EAAGqB,WAAaA,GAhDpB,CAiDGrB,KAAOA,GAAK,KC92Df,IAsJW,GCpJAoM,GAyBAC,GAcA,GAeAC,GDxDPC,GAAgD,SAAUlwC,EAAI5F,EAAM+1C,GACpE,GAAIA,GAA6B,IAArBj5C,UAAUtB,OAAc,IAAK,IAA4Bw6C,EAAxB7/C,EAAI,EAAGC,EAAI4J,EAAKxE,OAAYrF,EAAIC,EAAGD,KACxE6/C,GAAQ7/C,KAAK6J,IACRg2C,IAAIA,EAAKt3C,MAAM3G,UAAU8E,MAAMvG,KAAK0J,EAAM,EAAG7J,IAClD6/C,EAAG7/C,GAAK6J,EAAK7J,IAGrB,OAAOyP,EAAGP,OAAO2wC,GAAMt3C,MAAM3G,UAAU8E,MAAMvG,KAAK0J,KAElD,GAAkC,WAClC,SAASm0C,EAAiBvrB,EAAKunB,EAAYR,EAASlN,GAChD9jC,KAAK80B,KAAO7K,EACZjqB,KAAKq2C,YAAc7E,EACnBxxC,KAAKs2C,SAAWtF,EAChBhxC,KAAKu2C,SAAWzS,EAChB9jC,KAAKw2C,kBAAet8C,EAqIxB,OAnIAhC,OAAOC,eAAeq9C,EAAiBp8C,UAAW,MAAO,CACrDf,IAAK,WACD,OAAO2H,KAAK80B,MAEhB18B,YAAY,EACZ0I,cAAc,IAElB5I,OAAOC,eAAeq9C,EAAiBp8C,UAAW,aAAc,CAC5Df,IAAK,WACD,OAAO2H,KAAKq2C,aAEhBj+C,YAAY,EACZ0I,cAAc,IAElB5I,OAAOC,eAAeq9C,EAAiBp8C,UAAW,UAAW,CACzDf,IAAK,WACD,OAAO2H,KAAKs2C,UAEhBl+C,YAAY,EACZ0I,cAAc,IAElB00C,EAAiBp8C,UAAUmqC,QAAU,SAAUjX,GAC3C,GAAIA,EAAO,CACP,IAAIpb,EAAQlR,KAAK6mC,SAASva,EAAMpb,OAC5BsX,EAAMxoB,KAAK6mC,SAASva,EAAM9D,KAC9B,OAAOxoB,KAAKu2C,SAASn1C,UAAU8P,EAAOsX,GAE1C,OAAOxoB,KAAKu2C,UAEhBf,EAAiBp8C,UAAUq9C,OAAS,SAAUn7B,EAAS01B,GACnD,IAAK,IAAIjI,EAAK,EAAGuO,EAAYh8B,EAASytB,EAAKuO,EAAUz6C,OAAQksC,IAAM,CAC/D,IAAI7mB,EAASo1B,EAAUvO,GACvB,GAAIyM,EAAiB+B,cAAcr1B,GAAS,CAExC,IAAIoK,EAAQkrB,GAAmBt1B,EAAOoK,OAElC0pB,EAAch2C,KAAK6mC,SAASva,EAAMpb,OAClC+kC,EAAYj2C,KAAK6mC,SAASva,EAAM9D,KACpCxoB,KAAKu2C,SAAWv2C,KAAKu2C,SAASn1C,UAAU,EAAG40C,GAAe9zB,EAAOoT,KAAOt1B,KAAKu2C,SAASn1C,UAAU60C,EAAWj2C,KAAKu2C,SAAS15C,QAEzH,IAAIqvC,EAAY58B,KAAK6R,IAAImL,EAAMpb,MAAMooB,KAAM,GACvC6S,EAAU78B,KAAK6R,IAAImL,EAAM9D,IAAI8Q,KAAM,GACnCqd,EAAc32C,KAAKw2C,aACnBiB,EAAmBC,GAAmBx1B,EAAOoT,MAAM,EAAO0gB,GAC9D,GAAI7J,EAAUD,IAAcuL,EAAiB56C,OACzC,IAAK,IAAIrF,EAAI,EAAGoF,EAAM66C,EAAiB56C,OAAQrF,EAAIoF,EAAKpF,IACpDm/C,EAAYn/C,EAAI00C,EAAY,GAAKuL,EAAiBjgD,QAIlDigD,EAAiB56C,OAAS,IAC1B85C,EAAY35C,OAAO6E,MAAM80C,EAAaQ,GAAc,CAACjL,EAAY,EAAGC,EAAUD,GAAYuL,GAAkB,IAG5Gz3C,KAAKw2C,aAAeG,EAAcA,EAAYz4C,MAAM,EAAGguC,EAAY,GAAGxlC,OAAO+wC,EAAkBd,EAAYz4C,MAAMiuC,EAAU,IAGnI,IAAI2J,EAAO5zB,EAAOoT,KAAKz4B,QAAUo5C,EAAYD,GAC7C,GAAa,IAATF,EACA,IAASt+C,EAAI00C,EAAY,EAAIuL,EAAiB56C,OAAQD,EAAM+5C,EAAY95C,OAAQrF,EAAIoF,EAAKpF,IACrFm/C,EAAYn/C,GAAKm/C,EAAYn/C,GAAKs+C,MAIzC,KAAIN,EAAiBmC,OAAOz1B,GAK7B,MAAM,IAAI3hB,MAAM,iCAJhBP,KAAKu2C,SAAWr0B,EAAOoT,KACvBt1B,KAAKw2C,kBAAet8C,GAM5B8F,KAAKs2C,SAAWtF,GAEpBwE,EAAiBp8C,UAAUs9C,eAAiB,WAIxC,YAH0Bx8C,IAAtB8F,KAAKw2C,eACLx2C,KAAKw2C,aAAekB,GAAmB13C,KAAKu2C,UAAU,IAEnDv2C,KAAKw2C,cAEhBhB,EAAiBp8C,UAAU2tC,WAAa,SAAUjtB,GAC9CA,EAASxK,KAAK6R,IAAI7R,KAAK+M,IAAIvC,EAAQ9Z,KAAKu2C,SAAS15C,QAAS,GAC1D,IAAI85C,EAAc32C,KAAK02C,iBACnBniB,EAAM,EAAGC,EAAOmiB,EAAY95C,OAChC,GAAa,IAAT23B,EACA,MAAO,CAAE8E,KAAM,EAAGqR,UAAW7wB,GAEjC,MAAOya,EAAMC,EAAM,CACf,IAAIC,EAAMnlB,KAAKiL,OAAOga,EAAMC,GAAQ,GAChCmiB,EAAYliB,GAAO3a,EACnB0a,EAAOC,EAGPF,EAAME,EAAM,EAKpB,IAAI6E,EAAO/E,EAAM,EACjB,MAAO,CAAE+E,KAAMA,EAAMqR,UAAW7wB,EAAS68B,EAAYrd,KAEzDkc,EAAiBp8C,UAAUytC,SAAW,SAAUta,GAC5C,IAAIoqB,EAAc32C,KAAK02C,iBACvB,GAAInqB,EAAS+M,MAAQqd,EAAY95C,OAC7B,OAAOmD,KAAKu2C,SAAS15C,OAEpB,GAAI0vB,EAAS+M,KAAO,EACrB,OAAO,EAEX,IAAIwd,EAAaH,EAAYpqB,EAAS+M,MAClCyd,EAAkBxqB,EAAS+M,KAAO,EAAIqd,EAAY95C,OAAU85C,EAAYpqB,EAAS+M,KAAO,GAAKt5B,KAAKu2C,SAAS15C,OAC/G,OAAOyS,KAAK6R,IAAI7R,KAAK+M,IAAIy6B,EAAavqB,EAASoe,UAAWoM,GAAiBD,IAE/E5+C,OAAOC,eAAeq9C,EAAiBp8C,UAAW,YAAa,CAC3Df,IAAK,WACD,OAAO2H,KAAK02C,iBAAiB75C,QAEjCzE,YAAY,EACZ0I,cAAc,IAElB00C,EAAiB+B,cAAgB,SAAUzrC,GACvC,IAAIhP,EAAYgP,EAChB,YAAqB5R,IAAd4C,GAAyC,OAAdA,GACJ,kBAAnBA,EAAUw4B,WAAyCp7B,IAApB4C,EAAUwvB,aACrBpyB,IAA1B4C,EAAU86C,aAA8D,kBAA1B96C,EAAU86C,cAEjEpC,EAAiBmC,OAAS,SAAU7rC,GAChC,IAAIhP,EAAYgP,EAChB,YAAqB5R,IAAd4C,GAAyC,OAAdA,GACJ,kBAAnBA,EAAUw4B,WAAyCp7B,IAApB4C,EAAUwvB,YAAiDpyB,IAA1B4C,EAAU86C,aAElFpC,EA3I0B,GA4MrC,SAASK,GAAUn5C,EAAMw5C,GACrB,GAAIx5C,EAAKG,QAAU,EAEf,OAAOH,EAEX,IAAIpD,EAAKoD,EAAKG,OAAS,EAAK,EACxB+nB,EAAOloB,EAAKwB,MAAM,EAAG5E,GACrBurB,EAAQnoB,EAAKwB,MAAM5E,GACvBu8C,GAAUjxB,EAAMsxB,GAChBL,GAAUhxB,EAAOqxB,GACjB,IAAIC,EAAU,EACVC,EAAW,EACX5+C,EAAI,EACR,MAAO2+C,EAAUvxB,EAAK/nB,QAAUu5C,EAAWvxB,EAAMhoB,OAAQ,CACrD,IAAIksB,EAAMmtB,EAAQtxB,EAAKuxB,GAAUtxB,EAAMuxB,IAGnC15C,EAAKlF,KAFLuxB,GAAO,EAEKnE,EAAKuxB,KAILtxB,EAAMuxB,KAG1B,MAAOD,EAAUvxB,EAAK/nB,OAClBH,EAAKlF,KAAOotB,EAAKuxB,KAErB,MAAOC,EAAWvxB,EAAMhoB,OACpBH,EAAKlF,KAAOqtB,EAAMuxB,KAEtB,OAAO15C,EAEX,SAASg7C,GAAmBpiB,EAAMuiB,EAAe1gB,QAC1B,IAAfA,IAAyBA,EAAa,GAE1C,IADA,IAAI/xB,EAASyyC,EAAgB,CAAC1gB,GAAc,GACnC3/B,EAAI,EAAGA,EAAI89B,EAAKz4B,OAAQrF,IAAK,CAClC,IAAIq/C,EAAKvhB,EAAKt3B,WAAWxG,GACd,KAAPq/C,GAAyC,KAAPA,IACvB,KAAPA,GAAkCr/C,EAAI,EAAI89B,EAAKz4B,QAAqC,KAA3By4B,EAAKt3B,WAAWxG,EAAI,IAC7EA,IAEJ4N,EAAOhI,KAAK+5B,EAAa3/B,EAAI,IAGrC,OAAO4N,EAEX,SAASoyC,GAAmBlrB,GACxB,IAAIpb,EAAQob,EAAMpb,MACdsX,EAAM8D,EAAM9D,IAChB,OAAItX,EAAMooB,KAAO9Q,EAAI8Q,MAASpoB,EAAMooB,OAAS9Q,EAAI8Q,MAAQpoB,EAAMy5B,UAAYniB,EAAImiB,UACpE,CAAEz5B,MAAOsX,EAAKA,IAAKtX,GAEvBob,EAEX,SAASwrB,GAAkB/L,GACvB,IAAIzf,EAAQkrB,GAAmBzL,EAASzf,OACxC,OAAIA,IAAUyf,EAASzf,MACZ,CAAE6gB,QAASpB,EAASoB,QAAS7gB,MAAOA,GAExCyf,GAzHX,SAAWwJ,GASP,SAASz8C,EAAOmxB,EAAKunB,EAAYR,EAASlN,GACtC,OAAO,IAAI,GAAiB7Z,EAAKunB,EAAYR,EAASlN,GAY1D,SAAS2S,EAAOd,EAAUr6B,EAAS01B,GAC/B,GAAI2E,aAAoB,GAEpB,OADAA,EAASc,OAAOn7B,EAAS01B,GAClB2E,EAGP,MAAM,IAAIp1C,MAAM,wEAIxB,SAASm1C,EAAWC,EAAUvP,GAW1B,IAVA,IAAI9Q,EAAOqgB,EAASpS,UAChBqS,EAAcC,GAAUzP,EAAM5/B,IAAIsxC,KAAoB,SAAUh6C,EAAGqE,GACnE,IAAI2zC,EAAOh4C,EAAEwuB,MAAMpb,MAAMooB,KAAOn3B,EAAEmqB,MAAMpb,MAAMooB,KAC9C,OAAa,IAATwc,EACOh4C,EAAEwuB,MAAMpb,MAAMy5B,UAAYxoC,EAAEmqB,MAAMpb,MAAMy5B,UAE5CmL,KAEPC,EAAqB,EACrBgC,EAAQ,GACHhP,EAAK,EAAGiP,EAAgBpC,EAAa7M,EAAKiP,EAAcn7C,OAAQksC,IAAM,CAC3E,IAAIrtC,EAAIs8C,EAAcjP,GAClBiN,EAAcL,EAAS9O,SAASnrC,EAAE4wB,MAAMpb,OAC5C,GAAI8kC,EAAcD,EACd,MAAM,IAAIx1C,MAAM,oBAEXy1C,EAAcD,GACnBgC,EAAM36C,KAAKk4B,EAAKl0B,UAAU20C,EAAoBC,IAE9Ct6C,EAAEyxC,QAAQtwC,QACVk7C,EAAM36C,KAAK1B,EAAEyxC,SAEjB4I,EAAqBJ,EAAS9O,SAASnrC,EAAE4wB,MAAM9D,KAGnD,OADAuvB,EAAM36C,KAAKk4B,EAAKpzB,OAAO6zC,IAChBgC,EAAMx5C,KAAK,IA9CtBg3C,EAAaz8C,OAASA,EAmBtBy8C,EAAakB,OAASA,EA6BtBlB,EAAaG,WAAaA,GA5D9B,CA6DG,KAAiB,GAAe,KCjNnC,SAAWsB,GACPA,EAAUA,EAAU,mBAAqB,GAAK,kBAC9CA,EAAUA,EAAU,WAAa,GAAK,UACtCA,EAAUA,EAAU,iBAAmB,GAAK,gBAC5CA,EAAUA,EAAU,gBAAkB,GAAK,eAC3CA,EAAUA,EAAU,iBAAmB,GAAK,gBAC5CA,EAAUA,EAAU,qBAAuB,GAAK,oBAChDA,EAAUA,EAAU,YAAc,GAAK,WACvCA,EAAUA,EAAU,cAAgB,GAAK,aACzCA,EAAUA,EAAU,eAAiB,GAAK,cAC1CA,EAAUA,EAAU,UAAY,GAAK,SACrCA,EAAUA,EAAU,mBAAqB,IAAM,kBAC/CA,EAAUA,EAAU,iBAAmB,IAAM,gBAC7CA,EAAUA,EAAU,kBAAoB,IAAM,iBAC9CA,EAAUA,EAAU,mBAAqB,IAAM,kBAC/CA,EAAUA,EAAU,WAAa,IAAM,UACvCA,EAAUA,EAAU,iBAAmB,IAAM,gBAC7CA,EAAUA,EAAU,WAAa,IAAM,UACvCA,EAAUA,EAAU,cAAgB,IAAM,aAC1CA,EAAUA,EAAU,WAAa,IAAM,UACvCA,EAAUA,EAAU,UAAY,IAAM,SACtCA,EAAUA,EAAU,UAAY,IAAM,SACtCA,EAAUA,EAAU,OAAS,IAAM,MAtBvC,CAuBGA,KAAcA,GAAY,KAE7B,SAAWC,GACPA,EAAaA,EAAa,iBAAmB,GAAK,gBAClDA,EAAaA,EAAa,wBAA0B,GAAK,uBACzDA,EAAaA,EAAa,sBAAwB,GAAK,qBACvDA,EAAaA,EAAa,iBAAmB,GAAK,gBAClDA,EAAaA,EAAa,aAAe,GAAK,YAC9CA,EAAaA,EAAa,gBAAkB,GAAK,eACjDA,EAAaA,EAAa,iBAAmB,GAAK,gBAClDA,EAAaA,EAAa,uBAAyB,GAAK,sBACxDA,EAAaA,EAAa,sBAAwB,GAAK,qBACvDA,EAAaA,EAAa,sBAAwB,GAAK,qBACvDA,EAAaA,EAAa,wBAA0B,IAAM,uBAX9D,CAYGA,KAAiBA,GAAe,KAEnC,SAAWgB,GACPA,EAAmBC,OAAS,CACxBvK,aAAc,CACVwK,WAAY,CACRC,eAAgB,CACZC,oBAAqB,CAAC7J,GAAWkD,SAAUlD,GAAWiD,aAG9D6G,MAAO,CACHC,cAAe,CAAC/J,GAAWkD,SAAUlD,GAAWiD,cAThE,CAaG,KAAuB,GAAqB,KAE/C,SAAWyF,GAIPA,EAASA,EAAS,WAAa,GAAK,UAIpCA,EAASA,EAAS,QAAU,GAAK,OAIjCA,EAASA,EAAS,aAAe,GAAK,YAItCA,EAASA,EAAS,gBAAkB,IAAM,eAhB9C,CAiBGA,KAAaA,GAAW,KCzE3B,IAAI,GAAW,KACXsB,GAAiC,WACjC,SAASA,EAAgB19B,EAAQyR,GAC7BvsB,KAAK8a,OAASA,EACd9a,KAAKpD,IAAMke,EAAOje,OAClBmD,KAAKusB,SAAWA,EA0GpB,OAxGAisB,EAAgBp/C,UAAUq/C,IAAM,WAC5B,OAAOz4C,KAAKpD,KAAOoD,KAAKusB,UAE5BisB,EAAgBp/C,UAAUs/C,UAAY,WAClC,OAAO14C,KAAK8a,QAEhB09B,EAAgBp/C,UAAUwxB,IAAM,WAC5B,OAAO5qB,KAAKusB,UAEhBisB,EAAgBp/C,UAAUu/C,SAAW,SAAU/tB,GAC3C5qB,KAAKusB,SAAW3B,GAEpB4tB,EAAgBp/C,UAAUw/C,OAAS,SAAU3/C,GACzC+G,KAAKusB,UAAYtzB,GAErBu/C,EAAgBp/C,UAAUy/C,QAAU,SAAU5/C,GAC1C+G,KAAKusB,UAAYtzB,GAErBu/C,EAAgBp/C,UAAU0/C,QAAU,WAChC94C,KAAKusB,SAAWvsB,KAAK8a,OAAOje,QAEhC27C,EAAgBp/C,UAAU2/C,SAAW,WACjC,OAAO/4C,KAAK8a,OAAO9c,WAAWgC,KAAKusB,aAAe,GAEtDisB,EAAgBp/C,UAAU4/C,SAAW,SAAU//C,GAE3C,YADU,IAANA,IAAgBA,EAAI,GACjB+G,KAAK8a,OAAO9c,WAAWgC,KAAKusB,SAAWtzB,IAAM,GAExDu/C,EAAgBp/C,UAAU6/C,cAAgB,SAAUpC,GAChD,OAAIA,IAAO72C,KAAK8a,OAAO9c,WAAWgC,KAAKusB,YACnCvsB,KAAKusB,YACE,IAIfisB,EAAgBp/C,UAAU8/C,eAAiB,SAAUrC,GACjD,IAAIr/C,EACJ,GAAIwI,KAAKusB,SAAWsqB,EAAGh6C,OAASmD,KAAK8a,OAAOje,OACxC,OAAO,EAEX,IAAKrF,EAAI,EAAGA,EAAIq/C,EAAGh6C,OAAQrF,IACvB,GAAIwI,KAAK8a,OAAO9c,WAAWgC,KAAKusB,SAAW/0B,KAAOq/C,EAAGr/C,GACjD,OAAO,EAIf,OADAwI,KAAK64C,QAAQrhD,IACN,GAEXghD,EAAgBp/C,UAAU+/C,gBAAkB,SAAUC,GAClD,IAAI9mC,EAAMtS,KAAK8a,OAAO5Y,OAAOlC,KAAKusB,UAC9B7pB,EAAQ4P,EAAI5P,MAAM02C,GACtB,OAAI12C,GACA1C,KAAKusB,SAAWvsB,KAAKusB,SAAW7pB,EAAM+D,MAAQ/D,EAAM,GAAG7F,OAChD6F,EAAM,IAEV,IAEX81C,EAAgBp/C,UAAUigD,mBAAqB,SAAUD,GACrD,IAAI9mC,EAAMtS,KAAK8a,OAAO5Y,OAAOlC,KAAKusB,UAC9B7pB,EAAQ4P,EAAI5P,MAAM02C,GACtB,OAAI12C,GACA1C,KAAKusB,SAAWvsB,KAAKusB,SAAW7pB,EAAM+D,MAC/B/D,EAAM,KAGb1C,KAAK84C,UAEF,KAEXN,EAAgBp/C,UAAUkgD,iBAAmB,SAAUzC,GACnD,MAAO72C,KAAKusB,SAAWvsB,KAAK8a,OAAOje,OAAQ,CACvC,GAAImD,KAAK8a,OAAO9c,WAAWgC,KAAKusB,YAAcsqB,EAC1C,OAAO,EAEX72C,KAAK64C,QAAQ,GAEjB,OAAO,GAEXL,EAAgBp/C,UAAUmgD,kBAAoB,SAAU1C,GACpD,MAAO72C,KAAKusB,SAAWsqB,EAAGh6C,QAAUmD,KAAK8a,OAAOje,OAAQ,CAEpD,IADA,IAAIrF,EAAI,EACDA,EAAIq/C,EAAGh6C,QAAUmD,KAAK8a,OAAO9c,WAAWgC,KAAKusB,SAAW/0B,KAAOq/C,EAAGr/C,GAAIA,KAE7E,GAAIA,IAAMq/C,EAAGh6C,OACT,OAAO,EAEXmD,KAAK64C,QAAQ,GAGjB,OADA74C,KAAK84C,WACE,GAEXN,EAAgBp/C,UAAUogD,eAAiB,WACvC,IAAIvgD,EAAI+G,KAAKy5C,kBAAiB,SAAU5C,GACpC,OAAOA,IAAO6C,IAAQ7C,IAAO8C,IAAQ9C,IAAO+C,IAAQ/C,IAAOgD,IAAQhD,IAAOiD,MAE9E,OAAO7gD,EAAI,GAEfu/C,EAAgBp/C,UAAUqgD,iBAAmB,SAAUj+B,GACnD,IAAIu+B,EAAS/5C,KAAKusB,SAClB,MAAOvsB,KAAKusB,SAAWvsB,KAAKpD,KAAO4e,EAAUxb,KAAK8a,OAAO9c,WAAWgC,KAAKusB,WACrEvsB,KAAKusB,WAET,OAAOvsB,KAAKusB,SAAWwtB,GAEpBvB,EA9GyB,GAgHhCwB,GAAO,IAAIh8C,WAAW,GACtBi8C,GAAO,IAAIj8C,WAAW,GACtBk8C,GAAO,IAAIl8C,WAAW,GACtBm8C,GAAO,IAAIn8C,WAAW,GACtBo8C,GAAO,IAAIp8C,WAAW,GACtBq8C,GAAO,IAAIr8C,WAAW,GACtBs8C,GAAO,IAAIt8C,WAAW,GACtBu8C,GAAO,IAAKv8C,WAAW,GACvB47C,GAAO,KAAK57C,WAAW,GACvB87C,GAAO,KAAK97C,WAAW,GACvB67C,GAAO,KAAK77C,WAAW,GACvB07C,GAAO,IAAI17C,WAAW,GACtB27C,GAAO,KAAK37C,WAAW,GACvBw8C,GAAqB,CACrB,8BAA8B,EAE9B,aAAa,GAEV,SAASC,GAAcC,EAAOC,EAAeC,EAAcC,QACxC,IAAlBF,IAA4BA,EAAgB,QAC3B,IAAjBC,IAA2BA,EAAe3D,GAAa6D,oBAC/B,IAAxBD,IAAkCA,GAAsB,GAC5D,IAIIE,EACAC,EACAC,EACAC,EACAC,EARAC,EAAS,IAAI5C,GAAgBkC,EAAOC,GACpCvgB,EAAQwgB,EACRS,EAAc,EACdC,EAAYtE,GAAUuE,QAM1B,SAASC,IACL,OAAOJ,EAAOjC,gBAAgB,sBAAsB/2C,cAExD,SAASq5C,IACL,OAAOL,EAAOjC,gBAAgB,uCAAuC/2C,cAEzE,SAASs5C,EAAY5hC,EAAQ/e,EAAM4gD,GAI/B,OAHAL,EAAYvgD,EACZsgD,EAAcvhC,EACdihC,EAAaY,EACN5gD,EAEX,SAAS6gD,IACL,IAAI9hC,EAASshC,EAAOxwB,MAChBixB,EAAWzhB,EACX0hB,EAAQC,IACZ,OAAID,IAAU9E,GAAUgF,KAAOliC,IAAWshC,EAAOxwB,OAAWiwB,IAAwBiB,IAAU9E,GAAUiF,eAAiBH,IAAU9E,GAAUkF,aAKtIJ,GAJHngD,QAAQyM,IAAI,2CAA6C0R,EAAS,mBAAqB+hC,EAAW,WAAazhB,GAC/GghB,EAAOvC,QAAQ,GACR6C,EAAY5hC,EAAQk9B,GAAUuE,UAI7C,SAASQ,IACL,IAIIJ,EAJA7hC,EAASshC,EAAOxwB,MACpB,GAAIwwB,EAAO3C,MACP,OAAOiD,EAAY5hC,EAAQk9B,GAAUgF,KAGzC,OAAQ5hB,GACJ,KAAK6c,GAAakF,cACd,OAAIf,EAAOlC,eAAe,CAACe,GAAMA,GAAME,MACnC/f,EAAQ6c,GAAa6D,cACdY,EAAY5hC,EAAQk9B,GAAUoF,iBAEzChB,EAAO7B,kBAAkB,CAACU,GAAMA,GAAME,KAC/BuB,EAAY5hC,EAAQk9B,GAAUqF,UACzC,KAAKpF,GAAaqF,cACd,OAAIlB,EAAOnC,cAAckB,KACrB/f,EAAQ6c,GAAa6D,cACdY,EAAY5hC,EAAQk9B,GAAUuF,iBAEzCnB,EAAO9B,iBAAiBa,IACjBuB,EAAY5hC,EAAQk9B,GAAUwF,UACzC,KAAKvF,GAAa6D,cACd,GAAIM,EAAOnC,cAAciB,IAAO,CAC5B,IAAKkB,EAAO3C,OAAS2C,EAAOpC,aAAegB,GAAM,CAC7C,GAAIoB,EAAOlC,eAAe,CAACc,GAAMC,GAAMA,KAEnC,OADA7f,EAAQ6c,GAAakF,cACdT,EAAY5hC,EAAQk9B,GAAUyF,iBAEzC,GAAIrB,EAAOjC,gBAAgB,cAEvB,OADA/e,EAAQ6c,GAAaqF,cACdZ,EAAY5hC,EAAQk9B,GAAU0F,iBAG7C,OAAItB,EAAOnC,cAAcmB,KACrBhgB,EAAQ6c,GAAa0F,mBACdjB,EAAY5hC,EAAQk9B,GAAU4F,cAEzCxiB,EAAQ6c,GAAa4F,qBACdnB,EAAY5hC,EAAQk9B,GAAU8F,eAGzC,OADA1B,EAAO9B,iBAAiBY,IACjBwB,EAAY5hC,EAAQk9B,GAAU+F,SACzC,KAAK9F,GAAa0F,mBACd,IAAIK,EAAUxB,IACd,OAAIwB,EAAQngD,OAAS,GACjBu9B,EAAQ6c,GAAagG,aACdvB,EAAY5hC,EAAQk9B,GAAUkG,SAErC9B,EAAO5B,iBACAkC,EAAY5hC,EAAQk9B,GAAUmG,WAAY,GAAS,6BAA8B,qDAE5F/iB,EAAQ6c,GAAagG,aACrB7B,EAAO9B,iBAAiBa,IACpBrgC,EAASshC,EAAOxwB,MACT8wB,EAAY5hC,EAAQk9B,GAAUuE,QAAS,GAAS,2BAA4B,2BAEhFQ,KACX,KAAK9E,GAAagG,aACd,GAAI7B,EAAO5B,iBACP,OAAOkC,EAAY5hC,EAAQk9B,GAAUmG,YAEzC,GAAI/B,EAAOnC,cAAckB,IAErB,OADA/f,EAAQ6c,GAAa6D,cACdY,EAAY5hC,EAAQk9B,GAAUkF,aAEzC,GAAIrB,GAAuBO,EAAOpC,aAAekB,GAE7C,OADA9f,EAAQ6c,GAAa6D,cACdY,EAAY5hC,EAAQk9B,GAAUkF,YAAa,GAAS,8BAA+B,6BAE9FP,EAAe,GAAS,+BAAgC,6BACxD,MACJ,KAAK1E,GAAa4F,qBAId,OAHA5B,EAAUO,IACVL,OAAgB,EAChBD,OAAoB,EAChBD,EAAQp+C,OAAS,GACjBm+C,GAAmB,EACnB5gB,EAAQ6c,GAAamG,UACd1B,EAAY5hC,EAAQk9B,GAAUqG,WAErCjC,EAAO5B,iBACAkC,EAAY5hC,EAAQk9B,GAAUmG,WAAY,GAAS,6BAA8B,qDAE5F/iB,EAAQ6c,GAAamG,UACrBhC,EAAO9B,iBAAiBa,IACpBrgC,EAASshC,EAAOxwB,MACT8wB,EAAY5hC,EAAQk9B,GAAUuE,QAAS,GAAS,6BAA8B,6BAElFQ,KACX,KAAK9E,GAAamG,UACd,OAAIhC,EAAO5B,kBACPwB,GAAmB,EACZU,EAAY5hC,EAAQk9B,GAAUmG,aAErCnC,IACAE,EAAoBO,IAChBP,EAAkBr+C,OAAS,IAC3Bu9B,EAAQ6c,GAAaqG,mBACrBtC,GAAmB,EACZU,EAAY5hC,EAAQk9B,GAAUuG,gBAGzCnC,EAAOlC,eAAe,CAACkB,GAAMD,MAC7B/f,EAAQ6c,GAAa6D,cACdY,EAAY5hC,EAAQk9B,GAAUwG,oBAErCpC,EAAOnC,cAAckB,KAIb/f,EAHQ,WAAZ6gB,EACIE,GAAiBX,GAAmBW,GAE5BlE,GAAa6D,cAGb7D,GAAawG,oBAGR,UAAZxC,EACGhE,GAAayG,mBAGbzG,GAAa6D,cAElBY,EAAY5hC,EAAQk9B,GAAUiF,gBAErCpB,GAAuBO,EAAOpC,aAAekB,IAC7C9f,EAAQ6c,GAAa6D,cACdY,EAAY5hC,EAAQk9B,GAAUiF,cAAe,GAAS,8BAA+B,+BAEhGb,EAAOvC,QAAQ,GACR6C,EAAY5hC,EAAQk9B,GAAUuE,QAAS,GAAS,iCAAkC,kCAC7F,KAAKtE,GAAaqG,mBACd,OAAIlC,EAAO5B,kBACPwB,GAAmB,EACZU,EAAY5hC,EAAQk9B,GAAUmG,aAErC/B,EAAOnC,cAAcoB,KACrBjgB,EAAQ6c,GAAa0G,qBACdjC,EAAY5hC,EAAQk9B,GAAU4G,mBAEzCxjB,EAAQ6c,GAAamG,UACdrB,KACX,KAAK9E,GAAa0G,qBACd,GAAIvC,EAAO5B,iBACP,OAAOkC,EAAY5hC,EAAQk9B,GAAUmG,YAEzC,IAAIU,EAAiBzC,EAAOjC,gBAAgB,iBAC5C,GAAI0E,EAAehhD,OAAS,EAUxB,OATIu+C,EAAOpC,aAAemB,IAAQiB,EAAOpC,UAAU,KAAOoB,KACtDgB,EAAOxC,OAAO,GACdiF,EAAiBA,EAAe37C,OAAO,EAAG27C,EAAehhD,OAAS,IAE5C,SAAtBq+C,IACAC,EAAgB0C,GAEpBzjB,EAAQ6c,GAAamG,UACrBpC,GAAmB,EACZU,EAAY5hC,EAAQk9B,GAAU8G,gBAEzC,IAAIjH,EAAKuE,EAAOpC,WAChB,OAAInC,IAAO0D,IAAQ1D,IAAOyD,IACtBc,EAAOvC,QAAQ,GACXuC,EAAO9B,iBAAiBzC,IACxBuE,EAAOvC,QAAQ,GAEO,SAAtBqC,IACAC,EAAgBC,EAAO1C,YAAYt3C,UAAU0Y,EAAS,EAAGshC,EAAOxwB,MAAQ,IAE5EwP,EAAQ6c,GAAamG,UACrBpC,GAAmB,EACZU,EAAY5hC,EAAQk9B,GAAU8G,kBAEzC1jB,EAAQ6c,GAAamG,UACrBpC,GAAmB,EACZe,KACX,KAAK9E,GAAawG,oBAEd,IAAIM,EAAa,EACjB,OAAQ3C,EAAO3C,MAAO,CAClB,IAAI/1C,EAAQ04C,EAAOjC,gBAAgB,gCACnC,GAAqB,IAAjBz2C,EAAM7F,OAEN,OADAu+C,EAAOtC,UACA4C,EAAY5hC,EAAQk9B,GAAUgH,QAEpC,GAAc,YAAVt7C,EACc,IAAfq7C,IACAA,EAAa,QAGhB,GAAc,WAAVr7C,EACLq7C,EAAa,OAEZ,GAAiB,MAAbr7C,EAAM,GACQ,IAAfq7C,IACAA,EAAa,OAGhB,CACD,GAAmB,IAAfA,EAGC,CACD3C,EAAOxC,OAAOl2C,EAAM7F,QACpB,MAJAkhD,EAAa,GASzB,OADA3jB,EAAQ6c,GAAa6D,cACjBhhC,EAASshC,EAAOxwB,MACT8wB,EAAY5hC,EAAQk9B,GAAUgH,QAElCjC,IACX,KAAK9E,GAAayG,mBAGd,OAFAtC,EAAO/B,mBAAmB,aAC1Bjf,EAAQ6c,GAAa6D,cACjBhhC,EAASshC,EAAOxwB,MACT8wB,EAAY5hC,EAAQk9B,GAAUiH,QAElClC,IAIf,OAFAX,EAAOvC,QAAQ,GACfze,EAAQ6c,GAAa6D,cACdY,EAAY5hC,EAAQk9B,GAAUuE,QAASI,GAElD,MAAO,CACHC,KAAMA,EACNsC,aAAc,WAAc,OAAO5C,GACnC6C,eAAgB,WAAc,OAAO9C,GACrC+C,eAAgB,WAAc,OAAOhD,EAAOxwB,MAAQywB,GACpDgD,YAAa,WAAc,OAAOjD,EAAOxwB,OACzC0zB,aAAc,WAAc,OAAOlD,EAAO1C,YAAYt3C,UAAUi6C,EAAaD,EAAOxwB,QACpF2zB,gBAAiB,WAAc,OAAOnkB,GACtCokB,cAAe,WAAc,OAAOzD,IC3YrC,SAAS0D,GAAU7W,EAAOtuC,GAC7B,IAAIi7B,EAAM,EAAGC,EAAOoT,EAAM/qC,OAC1B,GAAa,IAAT23B,EACA,OAAO,EAEX,MAAOD,EAAMC,EAAM,CACf,IAAIC,EAAMnlB,KAAKiL,OAAOga,EAAMC,GAAQ,GAChCl7B,EAAEsuC,EAAMnT,IACRD,EAAOC,EAGPF,EAAME,EAAM,EAGpB,OAAOF,EAEJ,SAASmqB,GAAa9W,EAAO7uC,EAAKyO,GACrC,IAAI+sB,EAAM,EAAGC,EAAOoT,EAAM/qC,OAAS,EACnC,MAAO03B,GAAOC,EAAM,CAChB,IAAIC,GAAQF,EAAMC,GAAQ,EAAK,EAC3BmqB,EAAOn3C,EAAWogC,EAAMnT,GAAM17B,GAClC,GAAI4lD,EAAO,EACPpqB,EAAME,EAAM,MAEX,MAAIkqB,EAAO,GAIZ,OAAOlqB,EAHPD,EAAOC,EAAM,GAMrB,QAASF,EAAM,GClCZ,IAAIqqB,GAAgB,CAAC,OAAQ,OAAQ,KAAM,MAAO,QAAS,KAAM,MAAO,QAAS,SAAU,OAAQ,WAAY,OAAQ,QAAS,SAAU,QAAS,OACnJ,SAASC,GAAcnjD,GAC1B,QAASA,GAAK,GAAoBkjD,GAAeljD,EAAE0G,eAAe,SAAU08C,EAAIC,GAAM,OAAOD,EAAGE,cAAcD,OAAW,ECA7H,IAAI,GAAsB,WACtB,SAASE,EAAK/tC,EAAOsX,EAAKzf,EAAUT,GAChCtI,KAAKkR,MAAQA,EACblR,KAAKwoB,IAAMA,EACXxoB,KAAK+I,SAAWA,EAChB/I,KAAKsI,OAASA,EACdtI,KAAKk/C,QAAS,EAoDlB,OAlDAhnD,OAAOC,eAAe8mD,EAAK7lD,UAAW,iBAAkB,CACpDf,IAAK,WAAc,OAAO2H,KAAKm/C,WAAajnD,OAAOmtC,KAAKrlC,KAAKm/C,YAAc,IAC3E/mD,YAAY,EACZ0I,cAAc,IAElBm+C,EAAK7lD,UAAUgmD,UAAY,SAAUC,GACjC,YAAiBnlD,IAAb8F,KAAKs/C,SACqBplD,IAAnBmlD,OAGmBnlD,IAAnBmlD,GAAgCr/C,KAAKs/C,IAAIziD,SAAWwiD,EAAexiD,QAAUmD,KAAKs/C,IAAIl9C,gBAAkBi9C,GAGvHnnD,OAAOC,eAAe8mD,EAAK7lD,UAAW,aAAc,CAChDf,IAAK,WAAc,OAAO2H,KAAK+I,SAAS,IACxC3Q,YAAY,EACZ0I,cAAc,IAElB5I,OAAOC,eAAe8mD,EAAK7lD,UAAW,YAAa,CAC/Cf,IAAK,WAAc,OAAO2H,KAAK+I,SAASlM,OAASmD,KAAK+I,SAAS/I,KAAK+I,SAASlM,OAAS,QAAK,GAC3FzE,YAAY,EACZ0I,cAAc,IAElBm+C,EAAK7lD,UAAUmmD,eAAiB,SAAUzlC,GACtC,IAAIiQ,EAAM00B,GAAUz+C,KAAK+I,UAAU,SAAUlR,GAAK,OAAOiiB,GAAUjiB,EAAEqZ,SAAY,EACjF,GAAI6Y,GAAO,EAAG,CACV,IAAI1hB,EAAQrI,KAAK+I,SAASghB,GAC1B,GAAIjQ,EAASzR,EAAM6I,MAAO,CACtB,GAAI4I,EAASzR,EAAMmgB,IACf,OAAOngB,EAAMk3C,eAAezlC,GAEhC,IAAI0lC,EAAYn3C,EAAMm3C,UACtB,OAAIA,GAAaA,EAAUh3B,MAAQngB,EAAMmgB,IAC9BngB,EAAMk3C,eAAezlC,GAEzBzR,GAGf,OAAOrI,MAEXi/C,EAAK7lD,UAAUqmD,WAAa,SAAU3lC,GAClC,IAAIiQ,EAAM00B,GAAUz+C,KAAK+I,UAAU,SAAUlR,GAAK,OAAOiiB,GAAUjiB,EAAEqZ,SAAY,EACjF,GAAI6Y,GAAO,EAAG,CACV,IAAI1hB,EAAQrI,KAAK+I,SAASghB,GAC1B,GAAIjQ,EAASzR,EAAM6I,OAAS4I,GAAUzR,EAAMmgB,IACxC,OAAOngB,EAAMo3C,WAAW3lC,GAGhC,OAAO9Z,MAEJi/C,EA1Dc,GA6DlB,SAAS3jD,GAAMg6B,GAClB,IAAIoqB,EAAUjF,GAAcnlB,OAAMp7B,OAAWA,GAAW,GACpDylD,EAAe,IAAI,GAAK,EAAGrqB,EAAKz4B,OAAQ,QAAI,GAC5C+iD,EAAOD,EACPE,GAAe,EACfC,OAAa5lD,EACb6lD,EAAmB,KACnBjE,EAAQ4D,EAAQ9D,OACpB,MAAOE,IAAU9E,GAAUgF,IAAK,CAC5B,OAAQF,GACJ,KAAK9E,GAAU8F,aACX,IAAIz0C,EAAQ,IAAI,GAAKq3C,EAAQvB,iBAAkB7oB,EAAKz4B,OAAQ,GAAI+iD,GAChEA,EAAK72C,SAAS3L,KAAKiL,GACnBu3C,EAAOv3C,EACP,MACJ,KAAK2uC,GAAUqG,SACXuC,EAAKN,IAAMI,EAAQpB,eACnB,MACJ,KAAKtH,GAAUiF,cACP2D,EAAKt3C,SACLs3C,EAAKp3B,IAAMk3B,EAAQrB,cACfqB,EAAQtB,kBACRwB,EAAKI,YAAcN,EAAQrB,cACvBuB,EAAKN,KAAOT,GAAce,EAAKN,OAC/BM,EAAKV,QAAS,EACdU,EAAOA,EAAKt3C,SAKhBs3C,EAAOA,EAAKt3C,QAGpB,MACJ,KAAK0uC,GAAUwG,kBACPoC,EAAKt3C,SACLs3C,EAAKV,QAAS,EACdU,EAAKp3B,IAAMk3B,EAAQrB,cACnBuB,EAAKI,YAAcN,EAAQrB,cAC3BuB,EAAOA,EAAKt3C,QAEhB,MACJ,KAAK0uC,GAAU4F,WACXiD,EAAcH,EAAQvB,iBACtB2B,OAAa5lD,EACb,MACJ,KAAK88C,GAAUkG,OACX4C,EAAaJ,EAAQpB,eAAel8C,cACpC,MACJ,KAAK40C,GAAUkF,YACX,IAAIzxC,EAAOm1C,EAEX,OAAQn1C,EAAK20C,UAAUU,IAAer1C,EAAKnC,OACvCmC,EAAOA,EAAKnC,OAEhB,GAAImC,EAAKnC,OAAQ,CACb,MAAOs3C,IAASn1C,EACZm1C,EAAKp3B,IAAMq3B,EACXD,EAAKV,QAAS,EACdU,EAAOA,EAAKt3C,OAEhBs3C,EAAKV,QAAS,EACdU,EAAKC,YAAcA,EACnBD,EAAKp3B,IAAMk3B,EAAQrB,cACnBuB,EAAOA,EAAKt3C,OAEhB,MACJ,KAAK0uC,GAAUuG,cACXwC,EAAmBL,EAAQpB,eAC3B,IAAIa,EAAaS,EAAKT,WACjBA,IACDS,EAAKT,WAAaA,EAAa,IAEnCA,EAAWY,GAAoB,KAC/B,MAEJ,KAAK/I,GAAU8G,eACX,IAAIrlD,EAAQinD,EAAQpB,eAChBa,EAAaS,EAAKT,WAClBA,GAAcY,IACdZ,EAAWY,GAAoBtnD,EAC/BsnD,EAAmB,MAEvB,MAGRjE,EAAQ4D,EAAQ9D,OAEpB,MAAOgE,EAAKt3C,OACRs3C,EAAKp3B,IAAM8M,EAAKz4B,OAChB+iD,EAAKV,QAAS,EACdU,EAAOA,EAAKt3C,OAEhB,MAAO,CACH23C,MAAON,EAAa52C,SACpBw2C,eAAgBI,EAAaJ,eAAevmD,KAAK2mD,GACjDF,WAAYE,EAAaF,WAAWzmD,KAAK2mD,IC7J1C,IAAIO,GAAW,CAClB,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,UAAW,IACX,UAAW,IACX,MAAO,IACP,OAAQ,IACR,OAAQ,KACR,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,MAAO,IACP,OAAQ,KACR,OAAQ,KACR,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,WAAY,IACZ,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,IAAO,IACP,OAAQ,IACR,IAAO,IACP,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,QAAS,IACT,YAAa,IACb,QAAS,IACT,OAAQ,IACR,QAAS,IACT,SAAU,IACV,UAAW,IACX,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,YAAa,IACb,SAAU,IACV,WAAY,IACZ,YAAa,IACb,UAAW,IACX,SAAU,IACV,WAAY,IACZ,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,MAAO,IACP,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,QAAS,IACT,iBAAkB,IAClB,UAAW,IACX,YAAa,IACb,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,QAAS,KACT,QAAS,KACT,UAAW,IACX,OAAQ,IACR,SAAU,IACV,WAAY,IACZ,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,YAAa,IACb,SAAU,IACV,YAAa,IACb,eAAgB,IAChB,aAAc,IACd,WAAY,IACZ,aAAc,IACd,aAAc,IACd,QAAS,IACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,YAAa,IACb,QAAS,IACT,YAAa,IACb,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,UAAW,IACX,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,SAAU,IACV,UAAW,IACX,cAAe,IACf,QAAS,IACT,QAAS,IACT,QAAS,IACT,WAAY,IACZ,OAAQ,KACR,OAAQ,KACR,UAAW,IACX,WAAY,IACZ,UAAW,IACX,WAAY,IACZ,YAAa,IACb,aAAc,IACd,YAAa,IACb,WAAY,IACZ,mBAAoB,IACpB,iBAAkB,IAClB,YAAa,IACb,UAAW,IACX,YAAa,IACb,UAAW,IACX,gBAAiB,IACjB,eAAgB,IAChB,iBAAkB,IAClB,qBAAsB,IACtB,qBAAsB,IACtB,sBAAuB,IACvB,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,KACR,WAAY,KACZ,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,OAAQ,IACR,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,YAAa,IACb,WAAY,IACZ,YAAa,IACb,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,UAAW,IACX,SAAU,IACV,SAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,QAAS,KACT,SAAU,IACV,QAAS,IACT,SAAU,IACV,QAAS,KACT,SAAU,IACV,YAAa,IACb,QAAS,IACT,UAAW,IACX,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,YAAa,IACb,UAAW,IACX,UAAW,IACX,UAAW,IACX,wBAAyB,IACzB,QAAS,KACT,SAAU,IACV,SAAU,IACV,WAAY,IACZ,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,SAAU,IACV,SAAU,IACV,WAAY,IACZ,SAAU,IACV,WAAY,IACZ,QAAS,IACT,QAAS,IACT,SAAU,IACV,MAAS,IACT,WAAY,IACZ,WAAY,IACZ,QAAS,IACT,KAAQ,IACR,aAAc,IACd,aAAc,IACd,OAAQ,IACR,OAAQ,KACR,QAAS,IACT,QAAS,IACT,SAAU,IACV,aAAc,IACd,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,UAAW,IACX,mBAAoB,IACpB,oBAAqB,IACrB,cAAe,IACf,eAAgB,IAChB,eAAgB,IAChB,aAAc,IACd,YAAa,IACb,YAAa,IACb,eAAgB,IAChB,cAAe,IACf,eAAgB,IAChB,QAAS,IACT,QAAS,IACT,YAAa,IACb,UAAW,IACX,WAAY,IACZ,4BAA6B,IAC7B,yBAA0B,IAC1B,mBAAoB,IACpB,SAAU,IACV,YAAa,IACb,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,WAAY,IACZ,SAAU,IACV,UAAW,IACX,QAAS,IACT,UAAW,IACX,cAAe,IACf,aAAc,IACd,QAAS,IACT,WAAY,IACZ,aAAc,IACd,UAAW,IACX,UAAW,IACX,mBAAoB,IACpB,QAAS,IACT,QAAS,KACT,UAAW,IACX,aAAc,IACd,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,UAAW,IACX,mCAAoC,IACpC,SAAU,IACV,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,QAAS,IACT,SAAU,IACV,QAAS,IACT,SAAU,IACV,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,SAAU,IACV,SAAU,IACV,UAAW,IACX,WAAY,IACZ,OAAQ,IACR,OAAQ,IACR,YAAa,IACb,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,QAAS,KACT,UAAW,IACX,WAAY,IACZ,eAAgB,IAChB,eAAgB,IAChB,YAAa,IACb,cAAe,IACf,UAAW,IACX,OAAU,IACV,kBAAmB,IACnB,mBAAoB,IACpB,SAAU,IACV,SAAU,IACV,YAAa,IACb,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,WAAY,IACZ,SAAU,IACV,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,MAAO,IACP,WAAY,IACZ,SAAU,IACV,YAAa,IACb,WAAY,IACZ,OAAQ,IACR,IAAO,IACP,OAAQ,IACR,SAAU,IACV,SAAU,IACV,WAAY,IACZ,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,oBAAqB,IACrB,kBAAmB,IACnB,0BAA2B,IAC3B,oBAAqB,IACrB,oBAAqB,IACrB,QAAS,IACT,WAAY,IACZ,WAAY,IACZ,eAAgB,IAChB,SAAU,IACV,OAAQ,IACR,iBAAkB,IAClB,WAAY,IACZ,SAAU,IACV,OAAQ,IACR,UAAW,IACX,OAAU,IACV,iBAAkB,IAClB,UAAW,IACX,QAAS,IACT,QAAS,IACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,KACT,QAAS,KACT,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,SAAU,IACV,YAAa,IACb,YAAa,IACb,YAAa,IACb,WAAY,IACZ,aAAc,IACd,kBAAmB,IACnB,yBAA0B,IAC1B,aAAc,IACd,mBAAoB,IACpB,mBAAoB,IACpB,wBAAyB,IACzB,iBAAkB,IAClB,uBAAwB,IACxB,4BAA6B,IAC7B,wBAAyB,IACzB,oBAAqB,IACrB,kBAAmB,IACnB,iBAAkB,IAClB,qBAAsB,IACtB,qBAAsB,IACtB,aAAc,IACd,aAAc,IACd,aAAc,IACd,gBAAiB,IACjB,oBAAqB,IACrB,aAAc,IACd,kBAAmB,IACnB,mBAAoB,IACpB,oBAAqB,IACrB,uBAAwB,IACxB,qBAAsB,IACtB,kBAAmB,IACnB,qBAAsB,IACtB,sBAAuB,IACvB,mBAAoB,IACpB,sBAAuB,IACvB,WAAY,IACZ,gBAAiB,IACjB,YAAa,IACb,UAAW,IACX,UAAW,IACX,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,UAAW,IACX,UAAW,IACX,SAAU,IACV,QAAS,IACT,SAAU,IACV,SAAU,IACV,SAAU,IACV,WAAY,IACZ,QAAS,IACT,QAAS,IACT,YAAa,IACb,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,QAAS,IACT,QAAS,IACT,QAAS,IACT,MAAO,IACP,SAAU,IACV,OAAQ,KACR,OAAQ,KACR,MAAO,IACP,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,OAAQ,IACR,UAAW,IACX,MAAO,IACP,WAAY,IACZ,YAAa,IACb,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,YAAa,IACb,oBAAqB,IACrB,UAAW,IACX,wBAAyB,IACzB,QAAS,IACT,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,QAAS,IACT,UAAW,IACX,SAAU,IACV,QAAS,IACT,WAAY,IACZ,WAAY,IACZ,SAAU,IACV,UAAW,IACX,WAAY,IACZ,SAAU,IACV,cAAe,IACf,eAAgB,IAChB,SAAU,IACV,UAAW,IACX,cAAe,IACf,UAAW,IACX,eAAgB,IAChB,SAAU,IACV,WAAY,IACZ,YAAa,IACb,SAAU,IACV,SAAU,IACV,QAAS,IACT,QAAS,IACT,SAAU,IACV,QAAS,IACT,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,IAAO,IACP,OAAQ,IACR,IAAO,IACP,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,QAAS,IACT,QAAS,IACT,SAAU,IACV,UAAW,IACX,eAAgB,IAChB,gBAAiB,IACjB,gBAAiB,IACjB,iBAAkB,IAClB,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,UAAW,IACX,SAAU,IACV,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,SAAU,IACV,qBAAsB,IACtB,yBAA0B,IAC1B,SAAU,KACV,QAAS,IACT,SAAU,IACV,SAAU,IACV,QAAS,IACT,QAAS,KACT,QAAS,KACT,UAAW,IACX,UAAW,IACX,QAAS,IACT,SAAU,IACV,cAAe,IACf,YAAa,IACb,UAAW,IACX,OAAU,IACV,UAAW,IACX,UAAW,IACX,OAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,QAAS,IACT,QAAS,KACT,UAAW,IACX,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,QAAS,IACT,MAAO,IACP,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,YAAa,IACb,OAAQ,IACR,SAAU,IACV,UAAW,IACX,WAAY,IACZ,YAAa,IACb,QAAS,KACT,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,MAAO,IACP,MAAO,IACP,OAAQ,IACR,SAAU,IACV,QAAS,IACT,QAAS,IACT,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,YAAa,IACb,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,SAAU,IACV,gBAAiB,IACjB,oBAAqB,IACrB,oBAAqB,IACrB,kBAAmB,IACnB,eAAgB,IAChB,qBAAsB,IACtB,gBAAiB,IACjB,QAAS,KACT,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,MAAO,IACP,GAAM,IACN,MAAO,IACP,MAAO,IACP,GAAM,IACN,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,WAAY,IACZ,aAAc,IACd,UAAW,IACX,UAAW,IACX,aAAc,IACd,cAAe,IACf,WAAY,IACZ,UAAW,IACX,aAAc,KACd,QAAS,KACT,SAAU,IACV,UAAW,IACX,QAAS,IACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,QAAS,IACT,WAAY,IACZ,SAAU,IACV,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,aAAc,IACd,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,KACR,gBAAiB,IACjB,YAAa,IACb,YAAa,IACb,SAAU,IACV,UAAW,IACX,iBAAkB,IAClB,kBAAmB,IACnB,QAAS,IACT,QAAS,KACT,UAAW,IACX,kBAAmB,IACnB,QAAS,IACT,QAAS,KACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,gBAAiB,IACjB,aAAc,IACd,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,MAAO,IACP,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,QAAS,IACT,QAAS,IACT,SAAU,IACV,MAAS,IACT,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,MAAO,IACP,UAAW,IACX,SAAU,IACV,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,MAAO,IACP,SAAU,IACV,SAAU,IACV,SAAU,IACV,cAAe,IACf,YAAa,IACb,YAAa,IACb,SAAU,IACV,QAAS,IACT,SAAU,IACV,WAAY,IACZ,MAAO,IACP,UAAW,IACX,SAAU,IACV,YAAa,IACb,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,YAAa,IACb,YAAa,IACb,YAAa,IACb,gBAAiB,IACjB,YAAa,IACb,WAAY,IACZ,kBAAmB,IACnB,kBAAmB,IACnB,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,SAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,QAAS,KACT,QAAS,IACT,WAAY,IACZ,SAAU,IACV,SAAU,IACV,UAAW,IACX,SAAU,IACV,MAAO,IACP,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,OAAQ,KACR,SAAU,IACV,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,OAAQ,KACR,UAAW,IACX,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,SAAU,IACV,UAAW,IACX,UAAW,IACX,YAAa,IACb,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,QAAS,IACT,SAAU,IACV,UAAW,IACX,OAAQ,IACR,cAAe,IACf,SAAU,IACV,MAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,SAAU,IACV,WAAY,IACZ,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,WAAY,IACZ,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,QAAS,IACT,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,UAAW,IACX,WAAY,IACZ,YAAa,IACb,QAAS,IACT,MAAO,IACP,MAAO,IACP,oBAAqB,IACrB,aAAc,IACd,aAAc,IACd,aAAc,IACd,gBAAiB,IACjB,uBAAwB,IACxB,iBAAkB,IAClB,eAAgB,IAChB,qBAAsB,IACtB,qBAAsB,IACtB,kBAAmB,IACnB,qBAAsB,IACtB,aAAc,IACd,mBAAoB,IACpB,iBAAkB,IAClB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,mBAAoB,IACpB,qBAAsB,IACtB,uBAAwB,IACxB,mBAAoB,IACpB,WAAY,IACZ,gBAAiB,IACjB,iBAAkB,IAClB,kBAAmB,IACnB,gBAAiB,IACjB,mBAAoB,IACpB,qBAAsB,IACtB,oBAAqB,IACrB,mBAAoB,IACpB,gBAAiB,IACjB,mBAAoB,IACpB,cAAe,IACf,iBAAkB,IAClB,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,YAAa,IACb,OAAQ,IACR,SAAU,IACV,UAAW,IACX,WAAY,IACZ,YAAa,IACb,QAAS,KACT,UAAW,IACX,cAAe,IACf,WAAY,IACZ,aAAc,IACd,cAAe,IACf,oBAAqB,IACrB,iBAAkB,IAClB,eAAgB,IAChB,WAAY,IACZ,YAAa,IACb,WAAY,IACZ,kBAAmB,IACnB,aAAc,IACd,UAAW,IACX,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,MAAO,IACP,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,SAAU,IACV,QAAS,IACT,QAAS,IACT,MAAO,IACP,MAAO,IACP,SAAU,IACV,YAAa,IACb,cAAe,IACf,UAAW,IACX,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,cAAe,IACf,QAAS,IACT,YAAa,IACb,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,sBAAuB,IACvB,sBAAuB,IACvB,sBAAuB,IACvB,cAAe,IACf,kBAAmB,IACnB,kBAAmB,IACnB,kBAAmB,IACnB,iBAAkB,IAClB,kBAAmB,IACnB,SAAU,IACV,QAAS,KACT,QAAS,KACT,UAAW,IACX,WAAY,IACZ,UAAW,IACX,UAAW,IACX,kBAAmB,IACnB,mBAAoB,IACpB,OAAQ,IACR,WAAY,IACZ,QAAS,IACT,QAAS,IACT,UAAW,IACX,SAAU,IACV,YAAa,IACb,SAAU,IACV,UAAW,IACX,OAAQ,IACR,SAAU,IACV,UAAW,IACX,QAAS,IACT,QAAS,KACT,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,QAAS,IACT,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,MAAO,IACP,GAAM,IACN,MAAO,IACP,MAAO,IACP,GAAM,IACN,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,WAAY,IACZ,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,YAAa,IACb,WAAY,IACZ,aAAc,KACd,QAAS,KACT,QAAS,IACT,KAAQ,IACR,QAAS,IACT,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,cAAe,IACf,cAAe,IACf,YAAa,IACb,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,iBAAkB,IAClB,eAAgB,IAChB,aAAc,IACd,OAAQ,KACR,OAAQ,KACR,OAAQ,IACR,SAAU,IACV,MAAS,IACT,OAAQ,IACR,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,WAAY,IACZ,aAAc,IACd,QAAS,IACT,QAAS,IACT,UAAW,IACX,UAAW,IACX,QAAS,KACT,QAAS,KACT,MAAO,IACP,QAAS,IACT,QAAS,KACT,UAAW,IACX,MAAO,IACP,MAAO,IACP,YAAa,IACb,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,QAAS,KACT,OAAQ,IACR,QAAS,KACT,SAAU,KACV,SAAU,IACV,WAAY,IACZ,SAAU,IACV,WAAY,IACZ,YAAa,IACb,QAAS,IACT,KAAQ,IACR,SAAU,KACV,UAAW,KACX,QAAS,IACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,YAAa,KACb,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,MAAO,IACP,UAAW,IACX,SAAU,IACV,SAAU,IACV,WAAY,IACZ,SAAU,KACV,uBAAwB,IACxB,sBAAuB,IACvB,qBAAsB,IACtB,yBAA0B,IAC1B,UAAW,IACX,UAAW,IACX,SAAU,KACV,wBAAyB,IACzB,kBAAmB,IACnB,WAAY,KACZ,UAAW,IACX,WAAY,IACZ,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,IACR,QAAS,IACT,SAAU,KACV,aAAc,KACd,QAAS,KACT,OAAQ,KACR,SAAU,IACV,OAAQ,KACR,OAAQ,IACR,QAAS,IACT,QAAS,KACT,SAAU,IACV,SAAU,IACV,SAAU,IACV,MAAO,IACP,OAAQ,IACR,QAAS,IACT,OAAQ,IACR,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,QAAS,IACT,OAAQ,KACR,OAAQ,IACR,cAAe,IACf,cAAe,IACf,mBAAoB,IACpB,mBAAoB,IACpB,QAAS,IACT,SAAU,KACV,aAAc,KACd,QAAS,KACT,SAAU,IACV,OAAQ,KACR,SAAU,IACV,OAAQ,KACR,OAAQ,IACR,SAAU,IACV,UAAW,IACX,QAAS,KACT,QAAS,IACT,WAAY,IACZ,oBAAqB,IACrB,QAAS,IACT,QAAS,KACT,OAAQ,IACR,OAAQ,IACR,IAAO,IACP,gBAAiB,IACjB,aAAc,IACd,wBAAyB,IACzB,cAAe,IACf,YAAa,IACb,iBAAkB,KAClB,aAAc,IACd,cAAe,IACf,mBAAoB,IACpB,uBAAwB,KACxB,qBAAsB,KACtB,kBAAmB,IACnB,wBAAyB,KACzB,mBAAoB,IACpB,mBAAoB,KACpB,gBAAiB,KACjB,SAAU,IACV,YAAa,KACb,UAAW,KACX,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,mBAAoB,IACpB,sBAAuB,KACvB,wBAAyB,IACzB,WAAY,IACZ,gBAAiB,IACjB,kBAAmB,IACnB,eAAgB,KAChB,qBAAsB,KACtB,gBAAiB,IACjB,2BAA4B,KAC5B,qBAAsB,KACtB,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,eAAgB,IAChB,oBAAqB,KACrB,yBAA0B,IAC1B,qBAAsB,IACtB,oBAAqB,IACrB,uBAAwB,KACxB,yBAA0B,IAC1B,mBAAoB,KACpB,wBAAyB,IACzB,qBAAsB,KACtB,0BAA2B,IAC3B,aAAc,KACd,kBAAmB,IACnB,eAAgB,IAChB,oBAAqB,KACrB,yBAA0B,IAC1B,oBAAqB,KACrB,eAAgB,KAChB,oBAAqB,IACrB,YAAa,IACb,iBAAkB,IAClB,qBAAsB,IACtB,iBAAkB,IAClB,kBAAmB,IACnB,QAAS,IACT,aAAc,IACd,UAAW,KACX,SAAU,KACV,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,QAAS,KACT,SAAU,IACV,WAAY,KACZ,SAAU,IACV,SAAU,IACV,UAAW,KACX,UAAW,KACX,eAAgB,IAChB,eAAgB,IAChB,SAAU,IACV,UAAW,IACX,OAAQ,IACR,UAAW,IACX,QAAS,KACT,QAAS,KACT,QAAS,KACT,aAAc,IACd,kBAAmB,IACnB,QAAS,IACT,SAAU,IACV,UAAW,IACX,SAAU,IACV,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,QAAS,IACT,SAAU,KACV,SAAU,IACV,WAAY,KACZ,aAAc,IACd,cAAe,KACf,SAAU,IACV,WAAY,KACZ,QAAS,IACT,SAAU,KACV,SAAU,IACV,WAAY,KACZ,aAAc,IACd,cAAe,KACf,QAAS,IACT,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,iBAAkB,IAClB,mBAAoB,IACpB,kBAAmB,IACnB,oBAAqB,IACrB,MAAO,IACP,MAAO,IACP,OAAQ,IACR,UAAW,IACX,SAAU,IACV,QAAS,KACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,KACT,QAAS,KACT,UAAW,IACX,WAAY,IACZ,UAAW,IACX,QAAS,KACT,QAAS,KACT,WAAY,KACZ,UAAW,IACX,WAAY,KACZ,SAAU,KACV,UAAW,IACX,SAAU,IACV,SAAU,IACV,WAAY,IACZ,UAAW,IACX,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,QAAS,IACT,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,UAAW,IACX,UAAW,IACX,QAAS,IACT,QAAS,IACT,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,KACR,OAAQ,KACR,QAAS,IACT,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,OAAQ,IACR,SAAU,IACV,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,WAAY,IACZ,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,QAAS,IACT,UAAW,IACX,QAAS,KACT,QAAS,KACT,QAAS,IACT,wBAAyB,IACzB,kBAAmB,IACnB,SAAU,IACV,SAAU,IACV,MAAO,IACP,MAAO,IACP,SAAU,IACV,OAAQ,IACR,SAAU,IACV,WAAY,IACZ,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,MAAO,IACP,QAAS,KACT,QAAS,IACT,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,UAAW,IACX,UAAW,IACX,YAAa,IACb,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,SAAU,IACV,WAAY,IACZ,aAAc,IACd,eAAgB,IAChB,mBAAoB,IACpB,OAAQ,IACR,QAAS,IACT,KAAQ,IACR,YAAa,IACb,UAAW,IACX,SAAU,IACV,QAAS,IACT,YAAa,IACb,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,WAAY,IACZ,OAAQ,KACR,OAAQ,KACR,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,UAAW,IACX,SAAU,IACV,MAAO,IACP,MAAO,IACP,aAAc,IACd,OAAQ,IACR,UAAW,IACX,WAAY,IACZ,UAAW,IACX,QAAS,IACT,YAAa,IACb,SAAU,IACV,WAAY,IACZ,UAAW,IACX,UAAW,IACX,SAAU,IACV,aAAc,IACd,UAAW,IACX,OAAU,IACV,WAAY,IACZ,WAAY,IACZ,MAAO,IACP,iBAAkB,IAClB,YAAa,IACb,QAAS,IACT,QAAS,KACT,SAAU,IACV,MAAS,IACT,MAAO,IACP,MAAO,IACP,QAAS,IACT,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,cAAe,IACf,eAAgB,IAChB,YAAa,IACb,iBAAkB,IAClB,sBAAuB,IACvB,iBAAkB,IAClB,UAAW,IACX,eAAgB,IAChB,YAAa,IACb,YAAa,IACb,WAAY,IACZ,SAAU,IACV,SAAU,IACV,UAAW,IACX,SAAU,IACV,QAAS,IACT,UAAW,IACX,QAAS,IACT,WAAY,IACZ,YAAa,IACb,YAAa,IACb,YAAa,IACb,QAAS,IACT,cAAe,IACf,gBAAiB,IACjB,UAAW,IACX,SAAU,IACV,UAAW,IACX,QAAS,KACT,QAAS,KACT,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,QAAS,IACT,QAAS,IACT,QAAS,KACT,UAAW,IACX,QAAS,KACT,QAAS,KACT,eAAgB,IAChB,WAAY,IACZ,SAAU,IACV,WAAY,IACZ,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,SAAU,IACV,QAAS,KACT,UAAW,IACX,UAAW,IACX,SAAU,IACV,YAAa,IACb,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,SAAU,IACV,MAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,UAAW,IACX,SAAU,IACV,WAAY,IACZ,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,WAAY,IACZ,UAAW,IACX,UAAW,IACX,SAAU,IACV,UAAW,IACX,UAAW,IACX,SAAU,IACV,aAAc,IACd,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,WAAY,IACZ,SAAU,IACV,UAAW,IACX,QAAS,IACT,MAAO,IACP,QAAS,IACT,WAAY,IACZ,YAAa,IACb,SAAU,IACV,QAAS,IACT,OAAQ,IACR,IAAO,IACP,OAAQ,IACR,IAAO,IACP,kBAAmB,IACnB,sBAAuB,IACvB,wBAAyB,IACzB,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,KACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,qBAAsB,IACtB,cAAe,IACf,cAAe,IACf,cAAe,IACf,iBAAkB,IAClB,uBAAwB,IACxB,kBAAmB,IACnB,gBAAiB,IACjB,sBAAuB,IACvB,sBAAuB,IACvB,mBAAoB,IACpB,sBAAuB,IACvB,cAAe,IACf,oBAAqB,IACrB,kBAAmB,IACnB,mBAAoB,IACpB,qBAAsB,IACtB,oBAAqB,IACrB,mBAAoB,IACpB,YAAa,IACb,iBAAkB,IAClB,kBAAmB,IACnB,mBAAoB,IACpB,iBAAkB,IAClB,oBAAqB,IACrB,sBAAuB,IACvB,qBAAsB,IACtB,oBAAqB,IACrB,iBAAkB,IAClB,oBAAqB,IACrB,eAAgB,IAChB,kBAAmB,IACnB,QAAS,IACT,gBAAiB,IACjB,SAAU,IACV,SAAU,IACV,OAAQ,IACR,UAAW,IACX,cAAe,IACf,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,QAAS,IACT,QAAS,KACT,UAAW,IACX,WAAY,IACZ,gBAAiB,IACjB,QAAS,IACT,UAAW,IACX,YAAa,IACb,SAAU,IACV,eAAgB,IAChB,UAAW,IACX,QAAS,IACT,QAAS,KACT,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,SAAU,IACV,SAAU,IACV,YAAa,IACb,eAAgB,IAChB,WAAY,IACZ,MAAO,IACP,UAAW,IACX,UAAW,IACX,SAAU,IACV,MAAO,IACP,MAAO,IACP,QAAS,IACT,UAAW,IACX,UAAW,IACX,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,QAAS,IACT,UAAW,IACX,YAAa,IACb,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,SAAU,IACV,SAAU,IACV,WAAY,IACZ,QAAS,IACT,KAAQ,IACR,QAAS,IACT,UAAW,IACX,YAAa,IACb,SAAU,IACV,QAAS,IACT,OAAQ,KACR,OAAQ,KACR,UAAW,IACX,SAAU,IACV,UAAW,IACX,UAAW,IACX,QAAS,IACT,QAAS,IACT,kBAAmB,IACnB,kBAAmB,IACnB,YAAa,IACb,iBAAkB,IAClB,mBAAoB,IACpB,gBAAiB,IACjB,OAAQ,IACR,IAAO,IACP,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,OAAQ,IACR,UAAW,IACX,QAAS,IACT,SAAU,IACV,QAAS,IACT,SAAU,IACV,QAAS,IACT,SAAU,IACV,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,SAAU,IACV,eAAgB,IAChB,iBAAkB,IAClB,UAAW,IACX,YAAa,IACb,QAAS,IACT,SAAU,IACV,OAAQ,IACR,QAAS,IACT,SAAU,KACV,UAAW,IACX,UAAW,IACX,OAAQ,IACR,QAAS,IACT,UAAW,IACX,QAAS,KACT,QAAS,KACT,UAAW,IACX,aAAc,IACd,QAAS,IACT,SAAU,IACV,UAAW,KACX,SAAU,IACV,UAAW,KACX,QAAS,IACT,SAAU,IACV,UAAW,IACX,YAAa,IACb,cAAe,IACf,SAAU,IACV,UAAW,IACX,YAAa,IACb,cAAe,IACf,OAAQ,IACR,UAAW,IACX,UAAW,IACX,sBAAuB,IACvB,gBAAiB,IACjB,qBAAsB,IACtB,kBAAmB,IACnB,uBAAwB,IACxB,eAAgB,IAChB,UAAW,IACX,QAAS,IACT,SAAU,IACV,QAAS,KACT,QAAS,KACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,QAAS,IACT,SAAU,IACV,mBAAoB,IACpB,eAAgB,IAChB,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,QAAS,IACT,QAAS,IACT,WAAY,IACZ,WAAY,IACZ,SAAU,IACV,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,UAAW,IACX,UAAW,IACX,YAAa,IACb,aAAc,IACd,eAAgB,IAChB,aAAc,IACd,cAAe,IACf,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,cAAe,IACf,eAAgB,IAChB,YAAa,IACb,iBAAkB,IAClB,sBAAuB,IACvB,iBAAkB,IAClB,UAAW,IACX,eAAgB,IAChB,YAAa,IACb,YAAa,IACb,WAAY,IACZ,YAAa,IACb,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,UAAW,IACX,WAAY,IACZ,QAAS,IACT,QAAS,IACT,WAAY,IACZ,YAAa,IACb,iBAAkB,IAClB,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,SAAU,IACV,SAAU,IACV,WAAY,IACZ,UAAW,IACX,UAAW,IACX,YAAa,IACb,aAAc,IACd,aAAc,IACd,cAAe,IACf,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,WAAY,IACZ,UAAW,IACX,SAAU,IACV,MAAS,IACT,OAAQ,KACR,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,UAAW,IACX,aAAc,IACd,aAAc,IACd,SAAU,IACV,SAAU,IACV,YAAa,IACb,UAAW,IACX,eAAgB,IAChB,YAAa,IACb,cAAe,KACf,UAAW,IACX,aAAc,IACd,SAAU,IACV,UAAW,IACX,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,SAAU,IACV,SAAU,IACV,cAAe,IACf,kBAAmB,IACnB,cAAe,IACf,SAAU,IACV,MAAS,IACT,UAAW,IACX,YAAa,IACb,UAAW,IACX,QAAS,IACT,QAAS,IACT,OAAQ,IACR,UAAW,IACX,UAAW,IACX,QAAS,KACT,QAAS,KACT,WAAY,IACZ,QAAS,IACT,UAAW,IACX,SAAU,IACV,SAAU,IACV,YAAa,IACb,gBAAiB,IACjB,gBAAiB,IACjB,kBAAmB,IACnB,aAAc,IACd,iBAAkB,IAClB,mBAAoB,IACpB,UAAW,IACX,QAAS,IACT,YAAa,IACb,aAAc,IACd,WAAY,IACZ,SAAU,IACV,WAAY,IACZ,YAAa,IACb,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,SAAU,IACV,oBAAqB,IACrB,qBAAsB,IACtB,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,QAAS,IACT,QAAS,IACT,YAAa,IACb,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,SAAU,IACV,MAAS,IACT,SAAU,IACV,MAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,UAAW,IACX,UAAW,IACX,SAAU,IACV,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,SAAU,IACV,SAAU,IACV,SAAU,IACV,UAAW,IACX,YAAa,IACb,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,IAAO,IACP,YAAa,IACb,cAAe,IACf,gBAAiB,IACjB,oBAAqB,IACrB,SAAU,IACV,aAAc,IACd,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,cAAe,IACf,oBAAqB,IACrB,eAAgB,IAChB,eAAgB,IAChB,eAAgB,IAChB,iBAAkB,IAClB,iBAAkB,IAClB,kBAAmB,IACnB,SAAU,IACV,kBAAmB,IACnB,mBAAoB,IACpB,QAAS,IACT,QAAS,IACT,SAAU,IACV,WAAY,IACZ,WAAY,IACZ,SAAU,IACV,cAAe,IACf,cAAe,IACf,UAAW,IACX,YAAa,IACb,UAAW,IACX,SAAU,IACV,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,SAAU,IACV,UAAW,IACX,UAAW,IACX,QAAS,IACT,SAAU,IACV,SAAU,IACV,QAAS,IACT,KAAQ,IACR,QAAS,IACT,KAAQ,IACR,WAAY,IACZ,UAAW,IACX,cAAe,IACf,YAAa,IACb,cAAe,IACf,UAAW,IACX,SAAU,IACV,aAAc,IACd,QAAS,IACT,QAAS,IACT,UAAW,IACX,YAAa,IACb,gBAAiB,KACjB,iBAAkB,KAClB,gBAAiB,KACjB,iBAAkB,KAClB,YAAa,IACb,mBAAoB,IACpB,oBAAqB,IACrB,QAAS,IACT,QAAS,IACT,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,SAAU,IACV,UAAW,IACX,UAAW,IACX,UAAW,IACX,QAAS,IACT,QAAS,IACT,eAAgB,IAChB,gBAAiB,IACjB,qBAAsB,IACtB,iBAAkB,IAClB,iBAAkB,IAClB,OAAQ,KACR,OAAQ,KACR,SAAU,IACV,SAAU,KACV,SAAU,KACV,QAAS,KACT,QAAS,KACT,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,KACX,UAAW,IACX,WAAY,IACZ,SAAU,IACV,SAAU,IACV,UAAW,IACX,SAAU,IACV,SAAU,IACV,UAAW,IACX,UAAW,IACX,OAAQ,KACR,OAAQ,KACR,QAAS,KACT,QAAS,KACT,MAAO,IACP,MAAO,IACP,UAAW,IACX,QAAS,KACT,QAAS,KACT,QAAS,IACT,SAAU,IACV,QAAS,IACT,SAAU,IACV,OAAQ,KACR,OAAQ,KACR,SAAU,IACV,SAAU,IACV,MAAO,IACP,MAAO,IACP,SAAU,IACV,SAAU,IACV,QAAS,IACT,QAAS,IACT,SAAU,IACV,QAAS,KACT,QAAS,KACT,UAAW,IACX,UAAW,IACX,SAAU,IACV,SAAU,IACV,QAAS,KACT,QAAS,KACT,UAAW,IACX,UAAW,IACX,SAAU,IACV,QAAS,IACT,UAAW,IACX,UAAW,IACX,OAAU,IACV,UAAW,IACX,OAAU,IACV,QAAS,IACT,QAAS,IACT,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,IAAO,IACP,OAAQ,KACR,OAAQ,KACR,QAAS,IACT,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,KAAQ,IACR,UAAW,IACX,UAAW,IACX,UAAW,IACX,UAAW,IACX,OAAQ,IACR,OAAQ,IACR,QAAS,IACT,QAAS,IACT,UAAW,IACX,kBAAmB,IACnB,QAAS,IACT,QAAS,IACT,OAAQ,IACR,OAAQ,KACR,QAAS,IACT,QAAS,IACT,WAAY,IACZ,QAAS,IACT,QAAS,KACT,QAAS,KACT,QAAS,KACT,OAAQ,IACR,QAAS,KC3rEN,SAASC,GAAWC,EAAUC,GACjC,GAAID,EAASvjD,OAASwjD,EAAOxjD,OACzB,OAAO,EAEX,IAAK,IAAIrF,EAAI,EAAGA,EAAI6oD,EAAOxjD,OAAQrF,IAC/B,GAAI4oD,EAAS5oD,KAAO6oD,EAAO7oD,GACvB,OAAO,EAGf,OAAO,EAKJ,SAAS8oD,GAASF,EAAUC,GAC/B,IAAIvK,EAAOsK,EAASvjD,OAASwjD,EAAOxjD,OACpC,OAAIi5C,EAAO,EACAsK,EAASniD,YAAYoiD,KAAYvK,EAE1B,IAATA,GACEsK,IAAaC,EAmBrB,SAASE,GAAO9nD,EAAOmX,GAC1B,IAAIrW,EAAI,GACR,MAAOqW,EAAQ,EACS,KAAP,EAARA,KACDrW,GAAKd,GAETA,GAASA,EACTmX,KAAkB,EAEtB,OAAOrW,EAEX,IAAI,GAAK,IAAIyE,WAAW,GACpBwiD,GAAK,IAAIxiD,WAAW,GACpByiD,GAAK,IAAIziD,WAAW,GACpB0iD,GAAK,IAAI1iD,WAAW,GACpB2iD,GAAK,IAAI3iD,WAAW,GACpB4iD,GAAK,IAAI5iD,WAAW,GACjB,SAAS6iD,GAAgBvrB,EAAM7uB,GAClC,IAAI5O,EAAIy9B,EAAKt3B,WAAWyI,GACxB,OAAQ,IAAM5O,GAAKA,GAAK2oD,IAAQC,IAAM5oD,GAAKA,GAAK6oD,IAAQC,IAAM9oD,GAAKA,GAAK+oD,GC1DrE,SAAS,GAAUpvC,GACtB,MAAsB,qBAARA,ECDX,SAASsvC,GAAuBpG,GACnC,GAAKA,EAGL,MAAqB,kBAAVA,EACA,CACHpO,KAAM,WACN7zC,MAAOiiD,GAGR,CACHpO,KAAM,WACN7zC,MAAOiiD,EAAMjiD,OCXrB,IAAIsoD,GAAkC,WAMlC,SAASA,EAAiBhkD,EAAIikD,GAC1B,IAAI77C,EAAQnF,KACZA,KAAKjD,GAAKA,EACViD,KAAKihD,MAAQ,GACbjhD,KAAKkhD,QAAU,GACflhD,KAAKmhD,aAAe,GACpBnhD,KAAKihD,MAAQD,EAAW3M,MAAQ,GAChCr0C,KAAKohD,kBAAoBJ,EAAWK,kBAAoB,GACxDrhD,KAAKihD,MAAMx8C,SAAQ,SAAU/L,GACzByM,EAAM+7C,QAAQxoD,EAAEX,KAAKqK,eAAiB1J,KAEtCsoD,EAAWjlB,WACXilB,EAAWjlB,UAAUt3B,SAAQ,SAAUyS,GACnC/R,EAAMg8C,aAAajqC,EAAGnf,MAAQmf,EAAGpN,UAsD7C,OAlDAi3C,EAAiB3nD,UAAUkoD,aAAe,WACtC,OAAO,GAEXP,EAAiB3nD,UAAUmoD,MAAQ,WAC/B,OAAOvhD,KAAKjD,IAEhBgkD,EAAiB3nD,UAAUooD,YAAc,WACrC,OAAOxhD,KAAKihD,OAEhBF,EAAiB3nD,UAAUqoD,kBAAoB,SAAUnC,GACrD,IAAIH,EAAa,GACbuC,EAAmB,SAAU5jD,GAC7BqhD,EAAW/hD,KAAKU,IAEhB6jD,EAAW3hD,KAAKkhD,QAAQ5B,EAAIl9C,eAKhC,OAJIu/C,GACAA,EAASxC,WAAW16C,QAAQi9C,GAEhC1hD,KAAKohD,kBAAkB38C,QAAQi9C,GACxBvC,GAEX4B,EAAiB3nD,UAAUwoD,cAAgB,SAAUtC,EAAKuC,GACtD,IAAI18C,EAAQnF,KACR8J,EAAS,GACb+3C,EAAYA,EAAUz/C,cACtB,IAAI0/C,EAAoB,SAAU3C,GAC9BA,EAAW16C,SAAQ,SAAU3G,GACrBA,EAAE/F,KAAKqK,gBAAkBy/C,IACrB/jD,EAAEgM,QACFhM,EAAEgM,OAAOrF,SAAQ,SAAU1D,GACvB+I,EAAO1M,KAAK2D,MAGhBjD,EAAEm+B,UACE92B,EAAMg8C,aAAarjD,EAAEm+B,WACrB92B,EAAMg8C,aAAarjD,EAAEm+B,UAAUx3B,SAAQ,SAAU1D,GAC7C+I,EAAO1M,KAAK2D,WAOhC4gD,EAAW3hD,KAAKkhD,QAAQ5B,EAAIl9C,eAKhC,OAJIu/C,GACAG,EAAkBH,EAASxC,YAE/B2C,EAAkB9hD,KAAKohD,mBAChBt3C,GAEJi3C,EAzE0B,GAgF9B,SAASgB,GAAsBC,EAAMC,EAAUC,QACjC,IAAbD,IAAuBA,EAAW,IACtC,IAAI78C,EAAS,CACTknC,KAAM4V,EAAsB,WAAa,YACzCzpD,MAAO,IAEX,GAAIupD,EAAKzU,cAA0C,IAA3B0U,EAASxO,cAAyB,CACtD,IAAI0O,EAAwBrB,GAAuBkB,EAAKzU,aACpD4U,IACA/8C,EAAO3M,OAAS0pD,EAAsB1pD,OAkB9C,GAfIupD,EAAKI,YAAcJ,EAAKI,WAAWvlD,OAAS,IAA6B,IAAxBolD,EAASG,aACtDh9C,EAAO3M,MAAMoE,SACbuI,EAAO3M,OAAS,QAGhB2M,EAAO3M,OADPypD,EACgBF,EAAKI,WAAW57C,KAAI,SAAUlO,GAC1C,MAAO,IAAMA,EAAEP,KAAO,KAAOO,EAAEuhC,IAAM,OACtCt7B,KAAK,OAGQyjD,EAAKI,WAAW57C,KAAI,SAAUlO,GAC1C,OAAOA,EAAEP,KAAO,KAAOO,EAAEuhC,OAC1Bt7B,KAAK,OAGK,KAAjB6G,EAAO3M,MAGX,OAAO2M,EC/GX,IAAI,GAAwC,SAAU49B,EAASC,EAAYtgC,EAAGugC,GAC1E,SAASC,EAAM1qC,GAAS,OAAOA,aAAiBkK,EAAIlK,EAAQ,IAAIkK,GAAE,SAAUnF,GAAWA,EAAQ/E,MAC/F,OAAO,IAAKkK,IAAMA,EAAIpF,WAAU,SAAUC,EAASoX,GAC/C,SAASwuB,EAAU3qC,GAAS,IAAM4qC,EAAKH,EAAUj9B,KAAKxN,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACpF,SAAS4nC,EAAS7qC,GAAS,IAAM4qC,EAAKH,EAAU,SAASzqC,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACvF,SAAS2nC,EAAKj+B,GAAUA,EAAOc,KAAO1I,EAAQ4H,EAAO3M,OAAS0qC,EAAM/9B,EAAO3M,OAAOgF,KAAK2lC,EAAWE,GAClGD,GAAMH,EAAYA,EAAUrhC,MAAMmhC,EAASC,GAAc,KAAKh9B,YAGlEo8C,GAA4C,SAAUrf,EAASsf,GAC/D,IAAsG7jD,EAAGsD,EAAGrJ,EAAGgH,EAA3G+C,EAAI,CAAEqpC,MAAO,EAAGyW,KAAM,WAAa,GAAW,EAAP7pD,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAO8pD,KAAM,GAAIC,IAAK,IAChG,OAAO/iD,EAAI,CAAEuG,KAAMy8C,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,oBAAXnqD,SAA0BmH,EAAEnH,OAAOkN,UAAY,WAAa,OAAOzF,OAAUN,EACvJ,SAASgjD,EAAKzpD,GAAK,OAAO,SAAU8H,GAAK,OAAOsiC,EAAK,CAACpqC,EAAG8H,KACzD,SAASsiC,EAAKsf,GACV,GAAIlkD,EAAG,MAAM,IAAIb,UAAU,mCAC3B,MAAO6E,EAAG,IACN,GAAIhE,EAAI,EAAGsD,IAAMrJ,EAAY,EAARiqD,EAAG,GAAS5gD,EAAE,UAAY4gD,EAAG,GAAK5gD,EAAE,YAAcrJ,EAAIqJ,EAAE,YAAcrJ,EAAEf,KAAKoK,GAAI,GAAKA,EAAEkE,SAAWvN,EAAIA,EAAEf,KAAKoK,EAAG4gD,EAAG,KAAKz8C,KAAM,OAAOxN,EAE3J,OADIqJ,EAAI,EAAGrJ,IAAGiqD,EAAK,CAAS,EAARA,EAAG,GAAQjqD,EAAED,QACzBkqD,EAAG,IACP,KAAK,EAAG,KAAK,EAAGjqD,EAAIiqD,EAAI,MACxB,KAAK,EAAc,OAAXlgD,EAAEqpC,QAAgB,CAAErzC,MAAOkqD,EAAG,GAAIz8C,MAAM,GAChD,KAAK,EAAGzD,EAAEqpC,QAAS/pC,EAAI4gD,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKlgD,EAAEggD,IAAIG,MAAOngD,EAAE+/C,KAAKI,MAAO,SACxC,QACI,GAAMlqD,EAAI+J,EAAE+/C,OAAM9pD,EAAIA,EAAEmE,OAAS,GAAKnE,EAAEA,EAAEmE,OAAS,MAAkB,IAAV8lD,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAElgD,EAAI,EAAG,SACjG,GAAc,IAAVkgD,EAAG,MAAcjqD,GAAMiqD,EAAG,GAAKjqD,EAAE,IAAMiqD,EAAG,GAAKjqD,EAAE,IAAM,CAAE+J,EAAEqpC,MAAQ6W,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYlgD,EAAEqpC,MAAQpzC,EAAE,GAAI,CAAE+J,EAAEqpC,MAAQpzC,EAAE,GAAIA,EAAIiqD,EAAI,MAC7D,GAAIjqD,GAAK+J,EAAEqpC,MAAQpzC,EAAE,GAAI,CAAE+J,EAAEqpC,MAAQpzC,EAAE,GAAI+J,EAAEggD,IAAIrlD,KAAKulD,GAAK,MACvDjqD,EAAE,IAAI+J,EAAEggD,IAAIG,MAChBngD,EAAE+/C,KAAKI,MAAO,SAEtBD,EAAKL,EAAK3qD,KAAKqrC,EAASvgC,GAC1B,MAAO/G,GAAKinD,EAAK,CAAC,EAAGjnD,GAAIqG,EAAI,EAAK,QAAUtD,EAAI/F,EAAI,EACtD,GAAY,EAARiqD,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAElqD,MAAOkqD,EAAG,GAAKA,EAAG,QAAK,EAAQz8C,MAAM,KAK9E,GAA2C,WAC3C,SAAS28C,EAA0BC,GAC/B9iD,KAAK8iD,cAAgBA,EACrB9iD,KAAK+iD,oBAAsB,GA0E/B,OAxEAF,EAA0BzpD,UAAU4pD,qBAAuB,SAAU5mB,GAC7D6mB,GAAgB7mB,EAAQkjB,IAAKljB,EAAQylB,YACrC7hD,KAAK+iD,oBAAoB3lD,KAAKg/B,IAGtCymB,EAA0BzpD,UAAU8pD,mBAAqB,SAAUvN,EAAUwN,GACzE,OAAO,GAAUnjD,UAAM,OAAQ,GAAQ,WACnC,IAAIoF,EAAQ2jC,EAAIvvC,EAAI4pD,EAAqBC,EAAWC,EAAcC,EAAavyC,EAAIwyC,EAAexB,EAClG,OAAOK,GAAYriD,MAAM,SAAUoR,GAC/B,OAAQA,EAAG06B,OACP,KAAK,EACD1mC,EAAS,CAAEguC,MAAO,GAAIC,cAAc,GACpCtK,EAAK,EAAGvvC,EAAKwG,KAAK+iD,oBAClB3xC,EAAG06B,MAAQ,EACf,KAAK,EACD,OAAM/C,EAAKvvC,EAAGqD,QACdumD,EAAsB5pD,EAAGuvC,GACzBsa,EAAYI,GAAY9N,EAASpS,QAAQ6f,EAAoB92B,QACxDo3B,GAAkBL,GACH,MAAdA,GAAmC,OAAdA,EAA4B,CAAC,EAAa,IACrEj+C,EAAOiuC,cAAe,EACf,CAAC,EAAa,IAHqB,CAAC,EAAa,IAH1B,CAAC,EAAa,GAOhD,KAAK,EAED,OADAiQ,EAAeK,GAAmBP,EAAoB3qD,MAAO4qD,EAAWD,EAAoB92B,OACrF,CAAC,EAAatsB,KAAK4jD,uBAAuBR,EAAoB3qD,MAAO6qD,EAAc3N,EAAUwN,IACxG,KAAK,EAED,IADAI,EAAcnyC,EAAGmxC,OACZvxC,EAAK,EAAGwyC,EAAgBD,EAAavyC,EAAKwyC,EAAc3mD,OAAQmU,IACjEgxC,EAAOwB,EAAcxyC,GACrB5L,EAAOguC,MAAMh2C,KAAK4kD,GAEtB5wC,EAAG06B,MAAQ,EACf,KAAK,EAED,OADA/C,IACO,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAc3jC,WAK9Cy9C,EAA0BzpD,UAAUwqD,uBAAyB,SAAUC,EAAmBP,EAAc3N,EAAUwN,GAC9G,OAAO,GAAUnjD,UAAM,OAAQ,GAAQ,WACnC,IAAI8jD,EAAsBC,EAAW3+C,EAAQ4+C,EAAOjb,EAAIkb,EAASzqD,EAAIzB,EAAMgD,EAC3E,OAAOsnD,GAAYriD,MAAM,SAAUgR,GAC/B,OAAQA,EAAG86B,OACP,KAAK,EAGD,GAFAgY,EAAuBD,EAAkBziD,UAAU,EAAGyiD,EAAkB5lD,YAAY,KAAO,GAC3F8lD,EAAYZ,EAAgBe,iBAAiBJ,GAAwB,IAAKnO,EAAS1rB,MAC9E85B,EAAW,MAAO,CAAC,EAAa,GACrC/yC,EAAG86B,MAAQ,EACf,KAAK,EAGD,OAFA96B,EAAGwxC,KAAKplD,KAAK,CAAC,EAAG,EAAG,CAAE,IACtBgI,EAAS,GACF,CAAC,EAAapF,KAAK8iD,cAAciB,IAC5C,KAAK,EAED,IADAC,EAAQhzC,EAAGuxC,OACNxZ,EAAK,EAAGkb,EAAUD,EAAOjb,EAAKkb,EAAQpnD,OAAQksC,IAC/CvvC,EAAKyqD,EAAQlb,GAAKhxC,EAAOyB,EAAG,GAAIuB,EAAOvB,EAAG,GAEtCzB,EAAKiG,WAAW,KAAOmmD,IACvB/+C,EAAOhI,KAAKgnD,GAAqBrsD,EAAMgD,IAASm8C,GAASmN,UAAWf,IAG5E,MAAO,CAAC,EAAcl+C,GAC1B,KAAK,EAED,OADM4L,EAAGuxC,OACF,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAc,YAKvCM,EA7EmC,GAgF1CsB,GAAe,IAAInmD,WAAW,GAClC,SAASylD,GAAYJ,GACjB,OAAIlD,GAAWkD,EAAW,MAAQlD,GAAWkD,EAAW,KAC7CA,EAAUnlD,MAAM,GAAI,GAGpBmlD,EAGf,SAASK,GAAkBjrD,GACvB,QAAI0nD,GAAW1nD,EAAO,SAAW0nD,GAAW1nD,EAAO,UAAY0nD,GAAW1nD,EAAO,OAKrF,SAASwqD,GAAgB3D,EAAKgF,GAC1B,IAAIxmD,EAAIymD,GAAkBjF,GAC1B,QAAIxhD,IACiB,kBAANA,EACAA,IAAMwmD,GAGe,IAArBxmD,EAAEhC,QAAQwoD,IAK7B,SAASX,GAAmBE,EAAmBR,EAAW/2B,GACtD,IAAIg3B,EACAkB,EAAmBX,EAAkB5lD,YAAY,KACrD,IAA0B,IAAtBumD,EACAlB,EAAemB,GAAWn4B,EAAO,GAAI,OAEpC,CAGD,IAAIo4B,EAAsBrB,EAAUnlD,MAAMsmD,EAAmB,GACzDG,EAAWC,GAAct4B,EAAM9D,KAAM,EAAIk8B,EAAoB7nD,QAE7DgoD,EAAkBH,EAAoB5oD,QAAQ,KAC9CgpD,OAAS,EAETA,GADqB,IAArBD,EACSD,GAAcD,EAAUE,GAGxBD,GAAct4B,EAAM9D,KAAM,GAEvC86B,EAAe,GAAMxqD,OAAO6rD,EAAUG,GAE1C,OAAOxB,EAEX,SAASc,GAAqB9qD,EAAGyrD,EAAOzB,GACpC,OAAIyB,GACAzrD,GAAQ,IACD,CACHwyC,MAAOxyC,EACPgzC,KAAM,GAAmBsG,OACzB7G,SAAU/B,GAAS7oC,QAAQmiD,EAAchqD,GACzC4zC,QAAS,CACL5pC,MAAO,UACP4pC,QAAS,kCAKV,CACHpB,MAAOxyC,EACPgzC,KAAM,GAAmBoG,KACzB3G,SAAU/B,GAAS7oC,QAAQmiD,EAAchqD,IAIrD,SAASsrD,GAAch6B,EAAK9Q,GACxB,OAAO,GAAShhB,OAAO8xB,EAAI0O,KAAM1O,EAAI+f,UAAY7wB,GAErD,SAAS2qC,GAAWn4B,EAAO0pB,EAAaC,GACpC,IAAI/kC,EAAQ0zC,GAAct4B,EAAMpb,MAAO8kC,GACnCxtB,EAAMo8B,GAAct4B,EAAM9D,IAAKytB,GACnC,OAAO,GAAMn9C,OAAOoY,EAAOsX,GAG/B,IAAI+7B,GAAoB,CAEpBzmD,EAAG,OACHknD,KAAM,OACN1C,KAAM,aACNjV,IAAK,OACL4X,KAAM,SACNC,MAAO,CAAC,MAAO,YACfC,IAAK,CAAC,MAAO,YACbC,IAAK,OACLC,KAAM,OACNnsD,OAAQ,OACRosD,EAAG,OACHC,OAAQ,MAERC,MAAO,MACPC,OAAQ,aACRvY,QAAS,OACTwY,MAAO,MACPC,KAAM,WACNjL,MAAO,CAAC,MAAO,cACf5/B,OAAQ,MACR8qC,MAAO,MACPC,MAAO,CAAC,MAAO,WC9Nf,GAAwC,SAAU7iB,EAASC,EAAYtgC,EAAGugC,GAC1E,SAASC,EAAM1qC,GAAS,OAAOA,aAAiBkK,EAAIlK,EAAQ,IAAIkK,GAAE,SAAUnF,GAAWA,EAAQ/E,MAC/F,OAAO,IAAKkK,IAAMA,EAAIpF,WAAU,SAAUC,EAASoX,GAC/C,SAASwuB,EAAU3qC,GAAS,IAAM4qC,EAAKH,EAAUj9B,KAAKxN,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACpF,SAAS4nC,EAAS7qC,GAAS,IAAM4qC,EAAKH,EAAU,SAASzqC,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACvF,SAAS2nC,EAAKj+B,GAAUA,EAAOc,KAAO1I,EAAQ4H,EAAO3M,OAAS0qC,EAAM/9B,EAAO3M,OAAOgF,KAAK2lC,EAAWE,GAClGD,GAAMH,EAAYA,EAAUrhC,MAAMmhC,EAASC,GAAc,KAAKh9B,YAGlE,GAA4C,SAAU+8B,EAASsf,GAC/D,IAAsG7jD,EAAGsD,EAAGrJ,EAAGgH,EAA3G+C,EAAI,CAAEqpC,MAAO,EAAGyW,KAAM,WAAa,GAAW,EAAP7pD,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAO8pD,KAAM,GAAIC,IAAK,IAChG,OAAO/iD,EAAI,CAAEuG,KAAMy8C,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,oBAAXnqD,SAA0BmH,EAAEnH,OAAOkN,UAAY,WAAa,OAAOzF,OAAUN,EACvJ,SAASgjD,EAAKzpD,GAAK,OAAO,SAAU8H,GAAK,OAAOsiC,EAAK,CAACpqC,EAAG8H,KACzD,SAASsiC,EAAKsf,GACV,GAAIlkD,EAAG,MAAM,IAAIb,UAAU,mCAC3B,MAAO6E,EAAG,IACN,GAAIhE,EAAI,EAAGsD,IAAMrJ,EAAY,EAARiqD,EAAG,GAAS5gD,EAAE,UAAY4gD,EAAG,GAAK5gD,EAAE,YAAcrJ,EAAIqJ,EAAE,YAAcrJ,EAAEf,KAAKoK,GAAI,GAAKA,EAAEkE,SAAWvN,EAAIA,EAAEf,KAAKoK,EAAG4gD,EAAG,KAAKz8C,KAAM,OAAOxN,EAE3J,OADIqJ,EAAI,EAAGrJ,IAAGiqD,EAAK,CAAS,EAARA,EAAG,GAAQjqD,EAAED,QACzBkqD,EAAG,IACP,KAAK,EAAG,KAAK,EAAGjqD,EAAIiqD,EAAI,MACxB,KAAK,EAAc,OAAXlgD,EAAEqpC,QAAgB,CAAErzC,MAAOkqD,EAAG,GAAIz8C,MAAM,GAChD,KAAK,EAAGzD,EAAEqpC,QAAS/pC,EAAI4gD,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKlgD,EAAEggD,IAAIG,MAAOngD,EAAE+/C,KAAKI,MAAO,SACxC,QACI,GAAMlqD,EAAI+J,EAAE+/C,OAAM9pD,EAAIA,EAAEmE,OAAS,GAAKnE,EAAEA,EAAEmE,OAAS,MAAkB,IAAV8lD,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAElgD,EAAI,EAAG,SACjG,GAAc,IAAVkgD,EAAG,MAAcjqD,GAAMiqD,EAAG,GAAKjqD,EAAE,IAAMiqD,EAAG,GAAKjqD,EAAE,IAAM,CAAE+J,EAAEqpC,MAAQ6W,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYlgD,EAAEqpC,MAAQpzC,EAAE,GAAI,CAAE+J,EAAEqpC,MAAQpzC,EAAE,GAAIA,EAAIiqD,EAAI,MAC7D,GAAIjqD,GAAK+J,EAAEqpC,MAAQpzC,EAAE,GAAI,CAAE+J,EAAEqpC,MAAQpzC,EAAE,GAAI+J,EAAEggD,IAAIrlD,KAAKulD,GAAK,MACvDjqD,EAAE,IAAI+J,EAAEggD,IAAIG,MAChBngD,EAAE+/C,KAAKI,MAAO,SAEtBD,EAAKL,EAAK3qD,KAAKqrC,EAASvgC,GAC1B,MAAO/G,GAAKinD,EAAK,CAAC,EAAGjnD,GAAIqG,EAAI,EAAK,QAAUtD,EAAI/F,EAAI,EACtD,GAAY,EAARiqD,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAElqD,MAAOkqD,EAAG,GAAKA,EAAG,QAAK,EAAQz8C,MAAM,KAY9E,GAAW,KACX,GAAgC,WAChC,SAAS4/C,EAAeC,EAAWC,GAC/BhmD,KAAK+lD,UAAYA,EACjB/lD,KAAKgmD,YAAcA,EACnBhmD,KAAKimD,uBAAyB,GA6flC,OA3fAH,EAAe1sD,UAAU8sD,0BAA4B,SAAUC,GAC3DnmD,KAAKimD,uBAAyBE,GAAoC,IAEtEL,EAAe1sD,UAAUgtD,YAAc,SAAUzQ,EAAUppB,EAAUozB,EAAcwD,EAAiBlB,GAChG,OAAO,GAAUjiD,UAAM,OAAQ,GAAQ,WACnC,IAAIqmD,EAAaC,EAAyBlhD,EAAQmhD,EAClD,OAAO,GAAYvmD,MAAM,SAAUxG,GAC/B,OAAQA,EAAGsyC,OACP,KAAK,EACD,IAAK9rC,KAAK+lD,UAAUS,qBAAuBxmD,KAAK+lD,UAAUS,mBAAmB1D,cACzE,MAAO,CAAC,EAAc9iD,KAAKymD,WAAW9Q,EAAUppB,EAAUozB,EAAcsC,IAE5EoE,EAAc,IAAI,GAA0BrmD,KAAK+lD,UAAUS,mBAAmB1D,eAC9EwD,EAA0BtmD,KAAKimD,uBAC/BjmD,KAAKimD,uBAAyB,CAACI,GAAa3/C,OAAO4/C,GACnDlhD,EAASpF,KAAKymD,WAAW9Q,EAAUppB,EAAUozB,EAAcsC,GAC3DzoD,EAAGsyC,MAAQ,EACf,KAAK,EAED,OADAtyC,EAAGgpD,KAAKplD,KAAK,CAAC,EAAG,CAAE,EAAG,IACf,CAAC,EAAaipD,EAAYnD,mBAAmBvN,EAAUwN,IAClE,KAAK,EAED,OADAoD,EAAuB/sD,EAAG+oD,OACnB,CAAC,EAAc,CACdlP,aAAcjuC,EAAOiuC,cAAgBkT,EAAqBlT,aAC1DD,MAAOmT,EAAqBnT,MAAM1sC,OAAOtB,EAAOguC,SAE5D,KAAK,EAED,OADApzC,KAAKimD,uBAAyBK,EACvB,CAAC,GACZ,KAAK,EAAG,MAAO,CAAC,WAKhCR,EAAe1sD,UAAUqtD,WAAa,SAAU9Q,EAAUppB,EAAUozB,EAAcsC,GAC9E,IAAI78C,EAASpF,KAAK0mD,YAAY/Q,EAAUppB,EAAUozB,EAAcsC,GAChE,OAAOjiD,KAAK2mD,sBAAsBvhD,IAEtC0gD,EAAe1sD,UAAUstD,YAAc,SAAU/Q,EAAUppB,EAAUozB,EAAcsC,GAC/E,IAAI78C,EAAS,CACTiuC,cAAc,EACdD,MAAO,IAEP6S,EAAyBjmD,KAAKimD,uBAC9BW,EAAgB5mD,KAAKgmD,YAAYa,mBAAmBtgD,QAAO,SAAUjN,GAAK,OAAOA,EAAEgoD,aAAa3L,EAASnE,eAAiByQ,IAAoC,IAAxBA,EAAS3oD,EAAEioD,aACjJW,EAAsBliD,KAAKkiD,sBAC3B5sB,EAAOqgB,EAASpS,UAChBzpB,EAAS67B,EAAS9O,SAASta,GAC3B9hB,EAAOk1C,EAAaJ,eAAezlC,GACvC,IAAKrP,EACD,OAAOrF,EAEX,IAEI0hD,EAFApH,EAAUjF,GAAcnlB,EAAM7qB,EAAKyG,OACnC61C,EAAa,GAEjB,SAASC,EAAgBC,EAAcC,GAKnC,YAJmB,IAAfA,IAAyBA,EAAaptC,GACtCmtC,EAAentC,IACfmtC,EAAentC,GAEZ,CAAE5I,MAAOykC,EAAS5O,WAAWkgB,GAAez+B,IAAKmtB,EAAS5O,WAAWmgB,IAEhF,SAASC,EAA0BC,EAAkBC,GACjD,IAAI/6B,EAAQ06B,EAAgBI,EAAkBC,GAY9C,OAXAT,EAAcniD,SAAQ,SAAU6iD,GAC5BA,EAAS9F,cAAc/8C,SAAQ,SAAU66C,GACrCl6C,EAAOguC,MAAMh2C,KAAK,CACd0uC,MAAOwT,EAAIvnD,KACXu0C,KAAM,GAAmB8F,SACzBqB,cAAesO,GAAsBzC,OAAKplD,EAAWgoD,GACrDnW,SAAU/B,GAAS7oC,QAAQmrB,EAAOgzB,EAAIvnD,MACtCwvD,iBAAkB7Y,GAAiB+C,kBAIxCrsC,EAEX,SAASoiD,EAAc1tC,GACnB,IAAI5I,EAAQ4I,EACZ,MAAO5I,EAAQ,EAAG,CACd,IAAI2lC,EAAKvhB,EAAKrzB,OAAOiP,EAAQ,GAC7B,GAAI,OAAOpV,QAAQ+6C,IAAO,EACtB,OAAOvhB,EAAKl0B,UAAU8P,EAAO4I,GAEjC,IAAK2tC,GAAa5Q,GACd,OAAO,KAEX3lC,IAEJ,OAAOokB,EAAKl0B,UAAU,EAAG0Y,GAE7B,SAAS4tC,EAA2BN,EAAkBO,EAAWN,QAC1C,IAAfA,IAAyBA,EAAavtC,GAC1C,IAAIwS,EAAQ06B,EAAgBI,EAAkBC,GAC1CO,EAAWC,GAAavyB,EAAM+xB,EAAYpQ,GAAagG,aAAcjG,GAAUkF,aAAe,GAAK,IACnG0D,EAAOn1C,EACPk9C,IACA/H,EAAOA,EAAKt3C,QAEhB,MAAOs3C,EAAM,CACT,IAAIN,EAAMM,EAAKN,IACf,GAAIA,KAASM,EAAKV,QAAUU,EAAKC,aAAgBD,EAAKC,YAAc/lC,GAAU,CAC1E,IAAIkoC,EAAO,CACPlW,MAAO,IAAMwT,EACbhT,KAAM,GAAmB8F,SACzB0V,WAAY,IAAMxI,EAClBvT,SAAU/B,GAAS7oC,QAAQmrB,EAAO,IAAMgzB,EAAMsI,GAC9CL,iBAAkB7Y,GAAiB+C,WAEnCsW,EAAcP,EAAc5H,EAAK1uC,OACjC82C,EAAYR,EAAcJ,EAAmB,GACjD,GAAoB,OAAhBW,GAAsC,OAAdC,GAAsBD,IAAgBC,EAAW,CACzE,IAAIjyB,EAAagyB,EAAc,KAAOzI,EAAMsI,EAC5C5F,EAAKjW,SAAW/B,GAAS7oC,QAAQ6lD,EAAgBI,EAAmB,EAAIY,EAAUnrD,QAASk5B,GAC3FisB,EAAK8F,WAAaE,EAAY,KAAO1I,EAGzC,OADAl6C,EAAOguC,MAAMh2C,KAAK4kD,GACX58C,EAEXw6C,EAAOA,EAAKt3C,OAEhB,OAAIq/C,GAGJf,EAAcniD,SAAQ,SAAU6iD,GAC5BA,EAAS9F,cAAc/8C,SAAQ,SAAU66C,GACrCl6C,EAAOguC,MAAMh2C,KAAK,CACd0uC,MAAO,IAAMwT,EAAIvnD,KACjBu0C,KAAM,GAAmB8F,SACzBqB,cAAesO,GAAsBzC,OAAKplD,EAAWgoD,GACrD4F,WAAY,IAAMxI,EAAIvnD,KAAO6vD,EAC7B7b,SAAU/B,GAAS7oC,QAAQmrB,EAAO,IAAMgzB,EAAIvnD,KAAO6vD,GACnDL,iBAAkB7Y,GAAiB+C,kBAVpCrsC,EAgBf,SAAS6iD,EAA8BC,EAAa5I,GAChD,GAAI2C,GAAYA,EAASkG,0BACrB,OAAO/iD,EAEX,IAAKy5C,GAAcS,GAAM,CACrB,IAAI10B,EAAM+qB,EAAS5O,WAAWmhB,GAC9B9iD,EAAOguC,MAAMh2C,KAAK,CACd0uC,MAAO,KAAOwT,EAAM,IACpBhT,KAAM,GAAmB8F,SACzB0V,WAAY,KAAOxI,EAAM,IACzBvT,SAAU/B,GAASoD,OAAOxiB,EAAK,OAAS00B,EAAM,KAC9CiI,iBAAkB7Y,GAAiB+D,UAG3C,OAAOrtC,EAEX,SAASgjD,EAAsBC,EAAUC,GAGrC,OAFAnB,EAA0BkB,EAAUC,GACpCZ,EAA2BW,GAAU,EAAMC,GACpCljD,EAEX,SAASmjD,IACL,IAAIC,EAAqBtwD,OAAOY,OAAO,MAIvC,OAHA2R,EAAKg+C,eAAehkD,SAAQ,SAAUo9C,GAClC2G,EAAmB3G,IAAa,KAE7B2G,EAEX,SAASE,EAAgCC,EAAWC,GAChD,IAAIpvD,OACY,IAAZovD,IAAsBA,EAAU9uC,GACpC,IAAIotC,EAAaptC,EACjB,MAAOotC,EAAa0B,GAAgC,MAArBtzB,EAAK4xB,GAChCA,IAEJ,IAAI2B,EAAmBvzB,EAAKl0B,UAAUunD,EAAWC,GAC7Ct8B,EAAQ06B,EAAgB2B,EAAWzB,GACnCzuD,EAAQ,GACZ,IAAKovD,GAAavyB,EAAMszB,EAAS3R,GAAaqG,mBAAoBtG,GAAU4G,iBAAkB,CAC1F,IAAI1qB,EAA6G,QAA7F15B,EAAkB,OAAbyoD,QAAkC,IAAbA,OAAsB,EAASA,EAAS6G,6BAA0C,IAAPtvD,EAAgBA,EAAK,eAE1If,EADiB,UAAjBy6B,EACQ,MAEc,iBAAjBA,EACG,QAGA,QAGhB,IAAI61B,EAAiBR,IA+BrB,OA7BAQ,EAAeF,IAAoB,EACnCjC,EAAcniD,SAAQ,SAAU6iD,GAC5BA,EAAS7F,kBAAkBsF,GAAYtiD,SAAQ,SAAU6/C,GACrD,IAAIyE,EAAezE,EAAKvsD,MAAxB,CAGAgxD,EAAezE,EAAKvsD,OAAQ,EAC5B,IACIm1C,EADA8b,EAAc1E,EAAKvsD,KAED,MAAlBusD,EAAKroB,UAAoBxjC,EAAMoE,SAC/BmsD,GAA4BvwD,GACxB6rD,EAAKroB,UAA0B,UAAdqoB,EAAKvsD,QACtBm1C,EAAU,CACN5pC,MAAO,UACP4pC,QAAS,kCAIrB9nC,EAAOguC,MAAMh2C,KAAK,CACd0uC,MAAOwY,EAAKvsD,KACZu0C,KAAwB,YAAlBgY,EAAKroB,SAAyB,GAAmB4V,SAAW,GAAmBS,MACrFmB,cAAesO,GAAsBuC,OAAMpqD,EAAWgoD,GACtDnW,SAAU/B,GAAS7oC,QAAQmrB,EAAO08B,GAClCzB,iBAAkB7Y,GAAiB+D,QACnCvF,QAASA,WAIrB+b,EAAiC38B,EAAOy8B,GACjC3jD,EAEX,SAAS6jD,EAAiC38B,EAAOy8B,GAC7C,IAAIG,EAAW,QACXC,EAAiB,GAErB,SAASC,EAAsB3+C,GAC3BA,EAAKg+C,eAAehkD,SAAQ,SAAU6/C,IAC9BnE,GAAWmE,EAAM4E,IAAcC,EAAe7E,IAAUyE,EAAezE,KACvE6E,EAAe7E,GAAQA,EAAO,YAGtC75C,EAAK1B,SAAStE,SAAQ,SAAU4D,GAAS,OAAO+gD,EAAsB/gD,MAP1E8gD,EAAeD,GAAYA,EAAW,UASlCvJ,GACAA,EAAaM,MAAMx7C,SAAQ,SAAUxF,GAAQ,OAAOmqD,EAAsBnqD,MAE9E/G,OAAOmtC,KAAK8jB,GAAgB1kD,SAAQ,SAAU6/C,GAAQ,OAAOl/C,EAAOguC,MAAMh2C,KAAK,CAC3E0uC,MAAOwY,EACPhY,KAAM,GAAmBgG,MACzBvG,SAAU/B,GAAS7oC,QAAQmrB,EAAO68B,EAAe7E,IACjDiD,iBAAkB7Y,GAAiB+D,aAG3C,SAAS4W,EAAiCC,EAAYC,GAElD,IAAIj9B,EACAk9B,EACAC,EACJ,QAJiB,IAAbF,IAAuBA,EAAWzvC,GAIlCA,EAASwvC,GAAcxvC,GAAUyvC,GAAYG,GAAQp0B,EAAKg0B,IAAc,CAExE,IAAIK,EAAoBL,EAAa,EACjCM,EAAkBL,EAElBA,EAAWD,GAAch0B,EAAKi0B,EAAW,KAAOj0B,EAAKg0B,IACrDM,IAEJ,IAAIC,EAAWC,GAAax0B,EAAMxb,EAAQ6vC,GACtCI,EAAUC,GAAW10B,EAAMxb,EAAQ8vC,GACvCt9B,EAAQ06B,EAAgB6C,EAAUE,GAClCN,EAAc3vC,GAAU6vC,GAAqB7vC,GAAU8vC,EAAkBt0B,EAAKl0B,UAAUuoD,EAAmB7vC,GAAU,GACrH0vC,GAAY,OAGZl9B,EAAQ06B,EAAgBsC,EAAYC,GACpCE,EAAcn0B,EAAKl0B,UAAUkoD,EAAYxvC,GACzC0vC,GAAY,EAEhB,GAAIvD,EAAuBppD,OAAS,EAIhC,IAHA,IAAIyiD,EAAMyH,EAAW3kD,cACjBy/C,EAAYiF,EAAqB1kD,cACjC6nD,EAAYjD,EAAgBsC,EAAYC,GACnCxgB,EAAK,EAAGmhB,EAA2BjE,EAAwBld,EAAKmhB,EAAyBrtD,OAAQksC,IAAM,CAC5G,IAAIsd,EAAc6D,EAAyBnhB,GACvCsd,EAAYrD,sBACZqD,EAAYrD,qBAAqB,CAAErN,SAAUA,EAAUppB,SAAUA,EAAU+yB,IAAKA,EAAKuC,UAAWA,EAAWppD,MAAOgxD,EAAan9B,MAAO29B,IAkBlJ,OAdArD,EAAcniD,SAAQ,SAAU6iD,GAC5BA,EAAS1F,cAAcmF,EAAYD,GAAsBriD,SAAQ,SAAUhM,GACvE,IAAIs9B,EAAayzB,EAAY,IAAM/wD,EAAMV,KAAO,IAAMU,EAAMV,KAC5DqN,EAAOguC,MAAMh2C,KAAK,CACd0uC,MAAOrzC,EAAMV,KACb+vD,WAAY/xB,EACZuW,KAAM,GAAmB+F,KACzBoB,cAAesO,GAAsBtpD,OAAOyB,EAAWgoD,GACvDnW,SAAU/B,GAAS7oC,QAAQmrB,EAAOyJ,GAClCwxB,iBAAkB7Y,GAAiB+C,kBAI/C0Y,IACO/kD,EAEX,SAASglD,EAAkBC,GACvB,OAAIvwC,IAAW4lC,EAAQrB,gBACnBvC,EAAQ4D,EAAQ9D,OACZE,IAAUuO,GAAa3K,EAAQvB,mBAAqBrkC,GAC7C4lC,EAAQrB,cAGhBvkC,EAEX,SAASwwC,IACL,IAAK,IAAIvhB,EAAK,EAAGwhB,EAA2BtE,EAAwBld,EAAKwhB,EAAyB1tD,OAAQksC,IAAM,CAC5G,IAAIsd,EAAckE,EAAyBxhB,GACvCsd,EAAYmE,eACZnE,EAAYmE,cAAc,CAAE7U,SAAUA,EAAUppB,SAAUA,IAGlE,OAAO49B,IAEX,SAASA,IAEL,IAAIxvC,EAAIb,EAAS,EACb2wC,EAAiBl+B,EAASoe,UAC9B,MAAOhwB,GAAK,GAAKkmC,GAAgBvrB,EAAM3a,GACnCA,IACA8vC,IAEJ,GAAI9vC,GAAK,GAAiB,MAAZ2a,EAAK3a,GAAY,CAC3B,IAAI2R,EAAQ,GAAMxzB,OAAO,GAASA,OAAOyzB,EAAS+M,KAAMmxB,EAAiB,GAAIl+B,GAC7E,IAAK,IAAIm+B,KAAUxK,GACf,GAAII,GAASoK,EAAQ,KAAM,CACvB,IAAI5e,EAAQ,IAAM4e,EAClBtlD,EAAOguC,MAAMh2C,KAAK,CACd0uC,MAAOA,EACPQ,KAAM,GAAmBkG,QACzBiB,cAAe,GAAS,iBAAkB,kCAAoCyM,GAASwK,GAAU,KACjG3e,SAAU/B,GAAS7oC,QAAQmrB,EAAOwf,GAClCyb,iBAAkB7Y,GAAiB+C,aAKnD,OAAOrsC,EAEX,SAASulD,EAAe1D,EAAcC,GAClC,IAAI56B,EAAQ06B,EAAgBC,EAAcC,GAC1C9hD,EAAOguC,MAAMh2C,KAAK,CACd0uC,MAAO,WACPQ,KAAM,GAAmB8F,SACzBqB,cAAe,mCACf1H,SAAU/B,GAAS7oC,QAAQmrB,EAAO,kBAClCi7B,iBAAkB7Y,GAAiB+C,YAG3C,IAAIqK,EAAQ4D,EAAQ9D,OACpB,MAAOE,IAAU9E,GAAUgF,KAAO0D,EAAQvB,kBAAoBrkC,EAAQ,CAClE,OAAQgiC,GACJ,KAAK9E,GAAU8F,aACX,GAAI4C,EAAQrB,gBAAkBvkC,EAAQ,CAClC,IAAIgrC,EAASsF,EAAkBpT,GAAUqG,UAIzC,OAHsB,IAAlB9wB,EAAS+M,MACTqxB,EAAe7wC,EAAQgrC,GAEpBsD,EAAsBtuC,EAAQgrC,GAEzC,MACJ,KAAK9N,GAAUqG,SACX,GAAIqC,EAAQvB,kBAAoBrkC,GAAUA,GAAU4lC,EAAQrB,cACxD,OAAO8I,EAA0BzH,EAAQvB,iBAAkBuB,EAAQrB,eAEvE0I,EAAarH,EAAQpB,eACrB,MACJ,KAAKtH,GAAUuG,cACX,GAAImC,EAAQvB,kBAAoBrkC,GAAUA,GAAU4lC,EAAQrB,cACxD,OAAOqK,EAAgChJ,EAAQvB,iBAAkBuB,EAAQrB,eAE7EyI,EAAuBpH,EAAQpB,eAC/B,MACJ,KAAKtH,GAAU4G,gBACX,GAAI8B,EAAQrB,gBAAkBvkC,EAAQ,CAC9BgrC,EAASsF,EAAkBpT,GAAU8G,gBACzC,OAAOuL,EAAiCvvC,EAAQgrC,GAEpD,MACJ,KAAK9N,GAAU8G,eACX,GAAI4B,EAAQvB,kBAAoBrkC,GAAUA,GAAU4lC,EAAQrB,cACxD,OAAOgL,EAAiC3J,EAAQvB,iBAAkBuB,EAAQrB,eAE9E,MACJ,KAAKrH,GAAUmG,WACX,GAAIrjC,GAAU4lC,EAAQrB,cAClB,OAAQqB,EAAQnB,mBACZ,KAAKtH,GAAa4F,qBACd,IAAI8H,EAAWjF,EAAQvB,iBACnByM,EAAYR,EAAkBpT,GAAUqG,UAC5C,OAAO+K,EAAsBzD,EAAUiG,GAC3C,KAAK3T,GAAamG,UAClB,KAAKnG,GAAaqG,mBACd,OAAOoL,EAAgChJ,EAAQrB,eACnD,KAAKpH,GAAa0G,qBACd,OAAO0L,EAAiC3J,EAAQrB,eACpD,KAAKpH,GAAa0F,mBACd,OAAO+K,EAA2BhI,EAAQvB,iBAAmB,GAAG,GACpE,KAAKlH,GAAa6D,cACd,OAAOwP,IAGnB,MACJ,KAAKtT,GAAU4F,WACX,GAAI9iC,GAAU4lC,EAAQrB,cAAe,CACjC,IAAI+I,EAAmB1H,EAAQvB,iBAAmB,EAC9ClI,EAAYmU,EAAkBpT,GAAUkG,QAC5C,OAAOwK,EAA2BN,GAAkB,EAAOnR,GAE/D,MACJ,KAAKe,GAAUkG,OACX,GAAIpjC,GAAU4lC,EAAQrB,cAAe,CACjC,IAAIntC,EAAQwuC,EAAQvB,iBAAmB,EACvC,MAAOjtC,GAAS,EAAG,CACf,IAAI2lC,EAAKvhB,EAAKrzB,OAAOiP,GACrB,GAAW,MAAP2lC,EACA,OAAO6Q,EAA2Bx2C,GAAO,EAAOwuC,EAAQrB,eAEvD,IAAKoJ,GAAa5Q,GACnB,MAEJ3lC,KAGR,MACJ,KAAK8lC,GAAUiF,cACX,GAAIniC,GAAU4lC,EAAQrB,eACd0I,EACA,OAAOkB,EAA8BvI,EAAQrB,cAAe0I,GAGpE,MACJ,KAAK/P,GAAU+F,QACX,GAAIjjC,GAAU4lC,EAAQrB,cAClB,OAAOiM,IAEX,MACJ,QACI,GAAIxwC,GAAU4lC,EAAQrB,cAClB,OAAOj5C,EAEX,MAER02C,EAAQ4D,EAAQ9D,OAEpB,OAAOx2C,GAEX0gD,EAAe1sD,UAAUyxD,cAAgB,SAAUlV,EAAUppB,EAAUozB,GACnE,IAAI7lC,EAAS67B,EAAS9O,SAASta,GAC/B,GAAIzS,GAAU,EACV,OAAO,KAEX,IAAIpB,EAAOi9B,EAASpS,UAAUthC,OAAO6X,EAAS,GAC9C,GAAa,MAATpB,EAAc,CACd,IAAIjO,EAAOk1C,EAAaJ,eAAezlC,GACvC,GAAIrP,GAAQA,EAAK60C,MAAQT,GAAcp0C,EAAK60C,MAAQ70C,EAAKyG,MAAQ4I,KAAYrP,EAAKo1C,aAAep1C,EAAKo1C,YAAc/lC,GAAS,CACzH,IAAI4lC,EAAUjF,GAAc9E,EAASpS,UAAW94B,EAAKyG,OACjD4qC,EAAQ4D,EAAQ9D,OACpB,MAAOE,IAAU9E,GAAUgF,KAAO0D,EAAQrB,eAAiBvkC,EAAQ,CAC/D,GAAIgiC,IAAU9E,GAAUiF,eAAiByD,EAAQrB,gBAAkBvkC,EAC/D,MAAO,OAASrP,EAAK60C,IAAM,IAE/BxD,EAAQ4D,EAAQ9D,cAIvB,GAAa,MAATljC,EAAc,CACfjO,EAAOk1C,EAAaJ,eAAezlC,GACvC,MAAOrP,GAAQA,EAAKy0C,UAAYz0C,EAAKo1C,aAAgBp1C,EAAKo1C,YAAc/lC,GACpErP,EAAOA,EAAKnC,OAEhB,GAAImC,GAAQA,EAAK60C,IAAK,CACdI,EAAUjF,GAAc9E,EAASpS,UAAW94B,EAAKyG,OACjD4qC,EAAQ4D,EAAQ9D,OACpB,MAAOE,IAAU9E,GAAUgF,KAAO0D,EAAQrB,eAAiBvkC,EAAQ,CAC/D,GAAIgiC,IAAU9E,GAAU4F,YAAc8C,EAAQrB,gBAAkBvkC,EAC5D,OAAOrP,EAAK60C,IAAM,IAEtBxD,EAAQ4D,EAAQ9D,SAI5B,OAAO,MAEXkK,EAAe1sD,UAAUutD,sBAAwB,SAAUmE,GAWvD,OAVK9qD,KAAKkiD,uBACN4I,EAAK1X,MAAM3uC,SAAQ,SAAUu9C,GACrBA,EAAKvO,eAA+C,kBAAvBuO,EAAKvO,gBAClCuO,EAAKvO,cAAgB,CACjBnH,KAAM,YACN7zC,MAAOupD,EAAKvO,cAAch7C,WAKnCqyD,GAEXhF,EAAe1sD,UAAU8oD,oBAAsB,WAC3C,IAAI1oD,EAAIwX,EAAII,EACZ,IAAK,GAAUpR,KAAK+qD,kBAAmB,CACnC,IAAK,GAAU/qD,KAAK+lD,UAAUiF,oBAE1B,OADAhrD,KAAK+qD,kBAAmB,EACjB/qD,KAAK+qD,iBAEhB,IAAI1S,EAAwM,QAAjLjnC,EAAyH,QAAnHJ,EAA+D,QAAzDxX,EAAKwG,KAAK+lD,UAAUiF,mBAAmBrd,oBAAiC,IAAPn0C,OAAgB,EAASA,EAAG2+C,kBAA+B,IAAPnnC,OAAgB,EAASA,EAAGonC,sBAAmC,IAAPhnC,OAAgB,EAASA,EAAGinC,oBAChPr4C,KAAK+qD,iBAAmBhrD,MAAMsJ,QAAQgvC,KAA8E,IAAtDA,EAAoBv8C,QAAQ0yC,GAAWkD,UAEzG,OAAO1xC,KAAK+qD,kBAETjF,EAjgBwB,GAogBnC,SAAS4D,GAAQnwD,GACb,MAAO,UAAUiH,KAAKjH,GAE1B,SAASkuD,GAAaluD,GAClB,MAAO,QAAQiH,KAAKjH,GAExB,SAASsuD,GAAatuD,EAAGugB,EAAQmxC,EAAaC,GAC1C,IAAIxL,EAAUjF,GAAclhD,EAAGugB,EAAQmxC,GACnCnP,EAAQ4D,EAAQ9D,OACpB,MAAOE,IAAU9E,GAAUmG,WACvBrB,EAAQ4D,EAAQ9D,OAEpB,OAAOE,IAAUoP,EAErB,SAASpB,GAAavwD,EAAGugB,EAAQqxC,GAC7B,MAAOrxC,EAASqxC,IAAU1D,GAAaluD,EAAEugB,EAAS,IAC9CA,IAEJ,OAAOA,EAEX,SAASkwC,GAAWzwD,EAAGugB,EAAQqxC,GAC3B,MAAOrxC,EAASqxC,IAAU1D,GAAaluD,EAAEugB,IACrCA,IAEJ,OAAOA,ECnkBX,ICuDIsxC,GDvDA,GAAW,KACX,GAA2B,WAC3B,SAASC,EAAUtF,EAAWC,GAC1BhmD,KAAK+lD,UAAYA,EACjB/lD,KAAKgmD,YAAcA,EAiQvB,OA/PAqF,EAAUjyD,UAAUkyD,QAAU,SAAU3V,EAAUppB,EAAUozB,EAAc3vC,GACtE,IAAIu7C,EAAkBvrD,KAAKurD,gBAAgBvyD,KAAKgH,MAC5CkiD,EAAsBliD,KAAKkiD,sBAC3BpoC,EAAS67B,EAAS9O,SAASta,GAC3B9hB,EAAOk1C,EAAaF,WAAW3lC,GAC/Bwb,EAAOqgB,EAASpS,UACpB,IAAK94B,IAASA,EAAK60C,IACf,OAAO,KAEX,IAAIsH,EAAgB5mD,KAAKgmD,YAAYa,mBAAmBtgD,QAAO,SAAUjN,GAAK,OAAOA,EAAEgoD,aAAa3L,EAASnE,eAC7G,SAASga,EAAYC,EAASn/B,EAAOo/B,GAoBjC,IAnBA,IAAIC,EAAU,SAAUrE,GACpB,IAAIhP,EAAQ,KAaZ,GAZAgP,EAAS9F,cAAc/8C,SAAQ,SAAU66C,GACrC,GAAIA,EAAIvnD,KAAKqK,gBAAkBqpD,EAAQrpD,cAAe,CAClD,IAAIwpD,EAAgB7J,GAAsBzC,EAAKtvC,EAASkyC,GACnD0J,IACDA,EAAgB,CACZtf,KAAM4V,EAAsB,WAAa,YACzCzpD,MAAO,KAGf6/C,EAAQ,CAAE9E,SAAUoY,EAAet/B,MAAOA,OAG9CgsB,EAEA,OADAA,EAAM9E,SAAW+X,EAAgBjT,EAAM9E,UAChC,CAAE/6C,MAAO6/C,IAGfvP,EAAK,EAAG8iB,EAAkBjF,EAAe7d,EAAK8iB,EAAgBhvD,OAAQksC,IAAM,CACjF,IAAIue,EAAWuE,EAAgB9iB,GAC3B+iB,EAAUH,EAAQrE,GACtB,GAAuB,kBAAZwE,EACP,OAAOA,EAAQrzD,MAEvB,OAAO,KAEX,SAASszD,EAAaN,EAASO,EAAU1/B,GAmBrC,IAlBA,IAAI2/B,EAAU,SAAU3E,GACpB,IAAIhP,EAAQ,KAYZ,GAXAgP,EAAS7F,kBAAkBgK,GAAShnD,SAAQ,SAAU6/C,GAClD,GAAI0H,IAAa1H,EAAKvsD,MAAQusD,EAAK/W,YAAa,CAC5C,IAAI2e,EAAcnK,GAAsBuC,EAAMt0C,EAASkyC,GAEnD5J,EADA4T,EACQ,CAAE1Y,SAAU0Y,EAAa5/B,MAAOA,GAGhC,SAIhBgsB,EAEA,OADAA,EAAM9E,SAAW+X,EAAgBjT,EAAM9E,UAChC,CAAE/6C,MAAO6/C,IAGfvP,EAAK,EAAGojB,EAAkBvF,EAAe7d,EAAKojB,EAAgBtvD,OAAQksC,IAAM,CACjF,IAAIue,EAAW6E,EAAgBpjB,GAC3BqjB,EAAUH,EAAQ3E,GACtB,GAAuB,kBAAZ8E,EACP,OAAOA,EAAQ3zD,MAEvB,OAAO,KAEX,SAAS4zD,EAAkBZ,EAASO,EAAUM,EAAehgC,GAmBzD,IAlBA,IAAIigC,EAAU,SAAUjF,GACpB,IAAIhP,EAAQ,KAYZ,GAXAgP,EAAS1F,cAAc6J,EAASO,GAAUvnD,SAAQ,SAAU+nD,GACxD,GAAIF,IAAkBE,EAAUz0D,MAAQy0D,EAAUjf,YAAa,CAC3D,IAAI2e,EAAcnK,GAAsByK,EAAWx8C,EAASkyC,GAExD5J,EADA4T,EACQ,CAAE1Y,SAAU0Y,EAAa5/B,MAAOA,GAGhC,SAIhBgsB,EAEA,OADAA,EAAM9E,SAAW+X,EAAgBjT,EAAM9E,UAChC,CAAE/6C,MAAO6/C,IAGfvP,EAAK,EAAG0jB,EAAkB7F,EAAe7d,EAAK0jB,EAAgB5vD,OAAQksC,IAAM,CACjF,IAAIue,EAAWmF,EAAgB1jB,GAC3B2jB,EAAUH,EAAQjF,GACtB,GAAuB,kBAAZoF,EACP,OAAOA,EAAQj0D,MAEvB,OAAO,KAEX,SAASk0D,EAAer3B,EAAMhJ,GAC1B,IAAIsgC,EAAaC,EAAav3B,GAC9B,IAAK,IAAIo1B,KAAUxK,GAAU,CACzB,IAAI5H,EAAQ,KACRxM,EAAQ,IAAM4e,EAClB,GAAIkC,IAAe9gB,EAAO,CACtB,IAAIl5B,EAAOstC,GAASwK,GAAQ1sD,WAAW,GAAG4C,SAAS,IAAIksD,cACnDC,EAAM,KACV,GAAIn6C,EAAK/V,OAAS,EAAG,CACjB,IAAImwD,EAAS,EAAIp6C,EAAK/V,OAClB8d,EAAI,EACR,MAAOA,EAAIqyC,EACPD,GAAO,IACPpyC,GAAK,EAGboyC,GAAOn6C,EACP,IAAIs5C,EAAc,GAAS,iBAAkB,kCAAoChM,GAASwK,GAAU,0BAA4BqC,EAAM,KAElIzU,EADA4T,EACQ,CAAE1Y,SAAU0Y,EAAa5/B,MAAOA,GAGhC,KAGhB,GAAIgsB,EAEA,OADAA,EAAM9E,SAAW+X,EAAgBjT,EAAM9E,UAChC8E,EAGf,OAAO,KAEX,SAAS2U,EAAgB3R,EAAWtF,GAChC,IAAI0J,EAAUjF,GAAc9E,EAASpS,UAAWyS,GAC5C8F,EAAQ4D,EAAQ9D,OACpB,MAAOE,IAAU9E,GAAUgF,MAAQ0D,EAAQrB,cAAgBvkC,GAAU4lC,EAAQrB,gBAAkBvkC,GAAUgiC,IAAUR,GAC/GQ,EAAQ4D,EAAQ9D,OAEpB,OAAIE,IAAUR,GAAaxhC,GAAU4lC,EAAQrB,cAClC,CAAEntC,MAAOykC,EAAS5O,WAAW2Y,EAAQvB,kBAAmB31B,IAAKmtB,EAAS5O,WAAW2Y,EAAQrB,gBAE7F,KAEX,SAAS6O,IACL,IAAIvyC,EAAIb,EAAS,EACb2wC,EAAiBl+B,EAASoe,UAC9B,MAAOhwB,GAAK,GAAKkmC,GAAgBvrB,EAAM3a,GACnCA,IACA8vC,IAEJ,IAAIxxD,EAAI0hB,EAAI,EACRwyC,EAAe1C,EACnB,MAAO5J,GAAgBvrB,EAAMr8B,GACzBA,IACAk0D,IAEJ,GAAIxyC,GAAK,GAAiB,MAAZ2a,EAAK3a,GAAY,CAC3B,IAAI2R,EAAQ,KAOZ,OALIA,EADY,MAAZgJ,EAAKr8B,GACG,GAAMH,OAAO,GAASA,OAAOyzB,EAAS+M,KAAMmxB,GAAiB,GAAS3xD,OAAOyzB,EAAS+M,KAAM6zB,EAAe,IAG3G,GAAMr0D,OAAO,GAASA,OAAOyzB,EAAS+M,KAAMmxB,GAAiB,GAAS3xD,OAAOyzB,EAAS+M,KAAM6zB,IAEjG7gC,EAEX,OAAO,KAEX,SAASugC,EAAav3B,GAClB,IAAI3a,EAAIb,EAAS,EACbqzB,EAAU,IACd,MAAOxyB,GAAK,GAAKkmC,GAAgBvrB,EAAM3a,GACnCA,IAEJA,GAAQ,EACR,MAAOkmC,GAAgBvrB,EAAM3a,GACzBwyB,GAAW7X,EAAK3a,GAChBA,GAAK,EAGT,OADAwyB,GAAW,IACJA,EAEX,GAAI1iC,EAAKo1C,aAAe/lC,GAAUrP,EAAKo1C,YAAa,CAChD,IAAIuN,EAAaH,EAAgBjW,GAAUkG,OAAQzyC,EAAKo1C,aACxD,OAAIuN,EACO5B,EAAY/gD,EAAK60C,IAAK8N,GAAY,GAEtC,KAEX,IAAIC,EAAWJ,EAAgBjW,GAAUqG,SAAU5yC,EAAKyG,OACxD,GAAIm8C,EACA,OAAO7B,EAAY/gD,EAAK60C,IAAK+N,GAAU,GAE3C,IAAIC,EAAYL,EAAgBjW,GAAUuG,cAAe9yC,EAAKyG,OAC9D,GAAIo8C,EAAW,CACX,IAAIhO,EAAM70C,EAAK60C,IACXgF,EAAO3O,EAASpS,QAAQ+pB,GAC5B,OAAOvB,EAAazM,EAAKgF,EAAMgJ,GAEnC,IAAIC,EAAcL,IAClB,GAAIK,EACA,OAAOZ,EAAer3B,EAAMi4B,GAEhC,SAASC,EAAqBC,EAAWC,GACrC,IAAIhO,EAAUjF,GAAc9E,EAASpS,UAAWkqB,GAC5C3R,EAAQ4D,EAAQ9D,OAChB+R,OAAWzzD,EACf,MAAO4hD,IAAU9E,GAAUgF,KAAQ0D,EAAQrB,eAAiBqP,EACxD5R,EAAQ4D,EAAQ9D,OACZE,IAAU9E,GAAUuG,gBACpBoQ,EAAWjO,EAAQpB,gBAG3B,OAAOqP,EAEX,IAAIC,EAAiBX,EAAgBjW,GAAU8G,eAAgBrzC,EAAKyG,OACpE,GAAI08C,EAAgB,CACZtO,EAAM70C,EAAK60C,IAAf,IACIkN,EAAYqB,GAAWlY,EAASpS,QAAQqqB,IACxCE,EAAYN,EAAqB/iD,EAAKyG,MAAOykC,EAAS9O,SAAS+mB,EAAe18C,QAClF,GAAI48C,EACA,OAAOzB,EAAkB/M,EAAKwO,EAAWtB,EAAWoB,GAG5D,OAAO,MAEXvC,EAAUjyD,UAAUmyD,gBAAkB,SAAU/X,GAC5C,IAAKxzC,KAAKkiD,sBAAuB,CAC7B,GAAwB,kBAAb1O,EACP,OAAOA,EAGN,GAAI,SAAUA,EACf,MAAO,CACHlH,KAAM,YACN7zC,MAAO+6C,EAAS/6C,OAInB,IAAIsH,MAAMsJ,QAAQmqC,GAOnB,OAAOA,EAAS/6C,MANhB+6C,EAAShtC,KAAI,SAAU3O,GACnB,MAAoB,kBAANA,EAAiBA,EAAIA,EAAEY,SAQjD,OAAO+6C,GAEX6X,EAAUjyD,UAAU8oD,oBAAsB,WACtC,IAAI1oD,EAAIwX,EAAII,EACZ,IAAK,GAAUpR,KAAK+qD,kBAAmB,CACnC,IAAK,GAAU/qD,KAAK+lD,UAAUiF,oBAE1B,OADAhrD,KAAK+qD,kBAAmB,EACjB/qD,KAAK+qD,iBAEhB,IAAIxS,EAA8K,QAA7JnnC,EAA8G,QAAxGJ,EAAkD,QAA5CxX,EAAKwG,KAAK+lD,UAAUiF,0BAAuC,IAAPxxD,OAAgB,EAASA,EAAGm0C,oBAAiC,IAAP38B,OAAgB,EAASA,EAAGsnC,aAA0B,IAAPlnC,OAAgB,EAASA,EAAGmnC,cACtNv4C,KAAK+qD,iBAAmBhrD,MAAMsJ,QAAQkvC,KAAkE,IAAhDA,EAAcz8C,QAAQ0yC,GAAWkD,UAE7F,OAAO1xC,KAAK+qD,kBAETM,EApQmB,GAuQ9B,SAASwC,GAAWt0D,GAChB,OAAIA,EAAEsD,QAAU,EACLtD,EAAE4H,QAAQ,OAAQ,KAEhB,MAAT5H,EAAE,IAAuB,MAATA,EAAE,KAClBA,EAAIA,EAAE2E,MAAM,IAEQ,MAApB3E,EAAEA,EAAEsD,OAAS,IAAkC,MAApBtD,EAAEA,EAAEsD,OAAS,KACxCtD,EAAIA,EAAE2E,MAAM,GAAI,IAEb3E,GEtRJ,SAASw0D,GAAYC,EAAgBh+C,GAExC,OAAOg+C,GD0DF,WAEC,IAAIC,EAAsB,CAC7B,CACA,CAED,SAAU12D,GA+BhB,SAAS22D,EAAW5lD,GAClBtI,KAAKmuD,SAAW7lD,EAChBtI,KAAKouD,kBAAoB,EAEzBpuD,KAAKquD,gBAAkB,EACvBruD,KAAKsuD,kBAAoB,EACzBtuD,KAAKuuD,mBAAqB,EAC1BvuD,KAAKwuD,6BAA+B,EACpCxuD,KAAKyuD,2BAA6B,EAClCzuD,KAAK0uD,6BAA+B,EAEpC1uD,KAAK2uD,QAAU,GAqIjB,SAASC,EAAkB5+C,EAAS6+C,GAClC7uD,KAAK8uD,QAAU,CAAC,IAChB9uD,KAAK+uD,cAAgB/+C,EAAQg/C,YAC7BhvD,KAAKivD,gBAAkBj/C,EAAQk/C,YAC1Bl/C,EAAQm/C,mBACXnvD,KAAKivD,gBAAkB,IAAIlvD,MAAMiQ,EAAQg/C,YAAc,GAAGzwD,KAAKyR,EAAQk/C,cAIzEL,EAAmBA,GAAoB,GACnC7+C,EAAQo/C,aAAe,IACzBP,EAAmB,IAAI9uD,MAAMiQ,EAAQo/C,aAAe,GAAG7wD,KAAKyB,KAAKivD,kBAGnEjvD,KAAKqvD,cAAgBR,EACrB7uD,KAAKsvD,qBAAuBT,EAAiBhyD,OAiD/C,SAAS0yD,EAAOv/C,EAAS6+C,GACvB7uD,KAAKwvD,eAAiB,IAAIZ,EAAkB5+C,EAAS6+C,GACrD7uD,KAAKyvD,KAAM,EACXzvD,KAAK0vD,kBAAoB1/C,EAAQ2/C,iBACjC3vD,KAAKgvD,YAAch/C,EAAQg/C,YAC3BhvD,KAAK4vD,iBAAmB5/C,EAAQ4/C,iBAChC5vD,KAAK6vD,mBAAqB7/C,EAAQ6/C,mBAClC7vD,KAAK8vD,QAAU,GACf9vD,KAAK+vD,cAAgB,KACrB/vD,KAAKgwD,aAAe,KACpBhwD,KAAKiwD,UAAY,IAAI/B,EAAWluD,MAChCA,KAAKkwD,oBAAqB,EAC1BlwD,KAAKmwD,oBAAqB,EAC1BnwD,KAAKowD,wBAAyB,EAE9BpwD,KAAKqwD,mBAjNPnC,EAAW90D,UAAUk3D,YAAc,WACjC,IAAIh3B,EAAO,IAAI40B,EAAWluD,KAAKmuD,UAE/B,OADA70B,EAAKi3B,WAAWvwD,KAAKquD,eAAgBruD,KAAKsuD,mBACnCh1B,GAGT40B,EAAW90D,UAAU4oD,KAAO,SAASv7C,GACnC,OAAIA,EAAQ,EACHzG,KAAK2uD,QAAQ3uD,KAAK2uD,QAAQ9xD,OAAS4J,GAEnCzG,KAAK2uD,QAAQloD,IAIxBynD,EAAW90D,UAAUo3D,UAAY,SAASC,GACxC,IAAK,IAAIC,EAAoB1wD,KAAK2uD,QAAQ9xD,OAAS,EAAG6zD,GAAqB,EAAGA,IAC5E,GAAI1wD,KAAK2uD,QAAQ+B,GAAmBhuD,MAAM+tD,GACxC,OAAO,EAGX,OAAO,GAGTvC,EAAW90D,UAAUm3D,WAAa,SAASI,EAAQC,GAC7C5wD,KAAK6wD,aACP7wD,KAAKquD,eAAiBsC,GAAU,EAChC3wD,KAAKsuD,kBAAoBsC,GAAa,EACtC5wD,KAAKouD,kBAAoBpuD,KAAKmuD,SAAS2C,gBAAgB9wD,KAAKquD,eAAgBruD,KAAKsuD,qBAIrFJ,EAAW90D,UAAU23D,gBAAkB,WACjC/wD,KAAKmuD,SAASyB,mBAChB5vD,KAAKuuD,mBAAqBvuD,KAAK2uD,QAAQ9xD,OACvCmD,KAAKwuD,6BAA+BxuD,KAAKouD,kBACzCpuD,KAAKyuD,0BAA4BzuD,KAAKmuD,SAAS8B,UAAU5B,eACzDruD,KAAK0uD,6BAA+B1uD,KAAKmuD,SAAS8B,UAAU3B,oBAIhEJ,EAAW90D,UAAU43D,aAAe,WAClC,OAAOhxD,KAAKuuD,oBACVvuD,KAAKouD,kBAAoBpuD,KAAKmuD,SAASyB,kBACvC5vD,KAAKwuD,6BAA+BxuD,KAAKmuD,SAAS8B,UAAU7B,mBAGhEF,EAAW90D,UAAU63D,YAAc,WACjC,GAAIjxD,KAAKgxD,eAAgB,CACvBhxD,KAAKmuD,SAAS+C,eACd,IAAIjrD,EAAOjG,KAAKmuD,SAAS6B,aAYzB,OAXA/pD,EAAKsqD,WAAWvwD,KAAKyuD,0BAA2BzuD,KAAK0uD,8BACrDzoD,EAAK0oD,QAAU3uD,KAAK2uD,QAAQzwD,MAAM8B,KAAKuuD,oBACvCvuD,KAAK2uD,QAAU3uD,KAAK2uD,QAAQzwD,MAAM,EAAG8B,KAAKuuD,oBAE1CtoD,EAAKmoD,mBAAqBpuD,KAAKouD,kBAAoBpuD,KAAKwuD,6BACxDxuD,KAAKouD,kBAAoBpuD,KAAKwuD,6BAEN,MAApBvoD,EAAK0oD,QAAQ,KACf1oD,EAAK0oD,QAAQ3xD,OAAO,EAAG,GACvBiJ,EAAKmoD,mBAAqB,IAErB,EAET,OAAO,GAGTF,EAAW90D,UAAUy3D,SAAW,WAC9B,OAA+B,IAAxB7wD,KAAK2uD,QAAQ9xD,QAGtBqxD,EAAW90D,UAAUiuB,KAAO,WAC1B,OAAKrnB,KAAK6wD,WAGD,KAFA7wD,KAAK2uD,QAAQ3uD,KAAK2uD,QAAQ9xD,OAAS,IAM9CqxD,EAAW90D,UAAUgE,KAAO,SAAS4kD,GACnChiD,KAAK2uD,QAAQvxD,KAAK4kD,GAClB,IAAImP,EAAqBnP,EAAK/jD,YAAY,OACd,IAAxBkzD,EACFnxD,KAAKouD,kBAAoBpM,EAAKnlD,OAASs0D,EAEvCnxD,KAAKouD,mBAAqBpM,EAAKnlD,QAInCqxD,EAAW90D,UAAUwpD,IAAM,WACzB,IAAIZ,EAAO,KAKX,OAJKhiD,KAAK6wD,aACR7O,EAAOhiD,KAAK2uD,QAAQ/L,MACpB5iD,KAAKouD,mBAAqBpM,EAAKnlD,QAE1BmlD,GAITkM,EAAW90D,UAAUg4D,eAAiB,WAChCpxD,KAAKquD,eAAiB,IACxBruD,KAAKquD,gBAAkB,EACvBruD,KAAKouD,mBAAqBpuD,KAAKmuD,SAASa,cAI5Cd,EAAW90D,UAAUi4D,oBAAsB,WACrCrxD,KAAKyuD,0BAA4B,IACnCzuD,KAAKyuD,2BAA6B,IAGtCP,EAAW90D,UAAUk4D,KAAO,WAC1B,MAAuB,MAAhBtxD,KAAKqnB,OACVrnB,KAAK2uD,QAAQ/L,MACb5iD,KAAKouD,mBAAqB,GAI9BF,EAAW90D,UAAUwH,SAAW,WAC9B,IAAIwE,EAAS,GASb,OARIpF,KAAK6wD,WACH7wD,KAAKmuD,SAAS0B,qBAChBzqD,EAASpF,KAAKmuD,SAASoD,kBAAkBvxD,KAAKquD,kBAGhDjpD,EAASpF,KAAKmuD,SAASoD,kBAAkBvxD,KAAKquD,eAAgBruD,KAAKsuD,mBACnElpD,GAAUpF,KAAK2uD,QAAQpwD,KAAK,KAEvB6G,GAqBTwpD,EAAkBx1D,UAAU03D,gBAAkB,SAASH,EAAQrlC,GAC7D,IAAIlmB,EAASpF,KAAKsvD,qBAOlB,OANAhkC,EAASA,GAAU,EACfqlC,EAAS,IACXvrD,EAAS,GAEXA,GAAUurD,EAAS3wD,KAAK+uD,cACxB3pD,GAAUkmB,EACHlmB,GAGTwpD,EAAkBx1D,UAAUm4D,kBAAoB,SAASnC,EAAc9jC,GACrE,IAAIlmB,EAASpF,KAAKqvD,cASlB,OARA/jC,EAASA,GAAU,EACf8jC,EAAe,IACjBA,EAAe,EACfhqD,EAAS,IAEXkmB,GAAU8jC,EAAepvD,KAAK+uD,cAC9B/uD,KAAKwxD,eAAelmC,GACpBlmB,GAAUpF,KAAK8uD,QAAQxjC,GAChBlmB,GAGTwpD,EAAkBx1D,UAAUo4D,eAAiB,SAASlmC,GACpD,MAAOA,GAAUtrB,KAAK8uD,QAAQjyD,OAC5BmD,KAAKyxD,gBAIT7C,EAAkBx1D,UAAUq4D,aAAe,WACzC,IAAInmC,EAAStrB,KAAK8uD,QAAQjyD,OACtB8zD,EAAS,EACTvrD,EAAS,GACTpF,KAAK+uD,eAAiBzjC,GAAUtrB,KAAK+uD,gBACvC4B,EAASrhD,KAAKiL,MAAM+Q,EAAStrB,KAAK+uD,eAClCzjC,GAAUqlC,EAAS3wD,KAAK+uD,cACxB3pD,EAAS,IAAIrF,MAAM4wD,EAAS,GAAGpyD,KAAKyB,KAAKivD,kBAEvC3jC,IACFlmB,GAAU,IAAIrF,MAAMurB,EAAS,GAAG/sB,KAAK,MAGvCyB,KAAK8uD,QAAQ1xD,KAAKgI,IAqBpBmqD,EAAOn2D,UAAUi3D,iBAAmB,WAClCrwD,KAAK+vD,cAAgB/vD,KAAKgwD,aAC1BhwD,KAAKgwD,aAAehwD,KAAKiwD,UAAUK,cACnCtwD,KAAK8vD,QAAQ1yD,KAAK4C,KAAKgwD,eAGzBT,EAAOn2D,UAAUs4D,gBAAkB,WACjC,OAAO1xD,KAAK8vD,QAAQjzD,QAGtB0yD,EAAOn2D,UAAUm4D,kBAAoB,SAASZ,EAAQrlC,GACpD,OAAOtrB,KAAKwvD,eAAe+B,kBAAkBZ,EAAQrlC,IAGvDikC,EAAOn2D,UAAU03D,gBAAkB,SAASH,EAAQrlC,GAClD,OAAOtrB,KAAKwvD,eAAesB,gBAAgBH,EAAQrlC,IAGrDikC,EAAOn2D,UAAUy3D,SAAW,WAC1B,OAAQ7wD,KAAK+vD,eAAiB/vD,KAAKgwD,aAAaa,YAGlDtB,EAAOn2D,UAAU83D,aAAe,SAASS,GAGvC,QAAI3xD,KAAK6wD,aACLc,GAAiB3xD,KAAK4xD,wBAMrB5xD,KAAKyvD,KACRzvD,KAAKqwD,oBAEA,IAGTd,EAAOn2D,UAAUy4D,SAAW,SAASj9B,GACnC50B,KAAKsxD,MAAK,GAIV,IAAIQ,EAAY9xD,KAAKgwD,aAAapN,MAC9BkP,IACsC,OAApCA,EAAUA,EAAUj1D,OAAS,KAC/Bi1D,EAAYA,EAAU3wD,QAAQ,QAAS,KAEzCnB,KAAKgwD,aAAa5yD,KAAK00D,IAGrB9xD,KAAK0vD,mBACP1vD,KAAKqwD,mBAGP,IAAI0B,EAAa/xD,KAAK8vD,QAAQvxD,KAAK,MAKnC,MAHY,OAARq2B,IACFm9B,EAAaA,EAAW5wD,QAAQ,QAASyzB,IAEpCm9B,GAGTxC,EAAOn2D,UAAU44D,eAAiB,WAChChyD,KAAKgwD,aAAae,mBAGpBxB,EAAOn2D,UAAUm3D,WAAa,SAASI,EAAQC,GAQ7C,OAPAD,EAASA,GAAU,EACnBC,EAAYA,GAAa,EAGzB5wD,KAAKiwD,UAAUM,WAAWI,EAAQC,GAG9B5wD,KAAK8vD,QAAQjzD,OAAS,GACxBmD,KAAKgwD,aAAaO,WAAWI,EAAQC,IAC9B,IAGT5wD,KAAKgwD,aAAaO,cACX,IAGThB,EAAOn2D,UAAU64D,cAAgB,SAASnW,GACxC,IAAK,IAAI76C,EAAI,EAAGA,EAAI66C,EAAMoW,SAAUjxD,IAClCjB,KAAKqwD,mBAEPrwD,KAAKgwD,aAAaO,YAAY,GAC9BvwD,KAAKgwD,aAAa5yD,KAAK0+C,EAAMqW,mBAC7BnyD,KAAKgwD,aAAa5yD,KAAK0+C,EAAMxmB,MAC7Bt1B,KAAKkwD,oBAAqB,EAC1BlwD,KAAKmwD,oBAAqB,EAC1BnwD,KAAKowD,wBAAyB,GAGhCb,EAAOn2D,UAAUg5D,UAAY,SAASC,GACpCryD,KAAKsyD,2BACLtyD,KAAKgwD,aAAa5yD,KAAKi1D,GACvBryD,KAAKkwD,oBAAqB,EAC1BlwD,KAAKmwD,oBAAqB,EAC1BnwD,KAAKowD,uBAAyBpwD,KAAKgwD,aAAaiB,eAGlD1B,EAAOn2D,UAAUk5D,yBAA2B,WACtCtyD,KAAKkwD,qBAAuBlwD,KAAK4xD,uBAC9B5xD,KAAKmwD,oBACRnwD,KAAKgyD,iBAEPhyD,KAAKgwD,aAAa5yD,KAAK,OAI3BmyD,EAAOn2D,UAAUm5D,cAAgB,SAAS9rD,GACxC,IAAI+rD,EAAgBxyD,KAAK8vD,QAAQjzD,OACjC,MAAO4J,EAAQ+rD,EACbxyD,KAAK8vD,QAAQrpD,GAAO2qD,iBACpB3qD,IAEFzG,KAAKgwD,aAAaqB,uBAGpB9B,EAAOn2D,UAAUk4D,KAAO,SAASmB,GAC/BA,OAAiCv4D,IAAjBu4D,GAAsCA,EAEtDzyD,KAAKgwD,aAAasB,OAElB,MAAOmB,GAAgBzyD,KAAK8vD,QAAQjzD,OAAS,GAC3CmD,KAAKgwD,aAAaa,WAClB7wD,KAAK8vD,QAAQlN,MACb5iD,KAAKgwD,aAAehwD,KAAK8vD,QAAQ9vD,KAAK8vD,QAAQjzD,OAAS,GACvDmD,KAAKgwD,aAAasB,OAGpBtxD,KAAK+vD,cAAgB/vD,KAAK8vD,QAAQjzD,OAAS,EACzCmD,KAAK8vD,QAAQ9vD,KAAK8vD,QAAQjzD,OAAS,GAAK,MAG5C0yD,EAAOn2D,UAAUw4D,mBAAqB,WACpC,OAAO5xD,KAAKgwD,aAAaa,YAG3BtB,EAAOn2D,UAAUs5D,qBAAuB,WACtC,OAAO1yD,KAAK6wD,YACT7wD,KAAKgwD,aAAaa,YAAc7wD,KAAK+vD,cAAcc,YAGxDtB,EAAOn2D,UAAUu5D,wBAA0B,SAASC,EAAaC,GAC/D,IAAIpsD,EAAQzG,KAAK8vD,QAAQjzD,OAAS,EAClC,MAAO4J,GAAS,EAAG,CACjB,IAAIqsD,EAAqB9yD,KAAK8vD,QAAQrpD,GACtC,GAAIqsD,EAAmBjC,WACrB,MACK,GAAwD,IAApDiC,EAAmB9Q,KAAK,GAAGlmD,QAAQ82D,IAC5CE,EAAmB9Q,MAAM,KAAO6Q,EAAW,CAC3C7yD,KAAK8vD,QAAQ9yD,OAAOyJ,EAAQ,EAAG,EAAG,IAAIynD,EAAWluD,OACjDA,KAAK+vD,cAAgB/vD,KAAK8vD,QAAQ9vD,KAAK8vD,QAAQjzD,OAAS,GACxD,MAEF4J,MAIJlP,EAAOD,QAAQi4D,OAASA,GAIjB,CACA,CACA,CAED,SAAUh4D,GAgChB,SAASw7D,EAAQ/iD,EAASgjD,GACxBhzD,KAAKizD,YAAcC,EAAWljD,EAASgjD,GAGvChzD,KAAKmzD,SAAWnzD,KAAKozD,aAAa,YAElCpzD,KAAK40B,IAAM50B,KAAKqzD,gBAAgB,MAAO,QACvCrzD,KAAK2vD,iBAAmB3vD,KAAKozD,aAAa,oBAC1CpzD,KAAKgvD,YAAchvD,KAAKszD,YAAY,cAAe,GACnDtzD,KAAKkvD,YAAclvD,KAAKqzD,gBAAgB,cAAe,KACvDrzD,KAAKovD,aAAepvD,KAAKszD,YAAY,gBAErCtzD,KAAKuzD,kBAAoBvzD,KAAKozD,aAAa,qBAAqB,GAChEpzD,KAAKwzD,sBAAwBxzD,KAAKszD,YAAY,wBAAyB,OAClEtzD,KAAKuzD,oBACRvzD,KAAKwzD,sBAAwB,GAG/BxzD,KAAKmvD,iBAAmBnvD,KAAKozD,aAAa,mBAAyC,OAArBpzD,KAAKkvD,aAC/DlvD,KAAKmvD,mBACPnvD,KAAKkvD,YAAc,KASM,IAArBlvD,KAAKgvD,cACPhvD,KAAKgvD,YAAc,IAKvBhvD,KAAK4vD,iBAAmB5vD,KAAKszD,YAAY,mBAAoBtzD,KAAKszD,YAAY,aAE9EtzD,KAAK6vD,mBAAqB7vD,KAAKozD,aAAa,sBAK5CpzD,KAAKyzD,WAAazzD,KAAK0zD,oBAAoB,aAAc,CAAC,OAAQ,OAAQ,SAAU,MAAO,aAAc,MAAO,UAAW,CAAC,SAuF9H,SAASR,EAAWS,EAAYC,GAC9B,IAEI77D,EAFA87D,EAAY,GAIhB,IAAK97D,KAHL47D,EAAaG,EAAeH,GAGfA,EACP57D,IAAS67D,IACXC,EAAU97D,GAAQ47D,EAAW57D,IAKjC,GAAI67D,GAAkBD,EAAWC,GAC/B,IAAK77D,KAAQ47D,EAAWC,GACtBC,EAAU97D,GAAQ47D,EAAWC,GAAgB77D,GAGjD,OAAO87D,EAGT,SAASC,EAAe9jD,GACtB,IACIjX,EADAg7D,EAAgB,GAGpB,IAAKh7D,KAAOiX,EAAS,CACnB,IAAIgkD,EAASj7D,EAAIoI,QAAQ,KAAM,KAC/B4yD,EAAcC,GAAUhkD,EAAQjX,GAElC,OAAOg7D,EAhHThB,EAAQ35D,UAAU66D,WAAa,SAASl8D,EAAMm8D,GAC5C,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GAChCqN,EAAS8uD,GAAiB,GAQ9B,MAP4B,kBAAjBC,EACY,OAAjBA,GAAwD,oBAAxBA,EAAaztD,SAC/CtB,EAAS+uD,EAAaztD,UAES,kBAAjBytD,IAChB/uD,EAAS+uD,EAAa1mD,MAAM,uBAEvBrI,GAGT2tD,EAAQ35D,UAAUg6D,aAAe,SAASr7D,EAAMm8D,GAC9C,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GAChCqN,OAA0BlL,IAAjBi6D,IAA+BD,IAAkBC,EAC9D,OAAO/uD,GAGT2tD,EAAQ35D,UAAUi6D,gBAAkB,SAASt7D,EAAMm8D,GACjD,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GAChCqN,EAAS8uD,GAAiB,GAI9B,MAH4B,kBAAjBC,IACT/uD,EAAS+uD,EAAahzD,QAAQ,MAAO,MAAMA,QAAQ,MAAO,MAAMA,QAAQ,MAAO,OAE1EiE,GAGT2tD,EAAQ35D,UAAUk6D,YAAc,SAASv7D,EAAMm8D,GAC7C,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GACpCm8D,EAAgBE,SAASF,EAAe,IACpCr4B,MAAMq4B,KACRA,EAAgB,GAElB,IAAI9uD,EAASgvD,SAASD,EAAc,IAIpC,OAHIt4B,MAAMz2B,KACRA,EAAS8uD,GAEJ9uD,GAGT2tD,EAAQ35D,UAAUi7D,eAAiB,SAASt8D,EAAMu8D,EAAgBJ,GAChE,IAAI9uD,EAASpF,KAAK0zD,oBAAoB37D,EAAMu8D,EAAgBJ,GAC5D,GAAsB,IAAlB9uD,EAAOvI,OACT,MAAM,IAAI0D,MACR,qCAAuCxI,EAAO,+CAC9Cu8D,EAAiB,qBAAuBt0D,KAAKizD,YAAYl7D,GAAQ,KAGrE,OAAOqN,EAAO,IAIhB2tD,EAAQ35D,UAAUs6D,oBAAsB,SAAS37D,EAAMu8D,EAAgBJ,GACrE,IAAKI,GAA4C,IAA1BA,EAAez3D,OACpC,MAAM,IAAI0D,MAAM,mCAIlB,GADA2zD,EAAgBA,GAAiB,CAACI,EAAe,KAC5Ct0D,KAAKu0D,oBAAoBL,EAAeI,GAC3C,MAAM,IAAI/zD,MAAM,0BAGlB,IAAI6E,EAASpF,KAAKi0D,WAAWl8D,EAAMm8D,GACnC,IAAKl0D,KAAKu0D,oBAAoBnvD,EAAQkvD,GACpC,MAAM,IAAI/zD,MACR,qCAAuCxI,EAAO,6CAC9Cu8D,EAAiB,qBAAuBt0D,KAAKizD,YAAYl7D,GAAQ,KAGrE,OAAOqN,GAGT2tD,EAAQ35D,UAAUm7D,oBAAsB,SAASnvD,EAAQkvD,GACvD,OAAOlvD,EAAOvI,QAAUy3D,EAAez3D,SACpCuI,EAAOgB,MAAK,SAAS47C,GAAQ,OAAyC,IAAlCsS,EAAex4D,QAAQkmD,OAwChEzqD,EAAOD,QAAQy7D,QAAUA,EACzBx7D,EAAOD,QAAQk9D,cAAgBV,EAC/Bv8D,EAAOD,QAAQm9D,UAAYvB,GAIpB,CAED,SAAU37D,GAgChB,IAAIm9D,EAAoBr+B,OAAOj9B,UAAUC,eAAe,UAExD,SAASs7D,EAAaC,GACpB50D,KAAK60D,QAAUD,GAAgB,GAC/B50D,KAAK80D,eAAiB90D,KAAK60D,QAAQh4D,OACnCmD,KAAK+0D,WAAa,EAGpBJ,EAAav7D,UAAU47D,QAAU,WAC/Bh1D,KAAK+0D,WAAa,GAGpBJ,EAAav7D,UAAU67D,KAAO,WACxBj1D,KAAK+0D,WAAa,IACpB/0D,KAAK+0D,YAAc,IAIvBJ,EAAav7D,UAAU87D,QAAU,WAC/B,OAAOl1D,KAAK+0D,WAAa/0D,KAAK80D,gBAGhCH,EAAav7D,UAAU6M,KAAO,WAC5B,IAAI4R,EAAM,KAKV,OAJI7X,KAAKk1D,YACPr9C,EAAM7X,KAAK60D,QAAQ5yD,OAAOjC,KAAK+0D,YAC/B/0D,KAAK+0D,YAAc,GAEdl9C,GAGT88C,EAAav7D,UAAU+7D,KAAO,SAAS1uD,GACrC,IAAIoR,EAAM,KAMV,OALApR,EAAQA,GAAS,EACjBA,GAASzG,KAAK+0D,WACVtuD,GAAS,GAAKA,EAAQzG,KAAK80D,iBAC7Bj9C,EAAM7X,KAAK60D,QAAQ5yD,OAAOwE,IAErBoR,GAUT88C,EAAav7D,UAAUg8D,QAAU,SAAS3E,EAAShqD,GACjDgqD,EAAQ55B,UAAYpwB,EACpB,IAAI4uD,EAAgB5E,EAAQzvD,KAAKhB,KAAK60D,SAQtC,OANIQ,GAAmBX,GAAqBjE,EAAQ6E,QAC9CD,EAAc5uD,QAAUA,IAC1B4uD,EAAgB,MAIbA,GAGTV,EAAav7D,UAAUoH,KAAO,SAASiwD,EAAShqD,GAI9C,OAHAA,EAAQA,GAAS,EACjBA,GAASzG,KAAK+0D,WAEVtuD,GAAS,GAAKA,EAAQzG,KAAK80D,kBACpB90D,KAAKo1D,QAAQ3E,EAAShqD,IAMnCkuD,EAAav7D,UAAUm8D,SAAW,SAAS9E,EAAShqD,GAElD,IAAIoR,EAAM7X,KAAKm1D,KAAK1uD,GAEpB,OADAgqD,EAAQ55B,UAAY,EACL,OAARhf,GAAgB44C,EAAQjwD,KAAKqX,IAGtC88C,EAAav7D,UAAUsJ,MAAQ,SAAS+tD,GACtC,IAAI4E,EAAgBr1D,KAAKo1D,QAAQ3E,EAASzwD,KAAK+0D,YAM/C,OALIM,EACFr1D,KAAK+0D,YAAcM,EAAc,GAAGx4D,OAEpCw4D,EAAgB,KAEXA,GAGTV,EAAav7D,UAAUo8D,KAAO,SAASC,EAAkBC,EAAeC,GACtE,IACIjzD,EADAmV,EAAM,GAWV,OATI49C,IACF/yD,EAAQ1C,KAAK0C,MAAM+yD,GACf/yD,IACFmV,GAAOnV,EAAM,MAGbgzD,IAAkBhzD,GAAU+yD,IAC9B59C,GAAO7X,KAAK41D,UAAUF,EAAeC,IAEhC99C,GAGT88C,EAAav7D,UAAUw8D,UAAY,SAASnF,EAASkF,GACnD,IAAI99C,EAAM,GACNg+C,EAAc71D,KAAK+0D,WACvBtE,EAAQ55B,UAAY72B,KAAK+0D,WACzB,IAAIM,EAAgB5E,EAAQzvD,KAAKhB,KAAK60D,SAYtC,OAXIQ,GACFQ,EAAcR,EAAc5uD,MACxBkvD,IACFE,GAAeR,EAAc,GAAGx4D,SAGlCg5D,EAAc71D,KAAK80D,eAGrBj9C,EAAM7X,KAAK60D,QAAQzzD,UAAUpB,KAAK+0D,WAAYc,GAC9C71D,KAAK+0D,WAAac,EACXh+C,GAGT88C,EAAav7D,UAAU08D,eAAiB,SAASrF,GAC/C,OAAOzwD,KAAK41D,UAAUnF,GAAS,IAGjCkE,EAAav7D,UAAU28D,WAAa,SAAStF,EAASuF,GACpD,IAAI5wD,EAAS,KACTqxB,EAAQ,IAWZ,OAVIu/B,GAActB,IAChBj+B,EAAQ,KAGa,kBAAZg6B,GAAoC,KAAZA,EAEjCrrD,EAAS,IAAIixB,OAAOo6B,EAASh6B,GACpBg6B,IACTrrD,EAAS,IAAIixB,OAAOo6B,EAAQ31C,OAAQ2b,IAE/BrxB,GAGTuvD,EAAav7D,UAAU68D,mBAAqB,SAASC,GACnD,OAAO7/B,OAAO6/B,EAAe/0D,QAAQ,yBAA0B,UAIjEwzD,EAAav7D,UAAU+8D,eAAiB,SAAS1F,GAC/C,IAAIv/C,EAAQlR,KAAK+0D,WACbl9C,EAAM7X,KAAK81D,eAAerF,GAE9B,OADAzwD,KAAK+0D,WAAa7jD,EACX2G,GAGT88C,EAAav7D,UAAUg9D,SAAW,SAASC,GACzC,IAAInlD,EAAQlR,KAAK+0D,WAAa,EAC9B,OAAO7jD,GAASmlD,EAAQx5D,QAAUmD,KAAK60D,QAAQzzD,UAAU8P,EAAQmlD,EAAQx5D,OAAQqU,GAC9E9O,gBAAkBi0D,GAGvB9+D,EAAOD,QAAQq9D,aAAeA,GAIvB,CACC,CACA,CACA,CAEF,SAAUp9D,GAgChB,SAAS++D,EAAWC,EAAqBC,GACvCD,EAAqD,kBAAxBA,EAAmCA,EAAsBA,EAAoBz7C,OAC1G07C,EAAiD,kBAAtBA,EAAiCA,EAAoBA,EAAkB17C,OAClG9a,KAAKy2D,2BAA6B,IAAIpgC,OAAOkgC,EAAsB,0BAA0Bz7C,OAAS07C,EAAmB,KACzHx2D,KAAK02D,oBAAsB,kBAE3B12D,KAAK22D,gCAAkC,IAAItgC,OAAOkgC,EAAsB,2BAA2Bz7C,OAAS07C,EAAmB,KAGjIF,EAAWl9D,UAAUw9D,eAAiB,SAASthC,GAC7C,IAAKA,EAAK5yB,MAAM1C,KAAKy2D,4BACnB,OAAO,KAGT,IAAII,EAAa,GACjB72D,KAAK02D,oBAAoB7/B,UAAY,EACrC,IAAIigC,EAAkB92D,KAAK02D,oBAAoB11D,KAAKs0B,GAEpD,MAAOwhC,EACLD,EAAWC,EAAgB,IAAMA,EAAgB,GACjDA,EAAkB92D,KAAK02D,oBAAoB11D,KAAKs0B,GAGlD,OAAOuhC,GAGTP,EAAWl9D,UAAU29D,YAAc,SAASrc,GAC1C,OAAOA,EAAMob,eAAe91D,KAAK22D,kCAInCp/D,EAAOD,QAAQg/D,WAAaA,GAIpB,CAEF,SAAU/+D,EAAQy/D,EAA0B5/D,GAgClD,IAAI6/D,EAAa7/D,EAAoB,IAAI6/D,WACvClE,EAAU37D,EAAoB,IAAI27D,QAEpC,SAASmE,EAAaC,EAAannD,GACjC,IAAIonD,EAAa,IAAIH,EAAWE,EAAannD,GAC7C,OAAOonD,EAAWC,WAGpB9/D,EAAOD,QAAU4/D,EACjB3/D,EAAOD,QAAQggE,eAAiB,WAC9B,OAAO,IAAIvE,IAMP,SAAUx7D,EAAQy/D,EAA0B5/D,GAgClD,IAAI27D,EAAU37D,EAAoB,IAAI27D,QAClCxD,EAASn4D,EAAoB,GAAGm4D,OAChCoF,EAAev9D,EAAoB,GAAGu9D,aACtC2B,EAAal/D,EAAoB,IAAIk/D,WAErCiB,EAAkB,IAAIjB,EAAW,OAAQ,QAEzCkB,EAAY,cACZC,EAAgB,eAGhBC,EAAiB,KACjBC,EAAoB,cACpBC,EAAwB,gCACxBC,EAAkB,gCAEtB,SAASZ,EAAWE,EAAannD,GAC/BhQ,KAAK83D,aAAeX,GAAe,GAGnCn3D,KAAKkQ,SAAW,IAAI6iD,EAAQ/iD,GAC5BhQ,KAAK+3D,IAAM,KACX/3D,KAAKg4D,OAAS,KAGdh4D,KAAKi4D,eAAiB,CACpB,SAAS,EACT,cAAc,EACd,cAAc,EAEd,UAAU,EACV,aAAa,EACb,aAAa,GAEfj4D,KAAKk4D,uBAAyB,CAC5B,UAAU,EACV,aAAa,EACb,aAAa,GAKjBjB,EAAW79D,UAAU++D,UAAY,SAASC,GACxC,IAAIhzD,EAAS,GACbpF,KAAK+3D,IAAM/3D,KAAKg4D,OAAO/xD,OACvB,MAAOjG,KAAK+3D,IAAK,CAEf,GADA3yD,GAAUpF,KAAK+3D,IACE,OAAb/3D,KAAK+3D,IACP3yD,GAAUpF,KAAKg4D,OAAO/xD,YACjB,IAAoC,IAAhCmyD,EAASt8D,QAAQkE,KAAK+3D,MAA4B,OAAb/3D,KAAK+3D,IACnD,MAEF/3D,KAAK+3D,IAAM/3D,KAAKg4D,OAAO/xD,OAEzB,OAAOb,GAOT6xD,EAAW79D,UAAUi/D,cAAgB,SAASC,GAC5C,IAAIlzD,EAASsyD,EAAel3D,KAAKR,KAAKg4D,OAAO7C,QACzCoD,EAAgB,EACpB,MAAOb,EAAel3D,KAAKR,KAAKg4D,OAAO7C,QACrCn1D,KAAK+3D,IAAM/3D,KAAKg4D,OAAO/xD,OACnBqyD,GAAuC,OAAbt4D,KAAK+3D,MACX,IAAlBQ,GAAuBA,EAAgBv4D,KAAKkQ,SAASsjD,yBACvD+E,IACAv4D,KAAKoN,QAAQ8jD,cAAa,IAIhC,OAAO9rD,GAMT6xD,EAAW79D,UAAUo/D,uBAAyB,WAC5C,IAAIC,EAAY,EACZjhE,EAAI,EACJq/C,EAAK72C,KAAKg4D,OAAO7C,KAAK39D,GAC1B,MAAOq/C,EAAI,CACT,GAAW,MAAPA,EACF,OAAO,EACF,GAAW,MAAPA,EAET4hB,GAAa,OACR,GAAW,MAAP5hB,EAAY,CACrB,GAAkB,IAAd4hB,EACF,OAAO,EAETA,GAAa,OACR,GAAW,MAAP5hB,GAAqB,MAAPA,EACvB,OAAO,EAETr/C,IACAq/C,EAAK72C,KAAKg4D,OAAO7C,KAAK39D,GAExB,OAAO,GAGTy/D,EAAW79D,UAAUs/D,aAAe,SAASC,GAC3C34D,KAAKoN,QAAQmjD,WAAWvwD,KAAK44D,cAC7B54D,KAAKoN,QAAQ+iD,oBAAqB,EAClCnwD,KAAKoN,QAAQglD,UAAUuG,IAGzB1B,EAAW79D,UAAUy/D,oBAAsB,SAASC,GAC9CA,IACF94D,KAAKoN,QAAQ8iD,oBAAqB,IAItC+G,EAAW79D,UAAUu3D,OAAS,WAC5B3wD,KAAK44D,gBAGP3B,EAAW79D,UAAU2/D,QAAU,WACzB/4D,KAAK44D,aAAe,GACtB54D,KAAK44D,gBAMT3B,EAAW79D,UAAUi+D,SAAW,WAC9B,GAAIr3D,KAAKkQ,SAASijD,SAChB,OAAOnzD,KAAK83D,aAGd,IAAIX,EAAcn3D,KAAK83D,aACnBljC,EAAM50B,KAAKkQ,SAAS0kB,IACZ,SAARA,IACFA,EAAM,KACFuiC,GAAeK,EAAUh3D,KAAK22D,GAAe,MAC/CviC,EAAMuiC,EAAYz0D,MAAM80D,GAAW,KAMvCL,EAAcA,EAAYh2D,QAAQs2D,EAAe,MAGjD,IAAI5I,EAAmBsI,EAAYz0D,MAAM,WAAW,GAEpD1C,KAAKoN,QAAU,IAAImiD,EAAOvvD,KAAKkQ,SAAU2+C,GACzC7uD,KAAKg4D,OAAS,IAAIrD,EAAawC,GAC/Bn3D,KAAK44D,aAAe,EACpB54D,KAAKg5D,aAAe,EAEpBh5D,KAAK+3D,IAAM,KACX,IAUIkB,EACAH,EACAI,EAZAC,EAAa,EAEbC,GAAa,EAGbC,GAAsB,EACtBC,GAA2B,EAC3BC,GAAiB,EACjBC,GAAiB,EACjBC,EAAez5D,KAAK+3D,IAKxB,MAAO,EAAM,CAUX,GATAkB,EAAaj5D,KAAKg4D,OAAOxC,KAAKmC,GAC9BmB,EAA8B,KAAfG,EACfC,EAAcO,EACdz5D,KAAK+3D,IAAM/3D,KAAKg4D,OAAO/xD,OACN,OAAbjG,KAAK+3D,KAAgB/3D,KAAKg4D,OAAO9C,YACnCl1D,KAAK+3D,KAAO/3D,KAAKg4D,OAAO/xD,QAE1BwzD,EAAez5D,KAAK+3D,KAEf/3D,KAAK+3D,IACR,MACK,GAAiB,MAAb/3D,KAAK+3D,KAAsC,MAAvB/3D,KAAKg4D,OAAO7C,OAAgB,CAMzDn1D,KAAKoN,QAAQ8jD,eACblxD,KAAKg4D,OAAO/C,OAEZ,IAAIyE,EAAU15D,KAAKg4D,OAAOxC,KAAKoC,GAG3Bf,EAAaU,EAAgBX,eAAe8C,GAC5C7C,GAAoC,UAAtBA,EAAW8C,SAC3BD,GAAWnC,EAAgBR,YAAY/2D,KAAKg4D,SAG9Ch4D,KAAK04D,aAAagB,GAGlB15D,KAAKq4D,eAAc,GAInBr4D,KAAKoN,QAAQ8jD,oBACR,GAAiB,MAAblxD,KAAK+3D,KAAsC,MAAvB/3D,KAAKg4D,OAAO7C,OAIzCn1D,KAAKoN,QAAQ8iD,oBAAqB,EAClClwD,KAAKg4D,OAAO/C,OACZj1D,KAAK04D,aAAa14D,KAAKg4D,OAAOxC,KAAKqC,IAGnC73D,KAAKq4D,eAAc,QACd,GAAiB,MAAbr4D,KAAK+3D,IAId,GAHA/3D,KAAK64D,oBAAoBC,GAGE,MAAvB94D,KAAKg4D,OAAO7C,OACdn1D,KAAK04D,aAAa14D,KAAK+3D,IAAM/3D,KAAKm4D,UAAU,UACvC,CACLn4D,KAAK04D,aAAa14D,KAAK+3D,KAGvB,IAAI6B,EAAiB55D,KAAKg4D,OAAO7B,eAAe,uBAE5CyD,EAAel3D,MAAM,WAEvBk3D,EAAiB55D,KAAKm4D,UAAU,MAAMh3D,QAAQ,MAAO,IACrDnB,KAAK04D,aAAakB,GAClB55D,KAAKoN,QAAQ8iD,oBAAqB,GAGpC0J,EAAiBA,EAAez4D,QAAQ,MAAO,IAExB,WAAnBy4D,EACFL,GAAiB,EACW,WAAnBK,IACTJ,GAAiB,GAIfI,KAAkB55D,KAAKi4D,gBACzBj4D,KAAKg5D,cAAgB,EACjBY,KAAkB55D,KAAKk4D,yBACzBoB,GAA2B,IAGnBF,GAA6B,IAAfD,IAAqD,IAAjCS,EAAe99D,QAAQ,OACnEu9D,GAAsB,EACtBr5D,KAAK2wD,cAGa,MAAb3wD,KAAK+3D,KAAsC,MAAvB/3D,KAAKg4D,OAAO7C,QACzCn1D,KAAK64D,oBAAoBC,GACzB94D,KAAK04D,aAAa14D,KAAK+3D,IAAM/3D,KAAKm4D,UAAU,OACtB,MAAbn4D,KAAK+3D,KACVsB,IACFA,GAAsB,EACtBr5D,KAAK+4D,WAIHO,GACFA,GAA2B,EAC3BF,EAAcp5D,KAAK44D,cAAgB54D,KAAKg5D,cAGxCI,EAAcp5D,KAAK44D,cAAgB54D,KAAKg5D,aAAe,EAErDh5D,KAAKkQ,SAAS2pD,uBAAyBT,GACrCp5D,KAAKoN,QAAQ2iD,eAAyD,MAAxC/vD,KAAKoN,QAAQ2iD,cAAc/N,MAAM,IACjEhiD,KAAKoN,QAAQulD,wBAAwB,IAAK,KAI9C3yD,KAAKoN,QAAQ8iD,oBAAqB,EAGA,WAA9BlwD,KAAKkQ,SAAS4pD,aAChB95D,KAAKoN,QAAQ8jD,eACblxD,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAK2wD,SACL3wD,KAAKoN,QAAQmjD,WAAWvwD,KAAK44D,gBAE7B54D,KAAK2wD,SACL3wD,KAAK04D,aAAa14D,KAAK+3D,MAGzB/3D,KAAKq4D,eAAc,GACnBr4D,KAAKoN,QAAQ8jD,gBACS,MAAblxD,KAAK+3D,KACd/3D,KAAK+4D,UACL/4D,KAAKoN,QAAQ8jD,eACO,MAAhBgI,GACFl5D,KAAKoN,QAAQkkD,MAAK,GAEpBkI,GAAiB,EACjBD,GAAiB,EACbF,IACFr5D,KAAK+4D,UACLM,GAAsB,GAExBr5D,KAAK04D,aAAa14D,KAAK+3D,KACvBqB,GAAa,EACTp5D,KAAKg5D,cACPh5D,KAAKg5D,eAGPh5D,KAAKq4D,eAAc,GACnBr4D,KAAKoN,QAAQ8jD,eAETlxD,KAAKkQ,SAAS2pD,wBAA0B75D,KAAKoN,QAAQslD,wBAC5B,MAAvB1yD,KAAKg4D,OAAO7C,QACdn1D,KAAKoN,QAAQ8jD,cAAa,IAGR,MAAblxD,KAAK+3D,KACTqB,IAAcE,GAA+Bt5D,KAAKg4D,OAAO5B,SAAS,MAAQp2D,KAAKw4D,0BAA8Bx4D,KAAKg4D,OAAO5B,SAAS,MAASmD,GAAiC,IAAfJ,GAe5Jn5D,KAAKg4D,OAAO5B,SAAS,OACvBp2D,KAAKoN,QAAQ8iD,oBAAqB,GAET,MAAvBlwD,KAAKg4D,OAAO7C,QAEdn1D,KAAK+3D,IAAM/3D,KAAKg4D,OAAO/xD,OACvBjG,KAAK04D,aAAa,OAGlB14D,KAAK04D,aAAa,OArBpB14D,KAAK04D,aAAa,KACbW,IACHA,GAAsB,EACtBr5D,KAAKoN,QAAQ8iD,oBAAqB,EAClClwD,KAAKq4D,eAAc,GACnBr4D,KAAK2wD,WAmBa,MAAb3wD,KAAK+3D,KAA4B,MAAb/3D,KAAK+3D,KAClC/3D,KAAK64D,oBAAoBC,GACzB94D,KAAK04D,aAAa14D,KAAK+3D,IAAM/3D,KAAKm4D,UAAUn4D,KAAK+3D,MACjD/3D,KAAKq4D,eAAc,IACG,MAAbr4D,KAAK+3D,IACK,IAAfoB,GACEE,IACFr5D,KAAK+4D,UACLM,GAAsB,GAExBE,GAAiB,EACjBC,GAAiB,EACjBx5D,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAKq4D,eAAc,GAMQ,MAAvBr4D,KAAKg4D,OAAO7C,QACdn1D,KAAKoN,QAAQ8jD,iBAGflxD,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAKq4D,eAAc,GACnBr4D,KAAKoN,QAAQ8iD,oBAAqB,GAEd,MAAblwD,KAAK+3D,IACV/3D,KAAKg4D,OAAO5B,SAAS,QACvBp2D,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAKq4D,gBACLc,IACAn5D,KAAK2wD,SACL3wD,KAAK+3D,IAAM/3D,KAAKg4D,OAAO/xD,OACN,MAAbjG,KAAK+3D,KAA4B,MAAb/3D,KAAK+3D,KAA4B,MAAb/3D,KAAK+3D,IAC/C/3D,KAAKg4D,OAAO/C,OACHj1D,KAAK+3D,MACd/3D,KAAK04D,aAAa14D,KAAK+3D,IAAM/3D,KAAKm4D,UAAU,MACxCgB,IACFA,IACAn5D,KAAK+4D,cAIT/4D,KAAK64D,oBAAoBC,GACzB94D,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAKq4D,gBACLc,IACAn5D,KAAK2wD,UAEe,MAAb3wD,KAAK+3D,KACVoB,IACFA,IACAn5D,KAAK+4D,WAEP/4D,KAAK04D,aAAa14D,KAAK+3D,MACD,MAAb/3D,KAAK+3D,KACd/3D,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAKq4D,eAAc,IACfr4D,KAAKkQ,SAAS6pD,4BAA+BV,GAAsC,IAAfF,GAAqBK,GAAmBD,EAG9Gv5D,KAAKoN,QAAQ8iD,oBAAqB,EAFlClwD,KAAKoN,QAAQ8jD,gBAIQ,MAAblxD,KAAK+3D,KAA4B,MAAb/3D,KAAK+3D,KAA4B,MAAb/3D,KAAK+3D,KAAiBsB,GAAsC,IAAfF,EAczE,MAAbn5D,KAAK+3D,IACd/3D,KAAK04D,aAAa14D,KAAK+3D,KACD,MAAb/3D,KAAK+3D,KACd/3D,KAAK64D,oBAAoBC,GACzB94D,KAAK04D,aAAa14D,KAAK+3D,MACD,MAAb/3D,KAAK+3D,KACd/3D,KAAKq4D,gBACLr4D,KAAK04D,aAAa,KACdhB,EAAel3D,KAAKR,KAAK+3D,OAC3B/3D,KAAK+3D,IAAM,KAES,MAAb/3D,KAAK+3D,KAAgB/3D,KAAKg4D,OAAO5B,SAAS,OAInDp2D,KAAK64D,oBAAoBC,GACzB94D,KAAK04D,aAAa14D,KAAK+3D,OAJvB/3D,KAAK04D,aAAa,KAClB14D,KAAK04D,aAAa14D,KAAK+3D,MAzBnB/3D,KAAKkQ,SAAS8pD,yBAChBh6D,KAAKoN,QAAQ8iD,oBAAqB,EAClClwD,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAKoN,QAAQ8iD,oBAAqB,IAElClwD,KAAK04D,aAAa14D,KAAK+3D,KACvB/3D,KAAKq4D,gBAEDr4D,KAAK+3D,KAAOL,EAAel3D,KAAKR,KAAK+3D,OACvC/3D,KAAK+3D,IAAM,KAuBnB,IAAIkC,EAAYj6D,KAAKoN,QAAQykD,SAASj9B,GAEtC,OAAOqlC,GAGT1iE,EAAOD,QAAQ2/D,WAAaA,GAKtB,SAAU1/D,EAAQy/D,EAA0B5/D,GAgClD,IAAI8iE,EAAc9iE,EAAoB,GAAG27D,QAEzC,SAASA,EAAQ/iD,GACfkqD,EAAYviE,KAAKqI,KAAMgQ,EAAS,OAEhChQ,KAAK+5D,2BAA6B/5D,KAAKozD,aAAa,8BAA8B,GAClFpzD,KAAK65D,sBAAwB75D,KAAKozD,aAAa,yBAAyB,GACxE,IAAI+G,EAAkCn6D,KAAKozD,aAAa,mCACxDpzD,KAAKg6D,wBAA0Bh6D,KAAKozD,aAAa,4BAA8B+G,EAE/E,IAAIC,EAAoBp6D,KAAK0zD,oBAAoB,cAAe,CAAC,WAAY,SAAU,aAAc,OAAQ,oBAC7G1zD,KAAK85D,YAAc,WACnB,IAAK,IAAIO,EAAK,EAAGA,EAAKD,EAAkBv9D,OAAQw9D,IAChB,WAA1BD,EAAkBC,GAEpBr6D,KAAK85D,YAAc,WAEnB95D,KAAK85D,YAAcM,EAAkBC,GAI3CtH,EAAQ35D,UAAY,IAAI8gE,EAIxB3iE,EAAOD,QAAQy7D,QAAUA,IAOXuH,EAA2B,GAG/B,SAASljE,EAAoBC,GAE5B,IAAIkjE,EAAeD,EAAyBjjE,GAC5C,QAAqB6C,IAAjBqgE,EACH,OAAOA,EAAajjE,QAGrB,IAAIC,EAAS+iE,EAAyBjjE,GAAY,CAGjDC,QAAS,IAOV,OAHA22D,EAAoB52D,GAAUE,EAAQA,EAAOD,QAASF,GAG/CG,EAAOD,QAQf,IAAIkjE,EAAsBpjE,EAAoB,IAC9Cg0D,GAAsBoP,GA5/CvB,GAigDF,IEr/CHC,GFq/COvD,GAAe9L,GE88CnB,SAASsP,GAAcC,EAAa3qD,GACvC,OAAOyqD,GAAqBE,EAAa3qD,EAAS+9C,GAAamJ,IC5gG5D,SAAS,GAAOvhB,EAAUrpB,EAAOtc,GACpC,IAAIvX,EAAQk9C,EAASpS,UACjBq3B,GAAc,EACdC,EAAqB,EACrBzlB,EAAUplC,EAAQolC,SAAW,EACjC,GAAI9oB,EAAO,CACP,IAAI0pB,EAAcL,EAAS9O,SAASva,EAAMpb,OAEtC4pD,EAAgB9kB,EACpB,MAAO8kB,EAAgB,GAAKC,GAAatiE,EAAOqiE,EAAgB,GAC5DA,IAEkB,IAAlBA,GAAuBE,GAAMviE,EAAOqiE,EAAgB,GACpD9kB,EAAc8kB,EAIVA,EAAgB9kB,IAChBA,EAAc8kB,EAAgB,GAItC,IAAI7kB,EAAYN,EAAS9O,SAASva,EAAM9D,KACpCyyC,EAAchlB,EAClB,MAAOglB,EAAcxiE,EAAMoE,QAAUk+D,GAAatiE,EAAOwiE,GACrDA,KAEAA,IAAgBxiE,EAAMoE,QAAUm+D,GAAMviE,EAAOwiE,MAC7ChlB,EAAYglB,GAEhB3uC,EAAQ,GAAMxzB,OAAO68C,EAAS5O,WAAWiP,GAAcL,EAAS5O,WAAWkP,IAG3E,IAAIilB,EAAYziE,EAAM2I,UAAU,EAAG40C,GACnC,GAAI,IAAI3f,OAAO,eAAe71B,KAAK06D,GAG/B,OADAziE,EAAQA,EAAM2I,UAAU40C,EAAaC,GAC9B,CAAC,CACA3pB,MAAOA,EACP6gB,QAAS10C,IAKrB,GAFAmiE,EAAc3kB,IAAcx9C,EAAMoE,OAClCpE,EAAQA,EAAM2I,UAAU40C,EAAaC,GACjB,IAAhBD,EAAmB,CACnB,IAAImlB,EAAoBxlB,EAAS9O,SAAS,GAAS/tC,OAAOwzB,EAAMpb,MAAMooB,KAAM,IAC5EuhC,EAAqBO,GAAmBzlB,EAASpS,UAAW43B,EAAmBnrD,SAInFsc,EAAQ,GAAMxzB,OAAO,GAASA,OAAO,EAAG,GAAI68C,EAAS5O,WAAWtuC,EAAMoE,SAE1E,IAAIw+D,EAAc,CACdrM,YAAa5Z,EACb8Z,YAAal/C,EAAQqlC,aAAe,IAAM,KAC1Cwa,mBAAoByL,GAAgBtrD,EAAS,oBAAoB,GACjE4/C,iBAAkB0L,GAAgBtrD,EAAS,iBAAkB,KAC7DurD,YAAaC,GAAoBxrD,EAAS,mBAAe,GACzDyrD,oBAAqBD,GAAoBxrD,EAAS,0BAAsB,GACxE0rD,kBAAmBJ,GAAgBtrD,EAAS,mBAAmB,GAC/DujD,kBAAmB+H,GAAgBtrD,EAAS,oBAAoB,GAChEwjD,sBAAuB8H,GAAgBtrD,EAAS,sBAAuB,OACvE2rD,kBAAmBL,GAAgBtrD,EAAS,oBAAoB,GAChE2/C,iBAAkBiL,GAAeU,GAAgBtrD,EAAS,kBAAkB,GAC5E4rD,aAAcJ,GAAoBxrD,EAAS,mBAAe,GAC1D6rD,gBAAiBP,GAAgBtrD,EAAS,iBAAkB,QAC5D8rD,4BAA6BR,GAAgBtrD,EAAS,gCAA4B,GAClF4kB,IAAK,KACLmnC,eAAgBT,GAAgBtrD,EAAS,gBAAiB,UAC1DyjD,WAAYuI,GAA0BhsD,EAAS,OAC/CisD,8BAA+BX,GAAgBtrD,EAAS,8BAA+B,KAEvF5K,EAASs1D,GAAcwB,GAASzjE,GAAQ4iE,GAC5C,GAAIR,EAAqB,EAAG,CACxB,IAAIlK,EAAS3gD,EAAQqlC,aAAekL,GAAO,IAAKnL,EAAUylB,GAAsBta,GAAO,KAAMsa,GAC7Fz1D,EAASA,EAAOqI,MAAM,MAAMlP,KAAK,KAAOoyD,GACV,IAA1BrkC,EAAMpb,MAAMy5B,YACZvlC,EAASurD,EAASvrD,GAG1B,MAAO,CAAC,CACAknB,MAAOA,EACP6gB,QAAS/nC,IAGrB,SAAS82D,GAAS5pD,GACd,OAAOA,EAAInR,QAAQ,OAAQ,IAE/B,SAASm6D,GAAgBtrD,EAASjX,EAAKojE,GACnC,GAAInsD,GAAWA,EAAQ3W,eAAeN,GAAM,CACxC,IAAIN,EAAQuX,EAAQjX,GACpB,GAAc,OAAVN,EACA,OAAOA,EAGf,OAAO0jE,EAEX,SAASX,GAAoBxrD,EAASjX,EAAKojE,GACvC,IAAIrR,EAAOwQ,GAAgBtrD,EAASjX,EAAK,MACzC,MAAoB,kBAAT+xD,EACHA,EAAKjuD,OAAS,EACPiuD,EAAKr9C,MAAM,KAAKjH,KAAI,SAAU9N,GAAK,OAAOA,EAAE44D,OAAOlvD,iBAEvD,GAEJ+5D,EAEX,SAASH,GAA0BhsD,EAASmsD,GACxC,IAAI1jE,EAAQ6iE,GAAgBtrD,EAAS,aAAcmsD,GACnD,OAAc,IAAV1jE,EACO,CAAC,QAEL,CAAC,QAEZ,SAAS2iE,GAAmBt3B,EAAShqB,EAAQ9J,GACzC,IAAIxY,EAAIsiB,EACJsiD,EAAS,EACThnB,EAAUplC,EAAQolC,SAAW,EACjC,MAAO59C,EAAIssC,EAAQjnC,OAAQ,CACvB,IAAIg6C,EAAK/S,EAAQ7hC,OAAOzK,GACxB,GAAW,MAAPq/C,EACAulB,QAEC,IAAW,OAAPvlB,EAIL,MAHAulB,GAAUhnB,EAKd59C,IAEJ,OAAO8X,KAAKiL,MAAM6hD,EAAShnB,GAc/B,SAAS4lB,GAAM1lC,EAAMxb,GACjB,OAAgD,IAAzC,OAAOhe,QAAQw5B,EAAKrzB,OAAO6X,IAEtC,SAASihD,GAAazlC,EAAMxb,GACxB,OAA+C,IAAxC,MAAMhe,QAAQw5B,EAAKrzB,OAAO6X,KD5E5B,WAEC,IAAIm0C,EAAsB,CAC7B,CACA,CAED,SAAU12D,GA+BhB,SAAS22D,EAAW5lD,GAClBtI,KAAKmuD,SAAW7lD,EAChBtI,KAAKouD,kBAAoB,EAEzBpuD,KAAKquD,gBAAkB,EACvBruD,KAAKsuD,kBAAoB,EACzBtuD,KAAKuuD,mBAAqB,EAC1BvuD,KAAKwuD,6BAA+B,EACpCxuD,KAAKyuD,2BAA6B,EAClCzuD,KAAK0uD,6BAA+B,EAEpC1uD,KAAK2uD,QAAU,GAqIjB,SAASC,EAAkB5+C,EAAS6+C,GAClC7uD,KAAK8uD,QAAU,CAAC,IAChB9uD,KAAK+uD,cAAgB/+C,EAAQg/C,YAC7BhvD,KAAKivD,gBAAkBj/C,EAAQk/C,YAC1Bl/C,EAAQm/C,mBACXnvD,KAAKivD,gBAAkB,IAAIlvD,MAAMiQ,EAAQg/C,YAAc,GAAGzwD,KAAKyR,EAAQk/C,cAIzEL,EAAmBA,GAAoB,GACnC7+C,EAAQo/C,aAAe,IACzBP,EAAmB,IAAI9uD,MAAMiQ,EAAQo/C,aAAe,GAAG7wD,KAAKyB,KAAKivD,kBAGnEjvD,KAAKqvD,cAAgBR,EACrB7uD,KAAKsvD,qBAAuBT,EAAiBhyD,OAiD/C,SAAS0yD,EAAOv/C,EAAS6+C,GACvB7uD,KAAKwvD,eAAiB,IAAIZ,EAAkB5+C,EAAS6+C,GACrD7uD,KAAKyvD,KAAM,EACXzvD,KAAK0vD,kBAAoB1/C,EAAQ2/C,iBACjC3vD,KAAKgvD,YAAch/C,EAAQg/C,YAC3BhvD,KAAK4vD,iBAAmB5/C,EAAQ4/C,iBAChC5vD,KAAK6vD,mBAAqB7/C,EAAQ6/C,mBAClC7vD,KAAK8vD,QAAU,GACf9vD,KAAK+vD,cAAgB,KACrB/vD,KAAKgwD,aAAe,KACpBhwD,KAAKiwD,UAAY,IAAI/B,EAAWluD,MAChCA,KAAKkwD,oBAAqB,EAC1BlwD,KAAKmwD,oBAAqB,EAC1BnwD,KAAKowD,wBAAyB,EAE9BpwD,KAAKqwD,mBAjNPnC,EAAW90D,UAAUk3D,YAAc,WACjC,IAAIh3B,EAAO,IAAI40B,EAAWluD,KAAKmuD,UAE/B,OADA70B,EAAKi3B,WAAWvwD,KAAKquD,eAAgBruD,KAAKsuD,mBACnCh1B,GAGT40B,EAAW90D,UAAU4oD,KAAO,SAASv7C,GACnC,OAAIA,EAAQ,EACHzG,KAAK2uD,QAAQ3uD,KAAK2uD,QAAQ9xD,OAAS4J,GAEnCzG,KAAK2uD,QAAQloD,IAIxBynD,EAAW90D,UAAUo3D,UAAY,SAASC,GACxC,IAAK,IAAIC,EAAoB1wD,KAAK2uD,QAAQ9xD,OAAS,EAAG6zD,GAAqB,EAAGA,IAC5E,GAAI1wD,KAAK2uD,QAAQ+B,GAAmBhuD,MAAM+tD,GACxC,OAAO,EAGX,OAAO,GAGTvC,EAAW90D,UAAUm3D,WAAa,SAASI,EAAQC,GAC7C5wD,KAAK6wD,aACP7wD,KAAKquD,eAAiBsC,GAAU,EAChC3wD,KAAKsuD,kBAAoBsC,GAAa,EACtC5wD,KAAKouD,kBAAoBpuD,KAAKmuD,SAAS2C,gBAAgB9wD,KAAKquD,eAAgBruD,KAAKsuD,qBAIrFJ,EAAW90D,UAAU23D,gBAAkB,WACjC/wD,KAAKmuD,SAASyB,mBAChB5vD,KAAKuuD,mBAAqBvuD,KAAK2uD,QAAQ9xD,OACvCmD,KAAKwuD,6BAA+BxuD,KAAKouD,kBACzCpuD,KAAKyuD,0BAA4BzuD,KAAKmuD,SAAS8B,UAAU5B,eACzDruD,KAAK0uD,6BAA+B1uD,KAAKmuD,SAAS8B,UAAU3B,oBAIhEJ,EAAW90D,UAAU43D,aAAe,WAClC,OAAOhxD,KAAKuuD,oBACVvuD,KAAKouD,kBAAoBpuD,KAAKmuD,SAASyB,kBACvC5vD,KAAKwuD,6BAA+BxuD,KAAKmuD,SAAS8B,UAAU7B,mBAGhEF,EAAW90D,UAAU63D,YAAc,WACjC,GAAIjxD,KAAKgxD,eAAgB,CACvBhxD,KAAKmuD,SAAS+C,eACd,IAAIjrD,EAAOjG,KAAKmuD,SAAS6B,aAYzB,OAXA/pD,EAAKsqD,WAAWvwD,KAAKyuD,0BAA2BzuD,KAAK0uD,8BACrDzoD,EAAK0oD,QAAU3uD,KAAK2uD,QAAQzwD,MAAM8B,KAAKuuD,oBACvCvuD,KAAK2uD,QAAU3uD,KAAK2uD,QAAQzwD,MAAM,EAAG8B,KAAKuuD,oBAE1CtoD,EAAKmoD,mBAAqBpuD,KAAKouD,kBAAoBpuD,KAAKwuD,6BACxDxuD,KAAKouD,kBAAoBpuD,KAAKwuD,6BAEN,MAApBvoD,EAAK0oD,QAAQ,KACf1oD,EAAK0oD,QAAQ3xD,OAAO,EAAG,GACvBiJ,EAAKmoD,mBAAqB,IAErB,EAET,OAAO,GAGTF,EAAW90D,UAAUy3D,SAAW,WAC9B,OAA+B,IAAxB7wD,KAAK2uD,QAAQ9xD,QAGtBqxD,EAAW90D,UAAUiuB,KAAO,WAC1B,OAAKrnB,KAAK6wD,WAGD,KAFA7wD,KAAK2uD,QAAQ3uD,KAAK2uD,QAAQ9xD,OAAS,IAM9CqxD,EAAW90D,UAAUgE,KAAO,SAAS4kD,GACnChiD,KAAK2uD,QAAQvxD,KAAK4kD,GAClB,IAAImP,EAAqBnP,EAAK/jD,YAAY,OACd,IAAxBkzD,EACFnxD,KAAKouD,kBAAoBpM,EAAKnlD,OAASs0D,EAEvCnxD,KAAKouD,mBAAqBpM,EAAKnlD,QAInCqxD,EAAW90D,UAAUwpD,IAAM,WACzB,IAAIZ,EAAO,KAKX,OAJKhiD,KAAK6wD,aACR7O,EAAOhiD,KAAK2uD,QAAQ/L,MACpB5iD,KAAKouD,mBAAqBpM,EAAKnlD,QAE1BmlD,GAITkM,EAAW90D,UAAUg4D,eAAiB,WAChCpxD,KAAKquD,eAAiB,IACxBruD,KAAKquD,gBAAkB,EACvBruD,KAAKouD,mBAAqBpuD,KAAKmuD,SAASa,cAI5Cd,EAAW90D,UAAUi4D,oBAAsB,WACrCrxD,KAAKyuD,0BAA4B,IACnCzuD,KAAKyuD,2BAA6B,IAGtCP,EAAW90D,UAAUk4D,KAAO,WAC1B,MAAuB,MAAhBtxD,KAAKqnB,OACVrnB,KAAK2uD,QAAQ/L,MACb5iD,KAAKouD,mBAAqB,GAI9BF,EAAW90D,UAAUwH,SAAW,WAC9B,IAAIwE,EAAS,GASb,OARIpF,KAAK6wD,WACH7wD,KAAKmuD,SAAS0B,qBAChBzqD,EAASpF,KAAKmuD,SAASoD,kBAAkBvxD,KAAKquD,kBAGhDjpD,EAASpF,KAAKmuD,SAASoD,kBAAkBvxD,KAAKquD,eAAgBruD,KAAKsuD,mBACnElpD,GAAUpF,KAAK2uD,QAAQpwD,KAAK,KAEvB6G,GAqBTwpD,EAAkBx1D,UAAU03D,gBAAkB,SAASH,EAAQrlC,GAC7D,IAAIlmB,EAASpF,KAAKsvD,qBAOlB,OANAhkC,EAASA,GAAU,EACfqlC,EAAS,IACXvrD,EAAS,GAEXA,GAAUurD,EAAS3wD,KAAK+uD,cACxB3pD,GAAUkmB,EACHlmB,GAGTwpD,EAAkBx1D,UAAUm4D,kBAAoB,SAASnC,EAAc9jC,GACrE,IAAIlmB,EAASpF,KAAKqvD,cASlB,OARA/jC,EAASA,GAAU,EACf8jC,EAAe,IACjBA,EAAe,EACfhqD,EAAS,IAEXkmB,GAAU8jC,EAAepvD,KAAK+uD,cAC9B/uD,KAAKwxD,eAAelmC,GACpBlmB,GAAUpF,KAAK8uD,QAAQxjC,GAChBlmB,GAGTwpD,EAAkBx1D,UAAUo4D,eAAiB,SAASlmC,GACpD,MAAOA,GAAUtrB,KAAK8uD,QAAQjyD,OAC5BmD,KAAKyxD,gBAIT7C,EAAkBx1D,UAAUq4D,aAAe,WACzC,IAAInmC,EAAStrB,KAAK8uD,QAAQjyD,OACtB8zD,EAAS,EACTvrD,EAAS,GACTpF,KAAK+uD,eAAiBzjC,GAAUtrB,KAAK+uD,gBACvC4B,EAASrhD,KAAKiL,MAAM+Q,EAAStrB,KAAK+uD,eAClCzjC,GAAUqlC,EAAS3wD,KAAK+uD,cACxB3pD,EAAS,IAAIrF,MAAM4wD,EAAS,GAAGpyD,KAAKyB,KAAKivD,kBAEvC3jC,IACFlmB,GAAU,IAAIrF,MAAMurB,EAAS,GAAG/sB,KAAK,MAGvCyB,KAAK8uD,QAAQ1xD,KAAKgI,IAqBpBmqD,EAAOn2D,UAAUi3D,iBAAmB,WAClCrwD,KAAK+vD,cAAgB/vD,KAAKgwD,aAC1BhwD,KAAKgwD,aAAehwD,KAAKiwD,UAAUK,cACnCtwD,KAAK8vD,QAAQ1yD,KAAK4C,KAAKgwD,eAGzBT,EAAOn2D,UAAUs4D,gBAAkB,WACjC,OAAO1xD,KAAK8vD,QAAQjzD,QAGtB0yD,EAAOn2D,UAAUm4D,kBAAoB,SAASZ,EAAQrlC,GACpD,OAAOtrB,KAAKwvD,eAAe+B,kBAAkBZ,EAAQrlC,IAGvDikC,EAAOn2D,UAAU03D,gBAAkB,SAASH,EAAQrlC,GAClD,OAAOtrB,KAAKwvD,eAAesB,gBAAgBH,EAAQrlC,IAGrDikC,EAAOn2D,UAAUy3D,SAAW,WAC1B,OAAQ7wD,KAAK+vD,eAAiB/vD,KAAKgwD,aAAaa,YAGlDtB,EAAOn2D,UAAU83D,aAAe,SAASS,GAGvC,QAAI3xD,KAAK6wD,aACLc,GAAiB3xD,KAAK4xD,wBAMrB5xD,KAAKyvD,KACRzvD,KAAKqwD,oBAEA,IAGTd,EAAOn2D,UAAUy4D,SAAW,SAASj9B,GACnC50B,KAAKsxD,MAAK,GAIV,IAAIQ,EAAY9xD,KAAKgwD,aAAapN,MAC9BkP,IACsC,OAApCA,EAAUA,EAAUj1D,OAAS,KAC/Bi1D,EAAYA,EAAU3wD,QAAQ,QAAS,KAEzCnB,KAAKgwD,aAAa5yD,KAAK00D,IAGrB9xD,KAAK0vD,mBACP1vD,KAAKqwD,mBAGP,IAAI0B,EAAa/xD,KAAK8vD,QAAQvxD,KAAK,MAKnC,MAHY,OAARq2B,IACFm9B,EAAaA,EAAW5wD,QAAQ,QAASyzB,IAEpCm9B,GAGTxC,EAAOn2D,UAAU44D,eAAiB,WAChChyD,KAAKgwD,aAAae,mBAGpBxB,EAAOn2D,UAAUm3D,WAAa,SAASI,EAAQC,GAQ7C,OAPAD,EAASA,GAAU,EACnBC,EAAYA,GAAa,EAGzB5wD,KAAKiwD,UAAUM,WAAWI,EAAQC,GAG9B5wD,KAAK8vD,QAAQjzD,OAAS,GACxBmD,KAAKgwD,aAAaO,WAAWI,EAAQC,IAC9B,IAGT5wD,KAAKgwD,aAAaO,cACX,IAGThB,EAAOn2D,UAAU64D,cAAgB,SAASnW,GACxC,IAAK,IAAI76C,EAAI,EAAGA,EAAI66C,EAAMoW,SAAUjxD,IAClCjB,KAAKqwD,mBAEPrwD,KAAKgwD,aAAaO,YAAY,GAC9BvwD,KAAKgwD,aAAa5yD,KAAK0+C,EAAMqW,mBAC7BnyD,KAAKgwD,aAAa5yD,KAAK0+C,EAAMxmB,MAC7Bt1B,KAAKkwD,oBAAqB,EAC1BlwD,KAAKmwD,oBAAqB,EAC1BnwD,KAAKowD,wBAAyB,GAGhCb,EAAOn2D,UAAUg5D,UAAY,SAASC,GACpCryD,KAAKsyD,2BACLtyD,KAAKgwD,aAAa5yD,KAAKi1D,GACvBryD,KAAKkwD,oBAAqB,EAC1BlwD,KAAKmwD,oBAAqB,EAC1BnwD,KAAKowD,uBAAyBpwD,KAAKgwD,aAAaiB,eAGlD1B,EAAOn2D,UAAUk5D,yBAA2B,WACtCtyD,KAAKkwD,qBAAuBlwD,KAAK4xD,uBAC9B5xD,KAAKmwD,oBACRnwD,KAAKgyD,iBAEPhyD,KAAKgwD,aAAa5yD,KAAK,OAI3BmyD,EAAOn2D,UAAUm5D,cAAgB,SAAS9rD,GACxC,IAAI+rD,EAAgBxyD,KAAK8vD,QAAQjzD,OACjC,MAAO4J,EAAQ+rD,EACbxyD,KAAK8vD,QAAQrpD,GAAO2qD,iBACpB3qD,IAEFzG,KAAKgwD,aAAaqB,uBAGpB9B,EAAOn2D,UAAUk4D,KAAO,SAASmB,GAC/BA,OAAiCv4D,IAAjBu4D,GAAsCA,EAEtDzyD,KAAKgwD,aAAasB,OAElB,MAAOmB,GAAgBzyD,KAAK8vD,QAAQjzD,OAAS,GAC3CmD,KAAKgwD,aAAaa,WAClB7wD,KAAK8vD,QAAQlN,MACb5iD,KAAKgwD,aAAehwD,KAAK8vD,QAAQ9vD,KAAK8vD,QAAQjzD,OAAS,GACvDmD,KAAKgwD,aAAasB,OAGpBtxD,KAAK+vD,cAAgB/vD,KAAK8vD,QAAQjzD,OAAS,EACzCmD,KAAK8vD,QAAQ9vD,KAAK8vD,QAAQjzD,OAAS,GAAK,MAG5C0yD,EAAOn2D,UAAUw4D,mBAAqB,WACpC,OAAO5xD,KAAKgwD,aAAaa,YAG3BtB,EAAOn2D,UAAUs5D,qBAAuB,WACtC,OAAO1yD,KAAK6wD,YACT7wD,KAAKgwD,aAAaa,YAAc7wD,KAAK+vD,cAAcc,YAGxDtB,EAAOn2D,UAAUu5D,wBAA0B,SAASC,EAAaC,GAC/D,IAAIpsD,EAAQzG,KAAK8vD,QAAQjzD,OAAS,EAClC,MAAO4J,GAAS,EAAG,CACjB,IAAIqsD,EAAqB9yD,KAAK8vD,QAAQrpD,GACtC,GAAIqsD,EAAmBjC,WACrB,MACK,GAAwD,IAApDiC,EAAmB9Q,KAAK,GAAGlmD,QAAQ82D,IAC5CE,EAAmB9Q,MAAM,KAAO6Q,EAAW,CAC3C7yD,KAAK8vD,QAAQ9yD,OAAOyJ,EAAQ,EAAG,EAAG,IAAIynD,EAAWluD,OACjDA,KAAK+vD,cAAgB/vD,KAAK8vD,QAAQ9vD,KAAK8vD,QAAQjzD,OAAS,GACxD,MAEF4J,MAIJlP,EAAOD,QAAQi4D,OAASA,GAKlB,SAAUh4D,GAgChB,SAAS2qC,EAAMnnC,EAAMu6B,EAAM48B,EAAUC,GACnCnyD,KAAKjF,KAAOA,EACZiF,KAAKs1B,KAAOA,EAMZt1B,KAAKq8D,gBAAkB,KAIvBr8D,KAAKkyD,SAAWA,GAAY,EAC5BlyD,KAAKmyD,kBAAoBA,GAAqB,GAC9CnyD,KAAKsI,OAAS,KACdtI,KAAKiG,KAAO,KACZjG,KAAKs8D,SAAW,KAChBt8D,KAAKu8D,OAAS,KACdv8D,KAAKk/C,OAAS,KACdl/C,KAAK62D,WAAa,KAIpBt/D,EAAOD,QAAQ4qC,MAAQA,GAIhB,CACA,CAED,SAAU3qC,GAgChB,SAASw7D,EAAQ/iD,EAASgjD,GACxBhzD,KAAKizD,YAAcC,EAAWljD,EAASgjD,GAGvChzD,KAAKmzD,SAAWnzD,KAAKozD,aAAa,YAElCpzD,KAAK40B,IAAM50B,KAAKqzD,gBAAgB,MAAO,QACvCrzD,KAAK2vD,iBAAmB3vD,KAAKozD,aAAa,oBAC1CpzD,KAAKgvD,YAAchvD,KAAKszD,YAAY,cAAe,GACnDtzD,KAAKkvD,YAAclvD,KAAKqzD,gBAAgB,cAAe,KACvDrzD,KAAKovD,aAAepvD,KAAKszD,YAAY,gBAErCtzD,KAAKuzD,kBAAoBvzD,KAAKozD,aAAa,qBAAqB,GAChEpzD,KAAKwzD,sBAAwBxzD,KAAKszD,YAAY,wBAAyB,OAClEtzD,KAAKuzD,oBACRvzD,KAAKwzD,sBAAwB,GAG/BxzD,KAAKmvD,iBAAmBnvD,KAAKozD,aAAa,mBAAyC,OAArBpzD,KAAKkvD,aAC/DlvD,KAAKmvD,mBACPnvD,KAAKkvD,YAAc,KASM,IAArBlvD,KAAKgvD,cACPhvD,KAAKgvD,YAAc,IAKvBhvD,KAAK4vD,iBAAmB5vD,KAAKszD,YAAY,mBAAoBtzD,KAAKszD,YAAY,aAE9EtzD,KAAK6vD,mBAAqB7vD,KAAKozD,aAAa,sBAK5CpzD,KAAKyzD,WAAazzD,KAAK0zD,oBAAoB,aAAc,CAAC,OAAQ,OAAQ,SAAU,MAAO,aAAc,MAAO,UAAW,CAAC,SAuF9H,SAASR,EAAWS,EAAYC,GAC9B,IAEI77D,EAFA87D,EAAY,GAIhB,IAAK97D,KAHL47D,EAAaG,EAAeH,GAGfA,EACP57D,IAAS67D,IACXC,EAAU97D,GAAQ47D,EAAW57D,IAKjC,GAAI67D,GAAkBD,EAAWC,GAC/B,IAAK77D,KAAQ47D,EAAWC,GACtBC,EAAU97D,GAAQ47D,EAAWC,GAAgB77D,GAGjD,OAAO87D,EAGT,SAASC,EAAe9jD,GACtB,IACIjX,EADAg7D,EAAgB,GAGpB,IAAKh7D,KAAOiX,EAAS,CACnB,IAAIgkD,EAASj7D,EAAIoI,QAAQ,KAAM,KAC/B4yD,EAAcC,GAAUhkD,EAAQjX,GAElC,OAAOg7D,EAhHThB,EAAQ35D,UAAU66D,WAAa,SAASl8D,EAAMm8D,GAC5C,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GAChCqN,EAAS8uD,GAAiB,GAQ9B,MAP4B,kBAAjBC,EACY,OAAjBA,GAAwD,oBAAxBA,EAAaztD,SAC/CtB,EAAS+uD,EAAaztD,UAES,kBAAjBytD,IAChB/uD,EAAS+uD,EAAa1mD,MAAM,uBAEvBrI,GAGT2tD,EAAQ35D,UAAUg6D,aAAe,SAASr7D,EAAMm8D,GAC9C,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GAChCqN,OAA0BlL,IAAjBi6D,IAA+BD,IAAkBC,EAC9D,OAAO/uD,GAGT2tD,EAAQ35D,UAAUi6D,gBAAkB,SAASt7D,EAAMm8D,GACjD,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GAChCqN,EAAS8uD,GAAiB,GAI9B,MAH4B,kBAAjBC,IACT/uD,EAAS+uD,EAAahzD,QAAQ,MAAO,MAAMA,QAAQ,MAAO,MAAMA,QAAQ,MAAO,OAE1EiE,GAGT2tD,EAAQ35D,UAAUk6D,YAAc,SAASv7D,EAAMm8D,GAC7C,IAAIC,EAAen0D,KAAKizD,YAAYl7D,GACpCm8D,EAAgBE,SAASF,EAAe,IACpCr4B,MAAMq4B,KACRA,EAAgB,GAElB,IAAI9uD,EAASgvD,SAASD,EAAc,IAIpC,OAHIt4B,MAAMz2B,KACRA,EAAS8uD,GAEJ9uD,GAGT2tD,EAAQ35D,UAAUi7D,eAAiB,SAASt8D,EAAMu8D,EAAgBJ,GAChE,IAAI9uD,EAASpF,KAAK0zD,oBAAoB37D,EAAMu8D,EAAgBJ,GAC5D,GAAsB,IAAlB9uD,EAAOvI,OACT,MAAM,IAAI0D,MACR,qCAAuCxI,EAAO,+CAC9Cu8D,EAAiB,qBAAuBt0D,KAAKizD,YAAYl7D,GAAQ,KAGrE,OAAOqN,EAAO,IAIhB2tD,EAAQ35D,UAAUs6D,oBAAsB,SAAS37D,EAAMu8D,EAAgBJ,GACrE,IAAKI,GAA4C,IAA1BA,EAAez3D,OACpC,MAAM,IAAI0D,MAAM,mCAIlB,GADA2zD,EAAgBA,GAAiB,CAACI,EAAe,KAC5Ct0D,KAAKu0D,oBAAoBL,EAAeI,GAC3C,MAAM,IAAI/zD,MAAM,0BAGlB,IAAI6E,EAASpF,KAAKi0D,WAAWl8D,EAAMm8D,GACnC,IAAKl0D,KAAKu0D,oBAAoBnvD,EAAQkvD,GACpC,MAAM,IAAI/zD,MACR,qCAAuCxI,EAAO,6CAC9Cu8D,EAAiB,qBAAuBt0D,KAAKizD,YAAYl7D,GAAQ,KAGrE,OAAOqN,GAGT2tD,EAAQ35D,UAAUm7D,oBAAsB,SAASnvD,EAAQkvD,GACvD,OAAOlvD,EAAOvI,QAAUy3D,EAAez3D,SACpCuI,EAAOgB,MAAK,SAAS47C,GAAQ,OAAyC,IAAlCsS,EAAex4D,QAAQkmD,OAwChEzqD,EAAOD,QAAQy7D,QAAUA,EACzBx7D,EAAOD,QAAQk9D,cAAgBV,EAC/Bv8D,EAAOD,QAAQm9D,UAAYvB,GAIpB,CAED,SAAU37D,GAgChB,IAAIm9D,EAAoBr+B,OAAOj9B,UAAUC,eAAe,UAExD,SAASs7D,EAAaC,GACpB50D,KAAK60D,QAAUD,GAAgB,GAC/B50D,KAAK80D,eAAiB90D,KAAK60D,QAAQh4D,OACnCmD,KAAK+0D,WAAa,EAGpBJ,EAAav7D,UAAU47D,QAAU,WAC/Bh1D,KAAK+0D,WAAa,GAGpBJ,EAAav7D,UAAU67D,KAAO,WACxBj1D,KAAK+0D,WAAa,IACpB/0D,KAAK+0D,YAAc,IAIvBJ,EAAav7D,UAAU87D,QAAU,WAC/B,OAAOl1D,KAAK+0D,WAAa/0D,KAAK80D,gBAGhCH,EAAav7D,UAAU6M,KAAO,WAC5B,IAAI4R,EAAM,KAKV,OAJI7X,KAAKk1D,YACPr9C,EAAM7X,KAAK60D,QAAQ5yD,OAAOjC,KAAK+0D,YAC/B/0D,KAAK+0D,YAAc,GAEdl9C,GAGT88C,EAAav7D,UAAU+7D,KAAO,SAAS1uD,GACrC,IAAIoR,EAAM,KAMV,OALApR,EAAQA,GAAS,EACjBA,GAASzG,KAAK+0D,WACVtuD,GAAS,GAAKA,EAAQzG,KAAK80D,iBAC7Bj9C,EAAM7X,KAAK60D,QAAQ5yD,OAAOwE,IAErBoR,GAUT88C,EAAav7D,UAAUg8D,QAAU,SAAS3E,EAAShqD,GACjDgqD,EAAQ55B,UAAYpwB,EACpB,IAAI4uD,EAAgB5E,EAAQzvD,KAAKhB,KAAK60D,SAQtC,OANIQ,GAAmBX,GAAqBjE,EAAQ6E,QAC9CD,EAAc5uD,QAAUA,IAC1B4uD,EAAgB,MAIbA,GAGTV,EAAav7D,UAAUoH,KAAO,SAASiwD,EAAShqD,GAI9C,OAHAA,EAAQA,GAAS,EACjBA,GAASzG,KAAK+0D,WAEVtuD,GAAS,GAAKA,EAAQzG,KAAK80D,kBACpB90D,KAAKo1D,QAAQ3E,EAAShqD,IAMnCkuD,EAAav7D,UAAUm8D,SAAW,SAAS9E,EAAShqD,GAElD,IAAIoR,EAAM7X,KAAKm1D,KAAK1uD,GAEpB,OADAgqD,EAAQ55B,UAAY,EACL,OAARhf,GAAgB44C,EAAQjwD,KAAKqX,IAGtC88C,EAAav7D,UAAUsJ,MAAQ,SAAS+tD,GACtC,IAAI4E,EAAgBr1D,KAAKo1D,QAAQ3E,EAASzwD,KAAK+0D,YAM/C,OALIM,EACFr1D,KAAK+0D,YAAcM,EAAc,GAAGx4D,OAEpCw4D,EAAgB,KAEXA,GAGTV,EAAav7D,UAAUo8D,KAAO,SAASC,EAAkBC,EAAeC,GACtE,IACIjzD,EADAmV,EAAM,GAWV,OATI49C,IACF/yD,EAAQ1C,KAAK0C,MAAM+yD,GACf/yD,IACFmV,GAAOnV,EAAM,MAGbgzD,IAAkBhzD,GAAU+yD,IAC9B59C,GAAO7X,KAAK41D,UAAUF,EAAeC,IAEhC99C,GAGT88C,EAAav7D,UAAUw8D,UAAY,SAASnF,EAASkF,GACnD,IAAI99C,EAAM,GACNg+C,EAAc71D,KAAK+0D,WACvBtE,EAAQ55B,UAAY72B,KAAK+0D,WACzB,IAAIM,EAAgB5E,EAAQzvD,KAAKhB,KAAK60D,SAYtC,OAXIQ,GACFQ,EAAcR,EAAc5uD,MACxBkvD,IACFE,GAAeR,EAAc,GAAGx4D,SAGlCg5D,EAAc71D,KAAK80D,eAGrBj9C,EAAM7X,KAAK60D,QAAQzzD,UAAUpB,KAAK+0D,WAAYc,GAC9C71D,KAAK+0D,WAAac,EACXh+C,GAGT88C,EAAav7D,UAAU08D,eAAiB,SAASrF,GAC/C,OAAOzwD,KAAK41D,UAAUnF,GAAS,IAGjCkE,EAAav7D,UAAU28D,WAAa,SAAStF,EAASuF,GACpD,IAAI5wD,EAAS,KACTqxB,EAAQ,IAWZ,OAVIu/B,GAActB,IAChBj+B,EAAQ,KAGa,kBAAZg6B,GAAoC,KAAZA,EAEjCrrD,EAAS,IAAIixB,OAAOo6B,EAASh6B,GACpBg6B,IACTrrD,EAAS,IAAIixB,OAAOo6B,EAAQ31C,OAAQ2b,IAE/BrxB,GAGTuvD,EAAav7D,UAAU68D,mBAAqB,SAASC,GACnD,OAAO7/B,OAAO6/B,EAAe/0D,QAAQ,yBAA0B,UAIjEwzD,EAAav7D,UAAU+8D,eAAiB,SAAS1F,GAC/C,IAAIv/C,EAAQlR,KAAK+0D,WACbl9C,EAAM7X,KAAK81D,eAAerF,GAE9B,OADAzwD,KAAK+0D,WAAa7jD,EACX2G,GAGT88C,EAAav7D,UAAUg9D,SAAW,SAASC,GACzC,IAAInlD,EAAQlR,KAAK+0D,WAAa,EAC9B,OAAO7jD,GAASmlD,EAAQx5D,QAAUmD,KAAK60D,QAAQzzD,UAAU8P,EAAQmlD,EAAQx5D,OAAQqU,GAC9E9O,gBAAkBi0D,GAGvB9+D,EAAOD,QAAQq9D,aAAeA,GAKxB,SAAUp9D,EAAQy/D,EAA0B5/D,GAgClD,IAAIu9D,EAAev9D,EAAoB,GAAGu9D,aACtCzyB,EAAQ9qC,EAAoB,GAAG8qC,MAC/Bs6B,EAAcplE,EAAoB,IAAIolE,YACtCC,EAAoBrlE,EAAoB,IAAIqlE,kBAE5CC,EAAQ,CACVC,MAAO,WACPC,IAAK,SACLC,IAAK,UAGHC,EAAY,SAASlI,EAAc5kD,GACrChQ,KAAKg4D,OAAS,IAAIrD,EAAaC,GAC/B50D,KAAKkQ,SAAWF,GAAW,GAC3BhQ,KAAK+8D,SAAW,KAEhB/8D,KAAKg9D,UAAY,GACjBh9D,KAAKg9D,UAAU/D,WAAa,IAAIwD,EAAkBz8D,KAAKg4D,SAGzD8E,EAAU1jE,UAAU6jE,SAAW,WAM7B,IAAIC,EALJl9D,KAAKg4D,OAAOhD,UACZh1D,KAAK+8D,SAAW,IAAIP,EAEpBx8D,KAAKm9D,SAGL,IAAIb,EAAW,IAAIp6B,EAAMw6B,EAAMC,MAAO,IAClCS,EAAa,KACbC,EAAa,GACbC,EAAW,IAAId,EAEnB,MAAOF,EAASvhE,OAAS2hE,EAAMG,IAAK,CAClCK,EAAUl9D,KAAKu9D,gBAAgBjB,EAAUc,GACzC,MAAOp9D,KAAKw9D,YAAYN,GACtBI,EAASrzD,IAAIizD,GACbA,EAAUl9D,KAAKu9D,gBAAgBjB,EAAUc,GAGtCE,EAASt3D,YACZk3D,EAAQb,gBAAkBiB,EAC1BA,EAAW,IAAId,GAGjBU,EAAQ50D,OAAS80D,EAEbp9D,KAAKy9D,YAAYP,IACnBG,EAAWjgE,KAAKggE,GAChBA,EAAaF,GACJE,GAAcp9D,KAAK09D,YAAYR,EAASE,KACjDF,EAAQX,OAASa,EACjBA,EAAWle,OAASge,EACpBE,EAAaC,EAAWza,MACxBsa,EAAQ50D,OAAS80D,GAGnBF,EAAQZ,SAAWA,EACnBA,EAASr2D,KAAOi3D,EAEhBl9D,KAAK+8D,SAAS9yD,IAAIizD,GAClBZ,EAAWY,EAGb,OAAOl9D,KAAK+8D,UAIdD,EAAU1jE,UAAUukE,gBAAkB,WACpC,OAAO39D,KAAK+8D,SAAS/2D,WAGvB82D,EAAU1jE,UAAU+jE,OAAS,aAE7BL,EAAU1jE,UAAUmkE,gBAAkB,SAASK,EAAgBR,GAC7Dp9D,KAAK69D,kBACL,IAAIC,EAAmB99D,KAAKg4D,OAAOxC,KAAK,OACxC,OAAIsI,EACK99D,KAAK+9D,cAAcrB,EAAME,IAAKkB,GAE9B99D,KAAK+9D,cAAcrB,EAAMG,IAAK,KAIzCC,EAAU1jE,UAAUokE,YAAc,SAASQ,GACzC,OAAO,GAGTlB,EAAU1jE,UAAUqkE,YAAc,SAASO,GACzC,OAAO,GAGTlB,EAAU1jE,UAAUskE,YAAc,SAASM,EAAeZ,GACxD,OAAO,GAGTN,EAAU1jE,UAAU2kE,cAAgB,SAAShjE,EAAMu6B,GACjD,IAAIwmB,EAAQ,IAAI5Z,EAAMnnC,EAAMu6B,EAC1Bt1B,KAAKg9D,UAAU/D,WAAWV,cAC1Bv4D,KAAKg9D,UAAU/D,WAAWgF,yBAC5B,OAAOniB,GAGTghB,EAAU1jE,UAAUykE,gBAAkB,WACpC,OAAO79D,KAAKg9D,UAAU/D,WAAWzD,QAKnCj+D,EAAOD,QAAQwlE,UAAYA,EAC3BvlE,EAAOD,QAAQolE,MAAQA,GAKjB,SAAUnlE,GAgChB,SAASilE,EAAY0B,GAEnBl+D,KAAK+8D,SAAW,GAChB/8D,KAAKm+D,gBAAkBn+D,KAAK+8D,SAASlgE,OACrCmD,KAAK+0D,WAAa,EAClB/0D,KAAKo+D,eAAiBF,EAGxB1B,EAAYpjE,UAAU47D,QAAU,WAC9Bh1D,KAAK+0D,WAAa,GAGpByH,EAAYpjE,UAAU4M,QAAU,WAC9B,OAAgC,IAAzBhG,KAAKm+D,iBAGd3B,EAAYpjE,UAAU87D,QAAU,WAC9B,OAAOl1D,KAAK+0D,WAAa/0D,KAAKm+D,iBAGhC3B,EAAYpjE,UAAU6M,KAAO,WAC3B,IAAI4R,EAAM,KAKV,OAJI7X,KAAKk1D,YACPr9C,EAAM7X,KAAK+8D,SAAS/8D,KAAK+0D,YACzB/0D,KAAK+0D,YAAc,GAEdl9C,GAGT2kD,EAAYpjE,UAAU+7D,KAAO,SAAS1uD,GACpC,IAAIoR,EAAM,KAMV,OALApR,EAAQA,GAAS,EACjBA,GAASzG,KAAK+0D,WACVtuD,GAAS,GAAKA,EAAQzG,KAAKm+D,kBAC7BtmD,EAAM7X,KAAK+8D,SAASt2D,IAEfoR,GAGT2kD,EAAYpjE,UAAU6Q,IAAM,SAAS6xC,GAC/B97C,KAAKo+D,iBACPtiB,EAAMxzC,OAAStI,KAAKo+D,gBAEtBp+D,KAAK+8D,SAAS3/D,KAAK0+C,GACnB97C,KAAKm+D,iBAAmB,GAG1B5mE,EAAOD,QAAQklE,YAAcA,GAKvB,SAAUjlE,EAAQy/D,EAA0B5/D,GAgClD,IAAIinE,EAAUjnE,EAAoB,IAAIinE,QAEtC,SAAS5B,EAAkB6B,EAAeh2D,GACxC+1D,EAAQ1mE,KAAKqI,KAAMs+D,EAAeh2D,GAC9BA,EACFtI,KAAKu+D,aAAev+D,KAAKg4D,OAAOjC,WAAWztD,EAAOi2D,cAElDv+D,KAAKw+D,0BAA0B,GAAI,IAGrCx+D,KAAKu4D,cAAgB,EACrBv4D,KAAKi+D,wBAA0B,GAEjCxB,EAAkBrjE,UAAY,IAAIilE,EAElC5B,EAAkBrjE,UAAUolE,0BAA4B,SAASC,EAAkBC,GACjFD,GAAoB,OACpBC,GAAiB,SAEjB1+D,KAAK2+D,eAAiB3+D,KAAKg4D,OAAOjC,WAChC,IAAM0I,EAAmBC,EAAgB,MAAM,GACjD1+D,KAAK4+D,gBAAkB5+D,KAAKg4D,OAAOjC,WACjC,WAAa2I,EAAgB,MAGjCjC,EAAkBrjE,UAAUo8D,KAAO,WACjCx1D,KAAKu4D,cAAgB,EACrBv4D,KAAKi+D,wBAA0B,GAE/B,IAAIH,EAAmB99D,KAAKg4D,OAAOxC,KAAKx1D,KAAK2+D,gBAC7C,GAAyB,MAArBb,EACF99D,KAAKi+D,wBAA0B,SAC1B,GAAIH,EAAkB,CAC3B,IAAIe,EAAU7+D,KAAK8+D,QAAQ9+D,KAAK4+D,gBAAiBd,GACjD99D,KAAKu4D,cAAgBsG,EAAQhiE,OAAS,EACtCmD,KAAKi+D,wBAA0BY,EAAQ7+D,KAAKu4D,eAG9C,OAAOuF,GAGTrB,EAAkBrjE,UAAU2lE,SAAW,SAASN,EAAkBC,GAChE,IAAIt5D,EAASpF,KAAKg/D,UAGlB,OAFA55D,EAAOo5D,0BAA0BC,EAAkBC,GACnDt5D,EAAO65D,UACA75D,GAGTq3D,EAAkBrjE,UAAU4lE,QAAU,WACpC,OAAO,IAAIvC,EAAkBz8D,KAAKg4D,OAAQh4D,OAG5Cy8D,EAAkBrjE,UAAU0lE,QAAU,SAASI,EAAQtK,GACrDsK,EAAOroC,UAAY,EACnB,IAAIsoC,EAAc,EACd/5D,EAAS,GACTg6D,EAAaF,EAAOl+D,KAAK4zD,GAC7B,MAAOwK,EACLh6D,EAAOhI,KAAKw3D,EAAaxzD,UAAU+9D,EAAaC,EAAW34D,QAC3D04D,EAAcC,EAAW34D,MAAQ24D,EAAW,GAAGviE,OAC/CuiE,EAAaF,EAAOl+D,KAAK4zD,GAS3B,OANIuK,EAAcvK,EAAa/3D,OAC7BuI,EAAOhI,KAAKw3D,EAAaxzD,UAAU+9D,EAAavK,EAAa/3D,SAE7DuI,EAAOhI,KAAK,IAGPgI,GAKT7N,EAAOD,QAAQmlE,kBAAoBA,GAK7B,SAAUllE,GAgChB,SAAS8mE,EAAQC,EAAeh2D,GAC9BtI,KAAKg4D,OAASsG,EACdt+D,KAAKq/D,kBAAoB,KACzBr/D,KAAK2+D,eAAiB,KACtB3+D,KAAKs/D,eAAiB,KACtBt/D,KAAKu/D,cAAe,EAEhBj3D,IACFtI,KAAKq/D,kBAAoBr/D,KAAKg4D,OAAOjC,WAAWztD,EAAO+2D,mBAAmB,GAC1Er/D,KAAK2+D,eAAiB3+D,KAAKg4D,OAAOjC,WAAWztD,EAAOq2D,gBAAgB,GACpE3+D,KAAKs/D,eAAiBt/D,KAAKg4D,OAAOjC,WAAWztD,EAAOg3D,gBACpDt/D,KAAKu/D,aAAej3D,EAAOi3D,cAI/BlB,EAAQjlE,UAAUo8D,KAAO,WACvB,IAAIpwD,EAASpF,KAAKg4D,OAAOxC,KAAKx1D,KAAKq/D,mBAInC,OAHKr/D,KAAKq/D,oBAAqBj6D,IAC7BA,GAAUpF,KAAKg4D,OAAOxC,KAAKx1D,KAAK2+D,eAAgB3+D,KAAKs/D,eAAgBt/D,KAAKu/D,eAErEn6D,GAGTi5D,EAAQjlE,UAAUomE,WAAa,WAC7B,OAAOx/D,KAAKg4D,OAAOt1D,MAAM1C,KAAK2+D,iBAGhCN,EAAQjlE,UAAUu8D,YAAc,SAASlF,GACvC,IAAIrrD,EAASpF,KAAKg/D,UAIlB,OAHA55D,EAAOm6D,cAAe,EACtBn6D,EAAOk6D,eAAiBt/D,KAAKg4D,OAAOjC,WAAWtF,GAC/CrrD,EAAO65D,UACA75D,GAGTi5D,EAAQjlE,UAAUqmE,MAAQ,SAAShP,GACjC,IAAIrrD,EAASpF,KAAKg/D,UAIlB,OAHA55D,EAAOm6D,cAAe,EACtBn6D,EAAOk6D,eAAiBt/D,KAAKg4D,OAAOjC,WAAWtF,GAC/CrrD,EAAO65D,UACA75D,GAGTi5D,EAAQjlE,UAAUsmE,cAAgB,SAASjP,GACzC,IAAIrrD,EAASpF,KAAKg/D,UAGlB,OAFA55D,EAAOi6D,kBAAoBr/D,KAAKg4D,OAAOjC,WAAWtF,GAAS,GAC3DrrD,EAAO65D,UACA75D,GAGTi5D,EAAQjlE,UAAU2lE,SAAW,SAAStO,GACpC,IAAIrrD,EAASpF,KAAKg/D,UAGlB,OAFA55D,EAAOu5D,eAAiB3+D,KAAKg4D,OAAOjC,WAAWtF,GAAS,GACxDrrD,EAAO65D,UACA75D,GAGTi5D,EAAQjlE,UAAU4lE,QAAU,WAC1B,OAAO,IAAIX,EAAQr+D,KAAKg4D,OAAQh4D,OAGlCq+D,EAAQjlE,UAAU6lE,QAAU,aAE5B1nE,EAAOD,QAAQ+mE,QAAUA,GAKnB,SAAU9mE,GAgChB,SAAS++D,EAAWC,EAAqBC,GACvCD,EAAqD,kBAAxBA,EAAmCA,EAAsBA,EAAoBz7C,OAC1G07C,EAAiD,kBAAtBA,EAAiCA,EAAoBA,EAAkB17C,OAClG9a,KAAKy2D,2BAA6B,IAAIpgC,OAAOkgC,EAAsB,0BAA0Bz7C,OAAS07C,EAAmB,KACzHx2D,KAAK02D,oBAAsB,kBAE3B12D,KAAK22D,gCAAkC,IAAItgC,OAAOkgC,EAAsB,2BAA2Bz7C,OAAS07C,EAAmB,KAGjIF,EAAWl9D,UAAUw9D,eAAiB,SAASthC,GAC7C,IAAKA,EAAK5yB,MAAM1C,KAAKy2D,4BACnB,OAAO,KAGT,IAAII,EAAa,GACjB72D,KAAK02D,oBAAoB7/B,UAAY,EACrC,IAAIigC,EAAkB92D,KAAK02D,oBAAoB11D,KAAKs0B,GAEpD,MAAOwhC,EACLD,EAAWC,EAAgB,IAAMA,EAAgB,GACjDA,EAAkB92D,KAAK02D,oBAAoB11D,KAAKs0B,GAGlD,OAAOuhC,GAGTP,EAAWl9D,UAAU29D,YAAc,SAASrc,GAC1C,OAAOA,EAAMob,eAAe91D,KAAK22D,kCAInCp/D,EAAOD,QAAQg/D,WAAaA,GAKtB,SAAU/+D,EAAQy/D,EAA0B5/D,GAgClD,IAAIinE,EAAUjnE,EAAoB,IAAIinE,QAGlCsB,EAAiB,CACnBC,QAAQ,EACRC,KAAK,EACLC,YAAY,EACZC,KAAK,EACLC,QAAQ,GAKV,SAASC,EAAmB3B,EAAeh2D,GACzC+1D,EAAQ1mE,KAAKqI,KAAMs+D,EAAeh2D,GAClCtI,KAAKkgE,mBAAqB,KAC1BlgE,KAAKmgE,UAAYjoE,OAAOkoE,OAAO,GAAIT,GACnC3/D,KAAKqgE,UAAYnoE,OAAOkoE,OAAO,GAAIT,GAE/Br3D,IACFtI,KAAKkgE,mBAAqBlgE,KAAKg4D,OAAOjC,WAAWztD,EAAO43D,oBACxDlgE,KAAKqgE,UAAYnoE,OAAOkoE,OAAOpgE,KAAKqgE,UAAW/3D,EAAO+3D,WACtDrgE,KAAKmgE,UAAYjoE,OAAOkoE,OAAOpgE,KAAKmgE,UAAW73D,EAAO63D,YAExD,IAAI1P,EAAU,IAAI4N,EAAQC,GAC1Bt+D,KAAKsgE,WAAa,CAChBC,mBAAoB9P,EAAQiP,cAAc,SAAS/J,YAAY,QAC/D6K,qBAAsB/P,EAAQiP,cAAc,OAAO/J,YAAY,OAC/DmK,WAAYrP,EAAQiP,cAAc,MAAM/J,YAAY,MACpDoK,IAAKtP,EAAQiP,cAAc,mBAAmB/J,YAAY,OAC1DkK,IAAKpP,EAAQiP,cAAc,UAAU/J,YAAY,UAEjDiK,OAAQnP,EAAQiP,cAAc,MAAM/J,YAAY,MAChD8K,aAAchQ,EAAQiP,cAAc,MAAM/J,YAAY,MACtD+K,eAAgBjQ,EAAQiP,cAAc,MAAM/J,YAAY,MACxDqK,OAAQvP,EAAQiP,cAAc,kBAAkB/J,YAAY,YAC5DgL,eAAgBlQ,EAAQiP,cAAc,OAAO/J,YAAY,OACzDiL,eAAgBnQ,EAAQiP,cAAc,aAAa/J,YAAY,gBAGnEsK,EAAmB7mE,UAAY,IAAIilE,EAEnC4B,EAAmB7mE,UAAU4lE,QAAU,WACrC,OAAO,IAAIiB,EAAmBjgE,KAAKg4D,OAAQh4D,OAG7CigE,EAAmB7mE,UAAU6lE,QAAU,WACrCj/D,KAAK6gE,2BAGPZ,EAAmB7mE,UAAU0nE,QAAU,SAAS9kE,GAC9C,IAAIoJ,EAASpF,KAAKg/D,UAGlB,OAFA55D,EAAO+6D,UAAUnkE,IAAY,EAC7BoJ,EAAO65D,UACA75D,GAGT66D,EAAmB7mE,UAAU2nE,aAAe,SAAS/wD,GACnD,IAAI5K,EAASpF,KAAKg/D,UAClB,IAAK,IAAIhjE,KAAY2jE,EACnBv6D,EAAO+6D,UAAUnkE,IAAsD,IAA1CgU,EAAQyjD,WAAW33D,QAAQE,GAG1D,OADAoJ,EAAO65D,UACA75D,GAGT66D,EAAmB7mE,UAAU4nE,QAAU,SAAShlE,GAC9C,IAAIoJ,EAASpF,KAAKg/D,UAGlB,OAFA55D,EAAOi7D,UAAUrkE,IAAY,EAC7BoJ,EAAO65D,UACA75D,GAGT66D,EAAmB7mE,UAAUo8D,KAAO,WAClC,IAAIpwD,EAAS,GAEXA,EADEpF,KAAK2+D,eACE3+D,KAAKg4D,OAAOxC,KAAKx1D,KAAKq/D,mBAEtBr/D,KAAKg4D,OAAOxC,KAAKx1D,KAAKq/D,kBAAmBr/D,KAAKkgE,oBAEzD,IAAIj6D,EAAOjG,KAAKihE,iBAChB,MAAOh7D,EACDjG,KAAK2+D,eACP14D,GAAQjG,KAAKg4D,OAAOxC,KAAKx1D,KAAK2+D,gBAE9B14D,GAAQjG,KAAKg4D,OAAOpC,UAAU51D,KAAKkgE,oBAErC96D,GAAUa,EACVA,EAAOjG,KAAKihE,iBAMd,OAHIjhE,KAAKu/D,eACPn6D,GAAUpF,KAAKg4D,OAAOlC,eAAe91D,KAAKs/D,iBAErCl6D,GAGT66D,EAAmB7mE,UAAUynE,wBAA0B,WACrD,IAAIztB,EAAQ,GAEPpzC,KAAKmgE,UAAUJ,KAClB3sB,EAAMh2C,KAAK4C,KAAKsgE,WAAWP,IAAIV,kBAAkBvkD,QAE9C9a,KAAKmgE,UAAUL,YAClB1sB,EAAMh2C,KAAK4C,KAAKsgE,WAAWR,WAAWT,kBAAkBvkD,QAErD9a,KAAKmgE,UAAUN,KAClBzsB,EAAMh2C,KAAK4C,KAAKsgE,WAAWT,IAAIR,kBAAkBvkD,QAE9C9a,KAAKmgE,UAAUP,SAClBxsB,EAAMh2C,KAAK4C,KAAKsgE,WAAWV,OAAOP,kBAAkBvkD,QAGpDs4B,EAAMh2C,KAAK4C,KAAKsgE,WAAWG,aAAapB,kBAAkBvkD,QAC1Ds4B,EAAMh2C,KAAK4C,KAAKsgE,WAAWI,eAAerB,kBAAkBvkD,SAEzD9a,KAAKmgE,UAAUH,QAClB5sB,EAAMh2C,KAAK4C,KAAKsgE,WAAWN,OAAOX,kBAAkBvkD,QAGlD9a,KAAKs/D,gBACPlsB,EAAMh2C,KAAK4C,KAAKs/D,eAAexkD,QAEjC9a,KAAKkgE,mBAAqBlgE,KAAKg4D,OAAOjC,WAAW,MAAQ3iB,EAAM70C,KAAK,KAAO,MAG7E0hE,EAAmB7mE,UAAU6nE,eAAiB,WAC5C,IAAInD,EAAmB,GACnBjmE,EAAImI,KAAKg4D,OAAO7C,OACpB,GAAU,MAANt9D,EAAW,CACb,IAAIqpE,EAAQlhE,KAAKg4D,OAAO7C,KAAK,GAIxBn1D,KAAKmgE,UAAUJ,KAAQ//D,KAAKqgE,UAAUN,KAAiB,MAAVmB,IAChDpD,EAAmBA,GACjB99D,KAAKsgE,WAAWP,IAAIvK,QAEnBx1D,KAAKmgE,UAAUN,KAAQ7/D,KAAKqgE,UAAUR,KAAiB,MAAVqB,IAChDpD,EAAmBA,GACjB99D,KAAKsgE,WAAWT,IAAIrK,YAET,MAAN39D,IACJmI,KAAKmgE,UAAUL,YAAe9/D,KAAKqgE,UAAUP,aAChDhC,EAAmBA,GACjB99D,KAAKsgE,WAAWC,mBAAmB/K,OACrCsI,EAAmBA,GACjB99D,KAAKsgE,WAAWE,qBAAqBhL,OACvCsI,EAAmBA,GACjB99D,KAAKsgE,WAAWR,WAAWtK,QAE1Bx1D,KAAKmgE,UAAUP,SAEb5/D,KAAKqgE,UAAUT,QAAW5/D,KAAKqgE,UAAUP,aAC5ChC,EAAmBA,GACjB99D,KAAKsgE,WAAWG,aAAajL,QAE5Bx1D,KAAKqgE,UAAUT,SAClB9B,EAAmBA,GACjB99D,KAAKsgE,WAAWI,eAAelL,OACjCsI,EAAmBA,GACjB99D,KAAKsgE,WAAWV,OAAOpK,SAGxBx1D,KAAKmgE,UAAUH,QAEdhgE,KAAKmgE,UAAUP,QAAU5/D,KAAKmgE,UAAUL,aAC1ChC,EAAmBA,GACjB99D,KAAKsgE,WAAWK,eAAenL,OACjCsI,EAAmBA,GACjB99D,KAAKsgE,WAAWM,eAAepL,OACjCsI,EAAmBA,GACjB99D,KAAKsgE,WAAWN,OAAOxK,SAI/B,OAAOsI,GAITvmE,EAAOD,QAAQ2oE,mBAAqBA,GAI5B,CACA,CACA,CAEF,SAAU1oE,EAAQy/D,EAA0B5/D,GAgClD,IAAI6/D,EAAa7/D,EAAoB,IAAI6/D,WACvClE,EAAU37D,EAAoB,IAAI27D,QAEpC,SAASoO,EAAWxG,EAAa3qD,EAAS+9C,EAAamJ,GACrD,IAAIE,EAAa,IAAIH,EAAW0D,EAAa3qD,EAAS+9C,EAAamJ,GACnE,OAAOE,EAAWC,WAGpB9/D,EAAOD,QAAU6pE,EACjB5pE,EAAOD,QAAQggE,eAAiB,WAC9B,OAAO,IAAIvE,IAMP,SAAUx7D,EAAQy/D,EAA0B5/D,GAgClD,IAAI27D,EAAU37D,EAAoB,IAAI27D,QAClCxD,EAASn4D,EAAoB,GAAGm4D,OAChCuN,EAAY1lE,EAAoB,IAAI0lE,UACpCJ,EAAQtlE,EAAoB,IAAIslE,MAEhClF,EAAY,cACZC,EAAgB,eAEhB2J,EAAU,SAASpxD,EAASqxD,GAE9BrhE,KAAKovD,aAAe,EACpBpvD,KAAKshE,eAAiB,EACtBthE,KAAKwzD,sBAAwBxjD,EAAQwjD,sBACrCxzD,KAAKuzD,kBAAoBvjD,EAAQujD,kBAEjCvzD,KAAKoN,QAAU,IAAImiD,EAAOv/C,EAASqxD,IAIrCD,EAAQhoE,UAAUmoE,uBAAyB,SAAS9Q,GAClD,OAAOzwD,KAAKoN,QAAQ4iD,aAAaQ,UAAUC,IAG7C2Q,EAAQhoE,UAAUooE,uBAAyB,SAAS/oE,EAAOgpE,GACzDzhE,KAAKoN,QAAQ8iD,mBAAqBz3D,EAClCuH,KAAKoN,QAAQ+iD,mBAAqBsR,GAGpCL,EAAQhoE,UAAU44D,eAAiB,WACjChyD,KAAKoN,QAAQmjD,WAAWvwD,KAAKovD,aAAcpvD,KAAKshE,gBAChDthE,KAAKoN,QAAQ4kD,kBAIfoP,EAAQhoE,UAAU64D,cAAgB,SAASnW,GACzC97C,KAAKoN,QAAQ6kD,cAAcnW,IAG7BslB,EAAQhoE,UAAUsoE,yBAA2B,SAASC,GACpD,IAAIzP,EAAW,EACXyP,EAAU5mE,OAAS2hE,EAAMkF,MAAQD,EAAUrF,SAASvhE,OAAS2hE,EAAMkF,OACrE1P,EAAWyP,EAAUzP,SAAW,EAAI,GAGlClyD,KAAKuzD,oBACPrB,EAAWyP,EAAUzP,SAAWlyD,KAAKwzD,sBAAwB,EAAImO,EAAUzP,SAAWlyD,KAAKwzD,sBAAwB,GAErH,IAAK,IAAIv6D,EAAI,EAAGA,EAAIi5D,EAAUj5D,IAC5B+G,KAAK6hE,cAAc5oE,EAAI,GAGzB,OAAoB,IAAbi5D,GAGTkP,EAAQhoE,UAAU0oE,oBAAsB,SAASH,GAC/C,SAAIA,EAAUxP,oBAAqBwP,EAAUzP,YACtClyD,KAAK0hE,yBAAyBC,KACjC3hE,KAAKoN,QAAQ8iD,oBAAqB,IAE7B,IAKXkR,EAAQhoE,UAAUg3D,uBAAyB,WACzC,OAAOpwD,KAAKoN,QAAQgjD,wBAGtBgR,EAAQhoE,UAAUyoE,cAAgB,SAASE,GACzC/hE,KAAKoN,QAAQ8jD,aAAa6Q,IAG5BX,EAAQhoE,UAAU4oE,YAAc,SAASlmB,GACnCA,EAAMxmB,OACRt1B,KAAKoN,QAAQmjD,WAAWvwD,KAAKovD,aAAcpvD,KAAKshE,gBAChDthE,KAAKoN,QAAQglD,UAAUtW,EAAMxmB,QAIjC8rC,EAAQhoE,UAAUu3D,OAAS,WACzB3wD,KAAKovD,gBAGPgS,EAAQhoE,UAAU6oE,gBAAkB,SAASC,GAE3C,OADAA,EAAQliE,KAAKovD,cAAgB8S,GAAS,GAClCA,EAAQ,EACH,GAGFliE,KAAKoN,QAAQmkD,kBAAkB2Q,IAGxC,IAAIC,EAAqB,SAASC,GAChC,IAAIh9D,EAAS,KACTu8D,EAAYS,EAAYn8D,KAG5B,MAAO07D,EAAU5mE,OAAS2hE,EAAMG,KAAOuF,EAAYljB,SAAWyiB,EAAW,CACvE,GAAIA,EAAU5mE,OAAS2hE,EAAM2F,WAAgC,SAAnBV,EAAUrsC,KAAiB,CAC/DqsC,EAAU17D,MAAQ07D,EAAU17D,KAAKlL,OAAS2hE,EAAM4F,QAClDX,EAAU17D,KAAKA,MAAQ07D,EAAU17D,KAAKA,KAAKlL,OAAS2hE,EAAM6F,QAC1Dn9D,EAASu8D,EAAU17D,KAAKA,KAAKqvB,MAE/B,MAEFqsC,EAAYA,EAAU17D,KAGxB,OAAOb,GAGLo9D,EAA6B,SAASC,EAAWd,GACnD,IAAIe,EAAgB,KAChBt9D,EAAS,KAEb,OAAKu8D,EAAUziB,QAIG,WAAdujB,EACFC,EAAgB,kBACO,UAAdD,IACTC,EAAgB,YAGlBA,EAAgBP,EAAmBR,IAAce,EAI7CA,EAAcC,OAAO,aAAe,EACtCv9D,EAAS,MACAs9D,EAAcC,OAAO,gHAAkH,EAChJv9D,EAAS,aACAs9D,EAAcC,OAAO,yCAA2C,EACzEv9D,EAAS,OACAs9D,EAAcC,OAAO,eAAiB,IAE/Cv9D,EAAS,QAGJA,GAxBE,MA2BX,SAASw9D,EAASC,EAAM77D,GACtB,OAA8B,IAAvBA,EAAIlL,QAAQ+mE,GAGrB,SAASC,EAASx6D,EAAQy6D,EAAc3T,GACtCpvD,KAAKsI,OAASA,GAAU,KACxBtI,KAAKs/C,IAAMyjB,EAAeA,EAAaC,SAAW,GAClDhjE,KAAKovD,aAAeA,GAAgB,EACpCpvD,KAAK+iE,aAAeA,GAAgB,KAGtC,SAASE,EAASC,GAChBljE,KAAKmjE,SAAWD,EAChBljE,KAAKojE,eAAiB,KAoDxB,SAASnM,EAAWE,EAAannD,EAAS+9C,EAAamJ,GAErDl3D,KAAK83D,aAAeX,GAAe,GACnCnnD,EAAUA,GAAW,GACrBhQ,KAAKqjE,aAAetV,EACpB/tD,KAAKsjE,cAAgBpM,EACrBl3D,KAAKujE,WAAa,KAIlB,IAAIC,EAAa,IAAIzQ,EAAQ/iD,EAAS,QAEtChQ,KAAKkQ,SAAWszD,EAEhBxjE,KAAKyjE,0BAAwF,UAA5DzjE,KAAKkQ,SAAS2rD,gBAAgB35D,OAAO,EAAG,QAAQrF,QACjFmD,KAAK0jE,2CAAgF,2BAAlC1jE,KAAKkQ,SAAS2rD,gBACjE77D,KAAK2jE,kCAAuE,kBAAlC3jE,KAAKkQ,SAAS2rD,gBACxD77D,KAAK4jE,qCAA0E,qBAAlC5jE,KAAKkQ,SAAS2rD,gBAC3D77D,KAAK6jE,6BAA8F,aAA/D7jE,KAAKkQ,SAAS2rD,gBAAgB35D,OAAO,EAAG,WAAWrF,QACvFmD,KAAK8jE,qCAA0E,qBAAlC9jE,KAAKkQ,SAAS2rD,gBApE7DoH,EAAS7pE,UAAU2qE,iBAAmB,WACpC,OAAO/jE,KAAKojE,eAAiBpjE,KAAKojE,eAAeL,aAAe,MAGlEE,EAAS7pE,UAAU4qE,WAAa,SAASjB,GACvC,IAAIkB,EAAY,IAAInB,EAAS9iE,KAAKojE,eAAgBL,EAAc/iE,KAAKmjE,SAAS/T,cAC9EpvD,KAAKojE,eAAiBa,GAGxBhB,EAAS7pE,UAAU8qE,eAAiB,SAAShf,GAC3C,IAAI6d,EAAe,KAQnB,OANI7d,IACF6d,EAAe7d,EAAM6d,aACrB/iE,KAAKmjE,SAAS/T,aAAelK,EAAMkK,aACnCpvD,KAAKojE,eAAiBle,EAAM58C,QAGvBy6D,GAGTE,EAAS7pE,UAAU+qE,WAAa,SAASC,EAAUC,GACjD,IAAInf,EAAQllD,KAAKojE,eAEjB,MAAOle,EAAO,CACZ,IAAqC,IAAjCkf,EAAStoE,QAAQopD,EAAM5F,KACzB,MACK,GAAI+kB,IAA+C,IAAlCA,EAAUvoE,QAAQopD,EAAM5F,KAAa,CAC3D4F,EAAQ,KACR,MAEFA,EAAQA,EAAM58C,OAGhB,OAAO48C,GAGT+d,EAAS7pE,UAAUkrE,QAAU,SAAShlB,EAAK+kB,GACzC,IAAInf,EAAQllD,KAAKmkE,WAAW,CAAC7kB,GAAM+kB,GACnC,OAAOrkE,KAAKkkE,eAAehf,IAG7B+d,EAAS7pE,UAAUmrE,cAAgB,SAASH,GAC1C,IAAIlf,EAAQllD,KAAKmkE,WAAWC,GACxBlf,IACFllD,KAAKmjE,SAAS/T,aAAelK,EAAMkK,eA0BvC6H,EAAW79D,UAAUi+D,SAAW,WAG9B,GAAIr3D,KAAKkQ,SAASijD,SAChB,OAAOnzD,KAAK83D,aAGd,IAAIX,EAAcn3D,KAAK83D,aACnBljC,EAAM50B,KAAKkQ,SAAS0kB,IACE,SAAtB50B,KAAKkQ,SAAS0kB,MAChBA,EAAM,KACFuiC,GAAeK,EAAUh3D,KAAK22D,KAChCviC,EAAMuiC,EAAYz0D,MAAM80D,GAAW,KAKvCL,EAAcA,EAAYh2D,QAAQs2D,EAAe,MAEjD,IAAI5I,EAAmBsI,EAAYz0D,MAAM,WAAW,GAEhD8hE,EAAa,CACflvC,KAAM,GACNv6B,KAAM,IAGJ0pE,EAAiB,IAAIC,EAErBxB,EAAU,IAAI9B,EAAQphE,KAAKkQ,SAAU2+C,GACrC8V,EAAS,IAAI7H,EAAU3F,EAAan3D,KAAKkQ,UAAU+sD,WAEvDj9D,KAAKujE,WAAa,IAAIN,EAASC,GAE/B,IAAIH,EAAe,KACfpB,EAAYgD,EAAO1+D,OACvB,MAAO07D,EAAU5mE,OAAS2hE,EAAMG,IAE1B8E,EAAU5mE,OAAS2hE,EAAMkI,UAAYjD,EAAU5mE,OAAS2hE,EAAMmI,SAChE9B,EAAe/iE,KAAK8kE,iBAAiB5B,EAASvB,EAAW8C,EAAgBD,GACzEC,EAAiB1B,GACPpB,EAAU5mE,OAAS2hE,EAAM2F,WAAaV,EAAU5mE,OAAS2hE,EAAM4F,QAAUX,EAAU5mE,OAAS2hE,EAAM6F,OAC3GZ,EAAU5mE,OAAS2hE,EAAMkF,OAAS6C,EAAeM,aAClDhC,EAAe/iE,KAAKglE,mBAAmB9B,EAASvB,EAAW8C,EAAgBE,GAClEhD,EAAU5mE,OAAS2hE,EAAMuI,UAClClC,EAAe/iE,KAAKklE,kBAAkBhC,EAASvB,EAAW8C,GACjD9C,EAAU5mE,OAAS2hE,EAAMkF,KAClCmB,EAAe/iE,KAAKmlE,aAAajC,EAASvB,EAAW8C,GAGrDvB,EAAQjR,cAAc0P,GAGxB6C,EAAazB,EAEbpB,EAAYgD,EAAO1+D,OAErB,IAAI8rD,EAAamR,EAAQ91D,QAAQykD,SAASj9B,GAE1C,OAAOm9B,GAGTkF,EAAW79D,UAAU8rE,kBAAoB,SAAShC,EAASvB,EAAW8C,GACpE,IAAI1B,EAAe,CACjBztC,KAAMqsC,EAAUrsC,KAChBv6B,KAAM4mE,EAAU5mE,MAgClB,OA9BAmoE,EAAQ5B,eAAiB,EACzBmD,EAAeM,cAAe,EAE9B7B,EAAQ1B,uBAAuBG,EAAUzP,UAA4C,KAAhCyP,EAAUxP,mBAA0B,GACrFsS,EAAeW,eACjBlC,EAAQjR,cAAc0P,IAEgB,MAAlC8C,EAAeY,iBACjBnC,EAAQ1B,uBAA6C,MAAtBG,EAAUrsC,KAAK,IAAY,GACtDt1B,KAAK0jE,4CAA8Ce,EAAea,mBACpEpC,EAAQrB,eAAc,IAG1BqB,EAAQlB,YAAYL,KAIlB8C,EAAec,gBACfd,EAAeW,gBAAkBX,EAAee,yBAClDtC,EAAQvS,SAGR8T,EAAec,gBAAiB,GAG7Bd,EAAegB,mBAChBhB,EAAeW,gBAAkBX,EAAee,wBAClDtC,EAAQlR,iBAGH+Q,GAGT9L,EAAW79D,UAAU4rE,mBAAqB,SAAS9B,EAASvB,EAAW8C,EAAgBE,GACrF,IAAIe,EAAUjB,EAAea,kBACzBvC,EAAe,CACjBztC,KAAMqsC,EAAUrsC,KAChBv6B,KAAM4mE,EAAU5mE,MAIlB,GADAmoE,EAAQ1B,uBAAuBG,EAAUzP,UAA4C,KAAhCyP,EAAUxP,mBAA0B,GACrFsS,EAAeW,eACjBlC,EAAQjR,cAAc0P,QACjB,GAAsC,MAAlC8C,EAAeY,gBAA0B1D,EAAU5mE,OAAS2hE,EAAMkF,KAEvEsB,EAAQxB,yBAAyBC,IACnCA,EAAUzP,SAAW,EACrBgR,EAAQjR,cAAc0P,IAEtBuB,EAAQlB,YAAYL,OAEjB,CAUL,GATIA,EAAU5mE,OAAS2hE,EAAM2F,WAC3Ba,EAAQ1B,wBAAuB,GAC/BiD,EAAekB,YAAc,IACpBhE,EAAU5mE,OAAS2hE,EAAM4F,QAEzBX,EAAU5mE,OAAS2hE,EAAM6F,OAASZ,EAAUrF,SAASvhE,OAAS2hE,EAAM4F,SAD7EY,EAAQ1B,wBAAuB,GAK7BG,EAAU5mE,OAAS2hE,EAAM2F,WAA+C,MAAlCoC,EAAeY,kBACnDrlE,KAAK6jE,8BAAgC7jE,KAAK8jE,wCAC5CZ,EAAQpB,oBAAoBH,GAC5B+D,EAAUA,GAAkC,IAAvB/D,EAAUzP,UAI7BlyD,KAAKyjE,2BAA2B,CAClC,IAAImC,EAAkBnB,EAAekB,WAAa,EAClD,GAAI3lE,KAAK0jE,4CAA4E,IAA9Be,EAAekB,WAAkB,CACtF,IAEIE,EAFAC,GAAoB,EACpBC,EAAa,EAEjB,EAAG,CAED,GADAF,EAAalB,EAAOxP,KAAK4Q,GACrBF,EAAW9qE,OAAS2hE,EAAM2F,UAAW,CACvCyD,GAAoB,EACpB,MAEFC,GAAc,QACPA,EAAa,GAAKF,EAAW9qE,OAAS2hE,EAAMG,KAAOgJ,EAAW9qE,OAAS2hE,EAAMuI,WAEtFW,GAAmBE,EAGjBF,IACF1C,EAAQrB,eAAc,GACtB6D,GAAU,GAIhBxC,EAAQlB,YAAYL,GACpB+D,EAAUA,GAAWxC,EAAQ9S,yBAC7BqU,EAAea,kBAAoBI,EAErC,OAAO3C,GAGT9L,EAAW79D,UAAU+rE,aAAe,SAASjC,EAASvB,EAAW8C,GAC/D,IAAI1B,EAAe,CACjBztC,KAAMqsC,EAAUrsC,KAChBv6B,KAAM,cAUR,OARI0pE,EAAeuB,uBACjBhmE,KAAKimE,6BAA6B/C,EAASvB,EAAW8C,GAC7CA,EAAeW,gBAAkBX,EAAee,uBACzDtC,EAAQjR,cAAc0P,IAEtBuB,EAAQpB,oBAAoBH,GAC5BuB,EAAQlB,YAAYL,IAEfoB,GAGT9L,EAAW79D,UAAU6sE,6BAA+B,SAAS/C,EAASvB,EAAW8C,GAC/E,IAAIyB,EAAQlmE,KACZ,GAAuB,KAAnB2hE,EAAUrsC,KAAa,CAEzB,IACE6wC,EADE7wC,EAAOqsC,EAAUrsC,KAEnB8wC,EAAsB,EACtBC,EAAM,GACNC,EAAO,GACqC,eAA1C7B,EAAeuB,wBAAwE,oBAAtBhmE,KAAKqjE,aACxE8C,EAAcnmE,KAAKqjE,aACgC,QAA1CoB,EAAeuB,wBAAkE,oBAAvBhmE,KAAKsjE,cACxE6C,EAAcnmE,KAAKsjE,cACgC,SAA1CmB,EAAeuB,yBACxBG,EAAc,SAASxL,EAAa3qD,GAClC,IAAIonD,EAAa,IAAIH,EAAW0D,EAAa3qD,EAASk2D,EAAM7C,aAAc6C,EAAM5C,eAChF,OAAOlM,EAAWC,aAIe,SAAjCr3D,KAAKkQ,SAAS6rD,eAChBqK,EAAsB,EACoB,aAAjCpmE,KAAKkQ,SAAS6rD,iBACvBqK,GAAuBlD,EAAQ9T,cAGjC,IAAImX,EAAcrD,EAAQjB,gBAAgBmE,GAO1C,GAHA9wC,EAAOA,EAAKn0B,QAAQ,YAAa,IAGa,SAA1CsjE,EAAeuB,wBACL,MAAZ1wC,EAAK,IAAcA,EAAK5yB,MAAM,uBAAwB,CACtD,IAAI8jE,EAAU,8DAA8DxlE,KAAKs0B,GAGjF,IAAKkxC,EAEH,YADAtD,EAAQjR,cAAc0P,GAIxB0E,EAAME,EAAcC,EAAQ,GAAK,KACjClxC,EAAOkxC,EAAQ,GACXA,EAAQ,KACVF,EAAOC,EAAcC,EAAQ,IAK/BlxC,EAAOA,EAAKn0B,QAAQ,YAAa,KAE7BqlE,EAAQ,KAAoC,IAA9BA,EAAQ,GAAG1qE,QAAQ,SAGnC0qE,EAAUA,EAAQ,GAAG9jE,MAAM,WACvB8jE,IACF7E,EAAUxP,kBAAoBqU,EAAQ,KAK5C,GAAIlxC,EACF,GAAI6wC,EAAa,CAGf,IAAIM,EAAgB,WAClBzmE,KAAK40B,IAAM,MAEb6xC,EAAcrtE,UAAY4G,KAAKkQ,SAAS+iD,YACxC,IAAIyT,EAAgB,IAAID,EACxBnxC,EAAO6wC,EAAYI,EAAcjxC,EAAMoxC,OAClC,CAEL,IAAIC,EAAQhF,EAAUxP,kBAClBwU,IACFrxC,EAAOA,EAAKn0B,QAAQ,IAAIk1B,OAAO,MAAQswC,EAAQ,KAAM,KAAM,OAG7DrxC,EAAOixC,EAAcjxC,EAAKn0B,QAAQ,MAAO,KAAOolE,GAIhDF,IAIA/wC,EAHGA,EAGI+wC,EAAM/wC,EAAO,KAAOgxC,EAFpBD,EAAMC,GAMjBpD,EAAQrB,eAAc,GAClBvsC,IACFqsC,EAAUrsC,KAAOA,EACjBqsC,EAAUxP,kBAAoB,GAC9BwP,EAAUzP,SAAW,EACrBgR,EAAQjR,cAAc0P,GACtBuB,EAAQrB,eAAc,MAK5B5K,EAAW79D,UAAU0rE,iBAAmB,SAAS5B,EAASvB,EAAW8C,EAAgBD,GACnF,IAAIzB,EAAe/iE,KAAK4mE,oBAAoBjF,GA2B5C,OAzBK8C,EAAeW,iBAAkBX,EAAee,wBAClDf,EAAeoC,kBAChBlF,EAAU5mE,OAAS2hE,EAAMkI,UAA6C,IAAjCjD,EAAUrsC,KAAKx5B,QAAQ,OAM5DonE,EAAQpB,oBAAoBH,GAC5B3hE,KAAK8mE,kBAAkB5D,EAASvB,EAAWoB,EAAc0B,EAAgBD,GACpEzB,EAAa0C,mBAChBvC,EAAQlR,iBAEVkR,EAAQlB,YAAYL,KARpBuB,EAAQjR,cAAc0P,GACtBoB,EAAagE,gBAAkB/mE,KAAKujE,WAAWe,QAAQvB,EAAaC,YAWlEhjE,KAAK2jE,mCAAqC3jE,KAAK4jE,sCAAwC5jE,KAAK8jE,wCAC9Ff,EAAazB,eAAiBK,EAAUrsC,KAAKz4B,OAAS,GAGnDkmE,EAAagC,cAAiBhC,EAAaqC,iBAC9ClC,EAAQ5B,eAAiByB,EAAazB,gBAGjCyB,GAGT,IAAI2B,EAAqB,SAASp8D,EAAQq5D,GAyBtC,IAAIqF,GAxBNhnE,KAAKsI,OAASA,GAAU,KACxBtI,KAAKs1B,KAAO,GACZt1B,KAAKjF,KAAO,cACZiF,KAAKgjE,SAAW,GAChBhjE,KAAKylE,mBAAoB,EACzBzlE,KAAKolE,gBAAiB,EACtBplE,KAAKwlE,wBAAyB,EAC9BxlE,KAAK6mE,kBAAmB,EACxB7mE,KAAKinE,cAAe,EACpBjnE,KAAKknE,YAAa,EAClBlnE,KAAKulE,gBAAiB,EACtBvlE,KAAKmnE,mBAAoB,EACzBnnE,KAAKgmE,uBAAyB,KAC9BhmE,KAAK+mE,gBAAkB,KACvB/mE,KAAK2lE,WAAa,EAClB3lE,KAAKslE,mBAAoB,EACzBtlE,KAAKshE,eAAiB,EACtBthE,KAAK+kE,cAAe,EACpB/kE,KAAKqlE,eAAiB,GACtBrlE,KAAKyiE,UAAY,GAEZd,IAKH3hE,KAAKqlE,eAAiB1D,EAAUrsC,KAAK,GACrCt1B,KAAKs1B,KAAOqsC,EAAUrsC,KAEM,MAAxBt1B,KAAKqlE,gBACP2B,EAAkBrF,EAAUrsC,KAAK5yB,MAAM,eACvC1C,KAAKyiE,UAAYuE,EAAkBA,EAAgB,GAAK,KAExDA,EAAkBrF,EAAUrsC,KAAK5yB,MAAM,8BACvC1C,KAAKyiE,UAAYuE,EAAkBA,EAAgB,GAAK,GAGjC,SAAnBrF,EAAUrsC,MAAsC,MAAnBt1B,KAAKyiE,WAAwC,OAAnBd,EAAU17D,OACnEjG,KAAKyiE,UAAYd,EAAU17D,KAAKqvB,OAGpCt1B,KAAKyiE,UAAYziE,KAAKyiE,UAAUrgE,cAE5Bu/D,EAAU5mE,OAAS2hE,EAAMmI,UAC3B7kE,KAAK+kE,cAAe,GAGtB/kE,KAAKinE,aAA4C,MAA7BjnE,KAAKyiE,UAAUxgE,OAAO,GAC1CjC,KAAKgjE,SAAYhjE,KAAKinE,aAA0CjnE,KAAKyiE,UAAhCziE,KAAKyiE,UAAUvgE,OAAO,GAC3DlC,KAAKknE,YAAclnE,KAAKinE,cACrBtF,EAAUziB,QAAoC,OAA1ByiB,EAAUziB,OAAO5pB,KAGxCt1B,KAAKknE,WAAalnE,KAAKknE,YACI,MAAxBlnE,KAAKqlE,iBAA2BrlE,KAAKs1B,KAAKz4B,OAAS,GAAM,SAAS2D,KAAKR,KAAKs1B,KAAKrzB,OAAO,MAhC3FjC,KAAK+kE,cAAe,GAoCxB9N,EAAW79D,UAAUwtE,oBAAsB,SAASjF,GAClD,IAAIoB,EAAe,IAAI2B,EAAmB1kE,KAAKujE,WAAWQ,mBAAoBpC,GAc9E,OAZAoB,EAAazB,eAAiBthE,KAAKkQ,SAAS4rD,4BAE5CiH,EAAamE,WAAanE,EAAamE,YACrCtE,EAASG,EAAaN,UAAWziE,KAAKkQ,SAASk3D,eAEjDrE,EAAa8D,iBAAmB9D,EAAagC,cAC1ChC,EAAakE,cAAgBlE,EAAamE,WAE7CnE,EAAaqC,gBAAkBrC,EAAagC,cAAgBnC,EAASG,EAAaN,UAAWziE,KAAKkQ,SAASqrD,aAC3GwH,EAAayC,wBAA0BzC,EAAa8D,kBAAoBjE,EAASG,EAAaN,UAAWziE,KAAKkQ,SAASurD,qBACvHsH,EAAa0C,kBAAoB7C,EAASG,EAAaC,SAAUhjE,KAAKkQ,SAASm3D,SAA2C,MAAhCtE,EAAasC,eAEhGtC,GAGT9L,EAAW79D,UAAU0tE,kBAAoB,SAAS5D,EAASvB,EAAWoB,EAAc0B,EAAgBD,GA8BlG,GA5BKzB,EAAa8D,mBACZ9D,EAAamE,WACfnE,EAAagE,gBAAkB/mE,KAAKujE,WAAWe,QAAQvB,EAAaC,WAIhEhjE,KAAKsnE,yBAAyBvE,KAC3BA,EAAa0C,mBAChBvC,EAAQrB,eAAc,IAI1B7hE,KAAKujE,WAAWS,WAAWjB,GAEI,WAA1BA,EAAaC,UAAmD,UAA1BD,EAAaC,UACpDD,EAAaqC,gBAAkBrC,EAAayC,yBAC9CzC,EAAaiD,uBAAyBxD,EAA2BO,EAAaN,UAAWd,MAK3FiB,EAASG,EAAaN,UAAWziE,KAAKkQ,SAAS0rD,gBACjDsH,EAAQrB,eAAc,GACjBqB,EAAQ91D,QAAQslD,wBACnBwQ,EAAQrB,eAAc,IAItBkB,EAAa8D,iBAAkB,CAIjC,GAAoC,MAAhC9D,EAAasC,gBAAqD,SAA3BtC,EAAaN,UAAsB,CAC5EziE,KAAKujE,WAAWgB,cAAc,CAAC,KAAM,SAAU,SAC/CxB,EAAawC,gBAAiB,EAE9B,IAAIgC,EAAuBrE,EAAQ3B,uBAAuB,SACrDgG,GACHrE,EAAQrB,eAAc,GAKI,QAA1BkB,EAAaC,UAAsBwB,EAAWzpE,OAAS2hE,EAAMuI,WAC/DR,EAAeyC,aAAmD,IAArCnE,EAAaztC,KAAKx5B,QAAQ,QAGjDinE,EAAa0C,mBAAqB1C,EAAaqC,gBACnDlC,EAAQrB,eAAc,GAExB7hE,KAAKwnE,4BAA4BtE,EAASH,SAEvC,GAAIA,EAAamE,WAAY,CAClC,IAAIO,GAAgB,EAGpBA,EAAgB1E,EAAagE,iBAAmBhE,EAAagE,gBAAgBI,kBAC7EM,EAAgBA,IAAmB1E,EAAa0C,qBAC5ChB,EAAegB,mBAAqBhB,EAAeW,mBACnDZ,EAAWzpE,OAAS2hE,EAAMuI,WAAalC,EAAagE,kBAAoBtC,IACtD,eAApBD,EAAWzpE,MAGTgoE,EAAayC,wBAA0BzC,EAAaqC,kBACtDqC,GAAgB,GAGdA,GACFvE,EAAQrB,eAAc,QAGxBkB,EAAawC,gBAAkBxC,EAAaiD,uBAER,MAAhCjD,EAAasC,iBACe,SAA1BtC,EAAaC,SACfD,EAAawC,eAAiBvlE,KAAKkQ,SAASwrD,kBACT,SAA1BqH,EAAaC,SACtBD,EAAawC,eAAiBvlE,KAAKkQ,SAASw3D,uBACT,SAA1B3E,EAAaC,WACtBD,EAAawC,eAAiBvlE,KAAKkQ,SAASy3D,yBAI1C5E,EAAa0C,mBAAqB1C,EAAaqC,gBAC9B,eAApBZ,EAAWzpE,OAAyBgoE,EAAayC,wBAClDtC,EAAQrB,eAAc,GAGxB7hE,KAAKwnE,4BAA4BtE,EAASH,IAI9C9L,EAAW79D,UAAUouE,4BAA8B,SAAStE,EAASH,IAC/DA,EAAaz6D,SAAU46D,EAAQ91D,QAAQwkD,uBACtCmR,EAAa0C,mBAAqB1C,EAAaqC,iBAAmBrC,EAAaz6D,OAAOm9D,oBACzF1C,EAAaz6D,OAAO6+D,mBAAoB,IAK5C,IAAIS,EAAY,CAAC,UAAW,UAAW,QAAS,aAAc,UAAW,MAAO,KAAM,WAAY,aAAc,SAAU,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,SAAU,KAAM,OAAQ,MAAO,KAAM,IAAK,MAAO,UAAW,QAAS,MACjPC,EAAoB,CAAC,IAAK,QAAS,MAAO,MAAO,MAAO,WAAY,SAExE5Q,EAAW79D,UAAUkuE,yBAA2B,SAASvE,GACvD,IAAI39D,EAAS,KAKb,IAAI29D,EAAa8D,kBAAqB9D,EAAakE,cAAiBlE,EAAaz6D,OAAjF,CAKA,GAA8B,SAA1By6D,EAAaC,SAEf59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,aAKtC,GAA8B,OAA1BvB,EAAaC,SAEtB59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,KAAM,YAEnD,GAA8B,OAA1BvB,EAAaC,UAA+C,OAA1BD,EAAaC,SAGxD59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,OAClDl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,YAG7C,GAAqC,MAAjCvB,EAAaz6D,OAAO06D,WAAkE,IAA9C4E,EAAU9rE,QAAQinE,EAAaC,UAAkB,CAKlG,IAAI8E,EAAW/E,EAAaz6D,OAAOA,OAC9Bw/D,IAA8D,IAAlDD,EAAkB/rE,QAAQgsE,EAAS9E,YAClD59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,UAEV,OAA1BvB,EAAaC,UAA+C,OAA1BD,EAAaC,UAGxD59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,OAAQ,QAC1Dl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,OAAQ,SAEvB,aAA1BvB,EAAaC,SAGtB59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,WAAY,CAAC,WAGrB,WAA1BvB,EAAaC,SAEtB59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,SAAU,CAAC,SAAU,WAAY,aAEzC,aAA1BvB,EAAaC,SAGtB59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,UAAW,CAAC,UAEpB,UAA1BvB,EAAaC,UAGtB59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,UAAW,CAAC,UACvDl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,WAAY,CAAC,WAKrB,UAA1BvB,EAAaC,UAAkD,UAA1BD,EAAaC,UAK3D59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,UAAW,CAAC,UACvDl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,WAAY,CAAC,UACxDl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,QAAS,CAAC,UACrDl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,QAAS,CAAC,WAKlB,OAA1BvB,EAAaC,UAItB59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,UAAW,CAAC,UACvDl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,WAAY,CAAC,UACxDl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,QAAS,QAAS,QAAS,WAE1C,OAA1BvB,EAAaC,UAA+C,OAA1BD,EAAaC,WAGxD59D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,QAAS,QAAS,QAAS,QAAS,OACtFl/D,EAASA,GAAUpF,KAAKujE,WAAWe,QAAQ,KAAM,CAAC,QAAS,QAAS,QAAS,QAAS,QAWxF,OAFAvB,EAAaz6D,OAAStI,KAAKujE,WAAWQ,mBAE/B3+D,IAGT7N,EAAOD,QAAQ2/D,WAAaA,GAKtB,SAAU1/D,EAAQy/D,EAA0B5/D,GAgClD,IAAI8iE,EAAc9iE,EAAoB,GAAG27D,QAEzC,SAASA,EAAQ/iD,GACfkqD,EAAYviE,KAAKqI,KAAMgQ,EAAS,QACD,IAA3BhQ,KAAKyzD,WAAW52D,QAAuC,SAAvBmD,KAAKyzD,WAAW,KAClDzzD,KAAKyzD,WAAa,CAAC,SAAU,MAAO,aAAc,QAGpDzzD,KAAK07D,kBAAoB17D,KAAKozD,aAAa,qBAC3CpzD,KAAK2nE,uBAAyB3nE,KAAKozD,aAAa,0BAA0B,GAC1EpzD,KAAK0nE,uBAAyB1nE,KAAKozD,aAAa,0BAA0B,GAE1EpzD,KAAK27D,kBAAoB37D,KAAKozD,aAAa,qBAAqB,GAChEpzD,KAAK67D,gBAAkB77D,KAAKq0D,eAAe,kBACzC,CAAC,OAAQ,QAAS,gBAAiB,yBAA0B,mBAAoB,WAAY,qBAC/Fr0D,KAAK87D,4BAA8B97D,KAAKszD,YAAY,8BAA+BtzD,KAAKgvD,aACxFhvD,KAAK47D,aAAe57D,KAAKi0D,WAAW,eAAgB,CAAC,OAAQ,OAAQ,UAMrEj0D,KAAKqnE,OAASrnE,KAAKi0D,WAAW,SAAU,CACtC,IAAK,OAAQ,OAAQ,QAAS,IAAK,MAAO,MAAO,KAAM,SAAU,SAAU,OAC3E,OAAQ,OAAQ,WAAY,MAAO,MAAO,KAAM,QAAS,IAAK,SAAU,MACxE,QAAS,MAAO,MAAO,SAAU,QAAS,MAAO,OAAQ,OAAQ,QAAS,WAC1E,SAAU,SAAU,WAAY,IAAK,OAAQ,IAAK,OAAwB,SAAU,QACpF,OAAQ,SAAU,MAAO,MAAO,MAAO,WAAY,WAAY,OAAQ,IAAK,MAC5E,QAAS,MAAO,OAEhB,UAAW,MAAO,SAAU,OAE9Bj0D,KAAKonE,cAAgBpnE,KAAKi0D,WAAW,gBAAiB,CAGpD,OAAQ,OAAQ,KAAM,MAAO,QAAS,KAAM,MAAO,QAAS,SAC5D,OAAQ,WAAY,OAAQ,QAAS,SAAU,QAAS,MAKxD,WAAY,OAKZ,WAAY,YAEdj0D,KAAKu7D,YAAcv7D,KAAKi0D,WAAW,cAAe,IAClDj0D,KAAKy7D,oBAAsBz7D,KAAKi0D,WAAW,sBAAuB,CAChE,MAAO,aAETj0D,KAAKi8D,8BAAgCj8D,KAAKqzD,gBAAgB,iCAC1DrzD,KAAK+7D,eAAiB/7D,KAAKq0D,eAAe,iBAAkB,CAAC,SAAU,OAAQ,aAGjFtB,EAAQ35D,UAAY,IAAI8gE,EAIxB3iE,EAAOD,QAAQy7D,QAAUA,GAKnB,SAAUx7D,EAAQy/D,EAA0B5/D,GAgClD,IAAI2wE,EAAgB3wE,EAAoB,GAAG0lE,UACvCkL,EAAY5wE,EAAoB,GAAGslE,MACnCpG,EAAal/D,EAAoB,IAAIk/D,WACrC2J,EAAqB7oE,EAAoB,IAAI6oE,mBAC7C5B,EAAUjnE,EAAoB,IAAIinE,QAElC3B,EAAQ,CACVkI,SAAU,cACVK,UAAW,eACX5C,UAAW,eACXC,OAAQ,YACRC,MAAO,WACPsC,QAAS,aACTjD,KAAM,UACNqG,QAAS,aACTtL,MAAOqL,EAAUrL,MACjBC,IAAKoL,EAAUpL,IACfC,IAAKmL,EAAUnL,KAGbtF,EAAkB,IAAIjB,EAAW,QAAS,OAE1CwG,EAAY,SAASlI,EAAc5kD,GACrC+3D,EAAcpwE,KAAKqI,KAAM40D,EAAc5kD,GACvChQ,KAAKkoE,kBAAoB,GAIzB,IAAIC,EAAqB,IAAIlI,EAAmBjgE,KAAKg4D,QAAQ+I,aAAa/gE,KAAKkQ,UAC3Ek4D,EAAiB,IAAI/J,EAAQr+D,KAAKg4D,QA0BtC,GAxBAh4D,KAAKsgE,WAAa,CAChB7oC,KAAM0wC,EAAmB1I,MAAM,cAC/B4I,aAAcF,EAAmBxS,YAAY,KAC7C2S,aAAcH,EAAmBxS,YAAY,KAC7C9T,UAAWsmB,EAAmB1I,MAAM,mBACpC8I,aAAcJ,EAAmB1I,MAAM,gBAEvCc,mBAAoB6H,EAAe1I,cAAc,SAAS/J,YAAY,QACtEmK,WAAYsI,EAAe1I,cAAc,MAAM/J,YAAY,MAC3D6S,gBAAiBJ,EAAe3I,MAAM,cACtCgJ,qBAAsBL,EAAe3I,MAAM,MAC3C/F,QAAS0O,EAAe1I,cAAc,QAAQ/J,YAAY,OAC1D+S,MAAON,EAAe1I,cAAc,eAAe/J,YAAY,OAE/DgT,oBAAqBP,EAAe1I,cAAc,QAAQ/J,YAAY,MACtEiT,WAAYR,EAAe1I,cAAc,OAAO/J,YAAY,QAG1D31D,KAAKkQ,SAASyrD,oBAChB37D,KAAKsgE,WAAW7oC,KAAOz3B,KAAKsgE,WAAW7oC,KAAKupC,QAAQ,eAGtDhhE,KAAK6oE,+BAAiC,KAElC7oE,KAAKkQ,SAAS+rD,8BAA+B,CAC/C,IAAI6M,EAAiB9oE,KAAKg4D,OAAO/B,mBAAmBj2D,KAAKkQ,SAAS+rD,+BAClEj8D,KAAKsgE,WAAWrE,8BACdmM,EAAerJ,SAAS+J,GACvBnT,YAAYmT,KAGnBhM,EAAU1jE,UAAY,IAAI2uE,EAE1BjL,EAAU1jE,UAAUokE,YAAc,SAASQ,GACzC,OAAO,GAGTlB,EAAU1jE,UAAUqkE,YAAc,SAASO,GACzC,OAAOA,EAAcjjE,OAAS2hE,EAAMkI,UAGtC9H,EAAU1jE,UAAUskE,YAAc,SAASM,EAAeZ,GACxD,OAAOY,EAAcjjE,OAAS2hE,EAAMuI,WACjC7H,KAC0B,MAAvBY,EAAc1oC,MAAuC,OAAvB0oC,EAAc1oC,OAAyC,MAAvB8nC,EAAW9nC,KAAK,IACxD,OAAvB0oC,EAAc1oC,MAAwC,MAAvB8nC,EAAW9nC,KAAK,IAAqC,MAAvB8nC,EAAW9nC,KAAK,KAGpFwnC,EAAU1jE,UAAU+jE,OAAS,WAC3Bn9D,KAAKkoE,kBAAoB,IAG3BpL,EAAU1jE,UAAUmkE,gBAAkB,SAASK,EAAgBR,GAC7D,IAAIthB,EAAQ,KACZ97C,KAAK69D,kBACL,IAAIhmE,EAAImI,KAAKg4D,OAAO7C,OAEpB,OAAU,OAANt9D,EACKmI,KAAK+9D,cAAcrB,EAAMG,IAAK,KAGvC/gB,EAAQA,GAAS97C,KAAK+oE,sBAAsBlxE,EAAGulE,GAC/CthB,EAAQA,GAAS97C,KAAKgpE,gBAAgBnxE,EAAG+lE,EAAgBR,GACzDthB,EAAQA,GAAS97C,KAAKipE,YAAYpxE,EAAGulE,GACrCthB,EAAQA,GAAS97C,KAAKkpE,kBAAkBrxE,EAAG+lE,EAAgBR,GAC3DthB,EAAQA,GAAS97C,KAAKmpE,mBAAmBtxE,GACzCikD,EAAQA,GAAS97C,KAAKopE,uBAAuBvxE,GAC7CikD,EAAQA,GAAS97C,KAAKqpE,iBAAiBxxE,GACvCikD,EAAQA,GAAS97C,KAAKspE,WAAWzxE,EAAGulE,GACpCthB,EAAQA,GAAS97C,KAAK+9D,cAAcrB,EAAMuL,QAASjoE,KAAKg4D,OAAO/xD,QAExD61C,IAGTghB,EAAU1jE,UAAUgwE,uBAAyB,SAASvxE,GACpD,IAAIikD,EAAQ,KACRgiB,EAAmB,KACnBjH,EAAa,KAEjB,GAAU,MAANh/D,EAAW,CACb,IAAIqpE,EAAQlhE,KAAKg4D,OAAO7C,KAAK,GAGf,MAAV+L,IACFpD,EAAmB99D,KAAKsgE,WAAW5G,QAAQlE,OAGvCsI,GACFjH,EAAaU,EAAgBX,eAAekH,GACxCjH,GAAoC,UAAtBA,EAAW8C,SAC3BmE,GAAoBvG,EAAgBR,YAAY/2D,KAAKg4D,UAGvD8F,EAAmB99D,KAAKsgE,WAAWoI,MAAMlT,QAIzCsI,IACFhiB,EAAQ97C,KAAK+9D,cAAcrB,EAAMmI,QAAS/G,GAC1ChiB,EAAM+a,WAAaA,GAIvB,OAAO/a,GAGTghB,EAAU1jE,UAAUiwE,iBAAmB,SAASxxE,GAC9C,IAAIikD,EAAQ,KACRgiB,EAAmB,KACnBjH,EAAa,KAEjB,GAAU,MAANh/D,EAAW,CACb,IAAIqpE,EAAQlhE,KAAKg4D,OAAO7C,KAAK,GACf,MAAV+L,GAA2B,MAAVA,IACnBpD,EAAmB99D,KAAKsgE,WAAWqI,oBAAoBnT,OACvDsI,EAAmBA,GAAoB99D,KAAKsgE,WAAWsI,WAAWpT,QAGhEsI,IACFhiB,EAAQ97C,KAAK+9D,cAAcrB,EAAMmI,QAAS/G,GAC1ChiB,EAAM+a,WAAaA,GAIvB,OAAO/a,GAGTghB,EAAU1jE,UAAUkwE,WAAa,SAASzxE,EAAGulE,GAC3C,IAAIU,EAAmB,KACnBhiB,EAAQ,KAYZ,OAXKshB,GACO,MAANvlE,IAEFimE,EAAmB99D,KAAKg4D,OAAO/xD,OACJ,MAAvBjG,KAAKg4D,OAAO7C,SACd2I,GAAoB99D,KAAKg4D,OAAO/xD,QAElC63D,GAAoB99D,KAAKsgE,WAAWiI,aAAa/S,OACjD1Z,EAAQ97C,KAAK+9D,cAAcrB,EAAMkI,SAAU9G,IAGxChiB,GAGTghB,EAAU1jE,UAAU2vE,sBAAwB,SAASlxE,EAAGulE,GACtD,IAAIU,EAAmB,KACnBhiB,EAAQ,KAaZ,OAZKshB,GACCp9D,KAAKkQ,SAASyrD,mBAA2B,MAAN9jE,GAAqC,MAAxBmI,KAAKg4D,OAAO7C,KAAK,KACvC,MAAxBn1D,KAAKg4D,OAAO7C,KAAK,IACnB2I,EAAmB99D,KAAKsgE,WAAWC,mBAAmB/K,OACtDsI,EAAmBA,GAAoB99D,KAAKsgE,WAAWR,WAAWtK,OAClE1Z,EAAQ97C,KAAK+9D,cAAcrB,EAAMmI,QAAS/G,KAE1CA,EAAmB99D,KAAKsgE,WAAWkI,gBAAgBhT,OACnD1Z,EAAQ97C,KAAK+9D,cAAcrB,EAAMkI,SAAU9G,KAI1ChiB,GAITghB,EAAU1jE,UAAU6vE,YAAc,SAASpxE,EAAGulE,GAC5C,IAAIU,EAAmB,KACnBhiB,EAAQ,KAeZ,OAdIshB,IACyB,MAAvBA,EAAW9nC,KAAK,KAAqB,MAANz9B,GAAoB,MAANA,GAAqC,MAAxBmI,KAAKg4D,OAAO7C,KAAK,KAC7E2I,EAAmB99D,KAAKg4D,OAAO/xD,OACrB,MAANpO,IACFimE,GAAoB99D,KAAKg4D,OAAO/xD,QAElC61C,EAAQ97C,KAAK+9D,cAAcrB,EAAMuI,UAAWnH,IACZ,MAAvBV,EAAW9nC,KAAK,IAAoB,MAANz9B,GAAqC,MAAxBmI,KAAKg4D,OAAO7C,KAAK,KACrEn1D,KAAKg4D,OAAO/xD,OACZjG,KAAKg4D,OAAO/xD,OACZ61C,EAAQ97C,KAAK+9D,cAAcrB,EAAMuI,UAAW,QAIzCnpB,GAGTghB,EAAU1jE,UAAU4vE,gBAAkB,SAASnxE,EAAG+lE,EAAgBR,GAChE,IAAIthB,EAAQ,KACRgiB,EAAmB,GACvB,GAAIV,GAAqC,MAAvBA,EAAW9nC,KAAK,GAEhC,GAAU,MAANz9B,EACFikD,EAAQ97C,KAAK+9D,cAAcrB,EAAM4F,OAAQtiE,KAAKg4D,OAAO/xD,aAChD,GAAU,MAANpO,GAAmB,MAANA,EAAW,CACjC,IAAIisC,EAAU9jC,KAAKg4D,OAAO/xD,OAExB69B,GADQ,MAANjsC,EACSmI,KAAKsgE,WAAWgI,aAAa9S,OAE7Bx1D,KAAKsgE,WAAW+H,aAAa7S,OAE1C1Z,EAAQ97C,KAAK+9D,cAAcrB,EAAM6F,MAAOz+B,QAExCg6B,EAAmB99D,KAAKsgE,WAAWze,UAAU2T,OAEzCsI,IAEAhiB,EADE8hB,EAAe7iE,OAAS2hE,EAAM4F,OACxBtiE,KAAK+9D,cAAcrB,EAAM6F,MAAOzE,GAEhC99D,KAAK+9D,cAAcrB,EAAM2F,UAAWvE,IAKpD,OAAOhiB,GAGTghB,EAAU1jE,UAAUmwE,wBAA0B,SAASvG,GAIrD,OAA0D,IAAnDhjE,KAAKkQ,SAASk3D,cAActrE,QAAQknE,MACiB,IAAzDhjE,KAAKkQ,SAASurD,oBAAoB3/D,QAAQknE,KACQ,IAAjDhjE,KAAKkQ,SAASqrD,YAAYz/D,QAAQknE,KAIxClG,EAAU1jE,UAAU8vE,kBAAoB,SAASrxE,EAAG+lE,EAAgBR,GAClE,IAAIU,EAAmB,GACvB,GAAIV,GAAqC,MAAvBA,EAAW9nC,KAAK,GAChCwoC,EAAmB99D,KAAKsgE,WAAWmI,qBAAqBjT,YACnD,GAAIoI,EAAe7iE,OAAS2hE,EAAMuI,WACL,MAAlCrH,EAAerB,OAAOjnC,KAAK,IAAyC,MAA3BsoC,EAAetoC,KAAK,GAAY,CAEzE,IAAI0tC,EAAWpF,EAAerB,OAAOjnC,KAAKpzB,OAAO,GAAGE,cACpD,GAAiB,WAAb4gE,GAAsC,UAAbA,EAAsB,CAGjD,IAAIlnB,EAAQ97C,KAAKopE,uBAAuBvxE,GACxC,GAAIikD,EAEF,OADAA,EAAM/gD,KAAO2hE,EAAMkF,KACZ9lB,EAETgiB,EAAmB99D,KAAKg4D,OAAOpC,UAAU,IAAIv/B,OAAO,KAAO2sC,EAAW,kBAAmB,YAChFhjE,KAAKupE,wBAAwBvG,KAEtClF,EAAmB99D,KAAKg4D,OAAOpC,UAAU,IAAIv/B,OAAO,KAAO2sC,EAAW,kBAAmB,QAI7F,OAAIlF,EACK99D,KAAK+9D,cAAcrB,EAAMkF,KAAM9D,GAGjC,MAGThB,EAAU1jE,UAAU+vE,mBAAqB,SAAStxE,GAChD,IAAIimE,EAAmB,GAUvB,GATI99D,KAAKkQ,SAAS+rD,+BACZpkE,IAAMmI,KAAKkQ,SAAS+rD,8BAA8B,KACpD6B,EAAmB99D,KAAKsgE,WAAWrE,8BAA8BzG,QAIhEsI,IACHA,EAAmB99D,KAAKsgE,WAAW7oC,KAAK+9B,QAEtCsI,EACF,OAAO99D,KAAK+9D,cAAcrB,EAAMkF,KAAM9D,IAI1CvmE,EAAOD,QAAQwlE,UAAYA,EAC3BvlE,EAAOD,QAAQolE,MAAQA,IAOTpC,EAA2B,GAG/B,SAASljE,EAAoBC,GAE5B,IAAIkjE,EAAeD,EAAyBjjE,GAC5C,QAAqB6C,IAAjBqgE,EACH,OAAOA,EAAajjE,QAGrB,IAAIC,EAAS+iE,EAAyBjjE,GAAY,CAGjDC,QAAS,IAOV,OAHA22D,EAAoB52D,GAAUE,EAAQA,EAAOD,QAASF,GAG/CG,EAAOD,QAQf,IAAIkjE,EAAsBpjE,EAAoB,IAC9CqjE,GAAuBD,GA77FxB,G,iBExET,SAASgP,GAAa3vC,GAClB,IAAI1zB,EAAQ0zB,EAAI,GACZxS,EAAOwS,EAAIA,EAAIh9B,OAAS,GAI5B,OAHIsJ,IAAUkhB,GAAmB,MAAVlhB,GAA4B,MAAVA,IACrC0zB,EAAMA,EAAI33B,OAAO,EAAG23B,EAAIh9B,OAAS,IAE9Bg9B,EAEX,SAAS4vC,GAAY5vC,EAAK2X,GACtB,QAAK3X,EAAIh9B,UAGU,eAAf20C,IAA+B,QAAQhxC,KAAKq5B,KAGzC,sEAAsEr5B,KAAKq5B,IAEtF,SAAS6vC,GAAgBC,EAAaC,EAAczmB,EAAiBjkD,GACjE,IAAI,oBAAoBsB,KAAKopE,KAAiB,SAASppE,KAAKopE,GAA5D,CAIA,GADAA,EAAeA,EAAazoE,QAAQ,QAAS,IACzC,gBAAgBX,KAAKopE,IAAiB,cAAcppE,KAAKopE,GAEzD,OAAOA,EAEX,GAAI,OAAOppE,KAAKopE,GACZ,OAAOD,EAAcC,EAEzB,GAAI,SAASppE,KAAKopE,GAAe,CAE7B,IAAIC,EAAe,GAAmBF,EAAa,YAAc,QAAU,OAC3E,OAAOE,EAAe,IAAMD,EAAazoE,QAAQ,QAAS,IAE9D,OAAIgiD,EACOA,EAAgBe,iBAAiB0lB,EAAc1qE,GAAQyqE,GAE3DC,GAEX,SAASE,GAAWn0B,EAAUwN,EAAiBtF,EAAgB7H,EAAaC,EAAW/2C,GACnF,IAAI0qE,EAAeJ,GAAa3rB,GAChC,GAAK4rB,GAAYG,EAAcj0B,EAASnE,YAAxC,CAGIo4B,EAAa/sE,OAASghD,EAAehhD,SACrCm5C,IACAC,KAEJ,IAAI8zB,EAAeL,GAAgB/zB,EAAS1rB,IAAK2/C,EAAczmB,EAAiBjkD,GAChF,GAAK6qE,GAAiBC,GAAWD,GAGjC,MAAO,CACHz9C,MAAO,GAAMxzB,OAAO68C,EAAS5O,WAAWiP,GAAcL,EAAS5O,WAAWkP,IAC1EX,OAAQy0B,IAGhB,SAASC,GAAW//C,GAChB,IAEI,OADA,QAAI3uB,MAAM2uB,IACH,EAEX,MAAOvuB,GACH,OAAO,GAGR,SAASuuE,GAAkBt0B,EAAUwN,GACxC,IAAI+mB,EAAW,GACXxqB,EAAUjF,GAAc9E,EAASpS,UAAW,GAC5CuY,EAAQ4D,EAAQ9D,OAChBV,OAAoBhhD,EACpBiwE,GAAY,EACZjrE,OAAO,EACPkrE,EAAc,GAClB,MAAOtuB,IAAU9E,GAAUgF,IAAK,CAC5B,OAAQF,GACJ,KAAK9E,GAAUqG,SACX,IAAKn+C,EAAM,CACP,IAAI89C,EAAU0C,EAAQpB,eAAel8C,cACrC+nE,EAAwB,SAAZntB,EAEhB,MACJ,KAAKhG,GAAUuG,cACXrC,EAAoBwE,EAAQpB,eAAel8C,cAC3C,MACJ,KAAK40C,GAAU8G,eACX,GAA0B,QAAtB5C,GAAqD,SAAtBA,EAA8B,CAC7D,IAAI2C,EAAiB6B,EAAQpB,eAC7B,IAAK6rB,EAAW,CACZ,IAAI9kB,EAAOykB,GAAWn0B,EAAUwN,EAAiBtF,EAAgB6B,EAAQvB,iBAAkBuB,EAAQrB,cAAen/C,GAC9GmmD,GACA6kB,EAAS9sE,KAAKioD,GAGlB8kB,GAA6B,qBAATjrE,IACpBA,EAAOsqE,GAAa3rB,GAChB3+C,GAAQikD,IACRjkD,EAAOikD,EAAgBe,iBAAiBhlD,EAAMy2C,EAAS1rB,OAG/DkgD,GAAY,EACZjvB,OAAoBhhD,OAEnB,GAA0B,OAAtBghD,EAA4B,CACjC,IAAIn+C,EAAKysE,GAAa9pB,EAAQpB,gBAC9B8rB,EAAYrtE,GAAM2iD,EAAQvB,iBAE9B,MAERrC,EAAQ4D,EAAQ9D,OAGpB,IAAK,IAAI7S,EAAK,EAAGshC,EAAaH,EAAUnhC,EAAKshC,EAAWxtE,OAAQksC,IAAM,CAC9Dsc,EAAOglB,EAAWthC,GAAtB,IACIuhC,EAAgB30B,EAAS1rB,IAAM,IACnC,GAAIo7B,EAAK/P,QAAU,GAAmB+P,EAAK/P,OAAQg1B,GAAgB,CAC/D,IAAIh1B,EAAS+P,EAAK/P,OAAOpzC,OAAOooE,EAAcztE,QAC1Cid,EAASswD,EAAY90B,GACzB,QAAep7C,IAAX4f,EAAsB,CACtB,IAAI8Q,EAAM+qB,EAAS5O,WAAWjtB,GAC9BurC,EAAK/P,OAAS,GAAKg1B,GAAiB1/C,EAAI0O,KAAO,GAAK,KAAO1O,EAAI+f,UAAY,KAIvF,OAAOu/B,EC9HJ,SAASK,GAAuB50B,EAAUppB,EAAUozB,GACvD,IAAI7lC,EAAS67B,EAAS9O,SAASta,GAC3B9hB,EAAOk1C,EAAaF,WAAW3lC,GACnC,IAAKrP,EAAK60C,IACN,MAAO,GAEX,IAAIl6C,EAAS,GACTolE,EAAgB,GAAgBxzB,GAAUqG,SAAU1H,EAAUlrC,EAAKyG,OACnEu5D,EAA0C,kBAArBhgE,EAAKo1C,aAA4B,GAAgB7I,GAAUkG,OAAQvH,EAAUlrC,EAAKo1C,aAS3G,OARI2qB,GAAiBE,GAAOF,EAAej+C,IAAak+C,GAAeC,GAAOD,EAAal+C,MACnFi+C,GACAplE,EAAOhI,KAAK,CAAEkvC,KAAM,GAAsBqH,KAAMrnB,MAAOk+C,IAEvDC,GACArlE,EAAOhI,KAAK,CAAEkvC,KAAM,GAAsBqH,KAAMrnB,MAAOm+C,KAGxDrlE,EAEX,SAASymB,GAAgB8+C,EAAMC,GAC3B,OAAOD,EAAKrxC,KAAOsxC,EAAKtxC,MAASqxC,EAAKrxC,OAASsxC,EAAKtxC,MAAQqxC,EAAKhgC,WAAaigC,EAAKjgC,UAEvF,SAAS+/B,GAAOp+C,EAAOC,GACnB,OAAOV,GAAgBS,EAAMpb,MAAOqb,IAAaV,GAAgBU,EAAUD,EAAM9D,KAErF,SAAS,GAAgB8yB,EAAW3F,EAAUK,GAC1C,IAAI0J,EAAUjF,GAAc9E,EAASpS,UAAWyS,GAC5C8F,EAAQ4D,EAAQ9D,OACpB,MAAOE,IAAU9E,GAAUgF,KAAOF,IAAUR,EACxCQ,EAAQ4D,EAAQ9D,OAEpB,OAAIE,IAAU9E,GAAUgF,IACb,CAAE9qC,MAAOykC,EAAS5O,WAAW2Y,EAAQvB,kBAAmB31B,IAAKmtB,EAAS5O,WAAW2Y,EAAQrB,gBAE7F,KCnCJ,SAASwsB,GAAoBl1B,EAAUgK,GAC1C,IAAImrB,EAAU,GAId,OAHAnrB,EAAaM,MAAMx7C,SAAQ,SAAUgG,GACjCsgE,GAA2Bp1B,EAAUlrC,EAAM,GAAIqgE,MAE5CA,EAEX,SAASC,GAA2Bp1B,EAAUlrC,EAAMugE,EAAWF,GAC3D,IAAI/yE,EAAOkzE,GAAWxgE,GAClB8hC,EAAWpD,GAASrwC,OAAO68C,EAAS1rB,IAAK,GAAMnxB,OAAO68C,EAAS5O,WAAWt8B,EAAKyG,OAAQykC,EAAS5O,WAAWt8B,EAAK+d,OAChH0iD,EAAS,CACTnzE,KAAMA,EACNw0C,SAAUA,EACV2H,cAAe82B,EACf1+B,KAAM,GAAWyF,OAErB+4B,EAAQ1tE,KAAK8tE,GACbzgE,EAAK1B,SAAStE,SAAQ,SAAU4D,GAC5B0iE,GAA2Bp1B,EAAUttC,EAAOtQ,EAAM+yE,MAG1D,SAASG,GAAWxgE,GAChB,IAAI1S,EAAO0S,EAAK60C,IAChB,GAAI70C,EAAK00C,WAAY,CACjB,IAAIpiD,EAAK0N,EAAK00C,WAAW,MACrBgsB,EAAU1gE,EAAK00C,WAAW,SAC1BpiD,IACAhF,GAAQ,IAAMgF,EAAGoE,QAAQ,UAAW,KAEpCgqE,IACApzE,GAAQozE,EAAQhqE,QAAQ,UAAW,IAAIsM,MAAM,OAAOjH,KAAI,SAAU4kE,GAAa,MAAO,IAAMA,KAAc7sE,KAAK,KAGvH,OAAOxG,GAAQ,IClCZ,SAASszE,GAAS11B,EAAUppB,EAAU++C,EAAS3rB,GAClD,IAAInmD,EACAsgB,EAAS67B,EAAS9O,SAASta,GAC3B9hB,EAAOk1C,EAAaF,WAAW3lC,GACnC,IAAKrP,EAAK60C,IACN,OAAO,KAEX,IAAKisB,GAAiB9gE,EAAMqP,EAAQrP,EAAK60C,KACrC,OAAO,KAEX,IAAIlZ,EAAQ,GACRokC,EAAgB,CAChBt5D,MAAOykC,EAAS5O,WAAWt8B,EAAKyG,MAAQ,IAAIrU,QAC5C2rB,IAAKmtB,EAAS5O,WAAWt8B,EAAKyG,MAAQ,IAAIrU,OAAS4N,EAAK60C,IAAIziD,SAMhE,GAJAupC,EAAMhpC,KAAK,CACPkvB,MAAOk+C,EACPr9B,QAASm+B,IAET7gE,EAAKo1C,YAAa,CAClB,IAAI4qB,EAAc,CACdv5D,MAAOykC,EAAS5O,WAAWt8B,EAAKo1C,YAAc,KAAKhjD,QACnD2rB,IAAKmtB,EAAS5O,WAAWt8B,EAAKo1C,YAAc,KAAKhjD,OAAS4N,EAAK60C,IAAIziD,SAEvEupC,EAAMhpC,KAAK,CACPkvB,MAAOm+C,EACPt9B,QAASm+B,IAGjB,IAAIhwD,GAAW9hB,EAAK,GAChBA,EAAGm8C,EAAS1rB,IAAIrpB,YAAcwlC,EAC9B5sC,GACJ,MAAO,CACH8hB,QAASA,GAMjB,SAASiwD,GAAiB9gE,EAAMqP,EAAQ0xD,GAEpC,SAAI/gE,EAAKo1C,aACDp1C,EAAKo1C,YAAc,KAAKhjD,QAAUid,GAAUA,GAAUrP,EAAKo1C,YAAc,KAAKhjD,OAAS2uE,EAAQ3uE,SAIhG4N,EAAKyG,MAAQ,IAAIrU,QAAUid,GAAUA,GAAUrP,EAAKyG,MAAQ,IAAIrU,OAAS2uE,EAAQ3uE,OC9CrF,SAAS4uE,GAAwB91B,EAAUppB,EAAUozB,GACxD,IAAI7lC,EAAS67B,EAAS9O,SAASta,GAC3B9hB,EAAOk1C,EAAaF,WAAW3lC,GACnC,IAAKrP,EAAK60C,IACN,OAAO,KAEX,IAAK70C,EAAKo1C,YACN,OAAO,KAGX,GAAIp1C,EAAKyG,MAAQ,IAAIrU,QAAUid,GAAUA,GAAUrP,EAAKyG,MAAQ,IAAIrU,OAAS4N,EAAK60C,IAAIziD,OAAQ,CAC1F,IAAI6uE,EAAgB5xD,EAAS,IAAIjd,OAAS4N,EAAKyG,MAASzG,EAAKo1C,YAAc,KAAKhjD,OAChF,OAAO84C,EAAS5O,WAAW2kC,GAG/B,GAAIjhE,EAAKo1C,YAAc,KAAKhjD,QAAUid,GAAUA,GAAUrP,EAAKo1C,YAAc,KAAKhjD,OAAS4N,EAAK60C,IAAIziD,OAAQ,CACpG6uE,EAAgB5xD,EAAS,KAAKjd,OAAS4N,EAAKo1C,YAAep1C,EAAKyG,MAAQ,IAAIrU,OAChF,OAAO84C,EAAS5O,WAAW2kC,GAE/B,OAAO,KClBJ,SAASC,GAAwBh2B,EAAUppB,EAAUozB,GACxD,IAAI7lC,EAAS67B,EAAS9O,SAASta,GAC3B9hB,EAAOk1C,EAAaF,WAAW3lC,GAC/B8xD,EAAYnhE,EAAK60C,IAAM70C,EAAK60C,IAAIziD,OAAS,EAC7C,OAAK4N,EAAKo1C,cAKTp1C,EAAKyG,MAAQ,IAAIrU,QAAUid,GAAUA,GAAUrP,EAAKyG,MAAQ,IAAIrU,OAAS+uE,GAEtEnhE,EAAKo1C,YAAc,KAAKhjD,QAAUid,GAAUA,GAAUrP,EAAKo1C,YAAc,KAAKhjD,OAAS+uE,GAChF,CACH,GAAM9yE,OAAO68C,EAAS5O,WAAWt8B,EAAKyG,MAAQ,IAAIrU,QAAS84C,EAAS5O,WAAWt8B,EAAKyG,MAAQ,IAAIrU,OAAS+uE,IACzG,GAAM9yE,OAAO68C,EAAS5O,WAAWt8B,EAAKo1C,YAAc,KAAKhjD,QAAS84C,EAAS5O,WAAWt8B,EAAKo1C,YAAc,KAAKhjD,OAAS+uE,KATpH,KCHf,SAASC,GAAY9nC,EAAQ+nC,GACzB/nC,EAASA,EAAOuC,MAAK,SAAUylC,EAAIC,GAC/B,IAAIl2B,EAAOi2B,EAAG7/B,UAAY8/B,EAAG9/B,UAI7B,OAHa,IAAT4J,IACAA,EAAOi2B,EAAG5/B,QAAU6/B,EAAG7/B,SAEpB2J,KAeX,IAXA,IAAIm2B,OAAM,EACN3P,EAAW,GACX4P,EAAgB,GAChBC,EAAqB,GACrBC,EAAkB,SAAU3lE,EAAOy7D,GACnCgK,EAAczlE,GAASy7D,EACnBA,EAAQ,KACRiK,EAAmBjK,IAAUiK,EAAmBjK,IAAU,GAAK,IAI9D1qE,EAAI,EAAGA,EAAIusC,EAAOlnC,OAAQrF,IAAK,CACpC,IAAI60E,EAAQtoC,EAAOvsC,GACnB,GAAKy0E,GAKD,GAAII,EAAMngC,UAAY+/B,EAAI//B,UACtB,GAAImgC,EAAMlgC,SAAW8/B,EAAI9/B,QACrBmwB,EAASl/D,KAAK6uE,GACdA,EAAMI,EACND,EAAgB50E,EAAG8kE,EAASz/D,aAE3B,GAAIwvE,EAAMngC,UAAY+/B,EAAI9/B,QAAS,CACpC,GACI8/B,EAAM3P,EAAS1Z,YACVqpB,GAAOI,EAAMngC,UAAY+/B,EAAI9/B,SAClC8/B,GACA3P,EAASl/D,KAAK6uE,GAElBA,EAAMI,EACND,EAAgB50E,EAAG8kE,EAASz/D,cAlBpCovE,EAAMI,EACND,EAAgB50E,EAAG,GAsB3B,IAAI80E,EAAU,EACVC,EAAW,EACf,IAAS/0E,EAAI,EAAGA,EAAI20E,EAAmBtvE,OAAQrF,IAAK,CAChD,IAAIyB,EAAIkzE,EAAmB30E,GAC3B,GAAIyB,EAAG,CACH,GAAIA,EAAIqzE,EAAUR,EAAY,CAC1BS,EAAW/0E,EACX,MAEJ80E,GAAWrzE,GAGnB,IAAImM,EAAS,GACb,IAAS5N,EAAI,EAAGA,EAAIusC,EAAOlnC,OAAQrF,IAAK,CACpC,IAAI0qE,EAAQgK,EAAc10E,GACL,kBAAV0qE,IACHA,EAAQqK,GAAarK,IAAUqK,GAAYD,IAAYR,IACvD1mE,EAAOhI,KAAK2mC,EAAOvsC,IAI/B,OAAO4N,EAEJ,SAASonE,GAAiB72B,EAAUvZ,GACvC,IAAIsjB,EAAUjF,GAAc9E,EAASpS,WACjCuY,EAAQ4D,EAAQ9D,OAChB7X,EAAS,GACTx/B,EAAQ,GACRkoE,EAAc,KACdC,GAAa,EACjB,SAASC,EAASrgD,GACdyX,EAAO3mC,KAAKkvB,GACZogD,EAAYpgD,EAAM4f,UAEtB,MAAO4P,IAAU9E,GAAUgF,IAAK,CAC5B,OAAQF,GACJ,KAAK9E,GAAUqG,SACX,IAAIL,EAAU0C,EAAQpB,eAClBpS,EAAYyJ,EAAS5O,WAAW2Y,EAAQvB,kBAAkB7kB,KAC9D/0B,EAAMnH,KAAK,CAAE8uC,UAAWA,EAAW8Q,QAASA,IAC5CyvB,EAAczvB,EACd,MAEJ,KAAKhG,GAAUkG,OACXuvB,EAAc/sB,EAAQpB,eACtB,MAEJ,KAAKtH,GAAUiF,cACX,IAAKwwB,IAAgB5tB,GAAc4tB,GAC/B,MAGR,KAAKz1B,GAAUkF,YACf,KAAKlF,GAAUwG,kBACX,IAAIhmD,EAAI+M,EAAM1H,OAAS,EACvB,MAAOrF,GAAK,GAAK+M,EAAM/M,GAAGwlD,UAAYyvB,EAClCj1E,IAEJ,GAAIA,GAAK,EAAG,CACR,IAAIo1E,EAAeroE,EAAM/M,GACzB+M,EAAM1H,OAASrF,EACf,IAAI8hC,EAAOqc,EAAS5O,WAAW2Y,EAAQvB,kBAAkB7kB,KAErD6S,GADAD,EAAY0gC,EAAa1gC,UACf5S,EAAO,GACjB6S,EAAUD,GAAawgC,IAAcxgC,GACrCygC,EAAS,CAAEzgC,UAAWA,EAAWC,QAASA,IAGlD,MAEJ,KAAK6K,GAAUqF,QACPnQ,EAAYyJ,EAAS5O,WAAW2Y,EAAQvB,kBAAkB7kB,KAA9D,IACIhE,EAAOoqB,EAAQpB,eACf1mD,EAAI09B,EAAK5yB,MAAM,iCACnB,GAAI9K,EACA,GAAIA,EAAE,GACF2M,EAAMnH,KAAK,CAAE8uC,UAAWA,EAAW8Q,QAAS,SAE3C,CACGxlD,EAAI+M,EAAM1H,OAAS,EACvB,MAAOrF,GAAK,GAAK+M,EAAM/M,GAAGwlD,QAAQngD,OAC9BrF,IAEJ,GAAIA,GAAK,EAAG,CACJo1E,EAAeroE,EAAM/M,GACzB+M,EAAM1H,OAASrF,EACX20C,EAAUD,EACdA,EAAY0gC,EAAa1gC,UACrBC,EAAUD,GAAawgC,IAAcxgC,GACrCygC,EAAS,CAAEzgC,UAAWA,EAAWC,QAASA,EAASG,KAAM9C,GAAiBqjC,cAKrF,CACG1gC,EAAUwJ,EAAS5O,WAAW2Y,EAAQvB,iBAAmBuB,EAAQtB,kBAAkB9kB,KACnF4S,EAAYC,GACZwgC,EAAS,CAAEzgC,UAAWA,EAAWC,QAASA,EAASG,KAAM9C,GAAiB6S,UAGlF,MAGRP,EAAQ4D,EAAQ9D,OAEpB,IAAIkwB,EAAa1vC,GAAWA,EAAQ0vC,YAAc1kE,OAAOsjC,UACzD,OAAI3G,EAAOlnC,OAASivE,EACTD,GAAY9nC,EAAQ+nC,GAExB/nC,EC5JJ,SAAS+oC,GAAmBn3B,EAAUo3B,GACzC,SAASC,EAAkBzgD,GAIvB,IAHA,IAAI0gD,EAAmBC,GAAoBv3B,EAAUppB,GACjDniB,OAAOlQ,EACPgjE,OAAUhjE,EACLuM,EAAQwmE,EAAiBpwE,OAAS,EAAG4J,GAAS,EAAGA,IAAS,CAC/D,IAAI6lB,EAAQ2gD,EAAiBxmE,GACxB2D,GAAQkiB,EAAM,KAAOliB,EAAK,IAAMkiB,EAAM,KAAOliB,EAAK,KACnD8yD,EAAUttB,GAAe92C,OAAO,GAAMA,OAAO68C,EAAS5O,WAAWkmC,EAAiBxmE,GAAO,IAAKkvC,EAAS5O,WAAWkmC,EAAiBxmE,GAAO,KAAMy2D,IAEpJ9yD,EAAOkiB,EAKX,OAHK4wC,IACDA,EAAUttB,GAAe92C,OAAO,GAAMA,OAAOyzB,EAAUA,KAEpD2wC,EAEX,OAAO6P,EAAUvmE,IAAIwmE,GAEzB,SAASE,GAAoBv3B,EAAUppB,GACnC,IAAI4gD,EAAU7xE,GAAMq6C,EAASpS,WACzB6pC,EAAaz3B,EAAS9O,SAASta,GAC/B8gD,EAAWF,EAAQ1tB,WAAW2tB,GAC9BhoE,EAASkoE,GAAsBD,GAEnC,GAAIA,EAASrtB,cAAgBqtB,EAASxtB,YAAa,CAE/C,GAAIwtB,EAASrtB,cAAgBqtB,EAAS7kD,IAClC,MAAO,CAAC,CAAC6kD,EAASn8D,MAAOm8D,EAAS7kD,MAEtC,IAAI+kD,EAAa,GAAMz0E,OAAO68C,EAAS5O,WAAWsmC,EAASrtB,YAAc,GAAIrK,EAAS5O,WAAWsmC,EAASrtB,cACtGwtB,EAAY73B,EAASpS,QAAQgqC,GAEf,OAAdC,EACApoE,EAAOqoE,QAAQ,CAACJ,EAASn8D,MAAQ,EAAGm8D,EAASrtB,YAAc,IAI3D56C,EAAOqoE,QAAQ,CAACJ,EAASn8D,MAAQ,EAAGm8D,EAASrtB,YAAc,IAE/D,IAAI0tB,EAAuBC,GAAwBh4B,EAAU03B,EAAUD,GAEvE,OADAhoE,EAASsoE,EAAqBhnE,OAAOtB,GAC9BA,EAEX,IAAKioE,EAASrtB,cAAgBqtB,EAASxtB,YACnC,OAAOz6C,EAUX,GAJAA,EAAOqoE,QAAQ,CAACJ,EAASn8D,MAAOm8D,EAAS7kD,MAIrC6kD,EAASn8D,MAAQk8D,GAAcA,EAAaC,EAASrtB,YAAa,CAClE56C,EAAOqoE,QAAQ,CAACJ,EAASn8D,MAAQ,EAAGm8D,EAASrtB,YAAc,IACvD0tB,EAAuBC,GAAwBh4B,EAAU03B,EAAUD,GAEvE,OADAhoE,EAASsoE,EAAqBhnE,OAAOtB,GAC9BA,EAKN,OAAIioE,EAASrtB,aAAeotB,GAAcA,GAAcC,EAASxtB,aAClEz6C,EAAOqoE,QAAQ,CAACJ,EAASrtB,YAAaqtB,EAASxtB,cACxCz6C,IAOHgoE,GAAcC,EAASxtB,YAAc,GACrCz6C,EAAOqoE,QAAQ,CAACJ,EAASxtB,YAAc,EAAGwtB,EAAS7kD,IAAM,IAEtDpjB,GAGf,SAASkoE,GAAsBM,GAC3B,IAAIP,EAAWO,EACXC,EAAgB,SAAU50E,GAC1B,OAAIA,EAAE+mD,aAAe/mD,EAAE4mD,aAAe5mD,EAAE+mD,YAAc/mD,EAAE4mD,YAC7C,CACH,CAAC5mD,EAAE+mD,YAAa/mD,EAAE4mD,aAClB,CAAC5mD,EAAEiY,MAAOjY,EAAEuvB,MAGb,CACH,CAACvvB,EAAEiY,MAAOjY,EAAEuvB,OAGhBpjB,EAAS,GACb,MAAOioE,EAAS/kE,OACZ+kE,EAAWA,EAAS/kE,OACpBulE,EAAcR,GAAU5oE,SAAQ,SAAUnM,GAAK,OAAO8M,EAAOhI,KAAK9E,MAEtE,OAAO8M,EAEX,SAASuoE,GAAwBh4B,EAAU03B,EAAUD,GACjD,IAAIU,EAAgB,GAAMh1E,OAAO68C,EAAS5O,WAAWsmC,EAASn8D,OAAQykC,EAAS5O,WAAWsmC,EAAS7kD,MAC/FulD,EAAep4B,EAASpS,QAAQuqC,GAChCE,EAAiBZ,EAAaC,EAASn8D,MAIvCwuC,EAAUjF,GAAcszB,GACxBjyB,EAAQ4D,EAAQ9D,OAKhBqyB,EAAiBZ,EAASn8D,MAC1B9L,EAAS,GACT8oE,GAAoB,EACpBC,GAAa,EACjB,MAAOryB,IAAU9E,GAAUgF,IAAK,CAC5B,OAAQF,GACJ,KAAK9E,GAAUuG,cACX,GAAIywB,EAAiBtuB,EAAQvB,iBAAkB,CAC3C+vB,GAAoB,EACpB,MAEAF,GAAkBtuB,EAAQrB,eAE1Bj5C,EAAOqoE,QAAQ,CAAC/tB,EAAQvB,iBAAkBuB,EAAQrB,gBAEtD6vB,GAAoB,EACpBC,EAAYzuB,EAAQvB,iBACpB,MAEJ,KAAKnH,GAAU8G,eACX,IAAKowB,EACD,MAEJ,IAAIE,EAAY1uB,EAAQpB,eACxB,GAAI0vB,EAAiBtuB,EAAQvB,iBAAkB,CAE3C/4C,EAAOhI,KAAK,CAAC+wE,EAAWzuB,EAAQrB,gBAChC,MAEA2vB,GAAkBtuB,EAAQvB,kBAAoB6vB,GAAkBtuB,EAAQrB,gBAExEj5C,EAAOqoE,QAAQ,CAAC/tB,EAAQvB,iBAAkBuB,EAAQrB,iBAE5B,MAAjB+vB,EAAU,IAAmD,MAApCA,EAAUA,EAAUvxE,OAAS,IAAkC,MAAjBuxE,EAAU,IAAkD,MAApCA,EAAUA,EAAUvxE,OAAS,KACzHmxE,GAAkBtuB,EAAQvB,iBAAmB,GAAK6vB,GAAkBtuB,EAAQrB,cAAgB,GAC5Fj5C,EAAOqoE,QAAQ,CAAC/tB,EAAQvB,iBAAmB,EAAGuB,EAAQrB,cAAgB,IAI9Ej5C,EAAOhI,KAAK,CAAC+wE,EAAWzuB,EAAQrB,iBAEpC,MAGRvC,EAAQ4D,EAAQ9D,OAEpB,OAAOx2C,EAAOoB,KAAI,SAAU6nE,GACxB,MAAO,CAACA,EAAK,GAAKJ,EAAgBI,EAAK,GAAKJ,MCjK7C,IAAIK,GAAW,CAClB,QAAW,IACX,KAAQ,CACJ,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,6DAEb,WAAc,CACV,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,+NAGjB,CACI,KAAQ,UACR,YAAe,guBAEnB,CACI,KAAQ,QACR,YAAe,gMAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,0EAEb,WAAc,CACV,CACI,KAAQ,UACR,YAAe,yEAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,kXAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,4QAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,gPAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,6gCAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,8EAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,0QAGjB,CACI,KAAQ,cACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,o8FAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,+NAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,+iCAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,gTAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,+iBAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,q8BAGjB,CACI,KAAQ,KACR,YAAe,67BAEnB,CACI,KAAQ,aACR,YAAe,qGAEnB,CACI,KAAQ,aACR,YAAe,oaAEnB,CACI,KAAQ,YACR,YAAe,yVAEnB,CACI,KAAQ,iBACR,YAAe,8mDAEnB,CACI,KAAQ,QACR,YAAe,4YAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,2IAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,gnWAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,85GAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,0QAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,6+GAGjB,CACI,KAAQ,SACR,YAAe,8WAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,oNAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,gOAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,mZAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,sPAGjB,CACI,KAAQ,SACR,SAAY,KAEhB,CACI,KAAQ,QACR,YAAe,wIAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,4DAEb,WAAc,CACV,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,8DAGjB,CACI,KAAQ,gBACR,YAAe,CACX,KAAQ,WACR,MAAS,sEAGjB,CACI,KAAQ,iBACR,YAAe,CACX,KAAQ,WACR,MAAS,gEAGjB,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,iJAGjB,CACI,KAAQ,mBACR,YAAe,CACX,KAAQ,WACR,MAAS,2DAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,+DAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,4DAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,mEAGjB,CACI,KAAQ,cAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,kEAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,wDAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,sDAGjB,CACI,KAAQ,QACR,YAAe,0gBAEnB,CACI,KAAQ,aACR,YAAe,+UAEnB,CACI,KAAQ,UACR,YAAe,qRAEnB,CACI,KAAQ,eACR,YAAe,wXAEnB,CACI,KAAQ,aACR,YAAe,mXAEnB,CACI,KAAQ,OACR,YAAe,kkBAEnB,CACI,KAAQ,SACR,YAAe,mDAEnB,CACI,KAAQ,UACR,YAAe,8DAEnB,CACI,KAAQ,UACR,YAAe,sDAEnB,CACI,KAAQ,SACR,YAAe,4DAEnB,CACI,KAAQ,SACR,YAAe,iFAEnB,CACI,KAAQ,WACR,YAAe,wDAEnB,CACI,KAAQ,SACR,YAAe,kFAEnB,CACI,KAAQ,cACR,YAAe,wXAEnB,CACI,KAAQ,OACR,YAAe,+SAEnB,CACI,KAAQ,YACR,YAAe,yWAEnB,CACI,KAAQ,QACR,YAAe,8kBAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,ufAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,0QAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,0IAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,oRAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,wUAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,4PAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,0MAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAInB,CACI,KAAQ,IACR,YAAe,CACX,KAAQ,WACR,MAAS,yCAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,sKAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,sGAEnB,CACI,KAAQ,QACR,YAAe,uEAEnB,CACI,KAAQ,UACR,YAAe,qCAEnB,CACI,KAAQ,OACR,YAAe,4CAEnB,CACI,KAAQ,QACR,YAAe,iFAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,kJAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,geAEnB,CACI,KAAQ,QACR,YAAe,qbAEnB,CACI,KAAQ,OACR,YAAe,yVAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,sOAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,8LAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,oEAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,sKAEb,WAAc,CACV,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,iGAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,0YAGjB,CACI,KAAQ,OACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,y1CAGjB,CACI,KAAQ,UACR,YAAe,ogCAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,yLAEb,WAAc,CACV,CACI,KAAQ,UACR,YAAe,0uBAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,mRAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,6wCAGjB,CACI,KAAQ,OACR,YAAe,suBAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,2WAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,qHAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,yIAEb,WAAc,CACV,CACI,KAAQ,SACR,YAAe,kHAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,kNAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,iJAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,oEAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,4PAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,wMAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,IACR,YAAe,CACX,KAAQ,WACR,MAAS,wHAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mEAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,4nCAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,u3CAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,yYAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,2LAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,kPAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,udAGjB,CACI,KAAQ,iBACR,YAAe,07BAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,8DAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,8FAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,mEAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,IACR,YAAe,CACX,KAAQ,WACR,MAAS,wFAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,0RAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,IACR,YAAe,CACX,KAAQ,WACR,MAAS,8EAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,6NAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,4OAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,qQAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,yoBAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,mOAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,qSAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,4NAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,oPAEb,WAAc,CACV,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,qHAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,qLAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,yRAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,iGAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,oJAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,2CAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,6CAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,IACR,YAAe,CACX,KAAQ,WACR,MAAS,mUAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2DAInB,CACI,KAAQ,IACR,YAAe,CACX,KAAQ,WACR,MAAS,mVAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2DAInB,CACI,KAAQ,IACR,YAAe,CACX,KAAQ,WACR,MAAS,6PAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,grBAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,oJAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,wNAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,8PAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,6KAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,2CAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,4DAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,wDAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,2DAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,qJAEnB,CACI,KAAQ,WACR,YAAe,g4CAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,2DAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,kFAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,i4CAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,+TAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,uCAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,k7BAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,wTAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,8rCAGjB,CACI,KAAQ,cACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,qjBAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,2sBAGjB,CACI,KAAQ,QACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,+jBAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,iDAGjB,CACI,KAAQ,WACR,YAAe,2EAEnB,CACI,KAAQ,WACR,YAAe,kTAEnB,CACI,KAAQ,aACR,YAAe,qGAEnB,CACI,KAAQ,aACR,YAAe,0QAEnB,CACI,KAAQ,gBACR,YAAe,sbAEnB,CACI,KAAQ,iBACR,YAAe,iuCAEnB,CACI,KAAQ,QACR,YAAe,isBAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,4DAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,onBAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,qKAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,0vDAGjB,CACI,KAAQ,UACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,g3FAGjB,CACI,KAAQ,WACR,SAAY,KAEhB,CACI,KAAQ,kBACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,0TAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,4DAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,6DAGjB,CACI,KAAQ,QACR,YAAe,sHAEnB,CACI,KAAQ,sBACR,YAAe,2KAEnB,CACI,KAAQ,sBACR,YAAe,uFAEnB,CACI,KAAQ,MACR,YAAe,sYAEnB,CACI,KAAQ,aACR,YAAe,qYAEnB,CACI,KAAQ,iBACR,YAAe,8lIAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,4HAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,4CAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,+DAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,kKAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,oKAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,kOAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,uGAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,qLAGjB,CACI,KAAQ,gBACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,oMAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,qFAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,sWAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,2XAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,gOAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,mOAGjB,CACI,KAAQ,UACR,YAAe,4EAEnB,CACI,KAAQ,SACR,YAAe,wDAEnB,CACI,KAAQ,UACR,YAAe,iHAEnB,CACI,KAAQ,WACR,YAAe,0KAEnB,CACI,KAAQ,WACR,YAAe,0DAEnB,CACI,KAAQ,UACR,YAAe,6OAEnB,CACI,KAAQ,UACR,YAAe,2FAEnB,CACI,KAAQ,WACR,YAAe,0FAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,2HAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,2BAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,0CAGjB,CACI,KAAQ,OACR,YAAe,wHAEnB,CACI,KAAQ,YACR,YAAe,shBAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,wFAEb,WAAc,CACV,CACI,KAAQ,OAEZ,CACI,KAAQ,cACR,SAAY,MAEhB,CACI,KAAQ,UAEZ,CACI,KAAQ,UACR,SAAY,MAEhB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,wJAGjB,CACI,KAAQ,cAEZ,CACI,KAAQ,OACR,SAAY,KAEhB,CACI,KAAQ,QACR,SAAY,KAEhB,CACI,KAAQ,WACR,SAAY,KAEhB,CACI,KAAQ,SAEZ,CACI,KAAQ,WAGhB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,wDAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,kcAGjB,CACI,KAAQ,cACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,guDAGjB,CACI,KAAQ,UACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,m7BAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,sjBAGjB,CACI,KAAQ,cAEZ,CACI,KAAQ,OACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,sIAGjB,CACI,KAAQ,QACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,mHAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,sKAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,oJAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,k7BAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,0KAGjB,CACI,KAAQ,QACR,YAAe,66BAEnB,CACI,KAAQ,SACR,YAAe,2yCAEnB,CACI,KAAQ,QACR,YAAe,4YAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,kJAEb,WAAc,CACV,CACI,KAAQ,UACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,6MAGjB,CACI,KAAQ,OACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,k2CAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,6GAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,u2BAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,oMAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,oJAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,gZAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,2IAEb,WAAc,CACV,CACI,KAAQ,OAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,QACR,SAAY,MAEhB,CACI,KAAQ,QAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,YACR,YAAe,6TAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,2FAEb,WAAc,CACV,CACI,KAAQ,UAEZ,CACI,KAAQ,QACR,YAAe,gtDAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,6HAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,2uCAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,mJAEb,WAAc,CACV,CACI,KAAQ,QAEZ,CACI,KAAQ,QACR,YAAe,+mHAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,wNAEb,WAAc,CACV,CACI,KAAQ,QAEZ,CACI,KAAQ,QACR,YAAe,k9GAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,kKAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,ioDAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,iLAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,qyDAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,oLAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,qyDAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,wDAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,snEAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,qDAEb,WAAc,CACV,CACI,KAAQ,WAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,OACR,YAAe,mYAEnB,CACI,KAAQ,QACR,YAAe,01DAEnB,CACI,KAAQ,OACR,YAAe,wNAEnB,CACI,KAAQ,UACR,YAAe,g3CAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,uDAEb,WAAc,CACV,CACI,KAAQ,WAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,QACR,SAAY,KAEhB,CACI,KAAQ,UAEZ,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,qLAGjB,CACI,KAAQ,QACR,YAAe,srDAEnB,CACI,KAAQ,OACR,YAAe,sUAEnB,CACI,KAAQ,UACR,YAAe,y6CAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4DAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,uKAEb,WAAc,CACV,CACI,KAAQ,iBACR,YAAe,CACX,KAAQ,WACR,MAAS,mbAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,wwBAGjB,CACI,KAAQ,eACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,ykCAGjB,CACI,KAAQ,UACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,o7CAGjB,CACI,KAAQ,SACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,knDAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,kLAGjB,CACI,KAAQ,aACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,s5BAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,kiEAGjB,CACI,KAAQ,SACR,YAAe,qmBAEnB,CACI,KAAQ,iBACR,YAAe,myBAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,yQAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,krBAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,2wBAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,oHAEb,WAAc,CACV,CACI,KAAQ,UAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,eACR,SAAY,qBAEhB,CACI,KAAQ,YACR,SAAY,KAEhB,CACI,KAAQ,UACR,SAAY,KAEhB,CACI,KAAQ,WAEZ,CACI,KAAQ,WACR,SAAY,KAEhB,CACI,KAAQ,QAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,cACR,SAAY,MAEhB,CACI,KAAQ,aACR,SAAY,MAEhB,CACI,KAAQ,iBACR,SAAY,KAEhB,CACI,KAAQ,cAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,YACR,SAAY,MAEhB,CACI,KAAQ,QAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,WACR,SAAY,KAEhB,CACI,KAAQ,QAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,WACR,SAAY,KAEhB,CACI,KAAQ,WACR,SAAY,KAEhB,CACI,KAAQ,QAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,OACR,SAAY,KAEhB,CACI,KAAQ,SAEZ,CACI,KAAQ,UAGhB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,mEAEb,WAAc,CACV,CACI,KAAQ,YACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,uQAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,ilCAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,6uCAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,6OAGjB,CACI,KAAQ,cACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,s7BAGjB,CACI,KAAQ,aACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,yoBAGjB,CACI,KAAQ,iBACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,wTAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,qjCAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mEAGjB,CACI,KAAQ,OACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,geAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,qMAGjB,CACI,KAAQ,eACR,YAAe,6hCAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,mFAEb,WAAc,CACV,CACI,KAAQ,eACR,SAAY,oBACZ,YAAe,CACX,KAAQ,WACR,MAAS,ymBAGjB,CACI,KAAQ,YACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,qLAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,iTAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,iWAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,8QAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,+DAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,kGAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,ujBAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,+NAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,mFAEb,WAAc,CACV,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,oNAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,uKAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,0HAEb,WAAc,CACV,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,qdAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,sKAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,wpBAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,qNAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,uKAEb,WAAc,CACV,CACI,KAAQ,eACR,SAAY,oBACZ,YAAe,CACX,KAAQ,WACR,MAAS,y1CAGjB,CACI,KAAQ,YACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,+LAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,8KAGjB,CACI,KAAQ,WAEZ,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,seAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mZAGjB,CACI,KAAQ,YACR,SAAY,MAEhB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,yKAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,gGAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,6BAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,quCAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,6RAGjB,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,0FAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,sDAGjB,CACI,KAAQ,OACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,ooBAGjB,CACI,KAAQ,iBACR,YAAe,0qBAEnB,CACI,KAAQ,aACR,YAAe,2aAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,2HAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,mOAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,kcAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,wUAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,uaAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,wVAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,sOAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,2OAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,ygBAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,qKAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,wKAGjB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,8WAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mXAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,sYAGjB,CACI,KAAQ,OACR,YAAe,8YAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+DAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,kGAEb,WAAc,CACV,CACI,KAAQ,WACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,ijBAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,oWAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,6SAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,iIAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,yHAEb,WAAc,CACV,CACI,KAAQ,OACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,sMAIrB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,sJAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,wJAEb,WAAc,CACV,CACI,KAAQ,OACR,YAAe,wJAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,wJAEb,WAAc,CACV,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,iQAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,6mDAGjB,CACI,KAAQ,WAEZ,CACI,KAAQ,QACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,mgCAGjB,CACI,KAAQ,QACR,SAAY,IACZ,YAAe,CACX,KAAQ,WACR,MAAS,qvBAGjB,CACI,KAAQ,cACR,SAAY,KACZ,YAAe,CACX,KAAQ,WACR,MAAS,w1BAGjB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,iZAGjB,CACI,KAAQ,YACR,YAAe,qQAEnB,CACI,KAAQ,WACR,YAAe,8SAEnB,CACI,KAAQ,iBACR,YAAe,gjJAEnB,CACI,KAAQ,OACR,YAAe,gOAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,gEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,wRAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,wHAEb,WAAc,GACd,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,iLAEb,WAAc,CACV,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,sEAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,uEAGjB,CACI,KAAQ,aACR,YAAe,mfAGvB,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,iEAKvB,iBAAoB,CAChB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,kOAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6EAInB,CACI,KAAQ,iBACR,YAAe,CACX,KAAQ,WACR,MAAS,ohBAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,kFAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,wZAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,yEAInB,CACI,KAAQ,kBACR,YAAe,CACX,KAAQ,WACR,MAAS,gWAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,mFAInB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,oZAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+EAInB,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,smBAEb,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,uEAInB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,iTAEb,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6EAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,wbAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,oGAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,+EAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,6UAEb,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,qMAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,sEAInB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,yjBAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6EAInB,CACI,KAAQ,KACR,YAAe,CACX,KAAQ,WACR,MAAS,oNAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,sEAInB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,6CAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,0EAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,4JAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4EAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,gPAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,2EAInB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,0ZAEb,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6EAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,sSAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4EAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,+ZAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,wEAInB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,wTAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,wEAInB,CACI,KAAQ,OACR,SAAY,SAEhB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,2jBAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,wEAInB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,4TAEb,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,8EAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,ibAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,yEAInB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,40BAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,4EAInB,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,uLAEb,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,yEAInB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,uuBAEb,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,gBACR,IAAO,6EAInB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,iDAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,mLAGjB,CACI,KAAQ,mBACR,YAAe,CACX,KAAQ,WACR,MAAS,6GAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,4IAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,0EAGjB,CACI,KAAQ,gBACR,YAAe,CACX,KAAQ,WACR,MAAS,qFAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,6DAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,iEAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,6FAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,oEAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,oEAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,0FAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,2DAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,kDAGjB,CACI,KAAQ,mBACR,YAAe,CACX,KAAQ,WACR,MAAS,6CAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,0KAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,mEAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,+BAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,qDAGjB,CACI,KAAQ,gBAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,iHAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,gFAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,2BAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,gGAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,uBAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,kEAGjB,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,uDAGjB,CACI,KAAQ,mBACR,YAAe,CACX,KAAQ,WACR,MAAS,kCAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,wBAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,yEAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,gDAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,0GAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,4GAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,0DAGjB,CACI,KAAQ,gBAEZ,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,gFAGjB,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,+EAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,8BAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,wBAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,wFAGjB,CACI,KAAQ,aACR,YAAe,CACX,KAAQ,WACR,MAAS,iBAGjB,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,mCAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,qBAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,wCAGjB,CACI,KAAQ,qBACR,YAAe,CACX,KAAQ,WACR,MAAS,wDAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,uDAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,gCAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,4BAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,iCAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,4FAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,4FAGjB,CACI,KAAQ,WACR,YAAe,CACX,KAAQ,WACR,MAAS,yBAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,2CAGjB,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,sEAGjB,CACI,KAAQ,iBACR,YAAe,CACX,KAAQ,WACR,MAAS,4BAGjB,CACI,KAAQ,YACR,YAAe,CACX,KAAQ,WACR,MAAS,8DAGjB,CACI,KAAQ,kBACR,YAAe,CACX,KAAQ,WACR,MAAS,wDAGjB,CACI,KAAQ,gBACR,YAAe,CACX,KAAQ,WACR,MAAS,iDAGjB,CACI,KAAQ,iBACR,YAAe,CACX,KAAQ,WACR,MAAS,8DAGjB,CACI,KAAQ,iBACR,YAAe,CACX,KAAQ,WACR,MAAS,8DAGjB,CACI,KAAQ,sBACR,YAAe,CACX,KAAQ,WACR,MAAS,wCAGjB,CACI,KAAQ,qBACR,YAAe,CACX,KAAQ,WACR,MAAS,sGAGjB,CACI,KAAQ,gBACR,YAAe,CACX,KAAQ,WACR,MAAS,qCAGjB,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,4FAGjB,CACI,KAAQ,gBACR,YAAe,CACX,KAAQ,WACR,MAAS,gEAGjB,CACI,KAAQ,cACR,YAAe,CACX,KAAQ,WACR,MAAS,iDAGjB,CACI,KAAQ,wBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,8DAGf,YAAe,CACX,KAAQ,WACR,MAAS,6TAGjB,CACI,KAAQ,cACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,oDAGf,YAAe,CACX,KAAQ,WACR,MAAS,qSAGjB,CACI,KAAQ,oBACR,SAAY,eACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,0DAGf,YAAe,CACX,KAAQ,WACR,MAAS,mMAGjB,CACI,KAAQ,YACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,kDAGf,YAAe,CACX,KAAQ,WACR,MAAS,qKAGjB,CACI,KAAQ,eACR,SAAY,WACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,uVAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wSAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,4dAGjB,CACI,KAAQ,eACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,2YAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wOAGjB,CACI,KAAQ,eACR,SAAY,UACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,6JAGjB,CACI,KAAQ,mBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,0DAInB,CACI,KAAQ,mBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,yDAGf,YAAe,CACX,KAAQ,WACR,MAAS,+PAGjB,CACI,KAAQ,gBACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,8ZAGjB,CACI,KAAQ,kBACR,SAAY,aACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,wDAGf,YAAe,CACX,KAAQ,WACR,MAAS,iIAGjB,CACI,KAAQ,oBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,0DAGf,YAAe,CACX,KAAQ,WACR,MAAS,8UAGjB,CACI,KAAQ,gBACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,gHAGjB,CACI,KAAQ,cACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,oDAGf,YAAe,CACX,KAAQ,WACR,MAAS,4QAGjB,CACI,KAAQ,eACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wJAGjB,CACI,KAAQ,gBACR,SAAY,WACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,sLAGjB,CACI,KAAQ,cACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,oDAGf,YAAe,CACX,KAAQ,WACR,MAAS,2MAGjB,CACI,KAAQ,eACR,SAAY,UACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,sLAGjB,CACI,KAAQ,oBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,2DAInB,CACI,KAAQ,aACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,mDAGf,YAAe,CACX,KAAQ,WACR,MAAS,kJAGjB,CACI,KAAQ,kBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,wDAGf,YAAe,CACX,KAAQ,WACR,MAAS,qNAGjB,CACI,KAAQ,aACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,mDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wHAGjB,CACI,KAAQ,YACR,SAAY,OACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,kDAGf,YAAe,CACX,KAAQ,WACR,MAAS,qYAGjB,CACI,KAAQ,aACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,mDAGf,YAAe,CACX,KAAQ,WACR,MAAS,6GAGjB,CACI,KAAQ,iBACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,uDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wFAGjB,CACI,KAAQ,uBACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,6DAGf,YAAe,CACX,KAAQ,WACR,MAAS,mGAGjB,CACI,KAAQ,mBACR,SAAY,cACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,yDAGf,YAAe,CACX,KAAQ,WACR,MAAS,+FAGjB,CACI,KAAQ,YACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,kDAGf,YAAe,CACX,KAAQ,WACR,MAAS,iZAGjB,CACI,KAAQ,mBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,yDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wMAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,6RAGjB,CACI,KAAQ,eACR,SAAY,WACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,uQAGjB,CACI,KAAQ,gBACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,oQAGjB,CACI,KAAQ,gBACR,SAAY,WACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,yMAGjB,CACI,KAAQ,gBACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,4IAGjB,CACI,KAAQ,uBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,6DAGf,YAAe,CACX,KAAQ,WACR,MAAS,0LAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,qSAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,sdAGjB,CACI,KAAQ,eACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wYAGjB,CACI,KAAQ,gBACR,SAAY,IACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,yTAGjB,CACI,KAAQ,eACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,qDAGf,YAAe,CACX,KAAQ,WACR,MAAS,gOAGjB,CACI,KAAQ,YACR,SAAY,OACZ,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,kDAGf,YAAe,CACX,KAAQ,WACR,MAAS,uFAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,4GAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,4GAGjB,CACI,KAAQ,gBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,sDAGf,YAAe,CACX,KAAQ,WACR,MAAS,wLAGjB,CACI,KAAQ,iBACR,WAAc,CACV,CACI,KAAQ,qBACR,IAAO,uDAGf,YAAe,CACX,KAAQ,WACR,MAAS,8LAGjB,CACI,KAAQ,eACR,YAAe,CACX,KAAQ,WACR,MAAS,uRAGjB,CACI,KAAQ,oBACR,YAAe,CACX,KAAQ,WACR,MAAS,0GAIrB,UAAa,CACT,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,QAEZ,CACI,KAAQ,WAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,QAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,eAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,MAEZ,CACI,KAAQ,SAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,OAEZ,CACI,KAAQ,QAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,QAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,OAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,MACR,YAAe,CACX,KAAQ,WACR,MAAS,0TAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,iLAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,+JAKzB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,OAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,OAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,cAIpB,CACI,KAAQ,IACR,OAAU,CACN,CACI,KAAQ,UAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,YAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,YAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,SAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,UAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,KAEZ,CACI,KAAQ,KAEZ,CACI,KAAQ,KAEZ,CACI,KAAQ,KAEZ,CACI,KAAQ,OAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,WAEZ,CACI,KAAQ,aAIpB,CACI,KAAQ,MACR,OAAU,CACN,CACI,KAAQ,WAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,WAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,qCAEZ,CACI,KAAQ,uBAEZ,CACI,KAAQ,gBAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,aAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,cAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,QAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,UAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,aAEZ,CACI,KAAQ,qBAIpB,CACI,KAAQ,KACR,OAAU,CACN,CACI,KAAQ,eAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,sBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,kCAEZ,CACI,KAAQ,qBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,0BAIpB,CACI,KAAQ,WACR,OAAU,CACN,CACI,KAAQ,QAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,eAIpB,CACI,KAAQ,oBACR,OAAU,CACN,CACI,KAAQ,mBAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,sBAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,sBAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,sBAEZ,CACI,KAAQ,wBAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,eACR,OAAU,CACN,CACI,KAAQ,UAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,UACR,OAAU,CACN,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,WAIpB,CACI,KAAQ,aACR,OAAU,CACN,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,UACR,OAAU,CACN,CACI,KAAQ,WAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,UAIpB,CACI,KAAQ,OACR,OAAU,CACN,CACI,KAAQ,OAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,eAIpB,CACI,KAAQ,cACR,OAAU,CACN,CACI,KAAQ,YAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,eAIpB,CACI,KAAQ,WACR,OAAU,CACN,CACI,KAAQ,aAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,oBAIpB,CACI,KAAQ,OACR,OAAU,CACN,CACI,KAAQ,aAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,WAIpB,CACI,KAAQ,QACR,OAAU,CACN,CACI,KAAQ,SAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,OAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,SAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,QAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,uBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,mBAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,kBAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,cAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,iBAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,gBAEZ,CACI,KAAQ,WAEZ,CACI,KAAQ,aAIpB,CACI,KAAQ,YACR,OAAU,CACN,CACI,KAAQ,oBAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,oBAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,aAEZ,CACI,KAAQ,YAEZ,CACI,KAAQ,UAEZ,CACI,KAAQ,eAEZ,CACI,KAAQ,cAIpB,CACI,KAAQ,WACR,OAAU,CACN,CACI,KAAQ,QACR,YAAe,CACX,KAAQ,WACR,MAAS,2DAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mCAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mCAGjB,CACI,KAAQ,UACR,YAAe,CACX,KAAQ,WACR,MAAS,sCAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mCAGjB,CACI,KAAQ,OACR,YAAe,CACX,KAAQ,WACR,MAAS,mCAGjB,CACI,KAAQ,SACR,YAAe,CACX,KAAQ,WACR,MAAS,yCCj5L7B,GAAiC,WACjC,SAASC,EAAgBv+D,GACrBhQ,KAAK4mD,cAAgB,GACrB5mD,KAAKwuE,kBAAoD,IAAnCx+D,EAAQy+D,uBAAkCz+D,EAAQ0+D,qBAAuB,IAanG,OAXAH,EAAgBn1E,UAAUo1E,iBAAmB,SAAUG,EAASC,GAC5D,IAAIp1E,EACJwG,KAAK4mD,cAAgB,GACjB+nB,GACA3uE,KAAK4mD,cAAcxpD,KAAK,IAAI2jD,GAAiB,QAASutB,MAEzD90E,EAAKwG,KAAK4mD,eAAexpD,KAAKyE,MAAMrI,EAAIo1E,IAE7CL,EAAgBn1E,UAAUytD,iBAAmB,WACzC,OAAO7mD,KAAK4mD,eAET2nB,EAhByB,GCehCM,GAAgC,GAC7B,SAASC,GAAmB9+D,QACf,IAAZA,IAAsBA,EAAU6+D,IACpC,IAAI7oB,EAAc,IAAI,GAAgBh2C,GAClC++D,EAAY,IAAI,GAAU/+D,EAASg2C,GACnCgpB,EAAiB,IAAI,GAAeh/D,EAASg2C,GACjD,MAAO,CACHwoB,iBAAkBxoB,EAAYwoB,iBAAiBx1E,KAAKgtD,GACpDvL,cAAeA,GACfw0B,kBAAmB,SAAUt5B,GAAY,OAAOr6C,GAAMq6C,EAASpS,YAC/DkjB,WAAYuoB,EAAevoB,WAAWztD,KAAKg2E,GAC3C5oB,YAAa4oB,EAAe5oB,YAAYptD,KAAKg2E,GAC7C9oB,0BAA2B8oB,EAAe9oB,0BAA0BltD,KAAKg2E,GACzE1jB,QAASyjB,EAAUzjB,QAAQtyD,KAAK+1E,GAChChwE,OAAQ,GACRwrE,uBAAwBA,GACxBN,kBAAmBA,GACnBY,oBAAqBA,GACrB2B,iBAAkBA,GAClBM,mBAAoBA,GACpBjiB,cAAemkB,EAAenkB,cAAc7xD,KAAKg2E,GACjD3D,SAAUA,GACVI,wBAAyBA,GACzByD,uBAAwBvD,GACxBA,wBAAyBA,IAG1B,SAASwD,GAAoBpyE,EAAIikD,GACpC,OAAO,IAAID,GAAiBhkD,EAAIikD,GC7CpC,IAAIouB,GAAsC,WAStC,OARAA,GAAWl3E,OAAOkoE,QAAU,SAAS1nE,GACjC,IAAK,IAAIa,EAAG/B,EAAI,EAAGyB,EAAIkF,UAAUtB,OAAQrF,EAAIyB,EAAGzB,IAE5C,IAAK,IAAI8B,KADTC,EAAI4E,UAAU3G,GACA+B,EAAOrB,OAAOkB,UAAUC,eAAe1B,KAAK4B,EAAGD,KACzDZ,EAAEY,GAAKC,EAAED,IAEjB,OAAOZ,GAEJ02E,GAASvtE,MAAM7B,KAAM7B,YAE5B,GAAwC,SAAU6kC,EAASC,EAAYtgC,EAAGugC,GAC1E,SAASC,EAAM1qC,GAAS,OAAOA,aAAiBkK,EAAIlK,EAAQ,IAAIkK,GAAE,SAAUnF,GAAWA,EAAQ/E,MAC/F,OAAO,IAAKkK,IAAMA,EAAIpF,WAAU,SAAUC,EAASoX,GAC/C,SAASwuB,EAAU3qC,GAAS,IAAM4qC,EAAKH,EAAUj9B,KAAKxN,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACpF,SAAS4nC,EAAS7qC,GAAS,IAAM4qC,EAAKH,EAAU,SAASzqC,IAAW,MAAOiD,GAAKkZ,EAAOlZ,IACvF,SAAS2nC,EAAKj+B,GAAUA,EAAOc,KAAO1I,EAAQ4H,EAAO3M,OAAS0qC,EAAM/9B,EAAO3M,OAAOgF,KAAK2lC,EAAWE,GAClGD,GAAMH,EAAYA,EAAUrhC,MAAMmhC,EAASC,GAAc,KAAKh9B,YAGlE,GAA4C,SAAU+8B,EAASsf,GAC/D,IAAsG7jD,EAAGsD,EAAGrJ,EAAGgH,EAA3G+C,EAAI,CAAEqpC,MAAO,EAAGyW,KAAM,WAAa,GAAW,EAAP7pD,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAO8pD,KAAM,GAAIC,IAAK,IAChG,OAAO/iD,EAAI,CAAEuG,KAAMy8C,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,oBAAXnqD,SAA0BmH,EAAEnH,OAAOkN,UAAY,WAAa,OAAOzF,OAAUN,EACvJ,SAASgjD,EAAKzpD,GAAK,OAAO,SAAU8H,GAAK,OAAOsiC,EAAK,CAACpqC,EAAG8H,KACzD,SAASsiC,EAAKsf,GACV,GAAIlkD,EAAG,MAAM,IAAIb,UAAU,mCAC3B,MAAO6E,EAAG,IACN,GAAIhE,EAAI,EAAGsD,IAAMrJ,EAAY,EAARiqD,EAAG,GAAS5gD,EAAE,UAAY4gD,EAAG,GAAK5gD,EAAE,YAAcrJ,EAAIqJ,EAAE,YAAcrJ,EAAEf,KAAKoK,GAAI,GAAKA,EAAEkE,SAAWvN,EAAIA,EAAEf,KAAKoK,EAAG4gD,EAAG,KAAKz8C,KAAM,OAAOxN,EAE3J,OADIqJ,EAAI,EAAGrJ,IAAGiqD,EAAK,CAAS,EAARA,EAAG,GAAQjqD,EAAED,QACzBkqD,EAAG,IACP,KAAK,EAAG,KAAK,EAAGjqD,EAAIiqD,EAAI,MACxB,KAAK,EAAc,OAAXlgD,EAAEqpC,QAAgB,CAAErzC,MAAOkqD,EAAG,GAAIz8C,MAAM,GAChD,KAAK,EAAGzD,EAAEqpC,QAAS/pC,EAAI4gD,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKlgD,EAAEggD,IAAIG,MAAOngD,EAAE+/C,KAAKI,MAAO,SACxC,QACI,GAAMlqD,EAAI+J,EAAE+/C,OAAM9pD,EAAIA,EAAEmE,OAAS,GAAKnE,EAAEA,EAAEmE,OAAS,MAAkB,IAAV8lD,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAElgD,EAAI,EAAG,SACjG,GAAc,IAAVkgD,EAAG,MAAcjqD,GAAMiqD,EAAG,GAAKjqD,EAAE,IAAMiqD,EAAG,GAAKjqD,EAAE,IAAM,CAAE+J,EAAEqpC,MAAQ6W,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYlgD,EAAEqpC,MAAQpzC,EAAE,GAAI,CAAE+J,EAAEqpC,MAAQpzC,EAAE,GAAIA,EAAIiqD,EAAI,MAC7D,GAAIjqD,GAAK+J,EAAEqpC,MAAQpzC,EAAE,GAAI,CAAE+J,EAAEqpC,MAAQpzC,EAAE,GAAI+J,EAAEggD,IAAIrlD,KAAKulD,GAAK,MACvDjqD,EAAE,IAAI+J,EAAEggD,IAAIG,MAChBngD,EAAE+/C,KAAKI,MAAO,SAEtBD,EAAKL,EAAK3qD,KAAKqrC,EAASvgC,GAC1B,MAAO/G,GAAKinD,EAAK,CAAC,EAAGjnD,GAAIqG,EAAI,EAAK,QAAUtD,EAAI/F,EAAI,EACtD,GAAY,EAARiqD,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAElqD,MAAOkqD,EAAG,GAAKA,EAAG,QAAK,EAAQz8C,MAAM,KAI9E,GAA4B,WAC5B,SAASmpE,EAAWhnC,EAAKJ,GACrBjoC,KAAKsvE,KAAOjnC,EACZroC,KAAKuvE,kBAAoBtnC,EAAWunC,iBACpCxvE,KAAKq2C,YAAcpO,EAAWuJ,WAC9B,IAAI90C,EAAOsD,KAAKuvE,kBAAkB7yE,KAC9B+xE,EAAkC,OAAT/xE,QAA0B,IAATA,OAAkB,EAASA,EAAK+xE,uBAC1EC,EAAsB,GAC1B,GAAa,OAAThyE,QAA0B,IAATA,OAAkB,EAASA,EAAKkqD,cACjD,IAAK,IAAI7pD,KAAML,EAAKkqD,cAChB8nB,EAAoBtxE,KAAK,GAAgCL,EAAIL,EAAKkqD,cAAc7pD,KAGxFiD,KAAKyvE,iBAAmB,GAA+B,CAAEhB,uBAAwBA,EAAwBC,oBAAqBA,IA2GlI,OAzGAW,EAAWj2E,UAAUqtD,WAAa,SAAUx8B,EAAKsC,GAC7C,OAAO,GAAUvsB,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAUgK,EACd,OAAO,GAAY3/C,MAAM,SAAUxG,GAG/B,OAFAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC01B,EAAe3/C,KAAKyvE,iBAAiBR,kBAAkBt5B,GAChD,CAAC,EAAcp4C,QAAQC,QAAQwC,KAAKyvE,iBAAiBhpB,WAAW9Q,EAAUppB,EAAUozB,EAAc3/C,KAAKuvE,mBAAqBvvE,KAAKuvE,kBAAkBI,kBAItKN,EAAWj2E,UAAU2F,OAAS,SAAUkrB,EAAKqC,EAAOtc,GAChD,OAAO,GAAUhQ,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAUi6B,EAAmBC,EACjC,OAAO,GAAY7vE,MAAM,SAAUxG,GAI/B,OAHAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC2lD,EAAoBR,GAASA,GAAS,GAAIpvE,KAAKuvE,kBAAkBxwE,QAASiR,GAC1E6/D,EAAY7vE,KAAKyvE,iBAAiB1wE,OAAO42C,EAAUrpB,EAAOsjD,GACnD,CAAC,EAAcryE,QAAQC,QAAQqyE,WAIlDR,EAAWj2E,UAAUkyD,QAAU,SAAUrhC,EAAKsC,GAC1C,OAAO,GAAUvsB,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAUgK,EAAcrH,EAC5B,OAAO,GAAYt4C,MAAM,SAAUxG,GAI/B,OAHAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC01B,EAAe3/C,KAAKyvE,iBAAiBR,kBAAkBt5B,GACvD2C,EAAQt4C,KAAKyvE,iBAAiBnkB,QAAQ3V,EAAUppB,EAAUozB,GACnD,CAAC,EAAcpiD,QAAQC,QAAQ86C,WAIlD+2B,EAAWj2E,UAAUmxE,uBAAyB,SAAUtgD,EAAKsC,GACzD,OAAO,GAAUvsB,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAUgK,EAAcmwB,EAC5B,OAAO,GAAY9vE,MAAM,SAAUxG,GAI/B,OAHAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC01B,EAAe3/C,KAAKyvE,iBAAiBR,kBAAkBt5B,GACvDm6B,EAAa9vE,KAAKyvE,iBAAiBlF,uBAAuB50B,EAAUppB,EAAUozB,GACvE,CAAC,EAAcpiD,QAAQC,QAAQsyE,WAIlDT,EAAWj2E,UAAU6wE,kBAAoB,SAAUhgD,GAC/C,OAAO,GAAUjqB,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAUo6B,EACd,OAAO,GAAY/vE,MAAM,SAAUxG,GAG/B,OAFAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC8lD,EAAQ/vE,KAAKyvE,iBAAiBxF,kBAAkBt0B,EAAU,MACnD,CAAC,EAAcp4C,QAAQC,QAAQuyE,WAIlDV,EAAWj2E,UAAUyxE,oBAAsB,SAAU5gD,GACjD,OAAO,GAAUjqB,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAUgK,EAAcmrB,EAC5B,OAAO,GAAY9qE,MAAM,SAAUxG,GAI/B,OAHAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC01B,EAAe3/C,KAAKyvE,iBAAiBR,kBAAkBt5B,GACvDm1B,EAAU9qE,KAAKyvE,iBAAiB5E,oBAAoBl1B,EAAUgK,GACvD,CAAC,EAAcpiD,QAAQC,QAAQstE,WAIlDuE,EAAWj2E,UAAUozE,iBAAmB,SAAUviD,EAAKmS,GACnD,OAAO,GAAUp8B,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAU5R,EACd,OAAO,GAAY/jC,MAAM,SAAUxG,GAG/B,OAFAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC8Z,EAAS/jC,KAAKyvE,iBAAiBjD,iBAAiB72B,EAAUvZ,GACnD,CAAC,EAAc7+B,QAAQC,QAAQumC,WAIlDsrC,EAAWj2E,UAAU0zE,mBAAqB,SAAU7iD,EAAK8iD,GACrD,OAAO,GAAU/sE,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAU5R,EACd,OAAO,GAAY/jC,MAAM,SAAUxG,GAG/B,OAFAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC8Z,EAAS/jC,KAAKyvE,iBAAiB3C,mBAAmBn3B,EAAUo3B,GACrD,CAAC,EAAcxvE,QAAQC,QAAQumC,WAIlDsrC,EAAWj2E,UAAUiyE,SAAW,SAAUphD,EAAKsC,EAAU++C,GACrD,OAAO,GAAUtrE,UAAM,OAAQ,GAAQ,WACnC,IAAI21C,EAAUgK,EAAcqwB,EAC5B,OAAO,GAAYhwE,MAAM,SAAUxG,GAI/B,OAHAm8C,EAAW31C,KAAK0vE,iBAAiBzlD,GACjC01B,EAAe3/C,KAAKyvE,iBAAiBR,kBAAkBt5B,GACvDq6B,EAAUhwE,KAAKyvE,iBAAiBpE,SAAS11B,EAAUppB,EAAU++C,EAAS3rB,GAC/D,CAAC,EAAcpiD,QAAQC,QAAQwyE,WAIlDX,EAAWj2E,UAAUs2E,iBAAmB,SAAUzlD,GAE9C,IADA,IAAIgmD,EAASjwE,KAAKsvE,KAAKhnC,kBACdS,EAAK,EAAGmnC,EAAWD,EAAQlnC,EAAKmnC,EAASrzE,OAAQksC,IAAM,CAC5D,IAAIjP,EAAQo2C,EAASnnC,GACrB,GAAIjP,EAAM7P,IAAIrpB,aAAeqpB,EACzB,OAAO,GAAyBnxB,OAAOmxB,EAAKjqB,KAAKq2C,YAAavc,EAAMkX,QAASlX,EAAMq2C,YAG3F,OAAO,MAEJd,EAxHoB,GC9C/B90E,KAAKquC,UAAY,WAEb,IAAkB,SAAUP,EAAKJ,GAC7B,OAAO,IAAI,GAAWI,EAAKJ,Q,mCCTnC,kIAKA,IAAImoC,EAEJ,GAA8B,qBAAnB,OAAQ11E,QAA4D,qBAA3B,OAAQA,OAAOC,QAAyB,CACxF,MAAM01E,EAAiB,OAAQ31E,OAAOC,QACtCy1E,EAAc,CACV,eAAiB,OAAOC,EAAep1E,UACvC,WAAa,OAAOo1E,EAAejtE,MACnC,UAAY,OAAOitE,EAAen1E,KAClC,MAAQ,OAAOm1E,EAAejyE,OAC9B,SAASnB,GAAY,OAAO,eAAaA,UAK7CmzE,EADwB,qBAAZz1E,EACE,CACV,eAAiB,OAAOA,EAAQM,UAChC,WAAa,OAAON,EAAQyI,MAC5B,UAAY,OAAO,8CACnB,MAAQ,OAAO,6CAAY,eAAiBzI,EAAQyD,OACpD,SAASnB,GAAY,OAAOtC,EAAQ0C,SAASJ,KAKnC,CAEV,eAAiB,OAAO,OAAY,QAAU,OAAc,SAAW,SACvE,aACA,SAASA,GAAY,OAAO,eAAaA,IAEzC,UAAY,MAAO,IACnB,MAAQ,MAAO,MAShB,MAAMmB,EAAMgyE,EAAYhyE,IAOlBlD,EAAMk1E,EAAYl1E,IAKlBD,EAAWm1E,EAAYn1E,W,yCCzDpC,IAAIyE,EAGJA,EAAI,WACH,OAAOM,KADJ,GAIJ,IAECN,EAAIA,GAAK,IAAImyC,SAAS,cAAb,GACR,MAAOn2C,GAEc,kBAAX40E,SAAqB5wE,EAAI4wE,QAOrC/4E,EAAOD,QAAUoI,G,sBCnBjB,YA4BA,SAAS6wE,EAAeC,EAAOjqD,GAG7B,IADA,IAAI4U,EAAK,EACA3jC,EAAIg5E,EAAM3zE,OAAS,EAAGrF,GAAK,EAAGA,IAAK,CAC1C,IAAI6vB,EAAOmpD,EAAMh5E,GACJ,MAAT6vB,EACFmpD,EAAMxzE,OAAOxF,EAAG,GACE,OAAT6vB,GACTmpD,EAAMxzE,OAAOxF,EAAG,GAChB2jC,KACSA,IACTq1C,EAAMxzE,OAAOxF,EAAG,GAChB2jC,KAKJ,GAAI5U,EACF,KAAO4U,IAAMA,EACXq1C,EAAM/C,QAAQ,MAIlB,OAAO+C,EAmJT,SAAS3xE,EAASuB,GACI,kBAATA,IAAmBA,GAAc,IAE5C,IAGI5I,EAHA0Z,EAAQ,EACRsX,GAAO,EACPC,GAAe,EAGnB,IAAKjxB,EAAI4I,EAAKvD,OAAS,EAAGrF,GAAK,IAAKA,EAClC,GAA2B,KAAvB4I,EAAKpC,WAAWxG,IAGhB,IAAKixB,EAAc,CACjBvX,EAAQ1Z,EAAI,EACZ,YAEgB,IAATgxB,IAGXC,GAAe,EACfD,EAAMhxB,EAAI,GAId,OAAa,IAATgxB,EAAmB,GAChBpoB,EAAKlC,MAAMgT,EAAOsX,GA8D3B,SAASjiB,EAAQkqE,EAAIhyE,GACjB,GAAIgyE,EAAGlqE,OAAQ,OAAOkqE,EAAGlqE,OAAO9H,GAEhC,IADA,IAAIwM,EAAM,GACDzT,EAAI,EAAGA,EAAIi5E,EAAG5zE,OAAQrF,IACvBiH,EAAEgyE,EAAGj5E,GAAIA,EAAGi5E,IAAKxlE,EAAI7N,KAAKqzE,EAAGj5E,IAErC,OAAOyT,EA3OX3T,EAAQkG,QAAU,WAIhB,IAHA,IAAI+qB,EAAe,GACfrB,GAAmB,EAEd1vB,EAAI2G,UAAUtB,OAAS,EAAGrF,IAAM,IAAM0vB,EAAkB1vB,IAAK,CACpE,IAAI4I,EAAQ5I,GAAK,EAAK2G,UAAU3G,GAAKmD,EAAQyD,MAG7C,GAAoB,kBAATgC,EACT,MAAM,IAAIxC,UAAU,6CACVwC,IAIZmoB,EAAenoB,EAAO,IAAMmoB,EAC5BrB,EAAsC,MAAnB9mB,EAAK6B,OAAO,IAWjC,OAJAsmB,EAAegoD,EAAehqE,EAAOgiB,EAAa9a,MAAM,MAAM,SAASnU,GACrE,QAASA,MACN4tB,GAAkB3oB,KAAK,MAEnB2oB,EAAmB,IAAM,IAAMqB,GAAiB,KAK3DjxB,EAAQ+G,UAAY,SAAS+B,GAC3B,IAAI9B,EAAahH,EAAQgH,WAAW8B,GAChCswE,EAAqC,MAArBxuE,EAAO9B,GAAO,GAclC,OAXAA,EAAOmwE,EAAehqE,EAAOnG,EAAKqN,MAAM,MAAM,SAASnU,GACrD,QAASA,MACNgF,GAAYC,KAAK,KAEjB6B,GAAS9B,IACZ8B,EAAO,KAELA,GAAQswE,IACVtwE,GAAQ,MAGF9B,EAAa,IAAM,IAAM8B,GAInC9I,EAAQgH,WAAa,SAAS8B,GAC5B,MAA0B,MAAnBA,EAAK6B,OAAO,IAIrB3K,EAAQiH,KAAO,WACb,IAAI0Y,EAAQlX,MAAM3G,UAAU8E,MAAMvG,KAAKwG,UAAW,GAClD,OAAO7G,EAAQ+G,UAAUkI,EAAO0Q,GAAO,SAAS3d,EAAGmN,GACjD,GAAiB,kBAANnN,EACT,MAAM,IAAIsE,UAAU,0CAEtB,OAAOtE,KACNiF,KAAK,OAMVjH,EAAQkH,SAAW,SAAS6C,EAAM4F,GAIhC,SAASqqD,EAAKtqD,GAEZ,IADA,IAAIkK,EAAQ,EACLA,EAAQlK,EAAInK,OAAQqU,IACzB,GAAmB,KAAflK,EAAIkK,GAAe,MAIzB,IADA,IAAIsX,EAAMxhB,EAAInK,OAAS,EAChB2rB,GAAO,EAAGA,IACf,GAAiB,KAAbxhB,EAAIwhB,GAAa,MAGvB,OAAItX,EAAQsX,EAAY,GACjBxhB,EAAI9I,MAAMgT,EAAOsX,EAAMtX,EAAQ,GAfxC7P,EAAO/J,EAAQkG,QAAQ6D,GAAMa,OAAO,GACpC+E,EAAK3P,EAAQkG,QAAQyJ,GAAI/E,OAAO,GAsBhC,IALA,IAAIyuE,EAAYrf,EAAKjwD,EAAKoM,MAAM,MAC5BmjE,EAAUtf,EAAKrqD,EAAGwG,MAAM,MAExB5Q,EAASyS,KAAK+M,IAAIs0D,EAAU9zE,OAAQ+zE,EAAQ/zE,QAC5Cg0E,EAAkBh0E,EACbrF,EAAI,EAAGA,EAAIqF,EAAQrF,IAC1B,GAAIm5E,EAAUn5E,KAAOo5E,EAAQp5E,GAAI,CAC/Bq5E,EAAkBr5E,EAClB,MAIJ,IAAIs5E,EAAc,GAClB,IAASt5E,EAAIq5E,EAAiBr5E,EAAIm5E,EAAU9zE,OAAQrF,IAClDs5E,EAAY1zE,KAAK,MAKnB,OAFA0zE,EAAcA,EAAYpqE,OAAOkqE,EAAQ1yE,MAAM2yE,IAExCC,EAAYvyE,KAAK,MAG1BjH,EAAQ8H,IAAM,IACd9H,EAAQ+H,UAAY,IAEpB/H,EAAQsH,QAAU,SAAUwB,GAE1B,GADoB,kBAATA,IAAmBA,GAAc,IACxB,IAAhBA,EAAKvD,OAAc,MAAO,IAK9B,IAJA,IAAI+V,EAAOxS,EAAKpC,WAAW,GACvBirB,EAAmB,KAATrW,EACV4V,GAAO,EACPC,GAAe,EACVjxB,EAAI4I,EAAKvD,OAAS,EAAGrF,GAAK,IAAKA,EAEtC,GADAob,EAAOxS,EAAKpC,WAAWxG,GACV,KAATob,GACA,IAAK6V,EAAc,CACjBD,EAAMhxB,EACN,YAIJixB,GAAe,EAInB,OAAa,IAATD,EAAmBS,EAAU,IAAM,IACnCA,GAAmB,IAART,EAGN,IAEFpoB,EAAKlC,MAAM,EAAGsqB,IAiCvBlxB,EAAQuH,SAAW,SAAUuB,EAAMjB,GACjC,IAAIV,EAAII,EAASuB,GAIjB,OAHIjB,GAAOV,EAAEyD,QAAQ,EAAI/C,EAAItC,UAAYsC,IACvCV,EAAIA,EAAEyD,OAAO,EAAGzD,EAAE5B,OAASsC,EAAItC,SAE1B4B,GAGTnH,EAAQwH,QAAU,SAAUsB,GACN,kBAATA,IAAmBA,GAAc,IAQ5C,IAPA,IAAIwoB,GAAY,EACZC,EAAY,EACZL,GAAO,EACPC,GAAe,EAGfK,EAAc,EACTtxB,EAAI4I,EAAKvD,OAAS,EAAGrF,GAAK,IAAKA,EAAG,CACzC,IAAIob,EAAOxS,EAAKpC,WAAWxG,GAC3B,GAAa,KAATob,GASS,IAAT4V,IAGFC,GAAe,EACfD,EAAMhxB,EAAI,GAEC,KAATob,GAEkB,IAAdgW,EACFA,EAAWpxB,EACY,IAAhBsxB,IACPA,EAAc,IACK,IAAdF,IAGTE,GAAe,QArBb,IAAKL,EAAc,CACjBI,EAAYrxB,EAAI,EAChB,OAuBR,OAAkB,IAAdoxB,IAA4B,IAATJ,GAEH,IAAhBM,GAEgB,IAAhBA,GAAqBF,IAAaJ,EAAM,GAAKI,IAAaC,EAAY,EACjE,GAEFzoB,EAAKlC,MAAM0qB,EAAUJ,IAa9B,IAAItmB,EAA6B,MAApB,KAAKA,QAAQ,GACpB,SAAUoQ,EAAKpB,EAAOtU,GAAO,OAAO0V,EAAIpQ,OAAOgP,EAAOtU,IACtD,SAAU0V,EAAKpB,EAAOtU,GAEpB,OADIsU,EAAQ,IAAGA,EAAQoB,EAAIzV,OAASqU,GAC7BoB,EAAIpQ,OAAOgP,EAAOtU,M","file":"html.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"654a\");\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nconst LANGUAGE_DEFAULT = 'en';\nlet _isWindows = false;\nlet _isMacintosh = false;\nlet _isLinux = false;\nlet _isLinuxSnap = false;\nlet _isNative = false;\nlet _isWeb = false;\nlet _isIOS = false;\nlet _locale = undefined;\nlet _language = LANGUAGE_DEFAULT;\nlet _translationsConfigFile = undefined;\nlet _userAgent = undefined;\nexport const globals = (typeof self === 'object' ? self : typeof global === 'object' ? global : {});\nlet nodeProcess = undefined;\nif (typeof globals.vscode !== 'undefined' && typeof globals.vscode.process !== 'undefined') {\n // Native environment (sandboxed)\n nodeProcess = globals.vscode.process;\n}\nelse if (typeof process !== 'undefined') {\n // Native environment (non-sandboxed)\n nodeProcess = process;\n}\nconst isElectronRenderer = typeof ((_a = nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.versions) === null || _a === void 0 ? void 0 : _a.electron) === 'string' && nodeProcess.type === 'renderer';\n// Web environment\nif (typeof navigator === 'object' && !isElectronRenderer) {\n _userAgent = navigator.userAgent;\n _isWindows = _userAgent.indexOf('Windows') >= 0;\n _isMacintosh = _userAgent.indexOf('Macintosh') >= 0;\n _isIOS = (_userAgent.indexOf('Macintosh') >= 0 || _userAgent.indexOf('iPad') >= 0 || _userAgent.indexOf('iPhone') >= 0) && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0;\n _isLinux = _userAgent.indexOf('Linux') >= 0;\n _isWeb = true;\n _locale = navigator.language;\n _language = _locale;\n}\n// Native environment\nelse if (typeof nodeProcess === 'object') {\n _isWindows = (nodeProcess.platform === 'win32');\n _isMacintosh = (nodeProcess.platform === 'darwin');\n _isLinux = (nodeProcess.platform === 'linux');\n _isLinuxSnap = _isLinux && !!nodeProcess.env['SNAP'] && !!nodeProcess.env['SNAP_REVISION'];\n _locale = LANGUAGE_DEFAULT;\n _language = LANGUAGE_DEFAULT;\n const rawNlsConfig = nodeProcess.env['VSCODE_NLS_CONFIG'];\n if (rawNlsConfig) {\n try {\n const nlsConfig = JSON.parse(rawNlsConfig);\n const resolved = nlsConfig.availableLanguages['*'];\n _locale = nlsConfig.locale;\n // VSCode's default language is 'en'\n _language = resolved ? resolved : LANGUAGE_DEFAULT;\n _translationsConfigFile = nlsConfig._translationsConfigFile;\n }\n catch (e) {\n }\n }\n _isNative = true;\n}\n// Unknown environment\nelse {\n console.error('Unable to resolve platform.');\n}\nlet _platform = 0 /* Web */;\nif (_isMacintosh) {\n _platform = 1 /* Mac */;\n}\nelse if (_isWindows) {\n _platform = 3 /* Windows */;\n}\nelse if (_isLinux) {\n _platform = 2 /* Linux */;\n}\nexport const isWindows = _isWindows;\nexport const isMacintosh = _isMacintosh;\nexport const isLinux = _isLinux;\nexport const isNative = _isNative;\nexport const isWeb = _isWeb;\nexport const isIOS = _isIOS;\nexport const userAgent = _userAgent;\nexport const setImmediate = (function defineSetImmediate() {\n if (globals.setImmediate) {\n return globals.setImmediate.bind(globals);\n }\n if (typeof globals.postMessage === 'function' && !globals.importScripts) {\n let pending = [];\n globals.addEventListener('message', (e) => {\n if (e.data && e.data.vscodeSetImmediateId) {\n for (let i = 0, len = pending.length; i < len; i++) {\n const candidate = pending[i];\n if (candidate.id === e.data.vscodeSetImmediateId) {\n pending.splice(i, 1);\n candidate.callback();\n return;\n }\n }\n }\n });\n let lastId = 0;\n return (callback) => {\n const myId = ++lastId;\n pending.push({\n id: myId,\n callback: callback\n });\n globals.postMessage({ vscodeSetImmediateId: myId }, '*');\n };\n }\n if (typeof (nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.nextTick) === 'function') {\n return nodeProcess.nextTick.bind(nodeProcess);\n }\n const _promise = Promise.resolve();\n return (callback) => _promise.then(callback);\n})();\nexport const OS = (_isMacintosh || _isIOS ? 2 /* Macintosh */ : (_isWindows ? 1 /* Windows */ : 3 /* Linux */));\nlet _isLittleEndian = true;\nlet _isLittleEndianComputed = false;\nexport function isLittleEndian() {\n if (!_isLittleEndianComputed) {\n _isLittleEndianComputed = true;\n const test = new Uint8Array(2);\n test[0] = 1;\n test[1] = 2;\n const view = new Uint16Array(test.buffer);\n _isLittleEndian = (view[0] === (2 << 8) + 1);\n }\n return _isLittleEndian;\n}\n","var LIB;LIB=(()=>{\"use strict\";var t={470:t=>{function e(t){if(\"string\"!=typeof t)throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(t))}function r(t,e){for(var r,n=\"\",o=0,i=-1,a=0,h=0;h<=t.length;++h){if(h2){var s=n.lastIndexOf(\"/\");if(s!==n.length-1){-1===s?(n=\"\",o=0):o=(n=n.slice(0,s)).length-1-n.lastIndexOf(\"/\"),i=h,a=0;continue}}else if(2===n.length||1===n.length){n=\"\",o=0,i=h,a=0;continue}e&&(n.length>0?n+=\"/..\":n=\"..\",o=2)}else n.length>0?n+=\"/\"+t.slice(i+1,h):n=t.slice(i+1,h),o=h-i-1;i=h,a=0}else 46===r&&-1!==a?++a:a=-1}return n}var n={resolve:function(){for(var t,n=\"\",o=!1,i=arguments.length-1;i>=-1&&!o;i--){var a;i>=0?a=arguments[i]:(void 0===t&&(t=process.cwd()),a=t),e(a),0!==a.length&&(n=a+\"/\"+n,o=47===a.charCodeAt(0))}return n=r(n,!o),o?n.length>0?\"/\"+n:\"/\":n.length>0?n:\".\"},normalize:function(t){if(e(t),0===t.length)return\".\";var n=47===t.charCodeAt(0),o=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t=\".\"),t.length>0&&o&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return\".\";for(var t,r=0;r0&&(void 0===t?t=o:t+=\"/\"+o)}return void 0===t?\".\":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return\"\";if((t=n.resolve(t))===(r=n.resolve(r)))return\"\";for(var o=1;of){if(47===r.charCodeAt(h+c))return r.slice(h+c+1);if(0===c)return r.slice(h+c)}else a>f&&(47===t.charCodeAt(o+c)?u=c:0===c&&(u=0));break}var l=t.charCodeAt(o+c);if(l!==r.charCodeAt(h+c))break;47===l&&(u=c)}var p=\"\";for(c=o+u+1;c<=i;++c)c!==i&&47!==t.charCodeAt(c)||(0===p.length?p+=\"..\":p+=\"/..\");return p.length>0?p+r.slice(h+u):(h+=u,47===r.charCodeAt(h)&&++h,r.slice(h))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return\".\";for(var r=t.charCodeAt(0),n=47===r,o=-1,i=!0,a=t.length-1;a>=1;--a)if(47===(r=t.charCodeAt(a))){if(!i){o=a;break}}else i=!1;return-1===o?n?\"/\":\".\":n&&1===o?\"//\":t.slice(0,o)},basename:function(t,r){if(void 0!==r&&\"string\"!=typeof r)throw new TypeError('\"ext\" argument must be a string');e(t);var n,o=0,i=-1,a=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return\"\";var h=r.length-1,s=-1;for(n=t.length-1;n>=0;--n){var f=t.charCodeAt(n);if(47===f){if(!a){o=n+1;break}}else-1===s&&(a=!1,s=n+1),h>=0&&(f===r.charCodeAt(h)?-1==--h&&(i=n):(h=-1,i=s))}return o===i?i=s:-1===i&&(i=t.length),t.slice(o,i)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!a){o=n+1;break}}else-1===i&&(a=!1,i=n+1);return-1===i?\"\":t.slice(o,i)},extname:function(t){e(t);for(var r=-1,n=0,o=-1,i=!0,a=0,h=t.length-1;h>=0;--h){var s=t.charCodeAt(h);if(47!==s)-1===o&&(i=!1,o=h+1),46===s?-1===r?r=h:1!==a&&(a=1):-1!==r&&(a=-1);else if(!i){n=h+1;break}}return-1===r||-1===o||0===a||1===a&&r===o-1&&r===n+1?\"\":t.slice(r,o)},format:function(t){if(null===t||\"object\"!=typeof t)throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||\"\")+(e.ext||\"\");return r?r===e.root?r+n:r+\"/\"+n:n}(0,t)},parse:function(t){e(t);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(0===t.length)return r;var n,o=t.charCodeAt(0),i=47===o;i?(r.root=\"/\",n=1):n=0;for(var a=-1,h=0,s=-1,f=!0,u=t.length-1,c=0;u>=n;--u)if(47!==(o=t.charCodeAt(u)))-1===s&&(f=!1,s=u+1),46===o?-1===a?a=u:1!==c&&(c=1):-1!==a&&(c=-1);else if(!f){h=u+1;break}return-1===a||-1===s||0===c||1===c&&a===s-1&&a===h+1?-1!==s&&(r.base=r.name=0===h&&i?t.slice(1,s):t.slice(h,s)):(0===h&&i?(r.name=t.slice(1,a),r.base=t.slice(1,s)):(r.name=t.slice(h,a),r.base=t.slice(h,s)),r.ext=t.slice(a,s)),h>0?r.dir=t.slice(0,h-1):i&&(r.dir=\"/\"),r},sep:\"/\",delimiter:\":\",win32:null,posix:null};n.posix=n,t.exports=n},447:(t,e,r)=>{var n;if(r.r(e),r.d(e,{URI:()=>g,Utils:()=>O}),\"object\"==typeof process)n=\"win32\"===process.platform;else if(\"object\"==typeof navigator){var o=navigator.userAgent;n=o.indexOf(\"Windows\")>=0}var i,a,h=(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=/^\\w[\\w\\d+.-]*$/,f=/^\\//,u=/^\\/\\//,c=\"\",l=\"/\",p=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/,g=function(){function t(t,e,r,n,o,i){void 0===i&&(i=!1),\"object\"==typeof t?(this.scheme=t.scheme||c,this.authority=t.authority||c,this.path=t.path||c,this.query=t.query||c,this.fragment=t.fragment||c):(this.scheme=function(t,e){return t||e?t:\"file\"}(t,i),this.authority=e||c,this.path=function(t,e){switch(t){case\"https\":case\"http\":case\"file\":e?e[0]!==l&&(e=l+e):e=l}return e}(this.scheme,r||c),this.query=n||c,this.fragment=o||c,function(t,e){if(!t.scheme&&e)throw new Error('[UriError]: Scheme is missing: {scheme: \"\", authority: \"'+t.authority+'\", path: \"'+t.path+'\", query: \"'+t.query+'\", fragment: \"'+t.fragment+'\"}');if(t.scheme&&!s.test(t.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(t.path)if(t.authority){if(!f.test(t.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(u.test(t.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}(this,i))}return t.isUri=function(e){return e instanceof t||!!e&&\"string\"==typeof e.authority&&\"string\"==typeof e.fragment&&\"string\"==typeof e.path&&\"string\"==typeof e.query&&\"string\"==typeof e.scheme&&\"function\"==typeof e.fsPath&&\"function\"==typeof e.with&&\"function\"==typeof e.toString},Object.defineProperty(t.prototype,\"fsPath\",{get:function(){return C(this,!1)},enumerable:!1,configurable:!0}),t.prototype.with=function(t){if(!t)return this;var e=t.scheme,r=t.authority,n=t.path,o=t.query,i=t.fragment;return void 0===e?e=this.scheme:null===e&&(e=c),void 0===r?r=this.authority:null===r&&(r=c),void 0===n?n=this.path:null===n&&(n=c),void 0===o?o=this.query:null===o&&(o=c),void 0===i?i=this.fragment:null===i&&(i=c),e===this.scheme&&r===this.authority&&n===this.path&&o===this.query&&i===this.fragment?this:new v(e,r,n,o,i)},t.parse=function(t,e){void 0===e&&(e=!1);var r=p.exec(t);return r?new v(r[2]||c,x(r[4]||c),x(r[5]||c),x(r[7]||c),x(r[9]||c),e):new v(c,c,c,c,c)},t.file=function(t){var e=c;if(n&&(t=t.replace(/\\\\/g,l)),t[0]===l&&t[1]===l){var r=t.indexOf(l,2);-1===r?(e=t.substring(2),t=l):(e=t.substring(2,r),t=t.substring(r)||l)}return new v(\"file\",e,t,c,c)},t.from=function(t){return new v(t.scheme,t.authority,t.path,t.query,t.fragment)},t.prototype.toString=function(t){return void 0===t&&(t=!1),A(this,t)},t.prototype.toJSON=function(){return this},t.revive=function(e){if(e){if(e instanceof t)return e;var r=new v(e);return r._formatted=e.external,r._fsPath=e._sep===d?e.fsPath:null,r}return e},t}(),d=n?1:void 0,v=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._formatted=null,e._fsPath=null,e}return h(e,t),Object.defineProperty(e.prototype,\"fsPath\",{get:function(){return this._fsPath||(this._fsPath=C(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),e.prototype.toString=function(t){return void 0===t&&(t=!1),t?A(this,!0):(this._formatted||(this._formatted=A(this,!1)),this._formatted)},e.prototype.toJSON=function(){var t={$mid:1};return this._fsPath&&(t.fsPath=this._fsPath,t._sep=d),this._formatted&&(t.external=this._formatted),this.path&&(t.path=this.path),this.scheme&&(t.scheme=this.scheme),this.authority&&(t.authority=this.authority),this.query&&(t.query=this.query),this.fragment&&(t.fragment=this.fragment),t},e}(g),m=((a={})[58]=\"%3A\",a[47]=\"%2F\",a[63]=\"%3F\",a[35]=\"%23\",a[91]=\"%5B\",a[93]=\"%5D\",a[64]=\"%40\",a[33]=\"%21\",a[36]=\"%24\",a[38]=\"%26\",a[39]=\"%27\",a[40]=\"%28\",a[41]=\"%29\",a[42]=\"%2A\",a[43]=\"%2B\",a[44]=\"%2C\",a[59]=\"%3B\",a[61]=\"%3D\",a[32]=\"%20\",a);function y(t,e){for(var r=void 0,n=-1,o=0;o=97&&i<=122||i>=65&&i<=90||i>=48&&i<=57||45===i||46===i||95===i||126===i||e&&47===i)-1!==n&&(r+=encodeURIComponent(t.substring(n,o)),n=-1),void 0!==r&&(r+=t.charAt(o));else{void 0===r&&(r=t.substr(0,o));var a=m[i];void 0!==a?(-1!==n&&(r+=encodeURIComponent(t.substring(n,o)),n=-1),r+=a):-1===n&&(n=o)}}return-1!==n&&(r+=encodeURIComponent(t.substring(n))),void 0!==r?r:t}function b(t){for(var e=void 0,r=0;r1&&\"file\"===t.scheme?\"//\"+t.authority+t.path:47===t.path.charCodeAt(0)&&(t.path.charCodeAt(1)>=65&&t.path.charCodeAt(1)<=90||t.path.charCodeAt(1)>=97&&t.path.charCodeAt(1)<=122)&&58===t.path.charCodeAt(2)?e?t.path.substr(1):t.path[1].toLowerCase()+t.path.substr(2):t.path,n&&(r=r.replace(/\\//g,\"\\\\\")),r}function A(t,e){var r=e?b:y,n=\"\",o=t.scheme,i=t.authority,a=t.path,h=t.query,s=t.fragment;if(o&&(n+=o,n+=\":\"),(i||\"file\"===o)&&(n+=l,n+=l),i){var f=i.indexOf(\"@\");if(-1!==f){var u=i.substr(0,f);i=i.substr(f+1),-1===(f=u.indexOf(\":\"))?n+=r(u,!1):(n+=r(u.substr(0,f),!1),n+=\":\",n+=r(u.substr(f+1),!1)),n+=\"@\"}-1===(f=(i=i.toLowerCase()).indexOf(\":\"))?n+=r(i,!1):(n+=r(i.substr(0,f),!1),n+=i.substr(f))}if(a){if(a.length>=3&&47===a.charCodeAt(0)&&58===a.charCodeAt(2))(c=a.charCodeAt(1))>=65&&c<=90&&(a=\"/\"+String.fromCharCode(c+32)+\":\"+a.substr(3));else if(a.length>=2&&58===a.charCodeAt(1)){var c;(c=a.charCodeAt(0))>=65&&c<=90&&(a=String.fromCharCode(c+32)+\":\"+a.substr(2))}n+=r(a,!0)}return h&&(n+=\"?\",n+=r(h,!1)),s&&(n+=\"#\",n+=e?s:y(s,!1)),n}function w(t){try{return decodeURIComponent(t)}catch(e){return t.length>3?t.substr(0,3)+w(t.substr(3)):t}}var _=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function x(t){return t.match(_)?t.replace(_,(function(t){return w(t)})):t}var O,P=r(470),j=function(){for(var t=0,e=0,r=arguments.length;e{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r(447)})();export const{URI,Utils}=LIB;\n","exports.nextTick = function nextTick(fn) {\n var args = Array.prototype.slice.call(arguments);\n args.shift();\n setTimeout(function () {\n fn.apply(null, args);\n }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\nexport class ErrorHandler {\n constructor() {\n this.listeners = [];\n this.unexpectedErrorHandler = function (e) {\n setTimeout(() => {\n if (e.stack) {\n throw new Error(e.message + '\\n\\n' + e.stack);\n }\n throw e;\n }, 0);\n };\n }\n emit(e) {\n this.listeners.forEach((listener) => {\n listener(e);\n });\n }\n onUnexpectedError(e) {\n this.unexpectedErrorHandler(e);\n this.emit(e);\n }\n // For external errors, we don't want the listeners to be called\n onUnexpectedExternalError(e) {\n this.unexpectedErrorHandler(e);\n }\n}\nexport const errorHandler = new ErrorHandler();\nexport function onUnexpectedError(e) {\n // ignore errors from cancelled promises\n if (!isPromiseCanceledError(e)) {\n errorHandler.onUnexpectedError(e);\n }\n return undefined;\n}\nexport function onUnexpectedExternalError(e) {\n // ignore errors from cancelled promises\n if (!isPromiseCanceledError(e)) {\n errorHandler.onUnexpectedExternalError(e);\n }\n return undefined;\n}\nexport function transformErrorForSerialization(error) {\n if (error instanceof Error) {\n let { name, message } = error;\n const stack = error.stacktrace || error.stack;\n return {\n $isError: true,\n name,\n message,\n stack\n };\n }\n // return as is\n return error;\n}\nconst canceledName = 'Canceled';\n/**\n * Checks if the given error is a promise in canceled state\n */\nexport function isPromiseCanceledError(error) {\n return error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n/**\n * Returns an error that signals cancellation.\n */\nexport function canceled() {\n const error = new Error(canceledName);\n error.name = error.message;\n return error;\n}\nexport function illegalArgument(name) {\n if (name) {\n return new Error(`Illegal argument: ${name}`);\n }\n else {\n return new Error('Illegal argument');\n }\n}\nexport function illegalState(name) {\n if (name) {\n return new Error(`Illegal state: ${name}`);\n }\n else {\n return new Error('Illegal state');\n }\n}\nexport class NotSupportedError extends Error {\n constructor(message) {\n super('NotSupported');\n if (message) {\n this.message = message;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function once(fn) {\n const _this = this;\n let didCall = false;\n let result;\n return function () {\n if (didCall) {\n return result;\n }\n didCall = true;\n result = fn.apply(_this, arguments);\n return result;\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport var Iterable;\n(function (Iterable) {\n function is(thing) {\n return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';\n }\n Iterable.is = is;\n const _empty = Object.freeze([]);\n function empty() {\n return _empty;\n }\n Iterable.empty = empty;\n function* single(element) {\n yield element;\n }\n Iterable.single = single;\n function from(iterable) {\n return iterable || _empty;\n }\n Iterable.from = from;\n function isEmpty(iterable) {\n return !iterable || iterable[Symbol.iterator]().next().done === true;\n }\n Iterable.isEmpty = isEmpty;\n function first(iterable) {\n return iterable[Symbol.iterator]().next().value;\n }\n Iterable.first = first;\n function some(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return true;\n }\n }\n return false;\n }\n Iterable.some = some;\n function find(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return element;\n }\n }\n return undefined;\n }\n Iterable.find = find;\n function* filter(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n yield element;\n }\n }\n }\n Iterable.filter = filter;\n function* map(iterable, fn) {\n let index = 0;\n for (const element of iterable) {\n yield fn(element, index++);\n }\n }\n Iterable.map = map;\n function* concat(...iterables) {\n for (const iterable of iterables) {\n for (const element of iterable) {\n yield element;\n }\n }\n }\n Iterable.concat = concat;\n function* concatNested(iterables) {\n for (const iterable of iterables) {\n for (const element of iterable) {\n yield element;\n }\n }\n }\n Iterable.concatNested = concatNested;\n function reduce(iterable, reducer, initialValue) {\n let value = initialValue;\n for (const element of iterable) {\n value = reducer(value, element);\n }\n return value;\n }\n Iterable.reduce = reduce;\n /**\n * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n */\n function* slice(arr, from, to = arr.length) {\n if (from < 0) {\n from += arr.length;\n }\n if (to < 0) {\n to += arr.length;\n }\n else if (to > arr.length) {\n to = arr.length;\n }\n for (; from < to; from++) {\n yield arr[from];\n }\n }\n Iterable.slice = slice;\n /**\n * Consumes `atMost` elements from iterable and returns the consumed elements,\n * and an iterable for the rest of the elements.\n */\n function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n const consumed = [];\n if (atMost === 0) {\n return [consumed, iterable];\n }\n const iterator = iterable[Symbol.iterator]();\n for (let i = 0; i < atMost; i++) {\n const next = iterator.next();\n if (next.done) {\n return [consumed, Iterable.empty()];\n }\n consumed.push(next.value);\n }\n return [consumed, { [Symbol.iterator]() { return iterator; } }];\n }\n Iterable.consume = consume;\n /**\n * Returns whether the iterables are the same length and all items are\n * equal using the comparator function.\n */\n function equals(a, b, comparator = (at, bt) => at === bt) {\n const ai = a[Symbol.iterator]();\n const bi = b[Symbol.iterator]();\n while (true) {\n const an = ai.next();\n const bn = bi.next();\n if (an.done !== bn.done) {\n return false;\n }\n else if (an.done) {\n return true;\n }\n else if (!comparator(an.value, bn.value)) {\n return false;\n }\n }\n }\n Iterable.equals = equals;\n})(Iterable || (Iterable = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { once } from './functional.js';\nimport { Iterable } from './iterator.js';\n/**\n * Enables logging of potentially leaked disposables.\n *\n * A disposable is considered leaked if it is not disposed or not registered as the child of\n * another disposable. This tracking is very simple an only works for classes that either\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\n */\nconst TRACK_DISPOSABLES = false;\nlet disposableTracker = null;\nexport function setDisposableTracker(tracker) {\n disposableTracker = tracker;\n}\nif (TRACK_DISPOSABLES) {\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n setDisposableTracker(new class {\n trackDisposable(x) {\n const stack = new Error('Potentially leaked disposable').stack;\n setTimeout(() => {\n if (!x[__is_disposable_tracked__]) {\n console.log(stack);\n }\n }, 3000);\n }\n setParent(child, parent) {\n if (child && child !== Disposable.None) {\n try {\n child[__is_disposable_tracked__] = true;\n }\n catch (_a) {\n // noop\n }\n }\n }\n markAsDisposed(disposable) {\n if (disposable && disposable !== Disposable.None) {\n try {\n disposable[__is_disposable_tracked__] = true;\n }\n catch (_a) {\n // noop\n }\n }\n }\n markAsSingleton(disposable) { }\n });\n}\nfunction trackDisposable(x) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.trackDisposable(x);\n return x;\n}\nfunction markAsDisposed(disposable) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.markAsDisposed(disposable);\n}\nfunction setParentOfDisposable(child, parent) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.setParent(child, parent);\n}\nfunction setParentOfDisposables(children, parent) {\n if (!disposableTracker) {\n return;\n }\n for (const child of children) {\n disposableTracker.setParent(child, parent);\n }\n}\n/**\n * Indicates that the given object is a singleton which does not need to be disposed.\n*/\nexport function markAsSingleton(singleton) {\n disposableTracker === null || disposableTracker === void 0 ? void 0 : disposableTracker.markAsSingleton(singleton);\n return singleton;\n}\nexport class MultiDisposeError extends Error {\n constructor(errors) {\n super(`Encountered errors while disposing of store. Errors: [${errors.join(', ')}]`);\n this.errors = errors;\n }\n}\nexport function isDisposable(thing) {\n return typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nexport function dispose(arg) {\n if (Iterable.is(arg)) {\n let errors = [];\n for (const d of arg) {\n if (d) {\n try {\n d.dispose();\n }\n catch (e) {\n errors.push(e);\n }\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n else if (errors.length > 1) {\n throw new MultiDisposeError(errors);\n }\n return Array.isArray(arg) ? [] : arg;\n }\n else if (arg) {\n arg.dispose();\n return arg;\n }\n}\nexport function combinedDisposable(...disposables) {\n const parent = toDisposable(() => dispose(disposables));\n setParentOfDisposables(disposables, parent);\n return parent;\n}\nexport function toDisposable(fn) {\n const self = trackDisposable({\n dispose: once(() => {\n markAsDisposed(self);\n fn();\n })\n });\n return self;\n}\nexport class DisposableStore {\n constructor() {\n this._toDispose = new Set();\n this._isDisposed = false;\n trackDisposable(this);\n }\n /**\n * Dispose of all registered disposables and mark this object as disposed.\n *\n * Any future disposables added to this object will be disposed of on `add`.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n markAsDisposed(this);\n this._isDisposed = true;\n this.clear();\n }\n /**\n * Dispose of all registered disposables but do not mark this object as disposed.\n */\n clear() {\n try {\n dispose(this._toDispose.values());\n }\n finally {\n this._toDispose.clear();\n }\n }\n add(o) {\n if (!o) {\n return o;\n }\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n setParentOfDisposable(o, this);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\n }\n }\n else {\n this._toDispose.add(o);\n }\n return o;\n }\n}\nDisposableStore.DISABLE_DISPOSED_WARNING = false;\nexport class Disposable {\n constructor() {\n this._store = new DisposableStore();\n trackDisposable(this);\n setParentOfDisposable(this._store, this);\n }\n dispose() {\n markAsDisposed(this);\n this._store.dispose();\n }\n _register(o) {\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(o);\n }\n}\nDisposable.None = Object.freeze({ dispose() { } });\n/**\n * Manages the lifecycle of a disposable value that may be changed.\n *\n * This ensures that when the disposable value is changed, the previously held disposable is disposed of. You can\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\n */\nexport class MutableDisposable {\n constructor() {\n this._isDisposed = false;\n trackDisposable(this);\n }\n get value() {\n return this._isDisposed ? undefined : this._value;\n }\n set value(value) {\n var _a;\n if (this._isDisposed || value === this._value) {\n return;\n }\n (_a = this._value) === null || _a === void 0 ? void 0 : _a.dispose();\n if (value) {\n setParentOfDisposable(value, this);\n }\n this._value = value;\n }\n clear() {\n this.value = undefined;\n }\n dispose() {\n var _a;\n this._isDisposed = true;\n markAsDisposed(this);\n (_a = this._value) === null || _a === void 0 ? void 0 : _a.dispose();\n this._value = undefined;\n }\n /**\n * Clears the value, but does not dispose it.\n * The old value is returned.\n */\n clearAndLeak() {\n const oldValue = this._value;\n this._value = undefined;\n if (oldValue) {\n setParentOfDisposable(oldValue, null);\n }\n return oldValue;\n }\n}\nexport class ImmortalReference {\n constructor(object) {\n this.object = object;\n }\n dispose() { }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass Node {\n constructor(element) {\n this.element = element;\n this.next = Node.Undefined;\n this.prev = Node.Undefined;\n }\n}\nNode.Undefined = new Node(undefined);\nexport class LinkedList {\n constructor() {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n get size() {\n return this._size;\n }\n isEmpty() {\n return this._first === Node.Undefined;\n }\n clear() {\n let node = this._first;\n while (node !== Node.Undefined) {\n const next = node.next;\n node.prev = Node.Undefined;\n node.next = Node.Undefined;\n node = next;\n }\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n unshift(element) {\n return this._insert(element, false);\n }\n push(element) {\n return this._insert(element, true);\n }\n _insert(element, atTheEnd) {\n const newNode = new Node(element);\n if (this._first === Node.Undefined) {\n this._first = newNode;\n this._last = newNode;\n }\n else if (atTheEnd) {\n // push\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n }\n else {\n // unshift\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n this._size += 1;\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n shift() {\n if (this._first === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._first.element;\n this._remove(this._first);\n return res;\n }\n }\n pop() {\n if (this._last === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._last.element;\n this._remove(this._last);\n return res;\n }\n }\n _remove(node) {\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n // middle\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n }\n else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n // only node\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n }\n else if (node.next === Node.Undefined) {\n // last\n this._last = this._last.prev;\n this._last.next = Node.Undefined;\n }\n else if (node.prev === Node.Undefined) {\n // first\n this._first = this._first.next;\n this._first.prev = Node.Undefined;\n }\n // done\n this._size -= 1;\n }\n *[Symbol.iterator]() {\n let node = this._first;\n while (node !== Node.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { globals } from './platform.js';\nconst hasPerformanceNow = (globals.performance && typeof globals.performance.now === 'function');\nexport class StopWatch {\n constructor(highResolution) {\n this._highResolution = hasPerformanceNow && highResolution;\n this._startTime = this._now();\n this._stopTime = -1;\n }\n static create(highResolution = true) {\n return new StopWatch(highResolution);\n }\n stop() {\n this._stopTime = this._now();\n }\n elapsed() {\n if (this._stopTime !== -1) {\n return this._stopTime - this._startTime;\n }\n return this._now() - this._startTime;\n }\n _now() {\n return this._highResolution ? globals.performance.now() : Date.now();\n }\n}\n","import { onUnexpectedError } from './errors.js';\nimport { combinedDisposable, Disposable, DisposableStore, toDisposable } from './lifecycle.js';\nimport { LinkedList } from './linkedList.js';\nimport { StopWatch } from './stopwatch.js';\nexport var Event;\n(function (Event) {\n Event.None = () => Disposable.None;\n /**\n * Given an event, returns another event which only fires once.\n */\n function once(event) {\n return (listener, thisArgs = null, disposables) => {\n // we need this, in case the event fires during the listener call\n let didFire = false;\n let result;\n result = event(e => {\n if (didFire) {\n return;\n }\n else if (result) {\n result.dispose();\n }\n else {\n didFire = true;\n }\n return listener.call(thisArgs, e);\n }, null, disposables);\n if (didFire) {\n result.dispose();\n }\n return result;\n };\n }\n Event.once = once;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function map(event, map) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables));\n }\n Event.map = map;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function forEach(event, each) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables));\n }\n Event.forEach = forEach;\n function filter(event, filter) {\n return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables));\n }\n Event.filter = filter;\n /**\n * Given an event, returns the same event but typed as `Event`.\n */\n function signal(event) {\n return event;\n }\n Event.signal = signal;\n function any(...events) {\n return (listener, thisArgs = null, disposables) => combinedDisposable(...events.map(event => event(e => listener.call(thisArgs, e), null, disposables)));\n }\n Event.any = any;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function reduce(event, merge, initial) {\n let output = initial;\n return map(event, e => {\n output = merge(output, e);\n return output;\n });\n }\n Event.reduce = reduce;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function snapshot(event) {\n let listener;\n const emitter = new Emitter({\n onFirstListenerAdd() {\n listener = event(emitter.fire, emitter);\n },\n onLastListenerRemove() {\n listener.dispose();\n }\n });\n return emitter.event;\n }\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function debounce(event, merge, delay = 100, leading = false, leakWarningThreshold) {\n let subscription;\n let output = undefined;\n let handle = undefined;\n let numDebouncedCalls = 0;\n const emitter = new Emitter({\n leakWarningThreshold,\n onFirstListenerAdd() {\n subscription = event(cur => {\n numDebouncedCalls++;\n output = merge(output, cur);\n if (leading && !handle) {\n emitter.fire(output);\n output = undefined;\n }\n clearTimeout(handle);\n handle = setTimeout(() => {\n const _output = output;\n output = undefined;\n handle = undefined;\n if (!leading || numDebouncedCalls > 1) {\n emitter.fire(_output);\n }\n numDebouncedCalls = 0;\n }, delay);\n });\n },\n onLastListenerRemove() {\n subscription.dispose();\n }\n });\n return emitter.event;\n }\n Event.debounce = debounce;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function latch(event, equals = (a, b) => a === b) {\n let firstCall = true;\n let cache;\n return filter(event, value => {\n const shouldEmit = firstCall || !equals(value, cache);\n firstCall = false;\n cache = value;\n return shouldEmit;\n });\n }\n Event.latch = latch;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function split(event, isT) {\n return [\n Event.filter(event, isT),\n Event.filter(event, e => !isT(e)),\n ];\n }\n Event.split = split;\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function buffer(event, nextTick = false, _buffer = []) {\n let buffer = _buffer.slice();\n let listener = event(e => {\n if (buffer) {\n buffer.push(e);\n }\n else {\n emitter.fire(e);\n }\n });\n const flush = () => {\n if (buffer) {\n buffer.forEach(e => emitter.fire(e));\n }\n buffer = null;\n };\n const emitter = new Emitter({\n onFirstListenerAdd() {\n if (!listener) {\n listener = event(e => emitter.fire(e));\n }\n },\n onFirstListenerDidAdd() {\n if (buffer) {\n if (nextTick) {\n setTimeout(flush);\n }\n else {\n flush();\n }\n }\n },\n onLastListenerRemove() {\n if (listener) {\n listener.dispose();\n }\n listener = null;\n }\n });\n return emitter.event;\n }\n Event.buffer = buffer;\n class ChainableEvent {\n constructor(event) {\n this.event = event;\n }\n map(fn) {\n return new ChainableEvent(map(this.event, fn));\n }\n forEach(fn) {\n return new ChainableEvent(forEach(this.event, fn));\n }\n filter(fn) {\n return new ChainableEvent(filter(this.event, fn));\n }\n reduce(merge, initial) {\n return new ChainableEvent(reduce(this.event, merge, initial));\n }\n latch() {\n return new ChainableEvent(latch(this.event));\n }\n debounce(merge, delay = 100, leading = false, leakWarningThreshold) {\n return new ChainableEvent(debounce(this.event, merge, delay, leading, leakWarningThreshold));\n }\n on(listener, thisArgs, disposables) {\n return this.event(listener, thisArgs, disposables);\n }\n once(listener, thisArgs, disposables) {\n return once(this.event)(listener, thisArgs, disposables);\n }\n }\n /**\n * @deprecated DO NOT use, this leaks memory\n */\n function chain(event) {\n return new ChainableEvent(event);\n }\n Event.chain = chain;\n function fromNodeEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const result = new Emitter({ onFirstListenerAdd, onLastListenerRemove });\n return result.event;\n }\n Event.fromNodeEventEmitter = fromNodeEventEmitter;\n function fromDOMEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const result = new Emitter({ onFirstListenerAdd, onLastListenerRemove });\n return result.event;\n }\n Event.fromDOMEventEmitter = fromDOMEventEmitter;\n function toPromise(event) {\n return new Promise(resolve => once(event)(resolve));\n }\n Event.toPromise = toPromise;\n})(Event || (Event = {}));\nclass EventProfiling {\n constructor(name) {\n this._listenerCount = 0;\n this._invocationCount = 0;\n this._elapsedOverall = 0;\n this._name = `${name}_${EventProfiling._idPool++}`;\n }\n start(listenerCount) {\n this._stopWatch = new StopWatch(true);\n this._listenerCount = listenerCount;\n }\n stop() {\n if (this._stopWatch) {\n const elapsed = this._stopWatch.elapsed();\n this._elapsedOverall += elapsed;\n this._invocationCount += 1;\n console.info(`did FIRE ${this._name}: elapsed_ms: ${elapsed.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`);\n this._stopWatch = undefined;\n }\n }\n}\nEventProfiling._idPool = 0;\nlet _globalLeakWarningThreshold = -1;\nclass LeakageMonitor {\n constructor(customThreshold, name = Math.random().toString(18).slice(2, 5)) {\n this.customThreshold = customThreshold;\n this.name = name;\n this._warnCountdown = 0;\n }\n dispose() {\n if (this._stacks) {\n this._stacks.clear();\n }\n }\n check(listenerCount) {\n let threshold = _globalLeakWarningThreshold;\n if (typeof this.customThreshold === 'number') {\n threshold = this.customThreshold;\n }\n if (threshold <= 0 || listenerCount < threshold) {\n return undefined;\n }\n if (!this._stacks) {\n this._stacks = new Map();\n }\n const stack = new Error().stack.split('\\n').slice(3).join('\\n');\n const count = (this._stacks.get(stack) || 0);\n this._stacks.set(stack, count + 1);\n this._warnCountdown -= 1;\n if (this._warnCountdown <= 0) {\n // only warn on first exceed and then every time the limit\n // is exceeded by 50% again\n this._warnCountdown = threshold * 0.5;\n // find most frequent listener and print warning\n let topStack;\n let topCount = 0;\n for (const [stack, count] of this._stacks) {\n if (!topStack || topCount < count) {\n topStack = stack;\n topCount = count;\n }\n }\n console.warn(`[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`);\n console.warn(topStack);\n }\n return () => {\n const count = (this._stacks.get(stack) || 0);\n this._stacks.set(stack, count - 1);\n };\n }\n}\n/**\n * The Emitter can be used to expose an Event to the public\n * to fire it from the insides.\n * Sample:\n class Document {\n\n private readonly _onDidChange = new Emitter<(value:string)=>any>();\n\n public onDidChange = this._onDidChange.event;\n\n // getter-style\n // get onDidChange(): Event<(value:string)=>any> {\n // \treturn this._onDidChange.event;\n // }\n\n private _doIt() {\n //...\n this._onDidChange.fire(value);\n }\n }\n */\nexport class Emitter {\n constructor(options) {\n var _a;\n this._disposed = false;\n this._options = options;\n this._leakageMon = _globalLeakWarningThreshold > 0 ? new LeakageMonitor(this._options && this._options.leakWarningThreshold) : undefined;\n this._perfMon = ((_a = this._options) === null || _a === void 0 ? void 0 : _a._profName) ? new EventProfiling(this._options._profName) : undefined;\n }\n /**\n * For the public to allow to subscribe\n * to events from this Emitter\n */\n get event() {\n if (!this._event) {\n this._event = (listener, thisArgs, disposables) => {\n var _a;\n if (!this._listeners) {\n this._listeners = new LinkedList();\n }\n const firstListener = this._listeners.isEmpty();\n if (firstListener && this._options && this._options.onFirstListenerAdd) {\n this._options.onFirstListenerAdd(this);\n }\n const remove = this._listeners.push(!thisArgs ? listener : [listener, thisArgs]);\n if (firstListener && this._options && this._options.onFirstListenerDidAdd) {\n this._options.onFirstListenerDidAdd(this);\n }\n if (this._options && this._options.onListenerDidAdd) {\n this._options.onListenerDidAdd(this, listener, thisArgs);\n }\n // check and record this emitter for potential leakage\n const removeMonitor = (_a = this._leakageMon) === null || _a === void 0 ? void 0 : _a.check(this._listeners.size);\n const result = toDisposable(() => {\n if (removeMonitor) {\n removeMonitor();\n }\n if (!this._disposed) {\n remove();\n if (this._options && this._options.onLastListenerRemove) {\n const hasListeners = (this._listeners && !this._listeners.isEmpty());\n if (!hasListeners) {\n this._options.onLastListenerRemove(this);\n }\n }\n }\n });\n if (disposables instanceof DisposableStore) {\n disposables.add(result);\n }\n else if (Array.isArray(disposables)) {\n disposables.push(result);\n }\n return result;\n };\n }\n return this._event;\n }\n /**\n * To be kept private to fire an event to\n * subscribers\n */\n fire(event) {\n var _a, _b;\n if (this._listeners) {\n // put all [listener,event]-pairs into delivery queue\n // then emit all event. an inner/nested event might be\n // the driver of this\n if (!this._deliveryQueue) {\n this._deliveryQueue = new LinkedList();\n }\n for (let listener of this._listeners) {\n this._deliveryQueue.push([listener, event]);\n }\n // start/stop performance insight collection\n (_a = this._perfMon) === null || _a === void 0 ? void 0 : _a.start(this._deliveryQueue.size);\n while (this._deliveryQueue.size > 0) {\n const [listener, event] = this._deliveryQueue.shift();\n try {\n if (typeof listener === 'function') {\n listener.call(undefined, event);\n }\n else {\n listener[0].call(listener[1], event);\n }\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n (_b = this._perfMon) === null || _b === void 0 ? void 0 : _b.stop();\n }\n }\n dispose() {\n var _a, _b, _c, _d, _e;\n if (!this._disposed) {\n this._disposed = true;\n (_a = this._listeners) === null || _a === void 0 ? void 0 : _a.clear();\n (_b = this._deliveryQueue) === null || _b === void 0 ? void 0 : _b.clear();\n (_d = (_c = this._options) === null || _c === void 0 ? void 0 : _c.onLastListenerRemove) === null || _d === void 0 ? void 0 : _d.call(_c);\n (_e = this._leakageMon) === null || _e === void 0 ? void 0 : _e.dispose();\n }\n }\n}\nexport class PauseableEmitter extends Emitter {\n constructor(options) {\n super(options);\n this._isPaused = 0;\n this._eventQueue = new LinkedList();\n this._mergeFn = options === null || options === void 0 ? void 0 : options.merge;\n }\n pause() {\n this._isPaused++;\n }\n resume() {\n if (this._isPaused !== 0 && --this._isPaused === 0) {\n if (this._mergeFn) {\n // use the merge function to create a single composite\n // event. make a copy in case firing pauses this emitter\n const events = Array.from(this._eventQueue);\n this._eventQueue.clear();\n super.fire(this._mergeFn(events));\n }\n else {\n // no merging, fire each event individually and test\n // that this emitter isn't paused halfway through\n while (!this._isPaused && this._eventQueue.size !== 0) {\n super.fire(this._eventQueue.shift());\n }\n }\n }\n }\n fire(event) {\n if (this._listeners) {\n if (this._isPaused !== 0) {\n this._eventQueue.push(event);\n }\n else {\n super.fire(event);\n }\n }\n }\n}\nexport class DebounceEmitter extends PauseableEmitter {\n constructor(options) {\n var _a;\n super(options);\n this._delay = (_a = options.delay) !== null && _a !== void 0 ? _a : 100;\n }\n fire(event) {\n if (!this._handle) {\n this.pause();\n this._handle = setTimeout(() => {\n this._handle = undefined;\n this.resume();\n }, this._delay);\n }\n super.fire(event);\n }\n}\n/**\n * The EventBufferer is useful in situations in which you want\n * to delay firing your events during some code.\n * You can wrap that code and be sure that the event will not\n * be fired during that wrap.\n *\n * ```\n * const emitter: Emitter;\n * const delayer = new EventDelayer();\n * const delayedEvent = delayer.wrapEvent(emitter.event);\n *\n * delayedEvent(console.log);\n *\n * delayer.bufferEvents(() => {\n * emitter.fire(); // event will not be fired yet\n * });\n *\n * // event will only be fired at this point\n * ```\n */\nexport class EventBufferer {\n constructor() {\n this.buffers = [];\n }\n wrapEvent(event) {\n return (listener, thisArgs, disposables) => {\n return event(i => {\n const buffer = this.buffers[this.buffers.length - 1];\n if (buffer) {\n buffer.push(() => listener.call(thisArgs, i));\n }\n else {\n listener.call(thisArgs, i);\n }\n }, undefined, disposables);\n };\n }\n bufferEvents(fn) {\n const buffer = [];\n this.buffers.push(buffer);\n const r = fn();\n this.buffers.pop();\n buffer.forEach(flush => flush());\n return r;\n }\n}\n/**\n * A Relay is an event forwarder which functions as a replugabble event pipe.\n * Once created, you can connect an input event to it and it will simply forward\n * events from that input event through its own `event` property. The `input`\n * can be changed at any point in time.\n */\nexport class Relay {\n constructor() {\n this.listening = false;\n this.inputEvent = Event.None;\n this.inputEventListener = Disposable.None;\n this.emitter = new Emitter({\n onFirstListenerDidAdd: () => {\n this.listening = true;\n this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);\n },\n onLastListenerRemove: () => {\n this.listening = false;\n this.inputEventListener.dispose();\n }\n });\n this.event = this.emitter.event;\n }\n set input(event) {\n this.inputEvent = event;\n if (this.listening) {\n this.inputEventListener.dispose();\n this.inputEventListener = event(this.emitter.fire, this.emitter);\n }\n }\n dispose() {\n this.inputEventListener.dispose();\n this.emitter.dispose();\n }\n}\n","/**\n * @returns whether the provided parameter is a JavaScript Array or not.\n */\nexport function isArray(array) {\n return Array.isArray(array);\n}\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str) {\n return (typeof str === 'string');\n}\n/**\n *\n * @returns whether the provided parameter is of type `object` but **not**\n *\t`null`, an `array`, a `regexp`, nor a `date`.\n */\nexport function isObject(obj) {\n // The method can't do a type cast since there are type (like strings) which\n // are subclasses of any put not positvely matched by the function. Hence type\n // narrowing results in wrong results.\n return typeof obj === 'object'\n && obj !== null\n && !Array.isArray(obj)\n && !(obj instanceof RegExp)\n && !(obj instanceof Date);\n}\n/**\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\n * @returns whether the provided parameter is a JavaScript Number or not.\n */\nexport function isNumber(obj) {\n return (typeof obj === 'number' && !isNaN(obj));\n}\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj) {\n return (obj === true || obj === false);\n}\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj) {\n return (typeof obj === 'undefined');\n}\n/**\n * @returns whether the provided parameter is defined.\n */\nexport function isDefined(arg) {\n return !isUndefinedOrNull(arg);\n}\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj) {\n return (isUndefined(obj) || obj === null);\n}\nexport function assertType(condition, type) {\n if (!condition) {\n throw new Error(type ? `Unexpected type, expected '${type}'` : 'Unexpected type');\n }\n}\n/**\n * Asserts that the argument passed in is neither undefined nor null.\n */\nexport function assertIsDefined(arg) {\n if (isUndefinedOrNull(arg)) {\n throw new Error('Assertion Failed: argument is undefined or null');\n }\n return arg;\n}\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj) {\n return (typeof obj === 'function');\n}\nexport function validateConstraints(args, constraints) {\n const len = Math.min(args.length, constraints.length);\n for (let i = 0; i < len; i++) {\n validateConstraint(args[i], constraints[i]);\n }\n}\nexport function validateConstraint(arg, constraint) {\n if (isString(constraint)) {\n if (typeof arg !== constraint) {\n throw new Error(`argument does not match constraint: typeof ${constraint}`);\n }\n }\n else if (isFunction(constraint)) {\n try {\n if (arg instanceof constraint) {\n return;\n }\n }\n catch (_a) {\n // ignore\n }\n if (!isUndefinedOrNull(arg) && arg.constructor === constraint) {\n return;\n }\n if (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n return;\n }\n throw new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n }\n}\nexport function getAllPropertyNames(obj) {\n let res = [];\n let proto = Object.getPrototypeOf(obj);\n while (Object.prototype !== proto) {\n res = res.concat(Object.getOwnPropertyNames(proto));\n proto = Object.getPrototypeOf(proto);\n }\n return res;\n}\nexport function getAllMethodNames(obj) {\n const methods = [];\n for (const prop of getAllPropertyNames(obj)) {\n if (typeof obj[prop] === 'function') {\n methods.push(prop);\n }\n }\n return methods;\n}\nexport function createProxyObject(methodNames, invoke) {\n const createProxyMethod = (method) => {\n return function () {\n const args = Array.prototype.slice.call(arguments, 0);\n return invoke(method, args);\n };\n };\n let result = {};\n for (const methodName of methodNames) {\n result[methodName] = createProxyMethod(methodName);\n }\n return result;\n}\n/**\n * Converts null to undefined, passes all other values through.\n */\nexport function withNullAsUndefined(x) {\n return x === null ? undefined : x;\n}\nexport function assertNever(value, message = 'Unreachable') {\n throw new Error(message);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function isFalsyOrWhitespace(str) {\n if (!str || typeof str !== 'string') {\n return true;\n }\n return str.trim().length === 0;\n}\nconst _formatRegexp = /{(\\d+)}/g;\n/**\n * Helper to produce a string with a variable number of arguments. Insert variable segments\n * into the string using the {n} notation where N is the index of the argument following the string.\n * @param value string to which formatting is applied\n * @param args replacements for {n}-entries\n */\nexport function format(value, ...args) {\n if (args.length === 0) {\n return value;\n }\n return value.replace(_formatRegexp, function (match, group) {\n const idx = parseInt(group, 10);\n return isNaN(idx) || idx < 0 || idx >= args.length ?\n match :\n args[idx];\n });\n}\n/**\n * Converts HTML characters inside the string to use entities instead. Makes the string safe from\n * being used e.g. in HTMLElement.innerHTML.\n */\nexport function escape(html) {\n return html.replace(/[<>&]/g, function (match) {\n switch (match) {\n case '<': return '<';\n case '>': return '>';\n case '&': return '&';\n default: return match;\n }\n });\n}\n/**\n * Escapes regular expression characters in a given string\n */\nexport function escapeRegExpCharacters(value) {\n return value.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g, '\\\\$&');\n}\n/**\n * Removes all occurrences of needle from the beginning and end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim (default is a blank)\n */\nexport function trim(haystack, needle = ' ') {\n const trimmed = ltrim(haystack, needle);\n return rtrim(trimmed, needle);\n}\n/**\n * Removes all occurrences of needle from the beginning of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nexport function ltrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length;\n if (needleLen === 0 || haystack.length === 0) {\n return haystack;\n }\n let offset = 0;\n while (haystack.indexOf(needle, offset) === offset) {\n offset = offset + needleLen;\n }\n return haystack.substring(offset);\n}\n/**\n * Removes all occurrences of needle from the end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nexport function rtrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length, haystackLen = haystack.length;\n if (needleLen === 0 || haystackLen === 0) {\n return haystack;\n }\n let offset = haystackLen, idx = -1;\n while (true) {\n idx = haystack.lastIndexOf(needle, offset - 1);\n if (idx === -1 || idx + needleLen !== offset) {\n break;\n }\n if (idx === 0) {\n return '';\n }\n offset = idx;\n }\n return haystack.substring(0, offset);\n}\nexport function convertSimple2RegExpPattern(pattern) {\n return pattern.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&').replace(/[\\*]/g, '.*');\n}\nexport function stripWildcards(pattern) {\n return pattern.replace(/\\*/g, '');\n}\nexport function createRegExp(searchString, isRegex, options = {}) {\n if (!searchString) {\n throw new Error('Cannot create regex from empty string');\n }\n if (!isRegex) {\n searchString = escapeRegExpCharacters(searchString);\n }\n if (options.wholeWord) {\n if (!/\\B/.test(searchString.charAt(0))) {\n searchString = '\\\\b' + searchString;\n }\n if (!/\\B/.test(searchString.charAt(searchString.length - 1))) {\n searchString = searchString + '\\\\b';\n }\n }\n let modifiers = '';\n if (options.global) {\n modifiers += 'g';\n }\n if (!options.matchCase) {\n modifiers += 'i';\n }\n if (options.multiline) {\n modifiers += 'm';\n }\n if (options.unicode) {\n modifiers += 'u';\n }\n return new RegExp(searchString, modifiers);\n}\nexport function regExpLeadsToEndlessLoop(regexp) {\n // Exit early if it's one of these special cases which are meant to match\n // against an empty string\n if (regexp.source === '^' || regexp.source === '^$' || regexp.source === '$' || regexp.source === '^\\\\s*$') {\n return false;\n }\n // We check against an empty string. If the regular expression doesn't advance\n // (e.g. ends in an endless loop) it will match an empty string.\n const match = regexp.exec('');\n return !!(match && regexp.lastIndex === 0);\n}\nexport function regExpFlags(regexp) {\n return (regexp.global ? 'g' : '')\n + (regexp.ignoreCase ? 'i' : '')\n + (regexp.multiline ? 'm' : '')\n + (regexp /* standalone editor compilation */.unicode ? 'u' : '');\n}\nexport function splitLines(str) {\n return str.split(/\\r\\n|\\r|\\n/);\n}\n/**\n * Returns first index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nexport function firstNonWhitespaceIndex(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Returns the leading whitespace of the string.\n * If the string contains only whitespaces, returns entire string\n */\nexport function getLeadingWhitespace(str, start = 0, end = str.length) {\n for (let i = start; i < end; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return str.substring(start, i);\n }\n }\n return str.substring(start, end);\n}\n/**\n * Returns last index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nexport function lastNonWhitespaceIndex(str, startIndex = str.length - 1) {\n for (let i = startIndex; i >= 0; i--) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return i;\n }\n }\n return -1;\n}\nexport function compare(a, b) {\n if (a < b) {\n return -1;\n }\n else if (a > b) {\n return 1;\n }\n else {\n return 0;\n }\n}\nexport function compareSubstring(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n let codeA = a.charCodeAt(aStart);\n let codeB = b.charCodeAt(bStart);\n if (codeA < codeB) {\n return -1;\n }\n else if (codeA > codeB) {\n return 1;\n }\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nexport function compareIgnoreCase(a, b) {\n return compareSubstringIgnoreCase(a, b, 0, a.length, 0, b.length);\n}\nexport function compareSubstringIgnoreCase(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n let codeA = a.charCodeAt(aStart);\n let codeB = b.charCodeAt(bStart);\n if (codeA === codeB) {\n // equal\n continue;\n }\n if (codeA >= 128 || codeB >= 128) {\n // not ASCII letters -> fallback to lower-casing strings\n return compareSubstring(a.toLowerCase(), b.toLowerCase(), aStart, aEnd, bStart, bEnd);\n }\n // mapper lower-case ascii letter onto upper-case varinats\n // [97-122] (lower ascii) --> [65-90] (upper ascii)\n if (isLowerAsciiLetter(codeA)) {\n codeA -= 32;\n }\n if (isLowerAsciiLetter(codeB)) {\n codeB -= 32;\n }\n // compare both code points\n const diff = codeA - codeB;\n if (diff === 0) {\n continue;\n }\n return diff;\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nexport function isLowerAsciiLetter(code) {\n return code >= 97 /* a */ && code <= 122 /* z */;\n}\nexport function isUpperAsciiLetter(code) {\n return code >= 65 /* A */ && code <= 90 /* Z */;\n}\nexport function equalsIgnoreCase(a, b) {\n return a.length === b.length && compareSubstringIgnoreCase(a, b) === 0;\n}\nexport function startsWithIgnoreCase(str, candidate) {\n const candidateLength = candidate.length;\n if (candidate.length > str.length) {\n return false;\n }\n return compareSubstringIgnoreCase(str, candidate, 0, candidateLength) === 0;\n}\n/**\n * @returns the length of the common prefix of the two strings.\n */\nexport function commonPrefixLength(a, b) {\n let i, len = Math.min(a.length, b.length);\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(i) !== b.charCodeAt(i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * @returns the length of the common suffix of the two strings.\n */\nexport function commonSuffixLength(a, b) {\n let i, len = Math.min(a.length, b.length);\n const aLastIndex = a.length - 1;\n const bLastIndex = b.length - 1;\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function isHighSurrogate(charCode) {\n return (0xD800 <= charCode && charCode <= 0xDBFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function isLowSurrogate(charCode) {\n return (0xDC00 <= charCode && charCode <= 0xDFFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function computeCodePoint(highSurrogate, lowSurrogate) {\n return ((highSurrogate - 0xD800) << 10) + (lowSurrogate - 0xDC00) + 0x10000;\n}\n/**\n * get the code point that begins at offset `offset`\n */\nexport function getNextCodePoint(str, len, offset) {\n const charCode = str.charCodeAt(offset);\n if (isHighSurrogate(charCode) && offset + 1 < len) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (isLowSurrogate(nextCharCode)) {\n return computeCodePoint(charCode, nextCharCode);\n }\n }\n return charCode;\n}\n/**\n * get the code point that ends right before offset `offset`\n */\nfunction getPrevCodePoint(str, offset) {\n const charCode = str.charCodeAt(offset - 1);\n if (isLowSurrogate(charCode) && offset > 1) {\n const prevCharCode = str.charCodeAt(offset - 2);\n if (isHighSurrogate(prevCharCode)) {\n return computeCodePoint(prevCharCode, charCode);\n }\n }\n return charCode;\n}\nexport function nextCharLength(str, offset) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n const initialOffset = offset;\n const len = str.length;\n const initialCodePoint = getNextCodePoint(str, len, offset);\n offset += (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\n while (offset < len) {\n const nextCodePoint = getNextCodePoint(str, len, offset);\n const nextGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(nextCodePoint);\n if (breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n offset += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = nextGraphemeBreakType;\n }\n return (offset - initialOffset);\n}\nexport function prevCharLength(str, offset) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n const initialOffset = offset;\n const initialCodePoint = getPrevCodePoint(str, offset);\n offset -= (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\n while (offset > 0) {\n const prevCodePoint = getPrevCodePoint(str, offset);\n const prevGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(prevCodePoint);\n if (breakBetweenGraphemeBreakType(prevGraphemeBreakType, graphemeBreakType)) {\n break;\n }\n offset -= (prevCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = prevGraphemeBreakType;\n }\n return (initialOffset - offset);\n}\n/**\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-rtl-test.js\n */\nconst CONTAINS_RTL = /(?:[\\u05BE\\u05C0\\u05C3\\u05C6\\u05D0-\\u05F4\\u0608\\u060B\\u060D\\u061B-\\u064A\\u066D-\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1-\\u07EA\\u07F4\\u07F5\\u07FA-\\u0815\\u081A\\u0824\\u0828\\u0830-\\u0858\\u085E-\\u08BD\\u200F\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFD3D\\uFD50-\\uFDFC\\uFE70-\\uFEFC]|\\uD802[\\uDC00-\\uDD1B\\uDD20-\\uDE00\\uDE10-\\uDE33\\uDE40-\\uDEE4\\uDEEB-\\uDF35\\uDF40-\\uDFFF]|\\uD803[\\uDC00-\\uDCFF]|\\uD83A[\\uDC00-\\uDCCF\\uDD00-\\uDD43\\uDD50-\\uDFFF]|\\uD83B[\\uDC00-\\uDEBB])/;\n/**\n * Returns true if `str` contains any Unicode character that is classified as \"R\" or \"AL\".\n */\nexport function containsRTL(str) {\n return CONTAINS_RTL.test(str);\n}\n/**\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-emoji-test.js\n */\nconst CONTAINS_EMOJI = /(?:[\\u231A\\u231B\\u23F0\\u23F3\\u2600-\\u27BF\\u2B50\\u2B55]|\\uD83C[\\uDDE6-\\uDDFF\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDE4F\\uDE80-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD00-\\uDDFF\\uDE70-\\uDED6])/;\nexport function containsEmoji(str) {\n return CONTAINS_EMOJI.test(str);\n}\nconst IS_BASIC_ASCII = /^[\\t\\n\\r\\x20-\\x7E]*$/;\n/**\n * Returns true if `str` contains only basic ASCII characters in the range 32 - 126 (including 32 and 126) or \\n, \\r, \\t\n */\nexport function isBasicASCII(str) {\n return IS_BASIC_ASCII.test(str);\n}\nexport const UNUSUAL_LINE_TERMINATORS = /[\\u2028\\u2029]/; // LINE SEPARATOR (LS) or PARAGRAPH SEPARATOR (PS)\n/**\n * Returns true if `str` contains unusual line terminators, like LS or PS\n */\nexport function containsUnusualLineTerminators(str) {\n return UNUSUAL_LINE_TERMINATORS.test(str);\n}\nexport function containsFullWidthCharacter(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n if (isFullWidthCharacter(str.charCodeAt(i))) {\n return true;\n }\n }\n return false;\n}\nexport function isFullWidthCharacter(charCode) {\n // Do a cheap trick to better support wrapping of wide characters, treat them as 2 columns\n // http://jrgraphix.net/research/unicode_blocks.php\n // 2E80 — 2EFF CJK Radicals Supplement\n // 2F00 — 2FDF Kangxi Radicals\n // 2FF0 — 2FFF Ideographic Description Characters\n // 3000 — 303F CJK Symbols and Punctuation\n // 3040 — 309F Hiragana\n // 30A0 — 30FF Katakana\n // 3100 — 312F Bopomofo\n // 3130 — 318F Hangul Compatibility Jamo\n // 3190 — 319F Kanbun\n // 31A0 — 31BF Bopomofo Extended\n // 31F0 — 31FF Katakana Phonetic Extensions\n // 3200 — 32FF Enclosed CJK Letters and Months\n // 3300 — 33FF CJK Compatibility\n // 3400 — 4DBF CJK Unified Ideographs Extension A\n // 4DC0 — 4DFF Yijing Hexagram Symbols\n // 4E00 — 9FFF CJK Unified Ideographs\n // A000 — A48F Yi Syllables\n // A490 — A4CF Yi Radicals\n // AC00 — D7AF Hangul Syllables\n // [IGNORE] D800 — DB7F High Surrogates\n // [IGNORE] DB80 — DBFF High Private Use Surrogates\n // [IGNORE] DC00 — DFFF Low Surrogates\n // [IGNORE] E000 — F8FF Private Use Area\n // F900 — FAFF CJK Compatibility Ideographs\n // [IGNORE] FB00 — FB4F Alphabetic Presentation Forms\n // [IGNORE] FB50 — FDFF Arabic Presentation Forms-A\n // [IGNORE] FE00 — FE0F Variation Selectors\n // [IGNORE] FE20 — FE2F Combining Half Marks\n // [IGNORE] FE30 — FE4F CJK Compatibility Forms\n // [IGNORE] FE50 — FE6F Small Form Variants\n // [IGNORE] FE70 — FEFF Arabic Presentation Forms-B\n // FF00 — FFEF Halfwidth and Fullwidth Forms\n // [https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms]\n // of which FF01 - FF5E fullwidth ASCII of 21 to 7E\n // [IGNORE] and FF65 - FFDC halfwidth of Katakana and Hangul\n // [IGNORE] FFF0 — FFFF Specials\n charCode = +charCode; // @perf\n return ((charCode >= 0x2E80 && charCode <= 0xD7AF)\n || (charCode >= 0xF900 && charCode <= 0xFAFF)\n || (charCode >= 0xFF01 && charCode <= 0xFF5E));\n}\n/**\n * A fast function (therefore imprecise) to check if code points are emojis.\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-emoji-test.js\n */\nexport function isEmojiImprecise(x) {\n return ((x >= 0x1F1E6 && x <= 0x1F1FF) || (x === 8986) || (x === 8987) || (x === 9200)\n || (x === 9203) || (x >= 9728 && x <= 10175) || (x === 11088) || (x === 11093)\n || (x >= 127744 && x <= 128591) || (x >= 128640 && x <= 128764)\n || (x >= 128992 && x <= 129003) || (x >= 129280 && x <= 129535)\n || (x >= 129648 && x <= 129750));\n}\n// -- UTF-8 BOM\nexport const UTF8_BOM_CHARACTER = String.fromCharCode(65279 /* UTF8_BOM */);\nexport function startsWithUTF8BOM(str) {\n return !!(str && str.length > 0 && str.charCodeAt(0) === 65279 /* UTF8_BOM */);\n}\nexport function containsUppercaseCharacter(target, ignoreEscapedChars = false) {\n if (!target) {\n return false;\n }\n if (ignoreEscapedChars) {\n target = target.replace(/\\\\./g, '');\n }\n return target.toLowerCase() !== target;\n}\n/**\n * Produces 'a'-'z', followed by 'A'-'Z'... followed by 'a'-'z', etc.\n */\nexport function singleLetterHash(n) {\n const LETTERS_CNT = (90 /* Z */ - 65 /* A */ + 1);\n n = n % (2 * LETTERS_CNT);\n if (n < LETTERS_CNT) {\n return String.fromCharCode(97 /* a */ + n);\n }\n return String.fromCharCode(65 /* A */ + n - LETTERS_CNT);\n}\n//#region Unicode Grapheme Break\nexport function getGraphemeBreakType(codePoint) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n return graphemeBreakTree.getGraphemeBreakType(codePoint);\n}\nexport function breakBetweenGraphemeBreakType(breakTypeA, breakTypeB) {\n // http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundary_Rules\n // !!! Let's make the common case a bit faster\n if (breakTypeA === 0 /* Other */) {\n // see https://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakTest-13.0.0d10.html#table\n return (breakTypeB !== 5 /* Extend */ && breakTypeB !== 7 /* SpacingMark */);\n }\n // Do not break between a CR and LF. Otherwise, break before and after controls.\n // GB3 CR × LF\n // GB4 (Control | CR | LF) ÷\n // GB5 ÷ (Control | CR | LF)\n if (breakTypeA === 2 /* CR */) {\n if (breakTypeB === 3 /* LF */) {\n return false; // GB3\n }\n }\n if (breakTypeA === 4 /* Control */ || breakTypeA === 2 /* CR */ || breakTypeA === 3 /* LF */) {\n return true; // GB4\n }\n if (breakTypeB === 4 /* Control */ || breakTypeB === 2 /* CR */ || breakTypeB === 3 /* LF */) {\n return true; // GB5\n }\n // Do not break Hangul syllable sequences.\n // GB6 L × (L | V | LV | LVT)\n // GB7 (LV | V) × (V | T)\n // GB8 (LVT | T) × T\n if (breakTypeA === 8 /* L */) {\n if (breakTypeB === 8 /* L */ || breakTypeB === 9 /* V */ || breakTypeB === 11 /* LV */ || breakTypeB === 12 /* LVT */) {\n return false; // GB6\n }\n }\n if (breakTypeA === 11 /* LV */ || breakTypeA === 9 /* V */) {\n if (breakTypeB === 9 /* V */ || breakTypeB === 10 /* T */) {\n return false; // GB7\n }\n }\n if (breakTypeA === 12 /* LVT */ || breakTypeA === 10 /* T */) {\n if (breakTypeB === 10 /* T */) {\n return false; // GB8\n }\n }\n // Do not break before extending characters or ZWJ.\n // GB9 × (Extend | ZWJ)\n if (breakTypeB === 5 /* Extend */ || breakTypeB === 13 /* ZWJ */) {\n return false; // GB9\n }\n // The GB9a and GB9b rules only apply to extended grapheme clusters:\n // Do not break before SpacingMarks, or after Prepend characters.\n // GB9a × SpacingMark\n // GB9b Prepend ×\n if (breakTypeB === 7 /* SpacingMark */) {\n return false; // GB9a\n }\n if (breakTypeA === 1 /* Prepend */) {\n return false; // GB9b\n }\n // Do not break within emoji modifier sequences or emoji zwj sequences.\n // GB11 \\p{Extended_Pictographic} Extend* ZWJ × \\p{Extended_Pictographic}\n if (breakTypeA === 13 /* ZWJ */ && breakTypeB === 14 /* Extended_Pictographic */) {\n // Note: we are not implementing the rule entirely here to avoid introducing states\n return false; // GB11\n }\n // GB12 sot (RI RI)* RI × RI\n // GB13 [^RI] (RI RI)* RI × RI\n if (breakTypeA === 6 /* Regional_Indicator */ && breakTypeB === 6 /* Regional_Indicator */) {\n // Note: we are not implementing the rule entirely here to avoid introducing states\n return false; // GB12 & GB13\n }\n // GB999 Any ÷ Any\n return true;\n}\nclass GraphemeBreakTree {\n constructor() {\n this._data = getGraphemeBreakRawData();\n }\n static getInstance() {\n if (!GraphemeBreakTree._INSTANCE) {\n GraphemeBreakTree._INSTANCE = new GraphemeBreakTree();\n }\n return GraphemeBreakTree._INSTANCE;\n }\n getGraphemeBreakType(codePoint) {\n // !!! Let's make 7bit ASCII a bit faster: 0..31\n if (codePoint < 32) {\n if (codePoint === 10 /* LineFeed */) {\n return 3 /* LF */;\n }\n if (codePoint === 13 /* CarriageReturn */) {\n return 2 /* CR */;\n }\n return 4 /* Control */;\n }\n // !!! Let's make 7bit ASCII a bit faster: 32..126\n if (codePoint < 127) {\n return 0 /* Other */;\n }\n const data = this._data;\n const nodeCount = data.length / 3;\n let nodeIndex = 1;\n while (nodeIndex <= nodeCount) {\n if (codePoint < data[3 * nodeIndex]) {\n // go left\n nodeIndex = 2 * nodeIndex;\n }\n else if (codePoint > data[3 * nodeIndex + 1]) {\n // go right\n nodeIndex = 2 * nodeIndex + 1;\n }\n else {\n // hit\n return data[3 * nodeIndex + 2];\n }\n }\n return 0 /* Other */;\n }\n}\nGraphemeBreakTree._INSTANCE = null;\nfunction getGraphemeBreakRawData() {\n // generated using https://github.com/alexdima/unicode-utils/blob/master/generate-grapheme-break.js\n return JSON.parse('[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]');\n}\n//#endregion\n/**\n * Computes the offset after performing a left delete on the given string,\n * while considering unicode grapheme/emoji rules.\n*/\nexport function getLeftDeleteOffset(offset, str) {\n if (offset === 0) {\n return 0;\n }\n // Try to delete emoji part.\n const emojiOffset = getOffsetBeforeLastEmojiComponent(offset, str);\n if (emojiOffset !== undefined) {\n return emojiOffset;\n }\n // Otherwise, just skip a single code point.\n const codePoint = getPrevCodePoint(str, offset);\n offset -= getUTF16Length(codePoint);\n return offset;\n}\nfunction getOffsetBeforeLastEmojiComponent(offset, str) {\n // See https://www.unicode.org/reports/tr51/tr51-14.html#EBNF_and_Regex for the\n // structure of emojis.\n let codePoint = getPrevCodePoint(str, offset);\n offset -= getUTF16Length(codePoint);\n // Skip modifiers\n while ((isEmojiModifier(codePoint) || codePoint === 65039 /* emojiVariantSelector */ || codePoint === 8419 /* enclosingKeyCap */)) {\n if (offset === 0) {\n // Cannot skip modifier, no preceding emoji base.\n return undefined;\n }\n codePoint = getPrevCodePoint(str, offset);\n offset -= getUTF16Length(codePoint);\n }\n // Expect base emoji\n if (!isEmojiImprecise(codePoint)) {\n // Unexpected code point, not a valid emoji.\n return undefined;\n }\n if (offset >= 0) {\n // Skip optional ZWJ code points that combine multiple emojis.\n // In theory, we should check if that ZWJ actually combines multiple emojis\n // to prevent deleting ZWJs in situations we didn't account for.\n const optionalZwjCodePoint = getPrevCodePoint(str, offset);\n if (optionalZwjCodePoint === 8205 /* zwj */) {\n offset -= getUTF16Length(optionalZwjCodePoint);\n }\n }\n return offset;\n}\nfunction getUTF16Length(codePoint) {\n return codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1;\n}\nfunction isEmojiModifier(codePoint) {\n return 0x1F3FB <= codePoint && codePoint <= 0x1F3FF;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { transformErrorForSerialization } from '../errors.js';\nimport { Emitter } from '../event.js';\nimport { Disposable } from '../lifecycle.js';\nimport { globals, isWeb } from '../platform.js';\nimport * as types from '../types.js';\nimport * as strings from '../strings.js';\nconst INITIALIZE = '$initialize';\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err) {\n if (!isWeb) {\n // running tests\n return;\n }\n if (!webWorkerWarningLogged) {\n webWorkerWarningLogged = true;\n console.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq');\n }\n console.warn(err.message);\n}\nclass RequestMessage {\n constructor(vsWorker, req, method, args) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.method = method;\n this.args = args;\n this.type = 0 /* Request */;\n }\n}\nclass ReplyMessage {\n constructor(vsWorker, seq, res, err) {\n this.vsWorker = vsWorker;\n this.seq = seq;\n this.res = res;\n this.err = err;\n this.type = 1 /* Reply */;\n }\n}\nclass SubscribeEventMessage {\n constructor(vsWorker, req, eventName, arg) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.eventName = eventName;\n this.arg = arg;\n this.type = 2 /* SubscribeEvent */;\n }\n}\nclass EventMessage {\n constructor(vsWorker, req, event) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.event = event;\n this.type = 3 /* Event */;\n }\n}\nclass UnsubscribeEventMessage {\n constructor(vsWorker, req) {\n this.vsWorker = vsWorker;\n this.req = req;\n this.type = 4 /* UnsubscribeEvent */;\n }\n}\nclass SimpleWorkerProtocol {\n constructor(handler) {\n this._workerId = -1;\n this._handler = handler;\n this._lastSentReq = 0;\n this._pendingReplies = Object.create(null);\n this._pendingEmitters = new Map();\n this._pendingEvents = new Map();\n }\n setWorkerId(workerId) {\n this._workerId = workerId;\n }\n sendMessage(method, args) {\n const req = String(++this._lastSentReq);\n return new Promise((resolve, reject) => {\n this._pendingReplies[req] = {\n resolve: resolve,\n reject: reject\n };\n this._send(new RequestMessage(this._workerId, req, method, args));\n });\n }\n listen(eventName, arg) {\n let req = null;\n const emitter = new Emitter({\n onFirstListenerAdd: () => {\n req = String(++this._lastSentReq);\n this._pendingEmitters.set(req, emitter);\n this._send(new SubscribeEventMessage(this._workerId, req, eventName, arg));\n },\n onLastListenerRemove: () => {\n this._pendingEmitters.delete(req);\n this._send(new UnsubscribeEventMessage(this._workerId, req));\n req = null;\n }\n });\n return emitter.event;\n }\n handleMessage(message) {\n if (!message || !message.vsWorker) {\n return;\n }\n if (this._workerId !== -1 && message.vsWorker !== this._workerId) {\n return;\n }\n this._handleMessage(message);\n }\n _handleMessage(msg) {\n switch (msg.type) {\n case 1 /* Reply */:\n return this._handleReplyMessage(msg);\n case 0 /* Request */:\n return this._handleRequestMessage(msg);\n case 2 /* SubscribeEvent */:\n return this._handleSubscribeEventMessage(msg);\n case 3 /* Event */:\n return this._handleEventMessage(msg);\n case 4 /* UnsubscribeEvent */:\n return this._handleUnsubscribeEventMessage(msg);\n }\n }\n _handleReplyMessage(replyMessage) {\n if (!this._pendingReplies[replyMessage.seq]) {\n console.warn('Got reply to unknown seq');\n return;\n }\n let reply = this._pendingReplies[replyMessage.seq];\n delete this._pendingReplies[replyMessage.seq];\n if (replyMessage.err) {\n let err = replyMessage.err;\n if (replyMessage.err.$isError) {\n err = new Error();\n err.name = replyMessage.err.name;\n err.message = replyMessage.err.message;\n err.stack = replyMessage.err.stack;\n }\n reply.reject(err);\n return;\n }\n reply.resolve(replyMessage.res);\n }\n _handleRequestMessage(requestMessage) {\n let req = requestMessage.req;\n let result = this._handler.handleMessage(requestMessage.method, requestMessage.args);\n result.then((r) => {\n this._send(new ReplyMessage(this._workerId, req, r, undefined));\n }, (e) => {\n if (e.detail instanceof Error) {\n // Loading errors have a detail property that points to the actual error\n e.detail = transformErrorForSerialization(e.detail);\n }\n this._send(new ReplyMessage(this._workerId, req, undefined, transformErrorForSerialization(e)));\n });\n }\n _handleSubscribeEventMessage(msg) {\n const req = msg.req;\n const disposable = this._handler.handleEvent(msg.eventName, msg.arg)((event) => {\n this._send(new EventMessage(this._workerId, req, event));\n });\n this._pendingEvents.set(req, disposable);\n }\n _handleEventMessage(msg) {\n if (!this._pendingEmitters.has(msg.req)) {\n console.warn('Got event for unknown req');\n return;\n }\n this._pendingEmitters.get(msg.req).fire(msg.event);\n }\n _handleUnsubscribeEventMessage(msg) {\n if (!this._pendingEvents.has(msg.req)) {\n console.warn('Got unsubscribe for unknown req');\n return;\n }\n this._pendingEvents.get(msg.req).dispose();\n this._pendingEvents.delete(msg.req);\n }\n _send(msg) {\n let transfer = [];\n if (msg.type === 0 /* Request */) {\n for (let i = 0; i < msg.args.length; i++) {\n if (msg.args[i] instanceof ArrayBuffer) {\n transfer.push(msg.args[i]);\n }\n }\n }\n else if (msg.type === 1 /* Reply */) {\n if (msg.res instanceof ArrayBuffer) {\n transfer.push(msg.res);\n }\n }\n this._handler.sendMessage(msg, transfer);\n }\n}\n/**\n * Main thread side\n */\nexport class SimpleWorkerClient extends Disposable {\n constructor(workerFactory, moduleId, host) {\n super();\n let lazyProxyReject = null;\n this._worker = this._register(workerFactory.create('vs/base/common/worker/simpleWorker', (msg) => {\n this._protocol.handleMessage(msg);\n }, (err) => {\n // in Firefox, web workers fail lazily :(\n // we will reject the proxy\n if (lazyProxyReject) {\n lazyProxyReject(err);\n }\n }));\n this._protocol = new SimpleWorkerProtocol({\n sendMessage: (msg, transfer) => {\n this._worker.postMessage(msg, transfer);\n },\n handleMessage: (method, args) => {\n if (typeof host[method] !== 'function') {\n return Promise.reject(new Error('Missing method ' + method + ' on main thread host.'));\n }\n try {\n return Promise.resolve(host[method].apply(host, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n },\n handleEvent: (eventName, arg) => {\n if (propertyIsDynamicEvent(eventName)) {\n const event = host[eventName].call(host, arg);\n if (typeof event !== 'function') {\n throw new Error(`Missing dynamic event ${eventName} on main thread host.`);\n }\n return event;\n }\n if (propertyIsEvent(eventName)) {\n const event = host[eventName];\n if (typeof event !== 'function') {\n throw new Error(`Missing event ${eventName} on main thread host.`);\n }\n return event;\n }\n throw new Error(`Malformed event name ${eventName}`);\n }\n });\n this._protocol.setWorkerId(this._worker.getId());\n // Gather loader configuration\n let loaderConfiguration = null;\n if (typeof globals.require !== 'undefined' && typeof globals.require.getConfig === 'function') {\n // Get the configuration from the Monaco AMD Loader\n loaderConfiguration = globals.require.getConfig();\n }\n else if (typeof globals.requirejs !== 'undefined') {\n // Get the configuration from requirejs\n loaderConfiguration = globals.requirejs.s.contexts._.config;\n }\n const hostMethods = types.getAllMethodNames(host);\n // Send initialize message\n this._onModuleLoaded = this._protocol.sendMessage(INITIALIZE, [\n this._worker.getId(),\n JSON.parse(JSON.stringify(loaderConfiguration)),\n moduleId,\n hostMethods,\n ]);\n // Create proxy to loaded code\n const proxyMethodRequest = (method, args) => {\n return this._request(method, args);\n };\n const proxyListen = (eventName, arg) => {\n return this._protocol.listen(eventName, arg);\n };\n this._lazyProxy = new Promise((resolve, reject) => {\n lazyProxyReject = reject;\n this._onModuleLoaded.then((availableMethods) => {\n resolve(createProxyObject(availableMethods, proxyMethodRequest, proxyListen));\n }, (e) => {\n reject(e);\n this._onError('Worker failed to load ' + moduleId, e);\n });\n });\n }\n getProxyObject() {\n return this._lazyProxy;\n }\n _request(method, args) {\n return new Promise((resolve, reject) => {\n this._onModuleLoaded.then(() => {\n this._protocol.sendMessage(method, args).then(resolve, reject);\n }, reject);\n });\n }\n _onError(message, error) {\n console.error(message);\n console.info(error);\n }\n}\nfunction propertyIsEvent(name) {\n // Assume a property is an event if it has a form of \"onSomething\"\n return name[0] === 'o' && name[1] === 'n' && strings.isUpperAsciiLetter(name.charCodeAt(2));\n}\nfunction propertyIsDynamicEvent(name) {\n // Assume a property is a dynamic event (a method that returns an event) if it has a form of \"onDynamicSomething\"\n return /^onDynamic/.test(name) && strings.isUpperAsciiLetter(name.charCodeAt(9));\n}\nfunction createProxyObject(methodNames, invoke, proxyListen) {\n const createProxyMethod = (method) => {\n return function () {\n const args = Array.prototype.slice.call(arguments, 0);\n return invoke(method, args);\n };\n };\n const createProxyDynamicEvent = (eventName) => {\n return function (arg) {\n return proxyListen(eventName, arg);\n };\n };\n let result = {};\n for (const methodName of methodNames) {\n if (propertyIsDynamicEvent(methodName)) {\n result[methodName] = createProxyDynamicEvent(methodName);\n continue;\n }\n if (propertyIsEvent(methodName)) {\n result[methodName] = proxyListen(methodName, undefined);\n continue;\n }\n result[methodName] = createProxyMethod(methodName);\n }\n return result;\n}\n/**\n * Worker side\n */\nexport class SimpleWorkerServer {\n constructor(postMessage, requestHandlerFactory) {\n this._requestHandlerFactory = requestHandlerFactory;\n this._requestHandler = null;\n this._protocol = new SimpleWorkerProtocol({\n sendMessage: (msg, transfer) => {\n postMessage(msg, transfer);\n },\n handleMessage: (method, args) => this._handleMessage(method, args),\n handleEvent: (eventName, arg) => this._handleEvent(eventName, arg)\n });\n }\n onmessage(msg) {\n this._protocol.handleMessage(msg);\n }\n _handleMessage(method, args) {\n if (method === INITIALIZE) {\n return this.initialize(args[0], args[1], args[2], args[3]);\n }\n if (!this._requestHandler || typeof this._requestHandler[method] !== 'function') {\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\n }\n try {\n return Promise.resolve(this._requestHandler[method].apply(this._requestHandler, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n _handleEvent(eventName, arg) {\n if (!this._requestHandler) {\n throw new Error(`Missing requestHandler`);\n }\n if (propertyIsDynamicEvent(eventName)) {\n const event = this._requestHandler[eventName].call(this._requestHandler, arg);\n if (typeof event !== 'function') {\n throw new Error(`Missing dynamic event ${eventName} on request handler.`);\n }\n return event;\n }\n if (propertyIsEvent(eventName)) {\n const event = this._requestHandler[eventName];\n if (typeof event !== 'function') {\n throw new Error(`Missing event ${eventName} on request handler.`);\n }\n return event;\n }\n throw new Error(`Malformed event name ${eventName}`);\n }\n initialize(workerId, loaderConfig, moduleId, hostMethods) {\n this._protocol.setWorkerId(workerId);\n const proxyMethodRequest = (method, args) => {\n return this._protocol.sendMessage(method, args);\n };\n const proxyListen = (eventName, arg) => {\n return this._protocol.listen(eventName, arg);\n };\n const hostProxy = createProxyObject(hostMethods, proxyMethodRequest, proxyListen);\n if (this._requestHandlerFactory) {\n // static request handler\n this._requestHandler = this._requestHandlerFactory(hostProxy);\n return Promise.resolve(types.getAllMethodNames(this._requestHandler));\n }\n if (loaderConfig) {\n // Remove 'baseUrl', handling it is beyond scope for now\n if (typeof loaderConfig.baseUrl !== 'undefined') {\n delete loaderConfig['baseUrl'];\n }\n if (typeof loaderConfig.paths !== 'undefined') {\n if (typeof loaderConfig.paths.vs !== 'undefined') {\n delete loaderConfig.paths['vs'];\n }\n }\n if (typeof loaderConfig.trustedTypesPolicy !== undefined) {\n // don't use, it has been destroyed during serialize\n delete loaderConfig['trustedTypesPolicy'];\n }\n // Since this is in a web worker, enable catching errors\n loaderConfig.catchError = true;\n globals.require.config(loaderConfig);\n }\n return new Promise((resolve, reject) => {\n // Use the global require to be sure to get the global config\n // ESM-comment-begin\n // \t\t\tconst req = (globals.require || require);\n // ESM-comment-end\n // ESM-uncomment-begin\n const req = globals.require;\n // ESM-uncomment-end\n req([moduleId], (module) => {\n this._requestHandler = module.create(hostProxy);\n if (!this._requestHandler) {\n reject(new Error(`No RequestHandler!`));\n return;\n }\n resolve(types.getAllMethodNames(this._requestHandler));\n }, reject);\n });\n }\n}\n/**\n * Called on the worker side\n */\nexport function create(postMessage) {\n return new SimpleWorkerServer(postMessage, null);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Represents information about a specific difference between two sequences.\n */\nexport class DiffChange {\n /**\n * Constructs a new DiffChange with the given sequence information\n * and content.\n */\n constructor(originalStart, originalLength, modifiedStart, modifiedLength) {\n //Debug.Assert(originalLength > 0 || modifiedLength > 0, \"originalLength and modifiedLength cannot both be <= 0\");\n this.originalStart = originalStart;\n this.originalLength = originalLength;\n this.modifiedStart = modifiedStart;\n this.modifiedLength = modifiedLength;\n }\n /**\n * The end point (exclusive) of the change in the original sequence.\n */\n getOriginalEnd() {\n return this.originalStart + this.originalLength;\n }\n /**\n * The end point (exclusive) of the change in the modified sequence.\n */\n getModifiedEnd() {\n return this.modifiedStart + this.modifiedLength;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\n/**\n * Return a hash value for an object.\n */\nexport function hash(obj) {\n return doHash(obj, 0);\n}\nexport function doHash(obj, hashVal) {\n switch (typeof obj) {\n case 'object':\n if (obj === null) {\n return numberHash(349, hashVal);\n }\n else if (Array.isArray(obj)) {\n return arrayHash(obj, hashVal);\n }\n return objectHash(obj, hashVal);\n case 'string':\n return stringHash(obj, hashVal);\n case 'boolean':\n return booleanHash(obj, hashVal);\n case 'number':\n return numberHash(obj, hashVal);\n case 'undefined':\n return numberHash(937, hashVal);\n default:\n return numberHash(617, hashVal);\n }\n}\nexport function numberHash(val, initialHashVal) {\n return (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32\n}\nfunction booleanHash(b, initialHashVal) {\n return numberHash(b ? 433 : 863, initialHashVal);\n}\nexport function stringHash(s, hashVal) {\n hashVal = numberHash(149417, hashVal);\n for (let i = 0, length = s.length; i < length; i++) {\n hashVal = numberHash(s.charCodeAt(i), hashVal);\n }\n return hashVal;\n}\nfunction arrayHash(arr, initialHashVal) {\n initialHashVal = numberHash(104579, initialHashVal);\n return arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);\n}\nfunction objectHash(obj, initialHashVal) {\n initialHashVal = numberHash(181387, initialHashVal);\n return Object.keys(obj).sort().reduce((hashVal, key) => {\n hashVal = stringHash(key, hashVal);\n return doHash(obj[key], hashVal);\n }, initialHashVal);\n}\nfunction leftRotate(value, bits, totalBits = 32) {\n // delta + bits = totalBits\n const delta = totalBits - bits;\n // All ones, expect `delta` zeros aligned to the right\n const mask = ~((1 << delta) - 1);\n // Join (value left-shifted `bits` bits) with (masked value right-shifted `delta` bits)\n return ((value << bits) | ((mask & value) >>> delta)) >>> 0;\n}\nfunction fill(dest, index = 0, count = dest.byteLength, value = 0) {\n for (let i = 0; i < count; i++) {\n dest[index + i] = value;\n }\n}\nfunction leftPad(value, length, char = '0') {\n while (value.length < length) {\n value = char + value;\n }\n return value;\n}\nexport function toHexString(bufferOrValue, bitsize = 32) {\n if (bufferOrValue instanceof ArrayBuffer) {\n return Array.from(new Uint8Array(bufferOrValue)).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n return leftPad((bufferOrValue >>> 0).toString(16), bitsize / 4);\n}\n/**\n * A SHA1 implementation that works with strings and does not allocate.\n */\nexport class StringSHA1 {\n constructor() {\n this._h0 = 0x67452301;\n this._h1 = 0xEFCDAB89;\n this._h2 = 0x98BADCFE;\n this._h3 = 0x10325476;\n this._h4 = 0xC3D2E1F0;\n this._buff = new Uint8Array(64 /* BLOCK_SIZE */ + 3 /* to fit any utf-8 */);\n this._buffDV = new DataView(this._buff.buffer);\n this._buffLen = 0;\n this._totalLen = 0;\n this._leftoverHighSurrogate = 0;\n this._finished = false;\n }\n update(str) {\n const strLen = str.length;\n if (strLen === 0) {\n return;\n }\n const buff = this._buff;\n let buffLen = this._buffLen;\n let leftoverHighSurrogate = this._leftoverHighSurrogate;\n let charCode;\n let offset;\n if (leftoverHighSurrogate !== 0) {\n charCode = leftoverHighSurrogate;\n offset = -1;\n leftoverHighSurrogate = 0;\n }\n else {\n charCode = str.charCodeAt(0);\n offset = 0;\n }\n while (true) {\n let codePoint = charCode;\n if (strings.isHighSurrogate(charCode)) {\n if (offset + 1 < strLen) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (strings.isLowSurrogate(nextCharCode)) {\n offset++;\n codePoint = strings.computeCodePoint(charCode, nextCharCode);\n }\n else {\n // illegal => unicode replacement character\n codePoint = 65533 /* UNICODE_REPLACEMENT */;\n }\n }\n else {\n // last character is a surrogate pair\n leftoverHighSurrogate = charCode;\n break;\n }\n }\n else if (strings.isLowSurrogate(charCode)) {\n // illegal => unicode replacement character\n codePoint = 65533 /* UNICODE_REPLACEMENT */;\n }\n buffLen = this._push(buff, buffLen, codePoint);\n offset++;\n if (offset < strLen) {\n charCode = str.charCodeAt(offset);\n }\n else {\n break;\n }\n }\n this._buffLen = buffLen;\n this._leftoverHighSurrogate = leftoverHighSurrogate;\n }\n _push(buff, buffLen, codePoint) {\n if (codePoint < 0x0080) {\n buff[buffLen++] = codePoint;\n }\n else if (codePoint < 0x0800) {\n buff[buffLen++] = 0b11000000 | ((codePoint & 0b00000000000000000000011111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else if (codePoint < 0x10000) {\n buff[buffLen++] = 0b11100000 | ((codePoint & 0b00000000000000001111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else {\n buff[buffLen++] = 0b11110000 | ((codePoint & 0b00000000000111000000000000000000) >>> 18);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000111111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n if (buffLen >= 64 /* BLOCK_SIZE */) {\n this._step();\n buffLen -= 64 /* BLOCK_SIZE */;\n this._totalLen += 64 /* BLOCK_SIZE */;\n // take last 3 in case of UTF8 overflow\n buff[0] = buff[64 /* BLOCK_SIZE */ + 0];\n buff[1] = buff[64 /* BLOCK_SIZE */ + 1];\n buff[2] = buff[64 /* BLOCK_SIZE */ + 2];\n }\n return buffLen;\n }\n digest() {\n if (!this._finished) {\n this._finished = true;\n if (this._leftoverHighSurrogate) {\n // illegal => unicode replacement character\n this._leftoverHighSurrogate = 0;\n this._buffLen = this._push(this._buff, this._buffLen, 65533 /* UNICODE_REPLACEMENT */);\n }\n this._totalLen += this._buffLen;\n this._wrapUp();\n }\n return toHexString(this._h0) + toHexString(this._h1) + toHexString(this._h2) + toHexString(this._h3) + toHexString(this._h4);\n }\n _wrapUp() {\n this._buff[this._buffLen++] = 0x80;\n fill(this._buff, this._buffLen);\n if (this._buffLen > 56) {\n this._step();\n fill(this._buff);\n }\n // this will fit because the mantissa can cover up to 52 bits\n const ml = 8 * this._totalLen;\n this._buffDV.setUint32(56, Math.floor(ml / 4294967296), false);\n this._buffDV.setUint32(60, ml % 4294967296, false);\n this._step();\n }\n _step() {\n const bigBlock32 = StringSHA1._bigBlock32;\n const data = this._buffDV;\n for (let j = 0; j < 64 /* 16*4 */; j += 4) {\n bigBlock32.setUint32(j, data.getUint32(j, false), false);\n }\n for (let j = 64; j < 320 /* 80*4 */; j += 4) {\n bigBlock32.setUint32(j, leftRotate((bigBlock32.getUint32(j - 12, false) ^ bigBlock32.getUint32(j - 32, false) ^ bigBlock32.getUint32(j - 56, false) ^ bigBlock32.getUint32(j - 64, false)), 1), false);\n }\n let a = this._h0;\n let b = this._h1;\n let c = this._h2;\n let d = this._h3;\n let e = this._h4;\n let f, k;\n let temp;\n for (let j = 0; j < 80; j++) {\n if (j < 20) {\n f = (b & c) | ((~b) & d);\n k = 0x5A827999;\n }\n else if (j < 40) {\n f = b ^ c ^ d;\n k = 0x6ED9EBA1;\n }\n else if (j < 60) {\n f = (b & c) | (b & d) | (c & d);\n k = 0x8F1BBCDC;\n }\n else {\n f = b ^ c ^ d;\n k = 0xCA62C1D6;\n }\n temp = (leftRotate(a, 5) + f + e + k + bigBlock32.getUint32(j * 4, false)) & 0xffffffff;\n e = d;\n d = c;\n c = leftRotate(b, 30);\n b = a;\n a = temp;\n }\n this._h0 = (this._h0 + a) & 0xffffffff;\n this._h1 = (this._h1 + b) & 0xffffffff;\n this._h2 = (this._h2 + c) & 0xffffffff;\n this._h3 = (this._h3 + d) & 0xffffffff;\n this._h4 = (this._h4 + e) & 0xffffffff;\n }\n}\nStringSHA1._bigBlock32 = new DataView(new ArrayBuffer(320)); // 80 * 4 = 320\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { DiffChange } from './diffChange.js';\nimport { stringHash } from '../hash.js';\nexport class StringDiffSequence {\n constructor(source) {\n this.source = source;\n }\n getElements() {\n const source = this.source;\n const characters = new Int32Array(source.length);\n for (let i = 0, len = source.length; i < len; i++) {\n characters[i] = source.charCodeAt(i);\n }\n return characters;\n }\n}\nexport function stringDiff(original, modified, pretty) {\n return new LcsDiff(new StringDiffSequence(original), new StringDiffSequence(modified)).ComputeDiff(pretty).changes;\n}\n//\n// The code below has been ported from a C# implementation in VS\n//\nexport class Debug {\n static Assert(condition, message) {\n if (!condition) {\n throw new Error(message);\n }\n }\n}\nexport class MyArray {\n /**\n * Copies a range of elements from an Array starting at the specified source index and pastes\n * them to another Array starting at the specified destination index. The length and the indexes\n * are specified as 64-bit integers.\n * sourceArray:\n *\t\tThe Array that contains the data to copy.\n * sourceIndex:\n *\t\tA 64-bit integer that represents the index in the sourceArray at which copying begins.\n * destinationArray:\n *\t\tThe Array that receives the data.\n * destinationIndex:\n *\t\tA 64-bit integer that represents the index in the destinationArray at which storing begins.\n * length:\n *\t\tA 64-bit integer that represents the number of elements to copy.\n */\n static Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) {\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n }\n static Copy2(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) {\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n }\n}\n/**\n * A utility class which helps to create the set of DiffChanges from\n * a difference operation. This class accepts original DiffElements and\n * modified DiffElements that are involved in a particular change. The\n * MarkNextChange() method can be called to mark the separation between\n * distinct changes. At the end, the Changes property can be called to retrieve\n * the constructed changes.\n */\nclass DiffChangeHelper {\n /**\n * Constructs a new DiffChangeHelper for the given DiffSequences.\n */\n constructor() {\n this.m_changes = [];\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n }\n /**\n * Marks the beginning of the next change in the set of differences.\n */\n MarkNextChange() {\n // Only add to the list if there is something to add\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Add the new change to our list\n this.m_changes.push(new DiffChange(this.m_originalStart, this.m_originalCount, this.m_modifiedStart, this.m_modifiedCount));\n }\n // Reset for the next change\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n /**\n * Adds the original element at the given position to the elements\n * affected by the current change. The modified index gives context\n * to the change position with respect to the original sequence.\n * @param originalIndex The index of the original element to add.\n * @param modifiedIndex The index of the modified element that provides corresponding position in the modified sequence.\n */\n AddOriginalElement(originalIndex, modifiedIndex) {\n // The 'true' start index is the smallest of the ones we've seen\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_originalCount++;\n }\n /**\n * Adds the modified element at the given position to the elements\n * affected by the current change. The original index gives context\n * to the change position with respect to the modified sequence.\n * @param originalIndex The index of the original element that provides corresponding position in the original sequence.\n * @param modifiedIndex The index of the modified element to add.\n */\n AddModifiedElement(originalIndex, modifiedIndex) {\n // The 'true' start index is the smallest of the ones we've seen\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_modifiedCount++;\n }\n /**\n * Retrieves all of the changes marked by the class.\n */\n getChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Finish up on whatever is left\n this.MarkNextChange();\n }\n return this.m_changes;\n }\n /**\n * Retrieves all of the changes marked by the class in the reverse order\n */\n getReverseChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Finish up on whatever is left\n this.MarkNextChange();\n }\n this.m_changes.reverse();\n return this.m_changes;\n }\n}\n/**\n * An implementation of the difference algorithm described in\n * \"An O(ND) Difference Algorithm and its variations\" by Eugene W. Myers\n */\nexport class LcsDiff {\n /**\n * Constructs the DiffFinder\n */\n constructor(originalSequence, modifiedSequence, continueProcessingPredicate = null) {\n this.ContinueProcessingPredicate = continueProcessingPredicate;\n this._originalSequence = originalSequence;\n this._modifiedSequence = modifiedSequence;\n const [originalStringElements, originalElementsOrHash, originalHasStrings] = LcsDiff._getElements(originalSequence);\n const [modifiedStringElements, modifiedElementsOrHash, modifiedHasStrings] = LcsDiff._getElements(modifiedSequence);\n this._hasStrings = (originalHasStrings && modifiedHasStrings);\n this._originalStringElements = originalStringElements;\n this._originalElementsOrHash = originalElementsOrHash;\n this._modifiedStringElements = modifiedStringElements;\n this._modifiedElementsOrHash = modifiedElementsOrHash;\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n }\n static _isStringArray(arr) {\n return (arr.length > 0 && typeof arr[0] === 'string');\n }\n static _getElements(sequence) {\n const elements = sequence.getElements();\n if (LcsDiff._isStringArray(elements)) {\n const hashes = new Int32Array(elements.length);\n for (let i = 0, len = elements.length; i < len; i++) {\n hashes[i] = stringHash(elements[i], 0);\n }\n return [elements, hashes, true];\n }\n if (elements instanceof Int32Array) {\n return [[], elements, false];\n }\n return [[], new Int32Array(elements), false];\n }\n ElementsAreEqual(originalIndex, newIndex) {\n if (this._originalElementsOrHash[originalIndex] !== this._modifiedElementsOrHash[newIndex]) {\n return false;\n }\n return (this._hasStrings ? this._originalStringElements[originalIndex] === this._modifiedStringElements[newIndex] : true);\n }\n ElementsAreStrictEqual(originalIndex, newIndex) {\n if (!this.ElementsAreEqual(originalIndex, newIndex)) {\n return false;\n }\n const originalElement = LcsDiff._getStrictElement(this._originalSequence, originalIndex);\n const modifiedElement = LcsDiff._getStrictElement(this._modifiedSequence, newIndex);\n return (originalElement === modifiedElement);\n }\n static _getStrictElement(sequence, index) {\n if (typeof sequence.getStrictElement === 'function') {\n return sequence.getStrictElement(index);\n }\n return null;\n }\n OriginalElementsAreEqual(index1, index2) {\n if (this._originalElementsOrHash[index1] !== this._originalElementsOrHash[index2]) {\n return false;\n }\n return (this._hasStrings ? this._originalStringElements[index1] === this._originalStringElements[index2] : true);\n }\n ModifiedElementsAreEqual(index1, index2) {\n if (this._modifiedElementsOrHash[index1] !== this._modifiedElementsOrHash[index2]) {\n return false;\n }\n return (this._hasStrings ? this._modifiedStringElements[index1] === this._modifiedStringElements[index2] : true);\n }\n ComputeDiff(pretty) {\n return this._ComputeDiff(0, this._originalElementsOrHash.length - 1, 0, this._modifiedElementsOrHash.length - 1, pretty);\n }\n /**\n * Computes the differences between the original and modified input\n * sequences on the bounded range.\n * @returns An array of the differences between the two input sequences.\n */\n _ComputeDiff(originalStart, originalEnd, modifiedStart, modifiedEnd, pretty) {\n const quitEarlyArr = [false];\n let changes = this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);\n if (pretty) {\n // We have to clean up the computed diff to be more intuitive\n // but it turns out this cannot be done correctly until the entire set\n // of diffs have been computed\n changes = this.PrettifyChanges(changes);\n }\n return {\n quitEarly: quitEarlyArr[0],\n changes: changes\n };\n }\n /**\n * Private helper method which computes the differences on the bounded range\n * recursively.\n * @returns An array of the differences between the two input sequences.\n */\n ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr) {\n quitEarlyArr[0] = false;\n // Find the start of the differences\n while (originalStart <= originalEnd && modifiedStart <= modifiedEnd && this.ElementsAreEqual(originalStart, modifiedStart)) {\n originalStart++;\n modifiedStart++;\n }\n // Find the end of the differences\n while (originalEnd >= originalStart && modifiedEnd >= modifiedStart && this.ElementsAreEqual(originalEnd, modifiedEnd)) {\n originalEnd--;\n modifiedEnd--;\n }\n // In the special case where we either have all insertions or all deletions or the sequences are identical\n if (originalStart > originalEnd || modifiedStart > modifiedEnd) {\n let changes;\n if (modifiedStart <= modifiedEnd) {\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n // All insertions\n changes = [\n new DiffChange(originalStart, 0, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n else if (originalStart <= originalEnd) {\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n // All deletions\n changes = [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, 0)\n ];\n }\n else {\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n // Identical sequences - No differences\n changes = [];\n }\n return changes;\n }\n // This problem can be solved using the Divide-And-Conquer technique.\n const midOriginalArr = [0];\n const midModifiedArr = [0];\n const result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);\n const midOriginal = midOriginalArr[0];\n const midModified = midModifiedArr[0];\n if (result !== null) {\n // Result is not-null when there was enough memory to compute the changes while\n // searching for the recursion point\n return result;\n }\n else if (!quitEarlyArr[0]) {\n // We can break the problem down recursively by finding the changes in the\n // First Half: (originalStart, modifiedStart) to (midOriginal, midModified)\n // Second Half: (midOriginal + 1, minModified + 1) to (originalEnd, modifiedEnd)\n // NOTE: ComputeDiff() is inclusive, therefore the second range starts on the next point\n const leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);\n let rightChanges = [];\n if (!quitEarlyArr[0]) {\n rightChanges = this.ComputeDiffRecursive(midOriginal + 1, originalEnd, midModified + 1, modifiedEnd, quitEarlyArr);\n }\n else {\n // We didn't have time to finish the first half, so we don't have time to compute this half.\n // Consider the entire rest of the sequence different.\n rightChanges = [\n new DiffChange(midOriginal + 1, originalEnd - (midOriginal + 1) + 1, midModified + 1, modifiedEnd - (midModified + 1) + 1)\n ];\n }\n return this.ConcatenateChanges(leftChanges, rightChanges);\n }\n // If we hit here, we quit early, and so can't return anything meaningful\n return [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr) {\n let forwardChanges = null;\n let reverseChanges = null;\n // First, walk backward through the forward diagonals history\n let changeHelper = new DiffChangeHelper();\n let diagonalMin = diagonalForwardStart;\n let diagonalMax = diagonalForwardEnd;\n let diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalForwardOffset;\n let lastOriginalIndex = -1073741824 /* MIN_SAFE_SMALL_INTEGER */;\n let historyIndex = this.m_forwardHistory.length - 1;\n do {\n // Get the diagonal index from the relative diagonal number\n const diagonal = diagonalRelative + diagonalForwardBase;\n // Figure out where we came from\n if (diagonal === diagonalMin || (diagonal < diagonalMax && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n // Vertical line (the element is an insert)\n originalIndex = forwardPoints[diagonal + 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex);\n diagonalRelative = (diagonal + 1) - diagonalForwardBase; //Setup for the next iteration\n }\n else {\n // Horizontal line (the element is a deletion)\n originalIndex = forwardPoints[diagonal - 1] + 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex - 1;\n changeHelper.AddOriginalElement(originalIndex, modifiedIndex + 1);\n diagonalRelative = (diagonal - 1) - diagonalForwardBase; //Setup for the next iteration\n }\n if (historyIndex >= 0) {\n forwardPoints = this.m_forwardHistory[historyIndex];\n diagonalForwardBase = forwardPoints[0]; //We stored this in the first spot\n diagonalMin = 1;\n diagonalMax = forwardPoints.length - 1;\n }\n } while (--historyIndex >= -1);\n // Ironically, we get the forward changes as the reverse of the\n // order we added them since we technically added them backwards\n forwardChanges = changeHelper.getReverseChanges();\n if (quitEarlyArr[0]) {\n // TODO: Calculate a partial from the reverse diagonals.\n // For now, just assume everything after the midOriginal/midModified point is a diff\n let originalStartPoint = midOriginalArr[0] + 1;\n let modifiedStartPoint = midModifiedArr[0] + 1;\n if (forwardChanges !== null && forwardChanges.length > 0) {\n const lastForwardChange = forwardChanges[forwardChanges.length - 1];\n originalStartPoint = Math.max(originalStartPoint, lastForwardChange.getOriginalEnd());\n modifiedStartPoint = Math.max(modifiedStartPoint, lastForwardChange.getModifiedEnd());\n }\n reverseChanges = [\n new DiffChange(originalStartPoint, originalEnd - originalStartPoint + 1, modifiedStartPoint, modifiedEnd - modifiedStartPoint + 1)\n ];\n }\n else {\n // Now walk backward through the reverse diagonals history\n changeHelper = new DiffChangeHelper();\n diagonalMin = diagonalReverseStart;\n diagonalMax = diagonalReverseEnd;\n diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalReverseOffset;\n lastOriginalIndex = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n historyIndex = (deltaIsEven) ? this.m_reverseHistory.length - 1 : this.m_reverseHistory.length - 2;\n do {\n // Get the diagonal index from the relative diagonal number\n const diagonal = diagonalRelative + diagonalReverseBase;\n // Figure out where we came from\n if (diagonal === diagonalMin || (diagonal < diagonalMax && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n // Horizontal line (the element is a deletion))\n originalIndex = reversePoints[diagonal + 1] - 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex + 1;\n changeHelper.AddOriginalElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = (diagonal + 1) - diagonalReverseBase; //Setup for the next iteration\n }\n else {\n // Vertical line (the element is an insertion)\n originalIndex = reversePoints[diagonal - 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = (diagonal - 1) - diagonalReverseBase; //Setup for the next iteration\n }\n if (historyIndex >= 0) {\n reversePoints = this.m_reverseHistory[historyIndex];\n diagonalReverseBase = reversePoints[0]; //We stored this in the first spot\n diagonalMin = 1;\n diagonalMax = reversePoints.length - 1;\n }\n } while (--historyIndex >= -1);\n // There are cases where the reverse history will find diffs that\n // are correct, but not intuitive, so we need shift them.\n reverseChanges = changeHelper.getChanges();\n }\n return this.ConcatenateChanges(forwardChanges, reverseChanges);\n }\n /**\n * Given the range to compute the diff on, this method finds the point:\n * (midOriginal, midModified)\n * that exists in the middle of the LCS of the two sequences and\n * is the point at which the LCS problem may be broken down recursively.\n * This method will try to keep the LCS trace in memory. If the LCS recursion\n * point is calculated and the full trace is available in memory, then this method\n * will return the change list.\n * @param originalStart The start bound of the original sequence range\n * @param originalEnd The end bound of the original sequence range\n * @param modifiedStart The start bound of the modified sequence range\n * @param modifiedEnd The end bound of the modified sequence range\n * @param midOriginal The middle point of the original sequence range\n * @param midModified The middle point of the modified sequence range\n * @returns The diff changes, if available, otherwise null\n */\n ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr) {\n let originalIndex = 0, modifiedIndex = 0;\n let diagonalForwardStart = 0, diagonalForwardEnd = 0;\n let diagonalReverseStart = 0, diagonalReverseEnd = 0;\n // To traverse the edit graph and produce the proper LCS, our actual\n // start position is just outside the given boundary\n originalStart--;\n modifiedStart--;\n // We set these up to make the compiler happy, but they will\n // be replaced before we return with the actual recursion point\n midOriginalArr[0] = 0;\n midModifiedArr[0] = 0;\n // Clear out the history\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n // Each cell in the two arrays corresponds to a diagonal in the edit graph.\n // The integer value in the cell represents the originalIndex of the furthest\n // reaching point found so far that ends in that diagonal.\n // The modifiedIndex can be computed mathematically from the originalIndex and the diagonal number.\n const maxDifferences = (originalEnd - originalStart) + (modifiedEnd - modifiedStart);\n const numDiagonals = maxDifferences + 1;\n const forwardPoints = new Int32Array(numDiagonals);\n const reversePoints = new Int32Array(numDiagonals);\n // diagonalForwardBase: Index into forwardPoints of the diagonal which passes through (originalStart, modifiedStart)\n // diagonalReverseBase: Index into reversePoints of the diagonal which passes through (originalEnd, modifiedEnd)\n const diagonalForwardBase = (modifiedEnd - modifiedStart);\n const diagonalReverseBase = (originalEnd - originalStart);\n // diagonalForwardOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n // diagonal number (relative to diagonalForwardBase)\n // diagonalReverseOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n // diagonal number (relative to diagonalReverseBase)\n const diagonalForwardOffset = (originalStart - modifiedStart);\n const diagonalReverseOffset = (originalEnd - modifiedEnd);\n // delta: The difference between the end diagonal and the start diagonal. This is used to relate diagonal numbers\n // relative to the start diagonal with diagonal numbers relative to the end diagonal.\n // The Even/Oddn-ness of this delta is important for determining when we should check for overlap\n const delta = diagonalReverseBase - diagonalForwardBase;\n const deltaIsEven = (delta % 2 === 0);\n // Here we set up the start and end points as the furthest points found so far\n // in both the forward and reverse directions, respectively\n forwardPoints[diagonalForwardBase] = originalStart;\n reversePoints[diagonalReverseBase] = originalEnd;\n // Remember if we quit early, and thus need to do a best-effort result instead of a real result.\n quitEarlyArr[0] = false;\n // A couple of points:\n // --With this method, we iterate on the number of differences between the two sequences.\n // The more differences there actually are, the longer this will take.\n // --Also, as the number of differences increases, we have to search on diagonals further\n // away from the reference diagonal (which is diagonalForwardBase for forward, diagonalReverseBase for reverse).\n // --We extend on even diagonals (relative to the reference diagonal) only when numDifferences\n // is even and odd diagonals only when numDifferences is odd.\n for (let numDifferences = 1; numDifferences <= (maxDifferences / 2) + 1; numDifferences++) {\n let furthestOriginalIndex = 0;\n let furthestModifiedIndex = 0;\n // Run the algorithm in the forward direction\n diagonalForwardStart = this.ClipDiagonalBound(diagonalForwardBase - numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n diagonalForwardEnd = this.ClipDiagonalBound(diagonalForwardBase + numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n for (let diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {\n // STEP 1: We extend the furthest reaching point in the present diagonal\n // by looking at the diagonals above and below and picking the one whose point\n // is further away from the start point (originalStart, modifiedStart)\n if (diagonal === diagonalForwardStart || (diagonal < diagonalForwardEnd && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n originalIndex = forwardPoints[diagonal + 1];\n }\n else {\n originalIndex = forwardPoints[diagonal - 1] + 1;\n }\n modifiedIndex = originalIndex - (diagonal - diagonalForwardBase) - diagonalForwardOffset;\n // Save the current originalIndex so we can test for false overlap in step 3\n const tempOriginalIndex = originalIndex;\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n // so long as the elements are equal.\n while (originalIndex < originalEnd && modifiedIndex < modifiedEnd && this.ElementsAreEqual(originalIndex + 1, modifiedIndex + 1)) {\n originalIndex++;\n modifiedIndex++;\n }\n forwardPoints[diagonal] = originalIndex;\n if (originalIndex + modifiedIndex > furthestOriginalIndex + furthestModifiedIndex) {\n furthestOriginalIndex = originalIndex;\n furthestModifiedIndex = modifiedIndex;\n }\n // STEP 3: If delta is odd (overlap first happens on forward when delta is odd)\n // and diagonal is in the range of reverse diagonals computed for numDifferences-1\n // (the previous iteration; we haven't computed reverse diagonals for numDifferences yet)\n // then check for overlap.\n if (!deltaIsEven && Math.abs(diagonal - diagonalReverseBase) <= (numDifferences - 1)) {\n if (originalIndex >= reversePoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex <= reversePoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // BINGO! We overlapped, and we have the full trace in memory!\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // Either false overlap, or we didn't have enough memory for the full trace\n // Just return the recursion point\n return null;\n }\n }\n }\n }\n // Check to see if we should be quitting early, before moving on to the next iteration.\n const matchLengthOfLongest = ((furthestOriginalIndex - originalStart) + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;\n if (this.ContinueProcessingPredicate !== null && !this.ContinueProcessingPredicate(furthestOriginalIndex, matchLengthOfLongest)) {\n // We can't finish, so skip ahead to generating a result from what we have.\n quitEarlyArr[0] = true;\n // Use the furthest distance we got in the forward direction.\n midOriginalArr[0] = furthestOriginalIndex;\n midModifiedArr[0] = furthestModifiedIndex;\n if (matchLengthOfLongest > 0 && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // Enough of the history is in memory to walk it backwards\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // We didn't actually remember enough of the history.\n //Since we are quitting the diff early, we need to shift back the originalStart and modified start\n //back into the boundary limits since we decremented their value above beyond the boundary limit.\n originalStart++;\n modifiedStart++;\n return [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n }\n // Run the algorithm in the reverse direction\n diagonalReverseStart = this.ClipDiagonalBound(diagonalReverseBase - numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n diagonalReverseEnd = this.ClipDiagonalBound(diagonalReverseBase + numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n for (let diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {\n // STEP 1: We extend the furthest reaching point in the present diagonal\n // by looking at the diagonals above and below and picking the one whose point\n // is further away from the start point (originalEnd, modifiedEnd)\n if (diagonal === diagonalReverseStart || (diagonal < diagonalReverseEnd && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n originalIndex = reversePoints[diagonal + 1] - 1;\n }\n else {\n originalIndex = reversePoints[diagonal - 1];\n }\n modifiedIndex = originalIndex - (diagonal - diagonalReverseBase) - diagonalReverseOffset;\n // Save the current originalIndex so we can test for false overlap\n const tempOriginalIndex = originalIndex;\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n // as long as the elements are equal.\n while (originalIndex > originalStart && modifiedIndex > modifiedStart && this.ElementsAreEqual(originalIndex, modifiedIndex)) {\n originalIndex--;\n modifiedIndex--;\n }\n reversePoints[diagonal] = originalIndex;\n // STEP 4: If delta is even (overlap first happens on reverse when delta is even)\n // and diagonal is in the range of forward diagonals computed for numDifferences\n // then check for overlap.\n if (deltaIsEven && Math.abs(diagonal - diagonalForwardBase) <= numDifferences) {\n if (originalIndex <= forwardPoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex >= forwardPoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // BINGO! We overlapped, and we have the full trace in memory!\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // Either false overlap, or we didn't have enough memory for the full trace\n // Just return the recursion point\n return null;\n }\n }\n }\n }\n // Save current vectors to history before the next iteration\n if (numDifferences <= 1447 /* MaxDifferencesHistory */) {\n // We are allocating space for one extra int, which we fill with\n // the index of the diagonal base index\n let temp = new Int32Array(diagonalForwardEnd - diagonalForwardStart + 2);\n temp[0] = diagonalForwardBase - diagonalForwardStart + 1;\n MyArray.Copy2(forwardPoints, diagonalForwardStart, temp, 1, diagonalForwardEnd - diagonalForwardStart + 1);\n this.m_forwardHistory.push(temp);\n temp = new Int32Array(diagonalReverseEnd - diagonalReverseStart + 2);\n temp[0] = diagonalReverseBase - diagonalReverseStart + 1;\n MyArray.Copy2(reversePoints, diagonalReverseStart, temp, 1, diagonalReverseEnd - diagonalReverseStart + 1);\n this.m_reverseHistory.push(temp);\n }\n }\n // If we got here, then we have the full trace in history. We just have to convert it to a change list\n // NOTE: This part is a bit messy\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n /**\n * Shifts the given changes to provide a more intuitive diff.\n * While the first element in a diff matches the first element after the diff,\n * we shift the diff down.\n *\n * @param changes The list of changes to shift\n * @returns The shifted changes\n */\n PrettifyChanges(changes) {\n // Shift all the changes down first\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const originalStop = (i < changes.length - 1) ? changes[i + 1].originalStart : this._originalElementsOrHash.length;\n const modifiedStop = (i < changes.length - 1) ? changes[i + 1].modifiedStart : this._modifiedElementsOrHash.length;\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n while (change.originalStart + change.originalLength < originalStop\n && change.modifiedStart + change.modifiedLength < modifiedStop\n && (!checkOriginal || this.OriginalElementsAreEqual(change.originalStart, change.originalStart + change.originalLength))\n && (!checkModified || this.ModifiedElementsAreEqual(change.modifiedStart, change.modifiedStart + change.modifiedLength))) {\n const startStrictEqual = this.ElementsAreStrictEqual(change.originalStart, change.modifiedStart);\n const endStrictEqual = this.ElementsAreStrictEqual(change.originalStart + change.originalLength, change.modifiedStart + change.modifiedLength);\n if (endStrictEqual && !startStrictEqual) {\n // moving the change down would create an equal change, but the elements are not strict equal\n break;\n }\n change.originalStart++;\n change.modifiedStart++;\n }\n let mergedChangeArr = [null];\n if (i < changes.length - 1 && this.ChangesOverlap(changes[i], changes[i + 1], mergedChangeArr)) {\n changes[i] = mergedChangeArr[0];\n changes.splice(i + 1, 1);\n i--;\n continue;\n }\n }\n // Shift changes back up until we hit empty or whitespace-only lines\n for (let i = changes.length - 1; i >= 0; i--) {\n const change = changes[i];\n let originalStop = 0;\n let modifiedStop = 0;\n if (i > 0) {\n const prevChange = changes[i - 1];\n originalStop = prevChange.originalStart + prevChange.originalLength;\n modifiedStop = prevChange.modifiedStart + prevChange.modifiedLength;\n }\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n let bestDelta = 0;\n let bestScore = this._boundaryScore(change.originalStart, change.originalLength, change.modifiedStart, change.modifiedLength);\n for (let delta = 1;; delta++) {\n const originalStart = change.originalStart - delta;\n const modifiedStart = change.modifiedStart - delta;\n if (originalStart < originalStop || modifiedStart < modifiedStop) {\n break;\n }\n if (checkOriginal && !this.OriginalElementsAreEqual(originalStart, originalStart + change.originalLength)) {\n break;\n }\n if (checkModified && !this.ModifiedElementsAreEqual(modifiedStart, modifiedStart + change.modifiedLength)) {\n break;\n }\n const touchingPreviousChange = (originalStart === originalStop && modifiedStart === modifiedStop);\n const score = ((touchingPreviousChange ? 5 : 0)\n + this._boundaryScore(originalStart, change.originalLength, modifiedStart, change.modifiedLength));\n if (score > bestScore) {\n bestScore = score;\n bestDelta = delta;\n }\n }\n change.originalStart -= bestDelta;\n change.modifiedStart -= bestDelta;\n const mergedChangeArr = [null];\n if (i > 0 && this.ChangesOverlap(changes[i - 1], changes[i], mergedChangeArr)) {\n changes[i - 1] = mergedChangeArr[0];\n changes.splice(i, 1);\n i++;\n continue;\n }\n }\n // There could be multiple longest common substrings.\n // Give preference to the ones containing longer lines\n if (this._hasStrings) {\n for (let i = 1, len = changes.length; i < len; i++) {\n const aChange = changes[i - 1];\n const bChange = changes[i];\n const matchedLength = bChange.originalStart - aChange.originalStart - aChange.originalLength;\n const aOriginalStart = aChange.originalStart;\n const bOriginalEnd = bChange.originalStart + bChange.originalLength;\n const abOriginalLength = bOriginalEnd - aOriginalStart;\n const aModifiedStart = aChange.modifiedStart;\n const bModifiedEnd = bChange.modifiedStart + bChange.modifiedLength;\n const abModifiedLength = bModifiedEnd - aModifiedStart;\n // Avoid wasting a lot of time with these searches\n if (matchedLength < 5 && abOriginalLength < 20 && abModifiedLength < 20) {\n const t = this._findBetterContiguousSequence(aOriginalStart, abOriginalLength, aModifiedStart, abModifiedLength, matchedLength);\n if (t) {\n const [originalMatchStart, modifiedMatchStart] = t;\n if (originalMatchStart !== aChange.originalStart + aChange.originalLength || modifiedMatchStart !== aChange.modifiedStart + aChange.modifiedLength) {\n // switch to another sequence that has a better score\n aChange.originalLength = originalMatchStart - aChange.originalStart;\n aChange.modifiedLength = modifiedMatchStart - aChange.modifiedStart;\n bChange.originalStart = originalMatchStart + matchedLength;\n bChange.modifiedStart = modifiedMatchStart + matchedLength;\n bChange.originalLength = bOriginalEnd - bChange.originalStart;\n bChange.modifiedLength = bModifiedEnd - bChange.modifiedStart;\n }\n }\n }\n }\n }\n return changes;\n }\n _findBetterContiguousSequence(originalStart, originalLength, modifiedStart, modifiedLength, desiredLength) {\n if (originalLength < desiredLength || modifiedLength < desiredLength) {\n return null;\n }\n const originalMax = originalStart + originalLength - desiredLength + 1;\n const modifiedMax = modifiedStart + modifiedLength - desiredLength + 1;\n let bestScore = 0;\n let bestOriginalStart = 0;\n let bestModifiedStart = 0;\n for (let i = originalStart; i < originalMax; i++) {\n for (let j = modifiedStart; j < modifiedMax; j++) {\n const score = this._contiguousSequenceScore(i, j, desiredLength);\n if (score > 0 && score > bestScore) {\n bestScore = score;\n bestOriginalStart = i;\n bestModifiedStart = j;\n }\n }\n }\n if (bestScore > 0) {\n return [bestOriginalStart, bestModifiedStart];\n }\n return null;\n }\n _contiguousSequenceScore(originalStart, modifiedStart, length) {\n let score = 0;\n for (let l = 0; l < length; l++) {\n if (!this.ElementsAreEqual(originalStart + l, modifiedStart + l)) {\n return 0;\n }\n score += this._originalStringElements[originalStart + l].length;\n }\n return score;\n }\n _OriginalIsBoundary(index) {\n if (index <= 0 || index >= this._originalElementsOrHash.length - 1) {\n return true;\n }\n return (this._hasStrings && /^\\s*$/.test(this._originalStringElements[index]));\n }\n _OriginalRegionIsBoundary(originalStart, originalLength) {\n if (this._OriginalIsBoundary(originalStart) || this._OriginalIsBoundary(originalStart - 1)) {\n return true;\n }\n if (originalLength > 0) {\n const originalEnd = originalStart + originalLength;\n if (this._OriginalIsBoundary(originalEnd - 1) || this._OriginalIsBoundary(originalEnd)) {\n return true;\n }\n }\n return false;\n }\n _ModifiedIsBoundary(index) {\n if (index <= 0 || index >= this._modifiedElementsOrHash.length - 1) {\n return true;\n }\n return (this._hasStrings && /^\\s*$/.test(this._modifiedStringElements[index]));\n }\n _ModifiedRegionIsBoundary(modifiedStart, modifiedLength) {\n if (this._ModifiedIsBoundary(modifiedStart) || this._ModifiedIsBoundary(modifiedStart - 1)) {\n return true;\n }\n if (modifiedLength > 0) {\n const modifiedEnd = modifiedStart + modifiedLength;\n if (this._ModifiedIsBoundary(modifiedEnd - 1) || this._ModifiedIsBoundary(modifiedEnd)) {\n return true;\n }\n }\n return false;\n }\n _boundaryScore(originalStart, originalLength, modifiedStart, modifiedLength) {\n const originalScore = (this._OriginalRegionIsBoundary(originalStart, originalLength) ? 1 : 0);\n const modifiedScore = (this._ModifiedRegionIsBoundary(modifiedStart, modifiedLength) ? 1 : 0);\n return (originalScore + modifiedScore);\n }\n /**\n * Concatenates the two input DiffChange lists and returns the resulting\n * list.\n * @param The left changes\n * @param The right changes\n * @returns The concatenated list\n */\n ConcatenateChanges(left, right) {\n let mergedChangeArr = [];\n if (left.length === 0 || right.length === 0) {\n return (right.length > 0) ? right : left;\n }\n else if (this.ChangesOverlap(left[left.length - 1], right[0], mergedChangeArr)) {\n // Since we break the problem down recursively, it is possible that we\n // might recurse in the middle of a change thereby splitting it into\n // two changes. Here in the combining stage, we detect and fuse those\n // changes back together\n const result = new Array(left.length + right.length - 1);\n MyArray.Copy(left, 0, result, 0, left.length - 1);\n result[left.length - 1] = mergedChangeArr[0];\n MyArray.Copy(right, 1, result, left.length, right.length - 1);\n return result;\n }\n else {\n const result = new Array(left.length + right.length);\n MyArray.Copy(left, 0, result, 0, left.length);\n MyArray.Copy(right, 0, result, left.length, right.length);\n return result;\n }\n }\n /**\n * Returns true if the two changes overlap and can be merged into a single\n * change\n * @param left The left change\n * @param right The right change\n * @param mergedChange The merged change if the two overlap, null otherwise\n * @returns True if the two changes overlap\n */\n ChangesOverlap(left, right, mergedChangeArr) {\n Debug.Assert(left.originalStart <= right.originalStart, 'Left change is not less than or equal to right change');\n Debug.Assert(left.modifiedStart <= right.modifiedStart, 'Left change is not less than or equal to right change');\n if (left.originalStart + left.originalLength >= right.originalStart || left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n const originalStart = left.originalStart;\n let originalLength = left.originalLength;\n const modifiedStart = left.modifiedStart;\n let modifiedLength = left.modifiedLength;\n if (left.originalStart + left.originalLength >= right.originalStart) {\n originalLength = right.originalStart + right.originalLength - left.originalStart;\n }\n if (left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n modifiedLength = right.modifiedStart + right.modifiedLength - left.modifiedStart;\n }\n mergedChangeArr[0] = new DiffChange(originalStart, originalLength, modifiedStart, modifiedLength);\n return true;\n }\n else {\n mergedChangeArr[0] = null;\n return false;\n }\n }\n /**\n * Helper method used to clip a diagonal index to the range of valid\n * diagonals. This also decides whether or not the diagonal index,\n * if it exceeds the boundary, should be clipped to the boundary or clipped\n * one inside the boundary depending on the Even/Odd status of the boundary\n * and numDifferences.\n * @param diagonal The index of the diagonal to clip.\n * @param numDifferences The current number of differences being iterated upon.\n * @param diagonalBaseIndex The base reference diagonal.\n * @param numDiagonals The total number of diagonals.\n * @returns The clipped diagonal index.\n */\n ClipDiagonalBound(diagonal, numDifferences, diagonalBaseIndex, numDiagonals) {\n if (diagonal >= 0 && diagonal < numDiagonals) {\n // Nothing to clip, its in range\n return diagonal;\n }\n // diagonalsBelow: The number of diagonals below the reference diagonal\n // diagonalsAbove: The number of diagonals above the reference diagonal\n const diagonalsBelow = diagonalBaseIndex;\n const diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;\n const diffEven = (numDifferences % 2 === 0);\n if (diagonal < 0) {\n const lowerBoundEven = (diagonalsBelow % 2 === 0);\n return (diffEven === lowerBoundEven) ? 0 : 1;\n }\n else {\n const upperBoundEven = (diagonalsAbove % 2 === 0);\n return (diffEven === upperBoundEven) ? numDiagonals - 1 : numDiagonals - 2;\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// NOTE: VSCode's copy of nodejs path library to be usable in common (non-node) namespace\n// Copied from: https://github.com/nodejs/node/blob/v14.16.0/lib/path.js\n/**\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nimport * as process from './process.js';\nconst CHAR_UPPERCASE_A = 65; /* A */\nconst CHAR_LOWERCASE_A = 97; /* a */\nconst CHAR_UPPERCASE_Z = 90; /* Z */\nconst CHAR_LOWERCASE_Z = 122; /* z */\nconst CHAR_DOT = 46; /* . */\nconst CHAR_FORWARD_SLASH = 47; /* / */\nconst CHAR_BACKWARD_SLASH = 92; /* \\ */\nconst CHAR_COLON = 58; /* : */\nconst CHAR_QUESTION_MARK = 63; /* ? */\nclass ErrorInvalidArgType extends Error {\n constructor(name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n let determiner;\n if (typeof expected === 'string' && expected.indexOf('not ') === 0) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n }\n else {\n determiner = 'must be';\n }\n const type = name.indexOf('.') !== -1 ? 'property' : 'argument';\n let msg = `The \"${name}\" ${type} ${determiner} of type ${expected}`;\n msg += `. Received type ${typeof actual}`;\n super(msg);\n this.code = 'ERR_INVALID_ARG_TYPE';\n }\n}\nfunction validateString(value, name) {\n if (typeof value !== 'string') {\n throw new ErrorInvalidArgType(name, 'string', value);\n }\n}\nfunction isPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n}\nfunction isPosixPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH;\n}\nfunction isWindowsDeviceRoot(code) {\n return (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) ||\n (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z);\n}\n// Resolves . and .. elements in a path with directory names\nfunction normalizeString(path, allowAboveRoot, separator, isPathSeparator) {\n let res = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code = 0;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n }\n else if (isPathSeparator(code)) {\n break;\n }\n else {\n code = CHAR_FORWARD_SLASH;\n }\n if (isPathSeparator(code)) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 ||\n res.charCodeAt(res.length - 1) !== CHAR_DOT ||\n res.charCodeAt(res.length - 2) !== CHAR_DOT) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(separator);\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n }\n else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n else if (res.length !== 0) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n res += res.length > 0 ? `${separator}..` : '..';\n lastSegmentLength = 2;\n }\n }\n else {\n if (res.length > 0) {\n res += `${separator}${path.slice(lastSlash + 1, i)}`;\n }\n else {\n res = path.slice(lastSlash + 1, i);\n }\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === CHAR_DOT && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\nfunction _format(sep, pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new ErrorInvalidArgType('pathObject', 'Object', pathObject);\n }\n const dir = pathObject.dir || pathObject.root;\n const base = pathObject.base ||\n `${pathObject.name || ''}${pathObject.ext || ''}`;\n if (!dir) {\n return base;\n }\n return dir === pathObject.root ? `${dir}${base}` : `${dir}${sep}${base}`;\n}\nexport const win32 = {\n // path.resolve([from ...], to)\n resolve(...pathSegments) {\n let resolvedDevice = '';\n let resolvedTail = '';\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= -1; i--) {\n let path;\n if (i >= 0) {\n path = pathSegments[i];\n validateString(path, 'path');\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n }\n else if (resolvedDevice.length === 0) {\n path = process.cwd();\n }\n else {\n // Windows has the concept of drive-specific current working\n // directories. If we've resolved a drive letter but not yet an\n // absolute path, get cwd for that drive, or the process cwd if\n // the drive cwd is not available. We're sure the device is not\n // a UNC path at this points, because UNC paths are always absolute.\n path = process.env[`=${resolvedDevice}`] || process.cwd();\n // Verify that a cwd was found and that it actually points\n // to our drive. If not, default to the drive's root.\n if (path === undefined ||\n (path.slice(0, 2).toLowerCase() !== resolvedDevice.toLowerCase() &&\n path.charCodeAt(2) === CHAR_BACKWARD_SLASH)) {\n path = `${resolvedDevice}\\\\`;\n }\n }\n const len = path.length;\n let rootEnd = 0;\n let device = '';\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n // Try to match a root\n if (len === 1) {\n if (isPathSeparator(code)) {\n // `path` contains just a path separator\n rootEnd = 1;\n isAbsolute = true;\n }\n }\n else if (isPathSeparator(code)) {\n // Possible UNC root\n // If we started with a separator, we know we at least have an\n // absolute path of some kind (UNC or otherwise)\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len || j !== last) {\n // We matched a UNC root\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n }\n else {\n rootEnd = 1;\n }\n }\n else if (isWindowsDeviceRoot(code) &&\n path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n // Treat separator following drive name as an absolute path\n // indicator\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n if (device.length > 0) {\n if (resolvedDevice.length > 0) {\n if (device.toLowerCase() !== resolvedDevice.toLowerCase()) {\n // This path points to another device so it is not applicable\n continue;\n }\n }\n else {\n resolvedDevice = device;\n }\n }\n if (resolvedAbsolute) {\n if (resolvedDevice.length > 0) {\n break;\n }\n }\n else {\n resolvedTail = `${path.slice(rootEnd)}\\\\${resolvedTail}`;\n resolvedAbsolute = isAbsolute;\n if (isAbsolute && resolvedDevice.length > 0) {\n break;\n }\n }\n }\n // At this point the path should be resolved to a full absolute path,\n // but handle relative paths to be safe (might happen when process.cwd()\n // fails)\n // Normalize the tail path\n resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, '\\\\', isPathSeparator);\n return resolvedAbsolute ?\n `${resolvedDevice}\\\\${resolvedTail}` :\n `${resolvedDevice}${resolvedTail}` || '.';\n },\n normalize(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return '.';\n }\n let rootEnd = 0;\n let device;\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n // Try to match a root\n if (len === 1) {\n // `path` contains just a single char, exit early to avoid\n // unnecessary work\n return isPosixPathSeparator(code) ? '\\\\' : path;\n }\n if (isPathSeparator(code)) {\n // Possible UNC root\n // If we started with a separator, we know we at least have an absolute\n // path of some kind (UNC or otherwise)\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n // Return the normalized version of the UNC root since there\n // is nothing left to process\n return `\\\\\\\\${firstPart}\\\\${path.slice(last)}\\\\`;\n }\n if (j !== last) {\n // We matched a UNC root with leftovers\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n }\n else {\n rootEnd = 1;\n }\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n // Treat separator following drive name as an absolute path\n // indicator\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n let tail = rootEnd < len ?\n normalizeString(path.slice(rootEnd), !isAbsolute, '\\\\', isPathSeparator) :\n '';\n if (tail.length === 0 && !isAbsolute) {\n tail = '.';\n }\n if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {\n tail += '\\\\';\n }\n if (device === undefined) {\n return isAbsolute ? `\\\\${tail}` : tail;\n }\n return isAbsolute ? `${device}\\\\${tail}` : `${device}${tail}`;\n },\n isAbsolute(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return false;\n }\n const code = path.charCodeAt(0);\n return isPathSeparator(code) ||\n // Possible device root\n (len > 2 &&\n isWindowsDeviceRoot(code) &&\n path.charCodeAt(1) === CHAR_COLON &&\n isPathSeparator(path.charCodeAt(2)));\n },\n join(...paths) {\n if (paths.length === 0) {\n return '.';\n }\n let joined;\n let firstPart;\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, 'path');\n if (arg.length > 0) {\n if (joined === undefined) {\n joined = firstPart = arg;\n }\n else {\n joined += `\\\\${arg}`;\n }\n }\n }\n if (joined === undefined) {\n return '.';\n }\n // Make sure that the joined path doesn't start with two slashes, because\n // normalize() will mistake it for a UNC path then.\n //\n // This step is skipped when it is very clear that the user actually\n // intended to point at a UNC path. This is assumed when the first\n // non-empty string arguments starts with exactly two slashes followed by\n // at least one more non-slash character.\n //\n // Note that for normalize() to treat a path as a UNC path it needs to\n // have at least 2 components, so we don't filter for that here.\n // This means that the user can use join to construct UNC paths from\n // a server name and a share name; for example:\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\\\')\n let needsReplace = true;\n let slashCount = 0;\n if (typeof firstPart === 'string' && isPathSeparator(firstPart.charCodeAt(0))) {\n ++slashCount;\n const firstLen = firstPart.length;\n if (firstLen > 1 && isPathSeparator(firstPart.charCodeAt(1))) {\n ++slashCount;\n if (firstLen > 2) {\n if (isPathSeparator(firstPart.charCodeAt(2))) {\n ++slashCount;\n }\n else {\n // We matched a UNC path in the first part\n needsReplace = false;\n }\n }\n }\n }\n if (needsReplace) {\n // Find any more consecutive slashes we need to replace\n while (slashCount < joined.length &&\n isPathSeparator(joined.charCodeAt(slashCount))) {\n slashCount++;\n }\n // Replace the slashes if needed\n if (slashCount >= 2) {\n joined = `\\\\${joined.slice(slashCount)}`;\n }\n }\n return win32.normalize(joined);\n },\n // It will solve the relative path from `from` to `to`, for instance:\n // from = 'C:\\\\orandea\\\\test\\\\aaa'\n // to = 'C:\\\\orandea\\\\impl\\\\bbb'\n // The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\n relative(from, to) {\n validateString(from, 'from');\n validateString(to, 'to');\n if (from === to) {\n return '';\n }\n const fromOrig = win32.resolve(from);\n const toOrig = win32.resolve(to);\n if (fromOrig === toOrig) {\n return '';\n }\n from = fromOrig.toLowerCase();\n to = toOrig.toLowerCase();\n if (from === to) {\n return '';\n }\n // Trim any leading backslashes\n let fromStart = 0;\n while (fromStart < from.length &&\n from.charCodeAt(fromStart) === CHAR_BACKWARD_SLASH) {\n fromStart++;\n }\n // Trim trailing backslashes (applicable to UNC paths only)\n let fromEnd = from.length;\n while (fromEnd - 1 > fromStart &&\n from.charCodeAt(fromEnd - 1) === CHAR_BACKWARD_SLASH) {\n fromEnd--;\n }\n const fromLen = fromEnd - fromStart;\n // Trim any leading backslashes\n let toStart = 0;\n while (toStart < to.length &&\n to.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {\n toStart++;\n }\n // Trim trailing backslashes (applicable to UNC paths only)\n let toEnd = to.length;\n while (toEnd - 1 > toStart &&\n to.charCodeAt(toEnd - 1) === CHAR_BACKWARD_SLASH) {\n toEnd--;\n }\n const toLen = toEnd - toStart;\n // Compare paths to find the longest common path from root\n const length = fromLen < toLen ? fromLen : toLen;\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) {\n break;\n }\n else if (fromCode === CHAR_BACKWARD_SLASH) {\n lastCommonSep = i;\n }\n }\n // We found a mismatch before the first common path separator was seen, so\n // return the original `to`.\n if (i !== length) {\n if (lastCommonSep === -1) {\n return toOrig;\n }\n }\n else {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo\\\\bar\\\\baz'\n return toOrig.slice(toStart + i + 1);\n }\n if (i === 2) {\n // We get here if `from` is the device root.\n // For example: from='C:\\\\'; to='C:\\\\foo'\n return toOrig.slice(toStart + i);\n }\n }\n if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo'\n lastCommonSep = i;\n }\n else if (i === 2) {\n // We get here if `to` is the device root.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\'\n lastCommonSep = 3;\n }\n }\n if (lastCommonSep === -1) {\n lastCommonSep = 0;\n }\n }\n let out = '';\n // Generate the relative path based on the path difference between `to` and\n // `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {\n out += out.length === 0 ? '..' : '\\\\..';\n }\n }\n toStart += lastCommonSep;\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0) {\n return `${out}${toOrig.slice(toStart, toEnd)}`;\n }\n if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {\n ++toStart;\n }\n return toOrig.slice(toStart, toEnd);\n },\n toNamespacedPath(path) {\n // Note: this will *probably* throw somewhere.\n if (typeof path !== 'string') {\n return path;\n }\n if (path.length === 0) {\n return '';\n }\n const resolvedPath = win32.resolve(path);\n if (resolvedPath.length <= 2) {\n return path;\n }\n if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {\n // Possible UNC root\n if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {\n const code = resolvedPath.charCodeAt(2);\n if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {\n // Matched non-long UNC root, convert the path to a long UNC path\n return `\\\\\\\\?\\\\UNC\\\\${resolvedPath.slice(2)}`;\n }\n }\n }\n else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0)) &&\n resolvedPath.charCodeAt(1) === CHAR_COLON &&\n resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) {\n // Matched device root, convert the path to a long UNC path\n return `\\\\\\\\?\\\\${resolvedPath}`;\n }\n return path;\n },\n dirname(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return '.';\n }\n let rootEnd = -1;\n let offset = 0;\n const code = path.charCodeAt(0);\n if (len === 1) {\n // `path` contains just a path separator, exit early to avoid\n // unnecessary work or a dot.\n return isPathSeparator(code) ? path : '.';\n }\n // Try to match a root\n if (isPathSeparator(code)) {\n // Possible UNC root\n rootEnd = offset = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n return path;\n }\n if (j !== last) {\n // We matched a UNC root with leftovers\n // Offset by 1 to include the separator after the UNC root to\n // treat it as a \"normal root\" on top of a (UNC) root\n rootEnd = offset = j + 1;\n }\n }\n }\n }\n // Possible device root\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n rootEnd = len > 2 && isPathSeparator(path.charCodeAt(2)) ? 3 : 2;\n offset = rootEnd;\n }\n let end = -1;\n let matchedSlash = true;\n for (let i = len - 1; i >= offset; --i) {\n if (isPathSeparator(path.charCodeAt(i))) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1) {\n if (rootEnd === -1) {\n return '.';\n }\n end = rootEnd;\n }\n return path.slice(0, end);\n },\n basename(path, ext) {\n if (ext !== undefined) {\n validateString(ext, 'ext');\n }\n validateString(path, 'path');\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n // Check for a drive letter prefix so as not to mistake the following\n // path separator as an extra separator at the end of the path that can be\n // disregarded\n if (path.length >= 2 &&\n isWindowsDeviceRoot(path.charCodeAt(0)) &&\n path.charCodeAt(1) === CHAR_COLON) {\n start = 2;\n }\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext === path) {\n return '';\n }\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end) {\n end = firstNonSlashEnd;\n }\n else if (end === -1) {\n end = path.length;\n }\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= start; --i) {\n if (isPathSeparator(path.charCodeAt(i))) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) {\n return '';\n }\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, 'path');\n let start = 0;\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Check for a drive letter prefix so as not to mistake the following\n // path separator as an extra separator at the end of the path that can be\n // disregarded\n if (path.length >= 2 &&\n path.charCodeAt(1) === CHAR_COLON &&\n isWindowsDeviceRoot(path.charCodeAt(0))) {\n start = startPart = 2;\n }\n for (let i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n },\n format: _format.bind(null, '\\\\'),\n parse(path) {\n validateString(path, 'path');\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) {\n return ret;\n }\n const len = path.length;\n let rootEnd = 0;\n let code = path.charCodeAt(0);\n if (len === 1) {\n if (isPathSeparator(code)) {\n // `path` contains just a path separator, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n ret.base = ret.name = path;\n return ret;\n }\n // Try to match a root\n if (isPathSeparator(code)) {\n // Possible UNC root\n rootEnd = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n rootEnd = j;\n }\n else if (j !== last) {\n // We matched a UNC root with leftovers\n rootEnd = j + 1;\n }\n }\n }\n }\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n if (len <= 2) {\n // `path` contains just a drive root, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 2;\n if (isPathSeparator(path.charCodeAt(2))) {\n if (len === 3) {\n // `path` contains just a drive root, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 3;\n }\n }\n if (rootEnd > 0) {\n ret.root = path.slice(0, rootEnd);\n }\n let startDot = -1;\n let startPart = rootEnd;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Get non-dir info\n for (; i >= rootEnd; --i) {\n code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (end !== -1) {\n if (startDot === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n ret.base = ret.name = path.slice(startPart, end);\n }\n else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n // If the directory is the root, use the entire root as the `dir` including\n // the trailing slash if any (`C:\\abc` -> `C:\\`). Otherwise, strip out the\n // trailing slash (`C:\\abc\\def` -> `C:\\abc`).\n if (startPart > 0 && startPart !== rootEnd) {\n ret.dir = path.slice(0, startPart - 1);\n }\n else {\n ret.dir = ret.root;\n }\n return ret;\n },\n sep: '\\\\',\n delimiter: ';',\n win32: null,\n posix: null\n};\nexport const posix = {\n // path.resolve([from ...], to)\n resolve(...pathSegments) {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n const path = i >= 0 ? pathSegments[i] : process.cwd();\n validateString(path, 'path');\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, '/', isPosixPathSeparator);\n if (resolvedAbsolute) {\n return `/${resolvedPath}`;\n }\n return resolvedPath.length > 0 ? resolvedPath : '.';\n },\n normalize(path) {\n validateString(path, 'path');\n if (path.length === 0) {\n return '.';\n }\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n const trailingSeparator = path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH;\n // Normalize the path\n path = normalizeString(path, !isAbsolute, '/', isPosixPathSeparator);\n if (path.length === 0) {\n if (isAbsolute) {\n return '/';\n }\n return trailingSeparator ? './' : '.';\n }\n if (trailingSeparator) {\n path += '/';\n }\n return isAbsolute ? `/${path}` : path;\n },\n isAbsolute(path) {\n validateString(path, 'path');\n return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n },\n join(...paths) {\n if (paths.length === 0) {\n return '.';\n }\n let joined;\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, 'path');\n if (arg.length > 0) {\n if (joined === undefined) {\n joined = arg;\n }\n else {\n joined += `/${arg}`;\n }\n }\n }\n if (joined === undefined) {\n return '.';\n }\n return posix.normalize(joined);\n },\n relative(from, to) {\n validateString(from, 'from');\n validateString(to, 'to');\n if (from === to) {\n return '';\n }\n // Trim leading forward slashes.\n from = posix.resolve(from);\n to = posix.resolve(to);\n if (from === to) {\n return '';\n }\n const fromStart = 1;\n const fromEnd = from.length;\n const fromLen = fromEnd - fromStart;\n const toStart = 1;\n const toLen = to.length - toStart;\n // Compare paths to find the longest common path from root\n const length = (fromLen < toLen ? fromLen : toLen);\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) {\n break;\n }\n else if (fromCode === CHAR_FORWARD_SLASH) {\n lastCommonSep = i;\n }\n }\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n }\n if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n }\n else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n }\n else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo/bar'; to='/'\n lastCommonSep = 0;\n }\n }\n }\n let out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`.\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n out += out.length === 0 ? '..' : '/..';\n }\n }\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts.\n return `${out}${to.slice(toStart + lastCommonSep)}`;\n },\n toNamespacedPath(path) {\n // Non-op on posix systems\n return path;\n },\n dirname(path) {\n validateString(path, 'path');\n if (path.length === 0) {\n return '.';\n }\n const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let end = -1;\n let matchedSlash = true;\n for (let i = path.length - 1; i >= 1; --i) {\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1) {\n return hasRoot ? '/' : '.';\n }\n if (hasRoot && end === 1) {\n return '//';\n }\n return path.slice(0, end);\n },\n basename(path, ext) {\n if (ext !== undefined) {\n validateString(ext, 'ext');\n }\n validateString(path, 'path');\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext === path) {\n return '';\n }\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end) {\n end = firstNonSlashEnd;\n }\n else if (end === -1) {\n end = path.length;\n }\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) {\n return '';\n }\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, 'path');\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n for (let i = path.length - 1; i >= 0; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n },\n format: _format.bind(null, '/'),\n parse(path) {\n validateString(path, 'path');\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) {\n return ret;\n }\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n }\n else {\n start = 0;\n }\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Get non-dir info\n for (; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (end !== -1) {\n const start = startPart === 0 && isAbsolute ? 1 : startPart;\n if (startDot === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n ret.base = ret.name = path.slice(start, end);\n }\n else {\n ret.name = path.slice(start, startDot);\n ret.base = path.slice(start, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n if (startPart > 0) {\n ret.dir = path.slice(0, startPart - 1);\n }\n else if (isAbsolute) {\n ret.dir = '/';\n }\n return ret;\n },\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\nposix.win32 = win32.win32 = win32;\nposix.posix = win32.posix = posix;\nexport const normalize = (process.platform === 'win32' ? win32.normalize : posix.normalize);\nexport const resolve = (process.platform === 'win32' ? win32.resolve : posix.resolve);\nexport const relative = (process.platform === 'win32' ? win32.relative : posix.relative);\nexport const dirname = (process.platform === 'win32' ? win32.dirname : posix.dirname);\nexport const basename = (process.platform === 'win32' ? win32.basename : posix.basename);\nexport const extname = (process.platform === 'win32' ? win32.extname : posix.extname);\nexport const sep = (process.platform === 'win32' ? win32.sep : posix.sep);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as paths from './path.js';\nimport { isWindows } from './platform.js';\nconst _schemePattern = /^\\w[\\w\\d+.-]*$/;\nconst _singleSlashStart = /^\\//;\nconst _doubleSlashStart = /^\\/\\//;\nfunction _validateUri(ret, _strict) {\n // scheme, must be set\n if (!ret.scheme && _strict) {\n throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n }\n // scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n // ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n if (ret.scheme && !_schemePattern.test(ret.scheme)) {\n throw new Error('[UriError]: Scheme contains illegal characters.');\n }\n // path, http://tools.ietf.org/html/rfc3986#section-3.3\n // If a URI contains an authority component, then the path component\n // must either be empty or begin with a slash (\"/\") character. If a URI\n // does not contain an authority component, then the path cannot begin\n // with two slash characters (\"//\").\n if (ret.path) {\n if (ret.authority) {\n if (!_singleSlashStart.test(ret.path)) {\n throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n }\n }\n else {\n if (_doubleSlashStart.test(ret.path)) {\n throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n }\n }\n }\n}\n// for a while we allowed uris *without* schemes and this is the migration\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\n// back to the file-scheme. that should cause the least carnage and still be a\n// clear warning\nfunction _schemeFix(scheme, _strict) {\n if (!scheme && !_strict) {\n return 'file';\n }\n return scheme;\n}\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\nfunction _referenceResolution(scheme, path) {\n // the slash-character is our 'default base' as we don't\n // support constructing URIs relative to other URIs. This\n // also means that we alter and potentially break paths.\n // see https://tools.ietf.org/html/rfc3986#section-5.1.4\n switch (scheme) {\n case 'https':\n case 'http':\n case 'file':\n if (!path) {\n path = _slash;\n }\n else if (path[0] !== _slash) {\n path = _slash + path;\n }\n break;\n }\n return path;\n}\nconst _empty = '';\nconst _slash = '/';\nconst _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n * foo://example.com:8042/over/there?name=ferret#nose\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\n * | | | | |\n * scheme authority path query fragment\n * | _____________________|__\n * / \\ / \\\n * urn:example:animal:ferret:nose\n * ```\n */\nexport class URI {\n /**\n * @internal\n */\n constructor(schemeOrData, authority, path, query, fragment, _strict = false) {\n if (typeof schemeOrData === 'object') {\n this.scheme = schemeOrData.scheme || _empty;\n this.authority = schemeOrData.authority || _empty;\n this.path = schemeOrData.path || _empty;\n this.query = schemeOrData.query || _empty;\n this.fragment = schemeOrData.fragment || _empty;\n // no validation because it's this URI\n // that creates uri components.\n // _validateUri(this);\n }\n else {\n this.scheme = _schemeFix(schemeOrData, _strict);\n this.authority = authority || _empty;\n this.path = _referenceResolution(this.scheme, path || _empty);\n this.query = query || _empty;\n this.fragment = fragment || _empty;\n _validateUri(this, _strict);\n }\n }\n static isUri(thing) {\n if (thing instanceof URI) {\n return true;\n }\n if (!thing) {\n return false;\n }\n return typeof thing.authority === 'string'\n && typeof thing.fragment === 'string'\n && typeof thing.path === 'string'\n && typeof thing.query === 'string'\n && typeof thing.scheme === 'string'\n && typeof thing.fsPath === 'string'\n && typeof thing.with === 'function'\n && typeof thing.toString === 'function';\n }\n // ---- filesystem path -----------------------\n /**\n * Returns a string representing the corresponding file system path of this URI.\n * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n * platform specific path separator.\n *\n * * Will *not* validate the path for invalid characters and semantics.\n * * Will *not* look at the scheme of this URI.\n * * The result shall *not* be used for display purposes but for accessing a file on disk.\n *\n *\n * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n *\n * ```ts\n const u = URI.parse('file://server/c$/folder/file.txt')\n u.authority === 'server'\n u.path === '/shares/c$/file.txt'\n u.fsPath === '\\\\server\\c$\\folder\\file.txt'\n ```\n *\n * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n * with URIs that represent files on disk (`file` scheme).\n */\n get fsPath() {\n // if (this.scheme !== 'file') {\n // \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\n // }\n return uriToFsPath(this, false);\n }\n // ---- modify to new -------------------------\n with(change) {\n if (!change) {\n return this;\n }\n let { scheme, authority, path, query, fragment } = change;\n if (scheme === undefined) {\n scheme = this.scheme;\n }\n else if (scheme === null) {\n scheme = _empty;\n }\n if (authority === undefined) {\n authority = this.authority;\n }\n else if (authority === null) {\n authority = _empty;\n }\n if (path === undefined) {\n path = this.path;\n }\n else if (path === null) {\n path = _empty;\n }\n if (query === undefined) {\n query = this.query;\n }\n else if (query === null) {\n query = _empty;\n }\n if (fragment === undefined) {\n fragment = this.fragment;\n }\n else if (fragment === null) {\n fragment = _empty;\n }\n if (scheme === this.scheme\n && authority === this.authority\n && path === this.path\n && query === this.query\n && fragment === this.fragment) {\n return this;\n }\n return new Uri(scheme, authority, path, query, fragment);\n }\n // ---- parse & validate ------------------------\n /**\n * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,\n * `file:///usr/home`, or `scheme:with/path`.\n *\n * @param value A string which represents an URI (see `URI#toString`).\n */\n static parse(value, _strict = false) {\n const match = _regexp.exec(value);\n if (!match) {\n return new Uri(_empty, _empty, _empty, _empty, _empty);\n }\n return new Uri(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);\n }\n /**\n * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n * `/usr/home`, or `\\\\server\\share\\some\\path`.\n *\n * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n * `URI.parse('file://' + path)` because the path might contain characters that are\n * interpreted (# and ?). See the following sample:\n * ```ts\n const good = URI.file('/coding/c#/project1');\n good.scheme === 'file';\n good.path === '/coding/c#/project1';\n good.fragment === '';\n const bad = URI.parse('file://' + '/coding/c#/project1');\n bad.scheme === 'file';\n bad.path === '/coding/c'; // path is now broken\n bad.fragment === '/project1';\n ```\n *\n * @param path A file system path (see `URI#fsPath`)\n */\n static file(path) {\n let authority = _empty;\n // normalize to fwd-slashes on windows,\n // on other systems bwd-slashes are valid\n // filename character, eg /f\\oo/ba\\r.txt\n if (isWindows) {\n path = path.replace(/\\\\/g, _slash);\n }\n // check for authority as used in UNC shares\n // or use the path as given\n if (path[0] === _slash && path[1] === _slash) {\n const idx = path.indexOf(_slash, 2);\n if (idx === -1) {\n authority = path.substring(2);\n path = _slash;\n }\n else {\n authority = path.substring(2, idx);\n path = path.substring(idx) || _slash;\n }\n }\n return new Uri('file', authority, path, _empty, _empty);\n }\n static from(components) {\n const result = new Uri(components.scheme, components.authority, components.path, components.query, components.fragment);\n _validateUri(result, true);\n return result;\n }\n /**\n * Join a URI path with path fragments and normalizes the resulting path.\n *\n * @param uri The input URI.\n * @param pathFragment The path fragment to add to the URI path.\n * @returns The resulting URI.\n */\n static joinPath(uri, ...pathFragment) {\n if (!uri.path) {\n throw new Error(`[UriError]: cannot call joinPath on URI without path`);\n }\n let newPath;\n if (isWindows && uri.scheme === 'file') {\n newPath = URI.file(paths.win32.join(uriToFsPath(uri, true), ...pathFragment)).path;\n }\n else {\n newPath = paths.posix.join(uri.path, ...pathFragment);\n }\n return uri.with({ path: newPath });\n }\n // ---- printing/externalize ---------------------------\n /**\n * Creates a string representation for this URI. It's guaranteed that calling\n * `URI.parse` with the result of this function creates an URI which is equal\n * to this URI.\n *\n * * The result shall *not* be used for display purposes but for externalization or transport.\n * * The result will be encoded using the percentage encoding and encoding happens mostly\n * ignore the scheme-specific encoding rules.\n *\n * @param skipEncoding Do not encode the result, default is `false`\n */\n toString(skipEncoding = false) {\n return _asFormatted(this, skipEncoding);\n }\n toJSON() {\n return this;\n }\n static revive(data) {\n if (!data) {\n return data;\n }\n else if (data instanceof URI) {\n return data;\n }\n else {\n const result = new Uri(data);\n result._formatted = data.external;\n result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;\n return result;\n }\n }\n}\nconst _pathSepMarker = isWindows ? 1 : undefined;\n// This class exists so that URI is compatible with vscode.Uri (API).\nclass Uri extends URI {\n constructor() {\n super(...arguments);\n this._formatted = null;\n this._fsPath = null;\n }\n get fsPath() {\n if (!this._fsPath) {\n this._fsPath = uriToFsPath(this, false);\n }\n return this._fsPath;\n }\n toString(skipEncoding = false) {\n if (!skipEncoding) {\n if (!this._formatted) {\n this._formatted = _asFormatted(this, false);\n }\n return this._formatted;\n }\n else {\n // we don't cache that\n return _asFormatted(this, true);\n }\n }\n toJSON() {\n const res = {\n $mid: 1 /* Uri */\n };\n // cached state\n if (this._fsPath) {\n res.fsPath = this._fsPath;\n res._sep = _pathSepMarker;\n }\n if (this._formatted) {\n res.external = this._formatted;\n }\n // uri components\n if (this.path) {\n res.path = this.path;\n }\n if (this.scheme) {\n res.scheme = this.scheme;\n }\n if (this.authority) {\n res.authority = this.authority;\n }\n if (this.query) {\n res.query = this.query;\n }\n if (this.fragment) {\n res.fragment = this.fragment;\n }\n return res;\n }\n}\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\nconst encodeTable = {\n [58 /* Colon */]: '%3A',\n [47 /* Slash */]: '%2F',\n [63 /* QuestionMark */]: '%3F',\n [35 /* Hash */]: '%23',\n [91 /* OpenSquareBracket */]: '%5B',\n [93 /* CloseSquareBracket */]: '%5D',\n [64 /* AtSign */]: '%40',\n [33 /* ExclamationMark */]: '%21',\n [36 /* DollarSign */]: '%24',\n [38 /* Ampersand */]: '%26',\n [39 /* SingleQuote */]: '%27',\n [40 /* OpenParen */]: '%28',\n [41 /* CloseParen */]: '%29',\n [42 /* Asterisk */]: '%2A',\n [43 /* Plus */]: '%2B',\n [44 /* Comma */]: '%2C',\n [59 /* Semicolon */]: '%3B',\n [61 /* Equals */]: '%3D',\n [32 /* Space */]: '%20',\n};\nfunction encodeURIComponentFast(uriComponent, allowSlash) {\n let res = undefined;\n let nativeEncodePos = -1;\n for (let pos = 0; pos < uriComponent.length; pos++) {\n const code = uriComponent.charCodeAt(pos);\n // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\n if ((code >= 97 /* a */ && code <= 122 /* z */)\n || (code >= 65 /* A */ && code <= 90 /* Z */)\n || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)\n || code === 45 /* Dash */\n || code === 46 /* Period */\n || code === 95 /* Underline */\n || code === 126 /* Tilde */\n || (allowSlash && code === 47 /* Slash */)) {\n // check if we are delaying native encode\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n // check if we write into a new string (by default we try to return the param)\n if (res !== undefined) {\n res += uriComponent.charAt(pos);\n }\n }\n else {\n // encoding needed, we need to allocate a new string\n if (res === undefined) {\n res = uriComponent.substr(0, pos);\n }\n // check with default table first\n const escaped = encodeTable[code];\n if (escaped !== undefined) {\n // check if we are delaying native encode\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n // append escaped variant to result\n res += escaped;\n }\n else if (nativeEncodePos === -1) {\n // use native encode only when needed\n nativeEncodePos = pos;\n }\n }\n }\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n }\n return res !== undefined ? res : uriComponent;\n}\nfunction encodeURIComponentMinimal(path) {\n let res = undefined;\n for (let pos = 0; pos < path.length; pos++) {\n const code = path.charCodeAt(pos);\n if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {\n if (res === undefined) {\n res = path.substr(0, pos);\n }\n res += encodeTable[code];\n }\n else {\n if (res !== undefined) {\n res += path[pos];\n }\n }\n }\n return res !== undefined ? res : path;\n}\n/**\n * Compute `fsPath` for the given uri\n */\nexport function uriToFsPath(uri, keepDriveLetterCasing) {\n let value;\n if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\n // unc path: file://shares/c$/far/boo\n value = `//${uri.authority}${uri.path}`;\n }\n else if (uri.path.charCodeAt(0) === 47 /* Slash */\n && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)\n && uri.path.charCodeAt(2) === 58 /* Colon */) {\n if (!keepDriveLetterCasing) {\n // windows drive letter: file:///c:/far/boo\n value = uri.path[1].toLowerCase() + uri.path.substr(2);\n }\n else {\n value = uri.path.substr(1);\n }\n }\n else {\n // other path\n value = uri.path;\n }\n if (isWindows) {\n value = value.replace(/\\//g, '\\\\');\n }\n return value;\n}\n/**\n * Create the external version of a uri\n */\nfunction _asFormatted(uri, skipEncoding) {\n const encoder = !skipEncoding\n ? encodeURIComponentFast\n : encodeURIComponentMinimal;\n let res = '';\n let { scheme, authority, path, query, fragment } = uri;\n if (scheme) {\n res += scheme;\n res += ':';\n }\n if (authority || scheme === 'file') {\n res += _slash;\n res += _slash;\n }\n if (authority) {\n let idx = authority.indexOf('@');\n if (idx !== -1) {\n // @\n const userinfo = authority.substr(0, idx);\n authority = authority.substr(idx + 1);\n idx = userinfo.indexOf(':');\n if (idx === -1) {\n res += encoder(userinfo, false);\n }\n else {\n // :@\n res += encoder(userinfo.substr(0, idx), false);\n res += ':';\n res += encoder(userinfo.substr(idx + 1), false);\n }\n res += '@';\n }\n authority = authority.toLowerCase();\n idx = authority.indexOf(':');\n if (idx === -1) {\n res += encoder(authority, false);\n }\n else {\n // :\n res += encoder(authority.substr(0, idx), false);\n res += authority.substr(idx);\n }\n }\n if (path) {\n // lower-case windows drive letters in /C:/fff or C:/fff\n if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {\n const code = path.charCodeAt(1);\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\n path = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`; // \"/c:\".length === 3\n }\n }\n else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {\n const code = path.charCodeAt(0);\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\n path = `${String.fromCharCode(code + 32)}:${path.substr(2)}`; // \"/c:\".length === 3\n }\n }\n // encode the rest of the path\n res += encoder(path, true);\n }\n if (query) {\n res += '?';\n res += encoder(query, false);\n }\n if (fragment) {\n res += '#';\n res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;\n }\n return res;\n}\n// --- decode\nfunction decodeURIComponentGraceful(str) {\n try {\n return decodeURIComponent(str);\n }\n catch (_a) {\n if (str.length > 3) {\n return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n }\n else {\n return str;\n }\n }\n}\nconst _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\nfunction percentDecode(str) {\n if (!str.match(_rEncodedAsHex)) {\n return str;\n }\n return str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * A position in the editor.\n */\nexport class Position {\n constructor(lineNumber, column) {\n this.lineNumber = lineNumber;\n this.column = column;\n }\n /**\n * Create a new position from this position.\n *\n * @param newLineNumber new line number\n * @param newColumn new column\n */\n with(newLineNumber = this.lineNumber, newColumn = this.column) {\n if (newLineNumber === this.lineNumber && newColumn === this.column) {\n return this;\n }\n else {\n return new Position(newLineNumber, newColumn);\n }\n }\n /**\n * Derive a new position from this position.\n *\n * @param deltaLineNumber line number delta\n * @param deltaColumn column delta\n */\n delta(deltaLineNumber = 0, deltaColumn = 0) {\n return this.with(this.lineNumber + deltaLineNumber, this.column + deltaColumn);\n }\n /**\n * Test if this position equals other position\n */\n equals(other) {\n return Position.equals(this, other);\n }\n /**\n * Test if position `a` equals position `b`\n */\n static equals(a, b) {\n if (!a && !b) {\n return true;\n }\n return (!!a &&\n !!b &&\n a.lineNumber === b.lineNumber &&\n a.column === b.column);\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be false.\n */\n isBefore(other) {\n return Position.isBefore(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be false.\n */\n static isBefore(a, b) {\n if (a.lineNumber < b.lineNumber) {\n return true;\n }\n if (b.lineNumber < a.lineNumber) {\n return false;\n }\n return a.column < b.column;\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be true.\n */\n isBeforeOrEqual(other) {\n return Position.isBeforeOrEqual(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be true.\n */\n static isBeforeOrEqual(a, b) {\n if (a.lineNumber < b.lineNumber) {\n return true;\n }\n if (b.lineNumber < a.lineNumber) {\n return false;\n }\n return a.column <= b.column;\n }\n /**\n * A function that compares positions, useful for sorting\n */\n static compare(a, b) {\n let aLineNumber = a.lineNumber | 0;\n let bLineNumber = b.lineNumber | 0;\n if (aLineNumber === bLineNumber) {\n let aColumn = a.column | 0;\n let bColumn = b.column | 0;\n return aColumn - bColumn;\n }\n return aLineNumber - bLineNumber;\n }\n /**\n * Clone this position.\n */\n clone() {\n return new Position(this.lineNumber, this.column);\n }\n /**\n * Convert to a human-readable representation.\n */\n toString() {\n return '(' + this.lineNumber + ',' + this.column + ')';\n }\n // ---\n /**\n * Create a `Position` from an `IPosition`.\n */\n static lift(pos) {\n return new Position(pos.lineNumber, pos.column);\n }\n /**\n * Test if `obj` is an `IPosition`.\n */\n static isIPosition(obj) {\n return (obj\n && (typeof obj.lineNumber === 'number')\n && (typeof obj.column === 'number'));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Position } from './position.js';\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n constructor(startLineNumber, startColumn, endLineNumber, endColumn) {\n if ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n this.startLineNumber = endLineNumber;\n this.startColumn = endColumn;\n this.endLineNumber = startLineNumber;\n this.endColumn = startColumn;\n }\n else {\n this.startLineNumber = startLineNumber;\n this.startColumn = startColumn;\n this.endLineNumber = endLineNumber;\n this.endColumn = endColumn;\n }\n }\n /**\n * Test if this range is empty.\n */\n isEmpty() {\n return Range.isEmpty(this);\n }\n /**\n * Test if `range` is empty.\n */\n static isEmpty(range) {\n return (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n }\n /**\n * Test if position is in this range. If the position is at the edges, will return true.\n */\n containsPosition(position) {\n return Range.containsPosition(this, position);\n }\n /**\n * Test if `position` is in `range`. If the position is at the edges, will return true.\n */\n static containsPosition(range, position) {\n if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n return false;\n }\n if (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n return false;\n }\n if (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * Test if range is in this range. If the range is equal to this range, will return true.\n */\n containsRange(range) {\n return Range.containsRange(this, range);\n }\n /**\n * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n */\n static containsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n return false;\n }\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n */\n strictContainsRange(range) {\n return Range.strictContainsRange(this, range);\n }\n /**\n * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n */\n static strictContainsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\n return false;\n }\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n plusRange(range) {\n return Range.plusRange(this, range);\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n static plusRange(a, b) {\n let startLineNumber;\n let startColumn;\n let endLineNumber;\n let endColumn;\n if (b.startLineNumber < a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = b.startColumn;\n }\n else if (b.startLineNumber === a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = Math.min(b.startColumn, a.startColumn);\n }\n else {\n startLineNumber = a.startLineNumber;\n startColumn = a.startColumn;\n }\n if (b.endLineNumber > a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = b.endColumn;\n }\n else if (b.endLineNumber === a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = Math.max(b.endColumn, a.endColumn);\n }\n else {\n endLineNumber = a.endLineNumber;\n endColumn = a.endColumn;\n }\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n /**\n * A intersection of the two ranges.\n */\n intersectRanges(range) {\n return Range.intersectRanges(this, range);\n }\n /**\n * A intersection of the two ranges.\n */\n static intersectRanges(a, b) {\n let resultStartLineNumber = a.startLineNumber;\n let resultStartColumn = a.startColumn;\n let resultEndLineNumber = a.endLineNumber;\n let resultEndColumn = a.endColumn;\n let otherStartLineNumber = b.startLineNumber;\n let otherStartColumn = b.startColumn;\n let otherEndLineNumber = b.endLineNumber;\n let otherEndColumn = b.endColumn;\n if (resultStartLineNumber < otherStartLineNumber) {\n resultStartLineNumber = otherStartLineNumber;\n resultStartColumn = otherStartColumn;\n }\n else if (resultStartLineNumber === otherStartLineNumber) {\n resultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n }\n if (resultEndLineNumber > otherEndLineNumber) {\n resultEndLineNumber = otherEndLineNumber;\n resultEndColumn = otherEndColumn;\n }\n else if (resultEndLineNumber === otherEndLineNumber) {\n resultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n }\n // Check if selection is now empty\n if (resultStartLineNumber > resultEndLineNumber) {\n return null;\n }\n if (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n return null;\n }\n return new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n }\n /**\n * Test if this range equals other.\n */\n equalsRange(other) {\n return Range.equalsRange(this, other);\n }\n /**\n * Test if range `a` equals `b`.\n */\n static equalsRange(a, b) {\n return (!!a &&\n !!b &&\n a.startLineNumber === b.startLineNumber &&\n a.startColumn === b.startColumn &&\n a.endLineNumber === b.endLineNumber &&\n a.endColumn === b.endColumn);\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n getEndPosition() {\n return Range.getEndPosition(this);\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n static getEndPosition(range) {\n return new Position(range.endLineNumber, range.endColumn);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n getStartPosition() {\n return Range.getStartPosition(this);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n static getStartPosition(range) {\n return new Position(range.startLineNumber, range.startColumn);\n }\n /**\n * Transform to a user presentable string representation.\n */\n toString() {\n return '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n }\n /**\n * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n */\n setEndPosition(endLineNumber, endColumn) {\n return new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n }\n /**\n * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n */\n setStartPosition(startLineNumber, startColumn) {\n return new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n collapseToStart() {\n return Range.collapseToStart(this);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n static collapseToStart(range) {\n return new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n }\n // ---\n static fromPositions(start, end = start) {\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n static lift(range) {\n if (!range) {\n return null;\n }\n return new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n }\n /**\n * Test if `obj` is an `IRange`.\n */\n static isIRange(obj) {\n return (obj\n && (typeof obj.startLineNumber === 'number')\n && (typeof obj.startColumn === 'number')\n && (typeof obj.endLineNumber === 'number')\n && (typeof obj.endColumn === 'number'));\n }\n /**\n * Test if the two ranges are touching in any way.\n */\n static areIntersectingOrTouching(a, b) {\n // Check if `a` is before `b`\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n return false;\n }\n // Check if `b` is before `a`\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n return false;\n }\n // These ranges must intersect\n return true;\n }\n /**\n * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n */\n static areIntersecting(a, b) {\n // Check if `a` is before `b`\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\n return false;\n }\n // Check if `b` is before `a`\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\n return false;\n }\n // These ranges must intersect\n return true;\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the startPosition and then on the endPosition\n */\n static compareRangesUsingStarts(a, b) {\n if (a && b) {\n const aStartLineNumber = a.startLineNumber | 0;\n const bStartLineNumber = b.startLineNumber | 0;\n if (aStartLineNumber === bStartLineNumber) {\n const aStartColumn = a.startColumn | 0;\n const bStartColumn = b.startColumn | 0;\n if (aStartColumn === bStartColumn) {\n const aEndLineNumber = a.endLineNumber | 0;\n const bEndLineNumber = b.endLineNumber | 0;\n if (aEndLineNumber === bEndLineNumber) {\n const aEndColumn = a.endColumn | 0;\n const bEndColumn = b.endColumn | 0;\n return aEndColumn - bEndColumn;\n }\n return aEndLineNumber - bEndLineNumber;\n }\n return aStartColumn - bStartColumn;\n }\n return aStartLineNumber - bStartLineNumber;\n }\n const aExists = (a ? 1 : 0);\n const bExists = (b ? 1 : 0);\n return aExists - bExists;\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the endPosition and then on the startPosition\n */\n static compareRangesUsingEnds(a, b) {\n if (a.endLineNumber === b.endLineNumber) {\n if (a.endColumn === b.endColumn) {\n if (a.startLineNumber === b.startLineNumber) {\n return a.startColumn - b.startColumn;\n }\n return a.startLineNumber - b.startLineNumber;\n }\n return a.endColumn - b.endColumn;\n }\n return a.endLineNumber - b.endLineNumber;\n }\n /**\n * Test if the range spans multiple lines.\n */\n static spansMultipleLines(range) {\n return range.endLineNumber > range.startLineNumber;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { LcsDiff } from '../../../base/common/diff/diff.js';\nimport * as strings from '../../../base/common/strings.js';\nconst MINIMUM_MATCHING_CHARACTER_LENGTH = 3;\nfunction computeDiff(originalSequence, modifiedSequence, continueProcessingPredicate, pretty) {\n const diffAlgo = new LcsDiff(originalSequence, modifiedSequence, continueProcessingPredicate);\n return diffAlgo.ComputeDiff(pretty);\n}\nclass LineSequence {\n constructor(lines) {\n const startColumns = [];\n const endColumns = [];\n for (let i = 0, length = lines.length; i < length; i++) {\n startColumns[i] = getFirstNonBlankColumn(lines[i], 1);\n endColumns[i] = getLastNonBlankColumn(lines[i], 1);\n }\n this.lines = lines;\n this._startColumns = startColumns;\n this._endColumns = endColumns;\n }\n getElements() {\n const elements = [];\n for (let i = 0, len = this.lines.length; i < len; i++) {\n elements[i] = this.lines[i].substring(this._startColumns[i] - 1, this._endColumns[i] - 1);\n }\n return elements;\n }\n getStrictElement(index) {\n return this.lines[index];\n }\n getStartLineNumber(i) {\n return i + 1;\n }\n getEndLineNumber(i) {\n return i + 1;\n }\n createCharSequence(shouldIgnoreTrimWhitespace, startIndex, endIndex) {\n const charCodes = [];\n const lineNumbers = [];\n const columns = [];\n let len = 0;\n for (let index = startIndex; index <= endIndex; index++) {\n const lineContent = this.lines[index];\n const startColumn = (shouldIgnoreTrimWhitespace ? this._startColumns[index] : 1);\n const endColumn = (shouldIgnoreTrimWhitespace ? this._endColumns[index] : lineContent.length + 1);\n for (let col = startColumn; col < endColumn; col++) {\n charCodes[len] = lineContent.charCodeAt(col - 1);\n lineNumbers[len] = index + 1;\n columns[len] = col;\n len++;\n }\n }\n return new CharSequence(charCodes, lineNumbers, columns);\n }\n}\nclass CharSequence {\n constructor(charCodes, lineNumbers, columns) {\n this._charCodes = charCodes;\n this._lineNumbers = lineNumbers;\n this._columns = columns;\n }\n getElements() {\n return this._charCodes;\n }\n getStartLineNumber(i) {\n return this._lineNumbers[i];\n }\n getStartColumn(i) {\n return this._columns[i];\n }\n getEndLineNumber(i) {\n return this._lineNumbers[i];\n }\n getEndColumn(i) {\n return this._columns[i] + 1;\n }\n}\nclass CharChange {\n constructor(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalStartColumn = originalStartColumn;\n this.originalEndLineNumber = originalEndLineNumber;\n this.originalEndColumn = originalEndColumn;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedStartColumn = modifiedStartColumn;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.modifiedEndColumn = modifiedEndColumn;\n }\n static createFromDiffChange(diffChange, originalCharSequence, modifiedCharSequence) {\n let originalStartLineNumber;\n let originalStartColumn;\n let originalEndLineNumber;\n let originalEndColumn;\n let modifiedStartLineNumber;\n let modifiedStartColumn;\n let modifiedEndLineNumber;\n let modifiedEndColumn;\n if (diffChange.originalLength === 0) {\n originalStartLineNumber = 0;\n originalStartColumn = 0;\n originalEndLineNumber = 0;\n originalEndColumn = 0;\n }\n else {\n originalStartLineNumber = originalCharSequence.getStartLineNumber(diffChange.originalStart);\n originalStartColumn = originalCharSequence.getStartColumn(diffChange.originalStart);\n originalEndLineNumber = originalCharSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n originalEndColumn = originalCharSequence.getEndColumn(diffChange.originalStart + diffChange.originalLength - 1);\n }\n if (diffChange.modifiedLength === 0) {\n modifiedStartLineNumber = 0;\n modifiedStartColumn = 0;\n modifiedEndLineNumber = 0;\n modifiedEndColumn = 0;\n }\n else {\n modifiedStartLineNumber = modifiedCharSequence.getStartLineNumber(diffChange.modifiedStart);\n modifiedStartColumn = modifiedCharSequence.getStartColumn(diffChange.modifiedStart);\n modifiedEndLineNumber = modifiedCharSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n modifiedEndColumn = modifiedCharSequence.getEndColumn(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n }\n return new CharChange(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn);\n }\n}\nfunction postProcessCharChanges(rawChanges) {\n if (rawChanges.length <= 1) {\n return rawChanges;\n }\n const result = [rawChanges[0]];\n let prevChange = result[0];\n for (let i = 1, len = rawChanges.length; i < len; i++) {\n const currChange = rawChanges[i];\n const originalMatchingLength = currChange.originalStart - (prevChange.originalStart + prevChange.originalLength);\n const modifiedMatchingLength = currChange.modifiedStart - (prevChange.modifiedStart + prevChange.modifiedLength);\n // Both of the above should be equal, but the continueProcessingPredicate may prevent this from being true\n const matchingLength = Math.min(originalMatchingLength, modifiedMatchingLength);\n if (matchingLength < MINIMUM_MATCHING_CHARACTER_LENGTH) {\n // Merge the current change into the previous one\n prevChange.originalLength = (currChange.originalStart + currChange.originalLength) - prevChange.originalStart;\n prevChange.modifiedLength = (currChange.modifiedStart + currChange.modifiedLength) - prevChange.modifiedStart;\n }\n else {\n // Add the current change\n result.push(currChange);\n prevChange = currChange;\n }\n }\n return result;\n}\nclass LineChange {\n constructor(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalEndLineNumber = originalEndLineNumber;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.charChanges = charChanges;\n }\n static createFromDiffResult(shouldIgnoreTrimWhitespace, diffChange, originalLineSequence, modifiedLineSequence, continueCharDiff, shouldComputeCharChanges, shouldPostProcessCharChanges) {\n let originalStartLineNumber;\n let originalEndLineNumber;\n let modifiedStartLineNumber;\n let modifiedEndLineNumber;\n let charChanges = undefined;\n if (diffChange.originalLength === 0) {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart) - 1;\n originalEndLineNumber = 0;\n }\n else {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart);\n originalEndLineNumber = originalLineSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n }\n if (diffChange.modifiedLength === 0) {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart) - 1;\n modifiedEndLineNumber = 0;\n }\n else {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart);\n modifiedEndLineNumber = modifiedLineSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n }\n if (shouldComputeCharChanges && diffChange.originalLength > 0 && diffChange.originalLength < 20 && diffChange.modifiedLength > 0 && diffChange.modifiedLength < 20 && continueCharDiff()) {\n // Compute character changes for diff chunks of at most 20 lines...\n const originalCharSequence = originalLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.originalStart, diffChange.originalStart + diffChange.originalLength - 1);\n const modifiedCharSequence = modifiedLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.modifiedStart, diffChange.modifiedStart + diffChange.modifiedLength - 1);\n let rawChanges = computeDiff(originalCharSequence, modifiedCharSequence, continueCharDiff, true).changes;\n if (shouldPostProcessCharChanges) {\n rawChanges = postProcessCharChanges(rawChanges);\n }\n charChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) {\n charChanges.push(CharChange.createFromDiffChange(rawChanges[i], originalCharSequence, modifiedCharSequence));\n }\n }\n return new LineChange(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges);\n }\n}\nexport class DiffComputer {\n constructor(originalLines, modifiedLines, opts) {\n this.shouldComputeCharChanges = opts.shouldComputeCharChanges;\n this.shouldPostProcessCharChanges = opts.shouldPostProcessCharChanges;\n this.shouldIgnoreTrimWhitespace = opts.shouldIgnoreTrimWhitespace;\n this.shouldMakePrettyDiff = opts.shouldMakePrettyDiff;\n this.originalLines = originalLines;\n this.modifiedLines = modifiedLines;\n this.original = new LineSequence(originalLines);\n this.modified = new LineSequence(modifiedLines);\n this.continueLineDiff = createContinueProcessingPredicate(opts.maxComputationTime);\n this.continueCharDiff = createContinueProcessingPredicate(opts.maxComputationTime === 0 ? 0 : Math.min(opts.maxComputationTime, 5000)); // never run after 5s for character changes...\n }\n computeDiff() {\n if (this.original.lines.length === 1 && this.original.lines[0].length === 0) {\n // empty original => fast path\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) {\n return {\n quitEarly: false,\n changes: []\n };\n }\n return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: 1,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: this.modified.lines.length,\n charChanges: [{\n modifiedEndColumn: 0,\n modifiedEndLineNumber: 0,\n modifiedStartColumn: 0,\n modifiedStartLineNumber: 0,\n originalEndColumn: 0,\n originalEndLineNumber: 0,\n originalStartColumn: 0,\n originalStartLineNumber: 0\n }]\n }]\n };\n }\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) {\n // empty modified => fast path\n return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: this.original.lines.length,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: 1,\n charChanges: [{\n modifiedEndColumn: 0,\n modifiedEndLineNumber: 0,\n modifiedStartColumn: 0,\n modifiedStartLineNumber: 0,\n originalEndColumn: 0,\n originalEndLineNumber: 0,\n originalStartColumn: 0,\n originalStartLineNumber: 0\n }]\n }]\n };\n }\n const diffResult = computeDiff(this.original, this.modified, this.continueLineDiff, this.shouldMakePrettyDiff);\n const rawChanges = diffResult.changes;\n const quitEarly = diffResult.quitEarly;\n // The diff is always computed with ignoring trim whitespace\n // This ensures we get the prettiest diff\n if (this.shouldIgnoreTrimWhitespace) {\n const lineChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) {\n lineChanges.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, rawChanges[i], this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n }\n return {\n quitEarly: quitEarly,\n changes: lineChanges\n };\n }\n // Need to post-process and introduce changes where the trim whitespace is different\n // Note that we are looping starting at -1 to also cover the lines before the first change\n const result = [];\n let originalLineIndex = 0;\n let modifiedLineIndex = 0;\n for (let i = -1 /* !!!! */, len = rawChanges.length; i < len; i++) {\n const nextChange = (i + 1 < len ? rawChanges[i + 1] : null);\n const originalStop = (nextChange ? nextChange.originalStart : this.originalLines.length);\n const modifiedStop = (nextChange ? nextChange.modifiedStart : this.modifiedLines.length);\n while (originalLineIndex < originalStop && modifiedLineIndex < modifiedStop) {\n const originalLine = this.originalLines[originalLineIndex];\n const modifiedLine = this.modifiedLines[modifiedLineIndex];\n if (originalLine !== modifiedLine) {\n // These lines differ only in trim whitespace\n // Check the leading whitespace\n {\n let originalStartColumn = getFirstNonBlankColumn(originalLine, 1);\n let modifiedStartColumn = getFirstNonBlankColumn(modifiedLine, 1);\n while (originalStartColumn > 1 && modifiedStartColumn > 1) {\n const originalChar = originalLine.charCodeAt(originalStartColumn - 2);\n const modifiedChar = modifiedLine.charCodeAt(modifiedStartColumn - 2);\n if (originalChar !== modifiedChar) {\n break;\n }\n originalStartColumn--;\n modifiedStartColumn--;\n }\n if (originalStartColumn > 1 || modifiedStartColumn > 1) {\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, 1, originalStartColumn, modifiedLineIndex + 1, 1, modifiedStartColumn);\n }\n }\n // Check the trailing whitespace\n {\n let originalEndColumn = getLastNonBlankColumn(originalLine, 1);\n let modifiedEndColumn = getLastNonBlankColumn(modifiedLine, 1);\n const originalMaxColumn = originalLine.length + 1;\n const modifiedMaxColumn = modifiedLine.length + 1;\n while (originalEndColumn < originalMaxColumn && modifiedEndColumn < modifiedMaxColumn) {\n const originalChar = originalLine.charCodeAt(originalEndColumn - 1);\n const modifiedChar = originalLine.charCodeAt(modifiedEndColumn - 1);\n if (originalChar !== modifiedChar) {\n break;\n }\n originalEndColumn++;\n modifiedEndColumn++;\n }\n if (originalEndColumn < originalMaxColumn || modifiedEndColumn < modifiedMaxColumn) {\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, originalEndColumn, originalMaxColumn, modifiedLineIndex + 1, modifiedEndColumn, modifiedMaxColumn);\n }\n }\n }\n originalLineIndex++;\n modifiedLineIndex++;\n }\n if (nextChange) {\n // Emit the actual change\n result.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, nextChange, this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n originalLineIndex += nextChange.originalLength;\n modifiedLineIndex += nextChange.modifiedLength;\n }\n }\n return {\n quitEarly: quitEarly,\n changes: result\n };\n }\n _pushTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n if (this._mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn)) {\n // Merged into previous\n return;\n }\n let charChanges = undefined;\n if (this.shouldComputeCharChanges) {\n charChanges = [new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn)];\n }\n result.push(new LineChange(originalLineNumber, originalLineNumber, modifiedLineNumber, modifiedLineNumber, charChanges));\n }\n _mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n const len = result.length;\n if (len === 0) {\n return false;\n }\n const prevChange = result[len - 1];\n if (prevChange.originalEndLineNumber === 0 || prevChange.modifiedEndLineNumber === 0) {\n // Don't merge with inserts/deletes\n return false;\n }\n if (prevChange.originalEndLineNumber + 1 === originalLineNumber && prevChange.modifiedEndLineNumber + 1 === modifiedLineNumber) {\n prevChange.originalEndLineNumber = originalLineNumber;\n prevChange.modifiedEndLineNumber = modifiedLineNumber;\n if (this.shouldComputeCharChanges && prevChange.charChanges) {\n prevChange.charChanges.push(new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn));\n }\n return true;\n }\n return false;\n }\n}\nfunction getFirstNonBlankColumn(txt, defaultValue) {\n const r = strings.firstNonWhitespaceIndex(txt);\n if (r === -1) {\n return defaultValue;\n }\n return r + 1;\n}\nfunction getLastNonBlankColumn(txt, defaultValue) {\n const r = strings.lastNonWhitespaceIndex(txt);\n if (r === -1) {\n return defaultValue;\n }\n return r + 2;\n}\nfunction createContinueProcessingPredicate(maximumRuntime) {\n if (maximumRuntime === 0) {\n return () => true;\n }\n const startTime = Date.now();\n return () => {\n return Date.now() - startTime < maximumRuntime;\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function toUint8(v) {\n if (v < 0) {\n return 0;\n }\n if (v > 255 /* MAX_UINT_8 */) {\n return 255 /* MAX_UINT_8 */;\n }\n return v | 0;\n}\nexport function toUint32(v) {\n if (v < 0) {\n return 0;\n }\n if (v > 4294967295 /* MAX_UINT_32 */) {\n return 4294967295 /* MAX_UINT_32 */;\n }\n return v | 0;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { toUint32 } from '../../../base/common/uint.js';\nexport class PrefixSumIndexOfResult {\n constructor(index, remainder) {\n this._prefixSumIndexOfResultBrand = undefined;\n this.index = index;\n this.remainder = remainder;\n }\n}\nexport class PrefixSumComputer {\n constructor(values) {\n this.values = values;\n this.prefixSum = new Uint32Array(values.length);\n this.prefixSumValidIndex = new Int32Array(1);\n this.prefixSumValidIndex[0] = -1;\n }\n insertValues(insertIndex, insertValues) {\n insertIndex = toUint32(insertIndex);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n const insertValuesLen = insertValues.length;\n if (insertValuesLen === 0) {\n return false;\n }\n this.values = new Uint32Array(oldValues.length + insertValuesLen);\n this.values.set(oldValues.subarray(0, insertIndex), 0);\n this.values.set(oldValues.subarray(insertIndex), insertIndex + insertValuesLen);\n this.values.set(insertValues, insertIndex);\n if (insertIndex - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = insertIndex - 1;\n }\n this.prefixSum = new Uint32Array(this.values.length);\n if (this.prefixSumValidIndex[0] >= 0) {\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n }\n return true;\n }\n changeValue(index, value) {\n index = toUint32(index);\n value = toUint32(value);\n if (this.values[index] === value) {\n return false;\n }\n this.values[index] = value;\n if (index - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = index - 1;\n }\n return true;\n }\n removeValues(startIndex, count) {\n startIndex = toUint32(startIndex);\n count = toUint32(count);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n if (startIndex >= oldValues.length) {\n return false;\n }\n let maxCount = oldValues.length - startIndex;\n if (count >= maxCount) {\n count = maxCount;\n }\n if (count === 0) {\n return false;\n }\n this.values = new Uint32Array(oldValues.length - count);\n this.values.set(oldValues.subarray(0, startIndex), 0);\n this.values.set(oldValues.subarray(startIndex + count), startIndex);\n this.prefixSum = new Uint32Array(this.values.length);\n if (startIndex - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = startIndex - 1;\n }\n if (this.prefixSumValidIndex[0] >= 0) {\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n }\n return true;\n }\n getTotalSum() {\n if (this.values.length === 0) {\n return 0;\n }\n return this._getPrefixSum(this.values.length - 1);\n }\n getPrefixSum(index) {\n if (index < 0) {\n return 0;\n }\n index = toUint32(index);\n return this._getPrefixSum(index);\n }\n _getPrefixSum(index) {\n if (index <= this.prefixSumValidIndex[0]) {\n return this.prefixSum[index];\n }\n let startIndex = this.prefixSumValidIndex[0] + 1;\n if (startIndex === 0) {\n this.prefixSum[0] = this.values[0];\n startIndex++;\n }\n if (index >= this.values.length) {\n index = this.values.length - 1;\n }\n for (let i = startIndex; i <= index; i++) {\n this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];\n }\n this.prefixSumValidIndex[0] = Math.max(this.prefixSumValidIndex[0], index);\n return this.prefixSum[index];\n }\n getIndexOf(sum) {\n sum = Math.floor(sum); //@perf\n // Compute all sums (to get a fully valid prefixSum)\n this.getTotalSum();\n let low = 0;\n let high = this.values.length - 1;\n let mid = 0;\n let midStop = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + ((high - low) / 2) | 0;\n midStop = this.prefixSum[mid];\n midStart = midStop - this.values[mid];\n if (sum < midStart) {\n high = mid - 1;\n }\n else if (sum >= midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n return new PrefixSumIndexOfResult(mid, sum - midStart);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { splitLines } from '../../../base/common/strings.js';\nimport { Position } from '../core/position.js';\nimport { PrefixSumComputer } from '../viewModel/prefixSumComputer.js';\nexport class MirrorTextModel {\n constructor(uri, lines, eol, versionId) {\n this._uri = uri;\n this._lines = lines;\n this._eol = eol;\n this._versionId = versionId;\n this._lineStarts = null;\n this._cachedTextValue = null;\n }\n dispose() {\n this._lines.length = 0;\n }\n get version() {\n return this._versionId;\n }\n getText() {\n if (this._cachedTextValue === null) {\n this._cachedTextValue = this._lines.join(this._eol);\n }\n return this._cachedTextValue;\n }\n onEvents(e) {\n if (e.eol && e.eol !== this._eol) {\n this._eol = e.eol;\n this._lineStarts = null;\n }\n // Update my lines\n const changes = e.changes;\n for (const change of changes) {\n this._acceptDeleteRange(change.range);\n this._acceptInsertText(new Position(change.range.startLineNumber, change.range.startColumn), change.text);\n }\n this._versionId = e.versionId;\n this._cachedTextValue = null;\n }\n _ensureLineStarts() {\n if (!this._lineStarts) {\n const eolLength = this._eol.length;\n const linesLength = this._lines.length;\n const lineStartValues = new Uint32Array(linesLength);\n for (let i = 0; i < linesLength; i++) {\n lineStartValues[i] = this._lines[i].length + eolLength;\n }\n this._lineStarts = new PrefixSumComputer(lineStartValues);\n }\n }\n /**\n * All changes to a line's text go through this method\n */\n _setLineText(lineIndex, newValue) {\n this._lines[lineIndex] = newValue;\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.changeValue(lineIndex, this._lines[lineIndex].length + this._eol.length);\n }\n }\n _acceptDeleteRange(range) {\n if (range.startLineNumber === range.endLineNumber) {\n if (range.startColumn === range.endColumn) {\n // Nothing to delete\n return;\n }\n // Delete text on the affected line\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n + this._lines[range.startLineNumber - 1].substring(range.endColumn - 1));\n return;\n }\n // Take remaining text on last line and append it to remaining text on first line\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n + this._lines[range.endLineNumber - 1].substring(range.endColumn - 1));\n // Delete middle lines\n this._lines.splice(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.removeValues(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n }\n _acceptInsertText(position, insertText) {\n if (insertText.length === 0) {\n // Nothing to insert\n return;\n }\n let insertLines = splitLines(insertText);\n if (insertLines.length === 1) {\n // Inserting text on one line\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\n + insertLines[0]\n + this._lines[position.lineNumber - 1].substring(position.column - 1));\n return;\n }\n // Append overflowing text from first line to the end of text to insert\n insertLines[insertLines.length - 1] += this._lines[position.lineNumber - 1].substring(position.column - 1);\n // Delete overflowing text from first line and insert text on first line\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\n + insertLines[0]);\n // Insert new lines & store lengths\n let newLengths = new Uint32Array(insertLines.length - 1);\n for (let i = 1; i < insertLines.length; i++) {\n this._lines.splice(position.lineNumber + i - 1, 0, insertLines[i]);\n newLengths[i - 1] = insertLines[i].length + this._eol.length;\n }\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.insertValues(position.lineNumber, newLengths);\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport const USUAL_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?';\n/**\n * Create a word definition regular expression based on default word separators.\n * Optionally provide allowed separators that should be included in words.\n *\n * The default would look like this:\n * /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g\n */\nfunction createWordRegExp(allowInWords = '') {\n let source = '(-?\\\\d*\\\\.\\\\d\\\\w*)|([^';\n for (const sep of USUAL_WORD_SEPARATORS) {\n if (allowInWords.indexOf(sep) >= 0) {\n continue;\n }\n source += '\\\\' + sep;\n }\n source += '\\\\s]+)';\n return new RegExp(source, 'g');\n}\n// catches numbers (including floating numbers) in the first group, and alphanum in the second\nexport const DEFAULT_WORD_REGEXP = createWordRegExp();\nexport function ensureValidWordDefinition(wordDefinition) {\n let result = DEFAULT_WORD_REGEXP;\n if (wordDefinition && (wordDefinition instanceof RegExp)) {\n if (!wordDefinition.global) {\n let flags = 'g';\n if (wordDefinition.ignoreCase) {\n flags += 'i';\n }\n if (wordDefinition.multiline) {\n flags += 'm';\n }\n if (wordDefinition.unicode) {\n flags += 'u';\n }\n result = new RegExp(wordDefinition.source, flags);\n }\n else {\n result = wordDefinition;\n }\n }\n result.lastIndex = 0;\n return result;\n}\nconst _defaultConfig = {\n maxLen: 1000,\n windowSize: 15,\n timeBudget: 150\n};\nexport function getWordAtText(column, wordDefinition, text, textOffset, config = _defaultConfig) {\n if (text.length > config.maxLen) {\n // don't throw strings that long at the regexp\n // but use a sub-string in which a word must occur\n let start = column - config.maxLen / 2;\n if (start < 0) {\n start = 0;\n }\n else {\n textOffset += start;\n }\n text = text.substring(start, column + config.maxLen / 2);\n return getWordAtText(column, wordDefinition, text, textOffset, config);\n }\n const t1 = Date.now();\n const pos = column - 1 - textOffset;\n let prevRegexIndex = -1;\n let match = null;\n for (let i = 1;; i++) {\n // check time budget\n if (Date.now() - t1 >= config.timeBudget) {\n break;\n }\n // reset the index at which the regexp should start matching, also know where it\n // should stop so that subsequent search don't repeat previous searches\n const regexIndex = pos - config.windowSize * i;\n wordDefinition.lastIndex = Math.max(0, regexIndex);\n const thisMatch = _findRegexMatchEnclosingPosition(wordDefinition, text, pos, prevRegexIndex);\n if (!thisMatch && match) {\n // stop: we have something\n break;\n }\n match = thisMatch;\n // stop: searched at start\n if (regexIndex <= 0) {\n break;\n }\n prevRegexIndex = regexIndex;\n }\n if (match) {\n let result = {\n word: match[0],\n startColumn: textOffset + 1 + match.index,\n endColumn: textOffset + 1 + match.index + match[0].length\n };\n wordDefinition.lastIndex = 0;\n return result;\n }\n return null;\n}\nfunction _findRegexMatchEnclosingPosition(wordDefinition, text, pos, stopPos) {\n let match;\n while (match = wordDefinition.exec(text)) {\n const matchIndex = match.index || 0;\n if (matchIndex <= pos && wordDefinition.lastIndex >= pos) {\n return match;\n }\n else if (stopPos > 0 && matchIndex > stopPos) {\n return null;\n }\n }\n return null;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { toUint8 } from '../../../base/common/uint.js';\n/**\n * A fast character classifier that uses a compact array for ASCII values.\n */\nexport class CharacterClassifier {\n constructor(_defaultValue) {\n let defaultValue = toUint8(_defaultValue);\n this._defaultValue = defaultValue;\n this._asciiMap = CharacterClassifier._createAsciiMap(defaultValue);\n this._map = new Map();\n }\n static _createAsciiMap(defaultValue) {\n let asciiMap = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n asciiMap[i] = defaultValue;\n }\n return asciiMap;\n }\n set(charCode, _value) {\n let value = toUint8(_value);\n if (charCode >= 0 && charCode < 256) {\n this._asciiMap[charCode] = value;\n }\n else {\n this._map.set(charCode, value);\n }\n }\n get(charCode) {\n if (charCode >= 0 && charCode < 256) {\n return this._asciiMap[charCode];\n }\n else {\n return (this._map.get(charCode) || this._defaultValue);\n }\n }\n}\nexport class CharacterSet {\n constructor() {\n this._actual = new CharacterClassifier(0 /* False */);\n }\n add(charCode) {\n this._actual.set(charCode, 1 /* True */);\n }\n has(charCode) {\n return (this._actual.get(charCode) === 1 /* True */);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nexport class Uint8Matrix {\n constructor(rows, cols, defaultValue) {\n const data = new Uint8Array(rows * cols);\n for (let i = 0, len = rows * cols; i < len; i++) {\n data[i] = defaultValue;\n }\n this._data = data;\n this.rows = rows;\n this.cols = cols;\n }\n get(row, col) {\n return this._data[row * this.cols + col];\n }\n set(row, col, value) {\n this._data[row * this.cols + col] = value;\n }\n}\nexport class StateMachine {\n constructor(edges) {\n let maxCharCode = 0;\n let maxState = 0 /* Invalid */;\n for (let i = 0, len = edges.length; i < len; i++) {\n let [from, chCode, to] = edges[i];\n if (chCode > maxCharCode) {\n maxCharCode = chCode;\n }\n if (from > maxState) {\n maxState = from;\n }\n if (to > maxState) {\n maxState = to;\n }\n }\n maxCharCode++;\n maxState++;\n let states = new Uint8Matrix(maxState, maxCharCode, 0 /* Invalid */);\n for (let i = 0, len = edges.length; i < len; i++) {\n let [from, chCode, to] = edges[i];\n states.set(from, chCode, to);\n }\n this._states = states;\n this._maxCharCode = maxCharCode;\n }\n nextState(currentState, chCode) {\n if (chCode < 0 || chCode >= this._maxCharCode) {\n return 0 /* Invalid */;\n }\n return this._states.get(currentState, chCode);\n }\n}\n// State machine for http:// or https:// or file://\nlet _stateMachine = null;\nfunction getStateMachine() {\n if (_stateMachine === null) {\n _stateMachine = new StateMachine([\n [1 /* Start */, 104 /* h */, 2 /* H */],\n [1 /* Start */, 72 /* H */, 2 /* H */],\n [1 /* Start */, 102 /* f */, 6 /* F */],\n [1 /* Start */, 70 /* F */, 6 /* F */],\n [2 /* H */, 116 /* t */, 3 /* HT */],\n [2 /* H */, 84 /* T */, 3 /* HT */],\n [3 /* HT */, 116 /* t */, 4 /* HTT */],\n [3 /* HT */, 84 /* T */, 4 /* HTT */],\n [4 /* HTT */, 112 /* p */, 5 /* HTTP */],\n [4 /* HTT */, 80 /* P */, 5 /* HTTP */],\n [5 /* HTTP */, 115 /* s */, 9 /* BeforeColon */],\n [5 /* HTTP */, 83 /* S */, 9 /* BeforeColon */],\n [5 /* HTTP */, 58 /* Colon */, 10 /* AfterColon */],\n [6 /* F */, 105 /* i */, 7 /* FI */],\n [6 /* F */, 73 /* I */, 7 /* FI */],\n [7 /* FI */, 108 /* l */, 8 /* FIL */],\n [7 /* FI */, 76 /* L */, 8 /* FIL */],\n [8 /* FIL */, 101 /* e */, 9 /* BeforeColon */],\n [8 /* FIL */, 69 /* E */, 9 /* BeforeColon */],\n [9 /* BeforeColon */, 58 /* Colon */, 10 /* AfterColon */],\n [10 /* AfterColon */, 47 /* Slash */, 11 /* AlmostThere */],\n [11 /* AlmostThere */, 47 /* Slash */, 12 /* End */],\n ]);\n }\n return _stateMachine;\n}\nlet _classifier = null;\nfunction getClassifier() {\n if (_classifier === null) {\n _classifier = new CharacterClassifier(0 /* None */);\n const FORCE_TERMINATION_CHARACTERS = ' \\t<>\\'\\\"、。。、,.:;‘〈「『〔([{「」}])〕』」〉’`~…';\n for (let i = 0; i < FORCE_TERMINATION_CHARACTERS.length; i++) {\n _classifier.set(FORCE_TERMINATION_CHARACTERS.charCodeAt(i), 1 /* ForceTermination */);\n }\n const CANNOT_END_WITH_CHARACTERS = '.,;';\n for (let i = 0; i < CANNOT_END_WITH_CHARACTERS.length; i++) {\n _classifier.set(CANNOT_END_WITH_CHARACTERS.charCodeAt(i), 2 /* CannotEndIn */);\n }\n }\n return _classifier;\n}\nexport class LinkComputer {\n static _createLink(classifier, line, lineNumber, linkBeginIndex, linkEndIndex) {\n // Do not allow to end link in certain characters...\n let lastIncludedCharIndex = linkEndIndex - 1;\n do {\n const chCode = line.charCodeAt(lastIncludedCharIndex);\n const chClass = classifier.get(chCode);\n if (chClass !== 2 /* CannotEndIn */) {\n break;\n }\n lastIncludedCharIndex--;\n } while (lastIncludedCharIndex > linkBeginIndex);\n // Handle links enclosed in parens, square brackets and curlys.\n if (linkBeginIndex > 0) {\n const charCodeBeforeLink = line.charCodeAt(linkBeginIndex - 1);\n const lastCharCodeInLink = line.charCodeAt(lastIncludedCharIndex);\n if ((charCodeBeforeLink === 40 /* OpenParen */ && lastCharCodeInLink === 41 /* CloseParen */)\n || (charCodeBeforeLink === 91 /* OpenSquareBracket */ && lastCharCodeInLink === 93 /* CloseSquareBracket */)\n || (charCodeBeforeLink === 123 /* OpenCurlyBrace */ && lastCharCodeInLink === 125 /* CloseCurlyBrace */)) {\n // Do not end in ) if ( is before the link start\n // Do not end in ] if [ is before the link start\n // Do not end in } if { is before the link start\n lastIncludedCharIndex--;\n }\n }\n return {\n range: {\n startLineNumber: lineNumber,\n startColumn: linkBeginIndex + 1,\n endLineNumber: lineNumber,\n endColumn: lastIncludedCharIndex + 2\n },\n url: line.substring(linkBeginIndex, lastIncludedCharIndex + 1)\n };\n }\n static computeLinks(model, stateMachine = getStateMachine()) {\n const classifier = getClassifier();\n let result = [];\n for (let i = 1, lineCount = model.getLineCount(); i <= lineCount; i++) {\n const line = model.getLineContent(i);\n const len = line.length;\n let j = 0;\n let linkBeginIndex = 0;\n let linkBeginChCode = 0;\n let state = 1 /* Start */;\n let hasOpenParens = false;\n let hasOpenSquareBracket = false;\n let inSquareBrackets = false;\n let hasOpenCurlyBracket = false;\n while (j < len) {\n let resetStateMachine = false;\n const chCode = line.charCodeAt(j);\n if (state === 13 /* Accept */) {\n let chClass;\n switch (chCode) {\n case 40 /* OpenParen */:\n hasOpenParens = true;\n chClass = 0 /* None */;\n break;\n case 41 /* CloseParen */:\n chClass = (hasOpenParens ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n case 91 /* OpenSquareBracket */:\n inSquareBrackets = true;\n hasOpenSquareBracket = true;\n chClass = 0 /* None */;\n break;\n case 93 /* CloseSquareBracket */:\n inSquareBrackets = false;\n chClass = (hasOpenSquareBracket ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n case 123 /* OpenCurlyBrace */:\n hasOpenCurlyBracket = true;\n chClass = 0 /* None */;\n break;\n case 125 /* CloseCurlyBrace */:\n chClass = (hasOpenCurlyBracket ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n /* The following three rules make it that ' or \" or ` are allowed inside links if the link began with a different one */\n case 39 /* SingleQuote */:\n chClass = (linkBeginChCode === 34 /* DoubleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 34 /* DoubleQuote */:\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 96 /* BackTick */:\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 34 /* DoubleQuote */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 42 /* Asterisk */:\n // `*` terminates a link if the link began with `*`\n chClass = (linkBeginChCode === 42 /* Asterisk */) ? 1 /* ForceTermination */ : 0 /* None */;\n break;\n case 124 /* Pipe */:\n // `|` terminates a link if the link began with `|`\n chClass = (linkBeginChCode === 124 /* Pipe */) ? 1 /* ForceTermination */ : 0 /* None */;\n break;\n case 32 /* Space */:\n // ` ` allow space in between [ and ]\n chClass = (inSquareBrackets ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n default:\n chClass = classifier.get(chCode);\n }\n // Check if character terminates link\n if (chClass === 1 /* ForceTermination */) {\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, j));\n resetStateMachine = true;\n }\n }\n else if (state === 12 /* End */) {\n let chClass;\n if (chCode === 91 /* OpenSquareBracket */) {\n // Allow for the authority part to contain ipv6 addresses which contain [ and ]\n hasOpenSquareBracket = true;\n chClass = 0 /* None */;\n }\n else {\n chClass = classifier.get(chCode);\n }\n // Check if character terminates link\n if (chClass === 1 /* ForceTermination */) {\n resetStateMachine = true;\n }\n else {\n state = 13 /* Accept */;\n }\n }\n else {\n state = stateMachine.nextState(state, chCode);\n if (state === 0 /* Invalid */) {\n resetStateMachine = true;\n }\n }\n if (resetStateMachine) {\n state = 1 /* Start */;\n hasOpenParens = false;\n hasOpenSquareBracket = false;\n hasOpenCurlyBracket = false;\n // Record where the link started\n linkBeginIndex = j + 1;\n linkBeginChCode = chCode;\n }\n j++;\n }\n if (state === 13 /* Accept */) {\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, len));\n }\n }\n return result;\n }\n}\n/**\n * Returns an array of all links contains in the provided\n * document. *Note* that this operation is computational\n * expensive and should not run in the UI thread.\n */\nexport function computeLinks(model) {\n if (!model || typeof model.getLineCount !== 'function' || typeof model.getLineContent !== 'function') {\n // Unknown caller!\n return [];\n }\n return LinkComputer.computeLinks(model);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class BasicInplaceReplace {\n constructor() {\n this._defaultValueSet = [\n ['true', 'false'],\n ['True', 'False'],\n ['Private', 'Public', 'Friend', 'ReadOnly', 'Partial', 'Protected', 'WriteOnly'],\n ['public', 'protected', 'private'],\n ];\n }\n navigateValueSet(range1, text1, range2, text2, up) {\n if (range1 && text1) {\n let result = this.doNavigateValueSet(text1, up);\n if (result) {\n return {\n range: range1,\n value: result\n };\n }\n }\n if (range2 && text2) {\n let result = this.doNavigateValueSet(text2, up);\n if (result) {\n return {\n range: range2,\n value: result\n };\n }\n }\n return null;\n }\n doNavigateValueSet(text, up) {\n let numberResult = this.numberReplace(text, up);\n if (numberResult !== null) {\n return numberResult;\n }\n return this.textReplace(text, up);\n }\n numberReplace(value, up) {\n let precision = Math.pow(10, value.length - (value.lastIndexOf('.') + 1));\n let n1 = Number(value);\n let n2 = parseFloat(value);\n if (!isNaN(n1) && !isNaN(n2) && n1 === n2) {\n if (n1 === 0 && !up) {\n return null; // don't do negative\n //\t\t\t} else if(n1 === 9 && up) {\n //\t\t\t\treturn null; // don't insert 10 into a number\n }\n else {\n n1 = Math.floor(n1 * precision);\n n1 += up ? precision : -precision;\n return String(n1 / precision);\n }\n }\n return null;\n }\n textReplace(value, up) {\n return this.valueSetsReplace(this._defaultValueSet, value, up);\n }\n valueSetsReplace(valueSets, value, up) {\n let result = null;\n for (let i = 0, len = valueSets.length; result === null && i < len; i++) {\n result = this.valueSetReplace(valueSets[i], value, up);\n }\n return result;\n }\n valueSetReplace(valueSet, value, up) {\n let idx = valueSet.indexOf(value);\n if (idx >= 0) {\n idx += up ? +1 : -1;\n if (idx < 0) {\n idx = valueSet.length - 1;\n }\n else {\n idx %= valueSet.length;\n }\n return valueSet[idx];\n }\n return null;\n }\n}\nBasicInplaceReplace.INSTANCE = new BasicInplaceReplace();\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter, Event } from './event.js';\nconst shortcutEvent = Object.freeze(function (callback, context) {\n const handle = setTimeout(callback.bind(context), 0);\n return { dispose() { clearTimeout(handle); } };\n});\nexport var CancellationToken;\n(function (CancellationToken) {\n function isCancellationToken(thing) {\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) {\n return true;\n }\n if (thing instanceof MutableToken) {\n return true;\n }\n if (!thing || typeof thing !== 'object') {\n return false;\n }\n return typeof thing.isCancellationRequested === 'boolean'\n && typeof thing.onCancellationRequested === 'function';\n }\n CancellationToken.isCancellationToken = isCancellationToken;\n CancellationToken.None = Object.freeze({\n isCancellationRequested: false,\n onCancellationRequested: Event.None\n });\n CancellationToken.Cancelled = Object.freeze({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent\n });\n})(CancellationToken || (CancellationToken = {}));\nclass MutableToken {\n constructor() {\n this._isCancelled = false;\n this._emitter = null;\n }\n cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(undefined);\n this.dispose();\n }\n }\n }\n get isCancellationRequested() {\n return this._isCancelled;\n }\n get onCancellationRequested() {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new Emitter();\n }\n return this._emitter.event;\n }\n dispose() {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = null;\n }\n }\n}\nexport class CancellationTokenSource {\n constructor(parent) {\n this._token = undefined;\n this._parentListener = undefined;\n this._parentListener = parent && parent.onCancellationRequested(this.cancel, this);\n }\n get token() {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n cancel() {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = CancellationToken.Cancelled;\n }\n else if (this._token instanceof MutableToken) {\n // actually cancel\n this._token.cancel();\n }\n }\n dispose(cancel = false) {\n if (cancel) {\n this.cancel();\n }\n if (this._parentListener) {\n this._parentListener.dispose();\n }\n if (!this._token) {\n // ensure to initialize with an empty token if we had none\n this._token = CancellationToken.None;\n }\n else if (this._token instanceof MutableToken) {\n // actually dispose\n this._token.dispose();\n }\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass KeyCodeStrMap {\n constructor() {\n this._keyCodeToStr = [];\n this._strToKeyCode = Object.create(null);\n }\n define(keyCode, str) {\n this._keyCodeToStr[keyCode] = str;\n this._strToKeyCode[str.toLowerCase()] = keyCode;\n }\n keyCodeToStr(keyCode) {\n return this._keyCodeToStr[keyCode];\n }\n strToKeyCode(str) {\n return this._strToKeyCode[str.toLowerCase()] || 0 /* Unknown */;\n }\n}\nconst uiMap = new KeyCodeStrMap();\nconst userSettingsUSMap = new KeyCodeStrMap();\nconst userSettingsGeneralMap = new KeyCodeStrMap();\nexport const EVENT_KEY_CODE_MAP = new Array(230);\nexport const NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE = {};\nconst scanCodeIntToStr = [];\nconst scanCodeStrToInt = Object.create(null);\nconst scanCodeLowerCaseStrToInt = Object.create(null);\n/**\n * -1 if a ScanCode => KeyCode mapping depends on kb layout.\n */\nexport const IMMUTABLE_CODE_TO_KEY_CODE = [];\n/**\n * -1 if a KeyCode => ScanCode mapping depends on kb layout.\n */\nexport const IMMUTABLE_KEY_CODE_TO_CODE = [];\nfor (let i = 0; i <= 193 /* MAX_VALUE */; i++) {\n IMMUTABLE_CODE_TO_KEY_CODE[i] = -1 /* DependsOnKbLayout */;\n}\nfor (let i = 0; i <= 126 /* MAX_VALUE */; i++) {\n IMMUTABLE_KEY_CODE_TO_CODE[i] = -1 /* DependsOnKbLayout */;\n}\n(function () {\n // See https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\n // See https://github.com/microsoft/node-native-keymap/blob/master/deps/chromium/keyboard_codes_win.h\n const empty = '';\n const mappings = [\n // keyCodeOrd, immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel\n [0, 1, 0 /* None */, 'None', 0 /* Unknown */, 'unknown', 0, 'VK_UNKNOWN', empty, empty],\n [0, 1, 1 /* Hyper */, 'Hyper', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 2 /* Super */, 'Super', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 3 /* Fn */, 'Fn', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 4 /* FnLock */, 'FnLock', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 5 /* Suspend */, 'Suspend', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 6 /* Resume */, 'Resume', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 7 /* Turbo */, 'Turbo', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 8 /* Sleep */, 'Sleep', 0 /* Unknown */, empty, 0, 'VK_SLEEP', empty, empty],\n [0, 1, 9 /* WakeUp */, 'WakeUp', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [31, 0, 10 /* KeyA */, 'KeyA', 31 /* KeyA */, 'A', 65, 'VK_A', empty, empty],\n [32, 0, 11 /* KeyB */, 'KeyB', 32 /* KeyB */, 'B', 66, 'VK_B', empty, empty],\n [33, 0, 12 /* KeyC */, 'KeyC', 33 /* KeyC */, 'C', 67, 'VK_C', empty, empty],\n [34, 0, 13 /* KeyD */, 'KeyD', 34 /* KeyD */, 'D', 68, 'VK_D', empty, empty],\n [35, 0, 14 /* KeyE */, 'KeyE', 35 /* KeyE */, 'E', 69, 'VK_E', empty, empty],\n [36, 0, 15 /* KeyF */, 'KeyF', 36 /* KeyF */, 'F', 70, 'VK_F', empty, empty],\n [37, 0, 16 /* KeyG */, 'KeyG', 37 /* KeyG */, 'G', 71, 'VK_G', empty, empty],\n [38, 0, 17 /* KeyH */, 'KeyH', 38 /* KeyH */, 'H', 72, 'VK_H', empty, empty],\n [39, 0, 18 /* KeyI */, 'KeyI', 39 /* KeyI */, 'I', 73, 'VK_I', empty, empty],\n [40, 0, 19 /* KeyJ */, 'KeyJ', 40 /* KeyJ */, 'J', 74, 'VK_J', empty, empty],\n [41, 0, 20 /* KeyK */, 'KeyK', 41 /* KeyK */, 'K', 75, 'VK_K', empty, empty],\n [42, 0, 21 /* KeyL */, 'KeyL', 42 /* KeyL */, 'L', 76, 'VK_L', empty, empty],\n [43, 0, 22 /* KeyM */, 'KeyM', 43 /* KeyM */, 'M', 77, 'VK_M', empty, empty],\n [44, 0, 23 /* KeyN */, 'KeyN', 44 /* KeyN */, 'N', 78, 'VK_N', empty, empty],\n [45, 0, 24 /* KeyO */, 'KeyO', 45 /* KeyO */, 'O', 79, 'VK_O', empty, empty],\n [46, 0, 25 /* KeyP */, 'KeyP', 46 /* KeyP */, 'P', 80, 'VK_P', empty, empty],\n [47, 0, 26 /* KeyQ */, 'KeyQ', 47 /* KeyQ */, 'Q', 81, 'VK_Q', empty, empty],\n [48, 0, 27 /* KeyR */, 'KeyR', 48 /* KeyR */, 'R', 82, 'VK_R', empty, empty],\n [49, 0, 28 /* KeyS */, 'KeyS', 49 /* KeyS */, 'S', 83, 'VK_S', empty, empty],\n [50, 0, 29 /* KeyT */, 'KeyT', 50 /* KeyT */, 'T', 84, 'VK_T', empty, empty],\n [51, 0, 30 /* KeyU */, 'KeyU', 51 /* KeyU */, 'U', 85, 'VK_U', empty, empty],\n [52, 0, 31 /* KeyV */, 'KeyV', 52 /* KeyV */, 'V', 86, 'VK_V', empty, empty],\n [53, 0, 32 /* KeyW */, 'KeyW', 53 /* KeyW */, 'W', 87, 'VK_W', empty, empty],\n [54, 0, 33 /* KeyX */, 'KeyX', 54 /* KeyX */, 'X', 88, 'VK_X', empty, empty],\n [55, 0, 34 /* KeyY */, 'KeyY', 55 /* KeyY */, 'Y', 89, 'VK_Y', empty, empty],\n [56, 0, 35 /* KeyZ */, 'KeyZ', 56 /* KeyZ */, 'Z', 90, 'VK_Z', empty, empty],\n [22, 0, 36 /* Digit1 */, 'Digit1', 22 /* Digit1 */, '1', 49, 'VK_1', empty, empty],\n [23, 0, 37 /* Digit2 */, 'Digit2', 23 /* Digit2 */, '2', 50, 'VK_2', empty, empty],\n [24, 0, 38 /* Digit3 */, 'Digit3', 24 /* Digit3 */, '3', 51, 'VK_3', empty, empty],\n [25, 0, 39 /* Digit4 */, 'Digit4', 25 /* Digit4 */, '4', 52, 'VK_4', empty, empty],\n [26, 0, 40 /* Digit5 */, 'Digit5', 26 /* Digit5 */, '5', 53, 'VK_5', empty, empty],\n [27, 0, 41 /* Digit6 */, 'Digit6', 27 /* Digit6 */, '6', 54, 'VK_6', empty, empty],\n [28, 0, 42 /* Digit7 */, 'Digit7', 28 /* Digit7 */, '7', 55, 'VK_7', empty, empty],\n [29, 0, 43 /* Digit8 */, 'Digit8', 29 /* Digit8 */, '8', 56, 'VK_8', empty, empty],\n [30, 0, 44 /* Digit9 */, 'Digit9', 30 /* Digit9 */, '9', 57, 'VK_9', empty, empty],\n [21, 0, 45 /* Digit0 */, 'Digit0', 21 /* Digit0 */, '0', 48, 'VK_0', empty, empty],\n [3, 1, 46 /* Enter */, 'Enter', 3 /* Enter */, 'Enter', 13, 'VK_RETURN', empty, empty],\n [9, 1, 47 /* Escape */, 'Escape', 9 /* Escape */, 'Escape', 27, 'VK_ESCAPE', empty, empty],\n [1, 1, 48 /* Backspace */, 'Backspace', 1 /* Backspace */, 'Backspace', 8, 'VK_BACK', empty, empty],\n [2, 1, 49 /* Tab */, 'Tab', 2 /* Tab */, 'Tab', 9, 'VK_TAB', empty, empty],\n [10, 1, 50 /* Space */, 'Space', 10 /* Space */, 'Space', 32, 'VK_SPACE', empty, empty],\n [83, 0, 51 /* Minus */, 'Minus', 83 /* Minus */, '-', 189, 'VK_OEM_MINUS', '-', 'OEM_MINUS'],\n [81, 0, 52 /* Equal */, 'Equal', 81 /* Equal */, '=', 187, 'VK_OEM_PLUS', '=', 'OEM_PLUS'],\n [87, 0, 53 /* BracketLeft */, 'BracketLeft', 87 /* BracketLeft */, '[', 219, 'VK_OEM_4', '[', 'OEM_4'],\n [89, 0, 54 /* BracketRight */, 'BracketRight', 89 /* BracketRight */, ']', 221, 'VK_OEM_6', ']', 'OEM_6'],\n [88, 0, 55 /* Backslash */, 'Backslash', 88 /* Backslash */, '\\\\', 220, 'VK_OEM_5', '\\\\', 'OEM_5'],\n [0, 0, 56 /* IntlHash */, 'IntlHash', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [80, 0, 57 /* Semicolon */, 'Semicolon', 80 /* Semicolon */, ';', 186, 'VK_OEM_1', ';', 'OEM_1'],\n [90, 0, 58 /* Quote */, 'Quote', 90 /* Quote */, '\\'', 222, 'VK_OEM_7', '\\'', 'OEM_7'],\n [86, 0, 59 /* Backquote */, 'Backquote', 86 /* Backquote */, '`', 192, 'VK_OEM_3', '`', 'OEM_3'],\n [82, 0, 60 /* Comma */, 'Comma', 82 /* Comma */, ',', 188, 'VK_OEM_COMMA', ',', 'OEM_COMMA'],\n [84, 0, 61 /* Period */, 'Period', 84 /* Period */, '.', 190, 'VK_OEM_PERIOD', '.', 'OEM_PERIOD'],\n [85, 0, 62 /* Slash */, 'Slash', 85 /* Slash */, '/', 191, 'VK_OEM_2', '/', 'OEM_2'],\n [8, 1, 63 /* CapsLock */, 'CapsLock', 8 /* CapsLock */, 'CapsLock', 20, 'VK_CAPITAL', empty, empty],\n [59, 1, 64 /* F1 */, 'F1', 59 /* F1 */, 'F1', 112, 'VK_F1', empty, empty],\n [60, 1, 65 /* F2 */, 'F2', 60 /* F2 */, 'F2', 113, 'VK_F2', empty, empty],\n [61, 1, 66 /* F3 */, 'F3', 61 /* F3 */, 'F3', 114, 'VK_F3', empty, empty],\n [62, 1, 67 /* F4 */, 'F4', 62 /* F4 */, 'F4', 115, 'VK_F4', empty, empty],\n [63, 1, 68 /* F5 */, 'F5', 63 /* F5 */, 'F5', 116, 'VK_F5', empty, empty],\n [64, 1, 69 /* F6 */, 'F6', 64 /* F6 */, 'F6', 117, 'VK_F6', empty, empty],\n [65, 1, 70 /* F7 */, 'F7', 65 /* F7 */, 'F7', 118, 'VK_F7', empty, empty],\n [66, 1, 71 /* F8 */, 'F8', 66 /* F8 */, 'F8', 119, 'VK_F8', empty, empty],\n [67, 1, 72 /* F9 */, 'F9', 67 /* F9 */, 'F9', 120, 'VK_F9', empty, empty],\n [68, 1, 73 /* F10 */, 'F10', 68 /* F10 */, 'F10', 121, 'VK_F10', empty, empty],\n [69, 1, 74 /* F11 */, 'F11', 69 /* F11 */, 'F11', 122, 'VK_F11', empty, empty],\n [70, 1, 75 /* F12 */, 'F12', 70 /* F12 */, 'F12', 123, 'VK_F12', empty, empty],\n [0, 1, 76 /* PrintScreen */, 'PrintScreen', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [79, 1, 77 /* ScrollLock */, 'ScrollLock', 79 /* ScrollLock */, 'ScrollLock', 145, 'VK_SCROLL', empty, empty],\n [7, 1, 78 /* Pause */, 'Pause', 7 /* PauseBreak */, 'PauseBreak', 19, 'VK_PAUSE', empty, empty],\n [19, 1, 79 /* Insert */, 'Insert', 19 /* Insert */, 'Insert', 45, 'VK_INSERT', empty, empty],\n [14, 1, 80 /* Home */, 'Home', 14 /* Home */, 'Home', 36, 'VK_HOME', empty, empty],\n [11, 1, 81 /* PageUp */, 'PageUp', 11 /* PageUp */, 'PageUp', 33, 'VK_PRIOR', empty, empty],\n [20, 1, 82 /* Delete */, 'Delete', 20 /* Delete */, 'Delete', 46, 'VK_DELETE', empty, empty],\n [13, 1, 83 /* End */, 'End', 13 /* End */, 'End', 35, 'VK_END', empty, empty],\n [12, 1, 84 /* PageDown */, 'PageDown', 12 /* PageDown */, 'PageDown', 34, 'VK_NEXT', empty, empty],\n [17, 1, 85 /* ArrowRight */, 'ArrowRight', 17 /* RightArrow */, 'RightArrow', 39, 'VK_RIGHT', 'Right', empty],\n [15, 1, 86 /* ArrowLeft */, 'ArrowLeft', 15 /* LeftArrow */, 'LeftArrow', 37, 'VK_LEFT', 'Left', empty],\n [18, 1, 87 /* ArrowDown */, 'ArrowDown', 18 /* DownArrow */, 'DownArrow', 40, 'VK_DOWN', 'Down', empty],\n [16, 1, 88 /* ArrowUp */, 'ArrowUp', 16 /* UpArrow */, 'UpArrow', 38, 'VK_UP', 'Up', empty],\n [78, 1, 89 /* NumLock */, 'NumLock', 78 /* NumLock */, 'NumLock', 144, 'VK_NUMLOCK', empty, empty],\n [108, 1, 90 /* NumpadDivide */, 'NumpadDivide', 108 /* NumpadDivide */, 'NumPad_Divide', 111, 'VK_DIVIDE', empty, empty],\n [103, 1, 91 /* NumpadMultiply */, 'NumpadMultiply', 103 /* NumpadMultiply */, 'NumPad_Multiply', 106, 'VK_MULTIPLY', empty, empty],\n [106, 1, 92 /* NumpadSubtract */, 'NumpadSubtract', 106 /* NumpadSubtract */, 'NumPad_Subtract', 109, 'VK_SUBTRACT', empty, empty],\n [104, 1, 93 /* NumpadAdd */, 'NumpadAdd', 104 /* NumpadAdd */, 'NumPad_Add', 107, 'VK_ADD', empty, empty],\n [3, 1, 94 /* NumpadEnter */, 'NumpadEnter', 3 /* Enter */, empty, 0, empty, empty, empty],\n [94, 1, 95 /* Numpad1 */, 'Numpad1', 94 /* Numpad1 */, 'NumPad1', 97, 'VK_NUMPAD1', empty, empty],\n [95, 1, 96 /* Numpad2 */, 'Numpad2', 95 /* Numpad2 */, 'NumPad2', 98, 'VK_NUMPAD2', empty, empty],\n [96, 1, 97 /* Numpad3 */, 'Numpad3', 96 /* Numpad3 */, 'NumPad3', 99, 'VK_NUMPAD3', empty, empty],\n [97, 1, 98 /* Numpad4 */, 'Numpad4', 97 /* Numpad4 */, 'NumPad4', 100, 'VK_NUMPAD4', empty, empty],\n [98, 1, 99 /* Numpad5 */, 'Numpad5', 98 /* Numpad5 */, 'NumPad5', 101, 'VK_NUMPAD5', empty, empty],\n [99, 1, 100 /* Numpad6 */, 'Numpad6', 99 /* Numpad6 */, 'NumPad6', 102, 'VK_NUMPAD6', empty, empty],\n [100, 1, 101 /* Numpad7 */, 'Numpad7', 100 /* Numpad7 */, 'NumPad7', 103, 'VK_NUMPAD7', empty, empty],\n [101, 1, 102 /* Numpad8 */, 'Numpad8', 101 /* Numpad8 */, 'NumPad8', 104, 'VK_NUMPAD8', empty, empty],\n [102, 1, 103 /* Numpad9 */, 'Numpad9', 102 /* Numpad9 */, 'NumPad9', 105, 'VK_NUMPAD9', empty, empty],\n [93, 1, 104 /* Numpad0 */, 'Numpad0', 93 /* Numpad0 */, 'NumPad0', 96, 'VK_NUMPAD0', empty, empty],\n [107, 1, 105 /* NumpadDecimal */, 'NumpadDecimal', 107 /* NumpadDecimal */, 'NumPad_Decimal', 110, 'VK_DECIMAL', empty, empty],\n [92, 0, 106 /* IntlBackslash */, 'IntlBackslash', 92 /* IntlBackslash */, 'OEM_102', 226, 'VK_OEM_102', empty, empty],\n [58, 1, 107 /* ContextMenu */, 'ContextMenu', 58 /* ContextMenu */, 'ContextMenu', 93, empty, empty, empty],\n [0, 1, 108 /* Power */, 'Power', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 109 /* NumpadEqual */, 'NumpadEqual', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [71, 1, 110 /* F13 */, 'F13', 71 /* F13 */, 'F13', 124, 'VK_F13', empty, empty],\n [72, 1, 111 /* F14 */, 'F14', 72 /* F14 */, 'F14', 125, 'VK_F14', empty, empty],\n [73, 1, 112 /* F15 */, 'F15', 73 /* F15 */, 'F15', 126, 'VK_F15', empty, empty],\n [74, 1, 113 /* F16 */, 'F16', 74 /* F16 */, 'F16', 127, 'VK_F16', empty, empty],\n [75, 1, 114 /* F17 */, 'F17', 75 /* F17 */, 'F17', 128, 'VK_F17', empty, empty],\n [76, 1, 115 /* F18 */, 'F18', 76 /* F18 */, 'F18', 129, 'VK_F18', empty, empty],\n [77, 1, 116 /* F19 */, 'F19', 77 /* F19 */, 'F19', 130, 'VK_F19', empty, empty],\n [0, 1, 117 /* F20 */, 'F20', 0 /* Unknown */, empty, 0, 'VK_F20', empty, empty],\n [0, 1, 118 /* F21 */, 'F21', 0 /* Unknown */, empty, 0, 'VK_F21', empty, empty],\n [0, 1, 119 /* F22 */, 'F22', 0 /* Unknown */, empty, 0, 'VK_F22', empty, empty],\n [0, 1, 120 /* F23 */, 'F23', 0 /* Unknown */, empty, 0, 'VK_F23', empty, empty],\n [0, 1, 121 /* F24 */, 'F24', 0 /* Unknown */, empty, 0, 'VK_F24', empty, empty],\n [0, 1, 122 /* Open */, 'Open', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 123 /* Help */, 'Help', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 124 /* Select */, 'Select', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 125 /* Again */, 'Again', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 126 /* Undo */, 'Undo', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 127 /* Cut */, 'Cut', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 128 /* Copy */, 'Copy', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 129 /* Paste */, 'Paste', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 130 /* Find */, 'Find', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 131 /* AudioVolumeMute */, 'AudioVolumeMute', 112 /* AudioVolumeMute */, 'AudioVolumeMute', 173, 'VK_VOLUME_MUTE', empty, empty],\n [0, 1, 132 /* AudioVolumeUp */, 'AudioVolumeUp', 113 /* AudioVolumeUp */, 'AudioVolumeUp', 175, 'VK_VOLUME_UP', empty, empty],\n [0, 1, 133 /* AudioVolumeDown */, 'AudioVolumeDown', 114 /* AudioVolumeDown */, 'AudioVolumeDown', 174, 'VK_VOLUME_DOWN', empty, empty],\n [105, 1, 134 /* NumpadComma */, 'NumpadComma', 105 /* NUMPAD_SEPARATOR */, 'NumPad_Separator', 108, 'VK_SEPARATOR', empty, empty],\n [110, 0, 135 /* IntlRo */, 'IntlRo', 110 /* ABNT_C1 */, 'ABNT_C1', 193, 'VK_ABNT_C1', empty, empty],\n [0, 1, 136 /* KanaMode */, 'KanaMode', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 0, 137 /* IntlYen */, 'IntlYen', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 138 /* Convert */, 'Convert', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 139 /* NonConvert */, 'NonConvert', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 140 /* Lang1 */, 'Lang1', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 141 /* Lang2 */, 'Lang2', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 142 /* Lang3 */, 'Lang3', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 143 /* Lang4 */, 'Lang4', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 144 /* Lang5 */, 'Lang5', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 145 /* Abort */, 'Abort', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 146 /* Props */, 'Props', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 147 /* NumpadParenLeft */, 'NumpadParenLeft', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 148 /* NumpadParenRight */, 'NumpadParenRight', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 149 /* NumpadBackspace */, 'NumpadBackspace', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 150 /* NumpadMemoryStore */, 'NumpadMemoryStore', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 151 /* NumpadMemoryRecall */, 'NumpadMemoryRecall', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 152 /* NumpadMemoryClear */, 'NumpadMemoryClear', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 153 /* NumpadMemoryAdd */, 'NumpadMemoryAdd', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 154 /* NumpadMemorySubtract */, 'NumpadMemorySubtract', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 155 /* NumpadClear */, 'NumpadClear', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 156 /* NumpadClearEntry */, 'NumpadClearEntry', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [5, 1, 0 /* None */, empty, 5 /* Ctrl */, 'Ctrl', 17, 'VK_CONTROL', empty, empty],\n [4, 1, 0 /* None */, empty, 4 /* Shift */, 'Shift', 16, 'VK_SHIFT', empty, empty],\n [6, 1, 0 /* None */, empty, 6 /* Alt */, 'Alt', 18, 'VK_MENU', empty, empty],\n [57, 1, 0 /* None */, empty, 57 /* Meta */, 'Meta', 0, 'VK_COMMAND', empty, empty],\n [5, 1, 157 /* ControlLeft */, 'ControlLeft', 5 /* Ctrl */, empty, 0, 'VK_LCONTROL', empty, empty],\n [4, 1, 158 /* ShiftLeft */, 'ShiftLeft', 4 /* Shift */, empty, 0, 'VK_LSHIFT', empty, empty],\n [6, 1, 159 /* AltLeft */, 'AltLeft', 6 /* Alt */, empty, 0, 'VK_LMENU', empty, empty],\n [57, 1, 160 /* MetaLeft */, 'MetaLeft', 57 /* Meta */, empty, 0, 'VK_LWIN', empty, empty],\n [5, 1, 161 /* ControlRight */, 'ControlRight', 5 /* Ctrl */, empty, 0, 'VK_RCONTROL', empty, empty],\n [4, 1, 162 /* ShiftRight */, 'ShiftRight', 4 /* Shift */, empty, 0, 'VK_RSHIFT', empty, empty],\n [6, 1, 163 /* AltRight */, 'AltRight', 6 /* Alt */, empty, 0, 'VK_RMENU', empty, empty],\n [57, 1, 164 /* MetaRight */, 'MetaRight', 57 /* Meta */, empty, 0, 'VK_RWIN', empty, empty],\n [0, 1, 165 /* BrightnessUp */, 'BrightnessUp', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 166 /* BrightnessDown */, 'BrightnessDown', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 167 /* MediaPlay */, 'MediaPlay', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 168 /* MediaRecord */, 'MediaRecord', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 169 /* MediaFastForward */, 'MediaFastForward', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 170 /* MediaRewind */, 'MediaRewind', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [114, 1, 171 /* MediaTrackNext */, 'MediaTrackNext', 119 /* MediaTrackNext */, 'MediaTrackNext', 176, 'VK_MEDIA_NEXT_TRACK', empty, empty],\n [115, 1, 172 /* MediaTrackPrevious */, 'MediaTrackPrevious', 120 /* MediaTrackPrevious */, 'MediaTrackPrevious', 177, 'VK_MEDIA_PREV_TRACK', empty, empty],\n [116, 1, 173 /* MediaStop */, 'MediaStop', 121 /* MediaStop */, 'MediaStop', 178, 'VK_MEDIA_STOP', empty, empty],\n [0, 1, 174 /* Eject */, 'Eject', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [117, 1, 175 /* MediaPlayPause */, 'MediaPlayPause', 122 /* MediaPlayPause */, 'MediaPlayPause', 179, 'VK_MEDIA_PLAY_PAUSE', empty, empty],\n [0, 1, 176 /* MediaSelect */, 'MediaSelect', 123 /* LaunchMediaPlayer */, 'LaunchMediaPlayer', 181, 'VK_MEDIA_LAUNCH_MEDIA_SELECT', empty, empty],\n [0, 1, 177 /* LaunchMail */, 'LaunchMail', 124 /* LaunchMail */, 'LaunchMail', 180, 'VK_MEDIA_LAUNCH_MAIL', empty, empty],\n [0, 1, 178 /* LaunchApp2 */, 'LaunchApp2', 125 /* LaunchApp2 */, 'LaunchApp2', 183, 'VK_MEDIA_LAUNCH_APP2', empty, empty],\n [0, 1, 179 /* LaunchApp1 */, 'LaunchApp1', 0 /* Unknown */, empty, 0, 'VK_MEDIA_LAUNCH_APP1', empty, empty],\n [0, 1, 180 /* SelectTask */, 'SelectTask', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 181 /* LaunchScreenSaver */, 'LaunchScreenSaver', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 182 /* BrowserSearch */, 'BrowserSearch', 115 /* BrowserSearch */, 'BrowserSearch', 170, 'VK_BROWSER_SEARCH', empty, empty],\n [0, 1, 183 /* BrowserHome */, 'BrowserHome', 116 /* BrowserHome */, 'BrowserHome', 172, 'VK_BROWSER_HOME', empty, empty],\n [112, 1, 184 /* BrowserBack */, 'BrowserBack', 117 /* BrowserBack */, 'BrowserBack', 166, 'VK_BROWSER_BACK', empty, empty],\n [113, 1, 185 /* BrowserForward */, 'BrowserForward', 118 /* BrowserForward */, 'BrowserForward', 167, 'VK_BROWSER_FORWARD', empty, empty],\n [0, 1, 186 /* BrowserStop */, 'BrowserStop', 0 /* Unknown */, empty, 0, 'VK_BROWSER_STOP', empty, empty],\n [0, 1, 187 /* BrowserRefresh */, 'BrowserRefresh', 0 /* Unknown */, empty, 0, 'VK_BROWSER_REFRESH', empty, empty],\n [0, 1, 188 /* BrowserFavorites */, 'BrowserFavorites', 0 /* Unknown */, empty, 0, 'VK_BROWSER_FAVORITES', empty, empty],\n [0, 1, 189 /* ZoomToggle */, 'ZoomToggle', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 190 /* MailReply */, 'MailReply', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 191 /* MailForward */, 'MailForward', 0 /* Unknown */, empty, 0, empty, empty, empty],\n [0, 1, 192 /* MailSend */, 'MailSend', 0 /* Unknown */, empty, 0, empty, empty, empty],\n // See https://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n // If an Input Method Editor is processing key input and the event is keydown, return 229.\n [109, 1, 0 /* None */, empty, 109 /* KEY_IN_COMPOSITION */, 'KeyInComposition', 229, empty, empty, empty],\n [111, 1, 0 /* None */, empty, 111 /* ABNT_C2 */, 'ABNT_C2', 194, 'VK_ABNT_C2', empty, empty],\n [91, 1, 0 /* None */, empty, 91 /* OEM_8 */, 'OEM_8', 223, 'VK_OEM_8', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_CLEAR', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_KANA', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_HANGUL', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_JUNJA', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_FINAL', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_HANJA', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_KANJI', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_CONVERT', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_NONCONVERT', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_ACCEPT', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_MODECHANGE', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_SELECT', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_PRINT', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_EXECUTE', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_SNAPSHOT', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_HELP', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_APPS', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_PROCESSKEY', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_PACKET', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_DBE_SBCSCHAR', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_DBE_DBCSCHAR', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_ATTN', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_CRSEL', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_EXSEL', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_EREOF', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_PLAY', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_ZOOM', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_NONAME', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_PA1', empty, empty],\n [0, 1, 0 /* None */, empty, 0 /* Unknown */, empty, 0, 'VK_OEM_CLEAR', empty, empty],\n ];\n let seenKeyCode = [];\n let seenScanCode = [];\n for (const mapping of mappings) {\n const [_keyCodeOrd, immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel] = mapping;\n if (!seenScanCode[scanCode]) {\n seenScanCode[scanCode] = true;\n scanCodeIntToStr[scanCode] = scanCodeStr;\n scanCodeStrToInt[scanCodeStr] = scanCode;\n scanCodeLowerCaseStrToInt[scanCodeStr.toLowerCase()] = scanCode;\n if (immutable) {\n IMMUTABLE_CODE_TO_KEY_CODE[scanCode] = keyCode;\n if ((keyCode !== 0 /* Unknown */)\n && (keyCode !== 3 /* Enter */)\n && (keyCode !== 5 /* Ctrl */)\n && (keyCode !== 4 /* Shift */)\n && (keyCode !== 6 /* Alt */)\n && (keyCode !== 57 /* Meta */)) {\n IMMUTABLE_KEY_CODE_TO_CODE[keyCode] = scanCode;\n }\n }\n }\n if (!seenKeyCode[keyCode]) {\n seenKeyCode[keyCode] = true;\n if (!keyCodeStr) {\n throw new Error(`String representation missing for key code ${keyCode} around scan code ${scanCodeStr}`);\n }\n uiMap.define(keyCode, keyCodeStr);\n userSettingsUSMap.define(keyCode, usUserSettingsLabel || keyCodeStr);\n userSettingsGeneralMap.define(keyCode, generalUserSettingsLabel || usUserSettingsLabel || keyCodeStr);\n }\n if (eventKeyCode) {\n EVENT_KEY_CODE_MAP[eventKeyCode] = keyCode;\n }\n if (vkey) {\n NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE[vkey] = keyCode;\n }\n }\n // Manually added due to the exclusion above (due to duplication with NumpadEnter)\n IMMUTABLE_KEY_CODE_TO_CODE[3 /* Enter */] = 46 /* Enter */;\n})();\nexport var KeyCodeUtils;\n(function (KeyCodeUtils) {\n function toString(keyCode) {\n return uiMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toString = toString;\n function fromString(key) {\n return uiMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromString = fromString;\n function toUserSettingsUS(keyCode) {\n return userSettingsUSMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsUS = toUserSettingsUS;\n function toUserSettingsGeneral(keyCode) {\n return userSettingsGeneralMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsGeneral = toUserSettingsGeneral;\n function fromUserSettings(key) {\n return userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromUserSettings = fromUserSettings;\n function toElectronAccelerator(keyCode) {\n if (keyCode >= 93 /* Numpad0 */ && keyCode <= 108 /* NumpadDivide */) {\n // [Electron Accelerators] Electron is able to parse numpad keys, but unfortunately it\n // renders them just as regular keys in menus. For example, num0 is rendered as \"0\",\n // numdiv is rendered as \"/\", numsub is rendered as \"-\".\n //\n // This can lead to incredible confusion, as it makes numpad based keybindings indistinguishable\n // from keybindings based on regular keys.\n //\n // We therefore need to fall back to custom rendering for numpad keys.\n return null;\n }\n switch (keyCode) {\n case 16 /* UpArrow */:\n return 'Up';\n case 18 /* DownArrow */:\n return 'Down';\n case 15 /* LeftArrow */:\n return 'Left';\n case 17 /* RightArrow */:\n return 'Right';\n }\n return uiMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toElectronAccelerator = toElectronAccelerator;\n})(KeyCodeUtils || (KeyCodeUtils = {}));\nexport function KeyChord(firstPart, secondPart) {\n const chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;\n return (firstPart | chordPart) >>> 0;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.\nexport var AccessibilitySupport;\n(function (AccessibilitySupport) {\n /**\n * This should be the browser case where it is not known if a screen reader is attached or no.\n */\n AccessibilitySupport[AccessibilitySupport[\"Unknown\"] = 0] = \"Unknown\";\n AccessibilitySupport[AccessibilitySupport[\"Disabled\"] = 1] = \"Disabled\";\n AccessibilitySupport[AccessibilitySupport[\"Enabled\"] = 2] = \"Enabled\";\n})(AccessibilitySupport || (AccessibilitySupport = {}));\nexport var CompletionItemInsertTextRule;\n(function (CompletionItemInsertTextRule) {\n /**\n * Adjust whitespace/indentation of multiline insert texts to\n * match the current line indentation.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"KeepWhitespace\"] = 1] = \"KeepWhitespace\";\n /**\n * `insertText` is a snippet.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"InsertAsSnippet\"] = 4] = \"InsertAsSnippet\";\n})(CompletionItemInsertTextRule || (CompletionItemInsertTextRule = {}));\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind[CompletionItemKind[\"Method\"] = 0] = \"Method\";\n CompletionItemKind[CompletionItemKind[\"Function\"] = 1] = \"Function\";\n CompletionItemKind[CompletionItemKind[\"Constructor\"] = 2] = \"Constructor\";\n CompletionItemKind[CompletionItemKind[\"Field\"] = 3] = \"Field\";\n CompletionItemKind[CompletionItemKind[\"Variable\"] = 4] = \"Variable\";\n CompletionItemKind[CompletionItemKind[\"Class\"] = 5] = \"Class\";\n CompletionItemKind[CompletionItemKind[\"Struct\"] = 6] = \"Struct\";\n CompletionItemKind[CompletionItemKind[\"Interface\"] = 7] = \"Interface\";\n CompletionItemKind[CompletionItemKind[\"Module\"] = 8] = \"Module\";\n CompletionItemKind[CompletionItemKind[\"Property\"] = 9] = \"Property\";\n CompletionItemKind[CompletionItemKind[\"Event\"] = 10] = \"Event\";\n CompletionItemKind[CompletionItemKind[\"Operator\"] = 11] = \"Operator\";\n CompletionItemKind[CompletionItemKind[\"Unit\"] = 12] = \"Unit\";\n CompletionItemKind[CompletionItemKind[\"Value\"] = 13] = \"Value\";\n CompletionItemKind[CompletionItemKind[\"Constant\"] = 14] = \"Constant\";\n CompletionItemKind[CompletionItemKind[\"Enum\"] = 15] = \"Enum\";\n CompletionItemKind[CompletionItemKind[\"EnumMember\"] = 16] = \"EnumMember\";\n CompletionItemKind[CompletionItemKind[\"Keyword\"] = 17] = \"Keyword\";\n CompletionItemKind[CompletionItemKind[\"Text\"] = 18] = \"Text\";\n CompletionItemKind[CompletionItemKind[\"Color\"] = 19] = \"Color\";\n CompletionItemKind[CompletionItemKind[\"File\"] = 20] = \"File\";\n CompletionItemKind[CompletionItemKind[\"Reference\"] = 21] = \"Reference\";\n CompletionItemKind[CompletionItemKind[\"Customcolor\"] = 22] = \"Customcolor\";\n CompletionItemKind[CompletionItemKind[\"Folder\"] = 23] = \"Folder\";\n CompletionItemKind[CompletionItemKind[\"TypeParameter\"] = 24] = \"TypeParameter\";\n CompletionItemKind[CompletionItemKind[\"User\"] = 25] = \"User\";\n CompletionItemKind[CompletionItemKind[\"Issue\"] = 26] = \"Issue\";\n CompletionItemKind[CompletionItemKind[\"Snippet\"] = 27] = \"Snippet\";\n})(CompletionItemKind || (CompletionItemKind = {}));\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n CompletionItemTag[CompletionItemTag[\"Deprecated\"] = 1] = \"Deprecated\";\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * How a suggest provider was triggered.\n */\nexport var CompletionTriggerKind;\n(function (CompletionTriggerKind) {\n CompletionTriggerKind[CompletionTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerCharacter\"] = 1] = \"TriggerCharacter\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerForIncompleteCompletions\"] = 2] = \"TriggerForIncompleteCompletions\";\n})(CompletionTriggerKind || (CompletionTriggerKind = {}));\n/**\n * A positioning preference for rendering content widgets.\n */\nexport var ContentWidgetPositionPreference;\n(function (ContentWidgetPositionPreference) {\n /**\n * Place the content widget exactly at a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"EXACT\"] = 0] = \"EXACT\";\n /**\n * Place the content widget above a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"ABOVE\"] = 1] = \"ABOVE\";\n /**\n * Place the content widget below a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"BELOW\"] = 2] = \"BELOW\";\n})(ContentWidgetPositionPreference || (ContentWidgetPositionPreference = {}));\n/**\n * Describes the reason the cursor has changed its position.\n */\nexport var CursorChangeReason;\n(function (CursorChangeReason) {\n /**\n * Unknown or not set.\n */\n CursorChangeReason[CursorChangeReason[\"NotSet\"] = 0] = \"NotSet\";\n /**\n * A `model.setValue()` was called.\n */\n CursorChangeReason[CursorChangeReason[\"ContentFlush\"] = 1] = \"ContentFlush\";\n /**\n * The `model` has been changed outside of this cursor and the cursor recovers its position from associated markers.\n */\n CursorChangeReason[CursorChangeReason[\"RecoverFromMarkers\"] = 2] = \"RecoverFromMarkers\";\n /**\n * There was an explicit user gesture.\n */\n CursorChangeReason[CursorChangeReason[\"Explicit\"] = 3] = \"Explicit\";\n /**\n * There was a Paste.\n */\n CursorChangeReason[CursorChangeReason[\"Paste\"] = 4] = \"Paste\";\n /**\n * There was an Undo.\n */\n CursorChangeReason[CursorChangeReason[\"Undo\"] = 5] = \"Undo\";\n /**\n * There was a Redo.\n */\n CursorChangeReason[CursorChangeReason[\"Redo\"] = 6] = \"Redo\";\n})(CursorChangeReason || (CursorChangeReason = {}));\n/**\n * The default end of line to use when instantiating models.\n */\nexport var DefaultEndOfLine;\n(function (DefaultEndOfLine) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"CRLF\"] = 2] = \"CRLF\";\n})(DefaultEndOfLine || (DefaultEndOfLine = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * Configuration options for auto indentation in the editor\n */\nexport var EditorAutoIndentStrategy;\n(function (EditorAutoIndentStrategy) {\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"None\"] = 0] = \"None\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Keep\"] = 1] = \"Keep\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Brackets\"] = 2] = \"Brackets\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Advanced\"] = 3] = \"Advanced\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Full\"] = 4] = \"Full\";\n})(EditorAutoIndentStrategy || (EditorAutoIndentStrategy = {}));\nexport var EditorOption;\n(function (EditorOption) {\n EditorOption[EditorOption[\"acceptSuggestionOnCommitCharacter\"] = 0] = \"acceptSuggestionOnCommitCharacter\";\n EditorOption[EditorOption[\"acceptSuggestionOnEnter\"] = 1] = \"acceptSuggestionOnEnter\";\n EditorOption[EditorOption[\"accessibilitySupport\"] = 2] = \"accessibilitySupport\";\n EditorOption[EditorOption[\"accessibilityPageSize\"] = 3] = \"accessibilityPageSize\";\n EditorOption[EditorOption[\"ariaLabel\"] = 4] = \"ariaLabel\";\n EditorOption[EditorOption[\"autoClosingBrackets\"] = 5] = \"autoClosingBrackets\";\n EditorOption[EditorOption[\"autoClosingDelete\"] = 6] = \"autoClosingDelete\";\n EditorOption[EditorOption[\"autoClosingOvertype\"] = 7] = \"autoClosingOvertype\";\n EditorOption[EditorOption[\"autoClosingQuotes\"] = 8] = \"autoClosingQuotes\";\n EditorOption[EditorOption[\"autoIndent\"] = 9] = \"autoIndent\";\n EditorOption[EditorOption[\"automaticLayout\"] = 10] = \"automaticLayout\";\n EditorOption[EditorOption[\"autoSurround\"] = 11] = \"autoSurround\";\n EditorOption[EditorOption[\"bracketPairColorization\"] = 12] = \"bracketPairColorization\";\n EditorOption[EditorOption[\"guides\"] = 13] = \"guides\";\n EditorOption[EditorOption[\"codeLens\"] = 14] = \"codeLens\";\n EditorOption[EditorOption[\"codeLensFontFamily\"] = 15] = \"codeLensFontFamily\";\n EditorOption[EditorOption[\"codeLensFontSize\"] = 16] = \"codeLensFontSize\";\n EditorOption[EditorOption[\"colorDecorators\"] = 17] = \"colorDecorators\";\n EditorOption[EditorOption[\"columnSelection\"] = 18] = \"columnSelection\";\n EditorOption[EditorOption[\"comments\"] = 19] = \"comments\";\n EditorOption[EditorOption[\"contextmenu\"] = 20] = \"contextmenu\";\n EditorOption[EditorOption[\"copyWithSyntaxHighlighting\"] = 21] = \"copyWithSyntaxHighlighting\";\n EditorOption[EditorOption[\"cursorBlinking\"] = 22] = \"cursorBlinking\";\n EditorOption[EditorOption[\"cursorSmoothCaretAnimation\"] = 23] = \"cursorSmoothCaretAnimation\";\n EditorOption[EditorOption[\"cursorStyle\"] = 24] = \"cursorStyle\";\n EditorOption[EditorOption[\"cursorSurroundingLines\"] = 25] = \"cursorSurroundingLines\";\n EditorOption[EditorOption[\"cursorSurroundingLinesStyle\"] = 26] = \"cursorSurroundingLinesStyle\";\n EditorOption[EditorOption[\"cursorWidth\"] = 27] = \"cursorWidth\";\n EditorOption[EditorOption[\"disableLayerHinting\"] = 28] = \"disableLayerHinting\";\n EditorOption[EditorOption[\"disableMonospaceOptimizations\"] = 29] = \"disableMonospaceOptimizations\";\n EditorOption[EditorOption[\"domReadOnly\"] = 30] = \"domReadOnly\";\n EditorOption[EditorOption[\"dragAndDrop\"] = 31] = \"dragAndDrop\";\n EditorOption[EditorOption[\"emptySelectionClipboard\"] = 32] = \"emptySelectionClipboard\";\n EditorOption[EditorOption[\"extraEditorClassName\"] = 33] = \"extraEditorClassName\";\n EditorOption[EditorOption[\"fastScrollSensitivity\"] = 34] = \"fastScrollSensitivity\";\n EditorOption[EditorOption[\"find\"] = 35] = \"find\";\n EditorOption[EditorOption[\"fixedOverflowWidgets\"] = 36] = \"fixedOverflowWidgets\";\n EditorOption[EditorOption[\"folding\"] = 37] = \"folding\";\n EditorOption[EditorOption[\"foldingStrategy\"] = 38] = \"foldingStrategy\";\n EditorOption[EditorOption[\"foldingHighlight\"] = 39] = \"foldingHighlight\";\n EditorOption[EditorOption[\"foldingImportsByDefault\"] = 40] = \"foldingImportsByDefault\";\n EditorOption[EditorOption[\"unfoldOnClickAfterEndOfLine\"] = 41] = \"unfoldOnClickAfterEndOfLine\";\n EditorOption[EditorOption[\"fontFamily\"] = 42] = \"fontFamily\";\n EditorOption[EditorOption[\"fontInfo\"] = 43] = \"fontInfo\";\n EditorOption[EditorOption[\"fontLigatures\"] = 44] = \"fontLigatures\";\n EditorOption[EditorOption[\"fontSize\"] = 45] = \"fontSize\";\n EditorOption[EditorOption[\"fontWeight\"] = 46] = \"fontWeight\";\n EditorOption[EditorOption[\"formatOnPaste\"] = 47] = \"formatOnPaste\";\n EditorOption[EditorOption[\"formatOnType\"] = 48] = \"formatOnType\";\n EditorOption[EditorOption[\"glyphMargin\"] = 49] = \"glyphMargin\";\n EditorOption[EditorOption[\"gotoLocation\"] = 50] = \"gotoLocation\";\n EditorOption[EditorOption[\"hideCursorInOverviewRuler\"] = 51] = \"hideCursorInOverviewRuler\";\n EditorOption[EditorOption[\"hover\"] = 52] = \"hover\";\n EditorOption[EditorOption[\"inDiffEditor\"] = 53] = \"inDiffEditor\";\n EditorOption[EditorOption[\"inlineSuggest\"] = 54] = \"inlineSuggest\";\n EditorOption[EditorOption[\"letterSpacing\"] = 55] = \"letterSpacing\";\n EditorOption[EditorOption[\"lightbulb\"] = 56] = \"lightbulb\";\n EditorOption[EditorOption[\"lineDecorationsWidth\"] = 57] = \"lineDecorationsWidth\";\n EditorOption[EditorOption[\"lineHeight\"] = 58] = \"lineHeight\";\n EditorOption[EditorOption[\"lineNumbers\"] = 59] = \"lineNumbers\";\n EditorOption[EditorOption[\"lineNumbersMinChars\"] = 60] = \"lineNumbersMinChars\";\n EditorOption[EditorOption[\"linkedEditing\"] = 61] = \"linkedEditing\";\n EditorOption[EditorOption[\"links\"] = 62] = \"links\";\n EditorOption[EditorOption[\"matchBrackets\"] = 63] = \"matchBrackets\";\n EditorOption[EditorOption[\"minimap\"] = 64] = \"minimap\";\n EditorOption[EditorOption[\"mouseStyle\"] = 65] = \"mouseStyle\";\n EditorOption[EditorOption[\"mouseWheelScrollSensitivity\"] = 66] = \"mouseWheelScrollSensitivity\";\n EditorOption[EditorOption[\"mouseWheelZoom\"] = 67] = \"mouseWheelZoom\";\n EditorOption[EditorOption[\"multiCursorMergeOverlapping\"] = 68] = \"multiCursorMergeOverlapping\";\n EditorOption[EditorOption[\"multiCursorModifier\"] = 69] = \"multiCursorModifier\";\n EditorOption[EditorOption[\"multiCursorPaste\"] = 70] = \"multiCursorPaste\";\n EditorOption[EditorOption[\"occurrencesHighlight\"] = 71] = \"occurrencesHighlight\";\n EditorOption[EditorOption[\"overviewRulerBorder\"] = 72] = \"overviewRulerBorder\";\n EditorOption[EditorOption[\"overviewRulerLanes\"] = 73] = \"overviewRulerLanes\";\n EditorOption[EditorOption[\"padding\"] = 74] = \"padding\";\n EditorOption[EditorOption[\"parameterHints\"] = 75] = \"parameterHints\";\n EditorOption[EditorOption[\"peekWidgetDefaultFocus\"] = 76] = \"peekWidgetDefaultFocus\";\n EditorOption[EditorOption[\"definitionLinkOpensInPeek\"] = 77] = \"definitionLinkOpensInPeek\";\n EditorOption[EditorOption[\"quickSuggestions\"] = 78] = \"quickSuggestions\";\n EditorOption[EditorOption[\"quickSuggestionsDelay\"] = 79] = \"quickSuggestionsDelay\";\n EditorOption[EditorOption[\"readOnly\"] = 80] = \"readOnly\";\n EditorOption[EditorOption[\"renameOnType\"] = 81] = \"renameOnType\";\n EditorOption[EditorOption[\"renderControlCharacters\"] = 82] = \"renderControlCharacters\";\n EditorOption[EditorOption[\"renderFinalNewline\"] = 83] = \"renderFinalNewline\";\n EditorOption[EditorOption[\"renderLineHighlight\"] = 84] = \"renderLineHighlight\";\n EditorOption[EditorOption[\"renderLineHighlightOnlyWhenFocus\"] = 85] = \"renderLineHighlightOnlyWhenFocus\";\n EditorOption[EditorOption[\"renderValidationDecorations\"] = 86] = \"renderValidationDecorations\";\n EditorOption[EditorOption[\"renderWhitespace\"] = 87] = \"renderWhitespace\";\n EditorOption[EditorOption[\"revealHorizontalRightPadding\"] = 88] = \"revealHorizontalRightPadding\";\n EditorOption[EditorOption[\"roundedSelection\"] = 89] = \"roundedSelection\";\n EditorOption[EditorOption[\"rulers\"] = 90] = \"rulers\";\n EditorOption[EditorOption[\"scrollbar\"] = 91] = \"scrollbar\";\n EditorOption[EditorOption[\"scrollBeyondLastColumn\"] = 92] = \"scrollBeyondLastColumn\";\n EditorOption[EditorOption[\"scrollBeyondLastLine\"] = 93] = \"scrollBeyondLastLine\";\n EditorOption[EditorOption[\"scrollPredominantAxis\"] = 94] = \"scrollPredominantAxis\";\n EditorOption[EditorOption[\"selectionClipboard\"] = 95] = \"selectionClipboard\";\n EditorOption[EditorOption[\"selectionHighlight\"] = 96] = \"selectionHighlight\";\n EditorOption[EditorOption[\"selectOnLineNumbers\"] = 97] = \"selectOnLineNumbers\";\n EditorOption[EditorOption[\"showFoldingControls\"] = 98] = \"showFoldingControls\";\n EditorOption[EditorOption[\"showUnused\"] = 99] = \"showUnused\";\n EditorOption[EditorOption[\"snippetSuggestions\"] = 100] = \"snippetSuggestions\";\n EditorOption[EditorOption[\"smartSelect\"] = 101] = \"smartSelect\";\n EditorOption[EditorOption[\"smoothScrolling\"] = 102] = \"smoothScrolling\";\n EditorOption[EditorOption[\"stickyTabStops\"] = 103] = \"stickyTabStops\";\n EditorOption[EditorOption[\"stopRenderingLineAfter\"] = 104] = \"stopRenderingLineAfter\";\n EditorOption[EditorOption[\"suggest\"] = 105] = \"suggest\";\n EditorOption[EditorOption[\"suggestFontSize\"] = 106] = \"suggestFontSize\";\n EditorOption[EditorOption[\"suggestLineHeight\"] = 107] = \"suggestLineHeight\";\n EditorOption[EditorOption[\"suggestOnTriggerCharacters\"] = 108] = \"suggestOnTriggerCharacters\";\n EditorOption[EditorOption[\"suggestSelection\"] = 109] = \"suggestSelection\";\n EditorOption[EditorOption[\"tabCompletion\"] = 110] = \"tabCompletion\";\n EditorOption[EditorOption[\"tabIndex\"] = 111] = \"tabIndex\";\n EditorOption[EditorOption[\"unusualLineTerminators\"] = 112] = \"unusualLineTerminators\";\n EditorOption[EditorOption[\"useShadowDOM\"] = 113] = \"useShadowDOM\";\n EditorOption[EditorOption[\"useTabStops\"] = 114] = \"useTabStops\";\n EditorOption[EditorOption[\"wordSeparators\"] = 115] = \"wordSeparators\";\n EditorOption[EditorOption[\"wordWrap\"] = 116] = \"wordWrap\";\n EditorOption[EditorOption[\"wordWrapBreakAfterCharacters\"] = 117] = \"wordWrapBreakAfterCharacters\";\n EditorOption[EditorOption[\"wordWrapBreakBeforeCharacters\"] = 118] = \"wordWrapBreakBeforeCharacters\";\n EditorOption[EditorOption[\"wordWrapColumn\"] = 119] = \"wordWrapColumn\";\n EditorOption[EditorOption[\"wordWrapOverride1\"] = 120] = \"wordWrapOverride1\";\n EditorOption[EditorOption[\"wordWrapOverride2\"] = 121] = \"wordWrapOverride2\";\n EditorOption[EditorOption[\"wrappingIndent\"] = 122] = \"wrappingIndent\";\n EditorOption[EditorOption[\"wrappingStrategy\"] = 123] = \"wrappingStrategy\";\n EditorOption[EditorOption[\"showDeprecated\"] = 124] = \"showDeprecated\";\n EditorOption[EditorOption[\"inlayHints\"] = 125] = \"inlayHints\";\n EditorOption[EditorOption[\"editorClassName\"] = 126] = \"editorClassName\";\n EditorOption[EditorOption[\"pixelRatio\"] = 127] = \"pixelRatio\";\n EditorOption[EditorOption[\"tabFocusMode\"] = 128] = \"tabFocusMode\";\n EditorOption[EditorOption[\"layoutInfo\"] = 129] = \"layoutInfo\";\n EditorOption[EditorOption[\"wrappingInfo\"] = 130] = \"wrappingInfo\";\n})(EditorOption || (EditorOption = {}));\n/**\n * End of line character preference.\n */\nexport var EndOfLinePreference;\n(function (EndOfLinePreference) {\n /**\n * Use the end of line character identified in the text buffer.\n */\n EndOfLinePreference[EndOfLinePreference[\"TextDefined\"] = 0] = \"TextDefined\";\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"CRLF\"] = 2] = \"CRLF\";\n})(EndOfLinePreference || (EndOfLinePreference = {}));\n/**\n * End of line character preference.\n */\nexport var EndOfLineSequence;\n(function (EndOfLineSequence) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"LF\"] = 0] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"CRLF\"] = 1] = \"CRLF\";\n})(EndOfLineSequence || (EndOfLineSequence = {}));\n/**\n * Describes what to do with the indentation when pressing Enter.\n */\nexport var IndentAction;\n(function (IndentAction) {\n /**\n * Insert new line and copy the previous line's indentation.\n */\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\n /**\n * Insert new line and indent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\n /**\n * Insert two new lines:\n * - the first one indented which will hold the cursor\n * - the second one at the same indentation level\n */\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\n /**\n * Insert new line and outdent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\n})(IndentAction || (IndentAction = {}));\nexport var InlayHintKind;\n(function (InlayHintKind) {\n InlayHintKind[InlayHintKind[\"Other\"] = 0] = \"Other\";\n InlayHintKind[InlayHintKind[\"Type\"] = 1] = \"Type\";\n InlayHintKind[InlayHintKind[\"Parameter\"] = 2] = \"Parameter\";\n})(InlayHintKind || (InlayHintKind = {}));\n/**\n * How an {@link InlineCompletionsProvider inline completion provider} was triggered.\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n /**\n * Completion was triggered automatically while editing.\n * It is sufficient to return a single completion item in this case.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n /**\n * Completion was triggered explicitly by a user gesture.\n * Return multiple completion items to enable cycling through them.\n */\n InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Explicit\"] = 1] = \"Explicit\";\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\n/**\n * Virtual Key Codes, the value does not hold any inherent meaning.\n * Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\n * But these are \"more general\", as they should work across browsers & OS`s.\n */\nexport var KeyCode;\n(function (KeyCode) {\n KeyCode[KeyCode[\"DependsOnKbLayout\"] = -1] = \"DependsOnKbLayout\";\n /**\n * Placed first to cover the 0 value of the enum.\n */\n KeyCode[KeyCode[\"Unknown\"] = 0] = \"Unknown\";\n KeyCode[KeyCode[\"Backspace\"] = 1] = \"Backspace\";\n KeyCode[KeyCode[\"Tab\"] = 2] = \"Tab\";\n KeyCode[KeyCode[\"Enter\"] = 3] = \"Enter\";\n KeyCode[KeyCode[\"Shift\"] = 4] = \"Shift\";\n KeyCode[KeyCode[\"Ctrl\"] = 5] = \"Ctrl\";\n KeyCode[KeyCode[\"Alt\"] = 6] = \"Alt\";\n KeyCode[KeyCode[\"PauseBreak\"] = 7] = \"PauseBreak\";\n KeyCode[KeyCode[\"CapsLock\"] = 8] = \"CapsLock\";\n KeyCode[KeyCode[\"Escape\"] = 9] = \"Escape\";\n KeyCode[KeyCode[\"Space\"] = 10] = \"Space\";\n KeyCode[KeyCode[\"PageUp\"] = 11] = \"PageUp\";\n KeyCode[KeyCode[\"PageDown\"] = 12] = \"PageDown\";\n KeyCode[KeyCode[\"End\"] = 13] = \"End\";\n KeyCode[KeyCode[\"Home\"] = 14] = \"Home\";\n KeyCode[KeyCode[\"LeftArrow\"] = 15] = \"LeftArrow\";\n KeyCode[KeyCode[\"UpArrow\"] = 16] = \"UpArrow\";\n KeyCode[KeyCode[\"RightArrow\"] = 17] = \"RightArrow\";\n KeyCode[KeyCode[\"DownArrow\"] = 18] = \"DownArrow\";\n KeyCode[KeyCode[\"Insert\"] = 19] = \"Insert\";\n KeyCode[KeyCode[\"Delete\"] = 20] = \"Delete\";\n KeyCode[KeyCode[\"Digit0\"] = 21] = \"Digit0\";\n KeyCode[KeyCode[\"Digit1\"] = 22] = \"Digit1\";\n KeyCode[KeyCode[\"Digit2\"] = 23] = \"Digit2\";\n KeyCode[KeyCode[\"Digit3\"] = 24] = \"Digit3\";\n KeyCode[KeyCode[\"Digit4\"] = 25] = \"Digit4\";\n KeyCode[KeyCode[\"Digit5\"] = 26] = \"Digit5\";\n KeyCode[KeyCode[\"Digit6\"] = 27] = \"Digit6\";\n KeyCode[KeyCode[\"Digit7\"] = 28] = \"Digit7\";\n KeyCode[KeyCode[\"Digit8\"] = 29] = \"Digit8\";\n KeyCode[KeyCode[\"Digit9\"] = 30] = \"Digit9\";\n KeyCode[KeyCode[\"KeyA\"] = 31] = \"KeyA\";\n KeyCode[KeyCode[\"KeyB\"] = 32] = \"KeyB\";\n KeyCode[KeyCode[\"KeyC\"] = 33] = \"KeyC\";\n KeyCode[KeyCode[\"KeyD\"] = 34] = \"KeyD\";\n KeyCode[KeyCode[\"KeyE\"] = 35] = \"KeyE\";\n KeyCode[KeyCode[\"KeyF\"] = 36] = \"KeyF\";\n KeyCode[KeyCode[\"KeyG\"] = 37] = \"KeyG\";\n KeyCode[KeyCode[\"KeyH\"] = 38] = \"KeyH\";\n KeyCode[KeyCode[\"KeyI\"] = 39] = \"KeyI\";\n KeyCode[KeyCode[\"KeyJ\"] = 40] = \"KeyJ\";\n KeyCode[KeyCode[\"KeyK\"] = 41] = \"KeyK\";\n KeyCode[KeyCode[\"KeyL\"] = 42] = \"KeyL\";\n KeyCode[KeyCode[\"KeyM\"] = 43] = \"KeyM\";\n KeyCode[KeyCode[\"KeyN\"] = 44] = \"KeyN\";\n KeyCode[KeyCode[\"KeyO\"] = 45] = \"KeyO\";\n KeyCode[KeyCode[\"KeyP\"] = 46] = \"KeyP\";\n KeyCode[KeyCode[\"KeyQ\"] = 47] = \"KeyQ\";\n KeyCode[KeyCode[\"KeyR\"] = 48] = \"KeyR\";\n KeyCode[KeyCode[\"KeyS\"] = 49] = \"KeyS\";\n KeyCode[KeyCode[\"KeyT\"] = 50] = \"KeyT\";\n KeyCode[KeyCode[\"KeyU\"] = 51] = \"KeyU\";\n KeyCode[KeyCode[\"KeyV\"] = 52] = \"KeyV\";\n KeyCode[KeyCode[\"KeyW\"] = 53] = \"KeyW\";\n KeyCode[KeyCode[\"KeyX\"] = 54] = \"KeyX\";\n KeyCode[KeyCode[\"KeyY\"] = 55] = \"KeyY\";\n KeyCode[KeyCode[\"KeyZ\"] = 56] = \"KeyZ\";\n KeyCode[KeyCode[\"Meta\"] = 57] = \"Meta\";\n KeyCode[KeyCode[\"ContextMenu\"] = 58] = \"ContextMenu\";\n KeyCode[KeyCode[\"F1\"] = 59] = \"F1\";\n KeyCode[KeyCode[\"F2\"] = 60] = \"F2\";\n KeyCode[KeyCode[\"F3\"] = 61] = \"F3\";\n KeyCode[KeyCode[\"F4\"] = 62] = \"F4\";\n KeyCode[KeyCode[\"F5\"] = 63] = \"F5\";\n KeyCode[KeyCode[\"F6\"] = 64] = \"F6\";\n KeyCode[KeyCode[\"F7\"] = 65] = \"F7\";\n KeyCode[KeyCode[\"F8\"] = 66] = \"F8\";\n KeyCode[KeyCode[\"F9\"] = 67] = \"F9\";\n KeyCode[KeyCode[\"F10\"] = 68] = \"F10\";\n KeyCode[KeyCode[\"F11\"] = 69] = \"F11\";\n KeyCode[KeyCode[\"F12\"] = 70] = \"F12\";\n KeyCode[KeyCode[\"F13\"] = 71] = \"F13\";\n KeyCode[KeyCode[\"F14\"] = 72] = \"F14\";\n KeyCode[KeyCode[\"F15\"] = 73] = \"F15\";\n KeyCode[KeyCode[\"F16\"] = 74] = \"F16\";\n KeyCode[KeyCode[\"F17\"] = 75] = \"F17\";\n KeyCode[KeyCode[\"F18\"] = 76] = \"F18\";\n KeyCode[KeyCode[\"F19\"] = 77] = \"F19\";\n KeyCode[KeyCode[\"NumLock\"] = 78] = \"NumLock\";\n KeyCode[KeyCode[\"ScrollLock\"] = 79] = \"ScrollLock\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ';:' key\n */\n KeyCode[KeyCode[\"Semicolon\"] = 80] = \"Semicolon\";\n /**\n * For any country/region, the '+' key\n * For the US standard keyboard, the '=+' key\n */\n KeyCode[KeyCode[\"Equal\"] = 81] = \"Equal\";\n /**\n * For any country/region, the ',' key\n * For the US standard keyboard, the ',<' key\n */\n KeyCode[KeyCode[\"Comma\"] = 82] = \"Comma\";\n /**\n * For any country/region, the '-' key\n * For the US standard keyboard, the '-_' key\n */\n KeyCode[KeyCode[\"Minus\"] = 83] = \"Minus\";\n /**\n * For any country/region, the '.' key\n * For the US standard keyboard, the '.>' key\n */\n KeyCode[KeyCode[\"Period\"] = 84] = \"Period\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '/?' key\n */\n KeyCode[KeyCode[\"Slash\"] = 85] = \"Slash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '`~' key\n */\n KeyCode[KeyCode[\"Backquote\"] = 86] = \"Backquote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '[{' key\n */\n KeyCode[KeyCode[\"BracketLeft\"] = 87] = \"BracketLeft\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '\\|' key\n */\n KeyCode[KeyCode[\"Backslash\"] = 88] = \"Backslash\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ']}' key\n */\n KeyCode[KeyCode[\"BracketRight\"] = 89] = \"BracketRight\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ''\"' key\n */\n KeyCode[KeyCode[\"Quote\"] = 90] = \"Quote\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n */\n KeyCode[KeyCode[\"OEM_8\"] = 91] = \"OEM_8\";\n /**\n * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n */\n KeyCode[KeyCode[\"IntlBackslash\"] = 92] = \"IntlBackslash\";\n KeyCode[KeyCode[\"Numpad0\"] = 93] = \"Numpad0\";\n KeyCode[KeyCode[\"Numpad1\"] = 94] = \"Numpad1\";\n KeyCode[KeyCode[\"Numpad2\"] = 95] = \"Numpad2\";\n KeyCode[KeyCode[\"Numpad3\"] = 96] = \"Numpad3\";\n KeyCode[KeyCode[\"Numpad4\"] = 97] = \"Numpad4\";\n KeyCode[KeyCode[\"Numpad5\"] = 98] = \"Numpad5\";\n KeyCode[KeyCode[\"Numpad6\"] = 99] = \"Numpad6\";\n KeyCode[KeyCode[\"Numpad7\"] = 100] = \"Numpad7\";\n KeyCode[KeyCode[\"Numpad8\"] = 101] = \"Numpad8\";\n KeyCode[KeyCode[\"Numpad9\"] = 102] = \"Numpad9\";\n KeyCode[KeyCode[\"NumpadMultiply\"] = 103] = \"NumpadMultiply\";\n KeyCode[KeyCode[\"NumpadAdd\"] = 104] = \"NumpadAdd\";\n KeyCode[KeyCode[\"NUMPAD_SEPARATOR\"] = 105] = \"NUMPAD_SEPARATOR\";\n KeyCode[KeyCode[\"NumpadSubtract\"] = 106] = \"NumpadSubtract\";\n KeyCode[KeyCode[\"NumpadDecimal\"] = 107] = \"NumpadDecimal\";\n KeyCode[KeyCode[\"NumpadDivide\"] = 108] = \"NumpadDivide\";\n /**\n * Cover all key codes when IME is processing input.\n */\n KeyCode[KeyCode[\"KEY_IN_COMPOSITION\"] = 109] = \"KEY_IN_COMPOSITION\";\n KeyCode[KeyCode[\"ABNT_C1\"] = 110] = \"ABNT_C1\";\n KeyCode[KeyCode[\"ABNT_C2\"] = 111] = \"ABNT_C2\";\n KeyCode[KeyCode[\"AudioVolumeMute\"] = 112] = \"AudioVolumeMute\";\n KeyCode[KeyCode[\"AudioVolumeUp\"] = 113] = \"AudioVolumeUp\";\n KeyCode[KeyCode[\"AudioVolumeDown\"] = 114] = \"AudioVolumeDown\";\n KeyCode[KeyCode[\"BrowserSearch\"] = 115] = \"BrowserSearch\";\n KeyCode[KeyCode[\"BrowserHome\"] = 116] = \"BrowserHome\";\n KeyCode[KeyCode[\"BrowserBack\"] = 117] = \"BrowserBack\";\n KeyCode[KeyCode[\"BrowserForward\"] = 118] = \"BrowserForward\";\n KeyCode[KeyCode[\"MediaTrackNext\"] = 119] = \"MediaTrackNext\";\n KeyCode[KeyCode[\"MediaTrackPrevious\"] = 120] = \"MediaTrackPrevious\";\n KeyCode[KeyCode[\"MediaStop\"] = 121] = \"MediaStop\";\n KeyCode[KeyCode[\"MediaPlayPause\"] = 122] = \"MediaPlayPause\";\n KeyCode[KeyCode[\"LaunchMediaPlayer\"] = 123] = \"LaunchMediaPlayer\";\n KeyCode[KeyCode[\"LaunchMail\"] = 124] = \"LaunchMail\";\n KeyCode[KeyCode[\"LaunchApp2\"] = 125] = \"LaunchApp2\";\n /**\n * Placed last to cover the length of the enum.\n * Please do not depend on this value!\n */\n KeyCode[KeyCode[\"MAX_VALUE\"] = 126] = \"MAX_VALUE\";\n})(KeyCode || (KeyCode = {}));\nexport var MarkerSeverity;\n(function (MarkerSeverity) {\n MarkerSeverity[MarkerSeverity[\"Hint\"] = 1] = \"Hint\";\n MarkerSeverity[MarkerSeverity[\"Info\"] = 2] = \"Info\";\n MarkerSeverity[MarkerSeverity[\"Warning\"] = 4] = \"Warning\";\n MarkerSeverity[MarkerSeverity[\"Error\"] = 8] = \"Error\";\n})(MarkerSeverity || (MarkerSeverity = {}));\nexport var MarkerTag;\n(function (MarkerTag) {\n MarkerTag[MarkerTag[\"Unnecessary\"] = 1] = \"Unnecessary\";\n MarkerTag[MarkerTag[\"Deprecated\"] = 2] = \"Deprecated\";\n})(MarkerTag || (MarkerTag = {}));\n/**\n * Position in the minimap to render the decoration.\n */\nexport var MinimapPosition;\n(function (MinimapPosition) {\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\n})(MinimapPosition || (MinimapPosition = {}));\n/**\n * Type of hit element with the mouse in the editor.\n */\nexport var MouseTargetType;\n(function (MouseTargetType) {\n /**\n * Mouse is on top of an unknown element.\n */\n MouseTargetType[MouseTargetType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n /**\n * Mouse is on top of the textarea used for input.\n */\n MouseTargetType[MouseTargetType[\"TEXTAREA\"] = 1] = \"TEXTAREA\";\n /**\n * Mouse is on top of the glyph margin\n */\n MouseTargetType[MouseTargetType[\"GUTTER_GLYPH_MARGIN\"] = 2] = \"GUTTER_GLYPH_MARGIN\";\n /**\n * Mouse is on top of the line numbers\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_NUMBERS\"] = 3] = \"GUTTER_LINE_NUMBERS\";\n /**\n * Mouse is on top of the line decorations\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_DECORATIONS\"] = 4] = \"GUTTER_LINE_DECORATIONS\";\n /**\n * Mouse is on top of the whitespace left in the gutter by a view zone.\n */\n MouseTargetType[MouseTargetType[\"GUTTER_VIEW_ZONE\"] = 5] = \"GUTTER_VIEW_ZONE\";\n /**\n * Mouse is on top of text in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_TEXT\"] = 6] = \"CONTENT_TEXT\";\n /**\n * Mouse is on top of empty space in the content (e.g. after line text or below last line)\n */\n MouseTargetType[MouseTargetType[\"CONTENT_EMPTY\"] = 7] = \"CONTENT_EMPTY\";\n /**\n * Mouse is on top of a view zone in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_VIEW_ZONE\"] = 8] = \"CONTENT_VIEW_ZONE\";\n /**\n * Mouse is on top of a content widget.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_WIDGET\"] = 9] = \"CONTENT_WIDGET\";\n /**\n * Mouse is on top of the decorations overview ruler.\n */\n MouseTargetType[MouseTargetType[\"OVERVIEW_RULER\"] = 10] = \"OVERVIEW_RULER\";\n /**\n * Mouse is on top of a scrollbar.\n */\n MouseTargetType[MouseTargetType[\"SCROLLBAR\"] = 11] = \"SCROLLBAR\";\n /**\n * Mouse is on top of an overlay widget.\n */\n MouseTargetType[MouseTargetType[\"OVERLAY_WIDGET\"] = 12] = \"OVERLAY_WIDGET\";\n /**\n * Mouse is outside of the editor.\n */\n MouseTargetType[MouseTargetType[\"OUTSIDE_EDITOR\"] = 13] = \"OUTSIDE_EDITOR\";\n})(MouseTargetType || (MouseTargetType = {}));\n/**\n * A positioning preference for rendering overlay widgets.\n */\nexport var OverlayWidgetPositionPreference;\n(function (OverlayWidgetPositionPreference) {\n /**\n * Position the overlay widget in the top right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_RIGHT_CORNER\"] = 0] = \"TOP_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the bottom right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"BOTTOM_RIGHT_CORNER\"] = 1] = \"BOTTOM_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the top center\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_CENTER\"] = 2] = \"TOP_CENTER\";\n})(OverlayWidgetPositionPreference || (OverlayWidgetPositionPreference = {}));\n/**\n * Vertical Lane in the overview ruler of the editor.\n */\nexport var OverviewRulerLane;\n(function (OverviewRulerLane) {\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\n})(OverviewRulerLane || (OverviewRulerLane = {}));\nexport var RenderLineNumbersType;\n(function (RenderLineNumbersType) {\n RenderLineNumbersType[RenderLineNumbersType[\"Off\"] = 0] = \"Off\";\n RenderLineNumbersType[RenderLineNumbersType[\"On\"] = 1] = \"On\";\n RenderLineNumbersType[RenderLineNumbersType[\"Relative\"] = 2] = \"Relative\";\n RenderLineNumbersType[RenderLineNumbersType[\"Interval\"] = 3] = \"Interval\";\n RenderLineNumbersType[RenderLineNumbersType[\"Custom\"] = 4] = \"Custom\";\n})(RenderLineNumbersType || (RenderLineNumbersType = {}));\nexport var RenderMinimap;\n(function (RenderMinimap) {\n RenderMinimap[RenderMinimap[\"None\"] = 0] = \"None\";\n RenderMinimap[RenderMinimap[\"Text\"] = 1] = \"Text\";\n RenderMinimap[RenderMinimap[\"Blocks\"] = 2] = \"Blocks\";\n})(RenderMinimap || (RenderMinimap = {}));\nexport var ScrollType;\n(function (ScrollType) {\n ScrollType[ScrollType[\"Smooth\"] = 0] = \"Smooth\";\n ScrollType[ScrollType[\"Immediate\"] = 1] = \"Immediate\";\n})(ScrollType || (ScrollType = {}));\nexport var ScrollbarVisibility;\n(function (ScrollbarVisibility) {\n ScrollbarVisibility[ScrollbarVisibility[\"Auto\"] = 1] = \"Auto\";\n ScrollbarVisibility[ScrollbarVisibility[\"Hidden\"] = 2] = \"Hidden\";\n ScrollbarVisibility[ScrollbarVisibility[\"Visible\"] = 3] = \"Visible\";\n})(ScrollbarVisibility || (ScrollbarVisibility = {}));\n/**\n * The direction of a selection.\n */\nexport var SelectionDirection;\n(function (SelectionDirection) {\n /**\n * The selection starts above where it ends.\n */\n SelectionDirection[SelectionDirection[\"LTR\"] = 0] = \"LTR\";\n /**\n * The selection starts below where it ends.\n */\n SelectionDirection[SelectionDirection[\"RTL\"] = 1] = \"RTL\";\n})(SelectionDirection || (SelectionDirection = {}));\nexport var SignatureHelpTriggerKind;\n(function (SignatureHelpTriggerKind) {\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\n})(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind[SymbolKind[\"File\"] = 0] = \"File\";\n SymbolKind[SymbolKind[\"Module\"] = 1] = \"Module\";\n SymbolKind[SymbolKind[\"Namespace\"] = 2] = \"Namespace\";\n SymbolKind[SymbolKind[\"Package\"] = 3] = \"Package\";\n SymbolKind[SymbolKind[\"Class\"] = 4] = \"Class\";\n SymbolKind[SymbolKind[\"Method\"] = 5] = \"Method\";\n SymbolKind[SymbolKind[\"Property\"] = 6] = \"Property\";\n SymbolKind[SymbolKind[\"Field\"] = 7] = \"Field\";\n SymbolKind[SymbolKind[\"Constructor\"] = 8] = \"Constructor\";\n SymbolKind[SymbolKind[\"Enum\"] = 9] = \"Enum\";\n SymbolKind[SymbolKind[\"Interface\"] = 10] = \"Interface\";\n SymbolKind[SymbolKind[\"Function\"] = 11] = \"Function\";\n SymbolKind[SymbolKind[\"Variable\"] = 12] = \"Variable\";\n SymbolKind[SymbolKind[\"Constant\"] = 13] = \"Constant\";\n SymbolKind[SymbolKind[\"String\"] = 14] = \"String\";\n SymbolKind[SymbolKind[\"Number\"] = 15] = \"Number\";\n SymbolKind[SymbolKind[\"Boolean\"] = 16] = \"Boolean\";\n SymbolKind[SymbolKind[\"Array\"] = 17] = \"Array\";\n SymbolKind[SymbolKind[\"Object\"] = 18] = \"Object\";\n SymbolKind[SymbolKind[\"Key\"] = 19] = \"Key\";\n SymbolKind[SymbolKind[\"Null\"] = 20] = \"Null\";\n SymbolKind[SymbolKind[\"EnumMember\"] = 21] = \"EnumMember\";\n SymbolKind[SymbolKind[\"Struct\"] = 22] = \"Struct\";\n SymbolKind[SymbolKind[\"Event\"] = 23] = \"Event\";\n SymbolKind[SymbolKind[\"Operator\"] = 24] = \"Operator\";\n SymbolKind[SymbolKind[\"TypeParameter\"] = 25] = \"TypeParameter\";\n})(SymbolKind || (SymbolKind = {}));\nexport var SymbolTag;\n(function (SymbolTag) {\n SymbolTag[SymbolTag[\"Deprecated\"] = 1] = \"Deprecated\";\n})(SymbolTag || (SymbolTag = {}));\n/**\n * The kind of animation in which the editor's cursor should be rendered.\n */\nexport var TextEditorCursorBlinkingStyle;\n(function (TextEditorCursorBlinkingStyle) {\n /**\n * Hidden\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Hidden\"] = 0] = \"Hidden\";\n /**\n * Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Blink\"] = 1] = \"Blink\";\n /**\n * Blinking with smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Smooth\"] = 2] = \"Smooth\";\n /**\n * Blinking with prolonged filled state and smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Phase\"] = 3] = \"Phase\";\n /**\n * Expand collapse animation on the y axis\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Expand\"] = 4] = \"Expand\";\n /**\n * No-Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Solid\"] = 5] = \"Solid\";\n})(TextEditorCursorBlinkingStyle || (TextEditorCursorBlinkingStyle = {}));\n/**\n * The style in which the editor's cursor should be rendered.\n */\nexport var TextEditorCursorStyle;\n(function (TextEditorCursorStyle) {\n /**\n * As a vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Line\"] = 1] = \"Line\";\n /**\n * As a block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Block\"] = 2] = \"Block\";\n /**\n * As a horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Underline\"] = 3] = \"Underline\";\n /**\n * As a thin vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"LineThin\"] = 4] = \"LineThin\";\n /**\n * As an outlined block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"BlockOutline\"] = 5] = \"BlockOutline\";\n /**\n * As a thin horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"UnderlineThin\"] = 6] = \"UnderlineThin\";\n})(TextEditorCursorStyle || (TextEditorCursorStyle = {}));\n/**\n * Describes the behavior of decorations when typing/editing near their edges.\n * Note: Please do not edit the values, as they very carefully match `DecorationRangeBehavior`\n */\nexport var TrackedRangeStickiness;\n(function (TrackedRangeStickiness) {\n TrackedRangeStickiness[TrackedRangeStickiness[\"AlwaysGrowsWhenTypingAtEdges\"] = 0] = \"AlwaysGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"NeverGrowsWhenTypingAtEdges\"] = 1] = \"NeverGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingBefore\"] = 2] = \"GrowsOnlyWhenTypingBefore\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingAfter\"] = 3] = \"GrowsOnlyWhenTypingAfter\";\n})(TrackedRangeStickiness || (TrackedRangeStickiness = {}));\n/**\n * Describes how to indent wrapped lines.\n */\nexport var WrappingIndent;\n(function (WrappingIndent) {\n /**\n * No indentation => wrapped lines begin at column 1.\n */\n WrappingIndent[WrappingIndent[\"None\"] = 0] = \"None\";\n /**\n * Same => wrapped lines get the same indentation as the parent.\n */\n WrappingIndent[WrappingIndent[\"Same\"] = 1] = \"Same\";\n /**\n * Indent => wrapped lines get +1 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"Indent\"] = 2] = \"Indent\";\n /**\n * DeepIndent => wrapped lines get +2 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"DeepIndent\"] = 3] = \"DeepIndent\";\n})(WrappingIndent || (WrappingIndent = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Position } from './position.js';\nimport { Range } from './range.js';\n/**\n * A selection in the editor.\n * The selection is a range that has an orientation.\n */\nexport class Selection extends Range {\n constructor(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn) {\n super(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn);\n this.selectionStartLineNumber = selectionStartLineNumber;\n this.selectionStartColumn = selectionStartColumn;\n this.positionLineNumber = positionLineNumber;\n this.positionColumn = positionColumn;\n }\n /**\n * Transform to a human-readable representation.\n */\n toString() {\n return '[' + this.selectionStartLineNumber + ',' + this.selectionStartColumn + ' -> ' + this.positionLineNumber + ',' + this.positionColumn + ']';\n }\n /**\n * Test if equals other selection.\n */\n equalsSelection(other) {\n return (Selection.selectionsEqual(this, other));\n }\n /**\n * Test if the two selections are equal.\n */\n static selectionsEqual(a, b) {\n return (a.selectionStartLineNumber === b.selectionStartLineNumber &&\n a.selectionStartColumn === b.selectionStartColumn &&\n a.positionLineNumber === b.positionLineNumber &&\n a.positionColumn === b.positionColumn);\n }\n /**\n * Get directions (LTR or RTL).\n */\n getDirection() {\n if (this.selectionStartLineNumber === this.startLineNumber && this.selectionStartColumn === this.startColumn) {\n return 0 /* LTR */;\n }\n return 1 /* RTL */;\n }\n /**\n * Create a new selection with a different `positionLineNumber` and `positionColumn`.\n */\n setEndPosition(endLineNumber, endColumn) {\n if (this.getDirection() === 0 /* LTR */) {\n return new Selection(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n }\n return new Selection(endLineNumber, endColumn, this.startLineNumber, this.startColumn);\n }\n /**\n * Get the position at `positionLineNumber` and `positionColumn`.\n */\n getPosition() {\n return new Position(this.positionLineNumber, this.positionColumn);\n }\n /**\n * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.\n */\n setStartPosition(startLineNumber, startColumn) {\n if (this.getDirection() === 0 /* LTR */) {\n return new Selection(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n }\n return new Selection(this.endLineNumber, this.endColumn, startLineNumber, startColumn);\n }\n // ----\n /**\n * Create a `Selection` from one or two positions\n */\n static fromPositions(start, end = start) {\n return new Selection(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n /**\n * Create a `Selection` from an `ISelection`.\n */\n static liftSelection(sel) {\n return new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\n }\n /**\n * `a` equals `b`.\n */\n static selectionsArrEqual(a, b) {\n if (a && !b || !a && b) {\n return false;\n }\n if (!a && !b) {\n return true;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0, len = a.length; i < len; i++) {\n if (!this.selectionsEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n /**\n * Test if `obj` is an `ISelection`.\n */\n static isISelection(obj) {\n return (obj\n && (typeof obj.selectionStartLineNumber === 'number')\n && (typeof obj.selectionStartColumn === 'number')\n && (typeof obj.positionLineNumber === 'number')\n && (typeof obj.positionColumn === 'number'));\n }\n /**\n * Create with a direction.\n */\n static createWithDirection(startLineNumber, startColumn, endLineNumber, endColumn, direction) {\n if (direction === 0 /* LTR */) {\n return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n return new Selection(endLineNumber, endColumn, startLineNumber, startColumn);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class Token {\n constructor(offset, type, language) {\n this._tokenBrand = undefined;\n this.offset = offset | 0; // @perf\n this.type = type;\n this.language = language;\n }\n toString() {\n return '(' + this.offset + ', ' + this.type + ')';\n }\n}\nexport class TokenizationResult {\n constructor(tokens, endState) {\n this._tokenizationResultBrand = undefined;\n this.tokens = tokens;\n this.endState = endState;\n }\n}\nexport class TokenizationResult2 {\n constructor(tokens, endState) {\n this._tokenizationResult2Brand = undefined;\n this.tokens = tokens;\n this.endState = endState;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { Token } from '../core/token.js';\nimport * as standaloneEnums from './standaloneEnums.js';\nexport class KeyMod {\n static chord(firstPart, secondPart) {\n return KeyChord(firstPart, secondPart);\n }\n}\nKeyMod.CtrlCmd = 2048 /* CtrlCmd */;\nKeyMod.Shift = 1024 /* Shift */;\nKeyMod.Alt = 512 /* Alt */;\nKeyMod.WinCtrl = 256 /* WinCtrl */;\nexport function createMonacoBaseAPI() {\n return {\n editor: undefined,\n languages: undefined,\n CancellationTokenSource: CancellationTokenSource,\n Emitter: Emitter,\n KeyCode: standaloneEnums.KeyCode,\n KeyMod: KeyMod,\n Position: Position,\n Range: Range,\n Selection: Selection,\n SelectionDirection: standaloneEnums.SelectionDirection,\n MarkerSeverity: standaloneEnums.MarkerSeverity,\n MarkerTag: standaloneEnums.MarkerTag,\n Uri: URI,\n Token: Token\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { stringDiff } from '../../../base/common/diff/diff.js';\nimport { globals } from '../../../base/common/platform.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { DiffComputer } from '../diff/diffComputer.js';\nimport { MirrorTextModel as BaseMirrorModel } from '../model/mirrorTextModel.js';\nimport { ensureValidWordDefinition, getWordAtText } from '../model/wordHelper.js';\nimport { computeLinks } from '../modes/linkComputer.js';\nimport { BasicInplaceReplace } from '../modes/supports/inplaceReplaceSupport.js';\nimport { createMonacoBaseAPI } from '../standalone/standaloneBase.js';\nimport * as types from '../../../base/common/types.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\n/**\n * @internal\n */\nexport class MirrorModel extends BaseMirrorModel {\n get uri() {\n return this._uri;\n }\n get eol() {\n return this._eol;\n }\n getValue() {\n return this.getText();\n }\n getLinesContent() {\n return this._lines.slice(0);\n }\n getLineCount() {\n return this._lines.length;\n }\n getLineContent(lineNumber) {\n return this._lines[lineNumber - 1];\n }\n getWordAtPosition(position, wordDefinition) {\n let wordAtText = getWordAtText(position.column, ensureValidWordDefinition(wordDefinition), this._lines[position.lineNumber - 1], 0);\n if (wordAtText) {\n return new Range(position.lineNumber, wordAtText.startColumn, position.lineNumber, wordAtText.endColumn);\n }\n return null;\n }\n words(wordDefinition) {\n const lines = this._lines;\n const wordenize = this._wordenize.bind(this);\n let lineNumber = 0;\n let lineText = '';\n let wordRangesIdx = 0;\n let wordRanges = [];\n return {\n *[Symbol.iterator]() {\n while (true) {\n if (wordRangesIdx < wordRanges.length) {\n const value = lineText.substring(wordRanges[wordRangesIdx].start, wordRanges[wordRangesIdx].end);\n wordRangesIdx += 1;\n yield value;\n }\n else {\n if (lineNumber < lines.length) {\n lineText = lines[lineNumber];\n wordRanges = wordenize(lineText, wordDefinition);\n wordRangesIdx = 0;\n lineNumber += 1;\n }\n else {\n break;\n }\n }\n }\n }\n };\n }\n getLineWords(lineNumber, wordDefinition) {\n let content = this._lines[lineNumber - 1];\n let ranges = this._wordenize(content, wordDefinition);\n let words = [];\n for (const range of ranges) {\n words.push({\n word: content.substring(range.start, range.end),\n startColumn: range.start + 1,\n endColumn: range.end + 1\n });\n }\n return words;\n }\n _wordenize(content, wordDefinition) {\n const result = [];\n let match;\n wordDefinition.lastIndex = 0; // reset lastIndex just to be sure\n while (match = wordDefinition.exec(content)) {\n if (match[0].length === 0) {\n // it did match the empty string\n break;\n }\n result.push({ start: match.index, end: match.index + match[0].length });\n }\n return result;\n }\n getValueInRange(range) {\n range = this._validateRange(range);\n if (range.startLineNumber === range.endLineNumber) {\n return this._lines[range.startLineNumber - 1].substring(range.startColumn - 1, range.endColumn - 1);\n }\n let lineEnding = this._eol;\n let startLineIndex = range.startLineNumber - 1;\n let endLineIndex = range.endLineNumber - 1;\n let resultLines = [];\n resultLines.push(this._lines[startLineIndex].substring(range.startColumn - 1));\n for (let i = startLineIndex + 1; i < endLineIndex; i++) {\n resultLines.push(this._lines[i]);\n }\n resultLines.push(this._lines[endLineIndex].substring(0, range.endColumn - 1));\n return resultLines.join(lineEnding);\n }\n offsetAt(position) {\n position = this._validatePosition(position);\n this._ensureLineStarts();\n return this._lineStarts.getPrefixSum(position.lineNumber - 2) + (position.column - 1);\n }\n positionAt(offset) {\n offset = Math.floor(offset);\n offset = Math.max(0, offset);\n this._ensureLineStarts();\n let out = this._lineStarts.getIndexOf(offset);\n let lineLength = this._lines[out.index].length;\n // Ensure we return a valid position\n return {\n lineNumber: 1 + out.index,\n column: 1 + Math.min(out.remainder, lineLength)\n };\n }\n _validateRange(range) {\n const start = this._validatePosition({ lineNumber: range.startLineNumber, column: range.startColumn });\n const end = this._validatePosition({ lineNumber: range.endLineNumber, column: range.endColumn });\n if (start.lineNumber !== range.startLineNumber\n || start.column !== range.startColumn\n || end.lineNumber !== range.endLineNumber\n || end.column !== range.endColumn) {\n return {\n startLineNumber: start.lineNumber,\n startColumn: start.column,\n endLineNumber: end.lineNumber,\n endColumn: end.column\n };\n }\n return range;\n }\n _validatePosition(position) {\n if (!Position.isIPosition(position)) {\n throw new Error('bad position');\n }\n let { lineNumber, column } = position;\n let hasChanged = false;\n if (lineNumber < 1) {\n lineNumber = 1;\n column = 1;\n hasChanged = true;\n }\n else if (lineNumber > this._lines.length) {\n lineNumber = this._lines.length;\n column = this._lines[lineNumber - 1].length + 1;\n hasChanged = true;\n }\n else {\n let maxCharacter = this._lines[lineNumber - 1].length + 1;\n if (column < 1) {\n column = 1;\n hasChanged = true;\n }\n else if (column > maxCharacter) {\n column = maxCharacter;\n hasChanged = true;\n }\n }\n if (!hasChanged) {\n return position;\n }\n else {\n return { lineNumber, column };\n }\n }\n}\n/**\n * @internal\n */\nexport class EditorSimpleWorker {\n constructor(host, foreignModuleFactory) {\n this._host = host;\n this._models = Object.create(null);\n this._foreignModuleFactory = foreignModuleFactory;\n this._foreignModule = null;\n }\n dispose() {\n this._models = Object.create(null);\n }\n _getModel(uri) {\n return this._models[uri];\n }\n _getModels() {\n let all = [];\n Object.keys(this._models).forEach((key) => all.push(this._models[key]));\n return all;\n }\n acceptNewModel(data) {\n this._models[data.url] = new MirrorModel(URI.parse(data.url), data.lines, data.EOL, data.versionId);\n }\n acceptModelChanged(strURL, e) {\n if (!this._models[strURL]) {\n return;\n }\n let model = this._models[strURL];\n model.onEvents(e);\n }\n acceptRemovedModel(strURL) {\n if (!this._models[strURL]) {\n return;\n }\n delete this._models[strURL];\n }\n // ---- BEGIN diff --------------------------------------------------------------------------\n computeDiff(originalUrl, modifiedUrl, ignoreTrimWhitespace, maxComputationTime) {\n return __awaiter(this, void 0, void 0, function* () {\n const original = this._getModel(originalUrl);\n const modified = this._getModel(modifiedUrl);\n if (!original || !modified) {\n return null;\n }\n const originalLines = original.getLinesContent();\n const modifiedLines = modified.getLinesContent();\n const diffComputer = new DiffComputer(originalLines, modifiedLines, {\n shouldComputeCharChanges: true,\n shouldPostProcessCharChanges: true,\n shouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\n shouldMakePrettyDiff: true,\n maxComputationTime: maxComputationTime\n });\n const diffResult = diffComputer.computeDiff();\n const identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(original, modified));\n return {\n quitEarly: diffResult.quitEarly,\n identical: identical,\n changes: diffResult.changes\n };\n });\n }\n _modelsAreIdentical(original, modified) {\n const originalLineCount = original.getLineCount();\n const modifiedLineCount = modified.getLineCount();\n if (originalLineCount !== modifiedLineCount) {\n return false;\n }\n for (let line = 1; line <= originalLineCount; line++) {\n const originalLine = original.getLineContent(line);\n const modifiedLine = modified.getLineContent(line);\n if (originalLine !== modifiedLine) {\n return false;\n }\n }\n return true;\n }\n computeMoreMinimalEdits(modelUrl, edits) {\n return __awaiter(this, void 0, void 0, function* () {\n const model = this._getModel(modelUrl);\n if (!model) {\n return edits;\n }\n const result = [];\n let lastEol = undefined;\n edits = edits.slice(0).sort((a, b) => {\n if (a.range && b.range) {\n return Range.compareRangesUsingStarts(a.range, b.range);\n }\n // eol only changes should go to the end\n let aRng = a.range ? 0 : 1;\n let bRng = b.range ? 0 : 1;\n return aRng - bRng;\n });\n for (let { range, text, eol } of edits) {\n if (typeof eol === 'number') {\n lastEol = eol;\n }\n if (Range.isEmpty(range) && !text) {\n // empty change\n continue;\n }\n const original = model.getValueInRange(range);\n text = text.replace(/\\r\\n|\\n|\\r/g, model.eol);\n if (original === text) {\n // noop\n continue;\n }\n // make sure diff won't take too long\n if (Math.max(text.length, original.length) > EditorSimpleWorker._diffLimit) {\n result.push({ range, text });\n continue;\n }\n // compute diff between original and edit.text\n const changes = stringDiff(original, text, false);\n const editOffset = model.offsetAt(Range.lift(range).getStartPosition());\n for (const change of changes) {\n const start = model.positionAt(editOffset + change.originalStart);\n const end = model.positionAt(editOffset + change.originalStart + change.originalLength);\n const newEdit = {\n text: text.substr(change.modifiedStart, change.modifiedLength),\n range: { startLineNumber: start.lineNumber, startColumn: start.column, endLineNumber: end.lineNumber, endColumn: end.column }\n };\n if (model.getValueInRange(newEdit.range) !== newEdit.text) {\n result.push(newEdit);\n }\n }\n }\n if (typeof lastEol === 'number') {\n result.push({ eol: lastEol, text: '', range: { startLineNumber: 0, startColumn: 0, endLineNumber: 0, endColumn: 0 } });\n }\n return result;\n });\n }\n // ---- END minimal edits ---------------------------------------------------------------\n computeLinks(modelUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return null;\n }\n return computeLinks(model);\n });\n }\n textualSuggest(modelUrls, leadingWord, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n const sw = new StopWatch(true);\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const seen = new Set();\n outer: for (let url of modelUrls) {\n const model = this._getModel(url);\n if (!model) {\n continue;\n }\n for (let word of model.words(wordDefRegExp)) {\n if (word === leadingWord || !isNaN(Number(word))) {\n continue;\n }\n seen.add(word);\n if (seen.size > EditorSimpleWorker._suggestionsLimit) {\n break outer;\n }\n }\n }\n return { words: Array.from(seen), duration: sw.elapsed() };\n });\n }\n // ---- END suggest --------------------------------------------------------------------------\n //#region -- word ranges --\n computeWordRanges(modelUrl, range, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return Object.create(null);\n }\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const result = Object.create(null);\n for (let line = range.startLineNumber; line < range.endLineNumber; line++) {\n let words = model.getLineWords(line, wordDefRegExp);\n for (const word of words) {\n if (!isNaN(Number(word.word))) {\n continue;\n }\n let array = result[word.word];\n if (!array) {\n array = [];\n result[word.word] = array;\n }\n array.push({\n startLineNumber: line,\n startColumn: word.startColumn,\n endLineNumber: line,\n endColumn: word.endColumn\n });\n }\n }\n return result;\n });\n }\n //#endregion\n navigateValueSet(modelUrl, range, up, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return null;\n }\n let wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n if (range.startColumn === range.endColumn) {\n range = {\n startLineNumber: range.startLineNumber,\n startColumn: range.startColumn,\n endLineNumber: range.endLineNumber,\n endColumn: range.endColumn + 1\n };\n }\n let selectionText = model.getValueInRange(range);\n let wordRange = model.getWordAtPosition({ lineNumber: range.startLineNumber, column: range.startColumn }, wordDefRegExp);\n if (!wordRange) {\n return null;\n }\n let word = model.getValueInRange(wordRange);\n let result = BasicInplaceReplace.INSTANCE.navigateValueSet(range, selectionText, wordRange, word, up);\n return result;\n });\n }\n // ---- BEGIN foreign module support --------------------------------------------------------------------------\n loadForeignModule(moduleId, createData, foreignHostMethods) {\n const proxyMethodRequest = (method, args) => {\n return this._host.fhr(method, args);\n };\n const foreignHost = types.createProxyObject(foreignHostMethods, proxyMethodRequest);\n let ctx = {\n host: foreignHost,\n getMirrorModels: () => {\n return this._getModels();\n }\n };\n if (this._foreignModuleFactory) {\n this._foreignModule = this._foreignModuleFactory(ctx, createData);\n // static foreing module\n return Promise.resolve(types.getAllMethodNames(this._foreignModule));\n }\n // ESM-comment-begin\n // \t\treturn new Promise((resolve, reject) => {\n // \t\t\trequire([moduleId], (foreignModule: { create: IForeignModuleFactory }) => {\n // \t\t\t\tthis._foreignModule = foreignModule.create(ctx, createData);\n // \n // \t\t\t\tresolve(types.getAllMethodNames(this._foreignModule));\n // \n // \t\t\t}, reject);\n // \t\t});\n // ESM-comment-end\n // ESM-uncomment-begin\n return Promise.reject(new Error(`Unexpected usage`));\n // ESM-uncomment-end\n }\n // foreign method request\n fmr(method, args) {\n if (!this._foreignModule || typeof this._foreignModule[method] !== 'function') {\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\n }\n try {\n return Promise.resolve(this._foreignModule[method].apply(this._foreignModule, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n}\n// ---- END diff --------------------------------------------------------------------------\n// ---- BEGIN minimal edits ---------------------------------------------------------------\nEditorSimpleWorker._diffLimit = 100000;\n// ---- BEGIN suggest --------------------------------------------------------------------------\nEditorSimpleWorker._suggestionsLimit = 10000;\n/**\n * Called on the worker side\n * @internal\n */\nexport function create(host) {\n return new EditorSimpleWorker(host, null);\n}\nif (typeof importScripts === 'function') {\n // Running in a web worker\n globals.monaco = createMonacoBaseAPI();\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { SimpleWorkerServer } from '../base/common/worker/simpleWorker.js';\nimport { EditorSimpleWorker } from './common/services/editorSimpleWorker.js';\nlet initialized = false;\nexport function initialize(foreignModule) {\n if (initialized) {\n return;\n }\n initialized = true;\n const simpleWorker = new SimpleWorkerServer((msg) => {\n self.postMessage(msg);\n }, (host) => new EditorSimpleWorker(host, foreignModule));\n self.onmessage = (e) => {\n simpleWorker.onmessage(e.data);\n };\n}\nself.onmessage = (e) => {\n // Ignore first message in this case and initialize if not yet initialized\n if (!initialized) {\n initialize(null);\n }\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction format(message, args) {\n var result;\n if (args.length === 0) {\n result = message;\n }\n else {\n result = message.replace(/\\{(\\d+)\\}/g, function (match, rest) {\n var index = rest[0];\n return typeof args[index] !== 'undefined' ? args[index] : match;\n });\n }\n return result;\n}\nfunction localize(key, message) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n return format(message, args);\n}\nexport function loadMessageBundle(file) {\n return localize;\n}\nexport function config(opt) {\n return loadMessageBundle;\n}\n","/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nexport var integer;\n(function (integer) {\n integer.MIN_VALUE = -2147483648;\n integer.MAX_VALUE = 2147483647;\n})(integer || (integer = {}));\nexport var uinteger;\n(function (uinteger) {\n uinteger.MIN_VALUE = 0;\n uinteger.MAX_VALUE = 2147483647;\n})(uinteger || (uinteger = {}));\n/**\n * The Position namespace provides helper functions to work with\n * [Position](#Position) literals.\n */\nexport var Position;\n(function (Position) {\n /**\n * Creates a new Position literal from the given line and character.\n * @param line The position's line.\n * @param character The position's character.\n */\n function create(line, character) {\n if (line === Number.MAX_VALUE) {\n line = uinteger.MAX_VALUE;\n }\n if (character === Number.MAX_VALUE) {\n character = uinteger.MAX_VALUE;\n }\n return { line: line, character: character };\n }\n Position.create = create;\n /**\n * Checks whether the given literal conforms to the [Position](#Position) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n }\n Position.is = is;\n})(Position || (Position = {}));\n/**\n * The Range namespace provides helper functions to work with\n * [Range](#Range) literals.\n */\nexport var Range;\n(function (Range) {\n function create(one, two, three, four) {\n if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n return { start: Position.create(one, two), end: Position.create(three, four) };\n }\n else if (Position.is(one) && Position.is(two)) {\n return { start: one, end: two };\n }\n else {\n throw new Error(\"Range#create called with invalid arguments[\" + one + \", \" + two + \", \" + three + \", \" + four + \"]\");\n }\n }\n Range.create = create;\n /**\n * Checks whether the given literal conforms to the [Range](#Range) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n }\n Range.is = is;\n})(Range || (Range = {}));\n/**\n * The Location namespace provides helper functions to work with\n * [Location](#Location) literals.\n */\nexport var Location;\n(function (Location) {\n /**\n * Creates a Location literal.\n * @param uri The location's uri.\n * @param range The location's range.\n */\n function create(uri, range) {\n return { uri: uri, range: range };\n }\n Location.create = create;\n /**\n * Checks whether the given literal conforms to the [Location](#Location) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n }\n Location.is = is;\n})(Location || (Location = {}));\n/**\n * The LocationLink namespace provides helper functions to work with\n * [LocationLink](#LocationLink) literals.\n */\nexport var LocationLink;\n(function (LocationLink) {\n /**\n * Creates a LocationLink literal.\n * @param targetUri The definition's uri.\n * @param targetRange The full range of the definition.\n * @param targetSelectionRange The span of the symbol definition at the target.\n * @param originSelectionRange The span of the symbol being defined in the originating source file.\n */\n function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };\n }\n LocationLink.create = create;\n /**\n * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\n && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))\n && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n }\n LocationLink.is = is;\n})(LocationLink || (LocationLink = {}));\n/**\n * The Color namespace provides helper functions to work with\n * [Color](#Color) literals.\n */\nexport var Color;\n(function (Color) {\n /**\n * Creates a new Color literal.\n */\n function create(red, green, blue, alpha) {\n return {\n red: red,\n green: green,\n blue: blue,\n alpha: alpha,\n };\n }\n Color.create = create;\n /**\n * Checks whether the given literal conforms to the [Color](#Color) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.numberRange(candidate.red, 0, 1)\n && Is.numberRange(candidate.green, 0, 1)\n && Is.numberRange(candidate.blue, 0, 1)\n && Is.numberRange(candidate.alpha, 0, 1);\n }\n Color.is = is;\n})(Color || (Color = {}));\n/**\n * The ColorInformation namespace provides helper functions to work with\n * [ColorInformation](#ColorInformation) literals.\n */\nexport var ColorInformation;\n(function (ColorInformation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(range, color) {\n return {\n range: range,\n color: color,\n };\n }\n ColorInformation.create = create;\n /**\n * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\n */\n function is(value) {\n var candidate = value;\n return Range.is(candidate.range) && Color.is(candidate.color);\n }\n ColorInformation.is = is;\n})(ColorInformation || (ColorInformation = {}));\n/**\n * The Color namespace provides helper functions to work with\n * [ColorPresentation](#ColorPresentation) literals.\n */\nexport var ColorPresentation;\n(function (ColorPresentation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(label, textEdit, additionalTextEdits) {\n return {\n label: label,\n textEdit: textEdit,\n additionalTextEdits: additionalTextEdits,\n };\n }\n ColorPresentation.create = create;\n /**\n * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.string(candidate.label)\n && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\n && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n }\n ColorPresentation.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\n/**\n * Enum of known range kinds\n */\nexport var FoldingRangeKind;\n(function (FoldingRangeKind) {\n /**\n * Folding range for a comment\n */\n FoldingRangeKind[\"Comment\"] = \"comment\";\n /**\n * Folding range for a imports or includes\n */\n FoldingRangeKind[\"Imports\"] = \"imports\";\n /**\n * Folding range for a region (e.g. `#region`)\n */\n FoldingRangeKind[\"Region\"] = \"region\";\n})(FoldingRangeKind || (FoldingRangeKind = {}));\n/**\n * The folding range namespace provides helper functions to work with\n * [FoldingRange](#FoldingRange) literals.\n */\nexport var FoldingRange;\n(function (FoldingRange) {\n /**\n * Creates a new FoldingRange literal.\n */\n function create(startLine, endLine, startCharacter, endCharacter, kind) {\n var result = {\n startLine: startLine,\n endLine: endLine\n };\n if (Is.defined(startCharacter)) {\n result.startCharacter = startCharacter;\n }\n if (Is.defined(endCharacter)) {\n result.endCharacter = endCharacter;\n }\n if (Is.defined(kind)) {\n result.kind = kind;\n }\n return result;\n }\n FoldingRange.create = create;\n /**\n * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)\n && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))\n && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))\n && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n }\n FoldingRange.is = is;\n})(FoldingRange || (FoldingRange = {}));\n/**\n * The DiagnosticRelatedInformation namespace provides helper functions to work with\n * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.\n */\nexport var DiagnosticRelatedInformation;\n(function (DiagnosticRelatedInformation) {\n /**\n * Creates a new DiagnosticRelatedInformation literal.\n */\n function create(location, message) {\n return {\n location: location,\n message: message\n };\n }\n DiagnosticRelatedInformation.create = create;\n /**\n * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n }\n DiagnosticRelatedInformation.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\n/**\n * The diagnostic's severity.\n */\nexport var DiagnosticSeverity;\n(function (DiagnosticSeverity) {\n /**\n * Reports an error.\n */\n DiagnosticSeverity.Error = 1;\n /**\n * Reports a warning.\n */\n DiagnosticSeverity.Warning = 2;\n /**\n * Reports an information.\n */\n DiagnosticSeverity.Information = 3;\n /**\n * Reports a hint.\n */\n DiagnosticSeverity.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\n/**\n * The diagnostic tags.\n *\n * @since 3.15.0\n */\nexport var DiagnosticTag;\n(function (DiagnosticTag) {\n /**\n * Unused or unnecessary code.\n *\n * Clients are allowed to render diagnostics with this tag faded out instead of having\n * an error squiggle.\n */\n DiagnosticTag.Unnecessary = 1;\n /**\n * Deprecated or obsolete code.\n *\n * Clients are allowed to rendered diagnostics with this tag strike through.\n */\n DiagnosticTag.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\n/**\n * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n *\n * @since 3.16.0\n */\nexport var CodeDescription;\n(function (CodeDescription) {\n function is(value) {\n var candidate = value;\n return candidate !== undefined && candidate !== null && Is.string(candidate.href);\n }\n CodeDescription.is = is;\n})(CodeDescription || (CodeDescription = {}));\n/**\n * The Diagnostic namespace provides helper functions to work with\n * [Diagnostic](#Diagnostic) literals.\n */\nexport var Diagnostic;\n(function (Diagnostic) {\n /**\n * Creates a new Diagnostic literal.\n */\n function create(range, message, severity, code, source, relatedInformation) {\n var result = { range: range, message: message };\n if (Is.defined(severity)) {\n result.severity = severity;\n }\n if (Is.defined(code)) {\n result.code = code;\n }\n if (Is.defined(source)) {\n result.source = source;\n }\n if (Is.defined(relatedInformation)) {\n result.relatedInformation = relatedInformation;\n }\n return result;\n }\n Diagnostic.create = create;\n /**\n * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.\n */\n function is(value) {\n var _a;\n var candidate = value;\n return Is.defined(candidate)\n && Range.is(candidate.range)\n && Is.string(candidate.message)\n && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\n && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\n && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))\n && (Is.string(candidate.source) || Is.undefined(candidate.source))\n && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n }\n Diagnostic.is = is;\n})(Diagnostic || (Diagnostic = {}));\n/**\n * The Command namespace provides helper functions to work with\n * [Command](#Command) literals.\n */\nexport var Command;\n(function (Command) {\n /**\n * Creates a new Command literal.\n */\n function create(title, command) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var result = { title: title, command: command };\n if (Is.defined(args) && args.length > 0) {\n result.arguments = args;\n }\n return result;\n }\n Command.create = create;\n /**\n * Checks whether the given literal conforms to the [Command](#Command) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n }\n Command.is = is;\n})(Command || (Command = {}));\n/**\n * The TextEdit namespace provides helper function to create replace,\n * insert and delete edits more easily.\n */\nexport var TextEdit;\n(function (TextEdit) {\n /**\n * Creates a replace text edit.\n * @param range The range of text to be replaced.\n * @param newText The new text.\n */\n function replace(range, newText) {\n return { range: range, newText: newText };\n }\n TextEdit.replace = replace;\n /**\n * Creates a insert text edit.\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n */\n function insert(position, newText) {\n return { range: { start: position, end: position }, newText: newText };\n }\n TextEdit.insert = insert;\n /**\n * Creates a delete text edit.\n * @param range The range of text to be deleted.\n */\n function del(range) {\n return { range: range, newText: '' };\n }\n TextEdit.del = del;\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate)\n && Is.string(candidate.newText)\n && Range.is(candidate.range);\n }\n TextEdit.is = is;\n})(TextEdit || (TextEdit = {}));\nexport var ChangeAnnotation;\n(function (ChangeAnnotation) {\n function create(label, needsConfirmation, description) {\n var result = { label: label };\n if (needsConfirmation !== undefined) {\n result.needsConfirmation = needsConfirmation;\n }\n if (description !== undefined) {\n result.description = description;\n }\n return result;\n }\n ChangeAnnotation.create = create;\n function is(value) {\n var candidate = value;\n return candidate !== undefined && Is.objectLiteral(candidate) && Is.string(candidate.label) &&\n (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n ChangeAnnotation.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nexport var ChangeAnnotationIdentifier;\n(function (ChangeAnnotationIdentifier) {\n function is(value) {\n var candidate = value;\n return typeof candidate === 'string';\n }\n ChangeAnnotationIdentifier.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nexport var AnnotatedTextEdit;\n(function (AnnotatedTextEdit) {\n /**\n * Creates an annotated replace text edit.\n *\n * @param range The range of text to be replaced.\n * @param newText The new text.\n * @param annotation The annotation.\n */\n function replace(range, newText, annotation) {\n return { range: range, newText: newText, annotationId: annotation };\n }\n AnnotatedTextEdit.replace = replace;\n /**\n * Creates an annotated insert text edit.\n *\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n * @param annotation The annotation.\n */\n function insert(position, newText, annotation) {\n return { range: { start: position, end: position }, newText: newText, annotationId: annotation };\n }\n AnnotatedTextEdit.insert = insert;\n /**\n * Creates an annotated delete text edit.\n *\n * @param range The range of text to be deleted.\n * @param annotation The annotation.\n */\n function del(range, annotation) {\n return { range: range, newText: '', annotationId: annotation };\n }\n AnnotatedTextEdit.del = del;\n function is(value) {\n var candidate = value;\n return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n AnnotatedTextEdit.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\n/**\n * The TextDocumentEdit namespace provides helper function to create\n * an edit that manipulates a text document.\n */\nexport var TextDocumentEdit;\n(function (TextDocumentEdit) {\n /**\n * Creates a new `TextDocumentEdit`\n */\n function create(textDocument, edits) {\n return { textDocument: textDocument, edits: edits };\n }\n TextDocumentEdit.create = create;\n function is(value) {\n var candidate = value;\n return Is.defined(candidate)\n && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)\n && Array.isArray(candidate.edits);\n }\n TextDocumentEdit.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nexport var CreateFile;\n(function (CreateFile) {\n function create(uri, options, annotation) {\n var result = {\n kind: 'create',\n uri: uri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n CreateFile.create = create;\n function is(value) {\n var candidate = value;\n return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n CreateFile.is = is;\n})(CreateFile || (CreateFile = {}));\nexport var RenameFile;\n(function (RenameFile) {\n function create(oldUri, newUri, options, annotation) {\n var result = {\n kind: 'rename',\n oldUri: oldUri,\n newUri: newUri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n RenameFile.create = create;\n function is(value) {\n var candidate = value;\n return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n RenameFile.is = is;\n})(RenameFile || (RenameFile = {}));\nexport var DeleteFile;\n(function (DeleteFile) {\n function create(uri, options, annotation) {\n var result = {\n kind: 'delete',\n uri: uri\n };\n if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n DeleteFile.create = create;\n function is(value) {\n var candidate = value;\n return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n DeleteFile.is = is;\n})(DeleteFile || (DeleteFile = {}));\nexport var WorkspaceEdit;\n(function (WorkspaceEdit) {\n function is(value) {\n var candidate = value;\n return candidate &&\n (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&\n (candidate.documentChanges === undefined || candidate.documentChanges.every(function (change) {\n if (Is.string(change.kind)) {\n return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n }\n else {\n return TextDocumentEdit.is(change);\n }\n }));\n }\n WorkspaceEdit.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nvar TextEditChangeImpl = /** @class */ (function () {\n function TextEditChangeImpl(edits, changeAnnotations) {\n this.edits = edits;\n this.changeAnnotations = changeAnnotations;\n }\n TextEditChangeImpl.prototype.insert = function (position, newText, annotation) {\n var edit;\n var id;\n if (annotation === undefined) {\n edit = TextEdit.insert(position, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.insert(position, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.insert(position, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n };\n TextEditChangeImpl.prototype.replace = function (range, newText, annotation) {\n var edit;\n var id;\n if (annotation === undefined) {\n edit = TextEdit.replace(range, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.replace(range, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.replace(range, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n };\n TextEditChangeImpl.prototype.delete = function (range, annotation) {\n var edit;\n var id;\n if (annotation === undefined) {\n edit = TextEdit.del(range);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.del(range, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.del(range, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n };\n TextEditChangeImpl.prototype.add = function (edit) {\n this.edits.push(edit);\n };\n TextEditChangeImpl.prototype.all = function () {\n return this.edits;\n };\n TextEditChangeImpl.prototype.clear = function () {\n this.edits.splice(0, this.edits.length);\n };\n TextEditChangeImpl.prototype.assertChangeAnnotations = function (value) {\n if (value === undefined) {\n throw new Error(\"Text edit change is not configured to manage change annotations.\");\n }\n };\n return TextEditChangeImpl;\n}());\n/**\n * A helper class\n */\nvar ChangeAnnotations = /** @class */ (function () {\n function ChangeAnnotations(annotations) {\n this._annotations = annotations === undefined ? Object.create(null) : annotations;\n this._counter = 0;\n this._size = 0;\n }\n ChangeAnnotations.prototype.all = function () {\n return this._annotations;\n };\n Object.defineProperty(ChangeAnnotations.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n ChangeAnnotations.prototype.manage = function (idOrAnnotation, annotation) {\n var id;\n if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {\n id = idOrAnnotation;\n }\n else {\n id = this.nextId();\n annotation = idOrAnnotation;\n }\n if (this._annotations[id] !== undefined) {\n throw new Error(\"Id \" + id + \" is already in use.\");\n }\n if (annotation === undefined) {\n throw new Error(\"No annotation provided for id \" + id);\n }\n this._annotations[id] = annotation;\n this._size++;\n return id;\n };\n ChangeAnnotations.prototype.nextId = function () {\n this._counter++;\n return this._counter.toString();\n };\n return ChangeAnnotations;\n}());\n/**\n * A workspace change helps constructing changes to a workspace.\n */\nvar WorkspaceChange = /** @class */ (function () {\n function WorkspaceChange(workspaceEdit) {\n var _this = this;\n this._textEditChanges = Object.create(null);\n if (workspaceEdit !== undefined) {\n this._workspaceEdit = workspaceEdit;\n if (workspaceEdit.documentChanges) {\n this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);\n workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n workspaceEdit.documentChanges.forEach(function (change) {\n if (TextDocumentEdit.is(change)) {\n var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);\n _this._textEditChanges[change.textDocument.uri] = textEditChange;\n }\n });\n }\n else if (workspaceEdit.changes) {\n Object.keys(workspaceEdit.changes).forEach(function (key) {\n var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\n _this._textEditChanges[key] = textEditChange;\n });\n }\n }\n else {\n this._workspaceEdit = {};\n }\n }\n Object.defineProperty(WorkspaceChange.prototype, \"edit\", {\n /**\n * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal\n * use to be returned from a workspace edit operation like rename.\n */\n get: function () {\n this.initDocumentChanges();\n if (this._changeAnnotations !== undefined) {\n if (this._changeAnnotations.size === 0) {\n this._workspaceEdit.changeAnnotations = undefined;\n }\n else {\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n return this._workspaceEdit;\n },\n enumerable: false,\n configurable: true\n });\n WorkspaceChange.prototype.getTextEditChange = function (key) {\n if (OptionalVersionedTextDocumentIdentifier.is(key)) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var textDocument = { uri: key.uri, version: key.version };\n var result = this._textEditChanges[textDocument.uri];\n if (!result) {\n var edits = [];\n var textDocumentEdit = {\n textDocument: textDocument,\n edits: edits\n };\n this._workspaceEdit.documentChanges.push(textDocumentEdit);\n result = new TextEditChangeImpl(edits, this._changeAnnotations);\n this._textEditChanges[textDocument.uri] = result;\n }\n return result;\n }\n else {\n this.initChanges();\n if (this._workspaceEdit.changes === undefined) {\n throw new Error('Workspace edit is not configured for normal text edit changes.');\n }\n var result = this._textEditChanges[key];\n if (!result) {\n var edits = [];\n this._workspaceEdit.changes[key] = edits;\n result = new TextEditChangeImpl(edits);\n this._textEditChanges[key] = result;\n }\n return result;\n }\n };\n WorkspaceChange.prototype.initDocumentChanges = function () {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._changeAnnotations = new ChangeAnnotations();\n this._workspaceEdit.documentChanges = [];\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n };\n WorkspaceChange.prototype.initChanges = function () {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._workspaceEdit.changes = Object.create(null);\n }\n };\n WorkspaceChange.prototype.createFile = function (uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n var operation;\n var id;\n if (annotation === undefined) {\n operation = CreateFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = CreateFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n };\n WorkspaceChange.prototype.renameFile = function (oldUri, newUri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n var operation;\n var id;\n if (annotation === undefined) {\n operation = RenameFile.create(oldUri, newUri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = RenameFile.create(oldUri, newUri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n };\n WorkspaceChange.prototype.deleteFile = function (uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n var operation;\n var id;\n if (annotation === undefined) {\n operation = DeleteFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = DeleteFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n };\n return WorkspaceChange;\n}());\nexport { WorkspaceChange };\n/**\n * The TextDocumentIdentifier namespace provides helper functions to work with\n * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.\n */\nexport var TextDocumentIdentifier;\n(function (TextDocumentIdentifier) {\n /**\n * Creates a new TextDocumentIdentifier literal.\n * @param uri The document's uri.\n */\n function create(uri) {\n return { uri: uri };\n }\n TextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri);\n }\n TextDocumentIdentifier.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\n/**\n * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.\n */\nexport var VersionedTextDocumentIdentifier;\n(function (VersionedTextDocumentIdentifier) {\n /**\n * Creates a new VersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param uri The document's text.\n */\n function create(uri, version) {\n return { uri: uri, version: version };\n }\n VersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n }\n VersionedTextDocumentIdentifier.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\n/**\n * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n * [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) literals.\n */\nexport var OptionalVersionedTextDocumentIdentifier;\n(function (OptionalVersionedTextDocumentIdentifier) {\n /**\n * Creates a new OptionalVersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param uri The document's text.\n */\n function create(uri, version) {\n return { uri: uri, version: version };\n }\n OptionalVersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n }\n OptionalVersionedTextDocumentIdentifier.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\n/**\n * The TextDocumentItem namespace provides helper functions to work with\n * [TextDocumentItem](#TextDocumentItem) literals.\n */\nexport var TextDocumentItem;\n(function (TextDocumentItem) {\n /**\n * Creates a new TextDocumentItem literal.\n * @param uri The document's uri.\n * @param languageId The document's language identifier.\n * @param version The document's version number.\n * @param text The document's text.\n */\n function create(uri, languageId, version, text) {\n return { uri: uri, languageId: languageId, version: version, text: text };\n }\n TextDocumentItem.create = create;\n /**\n * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n }\n TextDocumentItem.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\n/**\n * Describes the content type that a client supports in various\n * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\n *\n * Please note that `MarkupKinds` must not start with a `$`. This kinds\n * are reserved for internal usage.\n */\nexport var MarkupKind;\n(function (MarkupKind) {\n /**\n * Plain text is supported as a content format\n */\n MarkupKind.PlainText = 'plaintext';\n /**\n * Markdown is supported as a content format\n */\n MarkupKind.Markdown = 'markdown';\n})(MarkupKind || (MarkupKind = {}));\n(function (MarkupKind) {\n /**\n * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.\n */\n function is(value) {\n var candidate = value;\n return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n }\n MarkupKind.is = is;\n})(MarkupKind || (MarkupKind = {}));\nexport var MarkupContent;\n(function (MarkupContent) {\n /**\n * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n }\n MarkupContent.is = is;\n})(MarkupContent || (MarkupContent = {}));\n/**\n * The kind of a completion entry.\n */\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind.Text = 1;\n CompletionItemKind.Method = 2;\n CompletionItemKind.Function = 3;\n CompletionItemKind.Constructor = 4;\n CompletionItemKind.Field = 5;\n CompletionItemKind.Variable = 6;\n CompletionItemKind.Class = 7;\n CompletionItemKind.Interface = 8;\n CompletionItemKind.Module = 9;\n CompletionItemKind.Property = 10;\n CompletionItemKind.Unit = 11;\n CompletionItemKind.Value = 12;\n CompletionItemKind.Enum = 13;\n CompletionItemKind.Keyword = 14;\n CompletionItemKind.Snippet = 15;\n CompletionItemKind.Color = 16;\n CompletionItemKind.File = 17;\n CompletionItemKind.Reference = 18;\n CompletionItemKind.Folder = 19;\n CompletionItemKind.EnumMember = 20;\n CompletionItemKind.Constant = 21;\n CompletionItemKind.Struct = 22;\n CompletionItemKind.Event = 23;\n CompletionItemKind.Operator = 24;\n CompletionItemKind.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\n/**\n * Defines whether the insert text in a completion item should be interpreted as\n * plain text or a snippet.\n */\nexport var InsertTextFormat;\n(function (InsertTextFormat) {\n /**\n * The primary text to be inserted is treated as a plain string.\n */\n InsertTextFormat.PlainText = 1;\n /**\n * The primary text to be inserted is treated as a snippet.\n *\n * A snippet can define tab stops and placeholders with `$1`, `$2`\n * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n * the end of the snippet. Placeholders with equal identifiers are linked,\n * that is typing in one will update others too.\n *\n * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax\n */\n InsertTextFormat.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\n/**\n * Completion item tags are extra annotations that tweak the rendering of a completion\n * item.\n *\n * @since 3.15.0\n */\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n /**\n * Render a completion as obsolete, usually using a strike-out.\n */\n CompletionItemTag.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n *\n * @since 3.16.0\n */\nexport var InsertReplaceEdit;\n(function (InsertReplaceEdit) {\n /**\n * Creates a new insert / replace edit\n */\n function create(newText, insert, replace) {\n return { newText: newText, insert: insert, replace: replace };\n }\n InsertReplaceEdit.create = create;\n /**\n * Checks whether the given literal conforms to the [InsertReplaceEdit](#InsertReplaceEdit) interface.\n */\n function is(value) {\n var candidate = value;\n return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n }\n InsertReplaceEdit.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\n/**\n * How whitespace and indentation is handled during completion\n * item insertion.\n *\n * @since 3.16.0\n */\nexport var InsertTextMode;\n(function (InsertTextMode) {\n /**\n * The insertion or replace strings is taken as it is. If the\n * value is multi line the lines below the cursor will be\n * inserted using the indentation defined in the string value.\n * The client will not apply any kind of adjustments to the\n * string.\n */\n InsertTextMode.asIs = 1;\n /**\n * The editor adjusts leading whitespace of new lines so that\n * they match the indentation up to the cursor of the line for\n * which the item is accepted.\n *\n * Consider a line like this: <2tabs><3tabs>foo. Accepting a\n * multi line completion item is indented using 2 tabs and all\n * following lines inserted will be indented using 2 tabs as well.\n */\n InsertTextMode.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\n/**\n * The CompletionItem namespace provides functions to deal with\n * completion items.\n */\nexport var CompletionItem;\n(function (CompletionItem) {\n /**\n * Create a completion item and seed it with a label.\n * @param label The completion item's label\n */\n function create(label) {\n return { label: label };\n }\n CompletionItem.create = create;\n})(CompletionItem || (CompletionItem = {}));\n/**\n * The CompletionList namespace provides functions to deal with\n * completion lists.\n */\nexport var CompletionList;\n(function (CompletionList) {\n /**\n * Creates a new completion list.\n *\n * @param items The completion items.\n * @param isIncomplete The list is not complete.\n */\n function create(items, isIncomplete) {\n return { items: items ? items : [], isIncomplete: !!isIncomplete };\n }\n CompletionList.create = create;\n})(CompletionList || (CompletionList = {}));\nexport var MarkedString;\n(function (MarkedString) {\n /**\n * Creates a marked string from plain text.\n *\n * @param plainText The plain text.\n */\n function fromPlainText(plainText) {\n return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n }\n MarkedString.fromPlainText = fromPlainText;\n /**\n * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.\n */\n function is(value) {\n var candidate = value;\n return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\n }\n MarkedString.is = is;\n})(MarkedString || (MarkedString = {}));\nexport var Hover;\n(function (Hover) {\n /**\n * Checks whether the given value conforms to the [Hover](#Hover) interface.\n */\n function is(value) {\n var candidate = value;\n return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\n MarkedString.is(candidate.contents) ||\n Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));\n }\n Hover.is = is;\n})(Hover || (Hover = {}));\n/**\n * The ParameterInformation namespace provides helper functions to work with\n * [ParameterInformation](#ParameterInformation) literals.\n */\nexport var ParameterInformation;\n(function (ParameterInformation) {\n /**\n * Creates a new parameter information literal.\n *\n * @param label A label string.\n * @param documentation A doc string.\n */\n function create(label, documentation) {\n return documentation ? { label: label, documentation: documentation } : { label: label };\n }\n ParameterInformation.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\n/**\n * The SignatureInformation namespace provides helper functions to work with\n * [SignatureInformation](#SignatureInformation) literals.\n */\nexport var SignatureInformation;\n(function (SignatureInformation) {\n function create(label, documentation) {\n var parameters = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n parameters[_i - 2] = arguments[_i];\n }\n var result = { label: label };\n if (Is.defined(documentation)) {\n result.documentation = documentation;\n }\n if (Is.defined(parameters)) {\n result.parameters = parameters;\n }\n else {\n result.parameters = [];\n }\n return result;\n }\n SignatureInformation.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind.Text = 1;\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind.Read = 2;\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * DocumentHighlight namespace to provide helper functions to work with\n * [DocumentHighlight](#DocumentHighlight) literals.\n */\nexport var DocumentHighlight;\n(function (DocumentHighlight) {\n /**\n * Create a DocumentHighlight object.\n * @param range The range the highlight applies to.\n */\n function create(range, kind) {\n var result = { range: range };\n if (Is.number(kind)) {\n result.kind = kind;\n }\n return result;\n }\n DocumentHighlight.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind.File = 1;\n SymbolKind.Module = 2;\n SymbolKind.Namespace = 3;\n SymbolKind.Package = 4;\n SymbolKind.Class = 5;\n SymbolKind.Method = 6;\n SymbolKind.Property = 7;\n SymbolKind.Field = 8;\n SymbolKind.Constructor = 9;\n SymbolKind.Enum = 10;\n SymbolKind.Interface = 11;\n SymbolKind.Function = 12;\n SymbolKind.Variable = 13;\n SymbolKind.Constant = 14;\n SymbolKind.String = 15;\n SymbolKind.Number = 16;\n SymbolKind.Boolean = 17;\n SymbolKind.Array = 18;\n SymbolKind.Object = 19;\n SymbolKind.Key = 20;\n SymbolKind.Null = 21;\n SymbolKind.EnumMember = 22;\n SymbolKind.Struct = 23;\n SymbolKind.Event = 24;\n SymbolKind.Operator = 25;\n SymbolKind.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\n/**\n * Symbol tags are extra annotations that tweak the rendering of a symbol.\n * @since 3.16\n */\nexport var SymbolTag;\n(function (SymbolTag) {\n /**\n * Render a symbol as obsolete, usually using a strike-out.\n */\n SymbolTag.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nexport var SymbolInformation;\n(function (SymbolInformation) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the location of the symbol.\n * @param uri The resource of the location of symbol, defaults to the current document.\n * @param containerName The name of the symbol containing the symbol.\n */\n function create(name, kind, range, uri, containerName) {\n var result = {\n name: name,\n kind: kind,\n location: { uri: uri, range: range }\n };\n if (containerName) {\n result.containerName = containerName;\n }\n return result;\n }\n SymbolInformation.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nexport var DocumentSymbol;\n(function (DocumentSymbol) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param detail The detail of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the symbol.\n * @param selectionRange The selectionRange of the symbol.\n * @param children Children of the symbol.\n */\n function create(name, detail, kind, range, selectionRange, children) {\n var result = {\n name: name,\n detail: detail,\n kind: kind,\n range: range,\n selectionRange: selectionRange\n };\n if (children !== undefined) {\n result.children = children;\n }\n return result;\n }\n DocumentSymbol.create = create;\n /**\n * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.\n */\n function is(value) {\n var candidate = value;\n return candidate &&\n Is.string(candidate.name) && Is.number(candidate.kind) &&\n Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\n (candidate.detail === undefined || Is.string(candidate.detail)) &&\n (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&\n (candidate.children === undefined || Array.isArray(candidate.children)) &&\n (candidate.tags === undefined || Array.isArray(candidate.tags));\n }\n DocumentSymbol.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\n/**\n * A set of predefined code action kinds\n */\nexport var CodeActionKind;\n(function (CodeActionKind) {\n /**\n * Empty kind.\n */\n CodeActionKind.Empty = '';\n /**\n * Base kind for quickfix actions: 'quickfix'\n */\n CodeActionKind.QuickFix = 'quickfix';\n /**\n * Base kind for refactoring actions: 'refactor'\n */\n CodeActionKind.Refactor = 'refactor';\n /**\n * Base kind for refactoring extraction actions: 'refactor.extract'\n *\n * Example extract actions:\n *\n * - Extract method\n * - Extract function\n * - Extract variable\n * - Extract interface from class\n * - ...\n */\n CodeActionKind.RefactorExtract = 'refactor.extract';\n /**\n * Base kind for refactoring inline actions: 'refactor.inline'\n *\n * Example inline actions:\n *\n * - Inline function\n * - Inline variable\n * - Inline constant\n * - ...\n */\n CodeActionKind.RefactorInline = 'refactor.inline';\n /**\n * Base kind for refactoring rewrite actions: 'refactor.rewrite'\n *\n * Example rewrite actions:\n *\n * - Convert JavaScript function to class\n * - Add or remove parameter\n * - Encapsulate field\n * - Make method static\n * - Move method to base class\n * - ...\n */\n CodeActionKind.RefactorRewrite = 'refactor.rewrite';\n /**\n * Base kind for source actions: `source`\n *\n * Source code actions apply to the entire file.\n */\n CodeActionKind.Source = 'source';\n /**\n * Base kind for an organize imports source action: `source.organizeImports`\n */\n CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\n /**\n * Base kind for auto-fix source actions: `source.fixAll`.\n *\n * Fix all actions automatically fix errors that have a clear fix that do not require user input.\n * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\n *\n * @since 3.15.0\n */\n CodeActionKind.SourceFixAll = 'source.fixAll';\n})(CodeActionKind || (CodeActionKind = {}));\n/**\n * The CodeActionContext namespace provides helper functions to work with\n * [CodeActionContext](#CodeActionContext) literals.\n */\nexport var CodeActionContext;\n(function (CodeActionContext) {\n /**\n * Creates a new CodeActionContext literal.\n */\n function create(diagnostics, only) {\n var result = { diagnostics: diagnostics };\n if (only !== undefined && only !== null) {\n result.only = only;\n }\n return result;\n }\n CodeActionContext.create = create;\n /**\n * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string));\n }\n CodeActionContext.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nexport var CodeAction;\n(function (CodeAction) {\n function create(title, kindOrCommandOrEdit, kind) {\n var result = { title: title };\n var checkKind = true;\n if (typeof kindOrCommandOrEdit === 'string') {\n checkKind = false;\n result.kind = kindOrCommandOrEdit;\n }\n else if (Command.is(kindOrCommandOrEdit)) {\n result.command = kindOrCommandOrEdit;\n }\n else {\n result.edit = kindOrCommandOrEdit;\n }\n if (checkKind && kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n CodeAction.create = create;\n function is(value) {\n var candidate = value;\n return candidate && Is.string(candidate.title) &&\n (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\n (candidate.kind === undefined || Is.string(candidate.kind)) &&\n (candidate.edit !== undefined || candidate.command !== undefined) &&\n (candidate.command === undefined || Command.is(candidate.command)) &&\n (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&\n (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));\n }\n CodeAction.is = is;\n})(CodeAction || (CodeAction = {}));\n/**\n * The CodeLens namespace provides helper functions to work with\n * [CodeLens](#CodeLens) literals.\n */\nexport var CodeLens;\n(function (CodeLens) {\n /**\n * Creates a new CodeLens literal.\n */\n function create(range, data) {\n var result = { range: range };\n if (Is.defined(data)) {\n result.data = data;\n }\n return result;\n }\n CodeLens.create = create;\n /**\n * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n }\n CodeLens.is = is;\n})(CodeLens || (CodeLens = {}));\n/**\n * The FormattingOptions namespace provides helper functions to work with\n * [FormattingOptions](#FormattingOptions) literals.\n */\nexport var FormattingOptions;\n(function (FormattingOptions) {\n /**\n * Creates a new FormattingOptions literal.\n */\n function create(tabSize, insertSpaces) {\n return { tabSize: tabSize, insertSpaces: insertSpaces };\n }\n FormattingOptions.create = create;\n /**\n * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n }\n FormattingOptions.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\n/**\n * The DocumentLink namespace provides helper functions to work with\n * [DocumentLink](#DocumentLink) literals.\n */\nexport var DocumentLink;\n(function (DocumentLink) {\n /**\n * Creates a new DocumentLink literal.\n */\n function create(range, target, data) {\n return { range: range, target: target, data: data };\n }\n DocumentLink.create = create;\n /**\n * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n }\n DocumentLink.is = is;\n})(DocumentLink || (DocumentLink = {}));\n/**\n * The SelectionRange namespace provides helper function to work with\n * SelectionRange literals.\n */\nexport var SelectionRange;\n(function (SelectionRange) {\n /**\n * Creates a new SelectionRange\n * @param range the range.\n * @param parent an optional parent.\n */\n function create(range, parent) {\n return { range: range, parent: parent };\n }\n SelectionRange.create = create;\n function is(value) {\n var candidate = value;\n return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\n }\n SelectionRange.is = is;\n})(SelectionRange || (SelectionRange = {}));\nexport var EOL = ['\\n', '\\r\\n', '\\r'];\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new ITextDocument literal from the given uri and content.\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)\n && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n }\n TextDocument.is = is;\n function applyEdits(document, edits) {\n var text = document.getText();\n var sortedEdits = mergeSort(edits, function (a, b) {\n var diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n var lastModifiedOffset = text.length;\n for (var i = sortedEdits.length - 1; i >= 0; i--) {\n var e = sortedEdits[i];\n var startOffset = document.offsetAt(e.range.start);\n var endOffset = document.offsetAt(e.range.end);\n if (endOffset <= lastModifiedOffset) {\n text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n }\n else {\n throw new Error('Overlapping edit');\n }\n lastModifiedOffset = startOffset;\n }\n return text;\n }\n TextDocument.applyEdits = applyEdits;\n function mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n var p = (data.length / 2) | 0;\n var left = data.slice(0, p);\n var right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n var leftIdx = 0;\n var rightIdx = 0;\n var i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n var ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n }\n})(TextDocument || (TextDocument = {}));\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nvar FullTextDocument = /** @class */ (function () {\n function FullTextDocument(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n Object.defineProperty(FullTextDocument.prototype, \"uri\", {\n get: function () {\n return this._uri;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FullTextDocument.prototype, \"languageId\", {\n get: function () {\n return this._languageId;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FullTextDocument.prototype, \"version\", {\n get: function () {\n return this._version;\n },\n enumerable: false,\n configurable: true\n });\n FullTextDocument.prototype.getText = function (range) {\n if (range) {\n var start = this.offsetAt(range.start);\n var end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n };\n FullTextDocument.prototype.update = function (event, version) {\n this._content = event.text;\n this._version = version;\n this._lineOffsets = undefined;\n };\n FullTextDocument.prototype.getLineOffsets = function () {\n if (this._lineOffsets === undefined) {\n var lineOffsets = [];\n var text = this._content;\n var isLineStart = true;\n for (var i = 0; i < text.length; i++) {\n if (isLineStart) {\n lineOffsets.push(i);\n isLineStart = false;\n }\n var ch = text.charAt(i);\n isLineStart = (ch === '\\r' || ch === '\\n');\n if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n i++;\n }\n }\n if (isLineStart && text.length > 0) {\n lineOffsets.push(text.length);\n }\n this._lineOffsets = lineOffsets;\n }\n return this._lineOffsets;\n };\n FullTextDocument.prototype.positionAt = function (offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n var lineOffsets = this.getLineOffsets();\n var low = 0, high = lineOffsets.length;\n if (high === 0) {\n return Position.create(0, offset);\n }\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n var line = low - 1;\n return Position.create(line, offset - lineOffsets[line]);\n };\n FullTextDocument.prototype.offsetAt = function (position) {\n var lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n var lineOffset = lineOffsets[position.line];\n var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n };\n Object.defineProperty(FullTextDocument.prototype, \"lineCount\", {\n get: function () {\n return this.getLineOffsets().length;\n },\n enumerable: false,\n configurable: true\n });\n return FullTextDocument;\n}());\nvar Is;\n(function (Is) {\n var toString = Object.prototype.toString;\n function defined(value) {\n return typeof value !== 'undefined';\n }\n Is.defined = defined;\n function undefined(value) {\n return typeof value === 'undefined';\n }\n Is.undefined = undefined;\n function boolean(value) {\n return value === true || value === false;\n }\n Is.boolean = boolean;\n function string(value) {\n return toString.call(value) === '[object String]';\n }\n Is.string = string;\n function number(value) {\n return toString.call(value) === '[object Number]';\n }\n Is.number = number;\n function numberRange(value, min, max) {\n return toString.call(value) === '[object Number]' && min <= value && value <= max;\n }\n Is.numberRange = numberRange;\n function integer(value) {\n return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;\n }\n Is.integer = integer;\n function uinteger(value) {\n return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;\n }\n Is.uinteger = uinteger;\n function func(value) {\n return toString.call(value) === '[object Function]';\n }\n Is.func = func;\n function objectLiteral(value) {\n // Strictly speaking class instances pass this check as well. Since the LSP\n // doesn't use classes we ignore this for now. If we do we need to add something\n // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\n return value !== null && typeof value === 'object';\n }\n Is.objectLiteral = objectLiteral;\n function typedArray(value, check) {\n return Array.isArray(value) && value.every(check);\n }\n Is.typedArray = typedArray;\n})(Is || (Is = {}));\n","/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar FullTextDocument = /** @class */ (function () {\n function FullTextDocument(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n Object.defineProperty(FullTextDocument.prototype, \"uri\", {\n get: function () {\n return this._uri;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FullTextDocument.prototype, \"languageId\", {\n get: function () {\n return this._languageId;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FullTextDocument.prototype, \"version\", {\n get: function () {\n return this._version;\n },\n enumerable: false,\n configurable: true\n });\n FullTextDocument.prototype.getText = function (range) {\n if (range) {\n var start = this.offsetAt(range.start);\n var end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n };\n FullTextDocument.prototype.update = function (changes, version) {\n for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {\n var change = changes_1[_i];\n if (FullTextDocument.isIncremental(change)) {\n // makes sure start is before end\n var range = getWellformedRange(change.range);\n // update content\n var startOffset = this.offsetAt(range.start);\n var endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n // update the offsets\n var startLine = Math.max(range.start.line, 0);\n var endLine = Math.max(range.end.line, 0);\n var lineOffsets = this._lineOffsets;\n var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) {\n for (var i = 0, len = addedLineOffsets.length; i < len; i++) {\n lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n }\n }\n else {\n if (addedLineOffsets.length < 10000) {\n lineOffsets.splice.apply(lineOffsets, __spreadArray([startLine + 1, endLine - startLine], addedLineOffsets, false));\n }\n else { // avoid too many arguments for splice\n this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n }\n }\n var diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) {\n for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n lineOffsets[i] = lineOffsets[i] + diff;\n }\n }\n }\n else if (FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = undefined;\n }\n else {\n throw new Error('Unknown change event received');\n }\n }\n this._version = version;\n };\n FullTextDocument.prototype.getLineOffsets = function () {\n if (this._lineOffsets === undefined) {\n this._lineOffsets = computeLineOffsets(this._content, true);\n }\n return this._lineOffsets;\n };\n FullTextDocument.prototype.positionAt = function (offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n var lineOffsets = this.getLineOffsets();\n var low = 0, high = lineOffsets.length;\n if (high === 0) {\n return { line: 0, character: offset };\n }\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n var line = low - 1;\n return { line: line, character: offset - lineOffsets[line] };\n };\n FullTextDocument.prototype.offsetAt = function (position) {\n var lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n var lineOffset = lineOffsets[position.line];\n var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n };\n Object.defineProperty(FullTextDocument.prototype, \"lineCount\", {\n get: function () {\n return this.getLineOffsets().length;\n },\n enumerable: false,\n configurable: true\n });\n FullTextDocument.isIncremental = function (event) {\n var candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range !== undefined &&\n (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n };\n FullTextDocument.isFull = function (event) {\n var candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n };\n return FullTextDocument;\n}());\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new text document.\n *\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's initial version number.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Updates a TextDocument by modifying its content.\n *\n * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n * @param changes the changes to apply to the document.\n * @param version the changes version for the document.\n * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n *\n */\n function update(document, changes, version) {\n if (document instanceof FullTextDocument) {\n document.update(changes, version);\n return document;\n }\n else {\n throw new Error('TextDocument.update: document must be created by TextDocument.create');\n }\n }\n TextDocument.update = update;\n function applyEdits(document, edits) {\n var text = document.getText();\n var sortedEdits = mergeSort(edits.map(getWellformedEdit), function (a, b) {\n var diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n var lastModifiedOffset = 0;\n var spans = [];\n for (var _i = 0, sortedEdits_1 = sortedEdits; _i < sortedEdits_1.length; _i++) {\n var e = sortedEdits_1[_i];\n var startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) {\n throw new Error('Overlapping edit');\n }\n else if (startOffset > lastModifiedOffset) {\n spans.push(text.substring(lastModifiedOffset, startOffset));\n }\n if (e.newText.length) {\n spans.push(e.newText);\n }\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join('');\n }\n TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n var p = (data.length / 2) | 0;\n var left = data.slice(0, p);\n var right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n var leftIdx = 0;\n var rightIdx = 0;\n var i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n var ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset) {\n if (textOffset === void 0) { textOffset = 0; }\n var result = isAtLineStart ? [textOffset] : [];\n for (var i = 0; i < text.length; i++) {\n var ch = text.charCodeAt(i);\n if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) {\n if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) {\n i++;\n }\n result.push(textOffset + i + 1);\n }\n }\n return result;\n}\nfunction getWellformedRange(range) {\n var start = range.start;\n var end = range.end;\n if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n return { start: end, end: start };\n }\n return range;\n}\nfunction getWellformedEdit(textEdit) {\n var range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) {\n return { newText: textEdit.newText, range: range };\n }\n return textEdit;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Position, Range, Location, MarkupContent, MarkupKind, MarkedString, SelectionRange, WorkspaceEdit, CompletionList, CompletionItemKind, CompletionItem, CompletionItemTag, InsertTextMode, Command, SymbolInformation, SymbolKind, Hover, TextEdit, InsertReplaceEdit, InsertTextFormat, DocumentHighlight, DocumentHighlightKind, DocumentLink, FoldingRange, FoldingRangeKind, Diagnostic, FormattingOptions, Color, ColorInformation, ColorPresentation } from '../vscode-languageserver-types/main.js';\nimport { TextDocument } from '../vscode-languageserver-textdocument/lib/esm/main.js';\nexport { TextDocument, Position, Range, Location, MarkupContent, MarkupKind, MarkedString, SelectionRange, WorkspaceEdit, CompletionList, CompletionItemKind, CompletionItem, CompletionItemTag, InsertTextMode, Command, SymbolInformation, SymbolKind, Hover, TextEdit, InsertReplaceEdit, InsertTextFormat, DocumentHighlight, DocumentHighlightKind, DocumentLink, FoldingRange, FoldingRangeKind, Diagnostic, FormattingOptions, Color, ColorInformation, ColorPresentation };\nexport var TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"StartCommentTag\"] = 0] = \"StartCommentTag\";\n TokenType[TokenType[\"Comment\"] = 1] = \"Comment\";\n TokenType[TokenType[\"EndCommentTag\"] = 2] = \"EndCommentTag\";\n TokenType[TokenType[\"StartTagOpen\"] = 3] = \"StartTagOpen\";\n TokenType[TokenType[\"StartTagClose\"] = 4] = \"StartTagClose\";\n TokenType[TokenType[\"StartTagSelfClose\"] = 5] = \"StartTagSelfClose\";\n TokenType[TokenType[\"StartTag\"] = 6] = \"StartTag\";\n TokenType[TokenType[\"EndTagOpen\"] = 7] = \"EndTagOpen\";\n TokenType[TokenType[\"EndTagClose\"] = 8] = \"EndTagClose\";\n TokenType[TokenType[\"EndTag\"] = 9] = \"EndTag\";\n TokenType[TokenType[\"DelimiterAssign\"] = 10] = \"DelimiterAssign\";\n TokenType[TokenType[\"AttributeName\"] = 11] = \"AttributeName\";\n TokenType[TokenType[\"AttributeValue\"] = 12] = \"AttributeValue\";\n TokenType[TokenType[\"StartDoctypeTag\"] = 13] = \"StartDoctypeTag\";\n TokenType[TokenType[\"Doctype\"] = 14] = \"Doctype\";\n TokenType[TokenType[\"EndDoctypeTag\"] = 15] = \"EndDoctypeTag\";\n TokenType[TokenType[\"Content\"] = 16] = \"Content\";\n TokenType[TokenType[\"Whitespace\"] = 17] = \"Whitespace\";\n TokenType[TokenType[\"Unknown\"] = 18] = \"Unknown\";\n TokenType[TokenType[\"Script\"] = 19] = \"Script\";\n TokenType[TokenType[\"Styles\"] = 20] = \"Styles\";\n TokenType[TokenType[\"EOS\"] = 21] = \"EOS\";\n})(TokenType || (TokenType = {}));\nexport var ScannerState;\n(function (ScannerState) {\n ScannerState[ScannerState[\"WithinContent\"] = 0] = \"WithinContent\";\n ScannerState[ScannerState[\"AfterOpeningStartTag\"] = 1] = \"AfterOpeningStartTag\";\n ScannerState[ScannerState[\"AfterOpeningEndTag\"] = 2] = \"AfterOpeningEndTag\";\n ScannerState[ScannerState[\"WithinDoctype\"] = 3] = \"WithinDoctype\";\n ScannerState[ScannerState[\"WithinTag\"] = 4] = \"WithinTag\";\n ScannerState[ScannerState[\"WithinEndTag\"] = 5] = \"WithinEndTag\";\n ScannerState[ScannerState[\"WithinComment\"] = 6] = \"WithinComment\";\n ScannerState[ScannerState[\"WithinScriptContent\"] = 7] = \"WithinScriptContent\";\n ScannerState[ScannerState[\"WithinStyleContent\"] = 8] = \"WithinStyleContent\";\n ScannerState[ScannerState[\"AfterAttributeName\"] = 9] = \"AfterAttributeName\";\n ScannerState[ScannerState[\"BeforeAttributeValue\"] = 10] = \"BeforeAttributeValue\";\n})(ScannerState || (ScannerState = {}));\nexport var ClientCapabilities;\n(function (ClientCapabilities) {\n ClientCapabilities.LATEST = {\n textDocument: {\n completion: {\n completionItem: {\n documentationFormat: [MarkupKind.Markdown, MarkupKind.PlainText]\n }\n },\n hover: {\n contentFormat: [MarkupKind.Markdown, MarkupKind.PlainText]\n }\n }\n };\n})(ClientCapabilities || (ClientCapabilities = {}));\nexport var FileType;\n(function (FileType) {\n /**\n * The file type is unknown.\n */\n FileType[FileType[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * A regular file.\n */\n FileType[FileType[\"File\"] = 1] = \"File\";\n /**\n * A directory.\n */\n FileType[FileType[\"Directory\"] = 2] = \"Directory\";\n /**\n * A symbolic link to a file.\n */\n FileType[FileType[\"SymbolicLink\"] = 64] = \"SymbolicLink\";\n})(FileType || (FileType = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../fillers/vscode-nls.js';\nimport { TokenType, ScannerState } from '../htmlLanguageTypes.js';\nvar localize = nls.loadMessageBundle();\nvar MultiLineStream = /** @class */ (function () {\n function MultiLineStream(source, position) {\n this.source = source;\n this.len = source.length;\n this.position = position;\n }\n MultiLineStream.prototype.eos = function () {\n return this.len <= this.position;\n };\n MultiLineStream.prototype.getSource = function () {\n return this.source;\n };\n MultiLineStream.prototype.pos = function () {\n return this.position;\n };\n MultiLineStream.prototype.goBackTo = function (pos) {\n this.position = pos;\n };\n MultiLineStream.prototype.goBack = function (n) {\n this.position -= n;\n };\n MultiLineStream.prototype.advance = function (n) {\n this.position += n;\n };\n MultiLineStream.prototype.goToEnd = function () {\n this.position = this.source.length;\n };\n MultiLineStream.prototype.nextChar = function () {\n return this.source.charCodeAt(this.position++) || 0;\n };\n MultiLineStream.prototype.peekChar = function (n) {\n if (n === void 0) { n = 0; }\n return this.source.charCodeAt(this.position + n) || 0;\n };\n MultiLineStream.prototype.advanceIfChar = function (ch) {\n if (ch === this.source.charCodeAt(this.position)) {\n this.position++;\n return true;\n }\n return false;\n };\n MultiLineStream.prototype.advanceIfChars = function (ch) {\n var i;\n if (this.position + ch.length > this.source.length) {\n return false;\n }\n for (i = 0; i < ch.length; i++) {\n if (this.source.charCodeAt(this.position + i) !== ch[i]) {\n return false;\n }\n }\n this.advance(i);\n return true;\n };\n MultiLineStream.prototype.advanceIfRegExp = function (regex) {\n var str = this.source.substr(this.position);\n var match = str.match(regex);\n if (match) {\n this.position = this.position + match.index + match[0].length;\n return match[0];\n }\n return '';\n };\n MultiLineStream.prototype.advanceUntilRegExp = function (regex) {\n var str = this.source.substr(this.position);\n var match = str.match(regex);\n if (match) {\n this.position = this.position + match.index;\n return match[0];\n }\n else {\n this.goToEnd();\n }\n return '';\n };\n MultiLineStream.prototype.advanceUntilChar = function (ch) {\n while (this.position < this.source.length) {\n if (this.source.charCodeAt(this.position) === ch) {\n return true;\n }\n this.advance(1);\n }\n return false;\n };\n MultiLineStream.prototype.advanceUntilChars = function (ch) {\n while (this.position + ch.length <= this.source.length) {\n var i = 0;\n for (; i < ch.length && this.source.charCodeAt(this.position + i) === ch[i]; i++) {\n }\n if (i === ch.length) {\n return true;\n }\n this.advance(1);\n }\n this.goToEnd();\n return false;\n };\n MultiLineStream.prototype.skipWhitespace = function () {\n var n = this.advanceWhileChar(function (ch) {\n return ch === _WSP || ch === _TAB || ch === _NWL || ch === _LFD || ch === _CAR;\n });\n return n > 0;\n };\n MultiLineStream.prototype.advanceWhileChar = function (condition) {\n var posNow = this.position;\n while (this.position < this.len && condition(this.source.charCodeAt(this.position))) {\n this.position++;\n }\n return this.position - posNow;\n };\n return MultiLineStream;\n}());\nvar _BNG = '!'.charCodeAt(0);\nvar _MIN = '-'.charCodeAt(0);\nvar _LAN = '<'.charCodeAt(0);\nvar _RAN = '>'.charCodeAt(0);\nvar _FSL = '/'.charCodeAt(0);\nvar _EQS = '='.charCodeAt(0);\nvar _DQO = '\"'.charCodeAt(0);\nvar _SQO = '\\''.charCodeAt(0);\nvar _NWL = '\\n'.charCodeAt(0);\nvar _CAR = '\\r'.charCodeAt(0);\nvar _LFD = '\\f'.charCodeAt(0);\nvar _WSP = ' '.charCodeAt(0);\nvar _TAB = '\\t'.charCodeAt(0);\nvar htmlScriptContents = {\n 'text/x-handlebars-template': true,\n // Fix for https://github.com/microsoft/vscode/issues/77977\n 'text/html': true,\n};\nexport function createScanner(input, initialOffset, initialState, emitPseudoCloseTags) {\n if (initialOffset === void 0) { initialOffset = 0; }\n if (initialState === void 0) { initialState = ScannerState.WithinContent; }\n if (emitPseudoCloseTags === void 0) { emitPseudoCloseTags = false; }\n var stream = new MultiLineStream(input, initialOffset);\n var state = initialState;\n var tokenOffset = 0;\n var tokenType = TokenType.Unknown;\n var tokenError;\n var hasSpaceAfterTag;\n var lastTag;\n var lastAttributeName;\n var lastTypeValue;\n function nextElementName() {\n return stream.advanceIfRegExp(/^[_:\\w][_:\\w-.\\d]*/).toLowerCase();\n }\n function nextAttributeName() {\n return stream.advanceIfRegExp(/^[^\\s\"'>\n state = ScannerState.WithinContent;\n return finishToken(offset, TokenType.EndCommentTag);\n }\n stream.advanceUntilChars([_MIN, _MIN, _RAN]); // -->\n return finishToken(offset, TokenType.Comment);\n case ScannerState.WithinDoctype:\n if (stream.advanceIfChar(_RAN)) {\n state = ScannerState.WithinContent;\n return finishToken(offset, TokenType.EndDoctypeTag);\n }\n stream.advanceUntilChar(_RAN); // >\n return finishToken(offset, TokenType.Doctype);\n case ScannerState.WithinContent:\n if (stream.advanceIfChar(_LAN)) { // <\n if (!stream.eos() && stream.peekChar() === _BNG) { // !\n if (stream.advanceIfChars([_BNG, _MIN, _MIN])) { // |<\\/?script\\s*\\/?>?/i);\n if (match.length === 0) {\n stream.goToEnd();\n return finishToken(offset, TokenType.Script);\n }\n else if (match === '') {\n sciptState = 1;\n }\n else if (match[1] !== '/') { // 0) {\n high = mid - 1;\n }\n else {\n return mid;\n }\n }\n return -(low + 1);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../utils/arrays.js';\n// As defined in https://www.w3.org/TR/html5/syntax.html#void-elements\nexport var VOID_ELEMENTS = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'];\nexport function isVoidElement(e) {\n return !!e && arrays.binarySearch(VOID_ELEMENTS, e.toLowerCase(), function (s1, s2) { return s1.localeCompare(s2); }) >= 0;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createScanner } from './htmlScanner.js';\nimport { findFirst } from '../utils/arrays.js';\nimport { TokenType } from '../htmlLanguageTypes.js';\nimport { isVoidElement } from '../languageFacts/fact.js';\nvar Node = /** @class */ (function () {\n function Node(start, end, children, parent) {\n this.start = start;\n this.end = end;\n this.children = children;\n this.parent = parent;\n this.closed = false;\n }\n Object.defineProperty(Node.prototype, \"attributeNames\", {\n get: function () { return this.attributes ? Object.keys(this.attributes) : []; },\n enumerable: false,\n configurable: true\n });\n Node.prototype.isSameTag = function (tagInLowerCase) {\n if (this.tag === undefined) {\n return tagInLowerCase === undefined;\n }\n else {\n return tagInLowerCase !== undefined && this.tag.length === tagInLowerCase.length && this.tag.toLowerCase() === tagInLowerCase;\n }\n };\n Object.defineProperty(Node.prototype, \"firstChild\", {\n get: function () { return this.children[0]; },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"lastChild\", {\n get: function () { return this.children.length ? this.children[this.children.length - 1] : void 0; },\n enumerable: false,\n configurable: true\n });\n Node.prototype.findNodeBefore = function (offset) {\n var idx = findFirst(this.children, function (c) { return offset <= c.start; }) - 1;\n if (idx >= 0) {\n var child = this.children[idx];\n if (offset > child.start) {\n if (offset < child.end) {\n return child.findNodeBefore(offset);\n }\n var lastChild = child.lastChild;\n if (lastChild && lastChild.end === child.end) {\n return child.findNodeBefore(offset);\n }\n return child;\n }\n }\n return this;\n };\n Node.prototype.findNodeAt = function (offset) {\n var idx = findFirst(this.children, function (c) { return offset <= c.start; }) - 1;\n if (idx >= 0) {\n var child = this.children[idx];\n if (offset > child.start && offset <= child.end) {\n return child.findNodeAt(offset);\n }\n }\n return this;\n };\n return Node;\n}());\nexport { Node };\nexport function parse(text) {\n var scanner = createScanner(text, undefined, undefined, true);\n var htmlDocument = new Node(0, text.length, [], void 0);\n var curr = htmlDocument;\n var endTagStart = -1;\n var endTagName = undefined;\n var pendingAttribute = null;\n var token = scanner.scan();\n while (token !== TokenType.EOS) {\n switch (token) {\n case TokenType.StartTagOpen:\n var child = new Node(scanner.getTokenOffset(), text.length, [], curr);\n curr.children.push(child);\n curr = child;\n break;\n case TokenType.StartTag:\n curr.tag = scanner.getTokenText();\n break;\n case TokenType.StartTagClose:\n if (curr.parent) {\n curr.end = scanner.getTokenEnd(); // might be later set to end tag position\n if (scanner.getTokenLength()) {\n curr.startTagEnd = scanner.getTokenEnd();\n if (curr.tag && isVoidElement(curr.tag)) {\n curr.closed = true;\n curr = curr.parent;\n }\n }\n else {\n // pseudo close token from an incomplete start tag\n curr = curr.parent;\n }\n }\n break;\n case TokenType.StartTagSelfClose:\n if (curr.parent) {\n curr.closed = true;\n curr.end = scanner.getTokenEnd();\n curr.startTagEnd = scanner.getTokenEnd();\n curr = curr.parent;\n }\n break;\n case TokenType.EndTagOpen:\n endTagStart = scanner.getTokenOffset();\n endTagName = undefined;\n break;\n case TokenType.EndTag:\n endTagName = scanner.getTokenText().toLowerCase();\n break;\n case TokenType.EndTagClose:\n var node = curr;\n // see if we can find a matching tag\n while (!node.isSameTag(endTagName) && node.parent) {\n node = node.parent;\n }\n if (node.parent) {\n while (curr !== node) {\n curr.end = endTagStart;\n curr.closed = false;\n curr = curr.parent;\n }\n curr.closed = true;\n curr.endTagStart = endTagStart;\n curr.end = scanner.getTokenEnd();\n curr = curr.parent;\n }\n break;\n case TokenType.AttributeName: {\n pendingAttribute = scanner.getTokenText();\n var attributes = curr.attributes;\n if (!attributes) {\n curr.attributes = attributes = {};\n }\n attributes[pendingAttribute] = null; // Support valueless attributes such as 'checked'\n break;\n }\n case TokenType.AttributeValue: {\n var value = scanner.getTokenText();\n var attributes = curr.attributes;\n if (attributes && pendingAttribute) {\n attributes[pendingAttribute] = value;\n pendingAttribute = null;\n }\n break;\n }\n }\n token = scanner.scan();\n }\n while (curr.parent) {\n curr.end = text.length;\n curr.closed = false;\n curr = curr.parent;\n }\n return {\n roots: htmlDocument.children,\n findNodeBefore: htmlDocument.findNodeBefore.bind(htmlDocument),\n findNodeAt: htmlDocument.findNodeAt.bind(htmlDocument)\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * HTML 5 character entities\n * https://www.w3.org/TR/html5/syntax.html#named-character-references\n */\nexport var entities = {\n \"Aacute;\": \"\\u00C1\",\n \"Aacute\": \"\\u00C1\",\n \"aacute;\": \"\\u00E1\",\n \"aacute\": \"\\u00E1\",\n \"Abreve;\": \"\\u0102\",\n \"abreve;\": \"\\u0103\",\n \"ac;\": \"\\u223E\",\n \"acd;\": \"\\u223F\",\n \"acE;\": \"\\u223E\\u0333\",\n \"Acirc;\": \"\\u00C2\",\n \"Acirc\": \"\\u00C2\",\n \"acirc;\": \"\\u00E2\",\n \"acirc\": \"\\u00E2\",\n \"acute;\": \"\\u00B4\",\n \"acute\": \"\\u00B4\",\n \"Acy;\": \"\\u0410\",\n \"acy;\": \"\\u0430\",\n \"AElig;\": \"\\u00C6\",\n \"AElig\": \"\\u00C6\",\n \"aelig;\": \"\\u00E6\",\n \"aelig\": \"\\u00E6\",\n \"af;\": \"\\u2061\",\n \"Afr;\": \"\\uD835\\uDD04\",\n \"afr;\": \"\\uD835\\uDD1E\",\n \"Agrave;\": \"\\u00C0\",\n \"Agrave\": \"\\u00C0\",\n \"agrave;\": \"\\u00E0\",\n \"agrave\": \"\\u00E0\",\n \"alefsym;\": \"\\u2135\",\n \"aleph;\": \"\\u2135\",\n \"Alpha;\": \"\\u0391\",\n \"alpha;\": \"\\u03B1\",\n \"Amacr;\": \"\\u0100\",\n \"amacr;\": \"\\u0101\",\n \"amalg;\": \"\\u2A3F\",\n \"AMP;\": \"\\u0026\",\n \"AMP\": \"\\u0026\",\n \"amp;\": \"\\u0026\",\n \"amp\": \"\\u0026\",\n \"And;\": \"\\u2A53\",\n \"and;\": \"\\u2227\",\n \"andand;\": \"\\u2A55\",\n \"andd;\": \"\\u2A5C\",\n \"andslope;\": \"\\u2A58\",\n \"andv;\": \"\\u2A5A\",\n \"ang;\": \"\\u2220\",\n \"ange;\": \"\\u29A4\",\n \"angle;\": \"\\u2220\",\n \"angmsd;\": \"\\u2221\",\n \"angmsdaa;\": \"\\u29A8\",\n \"angmsdab;\": \"\\u29A9\",\n \"angmsdac;\": \"\\u29AA\",\n \"angmsdad;\": \"\\u29AB\",\n \"angmsdae;\": \"\\u29AC\",\n \"angmsdaf;\": \"\\u29AD\",\n \"angmsdag;\": \"\\u29AE\",\n \"angmsdah;\": \"\\u29AF\",\n \"angrt;\": \"\\u221F\",\n \"angrtvb;\": \"\\u22BE\",\n \"angrtvbd;\": \"\\u299D\",\n \"angsph;\": \"\\u2222\",\n \"angst;\": \"\\u00C5\",\n \"angzarr;\": \"\\u237C\",\n \"Aogon;\": \"\\u0104\",\n \"aogon;\": \"\\u0105\",\n \"Aopf;\": \"\\uD835\\uDD38\",\n \"aopf;\": \"\\uD835\\uDD52\",\n \"ap;\": \"\\u2248\",\n \"apacir;\": \"\\u2A6F\",\n \"apE;\": \"\\u2A70\",\n \"ape;\": \"\\u224A\",\n \"apid;\": \"\\u224B\",\n \"apos;\": \"\\u0027\",\n \"ApplyFunction;\": \"\\u2061\",\n \"approx;\": \"\\u2248\",\n \"approxeq;\": \"\\u224A\",\n \"Aring;\": \"\\u00C5\",\n \"Aring\": \"\\u00C5\",\n \"aring;\": \"\\u00E5\",\n \"aring\": \"\\u00E5\",\n \"Ascr;\": \"\\uD835\\uDC9C\",\n \"ascr;\": \"\\uD835\\uDCB6\",\n \"Assign;\": \"\\u2254\",\n \"ast;\": \"\\u002A\",\n \"asymp;\": \"\\u2248\",\n \"asympeq;\": \"\\u224D\",\n \"Atilde;\": \"\\u00C3\",\n \"Atilde\": \"\\u00C3\",\n \"atilde;\": \"\\u00E3\",\n \"atilde\": \"\\u00E3\",\n \"Auml;\": \"\\u00C4\",\n \"Auml\": \"\\u00C4\",\n \"auml;\": \"\\u00E4\",\n \"auml\": \"\\u00E4\",\n \"awconint;\": \"\\u2233\",\n \"awint;\": \"\\u2A11\",\n \"backcong;\": \"\\u224C\",\n \"backepsilon;\": \"\\u03F6\",\n \"backprime;\": \"\\u2035\",\n \"backsim;\": \"\\u223D\",\n \"backsimeq;\": \"\\u22CD\",\n \"Backslash;\": \"\\u2216\",\n \"Barv;\": \"\\u2AE7\",\n \"barvee;\": \"\\u22BD\",\n \"Barwed;\": \"\\u2306\",\n \"barwed;\": \"\\u2305\",\n \"barwedge;\": \"\\u2305\",\n \"bbrk;\": \"\\u23B5\",\n \"bbrktbrk;\": \"\\u23B6\",\n \"bcong;\": \"\\u224C\",\n \"Bcy;\": \"\\u0411\",\n \"bcy;\": \"\\u0431\",\n \"bdquo;\": \"\\u201E\",\n \"becaus;\": \"\\u2235\",\n \"Because;\": \"\\u2235\",\n \"because;\": \"\\u2235\",\n \"bemptyv;\": \"\\u29B0\",\n \"bepsi;\": \"\\u03F6\",\n \"bernou;\": \"\\u212C\",\n \"Bernoullis;\": \"\\u212C\",\n \"Beta;\": \"\\u0392\",\n \"beta;\": \"\\u03B2\",\n \"beth;\": \"\\u2136\",\n \"between;\": \"\\u226C\",\n \"Bfr;\": \"\\uD835\\uDD05\",\n \"bfr;\": \"\\uD835\\uDD1F\",\n \"bigcap;\": \"\\u22C2\",\n \"bigcirc;\": \"\\u25EF\",\n \"bigcup;\": \"\\u22C3\",\n \"bigodot;\": \"\\u2A00\",\n \"bigoplus;\": \"\\u2A01\",\n \"bigotimes;\": \"\\u2A02\",\n \"bigsqcup;\": \"\\u2A06\",\n \"bigstar;\": \"\\u2605\",\n \"bigtriangledown;\": \"\\u25BD\",\n \"bigtriangleup;\": \"\\u25B3\",\n \"biguplus;\": \"\\u2A04\",\n \"bigvee;\": \"\\u22C1\",\n \"bigwedge;\": \"\\u22C0\",\n \"bkarow;\": \"\\u290D\",\n \"blacklozenge;\": \"\\u29EB\",\n \"blacksquare;\": \"\\u25AA\",\n \"blacktriangle;\": \"\\u25B4\",\n \"blacktriangledown;\": \"\\u25BE\",\n \"blacktriangleleft;\": \"\\u25C2\",\n \"blacktriangleright;\": \"\\u25B8\",\n \"blank;\": \"\\u2423\",\n \"blk12;\": \"\\u2592\",\n \"blk14;\": \"\\u2591\",\n \"blk34;\": \"\\u2593\",\n \"block;\": \"\\u2588\",\n \"bne;\": \"\\u003D\\u20E5\",\n \"bnequiv;\": \"\\u2261\\u20E5\",\n \"bNot;\": \"\\u2AED\",\n \"bnot;\": \"\\u2310\",\n \"Bopf;\": \"\\uD835\\uDD39\",\n \"bopf;\": \"\\uD835\\uDD53\",\n \"bot;\": \"\\u22A5\",\n \"bottom;\": \"\\u22A5\",\n \"bowtie;\": \"\\u22C8\",\n \"boxbox;\": \"\\u29C9\",\n \"boxDL;\": \"\\u2557\",\n \"boxDl;\": \"\\u2556\",\n \"boxdL;\": \"\\u2555\",\n \"boxdl;\": \"\\u2510\",\n \"boxDR;\": \"\\u2554\",\n \"boxDr;\": \"\\u2553\",\n \"boxdR;\": \"\\u2552\",\n \"boxdr;\": \"\\u250C\",\n \"boxH;\": \"\\u2550\",\n \"boxh;\": \"\\u2500\",\n \"boxHD;\": \"\\u2566\",\n \"boxHd;\": \"\\u2564\",\n \"boxhD;\": \"\\u2565\",\n \"boxhd;\": \"\\u252C\",\n \"boxHU;\": \"\\u2569\",\n \"boxHu;\": \"\\u2567\",\n \"boxhU;\": \"\\u2568\",\n \"boxhu;\": \"\\u2534\",\n \"boxminus;\": \"\\u229F\",\n \"boxplus;\": \"\\u229E\",\n \"boxtimes;\": \"\\u22A0\",\n \"boxUL;\": \"\\u255D\",\n \"boxUl;\": \"\\u255C\",\n \"boxuL;\": \"\\u255B\",\n \"boxul;\": \"\\u2518\",\n \"boxUR;\": \"\\u255A\",\n \"boxUr;\": \"\\u2559\",\n \"boxuR;\": \"\\u2558\",\n \"boxur;\": \"\\u2514\",\n \"boxV;\": \"\\u2551\",\n \"boxv;\": \"\\u2502\",\n \"boxVH;\": \"\\u256C\",\n \"boxVh;\": \"\\u256B\",\n \"boxvH;\": \"\\u256A\",\n \"boxvh;\": \"\\u253C\",\n \"boxVL;\": \"\\u2563\",\n \"boxVl;\": \"\\u2562\",\n \"boxvL;\": \"\\u2561\",\n \"boxvl;\": \"\\u2524\",\n \"boxVR;\": \"\\u2560\",\n \"boxVr;\": \"\\u255F\",\n \"boxvR;\": \"\\u255E\",\n \"boxvr;\": \"\\u251C\",\n \"bprime;\": \"\\u2035\",\n \"Breve;\": \"\\u02D8\",\n \"breve;\": \"\\u02D8\",\n \"brvbar;\": \"\\u00A6\",\n \"brvbar\": \"\\u00A6\",\n \"Bscr;\": \"\\u212C\",\n \"bscr;\": \"\\uD835\\uDCB7\",\n \"bsemi;\": \"\\u204F\",\n \"bsim;\": \"\\u223D\",\n \"bsime;\": \"\\u22CD\",\n \"bsol;\": \"\\u005C\",\n \"bsolb;\": \"\\u29C5\",\n \"bsolhsub;\": \"\\u27C8\",\n \"bull;\": \"\\u2022\",\n \"bullet;\": \"\\u2022\",\n \"bump;\": \"\\u224E\",\n \"bumpE;\": \"\\u2AAE\",\n \"bumpe;\": \"\\u224F\",\n \"Bumpeq;\": \"\\u224E\",\n \"bumpeq;\": \"\\u224F\",\n \"Cacute;\": \"\\u0106\",\n \"cacute;\": \"\\u0107\",\n \"Cap;\": \"\\u22D2\",\n \"cap;\": \"\\u2229\",\n \"capand;\": \"\\u2A44\",\n \"capbrcup;\": \"\\u2A49\",\n \"capcap;\": \"\\u2A4B\",\n \"capcup;\": \"\\u2A47\",\n \"capdot;\": \"\\u2A40\",\n \"CapitalDifferentialD;\": \"\\u2145\",\n \"caps;\": \"\\u2229\\uFE00\",\n \"caret;\": \"\\u2041\",\n \"caron;\": \"\\u02C7\",\n \"Cayleys;\": \"\\u212D\",\n \"ccaps;\": \"\\u2A4D\",\n \"Ccaron;\": \"\\u010C\",\n \"ccaron;\": \"\\u010D\",\n \"Ccedil;\": \"\\u00C7\",\n \"Ccedil\": \"\\u00C7\",\n \"ccedil;\": \"\\u00E7\",\n \"ccedil\": \"\\u00E7\",\n \"Ccirc;\": \"\\u0108\",\n \"ccirc;\": \"\\u0109\",\n \"Cconint;\": \"\\u2230\",\n \"ccups;\": \"\\u2A4C\",\n \"ccupssm;\": \"\\u2A50\",\n \"Cdot;\": \"\\u010A\",\n \"cdot;\": \"\\u010B\",\n \"cedil;\": \"\\u00B8\",\n \"cedil\": \"\\u00B8\",\n \"Cedilla;\": \"\\u00B8\",\n \"cemptyv;\": \"\\u29B2\",\n \"cent;\": \"\\u00A2\",\n \"cent\": \"\\u00A2\",\n \"CenterDot;\": \"\\u00B7\",\n \"centerdot;\": \"\\u00B7\",\n \"Cfr;\": \"\\u212D\",\n \"cfr;\": \"\\uD835\\uDD20\",\n \"CHcy;\": \"\\u0427\",\n \"chcy;\": \"\\u0447\",\n \"check;\": \"\\u2713\",\n \"checkmark;\": \"\\u2713\",\n \"Chi;\": \"\\u03A7\",\n \"chi;\": \"\\u03C7\",\n \"cir;\": \"\\u25CB\",\n \"circ;\": \"\\u02C6\",\n \"circeq;\": \"\\u2257\",\n \"circlearrowleft;\": \"\\u21BA\",\n \"circlearrowright;\": \"\\u21BB\",\n \"circledast;\": \"\\u229B\",\n \"circledcirc;\": \"\\u229A\",\n \"circleddash;\": \"\\u229D\",\n \"CircleDot;\": \"\\u2299\",\n \"circledR;\": \"\\u00AE\",\n \"circledS;\": \"\\u24C8\",\n \"CircleMinus;\": \"\\u2296\",\n \"CirclePlus;\": \"\\u2295\",\n \"CircleTimes;\": \"\\u2297\",\n \"cirE;\": \"\\u29C3\",\n \"cire;\": \"\\u2257\",\n \"cirfnint;\": \"\\u2A10\",\n \"cirmid;\": \"\\u2AEF\",\n \"cirscir;\": \"\\u29C2\",\n \"ClockwiseContourIntegral;\": \"\\u2232\",\n \"CloseCurlyDoubleQuote;\": \"\\u201D\",\n \"CloseCurlyQuote;\": \"\\u2019\",\n \"clubs;\": \"\\u2663\",\n \"clubsuit;\": \"\\u2663\",\n \"Colon;\": \"\\u2237\",\n \"colon;\": \"\\u003A\",\n \"Colone;\": \"\\u2A74\",\n \"colone;\": \"\\u2254\",\n \"coloneq;\": \"\\u2254\",\n \"comma;\": \"\\u002C\",\n \"commat;\": \"\\u0040\",\n \"comp;\": \"\\u2201\",\n \"compfn;\": \"\\u2218\",\n \"complement;\": \"\\u2201\",\n \"complexes;\": \"\\u2102\",\n \"cong;\": \"\\u2245\",\n \"congdot;\": \"\\u2A6D\",\n \"Congruent;\": \"\\u2261\",\n \"Conint;\": \"\\u222F\",\n \"conint;\": \"\\u222E\",\n \"ContourIntegral;\": \"\\u222E\",\n \"Copf;\": \"\\u2102\",\n \"copf;\": \"\\uD835\\uDD54\",\n \"coprod;\": \"\\u2210\",\n \"Coproduct;\": \"\\u2210\",\n \"COPY;\": \"\\u00A9\",\n \"COPY\": \"\\u00A9\",\n \"copy;\": \"\\u00A9\",\n \"copy\": \"\\u00A9\",\n \"copysr;\": \"\\u2117\",\n \"CounterClockwiseContourIntegral;\": \"\\u2233\",\n \"crarr;\": \"\\u21B5\",\n \"Cross;\": \"\\u2A2F\",\n \"cross;\": \"\\u2717\",\n \"Cscr;\": \"\\uD835\\uDC9E\",\n \"cscr;\": \"\\uD835\\uDCB8\",\n \"csub;\": \"\\u2ACF\",\n \"csube;\": \"\\u2AD1\",\n \"csup;\": \"\\u2AD0\",\n \"csupe;\": \"\\u2AD2\",\n \"ctdot;\": \"\\u22EF\",\n \"cudarrl;\": \"\\u2938\",\n \"cudarrr;\": \"\\u2935\",\n \"cuepr;\": \"\\u22DE\",\n \"cuesc;\": \"\\u22DF\",\n \"cularr;\": \"\\u21B6\",\n \"cularrp;\": \"\\u293D\",\n \"Cup;\": \"\\u22D3\",\n \"cup;\": \"\\u222A\",\n \"cupbrcap;\": \"\\u2A48\",\n \"CupCap;\": \"\\u224D\",\n \"cupcap;\": \"\\u2A46\",\n \"cupcup;\": \"\\u2A4A\",\n \"cupdot;\": \"\\u228D\",\n \"cupor;\": \"\\u2A45\",\n \"cups;\": \"\\u222A\\uFE00\",\n \"curarr;\": \"\\u21B7\",\n \"curarrm;\": \"\\u293C\",\n \"curlyeqprec;\": \"\\u22DE\",\n \"curlyeqsucc;\": \"\\u22DF\",\n \"curlyvee;\": \"\\u22CE\",\n \"curlywedge;\": \"\\u22CF\",\n \"curren;\": \"\\u00A4\",\n \"curren\": \"\\u00A4\",\n \"curvearrowleft;\": \"\\u21B6\",\n \"curvearrowright;\": \"\\u21B7\",\n \"cuvee;\": \"\\u22CE\",\n \"cuwed;\": \"\\u22CF\",\n \"cwconint;\": \"\\u2232\",\n \"cwint;\": \"\\u2231\",\n \"cylcty;\": \"\\u232D\",\n \"Dagger;\": \"\\u2021\",\n \"dagger;\": \"\\u2020\",\n \"daleth;\": \"\\u2138\",\n \"Darr;\": \"\\u21A1\",\n \"dArr;\": \"\\u21D3\",\n \"darr;\": \"\\u2193\",\n \"dash;\": \"\\u2010\",\n \"Dashv;\": \"\\u2AE4\",\n \"dashv;\": \"\\u22A3\",\n \"dbkarow;\": \"\\u290F\",\n \"dblac;\": \"\\u02DD\",\n \"Dcaron;\": \"\\u010E\",\n \"dcaron;\": \"\\u010F\",\n \"Dcy;\": \"\\u0414\",\n \"dcy;\": \"\\u0434\",\n \"DD;\": \"\\u2145\",\n \"dd;\": \"\\u2146\",\n \"ddagger;\": \"\\u2021\",\n \"ddarr;\": \"\\u21CA\",\n \"DDotrahd;\": \"\\u2911\",\n \"ddotseq;\": \"\\u2A77\",\n \"deg;\": \"\\u00B0\",\n \"deg\": \"\\u00B0\",\n \"Del;\": \"\\u2207\",\n \"Delta;\": \"\\u0394\",\n \"delta;\": \"\\u03B4\",\n \"demptyv;\": \"\\u29B1\",\n \"dfisht;\": \"\\u297F\",\n \"Dfr;\": \"\\uD835\\uDD07\",\n \"dfr;\": \"\\uD835\\uDD21\",\n \"dHar;\": \"\\u2965\",\n \"dharl;\": \"\\u21C3\",\n \"dharr;\": \"\\u21C2\",\n \"DiacriticalAcute;\": \"\\u00B4\",\n \"DiacriticalDot;\": \"\\u02D9\",\n \"DiacriticalDoubleAcute;\": \"\\u02DD\",\n \"DiacriticalGrave;\": \"\\u0060\",\n \"DiacriticalTilde;\": \"\\u02DC\",\n \"diam;\": \"\\u22C4\",\n \"Diamond;\": \"\\u22C4\",\n \"diamond;\": \"\\u22C4\",\n \"diamondsuit;\": \"\\u2666\",\n \"diams;\": \"\\u2666\",\n \"die;\": \"\\u00A8\",\n \"DifferentialD;\": \"\\u2146\",\n \"digamma;\": \"\\u03DD\",\n \"disin;\": \"\\u22F2\",\n \"div;\": \"\\u00F7\",\n \"divide;\": \"\\u00F7\",\n \"divide\": \"\\u00F7\",\n \"divideontimes;\": \"\\u22C7\",\n \"divonx;\": \"\\u22C7\",\n \"DJcy;\": \"\\u0402\",\n \"djcy;\": \"\\u0452\",\n \"dlcorn;\": \"\\u231E\",\n \"dlcrop;\": \"\\u230D\",\n \"dollar;\": \"\\u0024\",\n \"Dopf;\": \"\\uD835\\uDD3B\",\n \"dopf;\": \"\\uD835\\uDD55\",\n \"Dot;\": \"\\u00A8\",\n \"dot;\": \"\\u02D9\",\n \"DotDot;\": \"\\u20DC\",\n \"doteq;\": \"\\u2250\",\n \"doteqdot;\": \"\\u2251\",\n \"DotEqual;\": \"\\u2250\",\n \"dotminus;\": \"\\u2238\",\n \"dotplus;\": \"\\u2214\",\n \"dotsquare;\": \"\\u22A1\",\n \"doublebarwedge;\": \"\\u2306\",\n \"DoubleContourIntegral;\": \"\\u222F\",\n \"DoubleDot;\": \"\\u00A8\",\n \"DoubleDownArrow;\": \"\\u21D3\",\n \"DoubleLeftArrow;\": \"\\u21D0\",\n \"DoubleLeftRightArrow;\": \"\\u21D4\",\n \"DoubleLeftTee;\": \"\\u2AE4\",\n \"DoubleLongLeftArrow;\": \"\\u27F8\",\n \"DoubleLongLeftRightArrow;\": \"\\u27FA\",\n \"DoubleLongRightArrow;\": \"\\u27F9\",\n \"DoubleRightArrow;\": \"\\u21D2\",\n \"DoubleRightTee;\": \"\\u22A8\",\n \"DoubleUpArrow;\": \"\\u21D1\",\n \"DoubleUpDownArrow;\": \"\\u21D5\",\n \"DoubleVerticalBar;\": \"\\u2225\",\n \"DownArrow;\": \"\\u2193\",\n \"Downarrow;\": \"\\u21D3\",\n \"downarrow;\": \"\\u2193\",\n \"DownArrowBar;\": \"\\u2913\",\n \"DownArrowUpArrow;\": \"\\u21F5\",\n \"DownBreve;\": \"\\u0311\",\n \"downdownarrows;\": \"\\u21CA\",\n \"downharpoonleft;\": \"\\u21C3\",\n \"downharpoonright;\": \"\\u21C2\",\n \"DownLeftRightVector;\": \"\\u2950\",\n \"DownLeftTeeVector;\": \"\\u295E\",\n \"DownLeftVector;\": \"\\u21BD\",\n \"DownLeftVectorBar;\": \"\\u2956\",\n \"DownRightTeeVector;\": \"\\u295F\",\n \"DownRightVector;\": \"\\u21C1\",\n \"DownRightVectorBar;\": \"\\u2957\",\n \"DownTee;\": \"\\u22A4\",\n \"DownTeeArrow;\": \"\\u21A7\",\n \"drbkarow;\": \"\\u2910\",\n \"drcorn;\": \"\\u231F\",\n \"drcrop;\": \"\\u230C\",\n \"Dscr;\": \"\\uD835\\uDC9F\",\n \"dscr;\": \"\\uD835\\uDCB9\",\n \"DScy;\": \"\\u0405\",\n \"dscy;\": \"\\u0455\",\n \"dsol;\": \"\\u29F6\",\n \"Dstrok;\": \"\\u0110\",\n \"dstrok;\": \"\\u0111\",\n \"dtdot;\": \"\\u22F1\",\n \"dtri;\": \"\\u25BF\",\n \"dtrif;\": \"\\u25BE\",\n \"duarr;\": \"\\u21F5\",\n \"duhar;\": \"\\u296F\",\n \"dwangle;\": \"\\u29A6\",\n \"DZcy;\": \"\\u040F\",\n \"dzcy;\": \"\\u045F\",\n \"dzigrarr;\": \"\\u27FF\",\n \"Eacute;\": \"\\u00C9\",\n \"Eacute\": \"\\u00C9\",\n \"eacute;\": \"\\u00E9\",\n \"eacute\": \"\\u00E9\",\n \"easter;\": \"\\u2A6E\",\n \"Ecaron;\": \"\\u011A\",\n \"ecaron;\": \"\\u011B\",\n \"ecir;\": \"\\u2256\",\n \"Ecirc;\": \"\\u00CA\",\n \"Ecirc\": \"\\u00CA\",\n \"ecirc;\": \"\\u00EA\",\n \"ecirc\": \"\\u00EA\",\n \"ecolon;\": \"\\u2255\",\n \"Ecy;\": \"\\u042D\",\n \"ecy;\": \"\\u044D\",\n \"eDDot;\": \"\\u2A77\",\n \"Edot;\": \"\\u0116\",\n \"eDot;\": \"\\u2251\",\n \"edot;\": \"\\u0117\",\n \"ee;\": \"\\u2147\",\n \"efDot;\": \"\\u2252\",\n \"Efr;\": \"\\uD835\\uDD08\",\n \"efr;\": \"\\uD835\\uDD22\",\n \"eg;\": \"\\u2A9A\",\n \"Egrave;\": \"\\u00C8\",\n \"Egrave\": \"\\u00C8\",\n \"egrave;\": \"\\u00E8\",\n \"egrave\": \"\\u00E8\",\n \"egs;\": \"\\u2A96\",\n \"egsdot;\": \"\\u2A98\",\n \"el;\": \"\\u2A99\",\n \"Element;\": \"\\u2208\",\n \"elinters;\": \"\\u23E7\",\n \"ell;\": \"\\u2113\",\n \"els;\": \"\\u2A95\",\n \"elsdot;\": \"\\u2A97\",\n \"Emacr;\": \"\\u0112\",\n \"emacr;\": \"\\u0113\",\n \"empty;\": \"\\u2205\",\n \"emptyset;\": \"\\u2205\",\n \"EmptySmallSquare;\": \"\\u25FB\",\n \"emptyv;\": \"\\u2205\",\n \"EmptyVerySmallSquare;\": \"\\u25AB\",\n \"emsp;\": \"\\u2003\",\n \"emsp13;\": \"\\u2004\",\n \"emsp14;\": \"\\u2005\",\n \"ENG;\": \"\\u014A\",\n \"eng;\": \"\\u014B\",\n \"ensp;\": \"\\u2002\",\n \"Eogon;\": \"\\u0118\",\n \"eogon;\": \"\\u0119\",\n \"Eopf;\": \"\\uD835\\uDD3C\",\n \"eopf;\": \"\\uD835\\uDD56\",\n \"epar;\": \"\\u22D5\",\n \"eparsl;\": \"\\u29E3\",\n \"eplus;\": \"\\u2A71\",\n \"epsi;\": \"\\u03B5\",\n \"Epsilon;\": \"\\u0395\",\n \"epsilon;\": \"\\u03B5\",\n \"epsiv;\": \"\\u03F5\",\n \"eqcirc;\": \"\\u2256\",\n \"eqcolon;\": \"\\u2255\",\n \"eqsim;\": \"\\u2242\",\n \"eqslantgtr;\": \"\\u2A96\",\n \"eqslantless;\": \"\\u2A95\",\n \"Equal;\": \"\\u2A75\",\n \"equals;\": \"\\u003D\",\n \"EqualTilde;\": \"\\u2242\",\n \"equest;\": \"\\u225F\",\n \"Equilibrium;\": \"\\u21CC\",\n \"equiv;\": \"\\u2261\",\n \"equivDD;\": \"\\u2A78\",\n \"eqvparsl;\": \"\\u29E5\",\n \"erarr;\": \"\\u2971\",\n \"erDot;\": \"\\u2253\",\n \"Escr;\": \"\\u2130\",\n \"escr;\": \"\\u212F\",\n \"esdot;\": \"\\u2250\",\n \"Esim;\": \"\\u2A73\",\n \"esim;\": \"\\u2242\",\n \"Eta;\": \"\\u0397\",\n \"eta;\": \"\\u03B7\",\n \"ETH;\": \"\\u00D0\",\n \"ETH\": \"\\u00D0\",\n \"eth;\": \"\\u00F0\",\n \"eth\": \"\\u00F0\",\n \"Euml;\": \"\\u00CB\",\n \"Euml\": \"\\u00CB\",\n \"euml;\": \"\\u00EB\",\n \"euml\": \"\\u00EB\",\n \"euro;\": \"\\u20AC\",\n \"excl;\": \"\\u0021\",\n \"exist;\": \"\\u2203\",\n \"Exists;\": \"\\u2203\",\n \"expectation;\": \"\\u2130\",\n \"ExponentialE;\": \"\\u2147\",\n \"exponentiale;\": \"\\u2147\",\n \"fallingdotseq;\": \"\\u2252\",\n \"Fcy;\": \"\\u0424\",\n \"fcy;\": \"\\u0444\",\n \"female;\": \"\\u2640\",\n \"ffilig;\": \"\\uFB03\",\n \"fflig;\": \"\\uFB00\",\n \"ffllig;\": \"\\uFB04\",\n \"Ffr;\": \"\\uD835\\uDD09\",\n \"ffr;\": \"\\uD835\\uDD23\",\n \"filig;\": \"\\uFB01\",\n \"FilledSmallSquare;\": \"\\u25FC\",\n \"FilledVerySmallSquare;\": \"\\u25AA\",\n \"fjlig;\": \"\\u0066\\u006A\",\n \"flat;\": \"\\u266D\",\n \"fllig;\": \"\\uFB02\",\n \"fltns;\": \"\\u25B1\",\n \"fnof;\": \"\\u0192\",\n \"Fopf;\": \"\\uD835\\uDD3D\",\n \"fopf;\": \"\\uD835\\uDD57\",\n \"ForAll;\": \"\\u2200\",\n \"forall;\": \"\\u2200\",\n \"fork;\": \"\\u22D4\",\n \"forkv;\": \"\\u2AD9\",\n \"Fouriertrf;\": \"\\u2131\",\n \"fpartint;\": \"\\u2A0D\",\n \"frac12;\": \"\\u00BD\",\n \"frac12\": \"\\u00BD\",\n \"frac13;\": \"\\u2153\",\n \"frac14;\": \"\\u00BC\",\n \"frac14\": \"\\u00BC\",\n \"frac15;\": \"\\u2155\",\n \"frac16;\": \"\\u2159\",\n \"frac18;\": \"\\u215B\",\n \"frac23;\": \"\\u2154\",\n \"frac25;\": \"\\u2156\",\n \"frac34;\": \"\\u00BE\",\n \"frac34\": \"\\u00BE\",\n \"frac35;\": \"\\u2157\",\n \"frac38;\": \"\\u215C\",\n \"frac45;\": \"\\u2158\",\n \"frac56;\": \"\\u215A\",\n \"frac58;\": \"\\u215D\",\n \"frac78;\": \"\\u215E\",\n \"frasl;\": \"\\u2044\",\n \"frown;\": \"\\u2322\",\n \"Fscr;\": \"\\u2131\",\n \"fscr;\": \"\\uD835\\uDCBB\",\n \"gacute;\": \"\\u01F5\",\n \"Gamma;\": \"\\u0393\",\n \"gamma;\": \"\\u03B3\",\n \"Gammad;\": \"\\u03DC\",\n \"gammad;\": \"\\u03DD\",\n \"gap;\": \"\\u2A86\",\n \"Gbreve;\": \"\\u011E\",\n \"gbreve;\": \"\\u011F\",\n \"Gcedil;\": \"\\u0122\",\n \"Gcirc;\": \"\\u011C\",\n \"gcirc;\": \"\\u011D\",\n \"Gcy;\": \"\\u0413\",\n \"gcy;\": \"\\u0433\",\n \"Gdot;\": \"\\u0120\",\n \"gdot;\": \"\\u0121\",\n \"gE;\": \"\\u2267\",\n \"ge;\": \"\\u2265\",\n \"gEl;\": \"\\u2A8C\",\n \"gel;\": \"\\u22DB\",\n \"geq;\": \"\\u2265\",\n \"geqq;\": \"\\u2267\",\n \"geqslant;\": \"\\u2A7E\",\n \"ges;\": \"\\u2A7E\",\n \"gescc;\": \"\\u2AA9\",\n \"gesdot;\": \"\\u2A80\",\n \"gesdoto;\": \"\\u2A82\",\n \"gesdotol;\": \"\\u2A84\",\n \"gesl;\": \"\\u22DB\\uFE00\",\n \"gesles;\": \"\\u2A94\",\n \"Gfr;\": \"\\uD835\\uDD0A\",\n \"gfr;\": \"\\uD835\\uDD24\",\n \"Gg;\": \"\\u22D9\",\n \"gg;\": \"\\u226B\",\n \"ggg;\": \"\\u22D9\",\n \"gimel;\": \"\\u2137\",\n \"GJcy;\": \"\\u0403\",\n \"gjcy;\": \"\\u0453\",\n \"gl;\": \"\\u2277\",\n \"gla;\": \"\\u2AA5\",\n \"glE;\": \"\\u2A92\",\n \"glj;\": \"\\u2AA4\",\n \"gnap;\": \"\\u2A8A\",\n \"gnapprox;\": \"\\u2A8A\",\n \"gnE;\": \"\\u2269\",\n \"gne;\": \"\\u2A88\",\n \"gneq;\": \"\\u2A88\",\n \"gneqq;\": \"\\u2269\",\n \"gnsim;\": \"\\u22E7\",\n \"Gopf;\": \"\\uD835\\uDD3E\",\n \"gopf;\": \"\\uD835\\uDD58\",\n \"grave;\": \"\\u0060\",\n \"GreaterEqual;\": \"\\u2265\",\n \"GreaterEqualLess;\": \"\\u22DB\",\n \"GreaterFullEqual;\": \"\\u2267\",\n \"GreaterGreater;\": \"\\u2AA2\",\n \"GreaterLess;\": \"\\u2277\",\n \"GreaterSlantEqual;\": \"\\u2A7E\",\n \"GreaterTilde;\": \"\\u2273\",\n \"Gscr;\": \"\\uD835\\uDCA2\",\n \"gscr;\": \"\\u210A\",\n \"gsim;\": \"\\u2273\",\n \"gsime;\": \"\\u2A8E\",\n \"gsiml;\": \"\\u2A90\",\n \"GT;\": \"\\u003E\",\n \"GT\": \"\\u003E\",\n \"Gt;\": \"\\u226B\",\n \"gt;\": \"\\u003E\",\n \"gt\": \"\\u003E\",\n \"gtcc;\": \"\\u2AA7\",\n \"gtcir;\": \"\\u2A7A\",\n \"gtdot;\": \"\\u22D7\",\n \"gtlPar;\": \"\\u2995\",\n \"gtquest;\": \"\\u2A7C\",\n \"gtrapprox;\": \"\\u2A86\",\n \"gtrarr;\": \"\\u2978\",\n \"gtrdot;\": \"\\u22D7\",\n \"gtreqless;\": \"\\u22DB\",\n \"gtreqqless;\": \"\\u2A8C\",\n \"gtrless;\": \"\\u2277\",\n \"gtrsim;\": \"\\u2273\",\n \"gvertneqq;\": \"\\u2269\\uFE00\",\n \"gvnE;\": \"\\u2269\\uFE00\",\n \"Hacek;\": \"\\u02C7\",\n \"hairsp;\": \"\\u200A\",\n \"half;\": \"\\u00BD\",\n \"hamilt;\": \"\\u210B\",\n \"HARDcy;\": \"\\u042A\",\n \"hardcy;\": \"\\u044A\",\n \"hArr;\": \"\\u21D4\",\n \"harr;\": \"\\u2194\",\n \"harrcir;\": \"\\u2948\",\n \"harrw;\": \"\\u21AD\",\n \"Hat;\": \"\\u005E\",\n \"hbar;\": \"\\u210F\",\n \"Hcirc;\": \"\\u0124\",\n \"hcirc;\": \"\\u0125\",\n \"hearts;\": \"\\u2665\",\n \"heartsuit;\": \"\\u2665\",\n \"hellip;\": \"\\u2026\",\n \"hercon;\": \"\\u22B9\",\n \"Hfr;\": \"\\u210C\",\n \"hfr;\": \"\\uD835\\uDD25\",\n \"HilbertSpace;\": \"\\u210B\",\n \"hksearow;\": \"\\u2925\",\n \"hkswarow;\": \"\\u2926\",\n \"hoarr;\": \"\\u21FF\",\n \"homtht;\": \"\\u223B\",\n \"hookleftarrow;\": \"\\u21A9\",\n \"hookrightarrow;\": \"\\u21AA\",\n \"Hopf;\": \"\\u210D\",\n \"hopf;\": \"\\uD835\\uDD59\",\n \"horbar;\": \"\\u2015\",\n \"HorizontalLine;\": \"\\u2500\",\n \"Hscr;\": \"\\u210B\",\n \"hscr;\": \"\\uD835\\uDCBD\",\n \"hslash;\": \"\\u210F\",\n \"Hstrok;\": \"\\u0126\",\n \"hstrok;\": \"\\u0127\",\n \"HumpDownHump;\": \"\\u224E\",\n \"HumpEqual;\": \"\\u224F\",\n \"hybull;\": \"\\u2043\",\n \"hyphen;\": \"\\u2010\",\n \"Iacute;\": \"\\u00CD\",\n \"Iacute\": \"\\u00CD\",\n \"iacute;\": \"\\u00ED\",\n \"iacute\": \"\\u00ED\",\n \"ic;\": \"\\u2063\",\n \"Icirc;\": \"\\u00CE\",\n \"Icirc\": \"\\u00CE\",\n \"icirc;\": \"\\u00EE\",\n \"icirc\": \"\\u00EE\",\n \"Icy;\": \"\\u0418\",\n \"icy;\": \"\\u0438\",\n \"Idot;\": \"\\u0130\",\n \"IEcy;\": \"\\u0415\",\n \"iecy;\": \"\\u0435\",\n \"iexcl;\": \"\\u00A1\",\n \"iexcl\": \"\\u00A1\",\n \"iff;\": \"\\u21D4\",\n \"Ifr;\": \"\\u2111\",\n \"ifr;\": \"\\uD835\\uDD26\",\n \"Igrave;\": \"\\u00CC\",\n \"Igrave\": \"\\u00CC\",\n \"igrave;\": \"\\u00EC\",\n \"igrave\": \"\\u00EC\",\n \"ii;\": \"\\u2148\",\n \"iiiint;\": \"\\u2A0C\",\n \"iiint;\": \"\\u222D\",\n \"iinfin;\": \"\\u29DC\",\n \"iiota;\": \"\\u2129\",\n \"IJlig;\": \"\\u0132\",\n \"ijlig;\": \"\\u0133\",\n \"Im;\": \"\\u2111\",\n \"Imacr;\": \"\\u012A\",\n \"imacr;\": \"\\u012B\",\n \"image;\": \"\\u2111\",\n \"ImaginaryI;\": \"\\u2148\",\n \"imagline;\": \"\\u2110\",\n \"imagpart;\": \"\\u2111\",\n \"imath;\": \"\\u0131\",\n \"imof;\": \"\\u22B7\",\n \"imped;\": \"\\u01B5\",\n \"Implies;\": \"\\u21D2\",\n \"in;\": \"\\u2208\",\n \"incare;\": \"\\u2105\",\n \"infin;\": \"\\u221E\",\n \"infintie;\": \"\\u29DD\",\n \"inodot;\": \"\\u0131\",\n \"Int;\": \"\\u222C\",\n \"int;\": \"\\u222B\",\n \"intcal;\": \"\\u22BA\",\n \"integers;\": \"\\u2124\",\n \"Integral;\": \"\\u222B\",\n \"intercal;\": \"\\u22BA\",\n \"Intersection;\": \"\\u22C2\",\n \"intlarhk;\": \"\\u2A17\",\n \"intprod;\": \"\\u2A3C\",\n \"InvisibleComma;\": \"\\u2063\",\n \"InvisibleTimes;\": \"\\u2062\",\n \"IOcy;\": \"\\u0401\",\n \"iocy;\": \"\\u0451\",\n \"Iogon;\": \"\\u012E\",\n \"iogon;\": \"\\u012F\",\n \"Iopf;\": \"\\uD835\\uDD40\",\n \"iopf;\": \"\\uD835\\uDD5A\",\n \"Iota;\": \"\\u0399\",\n \"iota;\": \"\\u03B9\",\n \"iprod;\": \"\\u2A3C\",\n \"iquest;\": \"\\u00BF\",\n \"iquest\": \"\\u00BF\",\n \"Iscr;\": \"\\u2110\",\n \"iscr;\": \"\\uD835\\uDCBE\",\n \"isin;\": \"\\u2208\",\n \"isindot;\": \"\\u22F5\",\n \"isinE;\": \"\\u22F9\",\n \"isins;\": \"\\u22F4\",\n \"isinsv;\": \"\\u22F3\",\n \"isinv;\": \"\\u2208\",\n \"it;\": \"\\u2062\",\n \"Itilde;\": \"\\u0128\",\n \"itilde;\": \"\\u0129\",\n \"Iukcy;\": \"\\u0406\",\n \"iukcy;\": \"\\u0456\",\n \"Iuml;\": \"\\u00CF\",\n \"Iuml\": \"\\u00CF\",\n \"iuml;\": \"\\u00EF\",\n \"iuml\": \"\\u00EF\",\n \"Jcirc;\": \"\\u0134\",\n \"jcirc;\": \"\\u0135\",\n \"Jcy;\": \"\\u0419\",\n \"jcy;\": \"\\u0439\",\n \"Jfr;\": \"\\uD835\\uDD0D\",\n \"jfr;\": \"\\uD835\\uDD27\",\n \"jmath;\": \"\\u0237\",\n \"Jopf;\": \"\\uD835\\uDD41\",\n \"jopf;\": \"\\uD835\\uDD5B\",\n \"Jscr;\": \"\\uD835\\uDCA5\",\n \"jscr;\": \"\\uD835\\uDCBF\",\n \"Jsercy;\": \"\\u0408\",\n \"jsercy;\": \"\\u0458\",\n \"Jukcy;\": \"\\u0404\",\n \"jukcy;\": \"\\u0454\",\n \"Kappa;\": \"\\u039A\",\n \"kappa;\": \"\\u03BA\",\n \"kappav;\": \"\\u03F0\",\n \"Kcedil;\": \"\\u0136\",\n \"kcedil;\": \"\\u0137\",\n \"Kcy;\": \"\\u041A\",\n \"kcy;\": \"\\u043A\",\n \"Kfr;\": \"\\uD835\\uDD0E\",\n \"kfr;\": \"\\uD835\\uDD28\",\n \"kgreen;\": \"\\u0138\",\n \"KHcy;\": \"\\u0425\",\n \"khcy;\": \"\\u0445\",\n \"KJcy;\": \"\\u040C\",\n \"kjcy;\": \"\\u045C\",\n \"Kopf;\": \"\\uD835\\uDD42\",\n \"kopf;\": \"\\uD835\\uDD5C\",\n \"Kscr;\": \"\\uD835\\uDCA6\",\n \"kscr;\": \"\\uD835\\uDCC0\",\n \"lAarr;\": \"\\u21DA\",\n \"Lacute;\": \"\\u0139\",\n \"lacute;\": \"\\u013A\",\n \"laemptyv;\": \"\\u29B4\",\n \"lagran;\": \"\\u2112\",\n \"Lambda;\": \"\\u039B\",\n \"lambda;\": \"\\u03BB\",\n \"Lang;\": \"\\u27EA\",\n \"lang;\": \"\\u27E8\",\n \"langd;\": \"\\u2991\",\n \"langle;\": \"\\u27E8\",\n \"lap;\": \"\\u2A85\",\n \"Laplacetrf;\": \"\\u2112\",\n \"laquo;\": \"\\u00AB\",\n \"laquo\": \"\\u00AB\",\n \"Larr;\": \"\\u219E\",\n \"lArr;\": \"\\u21D0\",\n \"larr;\": \"\\u2190\",\n \"larrb;\": \"\\u21E4\",\n \"larrbfs;\": \"\\u291F\",\n \"larrfs;\": \"\\u291D\",\n \"larrhk;\": \"\\u21A9\",\n \"larrlp;\": \"\\u21AB\",\n \"larrpl;\": \"\\u2939\",\n \"larrsim;\": \"\\u2973\",\n \"larrtl;\": \"\\u21A2\",\n \"lat;\": \"\\u2AAB\",\n \"lAtail;\": \"\\u291B\",\n \"latail;\": \"\\u2919\",\n \"late;\": \"\\u2AAD\",\n \"lates;\": \"\\u2AAD\\uFE00\",\n \"lBarr;\": \"\\u290E\",\n \"lbarr;\": \"\\u290C\",\n \"lbbrk;\": \"\\u2772\",\n \"lbrace;\": \"\\u007B\",\n \"lbrack;\": \"\\u005B\",\n \"lbrke;\": \"\\u298B\",\n \"lbrksld;\": \"\\u298F\",\n \"lbrkslu;\": \"\\u298D\",\n \"Lcaron;\": \"\\u013D\",\n \"lcaron;\": \"\\u013E\",\n \"Lcedil;\": \"\\u013B\",\n \"lcedil;\": \"\\u013C\",\n \"lceil;\": \"\\u2308\",\n \"lcub;\": \"\\u007B\",\n \"Lcy;\": \"\\u041B\",\n \"lcy;\": \"\\u043B\",\n \"ldca;\": \"\\u2936\",\n \"ldquo;\": \"\\u201C\",\n \"ldquor;\": \"\\u201E\",\n \"ldrdhar;\": \"\\u2967\",\n \"ldrushar;\": \"\\u294B\",\n \"ldsh;\": \"\\u21B2\",\n \"lE;\": \"\\u2266\",\n \"le;\": \"\\u2264\",\n \"LeftAngleBracket;\": \"\\u27E8\",\n \"LeftArrow;\": \"\\u2190\",\n \"Leftarrow;\": \"\\u21D0\",\n \"leftarrow;\": \"\\u2190\",\n \"LeftArrowBar;\": \"\\u21E4\",\n \"LeftArrowRightArrow;\": \"\\u21C6\",\n \"leftarrowtail;\": \"\\u21A2\",\n \"LeftCeiling;\": \"\\u2308\",\n \"LeftDoubleBracket;\": \"\\u27E6\",\n \"LeftDownTeeVector;\": \"\\u2961\",\n \"LeftDownVector;\": \"\\u21C3\",\n \"LeftDownVectorBar;\": \"\\u2959\",\n \"LeftFloor;\": \"\\u230A\",\n \"leftharpoondown;\": \"\\u21BD\",\n \"leftharpoonup;\": \"\\u21BC\",\n \"leftleftarrows;\": \"\\u21C7\",\n \"LeftRightArrow;\": \"\\u2194\",\n \"Leftrightarrow;\": \"\\u21D4\",\n \"leftrightarrow;\": \"\\u2194\",\n \"leftrightarrows;\": \"\\u21C6\",\n \"leftrightharpoons;\": \"\\u21CB\",\n \"leftrightsquigarrow;\": \"\\u21AD\",\n \"LeftRightVector;\": \"\\u294E\",\n \"LeftTee;\": \"\\u22A3\",\n \"LeftTeeArrow;\": \"\\u21A4\",\n \"LeftTeeVector;\": \"\\u295A\",\n \"leftthreetimes;\": \"\\u22CB\",\n \"LeftTriangle;\": \"\\u22B2\",\n \"LeftTriangleBar;\": \"\\u29CF\",\n \"LeftTriangleEqual;\": \"\\u22B4\",\n \"LeftUpDownVector;\": \"\\u2951\",\n \"LeftUpTeeVector;\": \"\\u2960\",\n \"LeftUpVector;\": \"\\u21BF\",\n \"LeftUpVectorBar;\": \"\\u2958\",\n \"LeftVector;\": \"\\u21BC\",\n \"LeftVectorBar;\": \"\\u2952\",\n \"lEg;\": \"\\u2A8B\",\n \"leg;\": \"\\u22DA\",\n \"leq;\": \"\\u2264\",\n \"leqq;\": \"\\u2266\",\n \"leqslant;\": \"\\u2A7D\",\n \"les;\": \"\\u2A7D\",\n \"lescc;\": \"\\u2AA8\",\n \"lesdot;\": \"\\u2A7F\",\n \"lesdoto;\": \"\\u2A81\",\n \"lesdotor;\": \"\\u2A83\",\n \"lesg;\": \"\\u22DA\\uFE00\",\n \"lesges;\": \"\\u2A93\",\n \"lessapprox;\": \"\\u2A85\",\n \"lessdot;\": \"\\u22D6\",\n \"lesseqgtr;\": \"\\u22DA\",\n \"lesseqqgtr;\": \"\\u2A8B\",\n \"LessEqualGreater;\": \"\\u22DA\",\n \"LessFullEqual;\": \"\\u2266\",\n \"LessGreater;\": \"\\u2276\",\n \"lessgtr;\": \"\\u2276\",\n \"LessLess;\": \"\\u2AA1\",\n \"lesssim;\": \"\\u2272\",\n \"LessSlantEqual;\": \"\\u2A7D\",\n \"LessTilde;\": \"\\u2272\",\n \"lfisht;\": \"\\u297C\",\n \"lfloor;\": \"\\u230A\",\n \"Lfr;\": \"\\uD835\\uDD0F\",\n \"lfr;\": \"\\uD835\\uDD29\",\n \"lg;\": \"\\u2276\",\n \"lgE;\": \"\\u2A91\",\n \"lHar;\": \"\\u2962\",\n \"lhard;\": \"\\u21BD\",\n \"lharu;\": \"\\u21BC\",\n \"lharul;\": \"\\u296A\",\n \"lhblk;\": \"\\u2584\",\n \"LJcy;\": \"\\u0409\",\n \"ljcy;\": \"\\u0459\",\n \"Ll;\": \"\\u22D8\",\n \"ll;\": \"\\u226A\",\n \"llarr;\": \"\\u21C7\",\n \"llcorner;\": \"\\u231E\",\n \"Lleftarrow;\": \"\\u21DA\",\n \"llhard;\": \"\\u296B\",\n \"lltri;\": \"\\u25FA\",\n \"Lmidot;\": \"\\u013F\",\n \"lmidot;\": \"\\u0140\",\n \"lmoust;\": \"\\u23B0\",\n \"lmoustache;\": \"\\u23B0\",\n \"lnap;\": \"\\u2A89\",\n \"lnapprox;\": \"\\u2A89\",\n \"lnE;\": \"\\u2268\",\n \"lne;\": \"\\u2A87\",\n \"lneq;\": \"\\u2A87\",\n \"lneqq;\": \"\\u2268\",\n \"lnsim;\": \"\\u22E6\",\n \"loang;\": \"\\u27EC\",\n \"loarr;\": \"\\u21FD\",\n \"lobrk;\": \"\\u27E6\",\n \"LongLeftArrow;\": \"\\u27F5\",\n \"Longleftarrow;\": \"\\u27F8\",\n \"longleftarrow;\": \"\\u27F5\",\n \"LongLeftRightArrow;\": \"\\u27F7\",\n \"Longleftrightarrow;\": \"\\u27FA\",\n \"longleftrightarrow;\": \"\\u27F7\",\n \"longmapsto;\": \"\\u27FC\",\n \"LongRightArrow;\": \"\\u27F6\",\n \"Longrightarrow;\": \"\\u27F9\",\n \"longrightarrow;\": \"\\u27F6\",\n \"looparrowleft;\": \"\\u21AB\",\n \"looparrowright;\": \"\\u21AC\",\n \"lopar;\": \"\\u2985\",\n \"Lopf;\": \"\\uD835\\uDD43\",\n \"lopf;\": \"\\uD835\\uDD5D\",\n \"loplus;\": \"\\u2A2D\",\n \"lotimes;\": \"\\u2A34\",\n \"lowast;\": \"\\u2217\",\n \"lowbar;\": \"\\u005F\",\n \"LowerLeftArrow;\": \"\\u2199\",\n \"LowerRightArrow;\": \"\\u2198\",\n \"loz;\": \"\\u25CA\",\n \"lozenge;\": \"\\u25CA\",\n \"lozf;\": \"\\u29EB\",\n \"lpar;\": \"\\u0028\",\n \"lparlt;\": \"\\u2993\",\n \"lrarr;\": \"\\u21C6\",\n \"lrcorner;\": \"\\u231F\",\n \"lrhar;\": \"\\u21CB\",\n \"lrhard;\": \"\\u296D\",\n \"lrm;\": \"\\u200E\",\n \"lrtri;\": \"\\u22BF\",\n \"lsaquo;\": \"\\u2039\",\n \"Lscr;\": \"\\u2112\",\n \"lscr;\": \"\\uD835\\uDCC1\",\n \"Lsh;\": \"\\u21B0\",\n \"lsh;\": \"\\u21B0\",\n \"lsim;\": \"\\u2272\",\n \"lsime;\": \"\\u2A8D\",\n \"lsimg;\": \"\\u2A8F\",\n \"lsqb;\": \"\\u005B\",\n \"lsquo;\": \"\\u2018\",\n \"lsquor;\": \"\\u201A\",\n \"Lstrok;\": \"\\u0141\",\n \"lstrok;\": \"\\u0142\",\n \"LT;\": \"\\u003C\",\n \"LT\": \"\\u003C\",\n \"Lt;\": \"\\u226A\",\n \"lt;\": \"\\u003C\",\n \"lt\": \"\\u003C\",\n \"ltcc;\": \"\\u2AA6\",\n \"ltcir;\": \"\\u2A79\",\n \"ltdot;\": \"\\u22D6\",\n \"lthree;\": \"\\u22CB\",\n \"ltimes;\": \"\\u22C9\",\n \"ltlarr;\": \"\\u2976\",\n \"ltquest;\": \"\\u2A7B\",\n \"ltri;\": \"\\u25C3\",\n \"ltrie;\": \"\\u22B4\",\n \"ltrif;\": \"\\u25C2\",\n \"ltrPar;\": \"\\u2996\",\n \"lurdshar;\": \"\\u294A\",\n \"luruhar;\": \"\\u2966\",\n \"lvertneqq;\": \"\\u2268\\uFE00\",\n \"lvnE;\": \"\\u2268\\uFE00\",\n \"macr;\": \"\\u00AF\",\n \"macr\": \"\\u00AF\",\n \"male;\": \"\\u2642\",\n \"malt;\": \"\\u2720\",\n \"maltese;\": \"\\u2720\",\n \"Map;\": \"\\u2905\",\n \"map;\": \"\\u21A6\",\n \"mapsto;\": \"\\u21A6\",\n \"mapstodown;\": \"\\u21A7\",\n \"mapstoleft;\": \"\\u21A4\",\n \"mapstoup;\": \"\\u21A5\",\n \"marker;\": \"\\u25AE\",\n \"mcomma;\": \"\\u2A29\",\n \"Mcy;\": \"\\u041C\",\n \"mcy;\": \"\\u043C\",\n \"mdash;\": \"\\u2014\",\n \"mDDot;\": \"\\u223A\",\n \"measuredangle;\": \"\\u2221\",\n \"MediumSpace;\": \"\\u205F\",\n \"Mellintrf;\": \"\\u2133\",\n \"Mfr;\": \"\\uD835\\uDD10\",\n \"mfr;\": \"\\uD835\\uDD2A\",\n \"mho;\": \"\\u2127\",\n \"micro;\": \"\\u00B5\",\n \"micro\": \"\\u00B5\",\n \"mid;\": \"\\u2223\",\n \"midast;\": \"\\u002A\",\n \"midcir;\": \"\\u2AF0\",\n \"middot;\": \"\\u00B7\",\n \"middot\": \"\\u00B7\",\n \"minus;\": \"\\u2212\",\n \"minusb;\": \"\\u229F\",\n \"minusd;\": \"\\u2238\",\n \"minusdu;\": \"\\u2A2A\",\n \"MinusPlus;\": \"\\u2213\",\n \"mlcp;\": \"\\u2ADB\",\n \"mldr;\": \"\\u2026\",\n \"mnplus;\": \"\\u2213\",\n \"models;\": \"\\u22A7\",\n \"Mopf;\": \"\\uD835\\uDD44\",\n \"mopf;\": \"\\uD835\\uDD5E\",\n \"mp;\": \"\\u2213\",\n \"Mscr;\": \"\\u2133\",\n \"mscr;\": \"\\uD835\\uDCC2\",\n \"mstpos;\": \"\\u223E\",\n \"Mu;\": \"\\u039C\",\n \"mu;\": \"\\u03BC\",\n \"multimap;\": \"\\u22B8\",\n \"mumap;\": \"\\u22B8\",\n \"nabla;\": \"\\u2207\",\n \"Nacute;\": \"\\u0143\",\n \"nacute;\": \"\\u0144\",\n \"nang;\": \"\\u2220\\u20D2\",\n \"nap;\": \"\\u2249\",\n \"napE;\": \"\\u2A70\\u0338\",\n \"napid;\": \"\\u224B\\u0338\",\n \"napos;\": \"\\u0149\",\n \"napprox;\": \"\\u2249\",\n \"natur;\": \"\\u266E\",\n \"natural;\": \"\\u266E\",\n \"naturals;\": \"\\u2115\",\n \"nbsp;\": \"\\u00A0\",\n \"nbsp\": \"\\u00A0\",\n \"nbump;\": \"\\u224E\\u0338\",\n \"nbumpe;\": \"\\u224F\\u0338\",\n \"ncap;\": \"\\u2A43\",\n \"Ncaron;\": \"\\u0147\",\n \"ncaron;\": \"\\u0148\",\n \"Ncedil;\": \"\\u0145\",\n \"ncedil;\": \"\\u0146\",\n \"ncong;\": \"\\u2247\",\n \"ncongdot;\": \"\\u2A6D\\u0338\",\n \"ncup;\": \"\\u2A42\",\n \"Ncy;\": \"\\u041D\",\n \"ncy;\": \"\\u043D\",\n \"ndash;\": \"\\u2013\",\n \"ne;\": \"\\u2260\",\n \"nearhk;\": \"\\u2924\",\n \"neArr;\": \"\\u21D7\",\n \"nearr;\": \"\\u2197\",\n \"nearrow;\": \"\\u2197\",\n \"nedot;\": \"\\u2250\\u0338\",\n \"NegativeMediumSpace;\": \"\\u200B\",\n \"NegativeThickSpace;\": \"\\u200B\",\n \"NegativeThinSpace;\": \"\\u200B\",\n \"NegativeVeryThinSpace;\": \"\\u200B\",\n \"nequiv;\": \"\\u2262\",\n \"nesear;\": \"\\u2928\",\n \"nesim;\": \"\\u2242\\u0338\",\n \"NestedGreaterGreater;\": \"\\u226B\",\n \"NestedLessLess;\": \"\\u226A\",\n \"NewLine;\": \"\\u000A\",\n \"nexist;\": \"\\u2204\",\n \"nexists;\": \"\\u2204\",\n \"Nfr;\": \"\\uD835\\uDD11\",\n \"nfr;\": \"\\uD835\\uDD2B\",\n \"ngE;\": \"\\u2267\\u0338\",\n \"nge;\": \"\\u2271\",\n \"ngeq;\": \"\\u2271\",\n \"ngeqq;\": \"\\u2267\\u0338\",\n \"ngeqslant;\": \"\\u2A7E\\u0338\",\n \"nges;\": \"\\u2A7E\\u0338\",\n \"nGg;\": \"\\u22D9\\u0338\",\n \"ngsim;\": \"\\u2275\",\n \"nGt;\": \"\\u226B\\u20D2\",\n \"ngt;\": \"\\u226F\",\n \"ngtr;\": \"\\u226F\",\n \"nGtv;\": \"\\u226B\\u0338\",\n \"nhArr;\": \"\\u21CE\",\n \"nharr;\": \"\\u21AE\",\n \"nhpar;\": \"\\u2AF2\",\n \"ni;\": \"\\u220B\",\n \"nis;\": \"\\u22FC\",\n \"nisd;\": \"\\u22FA\",\n \"niv;\": \"\\u220B\",\n \"NJcy;\": \"\\u040A\",\n \"njcy;\": \"\\u045A\",\n \"nlArr;\": \"\\u21CD\",\n \"nlarr;\": \"\\u219A\",\n \"nldr;\": \"\\u2025\",\n \"nlE;\": \"\\u2266\\u0338\",\n \"nle;\": \"\\u2270\",\n \"nLeftarrow;\": \"\\u21CD\",\n \"nleftarrow;\": \"\\u219A\",\n \"nLeftrightarrow;\": \"\\u21CE\",\n \"nleftrightarrow;\": \"\\u21AE\",\n \"nleq;\": \"\\u2270\",\n \"nleqq;\": \"\\u2266\\u0338\",\n \"nleqslant;\": \"\\u2A7D\\u0338\",\n \"nles;\": \"\\u2A7D\\u0338\",\n \"nless;\": \"\\u226E\",\n \"nLl;\": \"\\u22D8\\u0338\",\n \"nlsim;\": \"\\u2274\",\n \"nLt;\": \"\\u226A\\u20D2\",\n \"nlt;\": \"\\u226E\",\n \"nltri;\": \"\\u22EA\",\n \"nltrie;\": \"\\u22EC\",\n \"nLtv;\": \"\\u226A\\u0338\",\n \"nmid;\": \"\\u2224\",\n \"NoBreak;\": \"\\u2060\",\n \"NonBreakingSpace;\": \"\\u00A0\",\n \"Nopf;\": \"\\u2115\",\n \"nopf;\": \"\\uD835\\uDD5F\",\n \"Not;\": \"\\u2AEC\",\n \"not;\": \"\\u00AC\",\n \"not\": \"\\u00AC\",\n \"NotCongruent;\": \"\\u2262\",\n \"NotCupCap;\": \"\\u226D\",\n \"NotDoubleVerticalBar;\": \"\\u2226\",\n \"NotElement;\": \"\\u2209\",\n \"NotEqual;\": \"\\u2260\",\n \"NotEqualTilde;\": \"\\u2242\\u0338\",\n \"NotExists;\": \"\\u2204\",\n \"NotGreater;\": \"\\u226F\",\n \"NotGreaterEqual;\": \"\\u2271\",\n \"NotGreaterFullEqual;\": \"\\u2267\\u0338\",\n \"NotGreaterGreater;\": \"\\u226B\\u0338\",\n \"NotGreaterLess;\": \"\\u2279\",\n \"NotGreaterSlantEqual;\": \"\\u2A7E\\u0338\",\n \"NotGreaterTilde;\": \"\\u2275\",\n \"NotHumpDownHump;\": \"\\u224E\\u0338\",\n \"NotHumpEqual;\": \"\\u224F\\u0338\",\n \"notin;\": \"\\u2209\",\n \"notindot;\": \"\\u22F5\\u0338\",\n \"notinE;\": \"\\u22F9\\u0338\",\n \"notinva;\": \"\\u2209\",\n \"notinvb;\": \"\\u22F7\",\n \"notinvc;\": \"\\u22F6\",\n \"NotLeftTriangle;\": \"\\u22EA\",\n \"NotLeftTriangleBar;\": \"\\u29CF\\u0338\",\n \"NotLeftTriangleEqual;\": \"\\u22EC\",\n \"NotLess;\": \"\\u226E\",\n \"NotLessEqual;\": \"\\u2270\",\n \"NotLessGreater;\": \"\\u2278\",\n \"NotLessLess;\": \"\\u226A\\u0338\",\n \"NotLessSlantEqual;\": \"\\u2A7D\\u0338\",\n \"NotLessTilde;\": \"\\u2274\",\n \"NotNestedGreaterGreater;\": \"\\u2AA2\\u0338\",\n \"NotNestedLessLess;\": \"\\u2AA1\\u0338\",\n \"notni;\": \"\\u220C\",\n \"notniva;\": \"\\u220C\",\n \"notnivb;\": \"\\u22FE\",\n \"notnivc;\": \"\\u22FD\",\n \"NotPrecedes;\": \"\\u2280\",\n \"NotPrecedesEqual;\": \"\\u2AAF\\u0338\",\n \"NotPrecedesSlantEqual;\": \"\\u22E0\",\n \"NotReverseElement;\": \"\\u220C\",\n \"NotRightTriangle;\": \"\\u22EB\",\n \"NotRightTriangleBar;\": \"\\u29D0\\u0338\",\n \"NotRightTriangleEqual;\": \"\\u22ED\",\n \"NotSquareSubset;\": \"\\u228F\\u0338\",\n \"NotSquareSubsetEqual;\": \"\\u22E2\",\n \"NotSquareSuperset;\": \"\\u2290\\u0338\",\n \"NotSquareSupersetEqual;\": \"\\u22E3\",\n \"NotSubset;\": \"\\u2282\\u20D2\",\n \"NotSubsetEqual;\": \"\\u2288\",\n \"NotSucceeds;\": \"\\u2281\",\n \"NotSucceedsEqual;\": \"\\u2AB0\\u0338\",\n \"NotSucceedsSlantEqual;\": \"\\u22E1\",\n \"NotSucceedsTilde;\": \"\\u227F\\u0338\",\n \"NotSuperset;\": \"\\u2283\\u20D2\",\n \"NotSupersetEqual;\": \"\\u2289\",\n \"NotTilde;\": \"\\u2241\",\n \"NotTildeEqual;\": \"\\u2244\",\n \"NotTildeFullEqual;\": \"\\u2247\",\n \"NotTildeTilde;\": \"\\u2249\",\n \"NotVerticalBar;\": \"\\u2224\",\n \"npar;\": \"\\u2226\",\n \"nparallel;\": \"\\u2226\",\n \"nparsl;\": \"\\u2AFD\\u20E5\",\n \"npart;\": \"\\u2202\\u0338\",\n \"npolint;\": \"\\u2A14\",\n \"npr;\": \"\\u2280\",\n \"nprcue;\": \"\\u22E0\",\n \"npre;\": \"\\u2AAF\\u0338\",\n \"nprec;\": \"\\u2280\",\n \"npreceq;\": \"\\u2AAF\\u0338\",\n \"nrArr;\": \"\\u21CF\",\n \"nrarr;\": \"\\u219B\",\n \"nrarrc;\": \"\\u2933\\u0338\",\n \"nrarrw;\": \"\\u219D\\u0338\",\n \"nRightarrow;\": \"\\u21CF\",\n \"nrightarrow;\": \"\\u219B\",\n \"nrtri;\": \"\\u22EB\",\n \"nrtrie;\": \"\\u22ED\",\n \"nsc;\": \"\\u2281\",\n \"nsccue;\": \"\\u22E1\",\n \"nsce;\": \"\\u2AB0\\u0338\",\n \"Nscr;\": \"\\uD835\\uDCA9\",\n \"nscr;\": \"\\uD835\\uDCC3\",\n \"nshortmid;\": \"\\u2224\",\n \"nshortparallel;\": \"\\u2226\",\n \"nsim;\": \"\\u2241\",\n \"nsime;\": \"\\u2244\",\n \"nsimeq;\": \"\\u2244\",\n \"nsmid;\": \"\\u2224\",\n \"nspar;\": \"\\u2226\",\n \"nsqsube;\": \"\\u22E2\",\n \"nsqsupe;\": \"\\u22E3\",\n \"nsub;\": \"\\u2284\",\n \"nsubE;\": \"\\u2AC5\\u0338\",\n \"nsube;\": \"\\u2288\",\n \"nsubset;\": \"\\u2282\\u20D2\",\n \"nsubseteq;\": \"\\u2288\",\n \"nsubseteqq;\": \"\\u2AC5\\u0338\",\n \"nsucc;\": \"\\u2281\",\n \"nsucceq;\": \"\\u2AB0\\u0338\",\n \"nsup;\": \"\\u2285\",\n \"nsupE;\": \"\\u2AC6\\u0338\",\n \"nsupe;\": \"\\u2289\",\n \"nsupset;\": \"\\u2283\\u20D2\",\n \"nsupseteq;\": \"\\u2289\",\n \"nsupseteqq;\": \"\\u2AC6\\u0338\",\n \"ntgl;\": \"\\u2279\",\n \"Ntilde;\": \"\\u00D1\",\n \"Ntilde\": \"\\u00D1\",\n \"ntilde;\": \"\\u00F1\",\n \"ntilde\": \"\\u00F1\",\n \"ntlg;\": \"\\u2278\",\n \"ntriangleleft;\": \"\\u22EA\",\n \"ntrianglelefteq;\": \"\\u22EC\",\n \"ntriangleright;\": \"\\u22EB\",\n \"ntrianglerighteq;\": \"\\u22ED\",\n \"Nu;\": \"\\u039D\",\n \"nu;\": \"\\u03BD\",\n \"num;\": \"\\u0023\",\n \"numero;\": \"\\u2116\",\n \"numsp;\": \"\\u2007\",\n \"nvap;\": \"\\u224D\\u20D2\",\n \"nVDash;\": \"\\u22AF\",\n \"nVdash;\": \"\\u22AE\",\n \"nvDash;\": \"\\u22AD\",\n \"nvdash;\": \"\\u22AC\",\n \"nvge;\": \"\\u2265\\u20D2\",\n \"nvgt;\": \"\\u003E\\u20D2\",\n \"nvHarr;\": \"\\u2904\",\n \"nvinfin;\": \"\\u29DE\",\n \"nvlArr;\": \"\\u2902\",\n \"nvle;\": \"\\u2264\\u20D2\",\n \"nvlt;\": \"\\u003C\\u20D2\",\n \"nvltrie;\": \"\\u22B4\\u20D2\",\n \"nvrArr;\": \"\\u2903\",\n \"nvrtrie;\": \"\\u22B5\\u20D2\",\n \"nvsim;\": \"\\u223C\\u20D2\",\n \"nwarhk;\": \"\\u2923\",\n \"nwArr;\": \"\\u21D6\",\n \"nwarr;\": \"\\u2196\",\n \"nwarrow;\": \"\\u2196\",\n \"nwnear;\": \"\\u2927\",\n \"Oacute;\": \"\\u00D3\",\n \"Oacute\": \"\\u00D3\",\n \"oacute;\": \"\\u00F3\",\n \"oacute\": \"\\u00F3\",\n \"oast;\": \"\\u229B\",\n \"ocir;\": \"\\u229A\",\n \"Ocirc;\": \"\\u00D4\",\n \"Ocirc\": \"\\u00D4\",\n \"ocirc;\": \"\\u00F4\",\n \"ocirc\": \"\\u00F4\",\n \"Ocy;\": \"\\u041E\",\n \"ocy;\": \"\\u043E\",\n \"odash;\": \"\\u229D\",\n \"Odblac;\": \"\\u0150\",\n \"odblac;\": \"\\u0151\",\n \"odiv;\": \"\\u2A38\",\n \"odot;\": \"\\u2299\",\n \"odsold;\": \"\\u29BC\",\n \"OElig;\": \"\\u0152\",\n \"oelig;\": \"\\u0153\",\n \"ofcir;\": \"\\u29BF\",\n \"Ofr;\": \"\\uD835\\uDD12\",\n \"ofr;\": \"\\uD835\\uDD2C\",\n \"ogon;\": \"\\u02DB\",\n \"Ograve;\": \"\\u00D2\",\n \"Ograve\": \"\\u00D2\",\n \"ograve;\": \"\\u00F2\",\n \"ograve\": \"\\u00F2\",\n \"ogt;\": \"\\u29C1\",\n \"ohbar;\": \"\\u29B5\",\n \"ohm;\": \"\\u03A9\",\n \"oint;\": \"\\u222E\",\n \"olarr;\": \"\\u21BA\",\n \"olcir;\": \"\\u29BE\",\n \"olcross;\": \"\\u29BB\",\n \"oline;\": \"\\u203E\",\n \"olt;\": \"\\u29C0\",\n \"Omacr;\": \"\\u014C\",\n \"omacr;\": \"\\u014D\",\n \"Omega;\": \"\\u03A9\",\n \"omega;\": \"\\u03C9\",\n \"Omicron;\": \"\\u039F\",\n \"omicron;\": \"\\u03BF\",\n \"omid;\": \"\\u29B6\",\n \"ominus;\": \"\\u2296\",\n \"Oopf;\": \"\\uD835\\uDD46\",\n \"oopf;\": \"\\uD835\\uDD60\",\n \"opar;\": \"\\u29B7\",\n \"OpenCurlyDoubleQuote;\": \"\\u201C\",\n \"OpenCurlyQuote;\": \"\\u2018\",\n \"operp;\": \"\\u29B9\",\n \"oplus;\": \"\\u2295\",\n \"Or;\": \"\\u2A54\",\n \"or;\": \"\\u2228\",\n \"orarr;\": \"\\u21BB\",\n \"ord;\": \"\\u2A5D\",\n \"order;\": \"\\u2134\",\n \"orderof;\": \"\\u2134\",\n \"ordf;\": \"\\u00AA\",\n \"ordf\": \"\\u00AA\",\n \"ordm;\": \"\\u00BA\",\n \"ordm\": \"\\u00BA\",\n \"origof;\": \"\\u22B6\",\n \"oror;\": \"\\u2A56\",\n \"orslope;\": \"\\u2A57\",\n \"orv;\": \"\\u2A5B\",\n \"oS;\": \"\\u24C8\",\n \"Oscr;\": \"\\uD835\\uDCAA\",\n \"oscr;\": \"\\u2134\",\n \"Oslash;\": \"\\u00D8\",\n \"Oslash\": \"\\u00D8\",\n \"oslash;\": \"\\u00F8\",\n \"oslash\": \"\\u00F8\",\n \"osol;\": \"\\u2298\",\n \"Otilde;\": \"\\u00D5\",\n \"Otilde\": \"\\u00D5\",\n \"otilde;\": \"\\u00F5\",\n \"otilde\": \"\\u00F5\",\n \"Otimes;\": \"\\u2A37\",\n \"otimes;\": \"\\u2297\",\n \"otimesas;\": \"\\u2A36\",\n \"Ouml;\": \"\\u00D6\",\n \"Ouml\": \"\\u00D6\",\n \"ouml;\": \"\\u00F6\",\n \"ouml\": \"\\u00F6\",\n \"ovbar;\": \"\\u233D\",\n \"OverBar;\": \"\\u203E\",\n \"OverBrace;\": \"\\u23DE\",\n \"OverBracket;\": \"\\u23B4\",\n \"OverParenthesis;\": \"\\u23DC\",\n \"par;\": \"\\u2225\",\n \"para;\": \"\\u00B6\",\n \"para\": \"\\u00B6\",\n \"parallel;\": \"\\u2225\",\n \"parsim;\": \"\\u2AF3\",\n \"parsl;\": \"\\u2AFD\",\n \"part;\": \"\\u2202\",\n \"PartialD;\": \"\\u2202\",\n \"Pcy;\": \"\\u041F\",\n \"pcy;\": \"\\u043F\",\n \"percnt;\": \"\\u0025\",\n \"period;\": \"\\u002E\",\n \"permil;\": \"\\u2030\",\n \"perp;\": \"\\u22A5\",\n \"pertenk;\": \"\\u2031\",\n \"Pfr;\": \"\\uD835\\uDD13\",\n \"pfr;\": \"\\uD835\\uDD2D\",\n \"Phi;\": \"\\u03A6\",\n \"phi;\": \"\\u03C6\",\n \"phiv;\": \"\\u03D5\",\n \"phmmat;\": \"\\u2133\",\n \"phone;\": \"\\u260E\",\n \"Pi;\": \"\\u03A0\",\n \"pi;\": \"\\u03C0\",\n \"pitchfork;\": \"\\u22D4\",\n \"piv;\": \"\\u03D6\",\n \"planck;\": \"\\u210F\",\n \"planckh;\": \"\\u210E\",\n \"plankv;\": \"\\u210F\",\n \"plus;\": \"\\u002B\",\n \"plusacir;\": \"\\u2A23\",\n \"plusb;\": \"\\u229E\",\n \"pluscir;\": \"\\u2A22\",\n \"plusdo;\": \"\\u2214\",\n \"plusdu;\": \"\\u2A25\",\n \"pluse;\": \"\\u2A72\",\n \"PlusMinus;\": \"\\u00B1\",\n \"plusmn;\": \"\\u00B1\",\n \"plusmn\": \"\\u00B1\",\n \"plussim;\": \"\\u2A26\",\n \"plustwo;\": \"\\u2A27\",\n \"pm;\": \"\\u00B1\",\n \"Poincareplane;\": \"\\u210C\",\n \"pointint;\": \"\\u2A15\",\n \"Popf;\": \"\\u2119\",\n \"popf;\": \"\\uD835\\uDD61\",\n \"pound;\": \"\\u00A3\",\n \"pound\": \"\\u00A3\",\n \"Pr;\": \"\\u2ABB\",\n \"pr;\": \"\\u227A\",\n \"prap;\": \"\\u2AB7\",\n \"prcue;\": \"\\u227C\",\n \"prE;\": \"\\u2AB3\",\n \"pre;\": \"\\u2AAF\",\n \"prec;\": \"\\u227A\",\n \"precapprox;\": \"\\u2AB7\",\n \"preccurlyeq;\": \"\\u227C\",\n \"Precedes;\": \"\\u227A\",\n \"PrecedesEqual;\": \"\\u2AAF\",\n \"PrecedesSlantEqual;\": \"\\u227C\",\n \"PrecedesTilde;\": \"\\u227E\",\n \"preceq;\": \"\\u2AAF\",\n \"precnapprox;\": \"\\u2AB9\",\n \"precneqq;\": \"\\u2AB5\",\n \"precnsim;\": \"\\u22E8\",\n \"precsim;\": \"\\u227E\",\n \"Prime;\": \"\\u2033\",\n \"prime;\": \"\\u2032\",\n \"primes;\": \"\\u2119\",\n \"prnap;\": \"\\u2AB9\",\n \"prnE;\": \"\\u2AB5\",\n \"prnsim;\": \"\\u22E8\",\n \"prod;\": \"\\u220F\",\n \"Product;\": \"\\u220F\",\n \"profalar;\": \"\\u232E\",\n \"profline;\": \"\\u2312\",\n \"profsurf;\": \"\\u2313\",\n \"prop;\": \"\\u221D\",\n \"Proportion;\": \"\\u2237\",\n \"Proportional;\": \"\\u221D\",\n \"propto;\": \"\\u221D\",\n \"prsim;\": \"\\u227E\",\n \"prurel;\": \"\\u22B0\",\n \"Pscr;\": \"\\uD835\\uDCAB\",\n \"pscr;\": \"\\uD835\\uDCC5\",\n \"Psi;\": \"\\u03A8\",\n \"psi;\": \"\\u03C8\",\n \"puncsp;\": \"\\u2008\",\n \"Qfr;\": \"\\uD835\\uDD14\",\n \"qfr;\": \"\\uD835\\uDD2E\",\n \"qint;\": \"\\u2A0C\",\n \"Qopf;\": \"\\u211A\",\n \"qopf;\": \"\\uD835\\uDD62\",\n \"qprime;\": \"\\u2057\",\n \"Qscr;\": \"\\uD835\\uDCAC\",\n \"qscr;\": \"\\uD835\\uDCC6\",\n \"quaternions;\": \"\\u210D\",\n \"quatint;\": \"\\u2A16\",\n \"quest;\": \"\\u003F\",\n \"questeq;\": \"\\u225F\",\n \"QUOT;\": \"\\u0022\",\n \"QUOT\": \"\\u0022\",\n \"quot;\": \"\\u0022\",\n \"quot\": \"\\u0022\",\n \"rAarr;\": \"\\u21DB\",\n \"race;\": \"\\u223D\\u0331\",\n \"Racute;\": \"\\u0154\",\n \"racute;\": \"\\u0155\",\n \"radic;\": \"\\u221A\",\n \"raemptyv;\": \"\\u29B3\",\n \"Rang;\": \"\\u27EB\",\n \"rang;\": \"\\u27E9\",\n \"rangd;\": \"\\u2992\",\n \"range;\": \"\\u29A5\",\n \"rangle;\": \"\\u27E9\",\n \"raquo;\": \"\\u00BB\",\n \"raquo\": \"\\u00BB\",\n \"Rarr;\": \"\\u21A0\",\n \"rArr;\": \"\\u21D2\",\n \"rarr;\": \"\\u2192\",\n \"rarrap;\": \"\\u2975\",\n \"rarrb;\": \"\\u21E5\",\n \"rarrbfs;\": \"\\u2920\",\n \"rarrc;\": \"\\u2933\",\n \"rarrfs;\": \"\\u291E\",\n \"rarrhk;\": \"\\u21AA\",\n \"rarrlp;\": \"\\u21AC\",\n \"rarrpl;\": \"\\u2945\",\n \"rarrsim;\": \"\\u2974\",\n \"Rarrtl;\": \"\\u2916\",\n \"rarrtl;\": \"\\u21A3\",\n \"rarrw;\": \"\\u219D\",\n \"rAtail;\": \"\\u291C\",\n \"ratail;\": \"\\u291A\",\n \"ratio;\": \"\\u2236\",\n \"rationals;\": \"\\u211A\",\n \"RBarr;\": \"\\u2910\",\n \"rBarr;\": \"\\u290F\",\n \"rbarr;\": \"\\u290D\",\n \"rbbrk;\": \"\\u2773\",\n \"rbrace;\": \"\\u007D\",\n \"rbrack;\": \"\\u005D\",\n \"rbrke;\": \"\\u298C\",\n \"rbrksld;\": \"\\u298E\",\n \"rbrkslu;\": \"\\u2990\",\n \"Rcaron;\": \"\\u0158\",\n \"rcaron;\": \"\\u0159\",\n \"Rcedil;\": \"\\u0156\",\n \"rcedil;\": \"\\u0157\",\n \"rceil;\": \"\\u2309\",\n \"rcub;\": \"\\u007D\",\n \"Rcy;\": \"\\u0420\",\n \"rcy;\": \"\\u0440\",\n \"rdca;\": \"\\u2937\",\n \"rdldhar;\": \"\\u2969\",\n \"rdquo;\": \"\\u201D\",\n \"rdquor;\": \"\\u201D\",\n \"rdsh;\": \"\\u21B3\",\n \"Re;\": \"\\u211C\",\n \"real;\": \"\\u211C\",\n \"realine;\": \"\\u211B\",\n \"realpart;\": \"\\u211C\",\n \"reals;\": \"\\u211D\",\n \"rect;\": \"\\u25AD\",\n \"REG;\": \"\\u00AE\",\n \"REG\": \"\\u00AE\",\n \"reg;\": \"\\u00AE\",\n \"reg\": \"\\u00AE\",\n \"ReverseElement;\": \"\\u220B\",\n \"ReverseEquilibrium;\": \"\\u21CB\",\n \"ReverseUpEquilibrium;\": \"\\u296F\",\n \"rfisht;\": \"\\u297D\",\n \"rfloor;\": \"\\u230B\",\n \"Rfr;\": \"\\u211C\",\n \"rfr;\": \"\\uD835\\uDD2F\",\n \"rHar;\": \"\\u2964\",\n \"rhard;\": \"\\u21C1\",\n \"rharu;\": \"\\u21C0\",\n \"rharul;\": \"\\u296C\",\n \"Rho;\": \"\\u03A1\",\n \"rho;\": \"\\u03C1\",\n \"rhov;\": \"\\u03F1\",\n \"RightAngleBracket;\": \"\\u27E9\",\n \"RightArrow;\": \"\\u2192\",\n \"Rightarrow;\": \"\\u21D2\",\n \"rightarrow;\": \"\\u2192\",\n \"RightArrowBar;\": \"\\u21E5\",\n \"RightArrowLeftArrow;\": \"\\u21C4\",\n \"rightarrowtail;\": \"\\u21A3\",\n \"RightCeiling;\": \"\\u2309\",\n \"RightDoubleBracket;\": \"\\u27E7\",\n \"RightDownTeeVector;\": \"\\u295D\",\n \"RightDownVector;\": \"\\u21C2\",\n \"RightDownVectorBar;\": \"\\u2955\",\n \"RightFloor;\": \"\\u230B\",\n \"rightharpoondown;\": \"\\u21C1\",\n \"rightharpoonup;\": \"\\u21C0\",\n \"rightleftarrows;\": \"\\u21C4\",\n \"rightleftharpoons;\": \"\\u21CC\",\n \"rightrightarrows;\": \"\\u21C9\",\n \"rightsquigarrow;\": \"\\u219D\",\n \"RightTee;\": \"\\u22A2\",\n \"RightTeeArrow;\": \"\\u21A6\",\n \"RightTeeVector;\": \"\\u295B\",\n \"rightthreetimes;\": \"\\u22CC\",\n \"RightTriangle;\": \"\\u22B3\",\n \"RightTriangleBar;\": \"\\u29D0\",\n \"RightTriangleEqual;\": \"\\u22B5\",\n \"RightUpDownVector;\": \"\\u294F\",\n \"RightUpTeeVector;\": \"\\u295C\",\n \"RightUpVector;\": \"\\u21BE\",\n \"RightUpVectorBar;\": \"\\u2954\",\n \"RightVector;\": \"\\u21C0\",\n \"RightVectorBar;\": \"\\u2953\",\n \"ring;\": \"\\u02DA\",\n \"risingdotseq;\": \"\\u2253\",\n \"rlarr;\": \"\\u21C4\",\n \"rlhar;\": \"\\u21CC\",\n \"rlm;\": \"\\u200F\",\n \"rmoust;\": \"\\u23B1\",\n \"rmoustache;\": \"\\u23B1\",\n \"rnmid;\": \"\\u2AEE\",\n \"roang;\": \"\\u27ED\",\n \"roarr;\": \"\\u21FE\",\n \"robrk;\": \"\\u27E7\",\n \"ropar;\": \"\\u2986\",\n \"Ropf;\": \"\\u211D\",\n \"ropf;\": \"\\uD835\\uDD63\",\n \"roplus;\": \"\\u2A2E\",\n \"rotimes;\": \"\\u2A35\",\n \"RoundImplies;\": \"\\u2970\",\n \"rpar;\": \"\\u0029\",\n \"rpargt;\": \"\\u2994\",\n \"rppolint;\": \"\\u2A12\",\n \"rrarr;\": \"\\u21C9\",\n \"Rrightarrow;\": \"\\u21DB\",\n \"rsaquo;\": \"\\u203A\",\n \"Rscr;\": \"\\u211B\",\n \"rscr;\": \"\\uD835\\uDCC7\",\n \"Rsh;\": \"\\u21B1\",\n \"rsh;\": \"\\u21B1\",\n \"rsqb;\": \"\\u005D\",\n \"rsquo;\": \"\\u2019\",\n \"rsquor;\": \"\\u2019\",\n \"rthree;\": \"\\u22CC\",\n \"rtimes;\": \"\\u22CA\",\n \"rtri;\": \"\\u25B9\",\n \"rtrie;\": \"\\u22B5\",\n \"rtrif;\": \"\\u25B8\",\n \"rtriltri;\": \"\\u29CE\",\n \"RuleDelayed;\": \"\\u29F4\",\n \"ruluhar;\": \"\\u2968\",\n \"rx;\": \"\\u211E\",\n \"Sacute;\": \"\\u015A\",\n \"sacute;\": \"\\u015B\",\n \"sbquo;\": \"\\u201A\",\n \"Sc;\": \"\\u2ABC\",\n \"sc;\": \"\\u227B\",\n \"scap;\": \"\\u2AB8\",\n \"Scaron;\": \"\\u0160\",\n \"scaron;\": \"\\u0161\",\n \"sccue;\": \"\\u227D\",\n \"scE;\": \"\\u2AB4\",\n \"sce;\": \"\\u2AB0\",\n \"Scedil;\": \"\\u015E\",\n \"scedil;\": \"\\u015F\",\n \"Scirc;\": \"\\u015C\",\n \"scirc;\": \"\\u015D\",\n \"scnap;\": \"\\u2ABA\",\n \"scnE;\": \"\\u2AB6\",\n \"scnsim;\": \"\\u22E9\",\n \"scpolint;\": \"\\u2A13\",\n \"scsim;\": \"\\u227F\",\n \"Scy;\": \"\\u0421\",\n \"scy;\": \"\\u0441\",\n \"sdot;\": \"\\u22C5\",\n \"sdotb;\": \"\\u22A1\",\n \"sdote;\": \"\\u2A66\",\n \"searhk;\": \"\\u2925\",\n \"seArr;\": \"\\u21D8\",\n \"searr;\": \"\\u2198\",\n \"searrow;\": \"\\u2198\",\n \"sect;\": \"\\u00A7\",\n \"sect\": \"\\u00A7\",\n \"semi;\": \"\\u003B\",\n \"seswar;\": \"\\u2929\",\n \"setminus;\": \"\\u2216\",\n \"setmn;\": \"\\u2216\",\n \"sext;\": \"\\u2736\",\n \"Sfr;\": \"\\uD835\\uDD16\",\n \"sfr;\": \"\\uD835\\uDD30\",\n \"sfrown;\": \"\\u2322\",\n \"sharp;\": \"\\u266F\",\n \"SHCHcy;\": \"\\u0429\",\n \"shchcy;\": \"\\u0449\",\n \"SHcy;\": \"\\u0428\",\n \"shcy;\": \"\\u0448\",\n \"ShortDownArrow;\": \"\\u2193\",\n \"ShortLeftArrow;\": \"\\u2190\",\n \"shortmid;\": \"\\u2223\",\n \"shortparallel;\": \"\\u2225\",\n \"ShortRightArrow;\": \"\\u2192\",\n \"ShortUpArrow;\": \"\\u2191\",\n \"shy;\": \"\\u00AD\",\n \"shy\": \"\\u00AD\",\n \"Sigma;\": \"\\u03A3\",\n \"sigma;\": \"\\u03C3\",\n \"sigmaf;\": \"\\u03C2\",\n \"sigmav;\": \"\\u03C2\",\n \"sim;\": \"\\u223C\",\n \"simdot;\": \"\\u2A6A\",\n \"sime;\": \"\\u2243\",\n \"simeq;\": \"\\u2243\",\n \"simg;\": \"\\u2A9E\",\n \"simgE;\": \"\\u2AA0\",\n \"siml;\": \"\\u2A9D\",\n \"simlE;\": \"\\u2A9F\",\n \"simne;\": \"\\u2246\",\n \"simplus;\": \"\\u2A24\",\n \"simrarr;\": \"\\u2972\",\n \"slarr;\": \"\\u2190\",\n \"SmallCircle;\": \"\\u2218\",\n \"smallsetminus;\": \"\\u2216\",\n \"smashp;\": \"\\u2A33\",\n \"smeparsl;\": \"\\u29E4\",\n \"smid;\": \"\\u2223\",\n \"smile;\": \"\\u2323\",\n \"smt;\": \"\\u2AAA\",\n \"smte;\": \"\\u2AAC\",\n \"smtes;\": \"\\u2AAC\\uFE00\",\n \"SOFTcy;\": \"\\u042C\",\n \"softcy;\": \"\\u044C\",\n \"sol;\": \"\\u002F\",\n \"solb;\": \"\\u29C4\",\n \"solbar;\": \"\\u233F\",\n \"Sopf;\": \"\\uD835\\uDD4A\",\n \"sopf;\": \"\\uD835\\uDD64\",\n \"spades;\": \"\\u2660\",\n \"spadesuit;\": \"\\u2660\",\n \"spar;\": \"\\u2225\",\n \"sqcap;\": \"\\u2293\",\n \"sqcaps;\": \"\\u2293\\uFE00\",\n \"sqcup;\": \"\\u2294\",\n \"sqcups;\": \"\\u2294\\uFE00\",\n \"Sqrt;\": \"\\u221A\",\n \"sqsub;\": \"\\u228F\",\n \"sqsube;\": \"\\u2291\",\n \"sqsubset;\": \"\\u228F\",\n \"sqsubseteq;\": \"\\u2291\",\n \"sqsup;\": \"\\u2290\",\n \"sqsupe;\": \"\\u2292\",\n \"sqsupset;\": \"\\u2290\",\n \"sqsupseteq;\": \"\\u2292\",\n \"squ;\": \"\\u25A1\",\n \"Square;\": \"\\u25A1\",\n \"square;\": \"\\u25A1\",\n \"SquareIntersection;\": \"\\u2293\",\n \"SquareSubset;\": \"\\u228F\",\n \"SquareSubsetEqual;\": \"\\u2291\",\n \"SquareSuperset;\": \"\\u2290\",\n \"SquareSupersetEqual;\": \"\\u2292\",\n \"SquareUnion;\": \"\\u2294\",\n \"squarf;\": \"\\u25AA\",\n \"squf;\": \"\\u25AA\",\n \"srarr;\": \"\\u2192\",\n \"Sscr;\": \"\\uD835\\uDCAE\",\n \"sscr;\": \"\\uD835\\uDCC8\",\n \"ssetmn;\": \"\\u2216\",\n \"ssmile;\": \"\\u2323\",\n \"sstarf;\": \"\\u22C6\",\n \"Star;\": \"\\u22C6\",\n \"star;\": \"\\u2606\",\n \"starf;\": \"\\u2605\",\n \"straightepsilon;\": \"\\u03F5\",\n \"straightphi;\": \"\\u03D5\",\n \"strns;\": \"\\u00AF\",\n \"Sub;\": \"\\u22D0\",\n \"sub;\": \"\\u2282\",\n \"subdot;\": \"\\u2ABD\",\n \"subE;\": \"\\u2AC5\",\n \"sube;\": \"\\u2286\",\n \"subedot;\": \"\\u2AC3\",\n \"submult;\": \"\\u2AC1\",\n \"subnE;\": \"\\u2ACB\",\n \"subne;\": \"\\u228A\",\n \"subplus;\": \"\\u2ABF\",\n \"subrarr;\": \"\\u2979\",\n \"Subset;\": \"\\u22D0\",\n \"subset;\": \"\\u2282\",\n \"subseteq;\": \"\\u2286\",\n \"subseteqq;\": \"\\u2AC5\",\n \"SubsetEqual;\": \"\\u2286\",\n \"subsetneq;\": \"\\u228A\",\n \"subsetneqq;\": \"\\u2ACB\",\n \"subsim;\": \"\\u2AC7\",\n \"subsub;\": \"\\u2AD5\",\n \"subsup;\": \"\\u2AD3\",\n \"succ;\": \"\\u227B\",\n \"succapprox;\": \"\\u2AB8\",\n \"succcurlyeq;\": \"\\u227D\",\n \"Succeeds;\": \"\\u227B\",\n \"SucceedsEqual;\": \"\\u2AB0\",\n \"SucceedsSlantEqual;\": \"\\u227D\",\n \"SucceedsTilde;\": \"\\u227F\",\n \"succeq;\": \"\\u2AB0\",\n \"succnapprox;\": \"\\u2ABA\",\n \"succneqq;\": \"\\u2AB6\",\n \"succnsim;\": \"\\u22E9\",\n \"succsim;\": \"\\u227F\",\n \"SuchThat;\": \"\\u220B\",\n \"Sum;\": \"\\u2211\",\n \"sum;\": \"\\u2211\",\n \"sung;\": \"\\u266A\",\n \"Sup;\": \"\\u22D1\",\n \"sup;\": \"\\u2283\",\n \"sup1;\": \"\\u00B9\",\n \"sup1\": \"\\u00B9\",\n \"sup2;\": \"\\u00B2\",\n \"sup2\": \"\\u00B2\",\n \"sup3;\": \"\\u00B3\",\n \"sup3\": \"\\u00B3\",\n \"supdot;\": \"\\u2ABE\",\n \"supdsub;\": \"\\u2AD8\",\n \"supE;\": \"\\u2AC6\",\n \"supe;\": \"\\u2287\",\n \"supedot;\": \"\\u2AC4\",\n \"Superset;\": \"\\u2283\",\n \"SupersetEqual;\": \"\\u2287\",\n \"suphsol;\": \"\\u27C9\",\n \"suphsub;\": \"\\u2AD7\",\n \"suplarr;\": \"\\u297B\",\n \"supmult;\": \"\\u2AC2\",\n \"supnE;\": \"\\u2ACC\",\n \"supne;\": \"\\u228B\",\n \"supplus;\": \"\\u2AC0\",\n \"Supset;\": \"\\u22D1\",\n \"supset;\": \"\\u2283\",\n \"supseteq;\": \"\\u2287\",\n \"supseteqq;\": \"\\u2AC6\",\n \"supsetneq;\": \"\\u228B\",\n \"supsetneqq;\": \"\\u2ACC\",\n \"supsim;\": \"\\u2AC8\",\n \"supsub;\": \"\\u2AD4\",\n \"supsup;\": \"\\u2AD6\",\n \"swarhk;\": \"\\u2926\",\n \"swArr;\": \"\\u21D9\",\n \"swarr;\": \"\\u2199\",\n \"swarrow;\": \"\\u2199\",\n \"swnwar;\": \"\\u292A\",\n \"szlig;\": \"\\u00DF\",\n \"szlig\": \"\\u00DF\",\n \"Tab;\": \"\\u0009\",\n \"target;\": \"\\u2316\",\n \"Tau;\": \"\\u03A4\",\n \"tau;\": \"\\u03C4\",\n \"tbrk;\": \"\\u23B4\",\n \"Tcaron;\": \"\\u0164\",\n \"tcaron;\": \"\\u0165\",\n \"Tcedil;\": \"\\u0162\",\n \"tcedil;\": \"\\u0163\",\n \"Tcy;\": \"\\u0422\",\n \"tcy;\": \"\\u0442\",\n \"tdot;\": \"\\u20DB\",\n \"telrec;\": \"\\u2315\",\n \"Tfr;\": \"\\uD835\\uDD17\",\n \"tfr;\": \"\\uD835\\uDD31\",\n \"there4;\": \"\\u2234\",\n \"Therefore;\": \"\\u2234\",\n \"therefore;\": \"\\u2234\",\n \"Theta;\": \"\\u0398\",\n \"theta;\": \"\\u03B8\",\n \"thetasym;\": \"\\u03D1\",\n \"thetav;\": \"\\u03D1\",\n \"thickapprox;\": \"\\u2248\",\n \"thicksim;\": \"\\u223C\",\n \"ThickSpace;\": \"\\u205F\\u200A\",\n \"thinsp;\": \"\\u2009\",\n \"ThinSpace;\": \"\\u2009\",\n \"thkap;\": \"\\u2248\",\n \"thksim;\": \"\\u223C\",\n \"THORN;\": \"\\u00DE\",\n \"THORN\": \"\\u00DE\",\n \"thorn;\": \"\\u00FE\",\n \"thorn\": \"\\u00FE\",\n \"Tilde;\": \"\\u223C\",\n \"tilde;\": \"\\u02DC\",\n \"TildeEqual;\": \"\\u2243\",\n \"TildeFullEqual;\": \"\\u2245\",\n \"TildeTilde;\": \"\\u2248\",\n \"times;\": \"\\u00D7\",\n \"times\": \"\\u00D7\",\n \"timesb;\": \"\\u22A0\",\n \"timesbar;\": \"\\u2A31\",\n \"timesd;\": \"\\u2A30\",\n \"tint;\": \"\\u222D\",\n \"toea;\": \"\\u2928\",\n \"top;\": \"\\u22A4\",\n \"topbot;\": \"\\u2336\",\n \"topcir;\": \"\\u2AF1\",\n \"Topf;\": \"\\uD835\\uDD4B\",\n \"topf;\": \"\\uD835\\uDD65\",\n \"topfork;\": \"\\u2ADA\",\n \"tosa;\": \"\\u2929\",\n \"tprime;\": \"\\u2034\",\n \"TRADE;\": \"\\u2122\",\n \"trade;\": \"\\u2122\",\n \"triangle;\": \"\\u25B5\",\n \"triangledown;\": \"\\u25BF\",\n \"triangleleft;\": \"\\u25C3\",\n \"trianglelefteq;\": \"\\u22B4\",\n \"triangleq;\": \"\\u225C\",\n \"triangleright;\": \"\\u25B9\",\n \"trianglerighteq;\": \"\\u22B5\",\n \"tridot;\": \"\\u25EC\",\n \"trie;\": \"\\u225C\",\n \"triminus;\": \"\\u2A3A\",\n \"TripleDot;\": \"\\u20DB\",\n \"triplus;\": \"\\u2A39\",\n \"trisb;\": \"\\u29CD\",\n \"tritime;\": \"\\u2A3B\",\n \"trpezium;\": \"\\u23E2\",\n \"Tscr;\": \"\\uD835\\uDCAF\",\n \"tscr;\": \"\\uD835\\uDCC9\",\n \"TScy;\": \"\\u0426\",\n \"tscy;\": \"\\u0446\",\n \"TSHcy;\": \"\\u040B\",\n \"tshcy;\": \"\\u045B\",\n \"Tstrok;\": \"\\u0166\",\n \"tstrok;\": \"\\u0167\",\n \"twixt;\": \"\\u226C\",\n \"twoheadleftarrow;\": \"\\u219E\",\n \"twoheadrightarrow;\": \"\\u21A0\",\n \"Uacute;\": \"\\u00DA\",\n \"Uacute\": \"\\u00DA\",\n \"uacute;\": \"\\u00FA\",\n \"uacute\": \"\\u00FA\",\n \"Uarr;\": \"\\u219F\",\n \"uArr;\": \"\\u21D1\",\n \"uarr;\": \"\\u2191\",\n \"Uarrocir;\": \"\\u2949\",\n \"Ubrcy;\": \"\\u040E\",\n \"ubrcy;\": \"\\u045E\",\n \"Ubreve;\": \"\\u016C\",\n \"ubreve;\": \"\\u016D\",\n \"Ucirc;\": \"\\u00DB\",\n \"Ucirc\": \"\\u00DB\",\n \"ucirc;\": \"\\u00FB\",\n \"ucirc\": \"\\u00FB\",\n \"Ucy;\": \"\\u0423\",\n \"ucy;\": \"\\u0443\",\n \"udarr;\": \"\\u21C5\",\n \"Udblac;\": \"\\u0170\",\n \"udblac;\": \"\\u0171\",\n \"udhar;\": \"\\u296E\",\n \"ufisht;\": \"\\u297E\",\n \"Ufr;\": \"\\uD835\\uDD18\",\n \"ufr;\": \"\\uD835\\uDD32\",\n \"Ugrave;\": \"\\u00D9\",\n \"Ugrave\": \"\\u00D9\",\n \"ugrave;\": \"\\u00F9\",\n \"ugrave\": \"\\u00F9\",\n \"uHar;\": \"\\u2963\",\n \"uharl;\": \"\\u21BF\",\n \"uharr;\": \"\\u21BE\",\n \"uhblk;\": \"\\u2580\",\n \"ulcorn;\": \"\\u231C\",\n \"ulcorner;\": \"\\u231C\",\n \"ulcrop;\": \"\\u230F\",\n \"ultri;\": \"\\u25F8\",\n \"Umacr;\": \"\\u016A\",\n \"umacr;\": \"\\u016B\",\n \"uml;\": \"\\u00A8\",\n \"uml\": \"\\u00A8\",\n \"UnderBar;\": \"\\u005F\",\n \"UnderBrace;\": \"\\u23DF\",\n \"UnderBracket;\": \"\\u23B5\",\n \"UnderParenthesis;\": \"\\u23DD\",\n \"Union;\": \"\\u22C3\",\n \"UnionPlus;\": \"\\u228E\",\n \"Uogon;\": \"\\u0172\",\n \"uogon;\": \"\\u0173\",\n \"Uopf;\": \"\\uD835\\uDD4C\",\n \"uopf;\": \"\\uD835\\uDD66\",\n \"UpArrow;\": \"\\u2191\",\n \"Uparrow;\": \"\\u21D1\",\n \"uparrow;\": \"\\u2191\",\n \"UpArrowBar;\": \"\\u2912\",\n \"UpArrowDownArrow;\": \"\\u21C5\",\n \"UpDownArrow;\": \"\\u2195\",\n \"Updownarrow;\": \"\\u21D5\",\n \"updownarrow;\": \"\\u2195\",\n \"UpEquilibrium;\": \"\\u296E\",\n \"upharpoonleft;\": \"\\u21BF\",\n \"upharpoonright;\": \"\\u21BE\",\n \"uplus;\": \"\\u228E\",\n \"UpperLeftArrow;\": \"\\u2196\",\n \"UpperRightArrow;\": \"\\u2197\",\n \"Upsi;\": \"\\u03D2\",\n \"upsi;\": \"\\u03C5\",\n \"upsih;\": \"\\u03D2\",\n \"Upsilon;\": \"\\u03A5\",\n \"upsilon;\": \"\\u03C5\",\n \"UpTee;\": \"\\u22A5\",\n \"UpTeeArrow;\": \"\\u21A5\",\n \"upuparrows;\": \"\\u21C8\",\n \"urcorn;\": \"\\u231D\",\n \"urcorner;\": \"\\u231D\",\n \"urcrop;\": \"\\u230E\",\n \"Uring;\": \"\\u016E\",\n \"uring;\": \"\\u016F\",\n \"urtri;\": \"\\u25F9\",\n \"Uscr;\": \"\\uD835\\uDCB0\",\n \"uscr;\": \"\\uD835\\uDCCA\",\n \"utdot;\": \"\\u22F0\",\n \"Utilde;\": \"\\u0168\",\n \"utilde;\": \"\\u0169\",\n \"utri;\": \"\\u25B5\",\n \"utrif;\": \"\\u25B4\",\n \"uuarr;\": \"\\u21C8\",\n \"Uuml;\": \"\\u00DC\",\n \"Uuml\": \"\\u00DC\",\n \"uuml;\": \"\\u00FC\",\n \"uuml\": \"\\u00FC\",\n \"uwangle;\": \"\\u29A7\",\n \"vangrt;\": \"\\u299C\",\n \"varepsilon;\": \"\\u03F5\",\n \"varkappa;\": \"\\u03F0\",\n \"varnothing;\": \"\\u2205\",\n \"varphi;\": \"\\u03D5\",\n \"varpi;\": \"\\u03D6\",\n \"varpropto;\": \"\\u221D\",\n \"vArr;\": \"\\u21D5\",\n \"varr;\": \"\\u2195\",\n \"varrho;\": \"\\u03F1\",\n \"varsigma;\": \"\\u03C2\",\n \"varsubsetneq;\": \"\\u228A\\uFE00\",\n \"varsubsetneqq;\": \"\\u2ACB\\uFE00\",\n \"varsupsetneq;\": \"\\u228B\\uFE00\",\n \"varsupsetneqq;\": \"\\u2ACC\\uFE00\",\n \"vartheta;\": \"\\u03D1\",\n \"vartriangleleft;\": \"\\u22B2\",\n \"vartriangleright;\": \"\\u22B3\",\n \"Vbar;\": \"\\u2AEB\",\n \"vBar;\": \"\\u2AE8\",\n \"vBarv;\": \"\\u2AE9\",\n \"Vcy;\": \"\\u0412\",\n \"vcy;\": \"\\u0432\",\n \"VDash;\": \"\\u22AB\",\n \"Vdash;\": \"\\u22A9\",\n \"vDash;\": \"\\u22A8\",\n \"vdash;\": \"\\u22A2\",\n \"Vdashl;\": \"\\u2AE6\",\n \"Vee;\": \"\\u22C1\",\n \"vee;\": \"\\u2228\",\n \"veebar;\": \"\\u22BB\",\n \"veeeq;\": \"\\u225A\",\n \"vellip;\": \"\\u22EE\",\n \"Verbar;\": \"\\u2016\",\n \"verbar;\": \"\\u007C\",\n \"Vert;\": \"\\u2016\",\n \"vert;\": \"\\u007C\",\n \"VerticalBar;\": \"\\u2223\",\n \"VerticalLine;\": \"\\u007C\",\n \"VerticalSeparator;\": \"\\u2758\",\n \"VerticalTilde;\": \"\\u2240\",\n \"VeryThinSpace;\": \"\\u200A\",\n \"Vfr;\": \"\\uD835\\uDD19\",\n \"vfr;\": \"\\uD835\\uDD33\",\n \"vltri;\": \"\\u22B2\",\n \"vnsub;\": \"\\u2282\\u20D2\",\n \"vnsup;\": \"\\u2283\\u20D2\",\n \"Vopf;\": \"\\uD835\\uDD4D\",\n \"vopf;\": \"\\uD835\\uDD67\",\n \"vprop;\": \"\\u221D\",\n \"vrtri;\": \"\\u22B3\",\n \"Vscr;\": \"\\uD835\\uDCB1\",\n \"vscr;\": \"\\uD835\\uDCCB\",\n \"vsubnE;\": \"\\u2ACB\\uFE00\",\n \"vsubne;\": \"\\u228A\\uFE00\",\n \"vsupnE;\": \"\\u2ACC\\uFE00\",\n \"vsupne;\": \"\\u228B\\uFE00\",\n \"Vvdash;\": \"\\u22AA\",\n \"vzigzag;\": \"\\u299A\",\n \"Wcirc;\": \"\\u0174\",\n \"wcirc;\": \"\\u0175\",\n \"wedbar;\": \"\\u2A5F\",\n \"Wedge;\": \"\\u22C0\",\n \"wedge;\": \"\\u2227\",\n \"wedgeq;\": \"\\u2259\",\n \"weierp;\": \"\\u2118\",\n \"Wfr;\": \"\\uD835\\uDD1A\",\n \"wfr;\": \"\\uD835\\uDD34\",\n \"Wopf;\": \"\\uD835\\uDD4E\",\n \"wopf;\": \"\\uD835\\uDD68\",\n \"wp;\": \"\\u2118\",\n \"wr;\": \"\\u2240\",\n \"wreath;\": \"\\u2240\",\n \"Wscr;\": \"\\uD835\\uDCB2\",\n \"wscr;\": \"\\uD835\\uDCCC\",\n \"xcap;\": \"\\u22C2\",\n \"xcirc;\": \"\\u25EF\",\n \"xcup;\": \"\\u22C3\",\n \"xdtri;\": \"\\u25BD\",\n \"Xfr;\": \"\\uD835\\uDD1B\",\n \"xfr;\": \"\\uD835\\uDD35\",\n \"xhArr;\": \"\\u27FA\",\n \"xharr;\": \"\\u27F7\",\n \"Xi;\": \"\\u039E\",\n \"xi;\": \"\\u03BE\",\n \"xlArr;\": \"\\u27F8\",\n \"xlarr;\": \"\\u27F5\",\n \"xmap;\": \"\\u27FC\",\n \"xnis;\": \"\\u22FB\",\n \"xodot;\": \"\\u2A00\",\n \"Xopf;\": \"\\uD835\\uDD4F\",\n \"xopf;\": \"\\uD835\\uDD69\",\n \"xoplus;\": \"\\u2A01\",\n \"xotime;\": \"\\u2A02\",\n \"xrArr;\": \"\\u27F9\",\n \"xrarr;\": \"\\u27F6\",\n \"Xscr;\": \"\\uD835\\uDCB3\",\n \"xscr;\": \"\\uD835\\uDCCD\",\n \"xsqcup;\": \"\\u2A06\",\n \"xuplus;\": \"\\u2A04\",\n \"xutri;\": \"\\u25B3\",\n \"xvee;\": \"\\u22C1\",\n \"xwedge;\": \"\\u22C0\",\n \"Yacute;\": \"\\u00DD\",\n \"Yacute\": \"\\u00DD\",\n \"yacute;\": \"\\u00FD\",\n \"yacute\": \"\\u00FD\",\n \"YAcy;\": \"\\u042F\",\n \"yacy;\": \"\\u044F\",\n \"Ycirc;\": \"\\u0176\",\n \"ycirc;\": \"\\u0177\",\n \"Ycy;\": \"\\u042B\",\n \"ycy;\": \"\\u044B\",\n \"yen;\": \"\\u00A5\",\n \"yen\": \"\\u00A5\",\n \"Yfr;\": \"\\uD835\\uDD1C\",\n \"yfr;\": \"\\uD835\\uDD36\",\n \"YIcy;\": \"\\u0407\",\n \"yicy;\": \"\\u0457\",\n \"Yopf;\": \"\\uD835\\uDD50\",\n \"yopf;\": \"\\uD835\\uDD6A\",\n \"Yscr;\": \"\\uD835\\uDCB4\",\n \"yscr;\": \"\\uD835\\uDCCE\",\n \"YUcy;\": \"\\u042E\",\n \"yucy;\": \"\\u044E\",\n \"Yuml;\": \"\\u0178\",\n \"yuml;\": \"\\u00FF\",\n \"yuml\": \"\\u00FF\",\n \"Zacute;\": \"\\u0179\",\n \"zacute;\": \"\\u017A\",\n \"Zcaron;\": \"\\u017D\",\n \"zcaron;\": \"\\u017E\",\n \"Zcy;\": \"\\u0417\",\n \"zcy;\": \"\\u0437\",\n \"Zdot;\": \"\\u017B\",\n \"zdot;\": \"\\u017C\",\n \"zeetrf;\": \"\\u2128\",\n \"ZeroWidthSpace;\": \"\\u200B\",\n \"Zeta;\": \"\\u0396\",\n \"zeta;\": \"\\u03B6\",\n \"Zfr;\": \"\\u2128\",\n \"zfr;\": \"\\uD835\\uDD37\",\n \"ZHcy;\": \"\\u0416\",\n \"zhcy;\": \"\\u0436\",\n \"zigrarr;\": \"\\u21DD\",\n \"Zopf;\": \"\\u2124\",\n \"zopf;\": \"\\uD835\\uDD6B\",\n \"Zscr;\": \"\\uD835\\uDCB5\",\n \"zscr;\": \"\\uD835\\uDCCF\",\n \"zwj;\": \"\\u200D\",\n \"zwnj;\": \"\\u200C\"\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function startsWith(haystack, needle) {\n if (haystack.length < needle.length) {\n return false;\n }\n for (var i = 0; i < needle.length; i++) {\n if (haystack[i] !== needle[i]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Determines if haystack ends with needle.\n */\nexport function endsWith(haystack, needle) {\n var diff = haystack.length - needle.length;\n if (diff > 0) {\n return haystack.lastIndexOf(needle) === diff;\n }\n else if (diff === 0) {\n return haystack === needle;\n }\n else {\n return false;\n }\n}\n/**\n * @returns the length of the common prefix of the two strings.\n */\nexport function commonPrefixLength(a, b) {\n var i;\n var len = Math.min(a.length, b.length);\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(i) !== b.charCodeAt(i)) {\n return i;\n }\n }\n return len;\n}\nexport function repeat(value, count) {\n var s = '';\n while (count > 0) {\n if ((count & 1) === 1) {\n s += value;\n }\n value += value;\n count = count >>> 1;\n }\n return s;\n}\nvar _a = 'a'.charCodeAt(0);\nvar _z = 'z'.charCodeAt(0);\nvar _A = 'A'.charCodeAt(0);\nvar _Z = 'Z'.charCodeAt(0);\nvar _0 = '0'.charCodeAt(0);\nvar _9 = '9'.charCodeAt(0);\nexport function isLetterOrDigit(text, index) {\n var c = text.charCodeAt(index);\n return (_a <= c && c <= _z) || (_A <= c && c <= _Z) || (_0 <= c && c <= _9);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function isDefined(obj) {\n return typeof obj !== 'undefined';\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport function normalizeMarkupContent(input) {\n if (!input) {\n return undefined;\n }\n if (typeof input === 'string') {\n return {\n kind: 'markdown',\n value: input\n };\n }\n return {\n kind: 'markdown',\n value: input.value\n };\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { normalizeMarkupContent } from '../utils/markup.js';\nvar HTMLDataProvider = /** @class */ (function () {\n /**\n * Currently, unversioned data uses the V1 implementation\n * In the future when the provider handles multiple versions of HTML custom data,\n * use the latest implementation for unversioned data\n */\n function HTMLDataProvider(id, customData) {\n var _this = this;\n this.id = id;\n this._tags = [];\n this._tagMap = {};\n this._valueSetMap = {};\n this._tags = customData.tags || [];\n this._globalAttributes = customData.globalAttributes || [];\n this._tags.forEach(function (t) {\n _this._tagMap[t.name.toLowerCase()] = t;\n });\n if (customData.valueSets) {\n customData.valueSets.forEach(function (vs) {\n _this._valueSetMap[vs.name] = vs.values;\n });\n }\n }\n HTMLDataProvider.prototype.isApplicable = function () {\n return true;\n };\n HTMLDataProvider.prototype.getId = function () {\n return this.id;\n };\n HTMLDataProvider.prototype.provideTags = function () {\n return this._tags;\n };\n HTMLDataProvider.prototype.provideAttributes = function (tag) {\n var attributes = [];\n var processAttribute = function (a) {\n attributes.push(a);\n };\n var tagEntry = this._tagMap[tag.toLowerCase()];\n if (tagEntry) {\n tagEntry.attributes.forEach(processAttribute);\n }\n this._globalAttributes.forEach(processAttribute);\n return attributes;\n };\n HTMLDataProvider.prototype.provideValues = function (tag, attribute) {\n var _this = this;\n var values = [];\n attribute = attribute.toLowerCase();\n var processAttributes = function (attributes) {\n attributes.forEach(function (a) {\n if (a.name.toLowerCase() === attribute) {\n if (a.values) {\n a.values.forEach(function (v) {\n values.push(v);\n });\n }\n if (a.valueSet) {\n if (_this._valueSetMap[a.valueSet]) {\n _this._valueSetMap[a.valueSet].forEach(function (v) {\n values.push(v);\n });\n }\n }\n }\n });\n };\n var tagEntry = this._tagMap[tag.toLowerCase()];\n if (tagEntry) {\n processAttributes(tagEntry.attributes);\n }\n processAttributes(this._globalAttributes);\n return values;\n };\n return HTMLDataProvider;\n}());\nexport { HTMLDataProvider };\n/**\n * Generate Documentation used in hover/complete\n * From `documentation` and `references`\n */\nexport function generateDocumentation(item, settings, doesSupportMarkdown) {\n if (settings === void 0) { settings = {}; }\n var result = {\n kind: doesSupportMarkdown ? 'markdown' : 'plaintext',\n value: ''\n };\n if (item.description && settings.documentation !== false) {\n var normalizedDescription = normalizeMarkupContent(item.description);\n if (normalizedDescription) {\n result.value += normalizedDescription.value;\n }\n }\n if (item.references && item.references.length > 0 && settings.references !== false) {\n if (result.value.length) {\n result.value += \"\\n\\n\";\n }\n if (doesSupportMarkdown) {\n result.value += item.references.map(function (r) {\n return \"[\" + r.name + \"](\" + r.url + \")\";\n }).join(' | ');\n }\n else {\n result.value += item.references.map(function (r) {\n return r.name + \": \" + r.url;\n }).join('\\n');\n }\n }\n if (result.value === '') {\n return undefined;\n }\n return result;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { CompletionItemKind, TextEdit, Range, Position, FileType } from '../htmlLanguageTypes.js';\nimport { startsWith } from '../utils/strings.js';\nvar PathCompletionParticipant = /** @class */ (function () {\n function PathCompletionParticipant(readDirectory) {\n this.readDirectory = readDirectory;\n this.atributeCompletions = [];\n }\n PathCompletionParticipant.prototype.onHtmlAttributeValue = function (context) {\n if (isPathAttribute(context.tag, context.attribute)) {\n this.atributeCompletions.push(context);\n }\n };\n PathCompletionParticipant.prototype.computeCompletions = function (document, documentContext) {\n return __awaiter(this, void 0, void 0, function () {\n var result, _i, _a, attributeCompletion, fullValue, replaceRange, suggestions, _b, suggestions_1, item;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n result = { items: [], isIncomplete: false };\n _i = 0, _a = this.atributeCompletions;\n _c.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 5];\n attributeCompletion = _a[_i];\n fullValue = stripQuotes(document.getText(attributeCompletion.range));\n if (!isCompletablePath(fullValue)) return [3 /*break*/, 4];\n if (!(fullValue === '.' || fullValue === '..')) return [3 /*break*/, 2];\n result.isIncomplete = true;\n return [3 /*break*/, 4];\n case 2:\n replaceRange = pathToReplaceRange(attributeCompletion.value, fullValue, attributeCompletion.range);\n return [4 /*yield*/, this.providePathSuggestions(attributeCompletion.value, replaceRange, document, documentContext)];\n case 3:\n suggestions = _c.sent();\n for (_b = 0, suggestions_1 = suggestions; _b < suggestions_1.length; _b++) {\n item = suggestions_1[_b];\n result.items.push(item);\n }\n _c.label = 4;\n case 4:\n _i++;\n return [3 /*break*/, 1];\n case 5: return [2 /*return*/, result];\n }\n });\n });\n };\n PathCompletionParticipant.prototype.providePathSuggestions = function (valueBeforeCursor, replaceRange, document, documentContext) {\n return __awaiter(this, void 0, void 0, function () {\n var valueBeforeLastSlash, parentDir, result, infos, _i, infos_1, _a, name, type, e_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n valueBeforeLastSlash = valueBeforeCursor.substring(0, valueBeforeCursor.lastIndexOf('/') + 1);\n parentDir = documentContext.resolveReference(valueBeforeLastSlash || '.', document.uri);\n if (!parentDir) return [3 /*break*/, 4];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n result = [];\n return [4 /*yield*/, this.readDirectory(parentDir)];\n case 2:\n infos = _b.sent();\n for (_i = 0, infos_1 = infos; _i < infos_1.length; _i++) {\n _a = infos_1[_i], name = _a[0], type = _a[1];\n // Exclude paths that start with `.`\n if (name.charCodeAt(0) !== CharCode_dot) {\n result.push(createCompletionItem(name, type === FileType.Directory, replaceRange));\n }\n }\n return [2 /*return*/, result];\n case 3:\n e_1 = _b.sent();\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/, []];\n }\n });\n });\n };\n return PathCompletionParticipant;\n}());\nexport { PathCompletionParticipant };\nvar CharCode_dot = '.'.charCodeAt(0);\nfunction stripQuotes(fullValue) {\n if (startsWith(fullValue, \"'\") || startsWith(fullValue, \"\\\"\")) {\n return fullValue.slice(1, -1);\n }\n else {\n return fullValue;\n }\n}\nfunction isCompletablePath(value) {\n if (startsWith(value, 'http') || startsWith(value, 'https') || startsWith(value, '//')) {\n return false;\n }\n return true;\n}\nfunction isPathAttribute(tag, attr) {\n var a = PATH_TAG_AND_ATTR[tag];\n if (a) {\n if (typeof a === 'string') {\n return a === attr;\n }\n else {\n return a.indexOf(attr) !== -1;\n }\n }\n return false;\n}\nfunction pathToReplaceRange(valueBeforeCursor, fullValue, range) {\n var replaceRange;\n var lastIndexOfSlash = valueBeforeCursor.lastIndexOf('/');\n if (lastIndexOfSlash === -1) {\n replaceRange = shiftRange(range, 1, -1);\n }\n else {\n // For cases where cursor is in the middle of attribute value, like