Files
BlogPosts/.obsidian/plugins/obsidian-livesync/main.js

19 lines
2.4 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD AND TERSER
if you want to view the source, please visit the github repository of this plugin
*/
"use strict";function Logger(message,level,key3){_logger(message,level,key3)}function __logger(message,baseLevel,flagsOrKey,key3){let level=baseLevel;"string"==typeof flagsOrKey?key3=flagsOrKey:void 0!==flagsOrKey&&(level|=flagsOrKey);_logger(message,level,key3)}function info(message,flagsOrKey,key3){__logger(message,LEVEL_INFO,flagsOrKey,key3)}function isMetaEntry(entry){return"children"in entry}function statusDisplay(status){return status?"EXPERIMENTAL"==status?" (Experimental)":"ALPHA"==status?" (Alpha)":"BETA"==status?" (Beta)":` (${status})`:""}function confName(key3,alt=""){var _a8,_b5;return key3 in configurationNames?`${null==(_a8=configurationNames[key3])?void 0:_a8.name}${statusDisplay(null==(_b5=configurationNames[key3])?void 0:_b5.status)}`:`${alt||""}`}function isValidLength(len){return len>=1&&len<=5}function encodeObjectAsArray(obj){if(Array.isArray(obj))return ARRAY_MARKER+encodeAnyArray(obj,!0);const objArray=[...Object.entries(obj)].flat();return OBJECT_MARKER+encodeAnyArray(objArray,!0)}function decodeObjectFromArray(str){if(str[0]==ARRAY_MARKER)return decodeAnyArray(str.substring(1));if(str[0]==OBJECT_MARKER){const arr=decodeAnyArray(str.substring(1)),entries2=[];for(let i2=0;i2<arr.length;i2+=2){const key3=arr[i2],value=arr[i2+1];entries2.push([key3,value])}return Object.fromEntries(entries2)}return JSON.parse(str)}function encodeAnyArray(obj,safer=!1){return obj.map(v2=>{if(void 0===v2)return"u";if(null===v2)return"n";if(!1===v2)return"f";if(!0===v2)return"t";if("number"==typeof v2){const isFloat=!Number.isInteger(v2),b36=v2.toString(36),strNum=v2.toString(),expression=isFloat||b36.length>strNum.length?"n":"N",encodedStr="N"==expression?b36:strNum,len=encodedStr.length.toString(36),lenLen2=len.length;if(!isValidLength(lenLen2))throw new Error("Number length exceeds maximum encodable length of 5 in base36.");return prefixMapNumber[expression][lenLen2]+len+encodedStr}let str,prefix;if("string"==typeof v2){str=v2;prefix="s"}else{prefix="o";const objectStr=JSON.stringify(v2),containUndefined=-1!==Object.values(v2).indexOf(void 0);if(!safer||containUndefined){const objectEncoded=encodeObjectAsArray(v2);str=containUndefined||objectEncoded.length<objectStr.length?objectEncoded:objectStr}else str=objectStr}const length=str.length.toString(36),lenLen=length.length;if(!isValidLength(lenLen))throw new Error("String/Object length exceeds maximum encodable length of 5 in base36.");return prefixMapObject[prefix][lenLen]+length+str}).join("")}function isDecodeMapConstantKey(key3){return key3 in decodeMapConstant}function isDecodePrefixMapNumberKey(key3){return key3 in decodePrefixMapNumber}function isDecodePrefixMapObjectKey(key3){return key3 in decodePrefixMapObject}function decodeAnyArray(str){const result=[];let i2=0;for(;i2<str.length;){const char=str[i2];i2++;if(isDecodeMapConstantKey(char))result.push(decodeMapConstant[char]);else if(isDecodePrefixMapNumberKey(char)){const{prefix,len}=decodePrefixMapNumber[char],lenStr=str.substring(i2,i2+len);i2+=len;const lenNum=parseInt(lenStr,36),value=str.substring(i2,i2+lenNum);i2+=lenNum;"N"==prefix?result.push(parseInt(value,36)):result.push(parseFloat(value))}else{if(!isDecodePrefixMapObjectKey(char))throw new Error(`Invalid encoding at position ${i2-1}: unexpected character '${char}'`);{const{prefix,len}=decodePrefixMapObject[char],lenStr=str.substring(i2,i2+len);i2+=len;const lenNum=parseInt(lenStr,36),value=str.substring(i2,i2+lenNum);i2+=lenNum;"s"==prefix?result.push(value):result.push(decodeObjectFromArray(value))}}}return result}function extractObject(template,obj){const ret={...template};for(const key3 in ret)ret[key3]=obj[key3];return ret}function isObjectDifferent(a2,b3,ignoreUndefined=!1){if(typeof a2!=typeof b3)return!0;if("object"==typeof a2){if(null===a2||null===b3)return a2!==b3;const keys3=[...new Set([...Object.keys(a2),...Object.keys(b3)])];return ignoreUndefined?keys3.map(key3=>void 0!==(null==a2?void 0:a2[key3])&&void 0!==(null==b3?void 0:b3[key3])&&isObjectDifferent(null==a2?void 0:a2[key3],null==b3?void 0:b3[key3])).some(e3=>1==e3):keys3.map(key3=>isObjectDifferent(key3 in a2?a2[key3]:SYMBOL_A,key3 in b3?b3[key3]:SYMBOL_B)).some(e3=>1==e3)}return a2!==b3}function reactiveSource(initialValue){return _reactive({initialValue})}function reactive(expression,initialValue){return _reactive({expression,initialValue})}function resetTopologicalSortCacheFor(ids){ids.forEach(id=>topologicalSortCache.delete(id));topologicalSortCache.forEach((value,key3)=>{ids.includes(key3)||topologicalSortCache.delete(key3)})}function topologicalSort(startNode){if(topologicalSortCache.has(startNode.id)){const ref=topologicalSortCache.get(startNode.id);if(ref){const result2=ref.map(e3=>e3.instance.deref()).filter(e3=>e3);if(result2.length===ref.length)return result2}}const visited=new Set,sorted=[],recursionStack=new Set;(function visit(node){if(!visited.has(node)){if(recursionStack.has(node))throw new Error("Circular dependency detected!");visited.add(node);recursionStack.add(node);for(const dependant of node.dependants)visit(dependant);sorted.push(node);recursionStack.delete(node)}})(startNode);const result=sorted.reverse();topologicalSortCache.set(startNode.id,result.map(e3=>({id:e3.id,instance:new FallbackWeakRef(e3)})));return result}function _reactive({expression,initialValue,isSource}){let value,_isDirty=!1;const id=_reactiveSourceId++,changeHandlers=new Set,instance={id,dependants:new Set,_markDirty(){_isDirty||(_isDirty=!0)},markDirty(){topologicalSort(instance).forEach(node=>node._markDirty())},_rippleChanged(){changeHandlers.forEach(e3=>e3(instance))},rippleChanged(){topologicalSort(instance).forEach(node=>node._rippleChanged())},markClean(){_isDirty=!1},get isDirty(){return _isDirty},get value(){if(context&&!instance.dependants.has(context)){instance.dependants.add(context);resetTopologicalSortCacheFor([instance.id,context.id])}if(_isDirty){if(expression){const oldValue=value,newValue=expression();isObjectDifferent(oldValue,newValue)&&(value=newValue)}instance.markClean()}return value},set value(newValue){if(_isDirty&&!expression)value=newValue;else if(isObjectDifferent(value,newValue)){value=newValue;if(!_isDirty){instance.markDirty();instance.rippleChanged()}}},onChanged(handler){changeHandlers.add(handler)},offChanged(handler){changeHandlers.delete(handler)}};value=function initialize(){const previousContext=context;context=instance;const r4=expression?expression(initialValue):initialValue;context=previousContext;return r4}();return instance}function computed(expression){const v2=reactive(expression);return()=>v2.value}async function isSomeResolved(promises){return 0!=promises.length&&await Promise.race([...promises,Promise.resolve(UNRESOLVED)])!==UNRESOLVED}function fireAndForget(p2){if("function"==typeof p2)return fireAndForget(p2());p2.then(noop).catch(noop)}function yieldMicrotask(){return new Promise(res2=>queueMicrotask(res2))}function yieldAnimationFrame(){return new Promise(res2=>requestAnimationFrame(res2))}function yieldNextAnimationFrame(){return currentYieldingAnimationFrame||(currentYieldingAnimationFrame=(async()=>{const ret=await yieldAnimationFrame();currentYieldingAnimationFrame=void 0;return ret})())}function cancelableDelay(timeout,cancel2=TIMED_OUT_SIGNAL){let timer;const promise=promiseWithResolvers();timer=setTimeout(()=>{timer=void 0;promise.resolve(cancel2)},timeout);return{promise:promise.promise,cancel(){if(timer){clearTimeout(timer);timer=void 0}}}}function serialized(key3,proc){var _a8;const prev=serializedMap.get(key3),p2=promiseWithResolvers();queueCount.set(key3,(null!=(_a8=queueCount.get(key3))?_a8:0)+1);const nextTask=async()=>{try{p2.resolve(await proc())}catch(ex){p2.reject(ex)}finally{const count=queueCount.get(key3)-1;if(0===count){serializedMap.delete(key3);queueCount.delete(key3)}else queueCount.set(key3,count)}};if(prev){const newP=prev.then(()=>nextTask());serializedMap.set(key3,newP)}else serializedMap.set(key3,nextTask());return p2.promise}function shareRunningResult(key3,proc){const prev=shareSerializedMap.get(key3);if(prev)return prev;const p2=promiseWithResolvers();shareSerializedMap.set(key3,p2.promise);const task=async()=>{try{p2.resolve(await proc())}catch(ex){p2.reject(ex)}finally{shareSerializedMap.delete(key3)}};fireAndForget(()=>task());return p2.promise}function skipIfDuplicated(key3,proc){if(skipDuplicatedMap.get(key3))return Promise.resolve(null);const p2=promiseWithResolvers();skipDuplicatedMap.set(key3,p2.promise);const task=async()=>{try{p2.resolve(await proc())}catch(ex){p2.reject(ex)}finally{skipDuplicatedMap.delete(key3)}};fireAndForget(()=>task());return p2.promise}async function scheduleOnceIfDuplicated(key3,proc){if(isLockAcquired(key3)){waitingProcessMap.set(key3,proc);return Promise.resolve(void 0)}return await serialized(key3,proc).then(()=>{const nextProc=waitingProcessMap.get(key3);if(nextProc){waitingProcessMap.delete(key3);return scheduleOnceIfDuplicated(key3,nextProc)}})}function isLockAcquired(key3){var _a8;return(null!=(_a8=queueCount.get(key3))?_a8:0)>0}async function waitForSignal(id,timeout){return await globalSlipBoard.awaitNext(GENERIC_COMPATIBILITY_SIGNAL,id,{timeout})!==TIMED_OUT_SIGNAL}function sendSignal(id){globalSlipBoard.submit(GENERIC_COMPATIBILITY_SIGNAL,id)}function sendValue(id,result){globalSlipBoard.submit(GENERIC_COMPATIBILITY_VALUE,id,result)}function unwrapTaskResult(result){if("ok"in result)return result.ok;if("err"in result)return result.err;throw new Error("Argument Exception: Could not unwrap")}function isTaskWaiting(task){if(task instanceof Promise)return!1;if(task instanceof Function)return!0;throw new Error("Invalid state")}async function wrapEachProcess(key3,task){try{return{key:key3,ok:await task}}catch(ex){return{key:key3,err:ex instanceof Error?ex:new Error(`${ex}`)}}}async function*processAllTasksWithConcurrencyLimit(limit,tasks3){const nowProcessing=new Map;let idx2=0;const pendingTasks=tasks3.reverse();for(;pendingTasks.length>0||nowProcessing.size>0;){L2:for(;nowProcessing.size<limit&&pendingTasks.length>0;){const task=pendingTasks.pop();if(void 0===task)break L2;idx2++;const wrappedPromise=wrapEachProcess(idx2,isTaskWaiting(task)?task():task);nowProcessing.set(idx2,wrappedPromise)}const done=await Promise.race(nowProcessing.values());nowProcessing.delete(done.key);yield done}}async function mapAllTasksWithConcurrencyLimit(limit,tasks3){const results=new Map;for await(const v2 of processAllTasksWithConcurrencyLimit(limit,tasks3))results.set(v2.key,v2);return[...results.entries()].sort((a2,b3)=>a2[0]-b3[0]).map(e3=>e3[1])}function scheduleTask(key3,timeout,proc,skipIfTaskExist){if(tasks.has(key3)){if(skipIfTaskExist)return;cancelTask(key3)}const newTask=setTimeout(()=>{tasks.delete(key3);proc()},timeout);tasks.set(key3,newTask)}function cancelTask(key3){const old=tasks.get(key3);if(old){clearTimeout(old);tasks.delete(key3)}}function cancelAllTasks(){for(const v2 of tasks.keys())cancelTask(v2)}function cancelPeriodicTask(key3){if(key3 in intervals){clearInterval(intervals[key3]);delete intervals[key3]}}function cancelAllPeriodicTask(){for(const v2 in intervals)cancelPeriodicTask(v2)}function isWaitingForTimeout(key3){return waitingItems.has(key3)}function numeric(str){return isNaN(str)?str.charCodeAt(0):parseInt(str,10)}function escapeBraces(str){return str.replace(slashPattern,escSlash).replace(openPattern,escOpen).replace(closePattern,escClose).replace(commaPattern,escComma).replace(periodPattern,escPeriod)}function unescapeBraces(str){return str.replace(escSlashPattern,"\\").replace(escOpenPattern,"{").replace(escClosePattern,"}").replace(escCommaPattern,",").replace(escPeriodPattern,".")}function parseCommaParts(str){if(!str)return[""];const parts=[],m3=balanced("{","}",str);if(!m3)return str.split(",");const{pre,body,post}=m3,p2=pre.split(",");p2[p2.length-1]+="{"+body+"}";const postParts=parseCommaParts(post);if(post.length){p2[p2.length-1]+=postParts.shift();p2.push.apply(p2,postParts)}parts.push.apply(parts,p2);return parts}function expand(str,options={}){if(!str)return[];const{max:max3=EXPANSION_MAX}=options;"{}"===str.slice(0,2)&&(str="\\{\\}"+str.slice(2));return expand_(escapeBraces(str),max3,!0).map(unescapeBraces)}function embrace(str){return"{"+str+"}"}function isPadded(el){return/^-?0\d/.test(el)}function lte(i2,y2){return i2<=y2}function gte(i2,y2){return i2>=y2}function expand_(str,max3,isTop){const expansions=[],m3=balanced("{","}",str);if(!m3)return[str];const pre=m3.pre,post=m3.post.length?expand_(m3.post,max3,!1):[""];if(/\$$/.test(m3.pre))for(let k2=0;k2<post.length&&k2<max3;k2++){const expansion=pre+"{"+m3.body+"}"+post[k2];expansions.push(expansion)}else{const isNumericSequence=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m3.body),isAlphaSequence=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m3.body),isSequence=isNumericSequence||isAlphaSequence,isOptions=m3.body.indexOf(",")>=0;if(!isSequence&&!isOptions)return m3.post.match(/,(?!,).*\}/)?expand_(str=m3.pre+"{"+m3.body+escClose+m3.post,max3,!0):[str];let n3,N3;if(isSequence)n3=m3.body.split(/\.\./);else{n3=parseCommaParts(m3.body);if(1===n3.length&&void 0!==n3[0]){n3=expand_(n3[0],max3,!1).map(embrace);if(1===n3.length)return post.map(p2=>m3.pre+n3[0]+p2)}}if(isSequence&&void 0!==n3[0]&&void 0!==n3[1]){const x2=numeric(n3[0]),y2=numeric(n3[1]),width=Math.max(n3[0].length,n3[1].length);let incr=3===n3.length&&void 0!==n3[2]?Math.max(Math.abs(numeric(n3[2])),1):1,test=lte;if(y2<x2){incr*=-1;test=gte}const pad2=n3.some(isPadded);N3=[];for(let i2=x2;test(i2,y2);i2+=incr){let c3;if(isAlphaSequence){c3=String.fromCharCode(i2);"\\"===c3&&(c3="")}else{c3=String(i2);if(pad2){const need=width-c3.length;if(need>0){const z2=new Array(need+1).join("0");c3=i2<0?"-"+z2+c3.slice(1):z2+c3}}}N3.push(c3)}}else{N3=[];for(let j2=0;j2<n3.length;j2++)N3.push.apply(N3,expand_(n3[j2],max3,!1))}for(let j2=0;j2<N3.length;j2++)for(let k2=0;k2<post.length&&expansions.length<max3;k2++){const expansion=pre+N3[j2]+post[k2];(!isTop||isSequence||expansion)&&expansions.push(expansion)}}return expansions}async function getWebCrypto(){if(webcrypto)return webcrypto;if(globalThis.crypto)return webcrypto=globalThis.crypto;{const module2=await import("crypto");return webcrypto=module2.webcrypto}}function base64ToArrayBufferNative(base64){if(0===base64.length)return new ArrayBuffer(0);try{if("string"==typeof base64)return Uint8Array.fromBase64(base64).buffer;const bufItems=base64.map(e3=>Uint8Array.fromBase64(e3).buffer),len=bufItems.reduce((p2,c3)=>p2+c3.byteLength,0),joinedArray=new Uint8Array(len);let offset=0;bufItems.forEach(e3=>{joinedArray.set(new Uint8Array(e3),offset);offset+=e3.byteLength});return joinedArray.buffer}catch(ex){Logger("Base64 Decode error",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);return new ArrayBuffer(0)}}function base64ToArrayBufferInternalBrowser(base64){try{const binary_string=globalThis.atob(base64),len=binary_string.length,bytes=new Uint8Array(len);for(let i2=0;i2<len;i2++)bytes[i2]=binary_string.charCodeAt(i2);return bytes.buffer}catch(ex){Logger("Base64 Decode error",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);return new ArrayBuffer(0)}}function arrayBufferToBase64internalBrowser(buffer){return new Promise((res2,rej)=>{const blob=new Blob([buffer],{type:"application/octet-binary"}),reader=new FileReader;reader.onload=function(evt){var _a8,_b5;const dataURI=(null==(_b5=null==(_a8=evt.target)?void 0:_a8.result)?void 0:_b5.toString())||"";if(0!=buffer.byteLength&&(""==dataURI||"data:"==dataURI))return rej(new TypeError("Could not parse the encoded string"));const result=dataURI.substring(dataURI.indexOf(",")+1);res2(result)};reader.readAsDataURL(blob)})}function writeString(string){if(string.length>128)return te.encode(string);const buffer=new Uint8Array(4*string.length),length=string.length;let index6=0,chr=0,idx2=0;for(;idx2<length;){chr=string.charCodeAt(idx2++);if(chr<128)buffer[index6++]=chr;else if(chr<2048){buffer[index6++]=192|chr>>>6;buffer[index6++]=128|63&chr}else if(chr<55296||chr>57343){buffer[index6++]=224|chr>>>12;buffer[index6++]=128|chr>>>6&63;buffer[index6++]=128|63&chr}else{chr=65536+(chr-55296<<10|string.charCodeAt(idx2++)-56320);buffer[index6++]=240|chr>>>18;buffer[index6++]=128|chr>>>12&63;buffer[index6++]=128|chr>>>6&63;buffer[index6++]=128|63&chr}}return buffer.slice(0,index6)}function readString(buffer){const length=buffer.length;if(length>128)return td.decode(buffer);let index6=0;const end=length;let string="";for(;index6<end;){const chunk=[],cEnd=Math.min(index6+QUANTUM,end);for(;index6<cEnd;){const chr=buffer[index6++];if(chr<128)chunk.push(chr);else if(192==(224&chr))chunk.push((31&chr)<<6|63&buffer[index6++]);else if(224==(240&chr))chunk.push((15&chr)<<12|(63&buffer[index6++])<<6|63&buffer[index6++]);else if(240==(248&chr)){let code=(7&chr)<<18|(63&buffer[index6++])<<12|(63&buffer[index6++])<<6|63&buffer[index6++];if(code<65536)chunk.push(code);else{code-=65536;chunk.push((code>>>10)+55296,56320+(1023&code))}}}string+=String.fromCharCode(...chunk)}return string}function*arrayToChunkedArray(arr,chunkLength){const source2=[...arr];for(;source2.length;){const s2=source2.splice(0,chunkLength);yield s2}}function unique(arr){return[...new Set(arr)]}function createTypedArrayReader(buffer){let offset=0;return{read(length){const result=buffer.slice(offset,offset+length);offset+=length;return result},readAll(){const result=buffer.slice(offset);offset=buffer.length;return result}}}function concatUInt8Array(arrays){const totalLength=arrays.reduce((sum2,arr)=>sum2+arr.length,0),result=new Uint8Array(totalLength);let offset=0;for(const array of arrays){result.set(array,offset);offset+=array.length}return result}function decodeToArrayBuffer(src){if(1==src.length)return _decodeToArrayBuffer(src[0]);const bufItems=src.map(e3=>_decodeToArrayBuffer(e3)),len=bufItems.reduce((p2,c3)=>p2+c3.byteLength,0),joinedArray=new Uint8Array(len);let offset=0;bufItems.forEach(e3=>{joinedArray.set(new Uint8Array(e3),offset);offset+=e3.byteLength});return joinedArray.buffer}function _decodeToArrayBuffer(src){const out=new Uint8Array(src.length),len=src.length;for(let i2=0;i2<len;i2++){const char=src.charCodeAt(i2);out[i2]=char>=38&&char<=126&&58!=char?char:revTable[char]}return out.buffer}function concatUInt8Array2(arrays){const length=arrays.reduce((acc,cur)=>acc+cur.length,0),result=new Uint8Array(length);let pos=0;for(const array of arrays){result.set(array,pos);pos+=array.length}return result}function decodeBinary(src){if(0==src.length)return(new Uint8Array).buffer;if("string"==typeof src){if("%"===src[0])return _decodeToArrayBuffer(src.substring(1))}else if("%"===src[0][0]){const[head2,...last]=src;return decodeToArrayBuffer([head2.substring(1),...last])}return base64ToArrayBuffer(src)}function replaceAll(str,search,replace){return"replaceAll"in String.prototype?str.replaceAll(search,replace):str.split(search).join(replace)}function replaceAllPairs(str,...fromTo){let r4=`${str}`;for(const[from,to]of fromTo)r4=replaceAll(r4,from,to);return r4}function escapeStringToHTML(str){return str?str.replace(/[<>&"'`]/g,match3=>({"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#39;","`":"&#x60;"}[match3])):""}async function arrayBufferToBase64Single2(buffer){try{return await arrayBufferToBase64Single(buffer)}catch(ex){const maybeBuffer=null==globalThis?void 0:globalThis.Buffer;if("function"==typeof(null==maybeBuffer?void 0:maybeBuffer.from)){const view=buffer instanceof Uint8Array?buffer:new Uint8Array(buffer);return maybeBuffer.from(view.buffer,view.byteOffset,view.byteLength).toString("base64")}throw ex}}function versionNumberString2Number(version2){return version2.split(".").reverse().map((e3,i2)=>e3/1*1e3**i2).reduce((prev,current)=>prev+current,0)}function isValidFilenameInWidows(filename){return!/[\u0000-\u001f]|[\\":?<>|*#]/g.test(filename)&&!/(\\|\/)(COM\d|LPT\d|CON|PRN|AUX|NUL|CLOCK$)($|\.)/gi.test(filename)}function isValidFilenameInDarwin(filename){return!/[\u0000-\u001f]|[:]/g.test(filename)}function isValidFilenameInLinux(filename){return!/[\u0000-\u001f]|[:]/g.test(filename)}function isValidFilenameInAndroid(filename){return!/[\u0000-\u001f]|[\\":?<>|*#]/g.test(filename)}function isFilePath(path2){return-1===path2.indexOf(":")}function stripAllPrefixes(prefixedPath){if(isFilePath(prefixedPath))return prefixedPath;const[,body]=expandFilePathPrefix(prefixedPath);return stripAllPrefixes(body)}function addPrefix(path2,prefix){return prefix&&path2.startsWith(prefix)?path2:`${null!=prefix?prefix:""}${path2}`}function expandFilePathPrefix(path2){let[prefix,body]=path2.split(":",2);if(body)prefix+=":";else{body=prefix;prefix=""}return[prefix,body]}function expandDocumentIDPrefix(id){let[prefix,body]=id.split(":",2);if(body)prefix+=":";else{body=prefix;prefix=""}return[prefix,body]}function hashString(key3){return _hashString(key3)}async function path2id_base(filenameSrc,obfuscatePassphrase,caseInsensitive){if(filenameSrc.startsWith(PREFIX_OBFUSCATED))return`${filenameSrc}`;let filename=`${filenameSrc}`;const newPrefix=obfuscatePassphrase?PREFIX_OBFUSCATED:"";caseInsensitive&&(filename=filename.toLowerCase());let x2=filename;x2.startsWith("_")&&(x2="/"+x2);if(!obfuscatePassphrase)return newPrefix+x2;const[prefix,body]=expandFilePathPrefix(x2);if(body.startsWith(PREFIX_OBFUSCATED))return newPrefix+x2;const hashedPassphrase=await hashString(obfuscatePassphrase);return prefix+newPrefix+await hashString(`${hashedPassphrase}:${filename}`)}function id2path_base(id,entry){if(entry&&(null==entry?void 0:entry.path))return id2path_base(entry.path);if(id.startsWith(PREFIX_OBFUSCATED))throw new Error("Entry has been obfuscated!");const[prefix,body]=expandDocumentIDPrefix(id);if(body.startsWith(PREFIX_OBFUSCATED))throw new Error("Entry has been obfuscated!");return body.startsWith("/")?body.substring(1):prefix+body}function getPath(entry){return id2path_base(entry._id,entry)}function stripPrefix(prefixedPath){const[prefix,body]=prefixedPath.split(":",2);return body||prefix}function shouldBeIgnored(filename){return filename==FLAGMD_REDFLAG||filename==FLAGMD_REDFLAG2||filename==FLAGMD_REDFLAG2_HR||filename==FLAGMD_REDFLAG3||filename==FLAGMD_REDFLAG3_HR||!!filename.startsWith(PREFIXMD_LOGFILE)||!!filename.startsWith(PREFIXMD_LOGFILE_UC)}function isPlainText(filename){return!!(filename.endsWith(".md")||filename.endsWith(".txt")||filename.endsWith(".svg")||filename.endsWith(".html")||filename.endsWith(".csv")||filename.endsWith(".css")||filename.endsWith(".js")||filename.endsWith(".xml")||filename.endsWith(".canvas"))}function shouldSplitAsPlainText(filename){return!!filename.endsWith(".md")||!!filename.endsWith(".txt")||!!filename.endsWith(".canvas")}function isAccepted(path2,ignore){if(-1!==path2.indexOf("./")||-1!==path2.indexOf("../"))return!1;const patterns=ignore.map(e3=>e3.trim()).filter(e3=>e3.length>0&&!e3.startsWith("#"));let result;for(const pattern of patterns){if(pattern.endsWith("/")&&minimatch(path2,`${pattern}**`,matchOpts))return!1;const newResult=pattern.startsWith("!");(minimatch(path2,pattern,matchOpts)||!pattern.endsWith("/")&&minimatch(path2,pattern+"/**",matchOpts))&&(result=newResult)}return result}async function isAcceptedAll(path2,ignoreFiles,getList){const intermediatePaths=unique(path2.substring(0,path2.lastIndexOf("/")).split("/").reduce((p2,c3)=>[...p2,p2[p2.length-1]+"/"+c3],[""]).map(e3=>e3.substring(1))).reverse();for(const intermediatePath of intermediatePaths)for(const ignoreFile of ignoreFiles){const ignoreFilePath=intermediatePath+"/"+ignoreFile,list=await getList(ignoreFilePath);if(!1===list)continue;const result=isAccepted(path2.substring(intermediatePath.length?intermediatePath.length+1:0),list);if(void 0!==result)return result}return!0}function Semaphore(limit){let counter=0;const _limit=limit,queue2=[];return{get waiting(){return queue2.length},async tryAcquire(quantity=1,timeout){if(counter<_limit){counter+=quantity;return()=>{this.release(quantity)}}const d4=cancelableDelay(timeout,TIMED_OUT_SIGNAL),aq2=this.acquire(quantity),p2=await Promise.race([d4.promise,aq2]);if(p2===TIMED_OUT_SIGNAL){fireAndForget(()=>aq2.then(release=>release()));return!1}return p2},async acquire(quantity=1){if(counter<_limit){counter+=quantity;return()=>this.release()}const n3=promiseWithResolvers();queue2.push(n3);await n3.promise;return()=>{this.release(quantity)}},release(quantity=1){if(queue2.length>0){const next2=queue2.shift();next2&&fireAndForget(async()=>await yieldMicrotask().then(()=>next2.resolve()))}else counter>0&&(counter-=quantity)}}}function isCloudantURI(uri){return-1!==uri.indexOf(".cloudantnosqldb.")||-1!==uri.indexOf(".cloudant.com")}function isErrorOfMissingDoc(ex){return 404==(ex&&(null==ex?void 0:ex.status))}function sizeToHumanReadable(size){const units=["B","KB","MB","GB","TB"];let i2=0;for(;size>=1024&&i2<units.length;){size/=1024;i2++}return size.toFixed(2)+units[i2]}function resolveWithIgnoreKnownError(p2,def){return new Promise((res2,rej)=>{p2.then(res2).catch(ex=>isErrorOfMissingDoc(ex)?res2(def):rej(ex))})}function getDocData(doc){return"string"==typeof doc?doc:doc.join("")}function getDocDataAsArray(doc){return"string"==typeof doc?[doc]:doc}function isTextBlob(blob){return"text/plain"===blob.type}function createTextBlob(data){const d4=Array.isArray(data)?data:[data];return new Blob(d4,{endings:"transparent",type:"text/plain"})}function createBinaryBlob(data){return new Blob([data],{endings:"transparent",type:"application/octet-stream"})}function createBlob(data){return data instanceof Blob?data:data instanceof Uint8Array||data instanceof ArrayBuffer?createBinaryBlob(data):createTextBlob(data)}function isTextDocument(doc){return"plain"==doc.type||"plain"==doc.datatype||!!isPlainText(doc.path)}function readAsBlob(doc){return isTextDocument(doc)?createTextBlob(doc.data):createBinaryBlob(decodeBinary(doc.data))}function readContent(doc){return isTextDocument(doc)?getDocData(doc.data):decodeBinary(doc.data)}async function isDocContentSame(docA,docB){const blob1=createBlob(docA),blob2=createBlob(docB);if(blob1.size!=blob2.size)return!1;if(isIndexDBCmpExist)return 0===globalThis.indexedDB.cmp(await blob1.arrayBuffer(),await blob2.arrayBuffer());const length=blob1.size;let i2=0;for(;i2<length;){const ab1=await blob1.slice(i2,i2+1e4).arrayBuffer(),ab2=await blob2.slice(i2,i2+1e4).arrayBuffer();i2+=1e4;if(await arrayBufferToBase64Single2(ab1)!=await arrayBufferToBase64Single2(ab2))return!1}return!0}function isObfuscatedEntry(doc){return!!doc._id.startsWith(PREFIX_OBFUSCATED)}function isEncryptedChunkEntry(doc){return!!doc._id.startsWith(PREFIX_ENCRYPTED_CHUNK)}function isSyncInfoEntry(doc){return doc._id==SYNCINFO_ID}function determineTypeFromBlob(data){return isTextBlob(data)?"plain":"newnote"}function determineType(path2,data){return data instanceof Blob?determineTypeFromBlob(data):isPlainText(path2)?"plain":data instanceof Uint8Array||data instanceof ArrayBuffer?"newnote":"plain"}function isAnyNote(doc){return"type"in doc&&("newnote"==doc.type||"plain"==doc.type)}function isLoadedEntry(doc){return"type"in doc&&("newnote"==doc.type||"plain"==doc.type)&&"data"in doc}function isDeletedEntry(doc){return doc._deleted||doc.deleted||!1}function createSavingEntryFromLoadedEntry(doc){const data=readAsBlob(doc),type=determineType(doc.path,data);return{...doc,data,datatype:type,type,children:[]}}function setAllItems(set2,items){items.forEach(e3=>set2.add(e3));return set2}function escapeNewLineFromString(str){return-1===str.indexOf("\n")&&-1===str.indexOf("\r")?str:"\\f"+str.replace(/(\n|\r|\\)/g,m3=>`${map[m3]}`)}function unescapeNewLineFromString(str){return str.startsWith("\\f")?str.substring(2).replace(/(\\n|\\r|\\\\)/g,m3=>`${revMap2[m3]}`):str}function escapeMarkdownValue(value){return"string"==typeof value?replaceAllPairs(value,["|","\\|"],["`","\\`"]):value}function timeDeltaToHumanReadable(delta){const sec=delta/1e3;if(sec<60)return`${sec.toFixed(2)}s`;const min=sec/60;if(min<60)return`${min.toFixed(2)}m`;const hour=min/60;if(hour<24)return`${hour.toFixed(2)}h`;const day=hour/24;return day<365?`${day.toFixed(2)}d`:`${(day/365).toFixed(2)}y`}async function wrapException(func){try{return await func()}catch(ex){return ex instanceof Error?ex:new Error(ex)}}function isDirty(key3,value){if(previousValues.get(key3)===value)return!1;previousValues.set(key3,value);return!0}function isSensibleMargeApplicable(path2){return!!path2.endsWith(".md")}function isObjectMargeApplicable(path2){return!!path2.endsWith(".canvas")||!!path2.endsWith(".json")}function tryParseJSON(str,fallbackValue){try{return JSON.parse(str)}catch(e3){return fallbackValue}}function unorderedArrayToObject(obj){return obj.map(e3=>({[e3.id]:e3})).reduce((p2,c3)=>({...p2,...c3}),{})}function objectToUnorderedArray(obj){const entries2=Object.entries(obj);if(entries2.some(e3=>{var _a8;return e3[0]!=(null==(_a8=e3[1])?void 0:_a8.id)}))throw new Error("Item looks like not unordered array");return entries2.map(e3=>e3[1])}function generatePatchUnorderedArray(from,to){if(from.every(e3=>"object"==typeof e3&&"id"in e3)&&to.every(e3=>"object"==typeof e3&&"id"in e3)){const diff=generatePatchObj(unorderedArrayToObject(from),unorderedArrayToObject(to));return Object.keys(diff).length>0?{[MARK_ISARRAY]:diff}:{}}return{[MARK_SWAPPED]:to}}function generatePatchObj(from,to){const entries2=Object.entries(from),tempMap=new Map(entries2),ret={},newEntries=Object.entries(to);for(const[key3,value]of newEntries)if(tempMap.has(key3)){const v2=tempMap.get(key3);if(typeof v2!=typeof value||Array.isArray(v2)!==Array.isArray(value))ret[key3]={[MARK_SWAPPED]:value};else if(null===v2&&null===value);else if(null===v2&&null!==value)ret[key3]={[MARK_SWAPPED]:value};else if(null!==v2&&null===value)ret[key3]={[MARK_SWAPPED]:value};else if("object"!=typeof v2||"object"!=typeof value||Array.isArray(v2)||Array.isArray(value))if("object"==typeof v2&&"object"==typeof value&&Array.isArray(v2)&&Array.isArray(value)){const wk2=generatePatchUnorderedArray(v2,value);Object.keys(wk2).length>0&&(ret[key3]=wk2)}else"object"!=typeof v2&&"object"!=typeof value?JSON.stringify(tempMap.get(key3))!==JSON.stringify(value)&&(ret[key3]=value):JSON.stringify(tempMap.get(key3))!==JSON.stringify(value)&&(ret[key3]={[MARK_SWAPPED]:value});else{const wk2=generatePatchObj(v2,value);Object.keys(wk2).length>0&&(ret[key3]=wk2)}tempMap.delete(key3)}else{ret[key3]=value;tempMap.delete(key3)}for(const[key3]of tempMap)ret[key3]=MARK_DELETED;return ret}function applyPatch(from,patch){const ret=from,patches=Object.entries(patch);for(const[key3,value]of patches)if(value!=MARK_DELETED)if(null!==value)if("object"==typeof value){if(MARK_SWAPPED in value){ret[key3]=value[MARK_SWAPPED];continue}if(MARK_ISARRAY in value){key3 in ret||(ret[key3]=[]);if(!Array.isArray(ret[key3]))throw new Error("Patch target type is mismatched (array to something)");const appliedArray=objectToUnorderedArray(applyPatch(unorderedArrayToObject(ret[key3]),value[MARK_ISARRAY]));ret[key3]=[...appliedArray]}else{if(!(key3 in ret)){ret[key3]=value;continue}ret[key3]=applyPatch(ret[key3],value)}}else ret[key3]=value;else ret[key3]=null;else delete ret[key3];return ret}function mergeObject(objA,objB){const newEntries=Object.entries(objB),ret={...objA};if(typeof objA!=typeof objB||Array.isArray(objA)!==Array.isArray(objB))return objB;for(const[key3,v2]of newEntries)if(key3 in ret){const value=ret[key3];typeof v2!=typeof value||Array.isArray(v2)!==Array.isArray(value)?ret[key3]=v2:"object"!=typeof v2||"object"!=typeof value||Array.isArray(v2)||Array.isArray(value)?"object"==typeof v2&&"object"==typeof value&&Array.isArray(v2)&&Array.isArray(value)?ret[key3]=[...new Set([...v2,...value])]:ret[key3]=v2:ret[key3]=mergeObject(v2,value)}else ret[key3]=v2;const retSorted=Object.fromEntries(Object.entries(ret).sort((a2,b3)=>a2[0]<b3[0]?-1:a2[0]>b3[0]?1:0));return Array.isArray(objA)&&Array.isArray(objB)?Object.values(retSorted):retSorted}function flattenObject(obj,path2=[]){if("object"!=typeof obj)return[[path2.join("."),obj]];if(null===obj)return[[path2.join("."),null]];if(Array.isArray(obj))return[[path2.join("."),JSON.stringify(obj)]];const e3=Object.entries(obj),ret=[];for(const[key3,value]of e3){const p2=flattenObject(value,[...path2,key3]);ret.push(...p2)}return ret}function parseHeaderValues(strHeader){const headers={},lines=strHeader.split("\n");for(const line of lines){const[key3,value]=line.split(":",2).map(e3=>e3.trim());key3&&value&&(headers[key3]=value)}return headers}function parseCustomRegExp(regexp){return regexp.startsWith("!!")?[!0,regexp.slice(2)]:[!1,regexp]}function isValidRegExp(regexp){try{const[,exp]=parseCustomRegExp(regexp);new RegExp(exp);return!0}catch(e3){return!1}}function isInvertedRegExp(regexp){const[negate3]=parseCustomRegExp(regexp);return negate3}function parseCustomRegExpList(list,flags2,delimiter){const d4=null!=delimiter?delimiter:",";return`${null!=list?list:""}`.replace(/\n| /g,"").split(d4).filter(e3=>e3).map(e3=>new CustomRegExp(e3,flags2))}function constructCustomRegExpList(items,delimiter){return items.map(e3=>`${e3}`).join(`${delimiter}`)}function splitCustomRegExpList(list,delimiter){const d4=delimiter;return`${null!=list?list:""}`.split(d4).filter(e3=>e3)}function getFileRegExp(settings,key3){const flagCase=settings.handleFilenameCaseSensitive?"":"i";return parseCustomRegExpList(settings[key3],flagCase,"syncInternalFilesIgnorePatterns"===key3||"syncInternalFilesTargetPatterns"===key3||"syncInternalFileOverwritePatterns"===key3?",":"|[]|")}function copyTo(source2,target){for(const key3 of Object.keys(target))target[key3]=source2[key3]}function pickBucketSyncSettings(setting){return{bucket:setting.bucket,region:setting.region,endpoint:setting.endpoint,accessKey:setting.accessKey,secretKey:setting.secretKey,bucketPrefix:setting.bucketPrefix,forcePathStyle:setting.forcePathStyle,useCustomRequestHandler:setting.useCustomRequestHandler,bucketCustomHeaders:setting.bucketCustomHeaders}}function pickCouchDBSyncSettings(setting){return{couchDB_URI:setting.couchDB_URI,couchDB_USER:setting.couchDB_USER,couchDB_PASSWORD:setting.couchDB_PASSWORD,couchDB_DBNAME:setting.couchDB_DBNAME,useRequestAPI:setting.useRequestAPI,couchDB_CustomHeaders:setting.couchDB_CustomHeaders,jwtAlgorithm:setting.jwtAlgorithm,jwtExpDuration:setting.jwtExpDuration,jwtKey:setting.jwtKey,jwtKid:setting.jwtKid,jwtSub:setting.jwtSub,useJWT:setting.useJWT}}function pickEncryptionSettings(setting){return{E2EEAlgorithm:setting.E2EEAlgorithm,encrypt:setting.encrypt,passphrase:setting.passphrase,usePathObfuscation:setting.usePathObfuscation}}function pickP2PSyncSettings(setting){return{P2P_Enabled:setting.P2P_Enabled,P2P_AppID:setting.P2P_AppID,P2P_roomID:setting.P2P_roomID,P2P_passphrase:setting.P2P_passphrase,P2P_relays:setting.P2P_relays,P2P_AutoStart:setting.P2P_AutoStart,P2P_AutoBroadcast:setting.P2P_AutoBroadcast,P2P_DevicePeerName:setting.P2P_DevicePeerName||"",P2P_turnServers:setting.P2P_turnServers,P2P_turnUsername:setting.P2P_turnUsername,P2P_turnCredential:setting.P2P_turnCredential}}function compareMTime(baseMTime,targetMTime){const truncatedBaseMTime=~~(baseMTime/resolution)*resolution,truncatedTargetMTime=~~(targetMTime/resolution)*resolution;if(truncatedBaseMTime==truncatedTargetMTime)return EVEN;if(truncatedBaseMTime>truncatedTargetMTime)return BASE_IS_NEW;if(truncatedBaseMTime<truncatedTargetMTime)return TARGET_IS_NEW;throw new Error("Unexpected error")}function displayRev(rev3){const[number,hash3]=rev3.split("-");return`${number}-${hash3.substring(0,6)}`}function createInstanceLogFunction(serviceName,APIService2){var _a8;const logFunc=null!=(_a8=null==APIService2?void 0:APIService2.addLog.bind(APIService2))?_a8:Logger;return(msg,level=LOG_LEVEL_INFO,key3="")=>{const isError=msg instanceof Error;if(isError&&level<=LOG_LEVEL_VERBOSE){logFunc(msg,level,key3);return}let formattedMsg="string"==typeof msg?msg:isError?msg.message:JSON.stringify(msg);level<LOG_LEVEL_NOTICE&&(formattedMsg=`[${serviceName}]${MARK_LOG_SEPARATOR} ${formattedMsg}`);logFunc(formattedMsg,level,key3)}}function is_function(thing){return"function"==typeof thing}function run(fn){return fn()}function run_all(arr){for(var i2=0;i2<arr.length;i2++)arr[i2]()}function deferred(){var resolve,reject;return{promise:new Promise((res2,rej)=>{resolve=res2;reject=rej}),resolve,reject}}function to_array(value,n3){if(Array.isArray(value))return value;if(void 0===n3||!(Symbol.iterator in value))return Array.from(value);const array=[];for(const element2 of value){array.push(element2);if(array.length===n3)break}return array}function lifecycle_outside_component(name){if(dev_fallback_default){const error=new Error(`lifecycle_outside_component\n\`${name}(...)\` can only be used during component initialisation\nhttps://svelte.dev/e/lifecycle_outside_component`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function async_derived_orphan(){if(dev_fallback_default){const error=new Error("async_derived_orphan\nCannot create a `$derived(...)` with an `await` expression outside of an effect tree\nhttps://svelte.dev/e/async_derived_orphan");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/async_derived_orphan")}function bind_invalid_checkbox_value(){if(dev_fallback_default){const error=new Error("bind_invalid_checkbox_value\nUsing `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\nhttps://svelte.dev/e/bind_invalid_checkbox_value");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/bind_invalid_checkbox_value")}function derived_references_self(){if(dev_fallback_default){const error=new Error("derived_references_self\nA derived value cannot reference itself recursively\nhttps://svelte.dev/e/derived_references_self");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/derived_references_self")}function effect_in_teardown(rune){if(dev_fallback_default){const error=new Error(`effect_in_teardown\n\`${rune}\` cannot be used inside an effect cleanup function\nhttps://svelte.dev/e/effect_in_teardown`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_in_teardown")}function effect_in_unowned_derived(){if(dev_fallback_default){const error=new Error("effect_in_unowned_derived\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\nhttps://svelte.dev/e/effect_in_unowned_derived");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function effect_orphan(rune){if(dev_fallback_default){const error=new Error(`effect_orphan\n\`${rune}\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_orphan")}function effect_update_depth_exceeded(){if(dev_fallback_default){const error=new Error("effect_update_depth_exceeded\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\nhttps://svelte.dev/e/effect_update_depth_exceeded");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function flush_sync_in_effect(){if(dev_fallback_default){const error=new Error("flush_sync_in_effect\nCannot use `flushSync` inside an effect\nhttps://svelte.dev/e/flush_sync_in_effect");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/flush_sync_in_effect")}function invalid_snippet(){if(dev_fallback_default){const error=new Error("invalid_snippet\nCould not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\nhttps://svelte.dev/e/invalid_snippet");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/invalid_snippet")}function props_invalid_value(key3){if(dev_fallback_default){const error=new Error(`props_invalid_value\nCannot do \`bind:${key3}={undefined}\` when \`${key3}\` has a fallback value\nhttps://svelte.dev/e/props_invalid_value`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/props_invalid_value")}function rune_outside_svelte(rune){if(dev_fallback_default){const error=new Error(`rune_outside_svelte\nThe \`${rune}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files\nhttps://svelte.dev/e/rune_outside_svelte`);error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/rune_outside_svelte")}function set_context_after_init(){if(dev_fallback_default){const error=new Error("set_context_after_init\n`setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\nhttps://svelte.dev/e/set_context_after_init");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/set_context_after_init")}function state_descriptors_fixed(){if(dev_fallback_default){const error=new Error("state_descriptors_fixed\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\nhttps://svelte.dev/e/state_descriptors_fixed");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function state_prototype_fixed(){if(dev_fallback_default){const error=new Error("state_prototype_fixed\nCannot set prototype of `$state` object\nhttps://svelte.dev/e/state_prototype_fixed");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_prototype_fixed")}function state_unsafe_mutation(){if(dev_fallback_default){const error=new Error("state_unsafe_mutation\nUpdating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\nhttps://svelte.dev/e/state_unsafe_mutation");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function svelte_boundary_reset_onerror(){if(dev_fallback_default){const error=new Error("svelte_boundary_reset_onerror\nA `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\nhttps://svelte.dev/e/svelte_boundary_reset_onerror");error.name="Svelte error";throw error}throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function await_reactivity_loss(name){dev_fallback_default?console.warn(`%c[svelte] await_reactivity_loss\n%cDetected reactivity loss when reading \`${name}\`. This happens when state is read in an async function after an earlier \`await\`\nhttps://svelte.dev/e/await_reactivity_loss`,bold,normal):console.warn("https://svelte.dev/e/await_reactivity_loss")}function await_waterfall(name,location){dev_fallback_default?console.warn(`%c[svelte] await_waterfall\n%cAn async derived, \`${name}\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\nhttps://svelte.dev/e/await_waterfall`,bold,normal):console.warn("https://svelte.dev/e/await_waterfall")}function hydration_attribute_changed(attribute,html2,value){dev_fallback_default?console.warn(`%c[svelte] hydration_attribute_changed\n%cThe \`${attribute}\` attribute on \`${html2}\` changed its value between server and client renders. The client value, \`${value}\`, will be ignored in favour of the server value\nhttps://svelte.dev/e/hydration_attribute_changed`,bold,normal):console.warn("https://svelte.dev/e/hydration_attribute_changed")}function hydration_mismatch(location){dev_fallback_default?console.warn(`%c[svelte] hydration_mismatch\n%c${location?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`:"Hydration failed because the initial UI does not match what was rendered on the server"}\nhttps://svelte.dev/e/hydration_mismatch`,bold,normal):console.warn("https://svelte.dev/e/hydration_mismatch")}function lifecycle_double_unmount(){dev_fallback_default?console.warn("%c[svelte] lifecycle_double_unmount\n%cTried to unmount a component that was not mounted\nhttps://svelte.dev/e/lifecycle_double_unmount",bold,normal):console.warn("https://svelte.dev/e/lifecycle_double_unmount")}function select_multiple_invalid_value(){dev_fallback_default?console.warn("%c[svelte] select_multiple_invalid_value\n%cThe `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\nhttps://svelte.dev/e/select_multiple_invalid_value",bold,normal):console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function state_proxy_equality_mismatch(operator){dev_fallback_default?console.warn(`%c[svelte] state_proxy_equality_mismatch\n%cReactive \`$state(...)\` proxies and the values they proxy have different identities. Because of this, comparisons with \`${operator}\` will produce unexpected results\nhttps://svelte.dev/e/state_proxy_equality_mismatch`,bold,normal):console.warn("https://svelte.dev/e/state_proxy_equality_mismatch")}function state_proxy_unmount(){dev_fallback_default?console.warn("%c[svelte] state_proxy_unmount\n%cTried to unmount a state proxy, rather than a component\nhttps://svelte.dev/e/state_proxy_unmount",bold,normal):console.warn("https://svelte.dev/e/state_proxy_unmount")}function svelte_boundary_reset_noop(){dev_fallback_default?console.warn("%c[svelte] svelte_boundary_reset_noop\n%cA `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\nhttps://svelte.dev/e/svelte_boundary_reset_noop",bold,normal):console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function set_hydrating(value){hydrating=value}function set_hydrate_node(node){if(null===node){hydration_mismatch();throw HYDRATION_ERROR}return hydrate_node=node}function hydrate_next(){return set_hydrate_node(get_next_sibling(hydrate_node))}function reset(node){if(hydrating){if(null!==get_next_sibling(hydrate_node)){hydration_mismatch();throw HYDRATION_ERROR}hydrate_node=node}}function next(count=1){var i2,node;if(hydrating){i2=count;node=hydrate_node;for(;i2--;)node=get_next_sibling(node);hydrate_node=node}}function skip_nodes(remove=!0){for(var data,next2,depth=0,node=hydrate_node;;){if(node.nodeType===COMMENT_NODE)if((data=node.data)===HYDRATION_END){if(0===depth)return node;depth-=1}else data!==HYDRATION_START&&data!==HYDRATION_START_ELSE||(depth+=1);next2=get_next_sibling(node);remove&&node.remove();node=next2}}function read_hydration_instruction(node){if(!node||node.nodeType!==COMMENT_NODE){hydration_mismatch();throw HYDRATION_ERROR}return node.data}function equals(value){return value===this.v}function safe_not_equal(a2,b3){return a2!=a2?b3==b3:a2!==b3||null!==a2&&"object"==typeof a2||"function"==typeof a2}function safe_equals(value){return!safe_not_equal(value,this.v)}function get_stack(label2){let error=Error();const stack2=error.stack;if(!stack2)return null;const lines=stack2.split("\n"),new_lines=["\n"];for(let i2=0;i2<lines.length;i2++){const line=lines[i2];if("Error"!==line){if(line.includes("validate_each_keys"))return null;line.includes("svelte/src/internal")||new_lines.push(line)}}if(1===new_lines.length)return null;define_property(error,"stack",{value:new_lines.join("\n")});define_property(error,"name",{value:`${label2}Error`});return error}function tag(source2,label2){source2.label=label2;tag_proxy(source2.v,label2);return source2}function tag_proxy(value,label2){var _a8;null==(_a8=null==value?void 0:value[PROXY_PATH_SYMBOL])||_a8.call(value,label2);return value}function set_component_context(context2){component_context=context2}function set_dev_stack(stack2){dev_stack=stack2}function set_dev_current_component_function(fn){dev_current_component_function=fn}function getContext(key3){return get_or_init_context_map("getContext").get(key3)}function setContext(key3,context2){var flags2;const context_map=get_or_init_context_map("setContext");if(async_mode_flag){flags2=active_effect.f;!active_reaction&&0!==(flags2&BRANCH_EFFECT)&&0===(flags2&EFFECT_RAN)||set_context_after_init()}context_map.set(key3,context2);return context2}function push(props,runes=!1,fn){component_context={p:component_context,c:null,e:null,s:props,x:null,l:legacy_mode_flag&&!runes?{s:null,u:null,$:[]}:null};if(dev_fallback_default){component_context.function=fn;dev_current_component_function=fn}}function pop(component2){var _a8,fn,context2=component_context,effects=context2.e;if(null!==effects){context2.e=null;for(fn of effects)create_user_effect(fn)}void 0!==component2&&(context2.x=component2);component_context=context2.p;dev_fallback_default&&(dev_current_component_function=null!=(_a8=null==component_context?void 0:component_context.function)?_a8:null);return null!=component2?component2:{}}function is_runes(){return!legacy_mode_flag||null!==component_context&&null===component_context.l}function get_or_init_context_map(name){var _a8;null===component_context&&lifecycle_outside_component(name);return null!=(_a8=component_context.c)?_a8:component_context.c=new Map(get_parent_context(component_context)||void 0)}function get_parent_context(component_context2){let parent=component_context2.p;for(;null!==parent;){const context_map=parent.c;if(null!==context_map)return context_map;parent=parent.p}return null}function run_micro_tasks(){var tasks3=micro_tasks;micro_tasks=[];run_all(tasks3)}function queue_micro_task(fn){if(0===micro_tasks.length&&!is_flushing_sync){var tasks3=micro_tasks;queueMicrotask(()=>{tasks3===micro_tasks&&run_micro_tasks()})}micro_tasks.push(fn)}function flush_tasks(){for(;micro_tasks.length>0;)run_micro_tasks()}function handle_error(error){var effect2=active_effect;if(null===effect2){active_reaction.f|=ERROR_VALUE;return error}dev_fallback_default&&error instanceof Error&&!adjustments.has(error)&&adjustments.set(error,get_adjustments(error,effect2));if(0===(effect2.f&EFFECT_RAN)){if(0===(effect2.f&BOUNDARY_EFFECT)){!effect2.parent&&error instanceof Error&&apply_adjustments(error);throw error}effect2.b.error(error)}else invoke_error_boundary(error,effect2)}function invoke_error_boundary(error,effect2){for(;null!==effect2;){if(0!==(effect2.f&BOUNDARY_EFFECT))try{effect2.b.error(error);return}catch(e3){error=e3}effect2=effect2.parent}error instanceof Error&&apply_adjustments(error);throw error}function get_adjustments(error,effect2){var _a8,_b5,_c3,indent,component_stack,context2;const message_descriptor=get_descriptor(error,"message");if(!message_descriptor||message_descriptor.configurable){component_stack=`\n${indent=is_firefox?" ":"\t"}in ${(null==(_a8=effect2.fn)?void 0:_a8.name)||"<unknown>"}`;context2=effect2.ctx;for(;null!==context2;){component_stack+=`\n${indent}in ${null==(_b5=context2.function)?void 0:_b5[FILENAME].split("/").pop()}`;context2=context2.p}return{message:error.message+`\n${component_stack}\n`,stack:null==(_c3=error.stack)?void 0:_c3.split("\n").filter(line=>!line.includes("svelte/src/internal")).join("\n")}}}function apply_adjustments(error){const adjusted=adjustments.get(error);if(adjusted){define_property(error,"message",{value:adjusted.message});define_property(error,"stack",{value:adjusted.stack})}}function flushSync(fn){var was_flushing_sync,result;async_mode_flag&&null!==active_effect&&flush_sync_in_effect();was_flushing_sync=is_flushing_sync;is_flushing_sync=!0;try{if(fn){null!==current_batch&&flush_effects();result=fn()}for(;;){flush_tasks();if(0===queued_root_effects.length){null==current_batch||current_batch.flush();if(0===queued_root_effects.length){last_scheduled_effect=null;return result}}flush_effects()}}finally{is_flushing_sync=was_flushing_sync}}function flush_effects(){var _a8,flush_count,batch,updates,entry,was_updating_effect=is_updating_effect;is_flushing=!0;try{flush_count=0;set_is_updating_effect(!0);for(;queued_root_effects.length>0;){batch=Batch.ensure();if(flush_count++>1e3){if(dev_fallback_default){updates=new Map;for(const source2 of batch.current.keys())for(const[stack2,update2]of null!=(_a8=source2.updated)?_a8:[]){if(!(entry=updates.get(stack2))){entry={error:update2.error,count:0};updates.set(stack2,entry)}entry.count+=update2.count}for(const update2 of updates.values())console.error(update2.error)}infinite_loop_guard()}batch.process(queued_root_effects);old_values.clear()}}finally{is_flushing=!1;set_is_updating_effect(was_updating_effect);last_scheduled_effect=null}}function infinite_loop_guard(){try{effect_update_depth_exceeded()}catch(error){dev_fallback_default&&define_property(error,"stack",{value:""});invoke_error_boundary(error,last_scheduled_effect)}}function flush_queued_effects(effects){var i2,effect2,length=effects.length;if(0!==length){i2=0;for(;i2<length;)if(0===((effect2=effects[i2++]).f&(DESTROYED|INERT))&&is_dirty(effect2)){eager_block_effects=[];update_effect(effect2);null===effect2.deps&&null===effect2.first&&null===effect2.nodes_start&&(null===effect2.teardown&&null===effect2.ac?unlink_effect(effect2):effect2.fn=null);if((null==eager_block_effects?void 0:eager_block_effects.length)>0){old_values.clear();for(const e3 of eager_block_effects)update_effect(e3);eager_block_effects=[]}}eager_block_effects=null}}function mark_effects(value,sources){if(null!==value.reactions)for(const reaction of value.reactions){const flags2=reaction.f;if(0!==(flags2&DERIVED))mark_effects(reaction,sources);else if(0!==(flags2&(ASYNC|BLOCK_EFFECT))&&depends_on(reaction,sources)){set_signal_status(reaction,DIRTY);schedule_effect(reaction)}}}function depends_on(reaction,sources){if(null!==reaction.deps)for(const dep of reaction.deps){if(sources.includes(dep))return!0;if(0!==(dep.f&DERIVED)&&depends_on(dep,sources))return!0}return!1}function schedule_effect(signal){for(var flags2,effect2=last_scheduled_effect=signal;null!==effect2.parent;){flags2=(effect2=effect2.parent).f;if(is_flushing&&effect2===active_effect&&0!==(flags2&BLOCK_EFFECT))return;if(0!==(flags2&(ROOT_EFFECT|BRANCH_EFFECT))){if(0===(flags2&CLEAN))return;effect2.f^=CLEAN}}queued_root_effects.push(effect2)}function createSubscriber(start){let stop,subscribers=0,version2=source(0);dev_fallback_default&&tag(version2,"createSubscriber version");return()=>{if(effect_tracking()){get(version2);render_effect(()=>{0===subscribers&&(stop=untrack(()=>start(()=>increment(version2))));subscribers+=1;return()=>{queue_micro_task(()=>{subscribers-=1;if(0===subscribers){null==stop||stop();stop=void 0;increment(version2)}})}})}}}function boundary(node,props,children){new Boundary(node,props,children)}function flatten(sync3,async2,fn){var batch,parent,restore,was_hydrating;const d4=is_runes()?derived:derived_safe_equal;if(0!==async2.length){batch=current_batch;parent=active_effect;restore=capture();was_hydrating=hydrating;Promise.all(async2.map(expression=>async_derived(expression))).then(result=>{restore();try{fn([...sync3.map(d4),...result])}catch(error){0===(parent.f&DESTROYED)&&invoke_error_boundary(error,parent)}was_hydrating&&set_hydrating(!1);null==batch||batch.deactivate();unset_context()}).catch(error=>{invoke_error_boundary(error,parent)})}else fn(sync3.map(d4))}function capture(){var previous_hydrate_node,previous_dev_stack,previous_effect=active_effect,previous_reaction=active_reaction,previous_component_context=component_context,previous_batch2=current_batch,was_hydrating=hydrating;was_hydrating&&(previous_hydrate_node=hydrate_node);dev_fallback_default&&(previous_dev_stack=dev_stack);return function restore(){set_active_effect(previous_effect);set_active_reaction(previous_reaction);set_component_context(previous_component_context);null==previous_batch2||previous_batch2.activate();if(was_hydrating){set_hydrating(!0);set_hydrate_node(previous_hydrate_node)}if(dev_fallback_default){set_from_async_derived(null);set_dev_stack(previous_dev_stack)}}}function unset_context(){set_active_effect(null);set_active_reaction(null);set_component_context(null);if(dev_fallback_default){set_from_async_derived(null);set_dev_stack(null)}}function set_from_async_derived(v2){current_async_effect=v2}function derived(fn){var flags2=DERIVED|DIRTY,parent_derived=null!==active_reaction&&0!==(active_reaction.f&DERIVED)?active_reaction:null;null===active_effect||null!==parent_derived&&0!==(parent_derived.f&UNOWNED)?flags2|=UNOWNED:active_effect.f|=EFFECT_PRESERVED;const signal={ctx:component_context,deps:null,effects:null,equals,f:flags2,fn,reactions:null,rv:0,v:UNINITIALIZED,wv:0,parent:null!=parent_derived?parent_derived:active_effect,ac:null};dev_fallback_default&&tracing_mode_flag&&(signal.created=get_stack("CreatedAt"));return signal}function async_derived(fn,location){var boundary2,promise,signal,should_suspend,deferreds;let parent=active_effect;null===parent&&async_derived_orphan();boundary2=parent.b;promise=void 0;signal=source(UNINITIALIZED);should_suspend=!active_reaction;deferreds=new Map;async_effect(()=>{var _a8,d4,batch,pending3;dev_fallback_default&&(current_async_effect=active_effect);d4=deferred();promise=d4.promise;try{Promise.resolve(fn()).then(d4.resolve,d4.reject).then(unset_context)}catch(error){d4.reject(error);unset_context()}dev_fallback_default&&(current_async_effect=null);batch=current_batch;pending3=boundary2.is_pending();if(should_suspend){boundary2.update_pending_count(1);if(!pending3){batch.increment();null==(_a8=deferreds.get(batch))||_a8.reject(STALE_REACTION);deferreds.delete(batch);deferreds.set(batch,d4)}}const handler=(value,error=void 0)=>{current_async_effect=null;pending3||batch.activate();if(error){if(error!==STALE_REACTION){signal.f|=ERROR_VALUE;internal_set(signal,error)}}else{0!==(signal.f&ERROR_VALUE)&&(signal.f^=ERROR_VALUE);internal_set(signal,value);for(const[b3,d5]of deferreds){deferreds.delete(b3);if(b3===batch)break;d5.reject(STALE_REACTION)}if(dev_fallback_default&&void 0!==location){recent_async_deriveds.add(signal);setTimeout(()=>{if(recent_async_deriveds.has(signal)){await_waterfall(signal.label,location);recent_async_deriveds.delete(signal)}})}}if(should_suspend){boundary2.update_pending_count(-1);pending3||batch.decrement()}};d4.promise.then(handler,e3=>handler(null,e3||"unknown"))});teardown(()=>{for(const d4 of deferreds.values())d4.reject(STALE_REACTION)});dev_fallback_default&&(signal.f|=ASYNC);return new Promise(fulfil=>{(function next2(p2){function go(){p2===promise?fulfil(signal):next2(promise)}p2.then(go,go)})(promise)})}function user_derived(fn){const d4=derived(fn);async_mode_flag||push_reaction_value(d4);return d4}function derived_safe_equal(fn){const signal=derived(fn);signal.equals=safe_equals;return signal}function destroy_derived_effects(derived3){var i2,effects=derived3.effects;if(null!==effects){derived3.effects=null;for(i2=0;i2<effects.length;i2+=1)destroy_effect(effects[i2])}}function get_derived_parent_effect(derived3){for(var parent=derived3.parent;null!==parent;){if(0===(parent.f&DERIVED))return parent;parent=parent.parent}return null}function execute_derived(derived3){var value,prev_active_effect=active_effect;set_active_effect(get_derived_parent_effect(derived3));if(dev_fallback_default){let prev_inspect_effects=inspect_effects;set_inspect_effects(new Set);try{stack.includes(derived3)&&derived_references_self();stack.push(derived3);destroy_derived_effects(derived3);value=update_reaction(derived3)}finally{set_active_effect(prev_active_effect);set_inspect_effects(prev_inspect_effects);stack.pop()}}else try{destroy_derived_effects(derived3);value=update_reaction(derived3)}finally{set_active_effect(prev_active_effect)}return value}function update_derived(derived3){var value=execute_derived(derived3);if(!derived3.equals(value)){derived3.v=value;derived3.wv=increment_write_version()}is_destroying_effect||(null!==batch_values?batch_values.set(derived3,derived3.v):set_signal_status(derived3,!skip_reaction&&0===(derived3.f&UNOWNED)||null===derived3.deps?CLEAN:MAYBE_DIRTY))}function set_inspect_effects(v2){inspect_effects=v2}function set_inspect_effects_deferred(){inspect_effects_deferred=!0}function source(v2,stack2){var signal={f:0,v:v2,reactions:null,equals,rv:0,wv:0};if(dev_fallback_default&&tracing_mode_flag){signal.created=null!=stack2?stack2:get_stack("CreatedAt");signal.updated=null;signal.set_during_effect=!1;signal.trace=null}return signal}function state(v2,stack2){const s2=source(v2,stack2);push_reaction_value(s2);return s2}function mutable_source(initial_value,immutable=!1,trackable=!0){var _a8,_b5;const s2=source(initial_value);immutable||(s2.equals=safe_equals);legacy_mode_flag&&trackable&&null!==component_context&&null!==component_context.l&&(null!=(_b5=(_a8=component_context.l).s)?_b5:_a8.s=[]).push(s2);return s2}function set(source2,value,should_proxy=!1){var _a8;null===active_reaction||untracking&&0===(active_reaction.f&INSPECT_EFFECT)||!is_runes()||0===(active_reaction.f&(DERIVED|BLOCK_EFFECT|ASYNC|INSPECT_EFFECT))||(null==(_a8=current_sources)?void 0:_a8.includes(source2))||state_unsafe_mutation();let new_value=should_proxy?proxy(value):value;dev_fallback_default&&tag_proxy(new_value,source2.label);return internal_set(source2,new_value)}function internal_set(source2,value){var old_value;if(!source2.equals(value)){old_value=source2.v;is_destroying_effect?old_values.set(source2,value):old_values.set(source2,old_value);source2.v=value;Batch.ensure().capture(source2,old_value);if(dev_fallback_default){if(tracing_mode_flag||null!==active_effect){const error=get_stack("UpdatedAt");if(null!==error){null!=source2.updated||(source2.updated=new Map);let entry=source2.updated.get(error.stack);if(!entry){entry={error,count:0};source2.updated.set(error.stack,entry)}entry.count++}}null!==active_effect&&(source2.set_during_effect=!0)}if(0!==(source2.f&DERIVED)){0!==(source2.f&DIRTY)&&execute_derived(source2);set_signal_status(source2,0===(source2.f&UNOWNED)?CLEAN:MAYBE_DIRTY)}source2.wv=increment_write_version();mark_reactions(source2,DIRTY);is_runes()&&null!==active_effect&&0!==(active_effect.f&CLEAN)&&0===(active_effect.f&(BRANCH_EFFECT|ROOT_EFFECT))&&(null===untracked_writes?set_untracked_writes([source2]):untracked_writes.push(source2));dev_fallback_default&&inspect_effects.size>0&&!inspect_effects_deferred&&flush_inspect_effects()}return value}function flush_inspect_effects(){inspect_effects_deferred=!1;const inspects=Array.from(inspect_effects);for(const effect2 of inspects){0!==(effect2.f&CLEAN)&&set_signal_status(effect2,MAYBE_DIRTY);is_dirty(effect2)&&update_effect(effect2)}inspect_effects.clear()}function update(source2,d4=1){var value=get(source2),result=1===d4?value++:value--;set(source2,value);return result}function increment(source2){set(source2,source2.v+1)}function mark_reactions(signal,status){var runes,length,i2,reaction,flags2,not_dirty,reactions=signal.reactions;if(null!==reactions){runes=is_runes();length=reactions.length;for(i2=0;i2<length;i2++){flags2=(reaction=reactions[i2]).f;if(runes||reaction!==active_effect)if(dev_fallback_default&&0!==(flags2&INSPECT_EFFECT))inspect_effects.add(reaction);else{(not_dirty=0===(flags2&DIRTY))&&set_signal_status(reaction,status);if(0!==(flags2&DERIVED))mark_reactions(reaction,MAYBE_DIRTY);else if(not_dirty){0!==(flags2&BLOCK_EFFECT)&&null!==eager_block_effects&&eager_block_effects.push(reaction);schedule_effect(reaction)}}}}}function proxy(value){function update_path(new_path){if(!updating){updating=!0;tag(version2,`${path2=new_path} version`);for(const[prop2,source2]of sources)tag(source2,get_label(path2,prop2));updating=!1}}var sources,is_proxied_array,version2,stack2,parent_version,with_parent,path2;if("object"!=typeof value||null===value||STATE_SYMBOL in value)return value;const prototype=get_prototype_of(value);if(prototype!==object_prototype&&prototype!==array_prototype)return value;sources=new Map;is_proxied_array=is_array(value);version2=state(0);stack2=dev_fallback_default&&tracing_mode_flag?get_stack("CreatedAt"):null;parent_version=update_version;with_parent=fn=>{var reaction,version3,result;if(update_version===parent_version)return fn();reaction=active_reaction;version3=update_version;set_active_reaction(null);set_update_version(parent_version);result=fn();set_active_reaction(reaction);set_update_version(version3);return result};if(is_proxied_array){sources.set("length",state(value.length,stack2));dev_fallback_default&&(value=inspectable_array(value))}path2="";let updating=!1;return new Proxy(value,{defineProperty(_,prop2,descriptor){"value"in descriptor&&!1!==descriptor.configurable&&!1!==descriptor.enumerable&&!1!==descriptor.writable||state_descriptors_fixed();var s2=sources.get(prop2);void 0===s2?s2=with_parent(()=>{var s3=state(descriptor.value,stack2);sources.set(prop2,s3);dev_fallback_default&&"string"==typeof prop2&&tag(s3,get_label(path2,prop2));return s3}):set(s2,descriptor.value,!0);return!0},deleteProperty(target,prop2){var s2=sources.get(prop2);if(void 0===s2){if(prop2 in target){const s3=with_parent(()=>state(UNINITIALIZED,stack2));sources.set(prop2,s3);increment(version2);dev_fallback_default&&tag(s3,get_label(path2,prop2))}}else{set(s2,UNINITIALIZED);increment(version2)}return!0},get(target,prop2,receiver){var _a8,s2,exists,v2;if(prop2===STATE_SYMBOL)return value;if(dev_fallback_default&&prop2===PROXY_PATH_SYMBOL)return update_path;s2=sources.get(prop2);exists=prop2 in target;if(void 0===s2&&(!exists||(null==(_a8=get_descriptor(target,prop2))?void 0:_a8.writable))){s2=with_parent(()=>{var s3=state(proxy(exists?target[prop2]:UNINITIALIZED),stack2);dev_fallback_default&&tag(s3,get_label(path2,prop2));return s3});sources.set(prop2,s2)}return void 0!==s2?(v2=get(s2))===UNINITIALIZED?void 0:v2:Reflect.get(target,prop2,receiver)},getOwnPropertyDescriptor(target,prop2){var s2,source2,value2,descriptor=Reflect.getOwnPropertyDescriptor(target,prop2);if(descriptor&&"value"in descriptor)(s2=sources.get(prop2))&&(descriptor.value=get(s2));else if(void 0===descriptor){value2=null==(source2=sources.get(prop2))?void 0:source2.v;if(void 0!==source2&&value2!==UNINITIALIZED)return{enumerable:!0,configurable:!0,value:value2,writable:!0}}return descriptor},has(target,prop2){var _a8,s2,has;if(prop2===STATE_SYMBOL)return!0;s2=sources.get(prop2);has=void 0!==s2&&s2.v!==UNINITIALIZED||Reflect.has(target,prop2);if(void 0!==s2||null!==active_effect&&(!has||(null==(_a8=get_descriptor(target,prop2))?void 0:_a8.writable))){if(void 0===s2){s2=with_parent(()=>{var s3=state(has?proxy(target[prop2]):UNINITIALIZED,stack2);dev_fallback_default&&tag(s3,get_label(path2,prop2));return s3});sources.set(prop2,s2)}if(get(s2)===UNINITIALIZED)return!1}return has},set(target,prop2,value2,receiver){var _a8,i2,other_s,descriptor,ls,n3,s2=sources.get(prop2),has=prop2 in target;if(is_proxied_array&&"length"===prop2)for(i2=value2;i2<s2.v;i2+=1)if(void 0!==(other_s=sources.get(i2+"")))set(other_s,UNINITIALIZED);else if(i2 in target){other_s=with_parent(()=>state(UNINITIALIZED,stack2));sources.set(i2+"",other_s);dev_fallback_default&&tag(other_s,get_label(path2,i2))}if(void 0===s2){if(!has||(null==(_a8=get_descriptor(target,prop2))?void 0:_a8.writable)){s2=with_parent(()=>state(void 0,stack2));dev_fallback_default&&tag(s2,get_label(path2,prop2));set(s2,proxy(value2));sources.set(prop2,s2)}}else{has=s2.v!==UNINITIALIZED;set(s2,with_parent(()=>proxy(value2)))}(null==(descriptor=Reflect.getOwnPropertyDescriptor(target,prop2))?void 0:descriptor.set)&&descriptor.set.call(receiver,value2);if(!has){if(is_proxied_array&&"string"==typeof prop2){ls=sources.get("length");n3=Number(prop2);Number.isInteger(n3)&&n3>=ls.v&&set(ls,n3+1)}increment(version2)}return!0},ownKeys(target){var own_keys;get(version2);own_keys=Reflect.ownKeys(target).filter(key4=>{var source3=sources.get(key4);return void 0===source3||source3.v!==UNINITIALIZED});for(var[key3,source2]of sources)source2.v===UNINITIALIZED||key3 in target||own_keys.push(key3);return own_keys},setPrototypeOf(){state_prototype_fixed()}})}function get_label(path2,prop2){var _a8;return"symbol"==typeof prop2?`${path2}[Symbol(${null!=(_a8=prop2.description)?_a8:""})]`:regex_is_valid_identifier.test(prop2)?`${path2}.${prop2}`:/^\d+$/.test(prop2)?`${path2}[${prop2}]`:`${path2}['${prop2}']`}function get_proxied_value(value){try{if(null!==value&&"object"==typeof value&&STATE_SYMBOL in value)return value[STATE_SYMBOL]}catch(e3){}return value}function is(a2,b3){return Object.is(get_proxied_value(a2),get_proxied_value(b3))}function inspectable_array(array){return new Proxy(array,{get(target,prop2,receiver){var value=Reflect.get(target,prop2,receiver);return ARRAY_MUTATING_METHODS.has(prop2)?function(...args){set_inspect_effects_deferred();var result=value.apply(this,args);flush_inspect_effects();return result}:value}})}function init_array_prototype_warnings(){const array_prototype2=Array.prototype,cleanup=Array.__svelte_cleanup;cleanup&&cleanup();const{indexOf,lastIndexOf,includes}=array_prototype2;array_prototype2.indexOf=function(item,from_index){const index6=indexOf.call(this,item,from_index);if(-1===index6)for(let i2=null!=from_index?from_index:0;i2<this.length;i2+=1)if(get_proxied_value(this[i2])===item){state_proxy_equality_mismatch("array.indexOf(...)");break}return index6};array_prototype2.lastIndexOf=function(item,from_index){const index6=lastIndexOf.call(this,item,null!=from_index?from_index:this.length-1);if(-1===index6)for(let i2=0;i2<=(null!=from_index?from_index:this.length-1);i2+=1)if(get_proxied_value(this[i2])===item){state_proxy_equality_mismatch("array.lastIndexOf(...)");break}return index6};array_prototype2.includes=function(item,from_index){const has=includes.call(this,item,from_index);if(!has)for(let i2=0;i2<this.length;i2+=1)if(get_proxied_value(this[i2])===item){state_proxy_equality_mismatch("array.includes(...)");break}return has};Array.__svelte_cleanup=()=>{array_prototype2.indexOf=indexOf;array_prototype2.lastIndexOf=lastIndexOf;array_prototype2.includes=includes}}function init_operations(){var element_prototype,node_prototype,text_prototype;if(void 0===$window){$window=window;document;is_firefox=/Firefox/.test(navigator.userAgent);element_prototype=Element.prototype;node_prototype=Node.prototype;text_prototype=Text.prototype;first_child_getter=get_descriptor(node_prototype,"firstChild").get;next_sibling_getter=get_descriptor(node_prototype,"nextSibling").get;if(is_extensible(element_prototype)){element_prototype.__click=void 0;element_prototype.__className=void 0;element_prototype.__attributes=null;element_prototype.__style=void 0;element_prototype.__e=void 0}is_extensible(text_prototype)&&(text_prototype.__t=void 0);if(dev_fallback_default){element_prototype.__svelte_meta=null;init_array_prototype_warnings()}}}function create_text(value=""){return document.createTextNode(value)}function get_first_child(node){return first_child_getter.call(node)}function get_next_sibling(node){return next_sibling_getter.call(node)}function child(node,is_text){var child2,text2;if(!hydrating)return get_first_child(node);if(null===(child2=get_first_child(hydrate_node)))child2=hydrate_node.appendChild(create_text());else if(is_text&&child2.nodeType!==TEXT_NODE){text2=create_text();null==child2||child2.before(text2);set_hydrate_node(text2);return text2}set_hydrate_node(child2);return child2}function first_child(fragment,is_text=!1){var _a8,_b5,first,text2;if(!hydrating)return(first=get_first_child(fragment))instanceof Comment&&""===first.data?get_next_sibling(first):first;if(is_text&&(null==(_a8=hydrate_node)?void 0:_a8.nodeType)!==TEXT_NODE){text2=create_text();null==(_b5=hydrate_node)||_b5.before(text2);set_hydrate_node(text2);return text2}return hydrate_node}function sibling(node,count=1,is_text=!1){var last_sibling,text2;let next_sibling=hydrating?hydrate_node:node;for(;count--;){last_sibling=next_sibling;next_sibling=get_next_sibling(next_sibling)}if(!hydrating)return next_sibling;if(is_text&&(null==next_sibling?void 0:next_sibling.nodeType)!==TEXT_NODE){text2=create_text();null===next_sibling?null==last_sibling||last_sibling.after(text2):next_sibling.before(text2);set_hydrate_node(text2);return text2}set_hydrate_node(next_sibling);return next_sibling}function clear_text_content(node){node.textContent=""}function should_defer_append(){return!!async_mode_flag&&null===eager_block_effects&&0!==(active_effect.f&EFFECT_RAN)}function remove_textarea_child(dom){hydrating&&null!==get_first_child(dom)&&clear_text_content(dom)}function add_form_reset_listener(){if(!listening_to_form_reset){listening_to_form_reset=!0;document.addEventListener("reset",evt=>{Promise.resolve().then(()=>{var _a8;if(!evt.defaultPrevented)for(const e3 of evt.target.elements)null==(_a8=e3.__on_r)||_a8.call(e3)})},{capture:!0})}}function without_reactive_context(fn){var previous_reaction=active_reaction,previous_effect=active_effect;set_active_reaction(null);set_active_effect(null);try{return fn()}finally{set_active_reaction(previous_reaction);set_active_effect(previous_effect)}}function listen_to_event_and_reset_event(element2,event2,handler,on_reset=handler){element2.addEventListener(event2,()=>without_reactive_context(handler));const prev=element2.__on_r;element2.__on_r=prev?()=>{prev();on_reset(!0)}:()=>on_reset(!0);add_form_reset_listener()}function validate_effect(rune){null===active_effect&&null===active_reaction&&effect_orphan(rune);null!==active_reaction&&0!==(active_reaction.f&UNOWNED)&&null===active_effect&&effect_in_unowned_derived();is_destroying_effect&&effect_in_teardown(rune)}function push_effect(effect2,parent_effect){var parent_last=parent_effect.last;if(null===parent_last)parent_effect.last=parent_effect.first=effect2;else{parent_last.next=effect2;effect2.prev=parent_last;parent_effect.last=effect2}}function create_effect(type,fn,sync3,push2=!0){var _a8,effect2,e3,derived3,parent=active_effect;if(dev_fallback_default)for(;null!==parent&&0!==(parent.f&INSPECT_EFFECT);)parent=parent.parent;null!==parent&&0!==(parent.f&INERT)&&(type|=INERT);effect2={ctx:component_context,deps:null,nodes_start:null,nodes_end:null,f:type|DIRTY,first:null,fn,last:null,next:null,parent,b:parent&&parent.b,prev:null,teardown:null,transitions:null,wv:0,ac:null};dev_fallback_default&&(effect2.component_function=dev_current_component_function);if(sync3)try{update_effect(effect2);effect2.f|=EFFECT_RAN}catch(e4){destroy_effect(effect2);throw e4}else null!==fn&&schedule_effect(effect2);if(push2){e3=effect2;sync3&&null===e3.deps&&null===e3.teardown&&null===e3.nodes_start&&e3.first===e3.last&&0===(e3.f&EFFECT_PRESERVED)&&(e3=e3.first);if(null!==e3){e3.parent=parent;null!==parent&&push_effect(e3,parent);null!==active_reaction&&0!==(active_reaction.f&DERIVED)&&0===(type&ROOT_EFFECT)&&(null!=(_a8=(derived3=active_reaction).effects)?_a8:derived3.effects=[]).push(e3)}}return effect2}function effect_tracking(){return null!==active_reaction&&!untracking}function teardown(fn){const effect2=create_effect(RENDER_EFFECT,null,!1);set_signal_status(effect2,CLEAN);effect2.teardown=fn;return effect2}function user_effect(fn){var _a8,flags2,context2;validate_effect("$effect");dev_fallback_default&&define_property(fn,"name",{value:"$effect"});flags2=active_effect.f;if(active_reaction||0===(flags2&BRANCH_EFFECT)||0!==(flags2&EFFECT_RAN))return create_user_effect(fn);(null!=(_a8=(context2=component_context).e)?_a8:context2.e=[]).push(fn)}function create_user_effect(fn){return create_effect(EFFECT|USER_EFFECT,fn,!1)}function user_pre_effect(fn){validate_effect("$effect.pre");dev_fallback_default&&define_property(fn,"name",{value:"$effect.pre"});return create_effect(RENDER_EFFECT|USER_EFFECT,fn,!0)}function component_root(fn){Batch.ensure();const effect2=create_effect(ROOT_EFFECT|EFFECT_PRESERVED,fn,!0);return(options={})=>new Promise(fulfil=>{if(options.outro)pause_effect(effect2,()=>{destroy_effect(effect2);fulfil(void 0)});else{destroy_effect(effect2);fulfil(void 0)}})}function effect(fn){return create_effect(EFFECT,fn,!1)}function legacy_pre_effect(deps,fn){var token={effect:null,ran:!1,deps};component_context.l.$.push(token);token.effect=render_effect(()=>{deps();if(!token.ran){token.ran=!0;untrack(fn)}})}function legacy_pre_effect_reset(){var context2=component_context;render_effect(()=>{var token,effect2;for(token of context2.l.$){token.deps();0!==((effect2=token.effect).f&CLEAN)&&set_signal_status(effect2,MAYBE_DIRTY);is_dirty(effect2)&&update_effect(effect2);token.ran=!1}})}function async_effect(fn){return create_effect(ASYNC|EFFECT_PRESERVED,fn,!0)}function render_effect(fn,flags2=0){return create_effect(RENDER_EFFECT|flags2,fn,!0)}function template_effect(fn,sync3=[],async2=[]){flatten(sync3,async2,values2=>{create_effect(RENDER_EFFECT,()=>fn(...values2.map(get)),!0)})}function block(fn,flags2=0){var effect2=create_effect(BLOCK_EFFECT|flags2,fn,!0);dev_fallback_default&&(effect2.dev_stack=dev_stack);return effect2}function branch(fn,push2=!0){return create_effect(BRANCH_EFFECT|EFFECT_PRESERVED,fn,!0,push2)}function execute_effect_teardown(effect2){var teardown2=effect2.teardown;if(null!==teardown2){const previously_destroying_effect=is_destroying_effect,previous_reaction=active_reaction;set_is_destroying_effect(!0);set_active_reaction(null);try{teardown2.call(null)}finally{set_is_destroying_effect(previously_destroying_effect);set_active_reaction(previous_reaction)}}}function destroy_effect_children(signal,remove_dom=!1){var next2,effect2=signal.first;signal.first=signal.last=null;for(;null!==effect2;){const controller=effect2.ac;null!==controller&&without_reactive_context(()=>{controller.abort(STALE_REACTION)});next2=effect2.next;0!==(effect2.f&ROOT_EFFECT)?effect2.parent=null:destroy_effect(effect2,remove_dom);effect2=next2}}function destroy_block_effect_children(signal){for(var next2,effect2=signal.first;null!==effect2;){next2=effect2.next;0===(effect2.f&BRANCH_EFFECT)&&destroy_effect(effect2);effect2=next2}}function destroy_effect(effect2,remove_dom=!0){var transitions,parent,removed=!1;if((remove_dom||0!==(effect2.f&HEAD_EFFECT))&&null!==effect2.nodes_start&&null!==effect2.nodes_end){remove_effect_dom(effect2.nodes_start,effect2.nodes_end);removed=!0}destroy_effect_children(effect2,remove_dom&&!removed);remove_reactions(effect2,0);set_signal_status(effect2,DESTROYED);if(null!==(transitions=effect2.transitions))for(const transition2 of transitions)transition2.stop();execute_effect_teardown(effect2);null!==(parent=effect2.parent)&&null!==parent.first&&unlink_effect(effect2);dev_fallback_default&&(effect2.component_function=null);effect2.next=effect2.prev=effect2.teardown=effect2.ctx=effect2.deps=effect2.fn=effect2.nodes_start=effect2.nodes_end=effect2.ac=null}function remove_effect_dom(node,end){for(;null!==node;){var next2=node===end?null:get_next_sibling(node);node.remove();node=next2}}function unlink_effect(effect2){var parent=effect2.parent,prev=effect2.prev,next2=effect2.next;null!==prev&&(prev.next=next2);null!==next2&&(next2.prev=prev);if(null!==parent){parent.first===effect2&&(parent.first=next2);parent.last===effect2&&(parent.last=prev)}}function pause_effect(effect2,callback,destroy2=!0){var transitions=[];pause_children(effect2,transitions,!0);run_out_transitions(transitions,()=>{destroy2&&destroy_effect(effect2);callback&&callback()})}function run_out_transitions(transitions,fn){var check,transition2,remaining=transitions.length;if(remaining>0){check=()=>--remaining||fn();for(transition2 of transitions)transition2.out(check)}else fn()}function pause_children(effect2,transitions,local){var child2,sibling2;if(0===(effect2.f&INERT)){effect2.f^=INERT;if(null!==effect2.transitions)for(const transition2 of effect2.transitions)(transition2.is_global||local)&&transitions.push(transition2);child2=effect2.first;for(;null!==child2;){sibling2=child2.next;pause_children(child2,transitions,!(0===(child2.f&EFFECT_TRANSPARENT)&&0===(child2.f&BRANCH_EFFECT))&&local);child2=sibling2}}}function resume_effect(effect2){resume_children(effect2,!0)}function resume_children(effect2,local){var child2,sibling2;if(0!==(effect2.f&INERT)){effect2.f^=INERT;if(0===(effect2.f&CLEAN)){set_signal_status(effect2,DIRTY);schedule_effect(effect2)}child2=effect2.first;for(;null!==child2;){sibling2=child2.next;resume_children(child2,!(0===(child2.f&EFFECT_TRANSPARENT)&&0===(child2.f&BRANCH_EFFECT))&&local);child2=sibling2}if(null!==effect2.transitions)for(const transition2 of effect2.transitions)(transition2.is_global||local)&&transition2.in()}}function move_effect(effect2,fragment){for(var next2,node=effect2.nodes_start,end=effect2.nodes_end;null!==node;){next2=node===end?null:get_next_sibling(node);fragment.append(node);node=next2}}function capture_signals(fn){var signal,previous_captured_signals=captured_signals;try{captured_signals=new Set;untrack(fn);if(null!==previous_captured_signals)for(signal of captured_signals)previous_captured_signals.add(signal);return captured_signals}finally{captured_signals=previous_captured_signals}}function invalidate_inner_signals(fn){for(var signal of capture_signals(fn))internal_set(signal,signal.v)}function set_is_updating_effect(value){is_updating_effect=value}function set_is_destroying_effect(value){is_destroying_effect=value}function set_active_reaction(reaction){active_reaction=reaction}function set_active_effect(effect2){active_effect=effect2}function push_reaction_value(value){null===active_reaction||async_mode_flag&&0===(active_reaction.f&DERIVED)||(null===current_sources?current_sources=[value]:current_sources.push(value))}function set_untracked_writes(value){untracked_writes=value}function set_update_version(value){update_version=value}function increment_write_version(){return++write_version}function is_dirty(reaction){var _a8,_b5,dependencies,is_unowned,i2,dependency,is_disconnected,is_unowned_connected,length,derived3,parent,flags2=reaction.f;if(0!==(flags2&DIRTY))return!0;if(0!==(flags2&MAYBE_DIRTY)){dependencies=reaction.deps;is_unowned=0!==(flags2&UNOWNED);if(null!==dependencies){is_disconnected=0!==(flags2&DISCONNECTED);is_unowned_connected=is_unowned&&null!==active_effect&&!skip_reaction;length=dependencies.length;if((is_disconnected||is_unowned_connected)&&(null===active_effect||0===(active_effect.f&DESTROYED))){parent=(derived3=reaction).parent;for(i2=0;i2<length;i2++){dependency=dependencies[i2];!is_disconnected&&(null==(_a8=null==dependency?void 0:dependency.reactions)?void 0:_a8.includes(derived3))||(null!=(_b5=dependency.reactions)?_b5:dependency.reactions=[]).push(derived3)}is_disconnected&&(derived3.f^=DISCONNECTED);is_unowned_connected&&null!==parent&&0===(parent.f&UNOWNED)&&(derived3.f^=UNOWNED)}for(i2=0;i2<length;i2++){is_dirty(dependency=dependencies[i2])&&update_derived(dependency);if(dependency.wv>reaction.wv)return!0}}is_unowned&&(null===active_effect||skip_reaction)||set_signal_status(reaction,CLEAN)}return!1}function schedule_possible_effect_self_invalidation(signal,effect2,root40=!0){var i2,reaction,reactions=signal.reactions;if(null!==reactions&&(async_mode_flag||!(null==current_sources?void 0:current_sources.includes(signal))))for(i2=0;i2<reactions.length;i2++)if(0!==((reaction=reactions[i2]).f&DERIVED))schedule_possible_effect_self_invalidation(reaction,effect2,!1);else if(effect2===reaction){root40?set_signal_status(reaction,DIRTY):0!==(reaction.f&CLEAN)&&set_signal_status(reaction,MAYBE_DIRTY);schedule_effect(reaction)}}function update_reaction(reaction){var _a8,_b5,result,deps,i2,previous_deps=new_deps,previous_skipped_deps=skipped_deps,previous_untracked_writes=untracked_writes,previous_reaction=active_reaction,previous_skip_reaction=skip_reaction,previous_sources=current_sources,previous_component_context=component_context,previous_untracking=untracking,previous_update_version=update_version,flags2=reaction.f;new_deps=null;skipped_deps=0;untracked_writes=null;skip_reaction=0!==(flags2&UNOWNED)&&(untracking||!is_updating_effect||null===active_reaction);active_reaction=0===(flags2&(BRANCH_EFFECT|ROOT_EFFECT))?reaction:null;current_sources=null;set_component_context(reaction.ctx);untracking=!1;update_version=++read_version;if(null!==reaction.ac){without_reactive_context(()=>{reaction.ac.abort(STALE_REACTION)});reaction.ac=null}try{reaction.f|=REACTION_IS_UPDATING;result=(0,reaction.fn)();deps=reaction.deps;if(null!==new_deps){remove_reactions(reaction,skipped_deps);if(null!==deps&&skipped_deps>0){deps.length=skipped_deps+new_deps.length;for(i2=0;i2<new_deps.length;i2++)deps[skipped_deps+i2]=new_deps[i2]}else reaction.deps=deps=new_deps;if(!skip_reaction||0!==(flags2&DERIVED)&&null!==reaction.reactions)for(i2=skipped_deps;i2<deps.length;i2++)(null!=(_b5=(_a8=deps[i2]).reactions)?_b5:_a8.reactions=[]).push(reaction)}else if(null!==deps&&skipped_deps<deps.length){remove_reactions(reaction,skipped_deps);deps.length=skipped_deps}if(is_runes()&&null!==untracked_writes&&!untracking&&null!==deps&&0===(reaction.f&(DERIVED|MAYBE_DIRTY|DIRTY)))for(i2=0;i2<untracked_writes.length;i2++)schedule_possible_effect_self_invalidation(untracked_writes[i2],reaction);if(null!==previous_reaction&&previous_reaction!==reaction){read_version++;null!==untracked_writes&&(null===previous_untracked_writes?previous_untracked_writes=untracked_writes:previous_untracked_writes.push(...untracked_writes))}0!==(reaction.f&ERROR_VALUE)&&(reaction.f^=ERROR_VALUE);return result}catch(error){return handle_error(error)}finally{reaction.f^=REACTION_IS_UPDATING;new_deps=previous_deps;skipped_deps=previous_skipped_deps;untracked_writes=previous_untracked_writes;active_reaction=previous_reaction;skip_reaction=previous_skip_reaction;current_sources=previous_sources;set_component_context(previous_component_context);untracking=previous_untracking;update_version=previous_update_version}}function remove_reaction(signal,dependency){var index6,new_length;let reactions=dependency.reactions;if(null!==reactions&&-1!==(index6=index_of.call(reactions,signal)))if(0==(new_length=reactions.length-1))reactions=dependency.reactions=null;else{reactions[index6]=reactions[new_length];reactions.pop()}if(null===reactions&&0!==(dependency.f&DERIVED)&&(null===new_deps||!new_deps.includes(dependency))){set_signal_status(dependency,MAYBE_DIRTY);0===(dependency.f&(UNOWNED|DISCONNECTED))&&(dependency.f^=DISCONNECTED);destroy_derived_effects(dependency);remove_reactions(dependency,0)}}function remove_reactions(signal,start_index){var i2,dependencies=signal.deps;if(null!==dependencies)for(i2=start_index;i2<dependencies.length;i2++)remove_reaction(signal,dependencies[i2])}function update_effect(effect2){var _a8,previous_effect,was_updating_effect,previous_component_fn,previous_stack,teardown2,dep,flags2=effect2.f;if(0===(flags2&DESTROYED)){set_signal_status(effect2,CLEAN);previous_effect=active_effect;was_updating_effect=is_updating_effect;active_effect=effect2;is_updating_effect=!0;if(dev_fallback_default){previous_component_fn=dev_current_component_function;set_dev_current_component_function(effect2.component_function);previous_stack=dev_stack;set_dev_stack(null!=(_a8=effect2.dev_stack)?_a8:dev_stack)}try{0!==(flags2&BLOCK_EFFECT)?destroy_block_effect_children(effect2):destroy_effect_children(effect2);execute_effect_teardown(effect2);teardown2=update_reaction(effect2);effect2.teardown="function"==typeof teardown2?teardown2:null;effect2.wv=write_version;if(dev_fallback_default&&tracing_mode_flag&&0!==(effect2.f&DIRTY)&&null!==effect2.deps)for(dep of effect2.deps)if(dep.set_during_effect){dep.wv=increment_write_version();dep.set_during_effect=!1}}finally{is_updating_effect=was_updating_effect;active_effect=previous_effect;if(dev_fallback_default){set_dev_current_component_function(previous_component_fn);set_dev_stack(previous_stack)}}}}async function tick(){if(async_mode_flag)return new Promise(f4=>{requestAnimationFrame(()=>f4());setTimeout(()=>f4())});await Promise.resolve();flushSync()}function get(signal){var _a8,_b5,_c3,_d2,_e2,deps,reactions,derived3,parent,tracking,was_read,trace2,entry,last,value,is_derived=0!==(signal.f&DERIVED);null==(_a8=captured_signals)||_a8.add(signal);if(null===active_reaction||untracking)is_derived&&null===signal.deps&&null===signal.effects&&null!==(parent=(derived3=signal).parent)&&0===(parent.f&UNOWNED)&&(derived3.f^=UNOWNED);else if((null===active_effect||0===(active_effect.f&DESTROYED))&&!(null==current_sources?void 0:current_sources.includes(signal))){deps=active_reaction.deps;if(0!==(active_reaction.f&REACTION_IS_UPDATING)){if(signal.rv<read_version){signal.rv=read_version;null===new_deps&&null!==deps&&deps[skipped_deps]===signal?skipped_deps++:null===new_deps?new_deps=[signal]:skip_reaction&&new_deps.includes(signal)||new_deps.push(signal)}}else{(null!=(_b5=active_reaction.deps)?_b5:active_reaction.deps=[]).push(signal);null===(reactions=signal.reactions)?signal.reactions=[active_reaction]:reactions.includes(active_reaction)||reactions.push(active_reaction)}}if(dev_fallback_default){if(current_async_effect){tracking=0!==(current_async_effect.f&REACTION_IS_UPDATING);was_read=null==(_c3=current_async_effect.deps)?void 0:_c3.includes(signal);if(!tracking&&!untracking&&!was_read){await_reactivity_loss(signal.label);(trace2=get_stack("TracedAt"))&&console.warn(trace2)}}recent_async_deriveds.delete(signal);if(tracing_mode_flag&&!untracking&&null!==tracing_expressions&&null!==active_reaction&&tracing_expressions.reaction===active_reaction)if(signal.trace)signal.trace();else if(trace2=get_stack("TracedAt")){if(void 0===(entry=tracing_expressions.entries.get(signal))){entry={traces:[]};tracing_expressions.entries.set(signal,entry)}last=entry.traces[entry.traces.length-1];trace2.stack!==(null==last?void 0:last.stack)&&entry.traces.push(trace2)}}if(is_destroying_effect){if(old_values.has(signal))return old_values.get(signal);if(is_derived){value=(derived3=signal).v;(0===(derived3.f&CLEAN)&&null!==derived3.reactions||depends_on_old_values(derived3))&&(value=execute_derived(derived3));old_values.set(derived3,value);return value}}else if(is_derived){derived3=signal;if(null==(_d2=batch_values)?void 0:_d2.has(derived3))return batch_values.get(derived3);is_dirty(derived3)&&update_derived(derived3)}if(null==(_e2=batch_values)?void 0:_e2.has(signal))return batch_values.get(signal);if(0!==(signal.f&ERROR_VALUE))throw signal.v;return signal.v}function depends_on_old_values(derived3){if(derived3.v===UNINITIALIZED)return!0;if(null===derived3.deps)return!1;for(const dep of derived3.deps){if(old_values.has(dep))return!0;if(0!==(dep.f&DERIVED)&&depends_on_old_values(dep))return!0}return!1}function untrack(fn){var previous_untracking=untracking;try{untracking=!0;return fn()}finally{untracking=previous_untracking}}function set_signal_status(signal,status){signal.f=signal.f&STATUS_MASK|status}function deep_read_state(value){if("object"==typeof value&&value&&!(value instanceof EventTarget))if(STATE_SYMBOL in value)deep_read(value);else if(!Array.isArray(value))for(let key3 in value){const prop2=value[key3];"object"==typeof prop2&&prop2&&STATE_SYMBOL in prop2&&deep_read(prop2)}}function deep_read(value,visited=new Set){if(!("object"!=typeof value||null===value||value instanceof EventTarget||visited.has(value))){visited.add(value);value instanceof Date&&value.getTime();for(let key3 in value)try{deep_read(value[key3],visited)}catch(e3){}const proto=get_prototype_of(value);if(proto!==Object.prototype&&proto!==Array.prototype&&proto!==Map.prototype&&proto!==Set.prototype&&proto!==Date.prototype){const descriptors=get_descriptors(proto);for(let key3 in descriptors){const get5=descriptors[key3].get;if(get5)try{get5.call(value)}catch(e3){}}}}}function create_event(event_name,dom,handler,options={}){function target_handler(event2){options.capture||handle_event_propagation.call(dom,event2);if(!event2.cancelBubble)return without_reactive_context(()=>null==handler?void 0:handler.call(this,event2))}event_name.startsWith("pointer")||event_name.startsWith("touch")||"wheel"===event_name?queue_micro_task(()=>{dom.addEventListener(event_name,target_handler,options)}):dom.addEventListener(event_name,target_handler,options);return target_handler}function event(event_name,dom,handler,capture2,passive2){var options={capture:capture2,passive:passive2},target_handler=create_event(event_name,dom,handler,options);(dom===document.body||dom===window||dom===document||dom instanceof HTMLMediaElement)&&teardown(()=>{dom.removeEventListener(event_name,target_handler,options)})}function delegate(events){var i2,fn;for(i2=0;i2<events.length;i2++)all_registered_events.add(events[i2]);for(fn of root_event_handles)fn(events)}function handle_event_propagation(event2){var _a8,handled_at,at_idx,handler_idx,previous_reaction,previous_effect,throw_error,other_errors,parent_element,delegated,handler_element=this,owner_document=handler_element.ownerDocument,event_name=event2.type,path2=(null==(_a8=event2.composedPath)?void 0:_a8.call(event2))||[],current_target=path2[0]||event2.target,path_idx=0;if(handled_at=event2==event2&&event2.__root){if(-1!==(at_idx=path2.indexOf(handled_at))&&(handler_element===document||handler_element===window)){event2.__root=handler_element;return}if(-1===(handler_idx=path2.indexOf(handler_element)))return;at_idx<=handler_idx&&(path_idx=at_idx)}if((current_target=path2[path_idx]||event2.target)!==handler_element){define_property(event2,"currentTarget",{configurable:!0,get:()=>current_target||owner_document});previous_reaction=active_reaction;previous_effect=active_effect;set_active_reaction(null);set_active_effect(null);try{other_errors=[];for(;null!==current_target;){parent_element=current_target.assignedSlot||current_target.parentNode||current_target.host||null;try{if(null!=(delegated=current_target["__"+event_name])&&(!current_target.disabled||event2.target===current_target))if(is_array(delegated)){var[fn,...data]=delegated;fn.apply(current_target,[event2,...data])}else delegated.call(current_target,event2)}catch(error){throw_error?other_errors.push(error):throw_error=error}if(event2.cancelBubble||parent_element===handler_element||null===parent_element)break;current_target=parent_element}if(throw_error){for(let error of other_errors)queueMicrotask(()=>{throw error});throw throw_error}}finally{event2.__root=handler_element;delete event2.currentTarget;set_active_reaction(previous_reaction);set_active_effect(previous_effect)}}}function create_fragment_from_html(html2){var elem=document.createElement("template");elem.innerHTML=html2.replaceAll("<!>","\x3c!----\x3e");return elem.content}function assign_nodes(start,end){var effect2=active_effect;if(null===effect2.nodes_start){effect2.nodes_start=start;effect2.nodes_end=end}}function from_html(content,flags2){var node,is_fragment=0!==(flags2&TEMPLATE_FRAGMENT),use_import_node=0!==(flags2&TEMPLATE_USE_IMPORT_NODE),has_start=!content.startsWith("<!>");return()=>{var clone3;if(hydrating){assign_nodes(hydrate_node,null);return hydrate_node}if(void 0===node){node=create_fragment_from_html(has_start?content:"<!>"+content);is_fragment||(node=get_first_child(node))}clone3=use_import_node||is_firefox?document.importNode(node,!0):node.cloneNode(!0);is_fragment?assign_nodes(get_first_child(clone3),clone3.lastChild):assign_nodes(clone3,clone3);return clone3}}function text(value=""){var t9,node;if(!hydrating){assign_nodes(t9=create_text(value+""),t9);return t9}if((node=hydrate_node).nodeType!==TEXT_NODE){node.before(node=create_text());set_hydrate_node(node)}assign_nodes(node,node);return node}function comment(){var frag,start,anchor;if(hydrating){assign_nodes(hydrate_node,null);return hydrate_node}frag=document.createDocumentFragment();start=document.createComment("");anchor=create_text();frag.append(start,anchor);assign_nodes(start,anchor);return frag}function append(anchor,dom){if(hydrating){active_effect.nodes_end=hydrate_node;hydrate_next()}else null!==anchor&&anchor.before(dom)}function is_passive_event(name){return PASSIVE_EVENTS.includes(name)}function set_text(text2,value){var _a8,str=null==value?"":"object"==typeof value?value+"":value;if(str!==(null!=(_a8=text2.__t)?_a8:text2.__t=text2.nodeValue)){text2.__t=str;text2.nodeValue=str+""}}function mount(component2,options){return _mount(component2,options)}function _mount(Component,{target,anchor,props={},events,context:context2,intro=!0}){var registered_events,event_handle,component2,unmount2;init_operations();registered_events=new Set;event_handle=events2=>{var i2,event_name,passive2,n3;for(i2=0;i2<events2.length;i2++){event_name=events2[i2];if(!registered_events.has(event_name)){registered_events.add(event_name);passive2=is_passive_event(event_name);target.addEventListener(event_name,handle_event_propagation,{passive:passive2});if(void 0===(n3=document_listeners.get(event_name))){document.addEventListener(event_name,handle_event_propagation,{passive:passive2});document_listeners.set(event_name,1)}else document_listeners.set(event_name,n3+1)}}};event_handle(array_from(all_registered_events));root_event_handles.add(event_handle);component2=void 0;unmount2=component_root(()=>{var anchor_node=null!=anchor?anchor:target.appendChild(create_text());boundary(anchor_node,{pending:()=>{}},anchor_node2=>{if(context2){push({});component_context.c=context2}events&&(props.$$events=events);hydrating&&assign_nodes(anchor_node2,null);component2=Component(anchor_node2,props)||{};if(hydrating){active_effect.nodes_end=hydrate_node;if(null===hydrate_node||hydrate_node.nodeType!==COMMENT_NODE||hydrate_node.data!==HYDRATION_END){hydration_mismatch();throw HYDRATION_ERROR}}context2&&pop()});return()=>{var _a8,event_name,n3;for(event_name of registered_events){target.removeEventListener(event_name,handle_event_propagation);n3=document_listeners.get(event_name);if(0===--n3){document.removeEventListener(event_name,handle_event_propagation);document_listeners.delete(event_name)}else document_listeners.set(event_name,n3)}root_event_handles.delete(event_handle);anchor_node!==anchor&&(null==(_a8=anchor_node.parentNode)||_a8.removeChild(anchor_node))}});mounted_components.set(component2,unmount2);return component2}function unmount(component2,options){const fn=mounted_components.get(component2);if(fn){mounted_components.delete(component2);return fn(options)}dev_fallback_default&&(STATE_SYMBOL in component2?state_proxy_unmount():lifecycle_double_unmount());return Promise.resolve()}function snippet(node,get_snippet,...args){var branches=new BranchManager(node);block(()=>{var _a8;const snippet2=null!=(_a8=get_snippet())?_a8:null;dev_fallback_default&&null==snippet2&&invalid_snippet();branches.ensure(snippet2,snippet2&&(anchor=>snippet2(anchor,...args)))},EFFECT_TRANSPARENT)}function onMount(fn){null===component_context&&lifecycle_outside_component("onMount");legacy_mode_flag&&null!==component_context.l?init_update_callbacks(component_context).m.push(fn):user_effect(()=>{const cleanup=untrack(fn);if("function"==typeof cleanup)return cleanup})}function onDestroy(fn){null===component_context&&lifecycle_outside_component("onDestroy");onMount(()=>()=>untrack(fn))}function init_update_callbacks(context2){var _a8,l2=context2.l;return null!=(_a8=l2.u)?_a8:l2.u={a:[],b:[],m:[]}}function register_style(hash3,style){var styles=all_styles.get(hash3);if(!styles){styles=new Set;all_styles.set(hash3,styles)}styles.add(style)}function if_block(node,fn,elseif=!1){function update_branch(condition,fn2){if(hydrating&&condition===(read_hydration_instruction(node)===HYDRATION_START_ELSE)){var anchor=skip_nodes();set_hydrate_node(anchor);branches.anchor=anchor;set_hydrating(!1);branches.ensure(condition,fn2);set_hydrating(!0)}else branches.ensure(condition,fn2)}var branches;hydrating&&hydrate_next();branches=new BranchManager(node);block(()=>{var has_branch=!1;fn((fn2,flag=!0)=>{has_branch=!0;update_branch(flag,fn2)});has_branch||update_branch(!1,null)},elseif?EFFECT_TRANSPARENT:0)}function index(_,i2){return i2}function pause_effects(state2,items,controlled_anchor){var i2,is_controlled,parent_node,items_map=state2.items,transitions=[],length=items.length;for(i2=0;i2<length;i2++)pause_children(items[i2].e,transitions,!0);if(is_controlled=length>0&&0===transitions.length&&null!==controlled_anchor){clear_text_content(parent_node=controlled_anchor.parentNode);parent_node.append(controlled_anchor);items_map.clear();link(state2,items[0].prev,items[length-1].next)}run_out_transitions(transitions,()=>{var i3,item;for(i3=0;i3<length;i3++){item=items[i3];if(!is_controlled){items_map.delete(item.k);link(state2,item.prev,item.next)}destroy_effect(item.e,!is_controlled)}})}function each(node,flags2,get_collection,get_key,render_fn,fallback_fn=null){function commit(){reconcile(each_effect,array,state2,offscreen_items,anchor,render_fn,flags2,get_key,get_collection);null!==fallback_fn&&(0===array.length?fallback3?resume_effect(fallback3):fallback3=branch(()=>fallback_fn(anchor)):null!==fallback3&&pause_effect(fallback3,()=>{fallback3=null}))}var parent_node,fallback3,was_empty,offscreen_items,each_array,array,each_effect,anchor=node,state2={flags:flags2,items:new Map,first:null};if(0!==(flags2&EACH_IS_CONTROLLED)){parent_node=node;anchor=hydrating?set_hydrate_node(get_first_child(parent_node)):parent_node.appendChild(create_text())}hydrating&&hydrate_next();fallback3=null;was_empty=!1;offscreen_items=new Map;each_array=derived_safe_equal(()=>{var collection=get_collection();return is_array(collection)?collection:null==collection?[]:array_from(collection)});block(()=>{var _a8,length,prev,item,i2,value,key3,keys3,batch,existing;null!=each_effect||(each_effect=active_effect);length=(array=get(each_array)).length;if(was_empty&&0===length)return;was_empty=0===length;let mismatch=!1;if(hydrating&&read_hydration_instruction(anchor)===HYDRATION_START_ELSE!=(0===length)){set_hydrate_node(anchor=skip_nodes());set_hydrating(!1);mismatch=!0}if(hydrating){prev=null;for(i2=0;i2<length;i2++){if(hydrate_node.nodeType===COMMENT_NODE&&hydrate_node.data===HYDRATION_END){anchor=hydrate_node;mismatch=!0;set_hydrating(!1);break}value=array[i2];key3=get_key(value,i2);item=create_item(hydrate_node,state2,prev,null,value,key3,i2,render_fn,flags2,get_collection);state2.items.set(key3,item);prev=item}length>0&&set_hydrate_node(skip_nodes())}if(hydrating)0===length&&fallback_fn&&(fallback3=branch(()=>fallback_fn(anchor)));else if(should_defer_append()){keys3=new Set;batch=current_batch;for(i2=0;i2<length;i2+=1){value=array[i2];key3=get_key(value,i2);if(existing=null!=(_a8=state2.items.get(key3))?_a8:offscreen_items.get(key3))0!==(flags2&(EACH_ITEM_REACTIVE|EACH_INDEX_REACTIVE))&&update_item(existing,value,i2,flags2);else{item=create_item(null,state2,null,null,value,key3,i2,render_fn,flags2,get_collection,!0);offscreen_items.set(key3,item)}keys3.add(key3)}for(const[key4,item2]of state2.items)keys3.has(key4)||batch.skipped_effects.add(item2.e);batch.add_callback(commit)}else commit();mismatch&&set_hydrating(!0);get(each_array)});hydrating&&(anchor=hydrate_node)}function reconcile(each_effect,array,state2,offscreen_items,anchor,render_fn,flags2,get_key,get_collection){var _a8,_b5,_c3,_d2,seen,to_animate,value,key3,item,i2,pending3,next2,start,j2,a2,b3,to_destroy,destroy_length,controlled_anchor,unused,is_animated=0!==(flags2&EACH_IS_ANIMATED),should_update=0!==(flags2&(EACH_ITEM_REACTIVE|EACH_INDEX_REACTIVE)),length=array.length,items=state2.items,current=state2.first,prev=null,matched=[],stashed=[];if(is_animated)for(i2=0;i2<length;i2+=1){key3=get_key(value=array[i2],i2);if(void 0!==(item=items.get(key3))){null==(_a8=item.a)||_a8.measure();(null!=to_animate?to_animate:to_animate=new Set).add(item)}}for(i2=0;i2<length;i2+=1){key3=get_key(value=array[i2],i2);if(void 0!==(item=items.get(key3))){should_update&&update_item(item,value,i2,flags2);if(0!==(item.e.f&INERT)){resume_effect(item.e);if(is_animated){null==(_b5=item.a)||_b5.unfix();(null!=to_animate?to_animate:to_animate=new Set).delete(item)}}if(item!==current){if(void 0!==seen&&seen.has(item)){if(matched.length<stashed.length){prev=(start=stashed[0]).prev;a2=matched[0];b3=matched[matched.length-1];for(j2=0;j2<matched.length;j2+=1)move(matched[j2],start,anchor);for(j2=0;j2<stashed.length;j2+=1)seen.delete(stashed[j2]);link(state2,a2.prev,b3.next);link(state2,prev,a2);link(state2,b3,start);current=start;prev=b3;i2-=1;matched=[];stashed=[]}else{seen.delete(item);move(item,current,anchor);link(state2,item.prev,item.next);link(state2,item,null===prev?state2.first:prev.next);link(state2,prev,item);prev=item}continue}matched=[];stashed=[];for(;null!==current&&current.k!==key3;){0===(current.e.f&INERT)&&(null!=seen?seen:seen=new Set).add(current);stashed.push(current);current=current.next}if(null===current)continue;item=current}matched.push(item);prev=item;current=item.next}else{if(void 0!==(pending3=offscreen_items.get(key3))){offscreen_items.delete(key3);items.set(key3,pending3);next2=prev?prev.next:current;link(state2,prev,pending3);link(state2,pending3,next2);move(pending3,next2,anchor);prev=pending3}else prev=create_item(current?current.e.nodes_start:anchor,state2,prev,null===prev?state2.first:prev.next,value,key3,i2,render_fn,flags2,get_collection);items.set(key3,prev);matched=[];stashed=[];current=prev.next}}if(null!==current||void 0!==seen){to_destroy=void 0===seen?[]:array_from(seen);for(;null!==current;){0===(current.e.f&INERT)&&to_destroy.push(current);current=current.next}if((destroy_length=to_destroy.length)>0){controlled_anchor=0!==(flags2&EACH_IS_CONTROLLED)&&0===length?anchor:null;if(is_animated){for(i2=0;i2<destroy_length;i2+=1)null==(_c3=to_destroy[i2].a)||_c3.measure();for(i2=0;i2<destroy_length;i2+=1)null==(_d2=to_destroy[i2].a)||_d2.fix()}pause_effects(state2,to_destroy,controlled_anchor)}}is_animated&&queue_micro_task(()=>{var _a9;if(void 0!==to_animate)for(item of to_animate)null==(_a9=item.a)||_a9.apply()});each_effect.first=state2.first&&state2.first.e;each_effect.last=prev&&prev.e;for(unused of offscreen_items.values())destroy_effect(unused.e);offscreen_items.clear()}function update_item(item,value,index6,type){0!==(type&EACH_ITEM_REACTIVE)&&internal_set(item.v,value);0!==(type&EACH_INDEX_REACTIVE)?internal_set(item.i,index6):item.i=index6}function create_item(anchor,state2,prev,next2,value,key3,index6,render_fn,flags2,get_collection,deferred2){var item,previous_each_item=current_each_item,reactive2=0!==(flags2&EACH_ITEM_REACTIVE),v2=reactive2?0===(flags2&EACH_ITEM_IMMUTABLE)?mutable_source(value,!1,!1):source(value):value,i2=0===(flags2&EACH_INDEX_REACTIVE)?index6:source(index6);dev_fallback_default&&reactive2&&(v2.trace=()=>{var collection_index="number"==typeof i2?index6:i2.v;get_collection()[collection_index]});current_each_item=item={i:i2,v:v2,k:key3,a:null,e:null,prev,next:next2};try{null===anchor&&document.createDocumentFragment().append(anchor=create_text());item.e=branch(()=>render_fn(anchor,v2,i2,get_collection),hydrating);item.e.prev=prev&&prev.e;item.e.next=next2&&next2.e;if(null===prev)deferred2||(state2.first=item);else{prev.next=item;prev.e.next=item.e}if(null!==next2){next2.prev=item;next2.e.prev=item.e}return item}finally{current_each_item=previous_each_item}}function move(item,next2,anchor){for(var next_node,end=item.next?item.next.e.nodes_start:anchor,dest=next2?next2.e.nodes_start:anchor,node=item.e.nodes_start;null!==node&&node!==end;){next_node=get_next_sibling(node);dest.before(node);node=next_node}}function link(state2,prev,next2){if(null===prev)state2.first=next2;else{prev.next=next2;prev.e.next=next2&&next2.e}if(null!==next2){next2.prev=prev;next2.e.prev=prev&&prev.e}}function append_styles(anchor,css){effect(()=>{var _a8,root40=anchor.getRootNode(),target=root40.host?root40:null!=(_a8=root40.head)?_a8:root40.ownerDocument.head;if(!target.querySelector("#"+css.hash)){const style=document.createElement("style");style.id=css.hash;style.textContent=css.code;target.appendChild(style);dev_fallback_default&&register_style(css.hash,style)}})}function r(e3){var t9,f4,o2,n3="";if("string"==typeof e3||"number"==typeof e3)n3+=e3;else if("object"==typeof e3)if(Array.isArray(e3)){o2=e3.length;for(t9=0;t9<o2;t9++)e3[t9]&&(f4=r(e3[t9]))&&(n3&&(n3+=" "),n3+=f4)}else for(f4 in e3)e3[f4]&&(n3&&(n3+=" "),n3+=f4);return n3}function clsx(){for(var e3,t9,f4=0,n3="",o2=arguments.length;f4<o2;f4++)(e3=arguments[f4])&&(t9=r(e3))&&(n3&&(n3+=" "),n3+=t9);return n3}function clsx2(value){return"object"==typeof value?clsx(value):null!=value?value:""}function to_class(value,hash3,directives){var key3,len,a2,b3,classname=null==value?"":""+value;hash3&&(classname=classname?classname+" "+hash3:hash3);if(directives)for(key3 in directives)if(directives[key3])classname=classname?classname+" "+key3:key3;else if(classname.length){len=key3.length;a2=0;for(;(a2=classname.indexOf(key3,a2))>=0;){b3=a2+len;0!==a2&&!whitespace.includes(classname[a2-1])||b3!==classname.length&&!whitespace.includes(classname[b3])?a2=b3:classname=(0===a2?"":classname.substring(0,a2))+classname.substring(b3+1)}}return""===classname?null:classname}function set_class(dom,is_html,value,hash3,prev_classes,next_classes){var next_class_name,key3,is_present,prev=dom.__className;if(hydrating||prev!==value||void 0===prev){next_class_name=to_class(value,hash3,next_classes);hydrating&&next_class_name===dom.getAttribute("class")||(null==next_class_name?dom.removeAttribute("class"):is_html?dom.className=next_class_name:dom.setAttribute("class",next_class_name));dom.__className=value}else if(next_classes&&prev_classes!==next_classes)for(key3 in next_classes){is_present=!!next_classes[key3];null!=prev_classes&&is_present===!!prev_classes[key3]||dom.classList.toggle(key3,is_present)}return next_classes}function select_option(select,value,mounting=!1){var option;if(select.multiple){if(null==value)return;if(!is_array(value))return select_multiple_invalid_value();for(option of select.options)option.selected=value.includes(get_option_value(option))}else{for(option of select.options)if(is(get_option_value(option),value)){option.selected=!0;return}mounting&&void 0===value||(select.selectedIndex=-1)}}function init_select(select){var observer=new MutationObserver(()=>{select_option(select,select.__value)});observer.observe(select,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]});teardown(()=>{observer.disconnect()})}function bind_select_value(select,get5,set2=get5){var batches2=new WeakSet,mounting=!0;listen_to_event_and_reset_event(select,"change",is_reset=>{var _a8,value,selected_option,query3=is_reset?"[selected]":":checked";value=select.multiple?[].map.call(select.querySelectorAll(query3),get_option_value):(selected_option=null!=(_a8=select.querySelector(query3))?_a8:select.querySelector("option:not([disabled])"))&&get_option_value(selected_option);set2(value);null!==current_batch&&batches2.add(current_batch)});effect(()=>{var _a8,batch,selected_option,value=get5();if(select===document.activeElement){batch=null!=(_a8=previous_batch)?_a8:current_batch;if(batches2.has(batch))return}select_option(select,value,mounting);if(mounting&&void 0===value&&null!==(selected_option=select.querySelector(":checked"))){value=get_option_value(selected_option);set2(value)}select.__value=value;mounting=!1});init_select(select)}function get_option_value(option){return"__value"in option?option.__value:option.value}function remove_input_defaults(input){var already_removed,remove_defaults;if(hydrating){already_removed=!1;remove_defaults=()=>{var value,checked;if(!already_removed){already_removed=!0;if(input.hasAttribute("value")){value=input.value;set_attribute2(input,"value",null);input.value=value}if(input.hasAttribute("checked")){checked=input.checked;set_attribute2(input,"checked",null);input.checked=checked}}};input.__on_r=remove_defaults;queue_micro_task(remove_defaults);add_form_reset_listener()}}function set_value(element2,value){var attributes=get_attributes(element2);attributes.value!==(attributes.value=null!=value?value:void 0)&&(element2.value!==value||0===value&&"PROGRESS"===element2.nodeName)&&(element2.value=null!=value?value:"")}function set_attribute2(element2,attribute,value,skip_warning){var attributes=get_attributes(element2);if(hydrating){attributes[attribute]=element2.getAttribute(attribute);if("src"===attribute||"srcset"===attribute||"href"===attribute&&"LINK"===element2.nodeName){skip_warning||check_src_in_dev_hydration(element2,attribute,null!=value?value:"");return}}if(attributes[attribute]!==(attributes[attribute]=value)){"loading"===attribute&&(element2[LOADING_ATTR_SYMBOL]=value);null==value?element2.removeAttribute(attribute):"string"!=typeof value&&get_setters(element2).includes(attribute)?element2[attribute]=value:element2.setAttribute(attribute,value)}}function get_attributes(element2){var _a8;return null!=(_a8=element2.__attributes)?_a8:element2.__attributes={[IS_CUSTOM_ELEMENT]:element2.nodeName.includes("-"),[IS_HTML]:element2.namespaceURI===NAMESPACE_HTML}}function get_setters(element2){var descriptors,proto,element_proto,key3,cache_key=element2.getAttribute("is")||element2.nodeName,setters=setters_cache.get(cache_key);if(setters)return setters;setters_cache.set(cache_key,setters=[]);proto=element2;element_proto=Element.prototype;for(;element_proto!==proto;){descriptors=get_descriptors(proto);for(key3 in descriptors)descriptors[key3].set&&setters.push(key3);proto=get_prototype_of(proto)}return setters}function check_src_in_dev_hydration(element2,attribute,value){var _a8;dev_fallback_default&&("srcset"===attribute&&srcset_url_equal(element2,value)||src_url_equal(null!=(_a8=element2.getAttribute(attribute))?_a8:"",value)||hydration_attribute_changed(attribute,element2.outerHTML.replace(element2.innerHTML,element2.innerHTML&&"..."),String(value)))}function src_url_equal(element_src,url){return element_src===url||new URL(element_src,document.baseURI).href===new URL(url,document.baseURI).href}function split_srcset(srcset){return srcset.split(",").map(src=>src.trim().split(" ").filter(Boolean))}function srcset_url_equal(element2,srcset){var element_urls=split_srcset(element2.srcset),urls=split_srcset(srcset);return urls.length===element_urls.length&&urls.every(([url,width],i2)=>width===element_urls[i2][1]&&(src_url_equal(element_urls[i2][0],url)||src_url_equal(url,element_urls[i2][0])))}function bind_value(input,get5,set2=get5){var batches2=new WeakSet;listen_to_event_and_reset_event(input,"input",async is_reset=>{var value,start,end,length,new_length;dev_fallback_default&&"checkbox"===input.type&&bind_invalid_checkbox_value();value=is_reset?input.defaultValue:input.value;value=is_numberlike_input(input)?to_number(value):value;set2(value);null!==current_batch&&batches2.add(current_batch);await tick();if(value!==(value=get5())){start=input.selectionStart;end=input.selectionEnd;length=input.value.length;input.value=null!=value?value:"";if(null!==end){new_length=input.value.length;if(start===end&&end===length&&new_length>length){input.selectionStart=new_length;input.selectionEnd=new_length}else{input.selectionStart=start;input.selectionEnd=Math.min(end,new_length)}}}});if(hydrating&&input.defaultValue!==input.value||null==untrack(get5)&&input.value){set2(is_numberlike_input(input)?to_number(input.value):input.value);null!==current_batch&&batches2.add(current_batch)}render_effect(()=>{var _a8,value,batch;dev_fallback_default&&"checkbox"===input.type&&bind_invalid_checkbox_value();value=get5();if(input===document.activeElement){batch=null!=(_a8=previous_batch)?_a8:current_batch;if(batches2.has(batch))return}is_numberlike_input(input)&&value===to_number(input.value)||("date"!==input.type||value||input.value)&&value!==input.value&&(input.value=null!=value?value:"")})}function bind_group(inputs,group_index,input,get5,set2=get5){var _a8,index6,is_checkbox="checkbox"===input.getAttribute("type"),binding_group=inputs;let hydration_mismatch2=!1;if(null!==group_index)for(index6 of group_index)binding_group=null!=(_a8=binding_group[index6])?_a8:binding_group[index6]=[];binding_group.push(input);listen_to_event_and_reset_event(input,"change",()=>{var value=input.__value;is_checkbox&&(value=get_binding_group_value(binding_group,value,input.checked));set2(value)},()=>set2(is_checkbox?[]:null));render_effect(()=>{var value=get5();if(hydrating&&input.defaultChecked!==input.checked)hydration_mismatch2=!0;else if(is_checkbox){value=value||[];input.checked=value.includes(input.__value)}else input.checked=is(input.__value,value)});teardown(()=>{var index7=binding_group.indexOf(input);-1!==index7&&binding_group.splice(index7,1)});if(!pending2.has(binding_group)){pending2.add(binding_group);queue_micro_task(()=>{binding_group.sort((a2,b3)=>4===a2.compareDocumentPosition(b3)?-1:1);pending2.delete(binding_group)})}queue_micro_task(()=>{var value,hydration_input;if(hydration_mismatch2){value=is_checkbox?get_binding_group_value(binding_group,value,input.checked):null==(hydration_input=binding_group.find(input2=>input2.checked))?void 0:hydration_input.__value;set2(value)}})}function bind_checked(input,get5,set2=get5){listen_to_event_and_reset_event(input,"change",is_reset=>{var value=is_reset?input.defaultChecked:input.checked;set2(value)});(hydrating&&input.defaultChecked!==input.checked||null==untrack(get5))&&set2(input.checked);render_effect(()=>{var value=get5();input.checked=Boolean(value)})}function get_binding_group_value(group4,__value,checked){var i2,value=new Set;for(i2=0;i2<group4.length;i2+=1)group4[i2].checked&&value.add(group4[i2].__value);checked||value.delete(__value);return Array.from(value)}function is_numberlike_input(input){var type=input.type;return"number"===type||"range"===type}function to_number(value){return""===value?null:+value}function is_bound_this(bound_value,element_or_component){return bound_value===element_or_component||(null==bound_value?void 0:bound_value[STATE_SYMBOL])===element_or_component}function bind_this(element_or_component={},update2,get_value,get_parts){effect(()=>{var old_parts,parts;render_effect(()=>{old_parts=parts;parts=(null==get_parts?void 0:get_parts())||[];untrack(()=>{if(element_or_component!==get_value(...parts)){update2(element_or_component,...parts);old_parts&&is_bound_this(get_value(...old_parts),element_or_component)&&update2(null,...old_parts)}})});return()=>{queue_micro_task(()=>{parts&&is_bound_this(get_value(...parts),element_or_component)&&update2(null,...parts)})}});return element_or_component}function bind_property(property,event_name,element2,set2,get5){var handler=()=>{set2(element2[property])};element2.addEventListener(event_name,handler);get5?render_effect(()=>{element2[property]=get5()}):handler();element2!==document.body&&element2!==window&&element2!==document||teardown(()=>{element2.removeEventListener(event_name,handler)})}function init(immutable=!1){const context2=component_context,callbacks=context2.l.u;if(!callbacks)return;let props=()=>deep_read_state(context2.s);if(immutable){let version2=0,prev={};const d4=derived(()=>{let changed=!1;const props2=context2.s;for(const key3 in props2)if(props2[key3]!==prev[key3]){prev[key3]=props2[key3];changed=!0}changed&&version2++;return version2});props=()=>get(d4)}callbacks.b.length&&user_pre_effect(()=>{observe_all(context2,props);run_all(callbacks.b)});user_effect(()=>{const fns=untrack(()=>callbacks.m.map(run));return()=>{for(const fn of fns)"function"==typeof fn&&fn()}});callbacks.a.length&&user_effect(()=>{observe_all(context2,props);run_all(callbacks.a)})}function observe_all(context2,props){if(context2.l.s)for(const signal of context2.l.s)get(signal);props()}function subscribe_to_store(store,run3,invalidate){if(null==store){run3(void 0);invalidate&&invalidate(void 0);return noop2}const unsub=untrack(()=>store.subscribe(run3,invalidate));return unsub.unsubscribe?()=>unsub.unsubscribe():unsub}function writable(value,start=noop2){function set2(new_value){if(safe_not_equal(value,new_value)){value=new_value;if(stop){const run_queue=!subscriber_queue.length;for(const subscriber of subscribers){subscriber[1]();subscriber_queue.push(subscriber,value)}if(run_queue){for(let i2=0;i2<subscriber_queue.length;i2+=2)subscriber_queue[i2][0](subscriber_queue[i2+1]);subscriber_queue.length=0}}}}function update2(fn){set2(fn(value))}let stop=null;const subscribers=new Set;return{set:set2,update:update2,subscribe:function subscribe2(run3,invalidate=noop2){const subscriber=[run3,invalidate];subscribers.add(subscriber);1===subscribers.size&&(stop=start(set2,update2)||noop2);run3(value);return()=>{subscribers.delete(subscriber);if(0===subscribers.size&&stop){stop();stop=null}}}}}function get2(store){let value;subscribe_to_store(store,_=>value=_)();return value}function store_get(store,store_name,stores){var _a8,is_synchronous_callback;const entry=null!=(_a8=stores[store_name])?_a8:stores[store_name]={store:null,source:mutable_source(void 0),unsubscribe:noop2};dev_fallback_default&&(entry.source.label=store_name);if(entry.store!==store&&!(IS_UNMOUNTED in stores)){entry.unsubscribe();entry.store=null!=store?store:null;if(null==store){entry.source.v=void 0;entry.unsubscribe=noop2}else{is_synchronous_callback=!0;entry.unsubscribe=subscribe_to_store(store,v2=>{is_synchronous_callback?entry.source.v=v2:set(entry.source,v2)});is_synchronous_callback=!1}}return store&&IS_UNMOUNTED in stores?get2(store):get(entry.source)}function setup_stores(){const stores={};return[stores,function cleanup(){teardown(()=>{for(var store_name in stores)stores[store_name].unsubscribe();define_property(stores,IS_UNMOUNTED,{enumerable:!1,value:!0})})}]}function capture_store_binding(fn){var previous_is_store_binding=is_store_binding;try{is_store_binding=!1;return[fn(),is_store_binding]}finally{is_store_binding=previous_is_store_binding}}function spread_props(...props){return new Proxy({props},spread_props_handler)}function prop(props,key3,flags2,fallback3){var _a8,_b5,setter,is_entry_props,initial_value,is_store_sub,getter,legacy_parent,overridden,d4,parent_effect,runes=!legacy_mode_flag||0!==(flags2&PROPS_IS_RUNES),bindable=0!==(flags2&PROPS_IS_BINDABLE),lazy=0!==(flags2&PROPS_IS_LAZY_INITIAL),fallback_value=fallback3,fallback_dirty=!0,get_fallback=()=>{if(fallback_dirty){fallback_dirty=!1;fallback_value=lazy?untrack(fallback3):fallback3}return fallback_value};if(bindable){is_entry_props=STATE_SYMBOL in props||LEGACY_PROPS in props;setter=null!=(_b5=null==(_a8=get_descriptor(props,key3))?void 0:_a8.set)?_b5:is_entry_props&&key3 in props?v2=>props[key3]=v2:void 0}is_store_sub=!1;bindable?[initial_value,is_store_sub]=capture_store_binding(()=>props[key3]):initial_value=props[key3];if(void 0===initial_value&&void 0!==fallback3){initial_value=get_fallback();if(setter){runes&&props_invalid_value(key3);setter(initial_value)}}getter=runes?()=>{var value=props[key3];if(void 0===value)return get_fallback();fallback_dirty=!0;return value}:()=>{var value=props[key3];void 0!==value&&(fallback_value=void 0);return void 0===value?fallback_value:value};if(runes&&0===(flags2&PROPS_IS_UPDATED))return getter;if(setter){legacy_parent=props.$$legacy;return function(value,mutation){if(arguments.length>0){runes&&mutation&&!legacy_parent&&!is_store_sub||setter(mutation?getter():value);return value}return getter()}}overridden=!1;d4=(0!==(flags2&PROPS_IS_IMMUTABLE)?derived:derived_safe_equal)(()=>{overridden=!1;return getter()});dev_fallback_default&&(d4.label=key3);bindable&&get(d4);parent_effect=active_effect;return function(value,mutation){if(arguments.length>0){const new_value=mutation?get(d4):runes&&bindable?proxy(value):value;set(d4,new_value);overridden=!0;void 0!==fallback_value&&(fallback_value=new_value);return value}return is_destroying_effect&&overridden||0!==(parent_effect.f&DESTROYED)?d4.v:get(d4)}}function expandKeywords(message,lang,recurseLimit=10){if(recurseLimit<=0){Logger("ExpandKeywords hit the recursion limit, returning the current state. but this is not expected. May recursive referenced.");return message}const keywords=Object.entries(message).map(([key3,value])=>[key3,value[lang]]).map(([key3,value])=>[`${key3.startsWith("K.")?key3.substring(2):key3}`,value]).map(([key3,value])=>[[`%{${key3}}`,value]]).flat().sort((a2,b3)=>{var _a8,_b5,_c3,_d2;return(null!=(_b5=null==(_a8=a2[1])?void 0:_a8.length)?_b5:0)-(null!=(_d2=null==(_c3=b3[1])?void 0:_c3.length)?_d2:0)}),ret={...message};let isChanged=!1;for(const key3 of Object.keys(message))if(lang in ret[key3])for(const[keyword,replacement]of keywords)if(ret[key3][lang].includes(keyword)){ret[key3][lang]=ret[key3][lang].split(keyword).join(replacement);isChanged=!0}return isChanged?expandKeywords(ret,lang,recurseLimit--):ret}function __onMissingTranslation(callback){__onMissingTranslations=callback}function setLang(lang){if(lang!==currentLang){currentLang=lang;msgCache.clear()}}function _getMessage(key3,lang){var _a8;if(""==key3.trim())return key3;const msgs=null!=(_a8=allMessages[key3])?_a8:void 0;""==lang&&(lang="def");let msg=null==msgs?void 0:msgs[lang];if(!msg){if(-1===missingTranslations.indexOf(key3)){__onMissingTranslations(key3);missingTranslations.push(key3)}msg=null==msgs?void 0:msgs.def}return null!=msg?msg:key3}function getMessage(key3){if(msgCache.has(key3))return msgCache.get(key3);const msg=_getMessage(key3,currentLang);msgCache.set(key3,msg);return msg}function $t(message,lang){return void 0!==lang?_getMessage(message,lang):getMessage(message)}function $msg(key3,params={},lang){let msg=$t(key3,lang);for(const[placeholder,value]of Object.entries(params)){const regex=new RegExp(`\\\${${placeholder}}`,"g");msg=msg.replace(regex,value)}return msg}function LogPane($$anchor,$$props){function updateLog(logs){const e3=logs.value;if(!get(suspended)){set(messages,[...e3],!0);setTimeout(()=>{scroll&&(scroll.scrollTop=scroll.scrollHeight)},10)}}var div,div_1,div_2,label2,input,span,text2,label_1,input_1,span_1,text_1,label_2,input_2,span_2,text_2,div_3;push($$props,!0);append_styles($$anchor,$$css);let unsubscribe2,scroll,messages=state(proxy([])),wrapRight=state(!1),autoScroll=state(!0),suspended=state(!1);onMount(async()=>{const _logMessages=reactive(()=>logMessages.value);_logMessages.onChanged(updateLog);Logger($msg("logPane.logWindowOpened",{},currentLang));unsubscribe2=()=>_logMessages.offChanged(updateLog)});onDestroy(()=>{unsubscribe2&&unsubscribe2()});div_1=child(div=root());div_2=child(div_1);label2=child(div_2);remove_input_defaults(input=child(label2));span=sibling(input,2);text2=child(span,!0);reset(span);reset(label2);remove_input_defaults(input_1=child(label_1=sibling(label2,2)));span_1=sibling(input_1,2);text_1=child(span_1,!0);reset(span_1);reset(label_1);remove_input_defaults(input_2=child(label_2=sibling(label_1,2)));span_2=sibling(input_2,2);text_2=child(span_2,!0);reset(span_2);reset(label_2);sibling(label_2,4).__click=[on_click,function closeDialogue(){$$props.close()}];reset(div_2);reset(div_1);each(div_3=sibling(div_1,2),21,()=>get(messages),index,($$anchor2,line)=>{var text_3,pre=root_1();let classes;text_3=child(pre,!0);reset(pre);template_effect($0=>{classes=set_class(pre,1,"svelte-o3lsbg",null,classes,$0);set_text(text_3,get(line))},[()=>({"wrap-right":get(wrapRight)})]);append($$anchor2,pre)});reset(div_3);bind_this(div_3,$$value=>scroll=$$value,()=>scroll);reset(div);template_effect(($0,$1,$2)=>{set_text(text2,$0);set_text(text_1,$1);set_text(text_2,$2)},[()=>$msg("logPane.wrap",{},currentLang),()=>$msg("logPane.autoScroll",{},currentLang),()=>$msg("logPane.pause",{},currentLang)]);bind_checked(input,()=>get(wrapRight),$$value=>set(wrapRight,$$value));bind_checked(input_1,()=>get(autoScroll),$$value=>set(autoScroll,$$value));bind_checked(input_2,()=>get(suspended),$$value=>set(suspended,$$value));append($$anchor,div);pop()}function createHostingDB(env){let db=env.db;return{info:()=>db.info(),changes:options=>db.changes(options),revsDiff:diff=>db.revsDiff(diff),bulkDocs:(docs,options)=>db.bulkDocs(docs,options),bulkGet:options=>db.bulkGet(options),put:(doc,options)=>db.put(doc,options),get:(id,options)=>db.get(id,options),_stopHosting:()=>{db=void 0}}}function mixedHash(str,seed,fnv1aHash_=epochFNV1a){let h1=seed,fnv1aHash=fnv1aHash_;const len=str.length;for(let i2=0;i2<len;i2++){let k1=str.charCodeAt(i2);fnv1aHash^=k1;fnv1aHash=Math.imul(fnv1aHash,16777619)>>>0;k1*=c1;k1=k1<<r1|k1>>>32-r1;k1*=c2;h1^=k1;h1=h1<<r2|h1>>>32-r2;h1=h1*m+n}h1^=len;h1^=h1>>>16;h1=Math.imul(h1,2246822507);h1^=h1>>>13;h1=Math.imul(h1,3266489909);h1^=h1>>>16;return[h1>>>0,fnv1aHash]}function fallbackMixedHashEach(src){let m3=1,f4=epochFNV1a;[m3,f4]=mixedHash(`${src.length}${src}`,m3,f4);return`${m3.toString(36)}${f4.toString(36)}`}async function sha12(src){const bytes=writeString(src),digest=await globalThis.crypto.subtle.digest({name:"SHA-1"},bytes);return await arrayBufferToBase64Single(digest)}function initializeStores(vaultName){sameChangePairs=new PersistentMap(`ls-persist-same-changes-${vaultName}`)}function generateCredentialObject(settings){return settings.useJWT?{jwtAlgorithm:settings.jwtAlgorithm,jwtKey:settings.jwtKey,jwtKid:settings.jwtKid,jwtSub:settings.jwtSub,jwtExpDuration:settings.jwtExpDuration,type:"jwt"}:{username:settings.couchDB_USER,password:settings.couchDB_PASSWORD,type:"basic"}}function isInternalMetadata(id){return id.startsWith(ICHeader)}function isInternalFile(file){return"string"==typeof file?isInternalMetadata(file):!!file.isInternal}function stripInternalMetadataPrefix(id){return id.substring(ICHeaderLength)}function isChunk(str){return str.startsWith(CHeader)}function isPluginMetadata(str){return str.startsWith(PSCHeader)}function isCustomisationSyncMetadata(str){return str.startsWith(ICXHeader)}function getStoragePathFromUXFileInfo(file){return stripAllPrefixes("string"==typeof file?file:file.path)}function getDatabasePathFromUXFileInfo(file){if("string"==typeof file&&file.startsWith(ICXHeader))return file;const prefix=isInternalFile(file)?ICHeader:"";return"string"==typeof file?prefix+stripAllPrefixes(file):prefix+stripAllPrefixes(file.path)}function getPathFromTFile(file){return file.path}function memoObject(key3,obj){memos[key3]=obj;return memos[key3]}async function memoIfNotExist(key3,func){if(!(key3 in memos)){const w2=func(),v2=w2 instanceof Promise?await w2:w2;memos[key3]=v2}return memos[key3]}function retrieveMemoObject(key3){return key3 in memos&&memos[key3]}function disposeMemoObject(key3){delete memos[key3]}function isValidPath(filename){if(import_obsidian.Platform.isDesktop)return"darwin"==process.platform?isValidFilenameInDarwin(filename):"linux"==process.platform?isValidFilenameInLinux(filename):isValidFilenameInWidows(filename);if(import_obsidian.Platform.isAndroidApp)return isValidFilenameInAndroid(filename);if(import_obsidian.Platform.isIosApp)return isValidFilenameInDarwin(filename);Logger("Could not determine platform for checking filename",LOG_LEVEL_VERBOSE);return isValidFilenameInWidows(filename)}function requestToCouchDBWithCredentials(baseUri,credentials,origin2="",key3,body,method,customHeaders){return _requestToCouchDB(baseUri,credentials,origin2,"_node/_local/_config"+(key3?"/"+key3:""),body,method,customHeaders)}function getKey(file){return"string"==typeof file?file:stripAllPrefixes(file.path)}function markChangesAreSame(file,mtime1,mtime2){if(mtime1===mtime2)return!0;const key3=getKey(file),pairs=sameChangePairs.get(key3,[])||[];pairs.some(e3=>e3==mtime1||e3==mtime2)?sameChangePairs.set(key3,[...new Set([...pairs,mtime1,mtime2])]):sameChangePairs.set(key3,[mtime1,mtime2])}function unmarkChanges(file){const key3=getKey(file);sameChangePairs.delete(key3)}function isMarkedAsSameChanges(file,mtimes){const key3=getKey(file),pairs=sameChangePairs.get(key3,[])||[];if(mtimes.every(e3=>-1!==pairs.indexOf(e3)))return EVEN}function compareFileFreshness(baseFile,checkTarget){var _a8,_b5,_c3,_d2,_e2,_f;if(void 0===baseFile&&null==checkTarget)return EVEN;if(null==baseFile)return TARGET_IS_NEW;if(null==checkTarget)return BASE_IS_NEW;const modifiedBase="stat"in baseFile?null!=(_b5=null==(_a8=null==baseFile?void 0:baseFile.stat)?void 0:_a8.mtime)?_b5:0:null!=(_c3=null==baseFile?void 0:baseFile.mtime)?_c3:0,modifiedTarget="stat"in checkTarget?null!=(_e2=null==(_d2=null==checkTarget?void 0:checkTarget.stat)?void 0:_d2.mtime)?_e2:0:null!=(_f=null==checkTarget?void 0:checkTarget.mtime)?_f:0;return modifiedBase&&modifiedTarget&&isMarkedAsSameChanges(baseFile,[modifiedBase,modifiedTarget])?EVEN:compareMTime(modifiedBase,modifiedTarget)}function getLogLevel(showNotice){return showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO}async function autosaveCache(db,mapKey){var _a8;const savedData=null!=(_a8=await db.get(mapKey))?_a8:new Map,_commit2=()=>{try{scheduleTask("commit-map-save-"+mapKey,250,async()=>{await db.set(mapKey,savedData)})}catch(e3){}};return{set(key3,value){const modified=savedData.get(key3)!==value,result=savedData.set(key3,value);modified&&_commit2();return result},clear(){savedData.clear();_commit2()},delete(key3){const result=savedData.delete(key3);result&&_commit2();return result},get:key3=>savedData.get(key3),has:key3=>savedData.has(key3),keys:()=>savedData.keys(),get size(){return savedData.size}}}function onlyInNTimes(n3,proc){let counter=0;return function(){counter++%n3==0&&proc(counter)}}function addLog(log3){recentLogs=[...recentLogs,log3].splice(-200);logMessages.value=recentLogs}function __$checkInstanceBinding(instance){const thisName=instance.constructor.name,functions=[];for(const key3 of Object.getOwnPropertyNames(Object.getPrototypeOf(instance)))key3.startsWith("_")&&!key3.startsWith("__")&&"function"==typeof instance[key3]&&functions.push(`${thisName}.${key3}`);const functionsOnBindFunction=[],functionsOnBindFunctionMatch=instance.onBindFunction.toString().match(/this\.(_[a-zA-Z0-9_]+)/g);functionsOnBindFunctionMatch&&functionsOnBindFunction.push(...functionsOnBindFunctionMatch.map(f4=>`${thisName}.${f4.replace(/this\./,"")}`));const setOfThisFunctions=new Set(functions),setOfOnBindFunctions=new Set(functionsOnBindFunction),setAll=new Set([...setOfThisFunctions,...setOfOnBindFunctions]),missingInThis=[...setAll].filter(e3=>!setOfThisFunctions.has(e3)),missingInOnBind=[...setAll].filter(e3=>!setOfOnBindFunctions.has(e3));missingInThis.length>0&&Logger(`[${thisName}] ⚠️ Missing functions in this: ${missingInThis.join(", ")}`);missingInOnBind.length>0&&Logger(`[${thisName}] ⚠️ Missing functions in onBindFunction: ${missingInOnBind.join(", ")}`);0==missingInThis.length&&0==missingInOnBind.length&&Logger(`[${thisName}] All functions are properly bound`,LOG_LEVEL_DEBUG)}function apply2(__1,docA,docB,mode,callback,docToString,objBA,objAB){if(get(docA)&&get(docB)){if(get(docA)._id==get(docB)._id){if("A"==get(mode))return callback()(get(docA)._rev,void 0);if("B"==get(mode))return callback()(get(docB)._rev,void 0)}else{if("A"==get(mode))return callback()(void 0,docToString(get(docA)));if("B"==get(mode))return callback()(void 0,docToString(get(docB)))}if("BA"==get(mode))return callback()(void 0,JSON.stringify(get(objBA),null,2));if("AB"==get(mode))return callback()(void 0,JSON.stringify(get(objAB),null,2));callback()(void 0,void 0)}}function cancel(__2,callback){callback()(void 0,void 0)}function JsonResolvePane($$anchor,$$props){function parseJson(json){if(!1===json)return!1;try{return JSON.parse(json)}catch(ex){return!1}}function docToString(doc){return"plain"==doc.datatype?getDocData(doc.data):readString(new Uint8Array(decodeBinary(doc.data)))}function revStringToRevNumber(rev3){return rev3?rev3.split("-")[0]:""}function getDiff(left,right){const dmp=new import_diff_match_patch.diff_match_patch,mapLeft=dmp.diff_linesToChars_(left,right),diffLeftSrc=dmp.diff_main(mapLeft.chars1,mapLeft.chars2,!1);dmp.diff_charsToLines_(diffLeftSrc,mapLeft.lineArray);return diffLeftSrc}function getJsonDiff(a2,b3){return getDiff(JSON.stringify(a2,null,2),JSON.stringify(b3,null,2))}var fragment,h22,text2,node,consequent,alternate_1;push($$props,!0);append_styles($$anchor,$$css2);const binding_group=[];let docs=prop($$props,"docs",27,()=>proxy([])),callback=prop($$props,"callback",11,async(_,__)=>{Promise.resolve()}),filename=prop($$props,"filename",11,""),nameA=prop($$props,"nameA",11,"A"),nameB=prop($$props,"nameB",11,"B"),defaultSelect=prop($$props,"defaultSelect",11,""),keepOrder=prop($$props,"keepOrder",11,!1),hideLocal=prop($$props,"hideLocal",11,!1);const docsArray=user_derived(()=>docs()&&docs().length>=1?keepOrder()||docs()[0].mtime<docs()[1].mtime?{a:docs()[0],b:docs()[1]}:{a:docs()[1],b:docs()[0]}:{a:!1,b:!1}),docA=user_derived(()=>get(docsArray).a),docB=user_derived(()=>get(docsArray).b),docAContent=user_derived(()=>get(docA)&&docToString(get(docA))),docBContent=user_derived(()=>get(docB)&&docToString(get(docB))),objA=user_derived(()=>parseJson(get(docAContent))||{}),objB=user_derived(()=>parseJson(get(docBContent))||{}),objAB=user_derived(()=>mergeObject(get(objA),get(objB))),objBAw=user_derived(()=>mergeObject(get(objB),get(objA))),objBA=user_derived(()=>!!isObjectDifferent(get(objBAw),get(objAB))&&get(objBAw));let diffs=user_derived(()=>get(objA)&&get(selectedObj)?getJsonDiff(get(objA),get(selectedObj)):[]),mode=state(proxy(defaultSelect()));const mergedObjs=user_derived(()=>({"":!1,A:get(objA),B:get(objB),AB:get(objAB),BA:get(objBA)}));let selectedObj=user_derived(()=>get(mode)in get(mergedObjs)?get(mergedObjs)[get(mode)]:{});proxy([]);const modes=user_derived(()=>{let newModes=[];if(!hideLocal()){newModes.push(["","Not now"]);newModes.push(["A",nameA()||"A"])}newModes.push(["B",nameB()||"B"]);newModes.push(["AB",`${nameA()||"A"} + ${nameB()||"B"}`]);newModes.push(["BA",`${nameB()||"B"} + ${nameA()||"A"}`]);return newModes});h22=first_child(fragment=root2());text2=child(h22,!0);reset(h22);node=sibling(h22,2);consequent=$$anchor2=>{var fragment_1=root_12(),div=sibling(first_child(fragment_1),2);child(div).__click=[apply2,docA,docB,mode,callback,docToString,objBA,objAB];reset(div);append($$anchor2,fragment_1)};alternate_1=$$anchor2=>{var node_2,consequent_2,alternate,div_4,table2,tbody,tr,th,text_4,td3,node_3,consequent_3,text_6,td_1,text_7,tr_1,th_1,text_8,td_2,node_4,consequent_4,text_10,td_3,text_11,div_5,node_5,consequent_5,fragment_2=root_2(),div_1=first_child(fragment_2);each(div_1,21,()=>get(modes),index,($$anchor3,m3)=>{var fragment_3=comment(),node_1=first_child(fragment_3),consequent_1=$$anchor4=>{var input_value,div_2,text_1,label2=root_4(),input=child(label2);remove_input_defaults(input);div_2=sibling(input,2);text_1=child(div_2,!0);reset(div_2);reset(label2);template_effect(()=>{var _a8;set_class(label2,1,"sls-setting-label "+(get(m3)[0]==get(mode)?"selected":""),"svelte-1ah3y1j");input_value!==(input_value=get(m3)[0])&&(input.value=null!=(_a8=input.__value=get(m3)[0])?_a8:"");set_text(text_1,get(m3)[1])});bind_group(binding_group,[],input,()=>{get(m3)[0];return get(mode)},$$value=>set(mode,$$value));append($$anchor4,label2)};if_block(node_1,$$render=>{""!=get(m3)[0]&&0==get(mergedObjs)[get(m3)[0]]||$$render(consequent_1)});append($$anchor3,fragment_3)});reset(div_1);node_2=sibling(div_1,2);consequent_2=$$anchor3=>{var div_3=root_5();each(div_3,21,()=>get(diffs),index,($$anchor4,diff)=>{var span=root_6(),text_2=child(span,!0);reset(span);template_effect(()=>{set_class(span,1,clsx2(get(diff)[0]==import_diff_match_patch.DIFF_DELETE?"deleted":get(diff)[0]==import_diff_match_patch.DIFF_INSERT?"added":"normal"),"svelte-1ah3y1j");set_text(text_2,get(diff)[1])});append($$anchor4,span)});reset(div_3);append($$anchor3,div_3)};alternate=$$anchor3=>{append($$anchor3,text("NO PREVIEW"))};if_block(node_2,$$render=>{0!=get(selectedObj)?$$render(consequent_2):$$render(alternate,!1)});table2=child(div_4=sibling(node_2,2));tbody=child(table2);tr=child(tbody);th=child(tr);text_4=child(th,!0);reset(th);node_3=child(td3=sibling(th));consequent_3=$$anchor3=>{var text_5=text();template_effect($0=>set_text(text_5,`Rev:${null!=$0?$0:""}`),[()=>revStringToRevNumber(get(docA)._rev)]);append($$anchor3,text_5)};if_block(node_3,$$render=>{get(docA)._id==get(docB)._id&&$$render(consequent_3)});text_6=sibling(node_3);reset(td3);td_1=sibling(td3);text_7=child(td_1);reset(td_1);reset(tr);th_1=child(tr_1=sibling(tr));text_8=child(th_1,!0);reset(th_1);node_4=child(td_2=sibling(th_1));consequent_4=$$anchor3=>{var text_9=text();template_effect($0=>set_text(text_9,`Rev:${null!=$0?$0:""}`),[()=>revStringToRevNumber(get(docB)._rev)]);append($$anchor3,text_9)};if_block(node_4,$$render=>{get(docA)._id==get(docB)._id&&$$render(consequent_4)});text_10=sibling(node_4);reset(td_2);td_3=sibling(td_2);text_11=child(td_3);reset(td_3);reset(tr_1);reset(tbody);reset(table2);reset(div_4);node_5=child(div_5=sibling(div_4,2));consequent_5=$$anchor3=>{var button_1=root_10();button_1.__click=[cancel,callback];append($$anchor3,button_1)};if_block(node_5,$$render=>{hideLocal()&&$$render(consequent_5)});sibling(node_5,2).__click=[apply2,docA,docB,mode,callback,docToString,objBA,objAB];reset(div_5);template_effect(($0,$1)=>{var _a8,_b5;set_text(text_4,nameA());set_text(text_6,` ${null!=$0?$0:""}`);set_text(text_7,`${null!=(_a8=get(docAContent)&&get(docAContent).length)?_a8:""} letters`);set_text(text_8,nameB());set_text(text_10,` ${null!=$1?$1:""}`);set_text(text_11,`${null!=(_b5=get(docBContent)&&get(docBContent).length)?_b5:""} letters`)},[()=>new Date(get(docA).mtime).toLocaleString(),()=>new Date(get(docB).mtime).toLocaleString()]);append($$anchor2,fragment_2)};if_block(node,$$render=>{get(docA)&&get(docB)?$$render(alternate_1,!1):$$render(consequent)});template_effect(()=>set_text(text2,filename()));append($$anchor,fragment);pop()}function stopAllRunningProcessors(){const processors=[...allRunningProcessors];for(const processor of processors)processor.terminate()}function getComparingMTime(doc,includeDeleted=!1){var _a8,_b5,_c3;if(null===doc)return 0;if(!1===doc)return 0;if(void 0===doc)return 0;if(!includeDeleted){if("deleted"in doc&&doc.deleted)return 0;if("_deleted"in doc&&doc._deleted)return 0}return"stat"in doc?null!=(_b5=null==(_a8=doc.stat)?void 0:_a8.mtime)?_b5:0:null!=(_c3=doc.mtime)?_c3:0}async function e(){function c3(t9,n4){if(e3.buffer.byteLength<t9+n4){const r5=Math.ceil((t9+n4-e3.buffer.byteLength)/65536);e3.grow(r5),a2=new Uint8Array(e3.buffer)}}function l2(t9,e4,n4,r5,i3,o3){c3(t9);const h4=new Uint8Array(t9);return a2.set(h4),n4(0,e4),h4.set(a2.slice(0,t9)),{update(e5){let n5;return a2.set(h4),"string"==typeof e5?(c3(3*e5.length,t9),n5=b3.encodeInto(e5,a2.subarray(t9)).written):(c3(e5.byteLength,t9),a2.set(e5,t9),n5=e5.byteLength),r5(0,t9,n5),h4.set(a2.slice(0,t9)),this},digest:()=>(a2.set(h4),o3(i3(0)))}}function d4(t9){return t9>>>0}function y2(t9){return t9&f4}function p2(t9){let e4=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return c3(3*t9.length,0),d4(n3(0,b3.encodeInto(t9,a2).written,e4))}function v2(t9){let e4=arguments.length>1&&void 0!==arguments[1]?arguments[1]:w2;return c3(3*t9.length,0),y2(r4(0,b3.encodeInto(t9,a2).written,e4))}const{instance:{exports:{mem:e3,xxh32:n3,xxh64:r4,init32:i2,update32:o2,digest32:h3,init64:s2,update64:u2,digest64:g2}}}=await WebAssembly.instantiate(t);let a2=new Uint8Array(e3.buffer);const f4=BigInt(2)**BigInt(64)-BigInt(1),b3=new TextEncoder,w2=BigInt(0);return{h32:p2,h32ToString(t9){return p2(t9,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0).toString(16).padStart(8,"0")},h32Raw(t9){let e4=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return c3(t9.byteLength,0),a2.set(t9),d4(n3(0,t9.byteLength,e4))},create32(){return l2(48,arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i2,o2,h3,d4)},h64:v2,h64ToString(t9){return v2(t9,arguments.length>1&&void 0!==arguments[1]?arguments[1]:w2).toString(16).padStart(16,"0")},h64Raw(t9){let e4=arguments.length>1&&void 0!==arguments[1]?arguments[1]:w2;return c3(t9.byteLength,0),a2.set(t9),y2(r4(0,t9.byteLength,e4))},create64(){return l2(88,arguments.length>0&&void 0!==arguments[0]?arguments[0]:w2,s2,u2,g2,y2)}}}function digestHash(src){let hash3="";for(const v2 of src)hash3=hashFunc(hash3+v2);return""==hash3?hashFunc("**"):hash3}function PluginCombo($$anchor,$$props){async function comparePlugin(local,remote){var _a8,_b5;let freshness2="",version3="",contentCheck=!1,canApply2=!1;if(local||remote)if(local&&!remote)freshness2="Local only";else if(remote&&!local){freshness2="Remote only";canApply2=!0}else{const dtDiff=(null!==(_a8=null==local?void 0:local.mtime)&&void 0!==_a8?_a8:0)-(null!==(_b5=null==remote?void 0:remote.mtime)&&void 0!==_b5?_b5:0),diff=timeDeltaToHumanReadable(Math.abs(dtDiff));if(dtDiff/1e3<-10){freshness2=`Newer (${diff})`;canApply2=!0;contentCheck=!0}else if(dtDiff/1e3>10){freshness2=`Older (${diff})`;canApply2=!0;contentCheck=!0}else{freshness2="Same";canApply2=!1;contentCheck=!0}}else freshness2="";const localVersionStr=(null==local?void 0:local.version)||"0.0.0",remoteVersionStr=(null==remote?void 0:remote.version)||"0.0.0";if((null==local?void 0:local.version)||(null==remote?void 0:remote.version)){const compare3=`${localVersionStr}`.localeCompare(remoteVersionStr,void 0,{numeric:!0});0==compare3?version3="Same":compare3<0?version3=`Lower (${localVersionStr} < ${remoteVersionStr})`:compare3>0&&(version3=`Higher (${localVersionStr} > ${remoteVersionStr})`)}if(contentCheck&&local&&remote){const{canApply:canApply3,equivalency:equivalency3,canCompare:canCompare3}=await checkEquivalency(local,remote);return{canApply:canApply3,freshness:freshness2,equivalency:equivalency3,version:version3,canCompare:canCompare3}}return{canApply:canApply2,freshness:freshness2,equivalency:"",version:version3,canCompare:!1}}async function checkEquivalency(local,remote){let equivalency2="",canApply2=!1,canCompare2=!1;const matchingStatus=[...new Set([...local.files.map(e3=>e3.filename),...remote.files.map(e3=>e3.filename)])].map(filename=>{const localFile=local.files.find(e3=>e3.filename==filename),remoteFile=remote.files.find(e3=>e3.filename==filename);return localFile||remoteFile?localFile&&!remoteFile?2:!localFile&&remoteFile?8:localFile&&remoteFile&&getDocData(localFile.data)==getDocData(remoteFile.data)?4:16:0}).reduce((p2,c3)=>p2|c3,0);if(4==matchingStatus){equivalency2="Same";canApply2=!1}else if(matchingStatus<=4){equivalency2="Same or local only";canApply2=!1}else if(16==matchingStatus){canApply2=!0;canCompare2=!0;equivalency2="Different"}else{canApply2=!0;canCompare2=!0;equivalency2="Mixed"}return{equivalency:equivalency2,canApply:canApply2,canCompare:canCompare2}}async function performCompare(local,remote){const result=await comparePlugin(local,remote);set(canApply,result.canApply);set(freshness,result.freshness);set(equivalency,result.equivalency);set(version2,result.version);set(canCompare,result.canCompare);set(pickToCompare,!1);get(canCompare)&&((null==local?void 0:local.files.length)==(null==remote?void 0:remote.files.length)&&1==(null==local?void 0:local.files.length)&&(null==local?void 0:local.files[0].filename)==(null==remote?void 0:remote.files[0].filename)?set(pickToCompare,!1):set(pickToCompare,!0))}async function updateTerms(list2,selectNewest2,isMaintenanceMode2){const local=list2.find(e3=>e3.term==thisTerm());if(isMaintenanceMode2)set(terms,[...new Set(list2.map(e3=>e3.term))]);else if(hideNotApplicable()){const termsTmp=[],wk2=[...new Set(list2.map(e3=>e3.term))];for(const termName of wk2){const remote=list2.find(e3=>e3.term==termName);(await comparePlugin(local,remote)).canApply&&termsTmp.push(termName)}set(terms,[...termsTmp])}else set(terms,[...new Set(list2.map(e3=>e3.term))].filter(e3=>e3!=thisTerm()));let newest=local;if(selectNewest2){for(const term of get(terms)){const remote=list2.find(e3=>e3.term==term);remote&&remote.mtime&&((null==newest?void 0:newest.mtime)||0)<remote.mtime&&(newest=remote)}newest&&newest.term!=thisTerm()&&selected(newest.term)}get(terms).indexOf(selected())<0&&selected("")}async function applySelected(){const local=list().find(e3=>e3.term==thisTerm()),selectedItem=list().find(e3=>e3.term==selected());selectedItem&&await applyData()(selectedItem)&&addOn.updatePluginList(!0,null==local?void 0:local.documentPath)}async function compareSelected(){const local=list().find(e3=>e3.term==thisTerm()),selectedItem=list().find(e3=>e3.term==selected());await compareItems(local,selectedItem)}async function compareItems(local,remote,filename){if(local&&remote){if(!filename){await compareData()(local,remote)&&addOn.updatePluginList(!0,local.documentPath);return}{const localCopy=local instanceof PluginDataExDisplayV2?new PluginDataExDisplayV2(local):{...local},remoteCopy=remote instanceof PluginDataExDisplayV2?new PluginDataExDisplayV2(remote):{...remote};localCopy.files=localCopy.files.filter(e3=>e3.filename==filename);remoteCopy.files=remoteCopy.files.filter(e3=>e3.filename==filename);await compareData()(localCopy,remoteCopy,!0)&&addOn.updatePluginList(!0,local.documentPath)}}else remote||local?remote?local||Logger("Could not locally item",LOG_LEVEL_INFO):Logger("Could not find remote item",LOG_LEVEL_INFO):Logger("Could not find both remote and local item",LOG_LEVEL_INFO)}async function pickCompareItem(evt){const local=list().find(e3=>e3.term==thisTerm()),selectedItem=list().find(e3=>e3.term==selected());if(!local)return;if(!selectedItem)return;const menu=new import_obsidian.Menu;menu.addItem(item=>item.setTitle("Compare file").setIsLabel(!0));menu.addSeparator();const files=unique(local.files.map(e3=>e3.filename).concat(selectedItem.files.map(e3=>e3.filename))),convDate=dt=>dt?new Date(dt.mtime).toLocaleString():"(Missing)";for(const filename of files)menu.addItem(item=>{const localFile=local.files.find(e3=>e3.filename==filename),remoteFile=selectedItem.files.find(e3=>e3.filename==filename),title=`${filename} (${convDate(localFile)} <--\x3e ${convDate(remoteFile)})`;item.setTitle(title).onClick(e3=>compareItems(local,selectedItem,filename))});menu.showAtMouseEvent(evt)}async function deleteSelected(){const selectedItem=list().find(e3=>e3.term==selected());selectedItem&&await deleteData()(selectedItem)&&addOn.reloadPluginList(!0)}async function duplicateItem(){const local=list().find(e3=>e3.term==thisTerm());if(!local){Logger("Could not find local item",LOG_LEVEL_VERBOSE);return}const duplicateTermName=await get(core).confirm.askString("Duplicate","device name","");if(duplicateTermName){if(duplicateTermName.contains("/")){Logger('We can not use "/" to the device name',LOG_LEVEL_NOTICE);return}const key3=`${plugin3().core.services.API.getSystemConfigDir()}/${local.files[0].filename}`;await addOn.storeCustomizationFiles(key3,duplicateTermName);await addOn.updatePluginList(!1,addOn.filenameToUnifiedKey(key3,duplicateTermName))}}var fragment,node,consequent_6,alternate_4;push($$props,!1);append_styles($$anchor,$$css3);const core=mutable_source();let list=prop($$props,"list",24,()=>[]),thisTerm=prop($$props,"thisTerm",8,""),hideNotApplicable=prop($$props,"hideNotApplicable",8,!1),selectNewest=prop($$props,"selectNewest",8,0),selectNewestStyle=prop($$props,"selectNewestStyle",8,0),applyAllPluse=prop($$props,"applyAllPluse",8,0),applyData=prop($$props,"applyData",8),compareData=prop($$props,"compareData",8),deleteData=prop($$props,"deleteData",8),hidden=prop($$props,"hidden",8),plugin3=prop($$props,"plugin",8),isMaintenanceMode=prop($$props,"isMaintenanceMode",8,!1),isFlagged=prop($$props,"isFlagged",8,!1);const addOn=plugin3().core.getAddOn(ConfigSync.name);if(!addOn){Logger(`Could not load the add-on ${ConfigSync.name}`,LOG_LEVEL_INFO);throw new Error(`Could not load the add-on ${ConfigSync.name}`)}let selected=prop($$props,"selected",12,""),freshness=mutable_source(""),equivalency=mutable_source(""),version2=mutable_source(""),canApply=mutable_source(!1),canCompare=mutable_source(!1),pickToCompare=mutable_source(!1),currentSelectNewest=mutable_source(0),currentApplyAll=mutable_source(0),terms=mutable_source([]);legacy_pre_effect(()=>deep_read_state(plugin3()),()=>{set(core,plugin3().core)});legacy_pre_effect(()=>(deep_read_state(selectNewest()),get(currentSelectNewest),deep_read_state(selectNewestStyle()),deep_read_state(isFlagged()),deep_read_state(list()),deep_read_state(isMaintenanceMode())),()=>{let doSelectNewest=!1;selectNewest()!=get(currentSelectNewest)&&(1==selectNewestStyle()?doSelectNewest=!0:2==selectNewestStyle()?doSelectNewest=isFlagged():3==selectNewestStyle()&&selected(""));updateTerms(list(),doSelectNewest,isMaintenanceMode());set(currentSelectNewest,selectNewest())});legacy_pre_effect(()=>(deep_read_state(applyAllPluse()),get(currentApplyAll),deep_read_state(selected()),deep_read_state(hidden())),()=>{const doApply=applyAllPluse()!=get(currentApplyAll);set(currentApplyAll,applyAllPluse());doApply&&selected()&&(hidden()||applySelected())});legacy_pre_effect(()=>(deep_read_state(selected()),deep_read_state(thisTerm()),deep_read_state(list())),()=>{set(freshness,"");set(equivalency,"");set(version2,"");set(canApply,!1);if(""==selected());else if(selected()==thisTerm()){set(freshness,"This device");set(canApply,!1)}else performCompare(list().find(e3=>e3.term==thisTerm()),list().find(e3=>e3.term==selected()))});legacy_pre_effect_reset();init();node=first_child(fragment=comment());consequent_6=$$anchor2=>{var fragment_1=root_13(),node_1=sibling(first_child(fragment_1),2),consequent_5=$$anchor3=>{var span_2,text_1,span_3,text_2,select,option,node_3,consequent_2,alternate_2,node_6,consequent_4,fragment_2=root_22(),span=first_child(fragment_2),span_1=child(span),text2=child(span_1,!0);reset(span_1);span_2=sibling(span_1,2);text_1=child(span_2,!0);reset(span_2);span_3=sibling(span_2,2);text_2=child(span_3,!0);reset(span_3);reset(span);select=sibling(span,2);template_effect(()=>{selected();invalidate_inner_signals(()=>{get(terms)})});(option=child(select)).value=option.__value="";each(sibling(option),1,()=>get(terms),index,($$anchor4,term)=>{var option_1_value,option_1=root_3(),text_3=child(option_1,!0);reset(option_1);option_1_value={};template_effect(()=>{var _a8;set_text(text_3,get(term));option_1_value!==(option_1_value=get(term))&&(option_1.value=null!=(_a8=option_1.__value=get(term))?_a8:"")});append($$anchor4,option_1)});reset(select);node_3=sibling(select,2);consequent_2=$$anchor4=>{var fragment_3=root_42(),node_4=first_child(fragment_3),consequent_1=$$anchor5=>{var fragment_4=comment(),node_5=first_child(fragment_4),consequent=$$anchor6=>{var button=root_62();event("click",button,pickCompareItem);append($$anchor6,button)},alternate=$$anchor6=>{var button_1=root_7();event("click",button_1,compareSelected);append($$anchor6,button_1)};if_block(node_5,$$render=>{get(pickToCompare)?$$render(consequent):$$render(alternate,!1)});append($$anchor5,fragment_4)},alternate_1=$$anchor5=>{append($$anchor5,root_8())};if_block(node_4,$$render=>{get(canCompare)?$$render(consequent_1):$$render(alternate_1,!1)});event("click",sibling(node_4,2),applySelected);append($$anchor4,fragment_3)};alternate_2=$$anchor4=>{var fragment_5=root_9();next(2);append($$anchor4,fragment_5)};if_block(node_3,$$render=>{get(canApply)||isMaintenanceMode()&&""!=selected()?$$render(consequent_2):$$render(alternate_2,!1)});node_6=sibling(node_3,2);consequent_4=$$anchor4=>{var fragment_6=comment(),node_7=first_child(fragment_6),consequent_3=$$anchor5=>{var button_4=root_11();event("click",button_4,deleteSelected);append($$anchor5,button_4)},alternate_3=$$anchor5=>{var button_5=root_122();event("click",button_5,duplicateItem);append($$anchor5,button_5)};if_block(node_7,$$render=>{""!=selected()?$$render(consequent_3):$$render(alternate_3,!1)});append($$anchor4,fragment_6)};if_block(node_6,$$render=>{isMaintenanceMode()&&$$render(consequent_4)});template_effect(()=>{set_text(text2,get(freshness));set_text(text_1,get(equivalency));set_text(text_2,get(version2))});bind_select_value(select,selected);append($$anchor3,fragment_2)};if_block(node_1,$$render=>{hidden()||$$render(consequent_5)});append($$anchor2,fragment_1)};alternate_4=$$anchor2=>{var fragment_7=root_132();next(6);append($$anchor2,fragment_7)};if_block(node,$$render=>{get(terms),untrack(()=>get(terms).length>0)?$$render(consequent_6):$$render(alternate_4,!1)});append($$anchor,fragment);pop()}function PluginPane($$anchor,$$props){async function requestUpdate(){await addOn.updatePluginList(!0)}async function requestReload(){await addOn.reloadPluginList(!0)}function filterList(list2,categories){return list2.filter(e3=>-1!==categories.indexOf(e3.category)).sort((a2,b3)=>`${a2.category}-${a2.name}`.localeCompare(`${b3.category}-${b3.name}`))}function groupBy(items,key3){let ret={};for(const v2 of items){const k2=key3 in v2?v2[key3]:"";ret[k2]=ret[k2]||[];ret[k2].push(v2)}for(const k2 in ret)ret[k2]=ret[k2].sort((a2,b3)=>`${a2.category}-${a2.name}`.localeCompare(`${b3.category}-${b3.name}`));return Object.entries(ret).sort(([a2],[b3])=>`${a2}`.localeCompare(`${b3}`))}async function scanAgain(){await addOn.scanAllConfigFiles(!0);await requestUpdate()}async function replicate2(){await core().services.replication.replicate(!0)}function selectAllNewest(selectMode){update(selectNewestPulse);set(selectNewestStyle,selectMode?1:2)}function resetSelectNewest(){update(selectNewestPulse);set(selectNewestStyle,3)}function applyAll(){update(applyAllPluse)}async function applyData(data){return await addOn.applyData(data)}async function compareData(docA,docB,compareEach=!1){return await addOn.compareUsingDisplayData(docA,docB,compareEach)}async function deleteData(data){return await addOn.deleteData(data)}function askMode(evt,title,key3){var _a8;const menu=new import_obsidian.Menu;menu.addItem(item=>item.setTitle(title).setIsLabel(!0));menu.addSeparator();const prevMode=null!==(_a8=automaticList.get(key3))&&void 0!==_a8?_a8:MODE_SELECTIVE;for(const mode of[MODE_SELECTIVE,MODE_AUTOMATIC,MODE_PAUSED,MODE_SHINY])menu.addItem(item=>{item.setTitle(`${getIcon(mode)}:${TITLES[mode]}`).onClick(e3=>{mode===MODE_AUTOMATIC?askOverwriteModeForAutomatic(evt,key3):setMode(key3,mode)}).setChecked(prevMode==mode).setDisabled(prevMode==mode)});menu.showAtMouseEvent(evt)}function applyAutomaticSync(key3,direction){var _a8,_b5;setMode(key3,MODE_AUTOMATIC);const configDir=normalizePath(plugin3().core.services.API.getSystemConfigDir()),files=(null!==(_b5=null===(_a8=plugin3().core.settings.pluginSyncExtendedSetting[key3])||void 0===_a8?void 0:_a8.files)&&void 0!==_b5?_b5:[]).map(e3=>`${configDir}/${e3}`);addOnHiddenFileSync.initialiseInternalFileSync(direction,!0,files)}function askOverwriteModeForAutomatic(evt,key3){const menu=new import_obsidian.Menu;menu.addItem(item=>item.setTitle("Initial Action").setIsLabel(!0));menu.addSeparator();menu.addItem(item=>{item.setTitle("↑: Overwrite Remote").onClick(e3=>{applyAutomaticSync(key3,"pushForce")})}).addItem(item=>{item.setTitle("↓: Overwrite Local").onClick(e3=>{applyAutomaticSync(key3,"pullForce")})}).addItem(item=>{item.setTitle("⇅: Use newer").onClick(e3=>{applyAutomaticSync(key3,"safe")})});menu.showAtMouseEvent(evt)}function setMode(key3,mode){if(key3.startsWith(PREFIX_PLUGIN_ALL+"/")){setMode(PREFIX_PLUGIN_DATA+key3.substring(PREFIX_PLUGIN_ALL.length),mode);setMode(PREFIX_PLUGIN_MAIN+key3.substring(PREFIX_PLUGIN_ALL.length),mode);return}const files=unique(get(list).filter(e3=>`${e3.category}/${e3.name}`==key3).map(e3=>e3.files).flat().map(e3=>e3.filename));if(mode==MODE_SELECTIVE){automaticList.delete(key3);delete plugin3().core.settings.pluginSyncExtendedSetting[key3];set(automaticListDisp,automaticList)}else{automaticList.set(key3,mode);set(automaticListDisp,automaticList);key3 in plugin3().core.settings.pluginSyncExtendedSetting||plugin3(plugin3().core.settings.pluginSyncExtendedSetting[key3]={key:key3,mode,files:[]},!0);plugin3(plugin3().core.settings.pluginSyncExtendedSetting[key3].files=files,!0);plugin3(plugin3().core.settings.pluginSyncExtendedSetting[key3].mode=mode,!0)}core().services.setting.saveSettingData()}function getIcon(mode){if(mode in ICONS)return ICONS[mode]}function computeDisplayKeys(list2){return[...list2,...Object.keys(plugin3().core.settings.pluginSyncExtendedSetting).map(e3=>`${e3}///`.split("/")).filter(e3=>e3[0]&&e3[1]).map(e3=>({category:e3[0],name:e3[1],displayName:e3[1]}))].sort((a2,b3)=>{var _a8,_b5;return(null!==(_a8=a2.displayName)&&void 0!==_a8?_a8:a2.name).localeCompare(null!==(_b5=b3.displayName)&&void 0!==_b5?_b5:b3.name)}).reduce((p2,c3)=>{var _a8,_b5;return{...p2,[c3.category]:unique(c3.category in p2?[...p2[c3.category],null!==(_a8=c3.displayName)&&void 0!==_a8?_a8:c3.name]:[null!==(_b5=c3.displayName)&&void 0!==_b5?_b5:c3.name])}},{})}async function deleteAllItems(term){const deleteItems=get(list).filter(e3=>e3.term==term);for(const item of deleteItems)await deleteData(item);addOn.reloadPluginList(!0)}function updateNameMap(e3){const items=[...e3.entries()].map(([k2,v2])=>[k2.split("/").slice(-2).join("/"),v2.name]),newMap=new Map(items);if(newMap.size==get(nameMap).size){let diff=!1;for(const[k2,v2]of newMap)if(get(nameMap).get(k2)!=v2){diff=!0;break}if(!diff)return}set(nameMap,newMap)}var fragment,div,div_1,button,button_1,button_2,node,consequent,div_2,button_4,button_5,button_6,button_7,div_3,node_1,consequent_1,div_4,node_2,consequent_2,alternate_5,node_13,consequent_10,div_32,label_1,input,div_33,label_2,input_1;push($$props,!1);append_styles($$anchor,$$css4);const $pluginManifestStore=()=>store_get(pluginManifestStore,"$pluginManifestStore",$$stores),$pluginV2Progress=()=>store_get(pluginV2Progress,"$pluginV2Progress",$$stores),[$$stores,$$cleanup]=setup_stores(),hideNotApplicable=mutable_source(),thisTerm=mutable_source(),options=mutable_source();let plugin3=prop($$props,"plugin",12),core=prop($$props,"core",8);const addOn=core().getAddOn(ConfigSync.name);if(!addOn){const msg="AddOn Module (ConfigSync) has not been loaded. This is very unexpected situation. Please report this issue.";Logger(msg,LOG_LEVEL_NOTICE);throw new Error(msg)}const addOnHiddenFileSync=core().getAddOn(HiddenFileSync.name);if(!addOnHiddenFileSync){const msg="AddOn Module (HiddenFileSync) has not been loaded. This is very unexpected situation. Please report this issue.";Logger(msg,LOG_LEVEL_NOTICE);throw new Error(msg)}let list=mutable_source([]),selectNewestPulse=mutable_source(0),selectNewestStyle=mutable_source(0),hideEven=mutable_source(!1),loading=mutable_source(!1),applyAllPluse=mutable_source(0),isMaintenanceMode=mutable_source(!1),allTerms=mutable_source([]);pluginList.subscribe(e3=>{set(list,e3);set(allTerms,unique(get(list).map(e4=>e4.term)))});pluginIsEnumerating.subscribe(e3=>{set(loading,e3)});onMount(async()=>{requestUpdate()});const displays={CONFIG:"Configuration",THEME:"Themes",SNIPPET:"Snippets"},ICONS={[MODE_SELECTIVE]:"🔀",[MODE_PAUSED]:"⛔",[MODE_AUTOMATIC]:"✨",[MODE_SHINY]:"🚩"},TITLES={[MODE_SELECTIVE]:"Selective",[MODE_PAUSED]:"Ignore",[MODE_AUTOMATIC]:"Automatic",[MODE_SHINY]:"Flagged Selective"},PREFIX_PLUGIN_ALL="PLUGIN_ALL",PREFIX_PLUGIN_DATA="PLUGIN_DATA",PREFIX_PLUGIN_MAIN="PLUGIN_MAIN";let automaticList=new Map,automaticListDisp=mutable_source(new Map);for(const{key:key3,mode}of Object.values(plugin3().core.settings.pluginSyncExtendedSetting))automaticList.set(key3,mode);set(automaticListDisp,automaticList);let displayKeys=mutable_source({}),deleteTerm=mutable_source(""),nameMap=mutable_source(new Map),displayEntries=mutable_source([]),pluginEntries=mutable_source([]),useSyncPluginEtc=plugin3().core.settings.usePluginEtc;legacy_pre_effect(()=>{},()=>{set(hideNotApplicable,!1)});legacy_pre_effect(()=>deep_read_state(core()),()=>{set(thisTerm,core().services.setting.getDeviceAndVaultName())});legacy_pre_effect(()=>(get(thisTerm),get(hideNotApplicable),get(selectNewestPulse),get(selectNewestStyle),get(applyAllPluse),deep_read_state(plugin3()),get(isMaintenanceMode)),()=>{set(options,{thisTerm:get(thisTerm),hideNotApplicable:get(hideNotApplicable),selectNewest:get(selectNewestPulse),selectNewestStyle:get(selectNewestStyle),applyAllPluse:get(applyAllPluse),applyData,compareData,deleteData,plugin:plugin3(),isMaintenanceMode:get(isMaintenanceMode)})});legacy_pre_effect(()=>get(list),()=>{set(displayKeys,computeDisplayKeys(get(list)))});legacy_pre_effect(()=>$pluginManifestStore(),()=>{updateNameMap($pluginManifestStore())});legacy_pre_effect(()=>get(displayKeys),()=>{set(displayEntries,Object.entries(displays).filter(([key3,_])=>key3 in get(displayKeys)))});legacy_pre_effect(()=>get(list),()=>{set(pluginEntries,groupBy(filterList(get(list),["PLUGIN_MAIN","PLUGIN_DATA","PLUGIN_ETC"]),"name"))});legacy_pre_effect_reset();init();div_1=child(div=first_child(fragment=root3()));button_1=sibling(button=child(div_1),2);button_2=sibling(button_1,2);node=sibling(button_2,2);consequent=$$anchor2=>{var button_3=root_14();event("click",button_3,()=>requestReload());append($$anchor2,button_3)};if_block(node,$$render=>{get(isMaintenanceMode)&&$$render(consequent)});reset(div_1);div_2=sibling(div_1,2);(button_5=sibling(button_4=child(div_2),2)).textContent="🚩 Select Flagged Shiny";button_6=sibling(button_5,2);button_7=sibling(button_6,2);reset(div_2);reset(div);node_1=child(div_3=sibling(div,2));consequent_1=$$anchor2=>{var span=root_23(),text2=child(span);reset(span);template_effect(()=>set_text(text2,"Updating list..."+(0==$pluginV2Progress()?"":` (${$pluginV2Progress()})`)));append($$anchor2,span)};if_block(node_1,$$render=>{(get(loading)||0!==$pluginV2Progress())&&$$render(consequent_1)});reset(div_3);node_2=child(div_4=sibling(div_3,2));consequent_2=$$anchor2=>{append($$anchor2,root_32())};alternate_5=$$anchor2=>{var div_11,fragment_1=root_43(),node_3=first_child(fragment_1);each(node_3,1,()=>get(displayEntries),index,($$anchor3,$$item)=>{var div_6,h3,text_1,$$array=user_derived(()=>to_array(get($$item),2));let key3=()=>get($$array)[0],label2=()=>get($$array)[1];h3=child(div_6=root_52());text_1=child(h3,!0);reset(h3);each(sibling(h3,2),1,()=>(get(displayKeys),key3(),untrack(()=>get(displayKeys)[key3()])),index,($$anchor4,name)=>{var div_7,div_8,button_8,text_2,span_1,text_3,div_9,node_5,consequent_3,alternate;const bindKey=derived_safe_equal(()=>`${key3()}/${get(name)}`),mode=derived_safe_equal(()=>(get(automaticListDisp),deep_read_state(get(bindKey)),deep_read_state(MODE_SELECTIVE),untrack(()=>{var _a8;return null!=(_a8=get(automaticListDisp).get(get(bindKey)))?_a8:MODE_SELECTIVE})));div_8=child(div_7=root_63());button_8=child(div_8);text_2=child(button_8,!0);reset(button_8);span_1=sibling(button_8,2);text_3=child(span_1,!0);reset(span_1);reset(div_8);node_5=child(div_9=sibling(div_8,2));consequent_3=$$anchor5=>{{let $0=derived_safe_equal(()=>get(mode)==MODE_SHINY),$1=derived_safe_equal(()=>(get(list),key3(),get(name),untrack(()=>get(list).filter(e3=>e3.category==key3()&&e3.name==get(name)))));PluginCombo($$anchor5,spread_props(()=>get(options),{get isFlagged(){return get($0)},get list(){return get($1)},hidden:!1}))}};alternate=$$anchor5=>{var div_10=root_82(),text_4=child(div_10,!0);reset(div_10);template_effect(()=>set_text(text_4,(deep_read_state(get(mode)),untrack(()=>TITLES[get(mode)]))));append($$anchor5,div_10)};if_block(node_5,$$render=>{get(mode)==MODE_SELECTIVE||get(mode)==MODE_SHINY?$$render(consequent_3):$$render(alternate,!1)});reset(div_9);reset(div_7);template_effect(($0,$1)=>{set_class(div_7,1,"labelrow "+(get(hideEven)?"hideeven":""),"svelte-10jah2g");set_text(text_2,$0);set_text(text_3,$1)},[()=>(deep_read_state(get(mode)),untrack(()=>getIcon(get(mode)))),()=>(key3(),get(nameMap),get(name),untrack(()=>"THEME"==key3()&&get(nameMap).get(`themes/${get(name)}`)||get(name)))]);event("click",button_8,evt=>askMode(evt,`${key3()}/${get(name)}`,get(bindKey)));append($$anchor4,div_7)});reset(div_6);template_effect(()=>set_text(text_1,label2()));append($$anchor3,div_6)});div_11=sibling(node_3,2);each(sibling(child(div_11),2),1,()=>get(pluginEntries),index,($$anchor3,$$item)=>{var fragment_3,div_12,div_13,button_9,text_5,span_2,text_6,div_14,node_7,consequent_4,node_8,consequent_9,alternate_4,$$array_1=user_derived(()=>to_array(get($$item),2));let name=()=>get($$array_1)[0],listX=()=>get($$array_1)[1];const bindKeyAll=derived_safe_equal(()=>`${PREFIX_PLUGIN_ALL}/${name()}`),modeAll=derived_safe_equal(()=>(get(automaticListDisp),deep_read_state(get(bindKeyAll)),deep_read_state(MODE_SELECTIVE),untrack(()=>{var _a8;return null!=(_a8=get(automaticListDisp).get(get(bindKeyAll)))?_a8:MODE_SELECTIVE}))),bindKeyMain=derived_safe_equal(()=>`${PREFIX_PLUGIN_MAIN}/${name()}`),modeMain=derived_safe_equal(()=>(get(automaticListDisp),deep_read_state(get(bindKeyMain)),deep_read_state(MODE_SELECTIVE),untrack(()=>{var _a8;return null!=(_a8=get(automaticListDisp).get(get(bindKeyMain)))?_a8:MODE_SELECTIVE}))),bindKeyData=derived_safe_equal(()=>`${PREFIX_PLUGIN_DATA}/${name()}`),modeData=derived_safe_equal(()=>(get(automaticListDisp),deep_read_state(get(bindKeyData)),deep_read_state(MODE_SELECTIVE),untrack(()=>{var _a8;return null!=(_a8=get(automaticListDisp).get(get(bindKeyData)))?_a8:MODE_SELECTIVE}))),bindKeyETC=derived_safe_equal(()=>`PLUGIN_ETC/${name()}`),modeEtc=derived_safe_equal(()=>(get(automaticListDisp),deep_read_state(get(bindKeyETC)),deep_read_state(MODE_SELECTIVE),untrack(()=>{var _a8;return null!=(_a8=get(automaticListDisp).get(get(bindKeyETC)))?_a8:MODE_SELECTIVE})));fragment_3=root_92();div_13=child(div_12=first_child(fragment_3));button_9=child(div_13);text_5=child(button_9,!0);reset(button_9);span_2=sibling(button_9,2);text_6=child(span_2,!0);reset(span_2);reset(div_13);node_7=child(div_14=sibling(div_13,2));consequent_4=$$anchor4=>{{let $0=derived_safe_equal(()=>get(modeAll)==MODE_SHINY);PluginCombo($$anchor4,spread_props(()=>get(options),{get isFlagged(){return get($0)},get list(){return listX()},hidden:!0}))}};if_block(node_7,$$render=>{get(modeAll)!=MODE_SELECTIVE&&get(modeAll)!=MODE_SHINY||$$render(consequent_4)});reset(div_14);reset(div_12);node_8=sibling(div_12,2);consequent_9=$$anchor4=>{var div_17,node_9,consequent_5,alternate_1,div_19,div_20,button_11,text_9,div_21,node_10,consequent_6,alternate_2,node_11,consequent_8,fragment_5=root_112(),div_15=first_child(fragment_5),div_16=child(div_15),button_10=child(div_16),text_7=child(button_10,!0);reset(button_10);next(2);reset(div_16);node_9=child(div_17=sibling(div_16,2));consequent_5=$$anchor5=>{{let $0=derived_safe_equal(()=>get(modeMain)==MODE_SHINY),$1=derived_safe_equal(()=>(listX(),untrack(()=>filterList(listX(),["PLUGIN_MAIN"]))));PluginCombo($$anchor5,spread_props(()=>get(options),{get isFlagged(){return get($0)},get list(){return get($1)},hidden:!1}))}};alternate_1=$$anchor5=>{var div_18=root_133(),text_8=child(div_18,!0);reset(div_18);template_effect(()=>set_text(text_8,(deep_read_state(get(modeMain)),untrack(()=>TITLES[get(modeMain)]))));append($$anchor5,div_18)};if_block(node_9,$$render=>{get(modeMain)==MODE_SELECTIVE||get(modeMain)==MODE_SHINY?$$render(consequent_5):$$render(alternate_1,!1)});reset(div_17);reset(div_15);div_20=child(div_19=sibling(div_15,2));button_11=child(div_20);text_9=child(button_11,!0);reset(button_11);next(2);reset(div_20);node_10=child(div_21=sibling(div_20,2));consequent_6=$$anchor5=>{{let $0=derived_safe_equal(()=>get(modeData)==MODE_SHINY),$1=derived_safe_equal(()=>(listX(),untrack(()=>filterList(listX(),["PLUGIN_DATA"]))));PluginCombo($$anchor5,spread_props(()=>get(options),{get isFlagged(){return get($0)},get list(){return get($1)},hidden:!1}))}};alternate_2=$$anchor5=>{var div_22=root_15(),text_10=child(div_22,!0);reset(div_22);template_effect(()=>set_text(text_10,(deep_read_state(get(modeData)),untrack(()=>TITLES[get(modeData)]))));append($$anchor5,div_22)};if_block(node_10,$$render=>{get(modeData)==MODE_SELECTIVE||get(modeData)==MODE_SHINY?$$render(consequent_6):$$render(alternate_2,!1)});reset(div_21);reset(div_19);node_11=sibling(div_19,2);consequent_8=$$anchor5=>{var div_25,node_12,consequent_7,alternate_3,div_23=root_16(),div_24=child(div_23),button_12=child(div_24),text_11=child(button_12,!0);reset(button_12);next(2);reset(div_24);node_12=child(div_25=sibling(div_24,2));consequent_7=$$anchor6=>{{let $0=derived_safe_equal(()=>get(modeEtc)==MODE_SHINY),$1=derived_safe_equal(()=>(listX(),untrack(()=>filterList(listX(),["PLUGIN_ETC"]))));PluginCombo($$anchor6,spread_props(()=>get(options),{get isFlagged(){return get($0)},get list(){return get($1)},hidden:!1}))}};alternate_3=$$anchor6=>{var div_26=root_18(),text_12=child(div_26,!0);reset(div_26);template_effect(()=>set_text(text_12,(deep_read_state(get(modeEtc)),untrack(()=>TITLES[get(modeEtc)]))));append($$anchor6,div_26)};if_block(node_12,$$render=>{get(modeEtc)==MODE_SELECTIVE||get(modeEtc)==MODE_SHINY?$$render(consequent_7):$$render(alternate_3,!1)});reset(div_25);reset(div_23);template_effect($0=>{set_class(div_23,1,"filerow "+(get(hideEven)?"hideeven":""),"svelte-10jah2g");set_text(text_11,$0)},[()=>(deep_read_state(get(modeEtc)),untrack(()=>getIcon(get(modeEtc))))]);event("click",button_12,evt=>askMode(evt,`PLUGIN_ETC/${name()}`,get(bindKeyETC)));append($$anchor5,div_23)};if_block(node_11,$$render=>{useSyncPluginEtc&&$$render(consequent_8)});template_effect(($0,$1)=>{set_class(div_15,1,"filerow "+(get(hideEven)?"hideeven":""),"svelte-10jah2g");set_text(text_7,$0);set_class(div_19,1,"filerow "+(get(hideEven)?"hideeven":""),"svelte-10jah2g");set_text(text_9,$1)},[()=>(deep_read_state(get(modeMain)),untrack(()=>getIcon(get(modeMain)))),()=>(deep_read_state(get(modeData)),untrack(()=>getIcon(get(modeData))))]);event("click",button_10,evt=>askMode(evt,`${PREFIX_PLUGIN_MAIN}/${name()}/MAIN`,get(bindKeyMain)));event("click",button_11,evt=>askMode(evt,`${PREFIX_PLUGIN_DATA}/${name()}`,get(bindKeyData)));append($$anchor4,fragment_5)};alternate_4=$$anchor4=>{var div_27=root_19(),div_28=child(div_27),text_13=child(div_28,!0);reset(div_28);reset(div_27);template_effect(()=>set_text(text_13,(deep_read_state(get(modeAll)),untrack(()=>TITLES[get(modeAll)]))));append($$anchor4,div_27)};if_block(node_8,$$render=>{get(modeAll)==MODE_SELECTIVE||get(modeAll)==MODE_SHINY?$$render(consequent_9):$$render(alternate_4,!1)});template_effect(($0,$1)=>{set_class(div_12,1,"labelrow "+(get(hideEven)?"hideeven":""),"svelte-10jah2g");set_text(text_5,$0);set_text(text_6,$1)},[()=>(deep_read_state(get(modeAll)),untrack(()=>getIcon(get(modeAll)))),()=>(get(nameMap),name(),untrack(()=>get(nameMap).get(`plugins/${name()}`)||name()))]);event("click",button_9,evt=>askMode(evt,`${PREFIX_PLUGIN_ALL}/${name()}`,get(bindKeyAll)));append($$anchor3,fragment_3)});reset(div_11);append($$anchor2,fragment_1)};if_block(node_2,$$render=>{get(list),untrack(()=>0==get(list).length)?$$render(consequent_2):$$render(alternate_5,!1)});reset(div_4);node_13=sibling(div_4,2);consequent_10=$$anchor2=>{var button_13,div_29=root_20(),div_30=child(div_29),div_31=sibling(child(div_30),2),select=sibling(child(div_31),2);template_effect(()=>{get(deleteTerm);invalidate_inner_signals(()=>{get(allTerms)})});each(select,5,()=>get(allTerms),index,($$anchor3,term)=>{var option_value,option=root_21(),text_14=child(option,!0);reset(option);option_value={};template_effect(()=>{var _a8;set_text(text_14,get(term));option_value!==(option_value=get(term))&&(option.value=null!=(_a8=option.__value=get(term))?_a8:"")});append($$anchor3,option)});reset(select);button_13=sibling(select,2);reset(div_31);reset(div_30);reset(div_29);bind_select_value(select,()=>get(deleteTerm),$$value=>set(deleteTerm,$$value));event("click",button_13,evt=>{deleteAllItems(get(deleteTerm))});append($$anchor2,div_29)};if_block(node_13,$$render=>{get(isMaintenanceMode)&&$$render(consequent_10)});label_1=child(div_32=sibling(node_13,2));remove_input_defaults(input=sibling(child(label_1)));reset(label_1);reset(div_32);label_2=child(div_33=sibling(div_32,2));remove_input_defaults(input_1=sibling(child(label_2)));reset(label_2);reset(div_33);event("click",button,()=>scanAgain());event("click",button_1,()=>replicate2());event("click",button_2,()=>requestUpdate());event("click",button_4,()=>selectAllNewest(!0));event("click",button_5,()=>selectAllNewest(!1));event("click",button_6,()=>resetSelectNewest());event("click",button_7,()=>applyAll());bind_checked(input,()=>get(hideEven),$$value=>set(hideEven,$$value));bind_checked(input_1,()=>get(isMaintenanceMode),$$value=>set(isMaintenanceMode,$$value));append($$anchor,fragment);pop();$$cleanup()}function serialize(data){var _a8,_b5,_c3,_d2,_e2;let ret="";ret+=":";ret+=data.category+d+data.name+d+data.term+d2;ret+=(null!=(_a8=data.version)?_a8:"")+d2;ret+=data.mtime+d2;for(const file of data.files){ret+=file.filename+d+(null!=(_b5=file.displayName)?_b5:"")+d+(null!=(_c3=file.version)?_c3:"")+d2;const hash3=digestHash(null!=(_d2=file.data)?_d2:[]);ret+=file.mtime+d+file.size+d+hash3+d2;for(const data2 of null!=(_e2=file.data)?_e2:[])ret+=data2+d;ret+=d2}return ret}function splitWithDelimiters(sources){const result=[];for(const str of sources){let startIndex=0;const maxLen=str.length;let i1,i22,i2=-1;do{i1=str.indexOf(d,startIndex);i22=str.indexOf(d2,startIndex);if(-1==i1&&-1==i22)break;i2=-1==i1?i22:-1==i22||i1<i22?i1:i22;result.push(str.slice(startIndex,i2+1));startIndex=i2+1}while(i2<maxLen);startIndex<maxLen&&result.push(str.slice(startIndex))}""==sources[sources.length-1]&&result.push("");return result}function getTokenizer(source2){const sources=splitWithDelimiters(source2);sources[0]=sources[0].substring(1);let pos=0,lineRunOut=!1;return{next(){if(lineRunOut)return"";if(pos>=sources.length)return"";const item=sources[pos];item.endsWith(d2)?lineRunOut=!0:pos++;return item.endsWith(d)||item.endsWith(d2)?item.substring(0,item.length-1):item+this.next()},nextLine(){if(lineRunOut)pos++;else{for(;!sources[pos].endsWith(d2);){pos++;if(pos>=sources.length)break}pos++}lineRunOut=!1}}}function deserialize2(str){const tokens=getTokenizer(str),category=tokens.next(),name=tokens.next(),term=tokens.next();tokens.nextLine();const version2=tokens.next();tokens.nextLine();const mtime=Number(tokens.next());tokens.nextLine();const result=Object.assign({},{category,name,term,version:version2,mtime,files:[]});let filename="";do{filename=tokens.next();if(!filename)break;const displayName=tokens.next(),version3=tokens.next();tokens.nextLine();const mtime2=Number(tokens.next()),size=Number(tokens.next()),hash3=tokens.next();tokens.nextLine();const data=[];let piece="";do{piece=tokens.next();if(""==piece)break;data.push(piece)}while(""!=piece);result.files.push({filename,displayName,version:version3,mtime:mtime2,size,data,hash:hash3});tokens.nextLine()}while(filename);return result}function deserialize(str,def){try{return":"==str[0][0]?deserialize2(str):JSON.parse(str.join(""))}catch(e3){try{return(0,import_obsidian.parseYaml)(str.join(""))}catch(e4){return def}}}function categoryToFolder(category,configDir=""){switch(category){case"CONFIG":return`${configDir}/`;case"THEME":return`${configDir}/themes/`;case"SNIPPET":return`${configDir}/snippets/`;case"PLUGIN_MAIN":return`${configDir}/plugins/`;case"PLUGIN_DATA":return`${configDir}/plugins/`;case"PLUGIN_ETC":return`${configDir}/plugins/`;default:return""}}function setManifest(key3,manifest){const old=pluginManifests.get(key3);if(!old||isObjectDifferent(manifest,old)){pluginManifests.set(key3,manifest);pluginManifestStore.set(pluginManifests)}}function generateId(prefix){if(++idx>1e4){series=`${Date.now()}`;idx=0}return`${PREFIX_TRENCH}-${prefix}-${series}-${idx+1e7}`}function createRange(prefix,series2){return[`${PREFIX_TRENCH}-${prefix}-${series2}-`,`${PREFIX_TRENCH}-${prefix}-${series2}.`]}function createId(prefix,series2,idx2){return`${PREFIX_TRENCH}-${prefix}-${series2}-${idx2+1e7}`}function clearResult(name){measures.set(name,[0,0])}async function measureEach(name,proc){var _a8;const[times,spent]=null!=(_a8=measures.get(name))?_a8:[0,0],start=performance.now(),result=proc();result instanceof Promise&&await result;const end=performance.now();measures.set(name,[times+1,spent+(end-start)])}function formatNumber(num){return num.toLocaleString("en-US",{maximumFractionDigits:2})}async function measure(name,proc,times=1e4,duration=1e3){const from=Date.now();let last=times;clearResult(name);do{await measureEach(name,proc)}while(last-- >0&&Date.now()-from<duration);return[name,measures.get(name)]}async function formatPerfResults(items){return"| Name | Runs | Each | Total |\n| --- | --- | --- | --- | \n"+items.map(e3=>`| ${e3[0]} | ${e3[1][0]} | ${0!=e3[1][0]?formatNumber(e3[1][1]/e3[1][0]):"-"} | ${formatNumber(e3[1][0])} |`).join("\n")}async function perf_trench(plugin3){clearResult("trench");const trench=new Trench(plugin3.core.simpleStore),result=[];result.push(await measure("trench-short-string",async()=>{const p2=trench.evacuate("string");await p2()}));{const testBinary=await plugin3.core.storageAccess.readHiddenFileBinary("testdata/10kb.png"),uint8Array=new Uint8Array(testBinary);result.push(await measure("trench-binary-10kb",async()=>{const p2=trench.evacuate(uint8Array);await p2()}))}{const testBinary=await plugin3.core.storageAccess.readHiddenFileBinary("testdata/100kb.jpeg"),uint8Array=new Uint8Array(testBinary);result.push(await measure("trench-binary-100kb",async()=>{const p2=trench.evacuate(uint8Array);await p2()}))}{const testBinary=await plugin3.core.storageAccess.readHiddenFileBinary("testdata/1mb.png"),uint8Array=new Uint8Array(testBinary);result.push(await measure("trench-binary-1mb",async()=>{const p2=trench.evacuate(uint8Array);await p2()}))}return formatPerfResults(result)}function TestPane($$anchor,$$props){async function performTest(){try{set(testRunning,!0);set(performanceTestResult,await perf_trench(plugin3()))}finally{set(testRunning,!1)}}function clearResult2(){moduleDev().testResults.update(v2=>[])}function clearPerfTestResult(){get(prefTestResultEl).empty()}function moduleMultiDeviceTest(){if(!get(moduleTesting)){set(moduleTesting,!0);get(core).services.test.testMultiDevice().finally(()=>{set(moduleTesting,!1)})}}function moduleSingleDeviceTest(){if(!get(moduleTesting)){set(moduleTesting,!0);get(core).services.test.test().finally(()=>{set(moduleTesting,!1)})}}async function allTest(){if(!get(moduleTesting)){set(moduleTesting,!0);try{await get(core).services.test.test();await get(core).services.test.testMultiDevice()}finally{set(moduleTesting,!1)}}}var fragment,button,button_1,button_2,button_3,node,pre_1,text_2,button_4,button_5;push($$props,!1);append_styles($$anchor,$$css5);const $results=()=>store_get(results,"$results",$$stores),[$$stores,$$cleanup]=setup_stores(),core=mutable_source(),resultLines=mutable_source();let plugin3=prop($$props,"plugin",8),moduleDev=prop($$props,"moduleDev",8),performanceTestResult=mutable_source(""),testRunning=mutable_source(!1),prefTestResultEl=mutable_source(),isReady=mutable_source(!1);onMount(async()=>{set(isReady,!0);eventHub.onceEvent(EVENT_LAYOUT_READY,async()=>{if(await get(core).storageAccess.isExistsIncludeHidden("_AUTO_TEST.md")){new import_obsidian.Notice("Auto test file found, running tests...");fireAndForget(async()=>{await allTest()})}})});let moduleTesting=mutable_source(!1);const results=moduleDev().testResults;let syncStatus=mutable_source([]);eventHub.onEvent("debug-sync-status",status=>{set(syncStatus,[...status])});legacy_pre_effect(()=>deep_read_state(plugin3()),()=>{set(core,plugin3().core)});legacy_pre_effect(()=>(get(performanceTestResult),get(isReady),import_obsidian.MarkdownRenderer,deep_read_state(plugin3()),get(prefTestResultEl)),()=>{""!=get(performanceTestResult)&&get(isReady)&&import_obsidian.MarkdownRenderer.render(plugin3().app,get(performanceTestResult),get(prefTestResultEl),"/",plugin3())});legacy_pre_effect(()=>$results(),()=>{set(resultLines,$results())});legacy_pre_effect_reset();init();fragment=root4();button=sibling(first_child(fragment),4);button_1=sibling(button,2);button_2=sibling(button_1,2);button_3=sibling(button_2,2);each(node=sibling(button_3,2),1,()=>get(resultLines),index,($$anchor2,$$item)=>{var details,summary,text2,pre,text_1,$$array=user_derived(()=>to_array(get($$item),3));let result=()=>get($$array)[0],line=()=>get($$array)[1],message=()=>get($$array)[2];summary=child(details=root_17());text2=child(summary);reset(summary);pre=sibling(summary,2);text_1=child(pre,!0);reset(pre);reset(details);template_effect(()=>{var _a8;details.open=!result();set_text(text2,`[${result()?"PASS":"FAILED"}] ${null!=(_a8=line())?_a8:""}`);set_text(text_1,message())});append($$anchor2,details)});pre_1=sibling(node,4);text_2=child(pre_1,!0);reset(pre_1);button_4=sibling(pre_1,4);button_5=sibling(button_4,2);bind_this(sibling(button_5,2),$$value=>set(prefTestResultEl,$$value),()=>get(prefTestResultEl));template_effect($0=>{button.disabled=get(moduleTesting);button_1.disabled=get(moduleTesting);button_2.disabled=get(moduleTesting);set_text(text_2,$0);button_4.disabled=get(testRunning)},[()=>(get(syncStatus),untrack(()=>get(syncStatus).join("\n")))]);event("click",button,()=>moduleMultiDeviceTest());event("click",button_1,()=>moduleSingleDeviceTest());event("click",button_2,()=>allTest());event("click",button_3,()=>clearResult2());event("click",button_4,()=>performTest());event("click",button_5,()=>clearPerfTestResult());append($$anchor,fragment);pop();$$cleanup()}async function countCompromisedChunks(db){try{Logger("Counting compromised chunks...",LOG_LEVEL_VERBOSE);const task1=db.find(SELECTOR_COMPROMISED_CHUNK_1),task2=db.find(SELECTOR_COMPROMISED_CHUNK_2),[result1,result2]=await Promise.all([task1,task2]);return result1.docs.length+result2.docs.length}catch(ex){Logger("Error counting compromised chunks!",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}function resetV3Buf(){_nonceV3[0]=0;const _wk=webcrypto2.getRandomValues(new Uint8Array(12));bufV3.set(_wk);bufV3.set(_nonceV3,8)}function incIV(){_nonceV3[0]++;bufV3.set(_nonceV3,8);_nonceV3[0]>1500&&resetV3Buf();return bufV3}async function generateKey(passphrase){const passphraseBin=(new TextEncoder).encode(passphrase),salt=(await webcrypto2.subtle.digest("SHA-256",new Uint8Array([...passphraseBin,...SALT]))).slice(0,16),baseKey=await webcrypto2.subtle.importKey("raw",passphraseBin,"PBKDF2",!1,["deriveBits","deriveKey"]),pbkdf2Params={name:"PBKDF2",hash:"SHA-256",salt,iterations:1e5};return await webcrypto2.subtle.deriveKey(pbkdf2Params,baseKey,{name:"AES-GCM",length:256},!1,["decrypt","encrypt"])}async function encryptV3(input,passphrase){if(previousPassphrase!==passphrase){resetV3Buf();const key3=await generateKey(passphrase);encryptionKey=key3;previousPassphrase=passphrase}const iv=incIV(),dataBuf=writeString(input),encryptedDataArrayBuffer=await webcrypto2.subtle.encrypt({name:"AES-GCM",iv},encryptionKey,dataBuf),encryptedData2=""+await arrayBufferToBase64Single(new Uint8Array(encryptedDataArrayBuffer));return`%~${uint8ArrayToHexString(iv)}${encryptedData2}`}async function decryptV3(encryptedResult,passphrase){if(previousDecryptionPassphrase!==passphrase){const key3=await generateKey(passphrase);decryptionKey=key3;previousDecryptionPassphrase=passphrase}const ivStr=encryptedResult.substring(2,26),encryptedData=encryptedResult.substring(26),iv=hexStringToUint8Array(ivStr),encryptedDataArrayBuffer=base64ToArrayBuffer(encryptedData),dataBuffer=await webcrypto2.subtle.decrypt({name:"AES-GCM",iv},decryptionKey,encryptedDataArrayBuffer);return readString(new Uint8Array(dataBuffer))}function createPBKDF2Salt(){return webcrypto3.getRandomValues(new Uint8Array(PBKDF2_SALT_LENGTH))}async function deriveKey(passphrase,pbkdf2Salt,hkdfSalt){const masterKey=await deriveMasterKey(passphrase,pbkdf2Salt);return await webcrypto3.subtle.deriveKey({name:"HKDF",salt:hkdfSalt,info:new Uint8Array,hash:"SHA-256"},masterKey,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function encryptData(key3,iv,data){return await webcrypto3.subtle.encrypt({name:"AES-GCM",iv,tagLength:gcmTagLength},key3,data)}async function _encrypt(input,passphrase,pbkdf2Salt){const hkdfSalt=webcrypto3.getRandomValues(new Uint8Array(HKDF_SALT_LENGTH)),key3=await deriveKey(passphrase,pbkdf2Salt,hkdfSalt),iv=webcrypto3.getRandomValues(new Uint8Array(IV_LENGTH)),encryptedDataArrayBuffer=await encryptData(key3,iv,input);return[iv,hkdfSalt,new Uint8Array(encryptedDataArrayBuffer)]}async function encryptBinary(input,passphrase,pbkdf2Salt){const[iv,hkdfSalt,encryptedData]=await _encrypt(input,passphrase,pbkdf2Salt),totalLength=iv.length+hkdfSalt.length+encryptedData.length,result=new Uint8Array(totalLength);result.set(iv,0);result.set(hkdfSalt,iv.length);result.set(encryptedData,iv.length+hkdfSalt.length);return result}async function encrypt2(input,passphrase,pbkdf2Salt){const inputBuffer=writeString(input),encrypted=await encryptBinary(inputBuffer,passphrase,pbkdf2Salt),inBase64=await arrayBufferToBase64Single(encrypted);return`${HKDF_ENCRYPTED_PREFIX}${inBase64}`}async function _decrypt(iv,pbkdf2Salt,hkdfSalt,encryptedData,passphrase){const key3=await deriveKey(passphrase,pbkdf2Salt,hkdfSalt),decryptedDataArrayBuffer=await webcrypto3.subtle.decrypt({name:"AES-GCM",iv,tagLength:gcmTagLength},key3,encryptedData);return new Uint8Array(decryptedDataArrayBuffer)}async function decryptBinary(binary,passphrase,pbkdf2Salt){if(binary.length<IV_LENGTH+HKDF_SALT_LENGTH)throw new Error("Invalid binary data length. Expected at least ivLength + saltLength bytes.");const iv=binary.slice(0,IV_LENGTH),hkdfSalt=binary.slice(IV_LENGTH,IV_LENGTH+HKDF_SALT_LENGTH),encryptedData=binary.slice(IV_LENGTH+HKDF_SALT_LENGTH);return await _decrypt(iv,pbkdf2Salt,hkdfSalt,encryptedData,passphrase)}async function decrypt2(input,passphrase,pbkdf2Salt){if(!input.startsWith(HKDF_ENCRYPTED_PREFIX))throw new Error(`Invalid input format. Expected input to start with '${HKDF_ENCRYPTED_PREFIX}'.`);const headerLength=HKDF_ENCRYPTED_PREFIX.length,encryptedData=base64ToArrayBuffer(input.slice(headerLength));return readString(await decryptBinary(new Uint8Array(encryptedData),passphrase,pbkdf2Salt))}async function testEncryptionFeature(){const testValue="Supercalifragilisticexpialidocious1234567890!@#$%^&*()_+[]{}|;':\",.<>?✔️✔️⚡𠮷𠮷",pbkdf2Salt=createPBKDF2Salt();try{const encrypted=await encrypt2(testValue,"test-passphrase",pbkdf2Salt);if(await decrypt2(encrypted,"test-passphrase",pbkdf2Salt)!==testValue)throw new Error("Decryption did not return the original value.");Logger("Encryption feature test passed.",LOG_LEVEL_VERBOSE);return!0}catch(error){Logger("WARNING! Your device would not support encryption.",LOG_LEVEL_VERBOSE);Logger(error,LOG_LEVEL_VERBOSE);return!1}}function getSessionPBKDFSalt(refresh=!1){(void 0===_sessionPBKDFSalt||refresh)&&(_sessionPBKDFSalt=createPBKDF2Salt());return _sessionPBKDFSalt}async function encryptWithEphemeralSaltBinary(input,passphrase,refresh=!1){const pbkdf2Salt=getSessionPBKDFSalt(refresh);return concatUInt8Array([pbkdf2Salt,...await _encrypt(input,passphrase,pbkdf2Salt)])}async function encryptWithEphemeralSalt(input,passphrase,refresh=!1){const encrypted=await encryptWithEphemeralSaltBinary(writeString(input),passphrase,refresh),inBase64=await arrayBufferToBase64Single(encrypted);return`${HKDF_SALTED_ENCRYPTED_PREFIX}${inBase64}`}async function decryptWithEphemeralSaltBinary(input,passphrase){if(input.length<IV_LENGTH+HKDF_SALT_LENGTH+PBKDF2_SALT_LENGTH)throw new Error("Invalid binary data length.");const r4=createTypedArrayReader(input),pbkdf2Salt=r4.read(PBKDF2_SALT_LENGTH),iv=r4.read(IV_LENGTH),hkdfSalt=r4.read(HKDF_SALT_LENGTH),encryptedData=r4.readAll();return await _decrypt(iv,pbkdf2Salt,hkdfSalt,encryptedData,passphrase)}async function decryptWithEphemeralSalt(input,passphrase){if(!input.startsWith(HKDF_SALTED_ENCRYPTED_PREFIX))throw new Error(`Invalid input format. Expected input to start with '${HKDF_SALTED_ENCRYPTED_PREFIX}'.`);const headerLength=HKDF_SALTED_ENCRYPTED_PREFIX.length,encryptedData=base64ToArrayBuffer(input.slice(headerLength));return readString(await decryptWithEphemeralSaltBinary(new Uint8Array(encryptedData),passphrase))}async function obfuscatePath(path2,passphrase,autoCalculateIterations){const dataBuf=writeString(path2),[key3,salt,iv]=await getKeyForObfuscatePath(passphrase,dataBuf,autoCalculateIterations),encryptedDataArrayBuffer=await webcrypto4.subtle.encrypt({name:"AES-GCM",iv},key3,dataBuf),encryptedData2=await arrayBufferToBase64Single(new Uint8Array(encryptedDataArrayBuffer));return`%${uint8ArrayToHexString(iv)}${uint8ArrayToHexString(salt)}${encryptedData2}`}function isPathProbablyObfuscated(path2){return path2.startsWith("%")&&path2.length>64}async function getKeyForObfuscatePath(passphrase,dataBuf,autoCalculateIterations){const passphraseLen=15-passphrase.length,iteration=autoCalculateIterations?1e3*(passphraseLen>0?passphraseLen:0)+121-passphraseLen:1e5,passphraseBin=(new TextEncoder).encode(passphrase),digest=await webcrypto4.subtle.digest({name:"SHA-256"},passphraseBin),buf2=new Uint8Array(await webcrypto4.subtle.digest({name:"SHA-256"},new Uint8Array([...dataBuf,...passphraseBin]))),salt=buf2.slice(0,16),iv=buf2.slice(16,32),keyMaterial=await webcrypto4.subtle.importKey("raw",digest,{name:"PBKDF2"},!1,["deriveKey"]);return[await webcrypto4.subtle.deriveKey({name:"PBKDF2",salt,iterations:iteration,hash:"SHA-256"},keyMaterial,{name:"AES-GCM",length:256},!1,["encrypt"]),salt,iv]}async function getKeyForEncrypt(passphrase,autoCalculateIterations){const buffKey=`${passphrase}-${autoCalculateIterations}`,f4=KeyBuffs.get(buffKey);if(f4){f4.count--;if(f4.count>0)return[f4.key,f4.salt];f4.count--}const passphraseLen=15-passphrase.length,iteration=autoCalculateIterations?1e3*(passphraseLen>0?passphraseLen:0)+121-passphraseLen:1e5,passphraseBin=(new TextEncoder).encode(passphrase),digest=await webcrypto5.subtle.digest({name:"SHA-256"},passphraseBin),keyMaterial=await webcrypto5.subtle.importKey("raw",digest,{name:"PBKDF2"},!1,["deriveKey"]),salt=webcrypto5.getRandomValues(new Uint8Array(16)),key3=await webcrypto5.subtle.deriveKey({name:"PBKDF2",salt,iterations:iteration,hash:"SHA-256"},keyMaterial,{name:"AES-GCM",length:256},!1,["encrypt"]);KeyBuffs.set(buffKey,{key:key3,salt,count:KEY_RECYCLE_COUNT});return[key3,salt]}async function getKeyForDecryption(passphrase,salt,autoCalculateIterations){if(--keyGCCount<0){keyGCCount=KEY_RECYCLE_COUNT;const threshold=(decKeyIdx-decKeyMin)/2;for(const[key4,buff]of decKeyBuffs){buff.count<threshold&&decKeyBuffs.delete(key4);decKeyMin=decKeyIdx}}decKeyIdx++;const bufKey=passphrase+uint8ArrayToHexString(salt)+autoCalculateIterations,f4=decKeyBuffs.get(bufKey);if(f4){f4.count=decKeyIdx;return[f4.key,f4.salt]}const passphraseLen=15-passphrase.length,iteration=autoCalculateIterations?1e3*(passphraseLen>0?passphraseLen:0)+121-passphraseLen:1e5,passphraseBin=(new TextEncoder).encode(passphrase),digest=await webcrypto5.subtle.digest({name:"SHA-256"},passphraseBin),keyMaterial=await webcrypto5.subtle.importKey("raw",digest,{name:"PBKDF2"},!1,["deriveKey"]),key3=await webcrypto5.subtle.deriveKey({name:"PBKDF2",salt,iterations:iteration,hash:"SHA-256"},keyMaterial,{name:"AES-GCM",length:256},!1,["decrypt"]);decKeyBuffs.set(bufKey,{key:key3,salt,count:0});return[key3,salt]}function getSemiStaticField(reset2){return null==semiStaticFieldBuffer||reset2?semiStaticFieldBuffer=webcrypto5.getRandomValues(new Uint8Array(12)):semiStaticFieldBuffer}function getNonce(){nonceBuffer[0]++;nonceBuffer[0]>1e4&&getSemiStaticField(!0);return nonceBuffer}async function encrypt3(input,passphrase,autoCalculateIterations){const[key3,salt]=await getKeyForEncrypt(passphrase,autoCalculateIterations),fixedPart=getSemiStaticField(),invocationPart=getNonce(),iv=new Uint8Array([...fixedPart,...new Uint8Array(invocationPart.buffer)]),dataBuf=writeString(input),encryptedDataArrayBuffer=await webcrypto5.subtle.encrypt({name:"AES-GCM",iv},key3,dataBuf),encryptedData2=""+await arrayBufferToBase64Single(new Uint8Array(encryptedDataArrayBuffer));return`%${uint8ArrayToHexString(iv)}${uint8ArrayToHexString(salt)}${encryptedData2}`}async function decryptV2(encryptedResult,passphrase,autoCalculateIterations){try{const ivStr=encryptedResult.substring(1,33),salt=encryptedResult.substring(33,65),encryptedData=encryptedResult.substring(65),[key3]=await getKeyForDecryption(passphrase,hexStringToUint8Array(salt),autoCalculateIterations),iv=hexStringToUint8Array(ivStr),encryptedDataArrayBuffer=decodeBinary(encryptedData),dataBuffer=await webcrypto5.subtle.decrypt({name:"AES-GCM",iv},key3,encryptedDataArrayBuffer);return readString(new Uint8Array(dataBuffer))}catch(ex){Logger("Couldn't decode! You should wrong the passphrases (V2)",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);throw ex}}async function decrypt3(encryptedResult,passphrase,autoCalculateIterations){try{if("%"==encryptedResult[0])return"~"===encryptedResult[1]?decryptV3(encryptedResult,passphrase):decryptV2(encryptedResult,passphrase,autoCalculateIterations);if(!encryptedResult.startsWith("[")||!encryptedResult.endsWith("]"))throw new Error("Encrypted data corrupted!");const w2=encryptedResult.substring(1,encryptedResult.length-1).split(",").map(e3=>'"'==e3[0]?e3.substring(1,e3.length-1):e3),[encryptedData,ivString,salt]=w2,[key3]=await getKeyForDecryption(passphrase,hexStringToUint8Array(salt),autoCalculateIterations),iv=hexStringToUint8Array(ivString),encryptedDataBin=atob(encryptedData),len=encryptedDataBin.length,encryptedDataArrayBuffer=new Uint8Array(len);for(let i2=len;i2>=0;--i2)encryptedDataArrayBuffer[i2]=encryptedDataBin.charCodeAt(i2);const plainStringBuffer=await webcrypto5.subtle.decrypt({name:"AES-GCM",iv},key3,encryptedDataArrayBuffer),plainStringified=readString(new Uint8Array(plainStringBuffer));return JSON.parse(plainStringified)}catch(ex){Logger("Couldn't decode! You should wrong the passphrases",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);throw ex}}async function testCryptV3(){const src="✨supercalifragilisticexpialidocious✨⛰",encoded=await encryptV3(src,"passwordTest");if(src!=await decrypt3(encoded,"passwordTest",!1)){Logger("WARNING! Your device would not support encryption V3.",LOG_LEVEL_VERBOSE);return!1}Logger("CRYPT LOGIC (V3) OK",LOG_LEVEL_VERBOSE);return!0}async function testCrypt(){const src="✨supercalifragilisticexpialidocious✨⛰",encoded=await encrypt3(src,"passwordTest",!1);if(src!=await decrypt3(encoded,"passwordTest",!1)){Logger("WARNING! Your device would not support encryption.",LOG_LEVEL_VERBOSE);return!1}{Logger("CRYPT LOGIC OK",LOG_LEVEL_VERBOSE);const w2=writeString(src),encodedBinary=await encryptBinary2(w2,"passwordTest",!1),decryptedBinary=await decryptBinary2(encodedBinary,"passwordTest",!1);if(w2.join("-")!==decryptedBinary.join("-")){Logger("WARNING! Your device would not support encryption (Binary).",LOG_LEVEL_VERBOSE);return!1}Logger("CRYPT LOGIC OK (Binary)",LOG_LEVEL_VERBOSE);return await testCryptV3()&&await testEncryptionFeature()}}async function encryptBinary2(input,passphrase,autoCalculateIterations){const[key3,salt]=await getKeyForEncrypt(passphrase,autoCalculateIterations),fixedPart=getSemiStaticField(),invocationPart=getNonce(),iv=new Uint8Array([...fixedPart,...new Uint8Array(invocationPart.buffer)]),dataBuf=input,encryptedDataArrayBuffer=new Uint8Array(await webcrypto5.subtle.encrypt({name:"AES-GCM",iv},key3,dataBuf)),ret=new Uint8Array(encryptedDataArrayBuffer.byteLength+iv.byteLength+salt.byteLength);ret.set(iv,0);ret.set(salt,iv.byteLength);ret.set(encryptedDataArrayBuffer,iv.byteLength+salt.byteLength);return ret}async function decryptBinary2(encryptedResult,passphrase,autoCalculateIterations){try{const iv=encryptedResult.slice(0,16),salt=encryptedResult.slice(16,32),encryptedData=encryptedResult.slice(32),[key3]=await getKeyForDecryption(passphrase,salt,autoCalculateIterations),dataBuffer=await webcrypto5.subtle.decrypt({name:"AES-GCM",iv},key3,encryptedData);return new Uint8Array(dataBuffer)}catch(ex){Logger("Couldn't decode! You should wrong the passphrases (V2 Bin)",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);throw ex}}function inlineWorker(scriptText){let blob=new Blob([scriptText],{type:"text/javascript"}),url=URL.createObjectURL(blob),worker=new Worker(url);URL.revokeObjectURL(url);return worker}function Worker2(){return inlineWorker('var fr=Object.defineProperty,pr=Object.defineProperties;var yr=Object.getOwnPropertyDescriptors;var It=Object.getOwnPropertySymbols;var hr=Object.prototype.hasOwnProperty,dr=Object.prototype.propertyIsEnumerable;var fe=(n,e)=>(e=Symbol[n])?e:Symbol.for("Symbol."+n),et=n=>{throw TypeError(n)};var Qe=(n,e,t)=>e in n?fr(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,W=(n,e)=>{for(var t in e||(e={}))hr.call(e,t)&&Qe(n,t,e[t]);if(It)for(var t of It(e))dr.call(e,t)&&Qe(n,t,e[t]);return n},le=(n,e)=>pr(n,yr(e));var I=(n,e,t)=>Qe(n,typeof e!="symbol"?e+"":e,t),tt=(n,e,t)=>e.has(n)||et("Cannot "+t);var p=(n,e,t)=>(tt(n,e,"read from private field"),t?t.call(n):e.get(n)),N=(n,e,t)=>e.has(n)?et("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,t),P=(n,e,t,r)=>(tt(n,e,"write to private field"),r?r.call(n,t):e.set(n,t),t),A=(n,e,t)=>(tt(n,e,"access private method"),t);var J=function(n,e){this[0]=n,this[1]=e},Ce=(n,e,t)=>{var r=(o,a,c,l)=>{try{var u=t[o](a),f=(a=u.value)instanceof J,y=u.done;Promise.resolve(f?a[0]:a).then(d=>f?r(o==="return"?o:"next",a[1]?{done:d.done,value:d.value}:d,c,l):c({value:d,done:y})).catch(d=>r("throw",d,c,l))}catch(d){l(d)}},s=o=>i[o]=a=>new Promise((c,l)=>r(o,a,c,l)),i={};return t=t.apply(n,e),i[fe("asyncIterator")]=()=>i,s("next"),s("throw"),s("return"),i},j=n=>{var e=n[fe("asyncIterator")],t=!1,r,s={};return e==null?(e=n[fe("iterator")](),r=i=>s[i]=o=>e[i](o)):(e=e.call(n),r=i=>s[i]=o=>{if(t){if(t=!1,i==="throw")throw o;return o}return t=!0,{done:!1,value:new J(new Promise(a=>{var c=e[i](o);c instanceof Object||et("Object expected"),a(c)}),1)}}),s[fe("iterator")]=()=>s,r("next"),"throw"in e?r("throw"):s.throw=i=>{throw i},"return"in e&&r("return"),s},nt=(n,e,t)=>(e=n[fe("asyncIterator")])?e.call(n):(n=n[fe("iterator")](),e={},t=(r,s)=>(s=n[r])&&(e[r]=i=>new Promise((o,a,c)=>(i=s.call(n,i),c=i.done,Promise.resolve(i.value).then(l=>o({value:l,done:c}),a)))),t("next"),t("return"),e);var gr={minLogLevel:32},mr=function(e,t=32,r){if(t<gr.minLogLevel)return;let i=new Date().toLocaleString(),o=typeof e=="string"?e:e instanceof Error?`${e.name}:${e.message}`:JSON.stringify(e,null,2),a=`${i}\t${t}\t${o}`;t&1?console.debug(a):t&4?console.warn(a):t&8?console.error(a):t&2?console.info(a):console.log(a),e instanceof Error&&console.dir(e.stack)},Er=mr;function F(n,e,t){Er(n,e,t)}var Ot=typeof Uint8Array!="undefined"&&typeof Uint8Array.prototype.toBase64=="function"&&typeof Uint8Array.fromBase64=="function";function Rt(n){if(n.length===0)return new ArrayBuffer(0);try{if(typeof n=="string")return Uint8Array.fromBase64(n).buffer;let e=n.map(i=>Uint8Array.fromBase64(i).buffer),t=e.reduce((i,o)=>i+o.byteLength,0),r=new Uint8Array(t),s=0;return e.forEach(i=>{r.set(new Uint8Array(i),s),s+=i.byteLength}),r.buffer}catch(e){return F("Base64 Decode error",16),F(e,16),new ArrayBuffer(0)}}function Lt(n){if(typeof n=="string")return De(n);let e=n.map(i=>De(i)),t=e.reduce((i,o)=>i+o.byteLength,0),r=new Uint8Array(t),s=0;return e.forEach(i=>{r.set(new Uint8Array(i),s),s+=i.byteLength}),r.buffer}var ee=Ot?Rt:Lt;function De(n){try{let e=globalThis.atob(n),t=e.length,r=new Uint8Array(t);for(let s=0;s<t;s++)r[s]=e.charCodeAt(s);return r.buffer}catch(e){return F("Base64 Decode error",16),F(e,16),new ArrayBuffer(0)}}var bo=3*5e7;function Sr(n){return new Promise((e,t)=>{let r=new Blob([n],{type:"application/octet-binary"}),s=new FileReader;s.onload=function(i){var c,l;let o=((l=(c=i.target)==null?void 0:c.result)==null?void 0:l.toString())||"";if(n.byteLength!=0&&(o==""||o=="data:"))return t(new TypeError("Could not parse the encoded string"));let a=o.substring(o.indexOf(",")+1);e(a)},s.readAsDataURL(r)})}async function Nt(n){let e=n instanceof Uint8Array?n:new Uint8Array(n);return e.byteLength<vt?btoa(String.fromCharCode.apply(null,[...e])):await Sr(e)}function Bt(n){let e=n instanceof Uint8Array?n:new Uint8Array(n);return Promise.resolve(e.toBase64())}var H=Ot?Bt:Nt;var vt=32768,br=new TextEncoder,xr=new TextDecoder;function R(n){if(n.length>128)return br.encode(n);let e=new Uint8Array(n.length*4),t=n.length,r=0,s=0,i=0;for(;i<t;)s=n.charCodeAt(i++),s<128?e[r++]=s:s<2048?(e[r++]=192|s>>>6,e[r++]=128|s&63):s<55296||s>57343?(e[r++]=224|s>>>12,e[r++]=128|s>>>6&63,e[r++]=128|s&63):(s=(s-55296<<10|n.charCodeAt(i++)-56320)+65536,e[r++]=240|s>>>18,e[r++]=128|s>>>12&63,e[r++]=128|s>>>6&63,e[r++]=128|s&63);return e.slice(0,r)}function V(n){let e=n.length;if(e>128)return xr.decode(n);let t=0,r=e,s="";for(;t<r;){let i=[],o=Math.min(t+vt,r);for(;t<o;){let a=n[t++];if(a<128)i.push(a);else if((a&224)===192)i.push((a&31)<<6|n[t++]&63);else if((a&240)===224)i.push((a&15)<<12|(n[t++]&63)<<6|n[t++]&63);else if((a&248)===240){let c=(a&7)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63;c<65536?i.push(c):(c-=65536,i.push((c>>>10)+55296,(c&1023)+56320))}}s+=String.fromCharCode(...i)}return s}function*Ft(n,e){for(let t=n;t<=e;t++)yield t}var Po=1024*1024*30,Ar={},Mt={};[...Ft(192,447)].forEach((n,e)=>{Ar[e]=n,Mt[n]=e});function rt(n){if(n.length==1)return Ie(n[0]);let e=n.map(i=>Ie(i)),t=e.reduce((i,o)=>i+o.byteLength,0),r=new Uint8Array(t),s=0;return e.forEach(i=>{r.set(new Uint8Array(i),s),s+=i.byteLength}),r.buffer}function Ie(n){let e=new Uint8Array(n.length),t=n.length;for(let r=0;r<t;r++){let s=n.charCodeAt(r);s>=38&&s<=126&&s!=58?e[r]=s:e[r]=Mt[s]}return e.buffer}var kt={},Ut={};for(let n=0;n<256;n++)kt[`00${n.toString(16)}`.slice(-2)]=n,Ut[n]=`00${n.toString(16)}`.slice(-2);var Vt=typeof Uint8Array!="undefined"&&typeof Uint8Array.prototype.toBase64=="function"&&typeof Uint8Array.fromBase64=="function",q=Vt?Kt:Ht;function Kt(n){return Uint8Array.fromHex(n)}function Ht(n){let e=n.length/2,t=new Uint8Array(e);for(let r=0;r<e;r++)t[r]=kt[n[r*2]+n[r*2+1]];return t}var k=Vt?Wt:Gt;function Gt(n){return[...n].map(e=>Ut[e]).join("")}function Wt(n){return n.toHex()}function Oe(n){if(n.length==0)return new Uint8Array().buffer;if(typeof n=="string"){if(n[0]==="%")return Ie(n.substring(1))}else if(n[0][0]==="%"){let[e,...t]=n;return rt([e.substring(1),...t])}return ee(n)}async function pe(n){try{return await H(n)}catch(e){let t=globalThis==null?void 0:globalThis.Buffer;if(typeof(t==null?void 0:t.from)=="function"){let r=n instanceof Uint8Array?n:new Uint8Array(n);return t.from(r.buffer,r.byteOffset,r.byteLength).toString("base64")}throw e}}var Re=class{constructor(e,t,r=!1){Object.defineProperty(this,"cache",{enumerable:!0,configurable:!0,writable:!0,value:new Map([])}),Object.defineProperty(this,"revCache",{enumerable:!0,configurable:!0,writable:!0,value:new Map([])}),Object.defineProperty(this,"maxCache",{enumerable:!0,configurable:!0,writable:!0,value:200}),Object.defineProperty(this,"maxCachedLength",{enumerable:!0,configurable:!0,writable:!0,value:5e7}),Object.defineProperty(this,"cachedLength",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"enableReversed",{enumerable:!0,configurable:!0,writable:!0,value:!0}),this.maxCache=e||200,this.maxCachedLength=(t||1)*1e6,this.enableReversed=!r,F(`Cache initialized ${this.maxCache} / ${this.maxCachedLength}`,16)}clear(){this.cache.clear(),this.revCache.clear()}has(e){return this.cache.has(e)}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t),this.enableReversed&&(this.revCache.delete(t),this.revCache.set(t,e))),t}revGet(e){let t=this.revCache.get(e);return t&&(this.cache.delete(t),this.revCache.delete(e),this.cache.set(t,e),this.revCache.set(e,t)),t}set(e,t){if(this.cache.set(e,t),this.enableReversed&&this.revCache.set(t,e),this.cachedLength+=`${t}`.length,this.cache.size>this.maxCache||this.cachedLength>this.maxCachedLength){for(let[r,s]of this.cache)if(this.cache.delete(r),this.enableReversed&&this.revCache.delete(s),this.cachedLength-=`${s}`.length,this.cache.size<=this.maxCache&&this.cachedLength<=this.maxCachedLength)break}}};var st=(n,e,t)=>{let r=n instanceof RegExp?jt(n,t):n,s=e instanceof RegExp?jt(e,t):e,i=r!==null&&s!=null&&Tr(r,s,t);return i&&{start:i[0],end:i[1],pre:t.slice(0,i[0]),body:t.slice(i[0]+r.length,i[1]),post:t.slice(i[1]+s.length)}},jt=(n,e)=>{let t=e.match(n);return t?t[0]:null},Tr=(n,e,t)=>{let r,s,i,o,a,c=t.indexOf(n),l=t.indexOf(e,c+1),u=c;if(c>=0&&l>0){if(n===e)return[c,l];for(r=[],i=t.length;u>=0&&!a;){if(u===c)r.push(u),c=t.indexOf(n,u+1);else if(r.length===1){let f=r.pop();f!==void 0&&(a=[f,l])}else s=r.pop(),s!==void 0&&s<i&&(i=s,o=l),l=t.indexOf(e,u+1);u=c<l&&c>=0?c:l}r.length&&o!==void 0&&(a=[i,o])}return a};var $t="\\0SLASH"+Math.random()+"\\0",Yt="\\0OPEN"+Math.random()+"\\0",ot="\\0CLOSE"+Math.random()+"\\0",zt="\\0COMMA"+Math.random()+"\\0",Xt="\\0PERIOD"+Math.random()+"\\0",Cr=new RegExp($t,"g"),Dr=new RegExp(Yt,"g"),Ir=new RegExp(ot,"g"),Or=new RegExp(zt,"g"),Rr=new RegExp(Xt,"g"),Lr=/\\\\\\\\/g,Nr=/\\\\{/g,Br=/\\\\}/g,vr=/\\\\,/g,Fr=/\\\\\\./g,Mr=1e5;function it(n){return isNaN(n)?n.charCodeAt(0):parseInt(n,10)}function kr(n){return n.replace(Lr,$t).replace(Nr,Yt).replace(Br,ot).replace(vr,zt).replace(Fr,Xt)}function Ur(n){return n.replace(Cr,"\\\\").replace(Dr,"{").replace(Ir,"}").replace(Or,",").replace(Rr,".")}function Jt(n){if(!n)return[""];let e=[],t=st("{","}",n);if(!t)return n.split(",");let{pre:r,body:s,post:i}=t,o=r.split(",");o[o.length-1]+="{"+s+"}";let a=Jt(i);return i.length&&(o[o.length-1]+=a.shift(),o.push.apply(o,a)),e.push.apply(e,o),e}function qt(n,e={}){if(!n)return[];let{max:t=Mr}=e;return n.slice(0,2)==="{}"&&(n="\\\\{\\\\}"+n.slice(2)),be(kr(n),t,!0).map(Ur)}function Vr(n){return"{"+n+"}"}function Kr(n){return/^-?0\\d/.test(n)}function Hr(n,e){return n<=e}function Gr(n,e){return n>=e}function be(n,e,t){let r=[],s=st("{","}",n);if(!s)return[n];let i=s.pre,o=s.post.length?be(s.post,e,!1):[""];if(/\\$$/.test(s.pre))for(let a=0;a<o.length&&a<e;a++){let c=i+"{"+s.body+"}"+o[a];r.push(c)}else{let a=/^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(s.body),c=/^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(s.body),l=a||c,u=s.body.indexOf(",")>=0;if(!l&&!u)return s.post.match(/,(?!,).*\\}/)?(n=s.pre+"{"+s.body+ot+s.post,be(n,e,!0)):[n];let f;if(l)f=s.body.split(/\\.\\./);else if(f=Jt(s.body),f.length===1&&f[0]!==void 0&&(f=be(f[0],e,!1).map(Vr),f.length===1))return o.map(d=>s.pre+f[0]+d);let y;if(l&&f[0]!==void 0&&f[1]!==void 0){let d=it(f[0]),m=it(f[1]),h=Math.max(f[0].length,f[1].length),_=f.length===3&&f[2]!==void 0?Math.max(Math.abs(it(f[2])),1):1,x=Hr;m<d&&(_*=-1,x=Gr);let b=f.some(Kr);y=[];for(let g=d;x(g,m);g+=_){let C;if(c)C=String.fromCharCode(g),C==="\\\\"&&(C="");else if(C=String(g),b){let D=h-C.length;if(D>0){let Y=new Array(D+1).join("0");g<0?C="-"+Y+C.slice(1):C=Y+C}}y.push(C)}}else{y=[];for(let d=0;d<f.length;d++)y.push.apply(y,be(f[d],e,!1))}for(let d=0;d<y.length;d++)for(let m=0;m<o.length&&r.length<e;m++){let h=i+y[d]+o[m];(!t||l||h)&&r.push(h)}}return r}var xe=n=>{if(typeof n!="string")throw new TypeError("invalid pattern");if(n.length>65536)throw new TypeError("pattern is too long")};var Wr={"[:alnum:]":["\\\\p{L}\\\\p{Nl}\\\\p{Nd}",!0],"[:alpha:]":["\\\\p{L}\\\\p{Nl}",!0],"[:ascii:]":["\\\\x00-\\\\x7f",!1],"[:blank:]":["\\\\p{Zs}\\\\t",!0],"[:cntrl:]":["\\\\p{Cc}",!0],"[:digit:]":["\\\\p{Nd}",!0],"[:graph:]":["\\\\p{Z}\\\\p{C}",!0,!0],"[:lower:]":["\\\\p{Ll}",!0],"[:print:]":["\\\\p{C}",!0],"[:punct:]":["\\\\p{P}",!0],"[:space:]":["\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f",!0],"[:upper:]":["\\\\p{Lu}",!0],"[:word:]":["\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},Ae=n=>n.replace(/[[\\]\\\\-]/g,"\\\\$&"),jr=n=>n.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,"\\\\$&"),Zt=n=>n.join(""),Qt=(n,e)=>{let t=e;if(n.charAt(t)!=="[")throw new Error("not in a brace expression");let r=[],s=[],i=t+1,o=!1,a=!1,c=!1,l=!1,u=t,f="";e:for(;i<n.length;){let h=n.charAt(i);if((h==="!"||h==="^")&&i===t+1){l=!0,i++;continue}if(h==="]"&&o&&!c){u=i+1;break}if(o=!0,h==="\\\\"&&!c){c=!0,i++;continue}if(h==="["&&!c){for(let[_,[x,E,b]]of Object.entries(Wr))if(n.startsWith(_,i)){if(f)return["$.",!1,n.length-t,!0];i+=_.length,b?s.push(x):r.push(x),a=a||E;continue e}}if(c=!1,f){h>f?r.push(Ae(f)+"-"+Ae(h)):h===f&&r.push(Ae(h)),f="",i++;continue}if(n.startsWith("-]",i+1)){r.push(Ae(h+"-")),i+=2;continue}if(n.startsWith("-",i+1)){f=h,i+=2;continue}r.push(Ae(h)),i++}if(u<i)return["",!1,0,!1];if(!r.length&&!s.length)return["$.",!1,n.length-t,!0];if(s.length===0&&r.length===1&&/^\\\\?.$/.test(r[0])&&!l){let h=r[0].length===2?r[0].slice(-1):r[0];return[jr(h),!1,u-t,!1]}let y="["+(l?"^":"")+Zt(r)+"]",d="["+(l?"":"^")+Zt(s)+"]";return[r.length&&s.length?"("+y+"|"+d+")":r.length?y:d,a,u-t,!0]};var te=(n,{windowsPathsNoEscape:e=!1,magicalBraces:t=!0}={})=>t?e?n.replace(/\\[([^/\\\\])\\]/g,"$1"):n.replace(/((?!\\\\).|^)\\[([^/\\\\])\\]/g,"$1$2").replace(/\\\\([^/])/g,"$1"):e?n.replace(/\\[([^/\\\\{}])\\]/g,"$1"):n.replace(/((?!\\\\).|^)\\[([^/\\\\{}])\\]/g,"$1$2").replace(/\\\\([^/{}])/g,"$1");var U,$r=new Set(["!","?","+","*","@"]),at=n=>$r.has(n),en=n=>at(n.type),Yr=new Map([["!",["@"]],["?",["?","@"]],["@",["@"]],["*",["*","+","?","@"]],["+",["+","@"]]]),zr=new Map([["!",["?"]],["@",["?"]],["+",["?","*"]]]),Xr=new Map([["!",["?","@"]],["?",["?","@"]],["@",["?","@"]],["*",["*","+","?","@"]],["+",["+","@","?","*"]]]),tn=new Map([["!",new Map([["!","@"]])],["?",new Map([["*","*"],["+","*"]])],["@",new Map([["!","!"],["?","?"],["@","@"],["*","*"],["+","+"]])],["+",new Map([["?","*"],["*","*"]])]]),Jr="(?!(?:^|/)\\\\.\\\\.?(?:$|/))",Le="(?!\\\\.)",qr=new Set(["[","."]),Zr=new Set(["..","."]),Qr=new Set("().*{}+?[]^$\\\\!"),es=n=>n.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,"\\\\$&"),ft="[^/]",nn=ft+"*?",rn=ft+"+?",ts=0,O,L,Z,S,T,ne,ue,re,z,X,ye,w,sn,ie,Ne,on,ct,Be,an,lt,cn,ln,un,ve,ut,fn,se=class{constructor(e,t,r={}){N(this,w);I(this,"type");N(this,O);N(this,L);N(this,Z,!1);N(this,S,[]);N(this,T);N(this,ne);N(this,ue);N(this,re,!1);N(this,z);N(this,X);N(this,ye,!1);I(this,"id",++ts);this.type=e,e&&P(this,L,!0),P(this,T,t),P(this,O,p(this,T)?p(p(this,T),O):this),P(this,z,p(this,O)===this?r:p(p(this,O),z)),P(this,ue,p(this,O)===this?[]:p(p(this,O),ue)),e==="!"&&!p(p(this,O),re)&&p(this,ue).push(this),P(this,ne,p(this,T)?p(p(this,T),S).length:0)}get depth(){var e,t;return((t=(e=p(this,T))==null?void 0:e.depth)!=null?t:-1)+1}[Symbol.for("nodejs.util.inspect.custom")](){var e;return{"@@type":"AST",id:this.id,type:this.type,root:p(this,O).id,parent:(e=p(this,T))==null?void 0:e.id,depth:this.depth,partsLength:p(this,S).length,parts:p(this,S)}}get hasMagic(){if(p(this,L)!==void 0)return p(this,L);for(let e of p(this,S))if(typeof e!="string"&&(e.type||e.hasMagic))return P(this,L,!0);return p(this,L)}toString(){return p(this,X)!==void 0?p(this,X):this.type?P(this,X,this.type+"("+p(this,S).map(e=>String(e)).join("|")+")"):P(this,X,p(this,S).map(e=>String(e)).join(""))}push(...e){for(let t of e)if(t!==""){if(typeof t!="string"&&!(t instanceof U&&p(t,T)===this))throw new Error("invalid part: "+t);p(this,S).push(t)}}toJSON(){var t;let e=this.type===null?p(this,S).slice().map(r=>typeof r=="string"?r:r.toJSON()):[this.type,...p(this,S).map(r=>r.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===p(this,O)||p(p(this,O),re)&&((t=p(this,T))==null?void 0:t.type)==="!")&&e.push({}),e}isStart(){var t;if(p(this,O)===this)return!0;if(!((t=p(this,T))!=null&&t.isStart()))return!1;if(p(this,ne)===0)return!0;let e=p(this,T);for(let r=0;r<p(this,ne);r++){let s=p(e,S)[r];if(!(s instanceof U&&s.type==="!"))return!1}return!0}isEnd(){var t,r,s;if(p(this,O)===this||((t=p(this,T))==null?void 0:t.type)==="!")return!0;if(!((r=p(this,T))!=null&&r.isEnd()))return!1;if(!this.type)return(s=p(this,T))==null?void 0:s.isEnd();let e=p(this,T)?p(p(this,T),S).length:0;return p(this,ne)===e-1}copyIn(e){typeof e=="string"?this.push(e):this.push(e.clone(this))}clone(e){let t=new U(this.type,e);for(let r of p(this,S))t.copyIn(r);return t}static fromGlob(e,t={}){var s;let r=new U(null,void 0,t);return A(s=U,ie,Ne).call(s,e,r,0,t,0),r}toMMPattern(){if(this!==p(this,O))return p(this,O).toMMPattern();let e=this.toString(),[t,r,s,i]=this.toRegExpSource();if(!(s||p(this,L)||p(this,z).nocase&&!p(this,z).nocaseMagicOnly&&e.toUpperCase()!==e.toLowerCase()))return r;let a=(p(this,z).nocase?"i":"")+(i?"u":"");return Object.assign(new RegExp(`^${t}$`,a),{_src:t,_glob:e})}get options(){return p(this,z)}toRegExpSource(e){var c;let t=e!=null?e:!!p(this,z).dot;if(p(this,O)===this&&(A(this,w,ve).call(this),A(this,w,sn).call(this)),!en(this)){let l=this.isStart()&&this.isEnd()&&!p(this,S).some(m=>typeof m!="string"),u=p(this,S).map(m=>{var b;let[h,_,x,E]=typeof m=="string"?A(b=U,ie,fn).call(b,m,p(this,L),l):m.toRegExpSource(e);return P(this,L,p(this,L)||x),P(this,Z,p(this,Z)||E),h}).join(""),f="";if(this.isStart()&&typeof p(this,S)[0]=="string"&&!(p(this,S).length===1&&Zr.has(p(this,S)[0]))){let h=qr,_=t&&h.has(u.charAt(0))||u.startsWith("\\\\.")&&h.has(u.charAt(2))||u.startsWith("\\\\.\\\\.")&&h.has(u.charAt(4)),x=!t&&!e&&h.has(u.charAt(0));f=_?Jr:x?Le:""}let y="";return this.isEnd()&&p(p(this,O),re)&&((c=p(this,T))==null?void 0:c.type)==="!"&&(y="(?:$|\\\\/)"),[f+u+y,te(u),P(this,L,!!p(this,L)),p(this,Z)]}let r=this.type==="*"||this.type==="+",s=this.type==="!"?"(?:(?!(?:":"(?:",i=A(this,w,ut).call(this,t);if(this.isStart()&&this.isEnd()&&!i&&this.type!=="!"){let l=this.toString(),u=this;return P(u,S,[l]),u.type=null,P(u,L,void 0),[l,te(this.toString()),!1,!1]}let o=!r||e||t||!Le?"":A(this,w,ut).call(this,!0);o===i&&(o=""),o&&(i=`(?:${i})(?:${o})*?`);let a="";if(this.type==="!"&&p(this,ye))a=(this.isStart()&&!t?Le:"")+rn;else{let l=this.type==="!"?"))"+(this.isStart()&&!t&&!e?Le:"")+nn+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&o?")":this.type==="*"&&o?")?":`)${this.type}`;a=s+i+l}return[a,te(i),P(this,L,!!p(this,L)),p(this,Z)]}};O=new WeakMap,L=new WeakMap,Z=new WeakMap,S=new WeakMap,T=new WeakMap,ne=new WeakMap,ue=new WeakMap,re=new WeakMap,z=new WeakMap,X=new WeakMap,ye=new WeakMap,w=new WeakSet,sn=function(){if(this!==p(this,O))throw new Error("should only call on root");if(p(this,re))return this;this.toString(),P(this,re,!0);let e;for(;e=p(this,ue).pop();){if(e.type!=="!")continue;let t=e,r=p(t,T);for(;r;){for(let s=p(t,ne)+1;!r.type&&s<p(r,S).length;s++)for(let i of p(e,S)){if(typeof i=="string")throw new Error("string part in extglob AST??");i.copyIn(p(r,S)[s])}t=r,r=p(t,T)}}return this},ie=new WeakSet,Ne=function(e,t,r,s,i){var h,_,x,E,b;let o=(h=s.maxExtglobRecursion)!=null?h:2,a=!1,c=!1,l=-1,u=!1;if(t.type===null){let g=r,C="";for(;g<e.length;){let D=e.charAt(g++);if(a||D==="\\\\"){a=!a,C+=D;continue}if(c){g===l+1?(D==="^"||D==="!")&&(u=!0):D==="]"&&!(g===l+2&&u)&&(c=!1),C+=D;continue}else if(D==="["){c=!0,l=g,u=!1,C+=D;continue}if(!s.noext&&at(D)&&e.charAt(g)==="("&&i<=o){t.push(C),C="";let Se=new U(D,t);g=A(_=U,ie,Ne).call(_,e,Se,g,s,i+1),t.push(Se);continue}C+=D}return t.push(C),g}let f=r+1,y=new U(null,t),d=[],m="";for(;f<e.length;){let g=e.charAt(f++);if(a||g==="\\\\"){a=!a,m+=g;continue}if(c){f===l+1?(g==="^"||g==="!")&&(u=!0):g==="]"&&!(f===l+2&&u)&&(c=!1),m+=g;continue}else if(g==="["){c=!0,l=f,u=!1,m+=g;continue}if(!s.noext&&at(g)&&e.charAt(f)==="("&&(i<=o||t&&A(x=t,w,Be).call(x,g))){let D=t&&A(E=t,w,Be).call(E,g)?0:1;y.push(m),m="";let Y=new U(g,y);y.push(Y),f=A(b=U,ie,Ne).call(b,e,Y,f,s,i+D);continue}if(g==="|"){y.push(m),m="",d.push(y),y=new U(null,t);continue}if(g===")")return m===""&&p(t,S).length===0&&P(t,ye,!0),y.push(m),m="",t.push(...d,y),f;m+=g}return t.type=null,P(t,L,void 0),P(t,S,[e.substring(r-1)]),f},on=function(e){return A(this,w,ct).call(this,e,zr)},ct=function(e,t=Yr){if(!e||typeof e!="object"||e.type!==null||p(e,S).length!==1||this.type===null)return!1;let r=p(e,S)[0];return!r||typeof r!="object"||r.type===null?!1:A(this,w,Be).call(this,r.type,t)},Be=function(e,t=Xr){var r;return!!((r=t.get(this.type))!=null&&r.includes(e))},an=function(e,t){let r=p(e,S)[0],s=new U(null,r,this.options);p(s,S).push(""),r.push(s),A(this,w,lt).call(this,e,t)},lt=function(e,t){let r=p(e,S)[0];p(this,S).splice(t,1,...p(r,S));for(let s of p(r,S))typeof s=="object"&&P(s,T,this);P(this,X,void 0)},cn=function(e){let t=tn.get(this.type);return!!(t!=null&&t.has(e))},ln=function(e){if(!e||typeof e!="object"||e.type!==null||p(e,S).length!==1||this.type===null||p(this,S).length!==1)return!1;let t=p(e,S)[0];return!t||typeof t!="object"||t.type===null?!1:A(this,w,cn).call(this,t.type)},un=function(e){let t=tn.get(this.type),r=p(e,S)[0],s=t==null?void 0:t.get(r.type);if(!s)return!1;P(this,S,p(r,S));for(let i of p(this,S))typeof i=="object"&&P(i,T,this);this.type=s,P(this,X,void 0),P(this,ye,!1)},ve=function(){var e,t;if(en(this)){let r=0,s=!1;do{s=!0;for(let i=0;i<p(this,S).length;i++){let o=p(this,S)[i];typeof o=="object"&&(A(t=o,w,ve).call(t),A(this,w,ct).call(this,o)?(s=!1,A(this,w,lt).call(this,o,i)):A(this,w,on).call(this,o)?(s=!1,A(this,w,an).call(this,o,i)):A(this,w,ln).call(this,o)&&(s=!1,A(this,w,un).call(this,o)))}}while(!s&&++r<10)}else for(let r of p(this,S))typeof r=="object"&&A(e=r,w,ve).call(e);P(this,X,void 0)},ut=function(e){return p(this,S).map(t=>{if(typeof t=="string")throw new Error("string type in extglob ast??");let[r,s,i,o]=t.toRegExpSource(e);return P(this,Z,p(this,Z)||o),r}).filter(t=>!(this.isStart()&&this.isEnd())||!!t).join("|")},fn=function(e,t,r=!1){let s=!1,i="",o=!1,a=!1;for(let c=0;c<e.length;c++){let l=e.charAt(c);if(s){s=!1,i+=(Qr.has(l)?"\\\\":"")+l;continue}if(l==="*"){if(a)continue;a=!0,i+=r&&/^[*]+$/.test(e)?rn:nn,t=!0;continue}else a=!1;if(l==="\\\\"){c===e.length-1?i+="\\\\\\\\":s=!0;continue}if(l==="["){let[u,f,y,d]=Qt(e,c);if(y){i+=u,o=o||f,c+=y-1,t=t||d;continue}}if(l==="?"){i+=ft,t=!0;continue}i+=es(l)}return[i,te(e),!!t,o]},N(se,ie);U=se;var pt=(n,{windowsPathsNoEscape:e=!1,magicalBraces:t=!1}={})=>t?e?n.replace(/[?*()[\\]{}]/g,"[$&]"):n.replace(/[?*()[\\]\\\\{}]/g,"\\\\$&"):e?n.replace(/[?*()[\\]]/g,"[$&]"):n.replace(/[?*()[\\]\\\\]/g,"\\\\$&");var v=(n,e,t={})=>(xe(e),!t.nocomment&&e.charAt(0)==="#"?!1:new de(e,t).match(n)),ns=/^\\*+([^+@!?*[(]*)$/,rs=n=>e=>!e.startsWith(".")&&e.endsWith(n),ss=n=>e=>e.endsWith(n),is=n=>(n=n.toLowerCase(),e=>!e.startsWith(".")&&e.toLowerCase().endsWith(n)),os=n=>(n=n.toLowerCase(),e=>e.toLowerCase().endsWith(n)),as=/^\\*+\\.\\*+$/,cs=n=>!n.startsWith(".")&&n.includes("."),ls=n=>n!=="."&&n!==".."&&n.includes("."),us=/^\\.\\*+$/,fs=n=>n!=="."&&n!==".."&&n.startsWith("."),ps=/^\\*+$/,ys=n=>n.length!==0&&!n.startsWith("."),hs=n=>n.length!==0&&n!=="."&&n!=="..",ds=/^\\?+([^+@!?*[(]*)?$/,gs=([n,e=""])=>{let t=hn([n]);return e?(e=e.toLowerCase(),r=>t(r)&&r.toLowerCase().endsWith(e)):t},ms=([n,e=""])=>{let t=dn([n]);return e?(e=e.toLowerCase(),r=>t(r)&&r.toLowerCase().endsWith(e)):t},Es=([n,e=""])=>{let t=dn([n]);return e?r=>t(r)&&r.endsWith(e):t},Ss=([n,e=""])=>{let t=hn([n]);return e?r=>t(r)&&r.endsWith(e):t},hn=([n])=>{let e=n.length;return t=>t.length===e&&!t.startsWith(".")},dn=([n])=>{let e=n.length;return t=>t.length===e&&t!=="."&&t!==".."},gn=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",pn={win32:{sep:"\\\\"},posix:{sep:"/"}},bs=gn==="win32"?pn.win32.sep:pn.posix.sep;v.sep=bs;var B=Symbol("globstar **");v.GLOBSTAR=B;var xs="[^/]",As=xs+"*?",ws="(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?",Ps="(?:(?!(?:\\\\/|^)\\\\.).)*?",_s=(n,e={})=>t=>v(t,n,e);v.filter=_s;var G=(n,e={})=>Object.assign({},n,e),Ts=n=>{if(!n||typeof n!="object"||!Object.keys(n).length)return v;let e=v;return Object.assign((r,s,i={})=>e(r,s,G(n,i)),{Minimatch:class extends e.Minimatch{constructor(s,i={}){super(s,G(n,i))}static defaults(s){return e.defaults(G(n,s)).Minimatch}},AST:class extends e.AST{constructor(s,i,o={}){super(s,i,G(n,o))}static fromGlob(s,i={}){return e.AST.fromGlob(s,G(n,i))}},unescape:(r,s={})=>e.unescape(r,G(n,s)),escape:(r,s={})=>e.escape(r,G(n,s)),filter:(r,s={})=>e.filter(r,G(n,s)),defaults:r=>e.defaults(G(n,r)),makeRe:(r,s={})=>e.makeRe(r,G(n,s)),braceExpand:(r,s={})=>e.braceExpand(r,G(n,s)),match:(r,s,i={})=>e.match(r,s,G(n,i)),sep:e.sep,GLOBSTAR:B})};v.defaults=Ts;var mn=(n,e={})=>(xe(n),e.nobrace||!/\\{(?:(?!\\{).)*\\}/.test(n)?[n]:qt(n,{max:e.braceExpandMax}));v.braceExpand=mn;var Cs=(n,e={})=>new de(n,e).makeRe();v.makeRe=Cs;var Ds=(n,e,t={})=>{let r=new de(e,t);return n=n.filter(s=>r.match(s)),r.options.nonull&&!n.length&&n.push(e),n};v.match=Ds;var yn=/[?*]|[+@!]\\(.*?\\)|\\[|\\]/,Is=n=>n.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,"\\\\$&"),K,En,yt,he,de=class{constructor(e,t={}){N(this,K);I(this,"options");I(this,"set");I(this,"pattern");I(this,"windowsPathsNoEscape");I(this,"nonegate");I(this,"negate");I(this,"comment");I(this,"empty");I(this,"preserveMultipleSlashes");I(this,"partial");I(this,"globSet");I(this,"globParts");I(this,"nocase");I(this,"isWindows");I(this,"platform");I(this,"windowsNoMagicRoot");I(this,"maxGlobstarRecursion");I(this,"regexp");var s;xe(e),t=t||{},this.options=t,this.maxGlobstarRecursion=(s=t.maxGlobstarRecursion)!=null?s:200,this.pattern=e,this.platform=t.platform||gn,this.isWindows=this.platform==="win32";let r="allowWindowsEscape";this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t[r]===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\\\/g,"/")),this.preserveMultipleSlashes=!!t.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!t.nonegate,this.comment=!1,this.empty=!1,this.partial=!!t.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=t.windowsNoMagicRoot!==void 0?t.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let e of this.set)for(let t of e)if(typeof t!="string")return!0;return!1}debug(...e){}make(){let e=this.pattern,t=this.options;if(!t.nocomment&&e.charAt(0)==="#"){this.comment=!0;return}if(!e){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],t.debug&&(this.debug=(...i)=>console.error(...i)),this.debug(this.pattern,this.globSet);let r=this.globSet.map(i=>this.slashSplit(i));this.globParts=this.preprocess(r),this.debug(this.pattern,this.globParts);let s=this.globParts.map((i,o,a)=>{if(this.isWindows&&this.windowsNoMagicRoot){let c=i[0]===""&&i[1]===""&&(i[2]==="?"||!yn.test(i[2]))&&!yn.test(i[3]),l=/^[a-z]:/i.test(i[0]);if(c)return[...i.slice(0,4),...i.slice(4).map(u=>this.parse(u))];if(l)return[i[0],...i.slice(1).map(u=>this.parse(u))]}return i.map(c=>this.parse(c))});if(this.debug(this.pattern,s),this.set=s.filter(i=>i.indexOf(!1)===-1),this.isWindows)for(let i=0;i<this.set.length;i++){let o=this.set[i];o[0]===""&&o[1]===""&&this.globParts[i][2]==="?"&&typeof o[3]=="string"&&/^[a-z]:$/i.test(o[3])&&(o[2]="?")}this.debug(this.pattern,this.set)}preprocess(e){if(this.options.noglobstar)for(let r of e)for(let s=0;s<r.length;s++)r[s]==="**"&&(r[s]="*");let{optimizationLevel:t=1}=this.options;return t>=2?(e=this.firstPhasePreProcess(e),e=this.secondPhasePreProcess(e)):t>=1?e=this.levelOneOptimize(e):e=this.adjascentGlobstarOptimize(e),e}adjascentGlobstarOptimize(e){return e.map(t=>{let r=-1;for(;(r=t.indexOf("**",r+1))!==-1;){let s=r;for(;t[s+1]==="**";)s++;s!==r&&t.splice(r,s-r)}return t})}levelOneOptimize(e){return e.map(t=>(t=t.reduce((r,s)=>{let i=r[r.length-1];return s==="**"&&i==="**"?r:s===".."&&i&&i!==".."&&i!=="."&&i!=="**"?(r.pop(),r):(r.push(s),r)},[]),t.length===0?[""]:t))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let t=!1;do{if(t=!1,!this.preserveMultipleSlashes){for(let s=1;s<e.length-1;s++){let i=e[s];s===1&&i===""&&e[0]===""||(i==="."||i==="")&&(t=!0,e.splice(s,1),s--)}e[0]==="."&&e.length===2&&(e[1]==="."||e[1]==="")&&(t=!0,e.pop())}let r=0;for(;(r=e.indexOf("..",r+1))!==-1;){let s=e[r-1];s&&s!=="."&&s!==".."&&s!=="**"&&!(this.isWindows&&/^[a-z]:$/i.test(s))&&(t=!0,e.splice(r-1,2),r-=2)}}while(t);return e.length===0?[""]:e}firstPhasePreProcess(e){let t=!1;do{t=!1;for(let r of e){let s=-1;for(;(s=r.indexOf("**",s+1))!==-1;){let o=s;for(;r[o+1]==="**";)o++;o>s&&r.splice(s+1,o-s);let a=r[s+1],c=r[s+2],l=r[s+3];if(a!==".."||!c||c==="."||c===".."||!l||l==="."||l==="..")continue;t=!0,r.splice(s,1);let u=r.slice(0);u[s]="**",e.push(u),s--}if(!this.preserveMultipleSlashes){for(let o=1;o<r.length-1;o++){let a=r[o];o===1&&a===""&&r[0]===""||(a==="."||a==="")&&(t=!0,r.splice(o,1),o--)}r[0]==="."&&r.length===2&&(r[1]==="."||r[1]==="")&&(t=!0,r.pop())}let i=0;for(;(i=r.indexOf("..",i+1))!==-1;){let o=r[i-1];if(o&&o!=="."&&o!==".."&&o!=="**"){t=!0;let c=i===1&&r[i+1]==="**"?["."]:[];r.splice(i-1,2,...c),r.length===0&&r.push(""),i-=2}}}}while(t);return e}secondPhasePreProcess(e){for(let t=0;t<e.length-1;t++)for(let r=t+1;r<e.length;r++){let s=this.partsMatch(e[t],e[r],!this.preserveMultipleSlashes);if(s){e[t]=[],e[r]=s;break}}return e.filter(t=>t.length)}partsMatch(e,t,r=!1){let s=0,i=0,o=[],a="";for(;s<e.length&&i<t.length;)if(e[s]===t[i])o.push(a==="b"?t[i]:e[s]),s++,i++;else if(r&&e[s]==="**"&&t[i]===e[s+1])o.push(e[s]),s++;else if(r&&t[i]==="**"&&e[s]===t[i+1])o.push(t[i]),i++;else if(e[s]==="*"&&t[i]&&(this.options.dot||!t[i].startsWith("."))&&t[i]!=="**"){if(a==="b")return!1;a="a",o.push(e[s]),s++,i++}else if(t[i]==="*"&&e[s]&&(this.options.dot||!e[s].startsWith("."))&&e[s]!=="**"){if(a==="a")return!1;a="b",o.push(t[i]),s++,i++}else return!1;return e.length===t.length&&o}parseNegate(){if(this.nonegate)return;let e=this.pattern,t=!1,r=0;for(let s=0;s<e.length&&e.charAt(s)==="!";s++)t=!t,r++;r&&(this.pattern=e.slice(r)),this.negate=t}matchOne(e,t,r=!1){let s=0,i=0;if(this.isWindows){let a=typeof e[0]=="string"&&/^[a-z]:$/i.test(e[0]),c=!a&&e[0]===""&&e[1]===""&&e[2]==="?"&&/^[a-z]:$/i.test(e[3]),l=typeof t[0]=="string"&&/^[a-z]:$/i.test(t[0]),u=!l&&t[0]===""&&t[1]===""&&t[2]==="?"&&typeof t[3]=="string"&&/^[a-z]:$/i.test(t[3]),f=c?3:a?0:void 0,y=u?3:l?0:void 0;if(typeof f=="number"&&typeof y=="number"){let[d,m]=[e[f],t[y]];d.toLowerCase()===m.toLowerCase()&&(t[y]=d,i=y,s=f)}}let{optimizationLevel:o=1}=this.options;return o>=2&&(e=this.levelTwoFileOptimize(e)),t.includes(B)?A(this,K,En).call(this,e,t,r,s,i):A(this,K,he).call(this,e,t,r,s,i)}braceExpand(){return mn(this.pattern,this.options)}parse(e){xe(e);let t=this.options;if(e==="**")return B;if(e==="")return"";let r,s=null;(r=e.match(ps))?s=t.dot?hs:ys:(r=e.match(ns))?s=(t.nocase?t.dot?os:is:t.dot?ss:rs)(r[1]):(r=e.match(ds))?s=(t.nocase?t.dot?ms:gs:t.dot?Es:Ss)(r):(r=e.match(as))?s=t.dot?ls:cs:(r=e.match(us))&&(s=fs);let i=se.fromGlob(e,this.options).toMMPattern();return s&&typeof i=="object"&&Reflect.defineProperty(i,"test",{value:s}),i}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let e=this.set;if(!e.length)return this.regexp=!1,this.regexp;let t=this.options,r=t.noglobstar?As:t.dot?ws:Ps,s=new Set(t.nocase?["i"]:[]),i=e.map(c=>{let l=c.map(f=>{if(f instanceof RegExp)for(let y of f.flags.split(""))s.add(y);return typeof f=="string"?Is(f):f===B?B:f._src});l.forEach((f,y)=>{let d=l[y+1],m=l[y-1];f!==B||m===B||(m===void 0?d!==void 0&&d!==B?l[y+1]="(?:\\\\/|"+r+"\\\\/)?"+d:l[y]=r:d===void 0?l[y-1]=m+"(?:\\\\/|\\\\/"+r+")?":d!==B&&(l[y-1]=m+"(?:\\\\/|\\\\/"+r+"\\\\/)"+d,l[y+1]=B))});let u=l.filter(f=>f!==B);if(this.partial&&u.length>=1){let f=[];for(let y=1;y<=u.length;y++)f.push(u.slice(0,y).join("/"));return"(?:"+f.join("|")+")"}return u.join("/")}).join("|"),[o,a]=e.length>1?["(?:",")"]:["",""];i="^"+o+i+a+"$",this.partial&&(i="^(?:\\\\/|"+o+i.slice(1,-1)+a+")$"),this.negate&&(i="^(?!"+i+").+$");try{this.regexp=new RegExp(i,[...s].join(""))}catch(c){this.regexp=!1}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split("/"):this.isWindows&&/^\\/\\/[^/]+/.test(e)?["",...e.split(/\\/+/)]:e.split(/\\/+/)}match(e,t=this.partial){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return e==="";if(e==="/"&&t)return!0;let r=this.options;this.isWindows&&(e=e.split("\\\\").join("/"));let s=this.slashSplit(e);this.debug(this.pattern,"split",s);let i=this.set;this.debug(this.pattern,"set",i);let o=s[s.length-1];if(!o)for(let a=s.length-2;!o&&a>=0;a--)o=s[a];for(let a of i){let c=s;if(r.matchBase&&a.length===1&&(c=[o]),this.matchOne(c,a,t))return r.flipNegate?!0:!this.negate}return r.flipNegate?!1:this.negate}static defaults(e){return v.defaults(e).Minimatch}};K=new WeakSet,En=function(e,t,r,s,i){let o=t.indexOf(B,i),a=t.lastIndexOf(B),[c,l,u]=r?[t.slice(i,o),t.slice(o+1),[]]:[t.slice(i,o),t.slice(o+1,a),t.slice(a+1)];if(c.length){let E=e.slice(s,s+c.length);if(!A(this,K,he).call(this,E,c,r,0,0))return!1;s+=c.length,i+=c.length}let f=0;if(u.length){if(u.length+s>e.length)return!1;let E=e.length-u.length;if(A(this,K,he).call(this,e,u,r,E,0))f=u.length;else{if(e[e.length-1]!==""||s+u.length===e.length||(E--,!A(this,K,he).call(this,e,u,r,E,0)))return!1;f=u.length+1}}if(!l.length){let E=!!f;for(let b=s;b<e.length-f;b++){let g=String(e[b]);if(E=!0,g==="."||g===".."||!this.options.dot&&g.startsWith("."))return!1}return r||E}let y=[[[],0]],d=y[0],m=0,h=[0];for(let E of l)E===B?(h.push(m),d=[[],0],y.push(d)):(d[0].push(E),m++);let _=y.length-1,x=e.length-f;for(let E of y)E[1]=x-(h[_--]+E[0].length);return!!A(this,K,yt).call(this,e,y,s,0,r,0,!!f)},yt=function(e,t,r,s,i,o,a){let c=t[s];if(!c){for(let f=r;f<e.length;f++){a=!0;let y=e[f];if(y==="."||y===".."||!this.options.dot&&y.startsWith("."))return!1}return a}let[l,u]=c;for(;r<=u;){if(A(this,K,he).call(this,e.slice(0,r+l.length),l,i,r,0)&&o<this.maxGlobstarRecursion){let d=A(this,K,yt).call(this,e,t,r+l.length,s+1,i,o+1,a);if(d!==!1)return d}let y=e[r];if(y==="."||y===".."||!this.options.dot&&y.startsWith("."))return!1;r++}return i||null},he=function(e,t,r,s,i){let o,a,c,l;for(o=s,a=i,l=e.length,c=t.length;o<l&&a<c;o++,a++){this.debug("matchOne loop");let u=t[a],f=e[o];if(this.debug(t,u,f),u===!1||u===B)return!1;let y;if(typeof u=="string"?(y=f===u,this.debug("string match",u,f,y)):(y=u.test(f),this.debug("pattern match",u,f,y)),!y)return!1}if(o===l&&a===c)return!0;if(o===l)return r;if(a===c)return o===l-1&&e[o]==="";throw new Error("wtf?")};v.AST=se;v.Minimatch=de;v.escape=pt;v.unescape=te;var ge;async function Sn(){return ge||(globalThis.crypto?(ge=globalThis.crypto,ge):(ge=(await import("crypto")).webcrypto,ge))}var bn=Symbol("timed out"),Os=Symbol("NotFound");var oe={NOTE_LEGACY:"notes",NOTE_BINARY:"newnote",NOTE_PLAIN:"plain",INTERNAL_FILE:"internalfile",CHUNK:"leaf",CHUNK_PACK:"chunkpack",VERSION_INFO:"versioninfo",SYNC_INFO:"syncinfo",SYNC_PARAMETERS:"sync-parameters",MILESTONE_INFO:"milestoneinfo",NODE_INFO:"nodeinfo"},Rs=[oe.NOTE_LEGACY,oe.NOTE_BINARY,oe.NOTE_PLAIN],Ls=[oe.CHUNK,oe.CHUNK_PACK];var Ns=Symbol("cancelled"),Bs=Symbol("auto_merged"),vs=Symbol("not_conflicted"),Fs=Symbol("missing_or_error"),Ms=Symbol("leave_to_subsequent_proc"),ks=Symbol("infinity"),Us=Symbol("base"),Vs=Symbol("target"),Ks=Symbol("even");var Fe={REMOTE_COUCHDB:"",REMOTE_MINIO:"MINIO",REMOTE_P2P:"ONLY_P2P"},ht=Fe.REMOTE_COUCHDB,Hs=Fe.REMOTE_MINIO,Gs=Fe.REMOTE_P2P;var ae={V1:"",V2:"v2",ForceV1:"forceV1"};var me={V1:"v1",V2:"v2",V2Segmenter:"v2-segmenter",RabinKarp:"v3-rabin-karp"};var Me={syncMaxSizeInMB:50,chunkSplitterVersion:"v3-rabin-karp",doNotUseFixedRevisionForChunks:!1,usePluginSyncV2:!0,handleFilenameCaseSensitive:!1,E2EEAlgorithm:ae.V2},Ws=le(W({},Me),{customChunkSize:0,sendChunksBulkMaxSize:1,concurrencyOfReadChunksOnline:100,minimumIntervalOfReadChunksOnline:333}),js=le(W({},Me),{customChunkSize:50,sendChunksBulkMaxSize:1,concurrencyOfReadChunksOnline:30,minimumIntervalOfReadChunksOnline:25}),$s=le(W({},Me),{customChunkSize:10,concurrencyOfReadChunksOnline:30,minimumIntervalOfReadChunksOnline:25});var An={P2P_Enabled:!1,P2P_AutoAccepting:0,P2P_AppID:"self-hosted-livesync",P2P_roomID:"",P2P_passphrase:"",P2P_relays:"wss://exp-relay.vrtmrz.net/",P2P_AutoBroadcast:!1,P2P_AutoStart:!1,P2P_AutoSyncPeers:"",P2P_AutoWatchPeers:"",P2P_SyncOnReplication:"",P2P_RebuildFrom:"",P2P_AutoAcceptingPeers:"",P2P_AutoDenyingPeers:"",P2P_IsHeadless:!1,P2P_DevicePeerName:"",P2P_turnServers:"",P2P_turnUsername:"",P2P_turnCredential:""},ke=le(W({remoteType:ht,useCustomRequestHandler:!1,couchDB_URI:"",couchDB_USER:"",couchDB_PASSWORD:"",couchDB_DBNAME:"",liveSync:!1,syncOnSave:!1,syncOnStart:!1,savingDelay:200,lessInformationInLog:!1,gcDelay:300,versionUpFlash:"",minimumChunkSize:20,longLineThreshold:250,showVerboseLog:!1,suspendFileWatching:!1,trashInsteadDelete:!0,periodicReplication:!1,periodicReplicationInterval:60,syncOnFileOpen:!1,encrypt:!1,passphrase:"",usePathObfuscation:!1,doNotDeleteFolder:!1,resolveConflictsByNewerFile:!1,batchSave:!1,batchSaveMinimumDelay:5,batchSaveMaximumDelay:60,deviceAndVaultName:"",usePluginSettings:!1,showOwnPlugins:!1,showStatusOnEditor:!0,showStatusOnStatusbar:!0,showOnlyIconsOnEditor:!1,hideFileWarningNotice:!1,networkWarningStyle:"",usePluginSync:!1,autoSweepPlugins:!1,autoSweepPluginsPeriodic:!1,notifyPluginOrSettingUpdated:!1,checkIntegrityOnSave:!1,batch_size:25,batches_limit:25,useHistory:!1,disableRequestURI:!1,skipOlderFilesOnSync:!0,checkConflictOnlyOnOpen:!1,showMergeDialogOnlyOnActive:!1,syncInternalFiles:!1,syncInternalFilesBeforeReplication:!1,syncInternalFilesIgnorePatterns:"\\\\/node_modules\\\\/, \\\\/\\\\.git\\\\/, \\\\/obsidian-livesync\\\\/",syncInternalFilesTargetPatterns:"",syncInternalFilesInterval:60,additionalSuffixOfDatabaseName:"",ignoreVersionCheck:!1,lastReadUpdates:0,deleteMetadataOfDeletedFiles:!1,syncIgnoreRegEx:"",syncOnlyRegEx:"",customChunkSize:0,readChunksOnline:!0,watchInternalFileChanges:!0,automaticallyDeleteMetadataOfDeletedFiles:0,disableMarkdownAutoMerge:!1,writeDocumentsIfConflicted:!1,useDynamicIterationCount:!1,syncAfterMerge:!1,configPassphraseStore:"",encryptedPassphrase:"",encryptedCouchDBConnection:"",permitEmptyPassphrase:!1,remoteConfigurations:{},activeConfigurationId:"",useIndexedDBAdapter:!1,useTimeouts:!1,writeLogToTheFile:!1,doNotPaceReplication:!1,hashCacheMaxCount:300,hashCacheMaxAmount:50,concurrencyOfReadChunksOnline:40,minimumIntervalOfReadChunksOnline:50,hashAlg:"xxhash64",suspendParseReplicationResult:!1,doNotSuspendOnFetching:!1,useIgnoreFiles:!1,ignoreFiles:".gitignore",syncOnEditorSave:!1,pluginSyncExtendedSetting:{},syncMaxSizeInMB:50,settingSyncFile:"",writeCredentialsForSettingSync:!1,notifyAllSettingSyncFile:!1,isConfigured:void 0,settingVersion:10,enableCompression:!1,accessKey:"",bucket:"",endpoint:"",region:"auto",secretKey:"",useEden:!1,maxChunksInEden:10,maxTotalLengthInEden:1024,maxAgeInEden:10,disableCheckingConfigMismatch:!1,displayLanguage:"",enableChunkSplitterV2:!1,disableWorkerForGeneratingChunks:!1,processSmallFilesInUIThread:!1,notifyThresholdOfRemoteStorageSize:-1,usePluginSyncV2:!1,usePluginEtc:!1,handleFilenameCaseSensitive:void 0,doNotUseFixedRevisionForChunks:!0,showLongerLogInsideEditor:!1,sendChunksBulk:!1,sendChunksBulkMaxSize:1,useSegmenter:!1,useAdvancedMode:!1,usePowerUserMode:!1,useEdgeCaseMode:!1,enableDebugTools:!1,suppressNotifyHiddenFilesChange:!1,syncMinimumInterval:2e3},An),{doctorProcessedVersion:"",bucketCustomHeaders:"",couchDB_CustomHeaders:"",useJWT:!1,jwtAlgorithm:"",jwtKey:"",jwtKid:"",jwtSub:"",jwtExpDuration:5,useRequestAPI:!1,bucketPrefix:"",chunkSplitterVersion:me.RabinKarp,E2EEAlgorithm:ae.V2,processSizeMismatchedFiles:!1,forcePathStyle:!0,syncInternalFileOverwritePatterns:"",useOnlyLocalChunk:!1,maxMTimeForReflectEvents:0});var wn={UNSET:void 0,LEGACY:1,ADVANCED_E2EE:2},Pn="_local/obsidian_livesync_sync_parameters";var zs={_id:Pn,type:oe.SYNC_PARAMETERS,protocolVersion:wn.ADVANCED_E2EE,pbkdf2salt:""};var _n={minimumChunkSize:20,longLineThreshold:250,encrypt:!1,usePathObfuscation:!1,enableCompression:!1,useEden:!1,customChunkSize:0,useDynamicIterationCount:!1,hashAlg:"xxhash64",enableChunkSplitterV2:!1,maxChunksInEden:10,maxTotalLengthInEden:1024,maxAgeInEden:10,usePluginSyncV2:!1,handleFilenameCaseSensitive:!1,doNotUseFixedRevisionForChunks:!0,useSegmenter:!1,E2EEAlgorithm:ae.V2,chunkSplitterVersion:me.RabinKarp};var Tn={useIgnoreFiles:!1,useCustomRequestHandler:!1,batch_size:25,batches_limit:25,useTimeouts:!1,readChunksOnline:!0,hashCacheMaxCount:300,hashCacheMaxAmount:50,concurrencyOfReadChunksOnline:40,minimumIntervalOfReadChunksOnline:50,ignoreFiles:".gitignore",syncMaxSizeInMB:50,enableChunkSplitterV2:!1,usePluginSyncV2:!0,handleFilenameCaseSensitive:!1,doNotUseFixedRevisionForChunks:!1,E2EEAlgorithm:ae.V2,chunkSplitterVersion:me.RabinKarp},Xs={usePluginSyncV2:!1,E2EEAlgorithm:ke.E2EEAlgorithm,chunkSplitterVersion:ke.chunkSplitterVersion},Js=W(W({},Tn),_n);var Ue={SUSPEND_ALL:"redflag.md",REBUILD_ALL:"redflag2.md",FETCH_ALL:"redflag3.md"},dt={REBUILD_ALL:"flag_rebuild.md",FETCH_ALL:"flag_fetch.md"},Cn=Ue.SUSPEND_ALL,Dn=Ue.REBUILD_ALL,In=dt.REBUILD_ALL,On=Ue.FETCH_ALL,Rn=dt.FETCH_ALL;var Ln={STARTED:"STARTED",NOT_CONNECTED:"NOT_CONNECTED",PAUSED:"PAUSED",CONNECTED:"CONNECTED",COMPLETED:"COMPLETED",CLOSED:"CLOSED",ERRORED:"ERRORED",JOURNAL_SEND:"JOURNAL_SEND",JOURNAL_RECEIVE:"JOURNAL_RECEIVE"},$a={sent:0,arrived:0,maxPullSeq:0,maxPushSeq:0,lastSyncPullSeq:0,lastSyncPushSeq:0,syncStatus:Ln.CLOSED};var pl=Bn(async n=>{let e=R(n),t=await Sn(),r=await t.subtle.digest("SHA-256",e),s=n.length;for(let i=0;i<s;i++)r=await t.subtle.digest("SHA-256",e);return k(new Uint8Array(r))});var hl=Symbol("UNRESOLVED");function ni(){let n,e;return{promise:new Promise((r,s)=>{n=r,e=s}),resolve:n,reject:e}}function ri(){let n=Promise.withResolvers(),{promise:e,resolve:t,reject:r}=n;return{promise:e,resolve:t,reject:r}}var si="withResolvers"in Promise?ri:ni,we=si;var vn=()=>{};function ce(n){if(typeof n=="function")return ce(n());n.then(vn).catch(vn)}function Ve(){return new Promise(n=>queueMicrotask(n))}var Pe=Symbol("timed out");function Ke(n,e=Pe){let t,r=we();return t=setTimeout(()=>{t=void 0,r.resolve(e)},n),{promise:r.promise,cancel(){t&&(clearTimeout(t),t=void 0)}}}function gt(n){let e=0,t=n,r=[];return{get waiting(){return r.length},async tryAcquire(i=1,o){if(e<t)return e+=i,()=>{this.release(i)};let a=Ke(o,Pe),c=this.acquire(i),l=await Promise.race([a.promise,c]);return l===Pe?(ce(()=>c.then(u=>u())),!1):l},async acquire(i=1){if(e<t)return e+=i,()=>this.release();let o=we();return r.push(o),await o.promise,()=>{this.release(i)}},release(i=1){if(r.length>0){let o=r.shift();o&&ce(async()=>await Ve().then(()=>o.resolve()))}else e>0&&(e-=i)}}}var ii={s:{1:"V",2:"W",3:"X",4:"Y",5:"Z"},o:{1:"v",2:"w",3:"x",4:"y",5:"z"}},Al=Object.fromEntries(Object.entries(ii).flatMap(([n,e])=>Object.entries(e).map(([t,r])=>[r,{prefix:n,len:parseInt(t)}]))),oi={n:{1:"a",2:"b",3:"c",4:"d",5:"e"},N:{1:"A",2:"B",3:"C",4:"D",5:"E"}},wl=Object.fromEntries(Object.entries(oi).flatMap(([n,e])=>Object.entries(e).map(([t,r])=>[r,{prefix:n,len:parseInt(t)}])));var Cl=Symbol("a"),Dl=Symbol("b");var He=class{constructor(){Object.defineProperty(this,"_clip",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}isAwaiting(e,t){return this._clip.has(`${String(e)}:${t}`)}issueAndProceed(e,t="",r){return this.isAwaiting(e,t)||ce(async()=>{try{let s=await r.callback();this.submit(e,t,s)}catch(s){r.submitAsSuccess?this.submit(e,t,r.transformError?r.transformError(s):s):r.dropSlipWithRisks?this._clip.delete(e):this.reject(e,t,s)}}),this.awaitNext(e,t)}async awaitNext(e,t="",{timeout:r,onNotAwaited:s}={timeout:void 0,onNotAwaited:void 0}){let i=this._clip.get(`${String(e)}:${t}`);if(i||(i=we(),i.promise=i.promise.then(o=>o).finally(()=>{this._clip.delete(`${String(e)}:${t}`)}),this._clip.set(`${String(e)}:${t}`,i),s&&ce(async()=>(await Ve(),s()))),r){let o=Ke(r);return Promise.race([o.promise,i.promise.then(a=>a).finally(()=>o.cancel())])}return await i.promise}submit(e,t,r){let s=this._clip.get(`${String(e)}:${t}`);s&&s.resolve(r)}submitToAll(e,t,r){for(let[s,i]of this._clip.entries())`${String(s)}`.startsWith(`${String(e)}:${t}`)&&i.resolve(r)}reject(e,t="",r){let s=this._clip.get(`${String(e)}:${t}`);s&&s.reject(r)}},ai=new He;var Fn,lu=typeof((Fn=globalThis==null?void 0:globalThis.indexedDB)==null?void 0:Fn.cmp)!="undefined";function Bn(n){let e=new Re(100,1e5,!0);return t=>{if(e.has(t))return e.get(t);let s=n(t);return e.set(t,s),s}}var uu=gt(50);var mt="",fu=`${mt}__DELETED`,pu=`${mt}__ARRAY`,yu=`${mt}__SWAP`;function Mn(n,e){try{return n()}catch(t){return e(t)}}function Ge(n){return n.type==="text/plain"}function*yi(n,e){let t="";e:do{let r=n.shift();if(typeof r=="undefined"){yield t;break e}if(r.startsWith("```")||r.startsWith(" ```")||r.startsWith(" ```")||r.startsWith(" ```")){yield t,t=r+(n.length!=0?`\n`:"");t:do{let a=n.shift();if(typeof a=="undefined")break t;t+=a+(n.length!=0?`\n`:"")}while(n.length>0&&!(n[0].startsWith("```")||n[0].startsWith(" ```")||n[0].startsWith(" ```")||n[0].startsWith(" ```")));let s=t.endsWith("="),i=t.length>2048,o=n.shift();if(typeof o!="undefined"&&(t+=o,t+=n.length!=0?`\n`:""),!s&&!i){let a=/(.*?[;,:<])/g,c=t.split(a).filter(l=>l!="");for(let l of c)yield l}else yield t;t=""}else t+=r+(n.length!=0?`\n`:""),(t.length>=e||n.length==0||n[0]=="#"||t[0]=="#")&&(yield t,t="")}while(n.length>0)}var Un=10,Vn="Segmenter"in Intl?Mn(()=>new Intl.Segmenter(navigator.language,{granularity:"sentence"}),n=>{F(`Failed to create Intl.Segmenter: ${n.message}`,16)}):void 0;function*_e(n,e){let t=n;do{let r=e,s=t.substring(0,r);t=t.substring(r),yield s}while(t!="")}function*kn(n,e,t){let r=Vn.segment(n),s="",i="";for(let o of r){let a=o.segment;s==a||i.length<t?(i+=a,s=a):(s=a,i.length>0&&(yield*j(_e(i,e))),i=a)}i.length>0&&(yield*j(_e(i,e)))}function*hi(n){for(let e of n){let t=-1,r=-1;do{if(r=e.indexOf(`\n`,t),r==-1){yield e.substring(t);break}for(;e[r]==`\n`;)r++;yield e.substring(t,r),t=r}while(r!=-1)}}function di(n,e,t){let s=hi(typeof n=="string"?[n]:n),i=0,o=!1,a=!1;return function*(){let c=[];for(let l of s)l.startsWith("````")?i==0?(i=4,a=!0):i==4&&(i=0,o=!0):l.startsWith("```")&&(i==0?(i=3,a=!0):i==3&&(i=0,o=!0)),a&&(c.length>0&&(yield*j(kn(c.join(""),e,t)),c.length=0),a=!1),c.push(l),o&&(c.length>0&&(yield*j(_e(c.join(""),e)),c.length=0),o=!1);c.length>0&&(i==0?yield*j(kn(c.join(""),e,t)):yield*j(_e(c.join(""),e)))}}function gi(n,e,t){return function*(){yield*j(_e(n,e))}}function mi(n,e,t,r,s){return!s||!Vn?Ei(n,e,t,r):t?di(n,e,r):gi(n,e,r)}function Ei(n,e,t,r){let s=typeof n=="string"?[n]:n;return function*(){for(let o of s)if(t){let a=o.split(`\n`),c=yi(a,r);for(let l of c){let u=l;do{let f=e;u.charCodeAt(f-1)!=u.codePointAt(f-1)&&f++,yield u.substring(0,f),u=u.substring(f)}while(u!="")}}else{let a=o;do{let c=e,l=a.substring(0,c);a=a.substring(c),yield l}while(a!="")}}}function*Si(n,e,t=25,r){let s="",i=!1,o=e.length;for(let a of n){let c=a.length;if(r&&c>r){yield s+a,i=!1,s="";continue}let l=-1,u=0;e:do{if(l=a.indexOf(e,u),l==-1)break e;s+=a.slice(u,l)+e,s.length>t?(yield s,s="",i=!1):i=!0,u=l+o}while(l<c);(u!=l||u==-1&&l==-1)&&(s+=a.slice(u),i=!0)}i&&(yield s)}function*Kn(n,e){let t=n.length;if(t>e){let r=0;do{let s=r+e;if(s>t){yield n.substring(r);break}for(;n.charCodeAt(s-1)!=n.codePointAt(s-1);)s++;yield n.substring(r,s),r=s}while(r<t)}else yield n}function*bi(n,e){for(let t of n)yield*j(Kn(t,e))}function*xi(n){for(let e of n)yield e}var Ai=100;async function Hn(n,e,t,r,s,i){if(n.size==0)return function*(){};if(Ge(n)){let d=await n.text();if(!t){let b=Kn(d,e);return function*(){yield*j(b)}}let m=d.length,h=r;for(;m/h>Ai;)h+=r;let _=xi([d]),x=Si(_,`\n`,h),E=bi(x,e);return function*(){yield*j(E)}}let o=!1,a=0;s&&s.endsWith(".pdf")?a=47:s&&s.endsWith(".json")&&(o=!0,a=44);let u=Math.max(o?100:1e5,Math.min(1e8,n.size)),f=1,y=u;for(;y>10;)y/=12.5,f++;return r=Math.floor(10**(f-1)),function(){return Ce(this,null,function*(){let m=n.size,h=0,_=new Uint8Array(yield new J(n.arrayBuffer()));do{let x=h+r,E=h+e,b,g=_.indexOf(a,x);g==-1&&(g=_.indexOf(Un,x)),g==-1?b=E:b=g<E?g:E,yield yield new J(pe(_.slice(h,b))),h=b}while(h<m)})}}async function Gn(n,e,t,r,s,i){if(Ge(n))return mi(await n.text(),e,t,r,i!=null?i:!1);let o=0,a=!1;s&&s.endsWith(".pdf")?o=47:s&&s.endsWith(".json")&&(a=!0,o=44);let u=Math.max(a?100:1e5,Math.min(1e8,n.size)),f=1,y=u;for(;y>10;)y/=12.5,f++;return r=Math.floor(10**(f-1)),function(){return Ce(this,null,function*(){let m=n.size,h=0;do{let _=e,x=new Uint8Array(yield new J(n.slice(h,h+e).arrayBuffer())),E=x.indexOf(o,r);_=E==-1?e:Math.min(e,E),E==-1&&(E=x.indexOf(Un,r));let b=x.slice(0,_);h+=b.length,yield yield new J(pe(b))}while(h<m)})}}async function Wn(n,e,t,r,s,i){let o=t||Ge(n),a=o?128:1024*4,c=o?20:12,l=Math.max(a,Math.floor(n.size/c)),u=Math.min(e,l*5),f=Math.min(Math.max(Math.floor(l/4),r),u),y=48,d=l,m=1,h=31,_=1;for(let Y=0;Y<y-1;Y++)_=Math.imul(_,h);let x=new Uint8Array(await n.arrayBuffer()),E=0,b=0,g=0,C=Ge(n),D=x.length;return function(){return Ce(this,null,function*(){for(;E<D;){let Se=x[E];if(E>=g+y){let Te=x[E-y],ur=Math.imul(Te,_);b=b-ur|0,b=Math.imul(b,h),b=b+Se|0}else b=Math.imul(b,h),b=b+Se|0;let Dt=E-g+1,Ze=!1;if(Dt>=f&&(b>>>0)%d===m&&(Ze=!0),Dt>=u&&(Ze=!0),Ze){let Te=!0;C&&E+1<D&&(x[E+1]&192)===128&&(Te=!1),Te&&(C?yield Promise.resolve(V(x.subarray(g,E+1))):yield yield new J(pe(x.subarray(g,E+1))),g=E+1)}E++}g<D&&(C?yield Promise.resolve(V(x.subarray(g,D))):yield yield new J(pe(x.subarray(g,D))))})}}function We(n,e,t){self.postMessage({key:n,seq:e,result:t})}function wi(n){let e=n,t=0;return function(r){r===null?(t===0&&We(e,t++,""),We(e,t++,null)):We(e,t++,r)}}async function jn(n){let e=n.key,t=n.dataSrc,r=n.pieceSize,s=n.plainSplit,i=n.minimumChunkSize,o=n.filename,a=n.useSegmenter,l=await(n.splitVersion==3?Wn:n.splitVersion==2?Hn:Gn)(t,r,s,i,o,a),u=wi(e);try{for(var f=nt(l()),y,d,m;y=!(d=await f.next()).done;y=!1){let h=d.value;u(h)}}catch(d){m=[d]}finally{try{y&&(d=f.return)&&await d.call(f)}finally{if(m)throw m[0]}}u(null)}var je=globalThis.crypto,Pi="fancySyncForYou!",_i=new TextEncoder().encode(Pi);var Ru=new Uint32Array(1),Lu=new Uint8Array(12);async function zn(n){let e=new TextEncoder().encode(n),r=(await je.subtle.digest("SHA-256",new Uint8Array([...e,..._i]))).slice(0,16),s=await je.subtle.importKey("raw",e,"PBKDF2",!1,["deriveBits","deriveKey"]),i={name:"PBKDF2",hash:"SHA-256",salt:r,iterations:1e5};return await je.subtle.deriveKey(i,s,{name:"AES-GCM",length:256},!1,["decrypt","encrypt"])}var $n="",Yn;async function St(n,e){$n!==e&&(Yn=await zn(e),$n=e);let t=n.substring(2,26),r=n.substring(26),s=q(t),i=ee(r),o=await je.subtle.decrypt({name:"AES-GCM",iv:s},Yn,i);return V(new Uint8Array(o))}var Ti=Symbol("undefined");function $e(n,e,t){if(n<=0)throw new Error("Buffer length must be greater than 0");let r=new Map,s=i=>i.length>0&&typeof i[0]=="string"?i[0]:JSON.stringify(i,(o,a)=>a===void 0?Ti:a);return function(...i){let o=t?t(i):s(i);if(r.has(o)){let c=r.get(o);return r.delete(o),r.set(o,c),c}let a=e(...i);if(r.set(o,a),a.catch(()=>{r.get(o)===a&&r.delete(o)}),r.size>n){let c=r.keys().next().value;c&&r.delete(c)}return a}}var Q=globalThis.crypto,Ee=12,Ci=31e4,Ye=32;var Xn=128,ze="%=";var Di=$e(10,async(n,e)=>{let t=R(n),r=await Q.subtle.importKey("raw",t,{name:"PBKDF2",length:256},!1,["deriveKey"]),s=await Q.subtle.deriveKey({name:"PBKDF2",salt:e,iterations:Ci,hash:"SHA-256"},r,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),i=await Q.subtle.exportKey("raw",s);return await Q.subtle.importKey("raw",i,{name:"HKDF"},!1,["deriveKey"])},([n,e])=>`${n}-${k(e)}`);async function Jn(n,e,t){let r=await Di(n,e);return await Q.subtle.deriveKey({name:"HKDF",salt:t,info:new Uint8Array,hash:"SHA-256"},r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function Ii(n,e,t){return await Q.subtle.encrypt({name:"AES-GCM",iv:e,tagLength:Xn},n,t)}async function Oi(n,e,t){let r=Q.getRandomValues(new Uint8Array(Ye)),s=await Jn(e,t,r),i=Q.getRandomValues(new Uint8Array(Ee)),o=await Ii(s,i,n),a=new Uint8Array(o);return[i,r,a]}async function Ri(n,e,t){let[r,s,i]=await Oi(n,e,t),o=r.length+s.length+i.length,a=new Uint8Array(o);return a.set(r,0),a.set(s,r.length),a.set(i,r.length+s.length),a}async function qn(n,e,t){let r=R(n),s=await Ri(r,e,t),i=await H(s);return`${ze}${i}`}async function Li(n,e,t,r,s){let i=await Jn(s,e,t),o=await Q.subtle.decrypt({name:"AES-GCM",iv:n,tagLength:Xn},i,r);return new Uint8Array(o)}async function Ni(n,e,t){if(n.length<Ee+Ye)throw new Error("Invalid binary data length. Expected at least ivLength + saltLength bytes.");let r=n.slice(0,Ee),s=n.slice(Ee,Ee+Ye),i=n.slice(Ee+Ye);return await Li(r,t,s,i,e)}async function Zn(n,e,t){if(!n.startsWith(ze))throw new Error(`Invalid input format. Expected input to start with \'${ze}\'.`);let r=ze.length,s=ee(n.slice(r)),i=await Ni(new Uint8Array(s),e,t);return V(i)}var Wu=globalThis.crypto;var Qn=new Map,Xe=new Map,At=100,Je,bt=new Uint32Array(1),$=globalThis.crypto;async function ki(n,e){let t=`${n}-${e}`,r=Qn.get(t);if(r){if(r.count--,r.count>0)return[r.key,r.salt];r.count--}let s=15-n.length,i=e?(s>0?s:0)*1e3+121-s:1e5,o=new TextEncoder().encode(n),a=await $.subtle.digest({name:"SHA-256"},o),c=await $.subtle.importKey("raw",a,{name:"PBKDF2"},!1,["deriveKey"]),l=$.getRandomValues(new Uint8Array(16)),u=await $.subtle.deriveKey({name:"PBKDF2",salt:l,iterations:i,hash:"SHA-256"},c,{name:"AES-GCM",length:256},!1,["encrypt"]);return Qn.set(t,{key:u,salt:l,count:At}),[u,l]}var xt=At*5,qe=0,er=0;async function tr(n,e,t){if(xt--,xt<0){xt=At;let f=(qe-er)/2;for(let[y,d]of Xe)d.count<f&&Xe.delete(y),er=qe}qe++;let r=n+k(e)+t,s=Xe.get(r);if(s)return s.count=qe,[s.key,s.salt];let i=15-n.length,o=t?(i>0?i:0)*1e3+121-i:1e5,a=new TextEncoder().encode(n),c=await $.subtle.digest({name:"SHA-256"},a),l=await $.subtle.importKey("raw",c,{name:"PBKDF2"},!1,["deriveKey"]),u=await $.subtle.deriveKey({name:"PBKDF2",salt:e,iterations:o,hash:"SHA-256"},l,{name:"AES-GCM",length:256},!1,["decrypt"]);return Xe.set(r,{key:u,salt:e,count:0}),[u,e]}function nr(n){return Je!=null&&!n||(Je=$.getRandomValues(new Uint8Array(12))),Je}function Ui(){return bt[0]++,bt[0]>1e4&&nr(!0),bt}async function wt(n,e,t){let[r,s]=await ki(e,t),i=nr(),o=Ui(),a=new Uint8Array([...i,...new Uint8Array(o.buffer)]),c=R(n),l=await $.subtle.encrypt({name:"AES-GCM",iv:a},r,c),u=""+await H(new Uint8Array(l));return`%${k(a)}${k(s)}${u}`}async function Vi(n,e,t){try{let r=n.substring(1,33),s=n.substring(33,65),i=n.substring(65),[o]=await tr(e,q(s),t),a=q(r),c=Oe(i),l=await $.subtle.decrypt({name:"AES-GCM",iv:a},o,c);return V(new Uint8Array(l))}catch(r){throw F("Couldn\'t decode! You should wrong the passphrases (V2)",16),F(r,16),r}}async function Pt(n,e,t){try{if(n[0]=="%")return n[1]==="~"?St(n,e):Vi(n,e,t);if(!n.startsWith("[")||!n.endsWith("]"))throw new Error("Encrypted data corrupted!");let r=n.substring(1,n.length-1).split(",").map(h=>h[0]==\'"\'?h.substring(1,h.length-1):h),[s,i,o]=r,[a]=await tr(e,q(o),t),c=q(i),l=atob(s),u=l.length,f=new Uint8Array(u);for(let h=u;h>=0;--h)f[h]=l.charCodeAt(h);let y=await $.subtle.decrypt({name:"AES-GCM",iv:c},a,f),d=V(new Uint8Array(y));return JSON.parse(d)}catch(r){throw F("Couldn\'t decode! You should wrong the passphrases",16),F(r,16),r}}var tf=new Uint8Array([83,97,108,116,101,100,95,95]);var _t=globalThis.crypto||window.crypto;var rr=new Uint8Array([1,0,1]);var sr=new Uint8Array([10,244,193]),ir=new Uint8Array([10,244,194]);var lr=globalThis.crypto;async function po(n,e){let t=R(n),r=await lr.subtle.importKey("raw",t,{name:"HKDF"},!1,["deriveKey"]);return await lr.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:e,info:new Uint8Array([])},r,{name:"HMAC",hash:"SHA-256",length:256},!1,["sign"])}var Nf=$e(10,po,([n,e])=>`${R(n)}-${k(e)}`);async function Ct(n){let e=n.key,{type:t,input:r,passphrase:s}=n;try{if(t=="encrypt"){let i=n.autoCalculateIterations,o=await wt(r,s,i);self.postMessage({key:e,result:o})}else if(t=="decrypt"){let i=n.autoCalculateIterations,o=await Pt(r,s,i);self.postMessage({key:e,result:o})}else if(t=="encryptHKDF"){let i=n.pbkdf2Salt,o=await qn(r,s,i);self.postMessage({key:e,result:o})}else if(t=="decryptHKDF"){let i=n.pbkdf2Salt,o=await Zn(r,s,i);self.postMessage({key:e,result:o})}}catch(i){self.postMessage({key:e,error:i})}}self.onmessage=n=>{let e=n.data.data;if(e.type==="split")return jn(e);if(e.type==="encrypt"||e.type==="decrypt")return Ct(e);if(e.type==="encryptHKDF"||e.type==="decryptHKDF")return Ct(e);self.postMessage({key:e.key,error:new Error("Invalid type")})};\n/*! Bundled license information:\n\noctagonal-wheels/dist/encryption/asymmetric/common.js:\n (* istanbul ignore next -- @preserve *)\n*/\n')}function encryptionOnWorker(data){const process2=startWorker(data);return(async()=>{const ret=await process2.task.promise;process2.finalize();return ret})()}function encryptionHKDFOnWorker(data){const process2=startWorker(data);return(async()=>{const ret=await process2.task.promise;process2.finalize();return ret})()}function handleTaskEncrypt(process2,data){const key3=data.key,task=process2.task;"result"in data?task.resolve(data.result):data.error?task.reject(data.error):task.reject(new Error("Unknown error in background encryption"));tasks2.delete(key3)}function _splitPieces2Worker(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,splitVersion,useSegmenter){const process2=startWorker({type:"split",dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,useSegmenter,splitVersion}),_key=process2.key,stream=new TransformStream({transform:(chunk,controller)=>{null!==chunk?controller.enqueue(chunk):controller.terminate()},flush:()=>{}});workerStreams.set(_key,stream);const reader=stream.readable.getReader(),writer=stream.writable.getWriter();writers.set(_key,writer);return async function*(){try{let done=!1;do{const results=await reader.read();done=results.done;if(done)break;yield results.value}while(!done)}catch(ex){Logger(`Error in worker stream for key ${_key}`);Logger(ex,LOG_LEVEL_VERBOSE);throw ex}finally{process2.finalize();workerStreams.delete(_key);writers.delete(_key)}}}function handleTaskSplit(process2,data){const key3=data.key;if(!("result"in data)){responseBuf.delete(key3);const reportError=data.error||new Error("Unknown error in background splitting");writerPromise=writerPromise.then(async()=>{const writer=writers.get(key3);writer&&await writer.abort(reportError)})}let thisBuf=responseBuf.get(key3);if(!thisBuf){thisBuf=new Map;responseBuf.set(key3,thisBuf)}const seq=data.seq;thisBuf.set(seq,null===data.result?SYMBOL_END_OF_DATA:data.result);responseBuf.set(key3,thisBuf);const keys3=Array.from(thisBuf.keys()).sort((a2,b3)=>a2-b3),max3=keys3[keys3.length-1];for(let i2=0;i2<=max3;i2++){const result=thisBuf.get(i2);if(void 0===result)break;if(result!==SYMBOL_USED){thisBuf.set(i2,SYMBOL_USED);responseBuf.set(key3,thisBuf);writerPromise=writerPromise.then(async()=>{const writer=writers.get(key3);if(!writer)throw new Error(`Invalid writer for key ${key3} in background splitting`);await writer.write(result===SYMBOL_END_OF_DATA?null:result)})}}}function splitPieces2Worker(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,useSegmenter){return _splitPieces2Worker(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,1,null!=useSegmenter&&useSegmenter)}function splitPieces2WorkerV2(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,useSegmenter){return _splitPieces2Worker(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,2,null!=useSegmenter&&useSegmenter)}function splitPieces2WorkerRabinKarp(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,useSegmenter){return _splitPieces2Worker(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,3,null!=useSegmenter&&useSegmenter)}function encryptHKDFWorker(input,passphrase,pbkdf2Salt){return encryptionHKDFOnWorker({type:"encryptHKDF",input,passphrase,pbkdf2Salt})}function initialiseWorkers(){const maxConcurrency=~~((navigator.hardwareConcurrency||8)/2);return Array.from({length:maxConcurrency},()=>({worker:Worker2(),processing:0}))}function initialiseWorkerModule(){if(workers.length>0){terminateWorker();workers=[]}workers=initialiseWorkers();for(const inst of workers){inst.worker.onmessage=({data})=>{const key3=data.key,process2=tasks2.get(key3);process2?"split"===process2.type?handleTaskSplit(0,data):"encrypt"===process2.type||"decrypt"===process2.type||"encryptHKDF"===process2.type||"decryptHKDF"===process2.type?handleTaskEncrypt(process2,data):info("Invalid response type"+process2):info(`Invalid key ${key3} of background processing`,LOG_KIND_ERROR)};inst.worker.onerror=()=>{inst.worker.terminate();workers.splice(workers.indexOf(inst),1)}}eventHub.on(EVENT_PLATFORM_UNLOADED,()=>{terminateWorker()})}function nextWorker(){if(void 0===workers||0===workers.length)throw new Error("No available workers");const inst=workers[roundRobinIdx];roundRobinIdx=(roundRobinIdx+1)%workers.length;return inst}function startWorker(data){const _key=key2++,inst=nextWorker(),item={key:_key,task:promiseWithResolver(),type:data.type,finalize:()=>{inst.processing--}};tasks2.set(_key,item);inst.processing++;inst.worker.postMessage({data:{...data,key:_key}});return item}function terminateWorker(){for(const inst of workers)inst.worker.terminate()}function getEncryptionVersion(data){return"e_"in data&&!0===data.e_?data.data.startsWith(Encrypt_HKDF_Header)?EncryptionVersions_HKDF:data.data.startsWith(Encrypt_OLD_Header)?EncryptionVersions_ENCRYPTED:EncryptionVersions_UNKNOWN:EncryptionVersions_UNENCRYPTED}async function tryDecryptV1AsFallback(encryptedData,passphrase,useDynamicIterationCount){try{return await decrypt4(encryptedData,passphrase,useDynamicIterationCount)}catch(ex){try{Logger("Failed to decrypt with V1 method. Fallback to disable useDynamicIterationCount.",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);return await decrypt4(encryptedData,passphrase,!1)}catch(ex2){Logger("Completely failed to decrypt with V1 method.",LOG_LEVEL_VERBOSE);Logger(ex2,LOG_LEVEL_VERBOSE);return!1}}}function isEncryptedMeta(doc){return"path"in doc&&doc.path.startsWith(ENCRYPTED_META_PREFIX)}async function encryptMetaWithHKDF(doc,passphrase,pbkdf2Salt){if(isEncryptedMeta(doc))return doc.path;const props={path:getPath(doc),mtime:doc.mtime,ctime:doc.ctime,size:doc.size,children:isMetaEntry(doc)?doc.children:void 0},propStr=JSON.stringify(props),encryptedMeta=await encryptHKDFWorker(propStr,passphrase,pbkdf2Salt);return ENCRYPTED_META_PREFIX+encryptedMeta}async function decryptMetaWithHKDF(meta,passphrase,pbkdf2Salt){if(!meta.startsWith(ENCRYPTED_META_PREFIX))throw new Error("Meta is not encrypted with HKDF.");const encryptedMeta=meta.slice(ENCRYPTED_META_PREFIX.length),props=await decryptHKDF(encryptedMeta,passphrase,pbkdf2Salt);return JSON.parse(props)}async function incomingEncryptHKDF(doc,passphrase,useDynamicIterationCount,getPBKDF2Salt){const saveDoc={...doc};if(isEncryptedChunkEntry(saveDoc)||isSyncInfoEntry(saveDoc))try{const encryptionVersion=getEncryptionVersion(saveDoc);if(encryptionVersion===EncryptionVersions_ENCRYPTED){if(!1===await tryDecryptV1AsFallback(saveDoc.data,passphrase,useDynamicIterationCount)){Logger(MESSAGE_FALLBACK_DECRYPT_FAILED,LOG_LEVEL_NOTICE);throw new Error(MESSAGE_FALLBACK_DECRYPT_FAILED)}const pbkdf2salt=await getPBKDF2Salt();saveDoc.data=await encryptHKDF(saveDoc.data,passphrase,pbkdf2salt);saveDoc.e_=!0}if(encryptionVersion===EncryptionVersions_HKDF);else if(encryptionVersion===EncryptionVersions_UNENCRYPTED){const pbkdf2salt=await getPBKDF2Salt();saveDoc.data=await encryptHKDF(saveDoc.data,passphrase,pbkdf2salt);saveDoc.e_=!0}}catch(ex){Logger(ENCRYPTION_HKDF_FAILED,LOG_LEVEL_NOTICE);Logger(ex);throw ex}if(shouldEncryptEdenHKDF(saveDoc)){const pbkdf2salt=await getPBKDF2Salt();try{saveDoc.eden={[EDEN_ENCRYPTED_KEY_HKDF]:{data:await encryptHKDF(JSON.stringify(saveDoc.eden),passphrase,pbkdf2salt),epoch:999999}}}catch(ex){Logger(`${ENCRYPTION_HKDF_FAILED} on Eden`,LOG_LEVEL_NOTICE);Logger(ex);throw ex}}if(isObfuscatedEntry(saveDoc)){const pbkdf2salt=await getPBKDF2Salt();if(!isEncryptedMeta(saveDoc))try{saveDoc.path=await encryptMetaWithHKDF(saveDoc,passphrase,pbkdf2salt);saveDoc.mtime=0;saveDoc.ctime=0;saveDoc.size=0;"children"in saveDoc&&(saveDoc.children=[])}catch(ex){Logger(`${ENCRYPTION_HKDF_FAILED} on Metadata`,LOG_LEVEL_NOTICE);Logger(ex);throw ex}}return saveDoc}async function outgoingDecryptHKDF(doc,migrationDecrypt,decrypted,passphrase,useDynamicIterationCount,getPBKDF2Salt){const loadDoc={...doc};if(isEncryptedChunkEntry(loadDoc)||isSyncInfoEntry(loadDoc))try{const encryptionVersion=getEncryptionVersion(loadDoc);if(encryptionVersion===EncryptionVersions_HKDF){const pbkdf2salt=await getPBKDF2Salt();loadDoc.data=await decryptHKDF(loadDoc.data,passphrase,pbkdf2salt);delete loadDoc.e_}else if(encryptionVersion===EncryptionVersions_ENCRYPTED){const decryptedData=await tryDecryptV1AsFallback(loadDoc.data,passphrase,useDynamicIterationCount);if(!1===decryptedData){Logger(MESSAGE_FALLBACK_DECRYPT_FAILED,LOG_LEVEL_NOTICE);throw new Error(MESSAGE_FALLBACK_DECRYPT_FAILED)}loadDoc.data=decryptedData;delete loadDoc.e_}else if(encryptionVersion!==EncryptionVersions_UNENCRYPTED){Logger("Unknown encryption version. Cannot decrypt.",LOG_LEVEL_NOTICE);throw new Error("Unknown encryption version. Cannot decrypt.")}}catch(ex){Logger(DECRYPTION_HKDF_FAILED,LOG_LEVEL_NOTICE);Logger(ex);throw ex}if(isObfuscatedEntry(loadDoc)){const path2=getPath(loadDoc);if(isEncryptedMeta(loadDoc)){const pbkdf2salt=await getPBKDF2Salt();try{const metadata=await decryptMetaWithHKDF(path2,passphrase,pbkdf2salt);for(const key3 of Object.keys(metadata))loadDoc[key3]=metadata[key3]}catch(ex){Logger(`${DECRYPTION_HKDF_FAILED} on Path`,LOG_LEVEL_NOTICE);Logger(ex);throw ex}}else if(isPathProbablyObfuscated(path2)){const decryptedPath=await tryDecryptV1AsFallback(path2,passphrase,useDynamicIterationCount);if(!1===decryptedPath){Logger(`${MESSAGE_FALLBACK_DECRYPT_FAILED} on Path`,LOG_LEVEL_NOTICE);throw new Error(MESSAGE_FALLBACK_DECRYPT_FAILED)}loadDoc.path=decryptedPath}}let readEden={},edenDecrypted=!1;if(shouldDecryptEden(loadDoc))try{const decryptedEden=await tryDecryptV1AsFallback(loadDoc.eden[EDEN_ENCRYPTED_KEY].data,passphrase,useDynamicIterationCount);if(!1===decryptedEden)throw new Error(MESSAGE_FALLBACK_DECRYPT_FAILED);readEden={...readEden,...JSON.parse(decryptedEden)};edenDecrypted=!0}catch(ex){Logger(`${DECRYPTION_FALLBACK_FAILED} on Eden`,LOG_LEVEL_NOTICE);Logger(ex);throw ex}if(shouldDecryptEdenHKDF(loadDoc)){const pbkdf2salt=await getPBKDF2Salt();try{const decryptedEdenData=await decryptHKDF(loadDoc.eden[EDEN_ENCRYPTED_KEY_HKDF].data,passphrase,pbkdf2salt);readEden={...readEden,...JSON.parse(decryptedEdenData)};edenDecrypted=!0}catch(ex){Logger(`${DECRYPTION_HKDF_FAILED} on Eden`,LOG_LEVEL_NOTICE);Logger(ex);throw ex}}edenDecrypted&&(loadDoc.eden=readEden);return loadDoc}async function incomingEncryptV1(doc,passphrase,useDynamicIterationCount){const saveDoc={...doc};if(isEncryptedChunkEntry(saveDoc)||isSyncInfoEntry(saveDoc))try{if(!("e_"in saveDoc)){saveDoc.data=await encrypt4(saveDoc.data,passphrase,useDynamicIterationCount);saveDoc.e_=!0}}catch(ex){Logger("Encryption failed.",LOG_LEVEL_NOTICE);Logger(ex);throw ex}shouldEncryptEden(saveDoc)&&(saveDoc.eden={[EDEN_ENCRYPTED_KEY]:{data:await encrypt4(JSON.stringify(saveDoc.eden),passphrase,useDynamicIterationCount),epoch:999999}});if(isObfuscatedEntry(saveDoc))try{const path2=getPath(saveDoc);isPathProbablyObfuscated(path2)||(saveDoc.path=await obfuscatePath(path2,passphrase,useDynamicIterationCount))}catch(ex){Logger("Encryption failed.",LOG_LEVEL_NOTICE);Logger(ex);throw ex}return saveDoc}async function outgoingDecryptV1(doc,migrationDecrypt,decrypted,passphrase,useDynamicIterationCount){var _a8,_b5;const loadDoc={...doc},_isChunkOrSyncInfo=isEncryptedChunkEntry(loadDoc)||isSyncInfoEntry(loadDoc),_isObfuscatedEntry=isObfuscatedEntry(loadDoc),_shouldDecryptEden=shouldDecryptEden(loadDoc);if(_isChunkOrSyncInfo||_isObfuscatedEntry||_shouldDecryptEden){if(migrationDecrypt&&decrypted.has(loadDoc._id))return loadDoc;try{if(_isChunkOrSyncInfo){loadDoc.data=await decrypt4(loadDoc.data,passphrase,useDynamicIterationCount);delete loadDoc.e_}else if("e_"in loadDoc){loadDoc.data=await decrypt4(loadDoc.data,passphrase,useDynamicIterationCount);delete loadDoc.e_}if(_isObfuscatedEntry){const path2=getPath(loadDoc);isPathProbablyObfuscated(path2)&&(loadDoc.path=await decrypt4(path2,passphrase,useDynamicIterationCount))}_shouldDecryptEden&&(loadDoc.eden=JSON.parse(await decrypt4(loadDoc.eden[EDEN_ENCRYPTED_KEY].data,passphrase,useDynamicIterationCount)));migrationDecrypt&&decrypted.set(loadDoc._id,!0)}catch(ex){if(!useDynamicIterationCount){Logger("Decryption failed.",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(`id:${loadDoc._id}-${null==(_b5=loadDoc._rev)?void 0:_b5.substring(0,10)}`,LOG_LEVEL_VERBOSE);throw ex}try{_isChunkOrSyncInfo&&(loadDoc.data=await decrypt4(loadDoc.data,passphrase,!1));if(_isObfuscatedEntry){const path2=getPath(loadDoc);isPathProbablyObfuscated(path2)&&(loadDoc.path=await decrypt4(path2,passphrase,!1))}_shouldDecryptEden&&(loadDoc.eden=JSON.parse(await decrypt4(loadDoc.eden[EDEN_ENCRYPTED_KEY].data,passphrase,!1)));migrationDecrypt&&decrypted.set(loadDoc._id,!0)}catch(ex2){if(migrationDecrypt&&"SyntaxError"==ex2.name)return loadDoc;Logger("Decryption failed.",LOG_LEVEL_NOTICE);Logger(ex2,LOG_LEVEL_VERBOSE);Logger(`id:${loadDoc._id}-${null==(_a8=loadDoc._rev)?void 0:_a8.substring(0,10)}`,LOG_LEVEL_VERBOSE);throw ex2}}}return loadDoc}function disableEncryption(){preprocessOutgoing=async doc=>await Promise.resolve(doc)}function shouldEncryptEden(doc){return"eden"in doc&&!(EDEN_ENCRYPTED_KEY in doc.eden)}function shouldEncryptEdenHKDF(doc){return"eden"in doc&&!(EDEN_ENCRYPTED_KEY_HKDF in doc.eden)&&0!==Object.keys(doc.eden).length}function shouldDecryptEden(doc){return"eden"in doc&&EDEN_ENCRYPTED_KEY in doc.eden}function shouldDecryptEdenHKDF(doc){return"eden"in doc&&EDEN_ENCRYPTED_KEY_HKDF in doc.eden}async function ensureRemoteIsCompatible(infoSrc,setting,deviceNodeID,currentVersionRange3,nodeDeviceInfo,updateCallback){var _a8,_b5,_c3,_d2;const now3=Date.now(),baseMilestone={_id:MILESTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked:!1,accepted_nodes:[deviceNodeID],node_chunk_info:{[deviceNodeID]:currentVersionRange3},node_info:{[deviceNodeID]:{...nodeDeviceInfo,last_connected:0,progress:""}},tweak_values:{}};let remoteMilestone=infoSrc;remoteMilestone||(remoteMilestone=baseMilestone);const currentTweakValues=extractObject(TweakValuesTemplate,setting);remoteMilestone.node_chunk_info={...baseMilestone.node_chunk_info,...remoteMilestone.node_chunk_info};let writeMilestone=remoteMilestone.node_chunk_info[deviceNodeID].min!=currentVersionRange3.min||remoteMilestone.node_chunk_info[deviceNodeID].max!=currentVersionRange3.max||isObjectDifferent(null==(_a8=remoteMilestone.tweak_values)?void 0:_a8[deviceNodeID],currentTweakValues)||void 0===remoteMilestone._rev||!(DEVICE_ID_PREFERRED in remoteMilestone.tweak_values);remoteMilestone.node_info||(remoteMilestone.node_info={});if(!(deviceNodeID in remoteMilestone.node_info)){remoteMilestone.node_info[deviceNodeID]={...nodeDeviceInfo,last_connected:0,progress:""};writeMilestone=!0}const info3=remoteMilestone.node_info[deviceNodeID],keys3=["device_name","app_version","plugin_version","vault_name","progress"];for(const key3 of keys3)if(info3[key3]!=nodeDeviceInfo[key3]){remoteMilestone.node_info[deviceNodeID][key3]=nodeDeviceInfo[key3];writeMilestone=!0}if(now3-(remoteMilestone.node_info[deviceNodeID].last_connected||0)>6e4){remoteMilestone.node_info[deviceNodeID].last_connected=now3;writeMilestone=!0}if(writeMilestone){remoteMilestone.node_chunk_info[deviceNodeID].min=currentVersionRange3.min;remoteMilestone.node_chunk_info[deviceNodeID].max=currentVersionRange3.max;remoteMilestone.tweak_values={...null!=(_b5=remoteMilestone.tweak_values)?_b5:{},[deviceNodeID]:currentTweakValues};DEVICE_ID_PREFERRED in remoteMilestone.tweak_values||(remoteMilestone.tweak_values[DEVICE_ID_PREFERRED]=currentTweakValues);await updateCallback(remoteMilestone)}let globalMin=currentVersionRange3.min,globalMax=currentVersionRange3.max;for(const nodeId of remoteMilestone.accepted_nodes)if(nodeId!=deviceNodeID)if(nodeId in remoteMilestone.node_chunk_info){const nodeInfo=remoteMilestone.node_chunk_info[nodeId];globalMin=Math.max(nodeInfo.min,globalMin);globalMax=Math.min(nodeInfo.max,globalMax)}else{globalMin=0;globalMax=0}if(globalMax<globalMin&&!setting.ignoreVersionCheck)return"INCOMPATIBLE";if(!setting.disableCheckingConfigMismatch){const preferred_tweak=null!=(_d2=null==(_c3=remoteMilestone.tweak_values)?void 0:_c3[DEVICE_ID_PREFERRED])?_d2:currentTweakValues,current_tweak=currentTweakValues;if(isObjectDifferent(extractObject(TweakValuesShouldMatchedTemplate,{...TweakValuesDefault,...preferred_tweak}),extractObject(TweakValuesShouldMatchedTemplate,{...TweakValuesDefault,...current_tweak}),!0))return["MISMATCHED",preferred_tweak]}return remoteMilestone.locked?-1==remoteMilestone.accepted_nodes.indexOf(deviceNodeID)?remoteMilestone.cleaned?"NODE_CLEANED":"NODE_LOCKED":"LOCKED":"OK"}async function ensureDatabaseIsCompatible(db,setting,deviceNodeID,currentVersionRange3,nodeDeviceInfo){const remoteMilestone=await resolveWithIgnoreKnownError(db.get(MILESTONE_DOCID),!1);return await ensureRemoteIsCompatible(remoteMilestone,setting,deviceNodeID,currentVersionRange3,nodeDeviceInfo,async info3=>{await db.put(info3)})}function createSyncParamsHanderForServer(key3,options){if(_handlers.has(key3))return _handlers.get(key3);const handler=createSyncParamsHandler(options);_handlers.set(key3,handler);return handler}function clearHandlers(){_handlers.clear()}function createSyncParamsHandler({put,get:get5,create}){let taskFetchParameters;const _fetchSyncParameters=async()=>{let syncParams;try{let shouldRetry=!1;do{shouldRetry=!1;try{syncParams=await get5();Logger("Fetched synchronisation parameters",LOG_LEVEL_INFO)}catch(ex){if(!LiveSyncError.isCausedBy(ex,SyncParamsNotFoundError))throw ex;{Logger("Synchronisation parameters not found, creating new ones",LOG_LEVEL_INFO);const newSyncParams=await create();if(!await put(newSyncParams)){Logger("Failed to store initial synchronisation parameters",LOG_LEVEL_INFO);throw new SyncParamsUpdateError("Failed to store initial synchronisation parameters")}Logger("Initial synchronisation parameters stored successfully, retrying fetch",LOG_LEVEL_INFO);shouldRetry=!0}}}while(shouldRetry);if(!syncParams)throw new SyncParamsFetchError("Unexpected empty synchronisation parameters");if(!syncParams.pbkdf2salt){Logger("Synchronisation parameters do not have PBKDF2 salt, generating a new salt",LOG_LEVEL_INFO);const salt=await arrayBufferToBase64Single2(createPBKDF2Salt());if(!salt){Logger("Failed to generate PBKDF2 salt",LOG_LEVEL_INFO);throw new SyncParamsFetchError("Failed to generate PBKDF2 salt")}syncParams.pbkdf2salt=salt;if(!await put(syncParams)){Logger("Failed to store synchronisation parameters with new PBKDF2 salt",LOG_LEVEL_INFO);throw new SyncParamsUpdateError("Failed to store synchronisation parameters with new PBKDF2 salt")}syncParams=await get5()}if(!syncParams)throw new Error("Failed to prepare synchronisation key in synchronisation parameters");Logger("Synchronisation parameters fetched successfully",LOG_LEVEL_INFO);if(!syncParams.pbkdf2saltDecoded){const decodedSalt=new Uint8Array(base64ToArrayBufferInternalBrowser(syncParams.pbkdf2salt));if(!decodedSalt)throw new SyncParamsFetchError("Failed to decode PBKDF2 salt");syncParams.pbkdf2saltDecoded=decodedSalt}return syncParams}catch(ex){Logger("Failed to fetch synchronisation parameters",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);taskFetchParameters=void 0;return!1}},fetchSyncParameters=(refresh=!1)=>{if(taskFetchParameters&&!refresh)return taskFetchParameters;taskFetchParameters=_fetchSyncParameters();return taskFetchParameters};return{fetch:fetchSyncParameters,getPBKDF2Salt:async(refresh=!1)=>{const syncParams=await fetchSyncParameters(refresh);if(!syncParams){Logger("Failed to fetch synchronisation parameters",LOG_LEVEL_INFO);throw new SyncParamsFetchError("Failed to fetch synchronisation parameters")}return syncParams.pbkdf2saltDecoded}}}async function*genReplication(s2,signal){const inbox=new Inbox(1e4),push2=function(e3){serialized("replicationResult",async()=>{signal.aborted||(inbox.isDisposed?Logger("Inbox is disposed",LOG_LEVEL_VERBOSE):await inbox.post(e3))})};s2.on("complete",result=>push2(["complete",result]));s2.on("change",result=>push2(["change",result]));s2.on("active",()=>push2(["active"]));s2.on("denied",err3=>push2(["denied",err3]));s2.on("error",err3=>push2(["error",err3]));s2.on("paused",err3=>push2(["paused",err3]));s2.then(()=>push2(["finally"])).catch(()=>push2(["finally"]));const abortSymbol=Symbol("abort"),abortPromise=promiseWithResolver();signal.addEventListener("abort",()=>{abortPromise.resolve(abortSymbol)});try{for(;!inbox.isDisposed&&!signal.aborted;){const r4=await inbox.pick(void 0,[abortPromise.promise]);if(r4===NOT_AVAILABLE)break;yield r4}}catch(ex){if(!(ex instanceof Error&&"AbortError"==ex.name))throw ex;Logger("Replication aborted",LOG_LEVEL_VERBOSE)}finally{s2.cancel();inbox.dispose()}}function translateInfo(infoSrc){if(!infoSrc)return!1;const info3={...infoSrc};info3.name=$t(info3.name);info3.desc&&(info3.desc=$t(info3.desc));return info3}function _getConfig(key3){return key3 in configurationNames?configurationNames[key3]:key3 in SettingInformation&&SettingInformation[key3]}function getConfig(key3){return translateInfo(_getConfig(key3))}function getConfName(key3){const conf=getConfig(key3);return conf?conf.name:`${key3} (No info)`}function setStyle(el,styleHead,condition){if(condition()){el.addClass(`${styleHead}-enabled`);el.removeClass(`${styleHead}-disabled`)}else{el.addClass(`${styleHead}-disabled`);el.removeClass(`${styleHead}-enabled`)}}function visibleOnly(cond){return()=>({visibility:cond()})}function enableOnly(cond){return()=>({disabled:!cond()})}function getLevelStr(level){return level==LEVEL_POWER_USER?$msg("obsidianLiveSyncSettingTab.levelPowerUser"):level==LEVEL_ADVANCED?$msg("obsidianLiveSyncSettingTab.levelAdvanced"):level==LEVEL_EDGE_CASE?$msg("obsidianLiveSyncSettingTab.levelEdgeCase"):""}function findAttrFromParent(el,attr2){let current=el;for(;current;){const value=current.getAttribute(attr2);if(value)return value;current=current.parentElement}return""}function wrapMemo(func){let buf;return arg=>{if(buf!==arg){func(arg);buf=arg}}}function confirmWithMessage(plugin3,title,contentMd,buttons,defaultAction,timeout){return new Promise(res2=>{new MessageBox(plugin3,title,contentMd,buttons,defaultAction,timeout,!1,result=>res2(result)).open()})}function confirmWithMessageWithWideButton(plugin3,title,contentMd,buttons,defaultAction,timeout){return new Promise(res2=>{new MessageBox(plugin3,title,contentMd,buttons,defaultAction,timeout,!0,result=>res2(result)).open()})}function cloneQuery(query3){return Object.keys(query3).reduce((carry,paramName)=>{const param=query3[paramName];return{...carry,[paramName]:Array.isArray(param)?[...param]:param}},{})}function addExpectContinueMiddleware(options){return next2=>async args=>{var _a8,_b5,_c3,_d2,_e2,_f;const{request:request2}=args;if(!1!==options.expectContinueHeader&&HttpRequest.isInstance(request2)&&request2.body&&"node"===options.runtime&&"FetchHttpHandler"!==(null==(_b5=null==(_a8=options.requestHandler)?void 0:_a8.constructor)?void 0:_b5.name)){let sendHeader=!0;if("number"==typeof options.expectContinueHeader)try{sendHeader=(null!=(_f=null!=(_e2=Number(null==(_c3=request2.headers)?void 0:_c3["content-length"]))?_e2:null==(_d2=options.bodyLengthChecker)?void 0:_d2.call(options,request2.body))?_f:1/0)>=options.expectContinueHeader}catch(e3){}else sendHeader=!!options.expectContinueHeader;sendHeader&&(request2.headers.Expect="100-continue")}return next2({...args,request:request2})}}function setCredentialFeature(credentials,feature,value){credentials.$source||(credentials.$source={});credentials.$source[feature]=value;return credentials}function setFeature(context2,feature,value){context2.__aws_sdk_context?context2.__aws_sdk_context.features||(context2.__aws_sdk_context.features={}):context2.__aws_sdk_context={features:{}};context2.__aws_sdk_context.features[feature]=value}function convertHttpAuthSchemesToMap(httpAuthSchemes){const map3=new Map;for(const scheme of httpAuthSchemes)map3.set(scheme.schemeId,scheme);return map3}function createPaginator(ClientCtor,CommandCtor,inputTokenName,outputTokenName,pageSizeTokenName){return async function*paginateOperation(config,input,...additionalArguments){var _a8,_b5;const _input=input;let page,token=null!=(_a8=config.startingToken)?_a8:_input[inputTokenName],hasNext=!0;for(;hasNext;){_input[inputTokenName]=token;pageSizeTokenName&&(_input[pageSizeTokenName]=null!=(_b5=_input[pageSizeTokenName])?_b5:config.pageSize);if(!(config.client instanceof ClientCtor))throw new Error(`Invalid client, expected instance of ${ClientCtor.name}`);page=await makePagedClientRequest(CommandCtor,config.client,input,config.withCommand,...additionalArguments);yield page;const prevToken=token;token=get3(page,outputTokenName);hasNext=!(!token||config.stopOnSameToken&&token===prevToken)}}}function toBase64(_input){let input;input="string"==typeof _input?fromUtf8(_input):_input;const isArrayLike="object"==typeof input&&"number"==typeof input.length,isUint8Array="object"==typeof input&&"number"==typeof input.byteOffset&&"number"==typeof input.byteLength;if(!isArrayLike&&!isUint8Array)throw new Error("@smithy/util-base64: toBase64 encoder function only accepts string | Uint8Array.");let str="";for(let i2=0;i2<input.length;i2+=3){let bits2=0,bitLength=0;for(let j2=i2,limit=Math.min(i2+3,input.length);j2<limit;j2++){bits2|=input[j2]<<(limit-j2-1)*bitsPerByte;bitLength+=bitsPerByte}const bitClusterCount=Math.ceil(bitLength/bitsPerLetter);bits2<<=bitClusterCount*bitsPerLetter-bitLength;for(let k2=1;k2<=bitClusterCount;k2++){const offset=(bitClusterCount-k2)*bitsPerLetter;str+=alphabetByValue[(bits2&maxLetterValue<<offset)>>offset]}str+="==".slice(0,4-bitClusterCount)}return str}function merge(buffers,mode,chunk){switch(mode){case 0:buffers[0]+=chunk;return sizeOf(buffers[0]);case 1:case 2:buffers[mode].push(chunk);return sizeOf(buffers[mode])}}function flush(buffers,mode){switch(mode){case 0:const s2=buffers[0];buffers[0]="";return s2;case 1:case 2:return buffers[mode].flush()}throw new Error(`@smithy/util-stream - invalid index ${mode} given to flush()`)}function sizeOf(chunk){var _a8,_b5;return null!=(_b5=null!=(_a8=null==chunk?void 0:chunk.byteLength)?_a8:null==chunk?void 0:chunk.length)?_b5:0}function modeOf(chunk,allowBuffer=!0){return allowBuffer&&"undefined"!=typeof Buffer&&chunk instanceof Buffer?2:chunk instanceof Uint8Array?1:"string"==typeof chunk?0:-1}async function headStream(stream,bytes){var _a8;let byteLengthCounter=0;const chunks=[],reader=stream.getReader();let isDone=!1;for(;!isDone;){const{done,value}=await reader.read();if(value){chunks.push(value);byteLengthCounter+=null!=(_a8=null==value?void 0:value.byteLength)?_a8:0}if(byteLengthCounter>=bytes)break;isDone=done}reader.releaseLock();const collected=new Uint8Array(Math.min(bytes,byteLengthCounter));let offset=0;for(const chunk of chunks){if(chunk.byteLength>collected.byteLength-offset){collected.set(chunk.subarray(0,collected.byteLength-offset),offset);break}collected.set(chunk,offset);offset+=chunk.length}return collected}function buildQueryString(query3){const parts=[];for(let key3 of Object.keys(query3).sort()){const value=query3[key3];key3=escapeUri(key3);if(Array.isArray(value))for(let i2=0,iLen=value.length;i2<iLen;i2++)parts.push(`${key3}=${escapeUri(value[i2])}`);else{let qsEntry=key3;(value||"string"==typeof value)&&(qsEntry+=`=${escapeUri(value)}`);parts.push(qsEntry)}}return parts.join("&")}function createRequest(url,requestOptions){return new Request(url,requestOptions)}function requestTimeout(timeoutInMs=0){return new Promise((resolve,reject)=>{timeoutInMs&&setTimeout(()=>{const timeoutError=new Error(`Request did not complete within ${timeoutInMs} ms`);timeoutError.name="TimeoutError";reject(timeoutError)},timeoutInMs)})}function buildAbortError(abortSignal){const reason=abortSignal&&"object"==typeof abortSignal&&"reason"in abortSignal?abortSignal.reason:void 0;if(reason){if(reason instanceof Error){const abortError3=new Error("Request aborted");abortError3.name="AbortError";abortError3.cause=reason;return abortError3}const abortError2=new Error(String(reason));abortError2.name="AbortError";return abortError2}const abortError=new Error("Request aborted");abortError.name="AbortError";return abortError}async function collectBlob(blob){const base64=await readToBase64(blob),arrayBuffer=fromBase64(base64);return new Uint8Array(arrayBuffer)}async function collectStream(stream){const chunks=[],reader=stream.getReader();let isDone=!1,length=0;for(;!isDone;){const{done,value}=await reader.read();if(value){chunks.push(value);length+=value.length}isDone=done}const collected=new Uint8Array(length);let offset=0;for(const chunk of chunks){collected.set(chunk,offset);offset+=chunk.length}return collected}function readToBase64(blob){return new Promise((resolve,reject)=>{const reader=new FileReader;reader.onloadend=()=>{var _a8;if(2!==reader.readyState)return reject(new Error("Reader aborted too early"));const result=null!=(_a8=reader.result)?_a8:"",commaIndex=result.indexOf(","),dataOffset=commaIndex>-1?commaIndex+1:result.length;resolve(result.substring(dataOffset))};reader.onabort=()=>reject(new Error("Read aborted"));reader.onerror=()=>reject(reader.error);reader.readAsDataURL(blob)})}function fromHex(encoded){if(encoded.length%2!=0)throw new Error("Hex encoded strings must have an even number length");const out=new Uint8Array(encoded.length/2);for(let i2=0;i2<encoded.length;i2+=2){const encodedByte=encoded.slice(i2,i2+2).toLowerCase();if(!(encodedByte in HEX_TO_SHORT))throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);out[i2/2]=HEX_TO_SHORT[encodedByte]}return out}function toHex2(bytes){let out="";for(let i2=0;i2<bytes.byteLength;i2++)out+=SHORT_TO_HEX[bytes[i2]];return out}async function splitStream(stream){"function"==typeof stream.stream&&(stream=stream.stream());return stream.tee()}function extendedEncodeURIComponent(str){return encodeURIComponent(str).replace(/[!'()*]/g,function(c3){return"%"+c3.charCodeAt(0).toString(16).toUpperCase()})}function parseQueryString(querystring){const query3={};if(querystring=querystring.replace(/^\?/,""))for(const pair of querystring.split("&")){let[key3,value=null]=pair.split("=");key3=decodeURIComponent(key3);value&&(value=decodeURIComponent(value));key3 in query3?Array.isArray(query3[key3])?query3[key3].push(value):query3[key3]=[query3[key3],value]:query3[key3]=value}return query3}function getSchemaSerdePlugin(config){return{applyToStack:commandStack=>{commandStack.add(schemaSerializationMiddleware(config),serializerMiddlewareOption);commandStack.add(schemaDeserializationMiddleware(config),deserializerMiddlewareOption);config.protocol.setSerdeContext(config)}}}function translateTraits(indicator){if("object"==typeof indicator)return indicator;if(traitsCache[indicator|=0])return traitsCache[indicator];const traits={};let i2=0;for(const trait of["httpLabel","idempotent","idempotencyToken","sensitive","httpPayload","httpResponseCode","httpQueryParams"])1==(indicator>>i2++&1)&&(traits[trait]=1);return traitsCache[indicator]=traits}function member(memberSchema,memberName){return memberSchema instanceof NormalizedSchema?Object.assign(memberSchema,{memberName,_isMemberSchema:!0}):new NormalizedSchema(memberSchema,memberName)}function dateToUtcString(date2){const year2=date2.getUTCFullYear(),month=date2.getUTCMonth(),dayOfWeek=date2.getUTCDay(),dayOfMonthInt=date2.getUTCDate(),hoursInt=date2.getUTCHours(),minutesInt=date2.getUTCMinutes(),secondsInt=date2.getUTCSeconds(),dayOfMonthString=dayOfMonthInt<10?`0${dayOfMonthInt}`:`${dayOfMonthInt}`,hoursString=hoursInt<10?`0${hoursInt}`:`${hoursInt}`,minutesString=minutesInt<10?`0${minutesInt}`:`${minutesInt}`,secondsString=secondsInt<10?`0${secondsInt}`:`${secondsInt}`;return`${DAYS[dayOfWeek]}, ${dayOfMonthString} ${MONTHS[month]} ${year2} ${hoursString}:${minutesString}:${secondsString} GMT`}function quoteHeader(part){(part.includes(",")||part.includes('"'))&&(part=`"${part.replace(/"/g,'\\"')}"`);return part}function range3(v2,min,max3){const _v=Number(v2);if(_v<min||_v>max3)throw new Error(`Value ${_v} out of range [${min}, ${max3}]`)}function splitEvery(value,delimiter,numDelimiters){if(numDelimiters<=0||!Number.isInteger(numDelimiters))throw new Error("Invalid number of delimiters ("+numDelimiters+") for splitEvery.");const segments=value.split(delimiter);if(1===numDelimiters)return segments;const compoundSegments=[];let currentSegment="";for(let i2=0;i2<segments.length;i2++){""===currentSegment?currentSegment=segments[i2]:currentSegment+=delimiter+segments[i2];if((i2+1)%numDelimiters===0){compoundSegments.push(currentSegment);currentSegment=""}}""!==currentSegment&&compoundSegments.push(currentSegment);return compoundSegments}function determineTimestampFormat(ns,settings){if(settings.timestampFormat.useTrait&&ns.isTimestampSchema()&&(5===ns.getSchema()||6===ns.getSchema()||7===ns.getSchema()))return ns.getSchema();const{httpLabel,httpPrefixHeaders,httpHeader,httpQuery}=ns.getMergedTraits(),bindingFormat=settings.httpBindings?"string"==typeof httpPrefixHeaders||Boolean(httpHeader)?6:Boolean(httpQuery)||Boolean(httpLabel)?5:void 0:void 0;return null!=bindingFormat?bindingFormat:settings.timestampFormat.default}function setFeature2(context2,feature,value){context2.__smithy_context?context2.__smithy_context.features||(context2.__smithy_context.features={}):context2.__smithy_context={features:{}};context2.__smithy_context.features[feature]=value}function negate(bytes){for(let i2=0;i2<8;i2++)bytes[i2]^=255;for(let i2=7;i2>-1;i2--){bytes[i2]++;if(0!==bytes[i2])break}}function normalizeCredentialProvider(config,{credentials,credentialDefaultProvider}){let credentialsProvider;credentialsProvider=credentials?(null==credentials?void 0:credentials.memoized)?credentials:memoizeIdentityProvider(credentials,isIdentityExpired,doesIdentityRequireRefresh):credentialDefaultProvider?normalizeProvider2(credentialDefaultProvider(Object.assign({},config,{parentClientConfig:config}))):async()=>{throw new Error("@aws-sdk/core::resolveAwsSdkSigV4Config - `credentials` not provided and no credentialDefaultProvider was configured.")};credentialsProvider.memoized=!0;return credentialsProvider}function bindCallerConfig(config,credentialsProvider){if(credentialsProvider.configBound)return credentialsProvider;const fn=async options=>credentialsProvider({...options,callerClientConfig:config});fn.memoized=credentialsProvider.memoized;fn.configBound=!0;return fn}function schemaLogFilter(schema,data){if(null==data)return data;const ns=NormalizedSchema.of(schema);if(ns.getMergedTraits().sensitive)return SENSITIVE_STRING;if(ns.isListSchema()){if(ns.getValueSchema().getMergedTraits().sensitive)return SENSITIVE_STRING}else if(ns.isMapSchema()){if(ns.getKeySchema().getMergedTraits().sensitive||ns.getValueSchema().getMergedTraits().sensitive)return SENSITIVE_STRING}else if(ns.isStructSchema()&&"object"==typeof data){const object=data,newObject={};for(const[member2,memberNs]of ns.structIterator())null!=object[member2]&&(newObject[member2]=schemaLogFilter(memberNs,object[member2]));return newObject}return data}function escapeAttribute(value){return value.replace(ATTR_ESCAPE_RE,ch4=>ATTR_ESCAPE_MAP[ch4])}function escapeElement(value){return value.replace(ELEMENT_ESCAPE_RE,ch4=>ELEMENT_ESCAPE_MAP[ch4])}function parseXML(xmlString){parser||(parser=new DOMParser);const xmlDocument=parser.parseFromString(xmlString,"application/xml");if(xmlDocument.getElementsByTagName("parsererror").length>0)throw new Error("DOMParser XML parsing error.");const xmlToObj=node=>{var _a8;if(node.nodeType===Node.TEXT_NODE&&(null==(_a8=node.textContent)?void 0:_a8.trim()))return node.textContent;if(node.nodeType===Node.ELEMENT_NODE){const element2=node;if(0===element2.attributes.length&&0===element2.childNodes.length)return"";const obj={},attributes=Array.from(element2.attributes);for(const attr2 of attributes)obj[`${attr2.name}`]=attr2.value;const childNodes=Array.from(element2.childNodes);for(const child2 of childNodes){const childResult=xmlToObj(child2);if(null!=childResult){const childName=child2.nodeName;if(1===childNodes.length&&0===attributes.length&&"#text"===childName)return childResult;obj[childName]?Array.isArray(obj[childName])?obj[childName].push(childResult):obj[childName]=[obj[childName],childResult]:obj[childName]=childResult}else if(1===childNodes.length&&0===attributes.length)return element2.textContent}return obj}return null};return{[xmlDocument.documentElement.nodeName]:xmlToObj(xmlDocument.documentElement)}}function __awaiter(thisArg,_arguments,P3,generator){function adopt(value){return value instanceof P3?value:new P3(function(resolve){resolve(value)})}return new(P3||(P3=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e3){reject(e3)}}function rejected(value){try{step(generator.throw(value))}catch(e3){reject(e3)}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())})}function __generator(thisArg,body){function verb(n3){return function(v2){return step([n3,v2])}}function step(op){if(f4)throw new TypeError("Generator is already executing.");for(;g2&&(g2=0,op[0]&&(_=0)),_;)try{if(f4=1,y2&&(t9=2&op[0]?y2.return:op[0]?y2.throw||((t9=y2.return)&&t9.call(y2),0):y2.next)&&!(t9=t9.call(y2,op[1])).done)return t9;(y2=0,t9)&&(op=[2&op[0],t9.value]);switch(op[0]){case 0:case 1:t9=op;break;case 4:_.label++;return{value:op[1],done:!1};case 5:_.label++;y2=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t9=_.trys,t9=t9.length>0&&t9[t9.length-1])&&(6===op[0]||2===op[0])){_=0;continue}if(3===op[0]&&(!t9||op[1]>t9[0]&&op[1]<t9[3])){_.label=op[1];break}if(6===op[0]&&_.label<t9[1]){_.label=t9[1];t9=op;break}if(t9&&_.label<t9[2]){_.label=t9[2];_.ops.push(op);break}t9[2]&&_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e3){op=[6,e3];y2=0}finally{f4=t9=0}if(5&op[0])throw op[1];return{value:op[0]?op[1]:void 0,done:!0}}var f4,y2,t9,_={label:0,sent:function(){if(1&t9[0])throw t9[1];return t9[1]},trys:[],ops:[]},g2=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return g2.next=verb(0),g2.throw=verb(1),g2.return=verb(2),"function"==typeof Symbol&&(g2[Symbol.iterator]=function(){return this}),g2}function __values(o2){var s2="function"==typeof Symbol&&Symbol.iterator,m3=s2&&o2[s2],i2=0;if(m3)return m3.call(o2);if(o2&&"number"==typeof o2.length)return{next:function(){o2&&i2>=o2.length&&(o2=void 0);return{value:o2&&o2[i2++],done:!o2}}};throw new TypeError(s2?"Object is not iterable.":"Symbol.iterator is not defined.")}function convertToBuffer(data){return data instanceof Uint8Array?data:"string"==typeof data?fromUtf83(data):ArrayBuffer.isView(data)?new Uint8Array(data.buffer,data.byteOffset,data.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(data)}function isEmptyData(data){return"string"==typeof data?0===data.length:0===data.byteLength}function numToUint8(num){return new Uint8Array([(4278190080&num)>>24,(16711680&num)>>16,(65280&num)>>8,255&num])}function uint32ArrayFrom(a_lookUpTable2){var return_array,a_index;if(!Uint32Array.from){return_array=new Uint32Array(a_lookUpTable2.length);a_index=0;for(;a_index<a_lookUpTable2.length;){return_array[a_index]=a_lookUpTable2[a_index];a_index+=1}return return_array}return Uint32Array.from(a_lookUpTable2)}function resolveHostHeaderConfig(input){return input}function checkContentLengthHeader(){return(next2,context2)=>async args=>{var _a8;const{request:request2}=args;if(HttpRequest.isInstance(request2)&&!(CONTENT_LENGTH_HEADER in request2.headers)&&!(DECODED_CONTENT_LENGTH_HEADER in request2.headers)){const message="Are you using a Stream of unknown length as the Body of a PutObject request? Consider using Upload instead from @aws-sdk/lib-storage.";"function"!=typeof(null==(_a8=null==context2?void 0:context2.logger)?void 0:_a8.warn)||context2.logger instanceof NoOpLogger?console.warn(message):context2.logger.warn(message)}return next2({...args})}}function regionRedirectMiddleware(clientConfig){return(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;try{return await next2(args)}catch(err3){if(clientConfig.followRegionRedirects){const statusCode=null==(_a8=null==err3?void 0:err3.$metadata)?void 0:_a8.httpStatusCode,isHeadBucket="HeadBucketCommand"===context2.commandName,bucketRegionHeader=null==(_c3=null==(_b5=null==err3?void 0:err3.$response)?void 0:_b5.headers)?void 0:_c3["x-amz-bucket-region"];if(bucketRegionHeader&&(301===statusCode||400===statusCode&&("IllegalLocationConstraintException"===(null==err3?void 0:err3.name)||isHeadBucket))){try{const actualRegion=bucketRegionHeader;null==(_d2=context2.logger)||_d2.debug(`Redirecting from ${await clientConfig.region()} to ${actualRegion}`);context2.__s3RegionRedirect=actualRegion}catch(e3){throw new Error("Region redirect failed: "+e3)}return next2(args)}}throw err3}}}function getCredentialsWithoutSessionToken(credentials){return{accessKeyId:credentials.accessKeyId,secretAccessKey:credentials.secretAccessKey,expiration:credentials.expiration}}function setSingleOverride(privateAccess,credentialsWithoutSessionToken){const id=setTimeout(()=>{throw new Error("SignatureV4S3Express credential override was created but not called.")},10),currentCredentialProvider=privateAccess.credentialProvider;privateAccess.credentialProvider=()=>{clearTimeout(id);privateAccess.credentialProvider=currentCredentialProvider;return Promise.resolve(credentialsWithoutSessionToken)}}function bucketEndpointMiddleware(options){return(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;if(options.bucketEndpoint){const endpoint=context2.endpointV2;if(endpoint){const bucket=args.input.Bucket;if("string"==typeof bucket)try{const bucketEndpointUrl=new URL(bucket);context2.endpointV2={...endpoint,url:bucketEndpointUrl}}catch(e3){const warning=`@aws-sdk/middleware-sdk-s3: bucketEndpoint=true was set but Bucket=${bucket} could not be parsed as URL.`;"NoOpLogger"===(null==(_b5=null==(_a8=context2.logger)?void 0:_a8.constructor)?void 0:_b5.name)?console.warn(warning):null==(_d2=null==(_c3=context2.logger)?void 0:_c3.warn)||_d2.call(_c3,warning);throw e3}}}return next2(args)}}function validateBucketNameMiddleware({bucketEndpoint}){return next2=>async args=>{const{input:{Bucket}}=args;if(!bucketEndpoint&&"string"==typeof Bucket&&!validate(Bucket)&&Bucket.indexOf("/")>=0){const err3=new Error(`Bucket name shouldn't contain '/', received '${Bucket}'`);err3.name="InvalidBucketName";throw err3}return next2({...args})}}function isValidUserAgentAppId(appId){return void 0===appId||"string"==typeof appId&&appId.length<=50}function resolveUserAgentConfig(input){var _a8;const normalizedAppIdProvider=normalizeProvider2(null!=(_a8=input.userAgentAppId)?_a8:DEFAULT_UA_APP_ID),{customUserAgent}=input;return Object.assign(input,{customUserAgent:"string"==typeof customUserAgent?[[customUserAgent]]:customUserAgent,userAgentAppId:async()=>{var _a9,_b5;const appId=await normalizedAppIdProvider();if(!isValidUserAgentAppId(appId)){const logger2="NoOpLogger"!==(null==(_b5=null==(_a9=input.logger)?void 0:_a9.constructor)?void 0:_b5.name)&&input.logger?input.logger:console;"string"!=typeof appId?null==logger2||logger2.warn("userAgentAppId must be a string or undefined."):appId.length>50&&(null==logger2||logger2.warn("The provided userAgentAppId exceeds the maximum length of 50 characters."))}return appId}})}function toDebugString(input){return"object"!=typeof input||null==input?input:"ref"in input?`$${toDebugString(input.ref)}`:"fn"in input?`${input.fn}(${(input.argv||[]).map(toDebugString).join(", ")})`:JSON.stringify(input,null,2)}async function checkFeatures(context2,config,args){var _a8,_b5,_c3,_d2,_e2,_f;const request2=args.request;"rpc-v2-cbor"===(null==(_a8=null==request2?void 0:request2.headers)?void 0:_a8["smithy-protocol"])&&setFeature(context2,"PROTOCOL_RPC_V2_CBOR","M");if("function"==typeof config.retryStrategy){const retryStrategy=await config.retryStrategy();if("string"==typeof retryStrategy.mode)switch(retryStrategy.mode){case RETRY_MODES.ADAPTIVE:setFeature(context2,"RETRY_MODE_ADAPTIVE","F");break;case RETRY_MODES.STANDARD:setFeature(context2,"RETRY_MODE_STANDARD","E");break}}if("function"==typeof config.accountIdEndpointMode){const endpointV2=context2.endpointV2;String(null==(_b5=null==endpointV2?void 0:endpointV2.url)?void 0:_b5.hostname).match(ACCOUNT_ID_ENDPOINT_REGEX)&&setFeature(context2,"ACCOUNT_ID_ENDPOINT","O");switch(await(null==(_c3=config.accountIdEndpointMode)?void 0:_c3.call(config))){case"disabled":setFeature(context2,"ACCOUNT_ID_MODE_DISABLED","Q");break;case"preferred":setFeature(context2,"ACCOUNT_ID_MODE_PREFERRED","P");break;case"required":setFeature(context2,"ACCOUNT_ID_MODE_REQUIRED","R");break}}const identity=null==(_e2=null==(_d2=context2.__smithy_context)?void 0:_d2.selectedHttpAuthScheme)?void 0:_e2.identity;if(null==identity?void 0:identity.$source){const credentials=identity;credentials.accountId&&setFeature(context2,"RESOLVED_ACCOUNT_ID","T");for(const[key3,value]of Object.entries(null!=(_f=credentials.$source)?_f:{}))setFeature(context2,key3,value)}}function encodeFeatures(features){let buffer="";for(const key3 in features){const val=features[key3];if(!(buffer.length+val.length+1<=BYTE_LIMIT))break;buffer.length?buffer+=","+val:buffer+=val}return buffer}function contentLengthMiddleware(bodyLengthChecker){return next2=>async args=>{const request2=args.request;if(HttpRequest.isInstance(request2)){const{body,headers}=request2;if(body&&-1===Object.keys(headers).map(str=>str.toLowerCase()).indexOf(CONTENT_LENGTH_HEADER2))try{const length=bodyLengthChecker(body);request2.headers={...request2.headers,[CONTENT_LENGTH_HEADER2]:String(length)}}catch(error){}}return next2({...args,request:request2})}}function createAwsAuthSigv4HttpAuthOption(authParameters){return{schemeId:"aws.auth#sigv4",signingProperties:{name:"s3",region:authParameters.region},propertiesExtractor:(config,context2)=>({signingProperties:{config,context:context2}})}}function createAwsAuthSigv4aHttpAuthOption(authParameters){return{schemeId:"aws.auth#sigv4a",signingProperties:{name:"s3",region:authParameters.region},propertiesExtractor:(config,context2)=>({signingProperties:{config,context:context2}})}}function isEmptyData2(data){return"string"==typeof data?0===data.length:0===data.byteLength}function locateWindow(){return"undefined"!=typeof window?window:"undefined"!=typeof self?self:fallbackWindow}function convertToBuffer2(data){return"string"==typeof data?fromUtf84(data):ArrayBuffer.isView(data)?new Uint8Array(data.buffer,data.byteOffset,data.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(data)}function supportsWebCrypto(window2){return!(!supportsSecureRandom(window2)||"object"!=typeof window2.crypto.subtle)&&supportsSubtleCrypto(window2.crypto.subtle)}function supportsSecureRandom(window2){return"object"==typeof window2&&"object"==typeof window2.crypto&&"function"==typeof window2.crypto.getRandomValues}function supportsSubtleCrypto(subtle2){return subtle2&&subtleCryptoMethods.every(function(methodName){return"function"==typeof subtle2[methodName]})}function bufferFromSecret(secret){var bufferHash,buffer,input=convertToBuffer(secret);if(input.byteLength>BLOCK_SIZE){(bufferHash=new RawSha256).update(input);input=bufferHash.digest()}(buffer=new Uint8Array(BLOCK_SIZE)).set(input);return buffer}function negate2(bytes){for(let i2=0;i2<8;i2++)bytes[i2]^=255;for(let i2=7;i2>-1;i2--){bytes[i2]++;if(0!==bytes[i2])break}}function splitMessage({byteLength,byteOffset,buffer}){if(byteLength<MINIMUM_MESSAGE_LENGTH)throw new Error("Provided message too short to accommodate event stream message overhead");const view=new DataView(buffer,byteOffset,byteLength),messageLength=view.getUint32(0,!1);if(byteLength!==messageLength)throw new Error("Reported message length does not match received message length");const headerLength=view.getUint32(PRELUDE_MEMBER_LENGTH,!1),expectedPreludeChecksum=view.getUint32(PRELUDE_LENGTH,!1),expectedMessageChecksum=view.getUint32(byteLength-CHECKSUM_LENGTH,!1),checksummer=(new Crc32).update(new Uint8Array(buffer,byteOffset,PRELUDE_LENGTH));if(expectedPreludeChecksum!==checksummer.digest())throw new Error(`The prelude checksum specified in the message (${expectedPreludeChecksum}) does not match the calculated CRC32 checksum (${checksummer.digest()})`);checksummer.update(new Uint8Array(buffer,byteOffset+PRELUDE_LENGTH,byteLength-(PRELUDE_LENGTH+CHECKSUM_LENGTH)));if(expectedMessageChecksum!==checksummer.digest())throw new Error(`The message checksum (${checksummer.digest()}) did not match the expected value of ${expectedMessageChecksum}`);return{headers:new DataView(buffer,byteOffset+PRELUDE_LENGTH+CHECKSUM_LENGTH,headerLength),body:new Uint8Array(buffer,byteOffset+PRELUDE_LENGTH+CHECKSUM_LENGTH+headerLength,messageLength-headerLength-(PRELUDE_LENGTH+CHECKSUM_LENGTH+CHECKSUM_LENGTH))}}function getChunkedStream(source2){let currentMessageTotalLength=0,currentMessagePendingLength=0,currentMessage=null,messageLengthBuffer=null;const allocateMessage=size=>{if("number"!=typeof size)throw new Error("Attempted to allocate an event message where size was not a number: "+size);currentMessageTotalLength=size;currentMessagePendingLength=4;currentMessage=new Uint8Array(size);new DataView(currentMessage.buffer).setUint32(0,size,!1)};return{[Symbol.asyncIterator]:async function*(){const sourceIterator=source2[Symbol.asyncIterator]();for(;;){const{value,done}=await sourceIterator.next();if(done){if(!currentMessageTotalLength)return;if(currentMessageTotalLength!==currentMessagePendingLength)throw new Error("Truncated event message received.");yield currentMessage;return}const chunkLength=value.length;let currentOffset=0;for(;currentOffset<chunkLength;){if(!currentMessage){const bytesRemaining=chunkLength-currentOffset;messageLengthBuffer||(messageLengthBuffer=new Uint8Array(4));const numBytesForTotal=Math.min(4-currentMessagePendingLength,bytesRemaining);messageLengthBuffer.set(value.slice(currentOffset,currentOffset+numBytesForTotal),currentMessagePendingLength);currentMessagePendingLength+=numBytesForTotal;currentOffset+=numBytesForTotal;if(currentMessagePendingLength<4)break;allocateMessage(new DataView(messageLengthBuffer.buffer).getUint32(0,!1));messageLengthBuffer=null}const numBytesToWrite=Math.min(currentMessageTotalLength-currentMessagePendingLength,chunkLength-currentOffset);currentMessage.set(value.slice(currentOffset,currentOffset+numBytesToWrite),currentMessagePendingLength);currentMessagePendingLength+=numBytesToWrite;currentOffset+=numBytesToWrite;if(currentMessageTotalLength&&currentMessageTotalLength===currentMessagePendingLength){yield currentMessage;currentMessage=null;currentMessageTotalLength=0;currentMessagePendingLength=0}}}}}}function getMessageUnmarshaller(deserializer,toUtf82){return async function(message){const{value:messageType}=message.headers[":message-type"];if("error"===messageType){const unmodeledError=new Error(message.headers[":error-message"].value||"UnknownError");unmodeledError.name=message.headers[":error-code"].value;throw unmodeledError}if("exception"===messageType){const code=message.headers[":exception-type"].value,exception={[code]:message},deserializedException=await deserializer(exception);if(deserializedException.$unknown){const error=new Error(toUtf82(message.body));error.name=code;throw error}throw deserializedException[code]}if("event"===messageType){const event2={[message.headers[":event-type"].value]:message},deserialized=await deserializer(event2);if(deserialized.$unknown)return;return deserialized}throw Error(`Unrecognizable event type: ${message.headers[":event-type"].value}`)}}async function blobReader(blob,onChunk,chunkSize2=1048576){const size=blob.size;let totalBytesRead=0;for(;totalBytesRead<size;){const slice=blob.slice(totalBytesRead,Math.min(size,totalBytesRead+chunkSize2));onChunk(new Uint8Array(await slice.arrayBuffer()));totalBytesRead+=slice.size}}function cmn(q2,a2,b3,x2,s2,t9){return((a2=(a2+q2&4294967295)+(x2+t9&4294967295)&4294967295)<<s2|a2>>>32-s2)+b3&4294967295}function ff(a2,b3,c3,d4,x2,s2,t9){return cmn(b3&c3|~b3&d4,a2,b3,x2,s2,t9)}function gg(a2,b3,c3,d4,x2,s2,t9){return cmn(b3&d4|c3&~d4,a2,b3,x2,s2,t9)}function hh(a2,b3,c3,d4,x2,s2,t9){return cmn(b3^c3^d4,a2,b3,x2,s2,t9)}function ii(a2,b3,c3,d4,x2,s2,t9){return cmn(c3^(b3|~d4),a2,b3,x2,s2,t9)}function isEmptyData3(data){return"string"==typeof data?0===data.length:0===data.byteLength}function convertToBuffer3(data){return"string"==typeof data?fromUtf8(data):ArrayBuffer.isView(data)?new Uint8Array(data.buffer,data.byteOffset,data.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(data)}function ssecMiddleware(options){return next2=>async args=>{const input={...args.input},properties=[{target:"SSECustomerKey",hash:"SSECustomerKeyMD5"},{target:"CopySourceSSECustomerKey",hash:"CopySourceSSECustomerKeyMD5"}];for(const prop2 of properties){const value=input[prop2.target];if(value){let valueForHash;if("string"==typeof value)if(isValidBase64EncodedSSECustomerKey(value,options))valueForHash=options.base64Decoder(value);else{valueForHash=options.utf8Decoder(value);input[prop2.target]=options.base64Encoder(valueForHash)}else{valueForHash=ArrayBuffer.isView(value)?new Uint8Array(value.buffer,value.byteOffset,value.byteLength):new Uint8Array(value);input[prop2.target]=options.base64Encoder(valueForHash)}const hash3=new options.md5;hash3.update(valueForHash);input[prop2.hash]=options.base64Encoder(await hash3.digest())}}return next2({...args,input})}}function isValidBase64EncodedSSECustomerKey(str,options){if(!/^(?:[A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(str))return!1;try{return 32===options.base64Decoder(str).length}catch(e3){return!1}}function locationConstraintMiddleware(options){return next2=>async args=>{var _a8;const{CreateBucketConfiguration}=args.input,region=await options.region();if(!(null==CreateBucketConfiguration?void 0:CreateBucketConfiguration.LocationConstraint)&&!(null==CreateBucketConfiguration?void 0:CreateBucketConfiguration.Location)&&"us-east-1"!==region){args.input.CreateBucketConfiguration=null!=(_a8=args.input.CreateBucketConfiguration)?_a8:{};args.input.CreateBucketConfiguration.LocationConstraint=region}return next2(args)}}function deflateSync(data,opts){return dopt(data,opts||{},0,0)}function inflateSync(data,opts){return inflt(data,{i:2},opts&&opts.out,opts&&opts.dictionary)}async function _compressText(text2){const converted=tryConvertBase64ToArrayBuffer(text2),data=new Uint8Array(converted||await new Blob([text2],{type:"application/octet-stream"}).arrayBuffer());if(0==data.buffer.byteLength)return"";const df=await wrappedDeflate(new Uint8Array(data),{consume:!0,level:8});return(converted?"~":"")+await arrayBufferToBase64Single2(df)}async function _decompressText(compressed,_useUTF16=!1){if(0==compressed.length)return"";const converted="~"==compressed[0],src=compressed.substring(converted?1:0);if(0==src.length)return"";const ab2=new Uint8Array(base64ToArrayBuffer(src));if(0==ab2.length)return"";const ret=await wrappedInflate(new Uint8Array(ab2),{consume:!0});if(converted)return await arrayBufferToBase64Single2(ret);const response=new Blob([ret]);return await response.text()}async function compressDoc(doc){if(!("data"in doc))return doc;if("string"!=typeof doc.data)return doc;if(doc.data.startsWith(MARK_SHIFT_COMPRESSED))return doc;const oldData=doc.data,compressed=await _compressText(oldData),newData=MARK_SHIFT_COMPRESSED+compressed;doc.data.length>newData.length&&(doc.data=newData);return doc}async function decompressDoc(doc){if(!("data"in doc))return doc;if("string"!=typeof doc.data)return doc;doc.data.startsWith(MARK_SHIFT_COMPRESSED)&&(doc.data=await _decompressText(doc.data.substring(MARK_SHIFT_COMPRESSED.length)));return doc}function wrapFflateFunc(func){return(data,opts)=>new Promise((res2,rej)=>{func(data,opts,(err3,result)=>{err3?rej(err3):res2(new Uint8Array(result))})})}function isTextBlob2(blob){return"text/plain"===blob.type}function*pickPiece(leftData,minimumChunkSize){let buffer="";L1:do{const curLine=leftData.shift();if(void 0===curLine){yield buffer;break L1}if(curLine.startsWith("```")||curLine.startsWith(" ```")||curLine.startsWith(" ```")||curLine.startsWith(" ```")){yield buffer;buffer=curLine+(0!=leftData.length?"\n":"");L2:do{const curPx=leftData.shift();if(void 0===curPx)break L2;buffer+=curPx+(0!=leftData.length?"\n":"")}while(leftData.length>0&&!(leftData[0].startsWith("```")||leftData[0].startsWith(" ```")||leftData[0].startsWith(" ```")||leftData[0].startsWith(" ```")));const isLooksLikeBASE64=buffer.endsWith("="),maybeUneditable=buffer.length>2048,endOfCodeBlock=leftData.shift();if(void 0!==endOfCodeBlock){buffer+=endOfCodeBlock;buffer+=0!=leftData.length?"\n":""}if(isLooksLikeBASE64||maybeUneditable)yield buffer;else{const splitExpr=/(.*?[;,:<])/g,sx=buffer.split(splitExpr).filter(e3=>""!=e3);for(const v2 of sx)yield v2}buffer=""}else{buffer+=curLine+(0!=leftData.length?"\n":"");if(buffer.length>=minimumChunkSize||0==leftData.length||"#"==leftData[0]||"#"==buffer[0]){yield buffer;buffer=""}}}while(leftData.length>0)}function*splitStringWithinLength(text2,pieceSize){let leftData=text2;do{const splitSize=pieceSize,piece=leftData.substring(0,splitSize);leftData=leftData.substring(splitSize);yield piece}while(""!=leftData)}function*splitTextInSegment(text2,pieceSize,minimumChunkSize){const segments=segmenter.segment(text2);let prev="",buf="";for(const seg of segments){const buffer=seg.segment;if(prev==buffer||buf.length<minimumChunkSize){buf+=buffer;prev=buffer}else{prev=buffer;buf.length>0&&(yield*splitStringWithinLength(buf,pieceSize));buf=buffer}}buf.length>0&&(yield*splitStringWithinLength(buf,pieceSize))}function*splitInNewLine(texts){for(const text2 of texts){let start=-1,end=-1;do{end=text2.indexOf("\n",start);if(-1==end){yield text2.substring(start);break}for(;"\n"==text2[end];)end++;yield text2.substring(start,end);start=end}while(-1!=end)}}function splitPiecesTextV2(dataSrc,pieceSize,minimumChunkSize){const dataListAll=splitInNewLine("string"==typeof dataSrc?[dataSrc]:dataSrc);let inCodeBlock=0,flush2=!1,flushBefore=!1;return function*(){const buf=[];for(const line of dataListAll){if(line.startsWith("````")){if(0==inCodeBlock){inCodeBlock=4;flushBefore=!0}else if(4==inCodeBlock){inCodeBlock=0;flush2=!0}}else if(line.startsWith("```"))if(0==inCodeBlock){inCodeBlock=3;flushBefore=!0}else if(3==inCodeBlock){inCodeBlock=0;flush2=!0}if(flushBefore){if(buf.length>0){yield*splitTextInSegment(buf.join(""),pieceSize,minimumChunkSize);buf.length=0}flushBefore=!1}buf.push(line);if(flush2){if(buf.length>0){yield*splitStringWithinLength(buf.join(""),pieceSize);buf.length=0}flush2=!1}}buf.length>0&&(0==inCodeBlock?yield*splitTextInSegment(buf.join(""),pieceSize,minimumChunkSize):yield*splitStringWithinLength(buf.join(""),pieceSize))}}function binaryTextSplit(data,pieceSize,minimumChunkSize){return function*pieces(){yield*splitStringWithinLength(data,pieceSize)}}function splitPiecesText(dataSrc,pieceSize,plainSplit,minimumChunkSize,useSegmenter){return useSegmenter&&segmenter?plainSplit?splitPiecesTextV2(dataSrc,pieceSize,minimumChunkSize):binaryTextSplit(dataSrc,pieceSize):splitPiecesTextV1(dataSrc,pieceSize,plainSplit,minimumChunkSize)}function splitPiecesTextV1(dataSrc,pieceSize,plainSplit,minimumChunkSize){const dataList="string"==typeof dataSrc?[dataSrc]:dataSrc;return function*pieces(){for(const data of dataList)if(plainSplit){const f4=pickPiece(data.split("\n"),minimumChunkSize);for(const piece of f4){let buffer=piece;do{let ps=pieceSize;buffer.charCodeAt(ps-1)!=buffer.codePointAt(ps-1)&&ps++;yield buffer.substring(0,ps);buffer=buffer.substring(ps)}while(""!=buffer)}}else{let leftData=data;do{const splitSize=pieceSize,piece=leftData.substring(0,splitSize);leftData=leftData.substring(splitSize);yield piece}while(""!=leftData)}}}function*splitByDelimiterWithMinLength(sources,delimiter,minimumChunkLength=25,splitThreshold){let buf="",last=!1;const dl=delimiter.length;for(const source2 of sources){const max3=source2.length;if(splitThreshold&&max3>splitThreshold){yield buf+source2;last=!1;buf="";continue}let i2=-1,prev=0;L1:do{i2=source2.indexOf(delimiter,prev);if(-1==i2)break L1;buf+=source2.slice(prev,i2)+delimiter;if(buf.length>minimumChunkLength){yield buf;buf="";last=!1}else last=!0;prev=i2+dl}while(i2<max3);if(prev!=i2||-1==prev&&-1==i2){buf+=source2.slice(prev);last=!0}}last&&(yield buf)}function*chunkStringGenerator(source2,maxLength){const strLen=source2.length;if(strLen>maxLength){let from=0;do{let end=from+maxLength;if(end>strLen){yield source2.substring(from);break}for(;source2.charCodeAt(end-1)!=source2.codePointAt(end-1);)end++;yield source2.substring(from,end);from=end}while(from<strLen)}else yield source2}function*chunkStringGeneratorFromGenerator(sources,maxLength){for(const source2 of sources)yield*chunkStringGenerator(source2,maxLength)}function*stringGenerator(sources){for(const str of sources)yield str}async function splitPieces2V2(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,useSegmenter){if(0==dataSrc.size)return function*noItems(){};if(isTextBlob2(dataSrc)){const text2=await dataSrc.text();if(!plainSplit){const gen2=chunkStringGenerator(text2,pieceSize);return function*pieces(){yield*gen2}}const textLen=text2.length;let xMinimumChunkSize=minimumChunkSize;for(;textLen/xMinimumChunkSize>MAX_ITEMS;)xMinimumChunkSize+=minimumChunkSize;const gen=chunkStringGeneratorFromGenerator(splitByDelimiterWithMinLength(stringGenerator([text2]),"\n",xMinimumChunkSize),pieceSize);return function*pieces(){yield*gen}}let canBeSmall=!1,delimiter=0;if(filename&&filename.endsWith(".pdf"))delimiter="/".charCodeAt(0);else if(filename&&filename.endsWith(".json")){canBeSmall=!0;delimiter=",".charCodeAt(0)}const clampMin=canBeSmall?100:1e5;let step=1,w2=Math.max(clampMin,Math.min(1e8,dataSrc.size));for(;w2>10;){w2/=12.5;step++}minimumChunkSize=Math.floor(10**(step-1));return async function*piecesBlob(){const size=dataSrc.size;let i2=0;const buf=new Uint8Array(await dataSrc.arrayBuffer());do{const findStart=i2+minimumChunkSize,defaultSplitEnd=i2+pieceSize;let splitEnd,i1=buf.indexOf(delimiter,findStart);-1==i1&&(i1=buf.indexOf(charNewLine,findStart));splitEnd=-1==i1?defaultSplitEnd:i1<defaultSplitEnd?i1:defaultSplitEnd;yield await arrayBufferToBase64Single2(buf.slice(i2,splitEnd));i2=splitEnd}while(i2<size)}}async function splitPieces2(dataSrc,pieceSize,plainSplit,minimumChunkSize,filename,useSegmenter){if(isTextBlob2(dataSrc))return splitPiecesText(await dataSrc.text(),pieceSize,plainSplit,minimumChunkSize,null!=useSegmenter&&useSegmenter);let delimiter=0,canBeSmall=!1;if(filename&&filename.endsWith(".pdf"))delimiter="/".charCodeAt(0);else if(filename&&filename.endsWith(".json")){canBeSmall=!0;delimiter=",".charCodeAt(0)}const clampMin=canBeSmall?100:1e5;let step=1,w2=Math.max(clampMin,Math.min(1e8,dataSrc.size));for(;w2>10;){w2/=12.5;step++}minimumChunkSize=Math.floor(10**(step-1));return async function*piecesBlob(){const size=dataSrc.size;let i2=0;do{let splitSize=pieceSize;const currentData=new Uint8Array(await dataSrc.slice(i2,i2+pieceSize).arrayBuffer());let nextIdx=currentData.indexOf(delimiter,minimumChunkSize);splitSize=-1==nextIdx?pieceSize:Math.min(pieceSize,nextIdx);-1==nextIdx&&(nextIdx=currentData.indexOf(charNewLine,minimumChunkSize));const piece=currentData.slice(0,splitSize);i2+=piece.length;const b64=await arrayBufferToBase64Single2(piece);yield b64}while(i2<size)}}async function splitPiecesRabinKarp(dataSrc,absoluteMaxPieceSize,doPlainSplit,minimumChunkSize,_filename,_useSegmenter){const plainSplit=doPlainSplit||isTextBlob2(dataSrc),minPieceSize=plainSplit?128:4096,splitPieceCount=plainSplit?20:12,avgChunkSize=Math.max(minPieceSize,Math.floor(dataSrc.size/splitPieceCount)),maxChunkSize=Math.min(absoluteMaxPieceSize,5*avgChunkSize),minChunkSize=Math.min(Math.max(Math.floor(avgChunkSize/4),minimumChunkSize),maxChunkSize),hashModulus=avgChunkSize;let P_pow_w=1;for(let i2=0;i2<47;i2++)P_pow_w=Math.imul(P_pow_w,31);const buffer=new Uint8Array(await dataSrc.arrayBuffer());let pos=0,hash3=0,start=0;const isText=isTextBlob2(dataSrc),length=buffer.length;return async function*piecesBlob(){for(;pos<length;){const byte=buffer[pos];if(pos>=start+48){const oldByte=buffer[pos-48],oldByteTerm=Math.imul(oldByte,P_pow_w);hash3=hash3-oldByteTerm|0;hash3=Math.imul(hash3,31);hash3=hash3+byte|0}else{hash3=Math.imul(hash3,31);hash3=hash3+byte|0}const currentChunkSize=pos-start+1;let isBoundaryCandidate=!1;currentChunkSize>=minChunkSize&&(hash3>>>0)%hashModulus==1&&(isBoundaryCandidate=!0);currentChunkSize>=maxChunkSize&&(isBoundaryCandidate=!0);if(isBoundaryCandidate){let isSafeBoundary=!0;isText&&pos+1<length&&128==(192&buffer[pos+1])&&(isSafeBoundary=!1);if(isSafeBoundary){isText?yield Promise.resolve(readString(buffer.subarray(start,pos+1))):yield await arrayBufferToBase64Single2(buffer.subarray(start,pos+1));start=pos+1}}pos++}start<length&&(isText?yield Promise.resolve(readString(buffer.subarray(start,length))):yield await arrayBufferToBase64Single2(buffer.subarray(start,length)))}}async function createChunks(managers,dispFilename,note){const{chunkManager,splitter}=managers;let bufferedChunk=[],bufferedSize=0,writeCount=0,newCount=0,cachedCount=0,resultCachedCount=0,duplicatedCount=0,totalWritingCount=0,createChunkCount=0;const chunks=[];let writeChars=0;const flushBufferedChunks=async()=>{if(0===bufferedChunk.length){Logger(`No chunks to flush for ${dispFilename}`,LOG_LEVEL_VERBOSE);return!0}const writeBuf=[...bufferedChunk];bufferedSize=0;bufferedChunk=[];const result=await chunkManager.write(writeBuf,{skipCache:!1,timeout:0},note._id);if(!1===result.result){Logger(`Failed to write buffered chunks for ${dispFilename}`,LOG_LEVEL_NOTICE);return!1}totalWritingCount++;writeCount+=result.processed.written;resultCachedCount+=result.processed.cached;duplicatedCount+=result.processed.duplicated;writeChars+=writeBuf.map(e3=>e3.data.length).reduce((a2,b3)=>a2+b3,0);Logger(`Flushed ${writeBuf.length} (${writeChars}) chunks for ${dispFilename}`,LOG_LEVEL_VERBOSE);return!0},flushIfNeeded=async()=>{if(bufferedSize>2048e3&&!await flushBufferedChunks()){Logger(`Failed to flush buffered chunks for ${dispFilename}`,LOG_LEVEL_NOTICE);return!1}return!0},addBuffer=async(id,data)=>{const chunk={_id:id,data,type:"leaf"};bufferedChunk.push(chunk);chunks.push(chunk._id);bufferedSize+=chunk.data.length;return await flushIfNeeded()},pieces=await splitter.splitContent(note);let totalChunkCount=0;try{for await(const piece of pieces){totalChunkCount++;if(0===piece.length)continue;createChunkCount++;const chunk=await prepareChunk(managers,piece);cachedCount+=chunk.isNew?0:1;newCount+=chunk.isNew?1:0;if(!await addBuffer(chunk.id,chunk.piece))return!1}}catch(ex){Logger(`Error processing pieces for ${dispFilename}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}if(!await flushBufferedChunks())return!1;const dataSize=note.data.size;Logger(`Chunks processed for ${dispFilename} (${dataSize}): 📚:${totalChunkCount} (${createChunkCount}) , 📥:${totalWritingCount} (✨: ${newCount}, 🗃️: ${cachedCount} (${resultCachedCount}) / 🗄️: ${writeCount}, ♻:${duplicatedCount})`,LOG_LEVEL_VERBOSE);dataSize>0&&0===totalWritingCount&&Logger(`No data to save in ${dispFilename}!! This document may be corrupted in the local database! Please back it up immediately, and report an issue!`,LOG_LEVEL_NOTICE);return chunks}async function putDBEntry(host,managers,note,onlyChunks){const{localDatabase,chunkManager,splitter}=managers,filename=host.services.path.id2path(note._id,note),dispFilename=stripAllPrefixes(filename);note.eden||(note.eden={});if(!isTargetFile(host,filename)){Logger(`File skipped:${dispFilename}`,LOG_LEVEL_VERBOSE);return!1}const data=note.data instanceof Blob?note.data:createTextBlob(note.data);note.data=data;note.type=isTextBlob(data)?"plain":"newnote";note.datatype=note.type;await splitter.initialised;const result=await chunkManager.transaction(async()=>{var _a8;const chunks=await createChunks(managers,dispFilename,note);if(!1===chunks)return!1;if(onlyChunks)return{id:note._id,ok:!0,rev:"dummy"};const newDoc={children:chunks,_id:note._id,path:note.path,ctime:note.ctime,mtime:note.mtime,size:note.size,type:note.datatype,eden:{}};return null!=(_a8=await serialized("file:"+filename,async()=>{try{const old=await localDatabase.get(newDoc._id);newDoc._rev=old._rev}catch(ex){if(!isErrorOfMissingDoc(ex))throw ex}const r4=await localDatabase.put(newDoc,{force:!0});return!!r4.ok&&r4}))&&_a8});if(!1===result){Logger(`Failed to write document ${dispFilename}`,LOG_LEVEL_NOTICE);return!1}Logger(`Document saved: ${dispFilename} (${result.id.substring(0,8)}-${result.rev})`,LOG_LEVEL_VERBOSE);return result}function isTargetFile(host,filenameSrc){const settings=host.services.setting.currentSettings(),file=filenameSrc.startsWith(ICHeader)?filenameSrc.substring(ICHeader.length):filenameSrc;if(file.startsWith(ICXHeader))return!0;if(file.startsWith(PSCHeader))return!0;if(file.includes(":"))return!1;if(settings.syncOnlyRegEx){const syncOnly=getFileRegExp(settings,"syncOnlyRegEx");if(syncOnly.length>0&&!syncOnly.some(e3=>e3.test(file)))return!1}return!settings.syncIgnoreRegEx||!getFileRegExp(settings,"syncIgnoreRegEx").some(e3=>e3.test(file))}async function prepareChunk({chunkManager,hashManager},piece){const cachedChunkId=chunkManager.getChunkIDFromCache(piece);if(!1!==cachedChunkId)return{isNew:!1,id:cachedChunkId,piece};const chunkId=await hashManager.computeHash(piece);return{isNew:!0,id:`${IDPrefixes_Chunk}${chunkId}`,piece}}async function getDBEntryMetaByPath(host,{localDatabase},path2,opt,includeDeleted=!1){var _a8,_b5;if(!isTargetFile(host,path2))return!1;const id=await host.services.path.path2id(path2);try{let obj=null;obj=opt?await localDatabase.get(id,opt):await localDatabase.get(id);const deleted=null!=(_b5=null!=(_a8=null==obj?void 0:obj.deleted)?_a8:obj._deleted)?_b5:void 0;if(!includeDeleted&&deleted)return!1;if(obj.type&&"leaf"==obj.type)return!1;if(!obj.type||obj.type&&"notes"==obj.type||"newnote"==obj.type||"plain"==obj.type){const note=obj;let children=[],type="plain";if("newnote"==obj.type||"plain"==obj.type){children=obj.children;type=obj.type}return{data:"",_id:note._id,path:path2,ctime:note.ctime,mtime:note.mtime,size:note.size,_rev:obj._rev,_conflicts:obj._conflicts,children,datatype:type,deleted,type,eden:"eden"in obj?obj.eden:{}}}}catch(ex){if(isErrorOfMissingDoc(ex))return!1;throw ex}return!1}function isLegacyNote(meta){return!meta.type||meta.type&&"notes"==meta.type}function complementEntryMeta(note){var _a8,_b5;const deleted=null!=(_b5=null!=(_a8=note.deleted)?_a8:note._deleted)?_b5:void 0;return{data:note.data,path:note.path,_id:note._id,ctime:note.ctime,mtime:note.mtime,size:note.size,_rev:note._rev,_conflicts:note._conflicts,children:[],datatype:"newnote",deleted,type:"newnote",eden:"eden"in note?note.eden:{}}}function respondOldFashionedEntry(note,dump=!1){const doc=complementEntryMeta(note);if(dump){Logger("--Old fashioned document--");Logger(doc)}return doc}function canUseOnDemandChunking(settings){return settings.remoteType===REMOTE_COUCHDB&&!settings.useOnlyLocalChunk}function canFetchRemotely(settings){return!!canUseOnDemandChunking(settings)&&settings.remoteType!==RemoteTypes_REMOTE_MINIO}function computeChunkRetrievalMethod(waitForReady,settings){const isOnDemandFetchEnabled=canFetchRemotely(settings),isSequentialReplicator=settings.remoteType===RemoteTypes_REMOTE_MINIO;return waitForReady?isSequentialReplicator?{timeout:LEAF_WAIT_TIMEOUT_SEQUENTIAL_REPLICATOR,preventRemoteRequest:!0}:{timeout:LEAF_WAIT_TIMEOUT,preventRemoteRequest:!isOnDemandFetchEnabled}:isOnDemandFetchEnabled?{timeout:LEAF_WAIT_ONLY_REMOTE,preventRemoteRequest:!1}:{timeout:0,preventRemoteRequest:!0}}async function respondEntryFromMeta({localDatabase,chunkManager},settings,filename,meta,dump,waitForReady){var _a8,_b5,_c3;const dispFilename=stripAllPrefixes(filename),deleted=null!=(_b5=null!=(_a8=meta.deleted)?_a8:meta._deleted)?_b5:void 0;if(dump){const conflicts=await localDatabase.get(meta._id,{rev:meta._rev,conflicts:!0,revs_info:!0});Logger("-- Conflicts --");Logger(null!=(_c3=conflicts._conflicts)?_c3:"No conflicts");Logger("-- Revs info -- ");Logger(conflicts._revs_info)}try{if(dump){Logger("--Bare document--");Logger(meta)}let edenChunks={};if(meta.eden&&Object.keys(meta.eden).length>0){const chunks2=Object.entries(meta.eden).map(([id,data])=>({_id:id,data:data.data,type:"leaf"}));edenChunks=Object.fromEntries(chunks2.map(e3=>[e3._id,e3]))}const{timeout,preventRemoteRequest}=computeChunkRetrievalMethod(waitForReady,settings),childrenKeys=[...meta.children],chunks=await chunkManager.read(childrenKeys,{skipCache:!1,timeout,preventRemoteRequest},edenChunks);if(chunks.some(e3=>!1===e3))throw new Error("Load failed");const doc={data:chunks.map(e3=>e3.data),path:meta.path,_id:meta._id,ctime:meta.ctime,mtime:meta.mtime,size:meta.size,_rev:meta._rev,children:meta.children,datatype:meta.type,_conflicts:meta._conflicts,eden:meta.eden,deleted,type:meta.type};if(dump){Logger("--Loaded Document--");Logger(doc)}return doc}catch(ex){if(isErrorOfMissingDoc(ex)){Logger(`Missing document content!, could not read ${dispFilename}(${meta._id.substring(0,8)}) from database.`,LOG_LEVEL_NOTICE);return!1}Logger(`Something went wrong on reading ${dispFilename}(${meta._id.substring(0,8)}) from database:`,LOG_LEVEL_NOTICE);Logger(ex)}return!1}async function getDBEntryFromMeta(host,{localDatabase,chunkManager},meta,dump=!1,waitForReady=!0){const filename=host.services.path.id2path(meta._id,meta);if(!isTargetFile(host,filename))return!1;const settings=host.services.setting.currentSettings();return isLegacyNote(meta)?respondOldFashionedEntry(meta,dump):("newnote"==meta.type||"plain"==meta.type)&&await respondEntryFromMeta({localDatabase,chunkManager},settings,filename,meta,dump,waitForReady)}async function getDBEntryByPath(host,managers,path2,opt,dump=!1,waitForReady=!0,includeDeleted=!1){const meta=await getDBEntryMetaByPath(host,managers,path2,opt,includeDeleted);return!!meta&&await getDBEntryFromMeta(host,managers,meta,dump,waitForReady)}async function deleteDBEntryByPath(host,{localDatabase},path2,opt){var _a8;if(!isTargetFile(host,path2))return!1;const id=await host.services.path.path2id(path2);try{return null!=(_a8=await serialized("file:"+path2,async()=>{const settings=host.services.setting.currentSettings();let obj=null;obj=opt?await localDatabase.get(id,opt):await localDatabase.get(id);const revDeletion=opt&&""!=("rev"in opt?opt.rev:"");if(obj.type&&"leaf"==obj.type)return!1;if(!obj.type||obj.type&&"notes"==obj.type){obj._deleted=!0;const r4=await localDatabase.put(obj,{force:!revDeletion});Logger(`Entry removed: ${path2} (${obj._id.substring(0,8)}-${r4.rev}) `);return!0}if("newnote"==obj.type||"plain"==obj.type){if(revDeletion)obj._deleted=!0;else{obj.deleted=!0;obj.mtime=Date.now();settings.deleteMetadataOfDeletedFiles&&(obj._deleted=!0)}const r4=await localDatabase.put(obj,{force:!revDeletion});Logger(`Entry removed: [${revDeletion?"REV":"DEL"}] ${path2} (${obj._id.substring(0,8)}-${r4.rev})`);return!0}return!1}))&&_a8}catch(ex){if(isErrorOfMissingDoc(ex))return!1;throw ex}}function getNoFromRev(rev3){return rev3?parseInt(rev3.split("-")[0]):0}function serializeDoc(doc){if(doc._id.startsWith("h:")){const writeData=escapeNewLineFromString(doc.data);return te4.encode(`~${doc._id}${UNIT_SPLIT}${writeData}${RECORD_SPLIT}`)}return te4.encode(JSON.stringify(doc)+RECORD_SPLIT)}function paneChangeLog(paneEl){var _a8,_b5;const cx2=this.createEl(paneEl,"div",{cls:"op-warn-info"},void 0,visibleOnly(()=>!this.isConfiguredAs("versionUpFlash","")));this.createEl(cx2,"div",{text:this.editingSettings.versionUpFlash},void 0);this.createEl(cx2,"button",{text:$msg("obsidianLiveSyncSettingTab.btnGotItAndUpdated")},e3=>{e3.addClass("mod-cta");e3.addEventListener("click",()=>{fireAndForget(async()=>{this.editingSettings.versionUpFlash="";await this.saveAllDirtySettings()})})});const informationDivEl=this.createEl(paneEl,"div",{text:""}),tmpDiv=createDiv();tmpDiv.addClass("op-warn-info");tmpDiv.innerHTML=`<p>${$msg("obsidianLiveSyncSettingTab.msgNewVersionNote")}</p><button>${$msg("obsidianLiveSyncSettingTab.optionOkReadEverything")}</button>`;if(lastVersion>((null==(_a8=this.editingSettings)?void 0:_a8.lastReadUpdates)||0)){const informationButtonDiv=informationDivEl.appendChild(tmpDiv);null==(_b5=informationButtonDiv.querySelector("button"))||_b5.addEventListener("click",()=>{fireAndForget(async()=>{this.editingSettings.lastReadUpdates=lastVersion;await this.saveAllDirtySettings();informationButtonDiv.remove()})})}fireAndForget(()=>import_obsidian.MarkdownRenderer.render(this.plugin.app,updateInformation,informationDivEl,"/",this.plugin))}function setupDialogContext(controls){setContext(CONTEXT_DIALOG_CONTROLS,controls)}function getDialogContext(){return getContext(CONTEXT_DIALOG_CONTROLS)}function DialogHeader($$anchor,$$props){var div,h22,text2,node,consequent;push($$props,!0);append_styles($$anchor,$$css6);user_effect(()=>{$$props.title&&context2.setTitle(`${$$props.title}${$$props.subtitle?` - ${$$props.subtitle}`:""}`)});const context2=getDialogContext();onMount(async()=>{var _a8;context2.setTitle(`${$$props.title}${$$props.subtitle?` - ${$$props.subtitle}`:""}`);await tick();null===(_a8=document.querySelector(".modal"))||void 0===_a8||_a8.scrollTo(0,0)});h22=child(div=root5());text2=child(h22,!0);reset(h22);node=sibling(h22,2);consequent=$$anchor2=>{var h4=root_110(),text_1=child(h4,!0);reset(h4);template_effect(()=>set_text(text_1,$$props.subtitle));append($$anchor2,h4)};if_block(node,$$render=>{$$props.subtitle&&$$render(consequent)});reset(div);template_effect(()=>set_text(text2,$$props.title));append($$anchor,div);pop()}function Guidance($$anchor,$$props){"use strict";var div,node,consequent;const cssClass=user_derived(()=>$$props.important?"guidance important":"guidance");node=child(div=root6());consequent=$$anchor2=>{var h3=root_111(),text2=child(h3,!0);reset(h3);template_effect(()=>set_text(text2,$$props.title));append($$anchor2,h3)};if_block(node,$$render=>{$$props.title&&$$render(consequent)});snippet(sibling(node,2),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div);template_effect(()=>set_class(div,1,clsx2(get(cssClass))));append($$anchor,div)}function onclick(_,$$props){fireAndForget(async()=>$$props.commit())}function Decision($$anchor,$$props){var button,text2;push($$props,!0);(button=root7()).__click=[onclick,$$props];text2=child(button,!0);reset(button);template_effect(()=>{var _a8;set_class(button,1,`button ${null!=(_a8=$$props.additionalClasses)?_a8:""} ${$$props.important?"mod-cta":""} ${$$props.destructive?"mod-destructive":""}`);button.disabled=$$props.disabled;set_text(text2,$$props.title)});append($$anchor,button);pop()}function Question($$anchor,$$props){var div,node,consequent,div_1;push($$props,!0);append_styles($$anchor,$$css7);setContext("radioGroup",Math.random().toString(36).substring(2,15));node=child(div=root8());consequent=$$anchor2=>{var h3=root_113();snippet(child(h3),()=>{var _a8;return null!=(_a8=$$props.question)?_a8:noop2});reset(h3);append($$anchor2,h3)};if_block(node,$$render=>{$$props.question&&$$render(consequent)});snippet(child(div_1=sibling(node,2)),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div_1);reset(div);append($$anchor,div);pop()}function Option($$anchor,$$props){var div,label2,div_1,input,input_value,span,text2,div_2,node,consequent,alternate;push($$props,!0);append_styles($$anchor,$$css8);const definedGroupContext=getContext("radioGroup");let value=prop($$props,"value",15);const actualGroup=null!==$$props.group&&void 0!==$$props.group?$$props.group:definedGroupContext;label2=child(div=root9());div_1=child(label2);remove_input_defaults(input=child(div_1));span=sibling(input,2);text2=child(span,!0);reset(span);reset(div_1);node=child(div_2=sibling(div_1,2));consequent=$$anchor2=>{var fragment=comment();snippet(first_child(fragment),()=>$$props.noteOnSelected);append($$anchor2,fragment)};alternate=$$anchor2=>{var fragment_1=comment(),node_2=first_child(fragment_1),consequent_1=$$anchor3=>{var fragment_2=comment();snippet(first_child(fragment_2),()=>$$props.noteOnUnselected);append($$anchor3,fragment_2)};if_block(node_2,$$render=>{value()!==$$props.selectedValue&&$$props.noteOnUnselected&&$$render(consequent_1)},!0);append($$anchor2,fragment_1)};if_block(node,$$render=>{value()===$$props.selectedValue&&$$props.noteOnSelected?$$render(consequent):$$render(alternate,!1)});snippet(sibling(node,2),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div_2);reset(label2);reset(div);template_effect(()=>{var _a8;set_class(div,1,"option-container "+(value()===$$props.selectedValue?"selected":""),"svelte-1h8m5at");set_attribute2(input,"name",actualGroup);input_value!==(input_value=$$props.selectedValue)&&(input.value=null!=(_a8=input.__value=$$props.selectedValue)?_a8:"");set_text(text2,$$props.title)});bind_group([],[],input,()=>{$$props.selectedValue;return value()},value);append($$anchor,div);pop()}function Options($$anchor,$$props){var div;push($$props,!0);setContext("radioGroup",Math.random().toString(36).substring(2,15));snippet(child(div=root10()),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div);append($$anchor,div);pop()}function Instruction($$anchor,$$props){var div=root11();snippet(child(div),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div);append($$anchor,div)}function UserDecisions($$anchor,$$props){var div=root12(),node=child(div),consequent=$$anchor2=>{var fragment=comment();snippet(first_child(fragment),()=>$$props.children);append($$anchor2,fragment)};if_block(node,$$render=>{$$props.children&&$$render(consequent)});reset(div);append($$anchor,div)}function Intro($$anchor,$$props){var fragment,node,node_1,node_2;push($$props,!0);let userType=state("cancelled"),proceedTitle=user_derived(()=>"new-user"===get(userType)?"Yes, I want to set up a new synchronisation":"existing-user"===get(userType)?"Yes, I want to add this device to my existing synchronisation":"Please select an option to proceed");const canProceed=user_derived(()=>"new-user"===get(userType)||"existing-user"===get(userType));DialogHeader(node=first_child(fragment=root13()),{title:"Welcome to Self-hosted LiveSync"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("We will now guide you through a few questions to simplify the synchronisation setup."))},$$slots:{default:!0}});Instruction(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{var fragment_1=root_24(),node_3=first_child(fragment_1);Question(node_3,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("First, please select the option that best describes your current situation."))},$$slots:{default:!0}});Options(sibling(node_3,2),{children:($$anchor3,$$slotProps2)=>{var fragment_2=root_44(),node_5=first_child(fragment_2);Option(node_5,{selectedValue:"new-user",title:"I am setting this up for the first time",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("(Select this if you are configuring this device as the first synchronisation device.) This option is\n suitable if you are new to LiveSync and want to set it up from scratch."))},$$slots:{default:!0}});Option(sibling(node_5,2),{selectedValue:"existing-user",title:"I am adding a device to an existing synchronisation setup",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("(Select this if you are already using synchronisation on another computer or smartphone.) This option is\n suitable if you are new to LiveSync and want to set it up from scratch."))},$$slots:{default:!0}});append($$anchor3,fragment_2)},$$slots:{default:!0}});append($$anchor2,fragment_1)},$$slots:{default:!0}});UserDecisions(sibling(node_2,2),{children:($$anchor2,$$slotProps)=>{var fragment_3=root_72(),node_8=first_child(fragment_3);let $0=user_derived(()=>!get(canProceed));Decision(node_8,{get title(){return get(proceedTitle)},get important(){return get(canProceed)},get disabled(){return get($0)},commit:()=>$$props.setResult(get(userType))});Decision(sibling(node_8,2),{title:"No, please take me back",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_3)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function InfoNote($$anchor,$$props){"use strict";var fragment,node,consequent_1;const isInfo=prop($$props,"info",3,!0),derivedCssClass=user_derived(()=>$$props.error?"note-error":$$props.warning?"note-important":isInfo()?"note":"");node=first_child(fragment=comment());consequent_1=$$anchor2=>{var div=root_114(),node_1=child(div),consequent=$$anchor3=>{var h3=root_25(),text2=child(h3,!0);reset(h3);template_effect(()=>set_text(text2,$$props.title));append($$anchor3,h3)};if_block(node_1,$$render=>{$$props.title&&$$render(consequent)});snippet(sibling(node_1,2),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div);template_effect(()=>{var _a8;return set_class(div,1,(null!=(_a8=$$props.cssClass)?_a8:"")+" "+get(derivedCssClass))});append($$anchor2,div)};if_block(node,$$render=>{void 0!==$$props.visible&&!0!==$$props.visible||$$render(consequent_1)});append($$anchor,fragment)}function ExtraItems($$anchor,$$props){"use strict";var div,details=root14(),summary=child(details),text2=child(summary,!0);reset(summary);snippet(child(div=sibling(summary,2)),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div);reset(details);template_effect(()=>set_text(text2,$$props.title));append($$anchor,details)}function Check($$anchor,$$props){var fragment,label2,input,span,text2,div,node,consequent,alternate;push($$props,!0);append_styles($$anchor,$$css9);let value=prop($$props,"value",15);remove_input_defaults(input=child(label2=first_child(fragment=root15())));span=sibling(input,2);text2=child(span,!0);reset(span);reset(label2);node=child(div=sibling(label2,2));consequent=$$anchor2=>{var fragment_1=comment();snippet(first_child(fragment_1),()=>$$props.noteOnSelected);append($$anchor2,fragment_1)};alternate=$$anchor2=>{var fragment_2=comment(),node_2=first_child(fragment_2),consequent_1=$$anchor3=>{var fragment_3=comment();snippet(first_child(fragment_3),()=>$$props.noteOnUnselected);append($$anchor3,fragment_3)};if_block(node_2,$$render=>{!value()&&$$props.noteOnUnselected&&$$render(consequent_1)},!0);append($$anchor2,fragment_2)};if_block(node,$$render=>{value()&&$$props.noteOnSelected?$$render(consequent):$$render(alternate,!1)});snippet(sibling(node,2),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(div);template_effect(()=>set_text(text2,$$props.title));bind_checked(input,value);append($$anchor,fragment);pop()}function SelectMethodNewUser($$anchor,$$props){var fragment,node,node_1,node_2;push($$props,!0);let userType=state("cancelled"),proceedTitle=user_derived(()=>"use-setup-uri"===get(userType)?"Proceed with Setup URI":"configure-manually"===get(userType)?"I know my server details, let me enter them":"Please select an option to proceed");const canProceed=user_derived(()=>"use-setup-uri"===get(userType)||"configure-manually"===get(userType));DialogHeader(node=first_child(fragment=root16()),{title:"Connection Method"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("We will now proceed with the server configuration."))},$$slots:{default:!0}});Instruction(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{var fragment_1=root_26(),node_3=first_child(fragment_1);Question(node_3,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("How would you like to configure the connection to your server?"))},$$slots:{default:!0}});Options(sibling(node_3,2),{children:($$anchor3,$$slotProps2)=>{var fragment_2=root_45(),node_5=first_child(fragment_2);Option(node_5,{selectedValue:"use-setup-uri",title:"Use a Setup URI (Recommended)",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("A Setup URI is a single string of text containing your server address and authentication details. Using a\n URI, if one was generated by your server installation script, provides a simple and secure configuration."))},$$slots:{default:!0}});Option(sibling(node_5,2),{selectedValue:"configure-manually",title:"Enter the server information manually",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("This is an advanced option for users who do not have a URI or who wish to configure detailed settings."))},$$slots:{default:!0}});append($$anchor3,fragment_2)},$$slots:{default:!0}});append($$anchor2,fragment_1)},$$slots:{default:!0}});UserDecisions(sibling(node_2,2),{children:($$anchor2,$$slotProps)=>{var fragment_3=root_73(),node_8=first_child(fragment_3);let $0=user_derived(()=>!get(canProceed));Decision(node_8,{get title(){return get(proceedTitle)},get important(){return get(canProceed)},get disabled(){return get($0)},commit:()=>$$props.setResult(get(userType))});Decision(sibling(node_8,2),{title:"Cancel",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_3)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function SelectMethodExisting($$anchor,$$props){var fragment,node,node_1,node_2;push($$props,!0);let userType=state("cancelled"),proceedTitle=user_derived(()=>"use-setup-uri"===get(userType)?"Proceed with Setup URI":"configure-manually"===get(userType)?"I know my server details, let me enter them":"scan-qr-code"===get(userType)?"Scan the QR code displayed on an active device using this device's camera.":"Please select an option to proceed");const canProceed=user_derived(()=>"use-setup-uri"===get(userType)||"configure-manually"===get(userType)||"scan-qr-code"===get(userType));DialogHeader(node=first_child(fragment=root17()),{title:"Device Setup Method"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("You are adding this device to an existing synchronisation setup."))},$$slots:{default:!0}});Instruction(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{var fragment_1=root_27(),node_3=first_child(fragment_1);Question(node_3,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Please select a method to import the settings from another device."))},$$slots:{default:!0}});Options(sibling(node_3,2),{children:($$anchor3,$$slotProps2)=>{var node_6,fragment_2=root_46(),node_5=first_child(fragment_2);Option(node_5,{selectedValue:"use-setup-uri",title:"Use a Setup URI (Recommended)",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Paste the Setup URI generated from one of your active devices."))},$$slots:{default:!0}});Option(node_6=sibling(node_5,2),{selectedValue:"scan-qr-code",title:"Scan a QR Code (Recommended for mobile)",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Scan the QR code displayed on an active device using this device's camera."))},$$slots:{default:!0}});Option(sibling(node_6,2),{selectedValue:"configure-manually",title:"Enter the server information manually",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Configure the same server information as your other devices again, manually, very advanced users only."))},$$slots:{default:!0}});append($$anchor3,fragment_2)},$$slots:{default:!0}});append($$anchor2,fragment_1)},$$slots:{default:!0}});UserDecisions(sibling(node_2,2),{children:($$anchor2,$$slotProps)=>{var fragment_3=root_83(),node_9=first_child(fragment_3);let $0=user_derived(()=>!get(canProceed));Decision(node_9,{get title(){return get(proceedTitle)},get important(){return get(canProceed)},get disabled(){return get($0)},commit:()=>$$props.setResult(get(userType))});Decision(sibling(node_9,2),{title:"Cancel",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_3)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function ScanQRCode($$anchor,$$props){var fragment,node,node_1,node_2;push($$props,!0);DialogHeader(node=first_child(fragment=root18()),{title:"Scan QR Code"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("Please follow the steps below to import settings from your existing device."))},$$slots:{default:!0}});Instruction(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{append($$anchor2,root_28())},$$slots:{default:!0}});UserDecisions(sibling(node_2,2),{children:($$anchor2,$$slotProps)=>{Decision($$anchor2,{title:"Close this dialog",important:!0,commit:()=>$$props.setResult("close")})},$$slots:{default:!0}});append($$anchor,fragment);pop()}function InputRow($$anchor,$$props){"use strict";var label_1=root19(),span=child(label_1),text2=child(span,!0);reset(span);snippet(sibling(span,2),()=>{var _a8;return null!=(_a8=$$props.children)?_a8:noop2});reset(label_1);template_effect(()=>set_text(text2,$$props.label));append($$anchor,label_1)}function Password($$anchor,$$props){var fragment,input,input_1;push($$props,!0);let value=prop($$props,"value",15),name=prop($$props,"name",3,"password"),placeholder=prop($$props,"placeholder",3,"Enter your password"),disabled=prop($$props,"disabled",3,!1),required=prop($$props,"required",3,!1),showPassword=state(!1);const type=user_derived(()=>get(showPassword)?"text":"password");fragment=root20();remove_input_defaults(input=first_child(fragment));remove_input_defaults(input_1=sibling(input,2));template_effect(()=>{set_attribute2(input,"type",get(type));set_attribute2(input,"name",name());set_attribute2(input,"placeholder",placeholder());input.disabled=disabled();input.required=required()});bind_value(input,value);bind_checked(input_1,()=>get(showPassword),$$value=>set(showPassword,$$value));append($$anchor,fragment);pop()}async function encryptString(source2,passphrase){return source2.startsWith(ENCRYPT_V2_PREFIX)||source2.startsWith(HKDF_SALTED_ENCRYPTED_PREFIX)?source2:await encryptWithEphemeralSalt(source2,passphrase)}async function tryDecryption(trials){for(const trial of trials)try{return await trial()}catch(error){Logger(`Decryption trial failed: ${error}`,LOG_LEVEL_VERBOSE)}throw new Error("All decryption trials failed")}async function decryptString(encrypted,passphrase){if(encrypted.startsWith(HKDF_SALTED_ENCRYPTED_PREFIX))return decryptWithEphemeralSalt(encrypted,passphrase);if(encrypted.startsWith(ENCRYPT_V2_PREFIX)||encrypted.startsWith(ENCRYPT_V3_PREFIX)||encrypted.startsWith(ENCRYPT_V1_PREFIX_PROBABLY))return await tryDecryption([async()=>await decrypt3(encrypted,passphrase,!1),async()=>await decrypt3(encrypted,passphrase,!0)]);throw new Error("Unsupported encryption format")}function UseSetupURI($$anchor,$$props){async function processSetupURI(){set(error,"");if(get(seemsValid))if(get(passphrase))try{const settingPieces=get(setupURI).substring(configURIBase.length),encodedConfig=decodeURIComponent(settingPieces),newConf=await JSON.parse(await decryptString(encodedConfig,get(passphrase)));$$props.setResult(newConf);return}catch(e3){set(error,"Failed to parse Setup-URI.");return}else set(error,"Passphrase is required.")}async function canProceed(){var _a8;return null!==(_a8=await processSetupURI())&&void 0!==_a8&&_a8}var fragment,node,node_1,node_2,node_3,node_4,node_5,node_6;push($$props,!0);let setupURI=state(""),passphrase=state(""),error=state("");onMount(()=>{if($$props.getInitialData){const initialURI=$$props.getInitialData();initialURI&&set(setupURI,initialURI,!0)}});const seemsValid=user_derived(()=>get(setupURI).startsWith(configURIBase));DialogHeader(node=first_child(fragment=root21()),{title:"Enter Setup URI"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();var fragment_1=root_115();next(2);append($$anchor2,fragment_1)},$$slots:{default:!0}});InputRow(node_2=sibling(node_1,2),{label:"Setup-URI",children:($$anchor2,$$slotProps)=>{var input=root_29();remove_input_defaults(input);bind_value(input,()=>get(setupURI),$$value=>set(setupURI,$$value));append($$anchor2,input)},$$slots:{default:!0}});InfoNote(node_3=sibling(node_2,2),{get visible(){return get(seemsValid)},children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("The Setup-URI is valid and ready to use."))},$$slots:{default:!0}});node_4=sibling(node_3,2);{let $0=user_derived(()=>!get(seemsValid)&&""!=get(setupURI).trim());InfoNote(node_4,{warning:!0,get visible(){return get($0)},children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("The Setup-URI does not appear to be valid. Please check that you have copied it correctly."))},$$slots:{default:!0}})}InputRow(node_5=sibling(node_4,2),{label:"Passphrase",children:($$anchor2,$$slotProps)=>{Password($$anchor2,{placeholder:"Enter your passphrase",required:!0,get value(){return get(passphrase)},set value($$value){set(passphrase,$$value,!0)}})},$$slots:{default:!0}});node_6=sibling(node_5,2);{let $0=user_derived(()=>""!=get(error).trim());InfoNote(node_6,{error:!0,get visible(){return get($0)},children:($$anchor2,$$slotProps)=>{next();var text_2=text();template_effect(()=>set_text(text_2,get(error)));append($$anchor2,text_2)},$$slots:{default:!0}})}UserDecisions(sibling(node_6,2),{children:($$anchor2,$$slotProps)=>{var fragment_4=root_74(),node_8=first_child(fragment_4);Decision(node_8,{title:"Test Settings and Continue",important:!0,disabled:!canProceed,commit:()=>processSetupURI()});Decision(sibling(node_8,2),{title:"Cancel",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_4)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function OutroNewUser($$anchor,$$props){var fragment,node,node_1,node_2;push($$props,!0);DialogHeader(node=first_child(fragment=root22()),{title:"Setup Complete: Preparing to Initialise Server"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{var fragment_1=root_116();next(2);append($$anchor2,fragment_1)},$$slots:{default:!0}});Instruction(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{Question($$anchor2,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Please select the button below to restart and proceed to the final confirmation."))},$$slots:{default:!0}})},$$slots:{default:!0}});UserDecisions(sibling(node_2,2),{children:($$anchor2,$$slotProps)=>{var fragment_3=root_47(),node_4=first_child(fragment_3);Decision(node_4,{title:"Restart and Initialise Server",important:!0,commit:()=>$$props.setResult("apply")});Decision(sibling(node_4,2),{title:"No, please take me back",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_3)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function OutroExistingUser($$anchor,$$props){var fragment,node,node_1,node_2;push($$props,!0);DialogHeader(node=first_child(fragment=root23()),{title:"Setup Complete: Preparing to Fetch Synchronisation Data"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{var fragment_1=root_117();next(2);append($$anchor2,fragment_1)},$$slots:{default:!0}});Instruction(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{Question($$anchor2,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Please select the button below to restart and proceed to the data fetching confirmation."))},$$slots:{default:!0}})},$$slots:{default:!0}});UserDecisions(sibling(node_2,2),{children:($$anchor2,$$slotProps)=>{var fragment_3=root_48(),node_4=first_child(fragment_3);Decision(node_4,{title:"Restart and Fetch Data",important:!0,commit:()=>$$props.setResult("apply")});Decision(sibling(node_4,2),{title:"No, please take me back",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_3)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function OutroAskUserMode($$anchor,$$props){var fragment,node,node_1,node_2;push($$props,!0);let userType=state("cancelled");const canProceed=user_derived(()=>"existing-user"===get(userType)||"new-user"===get(userType)||"compatible-existing-user"===get(userType)),proceedMessage=user_derived(()=>"new-user"===get(userType)||"existing-user"===get(userType)?"Proceed to the next step.":"compatible-existing-user"===get(userType)?"Apply the settings":"Please select an option to proceed");DialogHeader(node=first_child(fragment=root24()),{title:"Mostly Complete: Decision Required"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();var fragment_1=root_118();next();append($$anchor2,fragment_1)},$$slots:{default:!0}});Instruction(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{var node_4,node_5,fragment_2=root_210(),node_3=first_child(fragment_2);Question(node_3,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Please select your situation."))},$$slots:{default:!0}});Option(node_4=sibling(node_3,2),{title:"I am setting up a new server for the first time / I want to reset my existing server.",selectedValue:"new-user",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor3,$$slotProps2)=>{InfoNote($$anchor3,{children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Selecting this option will result in the current data on this device being used to initialise the server.\n Any existing data on the server will be completely overwritten."))},$$slots:{default:!0}})},$$slots:{default:!0}});Option(node_5=sibling(node_4,2),{title:"My remote server is already set up. I want to join this device.",selectedValue:"existing-user",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor3,$$slotProps2)=>{InfoNote($$anchor3,{children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Selecting this option will result in this device joining the existing server. You need to fetching the\n existing synchronisation data from the server to this device."))},$$slots:{default:!0}})},$$slots:{default:!0}});Option(sibling(node_5,2),{title:"The remote is already set up, and the configuration is compatible (or got compatible by this operation).",selectedValue:"compatible-existing-user",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor3,$$slotProps2)=>{InfoNote($$anchor3,{warning:!0,children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Unless you are certain, selecting this options is bit dangerous. It assumes that the server configuration is\n compatible with this device. If this is not the case, data loss may occur. Please ensure you know what you\n are doing."))},$$slots:{default:!0}})},$$slots:{default:!0}});append($$anchor2,fragment_2)},$$slots:{default:!0}});UserDecisions(sibling(node_2,2),{children:($$anchor2,$$slotProps)=>{var fragment_6=root_102(),node_8=first_child(fragment_6);let $0=user_derived(()=>!get(canProceed));Decision(node_8,{get title(){return get(proceedMessage)},important:!0,get disabled(){return get($0)},commit:()=>$$props.setResult(get(userType))});Decision(sibling(node_8,2),{title:"No, please take me back",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_6)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function SetupRemote($$anchor,$$props){var fragment,node,node_1;push($$props,!0);let userType=state("cancelled"),proceedTitle=user_derived(()=>"couchdb"===get(userType)?"Continue to CouchDB setup":"bucket"===get(userType)?"Continue to S3/MinIO/R2 setup":"p2p"===get(userType)?"Continue to Peer-to-Peer only setup":"Please select an option to proceed");const canProceed=user_derived(()=>"couchdb"===get(userType)||"bucket"===get(userType)||"p2p"===get(userType));DialogHeader(node=first_child(fragment=root25()),{title:"Enter Server Information"});Instruction(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{var fragment_1=root_119(),node_2=first_child(fragment_1);Question(node_2,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Please select the type of server to which you are connecting."))},$$slots:{default:!0}});Options(sibling(node_2,2),{children:($$anchor3,$$slotProps2)=>{var node_5,fragment_2=root_33(),node_4=first_child(fragment_2);Option(node_4,{selectedValue:"couchdb",title:"CouchDB",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("This is the most suitable synchronisation method for the design. All functions are available. You must have\n set up a CouchDB instance."))},$$slots:{default:!0}});Option(node_5=sibling(node_4,2),{selectedValue:"bucket",title:"S3/MinIO/R2 Object Storage",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Synchronisation utilising journal files. You must have set up an S3/MinIO/R2 compatible object storage."))},$$slots:{default:!0}});Option(sibling(node_5,2),{selectedValue:"p2p",title:"Peer-to-Peer only",get value(){return get(userType)},set value($$value){set(userType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("This feature enables direct synchronisation between devices. No server is required, but both devices must be\n online at the same time for synchronisation to occur, and some features may be limited. Internet connection\n is only required to signalling (detecting peers) and not for data transfer."))},$$slots:{default:!0}});append($$anchor3,fragment_2)},$$slots:{default:!0}});append($$anchor2,fragment_1)},$$slots:{default:!0}});UserDecisions(sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{var fragment_3=root_75(),node_8=first_child(fragment_3);let $0=user_derived(()=>!get(canProceed));Decision(node_8,{get title(){return get(proceedTitle)},get important(){return get(canProceed)},get disabled(){return get($0)},commit:()=>$$props.setResult(get(userType))});Decision(sibling(node_8,2),{title:"No, please take me back",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_3)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function isGreaterThanOrEqual(baseVersion,version2){const versionParts=`${baseVersion}.0.0.0`.split("."),targetParts=version2.split(".");for(let i2=0;i2<targetParts.length;i2++){const result=versionParts[i2].localeCompare(targetParts[i2],void 0,{numeric:!0});if(result>0)return!0;if(result<0)return!1}return!0}async function updateRemoteSetting(setting,key3,value){const customHeaders=parseHeaderValues(setting.couchDB_CustomHeaders),credential=generateCredentialObject(setting),res2=await requestToCouchDBWithCredentials(setting.couchDB_URI,credential,void 0,key3,value,void 0,customHeaders);return 200==res2.status||res2.text||"Unknown error"}function PanelCouchDBCheck($$anchor,$$props){async function testAndFixSettings(){set(detectedIssues,[],!0);try{const fixResults=await checkConfig($$props.trialRemoteSetting);console.dir(fixResults);set(detectedIssues,fixResults,!0)}catch(e3){console.error("Error during testAndFixSettings:",e3);get(detectedIssues).push({message:`Error during testAndFixSettings: ${e3}`,result:"error",classes:[]})}}function isErrorResult(result2){return"result"in result2&&"error"===result2.result}function isFixableError(result2){return isErrorResult(result2)&&"fix"in result2&&"function"==typeof result2.fix}function isSuccessResult(result2){return"result"in result2&&"ok"===result2.result}async function fixIssue(issue){try{set(processing,!0);await issue.fix()}catch(e3){console.error("Error during fixIssue:",e3)}await testAndFixSettings();set(processing,!1)}var fragment,node_1,div_3,details,summary,node_2,consequent_1,alternate_1,node_4,consequent_3;push($$props,!0);append_styles($$anchor,$$css10);const result=($$anchor2,issue=noop2)=>{var node,consequent,div=root_120(),div_1=child(div),text2=child(div_1,!0);reset(div_1);node=sibling(div_1,2);consequent=$$anchor3=>{var div_2=root_211(),button=child(div_2);button.__click=[on_click2,fixIssue,issue];reset(div_2);template_effect(()=>button.disabled=get(processing));append($$anchor3,div_2)};if_block(node,$$render=>{isFixableError(issue())&&$$render(consequent)});reset(div);template_effect($0=>{set_class(div,1,`check-result ${null!=$0?$0:""}`,"svelte-a38xug");set_text(text2,issue().message)},[()=>isErrorResult(issue())?"error":isSuccessResult(issue())?"success":""]);append($$anchor2,div)};let detectedIssues=state(proxy([])),processing=state(!1);const errorIssueCount=user_derived(()=>get(detectedIssues).filter(issue=>isErrorResult(issue)).length),isAllSuccess=user_derived(()=>!(get(errorIssueCount)>0&&get(detectedIssues).length>0));UserDecisions(node_1=first_child(fragment=root26()),{children:($$anchor2,$$slotProps)=>{Decision($$anchor2,{title:"Detect and Fix CouchDB Issues",important:!0,commit:testAndFixSettings})},$$slots:{default:!0}});div_3=sibling(node_1,2);details=child(div_3);summary=child(details);node_2=child(summary);consequent_1=$$anchor2=>{append($$anchor2,text("No checks have been performed yet."))};alternate_1=$$anchor2=>{var fragment_2=comment(),node_3=first_child(fragment_2),consequent_2=$$anchor3=>{append($$anchor3,text("All checks passed successfully!"))},alternate=$$anchor3=>{var text_3=text();template_effect(()=>{var _a8;return set_text(text_3,`${null!=(_a8=get(errorIssueCount))?_a8:""} issue(s) detected!`)});append($$anchor3,text_3)};if_block(node_3,$$render=>{get(isAllSuccess)?$$render(consequent_2):$$render(alternate,!1)},!0);append($$anchor2,fragment_2)};if_block(node_2,$$render=>{0===get(detectedIssues).length?$$render(consequent_1):$$render(alternate_1,!1)});reset(summary);node_4=sibling(summary,2);consequent_3=$$anchor2=>{var fragment_4=root_84();each(sibling(first_child(fragment_4),2),17,()=>get(detectedIssues),index,($$anchor3,issue)=>{result($$anchor3,()=>get(issue))});append($$anchor2,fragment_4)};if_block(node_4,$$render=>{get(detectedIssues).length>0&&$$render(consequent_3)});reset(details);reset(div_3);template_effect(()=>details.open=!get(isAllSuccess));append($$anchor,fragment);pop()}function SetupRemoteCouchDB($$anchor,$$props){function generateSetting(){const trialSettings={...{...syncSetting}},preferredSetting=isCloudantURI(syncSetting.couchDB_URI)?PREFERRED_SETTING_CLOUDANT:PREFERRED_SETTING_SELF_HOSTED;return{...DEFAULT_SETTINGS,...preferredSetting,remoteType:RemoteTypes_REMOTE_COUCHDB,...trialSettings}}async function checkConnection(){try{set(processing,!0);const trialRemoteSetting=generateSetting(),replicator=await context2.services.replicator.getNewReplicator(trialRemoteSetting);if(!replicator)return"Failed to create replicator instance.";try{return await replicator.tryConnectRemote(trialRemoteSetting,!1)?"":"Failed to connect to the server. Please check your settings."}catch(e3){return`Failed to connect to the server: ${e3}`}}finally{set(processing,!1)}}async function checkAndCommit(){set(error,"");try{set(error,await checkConnection()||"",!0);if(!get(error)){const setting=generateSetting();$$props.setResult(pickCouchDBSyncSettings(setting));return}}catch(e3){set(error,`Error during connection test: ${e3}`);return}}function commit(){const setting=pickCouchDBSyncSettings(generateSetting());$$props.setResult(setting)}function cancel2(){$$props.setResult("cancelled")}var fragment,node,node_1,node_2,node_3,node_4,node_5,node_6,node_7,node_8,node_9,node_10,node_11,node_20,node_21,node_22,consequent,alternate;push($$props,!0);let syncSetting=proxy({...pickCouchDBSyncSettings(DEFAULT_SETTINGS)});onMount(()=>{if($$props.getInitialData){const initialData=$$props.getInitialData();initialData&&copyTo(initialData,syncSetting)}});let error=state("");const context2=getDialogContext();let processing=state(!1);const isURIInsecure=user_derived(()=>!(!syncSetting.couchDB_URI||!syncSetting.couchDB_URI.startsWith("http://"))),isUseJWT=user_derived(()=>syncSetting.useJWT),canProceed=user_derived(()=>syncSetting.couchDB_URI.trim().length>0&&syncSetting.couchDB_USER.trim().length>0&&syncSetting.couchDB_PASSWORD.trim().length>0&&syncSetting.couchDB_DBNAME.trim().length>0&&(!get(isUseJWT)||syncSetting.jwtKey.trim().length>0)),testSettings=user_derived(()=>generateSetting());DialogHeader(node=first_child(fragment=root27()),{title:"CouchDB Configuration"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("Please enter the CouchDB server information below."))},$$slots:{default:!0}});InputRow(node_2=sibling(node_1,2),{label:"URL",children:($$anchor2,$$slotProps)=>{var input=root_212();remove_input_defaults(input);bind_value(input,()=>syncSetting.couchDB_URI,$$value=>syncSetting.couchDB_URI=$$value);append($$anchor2,input)},$$slots:{default:!0}});InfoNote(node_3=sibling(node_2,2),{warning:!0,get visible(){return get(isURIInsecure)},children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("We can use only Secure (HTTPS) connections on Obsidian Mobile."))},$$slots:{default:!0}});InputRow(node_4=sibling(node_3,2),{label:"Username",children:($$anchor2,$$slotProps)=>{var input_1=root_49();remove_input_defaults(input_1);bind_value(input_1,()=>syncSetting.couchDB_USER,$$value=>syncSetting.couchDB_USER=$$value);append($$anchor2,input_1)},$$slots:{default:!0}});InputRow(node_5=sibling(node_4,2),{label:"Password",children:($$anchor2,$$slotProps)=>{Password($$anchor2,{name:"couchdb-password",placeholder:"Enter your password",required:!0,get value(){return syncSetting.couchDB_PASSWORD},set value($$value){syncSetting.couchDB_PASSWORD=$$value}})},$$slots:{default:!0}});InputRow(node_6=sibling(node_5,2),{label:"Database Name",children:($$anchor2,$$slotProps)=>{var input_2=root_64();remove_input_defaults(input_2);bind_value(input_2,()=>syncSetting.couchDB_DBNAME,$$value=>syncSetting.couchDB_DBNAME=$$value);append($$anchor2,input_2)},$$slots:{default:!0}});InfoNote(node_7=sibling(node_6,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("You cannot use capital letters, spaces, or special characters in the database name. And not allowed to start with an\n underscore (_)."))},$$slots:{default:!0}});InputRow(node_8=sibling(node_7,2),{label:"Use Internal API",children:($$anchor2,$$slotProps)=>{var input_3=root_85();remove_input_defaults(input_3);bind_checked(input_3,()=>syncSetting.useRequestAPI,$$value=>syncSetting.useRequestAPI=$$value);append($$anchor2,input_3)},$$slots:{default:!0}});InfoNote(node_9=sibling(node_8,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate\n with the CouchDB server. Not compliant with web standards, but works. Note that this might break in future Obsidian\n versions."))},$$slots:{default:!0}});ExtraItems(node_10=sibling(node_9,2),{title:"Advanced Settings",children:($$anchor2,$$slotProps)=>{InputRow($$anchor2,{label:"Custom Headers",children:($$anchor3,$$slotProps2)=>{var textarea=root_1110();remove_textarea_child(textarea);bind_value(textarea,()=>syncSetting.couchDB_CustomHeaders,$$value=>syncSetting.couchDB_CustomHeaders=$$value);append($$anchor3,textarea)},$$slots:{default:!0}})},$$slots:{default:!0}});ExtraItems(node_11=sibling(node_10,2),{title:"Experimental Settings",children:($$anchor2,$$slotProps)=>{var node_13,node_14,node_15,node_16,node_17,node_18,fragment_3=root_123(),node_12=first_child(fragment_3);InputRow(node_12,{label:"Use JWT Authentication",children:($$anchor3,$$slotProps2)=>{var input_4=root_134();remove_input_defaults(input_4);bind_checked(input_4,()=>syncSetting.useJWT,$$value=>syncSetting.useJWT=$$value);append($$anchor3,input_4)},$$slots:{default:!0}});InputRow(node_13=sibling(node_12,2),{label:"JWT Algorithm",children:($$anchor3,$$slotProps2)=>{var option_1,option_2,option_3,select=root_142(),option=child(select);option.value=option.__value="HS256";(option_1=sibling(option)).value=option_1.__value="HS512";(option_2=sibling(option_1)).value=option_2.__value="ES256";(option_3=sibling(option_2)).value=option_3.__value="ES512";reset(select);template_effect(()=>select.disabled=!get(isUseJWT));bind_select_value(select,()=>syncSetting.jwtAlgorithm,$$value=>syncSetting.jwtAlgorithm=$$value);append($$anchor3,select)},$$slots:{default:!0}});InputRow(node_14=sibling(node_13,2),{label:"JWT Expiration Duration (minutes)",children:($$anchor3,$$slotProps2)=>{var input_5=root_152();remove_input_defaults(input_5);template_effect(()=>input_5.disabled=!get(isUseJWT));bind_value(input_5,()=>`${syncSetting.jwtExpDuration}`,v2=>syncSetting.jwtExpDuration=parseInt(v2)||0);append($$anchor3,input_5)},$$slots:{default:!0}});InputRow(node_15=sibling(node_14,2),{label:"JWT Key",children:($$anchor3,$$slotProps2)=>{var textarea_1=root_162();remove_textarea_child(textarea_1);template_effect(()=>textarea_1.disabled=!get(isUseJWT));bind_value(textarea_1,()=>syncSetting.jwtKey,$$value=>syncSetting.jwtKey=$$value);append($$anchor3,textarea_1)},$$slots:{default:!0}});InfoNote(node_16=sibling(node_15,2),{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("For HS256/HS512 algorithms, provide the shared secret key. For ES256/ES512 algorithms, provide the pkcs8\n PEM-formatted private key."))},$$slots:{default:!0}});InputRow(node_17=sibling(node_16,2),{label:"JWT Key ID (kid)",children:($$anchor3,$$slotProps2)=>{var input_6=root_182();remove_input_defaults(input_6);template_effect(()=>input_6.disabled=!get(isUseJWT));bind_value(input_6,()=>syncSetting.jwtKid,$$value=>syncSetting.jwtKid=$$value);append($$anchor3,input_6)},$$slots:{default:!0}});InputRow(node_18=sibling(node_17,2),{label:"JWT Subject (sub)",children:($$anchor3,$$slotProps2)=>{var input_7=root_192();remove_input_defaults(input_7);template_effect(()=>input_7.disabled=!get(isUseJWT));bind_value(input_7,()=>syncSetting.jwtSub,$$value=>syncSetting.jwtSub=$$value);append($$anchor3,input_7)},$$slots:{default:!0}});InfoNote(sibling(node_18,2),{warning:!0,children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("JWT (JSON Web Token) authentication allows you to securely authenticate with the CouchDB server using tokens.\n Ensure that your CouchDB server is configured to accept JWTs and that the provided key and settings match the\n server's configuration. Incidentally, I have not verified it very thoroughly."))},$$slots:{default:!0}});append($$anchor2,fragment_3)},$$slots:{default:!0}});PanelCouchDBCheck(node_20=sibling(node_11,2),{get trialRemoteSetting(){return get(testSettings)}});node_21=sibling(node_20,4);{let $0=user_derived(()=>""!==get(error));InfoNote(node_21,{error:!0,get visible(){return get($0)},children:($$anchor2,$$slotProps)=>{next();var text_6=text();template_effect(()=>set_text(text_6,get(error)));append($$anchor2,text_6)},$$slots:{default:!0}})}node_22=sibling(node_21,2);consequent=$$anchor2=>{append($$anchor2,text("Checking connection... Please wait."))};alternate=$$anchor2=>{UserDecisions($$anchor2,{children:($$anchor3,$$slotProps)=>{var node_24,fragment_6=root_242(),node_23=first_child(fragment_6);let $0=user_derived(()=>!get(canProceed));Decision(node_23,{title:"Test Settings and Continue",important:!0,get disabled(){return get($0)},commit:()=>checkAndCommit()});Decision(node_24=sibling(node_23,2),{title:"Continue anyway",commit:()=>commit()});Decision(sibling(node_24,2),{title:"Cancel",commit:()=>cancel2()});append($$anchor3,fragment_6)},$$slots:{default:!0}})};if_block(node_22,$$render=>{get(processing)?$$render(consequent):$$render(alternate,!1)});append($$anchor,fragment);pop()}function SetupRemoteBucket($$anchor,$$props){function generateSetting(){const trialSettings={...{...syncSetting}};return{...DEFAULT_SETTINGS,...PREFERRED_JOURNAL_SYNC,remoteType:RemoteTypes_REMOTE_MINIO,...trialSettings}}async function checkConnection(){try{set(processing,!0);const trialRemoteSetting=generateSetting(),replicator=await context2.services.replicator.getNewReplicator(trialRemoteSetting);if(!replicator)return"Failed to create replicator instance.";try{return await replicator.tryConnectRemote(trialRemoteSetting,!1)?"":"Failed to connect to the server. Please check your settings."}catch(e3){return`Failed to connect to the server: ${e3}`}}finally{set(processing,!1)}}async function checkAndCommit(){set(error,"");try{set(error,await checkConnection()||"",!0);if(!get(error)){const setting=generateSetting();$$props.setResult(pickBucketSyncSettings(setting));return}}catch(e3){set(error,`Error during connection test: ${e3}`);return}}function commit(){const setting=pickBucketSyncSettings(generateSetting());$$props.setResult(setting)}function cancel2(){$$props.setResult("cancelled")}var fragment,node,node_1,node_2,node_3,node_4,node_5,node_6,node_7,node_8,node_9,node_10,node_11,node_12,node_13,node_14,node_15,consequent,alternate;push($$props,!0);let syncSetting=proxy({...pickBucketSyncSettings(DEFAULT_SETTINGS)});onMount(()=>{if($$props.getInitialData){const initialData=$$props.getInitialData();initialData&&copyTo(initialData,syncSetting)}});let error=state("");const context2=getDialogContext(),isEndpointSecure=user_derived(()=>syncSetting.endpoint.trim().toLowerCase().startsWith("https://")),isEndpointInsecure=user_derived(()=>syncSetting.endpoint.trim().toLowerCase().startsWith("http://")),isEndpointSupplied=user_derived(()=>get(isEndpointInsecure)||get(isEndpointSecure)),canProceed=user_derived(()=>""!==syncSetting.accessKey.trim()&&""!==syncSetting.secretKey.trim()&&""!==syncSetting.bucket.trim()&&""!==syncSetting.endpoint.trim()&&""!==syncSetting.region.trim()&&get(isEndpointSupplied));let processing=state(!1);DialogHeader(node=first_child(fragment=root28()),{title:"S3/MinIO/R2 Configuration"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("Please enter the details required to connect to your S3/MinIO/R2 compatible object storage service."))},$$slots:{default:!0}});InputRow(node_2=sibling(node_1,2),{label:"Endpoint URL",children:($$anchor2,$$slotProps)=>{var input=root_213();remove_input_defaults(input);bind_value(input,()=>syncSetting.endpoint,$$value=>syncSetting.endpoint=$$value);append($$anchor2,input)},$$slots:{default:!0}});InfoNote(node_3=sibling(node_2,2),{warning:!0,get visible(){return get(isEndpointInsecure)},children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("We can use only Secure (HTTPS) connections on Obsidian Mobile."))},$$slots:{default:!0}});InputRow(node_4=sibling(node_3,2),{label:"Access Key ID",children:($$anchor2,$$slotProps)=>{var input_1=root_410();remove_input_defaults(input_1);bind_value(input_1,()=>syncSetting.accessKey,$$value=>syncSetting.accessKey=$$value);append($$anchor2,input_1)},$$slots:{default:!0}});InputRow(node_5=sibling(node_4,2),{label:"Secret Access Key",children:($$anchor2,$$slotProps)=>{Password($$anchor2,{name:"s3-secret-access-key",placeholder:"Enter your Secret Access Key",required:!0,get value(){return syncSetting.secretKey},set value($$value){syncSetting.secretKey=$$value}})},$$slots:{default:!0}});InputRow(node_6=sibling(node_5,2),{label:"Bucket Name",children:($$anchor2,$$slotProps)=>{var input_2=root_65();remove_input_defaults(input_2);bind_value(input_2,()=>syncSetting.bucket,$$value=>syncSetting.bucket=$$value);append($$anchor2,input_2)},$$slots:{default:!0}});InputRow(node_7=sibling(node_6,2),{label:"Region",children:($$anchor2,$$slotProps)=>{var input_3=root_76();remove_input_defaults(input_3);bind_value(input_3,()=>syncSetting.region,$$value=>syncSetting.region=$$value);append($$anchor2,input_3)},$$slots:{default:!0}});InputRow(node_8=sibling(node_7,2),{label:"Use Path-Style Access",children:($$anchor2,$$slotProps)=>{var input_4=root_86();remove_input_defaults(input_4);bind_checked(input_4,()=>syncSetting.forcePathStyle,$$value=>syncSetting.forcePathStyle=$$value);append($$anchor2,input_4)},$$slots:{default:!0}});InputRow(node_9=sibling(node_8,2),{label:"Folder Prefix",children:($$anchor2,$$slotProps)=>{var input_5=root_93();remove_input_defaults(input_5);bind_value(input_5,()=>syncSetting.bucketPrefix,$$value=>syncSetting.bucketPrefix=$$value);append($$anchor2,input_5)},$$slots:{default:!0}});InfoNote(node_10=sibling(node_9,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("If you want to store the data in a specific folder within the bucket, you can specify a folder prefix here.\n Otherwise, leave it blank to store data at the root of the bucket."))},$$slots:{default:!0}});InputRow(node_11=sibling(node_10,2),{label:"Use internal API",children:($$anchor2,$$slotProps)=>{var input_6=root_1111();remove_input_defaults(input_6);bind_checked(input_6,()=>syncSetting.useCustomRequestHandler,$$value=>syncSetting.useCustomRequestHandler=$$value);append($$anchor2,input_6)},$$slots:{default:!0}});InfoNote(node_12=sibling(node_11,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("If you cannot avoid CORS issues, you might want to try this option. It uses Obsidian's internal API to communicate\n with the S3 server. Not compliant with web standards, but works. Note that this might break in future Obsidian\n versions."))},$$slots:{default:!0}});ExtraItems(node_13=sibling(node_12,2),{title:"Advanced Settings",children:($$anchor2,$$slotProps)=>{InputRow($$anchor2,{label:"Custom Headers",children:($$anchor3,$$slotProps2)=>{var textarea=root_143();remove_textarea_child(textarea);bind_value(textarea,()=>syncSetting.bucketCustomHeaders,$$value=>syncSetting.bucketCustomHeaders=$$value);append($$anchor3,textarea)},$$slots:{default:!0}})},$$slots:{default:!0}});node_14=sibling(node_13,2);{let $0=user_derived(()=>""!==get(error));InfoNote(node_14,{error:!0,get visible(){return get($0)},children:($$anchor2,$$slotProps)=>{next();var text_4=text();template_effect(()=>set_text(text_4,get(error)));append($$anchor2,text_4)},$$slots:{default:!0}})}node_15=sibling(node_14,2);consequent=$$anchor2=>{append($$anchor2,text("Checking connection... Please wait."))};alternate=$$anchor2=>{UserDecisions($$anchor2,{children:($$anchor3,$$slotProps)=>{var node_17,fragment_5=root_183(),node_16=first_child(fragment_5);let $0=user_derived(()=>!get(canProceed));Decision(node_16,{title:"Test Settings and Continue",important:!0,get disabled(){return get($0)},commit:()=>checkAndCommit()});Decision(node_17=sibling(node_16,2),{title:"Continue anyway",commit:()=>commit()});Decision(sibling(node_17,2),{title:"Cancel",commit:()=>cancel2()});append($$anchor3,fragment_5)},$$slots:{default:!0}})};if_block(node_15,$$render=>{get(processing)?$$render(consequent):$$render(alternate,!1)});append($$anchor,fragment);pop()}function createError(error,reason){function CustomPouchError(reason2){var i2,len,names=Object.getOwnPropertyNames(error);for(i2=0,len=names.length;i2<len;i2++)"function"!=typeof error[names[i2]]&&(this[names[i2]]=error[names[i2]]);void 0===this.stack&&(this.stack=(new Error).stack);void 0!==reason2&&(this.reason=reason2)}CustomPouchError.prototype=PouchError.prototype;return new CustomPouchError(reason)}function generateErrorFromResponse(err3){if("object"!=typeof err3){var data=err3;(err3=UNKNOWN_ERROR).data=data}if("error"in err3&&"conflict"===err3.error){err3.name="conflict";err3.status=409}"name"in err3||(err3.name=err3.error||"unknown");"status"in err3||(err3.status=500);"message"in err3||(err3.message=err3.message||err3.reason);"stack"in err3||(err3.stack=(new Error).stack);return err3}function rng(){if(!getRandomValues&&!(getRandomValues="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return getRandomValues(rnds8)}function createBlob2(parts,properties){var builder,i2;parts=parts||[];properties=properties||{};try{return new Blob(parts,properties)}catch(e3){if("TypeError"!==e3.name)throw e3;builder=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder);for(i2=0;i2<parts.length;i2+=1)builder.append(parts[i2]);return builder.getBlob(properties.type)}}function binaryStringToArrayBuffer(bin){var i2,length=bin.length,buf=new ArrayBuffer(length),arr=new Uint8Array(buf);for(i2=0;i2<length;i2++)arr[i2]=bin.charCodeAt(i2);return buf}function binStringToBluffer(binString,type){return createBlob2([binaryStringToArrayBuffer(binString)],{type})}function b64ToBluffer(b64,type){return binStringToBluffer(thisAtob(b64),type)}function arrayBufferToBinaryString(buffer){var i2,binary="",bytes=new Uint8Array(buffer),length=bytes.byteLength;for(i2=0;i2<length;i2++)binary+=String.fromCharCode(bytes[i2]);return binary}function readAsBinaryString(blob,callback){var reader=new FileReader,hasBinaryString="function"==typeof reader.readAsBinaryString;reader.onloadend=function(e3){var result=e3.target.result||"";if(hasBinaryString)return callback(result);callback(arrayBufferToBinaryString(result))};hasBinaryString?reader.readAsBinaryString(blob):reader.readAsArrayBuffer(blob)}function blobToBinaryString(blobOrBuffer,callback){readAsBinaryString(blobOrBuffer,function(bin){callback(bin)})}function blobToBase64(blobOrBuffer,callback){blobToBinaryString(blobOrBuffer,function(base64){callback(thisBtoa(base64))})}function readAsArrayBuffer(blob,callback){var reader=new FileReader;reader.onloadend=function(e3){var result=e3.target.result||new ArrayBuffer(0);callback(result)};reader.readAsArrayBuffer(blob)}function rawToBase64(raw){return thisBtoa(raw)}function appendBlob(buffer,blob,start,end,callback){(start>0||end<blob.size)&&(blob=blob.slice(start,end));readAsArrayBuffer(blob,function(arrayBuffer){buffer.append(arrayBuffer);callback()})}function appendString(buffer,string,start,end,callback){(start>0||end<string.length)&&(string=string.substring(start,end));buffer.appendBinary(string);callback()}function binaryMd5(data,callback){function next2(){setImmediateShim(loadNextChunk)}function done(){var base64=rawToBase64(buffer.end(!0));callback(base64);buffer.destroy()}function loadNextChunk(){var start=currentChunk*chunkSize2;currentChunk++;append2(buffer,data,start,start+chunkSize2,currentChunk<chunks?next2:done)}var inputIsString="string"==typeof data,len=inputIsString?data.length:data.size,chunkSize2=Math.min(MD5_CHUNK_SIZE,len),chunks=Math.ceil(len/chunkSize2),currentChunk=0,buffer=inputIsString?new import_spark_md5.default:new import_spark_md5.default.ArrayBuffer,append2=inputIsString?appendString:appendBlob;loadNextChunk()}function stringMd5(string){return import_spark_md5.default.hash(string)}function isBinaryObject(object){return"undefined"!=typeof ArrayBuffer&&object instanceof ArrayBuffer||"undefined"!=typeof Blob&&object instanceof Blob}function cloneBinaryObject(object){return object instanceof ArrayBuffer?object.slice(0):object.slice(0,object.size,object.type)}function isPlainObject(value){var Ctor,proto=Object.getPrototypeOf(value);return null===proto||"function"==typeof(Ctor=proto.constructor)&&Ctor instanceof Ctor&&funcToString.call(Ctor)==objectCtorString}function clone2(object){var newObject,i2,len,value;if(!object||"object"!=typeof object)return object;if(Array.isArray(object)){newObject=[];for(i2=0,len=object.length;i2<len;i2++)newObject[i2]=clone2(object[i2]);return newObject}if(object instanceof Date&&isFinite(object))return object.toISOString();if(isBinaryObject(object))return cloneBinaryObject(object);if(!isPlainObject(object))return object;newObject={};for(i2 in object)Object.prototype.hasOwnProperty.call(object,i2)&&void 0!==(value=clone2(object[i2]))&&(newObject[i2]=value);return newObject}function once2(fun){var called=!1;return function(...args){if(called)throw new Error("once called more than once");called=!0;fun.apply(this,args)}}function toPromise(func){return function(...args){var self3,usedCB,promise;args=clone2(args);self3=this;usedCB="function"==typeof args[args.length-1]&&args.pop();promise=new Promise(function(fulfill,reject){var resp,callback;try{callback=once2(function(err3,mesg){err3?reject(err3):fulfill(mesg)});args.push(callback);(resp=func.apply(self3,args))&&"function"==typeof resp.then&&fulfill(resp)}catch(e3){reject(e3)}});usedCB&&promise.then(function(result){usedCB(null,result)},usedCB);return promise}}function logApiCall(self3,name,args){var logArgs,i2,origCallback;if(self3.constructor.listeners("debug").length){logArgs=["api",self3.name,name];for(i2=0;i2<args.length-1;i2++)logArgs.push(args[i2]);self3.constructor.emit("debug",logArgs);origCallback=args[args.length-1];args[args.length-1]=function(err3,res2){var responseArgs=["api",self3.name,name];responseArgs=responseArgs.concat(err3?["error",err3]:["success",res2]);self3.constructor.emit("debug",responseArgs);origCallback(err3,res2)}}}function adapterFun(name,callback){return toPromise(function(...args){if(this._closed)return Promise.reject(new Error("database is closed"));if(this._destroyed)return Promise.reject(new Error("database is destroyed"));var self3=this;logApiCall(self3,name,args);return this.taskqueue.isReady?callback.apply(this,args):new Promise(function(fulfill,reject){self3.taskqueue.addTask(function(failed2){failed2?reject(failed2):fulfill(self3[name].apply(self3,args))})})})}function pick(obj,arr){var i2,len,prop2,res2={};for(i2=0,len=arr.length;i2<len;i2++)(prop2=arr[i2])in obj&&(res2[prop2]=obj[prop2]);return res2}function identityFunction(x2){return x2}function formatResultForOpenRevsGet(result){return[{ok:result}]}function bulkGet(db,opts,callback){function collapseResultsAndFinish(){var results=[];perDocResults.forEach(function(res2){res2.docs.forEach(function(info3){results.push({id:res2.id,docs:[info3]})})});callback(null,{results})}function checkDone(){++numDone===numDocs&&collapseResultsAndFinish()}function gotResult(docIndex,id,docs){perDocResults[docIndex]={id,docs};checkDone()}function nextBatch(){var upTo,batch;if(!(i2>=allRequests.length)){upTo=Math.min(i2+MAX_NUM_CONCURRENT_REQUESTS,allRequests.length);processBatch(batch=allRequests.slice(i2,upTo),i2);i2+=batch.length}}function processBatch(batch,offset){batch.forEach(function(docId,j2){var formatResult,docIdx=offset+j2,docRequests=requestsById.get(docId),docOpts=pick(docRequests[0],["atts_since","attachments"]);docOpts.open_revs=docRequests.map(function(request2){return request2.rev});docOpts.open_revs=docOpts.open_revs.filter(identityFunction);formatResult=identityFunction;if(0===docOpts.open_revs.length){delete docOpts.open_revs;formatResult=formatResultForOpenRevsGet}["revs","attachments","binary","ajax","latest"].forEach(function(param){param in opts&&(docOpts[param]=opts[param])});db.get(docId,docOpts,function(err3,res2){var result;result=err3?[{error:err3}]:formatResult(res2);gotResult(docIdx,docId,result);nextBatch()})})}var numDocs,numDone,perDocResults,allRequests,i2,requests=opts.docs,requestsById=new Map;requests.forEach(function(request2){requestsById.has(request2.id)?requestsById.get(request2.id).push(request2):requestsById.set(request2.id,[request2])});numDocs=requestsById.size;numDone=0;perDocResults=new Array(numDocs);allRequests=[];requestsById.forEach(function(value,key3){allRequests.push(key3)});i2=0;nextBatch()}function hasLocalStorage(){return hasLocal}function guardedConsole(method){if("undefined"!=typeof console&&"function"==typeof console[method]){var args=Array.prototype.slice.call(arguments,1);console[method].apply(console,args)}}function randomNumber(min,max3){min=parseInt(min,10)||0;(max3=parseInt(max3,10))!=max3||max3<=min?max3=(min||1)<<1:max3+=1;if(max3>6e5){min=3e5;max3=6e5}return~~((max3-min)*Math.random()+min)}function defaultBackOff(min){var max3=0;min||(max3=2e3);return randomNumber(min,max3)}function explainError(status,str){guardedConsole("info","The above "+status+" is totally normal. "+str)}function tryFilter(filter4,doc,req){try{return!filter4(doc,req)}catch(err3){var msg="Filter function threw: "+err3.toString();return createError(BAD_REQUEST,msg)}}function filterChange(opts){var req={},hasFilter=opts.filter&&"function"==typeof opts.filter;req.query=opts.query_params;return function filter4(change){var filterReturn,att;change.doc||(change.doc={});if("object"==typeof(filterReturn=hasFilter&&tryFilter(opts.filter,change.doc,req)))return filterReturn;if(filterReturn)return!1;if(opts.include_docs){if(!opts.attachments)for(att in change.doc._attachments)Object.prototype.hasOwnProperty.call(change.doc._attachments,att)&&(change.doc._attachments[att].stub=!0)}else delete change.doc;return!0}}function invalidIdError(id){var err3;id?"string"!=typeof id?err3=createError(INVALID_ID):/^_/.test(id)&&!/^_(design|local)/.test(id)&&(err3=createError(RESERVED_ID)):err3=createError(MISSING_ID);if(err3)throw err3}function isRemote(db){if("boolean"==typeof db._remote)return db._remote;if("function"==typeof db.type){guardedConsole("warn","db.type() is deprecated and will be removed in a future version of PouchDB");return"http"===db.type()}return!1}function listenerCount(ee,type){return"listenerCount"in ee?ee.listenerCount(type):import_events16.default.listenerCount(ee,type)}function parseDesignDocFunctionName(s2){if(!s2)return null;var parts=s2.split("/");return 2===parts.length?parts:1===parts.length?[s2,s2]:null}function normalizeDesignDocFunctionName(s2){var normalized=parseDesignDocFunctionName(s2);return normalized?normalized.join("/"):null}function parseUri(str){for(var key3,value,encoded,m3=parser2.exec(str),uri={},i2=14;i2--;){key3=keys2[i2];value=m3[i2]||"";encoded=-1!==["user","password"].indexOf(key3);uri[key3]=encoded?decodeURIComponent(value):value}uri[qName]={};uri[keys2[12]].replace(qParser,function($0,$1,$2){$1&&(uri[qName][$1]=$2)});return uri}function scopeEval(source2,scope){var key3,keys3=[],values2=[];for(key3 in scope)if(Object.prototype.hasOwnProperty.call(scope,key3)){keys3.push(key3);values2.push(scope[key3])}keys3.push(source2);return Function.apply(null,keys3).apply(null,values2)}function upsert(db,docId,diffFun){return db.get(docId).catch(function(err3){if(404!==err3.status)throw err3;return{}}).then(function(doc){var docRev=doc._rev,newDoc=diffFun(doc);if(!newDoc)return{updated:!1,rev:docRev};newDoc._id=docId;newDoc._rev=docRev;return tryAndPut(db,newDoc,diffFun)})}function tryAndPut(db,doc,diffFun){return db.put(doc).then(function(res2){return{updated:!0,rev:res2.rev}},function(err3){if(409!==err3.status)throw err3;return upsert(db,doc._id,diffFun)})}function rev2(doc,deterministic_revs){if(!deterministic_revs)return v4_default().replace(/-/g,"").toLowerCase();var mutateableDoc=Object.assign({},doc);delete mutateableDoc._rev_tree;return stringMd5(JSON.stringify(mutateableDoc))}function winningRev(metadata){for(var winningId,winningPos,winningDeleted,node,tree,branches,pos,i2,len,deleted,id,toVisit=metadata.rev_tree.slice();node=toVisit.pop();){branches=(tree=node.ids)[2];pos=node.pos;if(branches.length)for(i2=0,len=branches.length;i2<len;i2++)toVisit.push({pos:pos+1,ids:branches[i2]});else{deleted=!!tree[1].deleted;id=tree[0];if(!winningId||(winningDeleted!==deleted?winningDeleted:winningPos!==pos?winningPos<pos:winningId<id)){winningId=id;winningPos=pos;winningDeleted=deleted}}}return winningPos+"-"+winningId}function traverseRevTree(revs,callback){for(var node,pos,tree,branches,newCtx,i2,len,toVisit=revs.slice();node=toVisit.pop();){pos=node.pos;newCtx=callback(0===(branches=(tree=node.ids)[2]).length,pos,tree[0],node.ctx,tree[1]);for(i2=0,len=branches.length;i2<len;i2++)toVisit.push({pos:pos+1,ids:branches[i2],ctx:newCtx})}}function sortByPos(a2,b3){return a2.pos-b3.pos}function collectLeaves(revs){var i2,len,leaves=[];traverseRevTree(revs,function(isLeaf,pos,id,acc,opts){isLeaf&&leaves.push({rev:pos+"-"+id,pos,opts})});leaves.sort(sortByPos).reverse();for(i2=0,len=leaves.length;i2<len;i2++)delete leaves[i2].pos;return leaves}function collectConflicts(metadata){var i2,len,leaf,win=winningRev(metadata),leaves=collectLeaves(metadata.rev_tree),conflicts=[];for(i2=0,len=leaves.length;i2<len;i2++)(leaf=leaves[i2]).rev===win||leaf.opts.deleted||conflicts.push(leaf.rev);return conflicts}function compactTree(metadata){var revs=[];traverseRevTree(metadata.rev_tree,function(isLeaf,pos,revHash,ctx,opts){if("available"===opts.status&&!isLeaf){revs.push(pos+"-"+revHash);opts.status="missing"}});return revs}function findPathToLeaf(revs,targetRev){let path2=[];const toVisit=revs.slice();let node;for(;node=toVisit.pop();){const{pos,ids:tree}=node,rev3=`${pos}-${tree[0]}`,branches=tree[2];path2.push(rev3);if(rev3===targetRev){if(0!==branches.length)throw new Error("The requested revision is not a leaf");return path2.reverse()}(0===branches.length||branches.length>1)&&(path2=[]);for(let i2=0,len=branches.length;i2<len;i2++)toVisit.push({pos:pos+1,ids:branches[i2]})}if(0===path2.length)throw new Error("The requested revision does not exist");return path2.reverse()}function rootToLeaf(revs){for(var node,pos,tree,id,opts,branches,isLeaf,history,i2,len,paths=[],toVisit=revs.slice();node=toVisit.pop();){pos=node.pos;id=(tree=node.ids)[0];opts=tree[1];isLeaf=0===(branches=tree[2]).length;(history=node.history?node.history.slice():[]).push({id,opts});isLeaf&&paths.push({pos:pos+1-history.length,ids:history});for(i2=0,len=branches.length;i2<len;i2++)toVisit.push({pos:pos+1,ids:branches[i2],history})}return paths.reverse()}function sortByPos$1(a2,b3){return a2.pos-b3.pos}function binarySearch(arr,item,comparator){for(var mid,low=0,high=arr.length;low<high;)comparator(arr[mid=low+high>>>1],item)<0?low=mid+1:high=mid;return low}function insertSorted(arr,item,comparator){var idx2=binarySearch(arr,item,comparator);arr.splice(idx2,0,item)}function pathToTree(path2,numStemmed){var root40,leaf,i2,len,node,currentLeaf;for(i2=numStemmed,len=path2.length;i2<len;i2++){currentLeaf=[(node=path2[i2]).id,node.opts,[]];if(leaf){leaf[2].push(currentLeaf);leaf=currentLeaf}else root40=leaf=currentLeaf}return root40}function compareTree(a2,b3){return a2[0]<b3[0]?-1:1}function mergeTree(in_tree1,in_tree2){for(var item,tree1,tree2,i2,merged,j2,queue2=[{tree1:in_tree1,tree2:in_tree2}],conflicts=!1;queue2.length>0;){tree1=(item=queue2.pop()).tree1;tree2=item.tree2;(tree1[1].status||tree2[1].status)&&(tree1[1].status="available"===tree1[1].status||"available"===tree2[1].status?"available":"missing");for(i2=0;i2<tree2[2].length;i2++)if(tree1[2][0]){merged=!1;for(j2=0;j2<tree1[2].length;j2++)if(tree1[2][j2][0]===tree2[2][i2][0]){queue2.push({tree1:tree1[2][j2],tree2:tree2[2][i2]});merged=!0}if(!merged){conflicts="new_branch";insertSorted(tree1[2],tree2[2][i2],compareTree)}}else{conflicts="new_leaf";tree1[2][0]=tree2[2][i2]}}return{conflicts,tree:in_tree1}}function doMerge(tree,path2,dontExpand){var res2,i2,len,branch2,t12,t22,diff,candidateParents,trees,item,elements,j2,elementsLen,el,restree=[],conflicts=!1,merged=!1;if(!tree.length)return{tree:[path2],conflicts:"new_leaf"};for(i2=0,len=tree.length;i2<len;i2++)if((branch2=tree[i2]).pos===path2.pos&&branch2.ids[0]===path2.ids[0]){res2=mergeTree(branch2.ids,path2.ids);restree.push({pos:branch2.pos,ids:res2.tree});conflicts=conflicts||res2.conflicts;merged=!0}else if(!0!==dontExpand){t12=branch2.pos<path2.pos?branch2:path2;diff=(t22=branch2.pos<path2.pos?path2:branch2).pos-t12.pos;candidateParents=[];(trees=[]).push({ids:t12.ids,diff,parent:null,parentIdx:null});for(;trees.length>0;)if(0!==(item=trees.pop()).diff)for(j2=0,elementsLen=(elements=item.ids[2]).length;j2<elementsLen;j2++)trees.push({ids:elements[j2],diff:item.diff-1,parent:item.ids,parentIdx:j2});else item.ids[0]===t22.ids[0]&&candidateParents.push(item);if(el=candidateParents[0]){res2=mergeTree(el.ids,t22.ids);el.parent[2][el.parentIdx]=res2.tree;restree.push({pos:t12.pos,ids:t12.ids});conflicts=conflicts||res2.conflicts;merged=!0}else restree.push(branch2)}else restree.push(branch2);merged||restree.push(path2);restree.sort(sortByPos$1);return{tree:restree,conflicts:conflicts||"internal_node"}}function stem(tree,depth){var stemmedRevs,result,i2,len,path2,stemmed,node,numStemmed,s2,rev3,paths=rootToLeaf(tree);for(i2=0,len=paths.length;i2<len;i2++){if((stemmed=(path2=paths[i2]).ids).length>depth){stemmedRevs||(stemmedRevs={});numStemmed=stemmed.length-depth;node={pos:path2.pos+numStemmed,ids:pathToTree(stemmed,numStemmed)};for(s2=0;s2<numStemmed;s2++){rev3=path2.pos+s2+"-"+stemmed[s2].id;stemmedRevs[rev3]=!0}}else node={pos:path2.pos,ids:pathToTree(stemmed,0)};result=result?doMerge(result,node,!0).tree:[node]}stemmedRevs&&traverseRevTree(result,function(isLeaf,pos,revHash){delete stemmedRevs[pos+"-"+revHash]});return{tree:result,revs:stemmedRevs?Object.keys(stemmedRevs):[]}}function merge2(tree,path2,depth){var newTree=doMerge(tree,path2),stemmed=stem(newTree.tree,depth);return{tree:stemmed.tree,stemmedRevs:stemmed.revs,conflicts:newTree.conflicts}}function removeLeafFromRevTree(tree,leafRev){return tree.flatMap(path2=>(path2=removeLeafFromPath(path2,leafRev))?[path2]:[])}function removeLeafFromPath(path2,leafRev){const tree=clone2(path2),toVisit=[tree];let node;for(;node=toVisit.pop();){const{pos,ids:[id,,branches],parent}=node;if(0===branches.length&&`${pos}-${id}`===leafRev){if(!parent)return null;parent.ids[2]=parent.ids[2].filter(function(branchNode){return branchNode[0]!==id});return tree}for(let i2=0,len=branches.length;i2<len;i2++)toVisit.push({pos:pos+1,ids:branches[i2],parent:node})}return tree}function revExists(revs,rev3){for(var node,branches,i2,len,toVisit=revs.slice(),splitRev=rev3.split("-"),targetPos=parseInt(splitRev[0],10),targetId=splitRev[1];node=toVisit.pop();){if(node.pos===targetPos&&node.ids[0]===targetId)return!0;for(i2=0,len=(branches=node.ids[2]).length;i2<len;i2++)toVisit.push({pos:node.pos+1,ids:branches[i2]})}return!1}function getTrees(node){return node.ids}function isDeleted(metadata,rev3){var id,toVisit,tree;rev3||(rev3=winningRev(metadata));id=rev3.substring(rev3.indexOf("-")+1);toVisit=metadata.rev_tree.map(getTrees);for(;tree=toVisit.pop();){if(tree[0]===id)return!!tree[1].deleted;toVisit=toVisit.concat(tree[2])}}function isLocalId(id){return"string"==typeof id&&id.startsWith("_local/")}function latest(rev3,metadata){for(var node,pos,tree,id,opts,branches,isLeaf,history,i2,len,historyNode,j2,l2,toVisit=metadata.rev_tree.slice();node=toVisit.pop();){pos=node.pos;id=(tree=node.ids)[0];opts=tree[1];isLeaf=0===(branches=tree[2]).length;(history=node.history?node.history.slice():[]).push({id,pos,opts});if(isLeaf)for(i2=0,len=history.length;i2<len;i2++)if((historyNode=history[i2]).pos+"-"+historyNode.id===rev3)return pos+"-"+id;for(j2=0,l2=branches.length;j2<l2;j2++)toVisit.push({pos:pos+1,ids:branches[j2],history})}throw new Error("Unable to resolve latest revision for id "+metadata.id+", rev "+rev3)}function pad(str,padWith,upToLength){for(var padding="",targetLength=upToLength-str.length;padding.length<targetLength;)padding+=padWith;return padding}function padLeft(str,padWith,upToLength){return pad(str,padWith,upToLength)+str}function collate(a2,b3){var ai2,bi2;if(a2===b3)return 0;a2=normalizeKey(a2);b3=normalizeKey(b3);if((ai2=collationIndex(a2))-(bi2=collationIndex(b3))!==0)return ai2-bi2;switch(typeof a2){case"number":return a2-b3;case"boolean":return a2<b3?-1:1;case"string":return stringCollate(a2,b3)}return Array.isArray(a2)?arrayCollate(a2,b3):objectCollate(a2,b3)}function normalizeKey(key3){var origKey,len,i2,k2,val;switch(typeof key3){case"undefined":return null;case"number":return key3===1/0||key3===-1/0||isNaN(key3)?null:key3;case"object":origKey=key3;if(Array.isArray(key3)){len=key3.length;key3=new Array(len);for(i2=0;i2<len;i2++)key3[i2]=normalizeKey(origKey[i2])}else{if(key3 instanceof Date)return key3.toJSON();if(null!==key3){key3={};for(k2 in origKey)Object.prototype.hasOwnProperty.call(origKey,k2)&&void 0!==(val=origKey[k2])&&(key3[k2]=normalizeKey(val))}}}return key3}function indexify(key3){var isArray2,arr,i2,len,result,objKey;if(null!==key3)switch(typeof key3){case"boolean":return key3?1:0;case"number":return numToIndexableString(key3);case"string":return key3.replace(/\u0002/g,"").replace(/\u0001/g,"").replace(/\u0000/g,"");case"object":i2=-1;len=(arr=(isArray2=Array.isArray(key3))?key3:Object.keys(key3)).length;result="";if(isArray2)for(;++i2<len;)result+=toIndexableString(arr[i2]);else for(;++i2<len;)result+=toIndexableString(objKey=arr[i2])+toIndexableString(key3[objKey]);return result}return""}function toIndexableString(key3){return collationIndex(key3=normalizeKey(key3))+SEP+indexify(key3)+"\0"}function parseNumber2(str,i2){var num,neg,numAsString,magAsString,magnitude,ch4,originalIdx=i2;if("1"===str[i2]){num=0;i2++}else{neg="0"===str[i2];i2++;numAsString="";magAsString=str.substring(i2,i2+MAGNITUDE_DIGITS);magnitude=parseInt(magAsString,10)+MIN_MAGNITUDE;neg&&(magnitude=-magnitude);i2+=MAGNITUDE_DIGITS;for(;"\0"!==(ch4=str[i2]);){numAsString+=ch4;i2++}num=1===(numAsString=numAsString.split(".")).length?parseInt(numAsString,10):parseFloat(numAsString[0]+"."+numAsString[1]);neg&&(num-=10);0!==magnitude&&(num=parseFloat(num+"e"+magnitude))}return{num,length:i2-originalIdx}}function pop2(stack2,metaStack){var lastMetaElement,element2,lastElementIndex,obj=stack2.pop();if(metaStack.length){if(obj===(lastMetaElement=metaStack[metaStack.length-1]).element){metaStack.pop();lastMetaElement=metaStack[metaStack.length-1]}element2=lastMetaElement.element;lastElementIndex=lastMetaElement.index;Array.isArray(element2)?element2.push(obj):lastElementIndex===stack2.length-2?element2[stack2.pop()]=obj:stack2.push(obj)}}function parseIndexableString(str){for(var collationIndex2,parsedNum,parsedStr,ch4,arrayElement,objElement,stack2=[],metaStack=[],i2=0;;)if("\0"!==(collationIndex2=str[i2++]))switch(collationIndex2){case"1":stack2.push(null);break;case"2":stack2.push("1"===str[i2]);i2++;break;case"3":parsedNum=parseNumber2(str,i2);stack2.push(parsedNum.num);i2+=parsedNum.length;break;case"4":parsedStr="";for(;"\0"!==(ch4=str[i2]);){parsedStr+=ch4;i2++}parsedStr=parsedStr.replace(/\u0001\u0001/g,"\0").replace(/\u0001\u0002/g,"").replace(/\u0002\u0002/g,"");stack2.push(parsedStr);break;case"5":arrayElement={element:[],index:stack2.length};stack2.push(arrayElement.element);metaStack.push(arrayElement);break;case"6":objElement={element:{},index:stack2.length};stack2.push(objElement.element);metaStack.push(objElement);break;default:throw new Error("bad collationIndex or unexpectedly reached end of input: "+collationIndex2)}else{if(1===stack2.length)return stack2.pop();pop2(stack2,metaStack)}}function arrayCollate(a2,b3){var i2,sort,len=Math.min(a2.length,b3.length);for(i2=0;i2<len;i2++)if(0!==(sort=collate(a2[i2],b3[i2])))return sort;return a2.length===b3.length?0:a2.length>b3.length?1:-1}function stringCollate(a2,b3){return a2===b3?0:a2>b3?1:-1}function objectCollate(a2,b3){var i2,sort,ak2=Object.keys(a2),bk2=Object.keys(b3),len=Math.min(ak2.length,bk2.length);for(i2=0;i2<len;i2++){if(0!==(sort=collate(ak2[i2],bk2[i2])))return sort;if(0!==(sort=collate(a2[ak2[i2]],b3[bk2[i2]])))return sort}return ak2.length===bk2.length?0:ak2.length>bk2.length?1:-1}function collationIndex(x2){var idx2=["boolean","number","string","object"].indexOf(typeof x2);return~idx2?null===x2?1:Array.isArray(x2)?5:idx2<3?idx2+2:idx2+3:Array.isArray(x2)?5:void 0}function numToIndexableString(num){var expFormat,magnitude,neg,result,magString,factor,factorStr;if(0===num)return"1";expFormat=num.toExponential().split(/e\+?/);magnitude=parseInt(expFormat[1],10);result=(neg=num<0)?"0":"2";magString=padLeft(((neg?-magnitude:magnitude)-MIN_MAGNITUDE).toString(),"0",MAGNITUDE_DIGITS);result+=SEP+magString;factor=Math.abs(parseFloat(expFormat[0]));neg&&(factor=10-factor);factorStr=(factorStr=factor.toFixed(20)).replace(/\.?0+$/,"");return result+(SEP+factorStr)}function getFieldFromDoc(doc,parsedField){var i2,len,value=doc;for(i2=0,len=parsedField.length;i2<len&&(value=value[parsedField[i2]]);i2++);return value}function setFieldInDoc(doc,parsedField,value){var i2,len,elem;for(i2=0,len=parsedField.length;i2<len-1;i2++)doc=doc[elem=parsedField[i2]]=doc[elem]||{};doc[parsedField[len-1]]=value}function compare2(left,right){return left<right?-1:left>right?1:0}function parseField(fieldName){var i2,len,ch4,fields=[],current="";for(i2=0,len=fieldName.length;i2<len;i2++){ch4=fieldName[i2];if(i2>0&&"\\"===fieldName[i2-1]&&("$"===ch4||"."===ch4))current=current.substring(0,current.length-1)+ch4;else if("."===ch4){fields.push(current);current=""}else current+=ch4}fields.push(current);return fields}function isCombinationalField(field){return combinationFields.indexOf(field)>-1}function getKey2(obj){return Object.keys(obj)[0]}function getValue(obj){return obj[getKey2(obj)]}function mergeAndedSelectors(selectors){var res2={},first={$or:!0,$nor:!0};selectors.forEach(function(selector){Object.keys(selector).forEach(function(field){var entries2,fieldMatchers,matcher=selector[field];"object"!=typeof matcher&&(matcher={$eq:matcher});if(isCombinationalField(field))if(matcher instanceof Array){if(first[field]){first[field]=!1;res2[field]=matcher;return}entries2=[];res2[field].forEach(function(existing){Object.keys(matcher).forEach(function(key3){var m3=matcher[key3],longest=Math.max(Object.keys(existing).length,Object.keys(m3).length),merged=mergeAndedSelectors([existing,m3]);Object.keys(merged).length<=longest||entries2.push(merged)})});res2[field]=entries2}else res2[field]=mergeAndedSelectors([matcher]);else{fieldMatchers=res2[field]=res2[field]||{};Object.keys(matcher).forEach(function(operator){var value=matcher[operator];if("$gt"===operator||"$gte"===operator)return mergeGtGte(operator,value,fieldMatchers);if("$lt"===operator||"$lte"===operator)return mergeLtLte(operator,value,fieldMatchers);if("$ne"===operator)return mergeNe(value,fieldMatchers);if("$eq"===operator)return mergeEq(value,fieldMatchers);if("$regex"===operator)return mergeRegex(value,fieldMatchers);fieldMatchers[operator]=value})}})});return res2}function mergeGtGte(operator,value,fieldMatchers){if(void 0===fieldMatchers.$eq)if(void 0!==fieldMatchers.$gte){if("$gte"===operator)value>fieldMatchers.$gte&&(fieldMatchers.$gte=value);else if(value>=fieldMatchers.$gte){delete fieldMatchers.$gte;fieldMatchers.$gt=value}}else if(void 0!==fieldMatchers.$gt)if("$gte"===operator){if(value>fieldMatchers.$gt){delete fieldMatchers.$gt;fieldMatchers.$gte=value}}else value>fieldMatchers.$gt&&(fieldMatchers.$gt=value);else fieldMatchers[operator]=value}function mergeLtLte(operator,value,fieldMatchers){if(void 0===fieldMatchers.$eq)if(void 0!==fieldMatchers.$lte){if("$lte"===operator)value<fieldMatchers.$lte&&(fieldMatchers.$lte=value);else if(value<=fieldMatchers.$lte){delete fieldMatchers.$lte;fieldMatchers.$lt=value}}else if(void 0!==fieldMatchers.$lt)if("$lte"===operator){if(value<fieldMatchers.$lt){delete fieldMatchers.$lt;fieldMatchers.$lte=value}}else value<fieldMatchers.$lt&&(fieldMatchers.$lt=value);else fieldMatchers[operator]=value}function mergeNe(value,fieldMatchers){"$ne"in fieldMatchers?fieldMatchers.$ne.push(value):fieldMatchers.$ne=[value]}function mergeEq(value,fieldMatchers){delete fieldMatchers.$gt;delete fieldMatchers.$gte;delete fieldMatchers.$lt;delete fieldMatchers.$lte;delete fieldMatchers.$ne;fieldMatchers.$eq=value}function mergeRegex(value,fieldMatchers){"$regex"in fieldMatchers?fieldMatchers.$regex.push(value):fieldMatchers.$regex=[value]}function mergeAndedSelectorsNested(obj){var prop2,i2,value;for(prop2 in obj){if(Array.isArray(obj))for(i2 in obj)obj[i2].$and&&(obj[i2]=mergeAndedSelectors(obj[i2].$and));"object"==typeof(value=obj[prop2])&&mergeAndedSelectorsNested(value)}return obj}function isAndInSelector(obj,isAnd){var prop2,value;for(prop2 in obj){"$and"===prop2&&(isAnd=!0);"object"==typeof(value=obj[prop2])&&(isAnd=isAndInSelector(value,isAnd))}return isAnd}function massageSelector(input){var fields,i2,field,matcher,result=clone2(input);isAndInSelector(result,!1)&&"$and"in(result=mergeAndedSelectorsNested(result))&&(result=mergeAndedSelectors(result.$and));["$or","$nor"].forEach(function(orOrNor){orOrNor in result&&result[orOrNor].forEach(function(subSelector){var i3,field2,matcher2,fields2=Object.keys(subSelector);for(i3=0;i3<fields2.length;i3++)"object"==typeof(matcher2=subSelector[field2=fields2[i3]])&&null!==matcher2||(subSelector[field2]={$eq:matcher2})})});"$not"in result&&(result.$not=mergeAndedSelectors([result.$not]));fields=Object.keys(result);for(i2=0;i2<fields.length;i2++){field=fields[i2];"object"==typeof(matcher=result[field])&&null!==matcher||(matcher={$eq:matcher});result[field]=matcher}normalizeArrayOperators(result);return result}function normalizeArrayOperators(selector){Object.keys(selector).forEach(function(field){var matcher=selector[field];Array.isArray(matcher)?matcher.forEach(function(matcherItem){matcherItem&&"object"==typeof matcherItem&&normalizeArrayOperators(matcherItem)}):"$ne"===field?selector.$ne=[matcher]:"$regex"===field?selector.$regex=[matcher]:matcher&&"object"==typeof matcher&&normalizeArrayOperators(matcher)})}function createFieldSorter(sort){function getFieldValuesAsArray(doc){return sort.map(function(sorting){var parsedField=parseField(getKey2(sorting));return getFieldFromDoc(doc,parsedField)})}return function(aRow,bRow){var collation=collate(getFieldValuesAsArray(aRow.doc),getFieldValuesAsArray(bRow.doc));return 0!==collation?collation:compare2(aRow.doc._id,bRow.doc._id)}}function filterInMemoryFields(rows,requestDef,inMemoryFields){var fieldSorter,skip,limit;rows=rows.filter(function(row){return rowFilter(row.doc,requestDef.selector,inMemoryFields)});if(requestDef.sort){fieldSorter=createFieldSorter(requestDef.sort);rows=rows.sort(fieldSorter);"string"!=typeof requestDef.sort[0]&&"desc"===getValue(requestDef.sort[0])&&(rows=rows.reverse())}if("limit"in requestDef||"skip"in requestDef){skip=requestDef.skip||0;limit=("limit"in requestDef?requestDef.limit:rows.length)+skip;rows=rows.slice(skip,limit)}return rows}function rowFilter(doc,selector,inMemoryFields){return inMemoryFields.every(function(field){var matcher=selector[field],parsedField=parseField(field),docFieldValue=getFieldFromDoc(doc,parsedField);return isCombinationalField(field)?matchCominationalSelector(field,matcher,doc):matchSelector(matcher,doc,parsedField,docFieldValue)})}function matchSelector(matcher,doc,parsedField,docFieldValue){return!matcher||("object"==typeof matcher?Object.keys(matcher).every(function(maybeUserOperator){var subParsedField,subDocFieldValue,userValue=matcher[maybeUserOperator];if(0===maybeUserOperator.indexOf("$"))return match2(maybeUserOperator,doc,userValue,parsedField,docFieldValue);subParsedField=parseField(maybeUserOperator);if(void 0===docFieldValue&&"object"!=typeof userValue&&subParsedField.length>0)return!1;subDocFieldValue=getFieldFromDoc(docFieldValue,subParsedField);return"object"==typeof userValue?matchSelector(userValue,doc,parsedField,subDocFieldValue):match2("$eq",doc,userValue,subParsedField,subDocFieldValue)}):matcher===docFieldValue)}function matchCominationalSelector(field,matcher,doc){return"$or"===field?matcher.some(function(orMatchers){return rowFilter(doc,orMatchers,Object.keys(orMatchers))}):"$not"===field?!rowFilter(doc,matcher,Object.keys(matcher)):!matcher.find(function(orMatchers){return rowFilter(doc,orMatchers,Object.keys(orMatchers))})}function match2(userOperator,doc,userValue,parsedField,docFieldValue){if(!matchers[userOperator])throw new Error('unknown operator "'+userOperator+'" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');return matchers[userOperator](doc,userValue,parsedField,docFieldValue)}function fieldExists(docFieldValue){return null!=docFieldValue}function fieldIsNotUndefined(docFieldValue){return void 0!==docFieldValue}function modField(docFieldValue,userValue){return"number"==typeof docFieldValue&&parseInt(docFieldValue,10)===docFieldValue&&docFieldValue%userValue[0]===userValue[1]}function arrayContainsValue(docFieldValue,userValue){return userValue.some(function(val){return docFieldValue instanceof Array?docFieldValue.some(function(docFieldValueItem){return 0===collate(val,docFieldValueItem)}):0===collate(val,docFieldValue)})}function arrayContainsAllValues(docFieldValue,userValue){return userValue.every(function(val){return docFieldValue.some(function(docFieldValueItem){return 0===collate(val,docFieldValueItem)})})}function arraySize(docFieldValue,userValue){return docFieldValue.length===userValue}function regexMatch(docFieldValue,userValue){return new RegExp(userValue).test(docFieldValue)}function typeMatch(docFieldValue,userValue){switch(userValue){case"null":return null===docFieldValue;case"boolean":return"boolean"==typeof docFieldValue;case"number":return"number"==typeof docFieldValue;case"string":return"string"==typeof docFieldValue;case"array":return docFieldValue instanceof Array;case"object":return"[object Object]"==={}.toString.call(docFieldValue)}}function matchesSelector(doc,selector){var rowsMatched;if("object"!=typeof selector)throw new Error("Selector error: expected a JSON object");return(rowsMatched=filterInMemoryFields([{doc}],{selector:selector=massageSelector(selector)},Object.keys(selector)))&&1===rowsMatched.length}function evalFilter(input){return scopeEval('"use strict";\nreturn '+input+";",{})}function evalView(input){return scopeEval(["return function(doc) {",' "use strict";'," var emitted = false;"," var emit = function (a, b) {"," emitted = true;"," };"," var view = "+input+";"," view(doc);"," if (emitted) {"," return true;"," }","};"].join("\n"),{})}function validate3(opts,callback){if(opts.selector&&opts.filter&&"_selector"!==opts.filter){var filterName="string"==typeof opts.filter?opts.filter:"function";return callback(new Error('selector invalid for filter "'+filterName+'"'))}callback()}function normalize(opts){opts.view&&!opts.filter&&(opts.filter="_view");opts.selector&&!opts.filter&&(opts.filter="_selector");opts.filter&&"string"==typeof opts.filter&&("_view"===opts.filter?opts.view=normalizeDesignDocFunctionName(opts.view):opts.filter=normalizeDesignDocFunctionName(opts.filter))}function shouldFilter(changesHandler,opts){return opts.filter&&"string"==typeof opts.filter&&!opts.doc_ids&&!isRemote(changesHandler.db)}function filter2(changesHandler,opts){var err3,viewName,filterName,callback=opts.complete;if("_view"===opts.filter){if(!opts.view||"string"!=typeof opts.view){err3=createError(BAD_REQUEST,"`view` filter parameter not found or invalid.");return callback(err3)}viewName=parseDesignDocFunctionName(opts.view);changesHandler.db.get("_design/"+viewName[0],function(err4,ddoc){if(changesHandler.isCancelled)return callback(null,{status:"cancelled"});if(err4)return callback(generateErrorFromResponse(err4));var mapFun=ddoc&&ddoc.views&&ddoc.views[viewName[1]]&&ddoc.views[viewName[1]].map;if(!mapFun)return callback(createError(MISSING_DOC,ddoc.views?"missing json key: "+viewName[1]:"missing json key: views"));opts.filter=evalView(mapFun);changesHandler.doChanges(opts)})}else if(opts.selector){opts.filter=function(doc){return matchesSelector(doc,opts.selector)};changesHandler.doChanges(opts)}else{filterName=parseDesignDocFunctionName(opts.filter);changesHandler.db.get("_design/"+filterName[0],function(err4,ddoc){if(changesHandler.isCancelled)return callback(null,{status:"cancelled"});if(err4)return callback(generateErrorFromResponse(err4));var filterFun=ddoc&&ddoc.filters&&ddoc.filters[filterName[1]];if(!filterFun)return callback(createError(MISSING_DOC,ddoc&&ddoc.filters?"missing json key: "+filterName[1]:"missing json key: filters"));opts.filter=evalFilter(filterFun);changesHandler.doChanges(opts)})}}function tryCatchInChangeListener(self3,change,pending3,lastSeq){try{self3.emit("change",change,pending3,lastSeq)}catch(e3){guardedConsole("error",'Error in .on("change", function):',e3)}}function processChange(doc,metadata,opts){var change,changeList=[{rev:doc._rev}];"all_docs"===opts.style&&(changeList=collectLeaves(metadata.rev_tree).map(function(x2){return{rev:x2.rev}}));change={id:metadata.id,changes:changeList,doc};isDeleted(metadata,doc._rev)&&(change.deleted=!0);if(opts.conflicts){change.doc._conflicts=collectConflicts(metadata);change.doc._conflicts.length||delete change.doc._conflicts}return change}function yankError(callback,docId){return function(err3,results){if(err3||results[0]&&results[0].error){(err3=err3||results[0]).docId=docId;callback(err3)}else callback(null,results.length?results[0]:results)}}function cleanDocs(docs){var i2,doc,atts,j2,att;for(i2=0;i2<docs.length;i2++)if((doc=docs[i2])._deleted)delete doc._attachments;else if(doc._attachments){atts=Object.keys(doc._attachments);for(j2=0;j2<atts.length;j2++){att=atts[j2];doc._attachments[att]=pick(doc._attachments[att],["data","digest","content_type","length","revpos","stub"])}}}function compareByIdThenRev(a2,b3){return a2._id===b3._id?(a2._revisions?a2._revisions.start:0)-(b3._revisions?b3._revisions.start:0):a2._id<b3._id?-1:1}function computeHeight(revs){var height={},edges=[];traverseRevTree(revs,function(isLeaf,pos,id,prnt){var rev$$1=pos+"-"+id;isLeaf&&(height[rev$$1]=0);void 0!==prnt&&edges.push({from:prnt,to:rev$$1});return rev$$1});edges.reverse();edges.forEach(function(edge){void 0===height[edge.from]?height[edge.from]=1+height[edge.to]:height[edge.from]=Math.min(height[edge.from],1+height[edge.to])});return height}function allDocsKeysParse(opts){var keys3="limit"in opts?opts.keys.slice(opts.skip,opts.limit+opts.skip):opts.skip>0?opts.keys.slice(opts.skip):opts.keys;opts.keys=keys3;opts.skip=0;delete opts.limit;if(opts.descending){keys3.reverse();opts.descending=!1}}function doNextCompaction(self3){var task=self3._compactionQueue[0],opts=task.opts,callback=task.callback;self3.get("_local/compaction").catch(function(){return!1}).then(function(doc){doc&&doc.last_seq&&(opts.last_seq=doc.last_seq);self3._compact(opts,function(err3,res2){err3?callback(err3):callback(null,res2);nextTick(function(){self3._compactionQueue.shift();self3._compactionQueue.length&&doNextCompaction(self3)})})})}function appendPurgeSeq(db,docId,rev$$1){return db.get("_local/purges").then(function(doc){const purgeSeq=doc.purgeSeq+1;doc.purges.push({docId,rev:rev$$1,purgeSeq});doc.purges.length>self.purged_infos_limit&&doc.purges.splice(0,doc.purges.length-self.purged_infos_limit);doc.purgeSeq=purgeSeq;return doc}).catch(function(err3){if(404!==err3.status)throw err3;return{_id:"_local/purges",purges:[{docId,rev:rev$$1,purgeSeq:0}],purgeSeq:0}}).then(function(doc){return db.put(doc)})}function attachmentNameError(name){return"_"===name.charAt(0)&&name+" is not a valid attachment name, attachment names cannot start with '_'"}function isNotSingleDoc(doc){return null===doc||"object"!=typeof doc||Array.isArray(doc)}function isValidRev(rev$$1){return"string"==typeof rev$$1&&validRevRegex.test(rev$$1)}function parseAdapter(name,opts){var adapters,preferredAdapters,prefix,adapterName,i2,adapter,match3=name.match(/([a-z-]*):\/\/(.*)/);if(match3)return{name:/https?/.test(match3[1])?match3[1]+"://"+match3[2]:match3[2],adapter:match3[1]};adapters=PouchDB.adapters;preferredAdapters=PouchDB.preferredAdapters;prefix=PouchDB.prefix;if(!(adapterName=opts.adapter))for(i2=0;i2<preferredAdapters.length&&"idb"===(adapterName=preferredAdapters[i2])&&"websql"in adapters&&hasLocalStorage()&&localStorage["_pouch__websqldb_"+prefix+name];++i2)guardedConsole("log",'PouchDB is downgrading "'+name+'" to WebSQL to avoid data loss, because it was already opened with WebSQL.');return{name:(adapter=adapters[adapterName])&&"use_prefix"in adapter&&!adapter.use_prefix?name:prefix+name,adapter:adapterName}}function inherits(A2,B2){A2.prototype=Object.create(B2.prototype,{constructor:{value:A2}})}function createClass(parent,init3){let klass=function(...args){if(!(this instanceof klass))return new klass(...args);init3.apply(this,args)};inherits(klass,parent);return klass}function prepareForDestruction(self3){function onDestroyed(from_constructor){self3.removeListener("closed",onClosed);from_constructor||self3.constructor.emit("destroyed",self3.name)}function onClosed(){self3.removeListener("destroyed",onDestroyed);self3.constructor.emit("unref",self3)}self3.once("destroyed",onDestroyed);self3.once("closed",onClosed);self3.constructor.emit("ref",self3)}function safeJsonParse(str){try{return JSON.parse(str)}catch(e3){return import_vuvuzela.default.parse(str)}}function safeJsonStringify(json){try{return JSON.stringify(json)}catch(e3){return import_vuvuzela.default.stringify(json)}}function checkBlobSupport(txn,store,docIdOrCreateDoc){return new Promise(function(resolve){var blob$$1=createBlob2([""]);let req;if("function"==typeof docIdOrCreateDoc){const doc=docIdOrCreateDoc(blob$$1);req=txn.objectStore(store).put(doc)}else{const docId=docIdOrCreateDoc;req=txn.objectStore(store).put(blob$$1,docId)}req.onsuccess=function(){var matchedChrome=navigator.userAgent.match(/Chrome\/(\d+)/),matchedEdge=navigator.userAgent.match(/Edge\//);resolve(matchedEdge||!matchedChrome||parseInt(matchedChrome[1],10)>=43)};req.onerror=txn.onabort=function(e3){e3.preventDefault();e3.stopPropagation();resolve(!1)}}).catch(function(){return!1})}function toObject(array){return array.reduce(function(obj,item){obj[item]=!0;return obj},{})}function parseRevisionInfo(rev$$1){var idx2,left,right;if(!/^\d+-/.test(rev$$1))return createError(INVALID_REV);idx2=rev$$1.indexOf("-");left=rev$$1.substring(0,idx2);right=rev$$1.substring(idx2+1);return{prefix:parseInt(left,10),id:right}}function makeRevTreeFromRevisions(revisions,opts){var i2,len,pos=revisions.start-revisions.ids.length+1,revisionIds=revisions.ids,ids=[revisionIds[0],opts,[]];for(i2=1,len=revisionIds.length;i2<len;i2++)ids=[revisionIds[i2],{status:"missing"},[ids]];return[{pos,ids}]}function parseDoc(doc,newEdits,dbOpts){var nRevNum,newRevId,revInfo,opts,result,key3,specialKey,error;dbOpts||(dbOpts={deterministic_revs:!0});opts={status:"available"};doc._deleted&&(opts.deleted=!0);if(newEdits){doc._id||(doc._id=uuid());newRevId=rev2(doc,dbOpts.deterministic_revs);if(doc._rev){if((revInfo=parseRevisionInfo(doc._rev)).error)return revInfo;doc._rev_tree=[{pos:revInfo.prefix,ids:[revInfo.id,{status:"missing"},[[newRevId,opts,[]]]]}];nRevNum=revInfo.prefix+1}else{doc._rev_tree=[{pos:1,ids:[newRevId,opts,[]]}];nRevNum=1}}else{if(doc._revisions){doc._rev_tree=makeRevTreeFromRevisions(doc._revisions,opts);nRevNum=doc._revisions.start;newRevId=doc._revisions.ids[0]}if(!doc._rev_tree){if((revInfo=parseRevisionInfo(doc._rev)).error)return revInfo;nRevNum=revInfo.prefix;newRevId=revInfo.id;doc._rev_tree=[{pos:nRevNum,ids:[newRevId,opts,[]]}]}}invalidIdError(doc._id);doc._rev=nRevNum+"-"+newRevId;result={metadata:{},data:{}};for(key3 in doc)if(Object.prototype.hasOwnProperty.call(doc,key3)){if((specialKey="_"===key3[0])&&!reservedWords[key3]){(error=createError(DOC_VALIDATION,key3)).message=DOC_VALIDATION.message+": "+key3;throw error}specialKey&&!dataWords[key3]?result.metadata[key3.slice(1)]=doc[key3]:result.data[key3]=doc[key3]}return result}function parseBase64(data){try{return thisAtob(data)}catch(e3){return{error:createError(BAD_ARG,"Attachment is not a valid base64 string")}}}function preprocessString(att,blobType,callback){var asBinary=parseBase64(att.data);if(asBinary.error)return callback(asBinary.error);att.length=asBinary.length;att.data="blob"===blobType?binStringToBluffer(asBinary,att.content_type):"base64"===blobType?thisBtoa(asBinary):asBinary;binaryMd5(asBinary,function(result){att.digest="md5-"+result;callback()})}function preprocessBlob(att,blobType,callback){binaryMd5(att.data,function(md5){att.digest="md5-"+md5;att.length=att.data.size||att.data.length||0;"binary"===blobType?blobToBinaryString(att.data,function(binString){att.data=binString;callback()}):"base64"===blobType?blobToBase64(att.data,function(b64){att.data=b64;callback()}):callback()})}function preprocessAttachment(att,blobType,callback){if(att.stub)return callback();"string"==typeof att.data?preprocessString(att,blobType,callback):preprocessBlob(att,blobType,callback)}function preprocessAttachments(docInfos,blobType,callback){function done(){docv++;docInfos.length===docv&&(overallErr?callback(overallErr):callback())}var docv,overallErr;if(!docInfos.length)return callback();docv=0;docInfos.forEach(function(docInfo){function processedAttachment(err3){overallErr=err3;++recv===attachments.length&&done()}var key3,attachments=docInfo.data&&docInfo.data._attachments?Object.keys(docInfo.data._attachments):[],recv=0;if(!attachments.length)return done();for(key3 in docInfo.data._attachments)Object.prototype.hasOwnProperty.call(docInfo.data._attachments,key3)&&preprocessAttachment(docInfo.data._attachments[key3],blobType,processedAttachment)})}function updateDoc(revLimit,prev,docInfo,results,i2,cb2,writeDoc,newEdits){var previousWinningRev,previouslyDeleted,deleted,isRoot,newDoc,merged,err3,newRev,winningRev$$1,winningRevIsDeleted,delta;if(revExists(prev.rev_tree,docInfo.metadata.rev)&&!newEdits){results[i2]=docInfo;return cb2()}previousWinningRev=prev.winningRev||winningRev(prev);previouslyDeleted="deleted"in prev?prev.deleted:isDeleted(prev,previousWinningRev);deleted="deleted"in docInfo.metadata?docInfo.metadata.deleted:isDeleted(docInfo.metadata);isRoot=/^1-/.test(docInfo.metadata.rev);if(previouslyDeleted&&!deleted&&newEdits&&isRoot){(newDoc=docInfo.data)._rev=previousWinningRev;newDoc._id=docInfo.metadata.id;docInfo=parseDoc(newDoc,newEdits)}merged=merge2(prev.rev_tree,docInfo.metadata.rev_tree[0],revLimit);if(newEdits&&(previouslyDeleted&&deleted&&"new_leaf"!==merged.conflicts||!previouslyDeleted&&"new_leaf"!==merged.conflicts||previouslyDeleted&&!deleted&&"new_branch"===merged.conflicts)){err3=createError(REV_CONFLICT);results[i2]=err3;return cb2()}newRev=docInfo.metadata.rev;docInfo.metadata.rev_tree=merged.tree;docInfo.stemmedRevs=merged.stemmedRevs||[];prev.rev_map&&(docInfo.metadata.rev_map=prev.rev_map);winningRev$$1=winningRev(docInfo.metadata);delta=previouslyDeleted===(winningRevIsDeleted=isDeleted(docInfo.metadata,winningRev$$1))?0:previouslyDeleted<winningRevIsDeleted?-1:1;writeDoc(docInfo,winningRev$$1,winningRevIsDeleted,newRev===winningRev$$1?winningRevIsDeleted:isDeleted(docInfo.metadata,newRev),!0,delta,i2,cb2)}function rootIsMissing(docInfo){return"missing"===docInfo.metadata.rev_tree[0].ids[1].status}function processDocs(revLimit,docInfos,api,fetchedDocs,tx,results,writeDoc,opts,overallCallback){function insertDoc(docInfo,resultsIdx,callback){var err3,winningRev$$1=winningRev(docInfo.metadata),deleted=isDeleted(docInfo.metadata,winningRev$$1);if("was_delete"in opts&&deleted){results[resultsIdx]=createError(MISSING_DOC,"deleted");return callback()}if(newEdits&&rootIsMissing(docInfo)){err3=createError(REV_CONFLICT);results[resultsIdx]=err3;return callback()}writeDoc(docInfo,winningRev$$1,deleted,deleted,!1,deleted?0:1,resultsIdx,callback)}function checkAllDocsDone(){++docsDone===docsToDo&&overallCallback&&overallCallback()}var newEdits,idsToDocs,docsDone,docsToDo;revLimit=revLimit||1e3;newEdits=opts.new_edits;idsToDocs=new Map;docsDone=0;docsToDo=docInfos.length;docInfos.forEach(function(currentDoc,resultsIdx){var fun,id;if(currentDoc._id&&isLocalId(currentDoc._id)){fun=currentDoc._deleted?"_removeLocal":"_putLocal";api[fun](currentDoc,{ctx:tx},function(err3,res2){results[resultsIdx]=err3||res2;checkAllDocsDone()})}else{id=currentDoc.metadata.id;if(idsToDocs.has(id)){docsToDo--;idsToDocs.get(id).push([currentDoc,resultsIdx])}else idsToDocs.set(id,[[currentDoc,resultsIdx]])}});idsToDocs.forEach(function(docs,id){function docWritten(){++numDone<docs.length?nextDoc():checkAllDocsDone()}function nextDoc(){var merged,value=docs[numDone],currentDoc=value[0],resultsIdx=value[1];if(fetchedDocs.has(id))updateDoc(revLimit,fetchedDocs.get(id),currentDoc,results,resultsIdx,docWritten,writeDoc,newEdits);else{merged=merge2([],currentDoc.metadata.rev_tree[0],revLimit);currentDoc.metadata.rev_tree=merged.tree;currentDoc.stemmedRevs=merged.stemmedRevs||[];insertDoc(currentDoc,resultsIdx,docWritten)}}var numDone=0;nextDoc()})}function idbError(callback){return function(evt){var message="unknown_error";evt.target&&evt.target.error&&(message=evt.target.error.name||evt.target.error.message);callback(createError(IDB_ERROR,message,evt.type))}}function encodeMetadata(metadata,winningRev$$1,deleted){return{data:safeJsonStringify(metadata),winningRev:winningRev$$1,deletedOrLocal:deleted?"1":"0",seq:metadata.seq,id:metadata.id}}function decodeMetadata(storedObject){if(!storedObject)return null;var metadata=safeJsonParse(storedObject.data);metadata.winningRev=storedObject.winningRev;metadata.deleted="1"===storedObject.deletedOrLocal;metadata.seq=storedObject.seq;return metadata}function decodeDoc(doc){if(!doc)return doc;var idx2=doc._doc_id_rev.lastIndexOf(":");doc._id=doc._doc_id_rev.substring(0,idx2-1);doc._rev=doc._doc_id_rev.substring(idx2+1);delete doc._doc_id_rev;return doc}function readBlobData(body,type,asBlob,callback){asBlob?callback(body?"string"!=typeof body?body:b64ToBluffer(body,type):createBlob2([""],{type})):body?"string"!=typeof body?readAsBinaryString(body,function(binary){callback(thisBtoa(binary))}):callback(body):callback("")}function fetchAttachmentsIfNecessary(doc,opts,txn,cb2){function checkDone(){++numDone===attachments.length&&cb2&&cb2()}function fetchAttachment(doc2,att){var attObj=doc2._attachments[att],digest=attObj.digest;txn.objectStore(ATTACH_STORE).get(digest).onsuccess=function(e3){attObj.body=e3.target.result.body;checkDone()}}var numDone,attachments=Object.keys(doc._attachments||{});if(!attachments.length)return cb2&&cb2();numDone=0;attachments.forEach(function(att){if(opts.attachments&&opts.include_docs)fetchAttachment(doc,att);else{doc._attachments[att].stub=!0;checkDone()}})}function postProcessAttachments(results,asBlob){return Promise.all(results.map(function(row){if(row.doc&&row.doc._attachments){var attNames=Object.keys(row.doc._attachments);return Promise.all(attNames.map(function(att){var body,type,attObj=row.doc._attachments[att];if("body"in attObj){body=attObj.body;type=attObj.content_type;return new Promise(function(resolve){readBlobData(body,type,asBlob,function(data){row.doc._attachments[att]=Object.assign(pick(attObj,["digest","content_type"]),{data});resolve()})})}}))}}))}function compactRevs(revs,docId,txn){function checkDone(){--count||deleteOrphanedAttachments()}function deleteOrphanedAttachments(){possiblyOrphanedDigests.length&&possiblyOrphanedDigests.forEach(function(digest){attAndSeqStore.index("digestSeq").count(IDBKeyRange.bound(digest+"::",digest+"::￿",!1,!1)).onsuccess=function(e3){e3.target.result||attStore.delete(digest)}})}var possiblyOrphanedDigests=[],seqStore=txn.objectStore(BY_SEQ_STORE),attStore=txn.objectStore(ATTACH_STORE),attAndSeqStore=txn.objectStore(ATTACH_AND_SEQ_STORE),count=revs.length;revs.forEach(function(rev3){var index6=seqStore.index("_doc_id_rev"),key3=docId+"::"+rev3;index6.getKey(key3).onsuccess=function(e3){var seq=e3.target.result;if("number"!=typeof seq)return checkDone();seqStore.delete(seq);attAndSeqStore.index("seq").openCursor(IDBKeyRange.only(seq)).onsuccess=function(event2){var digest,cursor2=event2.target.result;if(cursor2){digest=cursor2.value.digestSeq.split("::")[0];possiblyOrphanedDigests.push(digest);attAndSeqStore.delete(cursor2.primaryKey);cursor2.continue()}else checkDone()}}})}function openTransactionSafely(idb,stores,mode){try{return{txn:idb.transaction(stores,mode)}}catch(err3){return{error:err3}}}function idbBulkDocs(dbOpts,req,opts,api,idb,callback){function startTransaction(){var txnResult=openTransactionSafely(idb,[DOC_STORE,BY_SEQ_STORE,ATTACH_STORE,LOCAL_STORE,ATTACH_AND_SEQ_STORE,META_STORE],"readwrite");if(txnResult.error)return callback(txnResult.error);(txn=txnResult.txn).onabort=idbError(callback);txn.ontimeout=idbError(callback);txn.oncomplete=complete;docStore=txn.objectStore(DOC_STORE);bySeqStore=txn.objectStore(BY_SEQ_STORE);attachStore=txn.objectStore(ATTACH_STORE);attachAndSeqStore=txn.objectStore(ATTACH_AND_SEQ_STORE);(metaStore=txn.objectStore(META_STORE)).get(META_STORE).onsuccess=function(e3){metaDoc=e3.target.result;updateDocCountIfReady()};verifyAttachments(function(err3){if(err3){preconditionErrored=!0;return callback(err3)}fetchExistingDocs()})}function onAllDocsProcessed(){allDocsProcessed=!0;updateDocCountIfReady()}function idbProcessDocs(){processDocs(dbOpts.revs_limit,docInfos,api,fetchedDocs,txn,results,writeDoc,opts,onAllDocsProcessed)}function updateDocCountIfReady(){if(metaDoc&&allDocsProcessed){metaDoc.docCount+=docCountDelta;metaStore.put(metaDoc)}}function fetchExistingDocs(){function checkDone(){++numFetched===docInfos.length&&idbProcessDocs()}function readMetadata(event2){var metadata=decodeMetadata(event2.target.result);metadata&&fetchedDocs.set(metadata.id,metadata);checkDone()}var numFetched,i3,len2,docInfo;if(docInfos.length){numFetched=0;for(i3=0,len2=docInfos.length;i3<len2;i3++)(docInfo=docInfos[i3])._id&&isLocalId(docInfo._id)?checkDone():docStore.get(docInfo.metadata.id).onsuccess=readMetadata}}function complete(){if(!preconditionErrored){changesHandler$1.notify(api._meta.name);callback(null,results)}}function verifyAttachment(digest,callback2){attachStore.get(digest).onsuccess=function(e3){if(e3.target.result)callback2();else{var err3=createError(MISSING_STUB,"unknown stub attachment with digest "+digest);err3.status=412;callback2(err3)}}}function verifyAttachments(finish){function checkDone(){++numDone===digests.length&&finish(err3)}var numDone,err3,digests=[];docInfos.forEach(function(docInfo){docInfo.data&&docInfo.data._attachments&&Object.keys(docInfo.data._attachments).forEach(function(filename){var att=docInfo.data._attachments[filename];att.stub&&digests.push(att.digest)})});if(!digests.length)return finish();numDone=0;digests.forEach(function(digest){verifyAttachment(digest,function(attErr){attErr&&!err3&&(err3=attErr);checkDone()})})}function writeDoc(docInfo,winningRev$$1,winningRevIsDeleted,newRevIsDeleted,isUpdate,delta,resultsIdx,callback2){var doc2;docInfo.metadata.winningRev=winningRev$$1;docInfo.metadata.deleted=winningRevIsDeleted;(doc2=docInfo.data)._id=docInfo.metadata.id;doc2._rev=docInfo.metadata.rev;newRevIsDeleted&&(doc2._deleted=!0);if(doc2._attachments&&Object.keys(doc2._attachments).length)return writeAttachments(docInfo,winningRev$$1,winningRevIsDeleted,isUpdate,resultsIdx,callback2);docCountDelta+=delta;updateDocCountIfReady();finishDoc(docInfo,winningRev$$1,winningRevIsDeleted,isUpdate,resultsIdx,callback2)}function finishDoc(docInfo,winningRev$$1,winningRevIsDeleted,isUpdate,resultsIdx,callback2){function afterPutDoc(e3){var metadataToStore,revsToDelete=docInfo.stemmedRevs||[];isUpdate&&api.auto_compaction&&(revsToDelete=revsToDelete.concat(compactTree(docInfo.metadata)));revsToDelete&&revsToDelete.length&&compactRevs(revsToDelete,docInfo.metadata.id,txn);metadata.seq=e3.target.result;metadataToStore=encodeMetadata(metadata,winningRev$$1,winningRevIsDeleted);docStore.put(metadataToStore).onsuccess=afterPutMetadata}function afterPutMetadata(){results[resultsIdx]={ok:!0,id:metadata.id,rev:metadata.rev};fetchedDocs.set(docInfo.metadata.id,docInfo.metadata);insertAttachmentMappings(docInfo,metadata.seq,callback2)}var putReq,doc2=docInfo.data,metadata=docInfo.metadata;doc2._doc_id_rev=metadata.id+"::"+metadata.rev;delete doc2._id;delete doc2._rev;(putReq=bySeqStore.put(doc2)).onsuccess=afterPutDoc;putReq.onerror=function afterPutDocError(e3){e3.preventDefault();e3.stopPropagation();bySeqStore.index("_doc_id_rev").getKey(doc2._doc_id_rev).onsuccess=function(e4){bySeqStore.put(doc2,e4.target.result).onsuccess=afterPutDoc}}}function writeAttachments(docInfo,winningRev$$1,winningRevIsDeleted,isUpdate,resultsIdx,callback2){function collectResults(){numDone===attachments.length&&finishDoc(docInfo,winningRev$$1,winningRevIsDeleted,isUpdate,resultsIdx,callback2)}function attachmentSaved(){numDone++;collectResults()}var doc2=docInfo.data,numDone=0,attachments=Object.keys(doc2._attachments);attachments.forEach(function(key3){var data,att=docInfo.data._attachments[key3];if(att.stub){numDone++;collectResults()}else{data=att.data;delete att.data;att.revpos=parseInt(winningRev$$1,10);saveAttachment(att.digest,data,attachmentSaved)}})}function insertAttachmentMappings(docInfo,seq,callback2){function checkDone(){++attsAdded===attsToAdd.length&&callback2()}function add(att){var digest=docInfo.data._attachments[att].digest,req2=attachAndSeqStore.put({seq,digestSeq:digest+"::"+seq});req2.onsuccess=checkDone;req2.onerror=function(e3){e3.preventDefault();e3.stopPropagation();checkDone()}}var i3,attsAdded=0,attsToAdd=Object.keys(docInfo.data._attachments||{});if(!attsToAdd.length)return callback2();for(i3=0;i3<attsToAdd.length;i3++)add(attsToAdd[i3])}function saveAttachment(digest,data,callback2){attachStore.count(digest).onsuccess=function(e3){var newAtt;if(e3.target.result)return callback2();newAtt={digest,body:data};attachStore.put(newAtt).onsuccess=callback2}}var txn,docStore,bySeqStore,attachStore,attachAndSeqStore,metaStore,docInfoError,metaDoc,i2,len,doc,allDocsProcessed,docCountDelta,results,fetchedDocs,preconditionErrored,blobType,docInfos=req.docs;for(i2=0,len=docInfos.length;i2<len;i2++)(doc=docInfos[i2])._id&&isLocalId(doc._id)||(doc=docInfos[i2]=parseDoc(doc,opts.new_edits,dbOpts)).error&&!docInfoError&&(docInfoError=doc);if(docInfoError)return callback(docInfoError);allDocsProcessed=!1;docCountDelta=0;results=new Array(docInfos.length);fetchedDocs=new Map;preconditionErrored=!1;blobType=api._meta.blobSupport?"blob":"base64";preprocessAttachments(docInfos,blobType,function(err3){if(err3)return callback(err3);startTransaction()})}function runBatchedCursor(objectStore,keyRange,descending,batchSize,onBatch){function onGetAll(e3){valuesBatch=e3.target.result;keysBatch&&onBatch(keysBatch,valuesBatch,pseudoCursor)}function onGetAllKeys(e3){keysBatch=e3.target.result;valuesBatch&&onBatch(keysBatch,valuesBatch,pseudoCursor)}function onCursor(e3){var cursor=e3.target.result;if(!cursor)return onBatch();onBatch([cursor.key],[cursor.value],cursor)}var keysBatch,valuesBatch,pseudoCursor;-1===batchSize&&(batchSize=1e3);if("function"==typeof objectStore.getAll&&"function"==typeof objectStore.getAllKeys&&batchSize>1&&!descending){pseudoCursor={continue:function continuePseudoCursor(){var lastKey,newKeyRange;if(!keysBatch.length)return onBatch();lastKey=keysBatch[keysBatch.length-1];if(keyRange&&keyRange.upper)try{newKeyRange=IDBKeyRange.bound(lastKey,keyRange.upper,!0,keyRange.upperOpen)}catch(e3){if("DataError"===e3.name&&0===e3.code)return onBatch()}else newKeyRange=IDBKeyRange.lowerBound(lastKey,!0);keyRange=newKeyRange;keysBatch=null;valuesBatch=null;objectStore.getAll(keyRange,batchSize).onsuccess=onGetAll;objectStore.getAllKeys(keyRange,batchSize).onsuccess=onGetAllKeys}};objectStore.getAll(keyRange,batchSize).onsuccess=onGetAll;objectStore.getAllKeys(keyRange,batchSize).onsuccess=onGetAllKeys}else descending?objectStore.openCursor(keyRange,"prev").onsuccess=onCursor:objectStore.openCursor(keyRange).onsuccess=onCursor}function getAll(objectStore,keyRange,onSuccess){if("function"!=typeof objectStore.getAll){var values2=[];objectStore.openCursor(keyRange).onsuccess=function onCursor(e3){var cursor=e3.target.result;if(cursor){values2.push(cursor.value);cursor.continue()}else onSuccess({target:{result:values2}})}}else objectStore.getAll(keyRange).onsuccess=onSuccess}function allDocsKeys(keys3,docStore,onBatch){var valuesBatch=new Array(keys3.length),count=0;keys3.forEach(function(key3,index6){docStore.get(key3).onsuccess=function(event2){event2.target.result?valuesBatch[index6]=event2.target.result:valuesBatch[index6]={key:key3,error:"not_found"};++count===keys3.length&&onBatch(keys3,valuesBatch,{})}})}function createKeyRange(start,end,inclusiveEnd,key3,descending){try{if(start&&end)return descending?IDBKeyRange.bound(end,start,!inclusiveEnd,!1):IDBKeyRange.bound(start,end,!1,!inclusiveEnd);if(start)return descending?IDBKeyRange.upperBound(start):IDBKeyRange.lowerBound(start);if(end)return descending?IDBKeyRange.lowerBound(end,!inclusiveEnd):IDBKeyRange.upperBound(end,!inclusiveEnd);if(key3)return IDBKeyRange.only(key3)}catch(e3){return{error:e3}}return null}function idbAllDocs(opts,idb,callback){function fetchDocAsynchronously(metadata,row,winningRev$$1){var key4=metadata.id+"::"+winningRev$$1;docIdRevIndex.get(key4).onsuccess=function onGetDoc(e3){row.doc=decodeDoc(e3.target.result)||{};if(opts.conflicts){var conflicts=collectConflicts(metadata);conflicts.length&&(row.doc._conflicts=conflicts)}fetchAttachmentsIfNecessary(row.doc,opts,txn)}}function allDocsInner(winningRev$$1,metadata){var row={id:metadata.id,key:metadata.id,value:{rev:winningRev$$1}};if(metadata.deleted){if(keys3){results.push(row);row.value.deleted=!0;row.doc=null}}else if(skip--<=0){results.push(row);opts.include_docs&&fetchDocAsynchronously(metadata,row,winningRev$$1)}}function processBatch(batchValues){var i2,len,batchValue,metadata;for(i2=0,len=batchValues.length;i2<len&&results.length!==limit;i2++)(batchValue=batchValues[i2]).error&&keys3?results.push(batchValue):allDocsInner((metadata=decodeMetadata(batchValue)).winningRev,metadata)}function onBatch(batchKeys,batchValues,cursor){if(cursor){processBatch(batchValues);results.length<limit&&cursor.continue()}}function onResultsReady(){var returnVal={total_rows:docCount,offset:opts.skip,rows:results};opts.update_seq&&void 0!==updateSeq&&(returnVal.update_seq=updateSeq);callback(null,returnVal)}var keyRange,keyRangeError,stores,txnResult,txn,docStore,seqStore,metaStore,docIdRevIndex,results,docCount,updateSeq,start="startkey"in opts&&opts.startkey,end="endkey"in opts&&opts.endkey,key3="key"in opts&&opts.key,keys3="keys"in opts&&opts.keys,skip=opts.skip||0,limit="number"==typeof opts.limit?opts.limit:-1,inclusiveEnd=!1!==opts.inclusive_end;if(!keys3&&(keyRangeError=(keyRange=createKeyRange(start,end,inclusiveEnd,key3,opts.descending))&&keyRange.error)&&("DataError"!==keyRangeError.name||0!==keyRangeError.code))return callback(createError(IDB_ERROR,keyRangeError.name,keyRangeError.message));stores=[DOC_STORE,BY_SEQ_STORE,META_STORE];opts.attachments&&stores.push(ATTACH_STORE);if((txnResult=openTransactionSafely(idb,stores,"readonly")).error)return callback(txnResult.error);(txn=txnResult.txn).oncomplete=function onTxnComplete(){opts.attachments?postProcessAttachments(results,opts.binary).then(onResultsReady):onResultsReady()};txn.onabort=idbError(callback);docStore=txn.objectStore(DOC_STORE);seqStore=txn.objectStore(BY_SEQ_STORE);metaStore=txn.objectStore(META_STORE);docIdRevIndex=seqStore.index("_doc_id_rev");results=[];metaStore.get(META_STORE).onsuccess=function(e3){docCount=e3.target.result.docCount};opts.update_seq&&(seqStore.openKeyCursor(null,"prev").onsuccess=e3=>{var cursor=e3.target.result;cursor&&cursor.key&&(updateSeq=cursor.key)});if(!keyRangeError&&0!==limit){if(keys3)return allDocsKeys(keys3,docStore,onBatch);if(-1===limit)return getAll(docStore,keyRange,function onGetAll(e3){var values2=e3.target.result;opts.descending&&(values2=values2.reverse());processBatch(values2)});runBatchedCursor(docStore,keyRange,opts.descending,limit+skip,onBatch)}}function countDocs(txn,cb2){txn.objectStore(DOC_STORE).index("deletedOrLocal").count(IDBKeyRange.only("0")).onsuccess=function(e3){cb2(e3.target.result)}}function tryCode(fun,err3,res2,PouchDB2){try{fun(err3,res2)}catch(err4){PouchDB2.emit("error",err4)}}function applyNext(){if(!running&&queue.length){running=!0;queue.shift()()}}function enqueueTask(action2,callback,PouchDB2){queue.push(function runAction(){action2(function runCallback(err3,res2){tryCode(callback,err3,res2,PouchDB2);running=!1;nextTick(function runNext(){applyNext()})})});applyNext()}function changes(opts,api,dbName,idb){function onGetMetadata(doc,seq,metadata,cb2){var docIdRev;if(metadata.seq!==seq)return cb2();if(metadata.winningRev===doc._rev)return cb2(metadata,doc);docIdRev=doc._id+"::"+metadata.winningRev;docIdRevIndex.get(docIdRev).onsuccess=function(e3){cb2(metadata,decodeDoc(e3.target.result))}}function fetchWinningDocAndMetadata(doc,seq,cb2){if(docIds&&!docIds.has(doc._id))return cb2();var metadata=docIdsToMetadata.get(doc._id);if(metadata)return onGetMetadata(doc,seq,metadata,cb2);docStore.get(doc._id).onsuccess=function(e3){metadata=decodeMetadata(e3.target.result);docIdsToMetadata.set(doc._id,metadata);onGetMetadata(doc,seq,metadata,cb2)}}function finish(){opts.complete(null,{results,last_seq:lastSeq})}var id,docIds,lastSeq,limit,results,numResults,filter4,docIdsToMetadata,txn,bySeqStore,docStore,docIdRevIndex,objectStores,txnResult;if((opts=clone2(opts)).continuous){id=dbName+":"+uuid();changesHandler$1.addListener(dbName,id,api,opts);changesHandler$1.notify(dbName);return{cancel:function(){changesHandler$1.removeListener(dbName,id)}}}docIds=opts.doc_ids&&new Set(opts.doc_ids);opts.since=opts.since||0;lastSeq=opts.since;0===(limit="limit"in opts?opts.limit:-1)&&(limit=1);results=[];numResults=0;filter4=filterChange(opts);docIdsToMetadata=new Map;objectStores=[DOC_STORE,BY_SEQ_STORE];opts.attachments&&objectStores.push(ATTACH_STORE);if((txnResult=openTransactionSafely(idb,objectStores,"readonly")).error)return opts.complete(txnResult.error);(txn=txnResult.txn).onabort=idbError(opts.complete);txn.oncomplete=function onTxnComplete(){!opts.continuous&&opts.attachments?postProcessAttachments(results).then(finish):finish()};bySeqStore=txn.objectStore(BY_SEQ_STORE);docStore=txn.objectStore(DOC_STORE);docIdRevIndex=bySeqStore.index("_doc_id_rev");runBatchedCursor(bySeqStore,opts.since&&!opts.descending?IDBKeyRange.lowerBound(opts.since,!0):null,opts.descending,limit,function onBatch(batchKeys,batchValues,cursor){function processMetadataAndWinningDoc(metadata,winningDoc){var filtered,change=opts.processChange(winningDoc,metadata,opts);lastSeq=change.seq=metadata.seq;if("object"==typeof(filtered=filter4(change)))return Promise.reject(filtered);if(!filtered)return Promise.resolve();numResults++;opts.return_docs&&results.push(change);return opts.attachments&&opts.include_docs?new Promise(function(resolve){fetchAttachmentsIfNecessary(winningDoc,opts,txn,function(){postProcessAttachments([change],opts.binary).then(function(){resolve(change)})})}):Promise.resolve(change)}function onBatchDone(){var i2,len,winningDoc,metadata,promises=[];for(i2=0,len=winningDocs.length;i2<len&&numResults!==limit;i2++)if(winningDoc=winningDocs[i2]){metadata=metadatas[i2];promises.push(processMetadataAndWinningDoc(metadata,winningDoc))}Promise.all(promises).then(function(changes3){for(var i3=0,len2=changes3.length;i3<len2;i3++)changes3[i3]&&opts.onChange(changes3[i3])}).catch(opts.complete);numResults!==limit&&cursor.continue()}var winningDocs,metadatas,numDone;if(cursor&&batchKeys.length){winningDocs=new Array(batchKeys.length);metadatas=new Array(batchKeys.length);numDone=0;batchValues.forEach(function(value,i2){fetchWinningDocAndMetadata(decodeDoc(value),batchKeys[i2],function(metadata,winningDoc){metadatas[i2]=metadata;winningDocs[i2]=winningDoc;++numDone===batchKeys.length&&onBatchDone()})})}})}function IdbPouch(opts,callback){var api=this;enqueueTask(function(thisCallback){init2(api,opts,thisCallback)},callback,api.constructor)}function init2(api,opts,callback){function enrichCallbackError(callback2){return function(error,result){error&&error instanceof Error&&!error.reason&&idbGlobalFailureError&&(error.reason=idbGlobalFailureError);callback2(error,result)}}function createSchema(db){var attAndSeqStore,docStore=db.createObjectStore(DOC_STORE,{keyPath:"id"});db.createObjectStore(BY_SEQ_STORE,{autoIncrement:!0}).createIndex("_doc_id_rev","_doc_id_rev",{unique:!0});db.createObjectStore(ATTACH_STORE,{keyPath:"digest"});db.createObjectStore(META_STORE,{keyPath:"id",autoIncrement:!1});db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);docStore.createIndex("deletedOrLocal","deletedOrLocal",{unique:!1});db.createObjectStore(LOCAL_STORE,{keyPath:"_id"});(attAndSeqStore=db.createObjectStore(ATTACH_AND_SEQ_STORE,{autoIncrement:!0})).createIndex("seq","seq");attAndSeqStore.createIndex("digestSeq","digestSeq",{unique:!0})}function addDeletedOrLocalIndex(txn,callback2){var docStore=txn.objectStore(DOC_STORE);docStore.createIndex("deletedOrLocal","deletedOrLocal",{unique:!1});docStore.openCursor().onsuccess=function(event2){var metadata,deleted,cursor=event2.target.result;if(cursor){deleted=isDeleted(metadata=cursor.value);metadata.deletedOrLocal=deleted?"1":"0";docStore.put(metadata);cursor.continue()}else callback2()}}function createLocalStoreSchema(db){db.createObjectStore(LOCAL_STORE,{keyPath:"_id"}).createIndex("_doc_id_rev","_doc_id_rev",{unique:!0})}function migrateLocalStore(txn,cb2){var localStore=txn.objectStore(LOCAL_STORE),docStore=txn.objectStore(DOC_STORE),seqStore=txn.objectStore(BY_SEQ_STORE);docStore.openCursor().onsuccess=function(event2){var metadata,docId,local,rev3,docIdRev,start,end,index6,range4,seqCursor,cursor2=event2.target.result;if(cursor2){local=isLocalId(docId=(metadata=cursor2.value).id);rev3=winningRev(metadata);if(local){docIdRev=docId+"::"+rev3;start=docId+"::";end=docId+"::~";index6=seqStore.index("_doc_id_rev");range4=IDBKeyRange.bound(start,end,!1,!1);(seqCursor=index6.openCursor(range4)).onsuccess=function(e3){if(seqCursor=e3.target.result){var data=seqCursor.value;data._doc_id_rev===docIdRev&&localStore.put(data);seqStore.delete(seqCursor.primaryKey);seqCursor.continue()}else{docStore.delete(cursor2.primaryKey);cursor2.continue()}}}else cursor2.continue()}else cb2&&cb2()}}function addAttachAndSeqStore(db){var attAndSeqStore=db.createObjectStore(ATTACH_AND_SEQ_STORE,{autoIncrement:!0});attAndSeqStore.createIndex("seq","seq");attAndSeqStore.createIndex("digestSeq","digestSeq",{unique:!0})}function migrateAttsAndSeqs(txn,callback2){var seqStore=txn.objectStore(BY_SEQ_STORE),attStore=txn.objectStore(ATTACH_STORE),attAndSeqStore=txn.objectStore(ATTACH_AND_SEQ_STORE);attStore.count().onsuccess=function(e3){if(!e3.target.result)return callback2();seqStore.openCursor().onsuccess=function(e4){var doc,seq,atts,digestMap,j2,digests,digest,cursor=e4.target.result;if(!cursor)return callback2();doc=cursor.value;seq=cursor.primaryKey;atts=Object.keys(doc._attachments||{});digestMap={};for(j2=0;j2<atts.length;j2++)digestMap[doc._attachments[atts[j2]].digest]=!0;digests=Object.keys(digestMap);for(j2=0;j2<digests.length;j2++){digest=digests[j2];attAndSeqStore.put({seq,digestSeq:digest+"::"+seq})}cursor.continue()}}}function migrateMetadata(txn){function decodeMetadataCompat(storedObject){if(!storedObject.data){storedObject.deleted="1"===storedObject.deletedOrLocal;return storedObject}return decodeMetadata(storedObject)}var bySeqStore=txn.objectStore(BY_SEQ_STORE),docStore=txn.objectStore(DOC_STORE);docStore.openCursor().onsuccess=function(e3){function onGetMetadataSeq(){var metadataToStore=encodeMetadata(metadata,metadata.winningRev,metadata.deleted);docStore.put(metadataToStore).onsuccess=function(){cursor2.continue()}}var metadata,cursor2=e3.target.result;if(cursor2){(metadata=decodeMetadataCompat(cursor2.value)).winningRev=metadata.winningRev||winningRev(metadata);if(metadata.seq)return onGetMetadataSeq();(function fetchMetadataSeq(){var start=metadata.id+"::",end=metadata.id+"::￿",req2=bySeqStore.index("_doc_id_rev").openCursor(IDBKeyRange.bound(start,end)),metadataSeq=0;req2.onsuccess=function(e4){var seq,cursor3=e4.target.result;if(!cursor3){metadata.seq=metadataSeq;return onGetMetadataSeq()}(seq=cursor3.primaryKey)>metadataSeq&&(metadataSeq=seq);cursor3.continue()}})()}}}var cached,req,dbName=opts.name,idb=null,idbGlobalFailureError=null;api._meta=null;api._remote=!1;api.type=function(){return"idb"};api._id=toPromise(function(callback2){callback2(null,api._meta.instanceId)});api._bulkDocs=function idb_bulkDocs(req2,reqOpts,callback2){idbBulkDocs(opts,req2,reqOpts,api,idb,enrichCallbackError(callback2))};api._get=function idb_get(id,opts2,callback2){function finish(){callback2(err3,{doc,metadata,ctx:txn})}var doc,metadata,err3,txnResult,txn=opts2.ctx;if(!txn){if((txnResult=openTransactionSafely(idb,[DOC_STORE,BY_SEQ_STORE,ATTACH_STORE],"readonly")).error)return callback2(txnResult.error);txn=txnResult.txn}txn.objectStore(DOC_STORE).get(id).onsuccess=function(e3){var rev3,objectStore,key3;if(!(metadata=decodeMetadata(e3.target.result))){err3=createError(MISSING_DOC,"missing");return finish()}if(opts2.rev)rev3=opts2.latest?latest(opts2.rev,metadata):opts2.rev;else{rev3=metadata.winningRev;if(isDeleted(metadata)){err3=createError(MISSING_DOC,"deleted");return finish()}}objectStore=txn.objectStore(BY_SEQ_STORE);key3=metadata.id+"::"+rev3;objectStore.index("_doc_id_rev").get(key3).onsuccess=function(e4){(doc=e4.target.result)&&(doc=decodeDoc(doc));if(!doc){err3=createError(MISSING_DOC,"missing");return finish()}finish()}}};api._getAttachment=function(docId,attachId,attachment,opts2,callback2){var txn,txnResult,digest,type;if(opts2.ctx)txn=opts2.ctx;else{if((txnResult=openTransactionSafely(idb,[DOC_STORE,BY_SEQ_STORE,ATTACH_STORE],"readonly")).error)return callback2(txnResult.error);txn=txnResult.txn}digest=attachment.digest;type=attachment.content_type;txn.objectStore(ATTACH_STORE).get(digest).onsuccess=function(e3){readBlobData(e3.target.result.body,type,opts2.binary,function(blobData){callback2(null,blobData)})}};api._info=function idb_info(callback2){var updateSeq,docCount,txn,txnResult=openTransactionSafely(idb,[META_STORE,BY_SEQ_STORE],"readonly");if(txnResult.error)return callback2(txnResult.error);(txn=txnResult.txn).objectStore(META_STORE).get(META_STORE).onsuccess=function(e3){docCount=e3.target.result.docCount};txn.objectStore(BY_SEQ_STORE).openKeyCursor(null,"prev").onsuccess=function(e3){var cursor=e3.target.result;updateSeq=cursor?cursor.key:0};txn.oncomplete=function(){callback2(null,{doc_count:docCount,update_seq:updateSeq,idb_attachment_format:api._meta.blobSupport?"binary":"base64"})}};api._allDocs=function idb_allDocs(opts2,callback2){idbAllDocs(opts2,idb,enrichCallbackError(callback2))};api._changes=function idbChanges2(opts2){return changes(opts2,api,dbName,idb)};api._close=function(callback2){idb.close();cachedDBs.delete(dbName);callback2()};api._getRevisionTree=function(docId,callback2){var txnResult=openTransactionSafely(idb,[DOC_STORE],"readonly");if(txnResult.error)return callback2(txnResult.error);txnResult.txn.objectStore(DOC_STORE).get(docId).onsuccess=function(event2){var doc=decodeMetadata(event2.target.result);doc?callback2(null,doc.rev_tree):callback2(createError(MISSING_DOC))}};api._doCompaction=function(docId,revs,callback2){var txn,txnResult=openTransactionSafely(idb,[DOC_STORE,BY_SEQ_STORE,ATTACH_STORE,ATTACH_AND_SEQ_STORE],"readwrite");if(txnResult.error)return callback2(txnResult.error);(txn=txnResult.txn).objectStore(DOC_STORE).get(docId).onsuccess=function(event2){var winningRev$$1,deleted,metadata=decodeMetadata(event2.target.result);traverseRevTree(metadata.rev_tree,function(isLeaf,pos,revHash,ctx,opts2){var rev3=pos+"-"+revHash;-1!==revs.indexOf(rev3)&&(opts2.status="missing")});compactRevs(revs,docId,txn);winningRev$$1=metadata.winningRev;deleted=metadata.deleted;txn.objectStore(DOC_STORE).put(encodeMetadata(metadata,winningRev$$1,deleted))};txn.onabort=idbError(callback2);txn.oncomplete=function(){callback2()}};api._getLocal=function(id,callback2){var req2,txnResult=openTransactionSafely(idb,[LOCAL_STORE],"readonly");if(txnResult.error)return callback2(txnResult.error);(req2=txnResult.txn.objectStore(LOCAL_STORE).get(id)).onerror=idbError(callback2);req2.onsuccess=function(e3){var doc=e3.target.result;if(doc){delete doc._doc_id_rev;callback2(null,doc)}else callback2(createError(MISSING_DOC))}};api._putLocal=function(doc,opts2,callback2){var oldRev,id,tx,ret,txnResult,oStore,req2;if("function"==typeof opts2){callback2=opts2;opts2={}}delete doc._revisions;oldRev=doc._rev;id=doc._id;doc._rev=oldRev?"0-"+(parseInt(oldRev.split("-")[1],10)+1):"0-1";if(!(tx=opts2.ctx)){if((txnResult=openTransactionSafely(idb,[LOCAL_STORE],"readwrite")).error)return callback2(txnResult.error);(tx=txnResult.txn).onerror=idbError(callback2);tx.oncomplete=function(){ret&&callback2(null,ret)}}oStore=tx.objectStore(LOCAL_STORE);if(oldRev)(req2=oStore.get(id)).onsuccess=function(e3){var oldDoc=e3.target.result;oldDoc&&oldDoc._rev===oldRev?oStore.put(doc).onsuccess=function(){ret={ok:!0,id:doc._id,rev:doc._rev};opts2.ctx&&callback2(null,ret)}:callback2(createError(REV_CONFLICT))};else{(req2=oStore.add(doc)).onerror=function(e3){callback2(createError(REV_CONFLICT));e3.preventDefault();e3.stopPropagation()};req2.onsuccess=function(){ret={ok:!0,id:doc._id,rev:doc._rev};opts2.ctx&&callback2(null,ret)}}};api._removeLocal=function(doc,opts2,callback2){var tx,txnResult,ret,id,oStore,req2;if("function"==typeof opts2){callback2=opts2;opts2={}}if(!(tx=opts2.ctx)){if((txnResult=openTransactionSafely(idb,[LOCAL_STORE],"readwrite")).error)return callback2(txnResult.error);(tx=txnResult.txn).oncomplete=function(){ret&&callback2(null,ret)}}id=doc._id;(req2=(oStore=tx.objectStore(LOCAL_STORE)).get(id)).onerror=idbError(callback2);req2.onsuccess=function(e3){var oldDoc=e3.target.result;if(oldDoc&&oldDoc._rev===doc._rev){oStore.delete(id);ret={ok:!0,id,rev:"0-0"};opts2.ctx&&callback2(null,ret)}else callback2(createError(MISSING_DOC))}};api._destroy=function(opts2,callback2){var openReq,req2;changesHandler$1.removeAllListeners(dbName);if((openReq=openReqList.get(dbName))&&openReq.result){openReq.result.close();cachedDBs.delete(dbName)}(req2=indexedDB.deleteDatabase(dbName)).onsuccess=function(){openReqList.delete(dbName);hasLocalStorage()&&dbName in localStorage&&delete localStorage[dbName];callback2(null,{ok:!0})};req2.onerror=idbError(callback2)};if(cached=cachedDBs.get(dbName)){idb=cached.idb;api._meta=cached.global;return nextTick(function(){callback(null,api)})}req=indexedDB.open(dbName,ADAPTER_VERSION);openReqList.set(dbName,req);req.onupgradeneeded=function(e3){var txn,migrations,i2,db=e3.target.result;if(e3.oldVersion<1)return createSchema(db);txn=e3.currentTarget.transaction;e3.oldVersion<3&&createLocalStoreSchema(db);e3.oldVersion<4&&addAttachAndSeqStore(db);migrations=[addDeletedOrLocalIndex,migrateLocalStore,migrateAttsAndSeqs,migrateMetadata];i2=e3.oldVersion;(function next2(){var migration=migrations[i2-1];i2++;migration&&migration(txn,next2)})()};req.onsuccess=function(e3){function completeSetup(){if(void 0!==blobSupport&&storedMetaDoc){api._meta={name:dbName,instanceId,blobSupport};cachedDBs.set(dbName,{idb,global:api._meta});callback(null,api)}}function storeMetaDocIfReady(){if(void 0!==docCount&&void 0!==metaDoc){var instanceKey=dbName+"_id";instanceKey in metaDoc?instanceId=metaDoc[instanceKey]:metaDoc[instanceKey]=instanceId=uuid();metaDoc.docCount=docCount;txn.objectStore(META_STORE).put(metaDoc)}}var txn,storedMetaDoc,metaDoc,docCount,blobSupport,instanceId;(idb=e3.target.result).onversionchange=function(){idb.close();cachedDBs.delete(dbName)};idb.onabort=function(e4){guardedConsole("error","Database has a global failure",e4.target.error);idbGlobalFailureError=e4.target.error;idb.close();cachedDBs.delete(dbName)};txn=idb.transaction([META_STORE,DETECT_BLOB_SUPPORT_STORE,DOC_STORE],"readwrite");storedMetaDoc=!1;txn.objectStore(META_STORE).get(META_STORE).onsuccess=function(e4){metaDoc=e4.target.result||{id:META_STORE};storeMetaDocIfReady()};countDocs(txn,function(count){docCount=count;storeMetaDocIfReady()});blobSupportPromise||(blobSupportPromise=checkBlobSupport(txn,DETECT_BLOB_SUPPORT_STORE,"key"));blobSupportPromise.then(function(val){blobSupport=val;completeSetup()});txn.oncomplete=function(){storedMetaDoc=!0;completeSetup()};txn.onabort=idbError(callback)};req.onerror=function(e3){var msg=e3.target.error&&e3.target.error.message;msg?-1!==msg.indexOf("stored database is a higher version")&&(msg=new Error('This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter')):msg="Failed to open indexedDB, are you in private browsing mode?";guardedConsole("error",msg);callback(createError(IDB_ERROR,msg))}}function needsSanitise(name,isPath){return isPath?TEST_PATH_INVALID.test(name):TEST_KEY_INVALID.test(name)}function sanitise(name,isPath){const correctCharacters=function(match3){let good="";for(let i2=0;i2<match3.length;i2++){const code=match3.charCodeAt(i2);if(code===IS_DOT&&isPath&&0===i2)good+=".";else{if(code===SLASH&&isPath)continue;good+="_c"+code+"_"}}return good};return isPath?name.replace(PATH_INVALID,correctCharacters):name.replace(KEY_INVALID,correctCharacters)}function needsRewrite(data){for(const key3 of Object.keys(data)){if(needsSanitise(key3))return!0;if(null===data[key3]||"boolean"==typeof data[key3])return!0;if("object"==typeof data[key3])return needsRewrite(data[key3])}}function rewrite(data){if(!needsRewrite(data))return!1;const isArray2=Array.isArray(data),clone3=isArray2?[]:{};Object.keys(data).forEach(function(key3){const safeKey=isArray2?key3:sanitise(key3);null===data[key3]?clone3[safeKey]=IDB_NULL:"boolean"==typeof data[key3]?clone3[safeKey]=data[key3]?IDB_TRUE:IDB_FALSE:"object"==typeof data[key3]?clone3[safeKey]=rewrite(data[key3]):clone3[safeKey]=data[key3]});return clone3}function idbError2(callback){return function(evt){let message="unknown_error";evt.target&&evt.target.error&&(message=evt.target.error.name||evt.target.error.message);callback(createError(IDB_ERROR,message,evt.type))}}function processAttachment(name,src,doc,isBinary,attachmentFormat){delete doc._attachments[name].stub;if("base64"===attachmentFormat){if(isBinary){const att=src.attachments[doc._attachments[name].digest];doc._attachments[name].data=b64ToBluffer(att.data,att.content_type)}else doc._attachments[name].data=src.attachments[doc._attachments[name].digest].data;delete doc._attachments[name].length;return Promise.resolve()}if(isBinary){doc._attachments[name].data=src.attachments[doc._attachments[name].digest].data;return Promise.resolve()}return new Promise(function(resolve){readAsBinaryString(src.attachments[doc._attachments[name].digest].data,function(binString){doc._attachments[name].data=thisBtoa(binString);delete doc._attachments[name].length;resolve()})})}function rawIndexFields(ddoc,viewName){return(ddoc.views[viewName].options&&ddoc.views[viewName].options.def&&ddoc.views[viewName].options.def.fields||[]).map(function(field){return"string"==typeof field?field:Object.keys(field)[0]})}function isPartialFilterView(ddoc,viewName){return viewName in ddoc.views&&ddoc.views[viewName].options&&ddoc.views[viewName].options.def&&ddoc.views[viewName].options.def.partial_filter_selector}function naturalIndexName(fields){return"_find_idx/"+fields.join("/")}function correctIndexFields(fields){return["deleted"].concat(fields.map(function(field){return["_id","_rev","_deleted","_attachments"].includes(field)?field.substr(1):"data."+sanitise(field,!0)}))}function createIdbVersion(){return versionMultiplier*POUCHDB_IDB_VERSION+(new Date).getTime()}function getPouchDbVersion(version2){return Math.floor(version2/versionMultiplier)}function maintainNativeIndexes(openReq,reject){const docStore=openReq.transaction.objectStore(DOC_STORE2);docStore.getAll(IDBKeyRange.bound("_design/","_design/￿")).onsuccess=function(e3){const results=e3.target.result,existingIndexNames=Array.from(docStore.indexNames),expectedIndexes=results.filter(function(row){return 0===row.deleted&&row.revs[row.rev].data.views}).map(function(row){return row.revs[row.rev].data}).reduce(function(indexes2,ddoc){return Object.keys(ddoc.views).reduce(function(acc,viewName){const fields=rawIndexFields(ddoc,viewName);fields&&fields.length>0&&(acc[naturalIndexName(fields)]=correctIndexFields(fields));return acc},indexes2)},{}),expectedIndexNames=Object.keys(expectedIndexes),systemIndexNames=["seq","deleted,id"];existingIndexNames.forEach(function(index6){-1===systemIndexNames.indexOf(index6)&&-1===expectedIndexNames.indexOf(index6)&&docStore.deleteIndex(index6)});const newIndexNames=expectedIndexNames.filter(function(ei){return-1===existingIndexNames.indexOf(ei)});try{newIndexNames.forEach(function(indexName){docStore.createIndex(indexName,expectedIndexes[indexName])})}catch(err3){reject(err3)}}}function upgradePouchDbSchema(dbName,db,tx,pouchdbVersion){if(pouchdbVersion<1){db.createObjectStore(DOC_STORE2,{keyPath:"id"}).createIndex("seq","seq",{unique:!0});db.createObjectStore(META_LOCAL_STORE,{keyPath:"id"})}if(pouchdbVersion<2){const docStore=tx.objectStore(DOC_STORE2);docStore.createIndex("deleted,id",["deleted","id"],{unique:!0});dbName.includes("-mrview-")&&docStore.deleteIndex("seq")}}function openDatabase(openDatabases2,api,opts,resolve,reject){const openReq=opts.versionChangedWhileOpen?indexedDB.open(opts.name):indexedDB.open(opts.name,createIdbVersion());openReq.onupgradeneeded=function(e3){if(e3.oldVersion>0&&e3.oldVersion<versionMultiplier)throw new Error('Incorrect adapter: you should specify the "idb" adapter to open this DB');if(0===e3.oldVersion&&e3.newVersion<versionMultiplier){indexedDB.deleteDatabase(opts.name);throw new Error("Database was deleted while open")}const tx=e3.target.transaction,db=e3.target.result,pouchdbVersion=getPouchDbVersion(e3.oldVersion);upgradePouchDbSchema(opts.name,db,tx,pouchdbVersion);maintainNativeIndexes(openReq,reject);if(pouchdbVersion<2){const docStore=openReq.transaction.objectStore(DOC_STORE2),metaStore=openReq.transaction.objectStore(META_LOCAL_STORE);docStore.openCursor().onsuccess=event2=>{const cursor=event2.target.result;if(!cursor)return;const doc=cursor.value;if(!isLocalId(doc.id))return cursor.continue();metaStore.put(doc).onsuccess=()=>{cursor.delete(doc).onsuccess=()=>{cursor.continue()}}}}};openReq.onblocked=function(e3){console.error("onblocked, this should never happen",e3)};openReq.onsuccess=function(e3){const idb=e3.target.result;idb.onabort=function(e4){console.error("Database has a global failure",e4.target.error);delete openDatabases2[opts.name];idb.close()};idb.onversionchange=function(){console.log("Database was made stale, closing handle");openDatabases2[opts.name].versionChangedWhileOpen=!0;idb.close()};idb.onclose=function(){console.log("Database was made stale, closing handle");opts.name in openDatabases2&&(openDatabases2[opts.name].versionChangedWhileOpen=!0)};let metadata={id:META_LOCAL_STORE};const txn=idb.transaction([META_LOCAL_STORE],"readwrite");txn.oncomplete=function(){resolve({idb,metadata})};const metaStore=txn.objectStore(META_LOCAL_STORE);metaStore.get(META_LOCAL_STORE).onsuccess=function(e4){metadata=e4.target.result||metadata;let changed=!1;if(!("doc_count"in metadata)){changed=!0;metadata.doc_count=0}if(!("seq"in metadata)){changed=!0;metadata.seq=0}if(!("db_uuid"in metadata)){changed=!0;metadata.db_uuid=uuid()}if("idb_attachment_format"in metadata){if(changed){api.blobSupport=metadata.idb_attachment_format;metaStore.put(metadata)}}else checkBlobSupport(txn,META_LOCAL_STORE,blob=>({id:"blob-support",blob})).then(blobSupport=>{api.blobSupport=metadata.idb_attachment_format=blobSupport?"binary":"base64";metaStore.put(metadata)})}};openReq.onerror=function(e3){reject(e3.target.error)}}function setup(openDatabases2,api,opts){if(!openDatabases2[opts.name]||openDatabases2[opts.name].versionChangedWhileOpen){opts.versionChangedWhileOpen=openDatabases2[opts.name]&&openDatabases2[opts.name].versionChangedWhileOpen;openDatabases2[opts.name]=new Promise(function(resolve,reject){openDatabase(openDatabases2,api,opts,resolve,reject)})}return openDatabases2[opts.name]}function info2(metadata,callback){callback(null,{doc_count:metadata.doc_count,update_seq:metadata.seq})}function get4(txn,id,opts,callback){if(txn.error)return callback(txn.error);txn.txn.objectStore(DOC_STORE2).get(id).onsuccess=function(e3){const doc=e3.target.result;let rev3;rev3=opts.rev?opts.latest?latest(opts.rev,doc):opts.rev:doc&&doc.rev;if(!doc||doc.deleted&&!opts.rev||!(rev3 in doc.revs)){callback(createError(MISSING_DOC,"missing"));return}const result=doc.revs[rev3].data;result._id=doc.id;result._rev=rev3;callback(null,{doc:result,metadata:doc,ctx:txn})}}function getLocal(txn,id,api,callback){if(txn.error)return callback(txn.error);txn.txn.objectStore(META_LOCAL_STORE).get(id).onsuccess=function(e3){const doc=e3.target.result;if(!doc){callback(createError(MISSING_DOC,"missing"));return}const result=doc.revs[doc.rev].data;result._id=doc.id;result._rev=doc.rev;if(result._attachments){const processing=[];for(const name in result._attachments)processing.push(processAttachment(name,doc,result,BINARY_ATTACHMENTS,api.blobSupport));Promise.all(processing).then(()=>callback(null,result)).catch(callback)}else callback(null,result)}}function getAttachment(docId,attachId,attachment,opts,cb2){if(isLocalId(docId)){cb2(createError(MISSING_DOC,"missing"));return}const data=opts.metadata.attachments[attachment.digest].data;if("string"!=typeof data){if(opts.binary)return cb2(null,data);readAsBinaryString(data,function(binString){cb2(null,thisBtoa(binString))})}else opts.binary?cb2(null,b64ToBluffer(data,attachment.content_type)):cb2(null,data)}function bulkDocs(api,req,opts,metadata,dbOpts,idbChanges2,callback){function docsRevsLimit(doc){return isLocalId(doc.id)?1:revsLimit}function rootIsMissing2(doc){return"missing"===doc.rev_tree[0].ids[1].status}function fetchExistingDocs(txn2,docs2){function readDone(e3){e3.target.result&&(oldDocs[e3.target.result.id]=e3.target.result);++fetched===docs2.length&&processDocs2(txn2,docs2,oldDocs)}let fetched=0;const oldDocs={};docs2.forEach(function(doc){const docStore=isLocalId(doc.id)?META_LOCAL_STORE:DOC_STORE2;txn2.objectStore(docStore).get(doc.id).onsuccess=readDone})}function revHasAttachment(doc,rev3,digest){return doc.revs[rev3]&&doc.revs[rev3].data._attachments&&Object.values(doc.revs[rev3].data._attachments).find(function(att){return att.digest===digest})}function processDocs2(txn2,docs2,oldDocs){docs2.forEach(function(doc,i2){let newDoc;if("was_delete"in opts&&!Object.prototype.hasOwnProperty.call(oldDocs,doc.id))newDoc=createError(MISSING_DOC,"deleted");else if(opts.new_edits&&!Object.prototype.hasOwnProperty.call(oldDocs,doc.id)&&rootIsMissing2(doc))newDoc=createError(REV_CONFLICT);else if(Object.prototype.hasOwnProperty.call(oldDocs,doc.id)){newDoc=update2(0,doc,oldDocs[doc.id]);if(0==newDoc)return}else{const merged=merge2([],doc.rev_tree[0],docsRevsLimit(doc));doc.rev_tree=merged.tree;doc.stemmedRevs=merged.stemmedRevs;newDoc=doc;newDoc.isNewDoc=!0;newDoc.wasDeleted=doc.revs[doc.rev].deleted?1:0}if(newDoc.error)results[i2]=newDoc;else{oldDocs[newDoc.id]=newDoc;lastWriteIndex=i2;write(txn2,newDoc,i2)}})}function convertDocFormat(doc){const newDoc={id:doc.metadata.id,rev:doc.metadata.rev,rev_tree:doc.metadata.rev_tree,revs:doc.metadata.revs||{}};newDoc.revs[newDoc.rev]={data:doc.data,deleted:doc.metadata.deleted};return newDoc}function update2(txn2,doc,oldDoc){if(doc.rev in oldDoc.revs&&!opts.new_edits)return!1;const isRoot=/^1-/.test(doc.rev);if(oldDoc.deleted&&!doc.deleted&&opts.new_edits&&isRoot){const tmp=doc.revs[doc.rev].data;tmp._rev=oldDoc.rev;tmp._id=oldDoc.id;doc=convertDocFormat(parseDoc(tmp,opts.new_edits,dbOpts))}const merged=merge2(oldDoc.rev_tree,doc.rev_tree[0],docsRevsLimit(doc));doc.stemmedRevs=merged.stemmedRevs;doc.rev_tree=merged.tree;const revs=oldDoc.revs;revs[doc.rev]=doc.revs[doc.rev];doc.revs=revs;doc.attachments=oldDoc.attachments;if(opts.new_edits&&(oldDoc.deleted&&doc.deleted||!oldDoc.deleted&&"new_leaf"!==merged.conflicts||oldDoc.deleted&&!doc.deleted&&"new_branch"===merged.conflicts||oldDoc.rev===doc.rev))return createError(REV_CONFLICT);doc.wasDeleted=oldDoc.deleted;return doc}function write(txn2,doc,i2){const winningRev$$1=winningRev(doc),writtenRev=doc.rev,isLocal=isLocalId(doc.id),theDoc=doc.revs[winningRev$$1].data,isNewDoc=doc.isNewDoc;if(rewriteEnabled){const result=rewrite(theDoc);if(result){doc.data=result;delete doc.data._attachments}else doc.data=theDoc}else doc.data=theDoc;doc.rev=winningRev$$1;doc.deleted=doc.revs[winningRev$$1].deleted?1:0;if(!isLocal){doc.seq=++metadata.seq;let delta=0;doc.isNewDoc?delta=doc.deleted?0:1:doc.wasDeleted!==doc.deleted&&(delta=doc.deleted?-1:1);metadata.doc_count+=delta}delete doc.isNewDoc;delete doc.wasDeleted;let revsToDelete=doc.stemmedRevs||[];if(autoCompaction&&!isNewDoc){const result=compactTree(doc);result.length&&(revsToDelete=revsToDelete.concat(result))}revsToDelete.length&&revsToDelete.forEach(function(rev3){delete doc.revs[rev3]});delete doc.stemmedRevs;"attachments"in doc||(doc.attachments={});if(theDoc._attachments)for(const k2 in theDoc._attachments){const attachment=theDoc._attachments[k2];if(attachment.stub){if(!(attachment.digest in doc.attachments)){error=createError(MISSING_STUB);txn2.abort();return}revHasAttachment(doc,writtenRev,attachment.digest)&&(doc.attachments[attachment.digest].revs[writtenRev]=!0)}else{doc.attachments[attachment.digest]=attachment;doc.attachments[attachment.digest].revs={};doc.attachments[attachment.digest].revs[writtenRev]=!0;theDoc._attachments[k2]={stub:!0,digest:attachment.digest,content_type:attachment.content_type,length:attachment.length,revpos:parseInt(writtenRev,10)}}}if(isLocal&&doc.deleted){txn2.objectStore(META_LOCAL_STORE).delete(doc.id).onsuccess=function(){results[i2]={ok:!0,id:doc.id,rev:"0-0"}};updateSeq(i2);return}const docStore=isLocal?META_LOCAL_STORE:DOC_STORE2;txn2.objectStore(docStore).put(doc).onsuccess=function(){results[i2]={ok:!0,id:doc.id,rev:writtenRev};updateSeq(i2)}}function updateSeq(i2){i2===lastWriteIndex&&txn.objectStore(META_LOCAL_STORE).put(metadata)}function preProcessAttachment(attachment){if(attachment.stub)return Promise.resolve(attachment);let binData;if("string"==typeof attachment.data){try{binData=thisAtob(attachment.data)}catch(e3){return Promise.reject(createError(BAD_ARG,"Attachment is not a valid base64 string"))}"binary"===metadata.idb_attachment_format&&(attachment.data=binStringToBluffer(binData,attachment.content_type))}else{binData=attachment.data;if("base64"===metadata.idb_attachment_format)return new Promise(resolve=>{blobToBase64(attachment.data,function(b64){attachment.data=b64;binaryMd5(binData,function(result){attachment.digest="md5-"+result;attachment.length=binData.size||binData.length||0;resolve(attachment)})})})}return new Promise(function(resolve){binaryMd5(binData,function(result){attachment.digest="md5-"+result;attachment.length=binData.size||binData.length||0;resolve(attachment)})})}let txn,error;const results=[],docs=[];let lastWriteIndex;const revsLimit=dbOpts.revs_limit||1e3,rewriteEnabled=-1===dbOpts.name.indexOf("-mrview-"),autoCompaction=dbOpts.auto_compaction;for(let i2=0,len=req.docs.length;i2<len;i2++){let result;try{result=parseDoc(req.docs[i2],opts.new_edits,dbOpts)}catch(err3){result=err3}if(result.error)return callback(result);docs.push(convertDocFormat(result))}(function preProcessAttachments(){const promises=docs.map(function(doc){const data=doc.revs[doc.rev].data;if(!data._attachments)return Promise.resolve(data);const attachments=Object.keys(data._attachments).map(function(k2){data._attachments[k2].name=k2;return preProcessAttachment(data._attachments[k2])});return Promise.all(attachments).then(function(newAttachments){const processed={};newAttachments.forEach(function(attachment){processed[attachment.name]=attachment;delete attachment.name});data._attachments=processed;return data})});return Promise.all(promises)})().then(function(){api._openTransactionSafely([DOC_STORE2,META_LOCAL_STORE],"readwrite",function(err3,_txn){if(err3)return callback(err3);txn=_txn;txn.onabort=function(){callback(error||createError(UNKNOWN_ERROR,"transaction was aborted"))};txn.ontimeout=idbError2(callback);txn.oncomplete=function(){idbChanges2.notify(dbOpts.name);callback(null,results)};fetchExistingDocs(txn,docs)})}).catch(function(err3){callback(err3)})}function allDocsKeys2(keys3,docStore,allDocsInner){const valuesBatch=new Array(keys3.length);let count=0;keys3.forEach(function(key3,index6){docStore.get(key3).onsuccess=function(event2){event2.target.result?valuesBatch[index6]=event2.target.result:valuesBatch[index6]={key:key3,error:"not_found"};count++;count===keys3.length&&valuesBatch.forEach(function(doc){allDocsInner(doc)})}})}function createKeyRange2(start,end,inclusiveStart,inclusiveEnd,key3,descending){try{return key3?IDBKeyRange.only([0,key3]):descending?IDBKeyRange.bound(end,start,!inclusiveEnd,!inclusiveStart):IDBKeyRange.bound(start,end,!inclusiveStart,!inclusiveEnd)}catch(e3){return{error:e3}}}function handleKeyRangeError(opts,metadata,err3,callback){if("DataError"===err3.name&&0===err3.code){const returnVal={total_rows:metadata.doc_count,offset:opts.skip,rows:[]};opts.update_seq&&(returnVal.update_seq=metadata.seq);return callback(null,returnVal)}callback(createError(IDB_ERROR,err3.name,err3.message))}function allDocs(txn,metadata,opts,callback){function include_doc(row,doc){const docData=doc.revs[doc.rev].data;row.doc=docData;row.doc._id=doc.id;row.doc._rev=doc.rev;if(opts.conflicts){const conflicts=collectConflicts(doc);conflicts.length&&(row.doc._conflicts=conflicts)}if(opts.attachments&&docData._attachments)for(const name in docData._attachments)processing.push(processAttachment(name,doc,row.doc,opts.binary,metadata.idb_attachment_format))}function onTxnComplete(){const returnVal={total_rows:metadata.doc_count,offset:0,rows:results};opts.update_seq&&(returnVal.update_seq=metadata.seq);processing.length?Promise.all(processing).then(function(){callback(null,returnVal)}):callback(null,returnVal)}async function fetchResults(){function fetchNextBatch(kr2){return new Promise(resolve=>{dbIndex.getAll(kr2,100).onsuccess=e3=>{const batch=e3.target.result;for(let i2=0;i2<batch.length;++i2){const doc=batch[i2],row={id:doc.id,key:doc.id,value:{rev:doc.rev}};opts.include_docs&&include_doc(row,doc);results.push(row)}if(batch.length>=100){const lastSeenKey=[0,batch[batch.length-1].id],startKey=descending?kr2.upper:lastSeenKey,endKey=descending?lastSeenKey:kr2.upper;if(startKey[1]!==endKey[1])return resolve(createKeyRange2(startKey,endKey,!!descending,!descending&&inclusiveEnd,key3,descending))}return resolve()}})}let kr=keyRange;do{kr=await fetchNextBatch(kr)}while(kr);descending&&results.reverse();return txn.txn.commit()}if(txn.error)return callback(txn.error);if(0===opts.limit){const returnVal={total_rows:metadata.doc_count,offset:opts.skip,rows:[]};opts.update_seq&&(returnVal.update_seq=metadata.seq);return callback(null,returnVal)}const results=[],processing=[],key3="key"in opts&&opts.key,keys3="keys"in opts&&opts.keys;let skip=opts.skip||0,limit="number"==typeof opts.limit?opts.limit:void 0;const inclusiveEnd=!1!==opts.inclusive_end,descending="descending"in opts&&opts.descending?"prev":null,start="startkey"in opts?opts.startkey:descending?"￿":"",end="endkey"in opts?opts.endkey:descending?"":"￿",docStore=txn.txn.objectStore(DOC_STORE2);if(keys3){txn.txn.oncomplete=onTxnComplete;return allDocsKeys2(keys3,docStore,doc=>{if(doc.error)return results.push(doc);const row={id:doc.id,key:doc.id,value:{rev:doc.rev}};if(doc.deleted){row.value.deleted=!0;row.doc=null}else opts.include_docs&&include_doc(row,doc);results.push(row)})}let keyRange=createKeyRange2([0,start],[0,end],!0,inclusiveEnd,key3,descending);if(keyRange.error)return handleKeyRangeError(opts,metadata,keyRange.error,callback);txn.txn.oncomplete=onTxnComplete;const dbIndex=docStore.index("deleted,id");if(skip||limit){let firstKey,limitKey=limit>0;dbIndex.openKeyCursor(keyRange,descending||"next").onsuccess=e3=>{const cursor=e3.target.result;if(skip){if(!cursor)return txn.txn.commit();cursor.advance(skip);skip=0}else{if(void 0===firstKey){firstKey=cursor&&cursor.key;if(!firstKey)return txn.txn.commit()}if(limit){if(limit>1&&cursor){cursor.advance(limit-1);limit=void 0;return}limit=void 0}limitKey&&(limitKey=cursor&&cursor.key);limitKey||(limitKey=descending?keyRange.lower:keyRange.upper);keyRange=createKeyRange2(firstKey,limitKey,!0,inclusiveEnd,key3,descending);if(keyRange.error){txn.txn.abort();return handleKeyRangeError(opts,metadata,keyRange.error,callback)}fetchResults()}}}else fetchResults()}function changes2(txn,idbChanges2,api,dbOpts,opts){if(txn.error)return opts.complete(txn.error);if(opts.continuous){const id=dbOpts.name+":"+uuid();idbChanges2.addListener(dbOpts.name,id,api,opts);idbChanges2.notify(dbOpts.name);return{cancel:function(){idbChanges2.removeListener(dbOpts.name,id)}}}let limit="limit"in opts?opts.limit:-1;0===limit&&(limit=1);const store=txn.txn.objectStore(DOC_STORE2).index("seq"),filter4=filterChange(opts);let received=0,lastSeq=opts.since||0;const results=[],processing=[];let req;req=opts.descending?store.openCursor(null,"prev"):store.openCursor(IDBKeyRange.lowerBound(opts.since,!0));txn.txn.oncomplete=function onTxnComplete(){Promise.all(processing).then(function(){opts.complete(null,{results,last_seq:lastSeq})})};req.onsuccess=function onReqSuccess(e3){if(!e3.target.result)return;const cursor=e3.target.result,doc=cursor.value;doc.data=doc.revs[doc.rev].data;doc.data._id=doc.id;doc.data._rev=doc.rev;doc.deleted&&(doc.data._deleted=!0);if(opts.doc_ids&&-1===opts.doc_ids.indexOf(doc.id))return cursor.continue();const change=opts.processChange(doc.data,doc,opts);change.seq=doc.seq;lastSeq=doc.seq;const filtered=filter4(change);if("object"==typeof filtered)return opts.complete(filtered);if(filtered){received++;opts.return_docs&&results.push(change);if(opts.include_docs&&opts.attachments&&doc.data._attachments){const promises=[];for(const name in doc.data._attachments){const p2=processAttachment(name,doc,change.doc,opts.binary,api.blobSupport);promises.push(p2);processing.push(p2)}Promise.all(promises).then(function(){opts.onChange(change)})}else opts.onChange(change)}received!==limit&&cursor.continue()}}function getRevisionTree(txn,id,callback){if(txn.error)return callback(txn.error);txn.txn.objectStore(DOC_STORE2).get(id).onsuccess=function(e3){e3.target.result?callback(null,e3.target.result.rev_tree):callback(createError(MISSING_DOC))}}function doCompaction(txn,id,revs,callback){if(txn.error)return callback(txn.error);const docStore=txn.txn.objectStore(DOC_STORE2);docStore.get(id).onsuccess=function(e3){const doc=e3.target.result;traverseRevTree(doc.rev_tree,function(isLeaf,pos,revHash,ctx,opts){const rev3=pos+"-"+revHash;-1!==revs.indexOf(rev3)&&(opts.status="missing")});const attachments=[];revs.forEach(function(rev3){if(rev3 in doc.revs){if(doc.revs[rev3].data._attachments)for(const k2 in doc.revs[rev3].data._attachments)attachments.push(doc.revs[rev3].data._attachments[k2].digest);delete doc.revs[rev3]}});attachments.forEach(function(digest){revs.forEach(function(rev3){delete doc.attachments[digest].revs[rev3]});Object.keys(doc.attachments[digest].revs).length||delete doc.attachments[digest]});docStore.put(doc)};txn.txn.oncomplete=function(){callback()}}function destroy(dbOpts,openDatabases2,idbChanges2,callback){function doDestroy(){indexedDB.deleteDatabase(dbOpts.name).onsuccess=function(){delete openDatabases2[dbOpts.name];callback(null,{ok:!0})}}idbChanges2.removeAllListeners(dbOpts.name);dbOpts.name in openDatabases2?openDatabases2[dbOpts.name].then(function(res2){res2.idb.close();doDestroy()}):doDestroy()}function externaliseRecord(idbDoc){const doc=idbDoc.revs[idbDoc.rev].data;doc._id=idbDoc.id;doc._rev=idbDoc.rev;idbDoc.deleted&&(doc._deleted=!0);return doc}function generateKeyRange(opts){function defined(obj,k2){return void 0!==obj[k2]}function convert(key3,exact){return[0].concat(key3).map(function(k2){if(null===k2&&exact)return IDB_NULL;if(!0===k2)return IDB_TRUE;if(!1===k2)return IDB_FALSE;if(!exact){if(k2===COUCH_COLLATE_LO)return IDB_COLLATE_LO;if(Object.prototype.hasOwnProperty.call(k2,COUCH_COLLATE_HI))return IDB_COLLATE_HI}return k2})}defined(opts,"inclusive_end")||(opts.inclusive_end=!0);defined(opts,"inclusive_start")||(opts.inclusive_start=!0);if(opts.descending){const realEndkey=opts.startkey,realInclusiveEnd=opts.inclusive_start;opts.startkey=opts.endkey;opts.endkey=realEndkey;opts.inclusive_start=opts.inclusive_end;opts.inclusive_end=realInclusiveEnd}try{return defined(opts,"key")?IDBKeyRange.only(convert(opts.key,!0)):defined(opts,"startkey")&&!defined(opts,"endkey")?IDBKeyRange.bound(convert(opts.startkey),[1],!opts.inclusive_start,!0):!defined(opts,"startkey")&&defined(opts,"endkey")?IDBKeyRange.upperBound(convert(opts.endkey),!opts.inclusive_end):defined(opts,"startkey")&&defined(opts,"endkey")?IDBKeyRange.bound(convert(opts.startkey),convert(opts.endkey),!opts.inclusive_start,!opts.inclusive_end):IDBKeyRange.only([0])}catch(err3){console.error("Could not generate keyRange",err3,opts);throw Error("Could not generate key range with "+JSON.stringify(opts))}}function getIndexHandle(pdb,fields,reject){const indexName=naturalIndexName(fields);return new Promise(function(resolve){pdb._openTransactionSafely([DOC_STORE2],"readonly",function(err3,txn){if(err3)return idbError2(reject)(err3);txn.onabort=idbError2(reject);txn.ontimeout=idbError2(reject);-1===Array.from(txn.objectStore(DOC_STORE2).indexNames).indexOf(indexName)?pdb._freshen().then(function(){return getIndexHandle(pdb,fields,reject)}).then(resolve):resolve(txn.objectStore(DOC_STORE2).index(indexName))})})}function query(idb,signature,opts,fallback3){const pdb=this,parts=signature.split("/");return new Promise(function(resolve,reject){pdb.get("_design/"+parts[0]).then(function(ddoc){if(isPartialFilterView(ddoc,parts[1]))return fallback3(signature,opts).then(resolve,reject);const fields=rawIndexFields(ddoc,parts[1]);if(!fields)throw new Error("ddoc "+ddoc._id+" with view "+parts[1]+" does not have map.options.def.fields defined.");let skip=opts.skip,limit=Number.isInteger(opts.limit)&&opts.limit;return getIndexHandle(pdb,fields,reject).then(function(indexHandle){const keyRange=generateKeyRange(opts),req=indexHandle.openCursor(keyRange,opts.descending?"prev":"next"),rows=[];req.onerror=idbError2(reject);req.onsuccess=function(e3){const cursor=e3.target.result;if(!cursor||0===limit)return resolve({rows});if(skip){cursor.advance(skip);skip=!1}else{limit&&(limit-=1);rows.push({doc:externaliseRecord(cursor.value)});cursor.continue()}}})}).catch(reject)})}function viewCleanup(idb,fallback3){return fallback3()}function purgeAttachments(doc,revs){if(!doc.attachments)return{};for(let key3 in doc.attachments){const attachment=doc.attachments[key3];for(let rev3 of revs)attachment.revs[rev3]&&delete attachment.revs[rev3];0===Object.keys(attachment.revs).length&&delete doc.attachments[key3]}return doc.attachments}function purge(txn,docId,revs,callback){if(txn.error)return callback(txn.error);const docStore=txn.txn.objectStore(DOC_STORE2),deletedRevs=[];let documentWasRemovedCompletely=!1;docStore.get(docId).onsuccess=e3=>{const doc=e3.target.result;for(const rev3 of revs){doc.rev_tree=removeLeafFromRevTree(doc.rev_tree,rev3);delete doc.revs[rev3];deletedRevs.push(rev3)}if(0!==doc.rev_tree.length){doc.rev=winningRev(doc);doc.data=doc.revs[doc.rev].data;doc.attachments=purgeAttachments(doc,revs);docStore.put(doc)}else{docStore.delete(doc.id);documentWasRemovedCompletely=!0}};txn.txn.oncomplete=function(){callback(null,{ok:!0,deletedRevs,documentWasRemovedCompletely})}}function IndexeddbPouch(dbOpts,callback){dbOpts.view_adapter&&console.log("Please note that the indexeddb adapter manages _find indexes itself, therefore it is not using your specified view_adapter");const api=this;let metadata={};const $=function(fun){return function(){const args=Array.prototype.slice.call(arguments);setup(openDatabases,api,dbOpts).then(function(res2){metadata=res2.metadata;args.unshift(res2.idb);fun.apply(api,args)}).catch(function(err3){const last=args.pop();"function"==typeof last?last(err3):console.error(err3)})}},$p=function(fun){return function(){const args=Array.prototype.slice.call(arguments);return setup(openDatabases,api,dbOpts).then(function(res2){metadata=res2.metadata;args.unshift(res2.idb);return fun.apply(api,args)})}},$t2=function(fun,stores,mode){mode=mode||"readonly";return function(){const args=Array.prototype.slice.call(arguments),txn={};setup(openDatabases,api,dbOpts).then(function(res2){metadata=res2.metadata;txn.txn=res2.idb.transaction(stores,mode)}).catch(function(err3){console.error("Failed to establish transaction safely");console.error(err3);txn.error=err3}).then(function(){args.unshift(txn);fun.apply(api,args)})}};api._openTransactionSafely=function(stores,mode,callback2){$t2(function(txn,callback3){callback3(txn.error,txn.txn)},stores,mode)(callback2)};api._remote=!1;api.type=function(){return ADAPTER_NAME};api._id=$(function(_,cb2){cb2(null,metadata.db_uuid)});api._info=$(function(_,cb2){return info2(metadata,cb2)});api._get=$t2(get4,[DOC_STORE2]);api._getLocal=$t2(function(txn,id,callback2){return getLocal(txn,id,api,callback2)},[META_LOCAL_STORE]);api._bulkDocs=$(function(_,req,opts,callback2){bulkDocs(api,req,opts,metadata,dbOpts,idbChanges,callback2)});api._allDocs=$t2(function(txn,opts,cb2){allDocs(txn,metadata,opts,cb2)},[DOC_STORE2]);api._getAttachment=getAttachment;api._changes=$t2(function(txn,opts){changes2(txn,idbChanges,api,dbOpts,opts)},[DOC_STORE2]);api._getRevisionTree=$t2(getRevisionTree,[DOC_STORE2]);api._doCompaction=$t2(doCompaction,[DOC_STORE2],"readwrite");api._customFindAbstractMapper={query:$p(query),viewCleanup:$p(viewCleanup)};api._destroy=function(opts,callback2){return destroy(dbOpts,openDatabases,idbChanges,callback2)};api._close=$(function(db,cb2){delete openDatabases[dbOpts.name];db.close();cb2()});api._freshen=function(){return new Promise(function(resolve){api._close(function(){$(resolve)()})})};api._purge=$t2(purge,[DOC_STORE2],"readwrite");setTimeout(function(){callback(null,api)})}function pool(promiseFactories,limit){return new Promise(function(resolve,reject){function runNext(){running2++;promiseFactories[current++]().then(onSuccess,onError)}function doNext(){++done===len?err3?reject(err3):resolve():runNextBatch()}function onSuccess(){running2--;doNext()}function onError(thisErr){running2--;err3=err3||thisErr;doNext()}function runNextBatch(){for(;running2<limit&&current<len;)runNext()}var err3,running2=0,current=0,done=0,len=promiseFactories.length;runNextBatch()})}function readAttachmentsAsBlobOrBuffer(row){const doc=row.doc||row.ok,atts=doc&&doc._attachments;atts&&Object.keys(atts).forEach(function(filename){const att=atts[filename];att.data=b64ToBluffer(att.data,att.content_type)})}function encodeDocId(id){return/^_design/.test(id)?"_design/"+encodeURIComponent(id.slice(8)):id.startsWith("_local/")?"_local/"+encodeURIComponent(id.slice(7)):encodeURIComponent(id)}function preprocessAttachments2(doc){return doc._attachments&&Object.keys(doc._attachments)?Promise.all(Object.keys(doc._attachments).map(function(key3){const attachment=doc._attachments[key3];if(attachment.data&&"string"!=typeof attachment.data)return new Promise(function(resolve){blobToBase64(attachment.data,resolve)}).then(function(b64){attachment.data=b64})})):Promise.resolve()}function hasUrlPrefix(opts){if(!opts.prefix)return!1;const protocol=parseUri(opts.prefix).protocol;return"http"===protocol||"https"===protocol}function getHost(name,opts){if(hasUrlPrefix(opts)){const dbName=opts.name.substr(opts.prefix.length);name=opts.prefix.replace(/\/?$/,"/")+encodeURIComponent(dbName)}const uri=parseUri(name);(uri.user||uri.password)&&(uri.auth={username:uri.user,password:uri.password});const parts=uri.path.replace(/(^\/|\/$)/g,"").split("/");uri.db=parts.pop();-1===uri.db.indexOf("%")&&(uri.db=encodeURIComponent(uri.db));uri.path=parts.join("/");return uri}function genDBUrl(opts,path2){return genUrl(opts,opts.db+"/"+path2)}function genUrl(opts,path2){const pathDel=opts.path?"/":"";return opts.protocol+"://"+opts.host+(opts.port?":"+opts.port:"")+"/"+opts.path+pathDel+path2}function paramsToStr(params){const paramKeys=Object.keys(params);return 0===paramKeys.length?"":"?"+paramKeys.map(key3=>key3+"="+encodeURIComponent(params[key3])).join("&")}function shouldCacheBust(opts){const ua="undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"",isIE=-1!==ua.indexOf("msie"),isTrident=-1!==ua.indexOf("trident"),isEdge=-1!==ua.indexOf("edge"),isGET=!("method"in opts)||"GET"===opts.method;return(isIE||isTrident||isEdge)&&isGET}function HttpPouch(opts,callback){function adapterFun$$1(name,fun){return adapterFun(name,function(...args){setup2().then(function(){return fun.apply(this,args)}).catch(function(e3){args.pop()(e3)})}).bind(api)}async function fetchJSON(url,options){const result={};(options=options||{}).headers=options.headers||new h2;options.headers.get("Content-Type")||options.headers.set("Content-Type","application/json");options.headers.get("Accept")||options.headers.set("Accept","application/json");const response=await ourFetch(url,options);result.ok=response.ok;result.status=response.status;const json=await response.json();result.data=json;if(!result.ok){result.data.status=result.status;throw generateErrorFromResponse(result.data)}Array.isArray(result.data)&&(result.data=result.data.map(function(v2){return v2.error||v2.missing?generateErrorFromResponse(v2):v2}));return result}async function setup2(){if(opts.skip_setup)return Promise.resolve();if(setupPromise)return setupPromise;setupPromise=fetchJSON(dbUrl).catch(function(err3){if(err3&&err3.status&&404===err3.status){explainError(404,"PouchDB is just detecting if the remote exists.");return fetchJSON(dbUrl,{method:"PUT"})}return Promise.reject(err3)}).catch(function(err3){return!(!err3||!err3.status||412!==err3.status)||Promise.reject(err3)});setupPromise.catch(function(){setupPromise=null});return setupPromise}function encodeAttachmentId(attachmentId){return attachmentId.split("/").map(encodeURIComponent).join("/")}const api=this,host=getHost(opts.name,opts),dbUrl=genDBUrl(host,"");opts=clone2(opts);const ourFetch=async function(url,options){(options=options||{}).headers=options.headers||new h2;options.credentials="include";if(opts.auth||host.auth){const nAuth=opts.auth||host.auth,str=nAuth.username+":"+nAuth.password,token=thisBtoa(unescape(encodeURIComponent(str)));options.headers.set("Authorization","Basic "+token)}const headers=opts.headers||{};Object.keys(headers).forEach(function(key3){options.headers.append(key3,headers[key3])});shouldCacheBust(options)&&(url+=(-1===url.indexOf("?")?"?":"&")+"_nonce="+Date.now());const fetchFun=opts.fetch||f3;return await fetchFun(url,options)};let setupPromise;nextTick(function(){callback(null,api)});api._remote=!0;api.type=function(){return"http"};api.id=adapterFun$$1("id",async function(callback2){let result;try{const response=await ourFetch(genUrl(host,""));result=await response.json()}catch(err3){result={}}callback2(null,result&&result.uuid?result.uuid+host.db:genDBUrl(host,""))});api.compact=adapterFun$$1("compact",async function(opts2,callback2){if("function"==typeof opts2){callback2=opts2;opts2={}}opts2=clone2(opts2);await fetchJSON(genDBUrl(host,"_compact"),{method:"POST"});(function ping(){api.info(function(err3,res2){res2&&!res2.compact_running?callback2(null,{ok:!0}):setTimeout(ping,opts2.interval||200)})})()});api.bulkGet=adapterFun("bulkGet",function(opts2,callback2){async function doBulkGet(cb2){const params={};opts2.revs&&(params.revs=!0);opts2.attachments&&(params.attachments=!0);opts2.latest&&(params.latest=!0);try{const result=await fetchJSON(genDBUrl(host,"_bulk_get"+paramsToStr(params)),{method:"POST",body:JSON.stringify({docs:opts2.docs})});opts2.attachments&&opts2.binary&&result.data.results.forEach(function(res2){res2.docs.forEach(readAttachmentsAsBlobOrBuffer)});cb2(null,result.data)}catch(error){cb2(error)}}function doBulkGetShim(){function onResult(batchNum){return function(err3,res2){results[batchNum]=res2.results;++numDone===numBatches&&callback2(null,{results:results.flat()})}}const batchSize=MAX_SIMULTANEOUS_REVS,numBatches=Math.ceil(opts2.docs.length/batchSize);let numDone=0;const results=new Array(numBatches);for(let i2=0;i2<numBatches;i2++){const subOpts=pick(opts2,["revs","attachments","binary","latest"]);subOpts.docs=opts2.docs.slice(i2*batchSize,Math.min(opts2.docs.length,(i2+1)*batchSize));bulkGet(self3,subOpts,onResult(i2))}}const self3=this,dbUrl2=genUrl(host,""),supportsBulkGet=supportsBulkGetMap[dbUrl2];"boolean"!=typeof supportsBulkGet?doBulkGet(function(err3,res2){if(err3){supportsBulkGetMap[dbUrl2]=!1;explainError(err3.status,"PouchDB is just detecting if the remote supports the _bulk_get API.");doBulkGetShim()}else{supportsBulkGetMap[dbUrl2]=!0;callback2(null,res2)}}):supportsBulkGet?doBulkGet(callback2):doBulkGetShim()});api._info=async function(callback2){try{await setup2();const response=await ourFetch(genDBUrl(host,"")),info3=await response.json();info3.host=genDBUrl(host,"");callback2(null,info3)}catch(err3){callback2(err3)}};api.fetch=async function(path2,options){await setup2();const url="/"===path2.substring(0,1)?genUrl(host,path2.substring(1)):genDBUrl(host,path2);return ourFetch(url,options)};api.get=adapterFun$$1("get",async function(id,opts2,callback2){function fetchAttachments(doc){async function fetchData(filename){const att=atts[filename],path2=encodeDocId(doc._id)+"/"+encodeAttachmentId(filename)+"?rev="+doc._rev,response=await ourFetch(genDBUrl(host,path2));let blob,data;blob="buffer"in response?await response.buffer():await response.blob();if(opts2.binary){const typeFieldDescriptor=Object.getOwnPropertyDescriptor(blob.__proto__,"type");typeFieldDescriptor&&!typeFieldDescriptor.set||(blob.type=att.content_type);data=blob}else data=await new Promise(function(resolve){blobToBase64(blob,resolve)});delete att.stub;delete att.length;att.data=data}const atts=doc._attachments,filenames=atts&&Object.keys(atts);if(atts&&filenames.length)return pool(filenames.map(function(filename){return function(){return fetchData(filename)}}),5)}if("function"==typeof opts2){callback2=opts2;opts2={}}const params={};(opts2=clone2(opts2)).revs&&(params.revs=!0);opts2.revs_info&&(params.revs_info=!0);opts2.latest&&(params.latest=!0);if(opts2.open_revs){"all"!==opts2.open_revs&&(opts2.open_revs=JSON.stringify(opts2.open_revs));params.open_revs=opts2.open_revs}opts2.rev&&(params.rev=opts2.rev);opts2.conflicts&&(params.conflicts=opts2.conflicts);opts2.update_seq&&(params.update_seq=opts2.update_seq);id=encodeDocId(id);const url=genDBUrl(host,id+paramsToStr(params));try{const res2=await fetchJSON(url);opts2.attachments&&await function fetchAllAttachments(docOrDocs){return Array.isArray(docOrDocs)?Promise.all(docOrDocs.map(function(doc){if(doc.ok)return fetchAttachments(doc.ok)})):fetchAttachments(docOrDocs)}(res2.data);callback2(null,res2.data)}catch(error){error.docId=id;callback2(error)}});api.remove=adapterFun$$1("remove",async function(docOrId,optsOrRev,opts2,cb2){let doc;if("string"==typeof optsOrRev){doc={_id:docOrId,_rev:optsOrRev};if("function"==typeof opts2){cb2=opts2;opts2={}}}else{doc=docOrId;if("function"==typeof optsOrRev){cb2=optsOrRev;opts2={}}else{cb2=opts2;opts2=optsOrRev}}const rev3=doc._rev||opts2.rev,url=genDBUrl(host,encodeDocId(doc._id))+"?rev="+rev3;try{cb2(null,(await fetchJSON(url,{method:"DELETE"})).data)}catch(error){cb2(error)}});api.getAttachment=adapterFun$$1("getAttachment",async function(docId,attachmentId,opts2,callback2){if("function"==typeof opts2){callback2=opts2;opts2={}}const params=opts2.rev?"?rev="+opts2.rev:"",url=genDBUrl(host,encodeDocId(docId))+"/"+encodeAttachmentId(attachmentId)+params;let contentType;try{const response=await ourFetch(url,{method:"GET"});if(!response.ok)throw response;contentType=response.headers.get("content-type");let blob;blob="undefined"==typeof process||process.browser||"function"!=typeof response.buffer?await response.blob():await response.buffer();if("undefined"!=typeof process&&!process.browser){const typeFieldDescriptor=Object.getOwnPropertyDescriptor(blob.__proto__,"type");typeFieldDescriptor&&!typeFieldDescriptor.set||(blob.type=contentType)}callback2(null,blob)}catch(err3){callback2(err3)}});api.removeAttachment=adapterFun$$1("removeAttachment",async function(docId,attachmentId,rev3,callback2){const url=genDBUrl(host,encodeDocId(docId)+"/"+encodeAttachmentId(attachmentId))+"?rev="+rev3;try{callback2(null,(await fetchJSON(url,{method:"DELETE"})).data)}catch(error){callback2(error)}});api.putAttachment=adapterFun$$1("putAttachment",async function(docId,attachmentId,rev3,blob,type,callback2){if("function"==typeof type){callback2=type;type=blob;blob=rev3;rev3=null}const id=encodeDocId(docId)+"/"+encodeAttachmentId(attachmentId);let url=genDBUrl(host,id);rev3&&(url+="?rev="+rev3);if("string"==typeof blob){let binary;try{binary=thisAtob(blob)}catch(err3){return callback2(createError(BAD_ARG,"Attachment is not a valid base64 string"))}blob=binary?binStringToBluffer(binary,type):""}try{callback2(null,(await fetchJSON(url,{headers:new h2({"Content-Type":type}),method:"PUT",body:blob})).data)}catch(error){callback2(error)}});api._bulkDocs=async function(req,opts2,callback2){req.new_edits=opts2.new_edits;try{await setup2();await Promise.all(req.docs.map(preprocessAttachments2));callback2(null,(await fetchJSON(genDBUrl(host,"_bulk_docs"),{method:"POST",body:JSON.stringify(req)})).data)}catch(error){callback2(error)}};api._put=async function(doc,opts2,callback2){try{await setup2();await preprocessAttachments2(doc);callback2(null,(await fetchJSON(genDBUrl(host,encodeDocId(doc._id)),{method:"PUT",body:JSON.stringify(doc)})).data)}catch(error){error.docId=doc&&doc._id;callback2(error)}};api.allDocs=adapterFun$$1("allDocs",async function(opts2,callback2){if("function"==typeof opts2){callback2=opts2;opts2={}}const params={};let body,method="GET";(opts2=clone2(opts2)).conflicts&&(params.conflicts=!0);opts2.update_seq&&(params.update_seq=!0);opts2.descending&&(params.descending=!0);opts2.include_docs&&(params.include_docs=!0);opts2.attachments&&(params.attachments=!0);opts2.key&&(params.key=JSON.stringify(opts2.key));opts2.start_key&&(opts2.startkey=opts2.start_key);opts2.startkey&&(params.startkey=JSON.stringify(opts2.startkey));opts2.end_key&&(opts2.endkey=opts2.end_key);opts2.endkey&&(params.endkey=JSON.stringify(opts2.endkey));void 0!==opts2.inclusive_end&&(params.inclusive_end=!!opts2.inclusive_end);void 0!==opts2.limit&&(params.limit=opts2.limit);void 0!==opts2.skip&&(params.skip=opts2.skip);const paramStr=paramsToStr(params);if(void 0!==opts2.keys){method="POST";body={keys:opts2.keys}}try{const result=await fetchJSON(genDBUrl(host,"_all_docs"+paramStr),{method,body:JSON.stringify(body)});opts2.include_docs&&opts2.attachments&&opts2.binary&&result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);callback2(null,result.data)}catch(error){callback2(error)}});api._changes=function(opts2){const batchSize="batch_size"in opts2?opts2.batch_size:CHANGES_BATCH_SIZE;(opts2=clone2(opts2)).continuous&&!("heartbeat"in opts2)&&(opts2.heartbeat=DEFAULT_HEARTBEAT);let requestTimeout2="timeout"in opts2?opts2.timeout:3e4;"timeout"in opts2&&opts2.timeout&&requestTimeout2-opts2.timeout<CHANGES_TIMEOUT_BUFFER&&(requestTimeout2=opts2.timeout+CHANGES_TIMEOUT_BUFFER);"heartbeat"in opts2&&opts2.heartbeat&&requestTimeout2-opts2.heartbeat<CHANGES_TIMEOUT_BUFFER&&(requestTimeout2=opts2.heartbeat+CHANGES_TIMEOUT_BUFFER);const params={};"timeout"in opts2&&opts2.timeout&&(params.timeout=opts2.timeout);const limit=void 0!==opts2.limit&&opts2.limit;let leftToFetch=limit;opts2.style&&(params.style=opts2.style);(opts2.include_docs||opts2.filter&&"function"==typeof opts2.filter)&&(params.include_docs=!0);opts2.attachments&&(params.attachments=!0);opts2.continuous&&(params.feed="longpoll");opts2.seq_interval&&(params.seq_interval=opts2.seq_interval);opts2.conflicts&&(params.conflicts=!0);opts2.descending&&(params.descending=!0);opts2.update_seq&&(params.update_seq=!0);"heartbeat"in opts2&&opts2.heartbeat&&(params.heartbeat=opts2.heartbeat);opts2.filter&&"string"==typeof opts2.filter&&(params.filter=opts2.filter);if(opts2.view&&"string"==typeof opts2.view){params.filter="_view";params.view=opts2.view}if(opts2.query_params&&"object"==typeof opts2.query_params)for(const param_name in opts2.query_params)Object.prototype.hasOwnProperty.call(opts2.query_params,param_name)&&(params[param_name]=opts2.query_params[param_name]);let body,method="GET";if(opts2.doc_ids){params.filter="_doc_ids";method="POST";body={doc_ids:opts2.doc_ids}}else if(opts2.selector){params.filter="_selector";method="POST";body={selector:opts2.selector}}const controller=new AbortController;let lastFetchedSeq;const fetchData=async function(since,callback2){if(opts2.aborted)return;params.since=since;"object"==typeof params.since&&(params.since=JSON.stringify(params.since));opts2.descending?limit&&(params.limit=leftToFetch):params.limit=!limit||leftToFetch>batchSize?batchSize:leftToFetch;const url=genDBUrl(host,"_changes"+paramsToStr(params)),fetchOpts={signal:controller.signal,method,body:JSON.stringify(body)};lastFetchedSeq=since;if(!opts2.aborted)try{await setup2();callback2(null,(await fetchJSON(url,fetchOpts)).data)}catch(error){callback2(error)}},results={results:[]},fetched=function(err3,res2){if(opts2.aborted)return;let raw_results_length=0;if(res2&&res2.results){raw_results_length=res2.results.length;results.last_seq=res2.last_seq;let pending3=null,lastSeq=null;"number"==typeof res2.pending&&(pending3=res2.pending);"string"!=typeof results.last_seq&&"number"!=typeof results.last_seq||(lastSeq=results.last_seq);({}).query=opts2.query_params;res2.results=res2.results.filter(function(c3){leftToFetch--;const ret=filterChange(opts2)(c3);if(ret){opts2.include_docs&&opts2.attachments&&opts2.binary&&readAttachmentsAsBlobOrBuffer(c3);opts2.return_docs&&results.results.push(c3);opts2.onChange(c3,pending3,lastSeq)}return ret})}else if(err3){opts2.aborted=!0;opts2.complete(err3);return}res2&&res2.last_seq&&(lastFetchedSeq=res2.last_seq);const finished=limit&&leftToFetch<=0||res2&&raw_results_length<batchSize||opts2.descending;(!opts2.continuous||limit&&leftToFetch<=0)&&finished?opts2.complete(null,results):nextTick(function(){fetchData(lastFetchedSeq,fetched)})};fetchData(opts2.since||0,fetched);return{cancel:function(){opts2.aborted=!0;controller.abort()}}};api.revsDiff=adapterFun$$1("revsDiff",async function(req,opts2,callback2){if("function"==typeof opts2){callback2=opts2;opts2={}}try{callback2(null,(await fetchJSON(genDBUrl(host,"_revs_diff"),{method:"POST",body:JSON.stringify(req)})).data)}catch(error){callback2(error)}});api._close=function(callback2){callback2()};api._destroy=async function(options,callback2){try{callback2(null,await fetchJSON(genDBUrl(host,""),{method:"DELETE"}))}catch(error){404===error.status?callback2(null,{ok:!0}):callback2(error)}}}function promisedCallback(promise,callback){callback&&promise.then(function(res2){nextTick(function(){callback(null,res2)})},function(reason){nextTick(function(){callback(reason)})});return promise}function callbackify(fun){return function(...args){var cb2=args.pop(),promise=fun.apply(this,args);"function"==typeof cb2&&promisedCallback(promise,cb2);return promise}}function fin(promise,finalPromiseFactory){return promise.then(function(res2){return finalPromiseFactory().then(function(){return res2})},function(reason){return finalPromiseFactory().then(function(){throw reason})})}function sequentialize(queue2,promiseFactory){return function(){var args=arguments,that=this;return queue2.add(function(){return promiseFactory.apply(that,args)})}}function uniq(arr){var theSet=new Set(arr),result=new Array(theSet.size),index6=-1;theSet.forEach(function(value){result[++index6]=value});return result}function mapToKeysArray(map3){var result=new Array(map3.size),index6=-1;map3.forEach(function(value,key3){result[++index6]=key3});return result}function stringify2(input){if(!input)return"undefined";switch(typeof input){case"function":return input.toString();case"string":return input.toString();default:return JSON.stringify(input)}}function createViewSignature(mapFun,reduceFun){return stringify2(mapFun)+stringify2(reduceFun)+"undefined"}async function createView(sourceDB,viewName,mapFun,reduceFun,temporary,localDocName2){const viewSignature=createViewSignature(mapFun,reduceFun);let cachedViews;if(!temporary){cachedViews=sourceDB._cachedViews=sourceDB._cachedViews||{};if(cachedViews[viewSignature])return cachedViews[viewSignature]}const promiseForView=sourceDB.info().then(async function(info3){const depDbName=info3.db_name+"-mrview-"+(temporary?"temp":stringMd5(viewSignature));await upsert(sourceDB,"_local/"+localDocName2,function diffFunction(doc){doc.views=doc.views||{};let fullViewName=viewName;-1===fullViewName.indexOf("/")&&(fullViewName=viewName+"/"+viewName);const depDbs=doc.views[fullViewName]=doc.views[fullViewName]||{};if(!depDbs[depDbName]){depDbs[depDbName]=!0;return doc}});const db=(await sourceDB.registerDependentDatabase(depDbName)).db;db.auto_compaction=!0;const view={name:depDbName,db,sourceDB,adapter:sourceDB.adapter,mapFun,reduceFun};let lastSeqDoc;try{lastSeqDoc=await view.db.get("_local/lastSeq")}catch(err3){if(404!==err3.status)throw err3}view.seq=lastSeqDoc?lastSeqDoc.seq:0;cachedViews&&view.db.once("destroyed",function(){delete cachedViews[viewSignature]});return view});cachedViews&&(cachedViews[viewSignature]=promiseForView);return promiseForView}function parseViewName(name){return-1===name.indexOf("/")?[name,name]:name.split("/")}function isGenOne(changes3){return 1===changes3.length&&/^1-/.test(changes3[0].rev)}function emitError(db,e3,data){try{db.emit("error",e3)}catch(err3){guardedConsole("error","The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function.");guardedConsole("error",e3,data)}}function createBuiltInError(name){return new BuiltInError("builtin "+name+" function requires map values to be numbers or number arrays")}function sum(values2){var i2,len,num,j2,jLen,jNum,result=0;for(i2=0,len=values2.length;i2<len;i2++)if("number"!=typeof(num=values2[i2])){if(!Array.isArray(num))throw createBuiltInError("_sum");result="number"==typeof result?[result]:result;for(j2=0,jLen=num.length;j2<jLen;j2++){if("number"!=typeof(jNum=num[j2]))throw createBuiltInError("_sum");void 0===result[j2]?result.push(jNum):result[j2]+=jNum}}else"number"==typeof result?result+=num:result[0]+=num;return result}function evalFunctionWithEval(func,emit2){return scopeEval("return ("+func.replace(/;\s*$/,"")+");",{emit:emit2,sum,log:log2,isArray,toJSON})}function getBuiltIn(reduceFunString){if(/^_sum/.test(reduceFunString))return builtInReduce__sum;if(/^_count/.test(reduceFunString))return builtInReduce__count;if(/^_stats/.test(reduceFunString))return builtInReduce__stats;if(/^_/.test(reduceFunString))throw new Error(reduceFunString+" is not a supported reduce function.")}function updateCheckpoint(db,id,checkpoint,session,returnValue){return db.get(id).catch(function(err3){if(404===err3.status){"http"!==db.adapter&&"https"!==db.adapter||explainError(404,"PouchDB is just checking if a remote checkpoint exists.");return{session_id:session,_id:id,history:[],replicator:REPLICATOR,version:CHECKPOINT_VERSION}}throw err3}).then(function(doc){if(!returnValue.cancelled&&doc.last_seq!==checkpoint){doc.history=(doc.history||[]).filter(function(item){return item.session_id!==session});doc.history.unshift({last_seq:checkpoint,session_id:session});doc.history=doc.history.slice(0,CHECKPOINT_HISTORY_SIZE);doc.version=CHECKPOINT_VERSION;doc.replicator=REPLICATOR;doc.session_id=session;doc.last_seq=checkpoint;return db.put(doc).catch(function(err3){if(409===err3.status)return updateCheckpoint(db,id,checkpoint,session,returnValue);throw err3})}})}function compareReplicationLogs(srcDoc,tgtDoc){return srcDoc.session_id===tgtDoc.session_id?{last_seq:srcDoc.last_seq,history:srcDoc.history}:compareReplicationHistory(srcDoc.history,tgtDoc.history)}function compareReplicationHistory(sourceHistory,targetHistory){var S2=sourceHistory[0],sourceRest=sourceHistory.slice(1),T2=targetHistory[0],targetRest=targetHistory.slice(1);return S2&&0!==targetHistory.length?hasSessionId(S2.session_id,targetHistory)?{last_seq:S2.last_seq,history:sourceHistory}:hasSessionId(T2.session_id,sourceRest)?{last_seq:T2.last_seq,history:targetRest}:compareReplicationHistory(sourceRest,targetRest):{last_seq:LOWEST_SEQ,history:[]}}function hasSessionId(sessionId,history){var props=history[0],rest=history.slice(1);return!(!sessionId||0===history.length)&&(sessionId===props.session_id||hasSessionId(sessionId,rest))}function isForbiddenError(err3){return"number"==typeof err3.status&&4===Math.floor(err3.status/100)}function sortObjectPropertiesByKey(queryParams){return Object.keys(queryParams).sort(collate).reduce(function(result,key3){result[key3]=queryParams[key3];return result},{})}function fileHasChanged(localDoc,remoteDoc,filename){return!localDoc._attachments||!localDoc._attachments[filename]||localDoc._attachments[filename].digest!==remoteDoc._attachments[filename].digest}function getDocAttachments(db,doc){var filenames=Object.keys(doc._attachments);return Promise.all(filenames.map(function(filename){return db.getAttachment(doc._id,filename,{rev:doc._rev})}))}function getDocAttachmentsFromTargetOrSource(target,src,doc){var doCheckForLocalAttachments=isRemote(src)&&!isRemote(target),filenames=Object.keys(doc._attachments);return doCheckForLocalAttachments?target.get(doc._id).then(function(localDoc){return Promise.all(filenames.map(function(filename){return fileHasChanged(localDoc,doc,filename)?src.getAttachment(doc._id,filename):target.getAttachment(localDoc._id,filename)}))}).catch(function(error){if(404!==error.status)throw error;return getDocAttachments(src,doc)}):getDocAttachments(src,doc)}function createBulkGetOpts(diffs){var requests=[];Object.keys(diffs).forEach(function(id){diffs[id].missing.forEach(function(missingRev){requests.push({id,rev:missingRev})})});return{docs:requests,revs:!0,latest:!0}}function getDocs(src,target,diffs,state2){diffs=clone2(diffs);var resultDocs=[],ok=!0;return Promise.resolve().then(function getAllDocs(){var bulkGetOpts=createBulkGetOpts(diffs);if(bulkGetOpts.docs.length)return src.bulkGet(bulkGetOpts).then(function(bulkGetResponse){if(state2.cancelled)throw new Error("cancelled");return Promise.all(bulkGetResponse.results.map(function(bulkGetInfo){return Promise.all(bulkGetInfo.docs.map(function(doc){var remoteDoc=doc.ok;doc.error&&(ok=!1);return remoteDoc&&remoteDoc._attachments?getDocAttachmentsFromTargetOrSource(target,src,remoteDoc).then(attachments=>{var filenames=Object.keys(remoteDoc._attachments);attachments.forEach(function(attachment,i2){var att=remoteDoc._attachments[filenames[i2]];delete att.stub;delete att.length;att.data=attachment});return remoteDoc}):remoteDoc}))})).then(function(results){resultDocs=resultDocs.concat(results.flat().filter(Boolean))})})}).then(function returnResult(){return{ok,docs:resultDocs}})}function backOff(opts,returnValue,error,callback){var backOffSet,removeBackOffSetter;if(!1!==opts.retry){"function"!=typeof opts.back_off_function&&(opts.back_off_function=defaultBackOff);returnValue.emit("requestError",error);if("active"===returnValue.state||"pending"===returnValue.state){returnValue.emit("paused",error);returnValue.state="stopped";backOffSet=function backoffTimeSet(){opts.current_back_off=STARTING_BACK_OFF};removeBackOffSetter=function removeBackOffTimeSet(){returnValue.removeListener("active",backOffSet)};returnValue.once("paused",removeBackOffSetter);returnValue.once("active",backOffSet)}opts.current_back_off=opts.current_back_off||STARTING_BACK_OFF;opts.current_back_off=opts.back_off_function(opts.current_back_off);setTimeout(callback,opts.current_back_off)}else{returnValue.emit("error",error);returnValue.removeAllListeners()}}function replicate(src,target,opts,returnValue,result){function initCheckpointer(){return checkpointer?Promise.resolve():index_es_default7(src,target,opts).then(function(res2){repId=res2;var checkpointOpts;checkpointOpts=!1===opts.checkpoint?{writeSourceCheckpoint:!1,writeTargetCheckpoint:!1}:"source"===opts.checkpoint?{writeSourceCheckpoint:!0,writeTargetCheckpoint:!1}:"target"===opts.checkpoint?{writeSourceCheckpoint:!1,writeTargetCheckpoint:!0}:{writeSourceCheckpoint:!0,writeTargetCheckpoint:!0};checkpointer=new index_es_default6(src,target,repId,returnValue,checkpointOpts)})}function writeDocs(){var docs,bulkOpts;changedDocs=[];if(0!==currentBatch.docs.length){docs=currentBatch.docs;bulkOpts={timeout:opts.timeout};return target.bulkDocs({docs,new_edits:!1},bulkOpts).then(function(res2){var errorsById,errorsNo;if(returnValue.cancelled){completeReplication();throw new Error("cancelled")}errorsById=Object.create(null);res2.forEach(function(res3){res3.error&&(errorsById[res3.id]=res3)});errorsNo=Object.keys(errorsById).length;result.doc_write_failures+=errorsNo;result.docs_written+=docs.length-errorsNo;docs.forEach(function(doc){var errorName,error=errorsById[doc._id];if(error){result.errors.push(error);if("unauthorized"!==(errorName=(error.name||"").toLowerCase())&&"forbidden"!==errorName)throw error;returnValue.emit("denied",clone2(error))}else changedDocs.push(doc)})},function(err3){result.doc_write_failures+=docs.length;throw err3})}}function finishBatch(){if(currentBatch.error)throw new Error("There was a problem getting docs.");result.last_seq=last_seq=currentBatch.seq;var outResult=clone2(result);if(changedDocs.length){outResult.docs=changedDocs;if("number"==typeof currentBatch.pending){outResult.pending=currentBatch.pending;delete currentBatch.pending}returnValue.emit("change",outResult)}writingCheckpoint=!0;src.info().then(function(info3){var completed,total_items,task=src.activeTasks.get(taskId);if(currentBatch&&task){completed=task.completed_items||0;total_items=parseInt(info3.update_seq,10)-parseInt(initial_last_seq,10);src.activeTasks.update(taskId,{completed_items:completed+currentBatch.changes.length,total_items})}});return checkpointer.writeCheckpoint(currentBatch.seq,session).then(function(){returnValue.emit("checkpoint",{checkpoint:currentBatch.seq});writingCheckpoint=!1;if(returnValue.cancelled){completeReplication();throw new Error("cancelled")}currentBatch=void 0;getChanges()}).catch(function(err3){onCheckpointError(err3);throw err3})}function getDiffs(){var diff={};currentBatch.changes.forEach(function(change){returnValue.emit("checkpoint",{revs_diff:change});"_user/"!==change.id&&(diff[change.id]=change.changes.map(function(x2){return x2.rev}))});return target.revsDiff(diff).then(function(diffs){if(returnValue.cancelled){completeReplication();throw new Error("cancelled")}currentBatch.diffs=diffs})}function getBatchDocs(){return getDocs(src,target,currentBatch.diffs,returnValue).then(function(got){currentBatch.error=!got.ok;got.docs.forEach(function(doc){delete currentBatch.diffs[doc._id];result.docs_read++;currentBatch.docs.push(doc)})})}function startNextBatch(){if(!returnValue.cancelled&&!currentBatch)if(0!==batches2.length){currentBatch=batches2.shift();returnValue.emit("checkpoint",{start_next_batch:currentBatch.seq});getDiffs().then(getBatchDocs).then(writeDocs).then(finishBatch).then(startNextBatch).catch(function(err3){abortReplication("batch processing terminated with error",err3)})}else processPendingBatch(!0)}function processPendingBatch(immediate){if(0!==pendingBatch.changes.length){if(immediate||changesCompleted||pendingBatch.changes.length>=batch_size){batches2.push(pendingBatch);pendingBatch={seq:0,changes:[],docs:[]};if("pending"===returnValue.state||"stopped"===returnValue.state){returnValue.state="active";returnValue.emit("active")}startNextBatch()}}else if(0===batches2.length&&!currentBatch){if(continuous&&changesOpts.live||changesCompleted){returnValue.state="pending";returnValue.emit("paused")}changesCompleted&&completeReplication()}}function abortReplication(reason,err3){if(!replicationCompleted){err3.message||(err3.message=reason);result.ok=!1;result.status="aborting";batches2=[];pendingBatch={seq:0,changes:[],docs:[]};completeReplication(err3)}}function completeReplication(fatalError){if(!replicationCompleted){if(returnValue.cancelled){result.status="cancelled";if(writingCheckpoint)return}result.status=result.status||"complete";result.end_time=(new Date).toISOString();result.last_seq=last_seq;replicationCompleted=!0;src.activeTasks.remove(taskId,fatalError);if(fatalError){(fatalError=createError(fatalError)).result=result;var errorName=(fatalError.name||"").toLowerCase();if("unauthorized"===errorName||"forbidden"===errorName){returnValue.emit("error",fatalError);returnValue.removeAllListeners()}else backOff(opts,returnValue,fatalError,function(){replicate(src,target,opts,returnValue)})}else{returnValue.emit("complete",result);returnValue.removeAllListeners()}}}function onChange(change,pending3,lastSeq){var task,completed;if(returnValue.cancelled)return completeReplication();"number"==typeof pending3&&(pendingBatch.pending=pending3);if(filterChange(opts)(change)){pendingBatch.seq=change.seq||lastSeq;pendingBatch.changes.push(change);returnValue.emit("checkpoint",{pending_batch:pendingBatch.seq});nextTick(function(){processPendingBatch(0===batches2.length&&changesOpts.live)})}else if(task=src.activeTasks.get(taskId)){completed=task.completed_items||0;src.activeTasks.update(taskId,{completed_items:++completed})}}function onChangesComplete(changes3){changesPending=!1;if(returnValue.cancelled)return completeReplication();if(changes3.results.length>0){changesOpts.since=changes3.results[changes3.results.length-1].seq;getChanges();processPendingBatch(!0)}else{var complete=function(){if(continuous){changesOpts.live=!0;getChanges()}else changesCompleted=!0;processPendingBatch(!0)};if(currentBatch||0!==changes3.results.length)complete();else{writingCheckpoint=!0;checkpointer.writeCheckpoint(changes3.last_seq,session).then(function(){writingCheckpoint=!1;result.last_seq=last_seq=changes3.last_seq;if(returnValue.cancelled){completeReplication();throw new Error("cancelled")}complete()}).catch(onCheckpointError)}}}function onChangesError(err3){changesPending=!1;if(returnValue.cancelled)return completeReplication();abortReplication("changes rejected",err3)}function getChanges(){function abortChanges(){changes3.cancel()}function removeListener(){returnValue.removeListener("cancel",abortChanges)}if(!changesPending&&!changesCompleted&&batches2.length<batches_limit){changesPending=!0;if(returnValue._changes){returnValue.removeListener("cancel",returnValue._abortChanges);returnValue._changes.cancel()}returnValue.once("cancel",abortChanges);var changes3=src.changes(changesOpts).on("change",onChange);changes3.then(removeListener,removeListener);changes3.then(onChangesComplete).catch(onChangesError);if(opts.retry){returnValue._changes=changes3;returnValue._abortChanges=abortChanges}}}function createTask(checkpoint){return src.info().then(function(info3){var total_items=void 0===opts.since?parseInt(info3.update_seq,10)-parseInt(checkpoint,10):parseInt(info3.update_seq,10);taskId=src.activeTasks.add({name:`${continuous?"continuous ":""}replication from ${info3.db_name}`,total_items});return checkpoint})}function startChanges(){initCheckpointer().then(function(){if(!returnValue.cancelled)return checkpointer.getCheckpoint().then(createTask).then(function(checkpoint){initial_last_seq=checkpoint;changesOpts={since:last_seq=checkpoint,limit:batch_size,batch_size,style,doc_ids,selector,return_docs:!0};opts.filter&&("string"!=typeof opts.filter?changesOpts.include_docs=!0:changesOpts.filter=opts.filter);"heartbeat"in opts&&(changesOpts.heartbeat=opts.heartbeat);"timeout"in opts&&(changesOpts.timeout=opts.timeout);opts.query_params&&(changesOpts.query_params=opts.query_params);opts.view&&(changesOpts.view=opts.view);getChanges()});completeReplication()}).catch(function(err3){abortReplication("getCheckpoint rejected with ",err3)})}function onCheckpointError(err3){writingCheckpoint=!1;abortReplication("writeCheckpoint completed with error",err3)}var currentBatch,repId,checkpointer,taskId,changesOpts,batches2=[],pendingBatch={seq:0,changes:[],docs:[]},writingCheckpoint=!1,changesCompleted=!1,replicationCompleted=!1,initial_last_seq=0,last_seq=0,continuous=opts.continuous||opts.live||!1,batch_size=opts.batch_size||100,batches_limit=opts.batches_limit||10,style=opts.style||"all_docs",changesPending=!1,doc_ids=opts.doc_ids,selector=opts.selector,changedDocs=[],session=uuid();result=result||{ok:!0,start_time:(new Date).toISOString(),docs_read:0,docs_written:0,doc_write_failures:0,errors:[]};changesOpts={};returnValue.ready(src,target);if(returnValue.cancelled)completeReplication();else{if(!returnValue._addedListeners){returnValue.once("cancel",completeReplication);if("function"==typeof opts.complete){returnValue.once("error",opts.complete);returnValue.once("complete",function(result2){opts.complete(null,result2)})}returnValue._addedListeners=!0}void 0===opts.since?startChanges():initCheckpointer().then(function(){writingCheckpoint=!0;return checkpointer.writeCheckpoint(opts.since,session)}).then(function(){writingCheckpoint=!1;if(returnValue.cancelled)completeReplication();else{last_seq=opts.since;startChanges()}}).catch(onCheckpointError)}}function toPouch(db,opts){var PouchConstructor=opts.PouchConstructor;return"string"==typeof db?new PouchConstructor(db,opts):db}function replicateWrapper(src,target,opts,callback){var replicateRet;if("function"==typeof opts){callback=opts;opts={}}void 0===opts&&(opts={});if(opts.doc_ids&&!Array.isArray(opts.doc_ids))throw createError(BAD_REQUEST,"`doc_ids` filter parameter is not a list.");opts.complete=callback;(opts=clone2(opts)).continuous=opts.continuous||opts.live;opts.retry="retry"in opts&&opts.retry;opts.PouchConstructor=opts.PouchConstructor||this;replicateRet=new Replication(opts);replicate(toPouch(src,opts),toPouch(target,opts),opts,replicateRet);return replicateRet}function sync(src,target,opts,callback){if("function"==typeof opts){callback=opts;opts={}}void 0===opts&&(opts={});(opts=clone2(opts)).PouchConstructor=opts.PouchConstructor||this;src=toPouch(src,opts);target=toPouch(target,opts);return new Sync(src,target,opts,callback)}function mergeObjects(arr){const res2={};for(const element2 of arr)Object.assign(res2,element2);return res2}function pick2(obj,arr){const res2={};for(const field of arr){const parsedField=parseField(field),value=getFieldFromDoc(obj,parsedField);void 0!==value&&setFieldInDoc(res2,parsedField,value)}return res2}function oneArrayIsSubArrayOfOther(left,right){for(let i2=0,len=Math.min(left.length,right.length);i2<len;i2++)if(left[i2]!==right[i2])return!1;return!0}function oneArrayIsStrictSubArrayOfOther(left,right){return!(left.length>right.length)&&oneArrayIsSubArrayOfOther(left,right)}function oneSetIsSubArrayOfOther(left,right){left=left.slice();for(const field of right){if(!left.length)break;const leftIdx=left.indexOf(field);if(-1===leftIdx)return!1;left.splice(leftIdx,1)}return!0}function arrayToObject(arr){const res2={};for(const field of arr)res2[field]=!0;return res2}function max2(arr,fun){let max3=null,maxScore=-1;for(const element2 of arr){const score=fun(element2);if(score>maxScore){maxScore=score;max3=element2}}return max3}function arrayEquals(arr1,arr2){if(arr1.length!==arr2.length)return!1;for(let i2=0,len=arr1.length;i2<len;i2++)if(arr1[i2]!==arr2[i2])return!1;return!0}function uniq2(arr){return Array.from(new Set(arr))}function resolveToCallback(fun){return function(...args){const maybeCallback=args[args.length-1];if("function"!=typeof maybeCallback)return fun.apply(this,args);{const fulfilled=maybeCallback.bind(null,null),rejected=maybeCallback.bind(null);fun.apply(this,args.slice(0,-1)).then(fulfilled,rejected)}}}function massageCreateIndexRequest(requestDef){(requestDef=clone2(requestDef)).index||(requestDef.index={});for(const key3 of["type","name","ddoc"])if(requestDef.index[key3]){requestDef[key3]=requestDef.index[key3];delete requestDef.index[key3]}if(requestDef.fields){requestDef.index.fields=requestDef.fields;delete requestDef.fields}requestDef.type||(requestDef.type="json");return requestDef}function isNonNullObject(value){return"object"==typeof value&&null!==value}function checkFieldValueType(name,value,isHttp){let message="",received=value,addReceived=!0;-1!==["$in","$nin","$or","$and","$mod","$nor","$all"].indexOf(name)&&(Array.isArray(value)||(message="Query operator "+name+" must be an array."));-1!==["$not","$elemMatch","$allMatch"].indexOf(name)&&(!Array.isArray(value)&&isNonNullObject(value)||(message="Query operator "+name+" must be an object."));if("$mod"===name&&Array.isArray(value))if(2!==value.length)message="Query operator $mod must be in the format [divisor, remainder], where divisor and remainder are both integers.";else{const divisor=value[0],mod=value[1];if(0===divisor){message="Query operator $mod's divisor cannot be 0, cannot divide by zero.";addReceived=!1}if("number"!=typeof divisor||parseInt(divisor,10)!==divisor){message="Query operator $mod's divisor is not an integer.";received=divisor}if(parseInt(mod,10)!==mod){message="Query operator $mod's remainder is not an integer.";received=mod}}"$exists"===name&&"boolean"!=typeof value&&(message="Query operator $exists must be a boolean.");if("$type"===name){const allowed=["null","boolean","number","string","array","object"],allowedStr='"'+allowed.slice(0,allowed.length-1).join('", "')+'", or "'+allowed[allowed.length-1]+'"';("string"!=typeof value||-1==allowed.indexOf(value))&&(message="Query operator $type must be a string. Supported values: "+allowedStr+".")}"$size"===name&&parseInt(value,10)!==value&&(message="Query operator $size must be a integer.");"$regex"===name&&"string"!=typeof value&&(isHttp?message="Query operator $regex must be a string.":value instanceof RegExp||(message="Query operator $regex must be a string or an instance of a javascript regular expression."));if(message){addReceived&&(message+=" Received"+(null===received?" ":Array.isArray(received)?" array":" "+typeof received)+": "+(isNonNullObject(received)?JSON.stringify(received,null,"\t"):received));throw new Error(message)}}function validateSelector(input,isHttp){if(Array.isArray(input))for(const entry of input)isNonNullObject(entry)&&validateSelector(entry,isHttp);else for(const[key3,value]of Object.entries(input)){-1!==requireValidation.indexOf(key3)&&checkFieldValueType(key3,value,isHttp);-1===equalityOperators.indexOf(key3)&&-1===arrayTypeComparisonOperators.indexOf(key3)&&isNonNullObject(value)&&validateSelector(value,isHttp)}}async function dbFetch(db,path2,opts){if(opts.body){opts.body=JSON.stringify(opts.body);opts.headers=new h2({"Content-type":"application/json"})}const response=await db.fetch(path2,opts),json=await response.json();if(!response.ok){json.status=response.status;throw generateErrorFromResponse(createError(json))}return json}async function createIndex(db,requestDef){return await dbFetch(db,"_index",{method:"POST",body:massageCreateIndexRequest(requestDef)})}async function find(db,requestDef){validateSelector(requestDef.selector,!0);return await dbFetch(db,"_find",{method:"POST",body:requestDef})}async function explain(db,requestDef){return await dbFetch(db,"_explain",{method:"POST",body:requestDef})}async function getIndexes(db){return await dbFetch(db,"_index",{method:"GET"})}async function deleteIndex(db,indexDef){const ddoc=indexDef.ddoc,type=indexDef.type||"json",name=indexDef.name;if(!ddoc)throw new Error("you must provide an index's ddoc");if(!name)throw new Error("you must provide an index's name");const url="_index/"+[ddoc,type,name].map(encodeURIComponent).join("/");return await dbFetch(db,url,{method:"DELETE"})}function getDeepValue(value,path2){for(const key3 of path2)if(void 0===(value=value[key3]))return;return value}function createDeepMultiMapper(fields,emit2,selector){return function(doc){if(selector&&!matchesSelector(doc,selector))return;const toEmit=[];for(const field of fields){const value=getDeepValue(doc,parseField(field));if(void 0===value)return;toEmit.push(value)}emit2(toEmit)}}function createDeepSingleMapper(field,emit2,selector){const parsedField=parseField(field);return function(doc){if(selector&&!matchesSelector(doc,selector))return;const value=getDeepValue(doc,parsedField);void 0!==value&&emit2(value)}}function createShallowSingleMapper(field,emit2,selector){return function(doc){selector&&!matchesSelector(doc,selector)||emit2(doc[field])}}function createShallowMultiMapper(fields,emit2,selector){return function(doc){if(selector&&!matchesSelector(doc,selector))return;const toEmit=fields.map(field=>doc[field]);emit2(toEmit)}}function checkShallow(fields){return fields.every(field=>-1===field.indexOf("."))}function createMapper(fields,emit2,selector){const isShallow=checkShallow(fields),isSingle=1===fields.length;return isShallow?isSingle?createShallowSingleMapper(fields[0],emit2,selector):createShallowMultiMapper(fields,emit2,selector):isSingle?createDeepSingleMapper(fields[0],emit2,selector):createDeepMultiMapper(fields,emit2,selector)}function abstractMapper$1(db){return db._customFindAbstractMapper?{query:function addQueryFallback(signature,opts){const fallback3=abstractMapper.query.bind(this);return db._customFindAbstractMapper.query.call(this,signature,opts,fallback3)},viewCleanup:function addViewCleanupFallback(){const fallback3=abstractMapper.viewCleanup.bind(this);return db._customFindAbstractMapper.viewCleanup.call(this,fallback3)}}:abstractMapper}function massageSort(sort){if(!Array.isArray(sort))throw new Error("invalid sort json - should be an array");return sort.map(function(sorting){if("string"==typeof sorting){const obj={};obj[sorting]="asc";return obj}return sorting})}function massageUseIndex(useIndex){let cleanedUseIndex=[];"string"==typeof useIndex?cleanedUseIndex.push(useIndex):cleanedUseIndex=useIndex;return cleanedUseIndex.map(function(name){return name.replace(ddocIdPrefix,"")})}function massageIndexDef(indexDef){indexDef.fields=indexDef.fields.map(function(field){if("string"==typeof field){const obj={};obj[field]="asc";return obj}return field});indexDef.partial_filter_selector&&(indexDef.partial_filter_selector=massageSelector(indexDef.partial_filter_selector));return indexDef}function getKeyFromDoc(doc,index6){return index6.def.fields.map(obj=>{const field=getKey2(obj);return getFieldFromDoc(doc,parseField(field))})}function filterInclusiveStart(rows,targetValue,index6){const indexFields=index6.def.fields;let startAt=0;for(const row of rows){let docKey=getKeyFromDoc(row.doc,index6);if(1===indexFields.length)docKey=docKey[0];else for(;docKey.length>targetValue.length;)docKey.pop();if(Math.abs(collate(docKey,targetValue))>0)break;++startAt}return startAt>0?rows.slice(startAt):rows}function reverseOptions(opts){const newOpts=clone2(opts);delete newOpts.startkey;delete newOpts.endkey;delete newOpts.inclusive_start;delete newOpts.inclusive_end;"endkey"in opts&&(newOpts.startkey=opts.endkey);"startkey"in opts&&(newOpts.endkey=opts.startkey);"inclusive_start"in opts&&(newOpts.inclusive_end=opts.inclusive_start);"inclusive_end"in opts&&(newOpts.inclusive_start=opts.inclusive_end);return newOpts}function validateIndex(index6){const ascFields=index6.fields.filter(function(field){return"asc"===getValue(field)});if(0!==ascFields.length&&ascFields.length!==index6.fields.length)throw new Error("unsupported mixed sorting")}function validateSort(requestDef,index6){if(index6.defaultUsed&&requestDef.sort){const noneIdSorts=requestDef.sort.filter(function(sortItem){return"_id"!==Object.keys(sortItem)[0]}).map(function(sortItem){return Object.keys(sortItem)[0]});if(noneIdSorts.length>0)throw new Error('Cannot sort on field(s) "'+noneIdSorts.join(",")+'" when using the default index')}index6.defaultUsed}function validateFindRequest(requestDef){if("object"!=typeof requestDef.selector)throw new Error("you must provide a selector when you find()")}function getUserFields(selector,sort){const selectorFields=Object.keys(selector),sortFields=sort?sort.map(getKey2):[];let userFields;userFields=selectorFields.length>=sortFields.length?selectorFields:sortFields;if(0===sortFields.length)return{fields:userFields};userFields=userFields.sort(function(left,right){let leftIdx=sortFields.indexOf(left);-1===leftIdx&&(leftIdx=Number.MAX_VALUE);let rightIdx=sortFields.indexOf(right);-1===rightIdx&&(rightIdx=Number.MAX_VALUE);return leftIdx<rightIdx?-1:leftIdx>rightIdx?1:0});return{fields:userFields,sortOrder:sort.map(getKey2)}}async function createIndex$1(db,requestDef){function getMd5(){return md5||(md5=stringMd5(JSON.stringify(requestDef)))}const originalIndexDef=clone2((requestDef=massageCreateIndexRequest(requestDef)).index);requestDef.index=massageIndexDef(requestDef.index);validateIndex(requestDef.index);let md5;const viewName=requestDef.name||"idx-"+getMd5(),ddocName=requestDef.ddoc||"idx-"+getMd5(),ddocId="_design/"+ddocName;let hasInvalidLanguage=!1,viewExists=!1;db.constructor.emit("debug",["find","creating index",ddocId]);await upsert(db,ddocId,function updateDdoc(doc){doc._rev&&"query"!==doc.language&&(hasInvalidLanguage=!0);doc.language="query";doc.views=doc.views||{};viewExists=!!doc.views[viewName];if(viewExists)return!1;doc.views[viewName]={map:{fields:mergeObjects(requestDef.index.fields),partial_filter_selector:requestDef.index.partial_filter_selector},reduce:"_count",options:{def:originalIndexDef}};return doc});if(hasInvalidLanguage)throw new Error('invalid language for ddoc with id "'+ddocId+'" (should be "query")');const signature=ddocName+"/"+viewName;await abstractMapper$1(db).query.call(db,signature,{limit:0,reduce:!1});return{id:ddocId,name:viewName,result:viewExists?"exists":"created"}}async function getIndexes$1(db){const allDocsRes=await db.allDocs({startkey:"_design/",endkey:"_design/￿",include_docs:!0}),res2={indexes:[{ddoc:null,name:"_all_docs",type:"special",def:{fields:[{_id:"asc"}]}}]};res2.indexes=flatten2(res2.indexes,allDocsRes.rows.filter(function(row){return"query"===row.doc.language}).map(function(row){return(void 0!==row.doc.views?Object.keys(row.doc.views):[]).map(function(viewName){const view=row.doc.views[viewName];return{ddoc:row.id,name:viewName,type:"json",def:massageIndexDef(view.options.def)}})}));res2.indexes.sort(function(left,right){return compare2(left.name,right.name)});res2.total_rows=res2.indexes.length;return res2}function checkFieldInIndex(index6,field){return index6.def.fields.some(key3=>getKey2(key3)===field)}function userOperatorLosesPrecision(selector,field){return"$eq"!==getKey2(selector[field])}function sortFieldsByIndex(userFields,index6){const indexFields=index6.def.fields.map(getKey2);return userFields.slice().sort(function(a2,b3){let aIdx=indexFields.indexOf(a2),bIdx=indexFields.indexOf(b3);-1===aIdx&&(aIdx=Number.MAX_VALUE);-1===bIdx&&(bIdx=Number.MAX_VALUE);return compare2(aIdx,bIdx)})}function getBasicInMemoryFields(index6,selector,userFields){let needToFilterInMemory=!1;for(let i2=0,len=(userFields=sortFieldsByIndex(userFields,index6)).length;i2<len;i2++){const field=userFields[i2];if(needToFilterInMemory||!checkFieldInIndex(index6,field))return userFields.slice(i2);i2<len-1&&userOperatorLosesPrecision(selector,field)&&(needToFilterInMemory=!0)}return[]}function getInMemoryFieldsFromNe(selector){const fields=[];for(const[field,matcher]of Object.entries(selector))for(const operator of Object.keys(matcher))"$ne"===operator&&fields.push(field);return fields}function getInMemoryFields(coreInMemoryFields,index6,selector,userFields){return sortFieldsByIndex(uniq2(flatten2(coreInMemoryFields,getBasicInMemoryFields(index6,selector,userFields),getInMemoryFieldsFromNe(selector))),index6)}function checkIndexFieldsMatch(indexFields,sortOrder,fields){if(sortOrder){const sortMatches=oneArrayIsStrictSubArrayOfOther(sortOrder,indexFields),selectorMatches=oneArrayIsSubArrayOfOther(fields,indexFields);return sortMatches&&selectorMatches}return oneSetIsSubArrayOfOther(fields,indexFields)}function isNonLogicalMatcher(matcher){return-1===logicalMatchers.indexOf(matcher)}function checkFieldsLogicallySound(indexFields,selector){const matcher=selector[indexFields[0]];return void 0===matcher||!(1===Object.keys(matcher).length&&"$ne"===getKey2(matcher))}function checkIndexMatches(index6,sortOrder,fields,selector){const indexFields=index6.def.fields.map(getKey2);return!!checkIndexFieldsMatch(indexFields,sortOrder,fields)&&checkFieldsLogicallySound(indexFields,selector)}function findMatchingIndexes(selector,userFields,sortOrder,indexes2){return indexes2.filter(function(index6){return checkIndexMatches(index6,sortOrder,userFields,selector)})}function findBestMatchingIndex(selector,userFields,sortOrder,indexes2,useIndex){const matchingIndexes=findMatchingIndexes(selector,userFields,sortOrder,indexes2);if(0===matchingIndexes.length){if(useIndex)throw{error:"no_usable_index",message:"There is no index available for this selector."};const defaultIndex=indexes2[0];defaultIndex.defaultUsed=!0;return defaultIndex}if(1===matchingIndexes.length&&!useIndex)return matchingIndexes[0];const userFieldsMap=arrayToObject(userFields);if(useIndex){const useIndexDdoc="_design/"+useIndex[0],useIndexName=2===useIndex.length&&useIndex[1],index6=matchingIndexes.find(function(index7){return!(!useIndexName||index7.ddoc!==useIndexDdoc||useIndexName!==index7.name)||index7.ddoc===useIndexDdoc});if(!index6)throw{error:"unknown_error",message:"Could not find that index or could not use that index for the query"};return index6}return max2(matchingIndexes,function scoreIndex(index6){const indexFields=index6.def.fields.map(getKey2);let score=0;for(const indexField of indexFields)userFieldsMap[indexField]&&score++;return score})}function getSingleFieldQueryOptsFor(userOperator,userValue){switch(userOperator){case"$eq":return{key:userValue};case"$lte":return{endkey:userValue};case"$gte":return{startkey:userValue};case"$lt":return{endkey:userValue,inclusive_end:!1};case"$gt":return{startkey:userValue,inclusive_start:!1}}return{startkey:COLLATE_LO}}function getSingleFieldCoreQueryPlan(selector,index6){const field=getKey2(index6.def.fields[0]),matcher=selector[field]||{},inMemoryFields=[],userOperators=Object.keys(matcher);let combinedOpts;for(const userOperator of userOperators){isNonLogicalMatcher(userOperator)&&inMemoryFields.push(field);const newQueryOpts=getSingleFieldQueryOptsFor(userOperator,matcher[userOperator]);combinedOpts=combinedOpts?mergeObjects([combinedOpts,newQueryOpts]):newQueryOpts}return{queryOpts:combinedOpts,inMemoryFields}}function getMultiFieldCoreQueryPlan(userOperator,userValue){switch(userOperator){case"$eq":return{startkey:userValue,endkey:userValue};case"$lte":return{endkey:userValue};case"$gte":return{startkey:userValue};case"$lt":return{endkey:userValue,inclusive_end:!1};case"$gt":return{startkey:userValue,inclusive_start:!1}}}function getMultiFieldQueryOpts(selector,index6){function finish(i2){!1!==inclusiveStart&&startkey.push(COLLATE_LO);!1!==inclusiveEnd&&endkey.push(COLLATE_HI);inMemoryFields=indexFields.slice(i2)}const indexFields=index6.def.fields.map(getKey2);let inMemoryFields=[];const startkey=[],endkey=[];let inclusiveStart,inclusiveEnd;for(let i2=0,len=indexFields.length;i2<len;i2++){const matcher=selector[indexFields[i2]];if(!matcher||!Object.keys(matcher).length){finish(i2);break}if(Object.keys(matcher).some(isNonLogicalMatcher)){finish(i2);break}if(i2>0){const usingGtlt="$gt"in matcher||"$gte"in matcher||"$lt"in matcher||"$lte"in matcher,previousKeys=Object.keys(selector[indexFields[i2-1]]),previousWasEq=arrayEquals(previousKeys,["$eq"]),previousWasSame=arrayEquals(previousKeys,Object.keys(matcher));if(usingGtlt&&!previousWasEq&&!previousWasSame){finish(i2);break}}const userOperators=Object.keys(matcher);let combinedOpts=null;for(const userOperator of userOperators){const newOpts=getMultiFieldCoreQueryPlan(userOperator,matcher[userOperator]);combinedOpts=combinedOpts?mergeObjects([combinedOpts,newOpts]):newOpts}startkey.push("startkey"in combinedOpts?combinedOpts.startkey:COLLATE_LO);endkey.push("endkey"in combinedOpts?combinedOpts.endkey:COLLATE_HI);"inclusive_start"in combinedOpts&&(inclusiveStart=combinedOpts.inclusive_start);"inclusive_end"in combinedOpts&&(inclusiveEnd=combinedOpts.inclusive_end)}const res2={startkey,endkey};void 0!==inclusiveStart&&(res2.inclusive_start=inclusiveStart);void 0!==inclusiveEnd&&(res2.inclusive_end=inclusiveEnd);return{queryOpts:res2,inMemoryFields}}function shouldShortCircuit(selector){return Object.keys(selector).map(function(key3){return selector[key3]}).some(function(val){return"object"==typeof val&&0===Object.keys(val).length})}function getDefaultQueryPlan(selector){return{queryOpts:{startkey:null},inMemoryFields:[Object.keys(selector)]}}function getCoreQueryPlan(selector,index6){return index6.defaultUsed?getDefaultQueryPlan(selector):1===index6.def.fields.length?getSingleFieldCoreQueryPlan(selector,index6):getMultiFieldQueryOpts(selector,index6)}function planQuery(request2,indexes2){const selector=request2.selector,sort=request2.sort;if(shouldShortCircuit(selector))return Object.assign({},SHORT_CIRCUIT_QUERY,{index:indexes2[0]});const userFieldsRes=getUserFields(selector,sort),userFields=userFieldsRes.fields,index6=findBestMatchingIndex(selector,userFields,userFieldsRes.sortOrder,indexes2,request2.use_index),coreQueryPlan=getCoreQueryPlan(selector,index6);return{queryOpts:coreQueryPlan.queryOpts,index:index6,inMemoryFields:getInMemoryFields(coreQueryPlan.inMemoryFields,index6,selector,userFields)}}function indexToSignature(index6){return index6.ddoc.substring(8)+"/"+index6.name}async function doAllDocs(db,originalOpts){const opts=clone2(originalOpts);if(opts.descending){"endkey"in opts&&"string"!=typeof opts.endkey&&(opts.endkey="");"startkey"in opts&&"string"!=typeof opts.startkey&&(opts.limit=0)}else{"startkey"in opts&&"string"!=typeof opts.startkey&&(opts.startkey="");"endkey"in opts&&"string"!=typeof opts.endkey&&(opts.limit=0)}"key"in opts&&"string"!=typeof opts.key&&(opts.limit=0);if(opts.limit>0&&opts.indexes_count){opts.original_limit=opts.limit;opts.limit+=opts.indexes_count}const res2=await db.allDocs(opts);res2.rows=res2.rows.filter(function(row){return!/^_design\//.test(row.id)});opts.original_limit&&(opts.limit=opts.original_limit);res2.rows=res2.rows.slice(0,opts.limit);return res2}async function queryAllOrIndex(db,opts,indexToUse){return"_all_docs"===indexToUse.name?doAllDocs(db,opts):abstractMapper$1(db).query.call(db,indexToSignature(indexToUse),opts)}async function find$1(db,requestDef,explain2){if(requestDef.selector){validateSelector(requestDef.selector,!1);requestDef.selector=massageSelector(requestDef.selector)}requestDef.sort&&(requestDef.sort=massageSort(requestDef.sort));requestDef.use_index&&(requestDef.use_index=massageUseIndex(requestDef.use_index));"limit"in requestDef||(requestDef.limit=25);validateFindRequest(requestDef);const getIndexesRes=await getIndexes$1(db);db.constructor.emit("debug",["find","planning query",requestDef]);const queryPlan=planQuery(requestDef,getIndexesRes.indexes);db.constructor.emit("debug",["find","query plan",queryPlan]);const indexToUse=queryPlan.index;validateSort(requestDef,indexToUse);let opts=Object.assign({include_docs:!0,reduce:!1,indexes_count:getIndexesRes.total_rows},queryPlan.queryOpts);if("startkey"in opts&&"endkey"in opts&&collate(opts.startkey,opts.endkey)>0)return{docs:[]};if(requestDef.sort&&"string"!=typeof requestDef.sort[0]&&"desc"===getValue(requestDef.sort[0])){opts.descending=!0;opts=reverseOptions(opts)}if(!queryPlan.inMemoryFields.length){opts.limit=requestDef.limit;"skip"in requestDef&&(opts.skip=requestDef.skip)}if(explain2)return Promise.resolve(queryPlan,opts);const res2=await queryAllOrIndex(db,opts,indexToUse);!1===opts.inclusive_start&&(res2.rows=filterInclusiveStart(res2.rows,opts.startkey,indexToUse));queryPlan.inMemoryFields.length&&(res2.rows=filterInMemoryFields(res2.rows,requestDef,queryPlan.inMemoryFields));const resp={docs:res2.rows.map(function(row){const doc=row.doc;return requestDef.fields?pick2(doc,requestDef.fields):doc})};indexToUse.defaultUsed&&(resp.warning="No matching index found, create an index to optimize query time.");return resp}async function explain$1(db,requestDef){const queryPlan=await find$1(db,requestDef,!0);return{dbname:db.name,index:queryPlan.index,selector:requestDef.selector,range:{start_key:queryPlan.queryOpts.startkey,end_key:queryPlan.queryOpts.endkey},opts:{use_index:requestDef.use_index||[],bookmark:"nil",limit:requestDef.limit,skip:requestDef.skip,sort:requestDef.sort||{},fields:requestDef.fields,conflicts:!1,r:[49]},limit:requestDef.limit,skip:requestDef.skip||0,fields:requestDef.fields}}async function deleteIndex$1(db,index6){if(!index6.ddoc)throw new Error("you must supply an index.ddoc when deleting");if(!index6.name)throw new Error("you must supply an index.name when deleting");const docId=index6.ddoc,viewName=index6.name;await upsert(db,docId,function deltaFun(doc){if(1===Object.keys(doc.views).length&&doc.views[viewName])return{_id:docId,_deleted:!0};delete doc.views[viewName];return doc});await abstractMapper$1(db).viewCleanup.apply(db);return{ok:!0}}function appendPurgeSeqs(db,docs){return db.get("_local/purges").then(function(doc){for(const[docId,rev$$1]of docs){const purgeSeq=doc.purgeSeq+1;doc.purges.push({docId,rev:rev$$1,purgeSeq});doc.purges.length>db.purged_infos_limit&&doc.purges.splice(0,doc.purges.length-db.purged_infos_limit);doc.purgeSeq=purgeSeq}return doc}).catch(function(err3){if(404!==err3.status)throw err3;return{_id:"_local/purges",purges:docs.map(([docId,rev$$1],idx2)=>({docId,rev:rev$$1,purgeSeq:idx2})),purgeSeq:docs.length}}).then(function(doc){return db.put(doc)})}async function upsert2(db,id,func){try{const updated=func(await db.get(id)),result=await db.put(updated,{});if(result&&result.ok)return updated;throw new Error("Failed to update")}catch(ex){if("not_found"===ex.name){const result=await db.put(func({_id:id}),{});if(result&&result.ok)return func({_id:id});throw new Error("Failed to insert")}throw ex}}async function replicateShim(targetDB,sourceDB,progress,option={}){try{const targetDBInfo=await targetDB.info(),sourceDBInfo=await sourceDB.info(),sourceMaxSeq=sourceDBInfo.update_seq,maxNumSeq=Number.parseInt(`${sourceMaxSeq}`.split("-")[0]);await serialized(`replication-${targetDBInfo.db_name}-${sourceDBInfo.db_name}`,async()=>{var _a8,_b5,_c3;Logger(`Replication from ${sourceDBInfo.db_name} to ${targetDBInfo.db_name}\nSource: ${sourceDBInfo.db_name} (${sourceDBInfo.update_seq})\nTarget: ${targetDBInfo.db_name} (${targetDBInfo.update_seq})`,LOG_LEVEL_VERBOSE);const targetDBName=targetDBInfo.db_name,sourceDBName=sourceDBInfo.db_name,sourceCheckpointID=`_local/replication-checkpoint-mark-${targetDBName}-${sourceDBName}`,sourceCheckpointData=await upsert2(sourceDB,sourceCheckpointID,doc=>{var _a9;const previousMark=null!=(_a9=doc.mark)?_a9:(new Date).getTime().toString(),mark2=option.rewind?(new Date).getTime().toString():previousMark;return{...doc,mark:mark2}});Logger(`Replication from ${sourceDBName} to ${targetDBName} with mark ${sourceCheckpointData.mark}`,LOG_LEVEL_VERBOSE);const targetCheckpointID=`_local/replication-checkpoint-${targetDBName}-${sourceCheckpointData.mark}`;let since=(await upsert2(targetDB,targetCheckpointID,doc=>{var _a9;return{...doc,since:null!=(_a9=doc.since)?_a9:""}})).since;Logger(`Replication from ${sourceDBName} to ${targetDBName} / since ${since}`,LOG_LEVEL_VERBOSE);const batch_size=null!=(_a8=option.batch_size)?_a8:33;for(;;){const changes3=await sourceDB.changes({since,style:"all_docs",limit:batch_size});if(0===changes3.results.length)break;if(null==(_c3=null==(_b5=option.controller)?void 0:_b5.signal)?void 0:_c3.aborted)break;const changesResults=changes3.results,diffCheckParam=changesResults.map(e3=>[e3.id,e3.changes.map(e4=>e4.rev)]).reduce((acc,[id,revs])=>{var _a9;return{...acc,[id]:[...null!=(_a9=acc[id])?_a9:[],...revs]}},{}),diff=await targetDB.revsDiff(diffCheckParam),request2=Object.entries(diff).filter(e3=>void 0!==e3[1].missing).map(e3=>[e3[0],e3[1].missing]).map(([id,revs])=>revs.map(rev3=>({id,rev:rev3}))).flat();if(0!==request2.length){const fetchedMissingDocs=(await sourceDB.bulkGet({docs:request2,revs:!0})).results.map(e3=>e3.docs).flat().filter(e3=>"ok"in e3).map(e3=>e3.ok),processedDocs=(await targetDB.bulkDocs(fetchedMissingDocs,{new_edits:!1}),(await targetDB.bulkGet({docs:[...new Set(changesResults.map(e3=>({id:e3.id})))]})).results.map(e3=>e3.docs).flat().filter(e3=>"ok"in e3).map(e3=>e3.ok).map(e3=>({doc:e3,seq:Math.max.apply(void 0,[changesResults.filter(e22=>e22.id===e3._id).map(e22=>`${e22.seq}`.split("-")[0]).map(e22=>parseInt(e22)).reduce((a2,b3)=>Math.max(a2,b3),0),0])})).sort((a2,b3)=>a2.seq-b3.seq).map(e3=>e3.doc)),allSecs=Number.parseInt(`${changes3.last_seq}`.split("-")[0]);try{await progress(processedDocs,{lastSeq:allSecs,maxSeqInBatch:maxNumSeq})}catch(ex){Logger("Failed to process the progress on shim-replication");Logger(ex,LOG_LEVEL_VERBOSE)}since=changes3.last_seq}else since=changes3.last_seq;await upsert2(targetDB,targetCheckpointID,doc=>({...doc,since}))}})}catch(ex){Logger("Failed to replicate the database",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);throw ex}Logger("Replication has been completed",LOG_LEVEL_VERBOSE)}async function encrypt5(data,passphrase){return await encryptWithEphemeralSalt(data,passphrase,!0)}async function decrypt5(encryptedData,passphrase){return await decryptWithEphemeralSalt(encryptedData,passphrase)}async function getHashedStringWithCurrentTime(source2){const salt=(~~((new Date).getTime()/1e3/180)).toString(36),salt2=await sha12(salt);return await sha12(salt2+source2)}function SetupRemoteP2P($$anchor,$$props){function generateSetting(){const trialSettings={...{...P2P_DEFAULT_SETTINGS,...syncSetting,P2P_Enabled:!0}};return{...DEFAULT_SETTINGS,...PREFERRED_BASE,remoteType:RemoteTypes_REMOTE_P2P,...trialSettings}}async function checkConnection(){try{set(processing,!0);const trialRemoteSetting=generateSetting(),map3=new Map,store={get:key3=>Promise.resolve(map3.get(key3)||null),set:(key3,value)=>{map3.set(key3,value);return Promise.resolve()},delete:key3=>{map3.delete(key3);return Promise.resolve()},keys:()=>Promise.resolve(Array.from(map3.keys())),get db(){return Promise.resolve(this)}},dummyPouch=new index_es_default("dummy"),env={settings:trialRemoteSetting,processReplicatedDocs:async docs=>{},confirm:context2.services.confirm,db:dummyPouch,simpleStore:store,deviceName:syncSetting.P2P_DevicePeerName||"unnamed-device",platform:"setup-wizard"},replicator=new TrysteroReplicator(env);try{await replicator.setOnSetup();await replicator.allowReconnection();await replicator.open();for(let i2=0;i2<10;i2++){await new Promise(resolve=>setTimeout(resolve,1e3));if(replicator.knownAdvertisements.length>0)break}return 0===replicator.knownAdvertisements.length?"Your settings seem correct, but no other peers were found.":""}catch(e3){return`Failed to connect to other peers: ${e3}`}finally{try{replicator.close();dummyPouch.destroy()}catch(e3){console.error(e3)}}}finally{set(processing,!1)}}function setDefaultRelay(){syncSetting.P2P_relays=P2P_DEFAULT_SETTINGS.P2P_relays}function generateDefaultGroupId(){const randomValues=new Uint16Array(4);crypto.getRandomValues(randomValues);const a2=Math.floor(randomValues[0]/65536*1e3),b3=Math.floor(randomValues[1]/65536*1e3),c3=Math.floor(randomValues[2]/65536*1e3),d4=Math.floor(randomValues[3]/65536*46656);syncSetting.P2P_roomID=`${a2.toString().padStart(3,"0")}-${b3.toString().padStart(3,"0")}-${c3.toString().padStart(3,"0")}-${d4.toString(36).padStart(3,"0")}`}async function checkAndCommit(){set(error,"");try{set(error,await checkConnection()||"",!0);if(!get(error)){const setting=generateSetting();$$props.setResult(pickP2PSyncSettings(setting));return}}catch(e3){set(error,`Error during connection test: ${e3}`);return}}function commit(){const setting=pickP2PSyncSettings(generateSetting());$$props.setResult(setting)}function cancel2(){$$props.setResult("cancelled")}var fragment,node,node_1,node_2,node_3,node_4,node_5,node_6,node_7,node_8,node_9,node_10,node_11,node_12,node_18,node_19,consequent,alternate;push($$props,!0);let syncSetting=proxy({...pickP2PSyncSettings(DEFAULT_SETTINGS)});const context2=getDialogContext();let error=state("");onMount(()=>{if($$props.getInitialData){const initialData=$$props.getInitialData();initialData&&copyTo(initialData,syncSetting);context2.services.config.getSmallConfig(SETTING_KEY_P2P_DEVICE_NAME)?syncSetting.P2P_DevicePeerName=context2.services.config.getSmallConfig(SETTING_KEY_P2P_DEVICE_NAME):syncSetting.P2P_DevicePeerName=""}});let processing=state(!1);const canProceed=user_derived(()=>{var _a8;return""!==syncSetting.P2P_relays.trim()&&""!==syncSetting.P2P_roomID.trim()&&""!==syncSetting.P2P_passphrase.trim()&&""!==(null!==(_a8=syncSetting.P2P_DevicePeerName)&&void 0!==_a8?_a8:"").trim()});DialogHeader(node=first_child(fragment=root29()),{title:"P2P Configuration"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("Please enter the Peer-to-Peer Synchronisation information below."))},$$slots:{default:!0}});InputRow(node_2=sibling(node_1,2),{label:"Enabled",children:($$anchor2,$$slotProps)=>{var input=root_214();remove_input_defaults(input);bind_checked(input,()=>syncSetting.P2P_Enabled,$$value=>syncSetting.P2P_Enabled=$$value);append($$anchor2,input)},$$slots:{default:!0}});InputRow(node_3=sibling(node_2,2),{label:"Relay URL",children:($$anchor2,$$slotProps)=>{var fragment_1=root_34(),input_1=first_child(fragment_1);remove_input_defaults(input_1);sibling(input_1,2).__click=[on_click3,setDefaultRelay];bind_value(input_1,()=>syncSetting.P2P_relays,$$value=>syncSetting.P2P_relays=$$value);append($$anchor2,fragment_1)},$$slots:{default:!0}});InputRow(node_4=sibling(node_3,2),{label:"Group ID",children:($$anchor2,$$slotProps)=>{var fragment_2=root_411(),input_2=first_child(fragment_2);remove_input_defaults(input_2);sibling(input_2,2).__click=[on_click_1,generateDefaultGroupId];bind_value(input_2,()=>syncSetting.P2P_roomID,$$value=>syncSetting.P2P_roomID=$$value);append($$anchor2,fragment_2)},$$slots:{default:!0}});InputRow(node_5=sibling(node_4,2),{label:"Passphrase",children:($$anchor2,$$slotProps)=>{Password($$anchor2,{name:"p2p-password",placeholder:"Enter your passphrase",get value(){return syncSetting.P2P_passphrase},set value($$value){syncSetting.P2P_passphrase=$$value}})},$$slots:{default:!0}});InfoNote(node_6=sibling(node_5,2),{children:($$anchor2,$$slotProps)=>{next();var fragment_4=root_66();next(2);append($$anchor2,fragment_4)},$$slots:{default:!0}});InputRow(node_7=sibling(node_6,2),{label:"Device Peer ID",children:($$anchor2,$$slotProps)=>{var input_3=root_77();remove_input_defaults(input_3);bind_value(input_3,()=>syncSetting.P2P_DevicePeerName,$$value=>syncSetting.P2P_DevicePeerName=$$value);append($$anchor2,input_3)},$$slots:{default:!0}});InputRow(node_8=sibling(node_7,2),{label:"Auto Start P2P Connection",children:($$anchor2,$$slotProps)=>{var input_4=root_87();remove_input_defaults(input_4);bind_checked(input_4,()=>syncSetting.P2P_AutoStart,$$value=>syncSetting.P2P_AutoStart=$$value);append($$anchor2,input_4)},$$slots:{default:!0}});InfoNote(node_9=sibling(node_8,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text('If "Auto Start P2P Connection" is enabled, the P2P connection will be started automatically when the plug-in\n launches.'))},$$slots:{default:!0}});InputRow(node_10=sibling(node_9,2),{label:"Auto Broadcast Changes",children:($$anchor2,$$slotProps)=>{var input_5=root_103();remove_input_defaults(input_5);bind_checked(input_5,()=>syncSetting.P2P_AutoBroadcast,$$value=>syncSetting.P2P_AutoBroadcast=$$value);append($$anchor2,input_5)},$$slots:{default:!0}});InfoNote(node_11=sibling(node_10,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text('If "Auto Broadcast Changes" is enabled, changes will be automatically broadcasted to connected peers without\n requiring manual intervention. This requests peers to fetch this device\'s changes.'))},$$slots:{default:!0}});ExtraItems(node_12=sibling(node_11,2),{title:"Advanced Settings",children:($$anchor2,$$slotProps)=>{var node_14,node_15,node_16,fragment_5=root_124(),node_13=first_child(fragment_5);InfoNote(node_13,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("TURN server settings are only necessary if you are behind a strict NAT or firewall that prevents direct P2P\n connections. In most cases, you can leave these fields blank."))},$$slots:{default:!0}});InfoNote(node_14=sibling(node_13,2),{warning:!0,children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Using public TURN servers may have privacy implications, as your data will be relayed through third-party\n servers. Even if your data are encrypted, your existence may be known to them. Please ensure you trust the TURN\n server provider before using their services. Also your `network administrator` too. You should consider setting\n up your own TURN server for your FQDN, if possible."))},$$slots:{default:!0}});InputRow(node_15=sibling(node_14,2),{label:"TURN Server URLs (comma-separated)",children:($$anchor3,$$slotProps2)=>{var textarea=root_153();remove_textarea_child(textarea);bind_value(textarea,()=>syncSetting.P2P_turnServers,$$value=>syncSetting.P2P_turnServers=$$value);append($$anchor3,textarea)},$$slots:{default:!0}});InputRow(node_16=sibling(node_15,2),{label:"TURN Username",children:($$anchor3,$$slotProps2)=>{var input_6=root_163();remove_input_defaults(input_6);bind_value(input_6,()=>syncSetting.P2P_turnUsername,$$value=>syncSetting.P2P_turnUsername=$$value);append($$anchor3,input_6)},$$slots:{default:!0}});InputRow(sibling(node_16,2),{label:"TURN Credential",children:($$anchor3,$$slotProps2)=>{Password($$anchor3,{name:"p2p-turn-credential",placeholder:"Enter TURN credential",get value(){return syncSetting.P2P_turnCredential},set value($$value){syncSetting.P2P_turnCredential=$$value}})},$$slots:{default:!0}});append($$anchor2,fragment_5)},$$slots:{default:!0}});node_18=sibling(node_12,2);{let $0=user_derived(()=>""!==get(error));InfoNote(node_18,{error:!0,get visible(){return get($0)},children:($$anchor2,$$slotProps)=>{next();var text_5=text();template_effect(()=>set_text(text_5,get(error)));append($$anchor2,text_5)},$$slots:{default:!0}})}node_19=sibling(node_18,2);consequent=$$anchor2=>{append($$anchor2,text("Checking connection... Please wait."))};alternate=$$anchor2=>{UserDecisions($$anchor2,{children:($$anchor3,$$slotProps)=>{var node_21,fragment_9=root_215(),node_20=first_child(fragment_9);let $0=user_derived(()=>!get(canProceed));Decision(node_20,{title:"Test Settings and Continue",important:!0,get disabled(){return get($0)},commit:()=>checkAndCommit()});Decision(node_21=sibling(node_20,2),{title:"Continue anyway",commit:()=>commit()});Decision(sibling(node_21,2),{title:"Cancel",commit:()=>cancel2()});append($$anchor3,fragment_9)},$$slots:{default:!0}})};if_block(node_19,$$render=>{get(processing)?$$render(consequent):$$render(alternate,!1)});append($$anchor,fragment);pop()}function SetupRemoteE2EE($$anchor,$$props){function commit(){$$props.setResult(pickEncryptionSettings(encryptionSettings))}var fragment,node,node_1,node_2,node_4,node_5,node_6,node_7,node_8,node_12;push($$props,!0);let encryptionSettings=proxy({encrypt:!0,passphrase:"",E2EEAlgorithm:DEFAULT_SETTINGS.E2EEAlgorithm,usePathObfuscation:!0});onMount(()=>{if($$props.getInitialData){const initialData=$$props.getInitialData();initialData&&copyTo(initialData,encryptionSettings)}});let e2eeValid=user_derived(()=>!encryptionSettings.encrypt||encryptionSettings.passphrase.trim().length>=1);DialogHeader(node=first_child(fragment=root30()),{title:"End-to-End Encryption"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("Please configure your end-to-end encryption settings."))},$$slots:{default:!0}});InputRow(node_2=sibling(node_1,2),{label:"End-to-End Encryption",children:($$anchor2,$$slotProps)=>{var node_3,fragment_1=root_216(),input=first_child(fragment_1);remove_input_defaults(input);node_3=sibling(input,2);{let $0=user_derived(()=>!encryptionSettings.encrypt);Password(node_3,{name:"e2ee-passphrase",placeholder:"Enter your passphrase",get disabled(){return get($0)},get required(){return encryptionSettings.encrypt},get value(){return encryptionSettings.passphrase},set value($$value){encryptionSettings.passphrase=$$value}})}bind_checked(input,()=>encryptionSettings.encrypt,$$value=>encryptionSettings.encrypt=$$value);append($$anchor2,fragment_1)},$$slots:{default:!0}});InfoNote(node_4=sibling(node_2,2),{title:"Strongly Recommended",children:($$anchor2,$$slotProps)=>{next();var fragment_2=root_35();next(2);append($$anchor2,fragment_2)},$$slots:{default:!0}});InfoNote(node_5=sibling(node_4,2),{warning:!0,children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("This setting must be the same even when connecting to multiple synchronisation destinations."))},$$slots:{default:!0}});InputRow(node_6=sibling(node_5,2),{label:"Obfuscate Properties",children:($$anchor2,$$slotProps)=>{var input_1=root_53();remove_input_defaults(input_1);template_effect(()=>input_1.disabled=!encryptionSettings.encrypt);bind_checked(input_1,()=>encryptionSettings.usePathObfuscation,$$value=>encryptionSettings.usePathObfuscation=$$value);append($$anchor2,input_1)},$$slots:{default:!0}});InfoNote(node_7=sibling(node_6,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("Obfuscating properties (e.g., path of file, size, creation and modification dates) adds an additional layer of\n security by making it harder to identify the structure and names of your files and folders on the remote server.\n This helps protect your privacy and makes it more difficult for unauthorized users to infer information about your\n data."))},$$slots:{default:!0}});ExtraItems(node_8=sibling(node_7,2),{title:"Advanced",children:($$anchor2,$$slotProps)=>{var node_10,fragment_3=root_78(),node_9=first_child(fragment_3);InputRow(node_9,{label:"Encryption Algorithm",children:($$anchor3,$$slotProps2)=>{var select=root_88();each(select,21,()=>Object.values(E2EEAlgorithms),index,($$anchor4,alg)=>{var option_value,option=root_94(),text_3=child(option,!0);reset(option);option_value={};template_effect(()=>{var _a8,_b5;set_text(text_3,null!=(_a8=E2EEAlgorithmNames[get(alg)])?_a8:get(alg));option_value!==(option_value=get(alg))&&(option.value=null!=(_b5=option.__value=get(alg))?_b5:"")});append($$anchor4,option)});reset(select);template_effect(()=>select.disabled=!encryptionSettings.encrypt);bind_select_value(select,()=>encryptionSettings.E2EEAlgorithm,$$value=>encryptionSettings.E2EEAlgorithm=$$value);append($$anchor3,select)},$$slots:{default:!0}});InfoNote(node_10=sibling(node_9,2),{children:($$anchor3,$$slotProps2)=>{next();var text_4=text();template_effect(()=>{var _a8;return set_text(text_4,`In most cases, you should stick with the default algorithm (${null!=(_a8=E2EEAlgorithmNames[DEFAULT_SETTINGS.E2EEAlgorithm])?_a8:""}), This setting is only required if you have an existing Vault encrypted in a different format.`)});append($$anchor3,text_4)},$$slots:{default:!0}});InfoNote(sibling(node_10,2),{warning:!0,children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Changing the encryption algorithm will prevent access to any data previously encrypted with a different\n algorithm. Ensure that all your devices are configured to use the same algorithm to maintain access to your\n data."))},$$slots:{default:!0}});append($$anchor2,fragment_3)},$$slots:{default:!0}});InfoNote(node_12=sibling(node_8,2),{warning:!0,children:($$anchor2,$$slotProps)=>{var fragment_5=root_125();next(2);append($$anchor2,fragment_5)},$$slots:{default:!0}});UserDecisions(sibling(node_12,2),{children:($$anchor2,$$slotProps)=>{var fragment_6=root_135(),node_14=first_child(fragment_6);let $0=user_derived(()=>!get(e2eeValid));Decision(node_14,{title:"Proceed",important:!0,get disabled(){return get($0)},commit:()=>commit()});Decision(sibling(node_14,2),{title:"Cancel",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_6)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function encodeSettingsToQRCodeData(settings){const settingArr=[],fullIndexes=Object.entries(KeyIndexOfSettings);for(const[settingKey,index6]of fullIndexes){const settingValue=settings[settingKey];index6<0||(settingArr[index6]=settingValue)}return encodeAnyArray(settingArr)}function decodeSettingsFromQRCodeData(qr){const settingArr=decodeAnyArray(qr),fullIndexes=Object.entries(KeyIndexOfSettings),newSettings={...DEFAULT_SETTINGS};for(const[settingKey,index6]of fullIndexes){if(index6<0)continue;if(index6>=settingArr.length)continue;const settingValue=settingArr[index6];newSettings[settingKey]=settingValue}return newSettings}function encodeQR(settingString,format2){const qr=(0,import_qrcode_generator.default)(0,"L"),uri=`${configURIBaseQR}${encodeURIComponent(settingString)}`;try{qr.addData(uri);qr.make()}catch(ex){Logger(`Failed to encode QR Code (${(null==ex?void 0:ex.message)||String(ex)})`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return""}return 0===format2?qr.createSvgTag(3):1===format2?qr.createASCII(3):""}async function encodeSettingsToSetupURI(settingString,passphrase,removeProperties=["pluginSyncExtendedSetting"],skipDefaultValue=!1){const setting={...settingString};if(skipDefaultValue){const keys3=Object.keys(setting);for(const k2 of keys3)JSON.stringify(k2 in setting?setting[k2]:"")==JSON.stringify(k2 in DEFAULT_SETTINGS?DEFAULT_SETTINGS[k2]:"*")&&delete setting[k2]}for(const prop2 of[...removeProperties])delete setting[prop2];for(const prop2 of necessaryErasureProperties)setting[prop2]="";const encryptedSetting=encodeURIComponent(await encryptString(JSON.stringify(setting),passphrase));return`${configURIBase}${encryptedSetting} `}function paneSetup(paneEl,{addPanel,addPane}){addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleQuickSetup")).then(paneEl2=>{new LiveSyncSetting(paneEl2).setName($msg("obsidianLiveSyncSettingTab.nameConnectSetupURI")).setDesc($msg("obsidianLiveSyncSettingTab.descConnectSetupURI")).addButton(text2=>{text2.setButtonText($msg("obsidianLiveSyncSettingTab.btnUse")).onClick(()=>{this.closeSetting();eventHub.emitEvent(EVENT_REQUEST_OPEN_SETUP_URI2)})});new LiveSyncSetting(paneEl2).setName($msg("Rerun Onboarding Wizard")).setDesc($msg("Rerun the onboarding wizard to set up Self-hosted LiveSync again.")).addButton(text2=>{text2.setButtonText($msg("Rerun Wizard")).onClick(async()=>{const setupManager=this.core.getModule(SetupManager);await setupManager.onOnboard("existing-user")})});new LiveSyncSetting(paneEl2).setName($msg("obsidianLiveSyncSettingTab.nameEnableLiveSync")).setDesc($msg("obsidianLiveSyncSettingTab.descEnableLiveSync")).addOnUpdate(visibleOnly(()=>!this.isConfiguredAs("isConfigured",!0))).addButton(text2=>{text2.setButtonText($msg("obsidianLiveSyncSettingTab.btnEnable")).onClick(async()=>{this.editingSettings.isConfigured=!0;await this.saveAllDirtySettings();this.services.appLifecycle.askRestart()})})});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleSetupOtherDevices"),void 0,visibleOnly(()=>this.isConfiguredAs("isConfigured",!0))).then(paneEl2=>{new LiveSyncSetting(paneEl2).setName($msg("obsidianLiveSyncSettingTab.nameCopySetupURI")).setDesc($msg("obsidianLiveSyncSettingTab.descCopySetupURI")).addButton(text2=>{text2.setButtonText($msg("obsidianLiveSyncSettingTab.btnCopy")).onClick(()=>{eventHub.emitEvent(EVENT_REQUEST_COPY_SETUP_URI2)})});new LiveSyncSetting(paneEl2).setName($msg("Setup.ShowQRCode")).setDesc($msg("Setup.ShowQRCode.Desc")).addButton(text2=>{text2.setButtonText($msg("Setup.ShowQRCode")).onClick(()=>{eventHub.emitEvent(EVENT_REQUEST_SHOW_SETUP_QR2)})})});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleReset")).then(paneEl2=>{new LiveSyncSetting(paneEl2).setName($msg("obsidianLiveSyncSettingTab.nameDiscardSettings")).addButton(text2=>{text2.setButtonText($msg("obsidianLiveSyncSettingTab.btnDiscard")).onClick(async()=>{if("yes"==await this.core.confirm.askYesNoDialog($msg("obsidianLiveSyncSettingTab.msgDiscardConfirmation"),{defaultOption:"No"})){this.editingSettings={...this.editingSettings,...DEFAULT_SETTINGS};await this.saveAllDirtySettings();this.core.settings={...DEFAULT_SETTINGS};await this.services.setting.saveSettingData();await this.services.database.resetDatabase();this.services.appLifecycle.askRestart()}}).setWarning()}).addOnUpdate(visibleOnly(()=>this.isConfiguredAs("isConfigured",!0)))});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleExtraFeatures")).then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("useAdvancedMode");new LiveSyncSetting(paneEl2).autoWireToggle("usePowerUserMode");new LiveSyncSetting(paneEl2).autoWireToggle("useEdgeCaseMode");this.addOnSaved("useAdvancedMode",()=>this.display());this.addOnSaved("usePowerUserMode",()=>this.display());this.addOnSaved("useEdgeCaseMode",()=>this.display())});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleOnlineTips")).then(paneEl2=>{const repo="vrtmrz/obsidian-livesync",topPath=$msg("obsidianLiveSyncSettingTab.linkTroubleshooting"),rawRepoURI=`https://raw.githubusercontent.com/${repo}/main`;this.createEl(paneEl2,"div","",el=>el.innerHTML=`<a href='https://github.com/${repo}/blob/main${topPath}' target="_blank">${$msg("obsidianLiveSyncSettingTab.linkOpenInBrowser")}</a>`);const troubleShootEl=this.createEl(paneEl2,"div",{text:"",cls:"sls-troubleshoot-preview"}),loadMarkdownPage=async(pathAll,basePathParam="")=>{var _a8,_b5;troubleShootEl.style.minHeight=troubleShootEl.clientHeight+"px";troubleShootEl.empty();const directoryArr=(pathAll.startsWith("/")?pathAll:`${basePathParam}/${pathAll}`).split("/"),filename=directoryArr.pop(),basePath=directoryArr.join("/");let remoteTroubleShootMDSrc="";try{remoteTroubleShootMDSrc=await(0,import_obsidian.request)(`${rawRepoURI}${basePath}/${filename}`)}catch(ex){remoteTroubleShootMDSrc=`${$msg("obsidianLiveSyncSettingTab.logErrorOccurred")}\n${ex.toString()}`}const remoteTroubleShootMD=remoteTroubleShootMDSrc.replace(/\((.*?(.png)|(.jpg))\)/g,`(${rawRepoURI}${basePath}/$1)`);await import_obsidian.MarkdownRenderer.render(this.plugin.app,`<a class='sls-troubleshoot-anchor'></a> [${$msg("obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting")}](${topPath}) [${$msg("obsidianLiveSyncSettingTab.linkPageTop")}](${filename})\n\n${remoteTroubleShootMD}`,troubleShootEl,`${rawRepoURI}`,this.plugin);null==(_b5=null==(_a8=troubleShootEl.querySelector(".sls-troubleshoot-anchor"))?void 0:_a8.parentElement)||_b5.setCssStyles({position:"sticky",top:"-1em",backgroundColor:"var(--modal-background)"});troubleShootEl.querySelectorAll("a.internal-link").forEach(anchorEl=>{anchorEl.addEventListener("click",evt=>{fireAndForget(async()=>{const uri=anchorEl.getAttr("data-href");if(uri)if(uri.startsWith("#")){evt.preventDefault();const p2=Array.from(troubleShootEl.querySelectorAll("[data-heading]")).find(e3=>{var _a9;return(null==(_a9=e3.getAttr("data-heading"))?void 0:_a9.toLowerCase().split(" ").join("-"))==uri.substring(1).toLowerCase()});if(p2){p2.setCssStyles({scrollMargin:"3em"});p2.scrollIntoView({behavior:"instant",block:"start"})}}else{evt.preventDefault();await loadMarkdownPage(uri,basePath);troubleShootEl.setCssStyles({scrollMargin:"1em"});troubleShootEl.scrollIntoView({behavior:"instant",block:"start"})}})})});troubleShootEl.style.minHeight=""};loadMarkdownPage(topPath)})}function paneGeneral(paneEl,{addPanel,addPane}){addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleAppearance")).then(paneEl2=>{const languages=Object.fromEntries([...SUPPORTED_I18N_LANGS.map(e3=>[e3,$t(`lang-${e3}`)])]);new LiveSyncSetting(paneEl2).autoWireDropDown("displayLanguage",{options:languages});this.addOnSaved("displayLanguage",()=>this.display());new LiveSyncSetting(paneEl2).autoWireToggle("showStatusOnEditor");this.addOnSaved("showStatusOnEditor",()=>{eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)});new LiveSyncSetting(paneEl2).autoWireToggle("showOnlyIconsOnEditor",{onUpdate:visibleOnly(()=>this.isConfiguredAs("showStatusOnEditor",!0))});new LiveSyncSetting(paneEl2).autoWireToggle("showStatusOnStatusbar");new LiveSyncSetting(paneEl2).autoWireToggle("hideFileWarningNotice");new LiveSyncSetting(paneEl2).autoWireDropDown("networkWarningStyle",{options:{[NetworkWarningStyles_BANNER]:"Show full banner",[NetworkWarningStyles_ICON]:"Show icon only",[NetworkWarningStyles_HIDDEN]:"Hide completely"}});this.addOnSaved("networkWarningStyle",()=>{eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)})});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleLogging")).then(paneEl2=>{paneEl2.addClass("wizardHidden");new LiveSyncSetting(paneEl2).autoWireToggle("lessInformationInLog");new LiveSyncSetting(paneEl2).autoWireToggle("showVerboseLog",{onUpdate:visibleOnly(()=>this.isConfiguredAs("lessInformationInLog",!1))})});new LiveSyncSetting(paneEl).setClass("wizardOnly").addButton(button=>button.setButtonText($msg("obsidianLiveSyncSettingTab.btnNext")).setCta().onClick(()=>{this.changeDisplay("0")}))}function InfoTable($$anchor,$$props){var div,div_1;append_styles($$anchor,$$css11);const infoEntries=user_derived(()=>Object.entries(null!==$$props.info&&void 0!==$$props.info?$$props.info:{}));each(div_1=child(div=root31()),21,()=>get(infoEntries),index,($$anchor2,$$item)=>{var fragment,div_2,div_3,text2,div_4,div_5,text_1,$$array=user_derived(()=>to_array(get($$item),2));let key3=()=>get($$array)[0],value=()=>get($$array)[1];fragment=root_121();div_3=child(div_2=first_child(fragment));text2=child(div_3,!0);reset(div_3);reset(div_2);div_5=child(div_4=sibling(div_2,2));text_1=child(div_5,!0);reset(div_5);reset(div_4);template_effect(()=>{set_attribute2(div_2,"aria-label",key3());set_text(text2,key3());set_attribute2(div_4,"aria-label",key3());set_text(text_1,value())});append($$anchor2,fragment)});reset(div_1);reset(div);append($$anchor,div)}function InfoPanel($$anchor,$$props){push($$props,!0);const $port=()=>store_get($$props.port,"$port",$$stores),[$$stores,$$cleanup]=setup_stores(),info3=user_derived(()=>{var _a8;return null!==(_a8=null===$port()||void 0===$port()?void 0:$port().info)&&void 0!==_a8?_a8:{}});InfoTable($$anchor,{get info(){return get(info3)}});pop();$$cleanup()}function getE2EEConfigSummary(setting,showAdvanced=!1){return getSummaryFromPartialSettings(pickEncryptionSettings(setting),showAdvanced)}function getSummaryFromPartialSettings(setting,showAdvanced=!1){const outputSummary={};for(const key3 of Object.keys(setting)){const config=getConfig(key3);if(!config)continue;if(config.isAdvanced&&!showAdvanced)continue;const value="E2EEAlgorithm"!=key3?`${setting[key3]}`:E2EEAlgorithmNames[`${setting[key3]}`],displayValue=config.isHidden?"•".repeat(value.length):escapeStringToHTML(value);outputSummary[config.name]=displayValue}return outputSummary}async function copyMigrationDocs(docName,dbFrom,dbTo){try{const doc=await dbFrom.get(docName);delete doc._rev;await dbTo.put(doc)}catch(e3){if(404===e3.status)return;throw e3}}async function migrateDatabases(operationName,from,openTo){const dbTo=await openTo();await dbTo.info();Logger(`Opening destination database for migration: ${operationName}.`,LOG_LEVEL_NOTICE,"migration");await dbTo.destroy();Logger(`Destroyed existing destination database for migration: ${operationName}.`,LOG_LEVEL_NOTICE,"migration");const dbTo2=await openTo(),info22=await dbTo2.info();console.log(info22);Logger(`Re-created destination database for migration: ${operationName}.`,LOG_LEVEL_NOTICE,"migration");const totalDocs=(await from.info()).doc_count||0;if(!(await from.replicate.to(dbTo2,{style:"all_docs"}).on("change",info4=>{Logger(`Replicating... Docs replicated: ${info4.docs_written} / ${totalDocs}`,LOG_LEVEL_NOTICE,"migration")})).ok)throw new Error(`Replication failed for migration: ${operationName}.`);Logger(`Replication completed for migration: ${operationName}.`,LOG_LEVEL_NOTICE,"migration");await copyMigrationDocs(MILESTONE_DOCID,from,dbTo2);await copyMigrationDocs(NODEINFO_DOCID,from,dbTo2);Logger(`Copied migration documents for migration: ${operationName}.`,LOG_LEVEL_NOTICE,"migration");await dbTo2.close();return!0}function migrateLegacyRemoteConfigurationsInPlace(settings,log3){const hasText=value=>"string"==typeof value&&""!==value.trim();settings.remoteConfigurations||(settings.remoteConfigurations={});if(0!==Object.keys(settings.remoteConfigurations).length)return!1;const hasCouchDB=hasText(settings.couchDB_URI),hasS3=hasText(settings.endpoint),hasP2P=hasText(settings.P2P_roomID);if(!hasCouchDB&&!hasS3&&!hasP2P)return!1;null==log3||log3("Migrating existing remote configuration to sls+ format...");const candidates=[{id:"legacy-couchdb",name:"CouchDB Remote",type:"couchdb",enabled:hasCouchDB},{id:"legacy-s3",name:"S3 Remote",type:"s3",enabled:hasS3},{id:"legacy-p2p",name:"P2P Remote",type:"p2p",enabled:hasP2P}];for(const candidate of candidates)if(candidate.enabled)try{const uri=ConnectionStringParser.serialize({type:candidate.type,settings});settings.remoteConfigurations[candidate.id]={id:candidate.id,name:candidate.name,uri,isEncrypted:!1}}catch(e3){null==log3||log3(`Failed to migrate ${candidate.type} configuration: ${e3}`)}const createdIds=Object.keys(settings.remoteConfigurations);if(0===createdIds.length)return!1;const preferredId=settings.remoteType===REMOTE_MINIO?"legacy-s3":settings.remoteType===REMOTE_P2P?"legacy-p2p":"legacy-couchdb";settings.activeConfigurationId=settings.remoteConfigurations[preferredId]?preferredId:createdIds[0];return!0}async function migrateToMultipleRemoteConfigurations(host){const log3=createInstanceLogFunction("SF:RemoteConfig",host.services.API),settings=host.services.setting.currentSettings();if(migrateLegacyRemoteConfigurationsInPlace(settings,log3)){await host.services.setting.saveSettingData();log3(`Successfully migrated ${Object.keys(settings.remoteConfigurations).length} remote configuration(s).`);return!0}return!1}function activateRemoteConfiguration(settings,id){var _a8;const config=null==(_a8=settings.remoteConfigurations)?void 0:_a8[id];if(!config)return!1;settings.activeConfigurationId=id;try{const parsed=ConnectionStringParser.parse(config.uri);if("couchdb"===parsed.type){settings.remoteType=REMOTE_COUCHDB;Object.assign(settings,parsed.settings)}else if("s3"===parsed.type){settings.remoteType=REMOTE_MINIO;Object.assign(settings,parsed.settings)}else if("p2p"===parsed.type){settings.remoteType=REMOTE_P2P;Object.assign(settings,parsed.settings)}return settings}catch(e3){return!1}}async function commandSwitchActiveRemote(host){var _a8;const settings=host.services.setting.currentSettings(),configs=settings.remoteConfigurations;if(!configs||0===Object.keys(configs).length){host.services.API.addLog("No remote configurations found.",LOG_LEVEL_NOTICE,"remote-config");return}const options=Object.values(configs).map(c3=>({label:`${c3.name} (${c3.id===settings.activeConfigurationId?"Active":"Inactive"})`,value:c3.id})),selectedLabel=await host.services.UI.confirm.askSelectString("Select a remote configuration to activate",options.map(o2=>o2.label));if(selectedLabel){const actualId=null==(_a8=options.find(o2=>o2.label===selectedLabel))?void 0:_a8.value;if(actualId){let updated=!1;await host.services.setting.updateSettings(currentSettings=>{const activated=activateRemoteConfiguration(currentSettings,actualId);if(activated){updated=!0;return activated}return currentSettings});if(updated){host.services.API.addLog(`Switched to remote: ${selectedLabel}`,LOG_LEVEL_NOTICE,"remote-config");await host.services.control.applySettings();await host.services.setting.saveSettingData()}}}}async function commandReplicateWithSpecificRemote(host){const configs=host.services.setting.currentSettings().remoteConfigurations;if(!configs||0===Object.keys(configs).length){host.services.API.addLog("No remote configurations found.",LOG_LEVEL_NOTICE,"remote-config");return}const selectedName=await host.services.UI.confirm.askSelectString("Select a remote to replicate with",Object.values(configs).map(c3=>c3.name));if(selectedName){const config=Object.values(configs).find(c3=>c3.name===selectedName);if(config)try{let updated=!1;await host.services.setting.updateSettings(currentSettings=>{const activated=activateRemoteConfiguration(currentSettings,config.id);if(activated){updated=!0;return activated}return currentSettings});if(updated){host.services.API.addLog(`Switched to remote: ${selectedName} and starting replication...`,LOG_LEVEL_NOTICE,"remote-config");await host.services.control.applySettings();await host.services.setting.saveSettingData();await host.services.replication.replicate(!0)}}catch(e3){host.services.API.addLog(`Failed to parse remote: ${e3}`,LOG_LEVEL_NOTICE,"remote-config")}}}function useRemoteConfigurationMigration(host){host.services.appLifecycle.onSettingLoaded.addHandler(async()=>{try{await migrateToMultipleRemoteConfigurations(host)}catch(e3){host.services.API.addLog(`Migration failed: ${e3}`,LOG_LEVEL_NOTICE,"remote-config")}return!0})}function useRemoteConfiguration(host){host.services.API.addCommand({id:"livesync-switch-remote",name:"Switch Active Remote",callback:()=>commandSwitchActiveRemote(host)});host.services.API.addCommand({id:"livesync-replicate-with-specific",name:"Replicate with specific remote",callback:()=>commandReplicateWithSpecificRemote(host)});return!0}function getSettingsFromEditingSettings(editingSettings){const workObj={...editingSettings},keys3=Object.keys(OnDialogSettingsDefault);for(const k2 of keys3)delete workObj[k2];return workObj}function createRemoteConfigurationId(){return`remote-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}function cloneRemoteConfigurations(configs){return Object.fromEntries(Object.entries(configs||{}).map(([id,config])=>[id,{...config}]))}function serializeRemoteConfiguration(settings){return settings.remoteType===REMOTE_MINIO?ConnectionStringParser.serialize({type:"s3",settings}):settings.remoteType===REMOTE_P2P?ConnectionStringParser.serialize({type:"p2p",settings}):ConnectionStringParser.serialize({type:"couchdb",settings})}function setEmojiButton(button,emoji,tooltip){button.setButtonText(emoji);button.setTooltip(tooltip,{delay:10,placement:"top"});button.buttonEl.addClass("mod-muted");return button}function suggestRemoteConfigurationName(parsed){if("couchdb"===parsed.type)try{return`CouchDB ${new URL(parsed.settings.couchDB_URI).host}`}catch(e3){return"Imported CouchDB"}return"s3"===parsed.type?`S3 ${parsed.settings.bucket||parsed.settings.endpoint}`:`P2P ${parsed.settings.P2P_roomID||"Remote"}`}function paneRemoteConfig(paneEl,{addPanel,addPane}){{const E2EESummaryWritable=writable({info:getE2EEConfigSummary({...this.editingSettings})}),updateE2EESummary=()=>{E2EESummaryWritable.set({info:getE2EEConfigSummary(this.editingSettings)})};addPanel(paneEl,"E2EE Configuration",()=>{}).then(paneEl2=>{new SveltePanel(InfoPanel,paneEl2,E2EESummaryWritable);new LiveSyncSetting(paneEl2).setName("Configure E2EE").addButton(button=>button.onClick(async()=>{const setupManager=this.core.getModule(SetupManager),originalSettings=getSettingsFromEditingSettings(this.editingSettings);await setupManager.onlyE2EEConfiguration("unknown",originalSettings);updateE2EESummary()}).setButtonText("Configure").setWarning()).addButton(button=>button.onClick(async()=>{const setupManager=this.core.getModule(SetupManager),originalSettings=getSettingsFromEditingSettings(this.editingSettings);await setupManager.onConfigureManually(originalSettings,"unknown");updateE2EESummary()}).setButtonText("Configure And Change Remote").setWarning());updateE2EESummary()})}addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleRemoteServer"),()=>{}).then(paneEl2=>{const actions=new LiveSyncSetting(paneEl2).setName("Remote Databases"),listContainer=paneEl2.createDiv({cls:"sls-remote-list"}),syncRemoteConfigurationBuffers=()=>{const currentConfigs=cloneRemoteConfigurations(this.core.settings.remoteConfigurations);this.editingSettings.remoteConfigurations=currentConfigs;this.editingSettings.activeConfigurationId=this.core.settings.activeConfigurationId;if(this.initialSettings){this.initialSettings.remoteConfigurations=cloneRemoteConfigurations(currentConfigs);this.initialSettings.activeConfigurationId=this.core.settings.activeConfigurationId}},persistRemoteConfigurations=async(synchroniseActiveRemote=!1)=>{await this.services.setting.updateSettings(currentSettings=>{currentSettings.remoteConfigurations=cloneRemoteConfigurations(this.editingSettings.remoteConfigurations);currentSettings.activeConfigurationId=this.editingSettings.activeConfigurationId;if(synchroniseActiveRemote&&currentSettings.activeConfigurationId){const activated=activateRemoteConfiguration(currentSettings,currentSettings.activeConfigurationId);if(activated)return activated}return currentSettings},!0);synchroniseActiveRemote&&await this.saveAllDirtySettings();syncRemoteConfigurationBuffers();this.requestUpdate()},runRemoteSetup=async(baseSettings,remoteType)=>{const dialogManager=this.core.getModule(SetupManager).dialogManager;let targetRemoteType=remoteType;if(void 0===targetRemoteType){const method=await dialogManager.openWithExplicitCancel(SetupRemote);if("cancelled"===method)return!1;targetRemoteType="bucket"===method?REMOTE_MINIO:"p2p"===method?REMOTE_P2P:REMOTE_COUCHDB}if(targetRemoteType===REMOTE_MINIO){const bucketConf=await dialogManager.openWithExplicitCancel(SetupRemoteBucket,baseSettings);return"cancelled"!==bucketConf&&"object"==typeof bucketConf&&{...baseSettings,...bucketConf,remoteType:REMOTE_MINIO}}if(targetRemoteType===REMOTE_P2P){const p2pConf=await dialogManager.openWithExplicitCancel(SetupRemoteP2P,baseSettings);return"cancelled"!==p2pConf&&"object"==typeof p2pConf&&{...baseSettings,...p2pConf,remoteType:REMOTE_P2P}}const couchConf=await dialogManager.openWithExplicitCancel(SetupRemoteCouchDB,baseSettings);return"cancelled"!==couchConf&&"object"==typeof couchConf&&{...baseSettings,...couchConf,remoteType:REMOTE_COUCHDB}},createBaseRemoteSettings=()=>({...DEFAULT_SETTINGS,...getSettingsFromEditingSettings(this.editingSettings)}),createNewRemoteSettings=()=>({...DEFAULT_SETTINGS,encrypt:this.editingSettings.encrypt,usePathObfuscation:this.editingSettings.usePathObfuscation,passphrase:this.editingSettings.passphrase,configPassphraseStore:this.editingSettings.configPassphraseStore}),addRemoteConfiguration=async()=>{const name=await this.services.UI.confirm.askString("Remote name","Display name","New Remote");if(!1===name)return;const nextSettings=await runRemoteSetup(createNewRemoteSettings());if(!nextSettings)return;const id=createRemoteConfigurationId(),configs=cloneRemoteConfigurations(this.editingSettings.remoteConfigurations);configs[id]={id,name:name.trim()||"New Remote",uri:serializeRemoteConfiguration(nextSettings),isEncrypted:!1};this.editingSettings.remoteConfigurations=configs;this.editingSettings.activeConfigurationId||(this.editingSettings.activeConfigurationId=id);await persistRemoteConfigurations(this.editingSettings.activeConfigurationId===id);refreshList()},importRemoteConfiguration=async()=>{const importedURI=await this.services.UI.confirm.askString("Import connection","Paste a connection string","");if(!1===importedURI)return;const trimmedURI=importedURI.trim();if(""===trimmedURI)return;let parsed;try{parsed=ConnectionStringParser.parse(trimmedURI)}catch(ex){this.services.API.addLog(`Failed to import remote configuration: ${ex}`,LOG_LEVEL_NOTICE);return}const defaultName=suggestRemoteConfigurationName(parsed),name=await this.services.UI.confirm.askString("Remote name","Display name",defaultName);if(!1===name)return;const id=createRemoteConfigurationId(),configs=cloneRemoteConfigurations(this.editingSettings.remoteConfigurations);configs[id]={id,name:name.trim()||defaultName,uri:ConnectionStringParser.serialize(parsed),isEncrypted:!1};this.editingSettings.remoteConfigurations=configs;this.editingSettings.activeConfigurationId||(this.editingSettings.activeConfigurationId=id);await persistRemoteConfigurations(this.editingSettings.activeConfigurationId===id);refreshList()};actions.addButton(button=>setEmojiButton(button,"","Add new connection").onClick(async()=>{await addRemoteConfiguration()}));actions.addButton(button=>setEmojiButton(button,"📥","Import connection").onClick(async()=>{await importRemoteConfiguration()}));const refreshList=()=>{listContainer.empty();const configs=this.editingSettings.remoteConfigurations||{};for(const config of Object.values(configs)){const row=new LiveSyncSetting(listContainer).setName(config.name).setDesc(config.uri.split("@").pop()||"");if(config.id===this.editingSettings.activeConfigurationId){row.nameEl.addClass("sls-active-remote-name");row.nameEl.appendText(" (Active)")}row.addButton(btn=>setEmojiButton(btn,"🔧","Configure").onClick(async()=>{let parsed;try{parsed=ConnectionStringParser.parse(config.uri)}catch(ex){this.services.API.addLog(`Failed to parse remote configuration '${config.id}' for editing: ${ex}`,LOG_LEVEL_NOTICE);return}const workSettings=createBaseRemoteSettings();"couchdb"===parsed.type?workSettings.remoteType=REMOTE_COUCHDB:"s3"===parsed.type?workSettings.remoteType=REMOTE_MINIO:workSettings.remoteType=REMOTE_P2P;Object.assign(workSettings,parsed.settings);const nextSettings=await runRemoteSetup(workSettings,workSettings.remoteType);if(!nextSettings)return;const nextConfigs=cloneRemoteConfigurations(this.editingSettings.remoteConfigurations);nextConfigs[config.id]={...config,uri:serializeRemoteConfiguration(nextSettings),isEncrypted:!1};this.editingSettings.remoteConfigurations=nextConfigs;await persistRemoteConfigurations(config.id===this.editingSettings.activeConfigurationId);refreshList()}));row.addButton(btn=>btn.setButtonText("✅").setTooltip("Activate",{delay:10,placement:"top"}).setDisabled(config.id===this.editingSettings.activeConfigurationId).onClick(async()=>{this.editingSettings.activeConfigurationId=config.id;await persistRemoteConfigurations(!0);refreshList()}));row.addButton(btn=>setEmojiButton(btn,"…","More actions").onClick(()=>{const menu=(new import_obsidian.Menu).addItem(item=>{item.setTitle("🪪 Rename").onClick(async()=>{const nextName=await this.services.UI.confirm.askString("Remote name","Display name",config.name);if(!1===nextName)return;const nextConfigs=cloneRemoteConfigurations(this.editingSettings.remoteConfigurations);nextConfigs[config.id]={...config,name:nextName.trim()||config.name};this.editingSettings.remoteConfigurations=nextConfigs;await persistRemoteConfigurations();refreshList()})}).addItem(item=>{item.setTitle("📤 Export").onClick(async()=>{await this.services.UI.promptCopyToClipboard(`Remote configuration: ${config.name}`,config.uri)})}).addItem(item=>{item.setTitle("🧬 Duplicate").onClick(async()=>{const nextName=await this.services.UI.confirm.askString("Duplicate remote","Display name",`${config.name} (Copy)`);if(!1===nextName)return;const nextId=createRemoteConfigurationId(),nextConfigs=cloneRemoteConfigurations(this.editingSettings.remoteConfigurations);nextConfigs[nextId]={...config,id:nextId,name:nextName.trim()||`${config.name} (Copy)`};this.editingSettings.remoteConfigurations=nextConfigs;await persistRemoteConfigurations();refreshList()})}).addSeparator().addItem(item=>{item.setTitle("📡 Fetch remote settings").onClick(async()=>{let parsed;try{parsed=ConnectionStringParser.parse(config.uri)}catch(ex){this.services.API.addLog(`Failed to parse remote configuration '${config.id}': ${ex}`,LOG_LEVEL_NOTICE);return}const workSettings=createBaseRemoteSettings();"couchdb"===parsed.type?workSettings.remoteType=REMOTE_COUCHDB:"s3"===parsed.type?workSettings.remoteType=REMOTE_MINIO:workSettings.remoteType=REMOTE_P2P;Object.assign(workSettings,parsed.settings);const newTweaks=await this.services.tweakValue.checkAndAskUseRemoteConfiguration(workSettings);if(!1!==newTweaks.result){this.editingSettings={...this.editingSettings,...newTweaks.result};this.requestUpdate()}})}).addSeparator().addItem(item=>{item.setTitle("🗑 Delete").onClick(async()=>{if("yes"!==await this.services.UI.confirm.askYesNoDialog(`Delete remote configuration '${config.name}'?`,{title:"Delete Remote Configuration",defaultOption:"No"}))return;const nextConfigs=cloneRemoteConfigurations(this.editingSettings.remoteConfigurations);delete nextConfigs[config.id];this.editingSettings.remoteConfigurations=nextConfigs;let syncActiveRemote=!1;if(this.editingSettings.activeConfigurationId===config.id){const nextActiveId=Object.keys(nextConfigs)[0]||"";this.editingSettings.activeConfigurationId=nextActiveId;syncActiveRemote=""!==nextActiveId}await persistRemoteConfigurations(syncActiveRemote);refreshList()})}),rect=btn.buttonEl.getBoundingClientRect();menu.showAtPosition({x:rect.left,y:rect.bottom})}))}};refreshList()});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleNotification"),()=>{}).then(paneEl2=>{paneEl2.addClass("wizardHidden");new LiveSyncSetting(paneEl2).autoWireNumeric("notifyThresholdOfRemoteStorageSize",{}).setClass("wizardHidden")})}function MultipleRegExpControl($$anchor,$$props){function revert2(){patterns([...originals()])}function checkRegExp(pattern){return isValidRegExp(pattern)?"✔":"⚠"}function remove(idx2){patterns(patterns()[idx2]="",!0)}function add(){patterns([...patterns(),""])}var ul,node,li_1,label_1,button_1,li_2,button_2,button_3;push($$props,!1);append_styles($$anchor,$$css12);const statusName=mutable_source(),modified=mutable_source(),isInvertedExp=mutable_source();let patterns=prop($$props,"patterns",28,()=>[]),originals=prop($$props,"originals",24,()=>[]),apply3=prop($$props,"apply",8,_=>Promise.resolve());legacy_pre_effect(()=>deep_read_state(patterns()),()=>{set(statusName,patterns().map(e3=>checkRegExp(e3)))});legacy_pre_effect(()=>(deep_read_state(patterns()),deep_read_state(originals())),()=>{set(modified,patterns().map((e3,i2)=>{var _a8;return e3!=(null!==(_a8=null===originals()||void 0===originals()?void 0:originals()[i2])&&void 0!==_a8?_a8:"")?"✏ ":""}))});legacy_pre_effect(()=>(deep_read_state(patterns()),isInvertedRegExp),()=>{set(isInvertedExp,patterns().map(e3=>isInvertedRegExp(e3)))});legacy_pre_effect_reset();init();each(node=child(ul=root32()),1,patterns,index,($$anchor2,pattern,idx2)=>{var span,text_1,input,button,li=root_126(),label2=child(li),text2=child(label2);reset(label2);span=sibling(label2,2);text_1=child(span,!0);reset(span);remove_input_defaults(input=sibling(span,2));button=sibling(input,2);reset(li);template_effect(()=>{var _a8,_b5;set_text(text2,`${null!=(_a8=(get(modified),untrack(()=>get(modified)[idx2])))?_a8:""}${null!=(_b5=(get(statusName),untrack(()=>get(statusName)[idx2])))?_b5:""}`);set_text(text_1,(get(isInvertedExp),untrack(()=>get(isInvertedExp)[idx2]?"INVERTED":"")));set_class(input,1,clsx2((get(modified),untrack(()=>get(modified)[idx2]))),"svelte-9kxeje")});bind_value(input,()=>patterns()[idx2],$$value=>(patterns()[idx2]=$$value,invalidate_inner_signals(()=>patterns())));event("click",button,()=>remove(idx2));append($$anchor2,li)});label_1=child(li_1=sibling(node,2));button_1=child(label_1);reset(label_1);reset(li_1);li_2=sibling(li_1,2);button_2=child(li_2);button_3=sibling(button_2,2);reset(li_2);reset(ul);template_effect(($0,$1)=>{button_2.disabled=$0;button_3.disabled=$1},[()=>(get(statusName),get(modified),untrack(()=>get(statusName).some(e3=>"⚠"===e3)||get(modified).every(e3=>""===e3))),()=>(get(statusName),get(modified),untrack(()=>get(statusName).some(e3=>"⚠"===e3)||get(modified).every(e3=>""===e3)))]);event("click",button_1,()=>add());event("click",button_2,()=>apply3()(patterns()));event("click",button_3,()=>revert2());append($$anchor,ul);pop()}function paneSelector(paneEl,{addPanel}){addPanel(paneEl,"Normal Files").then(paneEl2=>{paneEl2.addClass("wizardHidden");mount(MultipleRegExpControl,{target:new LiveSyncSetting(paneEl2).setName("Synchronising files").setDesc("(RegExp) Empty to sync all files. Set filter as a regular expression to limit synchronising files.").setClass("wizardHidden").controlEl,props:{patterns:splitCustomRegExpList(this.editingSettings.syncOnlyRegEx,"|[]|"),originals:splitCustomRegExpList(this.editingSettings.syncOnlyRegEx,"|[]|"),apply:async newPatterns=>{this.editingSettings.syncOnlyRegEx=constructCustomRegExpList(newPatterns,"|[]|");await this.saveAllDirtySettings();this.display()}}});mount(MultipleRegExpControl,{target:new LiveSyncSetting(paneEl2).setName("Non-Synchronising files").setDesc("(RegExp) If this is set, any changes to local and remote files that match this will be skipped.").setClass("wizardHidden").controlEl,props:{patterns:splitCustomRegExpList(this.editingSettings.syncIgnoreRegEx,"|[]|"),originals:splitCustomRegExpList(this.editingSettings.syncIgnoreRegEx,"|[]|"),apply:async newPatterns=>{this.editingSettings.syncIgnoreRegEx=constructCustomRegExpList(newPatterns,"|[]|");await this.saveAllDirtySettings();this.display()}}});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("syncMaxSizeInMB",{clampMin:0});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("useIgnoreFiles");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireTextArea("ignoreFiles",{onUpdate:visibleOnly(()=>this.isConfiguredAs("useIgnoreFiles",!0))})});addPanel(paneEl,"Hidden Files",void 0,void 0,LEVEL_ADVANCED).then(paneEl2=>{const targetPatternSetting=new LiveSyncSetting(paneEl2).setName("Target patterns").setClass("wizardHidden").setDesc("Patterns to match files for syncing"),patTarget=splitCustomRegExpList(this.editingSettings.syncInternalFilesTargetPatterns,",");mount(MultipleRegExpControl,{target:targetPatternSetting.controlEl,props:{patterns:patTarget,originals:[...patTarget],apply:async newPatterns=>{this.editingSettings.syncInternalFilesTargetPatterns=constructCustomRegExpList(newPatterns,",");await this.saveAllDirtySettings();this.display()}}});const defaultSkipPattern="\\/node_modules\\/, \\/\\.git\\/, ^\\.git\\/, \\/obsidian-livesync\\/",defaultSkipPatternXPlat=defaultSkipPattern+",\\/workspace$ ,\\/workspace.json$,\\/workspace-mobile.json$",pat=splitCustomRegExpList(this.editingSettings.syncInternalFilesIgnorePatterns,",");mount(MultipleRegExpControl,{target:new LiveSyncSetting(paneEl2).setName("Ignore patterns").setClass("wizardHidden").setDesc("").controlEl,props:{patterns:pat,originals:[...pat],apply:async newPatterns=>{this.editingSettings.syncInternalFilesIgnorePatterns=constructCustomRegExpList(newPatterns,",");await this.saveAllDirtySettings();this.display()}}});const addDefaultPatterns=async patterns=>{const oldList=splitCustomRegExpList(this.editingSettings.syncInternalFilesIgnorePatterns,","),newList=splitCustomRegExpList(patterns,","),allSet=new Set([...oldList,...newList]);this.editingSettings.syncInternalFilesIgnorePatterns=constructCustomRegExpList([...allSet],",");await this.saveAllDirtySettings();this.display()};new LiveSyncSetting(paneEl2).setName("Add default patterns").setClass("wizardHidden").addButton(button=>{button.setButtonText("Default").onClick(async()=>{await addDefaultPatterns(defaultSkipPattern)})}).addButton(button=>{button.setButtonText("Cross-platform").onClick(async()=>{await addDefaultPatterns(defaultSkipPatternXPlat)})});const overwritePatterns=new LiveSyncSetting(paneEl2).setName("Overwrite patterns").setClass("wizardHidden").setDesc("Patterns to match files for overwriting instead of merging"),patTarget2=splitCustomRegExpList(this.editingSettings.syncInternalFileOverwritePatterns,",");mount(MultipleRegExpControl,{target:overwritePatterns.controlEl,props:{patterns:patTarget2,originals:[...patTarget2],apply:async newPatterns=>{this.editingSettings.syncInternalFileOverwritePatterns=constructCustomRegExpList(newPatterns,",");await this.saveAllDirtySettings();this.display()}}})})}function paneSyncSettings(paneEl,{addPanel,addPane}){this.createEl(paneEl,"div",{text:$msg("obsidianLiveSyncSettingTab.msgSelectAndApplyPreset"),cls:"wizardOnly"}).addClasses(["op-warn-info"]);addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleSynchronizationPreset")).then(paneEl2=>{const options=this.editingSettings.remoteType==REMOTE_COUCHDB?{NONE:"",LIVESYNC:$msg("obsidianLiveSyncSettingTab.optionLiveSync"),PERIODIC:$msg("obsidianLiveSyncSettingTab.optionPeriodicWithBatch"),DISABLE:$msg("obsidianLiveSyncSettingTab.optionDisableAllAutomatic")}:{NONE:"",PERIODIC:$msg("obsidianLiveSyncSettingTab.optionPeriodicWithBatch"),DISABLE:$msg("obsidianLiveSyncSettingTab.optionDisableAllAutomatic")};new LiveSyncSetting(paneEl2).autoWireDropDown("preset",{options,holdValue:!0}).addButton(button=>{button.setButtonText($msg("obsidianLiveSyncSettingTab.btnApply"));button.onClick(async()=>{await this.saveAllDirtySettings()})});this.addOnSaved("preset",async currentPreset=>{if(""==currentPreset){Logger($msg("obsidianLiveSyncSettingTab.logSelectAnyPreset"),LOG_LEVEL_NOTICE);return}const presetAllDisabled={batchSave:!1,liveSync:!1,periodicReplication:!1,syncOnSave:!1,syncOnEditorSave:!1,syncOnStart:!1,syncOnFileOpen:!1,syncAfterMerge:!1},presetLiveSync={...presetAllDisabled,liveSync:!0},presetPeriodic={...presetAllDisabled,batchSave:!0,periodicReplication:!0,syncOnSave:!1,syncOnEditorSave:!1,syncOnStart:!0,syncOnFileOpen:!0,syncAfterMerge:!0};if("LIVESYNC"==currentPreset){this.editingSettings={...this.editingSettings,...presetLiveSync};Logger($msg("obsidianLiveSyncSettingTab.logConfiguredLiveSync"),LOG_LEVEL_NOTICE)}else if("PERIODIC"==currentPreset){this.editingSettings={...this.editingSettings,...presetPeriodic};Logger($msg("obsidianLiveSyncSettingTab.logConfiguredPeriodic"),LOG_LEVEL_NOTICE)}else{Logger($msg("obsidianLiveSyncSettingTab.logConfiguredDisabled"),LOG_LEVEL_NOTICE);this.editingSettings={...this.editingSettings,...presetAllDisabled}}if(this.inWizard){this.closeSetting();this.inWizard=!1;if(this.editingSettings.isConfigured)if(this.isNeedRebuildLocal()||this.isNeedRebuildRemote())await this.confirmRebuild();else{await this.saveAllDirtySettings();await this.services.control.applySettings();this.services.appLifecycle.askRestart()}else{this.editingSettings.isConfigured=!0;await this.saveAllDirtySettings();await this.services.control.applySettings();await this.rebuildDB("localOnly");"yes"==await this.core.confirm.askYesNoDialog($msg("obsidianLiveSyncSettingTab.msgGenerateSetupURI"),{defaultOption:"Yes",title:$msg("obsidianLiveSyncSettingTab.titleCongratulations")})&&eventHub.emitEvent(EVENT_REQUEST_COPY_SETUP_URI2)}}else{await this.saveAllDirtySettings();await this.services.control.applySettings()}})});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleSynchronizationMethod")).then(paneEl2=>{paneEl2.addClass("wizardHidden");const onlyOnNonLiveSync=visibleOnly(()=>!this.isConfiguredAs("syncMode","LIVESYNC")),onlyOnPeriodic=visibleOnly(()=>this.isConfiguredAs("syncMode","PERIODIC")),optionsSyncMode=this.editingSettings.remoteType==REMOTE_COUCHDB?{ONEVENTS:$msg("obsidianLiveSyncSettingTab.optionOnEvents"),PERIODIC:$msg("obsidianLiveSyncSettingTab.optionPeriodicAndEvents"),LIVESYNC:$msg("obsidianLiveSyncSettingTab.optionLiveSync")}:{ONEVENTS:$msg("obsidianLiveSyncSettingTab.optionOnEvents"),PERIODIC:$msg("obsidianLiveSyncSettingTab.optionPeriodicAndEvents")};new LiveSyncSetting(paneEl2).autoWireDropDown("syncMode",{options:optionsSyncMode}).setClass("wizardHidden");this.addOnSaved("syncMode",async value=>{this.editingSettings.liveSync=!1;this.editingSettings.periodicReplication=!1;"LIVESYNC"==value?this.editingSettings.liveSync=!0:"PERIODIC"==value&&(this.editingSettings.periodicReplication=!0);await this.saveSettings(["liveSync","periodicReplication"]);await this.services.control.applySettings()});new LiveSyncSetting(paneEl2).autoWireNumeric("periodicReplicationInterval",{clampMax:5e3,onUpdate:onlyOnPeriodic}).setClass("wizardHidden");new LiveSyncSetting(paneEl2).autoWireNumeric("syncMinimumInterval",{onUpdate:onlyOnNonLiveSync});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("syncOnSave",{onUpdate:onlyOnNonLiveSync});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("syncOnEditorSave",{onUpdate:onlyOnNonLiveSync});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("syncOnFileOpen",{onUpdate:onlyOnNonLiveSync});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("syncOnStart",{onUpdate:onlyOnNonLiveSync});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("syncAfterMerge",{onUpdate:onlyOnNonLiveSync})});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleUpdateThinning"),void 0,visibleOnly(()=>!this.isConfiguredAs("syncMode","LIVESYNC"))).then(paneEl2=>{paneEl2.addClass("wizardHidden");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("batchSave");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("batchSaveMinimumDelay",{acceptZero:!0,onUpdate:visibleOnly(()=>this.isConfiguredAs("batchSave",!0))});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("batchSaveMaximumDelay",{acceptZero:!0,onUpdate:visibleOnly(()=>this.isConfiguredAs("batchSave",!0))})});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleDeletionPropagation"),void 0,void 0,LEVEL_ADVANCED).then(paneEl2=>{paneEl2.addClass("wizardHidden");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("trashInsteadDelete");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("doNotDeleteFolder")});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleConflictResolution"),void 0,void 0,LEVEL_ADVANCED).then(paneEl2=>{paneEl2.addClass("wizardHidden");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("resolveConflictsByNewerFile");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("checkConflictOnlyOnOpen");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("showMergeDialogOnlyOnActive")});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown"),void 0,void 0,LEVEL_ADVANCED).then(paneEl2=>{paneEl2.addClass("wizardHidden");new LiveSyncSetting(paneEl2).autoWireText("settingSyncFile",{holdValue:!0}).addApplyButton(["settingSyncFile"]);new LiveSyncSetting(paneEl2).autoWireToggle("writeCredentialsForSettingSync");new LiveSyncSetting(paneEl2).autoWireToggle("notifyAllSettingSyncFile")});addPanel(paneEl,$msg("obsidianLiveSyncSettingTab.titleHiddenFiles"),void 0,void 0,LEVEL_ADVANCED).then(paneEl2=>{paneEl2.addClass("wizardHidden");const LABEL_ENABLED=$msg("obsidianLiveSyncSettingTab.labelEnabled"),LABEL_DISABLED=$msg("obsidianLiveSyncSettingTab.labelDisabled");new LiveSyncSetting(paneEl2).setName($msg("obsidianLiveSyncSettingTab.nameHiddenFileSynchronization")).setClass("wizardHidden").settingEl.createDiv("").innerText=this.editingSettings.syncInternalFiles?LABEL_ENABLED:LABEL_DISABLED;this.editingSettings.syncInternalFiles?new LiveSyncSetting(paneEl2).setName($msg("obsidianLiveSyncSettingTab.nameDisableHiddenFileSync")).setClass("wizardHidden").addButton(button=>{button.setButtonText($msg("obsidianLiveSyncSettingTab.btnDisable")).onClick(async()=>{this.editingSettings.syncInternalFiles=!1;await this.saveAllDirtySettings();this.display()})}):new LiveSyncSetting(paneEl2).setName($msg("obsidianLiveSyncSettingTab.nameEnableHiddenFileSync")).setClass("wizardHidden").addButton(button=>{button.setButtonText("Merge").onClick(async()=>{this.closeSetting();await this.services.setting.enableOptionalFeature("MERGE")})}).addButton(button=>{button.setButtonText("Fetch").onClick(async()=>{this.closeSetting();await this.services.setting.enableOptionalFeature("FETCH")})}).addButton(button=>{button.setButtonText("Overwrite").onClick(async()=>{this.closeSetting();await this.services.setting.enableOptionalFeature("OVERWRITE")})});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("suppressNotifyHiddenFilesChange",{});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("syncInternalFilesBeforeReplication",{onUpdate:visibleOnly(()=>this.isConfiguredAs("watchInternalFileChanges",!0))});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("syncInternalFilesInterval",{clampMin:10,acceptZero:!0})})}function paneCustomisationSync(paneEl,{addPanel}){addPanel(paneEl,"Customization Sync").then(paneEl2=>{const enableOnlyOnPluginSyncIsNotEnabled=enableOnly(()=>this.isConfiguredAs("usePluginSync",!1)),visibleOnlyOnPluginSyncEnabled=visibleOnly(()=>this.isConfiguredAs("usePluginSync",!0));this.createEl(paneEl2,"div",{text:"Please set device name to identify this device. This name should be unique among your devices. While not configured, we cannot enable this feature.",cls:"op-warn"},c3=>{},visibleOnly(()=>this.isConfiguredAs("deviceAndVaultName","")));this.createEl(paneEl2,"div",{text:"We cannot change the device name while this feature is enabled. Please disable this feature to change the device name.",cls:"op-warn-info"},c3=>{},visibleOnly(()=>this.isConfiguredAs("usePluginSync",!0)));new LiveSyncSetting(paneEl2).autoWireText("deviceAndVaultName",{placeHolder:"desktop",onUpdate:enableOnlyOnPluginSyncIsNotEnabled});new LiveSyncSetting(paneEl2).autoWireToggle("usePluginSyncV2");new LiveSyncSetting(paneEl2).autoWireToggle("usePluginSync",{onUpdate:enableOnly(()=>!this.isConfiguredAs("deviceAndVaultName",""))});new LiveSyncSetting(paneEl2).autoWireToggle("autoSweepPlugins",{onUpdate:visibleOnlyOnPluginSyncEnabled});new LiveSyncSetting(paneEl2).autoWireToggle("autoSweepPluginsPeriodic",{onUpdate:visibleOnly(()=>this.isConfiguredAs("usePluginSync",!0)&&this.isConfiguredAs("autoSweepPlugins",!0))});new LiveSyncSetting(paneEl2).autoWireToggle("notifyPluginOrSettingUpdated",{onUpdate:visibleOnlyOnPluginSyncEnabled});new LiveSyncSetting(paneEl2).setName("Open").setDesc("Open the dialog").addButton(button=>{button.setButtonText("Open").setDisabled(!1).onClick(()=>{eventHub.emitEvent(EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG2)})}).addOnUpdate(visibleOnlyOnPluginSyncEnabled)})}function paneHatch(paneEl,{addPanel}){addPanel(paneEl,$msg("Setting.TroubleShooting")).then(paneEl2=>{new LiveSyncSetting(paneEl2).setName($msg("Setting.TroubleShooting.Doctor")).setDesc($msg("Setting.TroubleShooting.Doctor.Desc")).addButton(button=>button.setButtonText($msg("Run Doctor")).setCta().setDisabled(!1).onClick(()=>{this.closeSetting();eventHub.emitEvent(EVENT_REQUEST_RUN_DOCTOR,"you wanted(Thank you)!")}));new LiveSyncSetting(paneEl2).setName($msg("Setting.TroubleShooting.ScanBrokenFiles")).setDesc($msg("Setting.TroubleShooting.ScanBrokenFiles.Desc")).addButton(button=>button.setButtonText("Scan for Broken files").setCta().setDisabled(!1).onClick(()=>{this.closeSetting();eventHub.emitEvent(EVENT_REQUEST_RUN_FIX_INCOMPLETE)}));new LiveSyncSetting(paneEl2).setName($msg("Prepare the 'report' to create an issue")).addButton(button=>button.setButtonText($msg("Copy Report to clipboard")).setCta().setDisabled(!1).onClick(async()=>{let responseConfig={};const REDACTED="𝑅𝐸𝐷𝐴𝐶𝑇𝐸𝐷";if(this.editingSettings.remoteType==REMOTE_COUCHDB)try{const credential=generateCredentialObject(this.editingSettings),customHeaders=parseHeaderValues(this.editingSettings.couchDB_CustomHeaders),r4=await requestToCouchDBWithCredentials(this.editingSettings.couchDB_URI,credential,window.origin,void 0,void 0,void 0,customHeaders);Logger(JSON.stringify(r4.json,null,2));responseConfig=r4.json;responseConfig.couch_httpd_auth.secret=REDACTED;responseConfig.couch_httpd_auth.authentication_db=REDACTED;responseConfig.couch_httpd_auth.authentication_redirect=REDACTED;responseConfig.couchdb.uuid=REDACTED;responseConfig.admins=REDACTED;delete responseConfig.jwt_keys;"secret"in responseConfig.chttpd_auth&&(responseConfig.chttpd_auth.secret=REDACTED)}catch(ex){Logger(ex,LOG_LEVEL_VERBOSE);responseConfig={error:"Requesting information from the remote CouchDB has failed. If you are using IBM Cloudant, this is normal behaviour."}}else this.editingSettings.remoteType==REMOTE_MINIO&&(responseConfig={error:"Object Storage Synchronisation"});const defaultKeys=Object.keys(DEFAULT_SETTINGS),pluginConfig=JSON.parse(JSON.stringify(this.editingSettings)),pluginKeys=Object.keys(pluginConfig);for(const key3 of pluginKeys)defaultKeys.includes(key3)||delete pluginConfig[key3];pluginConfig.couchDB_DBNAME=REDACTED;pluginConfig.couchDB_PASSWORD=REDACTED;const scheme=pluginConfig.couchDB_URI.startsWith("http:")?"(HTTP)":pluginConfig.couchDB_URI.startsWith("https:")?"(HTTPS)":"";pluginConfig.couchDB_URI=isCloudantURI(pluginConfig.couchDB_URI)?"cloudant":`self-hosted${scheme}`;pluginConfig.couchDB_USER=REDACTED;pluginConfig.passphrase=REDACTED;pluginConfig.encryptedPassphrase=REDACTED;pluginConfig.encryptedCouchDBConnection=REDACTED;pluginConfig.accessKey=REDACTED;pluginConfig.secretKey=REDACTED;const redact=source2=>`${REDACTED}(${source2.length} letters)`;pluginConfig.region=redact(pluginConfig.region);pluginConfig.bucket=redact(pluginConfig.bucket);pluginConfig.pluginSyncExtendedSetting={};pluginConfig.P2P_AppID=redact(pluginConfig.P2P_AppID);pluginConfig.P2P_passphrase=redact(pluginConfig.P2P_passphrase);pluginConfig.P2P_roomID=redact(pluginConfig.P2P_roomID);pluginConfig.P2P_relays=redact(pluginConfig.P2P_relays);pluginConfig.jwtKey=redact(pluginConfig.jwtKey);pluginConfig.jwtSub=redact(pluginConfig.jwtSub);pluginConfig.jwtKid=redact(pluginConfig.jwtKid);pluginConfig.bucketCustomHeaders=redact(pluginConfig.bucketCustomHeaders);pluginConfig.couchDB_CustomHeaders=redact(pluginConfig.couchDB_CustomHeaders);pluginConfig.P2P_turnCredential=redact(pluginConfig.P2P_turnCredential);pluginConfig.P2P_turnUsername=redact(pluginConfig.P2P_turnUsername);pluginConfig.P2P_turnServers=`(${pluginConfig.P2P_turnServers.split(",").length} servers configured)`;const endpoint=pluginConfig.endpoint;if(""==endpoint)pluginConfig.endpoint="Not configured or AWS";else{const endpointScheme=pluginConfig.endpoint.startsWith("http:")?"(HTTP)":pluginConfig.endpoint.startsWith("https:")?"(HTTPS)":"";pluginConfig.endpoint=`${-1!==endpoint.indexOf(".r2.cloudflarestorage.")?"R2":"self-hosted?"}(${endpointScheme})`}const obsidianInfo={navigator:navigator.userAgent,fileSystem:this.core.services.vault.isStorageInsensitive()?"insensitive":"sensitive"},msgConfig=`# ---- Obsidian info ----\n${(0,import_obsidian.stringifyYaml)(obsidianInfo)}\n---\n# ---- remote config ----\n${(0,import_obsidian.stringifyYaml)(responseConfig)}\n---\n# ---- Plug-in config ----\n${(0,import_obsidian.stringifyYaml)({version:this.manifestVersion,...pluginConfig})}`;console.log(msgConfig);await this.services.UI.promptCopyToClipboard("Generated report",msgConfig)}));new LiveSyncSetting(paneEl2).setName($msg("Analyse database usage")).setDesc($msg("Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.")).addButton(button=>button.setButtonText($msg("Analyse")).onClick(()=>{eventHub.emitEvent(EVENT_ANALYSE_DB_USAGE)}));new LiveSyncSetting(paneEl2).setName($msg("Reset notification threshold and check the remote database usage")).setDesc($msg("Reset the remote storage size threshold and check the remote storage size again.")).addButton(button=>button.setButtonText($msg("Check")).onClick(()=>{eventHub.emitEvent(EVENT_REQUEST_CHECK_REMOTE_SIZE)}));new LiveSyncSetting(paneEl2).autoWireToggle("writeLogToTheFile")});addPanel(paneEl,"Scram Switches").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("suspendFileWatching");this.addOnSaved("suspendFileWatching",()=>this.services.appLifecycle.askRestart());new LiveSyncSetting(paneEl2).autoWireToggle("suspendParseReplicationResult");this.addOnSaved("suspendParseReplicationResult",()=>this.services.appLifecycle.askRestart())});addPanel(paneEl,"Recovery and Repair").then(paneEl2=>{const addResult=async(path2,file,fileOnDB)=>{const storageFileStat=file?await this.core.storageAccess.statHidden(file):null;resultArea.appendChild(this.createEl(resultArea,"div",{},el=>{el.appendChild(this.createEl(el,"h6",{text:path2}));el.appendChild(this.createEl(el,"div",{},infoGroupEl=>{infoGroupEl.appendChild(this.createEl(infoGroupEl,"div",{text:"Storage : Modified: "+(storageFileStat?`${new Date(storageFileStat.mtime).toLocaleString()}, Size:${storageFileStat.size}`:"Missing:")}));infoGroupEl.appendChild(this.createEl(infoGroupEl,"div",{text:"Database: Modified: "+(fileOnDB?`${new Date(fileOnDB.mtime).toLocaleString()}, Size:${fileOnDB.size} (actual size:${readAsBlob(fileOnDB).size})`:"Missing:")}))}));fileOnDB&&file&&el.appendChild(this.createEl(el,"button",{text:"Show history"},buttonEl=>{buttonEl.onClickEvent(()=>{eventHub.emitEvent(EVENT_REQUEST_SHOW_HISTORY,{file,fileOnDB})})}));file&&el.appendChild(this.createEl(el,"button",{text:"Storage -> Database"},buttonEl=>{buttonEl.onClickEvent(async()=>{if(file.startsWith(".")){const addOn=this.core.getAddOn(HiddenFileSync.name);if(addOn){const file2=(await addOn.scanInternalFiles()).find(e3=>e3.path==path2);if(!file2){Logger(`Failed to find the file in the internal files: ${path2}`,LOG_LEVEL_NOTICE);return}if(!await addOn.storeInternalFileToDatabase(file2,!0)){Logger(`Failed to store the file to the database (Hidden file): ${file2}`,LOG_LEVEL_NOTICE);return}}}else if(!await this.core.fileHandler.storeFileToDB(file,!0)){Logger(`Failed to store the file to the database: ${file}`,LOG_LEVEL_NOTICE);return}el.remove()})}));fileOnDB&&el.appendChild(this.createEl(el,"button",{text:"Database -> Storage"},buttonEl=>{buttonEl.onClickEvent(async()=>{if(fileOnDB.path.startsWith(ICHeader)){const addOn=this.core.getAddOn(HiddenFileSync.name);if(addOn&&!await addOn.extractInternalFileFromDatabase(path2,!0)){Logger(`Failed to store the file to the database (Hidden file): ${file}`,LOG_LEVEL_NOTICE);return}}else if(!await this.core.fileHandler.dbToStorage(fileOnDB,null,!0)){Logger(`Failed to store the file to the storage: ${fileOnDB.path}`,LOG_LEVEL_NOTICE);return}el.remove()})}));return el}))},checkBetweenStorageAndDatabase=async(file,fileOnDB)=>{const dataContent=readAsBlob(fileOnDB),content=createBlob(await this.core.storageAccess.readHiddenFileBinary(file));if(await isDocContentSame(content,dataContent))Logger(`Compare: SAME: ${file}`);else{Logger(`Compare: CONTENT IS NOT MATCHED! ${file}`,LOG_LEVEL_NOTICE);addResult(file,file,fileOnDB)}};new LiveSyncSetting(paneEl2).setName("Recreate missing chunks for all files").setDesc("This will recreate chunks for all files. If there were missing chunks, this may fix the errors.").addButton(button=>button.setButtonText("Recreate all").setCta().onClick(async()=>{await this.core.fileHandler.createAllChunks(!0)}));new LiveSyncSetting(paneEl2).setName("Resolve All conflicted files by the newer one").setDesc("Resolve all conflicted files by the newer one. Caution: This will overwrite the older one, and cannot resurrect the overwritten one.").addButton(button=>button.setButtonText("Resolve All").setCta().onClick(async()=>{await this.services.conflict.resolveAllConflictedFilesByNewerOnes()}));new LiveSyncSetting(paneEl2).setName("Verify and repair all files").setDesc("Compare the content of files between on local database and storage. If not matched, you will be asked which one you want to keep.").addButton(button=>button.setButtonText("Verify all").setDisabled(!1).setCta().onClick(async()=>{Logger("Start verifying all files",LOG_LEVEL_NOTICE,"verify");const ignorePatterns=getFileRegExp(this.core.settings,"syncInternalFilesIgnorePatterns"),targetPatterns=getFileRegExp(this.core.settings,"syncInternalFilesTargetPatterns");this.core.localDatabase.clearCaches();Logger("Start verifying all files",LOG_LEVEL_NOTICE,"verify");const files=this.core.settings.syncInternalFiles?await this.core.storageAccess.getFilesIncludeHidden("/",targetPatterns,ignorePatterns):await this.core.storageAccess.getFileNames(),documents=[],adn=this.core.localDatabase.findAllDocs();for await(const i3 of adn){const path2=this.services.path.getPath(i3);path2.startsWith(ICXHeader)||path2.startsWith(PSCHeader)||!this.core.settings.syncInternalFiles&&path2.startsWith(ICHeader)||documents.push(stripAllPrefixes(path2))}const allPaths=[...new Set([...documents,...files])];let i2=0;const incProc=()=>{i2++;i2%25==0&&Logger(`Checking ${i2}/${allPaths.length} files \n`,LOG_LEVEL_NOTICE,"verify-processed")},semaphore=Semaphore(10),processes=allPaths.map(async path2=>{try{if(shouldBeIgnored(path2))return incProc();const stat=!!await this.core.storageAccess.isExistsIncludeHidden(path2)&&await this.core.storageAccess.statHidden(path2),fileOnStorage=null!=stat&&stat;if(!await this.services.vault.isTargetFile(path2))return incProc();const releaser=await semaphore.acquire(1);if(fileOnStorage&&this.services.vault.isFileSizeTooLarge(fileOnStorage.size))return incProc();try{const dbPath=path2.startsWith(".")?addPrefix(path2,ICHeader):path2,fileOnDB=await this.core.localDatabase.getDBEntry(dbPath);if(fileOnDB&&this.services.vault.isFileSizeTooLarge(fileOnDB.size))return incProc();if(!fileOnDB&&fileOnStorage){Logger(`Compare: Not found on the local database: ${path2}`,LOG_LEVEL_NOTICE);addResult(path2,path2,!1);return incProc()}if(fileOnDB&&!fileOnStorage){Logger(`Compare: Not found on the storage: ${path2}`,LOG_LEVEL_NOTICE);addResult(path2,!1,fileOnDB);return incProc()}fileOnStorage&&fileOnDB&&await checkBetweenStorageAndDatabase(path2,fileOnDB)}catch(ex){Logger(`Error while processing ${path2}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE)}finally{releaser();incProc()}}catch(ex){Logger(`Error while processing without semaphore ${path2}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE)}});await Promise.all(processes);Logger("done",LOG_LEVEL_NOTICE,"verify")}));const resultArea=paneEl2.createDiv({text:""});new LiveSyncSetting(paneEl2).setName("Check and convert non-path-obfuscated files").setDesc("").addButton(button=>button.setButtonText("Perform").setDisabled(!1).setWarning().onClick(async()=>{var _a8,_b5,_c3;for await(const docName of this.core.localDatabase.findAllDocNames())if(!docName.startsWith("f:")){const idEncoded=await this.services.path.path2id(docName),doc=await this.core.localDatabase.getRaw(docName);if(!doc)continue;if("newnote"!=doc.type&&"plain"!=doc.type)continue;if(null!=(_a8=null==doc?void 0:doc.deleted)&&_a8)continue;const newDoc={...doc};newDoc._id=idEncoded;newDoc.path=docName;delete newDoc._rev;try{const obfuscatedDoc=await this.core.localDatabase.getRaw(idEncoded,{revs_info:!0});null==(_b5=obfuscatedDoc._revs_info)||_b5.shift();const previousRev=null==(_c3=obfuscatedDoc._revs_info)?void 0:_c3.shift();newDoc._rev=previousRev?previousRev.rev:"1-"+`00000000000000000000000000000000${~~(1e9*Math.random())}${~~(1e9*Math.random())}${~~(1e9*Math.random())}${~~(1e9*Math.random())}`.slice(-32);const ret=await this.core.localDatabase.putRaw(newDoc,{force:!0});if(ret.ok){Logger(`${docName} has been converted as conflicted document`,LOG_LEVEL_NOTICE);doc._deleted=!0;(await this.core.localDatabase.putRaw(doc)).ok&&Logger(`Old ${docName} has been deleted`,LOG_LEVEL_NOTICE);await this.services.conflict.queueCheckForIfOpen(docName)}else{Logger(`Converting ${docName} Failed!`,LOG_LEVEL_NOTICE);Logger(ret,LOG_LEVEL_VERBOSE)}}catch(ex){if(404==(null==ex?void 0:ex.status)){if((await this.core.localDatabase.putRaw(newDoc)).ok){Logger(`${docName} has been converted`,LOG_LEVEL_NOTICE);doc._deleted=!0;(await this.core.localDatabase.putRaw(doc)).ok&&Logger(`Old ${docName} has been deleted`,LOG_LEVEL_NOTICE)}}else{Logger(`Something went wrong while converting ${docName}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE)}}}Logger("Converting finished",LOG_LEVEL_NOTICE)}))});addPanel(paneEl,"Reset").then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Back to non-configured").addButton(button=>button.setButtonText("Back").setDisabled(!1).onClick(async()=>{this.editingSettings.isConfigured=!1;await this.saveAllDirtySettings();this.services.appLifecycle.askRestart()}));new LiveSyncSetting(paneEl2).setName("Delete all customization sync data").addButton(button=>button.setButtonText("Delete").setDisabled(!1).setWarning().onClick(async()=>{Logger("Deleting customization sync data",LOG_LEVEL_NOTICE);const newData=(await this.core.localDatabase.allDocsRaw({startkey:"ix:",endkey:"ix:􏿿",include_docs:!0})).rows.map(e3=>({...e3.doc,_deleted:!0}));Logger(`${(await this.core.localDatabase.bulkDocsRaw(newData)).length} items have been removed, to confirm how many items are left, please perform it again.`,LOG_LEVEL_NOTICE)}))})}function paneAdvanced(paneEl,{addPanel}){addPanel(paneEl,"Memory cache").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireNumeric("hashCacheMaxCount",{clampMin:10})});addPanel(paneEl,"Local Database Tweak").then(paneEl2=>{paneEl2.addClass("wizardHidden");const items=ChunkAlgorithmNames;new LiveSyncSetting(paneEl2).autoWireDropDown("chunkSplitterVersion",{options:items});new LiveSyncSetting(paneEl2).autoWireNumeric("customChunkSize",{clampMin:0,acceptZero:!0})});addPanel(paneEl,"Transfer Tweak").then(paneEl2=>{new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("readChunksOnline",{onUpdate:this.onlyOnCouchDB});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("useOnlyLocalChunk",{onUpdate:this.onlyOnCouchDB});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("concurrencyOfReadChunksOnline",{clampMin:10,onUpdate:this.onlyOnCouchDB});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("minimumIntervalOfReadChunksOnline",{clampMin:10,onUpdate:this.onlyOnCouchDB})})}function panePowerUsers(paneEl,{addPanel}){addPanel(paneEl,"CouchDB Connection Tweak",void 0,this.onlyOnCouchDB).then(paneEl2=>{paneEl2.addClass("wizardHidden");this.createEl(paneEl2,"div",{text:"If you reached the payload size limit when using IBM Cloudant, please decrease batch size and batch limit to a lower value."},void 0,this.onlyOnCouchDB).addClass("wizardHidden");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("batch_size",{clampMin:2,onUpdate:this.onlyOnCouchDB});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("batches_limit",{clampMin:2,onUpdate:this.onlyOnCouchDB});new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("useTimeouts",{onUpdate:this.onlyOnCouchDB})});addPanel(paneEl,"Configuration Encryption").then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Encrypting sensitive configuration items").autoWireDropDown("configPassphraseStore",{options:{"":"Default",LOCALSTORAGE:"Use a custom passphrase",ASK_AT_LAUNCH:"Ask an passphrase at every launch"},holdValue:!0}).setClass("wizardHidden");new LiveSyncSetting(paneEl2).autoWireText("configPassphrase",{isPassword:!0,holdValue:!0}).setClass("wizardHidden").addOnUpdate(()=>({disabled:!this.isConfiguredAs("configPassphraseStore","LOCALSTORAGE")}));new LiveSyncSetting(paneEl2).addApplyButton(["configPassphrase","configPassphraseStore"]).setClass("wizardHidden")});addPanel(paneEl,"Developer").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("enableDebugTools").setClass("wizardHidden")})}function panePatches(paneEl,{addPanel}){addPanel(paneEl,"Compatibility (Metadata)").then(paneEl2=>{new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("deleteMetadataOfDeletedFiles");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireNumeric("automaticallyDeleteMetadataOfDeletedFiles",{onUpdate:visibleOnly(()=>this.isConfiguredAs("deleteMetadataOfDeletedFiles",!0))})});addPanel(paneEl,"Compatibility (Conflict Behaviour)").then(paneEl2=>{paneEl2.addClass("wizardHidden");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("disableMarkdownAutoMerge");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("writeDocumentsIfConflicted")});addPanel(paneEl,"Compatibility (Database structure)").then(paneEl2=>{const migrateAllToIndexedDB=async()=>{const dbToName=this.core.localDatabase.dbname+SuffixDatabaseName+ExtraSuffixIndexedDB,options={adapter:"indexeddb",purged_infos_limit:1,auto_compaction:!1,deterministic_revs:!0};if(await migrateDatabases("to IndexedDB",this.core.localDatabase.localDatabase,()=>new index_es_default(dbToName,options))){Logger("Migration to IndexedDB completed. Obsidian will be restarted with new configuration immediately.",LOG_LEVEL_NOTICE);await this.core.services.setting.applyPartial({useIndexedDBAdapter:!0},!0);this.services.appLifecycle.performRestart()}},migrateAllToIDB=async()=>{const dbToName=this.core.localDatabase.dbname+SuffixDatabaseName,options={adapter:"idb",auto_compaction:!1,deterministic_revs:!0};if(await migrateDatabases("to IDB",this.core.localDatabase.localDatabase,()=>new index_es_default(dbToName,options))){Logger("Migration to IDB completed. Obsidian will be restarted with new configuration immediately.",LOG_LEVEL_NOTICE);await this.core.services.setting.applyPartial({useIndexedDBAdapter:!1},!0);this.services.appLifecycle.performRestart()}};{const infoClass=this.editingSettings.useIndexedDBAdapter?"op-warn":"op-warn-info";paneEl2.createDiv({text:"The IndexedDB adapter often offers superior performance in certain scenarios, but it has been found to cause memory leaks when used with LiveSync mode. When using LiveSync mode, please use IDB adapter instead.",cls:infoClass});paneEl2.createDiv({text:"Changing this setting requires migrating existing data (a bit time may be taken) and restarting Obsidian. Please make sure to back up your data before proceeding.",cls:"op-warn-info"});const setting=new LiveSyncSetting(paneEl2).setName("Database Adapter").setDesc("Select the database adapter to use. ");setting.controlEl.createDiv({}).setText("Current adapter: "+(this.editingSettings.useIndexedDBAdapter?"IndexedDB":"IDB"));this.editingSettings.useIndexedDBAdapter?setting.addButton(button=>{button.setButtonText("Switch to IDB").onClick(async()=>{Logger("Migrating all data to IDB...",LOG_LEVEL_NOTICE);await migrateAllToIDB();Logger("Migration to IDB completed. Please switch the adapter and restart Obsidian.",LOG_LEVEL_NOTICE)})}):setting.addButton(button=>{button.setButtonText("Switch to IndexedDB").onClick(async()=>{Logger("Migrating all data to IndexedDB...",LOG_LEVEL_NOTICE);await migrateAllToIndexedDB();Logger("Migration to IndexedDB completed. Please switch the adapter and restart Obsidian.",LOG_LEVEL_NOTICE)})})}new LiveSyncSetting(paneEl2).autoWireToggle("handleFilenameCaseSensitive",{holdValue:!0}).setClass("wizardHidden")});addPanel(paneEl,"Compatibility (Internal API Usage)").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("watchInternalFileChanges",{invert:!0})});addPanel(paneEl,"Compatibility (Remote Database)").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireDropDown("E2EEAlgorithm",{options:E2EEAlgorithmNames})});new LiveSyncSetting(paneEl).autoWireToggle("useDynamicIterationCount",{holdValue:!0,onUpdate:visibleOnly(()=>this.isConfiguredAs("E2EEAlgorithm",E2EEAlgorithms.ForceV1)||this.isConfiguredAs("E2EEAlgorithm",E2EEAlgorithms.V1))});addPanel(paneEl,"Edge case addressing (Database)").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireText("additionalSuffixOfDatabaseName",{holdValue:!0}).addApplyButton(["additionalSuffixOfDatabaseName"]);this.addOnSaved("additionalSuffixOfDatabaseName",async key3=>{Logger("Suffix has been changed. Reopening database...",LOG_LEVEL_NOTICE);await this.services.databaseEvents.initialiseDatabase()});new LiveSyncSetting(paneEl2).autoWireDropDown("hashAlg",{options:{"":"Old Algorithm",xxhash32:"xxhash32 (Fast but less collision resistance)",xxhash64:"xxhash64 (Fastest)","mixed-purejs":"PureJS fallback (Fast, W/O WebAssembly)",sha1:"Older fallback (Slow, W/O WebAssembly)"}});this.addOnSaved("hashAlg",async()=>{await this.core.localDatabase._prepareHashFunctions()})});addPanel(paneEl,"Edge case addressing (Behaviour)").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("doNotSuspendOnFetching");new LiveSyncSetting(paneEl2).setClass("wizardHidden").autoWireToggle("doNotDeleteFolder");new LiveSyncSetting(paneEl2).autoWireToggle("processSizeMismatchedFiles")});addPanel(paneEl,"Edge case addressing (Processing)").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("disableWorkerForGeneratingChunks");new LiveSyncSetting(paneEl2).autoWireToggle("processSmallFilesInUIThread",{onUpdate:visibleOnly(()=>this.isConfiguredAs("disableWorkerForGeneratingChunks",!1))})});addPanel(paneEl,"Compatibility (Trouble addressed)").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("disableCheckingConfigMismatch")});addPanel(paneEl,"Remediation").then(paneEl2=>{let dateEl;new LiveSyncSetting(paneEl2).addText(text2=>{const updateDateText=()=>{if(0==this.editingSettings.maxMTimeForReflectEvents)dateEl.textContent="No limit configured";else{const date2=new Date(this.editingSettings.maxMTimeForReflectEvents);dateEl.textContent=`Limit: ${date2.toLocaleString()} (${this.editingSettings.maxMTimeForReflectEvents})`}this.requestUpdate()};text2.inputEl.before(dateEl=document.createElement("span"));text2.inputEl.type="datetime-local";if(this.editingSettings.maxMTimeForReflectEvents>0){const isoString=new Date(this.editingSettings.maxMTimeForReflectEvents).toISOString().slice(0,16);text2.setValue(isoString)}else text2.setValue("");text2.onChange(value=>{if(""==value){this.editingSettings.maxMTimeForReflectEvents=0;updateDateText();return}const date2=new Date(value);isNaN(date2.getTime())||(this.editingSettings.maxMTimeForReflectEvents=date2.getTime());updateDateText()});updateDateText();return text2}).setAuto("maxMTimeForReflectEvents").addApplyButton(["maxMTimeForReflectEvents"]);this.addOnSaved("maxMTimeForReflectEvents",async key3=>{if("Later"!==await this.core.confirm.askSelectStringDialogue("Restarting Obsidian is strongly recommended. Until restart, some changes may not take effect, and display may be inconsistent. Are you sure to restart now?",["Restart Now","Later"],{title:"Remediation Setting Changed",defaultAction:"Restart Now"})){Logger("Remediation setting changed. Restarting Obsidian...",LOG_LEVEL_NOTICE);this.services.appLifecycle.performRestart()}})});addPanel(paneEl,"Remote Database Tweak (In sunset)").then(paneEl2=>{new LiveSyncSetting(paneEl2).autoWireToggle("enableCompression").setClass("wizardHidden")})}function paneMaintenance(paneEl,{addPanel}){this.createEl(paneEl,"div",{text:"The remote database is locked for synchronization to prevent vault corruption because this device isn't marked as 'resolved'. Please backup your vault, reset the local database, and select 'Mark this device as resolved'. This warning will persist until the device is confirmed as resolved by replication.",cls:"op-warn"},c3=>{this.createEl(c3,"button",{text:"I've made a backup, mark this device 'resolved'",cls:"mod-warning"},e3=>{e3.addEventListener("click",()=>{fireAndForget(async()=>{await this.services.replication.markResolved();this.display()})})})},visibleOnly(()=>{var _a8,_b5;return null==(_b5=null==(_a8=this.core)?void 0:_a8.replicator)?void 0:_b5.remoteLockedAndDeviceNotAccepted}));this.createEl(paneEl,"div",{text:"To prevent unwanted vault corruption, the remote database has been locked for synchronization. (This device is marked 'resolved') When all your devices are marked 'resolved', unlock the database. This warning kept showing until confirming the device is resolved by the replication",cls:"op-warn"},c3=>this.createEl(c3,"button",{text:"I'm ready, unlock the database",cls:"mod-warning"},e3=>{e3.addEventListener("click",()=>{fireAndForget(async()=>{await this.services.replication.markUnlocked();this.display()})})}),visibleOnly(()=>{var _a8,_b5;return null==(_b5=null==(_a8=this.core)?void 0:_a8.replicator)?void 0:_b5.remoteLocked}));addPanel(paneEl,"Scram!").then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Lock Server").setDesc("Lock the remote server to prevent synchronization with other devices.").addButton(button=>button.setButtonText("Lock").setDisabled(!1).setWarning().onClick(async()=>{await this.services.replication.markLocked()})).addOnUpdate(this.onlyOnCouchDBOrMinIO);new LiveSyncSetting(paneEl2).setName("Emergency restart").setDesc("Disables all synchronization and restart.").addButton(button=>button.setButtonText("Flag and restart").setDisabled(!1).setWarning().onClick(async()=>{await this.core.storageAccess.writeFileAuto(FLAGMD_REDFLAG,"");this.services.appLifecycle.performRestart()}))});addPanel(paneEl,"Reset Synchronisation information").then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Reset Synchronisation on This Device").setDesc("Restore or reconstruct local database from remote.").addButton(button=>button.setButtonText("Schedule and Restart").setCta().setDisabled(!1).onClick(async()=>{await this.core.storageAccess.writeFileAuto(FlagFilesHumanReadable_FETCH_ALL,"");this.services.appLifecycle.performRestart()}));new LiveSyncSetting(paneEl2).setName("Overwrite Server Data with This Device's Files").setDesc("Rebuild local and remote database with local files.").addButton(button=>button.setButtonText("Schedule and Restart").setCta().setDisabled(!1).onClick(async()=>{await this.core.storageAccess.writeFileAuto(FlagFilesHumanReadable_REBUILD_ALL,"");this.services.appLifecycle.performRestart()}))});addPanel(paneEl,"Syncing",()=>{},this.onlyOnCouchDBOrMinIO).then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Resend").setDesc("Resend all chunks to the remote.").addButton(button=>button.setButtonText("Send chunks").setWarning().setDisabled(!1).onClick(async()=>{this.core.replicator instanceof LiveSyncCouchDBReplicator&&await this.core.replicator.sendChunks(this.core.settings,void 0,!0,0)})).addOnUpdate(this.onlyOnCouchDB);new LiveSyncSetting(paneEl2).setName("Reset journal received history").setDesc("Initialise journal received history. On the next sync, every item except this device sent will be downloaded again.").addButton(button=>button.setButtonText("Reset received").setWarning().setDisabled(!1).onClick(async()=>{await this.getMinioJournalSyncClient().updateCheckPointInfo(info3=>({...info3,receivedFiles:new Set,knownIDs:new Set}));Logger("Journal received history has been cleared.",LOG_LEVEL_NOTICE)})).addOnUpdate(this.onlyOnMinIO);new LiveSyncSetting(paneEl2).setName("Reset journal sent history").setDesc("Initialise journal sent history. On the next sync, every item except this device received will be sent again.").addButton(button=>button.setButtonText("Reset sent history").setWarning().setDisabled(!1).onClick(async()=>{await this.getMinioJournalSyncClient().updateCheckPointInfo(info3=>({...info3,lastLocalSeq:0,sentIDs:new Set,sentFiles:new Set}));Logger("Journal sent history has been cleared.",LOG_LEVEL_NOTICE)})).addOnUpdate(this.onlyOnMinIO)});addPanel(paneEl,"Garbage Collection V3 (Beta)",e3=>e3,this.onlyOnP2POrCouchDB).then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Perform Garbage Collection").setDesc("Perform Garbage Collection to remove unused chunks and reduce database size.").addButton(button=>button.setButtonText("Perform Garbage Collection").setDisabled(!1).onClick(()=>{this.closeSetting();eventHub.emitEvent(EVENT_REQUEST_PERFORM_GC_V3)}))});addPanel(paneEl,"Rebuilding Operations (Remote Only)",()=>{},this.onlyOnCouchDBOrMinIO).then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Perform cleanup").setDesc("Reduces storage space by discarding all non-latest revisions. This requires the same amount of free space on the remote server and the local client.").addButton(button=>button.setButtonText("Perform").setDisabled(!1).onClick(async()=>{const replicator=this.core.replicator;Logger("Cleanup has been began",LOG_LEVEL_NOTICE,"compaction");await replicator.compactRemote(this.editingSettings)?Logger("Cleanup has been completed!",LOG_LEVEL_NOTICE,"compaction"):Logger("Cleanup has been failed!",LOG_LEVEL_NOTICE,"compaction")})).addOnUpdate(this.onlyOnCouchDB);new LiveSyncSetting(paneEl2).setName("Overwrite remote").setDesc("Overwrite remote with local DB and passphrase.").addButton(button=>button.setButtonText("Send").setWarning().setDisabled(!1).onClick(async()=>{await this.rebuildDB("remoteOnly")}));new LiveSyncSetting(paneEl2).setName("Reset all journal counter").setDesc("Initialise all journal history, On the next sync, every item will be received and sent.").addButton(button=>button.setButtonText("Reset all").setWarning().setDisabled(!1).onClick(async()=>{await this.getMinioJournalSyncClient().resetCheckpointInfo();Logger("Journal exchange history has been cleared.",LOG_LEVEL_NOTICE)})).addOnUpdate(this.onlyOnMinIO);new LiveSyncSetting(paneEl2).setName("Purge all journal counter").setDesc("Purge all download/upload cache.").addButton(button=>button.setButtonText("Reset all").setWarning().setDisabled(!1).onClick(async()=>{await this.getMinioJournalSyncClient().resetAllCaches();Logger("Journal download/upload cache has been cleared.",LOG_LEVEL_NOTICE)})).addOnUpdate(this.onlyOnMinIO);new LiveSyncSetting(paneEl2).setName("Fresh Start Wipe").setDesc("Delete all data on the remote server.").addButton(button=>button.setButtonText("Delete").setWarning().setDisabled(!1).onClick(async()=>{await this.getMinioJournalSyncClient().updateCheckPointInfo(info3=>({...info3,receivedFiles:new Set,knownIDs:new Set,lastLocalSeq:0,sentIDs:new Set,sentFiles:new Set}));await this.resetRemoteBucket();Logger("Deleted all data on remote server",LOG_LEVEL_NOTICE)})).addOnUpdate(this.onlyOnMinIO)});addPanel(paneEl,"Reset").then(paneEl2=>{new LiveSyncSetting(paneEl2).setName("Delete local database to reset or uninstall Self-hosted LiveSync").addButton(button=>button.setButtonText("Delete").setWarning().setDisabled(!1).onClick(async()=>{await this.services.database.resetDatabase();await this.services.databaseEvents.initialiseDatabase()}))})}function createStub(name,key3,value,panel,pane){var _a8;{pane in stubs||(stubs[pane]={});panel in stubs[pane]||(stubs[pane][panel]=new Map);const old=null!=(_a8=stubs[pane][panel].get(name))?_a8:{};stubs[pane][panel].set(name,{...old,[key3]:value});scheduleTask("update-stub",100,()=>{eventHub.emitEvent("document-stub-created",{toc,stub:stubs})})}}function isImage(path2){const ext2=path2.split(".").splice(-1)[0].toLowerCase();return["png","jpg","jpeg","gif","bmp","webp"].includes(ext2)}function isComparableText(path2){const ext2=path2.split(".").splice(-1)[0].toLowerCase();return isPlainText(path2)||["md","mdx","txt","json"].includes(ext2)}function isComparableTextDecode(path2){const ext2=path2.split(".").splice(-1)[0].toLowerCase();return["json"].includes(ext2)}function readDocument(w2){if(0==w2.data.length)return"";if(isImage(w2.path))return new Uint8Array(decodeBinary(w2.data));if("plain"==w2.type||"plain"==w2.datatype)return getDocData(w2.data);if(isComparableTextDecode(w2.path))return readString(new Uint8Array(decodeBinary(w2.data)));if(isComparableText(w2.path))return getDocData(w2.data);try{return readString(new Uint8Array(decodeBinary(w2.data)))}catch(ex){Logger(ex,LOG_LEVEL_VERBOSE)}return getDocData(w2.data)}function GlobalHistory($$anchor,$$props){function mtimeToDate(mtime){return new Date(mtime).toLocaleString()}function getPath2(entry){return core().services.path.getPath(entry)}async function fetchChanges(){var _a8,_b5,_c3;try{const db=core().localDatabase;let result=[];for await(const docA of db.findAllNormalDocs()){if(docA.mtime<get(range_from_epoch))continue;if(!isAnyNote(docA))continue;const path2=getPath2(docA),isPlain=isPlainText(docA.path);let p2;const reversedRevs=(null!==(_a8=(await db.getRaw(docA._id,{revs_info:!0}))._revs_info)&&void 0!==_a8?_a8:[]).reverse(),DIFF_DELETE4=-1,DIFF_EQUAL4=0,DIFF_INSERT4=1;for(const revInfo of reversedRevs)if("available"==revInfo.status){const doc=!isPlain&&get(showDiffInfo)||get(checkStorageDiff)&&revInfo.rev==docA._rev?await db.getDBEntry(path2,{rev:revInfo.rev},!1,!1,!0):await db.getDBEntryMeta(path2,{rev:revInfo.rev},!0);if(!1===doc)continue;const rev3=revInfo.rev,mtime="mtime"in doc?doc.mtime:0;if(get(range_from_epoch)>mtime)continue;if(get(range_to_epoch)<mtime)continue;let diffDetail="";if(get(showDiffInfo)&&!isPlain){const data=getDocData(doc.data);void 0===p2&&(p2=data);if(p2!=data){const dmp=new import_diff_match_patch.diff_match_patch,diff=dmp.diff_main(p2,data);dmp.diff_cleanupSemantic(diff);p2=data;const pxInit={[DIFF_DELETE4]:0,[DIFF_EQUAL4]:0,[DIFF_INSERT4]:0},px=diff.reduce((p3,c3)=>{var _a9;return{...p3,[c3[0]]:(null!==(_a9=p3[c3[0]])&&void 0!==_a9?_a9:0)+c3[1].length}},pxInit);diffDetail=`-${px[DIFF_DELETE4]}, +${px[DIFF_INSERT4]}`}}const isDeleted2=doc._deleted||(null==doc?void 0:doc.deleted)||!1;isDeleted2&&(diffDetail+=" 🗑️");if(rev3==docA._rev&&get(checkStorageDiff)&&await core().storageAccess.isExistsIncludeHidden(stripAllPrefixes(getPath2(docA)))){const data=await core().storageAccess.readHiddenFileBinary(stripAllPrefixes(getPath2(docA))),d4=readAsBlob(doc);diffDetail+=await isDocContentSame(data,d4)?" ⚖️":" ⚠️"}const docPath=getPath2(doc),[filename,...pathItems]=docPath.split("/").reverse();let chunksStatus="";if(get(showChunkCorrected)){const chunks=null!==(_b5=null==doc?void 0:doc.children)&&void 0!==_b5?_b5:[],loadedChunks=await db.allDocsRaw({keys:[...chunks]}),totalCount=loadedChunks.rows.length,errorCount=loadedChunks.rows.filter(e3=>"error"in e3).length;chunksStatus=0==errorCount?`✅ ${totalCount}`:`🔎 ${errorCount} ✅ ${totalCount}`}result.push({id:doc._id,rev:doc._rev,path:docPath,dirname:pathItems.reverse().join("/"),filename,mtime,mtimeDisp:mtimeToDate(mtime),size:null!==(_c3=null==doc?void 0:doc.size)&&void 0!==_c3?_c3:0,isDeleted:isDeleted2,changes:diffDetail,chunks:chunksStatus,isPlain})}}return[...result].sort((a2,b3)=>b3.mtime-a2.mtime)}finally{set(loading,!1)}}async function getHistory(showDiffInfo2,showChunkCorrected2,checkStorageDiff2){set(loading,!0);const newDisplay=[],page=await fetchChanges();newDisplay.push(...page);set(history,[...newDisplay])}function nextWeek(){set(dispDateTo,new Date(get(range_to_epoch)-timezoneOffset+6048e5).toISOString().split("T")[0])}function prevWeek(){set(dispDateFrom,new Date(get(range_from_epoch)-timezoneOffset-6048e5).toISOString().split("T")[0])}function showHistory(file,rev3){new DocumentHistoryModal(plugin3().app,plugin3().core,plugin3(),file,void 0,rev3).open()}function openFile(file){plugin3().app.workspace.openLinkText(file,file)}var div,div_1,div_2,input,div_3,input_1,div_4,label2,input_2,label_1,input_3,label_2,input_4,node,consequent,table2,tbody,tr,node_1,consequent_1,tr_1,td3,node_2,consequent_2,alternate,node_3,tr_3,td_6,node_7,consequent_6,alternate_3;push($$props,!1);append_styles($$anchor,$$css13);let plugin3=prop($$props,"plugin",8),core=prop($$props,"core",8),showDiffInfo=mutable_source(!1),showChunkCorrected=mutable_source(!1),checkStorageDiff=mutable_source(!1),range_from_epoch=mutable_source(Date.now()-6048e5),range_to_epoch=mutable_source(Date.now()+1728e5);const timezoneOffset=(new Date).getTimezoneOffset();let dispDateFrom=mutable_source(new Date(get(range_from_epoch)-timezoneOffset).toISOString().split("T")[0]),dispDateTo=mutable_source(new Date(get(range_to_epoch)-timezoneOffset).toISOString().split("T")[0]),history=mutable_source([]),loading=mutable_source(!1);onMount(async()=>{await getHistory(get(showDiffInfo),get(showChunkCorrected),get(checkStorageDiff))});onDestroy(()=>{});legacy_pre_effect(()=>(get(dispDateFrom),get(dispDateTo),get(showDiffInfo),get(showChunkCorrected),get(checkStorageDiff)),()=>{set(range_from_epoch,new Date(get(dispDateFrom)).getTime()+timezoneOffset);set(range_to_epoch,new Date(get(dispDateTo)).getTime()+timezoneOffset);getHistory(get(showDiffInfo),get(showChunkCorrected),get(checkStorageDiff))});legacy_pre_effect_reset();init();div_1=sibling(child(div=root33()),2);div_2=child(div_1);remove_input_defaults(input=sibling(child(div_2)));reset(div_2);div_3=sibling(div_2,2);remove_input_defaults(input_1=sibling(child(div_3)));reset(div_3);div_4=sibling(div_3,2);label2=sibling(child(div_4),2);remove_input_defaults(input_2=child(label2));next();reset(label2);label_1=sibling(label2,2);remove_input_defaults(input_3=child(label_1));next();reset(label_1);label_2=sibling(label_1,2);remove_input_defaults(input_4=child(label_2));next();reset(label_2);reset(div_4);reset(div_1);node=sibling(div_1,2);consequent=$$anchor2=>{append($$anchor2,root_127())};if_block(node,$$render=>{get(loading)&&$$render(consequent)});tbody=child(table2=sibling(node,2));tr=child(tbody);node_1=sibling(child(tr),4);consequent_1=$$anchor2=>{append($$anchor2,root_217())};if_block(node_1,$$render=>{get(showChunkCorrected)&&$$render(consequent_1)});reset(tr);td3=child(tr_1=sibling(tr));node_2=child(td3);consequent_2=$$anchor2=>{append($$anchor2,root_36())};alternate=$$anchor2=>{var div_7=root_412(),button=child(div_7);reset(div_7);event("click",button,()=>nextWeek());append($$anchor2,div_7)};if_block(node_2,$$render=>{get(loading)?$$render(consequent_2):$$render(alternate,!1)});reset(td3);reset(tr_1);each(node_3=sibling(tr_1),1,()=>get(history),index,($$anchor2,entry)=>{var td_2,div_8,span,text_1,node_4,consequent_3,alternate_1,td_3,span_3,node_5,consequent_4,alternate_2,td_4,text_6,node_6,consequent_5,tr_2=root_54(),td_1=child(tr_2),text2=child(td_1,!0);reset(td_1);div_8=child(td_2=sibling(td_1));span=child(div_8);text_1=child(span);reset(span);node_4=sibling(span,2);consequent_3=$$anchor3=>{var span_1=root_67(),text_2=child(span_1,!0);reset(span_1);template_effect(()=>set_text(text_2,(get(entry),untrack(()=>get(entry).filename))));append($$anchor3,span_1)};alternate_1=$$anchor3=>{var span_2=root_79(),a_1=child(span_2),text_3=child(a_1,!0);reset(a_1);reset(span_2);template_effect(()=>set_text(text_3,(get(entry),untrack(()=>get(entry).filename))));event("click",a_1,()=>openFile(get(entry).path));append($$anchor3,span_2)};if_block(node_4,$$render=>{get(entry),untrack(()=>get(entry).isDeleted)?$$render(consequent_3):$$render(alternate_1,!1)});reset(div_8);reset(td_2);span_3=child(td_3=sibling(td_2));node_5=child(span_3);consequent_4=$$anchor3=>{var a_2=root_89(),text_4=child(a_2,!0);reset(a_2);template_effect(()=>set_text(text_4,(get(entry),untrack(()=>get(entry).rev))));event("click",a_2,()=>{var _a8;return showHistory(get(entry).path,(null==(_a8=get(entry))?void 0:_a8.rev)||"")});append($$anchor3,a_2)};alternate_2=$$anchor3=>{var text_5=text();template_effect(()=>set_text(text_5,(get(entry),untrack(()=>get(entry).rev))));append($$anchor3,text_5)};if_block(node_5,$$render=>{get(entry),untrack(()=>get(entry).isPlain)?$$render(consequent_4):$$render(alternate_2,!1)});reset(span_3);reset(td_3);td_4=sibling(td_3);text_6=child(td_4,!0);reset(td_4);node_6=sibling(td_4);consequent_5=$$anchor3=>{var td_5=root_104(),text_7=child(td_5,!0);reset(td_5);template_effect(()=>set_text(text_7,(get(entry),untrack(()=>get(entry).chunks))));append($$anchor3,td_5)};if_block(node_6,$$render=>{get(showChunkCorrected)&&$$render(consequent_5)});reset(tr_2);template_effect($0=>{set_text(text2,(get(entry),untrack(()=>get(entry).mtimeDisp)));set_text(text_1,`/${null!=$0?$0:""}`);set_text(text_6,(get(entry),untrack(()=>get(entry).changes)))},[()=>(get(entry),untrack(()=>get(entry).dirname.split("/").join("/")))]);append($$anchor2,tr_2)});td_6=child(tr_3=sibling(node_3));node_7=child(td_6);consequent_6=$$anchor2=>{append($$anchor2,root_1112())};alternate_3=$$anchor2=>{var div_10=root_128(),button_1=child(div_10);reset(div_10);event("click",button_1,()=>prevWeek());append($$anchor2,div_10)};if_block(node_7,$$render=>{get(loading)?$$render(consequent_6):$$render(alternate_3,!1)});reset(td_6);reset(tr_3);reset(tbody);reset(table2);reset(div);template_effect(()=>{input.disabled=get(loading);input_1.disabled=get(loading);input_2.disabled=get(loading);input_3.disabled=get(loading);input_4.disabled=get(loading)});bind_value(input,()=>get(dispDateFrom),$$value=>set(dispDateFrom,$$value));bind_value(input_1,()=>get(dispDateTo),$$value=>set(dispDateTo,$$value));bind_checked(input_2,()=>get(showDiffInfo),$$value=>set(showDiffInfo,$$value));bind_checked(input_3,()=>get(showChunkCorrected),$$value=>set(showChunkCorrected,$$value));bind_checked(input_4,()=>get(checkStorageDiff),$$value=>set(checkStorageDiff,$$value));append($$anchor,div);pop()}function getMultipleBound(handler){const __handler=("invoke"in handler?handler.invoke:handler.dispatch).bind(handler),func=(...args)=>__handler(...args);func.addHandler=handler.addHandler.bind(handler);func.removeHandler=handler.removeHandler.bind(handler);func.use=handler;return func}function allFunction(name){return getMultipleBound(new AllHandler(null!=name?name:"handleAllFunc"))}function bailFirstFailureFunction(name){return getMultipleBound(new AllHandler(null!=name?name:"bailFirstFailureFunction"))}function allParallelFunction(name){return getMultipleBound(new ParallelAllHandler(null!=name?name:"allParallelFunction"))}function anySuccessFunction(name){return getMultipleBound(new AnySuccessHandler(null!=name?name:"anySuccessFunction"))}function firstResultFunction(name){return getMultipleBound(new FirstResultHandler(null!=name?name:"firstResultFunction"))}function dispatchParallelFunction(name){return getMultipleBound(new DispatchParallel(null!=name?name:"dispatchParallelFunction"))}function bindableFunction(name){const handler=new Binder(null!=name?name:"bindableFunction"),func=(...args)=>handler.invoke(...args);func.setHandler=handler.assign.bind(handler);return func}function lazyBindableFunction(name){const handler=new LazyBinder(null!=name?name:"lazyBindableFunction"),func=async(...args)=>await handler.invoke(...args);func.setHandler=handler.assign.bind(handler);return func}function handlers2(){return{all:name=>allFunction(String(name)),allParallel:name=>allParallelFunction(String(name)),bailFirstFailure:name=>bailFirstFailureFunction(String(name)),anySuccess:name=>anySuccessFunction(String(name)),firstResult:name=>firstResultFunction(String(name)),dispatchParallel:name=>dispatchParallelFunction(String(name)),binder:name=>bindableFunction(String(name)),lazyBinder:name=>lazyBindableFunction(String(name))}}function getIdbProxyableTypes(){return idbProxyableTypes||(idbProxyableTypes=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function getCursorAdvanceMethods(){return cursorAdvanceMethods||(cursorAdvanceMethods=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}function promisifyRequest(request2){const promise=new Promise((resolve,reject)=>{const unlisten=()=>{request2.removeEventListener("success",success);request2.removeEventListener("error",error)},success=()=>{resolve(wrap(request2.result));unlisten()},error=()=>{reject(request2.error);unlisten()};request2.addEventListener("success",success);request2.addEventListener("error",error)});reverseTransformCache.set(promise,request2);return promise}function cacheDonePromiseForTransaction(tx){if(transactionDoneMap.has(tx))return;const done=new Promise((resolve,reject)=>{const unlisten=()=>{tx.removeEventListener("complete",complete);tx.removeEventListener("error",error);tx.removeEventListener("abort",error)},complete=()=>{resolve();unlisten()},error=()=>{reject(tx.error||new DOMException("AbortError","AbortError"));unlisten()};tx.addEventListener("complete",complete);tx.addEventListener("error",error);tx.addEventListener("abort",error)});transactionDoneMap.set(tx,done)}function replaceTraps(callback){idbProxyTraps=callback(idbProxyTraps)}function wrapFunction(func){return getCursorAdvanceMethods().includes(func)?function(...args){func.apply(unwrap(this),args);return wrap(this.request)}:function(...args){return wrap(func.apply(unwrap(this),args))}}function transformCachableValue(value){if("function"==typeof value)return wrapFunction(value);value instanceof IDBTransaction&&cacheDonePromiseForTransaction(value);return instanceOfAny(value,getIdbProxyableTypes())?new Proxy(value,idbProxyTraps):value}function wrap(value){if(value instanceof IDBRequest)return promisifyRequest(value);if(transformCache.has(value))return transformCache.get(value);const newValue=transformCachableValue(value);if(newValue!==value){transformCache.set(value,newValue);reverseTransformCache.set(newValue,value)}return newValue}function openDB(name,version2,{blocked,upgrade,blocking,terminated}={}){const request2=indexedDB.open(name,version2),openPromise=wrap(request2);upgrade&&request2.addEventListener("upgradeneeded",event2=>{upgrade(wrap(request2.result),event2.oldVersion,event2.newVersion,wrap(request2.transaction),event2)});blocked&&request2.addEventListener("blocked",event2=>blocked(event2.oldVersion,event2.newVersion,event2));openPromise.then(db=>{terminated&&db.addEventListener("close",()=>terminated());blocking&&db.addEventListener("versionchange",event2=>blocking(event2.oldVersion,event2.newVersion,event2))}).catch(()=>{});return openPromise}function deleteDB(name,{blocked}={}){const request2=indexedDB.deleteDatabase(name);blocked&&request2.addEventListener("blocked",event2=>blocked(event2.oldVersion,event2));return wrap(request2).then(()=>{})}function getMethod(target,prop2){if(!(target instanceof IDBDatabase)||prop2 in target||"string"!=typeof prop2)return;if(cachedMethods.get(prop2))return cachedMethods.get(prop2);const targetFuncName=prop2.replace(/FromIndex$/,""),useIndex=prop2!==targetFuncName,isWrite=writeMethods.includes(targetFuncName);if(!(targetFuncName in(useIndex?IDBIndex:IDBObjectStore).prototype)||!isWrite&&!readMethods.includes(targetFuncName))return;const method=async function(storeName,...args){const tx=this.transaction(storeName,isWrite?"readwrite":"readonly");let target2=tx.store;useIndex&&(target2=target2.index(args.shift()));return(await Promise.all([target2[targetFuncName](...args),isWrite&&tx.done]))[0]};cachedMethods.set(prop2,method);return method}async function*iterate(...args){let cursor=this;cursor instanceof IDBCursor||(cursor=await cursor.openCursor(...args));if(!cursor)return;const proxiedCursor=new Proxy(cursor,cursorIteratorTraps);ittrProxiedCursorToOriginalProxy.set(proxiedCursor,cursor);reverseTransformCache.set(proxiedCursor,unwrap(cursor));for(;cursor;){yield proxiedCursor;cursor=await(advanceResults.get(proxiedCursor)||cursor.continue());advanceResults.delete(proxiedCursor)}}function isIteratorProp(target,prop2){return prop2===Symbol.asyncIterator&&instanceOfAny(target,[IDBIndex,IDBObjectStore,IDBCursor])||"iterate"===prop2&&instanceOfAny(target,[IDBIndex,IDBObjectStore])}async function OpenKeyValueDatabase(dbKey){return await serialized(`OpenKeyValueDatabase-${dbKey}`,async()=>{const cachedDB=databaseCache.get(dbKey);if(cachedDB){if(!cachedDB.isDestroyed)return cachedDB;await cachedDB.ensuredDestroyed;databaseCache.delete(dbKey)}const newDB=new IDBKeyValueDatabase(dbKey);try{await newDB.getIsReady();databaseCache.set(dbKey,newDB);return newDB}catch(e3){databaseCache.delete(dbKey);throw e3}})}function DialogueToCopy($$anchor,$$props){function commit(){$$props.setResult("ok")}async function copyToClipboard(){await navigator.clipboard.writeText(get(dataToCopy));set(copied,!0)}var fragment,node,node_1,node_3;push($$props,!0);append_styles($$anchor,$$css15);let dataToCopy=state(""),title=state(void 0),copied=state(!1);onMount(()=>{if($$props.getInitialData){const initialData=$$props.getInitialData();if(initialData){set(dataToCopy,initialData.dataToCopy,!0);set(title,initialData.title,!0)}}});node=first_child(fragment=root35());{let $0=user_derived(()=>get(title)||"Data");DialogHeader(node,{get title(){var _a8;return`Your ${null!=(_a8=get($0))?_a8:""} is ready to be copied`}})}Instruction(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{{let $0=user_derived(()=>get(title)||"Data to Copy");InputRow($$anchor2,{get label(){return get($0)},children:($$anchor3,$$slotProps2)=>{var button,node_2,consequent,alternate,fragment_2=root_218(),textarea=first_child(fragment_2);remove_textarea_child(textarea);(button=sibling(textarea,2)).__click=[on_click4,copyToClipboard];node_2=child(button);consequent=$$anchor4=>{append($$anchor4,text("📋"))};alternate=$$anchor4=>{append($$anchor4,text("✔️"))};if_block(node_2,$$render=>{get(copied)?$$render(alternate,!1):$$render(consequent)});reset(button);template_effect(()=>set_value(textarea,get(dataToCopy)));append($$anchor3,fragment_2)},$$slots:{default:!0}})}},$$slots:{default:!0}});InfoNote(node_3=sibling(node_1,2),{get visible(){return get(copied)},children:($$anchor2,$$slotProps)=>{next();var text_2=text();template_effect(()=>{var _a8;return set_text(text_2,`Your ${null!=(_a8=get(title)||"data")?_a8:""} has been copied to the clipboard.`)});append($$anchor2,text_2)},$$slots:{default:!0}});UserDecisions(sibling(node_3,2),{children:($$anchor2,$$slotProps)=>{Decision($$anchor2,{title:"OK",important:!0,commit})},$$slots:{default:!0}});append($$anchor,fragment);pop()}function toArrayBuffer(arr){return arr instanceof Uint8Array||arr instanceof DataView?arr.buffer:arr}function TFileToUXFileInfoStub(file,deleted){if(!(file instanceof import_obsidian.TFile))throw new Error("Invalid file type");return{name:file.name,path:file.path,isFolder:!1,stat:{size:file.stat.size,mtime:file.stat.mtime,ctime:file.stat.ctime,type:"file"},deleted}}function InternalFileToUXFileInfoStub(filename,deleted){return{name:filename.split("/").pop(),path:filename,isFolder:!1,stat:void 0,isInternal:!0,deleted}}function TFolderToUXFileInfoStub(file){var _a8;return{name:file.name,path:file.path,parent:null==(_a8=file.parent)?void 0:_a8.path,isFolder:!0,children:file.children.map(e3=>TFileToUXFileInfoStub(e3))}}function isAcceptedAlwaysFactory(host,log3){return file=>{log3("File is target finally: "+getStoragePathFromUXFileInfo(file),LOG_LEVEL_DEBUG);return Promise.resolve(!0)}}function isAcceptedInFilenameDuplicationFactory(host,log3){const fileCountMapComputed=new Computed({evaluation:async fileEventCount=>{const vaultFiles=(await host.serviceModules.storageAccess.getFileNames()).sort(),fileCountMap={};for(const file of vaultFiles){const lc2=file.toLowerCase();fileCountMap[lc2]?fileCountMap[lc2]++:fileCountMap[lc2]=1}return fileCountMap},requiresUpdate:(args,previousArgs,previousResult)=>!previousResult||previousResult instanceof Error||!previousArgs||args[0]!==previousArgs[0]});return async function isAcceptedInFilenameDuplication(file){const fileCountMap=(await fileCountMapComputed.update(host.services.fileProcessing.totalStorageFileEventCount)).value,filepath=getStoragePathFromUXFileInfo(file),lc2=filepath.toLowerCase();if(host.services.vault.shouldCheckCaseInsensitively()&&lc2 in fileCountMap&&fileCountMap[lc2]>1){log3("File is duplicated (case-insensitive): "+filepath);return!1}log3("File is not duplicated: "+filepath,LOG_LEVEL_DEBUG);return!0}}function isAcceptedByLocalDBFactory(host,log3){const database=host.services.database,databaseEvents=host.services.databaseEvents;let isReady=promiseWithResolvers();databaseEvents.onDatabaseHasReady.addHandler(()=>{isReady.resolve();return Promise.resolve(!0)});databaseEvents.onUnloadDatabase.addHandler(()=>{isReady=promiseWithResolvers();return Promise.resolve(!0)});return async file=>{await isReady.promise;const filepath=getStoragePathFromUXFileInfo(file);if(!await Promise.resolve(database.localDatabase.isTargetFile(filepath))){log3("File is not target by local DB: "+filepath);return!1}log3("File is target by local DB: "+filepath,LOG_LEVEL_DEBUG);return!0}}function isAcceptedByIgnoreFilesFactory(host,log3){let ignoreFiles=[];const ignoreFileCacheMap=new Map,refreshSettings=()=>{const settings=host.services.setting.currentSettings();ignoreFiles=(null==settings?void 0:settings.ignoreFiles.split(",").map(e3=>e3.trim()))||[];return Promise.resolve(!0)},invalidateIgnoreFileCache=path2=>{const key3=path2.toLowerCase();ignoreFileCacheMap.delete(key3)},getIgnoreFile=async path2=>{const key3=path2.toLowerCase(),cached=ignoreFileCacheMap.get(key3);if(void 0!==cached)return cached;try{if(!await host.serviceModules.storageAccess.isExistsIncludeHidden(path2)){log3(`[ignore] Ignore file does not exist: ${path2}`,LOG_LEVEL_DEBUG);ignoreFileCacheMap.set(key3,!1);return!1}const gitignore=(await host.serviceModules.storageAccess.readHiddenFileText(path2)).split(/\r?\n/g).map(e3=>e3.replace(/\r$/,"")).map(e3=>e3.trim());ignoreFileCacheMap.set(key3,gitignore);log3(`[ignore] Ignore file loaded: ${path2}`,LOG_LEVEL_VERBOSE);return gitignore}catch(ex){log3(`[ignore] Failed to read ignore file ${path2}`);log3(ex,LOG_LEVEL_VERBOSE);ignoreFileCacheMap.set(key3,void 0);return!1}};host.services.setting.onSettingRealised.addHandler(refreshSettings);host.services.appLifecycle.onLoaded.addHandler(refreshSettings);refreshSettings();return async function isAcceptedByIgnoreFiles(file){if(!host.services.setting.currentSettings().useIgnoreFiles)return!0;const filepath=getStoragePathFromUXFileInfo(file);invalidateIgnoreFileCache(filepath);log3("Checking ignore files for: "+filepath,LOG_LEVEL_DEBUG);if(!await isAcceptedAll(filepath,ignoreFiles,filename=>getIgnoreFile(filename))){log3("File is ignored by ignore files: "+filepath);return!1}log3("File is not ignored by ignore files: "+filepath,LOG_LEVEL_DEBUG);return!0}}function useTargetFilters(host){const logger2=createInstanceLogFunction("SFTargetFilter",host.services.API),services=host.services,serviceModules=host.serviceModules,_isAcceptedFilenameDuplication=isAcceptedInFilenameDuplicationFactory({services:{vault:services.vault,fileProcessing:services.fileProcessing},serviceModules:{storageAccess:serviceModules.storageAccess}},logger2),_isAcceptedByIgnoreFiles=isAcceptedByIgnoreFilesFactory({services:{setting:services.setting,appLifecycle:services.appLifecycle},serviceModules:{storageAccess:serviceModules.storageAccess}},logger2),_isAcceptedByLocalDB=isAcceptedByLocalDBFactory({services:{database:services.database,databaseEvents:services.databaseEvents},serviceModules:{}},logger2),_isAcceptedAlways=isAcceptedAlwaysFactory(0,logger2);services.vault.isTargetFile.addHandler(_isAcceptedFilenameDuplication,10);services.vault.isTargetFile.addHandler(_isAcceptedByIgnoreFiles,20);services.vault.isTargetFile.addHandler(_isAcceptedByLocalDB,30);services.vault.isTargetFile.addHandler(_isAcceptedAlways,100);services.vault.isIgnoredByIgnoreFile.addHandler(async file=>!await _isAcceptedByIgnoreFiles(file))}async function purgeUnreferencedChunks(db,dryRun,connSetting,performCompact=!1){const info3=await db.info();let resultCount=0;const getSize=function(info4,key3){var _a8,_b5;return Number.parseInt(null!=(_b5=null==(_a8=null==info4?void 0:info4.sizes)?void 0:_a8[key3])?_b5:0)},keySuffix=connSetting?"-remote":"-local";Logger(`${dryRun?"Counting":"Cleaning"} ${connSetting?"remote":"local"} database`,LOG_LEVEL_NOTICE);connSetting&&Logger(`Database active-size: ${sizeToHumanReadable(getSize(info3,"active"))}, external-size:${sizeToHumanReadable(getSize(info3,"external"))}, file-size: ${sizeToHumanReadable(getSize(info3,"file"))}`,LOG_LEVEL_NOTICE);Logger(`Collecting unreferenced chunks on ${info3.db_name}`,LOG_LEVEL_NOTICE,"gc-count-chunk"+keySuffix);const chunks=await collectUnreferencedChunks(db);resultCount=chunks.length;if(0==chunks.length)Logger(`No unreferenced chunks! ${info3.db_name}`,LOG_LEVEL_NOTICE,"gc-count-chunk"+keySuffix);else{Logger(`Number of unreferenced chunks on ${info3.db_name}: ${chunks.length}`,LOG_LEVEL_NOTICE,"gc-count-chunk"+keySuffix);if(dryRun){Logger(`DryRun of cleaning ${connSetting?"remote":"local"} database up: Done`,LOG_LEVEL_NOTICE);return resultCount}if(connSetting){Logger("Cleaning unreferenced chunks on remote",LOG_LEVEL_NOTICE,"gc-purge"+keySuffix);await purgeChunksRemote(connSetting,chunks)}else{Logger("Cleaning unreferenced chunks on local",LOG_LEVEL_NOTICE,"gc-purge"+keySuffix);await purgeChunksLocal(db,chunks)}Logger("Cleaning unreferenced chunks done!",LOG_LEVEL_NOTICE,"gc-purge"+keySuffix)}if(performCompact){Logger("Compacting database...",LOG_LEVEL_NOTICE,"gc-compact"+keySuffix);await db.compact();Logger("Compacting database done",LOG_LEVEL_NOTICE,"gc-compact"+keySuffix)}if(connSetting){const endInfo=await db.info();Logger(`Processed database active-size: ${sizeToHumanReadable(getSize(endInfo,"active"))}, external-size:${sizeToHumanReadable(getSize(endInfo,"external"))}, file-size: ${sizeToHumanReadable(getSize(endInfo,"file"))}`,LOG_LEVEL_NOTICE);Logger(`Reduced sizes: active-size: ${sizeToHumanReadable(getSize(info3,"active")-getSize(endInfo,"active"))}, external-size:${sizeToHumanReadable(getSize(info3,"external")-getSize(endInfo,"external"))}, file-size: ${sizeToHumanReadable(getSize(info3,"file")-getSize(endInfo,"file"))}`,LOG_LEVEL_NOTICE)}Logger(`Cleaning ${connSetting?"remote":"local"} database up: Done`,LOG_LEVEL_NOTICE);return resultCount}function transferChunks(key3,label2,dbFrom,dbTo,items){let totalProcessed=0;const total=items.length;return new QueueProcessor(async batched=>{const requestItems=batched.map(e3=>e3.id);return(await dbTo.allDocs({keys:requestItems})).rows.filter(e3=>"error"in e3&&"not_found"==e3.error).map(e3=>e3.key)},{batchSize:50,concurrentLimit:5,suspended:!0,delay:100},items).pipeTo(new QueueProcessor(async chunkIds=>(await dbFrom.allDocs({keys:chunkIds,include_docs:!0})).rows.filter(e3=>!("error"in e3)).map(e3=>e3.doc),{batchSize:25,concurrentLimit:1,suspended:!0,delay:100})).pipeTo(new QueueProcessor(async docs=>{try{await dbTo.bulkDocs(docs,{new_edits:!1})}catch(ex){Logger(`${label2}: Something went wrong on balancing`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE)}finally{totalProcessed+=docs.length;Logger(`${label2}: ${totalProcessed} / ${total}`,LOG_LEVEL_NOTICE,"balance-"+key3)}},{batchSize:100,delay:100,concurrentLimit:2,suspended:!1})).startPipeline().waitForAllDoneAndTerminate()}async function balanceChunkPurgedDBs(local,remote){Logger("Complement missing chunks between databases",LOG_LEVEL_NOTICE);try{const{onlyOnLocal,onlyOnRemote}=await collectUnbalancedChunkIDs(local,remote),localToRemote=transferChunks("l2r","local -> remote",local,remote,onlyOnLocal),remoteToLocal=transferChunks("r2l","remote -> local",remote,local,onlyOnRemote);await Promise.all([localToRemote,remoteToLocal]);Logger("local -> remote: Done",LOG_LEVEL_NOTICE,"balance-l2r");Logger("remote -> local: Done",LOG_LEVEL_NOTICE,"balance-r2l")}catch(ex){Logger("Something went wrong on balancing!",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE)}Logger("Complement completed!",LOG_LEVEL_NOTICE)}async function purgeChunksLocal(db,docs){await serialized("purge-local",async()=>{try{Logger(`Purging unused ${docs.length} chunks `,LOG_LEVEL_NOTICE,"purge-local-backup");const batchDocsBackup=arrayToChunkedArray(docs,100);let total={ok:0,exist:0,error:0};for(const docsInBatch of batchDocsBackup){const backupDocs=(await db.allDocs({keys:docsInBatch.map(e3=>e3.id),include_docs:!0})).rows.filter(e3=>"doc"in e3).map(e3=>{const chunk={...e3.doc};delete chunk._rev;chunk._id=`_local/${chunk._id}`;return chunk}),ret=await db.bulkDocs(backupDocs);total=ret.map(e3=>({ok:"ok"in e3?1:0,exist:"status"in e3&&409==e3.status?1:0,error:"status"in e3&&409!=e3.status?1:0})).reduce((p2,c3)=>({ok:p2.ok+c3.ok,exist:p2.exist+c3.exist,error:p2.error+c3.error}),total);Logger(`Local chunk backed up: new:${total.ok} ,exist:${total.exist}, error:${total.error}`,LOG_LEVEL_NOTICE,"purge-local-backup");const erroredItems=ret.filter(e3=>"error"in e3&&409!=e3.status);for(const item of erroredItems)Logger(`Failed to back up: ${item.id} / ${item.rev}`,LOG_LEVEL_VERBOSE)}}catch(ex){Logger("Could not back up chunks");Logger(ex,LOG_LEVEL_VERBOSE)}Logger(`Purging unused ${docs.length} chunks... `,LOG_LEVEL_NOTICE,"purge-local");const batchDocs=arrayToChunkedArray(docs,100);let totalRemoved=0;for(const docsInBatch of batchDocs){const removed=await db.purgeMulti(docsInBatch.map(e3=>[e3.id,e3.rev]));totalRemoved+=Object.values(removed).filter(e3=>"ok"in e3).length;Logger(`Purging: ${totalRemoved} / ${docs.length}`,LOG_LEVEL_NOTICE,"purge-local")}Logger(`Purging unused chunks done!: ${totalRemoved} chunks has been deleted.`,LOG_LEVEL_NOTICE,"purge-local")})}async function collectUnbalancedChunkIDs(local,remote){const chunksOnLocal=await collectChunks(local,"INUSE"),chunksOnRemote=await collectChunks(remote,"INUSE");return{onlyOnLocal:chunksOnLocal.filter(e3=>!chunksOnRemote.some(ee=>ee.id==e3.id)),onlyOnRemote:chunksOnRemote.filter(e3=>!chunksOnLocal.some(ee=>ee.id==e3.id))}}async function collectChunks(db,type){const rows=await collectChunksUsage(db),ids=("ALL"==type?rows:rows.filter(e3=>"DANGLING"==type?0==e3.value:0!=e3.value)).flatMap(e3=>e3.key);return(await db.allDocs({keys:ids})).rows.filter(e3=>!("error"in e3)).map(e3=>({id:e3.id,rev:e3.value.rev}))}async function prepareChunkDesignDoc(db){var _a8;const chunkDesignDoc={_id:"_design/chunks",_rev:void 0,ver:2,views:{collectDangling:{map:(function(doc){doc._id.startsWith("h:")?emit([doc._id],0):"children"in doc&&doc.children.forEach(e3=>emit([e3],1))}).toString(),reduce:"_sum"}}};let updateDDoc=!1;try{const old=await db.get(chunkDesignDoc._id);if(null!=(_a8=null==old?void 0:old.ver)?_a8:0<chunkDesignDoc.ver){chunkDesignDoc._rev=old._rev;updateDDoc=!0}}catch(ex){if(404!=ex.status){Logger("Failed to make design document for operating chunks");Logger(ex,LOG_LEVEL_VERBOSE);return!1}updateDDoc=!0}try{updateDDoc&&await db.put(chunkDesignDoc)}catch(ex){Logger("Failed to make design document for operating chunks");Logger(ex,LOG_LEVEL_VERBOSE);return!1}return!0}async function collectChunksUsage(db){if(!await prepareChunkDesignDoc(db)){Logger("Could not prepare design document for operating chunks");return[]}return(await db.query("chunks/collectDangling",{reduce:!0,group:!0})).rows}function collectUnreferencedChunks(db){return collectChunks(db,"DANGLING")}async function purgeChunksRemote(setting,docs){await serialized("purge-remote",async()=>{const buffer=function makeChunkedArrayFromArray(items){const chunked=[];for(let i2=0;i2<items.length;i2+=100)chunked.push(items.slice(i2,i2+100));return chunked}(docs);for(const chunkedPayload of buffer){const rets=await _requestToCouchDBFetch(`${setting.couchDB_URI}/${setting.couchDB_DBNAME}`,setting.couchDB_USER,setting.couchDB_PASSWORD,"_purge",Object.fromEntries(chunkedPayload.map(e3=>[e3.id,[e3.rev]])),"POST");Logger(JSON.stringify(await rets.json()),LOG_LEVEL_VERBOSE)}})}function shortenId(id){return id.length>10?id.substring(0,10):id}function shortenRev(rev3){return rev3?rev3.length>10?rev3.substring(0,10):rev3:"undefined"}function isOnlineAndCanReplicate(errorManager,host,showMessage){if(!host.services.API.isOnline){errorManager.showError("Network is offline",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return Promise.resolve(!1)}errorManager.clearError("Network is offline");return Promise.resolve(!0)}async function canReplicateWithPBKDF2(errorManager,host,showMessage){const currentSettings=host.services.setting.currentSettings(),errorMessage=$msg("Replicator.Message.InitialiseFatalError"),replicator=host.services.replicator.getActiveReplicator();if(!replicator){errorManager.showError(errorMessage,showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}errorManager.clearError(errorMessage);const ensureMessage=`${MARK_LOG_NETWORK_ERROR}Failed to initialise the encryption key, preventing replication.`,ensureResult=await replicator.ensurePBKDF2Salt(currentSettings,showMessage,!0);if(!ensureResult){errorManager.showError(ensureMessage,showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}errorManager.clearError(ensureMessage);return ensureResult}async function prepareDatabaseForUse(host,log3,errorManager,showingNotice=!1,reopenDatabase=!0,ignoreSuspending=!1){const appLifecycle=host.services.appLifecycle;appLifecycle.resetIsReady();if(!reopenDatabase||await host.services.database.openDatabase({databaseEvents:host.services.databaseEvents,replicator:host.services.replicator})){host.services.database.localDatabase.isReady&&await host.services.vault.scanVault(showingNotice,ignoreSuspending);const ERR_INITIALISATION_FAILED="Initializing database has been failed on some module!";if(!await host.services.databaseEvents.onDatabaseInitialised(showingNotice)){errorManager.showError(ERR_INITIALISATION_FAILED,LOG_LEVEL_NOTICE);return!1}errorManager.clearError(ERR_INITIALISATION_FAILED);appLifecycle.markIsReady();await host.services.fileProcessing.commitPendingFileEvents();return!0}appLifecycle.resetIsReady();return!1}function usePrepareDatabaseForUse(host){createInstanceLogFunction("SF:prepareDatabaseForUse",host.services.API);const errorManager=new UnresolvedErrorManager(host.services.appLifecycle);host.services.databaseEvents.initialiseDatabase.addHandler(async(showingNotice=!1,reopenDatabase=!0,ignoreSuspending=!1)=>await prepareDatabaseForUse(host,0,errorManager,showingNotice,reopenDatabase,ignoreSuspending))}function checkUnsuitableValues(setting,regulation=DoctorRegulation){var _a8,_b5;const result={version:regulation.version,rules:{}};for(const key3 in regulation.rules){if(!regulation.rules.hasOwnProperty(key3))continue;const rule=regulation.rules[key3];if(!rule)continue;const value=setting[key3];if(rule.value!==value){if("number"==typeof value&&"min"in rule&&"max"in rule){const min=null!=(_a8=rule.min)?_a8:Number.MIN_SAFE_INTEGER,max3=null!=(_b5=rule.max)?_b5:Number.MAX_SAFE_INTEGER;if(value>=min&&value<=max3){Logger(`Rule satisfied: ${key3} is ${value} between ${min} and ${max3}`);continue}}if(!rule.detectionFunc||rule.detectionFunc(setting)){result.rules[key3]=rule;Logger(`Rule violation: ${key3} is ${value} but should be ${rule.value}`)}else Logger(`Rule condition satisfied: ${key3} is ${value}, and detection function returned false`)}else Logger(`Rule satisfied: ${key3} is ${value}`)}return result}async function performDoctorConsultation(env,settings,{localRebuild=RebuildOptions_ConfirmIfRequired,remoteRebuild=RebuildOptions_ConfirmIfRequired,activateReason="updated",forceRescan=!1}){function getResult(){return{settings,shouldRebuild,shouldRebuildLocal,isModified}}var _a8,_b5,_c3;let shouldRebuild=!1,shouldRebuildLocal=!1,isModified=!1;const r4=checkUnsuitableValues(settings);if(!forceRescan&&r4.version==settings.doctorProcessedVersion){Logger((Object.keys(r4.rules).length>0?"Issues found":"No issues found")+" but marked as to be silent",LOG_LEVEL_VERBOSE);return getResult()}if(0==Object.entries(r4.rules).length){Logger($msg("Doctor.Message.NoIssues"),"updated"!==activateReason?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return getResult()}{const OPT_YES=`${$msg("Doctor.Button.Yes")}`,OPT_NO=`${$msg("Doctor.Button.No")}`,OPT_DISMISS=`${$msg("Doctor.Button.DismissThisVersion")}`,issues2=Object.keys(r4.rules).map(key3=>`- ${getConfName(key3)}`).join("\n"),msg=await env.confirm.askSelectStringDialogue($msg("Doctor.Dialogue.Main",{activateReason,issues:issues2}),[OPT_YES,OPT_NO,OPT_DISMISS],{title:$msg("Doctor.Dialogue.Title"),defaultAction:OPT_YES});if(msg==OPT_DISMISS){settings.doctorProcessedVersion=r4.version;isModified=!0;Logger("Marked as to be silent",LOG_LEVEL_VERBOSE);return{settings,shouldRebuild,shouldRebuildLocal,isModified}}if(msg!=OPT_YES)return getResult();const issueItems=Object.entries(r4.rules);Logger(`${issueItems.length} Issue(s) found `,LOG_LEVEL_VERBOSE);let idx2=0;const applySettings={},OPT_FIX=`${$msg("Doctor.Button.Fix")}`,OPT_SKIP=`${$msg("Doctor.Button.Skip")}`,OPTION_FIX_WITHOUT_REBUILD=`${$msg("Doctor.Button.FixButNoRebuild")}`;let skipped=0;for(const[key3,value]of issueItems){const levelMap={[1]:$msg("Doctor.Level.Necessary"),[2]:$msg("Doctor.Level.Recommended"),[3]:$msg("Doctor.Level.Optional"),[0]:$msg("Doctor.Level.Must")},level=value.level?levelMap[value.level]:"Unknown",options=[OPT_FIX];let askRebuild=!1,askRebuildLocal=!1;if(value.requireRebuild)if(remoteRebuild==RebuildOptions_AutomaticAcceptable){askRebuild=!1;shouldRebuild=!0}else if(remoteRebuild==RebuildOptions_ConfirmIfRequired)askRebuild=!0;else if(remoteRebuild==RebuildOptions_SkipEvenIfRequired){askRebuild=!1;shouldRebuild=!1}if(value.requireRebuildLocal)if(localRebuild==RebuildOptions_AutomaticAcceptable){askRebuildLocal=!1;shouldRebuildLocal=!0}else if(localRebuild==RebuildOptions_ConfirmIfRequired)askRebuildLocal=!0;else if(localRebuild==RebuildOptions_SkipEvenIfRequired){askRebuildLocal=!1;shouldRebuildLocal=!1}(askRebuild||askRebuildLocal)&&options.push(OPTION_FIX_WITHOUT_REBUILD);options.push(OPT_SKIP);const note=`${askRebuild?$msg("Doctor.Message.RebuildRequired"):""}${askRebuildLocal?$msg("Doctor.Message.RebuildLocalRequired"):""}`,ret=await env.confirm.askSelectStringDialogue($msg("Doctor.Dialogue.MainFix",{name:getConfName(key3),current:`${settings[key3]}`,reason:null!=(_c3=null!=(_b5=null==(_a8=value.reasonFunc)?void 0:_a8.call(value,settings))?_b5:value.reason)?_c3:" N/A ",ideal:`${value.valueDisplayFunc?value.valueDisplayFunc(settings):value.value}`,level:`${level}`,note}),options,{title:$msg("Doctor.Dialogue.TitleFix",{current:""+ ++idx2,total:`${issueItems.length}`}),defaultAction:OPT_FIX});if(ret==OPT_FIX||ret==OPTION_FIX_WITHOUT_REBUILD){applySettings[key3]=value.value;if(ret==OPT_FIX){shouldRebuild=shouldRebuild||askRebuild||!1;shouldRebuildLocal=shouldRebuildLocal||askRebuildLocal||!1}isModified=!0}else skipped++}Object.keys(applySettings).length>0&&(settings={...settings,...applySettings});if(0==skipped){settings.doctorProcessedVersion=r4.version;isModified=!0}else if("no"==await env.confirm.askYesNoDialog($msg("Doctor.Message.SomeSkipped"),{title:$msg("Doctor.Dialogue.TitleAlmostDone"),defaultOption:"No"})){settings.doctorProcessedVersion=r4.version;isModified=!0}}return getResult()}async function*withConcurrency(iterable,callback,concurrency){const processes=new Set,mapTaskToPromise=new Map;let serial=0;const enqueue=item=>{const idx2=serial++,promise=(async()=>[idx2,await callback(item)])();processes.add(promise);mapTaskToPromise.set(idx2,promise)},consume=async()=>{const r4=await Promise.race(processes),item=mapTaskToPromise.get(r4[0]);processes.delete(item);mapTaskToPromise.delete(r4[0]);return r4[1]};for await(const t9 of iterable){for(;processes.size>=concurrency;)yield await consume();enqueue(t9)}for(;processes.size>0;)yield await consume()}async function collectDeletedFiles(host,log3){const limitDays=host.services.setting.currentSettings().automaticallyDeleteMetadataOfDeletedFiles;if(limitDays<=0)return;log3("Checking expired file history");const limit=Date.now()-864e5*limitDays,notes=[];for await(const doc of host.services.database.localDatabase.findAllDocs({conflicts:!0}))isAnyNote(doc)&&doc.deleted&&doc.mtime-limit<0&&notes.push({path:doc.path,mtime:doc.mtime,ttl:(doc.mtime-limit)/1e3/86400,doc});if(0!==notes.length){for(const v2 of notes){log3(`Deletion history expired: ${v2.path}`);const delDoc=v2.doc;delDoc._deleted=!0;await host.services.database.localDatabase.putRaw(delDoc)}log3("Checking expired file history done")}else{log3("There are no old documents");log3("Checking expired file history done")}}function getPathFromEntry(host,doc){return host.services.path.getPath(doc)}async function syncFileBetweenDBandStorage(host,log3,file,doc){const docPath=getPathFromEntry(host,doc);if(!doc)throw new Error(`Missing doc:${docPath}`);if("path"in file){const w2=await host.serviceModules.storageAccess.getFileStub(docPath);if(!w2)throw new Error(`Missing file:${docPath}`);file=w2}switch(host.services.path.compareFileFreshness(file,doc)){case BASE_IS_NEW:if(host.services.vault.isFileSizeTooLarge(file.stat.size))log3(`STORAGE -> DB : ${file.path} has been skipped due to file size exceeding the limit`,LOG_LEVEL_NOTICE);else{log3("STORAGE -> DB :"+file.path);await host.serviceModules.fileHandler.storeFileToDB(file)}break;case TARGET_IS_NEW:if(host.services.vault.isFileSizeTooLarge(doc.size))log3(`STORAGE <- DB : ${file.path} has been skipped due to file size exceeding the limit`,LOG_LEVEL_NOTICE);else{log3("STORAGE <- DB :"+docPath);await host.serviceModules.fileHandler.dbToStorage(doc,stripAllPrefixes(docPath),!0)?eventHub.emitEvent("event-file-changed",{file:file.path,automated:!0}):log3(`STORAGE <- DB : Cloud not read ${file.path}, possibly deleted`,LOG_LEVEL_NOTICE)}break;case EVEN:log3("STORAGE == DB :"+file.path,LOG_LEVEL_DEBUG);break;default:log3("STORAGE ?? DB :"+file.path+" Something got weird")}}function canProceedScan(host,errorManager,log3,showingNotice=!1,ignoreSuspending=!1){const settings=host.services.setting.currentSettings(),ERR_NOT_CONFIGURED="LiveSync is not configured yet. Synchronising between the storage and the local database is now prevented.";if(!settings.isConfigured){errorManager.showError(ERR_NOT_CONFIGURED,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}errorManager.clearError(ERR_NOT_CONFIGURED);const ERR_SUSPENDING="Now suspending file watching. Synchronising between the storage and the local database is now prevented.";if(!ignoreSuspending&&settings.suspendFileWatching){errorManager.showError(ERR_SUSPENDING,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}errorManager.clearError(ERR_SUSPENDING);const MSG_IN_REMEDIATION="Started in remediation Mode! (Max mtime for reflect events is set). Synchronising between the storage and the local database is now prevented.";if(settings.maxMTimeForReflectEvents>0){errorManager.showError(MSG_IN_REMEDIATION,LOG_LEVEL_NOTICE);return!1}errorManager.clearError(MSG_IN_REMEDIATION);return!0}function convertCase(settings,path2){return settings.handleFilenameCaseSensitive?path2:path2.toLowerCase()}async function collectFilesOnStorage(host,settings,log3){log3("Collecting local files on the storage",LOG_LEVEL_VERBOSE);const filesStorageSrc=await host.serviceModules.storageAccess.getFiles(),_filesStorage=[];for(const f4 of filesStorageSrc)await host.services.vault.isTargetFile(f4.path)&&_filesStorage.push(f4);const storageFileNameMap=Object.fromEntries(_filesStorage.map(e3=>[e3.path,e3])),storageFileNames=Object.keys(storageFileNameMap),storageFileNameCapsPair=storageFileNames.map(e3=>[e3,convertCase(settings,e3)]);return{storageFileNameMap,storageFileNames,storageFileNameCI2CS:Object.fromEntries(storageFileNameCapsPair.map(e3=>[e3[1],e3[0]]))}}async function collectDatabaseFiles(host,settings,log3,showingNotice){log3("Collecting local files on the DB",LOG_LEVEL_VERBOSE);const _DBEntries=[];let count=0;for await(const doc of host.services.database.localDatabase.findAllNormalDocs({conflicts:!0})||[]){count++;count%25==0&&log3(`Collecting local files on the DB: ${count}`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"syncAll");const path2=getPathFromEntry(host,doc);if(host.services.vault.isValidPath(path2)&&await host.services.vault.isTargetFile(path2)){if(!isMetaEntry(doc)){log3(`Invalid entry: ${path2}`,LOG_LEVEL_INFO);continue}_DBEntries.push(doc)}}const databaseFileNameMap=Object.fromEntries(_DBEntries.map(e3=>[getPathFromEntry(host,e3),e3])),databaseFileNames=Object.keys(databaseFileNameMap),databaseFileNameCapsPair=databaseFileNames.map(e3=>[e3,convertCase(settings,e3)]);return{databaseFileNameMap,databaseFileNames,databaseFileNameCI2CS:Object.fromEntries(databaseFileNameCapsPair.map(e3=>[e3[1],e3[0]]))}}async function updateToDatabase(host,log3,logLevel,file){if(host.services.vault.isFileSizeTooLarge(file.stat.size))log3(`UPDATE DATABASE: ${file.path} has been skipped due to file size exceeding the limit`,logLevel);else{const path2=file.path;await host.serviceModules.fileHandler.storeFileToDB(file);eventHub.emitEvent("event-file-changed",{file:path2,automated:!0})}}async function updateToStorage(host,log3,logLevel,w2){var _a8,_b5;const path2=getPathFromEntry(host,w2);if(!w2||w2.deleted||w2._deleted)w2?log3(`Deletion history skipped: ${path2}`,LOG_LEVEL_VERBOSE):log3(`entry not found: ${path2}`);else if(host.services.vault.isFileSizeTooLarge(w2.size))log3(`UPDATE STORAGE: ${path2} has been skipped due to file size exceeding the limit`,logLevel);else{if((null!=(_b5=null==(_a8=w2._conflicts)?void 0:_a8.length)?_b5:0)>0){log3(`UPDATE STORAGE: ${path2} has conflicts. skipped (x)`,LOG_LEVEL_INFO);return}await host.serviceModules.fileHandler.dbToStorage(path2,null,!0);eventHub.emitEvent("event-file-changed",{file:path2,automated:!0});log3(`Check or pull from db:${path2} OK`)}}async function syncStorageAndDatabase(host,log3,file,logLevel,doc){var _a8,_b5;(null!=(_b5=null==(_a8=doc._conflicts)?void 0:_a8.length)?_b5:0)>0?log3(`SYNC DATABASE AND STORAGE: ${file.path} has conflicts. skipped`,LOG_LEVEL_INFO):host.services.vault.isFileSizeTooLarge(file.stat.size)||host.services.vault.isFileSizeTooLarge(doc.size)?log3(`SYNC DATABASE AND STORAGE: ${getPathFromEntry(host,doc)} has been skipped due to file size exceeding the limit`,logLevel):await syncFileBetweenDBandStorage(host,log3,file,doc)}async function performFullScan(host,log3,errorManager,showingNotice=!1,ignoreSuspending=!1){async function runAll(procedureName,objects,callback){if(0===objects.length){log3(`${procedureName}: Nothing to do`);return}log3(procedureName);if(!host.services.database.localDatabase.isReady)throw Error("Database is not ready!");let success=0,failed2=0,total=0;for await(const result of withConcurrency(objects,async e3=>{try{await callback(e3);return!0}catch(ex){log3(`Error while ${procedureName}`,LOG_LEVEL_NOTICE);log3(ex,LOG_LEVEL_VERBOSE);return!1}},10)){result?success++:failed2++;total++;const msg2=`${procedureName}: DONE:${success}, FAILED:${failed2}, LAST:${objects.length-total}`;updateLog(procedureName,msg2)}updateLog(procedureName,`${procedureName} All done: DONE:${success}, FAILED:${failed2}`)}if(!canProceedScan(host,errorManager,0,showingNotice,ignoreSuspending))return!1;log3("Opening the key-value database",LOG_LEVEL_VERBOSE);const isInitialized=await host.services.keyValueDB.kvDB.get("initialized")||!1,settings=host.services.setting.currentSettings();showingNotice&&log3("Initializing",LOG_LEVEL_NOTICE,"syncAll");if(isInitialized){log3("Restoring storage state",LOG_LEVEL_VERBOSE);await host.serviceModules.storageAccess.restoreState()}log3("Initialize and checking database files");log3("Checking deleted files");await collectDeletedFiles(host,log3);const{storageFileNameMap,storageFileNames,storageFileNameCI2CS}=await collectFilesOnStorage(host,settings,log3),{databaseFileNameMap,databaseFileNames,databaseFileNameCI2CS}=await collectDatabaseFiles(host,settings,log3,showingNotice),allFiles=unique([...Object.keys(databaseFileNameCI2CS),...Object.keys(storageFileNameCI2CS)]);log3(`Total files in the database: ${databaseFileNames.length}`,LOG_LEVEL_VERBOSE,"syncAll");log3(`Total files in the storage: ${storageFileNames.length}`,LOG_LEVEL_VERBOSE,"syncAll");log3(`Total files: ${allFiles.length}`,LOG_LEVEL_VERBOSE,"syncAll");const filesExistOnlyInStorage=allFiles.filter(e3=>!databaseFileNameCI2CS[e3]),filesExistOnlyInDatabase=allFiles.filter(e3=>!storageFileNameCI2CS[e3]),filesExistBoth=allFiles.filter(e3=>databaseFileNameCI2CS[e3]&&storageFileNameCI2CS[e3]),fileMap=filesExistBoth.map(path2=>({file:storageFileNameMap[storageFileNameCI2CS[path2]],doc:databaseFileNameMap[databaseFileNameCI2CS[path2]]}));log3(`Files exist only in storage: ${filesExistOnlyInStorage.length}`,LOG_LEVEL_VERBOSE,"syncAll");log3(`Files exist only in database: ${filesExistOnlyInDatabase.length}`,LOG_LEVEL_VERBOSE,"syncAll");log3(`Files exist both in storage and database: ${filesExistBoth.length}`,LOG_LEVEL_VERBOSE,"syncAll");log3("Synchronising...");const processStatus={},logLevel=showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,updateLog=throttle((key3,msg)=>{processStatus[key3]=msg;const logMsg=Object.values(processStatus).join("\n");log3(logMsg,logLevel,"syncAll")},25),initProcess=[];initProcess.push(runAll("UPDATE DATABASE",filesExistOnlyInStorage,async e3=>{const file=storageFileNameMap[storageFileNameCI2CS[e3]];await updateToDatabase(host,log3,logLevel,file)}));initProcess.push(runAll("UPDATE STORAGE",filesExistOnlyInDatabase,async e3=>{const w2=databaseFileNameMap[databaseFileNameCI2CS[e3]];await updateToStorage(host,log3,logLevel,w2)}));initProcess.push(runAll("SYNC DATABASE AND STORAGE",fileMap,async e3=>{const{file,doc}=e3;await syncStorageAndDatabase(host,log3,file,logLevel,doc)}));await Promise.all(initProcess);log3("Initialized, NOW TRACKING!");isInitialized||await host.services.keyValueDB.kvDB.set("initialized",!0);showingNotice&&log3("Initialize done!",LOG_LEVEL_NOTICE,"syncAll");return!0}function useOfflineScanner(host){const log3=createInstanceLogFunction("SF:OfflineScanner",host.services.API),errorManager=new UnresolvedErrorManager(host.services.appLifecycle);host.services.vault.scanVault.addHandler(async(showingNotice,ignoreSuspending=!1)=>await performFullScan(host,log3,errorManager,showingNotice,ignoreSuspending))}function onNotifyRemoteSizeNotConfiguredFactory(host,log3){return async()=>{log3($msg("moduleCheckRemoteSize.logCheckingStorageSizes"),LOG_LEVEL_VERBOSE);if(host.services.setting.currentSettings().notifyThresholdOfRemoteStorageSize>=0)return!0;const message=$msg("moduleCheckRemoteSize.msgSetDBCapacity"),ANSWER_0=$msg("moduleCheckRemoteSize.optionNoWarn"),ANSWER_800=$msg("moduleCheckRemoteSize.option800MB"),ANSWER_2000=$msg("moduleCheckRemoteSize.option2GB"),ASK_ME_NEXT_TIME=$msg("moduleCheckRemoteSize.optionAskMeLater"),ret=await host.services.API.confirm.askSelectStringDialogue(message,[ANSWER_0,ANSWER_800,ANSWER_2000,ASK_ME_NEXT_TIME],{defaultAction:ASK_ME_NEXT_TIME,title:$msg("moduleCheckRemoteSize.titleDatabaseSizeNotify"),timeout:40});ret==ANSWER_0?await host.services.setting.applyPartial({notifyThresholdOfRemoteStorageSize:0},!0):ret==ANSWER_800?await host.services.setting.applyPartial({notifyThresholdOfRemoteStorageSize:800},!0):ret==ANSWER_2000&&await host.services.setting.applyPartial({notifyThresholdOfRemoteStorageSize:2e3},!0);return!0}}function onNotifyRemoteSizeExceedFactory(host,log3){return async()=>{const settings=host.services.setting.currentSettings();if(settings.notifyThresholdOfRemoteStorageSize<=0){log3("User has chosen to not receive remote storage size exceed notification.",LOG_LEVEL_INFO);return!0}if(!1===host.services.API.isOnline){log3("Network is offline, skipping remote size exceed check.",LOG_LEVEL_INFO);return!0}const replicator=host.services.replicator.getActiveReplicator(),remoteStat=await(null==replicator?void 0:replicator.getRemoteStatus(host.services.setting.currentSettings()));if(!remoteStat){log3("Failed to get remote status, skipping remote size exceed check.",LOG_LEVEL_INFO);return!0}const estimatedSize=remoteStat.estimatedSize;if(estimatedSize){const maxSize=1024*settings.notifyThresholdOfRemoteStorageSize*1024;if(estimatedSize<=maxSize){log3($msg("moduleCheckRemoteSize.logCurrentStorageSize",{measuredSize:sizeToHumanReadable(estimatedSize)}),LOG_LEVEL_INFO);return!0}const message=$msg("moduleCheckRemoteSize.msgDatabaseGrowing",{estimatedSize:sizeToHumanReadable(estimatedSize),maxSize:sizeToHumanReadable(maxSize)}),ANSWER_ENLARGE_LIMIT=$msg("moduleCheckRemoteSize.optionIncreaseLimit",{newMax:(100+~~(estimatedSize/1024/1024)).toString()}),ANSWER_REBUILD=$msg("moduleCheckRemoteSize.optionRebuildAll"),ANSWER_IGNORE=$msg("moduleCheckRemoteSize.optionDismiss"),ret=await host.services.API.confirm.askSelectStringDialogue(message,[ANSWER_ENLARGE_LIMIT,ANSWER_REBUILD,ANSWER_IGNORE],{defaultAction:ANSWER_IGNORE,title:$msg("moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded"),timeout:60});if(ret==ANSWER_REBUILD){if("yes"==await host.services.API.confirm.askYesNoDialog($msg("moduleCheckRemoteSize.msgConfirmRebuild"),{defaultOption:"No"})){await host.services.setting.applyPartial({notifyThresholdOfRemoteStorageSize:-1},!0);await host.serviceModules.rebuilder.scheduleRebuild();return!1}return!0}if(ret==ANSWER_ENLARGE_LIMIT){const newThreshold=100+~~(estimatedSize/1024/1024);log3($msg("moduleCheckRemoteSize.logThresholdEnlarged",{size:newThreshold.toString()}),LOG_LEVEL_NOTICE);await host.services.setting.applyPartial({notifyThresholdOfRemoteStorageSize:newThreshold},!0);return!0}log3($msg("moduleCheckRemoteSize.logExceededWarning",{measuredSize:sizeToHumanReadable(estimatedSize),notifySize:sizeToHumanReadable(1024*settings.notifyThresholdOfRemoteStorageSize*1024)}),LOG_LEVEL_INFO)}return!0}}async function scanAllStat(host,log3,resetThreshold=!1){resetThreshold&&await host.services.setting.applyPartial({notifyThresholdOfRemoteStorageSize:-1},!0);const onNotifyNotConfigured=onNotifyRemoteSizeNotConfiguredFactory(host,log3),onNotifyExceed=onNotifyRemoteSizeExceedFactory(host,log3);return await onNotifyNotConfigured()&&await onNotifyExceed()}function useCheckRemoteSize(host){const log3=createInstanceLogFunction("SFCheckRemoteSize",host.services.API);host.services.appLifecycle.onScanningStartupIssues.addHandler(()=>scanAllStat(host,log3,!1));host.services.appLifecycle.onInitialise.addHandler(()=>{host.services.API.addCommand({id:"livesync-reset-remote-size-threshold-and-check",name:"Reset notification threshold and check the remote database usage",callback:async()=>{await scanAllStat(host,log3,!0)}});eventHub.onEvent(EVENT_REQUEST_CHECK_REMOTE_SIZE,()=>scanAllStat(host,log3,!0));return Promise.resolve(!0)})}function FetchEverything($$anchor,$$props){function commit(){$$props.setResult({vault:get(vaultType),backup:get(backupType),extra:{preventFetchingConfig:get(preventFetchingConfig)}})}var fragment,node,node_1,node_2,node_3,node_10,node_17;push($$props,!0);let vaultType=state("cancelled"),backupType=state("cancelled");const canProceed=user_derived(()=>!("identical"!==get(vaultType)&&"independent"!==get(vaultType)&&"unbalanced"!==get(vaultType)||"backup_done"!==get(backupType)&&"backup_skipped"!==get(backupType)));let preventFetchingConfig=state(!1);DialogHeader(node=first_child(fragment=root36()),{title:"Reset Synchronisation on This Device"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("This will rebuild the local database on this device using the most recent data from the server. This action is\n designed to resolve synchronisation inconsistencies and restore correct functionality."))},$$slots:{default:!0}});Guidance(node_2=sibling(node_1,2),{important:!0,title:"⚠️ Important Notice",children:($$anchor2,$$slotProps)=>{var fragment_1=root_219();next(2);append($$anchor2,fragment_1)},$$slots:{default:!0}});Instruction(node_3=sibling(node_2,4),{children:($$anchor2,$$slotProps)=>{var fragment_2=root_37(),node_4=first_child(fragment_2);Question(node_4,{children:($$anchor3,$$slotProps2)=>{var fragment_3=root_413();next();append($$anchor3,fragment_3)},$$slots:{default:!0}});Options(sibling(node_4,2),{children:($$anchor3,$$slotProps2)=>{var node_7,fragment_4=root_55(),node_6=first_child(fragment_4);Option(node_6,{selectedValue:"identical",title:"The files in this Vault are almost identical to the server's.",get value(){return get(vaultType)},set value($$value){set(vaultType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("(e.g., immediately after restoring on another computer, or having recovered from a backup)"))},$$slots:{default:!0}});Option(node_7=sibling(node_6,2),{selectedValue:"independent",title:"This Vault is empty, or contains only new files that are not on the server.",get value(){return get(vaultType)},set value($$value){set(vaultType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("(e.g., setting up for the first time on a new smartphone, starting from a clean slate)"))},$$slots:{default:!0}});Option(sibling(node_7,2),{selectedValue:"unbalanced",title:"There may be differences between the files in this Vault and the server.",get value(){return get(vaultType)},set value($$value){set(vaultType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{var fragment_5;next();InfoNote(sibling(first_child(fragment_5=root_810())),{info:!0,children:($$anchor5,$$slotProps4)=>{next();append($$anchor5,text("In this scenario, Self-hosted LiveSync will recreate metadata for every file and deliberately generate\n conflicts. Where the file content is identical, these conflicts will be resolved automatically."))},$$slots:{default:!0}});append($$anchor4,fragment_5)},$$slots:{default:!0}});append($$anchor3,fragment_4)},$$slots:{default:!0}});append($$anchor2,fragment_2)},$$slots:{default:!0}});Instruction(node_10=sibling(node_3,4),{children:($$anchor2,$$slotProps)=>{var node_12,fragment_6=root_105(),node_11=first_child(fragment_6);Question(node_11,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Have you created a backup before proceeding?"))},$$slots:{default:!0}});InfoNote(node_12=sibling(node_11,2),{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("We recommend that you copy your Vault folder to a safe location. This will provide a safeguard in case a large\n number of conflicts arise, or if you accidentally synchronise with an incorrect destination."))},$$slots:{default:!0}});Options(sibling(node_12,2),{children:($$anchor3,$$slotProps2)=>{var node_15,fragment_7=root_136(),node_14=first_child(fragment_7);Option(node_14,{selectedValue:"backup_done",title:"I have created a backup of my Vault.",get value(){return get(backupType)},set value($$value){set(backupType,$$value,!0)}});Option(node_15=sibling(node_14,2),{selectedValue:"backup_skipped",title:"I understand the risks and will proceed without a backup.",get value(){return get(backupType)},set value($$value){set(backupType,$$value,!0)}});Option(sibling(node_15,2),{selectedValue:"unable_to_backup",title:"I am unable to create a backup of my Vault.",get value(){return get(backupType)},set value($$value){set(backupType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{{let $0=user_derived(()=>"unable_to_backup"===get(backupType));InfoNote($$anchor4,{error:!0,get visible(){return get($0)},children:($$anchor5,$$slotProps4)=>{var fragment_9=root_154();next(3);append($$anchor5,fragment_9)},$$slots:{default:!0}})}},$$slots:{default:!0}});append($$anchor3,fragment_7)},$$slots:{default:!0}});append($$anchor2,fragment_6)},$$slots:{default:!0}});Instruction(node_17=sibling(node_10,2),{children:($$anchor2,$$slotProps)=>{ExtraItems($$anchor2,{title:"Advanced",children:($$anchor3,$$slotProps2)=>{Check($$anchor3,{title:"Prevent fetching configuration from server",get value(){return get(preventFetchingConfig)},set value($$value){set(preventFetchingConfig,$$value,!0)}})},$$slots:{default:!0}})},$$slots:{default:!0}});UserDecisions(sibling(node_17,2),{children:($$anchor2,$$slotProps)=>{var fragment_12=root_184(),node_19=first_child(fragment_12);let $0=user_derived(()=>!get(canProceed));Decision(node_19,{title:"Reset and Resume Synchronisation",important:!0,get disabled(){return get($0)},commit:()=>commit()});Decision(sibling(node_19,2),{title:"Cancel",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_12)},$$slots:{default:!0}});append($$anchor,fragment);pop()}function RebuildEverything($$anchor,$$props){function commit(){$$props.setResult({backup:get(backupType),extra:{preventFetchingConfig:get(preventFetchingConfig)}})}var fragment,node,node_1,node_2,node_3,node_9,node_16;push($$props,!0);let backupType=state("cancelled"),confirmationCheck1=state(!1),confirmationCheck2=state(!1),confirmationCheck3=state(!1);const canProceed=user_derived(()=>("backup_done"===get(backupType)||"backup_skipped"===get(backupType))&&get(confirmationCheck1)&&get(confirmationCheck2)&&get(confirmationCheck3));let preventFetchingConfig=state(!1);DialogHeader(node=first_child(fragment=root37()),{title:"Final Confirmation: Overwrite Server Data with This Device's Files"});Guidance(node_1=sibling(node,2),{children:($$anchor2,$$slotProps)=>{next();var fragment_1=root_129();next(2);append($$anchor2,fragment_1)},$$slots:{default:!0}});InfoNote(node_2=sibling(node_1,2),{children:($$anchor2,$$slotProps)=>{next();append($$anchor2,text("You should perform this operation only in exceptional circumstances, such as when the server data is completely\n corrupted, when changes on all other devices are no longer needed, or when the database size has become unusually\n large in comparison to the Vault size."))},$$slots:{default:!0}});Guidance(node_3=sibling(node_2,2),{important:!0,title:"⚠️ Please Confirm the Following",children:($$anchor2,$$slotProps)=>{var node_7,fragment_2=root_38(),node_4=first_child(fragment_2);Check(node_4,{title:"I understand that all changes made on other smartphones or computers possibly could be lost.",get value(){return get(confirmationCheck1)},set value($$value){set(confirmationCheck1,$$value,!0)},children:($$anchor3,$$slotProps2)=>{var fragment_3=root_414(),node_5=first_child(fragment_3);InfoNote(node_5,{children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("There is a way to resolve this on other devices."))},$$slots:{default:!0}});InfoNote(sibling(node_5,2),{children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("Of course, we can back up the data before proceeding."))},$$slots:{default:!0}});append($$anchor3,fragment_3)},$$slots:{default:!0}});Check(node_7=sibling(node_4,2),{title:"I understand that other devices will no longer be able to synchronise, and will need to be reset the synchronisation information.",get value(){return get(confirmationCheck2)},set value($$value){set(confirmationCheck2,$$value,!0)},children:($$anchor3,$$slotProps2)=>{InfoNote($$anchor3,{children:($$anchor4,$$slotProps3)=>{next();append($$anchor4,text("by resetting the remote, you will be informed on other devices."))},$$slots:{default:!0}})},$$slots:{default:!0}});Check(sibling(node_7,2),{title:"I understand that this action is irreversible once performed.",get value(){return get(confirmationCheck3)},set value($$value){set(confirmationCheck3,$$value,!0)}});append($$anchor2,fragment_2)},$$slots:{default:!0}});Instruction(node_9=sibling(node_3,4),{children:($$anchor2,$$slotProps)=>{var node_11,fragment_5=root_95(),node_10=first_child(fragment_5);Question(node_10,{children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("Have you created a backup before proceeding?"))},$$slots:{default:!0}});InfoNote(node_11=sibling(node_10,2),{warning:!0,children:($$anchor3,$$slotProps2)=>{next();append($$anchor3,text("This is an extremely powerful operation. We strongly recommend that you copy your Vault folder to a safe\n location."))},$$slots:{default:!0}});Options(sibling(node_11,2),{children:($$anchor3,$$slotProps2)=>{var node_14,fragment_6=root_1210(),node_13=first_child(fragment_6);Option(node_13,{selectedValue:"backup_done",title:"I have created a backup of my Vault.",get value(){return get(backupType)},set value($$value){set(backupType,$$value,!0)}});Option(node_14=sibling(node_13,2),{selectedValue:"backup_skipped",title:"I understand the risks and will proceed without a backup.",get value(){return get(backupType)},set value($$value){set(backupType,$$value,!0)}});Option(sibling(node_14,2),{selectedValue:"unable_to_backup",title:"I am unable to create a backup of my Vaults.",get value(){return get(backupType)},set value($$value){set(backupType,$$value,!0)},children:($$anchor4,$$slotProps3)=>{{let $0=user_derived(()=>"unable_to_backup"===get(backupType));InfoNote($$anchor4,{error:!0,get visible(){return get($0)},children:($$anchor5,$$slotProps4)=>{append($$anchor5,root_144())},$$slots:{default:!0}})}},$$slots:{default:!0}});append($$anchor3,fragment_6)},$$slots:{default:!0}});append($$anchor2,fragment_5)},$$slots:{default:!0}});Instruction(node_16=sibling(node_9,2),{children:($$anchor2,$$slotProps)=>{ExtraItems($$anchor2,{title:"Advanced",children:($$anchor3,$$slotProps2)=>{Check($$anchor3,{title:"Prevent fetching configuration from server",get value(){return get(preventFetchingConfig)},set value($$value){set(preventFetchingConfig,$$value,!0)}})},$$slots:{default:!0}})},$$slots:{default:!0}});UserDecisions(sibling(node_16,2),{children:($$anchor2,$$slotProps)=>{var fragment_10=root_172(),node_18=first_child(fragment_10);let $0=user_derived(()=>!get(canProceed));Decision(node_18,{title:"I Understand, Overwrite Server",important:!0,get disabled(){return get($0)},commit:()=>commit()});Decision(sibling(node_18,2),{title:"Cancel",commit:()=>$$props.setResult("cancelled")});append($$anchor2,fragment_10)},$$slots:{default:!0}});append($$anchor,fragment);pop()}async function isFlagFileExist(host,path2){return!!await host.serviceModules.storageAccess.isExists(host.serviceModules.storageAccess.normalisePath(path2))}async function deleteFlagFile(host,log3,path2){try{await host.serviceModules.storageAccess.isExists(host.serviceModules.storageAccess.normalisePath(path2))&&await host.serviceModules.storageAccess.delete(path2,!0)}catch(ex){log3(`Could not delete ${path2}`);log3(ex,LOG_LEVEL_VERBOSE)}}function createFetchAllFlagHandler(host,log3){const isFlagActive=async()=>await isFlagFileExist(host,FlagFilesOriginal_FETCH_ALL)||await isFlagFileExist(host,FlagFilesHumanReadable_FETCH_ALL),cleanupFlag=async()=>{await deleteFlagFile(host,log3,FlagFilesOriginal_FETCH_ALL);await deleteFlagFile(host,log3,FlagFilesHumanReadable_FETCH_ALL)},onScheduled=async()=>{const method=await host.services.UI.dialogManager.openWithExplicitCancel(FetchEverything);if("cancelled"===method){log3("Fetch everything cancelled by user.",LOG_LEVEL_NOTICE);await cleanupFlag();host.services.appLifecycle.performRestart();return!1}const{vault,extra}=method,mapVaultStateToAction={identical:{makeLocalChunkBeforeSync:(await host.services.setting.currentSettings()).remoteType!==REMOTE_MINIO,makeLocalFilesBeforeSync:!1},independent:{makeLocalChunkBeforeSync:!1,makeLocalFilesBeforeSync:!1},unbalanced:{makeLocalChunkBeforeSync:!1,makeLocalFilesBeforeSync:!0},cancelled:{makeLocalChunkBeforeSync:!1,makeLocalFilesBeforeSync:!1}};return await processVaultInitialisation(host,log3,async()=>{const settings2=host.services.setting.currentSettings();await adjustSettingToRemoteIfNeeded(host,log3,extra,settings2);const vaultStateToAction=mapVaultStateToAction[vault],{makeLocalChunkBeforeSync,makeLocalFilesBeforeSync}=vaultStateToAction;log3(`Fetching everything with settings: makeLocalChunkBeforeSync=${makeLocalChunkBeforeSync}, makeLocalFilesBeforeSync=${makeLocalFilesBeforeSync}`,LOG_LEVEL_INFO);await host.serviceModules.rebuilder.$fetchLocal(makeLocalChunkBeforeSync,!makeLocalFilesBeforeSync);await cleanupFlag();log3("Fetch everything operation completed. Vault files will be gradually synced.",LOG_LEVEL_NOTICE);return!0})};return{priority:10,check:()=>isFlagActive(),handle:async()=>!!await onScheduled()&&await verifyAndUnlockSuspension(host)}}async function adjustSettingToRemote(host,log3,config){let canProceed=!1;do{const remoteTweaks=await host.services.tweakValue.fetchRemotePreferred(config);if(remoteTweaks){const necessary=extractObject(TweakValuesShouldMatchedTemplate,remoteTweaks),differentItems=Object.entries(necessary).filter(([key3,value])=>config[key3]!==value);0===differentItems.length?log3("Remote configuration matches local configuration. No changes applied.",LOG_LEVEL_NOTICE):await host.services.UI.confirm.askSelectStringDialogue("Your settings differed slightly from the server's. The plug-in has supplemented the incompatible parts with the server settings!",["OK"],{defaultAction:"OK",timeout:0});config={...config,...Object.fromEntries(differentItems)};await host.services.setting.applyExternalSettings(config,!0);log3("Remote configuration applied.",LOG_LEVEL_NOTICE);canProceed=!0;return host.services.setting.currentSettings()}"Skip and proceed"===await host.services.UI.confirm.askSelectStringDialogue("Could not fetch configuration from remote. If you are new to the Self-hosted LiveSync, this might be expected. If not, you should check your network or server settings.",["Skip and proceed","Retry (recommended)"],{defaultAction:"Retry (recommended)",timeout:0,title:"Fetch Remote Configuration Failed"})&&(canProceed=!0)}while(!canProceed)}async function adjustSettingToRemoteIfNeeded(host,log3,extra,config){extra&&extra.preventFetchingConfig||(await adjustSettingToRemote(host,log3,config)?config=host.services.setting.currentSettings():log3("Remote configuration not applied.",LOG_LEVEL_NOTICE))}async function processVaultInitialisation(host,log3,proc,keepSuspending=!1){try{await host.services.setting.applyPartial({batchSave:!1},!1);await host.services.setting.suspendAllSync();await host.services.setting.suspendExtraSync();await host.services.setting.applyPartial({suspendFileWatching:!0},!0);try{return await proc()}catch(ex){log3("Error during vault initialisation process.",LOG_LEVEL_NOTICE);log3(ex,LOG_LEVEL_VERBOSE);return!1}}catch(ex){log3("Error during vault initialisation.",LOG_LEVEL_NOTICE);log3(ex,LOG_LEVEL_VERBOSE);return!1}finally{keepSuspending||await host.services.setting.applyPartial({suspendFileWatching:!1},!0)}}async function verifyAndUnlockSuspension(host,log3){if(!host.services.setting.currentSettings().suspendFileWatching)return!0;if("yes"!=await host.services.UI.confirm.askYesNoDialog("Do you want to resume file and database processing, and restart obsidian now?",{defaultOption:"Yes",timeout:15}))return!0;await host.services.setting.applyPartial({suspendFileWatching:!1},!0);host.services.appLifecycle.performRestart();return!1}function createRebuildFlagHandler(host,log3){const isFlagActive=async()=>await isFlagFileExist(host,FlagFilesOriginal_REBUILD_ALL)||await isFlagFileExist(host,FlagFilesHumanReadable_REBUILD_ALL),cleanupFlag=async()=>{await deleteFlagFile(host,log3,FlagFilesOriginal_REBUILD_ALL);await deleteFlagFile(host,log3,FlagFilesHumanReadable_REBUILD_ALL)},onScheduled=async()=>{const method=await host.services.UI.dialogManager.openWithExplicitCancel(RebuildEverything);if("cancelled"===method){log3("Rebuild everything cancelled by user.",LOG_LEVEL_NOTICE);await cleanupFlag();host.services.appLifecycle.performRestart();return!1}const{extra}=method,settings=host.services.setting.currentSettings();await adjustSettingToRemoteIfNeeded(host,log3,extra,settings);return await processVaultInitialisation(host,log3,async()=>{await host.serviceModules.rebuilder.$rebuildEverything();await cleanupFlag();log3("Rebuild everything operation completed.",LOG_LEVEL_NOTICE);return!0})};return{priority:20,check:()=>isFlagActive(),handle:async()=>!!await onScheduled()&&await verifyAndUnlockSuspension(host)}}function createSuspendFlagHandler(host,log3){const isFlagActive=async()=>await isFlagFileExist(host,FlagFilesOriginal_SUSPEND_ALL),onScheduled=async()=>{log3("SCRAM is detected. All operations are suspended.",LOG_LEVEL_NOTICE);return await processVaultInitialisation(host,log3,async()=>{log3("All operations are suspended as per SCRAM.\nLogs will be written to the file. This might be a performance impact.",LOG_LEVEL_NOTICE);await host.services.setting.applyPartial({writeLogToTheFile:!0},!0);return Promise.resolve(!1)},!0)};return{priority:5,check:()=>isFlagActive(),handle:()=>onScheduled()}}function flagHandlerToEventHandler(flagHandler){return async()=>!await flagHandler.check()||await flagHandler.handle()}function useRedFlagFeatures(host){const log3=createInstanceLogFunction("SF:RedFlag",host.services.API),handlerFetch=createFetchAllFlagHandler(host,log3),handlerRebuild=createRebuildFlagHandler(host,log3),handlerSuspend=createSuspendFlagHandler(host,log3);host.services.appLifecycle.onLayoutReady.addHandler(flagHandlerToEventHandler(handlerFetch),handlerFetch.priority);host.services.appLifecycle.onLayoutReady.addHandler(flagHandlerToEventHandler(handlerRebuild),handlerRebuild.priority);host.services.appLifecycle.onLayoutReady.addHandler(flagHandlerToEventHandler(handlerSuspend),handlerSuspend.priority)}async function handleSetupProtocol(setupManager,conf){conf.settings?await setupManager.onUseSetupURI("unknown",`${configURIBase}${encodeURIComponent(conf.settings)}`):conf.settingsQR&&await setupManager.decodeQR(conf.settingsQR)}function registerSetupProtocolHandler(host,log3,setupManager){try{host.services.API.registerProtocolHandler("setuplivesync",async conf=>{await handleSetupProtocol(setupManager,conf)})}catch(e3){log3("Failed to register protocol handler. This feature may not work in some environments.",LOG_LEVEL_NOTICE);log3(e3,LOG_LEVEL_VERBOSE)}}function useSetupProtocolFeature(host,setupManager){const log3=createInstanceLogFunction("SF:SetupProtocol",host.services.API);host.services.appLifecycle.onLoaded.addHandler(()=>{registerSetupProtocolHandler(host,log3,setupManager);return Promise.resolve(!0)})}async function encodeSetupSettingsAsQR(host){const codeSVG=encodeQR(encodeSettingsToQRCodeData(host.services.setting.currentSettings()),0);if(""===codeSVG)return"";const msg=$msg("Setup.QRCode",{qr_image:codeSVG});await host.services.UI.confirm.confirmWithMessage("Settings QR Code",msg,["OK"],"OK");return codeSVG}function useSetupQRCodeFeature(host){host.services.appLifecycle.onLoaded.addHandler(()=>{host.services.API.addCommand({id:"livesync-setting-qr",name:"Show settings as a QR code",callback:()=>fireAndForget(encodeSetupSettingsAsQR(host))});eventHub.onEvent(EVENT_REQUEST_SHOW_SETUP_QR,()=>fireAndForget(()=>encodeSetupSettingsAsQR(host)));return Promise.resolve(!0)})}async function askEncryptingPassphrase(host){return await host.services.UI.confirm.askString("Encrypt your settings","The passphrase to encrypt the setup URI","",!0)}async function copySetupURI(host,log3,stripExtra=!0){const encryptingPassphrase=await askEncryptingPassphrase(host);if(!1===encryptingPassphrase)return;const encryptedURI=await encodeSettingsToSetupURI(host.services.setting.currentSettings(),encryptingPassphrase,[...stripExtra?["pluginSyncExtendedSetting"]:[]],!0);await host.services.UI.promptCopyToClipboard("Setup URI",encryptedURI)&&log3("Setup URI copied to clipboard",LOG_LEVEL_NOTICE)}async function copySetupURIFull(host,log3){const encryptingPassphrase=await askEncryptingPassphrase(host);if(!1===encryptingPassphrase)return;const encryptedURI=await encodeSettingsToSetupURI(host.services.setting.currentSettings(),encryptingPassphrase,[],!1);await host.services.UI.promptCopyToClipboard("Setup URI",encryptedURI)&&log3("Setup URI copied to clipboard",LOG_LEVEL_NOTICE)}function useSetupURIFeature(host){const log3=createInstanceLogFunction("SF:SetupURI",host.services.API);host.services.appLifecycle.onLoaded.addHandler(()=>{host.services.API.addCommand({id:"livesync-copysetupuri",name:"Copy settings as a new setup URI",callback:()=>fireAndForget(copySetupURI(host,log3))});host.services.API.addCommand({id:"livesync-copysetupuri-short",name:"Copy settings as a new setup URI (With customization sync)",callback:()=>fireAndForget(copySetupURI(host,log3,!1))});host.services.API.addCommand({id:"livesync-copysetupurifull",name:"Copy settings as a new setup URI (Full)",callback:()=>fireAndForget(copySetupURIFull(host,log3))});eventHub.onEvent(EVENT_REQUEST_COPY_SETUP_URI,()=>fireAndForget(()=>copySetupURI(host,log3)));return Promise.resolve(!0)})}async function openSetupURI(setupManager){await setupManager.onUseSetupURI("unknown")}async function openP2PSettings(host,setupManager){return await setupManager.onP2PManualSetup("unknown",host.services.setting.currentSettings(),!1)}function useSetupManagerHandlersFeature(host,setupManager){host.services.appLifecycle.onLoaded.addHandler(()=>{host.services.API.addCommand({id:"livesync-opensetupuri",name:"Use the copied setup URI (Formerly Open setup URI)",callback:()=>fireAndForget(openSetupURI(setupManager))});eventHub.onEvent(EVENT_REQUEST_OPEN_SETUP_URI,()=>fireAndForget(()=>openSetupURI(setupManager)));eventHub.onEvent(EVENT_REQUEST_OPEN_P2P_SETTINGS,()=>fireAndForget(()=>openP2PSettings(host,setupManager)));return Promise.resolve(!0)})}function addP2PEventHandlers(instance){eventHub.onEvent(EVENT_ADVERTISEMENT_RECEIVED,peer=>{instance.onNewPeer(peer)});eventHub.onEvent(EVENT_DEVICE_LEAVED,peerId=>{instance.onPeerLeaved(peerId)});eventHub.onEvent(EVENT_REQUEST_STATUS,()=>{instance.requestStatus()});eventHub.onEvent(EVENT_DATABASE_REBUILT,async()=>{await instance.open()});eventHub.onEvent(EVENT_PLATFORM_UNLOADED,()=>{instance.close()});eventHub.onEvent(EVENT_SETTING_SAVED,async _settings=>{await instance.open()})}function useP2PReplicatorFeature(host){let replicator=new LiveSyncTrysteroReplicator({services:host.services});const activeReplicator={get replicator(){return replicator}};addP2PEventHandlers(activeReplicator.replicator);host.services.replicator.getNewReplicator.addHandler(async(settingOverride={})=>{if({...host.services.setting.currentSettings(),...settingOverride}.remoteType==REMOTE_P2P){const existingReplicator=replicator;try{await(null==existingReplicator?void 0:existingReplicator.close())}catch(e3){Logger("Error closing existing p2p replicator");Logger(e3,LOG_LEVEL_VERBOSE)}const newReplicator=new LiveSyncTrysteroReplicator({services:host.services});replicator=newReplicator;return replicator}});host.services.appLifecycle.onUnload.addHandler(async()=>{await(null==replicator?void 0:replicator.close());return!0});host.services.appLifecycle.onSuspending.addHandler(async()=>{await(null==replicator?void 0:replicator.close());return!0});host.services.databaseEvents.onDatabaseInitialisation.addHandler(async()=>{await(null==replicator?void 0:replicator.close());return!0});host.services.appLifecycle.onResumed.addHandler(()=>{const settings=host.services.setting.currentSettings();settings.P2P_Enabled&&settings.P2P_AutoStart&&setTimeout(()=>{null==replicator||replicator.open()},100);return Promise.resolve(!0)});host.services.setting.suspendExtraSync.addHandler(()=>{const s2=host.services.setting.currentSettings();s2.P2P_Enabled=!1;s2.P2P_AutoAccepting=0;s2.P2P_AutoBroadcast=!1;s2.P2P_AutoStart=!1;s2.P2P_AutoSyncPeers="";s2.P2P_AutoWatchPeers="";return Promise.resolve(!0)});return activeReplicator}function useP2PReplicatorCommands(host,{replicator}){host.services.API.addCommand({id:"p2p-establish-connection",name:"P2P Sync : Connect to the Signalling Server",checkCallback:isChecking=>{var _a8,_b5;if(!replicator)return!1;if(isChecking)return!(null!=(_b5=null==(_a8=replicator.server)?void 0:_a8.isServing)&&_b5);replicator.open()}});host.services.API.addCommand({id:"p2p-close-connection",name:"P2P Sync : Disconnect from the Signalling Server",checkCallback:isChecking=>{var _a8,_b5;if(!replicator)return!1;if(isChecking)return null!=(_b5=null==(_a8=replicator.server)?void 0:_a8.isServing)&&_b5;Logger("Closing P2P Connection",LOG_LEVEL_NOTICE);replicator.close()}});host.services.API.addCommand({id:"replicate-now-by-p2p",name:"Replicate now by P2P",checkCallback:isChecking=>{var _a8,_b5;if(!replicator)return!1;const settings=host.services.setting.currentSettings();if(isChecking)return settings.remoteType!=REMOTE_P2P&&null!=(_b5=null==(_a8=replicator.server)?void 0:_a8.isServing)&&_b5;replicator.replicateFromCommand(!1)}});host.services.API.addCommand({id:"force-replicate-now-by-p2p",name:"P2P Sync: Select peer to replicate with",checkCallback:isChecking=>{var _a8,_b5,_c3;if(!replicator)return!1;const settings=host.services.setting.currentSettings();if(isChecking)return settings.remoteType!=REMOTE_P2P&&null!=(_b5=null==(_a8=replicator.server)?void 0:_a8.isServing)&&_b5;null==(_c3=replicator.rawReplicator)||_c3.replicateTo()}})}function startWatching(_,replicator,peer){null==replicator||replicator.watchPeer(get(peer).peerId)}function stopWatching(__1,replicator,peer){null==replicator||replicator.unwatchPeer(get(peer).peerId)}function sync2(__2,replicator,peer){null==replicator||replicator.sync(get(peer).peerId,!1)}function moreMenu(evt,peer){eventHub.emitEvent(EVENT_P2P_PEER_SHOW_EXTRA_MENU,{peer:get(peer),event:evt})}function PeerStatusRow($$anchor,$$props){function select(d4,cond,def){return d4 in cond?cond[d4]:def}function makeDecision(isAccepted3,isTemporary){replicator.makeDecision({peerId:get(peer).peerId,name:get(peer).name,decision:isAccepted3,isTemporary})}function revokeDecision(){replicator.revokeDecision({peerId:get(peer).peerId,name:get(peer).name})}var tr,td3,div,div_1,span,text2,div_2,span_1,text_1,div_3,div_4,span_2,text_2,node,consequent,div_6,td_1,div_7,div_8,node_1,consequent_3,alternate,td_2,node_4,consequent_5;push($$props,!0);append_styles($$anchor,$$css16);let peer=user_derived(()=>$$props.peerStatus),statusChips=user_derived(()=>[get(peer).isWatching?["WATCHING"]:[],get(peer).isFetching?["FETCHING"]:[],get(peer).isSending?["SENDING"]:[]].flat()),acceptedStatusChip=user_derived(()=>select(get(peer).accepted.toString(),{["Accepted"]:"ACCEPTED",["Accepted in session"]:"ACCEPTED (in session)",["Denied in session"]:"DENIED (in session)",["Denied"]:"DENIED",["Unknown"]:"NEW"},""));const classList={["SENDING"]:"connected",["FETCHING"]:"connected",["WATCHING"]:"connected-live",["WAITING"]:"waiting",["ACCEPTED"]:"accepted",["DENIED"]:"denied",["NEW"]:"unknown"};let isAccepted2=user_derived(()=>"Accepted"===get(peer).accepted||"Accepted in session"===get(peer).accepted),isDenied=user_derived(()=>"Denied"===get(peer).accepted||"Denied in session"===get(peer).accepted),isNew=user_derived(()=>"Unknown"===get(peer).accepted);const replicator=getContext("getReplicator")(),peerAttrLabels=user_derived(()=>{const attrs=[];get(peer).syncOnConnect&&attrs.push("✔ SYNC");get(peer).watchOnConnect&&attrs.push("✔ WATCH");get(peer).syncOnReplicationCommand&&attrs.push("✔ SELECT");return attrs});td3=child(tr=root38());div=child(td3);div_1=child(div);span=child(div_1);text2=child(span,!0);reset(span);reset(div_1);span_1=child(div_2=sibling(div_1,2));text_1=child(span_1);reset(span_1);reset(div_2);reset(div);div_4=child(div_3=sibling(div,2));span_2=child(div_4);text_2=child(span_2,!0);reset(span_2);reset(div_4);node=sibling(div_4,2);consequent=$$anchor2=>{var div_5=root_130();each(div_5,21,()=>get(statusChips),index,($$anchor3,chip)=>{var span_3=root_220(),text_3=child(span_3,!0);reset(span_3);template_effect($0=>{set_class(span_3,1,`chip ${null!=$0?$0:""}`,"svelte-8nqxsr");set_text(text_3,get(chip))},[()=>select(get(chip),classList)]);append($$anchor3,span_3)});reset(div_5);append($$anchor2,div_5)};if_block(node,$$render=>{get(isAccepted2)&&$$render(consequent)});each(div_6=sibling(node,2),21,()=>get(peerAttrLabels),index,($$anchor2,attr2)=>{var span_4=root_39(),text_4=child(span_4,!0);reset(span_4);template_effect(()=>set_text(text_4,get(attr2)));append($$anchor2,span_4)});reset(div_6);reset(div_3);reset(td3);div_7=child(td_1=sibling(td3));div_8=child(div_7);node_1=child(div_8);consequent_3=$$anchor2=>{var node_3,consequent_2,fragment=root_415(),node_2=first_child(fragment),consequent_1=$$anchor3=>{var fragment_1=root_56(),button=first_child(fragment_1);button.__click=[on_click5,makeDecision];sibling(button,2).__click=[on_click_12,makeDecision];append($$anchor3,fragment_1)};if_block(node_2,$$render=>{get(isAccepted2)||$$render(consequent_1)});node_3=sibling(node_2,2);consequent_2=$$anchor3=>{var fragment_2=root_68(),button_2=first_child(fragment_2);button_2.__click=[on_click_2,makeDecision];sibling(button_2,2).__click=[on_click_3,makeDecision];append($$anchor3,fragment_2)};if_block(node_3,$$render=>{get(isDenied)||$$render(consequent_2)});append($$anchor2,fragment)};alternate=$$anchor2=>{var button_4=root_710();button_4.__click=[on_click_4,revokeDecision];append($$anchor2,button_4)};if_block(node_1,$$render=>{get(isNew)?$$render(consequent_3):$$render(alternate,!1)});reset(div_8);reset(div_7);reset(td_1);node_4=child(td_2=sibling(td_1));consequent_5=$$anchor2=>{var node_5,consequent_4,alternate_1,div_9=root_811(),div_10=child(div_9),button_5=child(div_10);button_5.__click=[sync2,replicator,peer];node_5=sibling(button_5,2);consequent_4=$$anchor3=>{var button_6=root_96();button_6.__click=[stopWatching,replicator,peer];append($$anchor3,button_6)};alternate_1=$$anchor3=>{var button_7=root_106();button_7.__click=[startWatching,replicator,peer];append($$anchor3,button_7)};if_block(node_5,$$render=>{get(peer).isWatching?$$render(consequent_4):$$render(alternate_1,!1)});sibling(node_5,2).__click=[moreMenu,peer];reset(div_10);reset(div_9);template_effect(()=>button_5.disabled=get(peer).isSending||get(peer).isFetching);append($$anchor2,div_9)};if_block(node_4,$$render=>{get(isAccepted2)&&$$render(consequent_5)});reset(td_2);reset(tr);template_effect($0=>{var _a8;set_text(text2,get(peer).name);set_text(text_1,`(${null!=(_a8=get(peer).peerId)?_a8:""})`);set_class(span_2,1,`chip ${null!=$0?$0:""}`,"svelte-8nqxsr");set_text(text_2,get(acceptedStatusChip))},[()=>select(get(acceptedStatusChip),classList)]);append($$anchor,tr);pop()}async function saveAndApply(_,$$props,eP2PEnabled,eRelay,eRoomId,ePassword,eAppId,eAutoAccept,eAutoStart,eAutoBroadcast,eDeviceName,deviceName){await $$props.core.services.setting.applyPartial({P2P_Enabled:get(eP2PEnabled),P2P_relays:get(eRelay),P2P_roomID:get(eRoomId),P2P_passphrase:get(ePassword),P2P_AppID:get(eAppId),P2P_AutoAccepting:get(eAutoAccept)?1:0,P2P_AutoStart:get(eAutoStart),P2P_AutoBroadcast:get(eAutoBroadcast)},!0);$$props.core.services.config.setSmallConfig(SETTING_KEY_P2P_DEVICE_NAME,get(eDeviceName));set(deviceName,get(eDeviceName),!0)}async function revert(__1,eP2PEnabled,settings,eRelay,eRoomId,ePassword,eAppId,eAutoAccept,eAutoStart,eAutoBroadcast){set(eP2PEnabled,get(settings).P2P_Enabled,!0);set(eRelay,get(settings).P2P_relays,!0);set(eRoomId,get(settings).P2P_roomID,!0);set(ePassword,get(settings).P2P_passphrase,!0);set(eAppId,get(settings).P2P_AppID,!0);set(eAutoAccept,1==get(settings).P2P_AutoAccepting);set(eAutoStart,get(settings).P2P_AutoStart,!0);set(eAutoBroadcast,get(settings).P2P_AutoBroadcast,!0)}async function openServer(__2,$$props){await $$props.cmdSync.open()}function startBroadcasting(__3,$$props){$$props.cmdSync.enableBroadcastChanges()}function stopBroadcasting(__4,$$props){$$props.cmdSync.disableBroadcastChanges()}function P2PReplicatorPane($$anchor,$$props){function useDefaultRelay(){set(eRelay,DEFAULT_SETTINGS.P2P_relays,!0)}function _generateRandom(){return(Math.floor(1e3*Math.random())+1e3).toString().substring(1)}function generateRandom(length){let buf="";for(;buf.length<length;)buf+="-"+_generateRandom();return buf.substring(1,length)}function chooseRandom(){set(eRoomId,generateRandom(12)+"-"+Math.random().toString(36).substring(2,5))}async function closeServer(){await $$props.cmdSync.close()}var _a8,_b5,article,details,summary,text2,p2,text_1,p_1,text_2,node_1,consequent,alternate,div,div_1,node_2,consequent_1,alternate_1,div_2,node_3,consequent_2,alternate_3,div_3,table_1,tbody_1;push($$props,!0);append_styles($$anchor,$$css17);setContext("getReplicator",()=>$$props.cmdSync);const currentSettings=()=>$$props.core.services.setting.currentSettings(),initialSettings={...currentSettings()};let settings=state(proxy(initialSettings)),deviceName=state(""),eP2PEnabled=state(proxy(initialSettings.P2P_Enabled)),eRelay=state(proxy(initialSettings.P2P_relays)),eRoomId=state(proxy(initialSettings.P2P_roomID)),ePassword=state(proxy(initialSettings.P2P_passphrase)),eAppId=state(proxy(initialSettings.P2P_AppID)),eDeviceName=state(""),eAutoAccept=state(1==initialSettings.P2P_AutoAccepting),eAutoStart=state(proxy(initialSettings.P2P_AutoStart)),eAutoBroadcast=state(proxy(initialSettings.P2P_AutoBroadcast));const isP2PEnabledModified=user_derived(()=>get(eP2PEnabled)!==get(settings).P2P_Enabled),isRelayModified=user_derived(()=>get(eRelay)!==get(settings).P2P_relays),isRoomIdModified=user_derived(()=>get(eRoomId)!==get(settings).P2P_roomID),isPasswordModified=user_derived(()=>get(ePassword)!==get(settings).P2P_passphrase),isAppIdModified=user_derived(()=>get(eAppId)!==get(settings).P2P_AppID),isDeviceNameModified=user_derived(()=>get(eDeviceName)!==get(deviceName)),isAutoAcceptModified=user_derived(()=>get(eAutoAccept)!==(1==get(settings).P2P_AutoAccepting)),isAutoStartModified=user_derived(()=>get(eAutoStart)!==get(settings).P2P_AutoStart),isAutoBroadcastModified=user_derived(()=>get(eAutoBroadcast)!==get(settings).P2P_AutoBroadcast),isAnyModified=user_derived(()=>get(isP2PEnabledModified)||get(isRelayModified)||get(isRoomIdModified)||get(isPasswordModified)||get(isAppIdModified)||get(isDeviceNameModified)||get(isAutoAcceptModified)||get(isAutoStartModified)||get(isAutoBroadcastModified));let serverInfo=state(void 0),replicatorInfo=state(void 0);const applyLoadSettings=(d4,force)=>{var _a9;if(force){const initDeviceName=null!==(_a9=$$props.core.services.config.getSmallConfig(SETTING_KEY_P2P_DEVICE_NAME))&&void 0!==_a9?_a9:$$props.core.services.vault.getVaultName();set(deviceName,initDeviceName,!0);set(eDeviceName,initDeviceName,!0)}const{P2P_relays,P2P_roomID,P2P_passphrase,P2P_AppID,P2P_AutoAccepting}=d4;!force&&get(isP2PEnabledModified)||set(eP2PEnabled,d4.P2P_Enabled,!0);!force&&get(isRelayModified)||set(eRelay,P2P_relays,!0);!force&&get(isRoomIdModified)||set(eRoomId,P2P_roomID,!0);!force&&get(isPasswordModified)||set(ePassword,P2P_passphrase,!0);!force&&get(isAppIdModified)||set(eAppId,P2P_AppID,!0);const newAutoAccept=1===P2P_AutoAccepting;!force&&get(isAutoAcceptModified)||set(eAutoAccept,newAutoAccept);!force&&get(isAutoStartModified)||set(eAutoStart,d4.P2P_AutoStart,!0);!force&&get(isAutoBroadcastModified)||set(eAutoBroadcast,d4.P2P_AutoBroadcast,!0);set(settings,d4,!0)};onMount(()=>{const r4=eventHub.onEvent("setting-saved",async d4=>{applyLoadSettings(d4,!1);closeServer()}),r22=(eventHub.onEvent(EVENT_LAYOUT_READY,()=>{applyLoadSettings(currentSettings(),!0)}),eventHub.onEvent(EVENT_SERVER_STATUS,status=>{var _a9;set(serverInfo,status,!0);set(advertisements,null!==(_a9=null==status?void 0:status.knownAdvertisements)&&void 0!==_a9?_a9:[],!0)})),r32=eventHub.onEvent(EVENT_P2P_REPLICATOR_STATUS,status=>{set(replicatorInfo,status,!0)});eventHub.emitEvent(EVENT_REQUEST_STATUS);return()=>{r4();r22();r32()}});let isConnected=user_derived(()=>{var _a9;return null!==(_a9=null===get(serverInfo)||void 0===get(serverInfo)?void 0:get(serverInfo).isConnected)&&void 0!==_a9&&_a9}),serverPeerId=user_derived(()=>{var _a9;return null!==(_a9=null===get(serverInfo)||void 0===get(serverInfo)?void 0:get(serverInfo).serverPeerId)&&void 0!==_a9?_a9:""}),advertisements=state(proxy([])),autoSyncPeers=user_derived(()=>get(settings).P2P_AutoSyncPeers.split(",").map(e3=>e3.trim()).filter(e3=>e3)),autoWatchPeers=user_derived(()=>get(settings).P2P_AutoWatchPeers.split(",").map(e3=>e3.trim()).filter(e3=>e3)),syncOnCommand=user_derived(()=>get(settings).P2P_SyncOnReplication.split(",").map(e3=>e3.trim()).filter(e3=>e3));const peers=user_derived(()=>get(advertisements).map(ad2=>{let accepted;const isTemporaryAccepted=ad2.isTemporaryAccepted;accepted=void 0===isTemporaryAccepted?void 0===ad2.isAccepted?"Unknown":ad2.isAccepted?"Accepted":"Denied":!0===isTemporaryAccepted?"Accepted in session":"Denied in session";const isFetching=-1!==(null===get(replicatorInfo)||void 0===get(replicatorInfo)?void 0:get(replicatorInfo).replicatingFrom.indexOf(ad2.peerId)),isSending=-1!==(null===get(replicatorInfo)||void 0===get(replicatorInfo)?void 0:get(replicatorInfo).replicatingTo.indexOf(ad2.peerId)),isWatching=-1!==(null===get(replicatorInfo)||void 0===get(replicatorInfo)?void 0:get(replicatorInfo).watchingPeers.indexOf(ad2.peerId)),syncOnStart=-1!==get(autoSyncPeers).indexOf(ad2.name),watchOnStart=-1!==get(autoWatchPeers).indexOf(ad2.name),syncOnReplicationCommand=-1!==get(syncOnCommand).indexOf(ad2.name);return{name:ad2.name,peerId:ad2.peerId,accepted,status:ad2.isAccepted?"Connected":"Disconnected",isSending,isFetching,isWatching,syncOnConnect:syncOnStart,watchOnConnect:watchOnStart,syncOnReplicationCommand}})),initialDialogStatus=(()=>{var _a9;try{return JSON.parse(null!==(_a9=$$props.core.services.config.getSmallConfig("p2p-dialog-status"))&&void 0!==_a9?_a9:"{}")}catch(e3){return{}}})();let isNoticeOpened=state(proxy(null===(_a8=initialDialogStatus.notice)||void 0===_a8||_a8)),isSettingOpened=state(proxy(null===(_b5=initialDialogStatus.setting)||void 0===_b5||_b5));user_effect(()=>{const dialogStatus={notice:get(isNoticeOpened),setting:get(isSettingOpened)};$$props.core.services.config.setSmallConfig("p2p-dialog-status",JSON.stringify(dialogStatus))});let isObsidian=user_derived(()=>"obsidian"===$$props.core.services.API.getPlatform());details=sibling(child(article=root39()),2);summary=child(details);text2=child(summary,!0);reset(summary);p2=sibling(summary,2);text_1=child(p2,!0);reset(p2);p_1=sibling(p2,2);text_2=child(p_1,!0);reset(p_1);each(sibling(p_1,2),17,()=>$msg("P2P.Note.description").split("\n\n"),index,($$anchor2,paragraph)=>{var p_2=root_131(),text_3=child(p_2,!0);reset(p_2);template_effect(()=>set_text(text_3,get(paragraph)));append($$anchor2,p_2)});reset(details);node_1=sibling(details,4);consequent=$$anchor2=>{append($$anchor2,text("You can configure in the Obsidian Plugin Settings."))};alternate=$$anchor2=>{var table2,tbody,tr,td3,label2,input,tr_1,td_1,label_1,input_1,tr_2,td_2,label_2,input_2,tr_3,td_3,label_3,input_3,tr_4,td_4,label_4,input_4,tr_5,td_5,label_5,input_5,tr_6,td_6,label_6,input_6,button_2,button_3,details_1=root_310(),summary_1=child(details_1),text_5=child(summary_1,!0);reset(summary_1);tbody=child(table2=sibling(summary_1,2));tr=child(tbody);td3=sibling(child(tr));label2=child(td3);remove_input_defaults(input=child(label2));reset(label2);reset(td3);reset(tr);tr_1=sibling(tr);td_1=sibling(child(tr_1));label_1=child(td_1);remove_input_defaults(input_1=child(label_1));sibling(input_1,2).__click=[on_click6,useDefaultRelay];reset(label_1);reset(td_1);reset(tr_1);tr_2=sibling(tr_1);td_2=sibling(child(tr_2));label_2=child(td_2);remove_input_defaults(input_2=child(label_2));sibling(input_2,2).__click=[on_click_13,chooseRandom];reset(label_2);next(2);reset(td_2);reset(tr_2);tr_3=sibling(tr_2);td_3=sibling(child(tr_3));label_3=child(td_3);remove_input_defaults(input_3=child(label_3));reset(label_3);next(2);reset(td_3);reset(tr_3);tr_4=sibling(tr_3);td_4=sibling(child(tr_4));label_4=child(td_4);remove_input_defaults(input_4=child(label_4));reset(label_4);next(2);reset(td_4);reset(tr_4);tr_5=sibling(tr_4);td_5=sibling(child(tr_5));label_5=child(td_5);remove_input_defaults(input_5=child(label_5));reset(label_5);reset(td_5);reset(tr_5);tr_6=sibling(tr_5);td_6=sibling(child(tr_6));label_6=child(td_6);remove_input_defaults(input_6=child(label_6));reset(label_6);reset(td_6);reset(tr_6);reset(tbody);reset(table2);(button_2=sibling(table2,2)).__click=[saveAndApply,$$props,eP2PEnabled,eRelay,eRoomId,ePassword,eAppId,eAutoAccept,eAutoStart,eAutoBroadcast,eDeviceName,deviceName];(button_3=sibling(button_2,2)).__click=[revert,eP2PEnabled,settings,eRelay,eRoomId,ePassword,eAppId,eAutoAccept,eAutoStart,eAutoBroadcast];reset(details_1);template_effect(()=>{set_text(text_5,get(eRelay));set_class(label2,1,clsx2({"is-dirty":get(isP2PEnabledModified)}),"svelte-2cmos");set_class(label_1,1,clsx2({"is-dirty":get(isRelayModified)}),"svelte-2cmos");set_class(label_2,1,clsx2({"is-dirty":get(isRoomIdModified)}),"svelte-2cmos");set_class(label_3,1,clsx2({"is-dirty":get(isPasswordModified)}),"svelte-2cmos");set_class(label_4,1,clsx2({"is-dirty":get(isDeviceNameModified)}),"svelte-2cmos");set_class(label_5,1,clsx2({"is-dirty":get(isAutoStartModified)}),"svelte-2cmos");set_class(label_6,1,clsx2({"is-dirty":get(isAutoBroadcastModified)}),"svelte-2cmos");button_2.disabled=!get(isAnyModified);button_3.disabled=!get(isAnyModified)});bind_checked(input,()=>get(eP2PEnabled),$$value=>set(eP2PEnabled,$$value));bind_value(input_1,()=>get(eRelay),$$value=>set(eRelay,$$value));bind_value(input_2,()=>get(eRoomId),$$value=>set(eRoomId,$$value));bind_value(input_3,()=>get(ePassword),$$value=>set(ePassword,$$value));bind_value(input_4,()=>get(eDeviceName),$$value=>set(eDeviceName,$$value));bind_checked(input_5,()=>get(eAutoStart),$$value=>set(eAutoStart,$$value));bind_checked(input_6,()=>get(eAutoBroadcast),$$value=>set(eAutoBroadcast,$$value));bind_property("open","toggle",details_1,$$value=>set(isSettingOpened,$$value),()=>get(isSettingOpened));append($$anchor2,details_1)};if_block(node_1,$$render=>{get(isObsidian)?$$render(consequent):$$render(alternate,!1)});div=sibling(node_1,2);div_1=sibling(child(div),2);node_2=child(div_1);consequent_1=$$anchor2=>{append($$anchor2,root_416())};alternate_1=$$anchor2=>{var p_4=root_57(),text_6=child(p_4);reset(p_4);template_effect(()=>{var _a9;return set_text(text_6,`Connected to Signaling Server (as Peer ID: ${null!=(_a9=get(serverPeerId))?_a9:""})`)});append($$anchor2,p_4)};if_block(node_2,$$render=>{get(isConnected)?$$render(alternate_1,!1):$$render(consequent_1)});reset(div_1);node_3=child(div_2=sibling(div_1,2));consequent_2=$$anchor2=>{var button_4=root_69();button_4.__click=[openServer,$$props];append($$anchor2,button_4)};alternate_3=$$anchor2=>{var node_4,consequent_4,fragment=root_711(),button_5=first_child(fragment);button_5.__click=closeServer;node_4=sibling(button_5,2);consequent_4=$$anchor3=>{var fragment_1=comment(),node_5=first_child(fragment_1),consequent_3=$$anchor4=>{var button_6=root_97();button_6.__click=[stopBroadcasting,$$props];append($$anchor4,button_6)},alternate_2=$$anchor4=>{var button_7=root_107();button_7.__click=[startBroadcasting,$$props];append($$anchor4,button_7)};if_block(node_5,$$render=>{var _a9;(null==(_a9=get(replicatorInfo))?void 0:_a9.isBroadcasting)?$$render(consequent_3):$$render(alternate_2,!1)});append($$anchor3,fragment_1)};if_block(node_4,$$render=>{var _a9;void 0!==(null==(_a9=get(replicatorInfo))?void 0:_a9.isBroadcasting)&&$$render(consequent_4)});next(2);append($$anchor2,fragment)};if_block(node_3,$$render=>{get(isConnected)?$$render(alternate_3,!1):$$render(consequent_2)});reset(div_2);reset(div);div_3=sibling(div,2);table_1=sibling(child(div_3),2);each(tbody_1=sibling(child(table_1)),21,()=>get(peers),index,($$anchor2,peer)=>{PeerStatusRow($$anchor2,{get peerStatus(){return get(peer)}})});reset(tbody_1);reset(table_1);reset(div_3);reset(article);template_effect(($0,$1,$2)=>{set_text(text2,$0);set_text(text_1,$1);set_text(text_2,$2)},[()=>$msg("P2P.Note.Summary"),()=>$msg("P2P.Note.important_note"),()=>$msg("P2P.Note.important_note_sub")]);bind_property("open","toggle",details,$$value=>set(isNoticeOpened,$$value),()=>get(isNoticeOpened));append($$anchor,article);pop()}function addToList(item,list){return unique(list.split(",").map(e3=>e3.trim()).concat(item).filter(p2=>p2)).join(",")}function removeFromList(item,list){return list.split(",").map(e3=>e3.trim()).filter(p2=>p2!==item).filter(p2=>p2).join(",")}function useP2PReplicatorUI(host,core,replicator){const getReplicator=()=>replicator.replicator,p2pLogCollector=new P2PLogCollector,storeP2PStatusLine=reactiveSource("");p2pLogCollector.p2pReplicationLine.onChanged(line=>{storeP2PStatusLine.value=line.value});const viewType=VIEW_TYPE_P2P,openPane=()=>host.services.API.showWindow(viewType);host.services.API.registerWindow(viewType,leaf=>new P2PReplicatorPaneView(leaf,core,{replicator:getReplicator(),p2pLogCollector,storeP2PStatusLine}));host.services.appLifecycle.onInitialise.addHandler(()=>{var _a8,_b5;eventHub.onEvent(EVENT_REQUEST_OPEN_P2P,()=>{openPane()});host.services.API.addCommand({id:"open-p2p-replicator",name:"P2P Sync : Open P2P Replicator",callback:()=>{openPane()}});null==(_b5=null==(_a8=host.services.API.addRibbonIcon("waypoints","P2P Replicator",()=>{openPane()}))?void 0:_a8.addClass)||_b5.call(_a8,"livesync-ribbon-replicate-p2p");return Promise.resolve(!0)});return{replicator:getReplicator(),p2pLogCollector,storeP2PStatusLine}}var fromUtf8,toUint8Array,toUtf8,EventStreamSerde,init_event_streams,require_events,require_spark_md5,require_vuvuzela,require_pouchdb_wrappers,require_transform_pouch,require_qrcode,main_exports,LOG_LEVEL_DEBUG,LOG_LEVEL_VERBOSE,LOG_LEVEL_INFO,LOG_LEVEL_NOTICE,LOG_KIND_ERROR,LEVEL_INFO,LEVEL_NOTICE,defaultLoggerEnv_minLogLevel,_logger,RESULT_TIMED_OUT,MILESTONE_DOCID,NODEINFO_DOCID,SYNCINFO_ID,CANCELLED,AUTO_MERGED,NOT_CONFLICTED,MISSING_OR_ERROR,LEAVE_TO_SUBSEQUENT,BASE_IS_NEW,TARGET_IS_NEW,EVEN,LEAF_WAIT_TIMEOUT,LEAF_WAIT_ONLY_REMOTE,LEAF_WAIT_TIMEOUT_SEQUENTIAL_REPLICATOR,IDPrefixes_Chunk,PREFIX_OBFUSCATED,PREFIX_ENCRYPTED_CHUNK,AutoAccepting,RemoteTypes_REMOTE_COUCHDB,RemoteTypes_REMOTE_MINIO,RemoteTypes_REMOTE_P2P,REMOTE_COUCHDB,REMOTE_MINIO,REMOTE_P2P,E2EEAlgorithmNames,E2EEAlgorithms,ChunkAlgorithmNames,MODE_SELECTIVE,MODE_AUTOMATIC,MODE_PAUSED,MODE_SHINY,NetworkWarningStyles_BANNER,NetworkWarningStyles_ICON,NetworkWarningStyles_HIDDEN,PREFERRED_BASE,PREFERRED_SETTING_CLOUDANT,PREFERRED_SETTING_SELF_HOSTED,PREFERRED_JOURNAL_SYNC,P2P_DEFAULT_SETTINGS,DEFAULT_SETTINGS,KeyIndexOfSettings,SETTING_KEY_P2P_DEVICE_NAME,configURIBase,configURIBaseQR,SuffixDatabaseName,ExtraSuffixIndexedDB,LEVEL_ADVANCED,LEVEL_POWER_USER,LEVEL_EDGE_CASE,configurationNames,DEFAULT_SYNC_PARAMETERS,TweakValuesShouldMatchedTemplate,IncompatibleChanges,CompatibleButLossyChanges,IncompatibleChangesInSpecificPattern,TweakValuesRecommendedTemplate,TweakValuesDefault,TweakValuesTemplate,DEVICE_ID_PREFERRED,PREFIXMD_LOGFILE,PREFIXMD_LOGFILE_UC,FlagFilesOriginal_SUSPEND_ALL,FlagFilesOriginal_REBUILD_ALL,FlagFilesOriginal_FETCH_ALL,FlagFilesHumanReadable_REBUILD_ALL,FlagFilesHumanReadable_FETCH_ALL,FLAGMD_REDFLAG,FLAGMD_REDFLAG2,FLAGMD_REDFLAG2_HR,FLAGMD_REDFLAG3,FLAGMD_REDFLAG3_HR,DEFAULT_REPLICATION_STATICS,import_obsidian,import_obsidian2,import_diff_match_patch,normalizePath,_a,FallbackWeakRef,prefixMapObject,decodePrefixMapObject,prefixMapNumber,decodePrefixMapNumber,ARRAY_MARKER,OBJECT_MARKER,decodeMapConstant,SYMBOL_A,SYMBOL_B,context,topologicalSortCache,_reactiveSourceId,delay,UNRESOLVED,polyfilledFunc,promiseWithResolvers,promiseWithResolver,noop,currentYieldingAnimationFrame,TIMED_OUT_SIGNAL,serializedMap,queueCount,waitingProcessMap,shareSerializedMap,skipDuplicatedMap,GENERIC_COMPATIBILITY_VALUE,GENERIC_COMPATIBILITY_SIGNAL,globalSlipBoard,tasks,intervals,waitingItems,LRUCache,balanced,maybeMatch,range,escSlash,escOpen,escClose,escComma,escPeriod,escSlashPattern,escOpenPattern,escClosePattern,escCommaPattern,escPeriodPattern,slashPattern,openPattern,closePattern,commaPattern,periodPattern,EXPANSION_MAX,assertValidPattern,posixClasses,braceEscape,regexpEscape,rangesToString,parseClass,unescape2,_root,_hasMagic,_uflag,_parts,_parent,_parentIndex,_negs,_filledNegs,_options,_toString,_emptyExt,_AST_instances,fillNegs_fn,_AST_static,parseAST_fn,canAdoptWithSpace_fn,canAdopt_fn,canAdoptType_fn,adoptWithSpace_fn,adopt_fn,canUsurpType_fn,canUsurp_fn,usurp_fn,flatten_fn,partsToRegExp_fn,parseGlob_fn,_a2,types,isExtglobType,isExtglobAST,adoptionMap,adoptionWithSpaceMap,adoptionAnyMap,usurpMap,addPatternStart,justDots,reSpecials,regExpEscape,ID,AST,escape,_Minimatch_instances,matchGlobstar_fn,matchGlobStarBodySections_fn,matchOne_fn,minimatch,starDotExtRE,starDotExtTest,starDotExtTestDot,starDotExtTestNocase,starDotExtTestNocaseDot,starDotStarRE,starDotStarTest,starDotStarTestDot,dotStarRE,dotStarTest,starRE,starTest,starTestDot,qmarksRE,qmarksTestNocase,qmarksTestNocaseDot,qmarksTestDot,qmarksTest,qmarksTestNoExt,qmarksTestNoExtDot,defaultPlatform,path_posix,sep,GLOBSTAR,filter,ext,defaults,braceExpand,makeRe,match,globMagic,regExpEscape2,Minimatch,webcrypto,isProposalArrayBufferBase64Available,base64ToArrayBuffer,arrayBufferToBase64Single,arrayBufferToBase64,QUANTUM,te,td,base64ToString,regexpBase64,tryConvertBase64ToArrayBuffer,table,revTable,revMap,numMap,isProposalArrayBufferBase64Available2,hexStringToUint8Array,uint8ArrayToHexString,_hashString,matchOpts,isValidRemoteCouchDBURI,_requestToCouchDBFetch,throttle,_a3,isIndexDBCmpExist,globalConcurrencyController,map,revMap2,previousValues,MARK_DELETED,MARK_ISARRAY,MARK_SWAPPED,CustomRegExp,resolution,collectingChunks,pluginScanningCount,hiddenFilesProcessingCount,hiddenFilesEventCount,logMessages,EventHub,eventHub,EVENT_LAYOUT_READY,EVENT_SETTING_SAVED,EVENT_DATABASE_REBUILT,EVENT_REQUEST_OPEN_SETUP_URI,EVENT_REQUEST_COPY_SETUP_URI,EVENT_REQUEST_SHOW_SETUP_QR,EVENT_REQUEST_OPEN_P2P_SETTINGS,EVENT_REQUEST_OPEN_P2P,EVENT_PLATFORM_UNLOADED,EVENT_ON_UNRESOLVED_ERROR,EVENT_REQUEST_CHECK_REMOTE_SIZE,EVENT_REQUEST_OPEN_SETUP_URI2,EVENT_REQUEST_COPY_SETUP_URI2,EVENT_REQUEST_SHOW_SETUP_QR2,EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG2,EVENT_REQUEST_RUN_DOCTOR,EVENT_REQUEST_RUN_FIX_INCOMPLETE,EVENT_ANALYSE_DB_USAGE,EVENT_REQUEST_PERFORM_GC_V3,MARK_LOG_SEPARATOR,MARK_LOG_NETWORK_ERROR,AbstractModule,AbstractObsidianModule,_a4,_b,_c,EACH_ITEM_REACTIVE,EACH_INDEX_REACTIVE,EACH_IS_CONTROLLED,EACH_IS_ANIMATED,EACH_ITEM_IMMUTABLE,PROPS_IS_IMMUTABLE,PROPS_IS_RUNES,PROPS_IS_UPDATED,PROPS_IS_BINDABLE,PROPS_IS_LAZY_INITIAL,TEMPLATE_FRAGMENT,TEMPLATE_USE_IMPORT_NODE,HYDRATION_START,HYDRATION_START_ELSE,HYDRATION_END,HYDRATION_ERROR,UNINITIALIZED,FILENAME,NAMESPACE_HTML,_a5,_b2,node_env,dev_fallback_default,is_array,index_of,array_from,define_property,get_descriptor,get_descriptors,object_prototype,array_prototype,get_prototype_of,is_extensible,noop2,DERIVED,EFFECT,RENDER_EFFECT,BLOCK_EFFECT,BRANCH_EFFECT,ROOT_EFFECT,BOUNDARY_EFFECT,UNOWNED,DISCONNECTED,CLEAN,DIRTY,MAYBE_DIRTY,INERT,DESTROYED,EFFECT_RAN,EFFECT_TRANSPARENT,INSPECT_EFFECT,HEAD_EFFECT,EFFECT_PRESERVED,USER_EFFECT,REACTION_IS_UPDATING,ASYNC,ERROR_VALUE,STATE_SYMBOL,LEGACY_PROPS,LOADING_ATTR_SYMBOL,PROXY_PATH_SYMBOL,STALE_REACTION,TEXT_NODE,COMMENT_NODE,bold,normal,hydrating,hydrate_node,async_mode_flag,legacy_mode_flag,tracing_mode_flag,tracing_expressions,component_context,dev_stack,dev_current_component_function,micro_tasks,adjustments,_previous,_callbacks,_pending,_deferred,_render_effects,_effects,_block_effects,_dirty_effects,_maybe_dirty_effects,_Batch_instances,traverse_effect_tree_fn,defer_effects_fn,commit_fn,batches,current_batch,previous_batch,batch_values,effect_pending_updates,queued_root_effects,last_scheduled_effect,is_flushing,is_flushing_sync,_Batch,Batch,eager_block_effects,_pending2,_anchor,_hydrate_open,_props,_children,_effect,_main_effect,_pending_effect,_failed_effect,_offscreen_fragment,_local_pending_count,_pending_count,_is_creating_fallback,_effect_pending,_effect_pending_update,_effect_pending_subscriber,_Boundary_instances,hydrate_resolved_content_fn,hydrate_pending_content_fn,run_fn,show_pending_snippet_fn,update_pending_count_fn,flags,Boundary,current_async_effect,recent_async_deriveds,stack,inspect_effects,old_values,inspect_effects_deferred,regex_is_valid_identifier,ARRAY_MUTATING_METHODS,$window,is_firefox,first_child_getter,next_sibling_getter,listening_to_form_reset,captured_signals,is_updating_effect,is_destroying_effect,active_reaction,untracking,active_effect,current_sources,new_deps,skipped_deps,untracked_writes,write_version,read_version,update_version,skip_reaction,STATUS_MASK,all_registered_events,root_event_handles,PASSIVE_EVENTS,document_listeners,mounted_components,_batches,_onscreen,_offscreen,_transition,_commit,BranchManager,all_styles,current_each_item,whitespace,IS_CUSTOM_ELEMENT,IS_HTML,setters_cache,pending2,_listeners,_observer,_options2,_ResizeObserverSingleton_instances,getObserver_fn,_ResizeObserverSingleton,subscriber_queue,is_store_binding,IS_UNMOUNTED,spread_props_handler,_allMessages,SUPPORTED_I18N_LANGS,expandedMessage,allMessages,currentLang,missingTranslations,__onMissingTranslations,msgCache,on_click,root_1,root,$$css,SvelteItemView,LogPaneView,secp256k1_CURVE,L,lengths,captureTrace,err,isBig,isStr,isBytes,abytes,u8n,padh,bytesToHex,_ch,hexToBytes,cr,subtle,concatBytes,randomBytes,big,arange,M,modN,invert,callHash,apoint,koblitz,FpIsValid,FpIsValidNot0,FnIsValidNot0,isEven,u8of,getPrefix,lift_x,_Point,Point,G,I,doubleScalarMulUns,bytesToNumBE,sliceBytesNumBE,B256,numTo32b,secretKeyToScalar,getPublicKey,assertSigFormat,SIG_COMPACT,SIG_RECOVERED,SIG_DER,ALL_SIG,hashes,randomSecretKey,createKeygen,getTag,taggedHash,taggedHashAsync,extpubSchnorr,bytesModN,challenge,challengeAsync,pubSchnorr,keygenSchnorr,prepSigSchnorr,extractK,createSigSchnorr,E_INVSIG,callSyncAsyncFn,_verifSchnorr,verifySchnorr,verifySchnorrAsync,schnorr,pwindows,precompute,Gpows,ctneg,wNAF,libName,alloc,genId,selfId,all,isBrowser,noOp,resetTimer,mkErr,toErrorMessage,toError,encoder,decoder,encodeBytes,decodeBytes,toHex,topicPath,shuffle,getRelays,toJson,fromJson,strToNum,socketRetryPeriods,reconnectionLockingPromise,resolver,pauseRelayReconnection,resumeRelayReconnection,makeSocket,createRelayManager,watchOnline,strToSha1,pack,unpack,hashWith,sha1,genKey,deriveRoomNamespace,encrypt,decrypt,OfferPool,overlapRoomPasswordErr,createPasswordHandshake,outOfRangePattern,rewriteMdnsCandidatesToLoopback,peer_default,defaultIceServers,TypedArray,progressIndex,payloadIndex,chunkSize,internalNs,beforeUnloadRoomCleanups,cleanupActiveRoomsOnBeforeUnload,registerBeforeUnloadCleanup,toByteArray,toHandshakeErrorMessage,waitForBufferedAmountLow,room_default,wrapRoomFrame,wrapRoomPresenceFrame,unwrapFrame,isPeerUnderlyingStale,getConnectedPeerHealth,SharedPeerManager,publishCipheredSignalingMessage,makeState,getState,updateStatus,clearAnswering,clearConnectedPeer,clearOfferRelay,clearOfferRelayIfPlaceholder,hasRemoteDescription,resetOfferState,scheduleAnsweringExpiry,flushBufferedCandidates,scheduleOfferExpiry,ensureOffer,handleAnnouncement,handleOffer,handleCandidate,handleAnswer,prunePendingOffer,createSignalHandler,announceWarmupIntervalsMs,strategy_default,relayManager,pubkey,subIdToTopic,msgHandlers,kindCache,now2,topicToKind,createEvent,subscribe,unsubscribe,joinRoom,getRelaySockets,defaultRelayUrls,ResponsePreventedError,DeviceDecisions,StoredMapLike,TrysteroReplicatorP2PClient,epochFNV1a,c1,c2,r1,r2,m,n,Computed,EVENT_SERVER_STATUS,EVENT_ADVERTISEMENT_RECEIVED,EVENT_DEVICE_LEAVED,EVENT_REQUEST_STATUS,EVENT_P2P_REPLICATOR_STATUS,TrysteroReplicatorP2PServer,P2PLogCollector,LiveSyncError,CHeader,PSCHeader,ICHeader,ICHeaderLength,ICXHeader,PersistentMap,sameChangePairs,BasicHeaderGenerator,JWTTokenGenerator,AuthorizationHeaderGenerator,memos,_requestToCouchDB,recentLogEntries,globalLogFunction,recentLogs,ModuleLog,noticeIndex,LiveSyncCommands,PeriodicProcessor,root_12,root_4,root_6,root_5,root_10,root_2,root2,$$css2,JsonResolveModal,PaceMaker,NOT_AVAILABLE,READY_PICK_SIGNAL,READY_POST_SIGNAL,DISPOSE_ERROR,SyncInbox,Inbox,ClerkState,SENTINEL_FINISHED,SENTINEL_FLUSH,ClerkBase,Clerk,ClerkGroup,Notifier,allRunningProcessors,QueueProcessor,HiddenFileSync,t,hashFunc,globalSlipBoard2,import_diff_match_patch2,ConflictResolveModal,root_3,root_62,root_7,root_8,root_42,root_9,root_11,root_122,root_22,root_13,root_132,$$css3,root_14,root_23,root_32,root_82,root_63,root_52,root_133,root_15,root_18,root_16,root_112,root_19,root_92,root_43,root_21,root_20,root3,$$css4,PluginDialogModal,d,d2,DUMMY_HEAD,DUMMY_END,pluginList,pluginIsEnumerating,pluginV2Progress,pluginManifests,pluginManifestStore,PluginDataExDisplayV2,ConfigSync,PREFIX_TRENCH,idx,series,indexes,inProgress,failed,Trench,measures,root_17,root4,$$css5,TestPaneView,ModuleDev,ModuleInteractiveConflictResolver,ModuleObsidianEvents,checkRemoteVersion,bumpRemoteVersion,checkSyncInfo,SELECTOR_COMPROMISED_CHUNK_1,SELECTOR_COMPROMISED_CHUNK_2,webcrypto2,SALT,previousPassphrase,encryptionKey,_nonceV3,bufV3,previousDecryptionPassphrase,decryptionKey,UNDEFINED,webcrypto3,IV_LENGTH,HKDF_SALT_LENGTH,PBKDF2_SALT_LENGTH,gcmTagLength,HKDF_ENCRYPTED_PREFIX,HKDF_SALTED_ENCRYPTED_PREFIX,deriveMasterKey,_sessionPBKDFSalt,webcrypto4,ENCRYPT_V1_PREFIX_PROBABLY,ENCRYPT_V2_PREFIX,ENCRYPT_V3_PREFIX,KeyBuffs,decKeyBuffs,KEY_RECYCLE_COUNT,semiStaticFieldBuffer,nonceBuffer,webcrypto5,keyGCCount,decKeyIdx,decKeyMin,SYMBOL_USED,SYMBOL_END_OF_DATA,workerStreams,writers,responseBuf,writerPromise,tasks2,workers,key2,roundRobinIdx,encrypt4,decrypt4,encryptHKDF,decryptHKDF,Encrypt_HKDF_Header,Encrypt_OLD_Header,EncryptionVersions_UNENCRYPTED,EncryptionVersions_ENCRYPTED,EncryptionVersions_HKDF,EncryptionVersions_UNKNOWN,ENCRYPTED_META_PREFIX,MESSAGE_FALLBACK_DECRYPT_FAILED,ENCRYPTION_HKDF_FAILED,DECRYPTION_HKDF_FAILED,DECRYPTION_FALLBACK_FAILED,preprocessOutgoing,enableEncryption,EDEN_ENCRYPTED_KEY,EDEN_ENCRYPTED_KEY_HKDF,LiveSyncAbstractReplicator,_handlers,SyncParamsHandlerError,SyncParamsFetchError,SyncParamsNotFoundError,SyncParamsUpdateError,currentVersionRange,selectorOnDemandPull,LiveSyncCouchDBReplicator,_a6,OnDialogSettingsDefault,SettingInformation,setLevelClass,LiveSyncSetting,AutoClosableModal,InputStringDialog,PopoverSelectString,MessageBox,askYesNo,askSelectString,askString,getHttpHandlerExtensionConfiguration,resolveHttpHandlerRuntimeConfig,EndpointURLScheme,AlgorithmId,SMITHY_CONTEXT_KEY,HttpRequest,HttpResponse,addExpectContinueMiddlewareOptions,getAddExpectContinuePlugin,ChecksumAlgorithm,ChecksumLocation,DEFAULT_CHECKSUM_ALGORITHM,getDateHeader,getSkewCorrectedDate,isClockSkewed,getUpdatedSystemClockOffset,throwSigningPropertyError,validateSigningProperties,AwsSdkSigV4Signer,AwsSdkSigV4ASigner,getSmithyContext,normalizeProvider,resolveAuthOptions,httpAuthSchemeMiddleware,httpAuthSchemeEndpointRuleSetMiddlewareOptions,getHttpAuthSchemeEndpointRuleSetPlugin,defaultErrorHandler,defaultSuccessHandler,httpSigningMiddleware,httpSigningMiddlewareOptions,getHttpSigningPlugin,normalizeProvider2,makePagedClientRequest,get3,chars,alphabetByEncoding,alphabetByValue,bitsPerLetter,bitsPerByte,maxLetterValue,fromBase64,Uint8ArrayBlobAdapter,ReadableStreamRef,ChecksumStream,isReadableStream,createChecksumStream,ByteArrayCollector,createBufferedReadable,getAwsChunkedEncodingStream,escapeUri,hexEncode,keepAliveSupport,FetchHttpHandler,streamCollector,SHORT_TO_HEX,HEX_TO_SHORT,sdkStreamMixin,isBlobInstance,collectBody,deref,operation,schemaDeserializationMiddleware,findHeader,parseUrl,toEndpointV1,schemaSerializationMiddleware,deserializerMiddlewareOption,serializerMiddlewareOption,traitsCache,anno_it,anno_ns,simpleSchemaCacheN,simpleSchemaCacheS,_NormalizedSchema,NormalizedSchema,isMemberSchema,isStaticSchema,_TypeRegistry,TypeRegistry,expectNumber,MAX_FLOAT,expectFloat32,expectLong,expectShort,expectByte,expectSizedInt,castInt,strictParseFloat32,NUMBER_REGEX,parseNumber,strictParseShort,strictParseByte,stackTraceWarning,logger,DAYS,MONTHS,IMF_FIXDATE,RFC_850_DATE,ASC_TIME,parseRfc7231DateTime,buildDate,parseTwoDigitYear,adjustRfc850Year,parseMonthByShortName,DAYS_IN_MONTH,validateDayOfMonth,isLeapYear,parseDateValue,parseMilliseconds,stripLeadingZeroes,randomUUID,decimalToHex,v4,LazyJsonString,ddd,mmm,time,RFC3339_WITH_OFFSET2,IMF_FIXDATE2,RFC_850_DATE2,ASC_TIME2,months,_parseEpochTimestamp,_parseRfc3339DateTimeWithOffset,_parseRfc7231DateTime,splitHeader,format,NumericValue,SerdeContext,HttpProtocol,HttpBindingProtocol,FromStringShapeDeserializer,HttpInterceptingShapeDeserializer,ToStringShapeSerializer,HttpInterceptingShapeSerializer,DefaultIdentityProviderConfig,isIdentityExpired,doesIdentityRequireRefresh,memoizeIdentityProvider,memoize,resolveAwsSdkSigV4AConfig,AMZ_DATE_QUERY_PARAM,AMZ_DATE_HEADER,GENERATED_HEADERS,SIGNATURE_HEADER,TOKEN_HEADER,ALWAYS_UNSIGNABLE_HEADERS,PROXY_HEADER_PATTERN,SEC_HEADER_PATTERN,EVENT_ALGORITHM_IDENTIFIER,signingKeyCache,cacheQueue,createScope,getSigningKey,hmac,getCanonicalHeaders,isArrayBuffer,getPayloadHash,HeaderFormatter,HEADER_VALUE_TYPE,UUID_PATTERN,Int64,hasHeader,moveHeadersToQuery,prepareRequest,getCanonicalQuery,iso8601,toDate,SignatureV4Base,SignatureV4,resolveAwsSdkSigV4Config,TEXT_ENCODER,calculateBodyLength,getAllAliases,getMiddlewareNameWithAliases,constructStack,stepWeights,priorityWeights,Client,SENSITIVE_STRING,Command,ClassBuilder,createAggregatedClient,ServiceException,decorateServiceException,loadConfigsForDefaultMode,knownAlgorithms,getChecksumConfiguration2,resolveChecksumRuntimeConfig2,getRetryConfiguration,resolveRetryRuntimeConfig,getDefaultExtensionConfiguration,resolveDefaultRuntimeConfig,getValueFromTextNode,NoOpLogger,ProtocolLib,SerdeContextConfig,UnionSerde,ATTR_ESCAPE_RE,ATTR_ESCAPE_MAP,ELEMENT_ESCAPE_RE,ELEMENT_ESCAPE_MAP,XmlText,XmlNode,parser,XmlShapeDeserializer,loadRestXmlErrorCode,XmlShapeSerializer,XmlCodec,AwsRestXmlProtocol,getChecksumAlgorithmForRequest,getChecksumLocationName,hasHeader2,hasHeaderWithPrefix,isStreaming,__assign,fromUtf82,fromUtf83,AwsCrc32c,Crc32c,lookupTable,generateCRC64NVMETable,CRC64_NVME_REVERSED_TABLE,t0,t1,t2,t3,t4,t5,t6,t7,ensureTablesInitialized,Crc64Nvme,AwsCrc32,Crc32,lookupTable2,getCrc32ChecksumAlgorithmFunction,CLIENT_SUPPORTED_ALGORITHMS,PRIORITY_ORDER_ALGORITHMS,selectChecksumAlgorithmFunction,stringHasher,flexibleChecksumsMiddlewareOptions,flexibleChecksumsMiddleware,flexibleChecksumsInputMiddlewareOptions,flexibleChecksumsInputMiddleware,getChecksumAlgorithmListForResponse,isChecksumWithPartNumber,getChecksum,validateChecksumFromResponse,flexibleChecksumsResponseMiddlewareOptions,flexibleChecksumsResponseMiddleware,getFlexibleChecksumsPlugin,resolveFlexibleChecksumsConfig,hostHeaderMiddleware,hostHeaderMiddlewareOptions,getHostHeaderPlugin,loggerMiddleware,loggerMiddlewareOptions,getLoggerPlugin,recursionDetectionMiddlewareOptions,recursionDetectionMiddleware,getRecursionDetectionPlugin,CONTENT_LENGTH_HEADER,DECODED_CONTENT_LENGTH_HEADER,checkContentLengthHeaderMiddlewareOptions,getCheckContentLengthHeaderPlugin,regionRedirectEndpointMiddleware,regionRedirectEndpointMiddlewareOptions,regionRedirectMiddlewareOptions,getRegionRedirectMiddlewarePlugin,s3ExpiresMiddleware,s3ExpiresMiddlewareOptions,getS3ExpiresMiddlewarePlugin,_S3ExpressIdentityCache,S3ExpressIdentityCache,S3ExpressIdentityCacheEntry,_S3ExpressIdentityProviderImpl,S3ExpressIdentityProviderImpl,SelectorType,SESSION_TOKEN_QUERY_PARAM,SESSION_TOKEN_HEADER,SignatureV4S3Express,s3ExpressMiddleware,s3ExpressMiddlewareOptions,getS3ExpressPlugin,signS3Express,defaultErrorHandler2,defaultSuccessHandler2,s3ExpressHttpSigningMiddleware,getS3ExpressHttpSigningPlugin,resolveS3Config,THROW_IF_EMPTY_BODY,throw200ExceptionsMiddleware,collectBody2,throw200ExceptionsMiddlewareOptions,getThrow200ExceptionsPlugin,validate,bucketEndpointMiddlewareOptions,validateBucketNameMiddlewareOptions,getValidateBucketNamePlugin,S3RestXmlProtocol,DEFAULT_UA_APP_ID,EndpointCache,IP_V4_REGEX,isIpAddress,VALID_HOST_LABEL_REGEX,isValidHostLabel,customEndpointFunctions,EndpointError,booleanEquals,getAttrPathList,getAttr,isSet,not,DEFAULT_PORTS,endpointFunctions,evaluateTemplate,getReferenceValue,evaluateExpression,callFunction,group,evaluateCondition,evaluateConditions,getEndpointHeaders,getEndpointProperties,getEndpointProperty,group2,getEndpointUrl,evaluateEndpointRule,evaluateErrorRule,evaluateRules,evaluateTreeRule,group3,resolveEndpoint,isVirtualHostableS3Bucket,selectedPartitionsInfo,getUserAgentPrefix,awsEndpointFunctions,RETRY_MODES,DEFAULT_RETRY_MODE,THROTTLING_ERROR_CODES,TRANSIENT_ERROR_CODES,TRANSIENT_ERROR_STATUS_CODES,NODEJS_TIMEOUT_ERROR_CODES,NODEJS_NETWORK_ERROR_CODES,isRetryableByTrait,isClockSkewCorrectedError,isBrowserNetworkError,isThrottlingError,isTransientError,isServerError,_DefaultRateLimiter,DefaultRateLimiter,getDefaultRetryBackoffStrategy,createDefaultRetryToken,StandardRetryStrategy,AdaptiveRetryStrategy,ConfiguredRetryStrategy,ACCOUNT_ID_ENDPOINT_REGEX,UA_NAME_ESCAPE_REGEX,UA_VALUE_ESCAPE_REGEX,BYTE_LIMIT,userAgentMiddleware,escapeUserAgent,getUserAgentMiddlewareOptions,getUserAgentPlugin,validRegions,checkRegion,isFipsRegion,getRealRegion,resolveRegionConfig,resolveEventStreamSerdeConfig,CONTENT_LENGTH_HEADER2,contentLengthMiddlewareOptions,getContentLengthPlugin,resolveParamsForS3,DOMAIN_PATTERN,IP_ADDRESS_PATTERN,DOTS_PATTERN,isDnsCompatibleBucketName,isArnBucketName,createConfigValueProvider,getEndpointFromConfig,toEndpointV12,getEndpointFromInstructions,resolveParams,endpointMiddleware,endpointMiddlewareOptions,getEndpointPlugin,resolveEndpointConfig,asSdkError,resolveRetryConfig,isStreamingPayload,retryMiddleware,isRetryStrategyV2,getRetryErrorInfo,getRetryErrorType,retryMiddlewareOptions,getRetryPlugin,getRetryAfterHint,SignatureV4MultiRegion,cs,ct,cu,cv,cw,cx,cy,cz,cA,cB,cC,cD,cE,cF,cG,cH,cI,c,d3,e2,f,g,h,i,j,k,l,m2,n2,o,p,q,r3,s,t8,u,v,w,x,y,z,A,B,C2,D,E,F,G2,H,J,K,L3,M2,N2,O,P2,Q,R,S,T,U,V,W2,X,Y,Z,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW,aX,aY,aZ,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,bA,bB,bC,bD,bE,bF,bG,bH,bI,bJ,bK,bL,bM,bN,bO,bP,bQ,bR,bS,bT,bU,bV,bW,bX,bY,bZ,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr2,ruleSet,cache,defaultEndpointResolver,defaultS3HttpAuthSchemeParametersProvider,defaultS3HttpAuthSchemeProvider,resolveHttpAuthSchemeConfig,resolveClientEndpointParameters,commonParams,S3ServiceException,NoSuchUpload,AccessDenied,ObjectNotInActiveTierError,BucketAlreadyExists,BucketAlreadyOwnedByYou,NoSuchBucket,InvalidObjectState,NoSuchKey,NotFound,EncryptionTypeMismatch,InvalidRequest,InvalidWriteOffset,TooManyParts,IdempotencyParameterMismatch,ObjectAlreadyInActiveTierError,_AC,_ACL,_ACLn,_ACP,_ACT,_ACn,_AIMU,_AR,_AS,_AT,_B,_BA,_BET,_BGR,_BKE,_BLS,_BP,_BPA,_BPP,_BR,_BRy,_BS,_Bo,_Bu,_C,_CA,_CBC,_CC,_CCRC,_CCRCC,_CCRCNVME,_CC_,_CD_,_CDo,_CE_,_CEo,_CL,_CL_,_CL__,_CLo,_CM,_CMD,_CMUo,_COR,_CORSC,_CPR,_CPom,_CR,_CR_,_CS,_CSHA,_CSHAh,_CSIM,_CSIMS,_CSINM,_CSIUS,_CSSSECA,_CSSSECK,_CSVI,_CSo,_CT,_CT_,_CTo,_CTon,_Cr,_D,_DM,_DMR,_DMe,_DN,_DRe,_DRes,_De,_Deli,_Des,_E,_EBC,_EBO,_EC,_EDr,_EM,_EOR,_ES,_ESBO,_ET,_ETa,_ETn,_ETx,_En,_Err,_Ev,_Ex,_F,_FD,_FR,_G,_GBMCR,_GBMTCR,_GFC,_GJP,_GR,_GRACP,_GW,_GWACP,_I,_IC,_ICL,_IDn,_IM,_IMS_,_IM_,_INM,_INM_,_IPA,_IS,_IT,_ITC,_ITCL,_ITCR,_ITCn,_IUS,_IUS_,_In,_JTC,_JTCR,_K,_KM,_L,_LBRi,_LC,_LCi,_LE,_LH,_LM,_LM_,_M,_MC,_MCL,_MCR,_MCe,_ME,_MK,_MM,_MP,_MTC,_MTCR,_MU,_N,_NC,_NCT,_ND,_NKM,_NNV,_NPNM,_NVE,_NVTo,_O,_OC,_OE,_OL,_OLC,_OLLHS,_OLM,_OLRUD,_OO,_OOA,_OSGT,_OSLT,_OSu,_P,_PABC,_PC,_PN,_PNM,_PP,_PS,_Pa,_Pe,_QC,_QCue,_QEC,_R,_RART,_RC,_RCC,_RCD,_RCE,_RCL,_RCT,_RCe,_RD,_RE,_REe,_RM,_RP,_RPB,_RPC,_RPe,_RR,_RRes,_RS,_RSe,_RT,_Ra,_Re,_Ret,_Ru,_S,_SA,_SAK,_SBD,_SC,_SCA,_SK,_SKEO,_SP,_SPi,_SSC,_SSE,_SSEC,_SSECA,_SSECK,_SSECKMD,_SSEKMSEC,_SSEKMSKI,_ST,_STD,_STDR,_Si,_T,_TA,_TBA,_TC,_TCop,_TDMOS,_TG,_TN,_TNa,_TOKF,_TS,_Ta,_Tag,_Ty,_UI,_UIM,_UM,_V,_VC,_VI,_VIM,_WC,_WRL,_ar,_c2,_ct,_d,_e,_eP,_en,_et,_h,_hC,_hE,_hH,_hL,_hP,_hPH,_hQ,_hi,_i,_iT,_km,_mk,_p,_pN,_rcc,_rcd,_rce,_rcl,_rct,_re,_st,_uI,_vI,_xA,_xF,_xN,_xNm,_xaa,_xaad,_xaari,_xaba,_xabgr,_xabolt,_xaca,_xacc,_xacc_,_xacc__,_xacm,_xacs,_xacs_,_xacsim,_xacsims,_xacsinm,_xacsius,_xacssseca,_xacssseck,_xacssseckM,_xacsvi,_xact,_xadm,_xae,_xaebo,_xagfc,_xagr,_xagra,_xagw,_xagwa,_xam,_xamm,_xampc,_xaollh,_xaolm,_xaolrud,_xaooa,_xar,_xarc,_xarp,_xars,_xasc,_xasca,_xasebo,_xasse,_xasseakki,_xassebke,_xassec,_xasseca,_xasseck,_xasseckM,_xat,_xatc,_xatdmos,_xavi,_xawrl,n0,_s_registry,S3ServiceException$,n0_registry,AccessDenied$,BucketAlreadyExists$,BucketAlreadyOwnedByYou$,EncryptionTypeMismatch$,IdempotencyParameterMismatch$,InvalidObjectState$,InvalidRequest$,InvalidWriteOffset$,NoSuchBucket$,NoSuchKey$,NoSuchUpload$,NotFound$,ObjectAlreadyInActiveTierError$,ObjectNotInActiveTierError$,TooManyParts$,errorTypeRegistries,CopySourceSSECustomerKey,NonEmptyKmsKeyArnString,SessionCredentialValue,SSECustomerKey,SSEKMSEncryptionContext,SSEKMSKeyId,StreamingBlob,AbacStatus$,AbortIncompleteMultipartUpload$,AbortMultipartUploadOutput$,AbortMultipartUploadRequest$,AccelerateConfiguration$,AccessControlPolicy$,AccessControlTranslation$,AnalyticsAndOperator$,AnalyticsConfiguration$,AnalyticsExportDestination$,AnalyticsS3BucketDestination$,BlockedEncryptionTypes$,Bucket$,BucketInfo$,BucketLifecycleConfiguration$,BucketLoggingStatus$,Checksum$,CommonPrefix$,CompletedMultipartUpload$,CompletedPart$,CompleteMultipartUploadOutput$,CompleteMultipartUploadRequest$,Condition$,ContinuationEvent$,CopyObjectOutput$,CopyObjectRequest$,CopyObjectResult$,CopyPartResult$,CORSConfiguration$,CORSRule$,CreateBucketConfiguration$,CreateBucketMetadataConfigurationRequest$,CreateBucketMetadataTableConfigurationRequest$,CreateBucketOutput$,CreateBucketRequest$,CreateMultipartUploadOutput$,CreateMultipartUploadRequest$,CreateSessionOutput$,CreateSessionRequest$,CSVInput$,CSVOutput$,DefaultRetention$,Delete$,DeleteBucketAnalyticsConfigurationRequest$,DeleteBucketCorsRequest$,DeleteBucketEncryptionRequest$,DeleteBucketIntelligentTieringConfigurationRequest$,DeleteBucketInventoryConfigurationRequest$,DeleteBucketLifecycleRequest$,DeleteBucketMetadataConfigurationRequest$,DeleteBucketMetadataTableConfigurationRequest$,DeleteBucketMetricsConfigurationRequest$,DeleteBucketOwnershipControlsRequest$,DeleteBucketPolicyRequest$,DeleteBucketReplicationRequest$,DeleteBucketRequest$,DeleteBucketTaggingRequest$,DeleteBucketWebsiteRequest$,DeletedObject$,DeleteMarkerEntry$,DeleteMarkerReplication$,DeleteObjectOutput$,DeleteObjectRequest$,DeleteObjectsOutput$,DeleteObjectsRequest$,DeleteObjectTaggingOutput$,DeleteObjectTaggingRequest$,DeletePublicAccessBlockRequest$,Destination$,DestinationResult$,Encryption$,EncryptionConfiguration$,EndEvent$,_Error$,ErrorDetails$,ErrorDocument$,EventBridgeConfiguration$,ExistingObjectReplication$,FilterRule$,GetBucketAbacOutput$,GetBucketAbacRequest$,GetBucketAccelerateConfigurationOutput$,GetBucketAccelerateConfigurationRequest$,GetBucketAclOutput$,GetBucketAclRequest$,GetBucketAnalyticsConfigurationOutput$,GetBucketAnalyticsConfigurationRequest$,GetBucketCorsOutput$,GetBucketCorsRequest$,GetBucketEncryptionOutput$,GetBucketEncryptionRequest$,GetBucketIntelligentTieringConfigurationOutput$,GetBucketIntelligentTieringConfigurationRequest$,GetBucketInventoryConfigurationOutput$,GetBucketInventoryConfigurationRequest$,GetBucketLifecycleConfigurationOutput$,GetBucketLifecycleConfigurationRequest$,GetBucketLocationOutput$,GetBucketLocationRequest$,GetBucketLoggingOutput$,GetBucketLoggingRequest$,GetBucketMetadataConfigurationOutput$,GetBucketMetadataConfigurationRequest$,GetBucketMetadataConfigurationResult$,GetBucketMetadataTableConfigurationOutput$,GetBucketMetadataTableConfigurationRequest$,GetBucketMetadataTableConfigurationResult$,GetBucketMetricsConfigurationOutput$,GetBucketMetricsConfigurationRequest$,GetBucketNotificationConfigurationRequest$,GetBucketOwnershipControlsOutput$,GetBucketOwnershipControlsRequest$,GetBucketPolicyOutput$,GetBucketPolicyRequest$,GetBucketPolicyStatusOutput$,GetBucketPolicyStatusRequest$,GetBucketReplicationOutput$,GetBucketReplicationRequest$,GetBucketRequestPaymentOutput$,GetBucketRequestPaymentRequest$,GetBucketTaggingOutput$,GetBucketTaggingRequest$,GetBucketVersioningOutput$,GetBucketVersioningRequest$,GetBucketWebsiteOutput$,GetBucketWebsiteRequest$,GetObjectAclOutput$,GetObjectAclRequest$,GetObjectAttributesOutput$,GetObjectAttributesParts$,GetObjectAttributesRequest$,GetObjectLegalHoldOutput$,GetObjectLegalHoldRequest$,GetObjectLockConfigurationOutput$,GetObjectLockConfigurationRequest$,GetObjectOutput$,GetObjectRequest$,GetObjectRetentionOutput$,GetObjectRetentionRequest$,GetObjectTaggingOutput$,GetObjectTaggingRequest$,GetObjectTorrentOutput$,GetObjectTorrentRequest$,GetPublicAccessBlockOutput$,GetPublicAccessBlockRequest$,GlacierJobParameters$,Grant$,Grantee$,HeadBucketOutput$,HeadBucketRequest$,HeadObjectOutput$,HeadObjectRequest$,IndexDocument$,Initiator$,InputSerialization$,IntelligentTieringAndOperator$,IntelligentTieringConfiguration$,IntelligentTieringFilter$,InventoryConfiguration$,InventoryDestination$,InventoryEncryption$,InventoryFilter$,InventoryS3BucketDestination$,InventorySchedule$,InventoryTableConfiguration$,InventoryTableConfigurationResult$,InventoryTableConfigurationUpdates$,JournalTableConfiguration$,JournalTableConfigurationResult$,JournalTableConfigurationUpdates$,JSONInput$,JSONOutput$,LambdaFunctionConfiguration$,LifecycleExpiration$,LifecycleRule$,LifecycleRuleAndOperator$,LifecycleRuleFilter$,ListBucketAnalyticsConfigurationsOutput$,ListBucketAnalyticsConfigurationsRequest$,ListBucketIntelligentTieringConfigurationsOutput$,ListBucketIntelligentTieringConfigurationsRequest$,ListBucketInventoryConfigurationsOutput$,ListBucketInventoryConfigurationsRequest$,ListBucketMetricsConfigurationsOutput$,ListBucketMetricsConfigurationsRequest$,ListBucketsOutput$,ListBucketsRequest$,ListDirectoryBucketsOutput$,ListDirectoryBucketsRequest$,ListMultipartUploadsOutput$,ListMultipartUploadsRequest$,ListObjectsOutput$,ListObjectsRequest$,ListObjectsV2Output$,ListObjectsV2Request$,ListObjectVersionsOutput$,ListObjectVersionsRequest$,ListPartsOutput$,ListPartsRequest$,LocationInfo$,LoggingEnabled$,MetadataConfiguration$,MetadataConfigurationResult$,MetadataEntry$,MetadataTableConfiguration$,MetadataTableConfigurationResult$,MetadataTableEncryptionConfiguration$,Metrics$,MetricsAndOperator$,MetricsConfiguration$,MultipartUpload$,NoncurrentVersionExpiration$,NoncurrentVersionTransition$,NotificationConfiguration$,NotificationConfigurationFilter$,_Object$,ObjectIdentifier$,ObjectLockConfiguration$,ObjectLockLegalHold$,ObjectLockRetention$,ObjectLockRule$,ObjectPart$,ObjectVersion$,OutputLocation$,OutputSerialization$,Owner$,OwnershipControls$,OwnershipControlsRule$,ParquetInput$,Part$,PartitionedPrefix$,PolicyStatus$,Progress$,ProgressEvent$,PublicAccessBlockConfiguration$,PutBucketAbacRequest$,PutBucketAccelerateConfigurationRequest$,PutBucketAclRequest$,PutBucketAnalyticsConfigurationRequest$,PutBucketCorsRequest$,PutBucketEncryptionRequest$,PutBucketIntelligentTieringConfigurationRequest$,PutBucketInventoryConfigurationRequest$,PutBucketLifecycleConfigurationOutput$,PutBucketLifecycleConfigurationRequest$,PutBucketLoggingRequest$,PutBucketMetricsConfigurationRequest$,PutBucketNotificationConfigurationRequest$,PutBucketOwnershipControlsRequest$,PutBucketPolicyRequest$,PutBucketReplicationRequest$,PutBucketRequestPaymentRequest$,PutBucketTaggingRequest$,PutBucketVersioningRequest$,PutBucketWebsiteRequest$,PutObjectAclOutput$,PutObjectAclRequest$,PutObjectLegalHoldOutput$,PutObjectLegalHoldRequest$,PutObjectLockConfigurationOutput$,PutObjectLockConfigurationRequest$,PutObjectOutput$,PutObjectRequest$,PutObjectRetentionOutput$,PutObjectRetentionRequest$,PutObjectTaggingOutput$,PutObjectTaggingRequest$,PutPublicAccessBlockRequest$,QueueConfiguration$,RecordExpiration$,RecordsEvent$,Redirect$,RedirectAllRequestsTo$,RenameObjectOutput$,RenameObjectRequest$,ReplicaModifications$,ReplicationConfiguration$,ReplicationRule$,ReplicationRuleAndOperator$,ReplicationRuleFilter$,ReplicationTime$,ReplicationTimeValue$,RequestPaymentConfiguration$,RequestProgress$,RestoreObjectOutput$,RestoreObjectRequest$,RestoreRequest$,RestoreStatus$,RoutingRule$,S3KeyFilter$,S3Location$,S3TablesDestination$,S3TablesDestinationResult$,ScanRange$,SelectObjectContentOutput$,SelectObjectContentRequest$,SelectParameters$,ServerSideEncryptionByDefault$,ServerSideEncryptionConfiguration$,ServerSideEncryptionRule$,SessionCredentials$,SimplePrefix$,SourceSelectionCriteria$,SSEKMS$,SseKmsEncryptedObjects$,SSEKMSEncryption$,SSES3$,Stats$,StatsEvent$,StorageClassAnalysis$,StorageClassAnalysisDataExport$,Tag$,Tagging$,TargetGrant$,TargetObjectKeyFormat$,Tiering$,TopicConfiguration$,Transition$,UpdateBucketMetadataInventoryTableConfigurationRequest$,UpdateBucketMetadataJournalTableConfigurationRequest$,UpdateObjectEncryptionRequest$,UpdateObjectEncryptionResponse$,UploadPartCopyOutput$,UploadPartCopyRequest$,UploadPartOutput$,UploadPartRequest$,VersioningConfiguration$,WebsiteConfiguration$,WriteGetObjectResponseRequest$,AnalyticsConfigurationList,Buckets,CommonPrefixList,CompletedPartList,CORSRules,DeletedObjects,DeleteMarkers,EncryptionTypeList,Errors,FilterRuleList,Grants,IntelligentTieringConfigurationList,InventoryConfigurationList,InventoryOptionalFields,LambdaFunctionConfigurationList,LifecycleRules,MetricsConfigurationList,MultipartUploadList,NoncurrentVersionTransitionList,ObjectIdentifierList,ObjectList,ObjectVersionList,OwnershipControlsRules,Parts,PartsList,QueueConfigurationList,ReplicationRules,RoutingRules,ServerSideEncryptionRules,TagSet,TargetGrants,TieringList,TopicConfigurationList,TransitionList,UserMetadata,AnalyticsFilter$,MetricsFilter$,ObjectEncryption$,SelectObjectContentEventStream$,AbortMultipartUpload$,CompleteMultipartUpload$,CopyObject$,CreateBucket$,CreateBucketMetadataConfiguration$,CreateBucketMetadataTableConfiguration$,CreateMultipartUpload$,CreateSession$,DeleteBucket$,DeleteBucketAnalyticsConfiguration$,DeleteBucketCors$,DeleteBucketEncryption$,DeleteBucketIntelligentTieringConfiguration$,DeleteBucketInventoryConfiguration$,DeleteBucketLifecycle$,DeleteBucketMetadataConfiguration$,DeleteBucketMetadataTableConfiguration$,DeleteBucketMetricsConfiguration$,DeleteBucketOwnershipControls$,DeleteBucketPolicy$,DeleteBucketReplication$,DeleteBucketTagging$,DeleteBucketWebsite$,DeleteObject$,DeleteObjects$,DeleteObjectTagging$,DeletePublicAccessBlock$,GetBucketAbac$,GetBucketAccelerateConfiguration$,GetBucketAcl$,GetBucketAnalyticsConfiguration$,GetBucketCors$,GetBucketEncryption$,GetBucketIntelligentTieringConfiguration$,GetBucketInventoryConfiguration$,GetBucketLifecycleConfiguration$,GetBucketLocation$,GetBucketLogging$,GetBucketMetadataConfiguration$,GetBucketMetadataTableConfiguration$,GetBucketMetricsConfiguration$,GetBucketNotificationConfiguration$,GetBucketOwnershipControls$,GetBucketPolicy$,GetBucketPolicyStatus$,GetBucketReplication$,GetBucketRequestPayment$,GetBucketTagging$,GetBucketVersioning$,GetBucketWebsite$,GetObject$,GetObjectAcl$,GetObjectAttributes$,GetObjectLegalHold$,GetObjectLockConfiguration$,GetObjectRetention$,GetObjectTagging$,GetObjectTorrent$,GetPublicAccessBlock$,HeadBucket$,HeadObject$,ListBucketAnalyticsConfigurations$,ListBucketIntelligentTieringConfigurations$,ListBucketInventoryConfigurations$,ListBucketMetricsConfigurations$,ListBuckets$,ListDirectoryBuckets$,ListMultipartUploads$,ListObjects$,ListObjectsV2$,ListObjectVersions$,ListParts$,PutBucketAbac$,PutBucketAccelerateConfiguration$,PutBucketAcl$,PutBucketAnalyticsConfiguration$,PutBucketCors$,PutBucketEncryption$,PutBucketIntelligentTieringConfiguration$,PutBucketInventoryConfiguration$,PutBucketLifecycleConfiguration$,PutBucketLogging$,PutBucketMetricsConfiguration$,PutBucketNotificationConfiguration$,PutBucketOwnershipControls$,PutBucketPolicy$,PutBucketReplication$,PutBucketRequestPayment$,PutBucketTagging$,PutBucketVersioning$,PutBucketWebsite$,PutObject$,PutObjectAcl$,PutObjectLegalHold$,PutObjectLockConfiguration$,PutObjectRetention$,PutObjectTagging$,PutPublicAccessBlock$,RenameObject$,RestoreObject$,SelectObjectContent$,UpdateBucketMetadataInventoryTableConfiguration$,UpdateBucketMetadataJournalTableConfiguration$,UpdateObjectEncryption$,UploadPart$,UploadPartCopy$,WriteGetObjectResponse$,CreateSessionCommand,fromUtf84,SHA_1_HASH,SHA_1_HMAC_ALGO,EMPTY_DATA_SHA_1,fallbackWindow,Sha1,subtleCryptoMethods,Sha12,SHA_256_HASH,SHA_256_HMAC_ALGO,EMPTY_DATA_SHA_256,Sha256,BLOCK_SIZE,KEY,INIT,MAX_HASHABLE_LENGTH,RawSha256,Sha2562,Sha2563,createDefaultUserAgentProvider,fallback2,Int642,HeaderMarshaller,HEADER_VALUE_TYPE2,BOOLEAN_TAG,BYTE_TAG,SHORT_TAG,INT_TAG,LONG_TAG,BINARY_TAG,STRING_TAG,TIMESTAMP_TAG,UUID_TAG,UUID_PATTERN2,PRELUDE_MEMBER_LENGTH,PRELUDE_LENGTH,CHECKSUM_LENGTH,MINIMUM_MESSAGE_LENGTH,EventStreamCodec,MessageDecoderStream,MessageEncoderStream,SmithyMessageDecoderStream,SmithyMessageEncoderStream,EventStreamMarshaller,readableStreamtoIterable,iterableToReadableStream,EventStreamMarshaller2,isReadableStream2,eventStreamSerdeProvider,blobHasher,invalidProvider,INIT2,Md5,DEFAULTS_MODE_OPTIONS,resolveDefaultsModeConfig,useMobileConfiguration,getRuntimeConfig,getRuntimeConfig2,getAwsRegionExtensionConfiguration,resolveAwsRegionExtensionConfiguration,getHttpAuthExtensionConfiguration,resolveHttpAuthRuntimeConfig,resolveRuntimeExtensions,S3Client,AbortMultipartUploadCommand,ssecMiddlewareOptions,getSsecPlugin,CompleteMultipartUploadCommand,CopyObjectCommand,locationConstraintMiddlewareOptions,getLocationConstraintPlugin,CreateBucketCommand,CreateBucketMetadataConfigurationCommand,CreateBucketMetadataTableConfigurationCommand,CreateMultipartUploadCommand,DeleteBucketAnalyticsConfigurationCommand,DeleteBucketCommand,DeleteBucketCorsCommand,DeleteBucketEncryptionCommand,DeleteBucketIntelligentTieringConfigurationCommand,DeleteBucketInventoryConfigurationCommand,DeleteBucketLifecycleCommand,DeleteBucketMetadataConfigurationCommand,DeleteBucketMetadataTableConfigurationCommand,DeleteBucketMetricsConfigurationCommand,DeleteBucketOwnershipControlsCommand,DeleteBucketPolicyCommand,DeleteBucketReplicationCommand,DeleteBucketTaggingCommand,DeleteBucketWebsiteCommand,DeleteObjectCommand,DeleteObjectsCommand,DeleteObjectTaggingCommand,DeletePublicAccessBlockCommand,GetBucketAbacCommand,GetBucketAccelerateConfigurationCommand,GetBucketAclCommand,GetBucketAnalyticsConfigurationCommand,GetBucketCorsCommand,GetBucketEncryptionCommand,GetBucketIntelligentTieringConfigurationCommand,GetBucketInventoryConfigurationCommand,GetBucketLifecycleConfigurationCommand,GetBucketLocationCommand,GetBucketLoggingCommand,GetBucketMetadataConfigurationCommand,GetBucketMetadataTableConfigurationCommand,GetBucketMetricsConfigurationCommand,GetBucketNotificationConfigurationCommand,GetBucketOwnershipControlsCommand,GetBucketPolicyCommand,GetBucketPolicyStatusCommand,GetBucketReplicationCommand,GetBucketRequestPaymentCommand,GetBucketTaggingCommand,GetBucketVersioningCommand,GetBucketWebsiteCommand,GetObjectAclCommand,GetObjectAttributesCommand,GetObjectCommand,GetObjectLegalHoldCommand,GetObjectLockConfigurationCommand,GetObjectRetentionCommand,GetObjectTaggingCommand,GetObjectTorrentCommand,GetPublicAccessBlockCommand,HeadBucketCommand,HeadObjectCommand,ListBucketAnalyticsConfigurationsCommand,ListBucketIntelligentTieringConfigurationsCommand,ListBucketInventoryConfigurationsCommand,ListBucketMetricsConfigurationsCommand,ListBucketsCommand,ListDirectoryBucketsCommand,ListMultipartUploadsCommand,ListObjectsCommand,ListObjectsV2Command,ListObjectVersionsCommand,ListPartsCommand,PutBucketAbacCommand,PutBucketAccelerateConfigurationCommand,PutBucketAclCommand,PutBucketAnalyticsConfigurationCommand,PutBucketCorsCommand,PutBucketEncryptionCommand,PutBucketIntelligentTieringConfigurationCommand,PutBucketInventoryConfigurationCommand,PutBucketLifecycleConfigurationCommand,PutBucketLoggingCommand,PutBucketMetricsConfigurationCommand,PutBucketNotificationConfigurationCommand,PutBucketOwnershipControlsCommand,PutBucketPolicyCommand,PutBucketReplicationCommand,PutBucketRequestPaymentCommand,PutBucketTaggingCommand,PutBucketVersioningCommand,PutBucketWebsiteCommand,PutObjectAclCommand,PutObjectCommand,PutObjectLegalHoldCommand,PutObjectLockConfigurationCommand,PutObjectRetentionCommand,PutObjectTaggingCommand,PutPublicAccessBlockCommand,RenameObjectCommand,RestoreObjectCommand,SelectObjectContentCommand,UpdateBucketMetadataInventoryTableConfigurationCommand,UpdateBucketMetadataJournalTableConfigurationCommand,UpdateObjectEncryptionCommand,UploadPartCommand,UploadPartCopyCommand,WriteGetObjectResponseCommand,paginateListBuckets,paginateListDirectoryBuckets,paginateListObjectsV2,paginateListParts,getCircularReplacer,sleep,waiterServiceDefaults,WaiterState,checkExceptions,exponentialBackoffWithJitter,randomInRange,runPolling,createMessageFromResponse,validateWaiterOptions,abortTimeout,createWaiter,checkState,checkState2,checkState3,checkState4,paginators,waiters,S3,applyMd5BodyChecksumMiddleware,hasHeader3,ch2,wk,u8,u16,i32,fleb,fdeb,clim,freb,_a7,fl,revfl,_b4,fd,revfd,rev,hMap,flt,fdt,flm,flrm,fdm,fdrm,max,bits,bits16,shft,slc,ec,err2,inflt,wbits,wbits16,hTree,ln,lc,clen,wfblk,wblk,deo,et,dflt,dopt,mrg,wcln,ch3,cbfs,wrkr,bInflt,bDflt,pbf,gopt,cbify,fltn,td2,x2,i2,wrappedInflate,wrappedDeflate,replicationFilter,MARK_SHIFT_COMPRESSED,CheckPointInfoDefault,DatabaseReadLayer,CacheLayer,ArrivalWaitLayer,DatabaseWriteLayer,LayeredChunkManager,EVENT_MISSING_CHUNKS,EVENT_MISSING_CHUNK_REMOTE,EVENT_CHUNK_FETCHED,ChunkFetcher,ContentSplitterCore,ContentSplitterBase,charNewLine,segmenter,MAX_ITEMS,ContentSplitterRabinKarp,ContentSplitters,ContentSplitter,ChangeManager,import_diff_match_patch3,ConflictManager,EntryManager,HashManagerCore,XXHashHashManager,XXHash32RawHashManager,XXHash64HashManager,FallbackWasmHashManager,PureJSHashManager,HashManagers,HashManager,LiveSyncManagers,LiveSyncLocalDB,RECORD_SPLIT,UNIT_SPLIT,te4,JournalSyncAbstract,JournalSyncMinio,updateInformation,lastVersion,CONTEXT_DIALOG_CONTROLS,SvelteDialogManagerBase,root_110,root5,$$css6,root_111,root6,root7,root_113,root8,$$css7,root9,$$css8,root10,root11,root12,root_44,root_24,root_72,root13,root_25,root_114,root14,root15,$$css9,root_45,root_26,root_73,root16,root_46,root_27,root_83,root17,root_28,root18,root19,root20,root_115,root_29,root_74,root21,root_116,root_47,root22,root_117,root_48,root23,root_118,root_210,root_102,root24,root_33,root_119,root_75,root25,checkConfig,on_click2,root_211,root_120,root_84,root26,$$css10,root_212,root_49,root_64,root_85,root_1110,root_134,root_142,root_152,root_162,root_182,root_192,root_123,root_242,root27,root_213,root_410,root_65,root_76,root_86,root_93,root_1111,root_143,root_183,root28,PouchError,MISSING_BULK_DOCS,MISSING_DOC,REV_CONFLICT,INVALID_ID,MISSING_ID,RESERVED_ID,UNKNOWN_ERROR,BAD_ARG,QUERY_PARSE_ERROR,DOC_VALIDATION,BAD_REQUEST,NOT_AN_OBJECT,IDB_ERROR,INVALID_REV,MISSING_STUB,getRandomValues,rnds8,regex_default,validate_default,byteToHex,stringify_default,v4_default,thisAtob,thisBtoa,import_spark_md5,setImmediateShim,MD5_CHUNK_SIZE,import_events16,funcToString,objectCtorString,MAX_NUM_CONCURRENT_REQUESTS,hasLocal,nextTick,Changes,keys2,qName,qParser,parser2,uuid,f3,h2,MIN_MAGNITUDE,MAGNITUDE_DIGITS,SEP,combinationFields,matchers,index_browser_es_default,import_events17,Changes2,validRevRegex,AbstractPouchDB,TaskQueue,PouchInternal,PouchDB,ActiveTasks,eventEmitter,index_es_default,import_vuvuzela,reservedWords,dataWords,ADAPTER_VERSION,DOC_STORE,BY_SEQ_STORE,ATTACH_STORE,ATTACH_AND_SEQ_STORE,META_STORE,LOCAL_STORE,DETECT_BLOB_SUPPORT_STORE,changesHandler$1,running,queue,cachedDBs,blobSupportPromise,openReqList,index_es_default2,IDB_NULL,IDB_FALSE,IDB_TRUE,TEST_KEY_INVALID,TEST_PATH_INVALID,KEY_INVALID,PATH_INVALID,SLASH,IS_DOT,DOC_STORE2,META_LOCAL_STORE,POUCHDB_IDB_VERSION,versionMultiplier,BINARY_ATTACHMENTS,COUCH_COLLATE_LO,COUCH_COLLATE_HI,IDB_COLLATE_LO,IDB_COLLATE_HI,ADAPTER_NAME,idbChanges,openDatabases,index_es_default3,CHANGES_BATCH_SIZE,MAX_SIMULTANEOUS_REVS,CHANGES_TIMEOUT_BUFFER,DEFAULT_HEARTBEAT,supportsBulkGetMap,index_es_default4,QueryParseError,NotFoundError,BuiltInError,TaskQueue2,persistentQueues,tempViewQueue,index_es_default5,log2,isArray,toJSON,builtInReduce__sum,builtInReduce__count,builtInReduce__stats,abstract,index_browser_es_default2,CHECKPOINT_VERSION,REPLICATOR,CHECKPOINT_HISTORY_SIZE,LOWEST_SEQ,CheckpointerInternal,comparisons,index_es_default6,index_es_default7,import_events18,STARTING_BACK_OFF,Replication,Sync,index_es_default8,nativeFlat,polyFlat,flatten2,requireValidation,arrayTypeComparisonOperators,equalityOperators,abstractMapper,ddocIdPrefix,COLLATE_LO,COLLATE_HI,SHORT_CIRCUIT_QUERY,logicalMatchers,plugin2,index_browser_es_default3,import_transform_pouch,TrysteroReplicator,root_214,on_click3,root_34,on_click_1,root_411,root_66,root_77,root_87,root_103,root_153,root_163,root_124,root_215,root29,root_216,root_35,root_53,root_94,root_88,root_78,root_125,root_135,root30,import_qrcode_generator,OutputFormat,necessaryErasureProperties,UserMode,SetupManager,SveltePanel,root_121,root31,$$css11,ConnectionStringParser,root_126,root32,$$css12,EVENT_REQUEST_SHOW_HISTORY,toc,stubs,ObsidianLiveSyncSettingTab,ModuleObsidianSettingDialogue,DocumentHistoryModal,ModuleObsidianDocumentHistory,root_127,root_217,root_36,root_412,root_67,root_79,root_89,root_104,root_54,root_1112,root_128,root33,$$css13,GlobalHistoryView,ModuleObsidianGlobalHistory,ModuleIntegratedTest,ModuleReplicateTest,LocalDatabaseMaintenance,ServiceContext,ServiceBase,ControlService,PathService,ServiceHub,APIService,Binder,LazyBinder,MultiBinder,DispatchParallel,BooleanHandlerBase,AllHandler,ParallelAllHandler,AnySuccessHandler,FirstResultHandler,InjectableAPIService,AppLifecycleService,AppLifecycleServiceBase,ConflictService,InjectableConflictService,DatabaseEventService,InjectableDatabaseEventService,FileProcessingService,InjectableFileProcessingService,UnresolvedErrorManager,RemoteService,InjectableRemoteService,ReplicationService,InjectableReplicationService,ReplicatorService,InjectableReplicatorService,TestService,InjectableTestService,TweakValueService,InjectableTweakValueService,VaultService,InjectableVaultService,InjectableServiceHub,ObsidianServiceContext,ConfigService,ConfigServiceBrowserCompat,instanceOfAny,idbProxyableTypes,cursorAdvanceMethods,transactionDoneMap,transformCache,reverseTransformCache,idbProxyTraps,unwrap,readMethods,writeMethods,cachedMethods,advanceMethodProps,methodMap,advanceResults,ittrProxiedCursorToOriginalProxy,cursorIteratorTraps,databaseCache,IDBKeyValueDatabase,KeyValueDBService,ObsidianDatabaseEventService,ObsidianReplicatorService,ObsidianFileProcessingService,ObsidianReplicationService,ObsidianRemoteService,ObsidianConflictService,ObsidianTweakValueService,ObsidianTestService,ObsidianConfigService,ObsidianKeyValueDBService,ObsidianControlService,SettingService,ObsidianSettingService,DatabaseService,ObsidianDatabaseService,ObsHttpHandler,ObsidianConfirm,import_obsidian3,ObsidianAPIService,ObsidianAppLifecycleService,ObsidianPathService,ObsidianVaultService,UIService,root34,$$css14,SvelteDialogBase,SvelteDialogObsidian,ObsidianSvelteDialogManager,on_click4,root_218,root35,$$css15,ObsidianUIService,ObsidianServiceHub,ServiceModuleBase,ServiceRebuilder,ServiceDatabaseFileAccessBase,ServiceDatabaseFileAccess,StorageEventManager,ServiceFileAccessBase,ServiceFileAccessObsidian,StorageAccessManager,ServiceFileHandlerBase,ServiceFileHandler,FileAccessBase,ObsidianConversionAdapter,ObsidianPathAdapter,ObsidianStorageAdapter,import_obsidian4,ObsidianTypeGuardAdapter,ObsidianVaultAdapter,ObsidianFileSystemAdapter,FileAccessObsidian,StorageEventManagerBase,ObsidianTypeGuardAdapter2,ObsidianPersistenceAdapter,ObsidianStatusAdapter,ObsidianConverterAdapter,ObsidianWatchAdapter,ObsidianStorageEventManagerAdapter,StorageEventManagerObsidian,ModulePeriodicProcess,ReplicateResultProcessor,ModuleReplicator,ModuleReplicatorCouchDB,MILSTONE_DOCID,currentVersionRange2,LiveSyncJournalReplicator,ModuleReplicatorMinIO,ModuleConflictChecker,import_diff_match_patch4,ModuleConflictResolver,ModuleResolvingMismatchedTweaks,ModuleLiveSyncMain,ModuleBasicMenu,LiveSyncBaseCore,ModuleObsidianMenu,SETTING_HEADER,ModuleObsidianSettingsAsMarkdown,ConditionType,RuleLevel,DoctorRegulationV0_25_27,DoctorRegulation,RebuildOptions_AutomaticAcceptable,RebuildOptions_ConfirmIfRequired,RebuildOptions_SkipEvenIfRequired,ModuleMigration,enableI18nFeature,root_219,root_413,root_810,root_55,root_37,root_154,root_136,root_105,root_184,root36,root_129,root_414,root_38,root_144,root_1210,root_95,root_172,root37,LiveSyncTrysteroReplicator,EVENT_P2P_PEER_SHOW_EXTRA_MENU,AcceptedStatus,ConnectionStatus,root_220,root_130,root_39,on_click5,on_click_12,root_56,on_click_2,on_click_3,root_68,root_415,on_click_4,root_710,root_96,root_106,root_811,root38,$$css16,root_131,on_click6,on_click_13,root_310,root_416,root_57,root_69,root_97,root_107,root_711,root39,$$css17,VIEW_TYPE_P2P,P2PReplicatorPaneView,ObsidianLiveSyncPlugin,__create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__typeError=msg=>{throw TypeError(msg)},__defNormalProp=(obj,key3,value)=>key3 in obj?__defProp(obj,key3,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key3]=value,__esm=(fn,res2)=>function __init(){return fn&&(res2=(0,fn[__getOwnPropNames(fn)[0]])(fn=0)),res2},__commonJS=(cb2,mod)=>function __require(){return mod||(0,cb2[__getOwnPropNames(cb2)[0]])((mod={exports:{}}).exports,mod),mod.exports},__export=(target,all2)=>{for(var name in all2)__defProp(target,name,{get:all2[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key3 of __getOwnPropNames(from))__hasOwnProp.call(to,key3)||key3===except||__defProp(to,key3,{get:()=>from[key3],enumerable:!(desc=__getOwnPropDesc(from,key3))||desc.enumerable});return to},__toESM=(mod,isNodeMode,target)=>(target=null!=mod?__create(__getProtoOf(mod)):{},__copyProps(!isNodeMode&&mod&&mod.__esModule?target:__defProp(target,"default",{value:mod,enumerable:!0}),mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__publicField=(obj,key3,value)=>__defNormalProp(obj,"symbol"!=typeof key3?key3+"":key3,value),__accessCheck=(obj,member2,msg)=>member2.has(obj)||__typeError("Cannot "+msg),__privateGet=(obj,member2,getter)=>(__accessCheck(obj,member2,"read from private field"),getter?getter.call(obj):member2.get(obj)),__privateAdd=(obj,member2,value)=>member2.has(obj)?__typeError("Cannot add the same private member more than once"):member2 instanceof WeakSet?member2.add(obj):member2.set(obj,value),__privateSet=(obj,member2,value,setter)=>(__accessCheck(obj,member2,"write to private field"),setter?setter.call(obj,value):member2.set(obj,value),value),__privateMethod=(obj,member2,method)=>(__accessCheck(obj,member2,"access private method"),method),require_diff_match_patch=__commonJS({"node_modules/diff-match-patch/index.js"(exports,module2){var diff_match_patch4=function(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1e3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32};diff_match_patch4.Diff=function(op,text2){return[op,text2]};diff_match_patch4.prototype.diff_main=function(text1,text2,opt_checklines,opt_deadline){var deadline,checklines,commonlength,commonprefix,commonsuffix,diffs;void 0===opt_deadline&&(opt_deadline=this.Diff_Timeout<=0?Number.MAX_VALUE:(new Date).getTime()+1e3*this.Diff_Timeout);deadline=opt_deadline;if(null==text1||null==text2)throw new Error("Null input. (diff_main)");if(text1==text2)return text1?[new diff_match_patch4.Diff(0,text1)]:[];void 0===opt_checklines&&(opt_checklines=!0);checklines=opt_checklines;commonlength=this.diff_commonPrefix(text1,text2);commonprefix=text1.substring(0,commonlength);text1=text1.substring(commonlength);text2=text2.substring(commonlength);commonlength=this.diff_commonSuffix(text1,text2);commonsuffix=text1.substring(text1.length-commonlength);text1=text1.substring(0,text1.length-commonlength);text2=text2.substring(0,text2.length-commonlength);diffs=this.diff_compute_(text1,text2,checklines,deadline);commonprefix&&diffs.unshift(new diff_match_patch4.Diff(0,commonprefix));commonsuffix&&diffs.push(new diff_match_patch4.Diff(0,commonsuffix));this.diff_cleanupMerge(diffs);return diffs};diff_match_patch4.prototype.diff_compute_=function(text1,text2,checklines,deadline){var diffs,longtext,shorttext,i2,hm,text1_a,text1_b,text2_a,text2_b,mid_common,diffs_a,diffs_b;if(!text1)return[new diff_match_patch4.Diff(1,text2)];if(!text2)return[new diff_match_patch4.Diff(-1,text1)];longtext=text1.length>text2.length?text1:text2;shorttext=text1.length>text2.length?text2:text1;if(-1!=(i2=longtext.indexOf(shorttext))){diffs=[new diff_match_patch4.Diff(1,longtext.substring(0,i2)),new diff_match_patch4.Diff(0,shorttext),new diff_match_patch4.Diff(1,longtext.substring(i2+shorttext.length))];text1.length>text2.length&&(diffs[0][0]=diffs[2][0]=-1);return diffs}if(1==shorttext.length)return[new diff_match_patch4.Diff(-1,text1),new diff_match_patch4.Diff(1,text2)];if(hm=this.diff_halfMatch_(text1,text2)){text1_a=hm[0];text1_b=hm[1];text2_a=hm[2];text2_b=hm[3];mid_common=hm[4];diffs_a=this.diff_main(text1_a,text2_a,checklines,deadline);diffs_b=this.diff_main(text1_b,text2_b,checklines,deadline);return diffs_a.concat([new diff_match_patch4.Diff(0,mid_common)],diffs_b)}return checklines&&text1.length>100&&text2.length>100?this.diff_lineMode_(text1,text2,deadline):this.diff_bisect_(text1,text2,deadline)};diff_match_patch4.prototype.diff_lineMode_=function(text1,text2,deadline){var linearray,diffs,pointer,count_delete,count_insert,text_delete,text_insert,subDiff,j2,a2=this.diff_linesToChars_(text1,text2);text1=a2.chars1;text2=a2.chars2;linearray=a2.lineArray;diffs=this.diff_main(text1,text2,!1,deadline);this.diff_charsToLines_(diffs,linearray);this.diff_cleanupSemantic(diffs);diffs.push(new diff_match_patch4.Diff(0,""));pointer=0;count_delete=0;count_insert=0;text_delete="";text_insert="";for(;pointer<diffs.length;){switch(diffs[pointer][0]){case 1:count_insert++;text_insert+=diffs[pointer][1];break;case-1:count_delete++;text_delete+=diffs[pointer][1];break;case 0:if(count_delete>=1&&count_insert>=1){diffs.splice(pointer-count_delete-count_insert,count_delete+count_insert);pointer=pointer-count_delete-count_insert;for(j2=(subDiff=this.diff_main(text_delete,text_insert,!1,deadline)).length-1;j2>=0;j2--)diffs.splice(pointer,0,subDiff[j2]);pointer+=subDiff.length}count_insert=0;count_delete=0;text_delete="";text_insert="";break}pointer++}diffs.pop();return diffs};diff_match_patch4.prototype.diff_bisect_=function(text1,text2,deadline){var x2,delta,front,k1start,k1end,k2start,k2end,d4,k1,k1_offset,x1,y1,k2_offset,x22,k2,y2,text1_length=text1.length,text2_length=text2.length,max_d=Math.ceil((text1_length+text2_length)/2),v_offset=max_d,v_length=2*max_d,v1=new Array(v_length),v2=new Array(v_length);for(x2=0;x2<v_length;x2++){v1[x2]=-1;v2[x2]=-1}v1[v_offset+1]=0;v2[v_offset+1]=0;front=(delta=text1_length-text2_length)%2!=0;k1start=0;k1end=0;k2start=0;k2end=0;for(d4=0;d4<max_d&&!((new Date).getTime()>deadline);d4++){for(k1=-d4+k1start;k1<=d4-k1end;k1+=2){k1_offset=v_offset+k1;y1=(x1=k1==-d4||k1!=d4&&v1[k1_offset-1]<v1[k1_offset+1]?v1[k1_offset+1]:v1[k1_offset-1]+1)-k1;for(;x1<text1_length&&y1<text2_length&&text1.charAt(x1)==text2.charAt(y1);){x1++;y1++}v1[k1_offset]=x1;if(x1>text1_length)k1end+=2;else if(y1>text2_length)k1start+=2;else if(front&&(k2_offset=v_offset+delta-k1)>=0&&k2_offset<v_length&&-1!=v2[k2_offset]&&x1>=(x22=text1_length-v2[k2_offset]))return this.diff_bisectSplit_(text1,text2,x1,y1,deadline)}for(k2=-d4+k2start;k2<=d4-k2end;k2+=2){k2_offset=v_offset+k2;y2=(x22=k2==-d4||k2!=d4&&v2[k2_offset-1]<v2[k2_offset+1]?v2[k2_offset+1]:v2[k2_offset-1]+1)-k2;for(;x22<text1_length&&y2<text2_length&&text1.charAt(text1_length-x22-1)==text2.charAt(text2_length-y2-1);){x22++;y2++}v2[k2_offset]=x22;if(x22>text1_length)k2end+=2;else if(y2>text2_length)k2start+=2;else if(!front&&(k1_offset=v_offset+delta-k2)>=0&&k1_offset<v_length&&-1!=v1[k1_offset]){y1=v_offset+(x1=v1[k1_offset])-k1_offset;if(x1>=(x22=text1_length-x22))return this.diff_bisectSplit_(text1,text2,x1,y1,deadline)}}}return[new diff_match_patch4.Diff(-1,text1),new diff_match_patch4.Diff(1,text2)]};diff_match_patch4.prototype.diff_bisectSplit_=function(text1,text2,x2,y2,deadline){var text1a=text1.substring(0,x2),text2a=text2.substring(0,y2),text1b=text1.substring(x2),text2b=text2.substring(y2),diffs=this.diff_main(text1a,text2a,!1,deadline),diffsb=this.diff_main(text1b,text2b,!1,deadline);return diffs.concat(diffsb)};diff_match_patch4.prototype.diff_linesToChars_=function(text1,text2){function diff_linesToCharsMunge_(text3){for(var line,chars3="",lineStart=0,lineEnd=-1,lineArrayLength=lineArray.length;lineEnd<text3.length-1;){-1==(lineEnd=text3.indexOf("\n",lineStart))&&(lineEnd=text3.length-1);line=text3.substring(lineStart,lineEnd+1);if(lineHash.hasOwnProperty?lineHash.hasOwnProperty(line):void 0!==lineHash[line])chars3+=String.fromCharCode(lineHash[line]);else{if(lineArrayLength==maxLines){line=text3.substring(lineStart);lineEnd=text3.length}chars3+=String.fromCharCode(lineArrayLength);lineHash[line]=lineArrayLength;lineArray[lineArrayLength++]=line}lineStart=lineEnd+1}return chars3}var maxLines,chars1,lineArray=[],lineHash={};lineArray[0]="";maxLines=4e4;chars1=diff_linesToCharsMunge_(text1);maxLines=65535;return{chars1,chars2:diff_linesToCharsMunge_(text2),lineArray}};diff_match_patch4.prototype.diff_charsToLines_=function(diffs,lineArray){var i2,chars2,text2,j2;for(i2=0;i2<diffs.length;i2++){chars2=diffs[i2][1];text2=[];for(j2=0;j2<chars2.length;j2++)text2[j2]=lineArray[chars2.charCodeAt(j2)];diffs[i2][1]=text2.join("")}};diff_match_patch4.prototype.diff_commonPrefix=function(text1,text2){var pointermin,pointermax,pointermid,pointerstart;if(!text1||!text2||text1.charAt(0)!=text2.charAt(0))return 0;pointermin=0;pointermid=pointermax=Math.min(text1.length,text2.length);pointerstart=0;for(;pointermin<pointermid;){text1.substring(pointerstart,pointermid)==text2.substring(pointerstart,pointermid)?pointerstart=pointermin=pointermid:pointermax=pointermid;pointermid=Math.floor((pointermax-pointermin)/2+pointermin)}return pointermid};diff_match_patch4.prototype.diff_commonSuffix=function(text1,text2){var pointermin,pointermax,pointermid,pointerend;if(!text1||!text2||text1.charAt(text1.length-1)!=text2.charAt(text2.length-1))return 0;pointermin=0;pointermid=pointermax=Math.min(text1.length,text2.length);pointerend=0;for(;pointermin<pointermid;){text1.substring(text1.length-pointermid,text1.length-pointerend)==text2.substring(text2.length-pointermid,text2.length-pointerend)?pointerend=pointermin=pointermid:pointermax=pointermid;pointermid=Math.floor((pointermax-pointermin)/2+pointermin)}return pointermid};diff_match_patch4.prototype.diff_commonOverlap_=function(text1,text2){var text_length,best,length,pattern,found,text1_length=text1.length,text2_length=text2.length;if(0==text1_length||0==text2_length)return 0;text1_length>text2_length?text1=text1.substring(text1_length-text2_length):text1_length<text2_length&&(text2=text2.substring(0,text1_length));text_length=Math.min(text1_length,text2_length);if(text1==text2)return text_length;best=0;length=1;for(;;){pattern=text1.substring(text_length-length);if(-1==(found=text2.indexOf(pattern)))return best;length+=found;if(0==found||text1.substring(text_length-length)==text2.substring(0,length)){best=length;length++}}};diff_match_patch4.prototype.diff_halfMatch_=function(text1,text2){function diff_halfMatchI_(longtext2,shorttext2,i2){for(var best_longtext_a,best_longtext_b,best_shorttext_a,best_shorttext_b,prefixLength,suffixLength,seed=longtext2.substring(i2,i2+Math.floor(longtext2.length/4)),j2=-1,best_common="";-1!=(j2=shorttext2.indexOf(seed,j2+1));){prefixLength=dmp.diff_commonPrefix(longtext2.substring(i2),shorttext2.substring(j2));suffixLength=dmp.diff_commonSuffix(longtext2.substring(0,i2),shorttext2.substring(0,j2));if(best_common.length<suffixLength+prefixLength){best_common=shorttext2.substring(j2-suffixLength,j2)+shorttext2.substring(j2,j2+prefixLength);best_longtext_a=longtext2.substring(0,i2-suffixLength);best_longtext_b=longtext2.substring(i2+prefixLength);best_shorttext_a=shorttext2.substring(0,j2-suffixLength);best_shorttext_b=shorttext2.substring(j2+prefixLength)}}return 2*best_common.length>=longtext2.length?[best_longtext_a,best_longtext_b,best_shorttext_a,best_shorttext_b,best_common]:null}var longtext,shorttext,dmp,hm1,hm2,hm,text1_a,text1_b,text2_a,text2_b;if(this.Diff_Timeout<=0)return null;longtext=text1.length>text2.length?text1:text2;shorttext=text1.length>text2.length?text2:text1;if(longtext.length<4||2*shorttext.length<longtext.length)return null;dmp=this;hm1=diff_halfMatchI_(longtext,shorttext,Math.ceil(longtext.length/4));hm2=diff_halfMatchI_(longtext,shorttext,Math.ceil(longtext.length/2));if(!hm1&&!hm2)return null;hm=hm2?hm1&&hm1[4].length>hm2[4].length?hm1:hm2:hm1;if(text1.length>text2.length){text1_a=hm[0];text1_b=hm[1];text2_a=hm[2];text2_b=hm[3]}else{text2_a=hm[0];text2_b=hm[1];text1_a=hm[2];text1_b=hm[3]}return[text1_a,text1_b,text2_a,text2_b,hm[4]]};diff_match_patch4.prototype.diff_cleanupSemantic=function(diffs){for(var deletion,insertion,overlap_length1,overlap_length2,changes3=!1,equalities=[],equalitiesLength=0,lastEquality=null,pointer=0,length_insertions1=0,length_deletions1=0,length_insertions2=0,length_deletions2=0;pointer<diffs.length;){if(0==diffs[pointer][0]){equalities[equalitiesLength++]=pointer;length_insertions1=length_insertions2;length_deletions1=length_deletions2;length_insertions2=0;length_deletions2=0;lastEquality=diffs[pointer][1]}else{1==diffs[pointer][0]?length_insertions2+=diffs[pointer][1].length:length_deletions2+=diffs[pointer][1].length;if(lastEquality&&lastEquality.length<=Math.max(length_insertions1,length_deletions1)&&lastEquality.length<=Math.max(length_insertions2,length_deletions2)){diffs.splice(equalities[equalitiesLength-1],0,new diff_match_patch4.Diff(-1,lastEquality));diffs[equalities[equalitiesLength-1]+1][0]=1;equalitiesLength--;pointer=--equalitiesLength>0?equalities[equalitiesLength-1]:-1;length_insertions1=0;length_deletions1=0;length_insertions2=0;length_deletions2=0;lastEquality=null;changes3=!0}}pointer++}changes3&&this.diff_cleanupMerge(diffs);this.diff_cleanupSemanticLossless(diffs);pointer=1;for(;pointer<diffs.length;){if(-1==diffs[pointer-1][0]&&1==diffs[pointer][0]){deletion=diffs[pointer-1][1];insertion=diffs[pointer][1];if((overlap_length1=this.diff_commonOverlap_(deletion,insertion))>=(overlap_length2=this.diff_commonOverlap_(insertion,deletion))){if(overlap_length1>=deletion.length/2||overlap_length1>=insertion.length/2){diffs.splice(pointer,0,new diff_match_patch4.Diff(0,insertion.substring(0,overlap_length1)));diffs[pointer-1][1]=deletion.substring(0,deletion.length-overlap_length1);diffs[pointer+1][1]=insertion.substring(overlap_length1);pointer++}}else if(overlap_length2>=deletion.length/2||overlap_length2>=insertion.length/2){diffs.splice(pointer,0,new diff_match_patch4.Diff(0,deletion.substring(0,overlap_length2)));diffs[pointer-1][0]=1;diffs[pointer-1][1]=insertion.substring(0,insertion.length-overlap_length2);diffs[pointer+1][0]=-1;diffs[pointer+1][1]=deletion.substring(overlap_length2);pointer++}pointer++}pointer++}};diff_match_patch4.prototype.diff_cleanupSemanticLossless=function(diffs){function diff_cleanupSemanticScore_(one,two){var char1,char2,nonAlphaNumeric1,nonAlphaNumeric2,whitespace1,whitespace2,lineBreak1,lineBreak2,blankLine1,blankLine2;if(!one||!two)return 6;char1=one.charAt(one.length-1);char2=two.charAt(0);nonAlphaNumeric1=char1.match(diff_match_patch4.nonAlphaNumericRegex_);nonAlphaNumeric2=char2.match(diff_match_patch4.nonAlphaNumericRegex_);whitespace1=nonAlphaNumeric1&&char1.match(diff_match_patch4.whitespaceRegex_);whitespace2=nonAlphaNumeric2&&char2.match(diff_match_patch4.whitespaceRegex_);lineBreak1=whitespace1&&char1.match(diff_match_patch4.linebreakRegex_);lineBreak2=whitespace2&&char2.match(diff_match_patch4.linebreakRegex_);blankLine1=lineBreak1&&one.match(diff_match_patch4.blanklineEndRegex_);blankLine2=lineBreak2&&two.match(diff_match_patch4.blanklineStartRegex_);return blankLine1||blankLine2?5:lineBreak1||lineBreak2?4:nonAlphaNumeric1&&!whitespace1&&whitespace2?3:whitespace1||whitespace2?2:nonAlphaNumeric1||nonAlphaNumeric2?1:0}for(var equality1,edit,equality2,commonOffset,commonString,bestEquality1,bestEdit,bestEquality2,bestScore,score,pointer=1;pointer<diffs.length-1;){if(0==diffs[pointer-1][0]&&0==diffs[pointer+1][0]){equality1=diffs[pointer-1][1];edit=diffs[pointer][1];equality2=diffs[pointer+1][1];if(commonOffset=this.diff_commonSuffix(equality1,edit)){commonString=edit.substring(edit.length-commonOffset);equality1=equality1.substring(0,equality1.length-commonOffset);edit=commonString+edit.substring(0,edit.length-commonOffset);equality2=commonString+equality2}bestEquality1=equality1;bestEdit=edit;bestEquality2=equality2;bestScore=diff_cleanupSemanticScore_(equality1,edit)+diff_cleanupSemanticScore_(edit,equality2);for(;edit.charAt(0)===equality2.charAt(0);){equality1+=edit.charAt(0);edit=edit.substring(1)+equality2.charAt(0);equality2=equality2.substring(1);if((score=diff_cleanupSemanticScore_(equality1,edit)+diff_cleanupSemanticScore_(edit,equality2))>=bestScore){bestScore=score;bestEquality1=equality1;bestEdit=edit;bestEquality2=equality2}}if(diffs[pointer-1][1]!=bestEquality1){if(bestEquality1)diffs[pointer-1][1]=bestEquality1;else{diffs.splice(pointer-1,1);pointer--}diffs[pointer][1]=bestEdit;if(bestEquality2)diffs[pointer+1][1]=bestEquality2;else{diffs.splice(pointer+1,1);pointer--}}}pointer++}};diff_match_patch4.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch4.whitespaceRegex_=/\s/;diff_match_patch4.linebreakRegex_=/[\r\n]/;diff_match_patch4.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch4.blanklineStartRegex_=/^\r?\n\r?\n/;diff_match_patch4.prototype.diff_cleanupEfficiency=function(diffs){for(var changes3=!1,equalities=[],equalitiesLength=0,lastEquality=null,pointer=0,pre_ins=!1,pre_del=!1,post_ins=!1,post_del=!1;pointer<diffs.length;){if(0==diffs[pointer][0]){if(diffs[pointer][1].length<this.Diff_EditCost&&(post_ins||post_del)){equalities[equalitiesLength++]=pointer;pre_ins=post_ins;pre_del=post_del;lastEquality=diffs[pointer][1]}else{equalitiesLength=0;lastEquality=null}post_ins=post_del=!1}else{-1==diffs[pointer][0]?post_del=!0:post_ins=!0;if(lastEquality&&(pre_ins&&pre_del&&post_ins&&post_del||lastEquality.length<this.Diff_EditCost/2&&pre_ins+pre_del+post_ins+post_del==3)){diffs.splice(equalities[equalitiesLength-1],0,new diff_match_patch4.Diff(-1,lastEquality));diffs[equalities[equalitiesLength-1]+1][0]=1;equalitiesLength--;lastEquality=null;if(pre_ins&&pre_del){post_ins=post_del=!0;equalitiesLength=0}else{pointer=--equalitiesLength>0?equalities[equalitiesLength-1]:-1;post_ins=post_del=!1}changes3=!0}}pointer++}changes3&&this.diff_cleanupMerge(diffs)};diff_match_patch4.prototype.diff_cleanupMerge=function(diffs){var pointer,count_delete,count_insert,text_delete,text_insert,commonlength,changes3;diffs.push(new diff_match_patch4.Diff(0,""));pointer=0;count_delete=0;count_insert=0;text_delete="";text_insert="";for(;pointer<diffs.length;)switch(diffs[pointer][0]){case 1:count_insert++;text_insert+=diffs[pointer][1];pointer++;break;case-1:count_delete++;text_delete+=diffs[pointer][1];pointer++;break;case 0:if(count_delete+count_insert>1){if(0!==count_delete&&0!==count_insert){if(0!==(commonlength=this.diff_commonPrefix(text_insert,text_delete))){if(pointer-count_delete-count_insert>0&&0==diffs[pointer-count_delete-count_insert-1][0])diffs[pointer-count_delete-count_insert-1][1]+=text_insert.substring(0,commonlength);else{diffs.splice(0,0,new diff_match_patch4.Diff(0,text_insert.substring(0,commonlength)));pointer++}text_insert=text_insert.substring(commonlength);text_delete=text_delete.substring(commonlength)}if(0!==(commonlength=this.diff_commonSuffix(text_insert,text_delete))){diffs[pointer][1]=text_insert.substring(text_insert.length-commonlength)+diffs[pointer][1];text_insert=text_insert.substring(0,text_insert.length-commonlength);text_delete=text_delete.substring(0,text_delete.length-commonlength)}}pointer-=count_delete+count_insert;diffs.splice(pointer,count_delete+count_insert);if(text_delete.length){diffs.splice(pointer,0,new diff_match_patch4.Diff(-1,text_delete));pointer++}if(text_insert.length){diffs.splice(pointer,0,new diff_match_patch4.Diff(1,text_insert));pointer++}pointer++}else if(0!==pointer&&0==diffs[pointer-1][0]){diffs[pointer-1][1]+=diffs[pointer][1];diffs.splice(pointer,1)}else pointer++;count_insert=0;count_delete=0;text_delete="";text_insert="";break}""===diffs[diffs.length-1][1]&&diffs.pop();changes3=!1;pointer=1;for(;pointer<diffs.length-1;){if(0==diffs[pointer-1][0]&&0==diffs[pointer+1][0])if(diffs[pointer][1].substring(diffs[pointer][1].length-diffs[pointer-1][1].length)==diffs[pointer-1][1]){diffs[pointer][1]=diffs[pointer-1][1]+diffs[pointer][1].substring(0,diffs[pointer][1].length-diffs[pointer-1][1].length);diffs[pointer+1][1]=diffs[pointer-1][1]+diffs[pointer+1][1];diffs.splice(pointer-1,1);changes3=!0}else if(diffs[pointer][1].substring(0,diffs[pointer+1][1].length)==diffs[pointer+1][1]){diffs[pointer-1][1]+=diffs[pointer+1][1];diffs[pointer][1]=diffs[pointer][1].substring(diffs[pointer+1][1].length)+diffs[pointer+1][1];diffs.splice(pointer+1,1);changes3=!0}pointer++}changes3&&this.diff_cleanupMerge(diffs)};diff_match_patch4.prototype.diff_xIndex=function(diffs,loc){var x2,chars1=0,chars2=0,last_chars1=0,last_chars2=0;for(x2=0;x2<diffs.length;x2++){1!==diffs[x2][0]&&(chars1+=diffs[x2][1].length);-1!==diffs[x2][0]&&(chars2+=diffs[x2][1].length);if(chars1>loc)break;last_chars1=chars1;last_chars2=chars2}return diffs.length!=x2&&-1===diffs[x2][0]?last_chars2:last_chars2+(loc-last_chars1)};diff_match_patch4.prototype.diff_prettyHtml=function(diffs){var x2,op,text2,html2=[],pattern_amp=/&/g,pattern_lt=/</g,pattern_gt=/>/g,pattern_para=/\n/g;for(x2=0;x2<diffs.length;x2++){op=diffs[x2][0];text2=diffs[x2][1].replace(pattern_amp,"&amp;").replace(pattern_lt,"&lt;").replace(pattern_gt,"&gt;").replace(pattern_para,"&para;<br>");switch(op){case 1:html2[x2]='<ins style="background:#e6ffe6;">'+text2+"</ins>";break;case-1:html2[x2]='<del style="background:#ffe6e6;">'+text2+"</del>";break;case 0:html2[x2]="<span>"+text2+"</span>";break}}return html2.join("")};diff_match_patch4.prototype.diff_text1=function(diffs){var x2,text2=[];for(x2=0;x2<diffs.length;x2++)1!==diffs[x2][0]&&(text2[x2]=diffs[x2][1]);return text2.join("")};diff_match_patch4.prototype.diff_text2=function(diffs){var x2,text2=[];for(x2=0;x2<diffs.length;x2++)-1!==diffs[x2][0]&&(text2[x2]=diffs[x2][1]);return text2.join("")};diff_match_patch4.prototype.diff_levenshtein=function(diffs){var x2,op,data,levenshtein=0,insertions=0,deletions=0;for(x2=0;x2<diffs.length;x2++){op=diffs[x2][0];data=diffs[x2][1];switch(op){case 1:insertions+=data.length;break;case-1:deletions+=data.length;break;case 0:levenshtein+=Math.max(insertions,deletions);insertions=0;deletions=0;break}}return levenshtein+Math.max(insertions,deletions)};diff_match_patch4.prototype.diff_toDelta=function(diffs){var x2,text2=[];for(x2=0;x2<diffs.length;x2++)switch(diffs[x2][0]){case 1:text2[x2]="+"+encodeURI(diffs[x2][1]);break;case-1:text2[x2]="-"+diffs[x2][1].length;break;case 0:text2[x2]="="+diffs[x2][1].length;break}return text2.join("\t").replace(/%20/g," ")};diff_match_patch4.prototype.diff_fromDelta=function(text1,delta){var x2,param,n3,text2,diffs=[],diffsLength=0,pointer=0,tokens=delta.split(/\t/g);for(x2=0;x2<tokens.length;x2++){param=tokens[x2].substring(1);switch(tokens[x2].charAt(0)){case"+":try{diffs[diffsLength++]=new diff_match_patch4.Diff(1,decodeURI(param))}catch(ex){throw new Error("Illegal escape in diff_fromDelta: "+param)}break;case"-":case"=":n3=parseInt(param,10);if(isNaN(n3)||n3<0)throw new Error("Invalid number in diff_fromDelta: "+param);text2=text1.substring(pointer,pointer+=n3);"="==tokens[x2].charAt(0)?diffs[diffsLength++]=new diff_match_patch4.Diff(0,text2):diffs[diffsLength++]=new diff_match_patch4.Diff(-1,text2);break;default:if(tokens[x2])throw new Error("Invalid diff operation in diff_fromDelta: "+tokens[x2])}}if(pointer!=text1.length)throw new Error("Delta length ("+pointer+") does not equal source text length ("+text1.length+").");return diffs};diff_match_patch4.prototype.match_main=function(text2,pattern,loc){if(null==text2||null==pattern||null==loc)throw new Error("Null input. (match_main)");loc=Math.max(0,Math.min(loc,text2.length));return text2==pattern?0:text2.length?text2.substring(loc,loc+pattern.length)==pattern?loc:this.match_bitap_(text2,pattern,loc):-1};diff_match_patch4.prototype.match_bitap_=function(text2,pattern,loc){function match_bitapScore_(e3,x2){var accuracy=e3/pattern.length,proximity=Math.abs(loc-x2);return dmp.Match_Distance?accuracy+proximity/dmp.Match_Distance:proximity?1:accuracy}var s2,dmp,score_threshold,best_loc,matchmask,bin_min,bin_mid,bin_max,last_rd,d4,start,finish,rd,j2,charMatch,score;if(pattern.length>this.Match_MaxBits)throw new Error("Pattern too long for this browser.");s2=this.match_alphabet_(pattern);dmp=this;score_threshold=this.Match_Threshold;if(-1!=(best_loc=text2.indexOf(pattern,loc))){score_threshold=Math.min(match_bitapScore_(0,best_loc),score_threshold);-1!=(best_loc=text2.lastIndexOf(pattern,loc+pattern.length))&&(score_threshold=Math.min(match_bitapScore_(0,best_loc),score_threshold))}matchmask=1<<pattern.length-1;best_loc=-1;bin_max=pattern.length+text2.length;for(d4=0;d4<pattern.length;d4++){bin_min=0;bin_mid=bin_max;for(;bin_min<bin_mid;){match_bitapScore_(d4,loc+bin_mid)<=score_threshold?bin_min=bin_mid:bin_max=bin_mid;bin_mid=Math.floor((bin_max-bin_min)/2+bin_min)}bin_max=bin_mid;start=Math.max(1,loc-bin_mid+1);finish=Math.min(loc+bin_mid,text2.length)+pattern.length;(rd=Array(finish+2))[finish+1]=(1<<d4)-1;for(j2=finish;j2>=start;j2--){charMatch=s2[text2.charAt(j2-1)];rd[j2]=0===d4?(rd[j2+1]<<1|1)&charMatch:(rd[j2+1]<<1|1)&charMatch|(last_rd[j2+1]|last_rd[j2])<<1|1|last_rd[j2+1];if(rd[j2]&matchmask&&(score=match_bitapScore_(d4,j2-1))<=score_threshold){score_threshold=score;if(!((best_loc=j2-1)>loc))break;start=Math.max(1,2*loc-best_loc)}}if(match_bitapScore_(d4+1,loc)>score_threshold)break;last_rd=rd}return best_loc};diff_match_patch4.prototype.match_alphabet_=function(pattern){var i2,s2={};for(i2=0;i2<pattern.length;i2++)s2[pattern.charAt(i2)]=0;for(i2=0;i2<pattern.length;i2++)s2[pattern.charAt(i2)]|=1<<pattern.length-i2-1;return s2};diff_match_patch4.prototype.patch_addContext_=function(patch,text2){var pattern,padding,prefix,suffix;if(0!=text2.length){if(null===patch.start2)throw Error("patch not initialized");pattern=text2.substring(patch.start2,patch.start2+patch.length1);padding=0;for(;text2.indexOf(pattern)!=text2.lastIndexOf(pattern)&&pattern.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;){padding+=this.Patch_Margin;pattern=text2.substring(patch.start2-padding,patch.start2+patch.length1+padding)}padding+=this.Patch_Margin;(prefix=text2.substring(patch.start2-padding,patch.start2))&&patch.diffs.unshift(new diff_match_patch4.Diff(0,prefix));(suffix=text2.substring(patch.start2+patch.length1,patch.start2+patch.length1+padding))&&patch.diffs.push(new diff_match_patch4.Diff(0,suffix));patch.start1-=prefix.length;patch.start2-=prefix.length;patch.length1+=prefix.length+suffix.length;patch.length2+=prefix.length+suffix.length}};diff_match_patch4.prototype.patch_make=function(a2,opt_b,opt_c){var text1,diffs,patches,patch,patchDiffLength,char_count1,char_count2,prepatch_text,postpatch_text,x2,diff_type,diff_text;if("string"==typeof a2&&"string"==typeof opt_b&&void 0===opt_c){text1=a2;if((diffs=this.diff_main(text1,opt_b,!0)).length>2){this.diff_cleanupSemantic(diffs);this.diff_cleanupEfficiency(diffs)}}else if(a2&&"object"==typeof a2&&void 0===opt_b&&void 0===opt_c){diffs=a2;text1=this.diff_text1(diffs)}else if("string"==typeof a2&&opt_b&&"object"==typeof opt_b&&void 0===opt_c){text1=a2;diffs=opt_b}else{if("string"!=typeof a2||"string"!=typeof opt_b||!opt_c||"object"!=typeof opt_c)throw new Error("Unknown call format to patch_make.");text1=a2;diffs=opt_c}if(0===diffs.length)return[];patches=[];patch=new diff_match_patch4.patch_obj;patchDiffLength=0;char_count1=0;char_count2=0;prepatch_text=text1;postpatch_text=text1;for(x2=0;x2<diffs.length;x2++){diff_type=diffs[x2][0];diff_text=diffs[x2][1];if(!patchDiffLength&&0!==diff_type){patch.start1=char_count1;patch.start2=char_count2}switch(diff_type){case 1:patch.diffs[patchDiffLength++]=diffs[x2];patch.length2+=diff_text.length;postpatch_text=postpatch_text.substring(0,char_count2)+diff_text+postpatch_text.substring(char_count2);break;case-1:patch.length1+=diff_text.length;patch.diffs[patchDiffLength++]=diffs[x2];postpatch_text=postpatch_text.substring(0,char_count2)+postpatch_text.substring(char_count2+diff_text.length);break;case 0:if(diff_text.length<=2*this.Patch_Margin&&patchDiffLength&&diffs.length!=x2+1){patch.diffs[patchDiffLength++]=diffs[x2];patch.length1+=diff_text.length;patch.length2+=diff_text.length}else if(diff_text.length>=2*this.Patch_Margin&&patchDiffLength){this.patch_addContext_(patch,prepatch_text);patches.push(patch);patch=new diff_match_patch4.patch_obj;patchDiffLength=0;prepatch_text=postpatch_text;char_count1=char_count2}break}1!==diff_type&&(char_count1+=diff_text.length);-1!==diff_type&&(char_count2+=diff_text.length)}if(patchDiffLength){this.patch_addContext_(patch,prepatch_text);patches.push(patch)}return patches};diff_match_patch4.prototype.patch_deepCopy=function(patches){var x2,patch,patchCopy,y2,patchesCopy=[];for(x2=0;x2<patches.length;x2++){patch=patches[x2];(patchCopy=new diff_match_patch4.patch_obj).diffs=[];for(y2=0;y2<patch.diffs.length;y2++)patchCopy.diffs[y2]=new diff_match_patch4.Diff(patch.diffs[y2][0],patch.diffs[y2][1]);patchCopy.start1=patch.start1;patchCopy.start2=patch.start2;patchCopy.length1=patch.length1;patchCopy.length2=patch.length2;patchesCopy[x2]=patchCopy}return patchesCopy};diff_match_patch4.prototype.patch_apply=function(patches,text2){var nullPadding,delta,results,x2,expected_loc,text1,start_loc,end_loc,text22,diffs,index1,index22,y2,mod;if(0==patches.length)return[text2,[]];patches=this.patch_deepCopy(patches);text2=(nullPadding=this.patch_addPadding(patches))+text2+nullPadding;this.patch_splitMax(patches);delta=0;results=[];for(x2=0;x2<patches.length;x2++){expected_loc=patches[x2].start2+delta;end_loc=-1;(text1=this.diff_text1(patches[x2].diffs)).length>this.Match_MaxBits?-1!=(start_loc=this.match_main(text2,text1.substring(0,this.Match_MaxBits),expected_loc))&&(-1==(end_loc=this.match_main(text2,text1.substring(text1.length-this.Match_MaxBits),expected_loc+text1.length-this.Match_MaxBits))||start_loc>=end_loc)&&(start_loc=-1):start_loc=this.match_main(text2,text1,expected_loc);if(-1==start_loc){results[x2]=!1;delta-=patches[x2].length2-patches[x2].length1}else{results[x2]=!0;delta=start_loc-expected_loc;if(text1==(text22=-1==end_loc?text2.substring(start_loc,start_loc+text1.length):text2.substring(start_loc,end_loc+this.Match_MaxBits)))text2=text2.substring(0,start_loc)+this.diff_text2(patches[x2].diffs)+text2.substring(start_loc+text1.length);else{diffs=this.diff_main(text1,text22,!1);if(text1.length>this.Match_MaxBits&&this.diff_levenshtein(diffs)/text1.length>this.Patch_DeleteThreshold)results[x2]=!1;else{this.diff_cleanupSemanticLossless(diffs);index1=0;for(y2=0;y2<patches[x2].diffs.length;y2++){0!==(mod=patches[x2].diffs[y2])[0]&&(index22=this.diff_xIndex(diffs,index1));1===mod[0]?text2=text2.substring(0,start_loc+index22)+mod[1]+text2.substring(start_loc+index22):-1===mod[0]&&(text2=text2.substring(0,start_loc+index22)+text2.substring(start_loc+this.diff_xIndex(diffs,index1+mod[1].length)));-1!==mod[0]&&(index1+=mod[1].length)}}}}}return[text2=text2.substring(nullPadding.length,text2.length-nullPadding.length),results]};diff_match_patch4.prototype.patch_addPadding=function(patches){var x2,patch,diffs,extraLength,paddingLength=this.Patch_Margin,nullPadding="";for(x2=1;x2<=paddingLength;x2++)nullPadding+=String.fromCharCode(x2);for(x2=0;x2<patches.length;x2++){patches[x2].start1+=paddingLength;patches[x2].start2+=paddingLength}if(0==(diffs=(patch=patches[0]).diffs).length||0!=diffs[0][0]){diffs.unshift(new diff_match_patch4.Diff(0,nullPadding));patch.start1-=paddingLength;patch.start2-=paddingLength;patch.length1+=paddingLength;patch.length2+=paddingLength}else if(paddingLength>diffs[0][1].length){extraLength=paddingLength-diffs[0][1].length;diffs[0][1]=nullPadding.substring(diffs[0][1].length)+diffs[0][1];patch.start1-=extraLength;patch.start2-=extraLength;patch.length1+=extraLength;patch.length2+=extraLength}if(0==(diffs=(patch=patches[patches.length-1]).diffs).length||0!=diffs[diffs.length-1][0]){diffs.push(new diff_match_patch4.Diff(0,nullPadding));patch.length1+=paddingLength;patch.length2+=paddingLength}else if(paddingLength>diffs[diffs.length-1][1].length){extraLength=paddingLength-diffs[diffs.length-1][1].length;diffs[diffs.length-1][1]+=nullPadding.substring(0,extraLength);patch.length1+=extraLength;patch.length2+=extraLength}return nullPadding};diff_match_patch4.prototype.patch_splitMax=function(patches){var x2,bigpatch,start1,start2,precontext,patch,empty2,diff_type,diff_text,postcontext,patch_size=this.Match_MaxBits;for(x2=0;x2<patches.length;x2++)if(!(patches[x2].length1<=patch_size)){bigpatch=patches[x2];patches.splice(x2--,1);start1=bigpatch.start1;start2=bigpatch.start2;precontext="";for(;0!==bigpatch.diffs.length;){empty2=!0;(patch=new diff_match_patch4.patch_obj).start1=start1-precontext.length;patch.start2=start2-precontext.length;if(""!==precontext){patch.length1=patch.length2=precontext.length;patch.diffs.push(new diff_match_patch4.Diff(0,precontext))}for(;0!==bigpatch.diffs.length&&patch.length1<patch_size-this.Patch_Margin;){diff_type=bigpatch.diffs[0][0];diff_text=bigpatch.diffs[0][1];if(1===diff_type){patch.length2+=diff_text.length;start2+=diff_text.length;patch.diffs.push(bigpatch.diffs.shift());empty2=!1}else if(-1===diff_type&&1==patch.diffs.length&&0==patch.diffs[0][0]&&diff_text.length>2*patch_size){patch.length1+=diff_text.length;start1+=diff_text.length;empty2=!1;patch.diffs.push(new diff_match_patch4.Diff(diff_type,diff_text));bigpatch.diffs.shift()}else{diff_text=diff_text.substring(0,patch_size-patch.length1-this.Patch_Margin);patch.length1+=diff_text.length;start1+=diff_text.length;if(0===diff_type){patch.length2+=diff_text.length;start2+=diff_text.length}else empty2=!1;patch.diffs.push(new diff_match_patch4.Diff(diff_type,diff_text));diff_text==bigpatch.diffs[0][1]?bigpatch.diffs.shift():bigpatch.diffs[0][1]=bigpatch.diffs[0][1].substring(diff_text.length)}}precontext=(precontext=this.diff_text2(patch.diffs)).substring(precontext.length-this.Patch_Margin);if(""!==(postcontext=this.diff_text1(bigpatch.diffs).substring(0,this.Patch_Margin))){patch.length1+=postcontext.length;patch.length2+=postcontext.length;0!==patch.diffs.length&&0===patch.diffs[patch.diffs.length-1][0]?patch.diffs[patch.diffs.length-1][1]+=postcontext:patch.diffs.push(new diff_match_patch4.Diff(0,postcontext))}empty2||patches.splice(++x2,0,patch)}}};diff_match_patch4.prototype.patch_toText=function(patches){var x2,text2=[];for(x2=0;x2<patches.length;x2++)text2[x2]=patches[x2];return text2.join("")};diff_match_patch4.prototype.patch_fromText=function(textline){var text2,textPointer,patchHeader,m3,patch,sign2,line,patches=[];if(!textline)return patches;text2=textline.split("\n");textPointer=0;patchHeader=/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/;for(;textPointer<text2.length;){if(!(m3=text2[textPointer].match(patchHeader)))throw new Error("Invalid patch string: "+text2[textPointer]);patch=new diff_match_patch4.patch_obj;patches.push(patch);patch.start1=parseInt(m3[1],10);if(""===m3[2]){patch.start1--;patch.length1=1}else if("0"==m3[2])patch.length1=0;else{patch.start1--;patch.length1=parseInt(m3[2],10)}patch.start2=parseInt(m3[3],10);if(""===m3[4]){patch.start2--;patch.length2=1}else if("0"==m3[4])patch.length2=0;else{patch.start2--;patch.length2=parseInt(m3[4],10)}textPointer++;for(;textPointer<text2.length;){sign2=text2[textPointer].charAt(0);try{line=decodeURI(text2[textPointer].substring(1))}catch(ex){throw new Error("Illegal escape in patch_fromText: "+line)}if("-"==sign2)patch.diffs.push(new diff_match_patch4.Diff(-1,line));else if("+"==sign2)patch.diffs.push(new diff_match_patch4.Diff(1,line));else if(" "==sign2)patch.diffs.push(new diff_match_patch4.Diff(0,line));else{if("@"==sign2)break;if(""!==sign2)throw new Error('Invalid patch mode "'+sign2+'" in: '+line)}textPointer++}}return patches};diff_match_patch4.patch_obj=function(){this.diffs=[];this.start1=null;this.start2=null;this.length1=0;this.length2=0};diff_match_patch4.patch_obj.prototype.toString=function(){var text2,op,x2;text2=["@@ -"+(0===this.length1?this.start1+",0":1==this.length1?this.start1+1:this.start1+1+","+this.length1)+" +"+(0===this.length2?this.start2+",0":1==this.length2?this.start2+1:this.start2+1+","+this.length2)+" @@\n"];for(x2=0;x2<this.diffs.length;x2++){switch(this.diffs[x2][0]){case 1:op="+";break;case-1:op="-";break;case 0:op=" ";break}text2[x2+1]=op+encodeURI(this.diffs[x2][1])+"\n"}return text2.join("").replace(/%20/g," ")};module2.exports=diff_match_patch4;module2.exports.diff_match_patch=diff_match_patch4;module2.exports.DIFF_DELETE=-1;module2.exports.DIFF_INSERT=1;module2.exports.DIFF_EQUAL=0}}),init_fromUtf8_browser=__esm({"node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js"(){fromUtf8=input=>(new TextEncoder).encode(input)}}),init_toUint8Array=__esm({"node_modules/@smithy/util-utf8/dist-es/toUint8Array.js"(){init_fromUtf8_browser();toUint8Array=data=>"string"==typeof data?fromUtf8(data):ArrayBuffer.isView(data)?new Uint8Array(data.buffer,data.byteOffset,data.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(data)}}),init_toUtf8_browser=__esm({"node_modules/@smithy/util-utf8/dist-es/toUtf8.browser.js"(){toUtf8=input=>{if("string"==typeof input)return input;if("object"!=typeof input||"number"!=typeof input.byteOffset||"number"!=typeof input.byteLength)throw new Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return new TextDecoder("utf-8").decode(input)}}}),init_dist_es=__esm({"node_modules/@smithy/util-utf8/dist-es/index.js"(){init_fromUtf8_browser();init_toUint8Array();init_toUtf8_browser()}}),init_EventStreamSerde=__esm({"node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js"(){init_dist_es();EventStreamSerde=class{constructor({marshaller,serializer,deserializer,serdeContext,defaultContentType}){__publicField(this,"marshaller");__publicField(this,"serializer");__publicField(this,"deserializer");__publicField(this,"serdeContext");__publicField(this,"defaultContentType");this.marshaller=marshaller;this.serializer=serializer;this.deserializer=deserializer;this.serdeContext=serdeContext;this.defaultContentType=defaultContentType}async serializeEventStream({eventStream,requestSchema,initialRequest}){const marshaller=this.marshaller,eventStreamMember=requestSchema.getEventStreamMember(),unionSchema=requestSchema.getMemberSchema(eventStreamMember),serializer=this.serializer,defaultContentType=this.defaultContentType,initialRequestMarker=Symbol("initialRequestMarker"),eventStreamIterable={async*[Symbol.asyncIterator](){if(initialRequest){const headers={":event-type":{type:"string",value:"initial-request"},":message-type":{type:"string",value:"event"},":content-type":{type:"string",value:defaultContentType}};serializer.write(requestSchema,initialRequest);const body=serializer.flush();yield{[initialRequestMarker]:!0,headers,body}}for await(const page of eventStream)yield page}};return marshaller.serialize(eventStreamIterable,event2=>{var _a8;if(event2[initialRequestMarker])return{headers:event2.headers,body:event2.body};const unionMember=null!=(_a8=Object.keys(event2).find(key3=>"__type"!==key3))?_a8:"",{additionalHeaders,body,eventType,explicitPayloadContentType}=this.writeEventBody(unionMember,unionSchema,event2);return{headers:{":event-type":{type:"string",value:eventType},":message-type":{type:"string",value:"event"},":content-type":{type:"string",value:null!=explicitPayloadContentType?explicitPayloadContentType:defaultContentType},...additionalHeaders},body}})}async deserializeEventStream({response,responseSchema,initialResponseContainer}){var _a8;const marshaller=this.marshaller,eventStreamMember=responseSchema.getEventStreamMember(),memberSchemas=responseSchema.getMemberSchema(eventStreamMember).getMemberSchemas(),initialResponseMarker=Symbol("initialResponseMarker"),asyncIterable=marshaller.deserialize(response.body,async event2=>{var _a9,_b5,_c3,_d2;const unionMember=null!=(_a9=Object.keys(event2).find(key3=>"__type"!==key3))?_a9:"",body=event2[unionMember].body;if("initial-response"===unionMember){const dataObject=await this.deserializer.read(responseSchema,body);delete dataObject[eventStreamMember];return{[initialResponseMarker]:!0,...dataObject}}if(unionMember in memberSchemas){const eventStreamSchema=memberSchemas[unionMember];if(eventStreamSchema.isStructSchema()){const out={};let hasBindings=!1;for(const[name,member2]of eventStreamSchema.structIterator()){const{eventHeader,eventPayload}=member2.getMergedTraits();hasBindings=hasBindings||Boolean(eventHeader||eventPayload);if(eventPayload)member2.isBlobSchema()?out[name]=body:member2.isStringSchema()?out[name]=(null!=(_c3=null==(_b5=this.serdeContext)?void 0:_b5.utf8Encoder)?_c3:toUtf8)(body):member2.isStructSchema()&&(out[name]=await this.deserializer.read(member2,body));else if(eventHeader){const value=null==(_d2=event2[unionMember].headers[name])?void 0:_d2.value;null!=value&&(member2.isNumericSchema()?out[name]=value&&"object"==typeof value&&"bytes"in value?BigInt(value.toString()):Number(value):out[name]=value)}}if(hasBindings)return{[unionMember]:out};if(0===body.byteLength)return{[unionMember]:{}}}return{[unionMember]:await this.deserializer.read(eventStreamSchema,body)}}return{$unknown:event2}}),asyncIterator=asyncIterable[Symbol.asyncIterator](),firstEvent=await asyncIterator.next();if(firstEvent.done)return asyncIterable;if(null==(_a8=firstEvent.value)?void 0:_a8[initialResponseMarker]){if(!responseSchema)throw new Error("@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.");for(const[key3,value]of Object.entries(firstEvent.value))initialResponseContainer[key3]=value}return{async*[Symbol.asyncIterator](){var _a9;(null==(_a9=null==firstEvent?void 0:firstEvent.value)?void 0:_a9[initialResponseMarker])||(yield firstEvent.value);for(;;){const{done,value}=await asyncIterator.next();if(done)break;yield value}}}}writeEventBody(unionMember,unionSchema,event2){var _a8,_b5,_c3;const serializer=this.serializer;let explicitPayloadContentType,eventType=unionMember,explicitPayloadMember=null;const additionalHeaders={};if((()=>unionSchema.getSchema()[4].includes(unionMember))()){const eventSchema=unionSchema.getMemberSchema(unionMember);if(eventSchema.isStructSchema()){for(const[memberName,memberSchema]of eventSchema.structIterator()){const{eventHeader,eventPayload}=memberSchema.getMergedTraits();if(eventPayload)explicitPayloadMember=memberName;else if(eventHeader){const value=event2[unionMember][memberName];let type="binary";memberSchema.isNumericSchema()?type=(-2)**31<=value&&value<=2**31-1?"integer":"long":memberSchema.isTimestampSchema()?type="timestamp":memberSchema.isStringSchema()?type="string":memberSchema.isBooleanSchema()&&(type="boolean");if(null!=value){additionalHeaders[memberName]={type,value};delete event2[unionMember][memberName]}}}if(null!==explicitPayloadMember){const payloadSchema=eventSchema.getMemberSchema(explicitPayloadMember);payloadSchema.isBlobSchema()?explicitPayloadContentType="application/octet-stream":payloadSchema.isStringSchema()&&(explicitPayloadContentType="text/plain");serializer.write(payloadSchema,event2[unionMember][explicitPayloadMember])}else serializer.write(eventSchema,event2[unionMember])}else{if(!eventSchema.isUnitSchema())throw new Error("@smithy/core/event-streams - non-struct member not supported in event stream union.");serializer.write(eventSchema,{})}}else{const[type,value]=event2[unionMember];eventType=type;serializer.write(15,value)}const messageSerialization=null!=(_a8=serializer.flush())?_a8:new Uint8Array;return{body:"string"==typeof messageSerialization?(null!=(_c3=null==(_b5=this.serdeContext)?void 0:_b5.utf8Decoder)?_c3:fromUtf8)(messageSerialization):messageSerialization,eventType,explicitPayloadContentType,additionalHeaders}}}}}),event_streams_exports={};
/*! Bundled license information:
octagonal-wheels/dist/encoding/encodeobject.js:
(* istanbul ignore if -- @preserve *)
@noble/secp256k1/index.js:
(*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) *)
octagonal-wheels/dist/encryption/hkdf.js:
(* istanbul ignore if -- @preserve *)
(* istanbul ignore next -- @preserve *)
*/__export(event_streams_exports,{EventStreamSerde:()=>EventStreamSerde});init_event_streams=__esm({"node_modules/@smithy/core/dist-es/submodules/event-streams/index.js"(){init_EventStreamSerde()}});require_events=__commonJS({"node_modules/events/events.js"(exports,module2){"use strict";function ProcessEmitWarning(warning){console&&console.warn&&console.warn(warning)}function EventEmitter2(){EventEmitter2.init.call(this)}function checkListener(listener){if("function"!=typeof listener)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener)}function _getMaxListeners(that){return void 0===that._maxListeners?EventEmitter2.defaultMaxListeners:that._maxListeners}function _addListener(target,type,listener,prepend){var m3,events,existing,w2;checkListener(listener);if(void 0===(events=target._events)){events=target._events=Object.create(null);target._eventsCount=0}else{if(void 0!==events.newListener){target.emit("newListener",type,listener.listener?listener.listener:listener);events=target._events}existing=events[type]}if(void 0===existing){existing=events[type]=listener;++target._eventsCount}else{"function"==typeof existing?existing=events[type]=prepend?[listener,existing]:[existing,listener]:prepend?existing.unshift(listener):existing.push(listener);if((m3=_getMaxListeners(target))>0&&existing.length>m3&&!existing.warned){existing.warned=!0;(w2=new Error("Possible EventEmitter memory leak detected. "+existing.length+" "+String(type)+" listeners added. Use emitter.setMaxListeners() to increase limit")).name="MaxListenersExceededWarning";w2.emitter=target;w2.type=type;w2.count=existing.length;ProcessEmitWarning(w2)}}return target}function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=!0;return 0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}}function _onceWrap(target,type,listener){var state2={fired:!1,wrapFn:void 0,target,type,listener},wrapped=onceWrapper.bind(state2);wrapped.listener=listener;state2.wrapFn=wrapped;return wrapped}function _listeners2(target,type,unwrap2){var evlistener,events=target._events;return void 0===events||void 0===(evlistener=events[type])?[]:"function"==typeof evlistener?unwrap2?[evlistener.listener||evlistener]:[evlistener]:unwrap2?unwrapListeners(evlistener):arrayClone(evlistener,evlistener.length)}function listenerCount2(type){var evlistener,events=this._events;if(void 0!==events){if("function"==typeof(evlistener=events[type]))return 1;if(void 0!==evlistener)return evlistener.length}return 0}function arrayClone(arr,n3){var i2,copy=new Array(n3);for(i2=0;i2<n3;++i2)copy[i2]=arr[i2];return copy}function spliceOne(list,index6){for(;index6+1<list.length;index6++)list[index6]=list[index6+1];list.pop()}function unwrapListeners(arr){var i2,ret=new Array(arr.length);for(i2=0;i2<ret.length;++i2)ret[i2]=arr[i2].listener||arr[i2];return ret}function addErrorHandlerIfEventEmitter(emitter,handler,flags2){"function"==typeof emitter.on&&eventTargetAgnosticAddListener(emitter,"error",handler,flags2)}function eventTargetAgnosticAddListener(emitter,name,listener,flags2){if("function"==typeof emitter.on)flags2.once?emitter.once(name,listener):emitter.on(name,listener);else{if("function"!=typeof emitter.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);emitter.addEventListener(name,function wrapListener(arg){flags2.once&&emitter.removeEventListener(name,wrapListener);listener(arg)})}}var ReflectOwnKeys,NumberIsNaN,defaultMaxListeners,R2="object"==typeof Reflect?Reflect:null,ReflectApply=R2&&"function"==typeof R2.apply?R2.apply:function ReflectApply2(target,receiver,args){return Function.prototype.apply.call(target,receiver,args)};ReflectOwnKeys=R2&&"function"==typeof R2.ownKeys?R2.ownKeys:Object.getOwnPropertySymbols?function ReflectOwnKeys2(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))}:function ReflectOwnKeys2(target){return Object.getOwnPropertyNames(target)};NumberIsNaN=Number.isNaN||function NumberIsNaN2(value){return value!=value};module2.exports=EventEmitter2;module2.exports.once=function once3(emitter,name){return new Promise(function(resolve,reject){function errorListener(err3){emitter.removeListener(name,resolver2);reject(err3)}function resolver2(){"function"==typeof emitter.removeListener&&emitter.removeListener("error",errorListener);resolve([].slice.call(arguments))}eventTargetAgnosticAddListener(emitter,name,resolver2,{once:!0});"error"!==name&&addErrorHandlerIfEventEmitter(emitter,errorListener,{once:!0})})};EventEmitter2.EventEmitter=EventEmitter2;EventEmitter2.prototype._events=void 0;EventEmitter2.prototype._eventsCount=0;EventEmitter2.prototype._maxListeners=void 0;defaultMaxListeners=10;Object.defineProperty(EventEmitter2,"defaultMaxListeners",{enumerable:!0,get:function(){return defaultMaxListeners},set:function(arg){if("number"!=typeof arg||arg<0||NumberIsNaN(arg))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+".");defaultMaxListeners=arg}});EventEmitter2.init=function(){if(void 0===this._events||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0}this._maxListeners=this._maxListeners||void 0};EventEmitter2.prototype.setMaxListeners=function setMaxListeners(n3){if("number"!=typeof n3||n3<0||NumberIsNaN(n3))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+n3+".");this._maxListeners=n3;return this};EventEmitter2.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners(this)};EventEmitter2.prototype.emit=function emit2(type){var i2,doError,events,er,err3,handler,len,listeners,args=[];for(i2=1;i2<arguments.length;i2++)args.push(arguments[i2]);doError="error"===type;if(void 0!==(events=this._events))doError=doError&&void 0===events.error;else if(!doError)return!1;if(doError){args.length>0&&(er=args[0]);if(er instanceof Error)throw er;(err3=new Error("Unhandled error."+(er?" ("+er.message+")":""))).context=er;throw err3}if(void 0===(handler=events[type]))return!1;if("function"==typeof handler)ReflectApply(handler,this,args);else{listeners=arrayClone(handler,len=handler.length);for(i2=0;i2<len;++i2)ReflectApply(listeners[i2],this,args)}return!0};EventEmitter2.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,!1)};EventEmitter2.prototype.on=EventEmitter2.prototype.addListener;EventEmitter2.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,!0)};EventEmitter2.prototype.once=function once4(type,listener){checkListener(listener);this.on(type,_onceWrap(this,type,listener));return this};EventEmitter2.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener(listener);this.prependListener(type,_onceWrap(this,type,listener));return this};EventEmitter2.prototype.removeListener=function removeListener(type,listener){var list,events,position,i2,originalListener;checkListener(listener);if(void 0===(events=this._events))return this;if(void 0===(list=events[type]))return this;if(list===listener||list.listener===listener)if(0===--this._eventsCount)this._events=Object.create(null);else{delete events[type];events.removeListener&&this.emit("removeListener",type,list.listener||listener)}else if("function"!=typeof list){position=-1;for(i2=list.length-1;i2>=0;i2--)if(list[i2]===listener||list[i2].listener===listener){originalListener=list[i2].listener;position=i2;break}if(position<0)return this;0===position?list.shift():spliceOne(list,position);1===list.length&&(events[type]=list[0]);void 0!==events.removeListener&&this.emit("removeListener",type,originalListener||listener)}return this};EventEmitter2.prototype.off=EventEmitter2.prototype.removeListener;EventEmitter2.prototype.removeAllListeners=function removeAllListeners(type){var listeners,i2,keys3,key3,events=this._events;if(void 0===events)return this;if(void 0===events.removeListener){if(0===arguments.length){this._events=Object.create(null);this._eventsCount=0}else void 0!==events[type]&&(0===--this._eventsCount?this._events=Object.create(null):delete events[type]);return this}if(0===arguments.length){keys3=Object.keys(events);for(i2=0;i2<keys3.length;++i2)"removeListener"!==(key3=keys3[i2])&&this.removeAllListeners(key3);this.removeAllListeners("removeListener");this._events=Object.create(null);this._eventsCount=0;return this}if("function"==typeof(listeners=events[type]))this.removeListener(type,listeners);else if(void 0!==listeners)for(i2=listeners.length-1;i2>=0;i2--)this.removeListener(type,listeners[i2]);return this};EventEmitter2.prototype.listeners=function listeners(type){return _listeners2(this,type,!0)};EventEmitter2.prototype.rawListeners=function rawListeners(type){return _listeners2(this,type,!1)};EventEmitter2.listenerCount=function(emitter,type){return"function"==typeof emitter.listenerCount?emitter.listenerCount(type):listenerCount2.call(emitter,type)};EventEmitter2.prototype.listenerCount=listenerCount2;EventEmitter2.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys(this._events):[]}}});require_spark_md5=__commonJS({"node_modules/spark-md5/spark-md5.js"(exports,module2){(function(factory){if("object"==typeof exports)module2.exports=factory();else if("function"==typeof define&&define.amd)define(factory);else{var glob;try{glob=window}catch(e3){glob=self}glob.SparkMD5=factory()}})(function(undefined2){"use strict";function md5cycle(x2,k2){var a2=x2[0],b3=x2[1],c3=x2[2],d4=x2[3];b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&c3|~b3&d4)+k2[0]-680876936|0)<<7|a2>>>25)+b3|0)&b3|~a2&c3)+k2[1]-389564586|0)<<12|d4>>>20)+a2|0)&a2|~d4&b3)+k2[2]+606105819|0)<<17|c3>>>15)+d4|0)&d4|~c3&a2)+k2[3]-1044525330|0)<<22|b3>>>10)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&c3|~b3&d4)+k2[4]-176418897|0)<<7|a2>>>25)+b3|0)&b3|~a2&c3)+k2[5]+1200080426|0)<<12|d4>>>20)+a2|0)&a2|~d4&b3)+k2[6]-1473231341|0)<<17|c3>>>15)+d4|0)&d4|~c3&a2)+k2[7]-45705983|0)<<22|b3>>>10)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&c3|~b3&d4)+k2[8]+1770035416|0)<<7|a2>>>25)+b3|0)&b3|~a2&c3)+k2[9]-1958414417|0)<<12|d4>>>20)+a2|0)&a2|~d4&b3)+k2[10]-42063|0)<<17|c3>>>15)+d4|0)&d4|~c3&a2)+k2[11]-1990404162|0)<<22|b3>>>10)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&c3|~b3&d4)+k2[12]+1804603682|0)<<7|a2>>>25)+b3|0)&b3|~a2&c3)+k2[13]-40341101|0)<<12|d4>>>20)+a2|0)&a2|~d4&b3)+k2[14]-1502002290|0)<<17|c3>>>15)+d4|0)&d4|~c3&a2)+k2[15]+1236535329|0)<<22|b3>>>10)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&d4|c3&~d4)+k2[1]-165796510|0)<<5|a2>>>27)+b3|0)&c3|b3&~c3)+k2[6]-1069501632|0)<<9|d4>>>23)+a2|0)&b3|a2&~b3)+k2[11]+643717713|0)<<14|c3>>>18)+d4|0)&a2|d4&~a2)+k2[0]-373897302|0)<<20|b3>>>12)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&d4|c3&~d4)+k2[5]-701558691|0)<<5|a2>>>27)+b3|0)&c3|b3&~c3)+k2[10]+38016083|0)<<9|d4>>>23)+a2|0)&b3|a2&~b3)+k2[15]-660478335|0)<<14|c3>>>18)+d4|0)&a2|d4&~a2)+k2[4]-405537848|0)<<20|b3>>>12)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&d4|c3&~d4)+k2[9]+568446438|0)<<5|a2>>>27)+b3|0)&c3|b3&~c3)+k2[14]-1019803690|0)<<9|d4>>>23)+a2|0)&b3|a2&~b3)+k2[3]-187363961|0)<<14|c3>>>18)+d4|0)&a2|d4&~a2)+k2[8]+1163531501|0)<<20|b3>>>12)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3&d4|c3&~d4)+k2[13]-1444681467|0)<<5|a2>>>27)+b3|0)&c3|b3&~c3)+k2[2]-51403784|0)<<9|d4>>>23)+a2|0)&b3|a2&~b3)+k2[7]+1735328473|0)<<14|c3>>>18)+d4|0)&a2|d4&~a2)+k2[12]-1926607734|0)<<20|b3>>>12)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3^c3^d4)+k2[5]-378558|0)<<4|a2>>>28)+b3|0)^b3^c3)+k2[8]-2022574463|0)<<11|d4>>>21)+a2|0)^a2^b3)+k2[11]+1839030562|0)<<16|c3>>>16)+d4|0)^d4^a2)+k2[14]-35309556|0)<<23|b3>>>9)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3^c3^d4)+k2[1]-1530992060|0)<<4|a2>>>28)+b3|0)^b3^c3)+k2[4]+1272893353|0)<<11|d4>>>21)+a2|0)^a2^b3)+k2[7]-155497632|0)<<16|c3>>>16)+d4|0)^d4^a2)+k2[10]-1094730640|0)<<23|b3>>>9)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3^c3^d4)+k2[13]+681279174|0)<<4|a2>>>28)+b3|0)^b3^c3)+k2[0]-358537222|0)<<11|d4>>>21)+a2|0)^a2^b3)+k2[3]-722521979|0)<<16|c3>>>16)+d4|0)^d4^a2)+k2[6]+76029189|0)<<23|b3>>>9)+c3|0;b3=((b3+=((c3=((c3+=((d4=((d4+=((a2=((a2+=(b3^c3^d4)+k2[9]-640364487|0)<<4|a2>>>28)+b3|0)^b3^c3)+k2[12]-421815835|0)<<11|d4>>>21)+a2|0)^a2^b3)+k2[15]+530742520|0)<<16|c3>>>16)+d4|0)^d4^a2)+k2[2]-995338651|0)<<23|b3>>>9)+c3|0;b3=((b3+=((d4=((d4+=(b3^((a2=((a2+=(c3^(b3|~d4))+k2[0]-198630844|0)<<6|a2>>>26)+b3|0)|~c3))+k2[7]+1126891415|0)<<10|d4>>>22)+a2|0)^((c3=((c3+=(a2^(d4|~b3))+k2[14]-1416354905|0)<<15|c3>>>17)+d4|0)|~a2))+k2[5]-57434055|0)<<21|b3>>>11)+c3|0;b3=((b3+=((d4=((d4+=(b3^((a2=((a2+=(c3^(b3|~d4))+k2[12]+1700485571|0)<<6|a2>>>26)+b3|0)|~c3))+k2[3]-1894986606|0)<<10|d4>>>22)+a2|0)^((c3=((c3+=(a2^(d4|~b3))+k2[10]-1051523|0)<<15|c3>>>17)+d4|0)|~a2))+k2[1]-2054922799|0)<<21|b3>>>11)+c3|0;b3=((b3+=((d4=((d4+=(b3^((a2=((a2+=(c3^(b3|~d4))+k2[8]+1873313359|0)<<6|a2>>>26)+b3|0)|~c3))+k2[15]-30611744|0)<<10|d4>>>22)+a2|0)^((c3=((c3+=(a2^(d4|~b3))+k2[6]-1560198380|0)<<15|c3>>>17)+d4|0)|~a2))+k2[13]+1309151649|0)<<21|b3>>>11)+c3|0;b3=((b3+=((d4=((d4+=(b3^((a2=((a2+=(c3^(b3|~d4))+k2[4]-145523070|0)<<6|a2>>>26)+b3|0)|~c3))+k2[11]-1120210379|0)<<10|d4>>>22)+a2|0)^((c3=((c3+=(a2^(d4|~b3))+k2[2]+718787259|0)<<15|c3>>>17)+d4|0)|~a2))+k2[9]-343485551|0)<<21|b3>>>11)+c3|0;x2[0]=a2+x2[0]|0;x2[1]=b3+x2[1]|0;x2[2]=c3+x2[2]|0;x2[3]=d4+x2[3]|0}function md5blk(s2){var i2,md5blks=[];for(i2=0;i2<64;i2+=4)md5blks[i2>>2]=s2.charCodeAt(i2)+(s2.charCodeAt(i2+1)<<8)+(s2.charCodeAt(i2+2)<<16)+(s2.charCodeAt(i2+3)<<24);return md5blks}function md5blk_array(a2){var i2,md5blks=[];for(i2=0;i2<64;i2+=4)md5blks[i2>>2]=a2[i2]+(a2[i2+1]<<8)+(a2[i2+2]<<16)+(a2[i2+3]<<24);return md5blks}function md51(s2){var i2,length,tail,tmp,lo,hi,n3=s2.length,state2=[1732584193,-271733879,-1732584194,271733878];for(i2=64;i2<=n3;i2+=64)md5cycle(state2,md5blk(s2.substring(i2-64,i2)));length=(s2=s2.substring(i2-64)).length;tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i2=0;i2<length;i2+=1)tail[i2>>2]|=s2.charCodeAt(i2)<<(i2%4<<3);tail[i2>>2]|=128<<(i2%4<<3);if(i2>55){md5cycle(state2,tail);for(i2=0;i2<16;i2+=1)tail[i2]=0}tmp=(tmp=8*n3).toString(16).match(/(.*?)(.{0,8})$/);lo=parseInt(tmp[2],16);hi=parseInt(tmp[1],16)||0;tail[14]=lo;tail[15]=hi;md5cycle(state2,tail);return state2}function md51_array(a2){var i2,length,tail,tmp,lo,hi,n3=a2.length,state2=[1732584193,-271733879,-1732584194,271733878];for(i2=64;i2<=n3;i2+=64)md5cycle(state2,md5blk_array(a2.subarray(i2-64,i2)));length=(a2=i2-64<n3?a2.subarray(i2-64):new Uint8Array(0)).length;tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i2=0;i2<length;i2+=1)tail[i2>>2]|=a2[i2]<<(i2%4<<3);tail[i2>>2]|=128<<(i2%4<<3);if(i2>55){md5cycle(state2,tail);for(i2=0;i2<16;i2+=1)tail[i2]=0}tmp=(tmp=8*n3).toString(16).match(/(.*?)(.{0,8})$/);lo=parseInt(tmp[2],16);hi=parseInt(tmp[1],16)||0;tail[14]=lo;tail[15]=hi;md5cycle(state2,tail);return state2}function rhex(n3){var j2,s2="";for(j2=0;j2<4;j2+=1)s2+=hex_chr[n3>>8*j2+4&15]+hex_chr[n3>>8*j2&15];return s2}function hex(x2){var i2;for(i2=0;i2<x2.length;i2+=1)x2[i2]=rhex(x2[i2]);return x2.join("")}function toUtf82(str){/[\u0080-\uFFFF]/.test(str)&&(str=unescape(encodeURIComponent(str)));return str}function utf8Str2ArrayBuffer(str,returnUInt8Array){var i2,length=str.length,buff=new ArrayBuffer(length),arr=new Uint8Array(buff);for(i2=0;i2<length;i2+=1)arr[i2]=str.charCodeAt(i2);return returnUInt8Array?arr:buff}function arrayBuffer2Utf8Str(buff){return String.fromCharCode.apply(null,new Uint8Array(buff))}function concatenateArrayBuffers(first,second,returnUInt8Array){var result=new Uint8Array(first.byteLength+second.byteLength);result.set(new Uint8Array(first));result.set(new Uint8Array(second),first.byteLength);return returnUInt8Array?result:result.buffer}function hexToBinaryString(hex2){var x2,bytes=[],length=hex2.length;for(x2=0;x2<length-1;x2+=2)bytes.push(parseInt(hex2.substr(x2,2),16));return String.fromCharCode.apply(String,bytes)}function SparkMD5(){this.reset()}var hex_chr=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];hex(md51("hello"));"undefined"==typeof ArrayBuffer||ArrayBuffer.prototype.slice||function(){function clamp(val,length){return(val=0|val||0)<0?Math.max(val+length,0):Math.min(val,length)}ArrayBuffer.prototype.slice=function(from,to){var num,target,targetArray,sourceArray,length=this.byteLength,begin=clamp(from,length),end=length;to!==undefined2&&(end=clamp(to,length));if(begin>end)return new ArrayBuffer(0);num=end-begin;target=new ArrayBuffer(num);targetArray=new Uint8Array(target);sourceArray=new Uint8Array(this,begin,num);targetArray.set(sourceArray);return target}}();SparkMD5.prototype.append=function(str){this.appendBinary(toUtf82(str));return this};SparkMD5.prototype.appendBinary=function(contents){this._buff+=contents;this._length+=contents.length;var i2,length=this._buff.length;for(i2=64;i2<=length;i2+=64)md5cycle(this._hash,md5blk(this._buff.substring(i2-64,i2)));this._buff=this._buff.substring(i2-64);return this};SparkMD5.prototype.end=function(raw){var i2,ret,buff=this._buff,length=buff.length,tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i2=0;i2<length;i2+=1)tail[i2>>2]|=buff.charCodeAt(i2)<<(i2%4<<3);this._finish(tail,length);ret=hex(this._hash);raw&&(ret=hexToBinaryString(ret));this.reset();return ret};SparkMD5.prototype.reset=function(){this._buff="";this._length=0;this._hash=[1732584193,-271733879,-1732584194,271733878];return this};SparkMD5.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}};SparkMD5.prototype.setState=function(state2){this._buff=state2.buff;this._length=state2.length;this._hash=state2.hash;return this};SparkMD5.prototype.destroy=function(){delete this._hash;delete this._buff;delete this._length};SparkMD5.prototype._finish=function(tail,length){var tmp,lo,hi,i2=length;tail[i2>>2]|=128<<(i2%4<<3);if(i2>55){md5cycle(this._hash,tail);for(i2=0;i2<16;i2+=1)tail[i2]=0}tmp=(tmp=8*this._length).toString(16).match(/(.*?)(.{0,8})$/);lo=parseInt(tmp[2],16);hi=parseInt(tmp[1],16)||0;tail[14]=lo;tail[15]=hi;md5cycle(this._hash,tail)};SparkMD5.hash=function(str,raw){return SparkMD5.hashBinary(toUtf82(str),raw)};SparkMD5.hashBinary=function(content,raw){var ret=hex(md51(content));return raw?hexToBinaryString(ret):ret};SparkMD5.ArrayBuffer=function(){this.reset()};SparkMD5.ArrayBuffer.prototype.append=function(arr){var i2,buff=concatenateArrayBuffers(this._buff.buffer,arr,!0),length=buff.length;this._length+=arr.byteLength;for(i2=64;i2<=length;i2+=64)md5cycle(this._hash,md5blk_array(buff.subarray(i2-64,i2)));this._buff=i2-64<length?new Uint8Array(buff.buffer.slice(i2-64)):new Uint8Array(0);return this};SparkMD5.ArrayBuffer.prototype.end=function(raw){var i2,ret,buff=this._buff,length=buff.length,tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i2=0;i2<length;i2+=1)tail[i2>>2]|=buff[i2]<<(i2%4<<3);this._finish(tail,length);ret=hex(this._hash);raw&&(ret=hexToBinaryString(ret));this.reset();return ret};SparkMD5.ArrayBuffer.prototype.reset=function(){this._buff=new Uint8Array(0);this._length=0;this._hash=[1732584193,-271733879,-1732584194,271733878];return this};SparkMD5.ArrayBuffer.prototype.getState=function(){var state2=SparkMD5.prototype.getState.call(this);state2.buff=arrayBuffer2Utf8Str(state2.buff);return state2};SparkMD5.ArrayBuffer.prototype.setState=function(state2){state2.buff=utf8Str2ArrayBuffer(state2.buff,!0);return SparkMD5.prototype.setState.call(this,state2)};SparkMD5.ArrayBuffer.prototype.destroy=SparkMD5.prototype.destroy;SparkMD5.ArrayBuffer.prototype._finish=SparkMD5.prototype._finish;SparkMD5.ArrayBuffer.hash=function(arr,raw){var ret=hex(md51_array(new Uint8Array(arr)));return raw?hexToBinaryString(ret):ret};return SparkMD5})}});require_vuvuzela=__commonJS({"node_modules/vuvuzela/index.js"(exports){"use strict";function pop3(obj,stack2,metaStack){var element2,lastElementIndex,lastMetaElement=metaStack[metaStack.length-1];if(obj===lastMetaElement.element){metaStack.pop();lastMetaElement=metaStack[metaStack.length-1]}element2=lastMetaElement.element;lastElementIndex=lastMetaElement.index;Array.isArray(element2)?element2.push(obj):lastElementIndex===stack2.length-2?element2[stack2.pop()]=obj:stack2.push(obj)}exports.stringify=function stringify3(input){var res2,next2,obj,val,i2,arrayPrefix,keys3,k2,key3,value,objPrefix,queue2=[];queue2.push({obj:input});res2="";for(;next2=queue2.pop();){obj=next2.obj;res2+=next2.prefix||"";if(val=next2.val||"")res2+=val;else if("object"!=typeof obj)res2+=void 0===obj?null:JSON.stringify(obj);else if(null===obj)res2+="null";else if(Array.isArray(obj)){queue2.push({val:"]"});for(i2=obj.length-1;i2>=0;i2--){arrayPrefix=0===i2?"":",";queue2.push({obj:obj[i2],prefix:arrayPrefix})}queue2.push({val:"["})}else{keys3=[];for(k2 in obj)obj.hasOwnProperty(k2)&&keys3.push(k2);queue2.push({val:"}"});for(i2=keys3.length-1;i2>=0;i2--){value=obj[key3=keys3[i2]];objPrefix=i2>0?",":"";objPrefix+=JSON.stringify(key3)+":";queue2.push({obj:value,prefix:objPrefix})}queue2.push({val:"{"})}}return res2};exports.parse=function(str){for(var collationIndex2,parsedNum,numChar,parsedString,lastCh,numConsecutiveSlashes,ch4,arrayElement,objElement,stack2=[],metaStack=[],i2=0;;)if("}"!==(collationIndex2=str[i2++])&&"]"!==collationIndex2&&void 0!==collationIndex2)switch(collationIndex2){case" ":case"\t":case"\n":case":":case",":break;case"n":i2+=3;pop3(null,stack2,metaStack);break;case"t":i2+=3;pop3(!0,stack2,metaStack);break;case"f":i2+=4;pop3(!1,stack2,metaStack);break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"-":parsedNum="";i2--;for(;;){numChar=str[i2++];if(!/[\d\.\-e\+]/.test(numChar)){i2--;break}parsedNum+=numChar}pop3(parseFloat(parsedNum),stack2,metaStack);break;case'"':parsedString="";lastCh=void 0;numConsecutiveSlashes=0;for(;'"'!==(ch4=str[i2++])||"\\"===lastCh&&numConsecutiveSlashes%2==1;){parsedString+=ch4;"\\"===(lastCh=ch4)?numConsecutiveSlashes++:numConsecutiveSlashes=0}pop3(JSON.parse('"'+parsedString+'"'),stack2,metaStack);break;case"[":arrayElement={element:[],index:stack2.length};stack2.push(arrayElement.element);metaStack.push(arrayElement);break;case"{":objElement={element:{},index:stack2.length};stack2.push(objElement.element);metaStack.push(objElement);break;default:throw new Error("unexpectedly reached end of input: "+collationIndex2)}else{if(1===stack2.length)return stack2.pop();pop3(stack2.pop(),stack2,metaStack)}}}});require_pouchdb_wrappers=__commonJS({"node_modules/pouchdb-wrappers/index.js"(exports,module2){"use strict";function nodify(promise,callback){promise.then((...args)=>{callback(null,...args)}).catch(err3=>{callback(err3)})}function replacementMethod(base,method){return function(...args){function doMethod(){let callback=null;const minArgs="query"===method?1:0;args.length>minArgs&&"function"==typeof args[args.length-1]&&(callback=args.pop());let prev=base._originals[method].bind(base);for(const handler of base._handlers[method])prev=handler.bind(base,prev);const result=prev(...args);result.then&&callback&&nodify(result,callback);return result}return"changes"!==method&&base.taskqueue&&!base.taskqueue.isReady?new Promise((resolve,reject)=>{base.taskqueue.addTask(error=>{error?reject(error):resolve()})}).then(doMethod):doMethod()}}var toExport={install:function installWrappers(base,handlers3={}){if(!base._originals||!base._handlers){base._originals={};base._handlers={}}for(const[method,handler]of Object.entries(handlers3)){if(!(method in base))throw new Error(`Method '${method}' does not exist on given base, so it cannot be wrapped.`);method in base._originals||(base._originals[method]=base[method]);if(method in base._handlers)base._handlers[method].unshift(handler);else{base._handlers[method]=[handler];base[method]=replacementMethod(base,method)}}},uninstall:function uninstallWrappers(base,handlers3){if(!base._originals||!base._handlers)throw new Error("No wrapper methods installed, so no methods can be uninstalled.");for(const[method,handler]of Object.entries(handlers3)){const errorMessage=`Wrapper method for '${method}' not installed: ${handler.toString()}`;if(!(method in base._handlers))throw new Error(errorMessage);const i2=base._handlers[method].indexOf(handler);if(-1===i2)throw new Error(errorMessage);base._handlers[method].splice(i2,1)}}};try{module2.exports=toExport}catch(e3){}try{window.PouchDBWrappers=toExport}catch(e3){}}});require_transform_pouch=__commonJS({"node_modules/transform-pouch/index.js"(exports,module2){"use strict";function isntInternalKey(key3){return"_"!==key3[0]}function isUntransformable(doc){return!("string"!=typeof doc._id||!/^_local/.test(doc._id))||!!doc._deleted&&0===Object.keys(doc).filter(isntInternalKey).length}function transform2(config){const incoming=function(doc){return!isUntransformable(doc)&&config.incoming?config.incoming(doc):doc},outgoing=function(doc){return!isUntransformable(doc)&&config.outgoing?config.outgoing(doc):doc},handlers3={async get(orig,...args){const response=await orig(...args);if(Array.isArray(response)){await Promise.all(response.map(async row=>{row.ok&&(row.ok=await outgoing(row.ok))}));return response}return outgoing(response)},async bulkDocs(orig,docs,...args){docs.docs?docs.docs=await Promise.all(docs.docs.map(incoming)):docs=await Promise.all(docs.map(incoming));return orig(docs,...args)},async allDocs(orig,...args){const response=await orig(...args);await Promise.all(response.rows.map(async row=>{row.doc&&(row.doc=await outgoing(row.doc))}));return response},async bulkGet(orig,...args){const mapDoc=async doc=>doc.ok?{ok:await outgoing(doc.ok)}:doc;let{results,...res2}=await orig(...args);results=await Promise.all(results.map(async result=>{const{id,docs}=result;return id&&docs&&Array.isArray(docs)?{id,docs:await Promise.all(docs.map(mapDoc))}:result}));return{results,...res2}},changes(orig,...args){async function modifyChange(change){if(change.doc){change.doc=await outgoing(change.doc);return change}return change}async function modifyChanges(res2){if(res2.results){res2.results=await Promise.all(res2.results.map(modifyChange));return res2}return res2}const changes3=orig(...args),{on:origOn,then:origThen}=changes3;return Object.assign(changes3,{on(event2,listener){const origListener=listener;"change"===event2?listener=async change=>{origListener(await modifyChange(change))}:"complete"===event2&&(listener=async res2=>{origListener(await modifyChanges(res2))});return origOn.call(changes3,event2,listener)},then:(resolve,reject)=>origThen.call(changes3,modifyChanges).then(resolve,reject)})}};if("http"===this.type()){handlers3.put=async function(orig,doc,...args){return orig(doc=await incoming(doc),...args)};handlers3.query=async function(orig,...args){const response=await orig(...args);await Promise.all(response.rows.map(async row=>{row.doc&&(row.doc=await outgoing(row.doc))}));return response}}wrappers.install(this,handlers3)}var wrappers=require_pouchdb_wrappers();module2.exports={transform:transform2,filter:transform2};"undefined"!=typeof window&&window.PouchDB&&window.PouchDB.plugin(exports)}});require_qrcode=__commonJS({"node_modules/qrcode-generator/qrcode.js"(exports,module2){var qrcode2=function(){function qrPolynomial(num,shift){var _num,_this;if(void 0===num.length)throw num.length+"/"+shift;_num=function(){for(var _num2,i2,offset=0;offset<num.length&&0==num[offset];)offset+=1;_num2=new Array(num.length-offset+shift);for(i2=0;i2<num.length-offset;i2+=1)_num2[i2]=num[i2+offset];return _num2}();(_this={}).getAt=function(index6){return _num[index6]};_this.getLength=function(){return _num.length};_this.multiply=function(e3){var i2,j2,num2=new Array(_this.getLength()+e3.getLength()-1);for(i2=0;i2<_this.getLength();i2+=1)for(j2=0;j2<e3.getLength();j2+=1)num2[i2+j2]^=QRMath.gexp(QRMath.glog(_this.getAt(i2))+QRMath.glog(e3.getAt(j2)));return qrPolynomial(num2,0)};_this.mod=function(e3){var ratio,num2,i2;if(_this.getLength()-e3.getLength()<0)return _this;ratio=QRMath.glog(_this.getAt(0))-QRMath.glog(e3.getAt(0));num2=new Array(_this.getLength());for(i2=0;i2<_this.getLength();i2+=1)num2[i2]=_this.getAt(i2);for(i2=0;i2<e3.getLength();i2+=1)num2[i2]^=QRMath.gexp(QRMath.glog(e3.getAt(i2))+ratio);return qrPolynomial(num2,0).mod(e3)};return _this}var QRErrorCorrectionLevel,QRUtil,QRMath,QRRSBlock,qrBitBuffer,qrNumber,qrAlphaNum,qr8BitByte,qrKanji,byteArrayOutputStream,base64EncodeOutputStream,base64DecodeInputStream,gifImage,createDataURL,qrcode3=function(typeNumber,errorCorrectionLevel){var escapeXml,_createHalfASCII,_typeNumber=typeNumber,_errorCorrectionLevel=QRErrorCorrectionLevel[errorCorrectionLevel],_modules=null,_moduleCount=0,_dataCache=null,_dataList=[],_this={},makeImpl=function(test,maskPattern){_modules=function(moduleCount){var row,col,modules=new Array(moduleCount);for(row=0;row<moduleCount;row+=1){modules[row]=new Array(moduleCount);for(col=0;col<moduleCount;col+=1)modules[row][col]=null}return modules}(_moduleCount=4*_typeNumber+17);setupPositionProbePattern(0,0);setupPositionProbePattern(_moduleCount-7,0);setupPositionProbePattern(0,_moduleCount-7);setupPositionAdjustPattern();setupTimingPattern();setupTypeInfo(test,maskPattern);_typeNumber>=7&&setupTypeNumber(test);null==_dataCache&&(_dataCache=createData(_typeNumber,_errorCorrectionLevel,_dataList));mapData(_dataCache,maskPattern)},setupPositionProbePattern=function(row,col){var r4,c3;for(r4=-1;r4<=7;r4+=1)if(!(row+r4<=-1||_moduleCount<=row+r4))for(c3=-1;c3<=7;c3+=1)col+c3<=-1||_moduleCount<=col+c3||(_modules[row+r4][col+c3]=0<=r4&&r4<=6&&(0==c3||6==c3)||0<=c3&&c3<=6&&(0==r4||6==r4)||2<=r4&&r4<=4&&2<=c3&&c3<=4)},getBestMaskPattern=function(){var i2,lostPoint,minLostPoint=0,pattern=0;for(i2=0;i2<8;i2+=1){makeImpl(!0,i2);lostPoint=QRUtil.getLostPoint(_this);if(0==i2||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i2}}return pattern},setupTimingPattern=function(){var r4,c3;for(r4=8;r4<_moduleCount-8;r4+=1)null==_modules[r4][6]&&(_modules[r4][6]=r4%2==0);for(c3=8;c3<_moduleCount-8;c3+=1)null==_modules[6][c3]&&(_modules[6][c3]=c3%2==0)},setupPositionAdjustPattern=function(){var i2,j2,row,col,r4,c3,pos=QRUtil.getPatternPosition(_typeNumber);for(i2=0;i2<pos.length;i2+=1)for(j2=0;j2<pos.length;j2+=1){row=pos[i2];col=pos[j2];if(null==_modules[row][col])for(r4=-2;r4<=2;r4+=1)for(c3=-2;c3<=2;c3+=1)_modules[row+r4][col+c3]=-2==r4||2==r4||-2==c3||2==c3||0==r4&&0==c3}},setupTypeNumber=function(test){var i2,mod,bits2=QRUtil.getBCHTypeNumber(_typeNumber);for(i2=0;i2<18;i2+=1){mod=!test&&1==(bits2>>i2&1);_modules[Math.floor(i2/3)][i2%3+_moduleCount-8-3]=mod}for(i2=0;i2<18;i2+=1){mod=!test&&1==(bits2>>i2&1);_modules[i2%3+_moduleCount-8-3][Math.floor(i2/3)]=mod}},setupTypeInfo=function(test,maskPattern){var i2,mod,data=_errorCorrectionLevel<<3|maskPattern,bits2=QRUtil.getBCHTypeInfo(data);for(i2=0;i2<15;i2+=1){mod=!test&&1==(bits2>>i2&1);i2<6?_modules[i2][8]=mod:i2<8?_modules[i2+1][8]=mod:_modules[_moduleCount-15+i2][8]=mod}for(i2=0;i2<15;i2+=1){mod=!test&&1==(bits2>>i2&1);i2<8?_modules[8][_moduleCount-i2-1]=mod:i2<9?_modules[8][15-i2-1+1]=mod:_modules[8][15-i2-1]=mod}_modules[_moduleCount-8][8]=!test},mapData=function(data,maskPattern){var col,c3,dark,inc=-1,row=_moduleCount-1,bitIndex=7,byteIndex=0,maskFunc=QRUtil.getMaskFunction(maskPattern);for(col=_moduleCount-1;col>0;col-=2){6==col&&(col-=1);for(;;){for(c3=0;c3<2;c3+=1)if(null==_modules[row][col-c3]){dark=!1;byteIndex<data.length&&(dark=1==(data[byteIndex]>>>bitIndex&1));maskFunc(row,col-c3)&&(dark=!dark);_modules[row][col-c3]=dark;if(-1==(bitIndex-=1)){byteIndex+=1;bitIndex=7}}if((row+=inc)<0||_moduleCount<=row){row-=inc;inc=-inc;break}}}},createBytes=function(buffer,rsBlocks){var r4,dcCount,ecCount,i2,rsPoly,modPoly,modIndex,totalCodeCount,data,index6,offset=0,maxDcCount=0,maxEcCount=0,dcdata=new Array(rsBlocks.length),ecdata=new Array(rsBlocks.length);for(r4=0;r4<rsBlocks.length;r4+=1){dcCount=rsBlocks[r4].dataCount;ecCount=rsBlocks[r4].totalCount-dcCount;maxDcCount=Math.max(maxDcCount,dcCount);maxEcCount=Math.max(maxEcCount,ecCount);dcdata[r4]=new Array(dcCount);for(i2=0;i2<dcdata[r4].length;i2+=1)dcdata[r4][i2]=255&buffer.getBuffer()[i2+offset];offset+=dcCount;rsPoly=QRUtil.getErrorCorrectPolynomial(ecCount);modPoly=qrPolynomial(dcdata[r4],rsPoly.getLength()-1).mod(rsPoly);ecdata[r4]=new Array(rsPoly.getLength()-1);for(i2=0;i2<ecdata[r4].length;i2+=1){modIndex=i2+modPoly.getLength()-ecdata[r4].length;ecdata[r4][i2]=modIndex>=0?modPoly.getAt(modIndex):0}}totalCodeCount=0;for(i2=0;i2<rsBlocks.length;i2+=1)totalCodeCount+=rsBlocks[i2].totalCount;data=new Array(totalCodeCount);index6=0;for(i2=0;i2<maxDcCount;i2+=1)for(r4=0;r4<rsBlocks.length;r4+=1)if(i2<dcdata[r4].length){data[index6]=dcdata[r4][i2];index6+=1}for(i2=0;i2<maxEcCount;i2+=1)for(r4=0;r4<rsBlocks.length;r4+=1)if(i2<ecdata[r4].length){data[index6]=ecdata[r4][i2];index6+=1}return data},createData=function(typeNumber2,errorCorrectionLevel2,dataList){var i2,data,totalDataCount,rsBlocks=QRRSBlock.getRSBlocks(typeNumber2,errorCorrectionLevel2),buffer=qrBitBuffer();for(i2=0;i2<dataList.length;i2+=1){data=dataList[i2];buffer.put(data.getMode(),4);buffer.put(data.getLength(),QRUtil.getLengthInBits(data.getMode(),typeNumber2));data.write(buffer)}totalDataCount=0;for(i2=0;i2<rsBlocks.length;i2+=1)totalDataCount+=rsBlocks[i2].dataCount;if(buffer.getLengthInBits()>8*totalDataCount)throw"code length overflow. ("+buffer.getLengthInBits()+">"+8*totalDataCount+")";buffer.getLengthInBits()+4<=8*totalDataCount&&buffer.put(0,4);for(;buffer.getLengthInBits()%8!=0;)buffer.putBit(!1);for(;!(buffer.getLengthInBits()>=8*totalDataCount);){buffer.put(236,8);if(buffer.getLengthInBits()>=8*totalDataCount)break;buffer.put(17,8)}return createBytes(buffer,rsBlocks)};_this.addData=function(data,mode){var newData=null;switch(mode=mode||"Byte"){case"Numeric":newData=qrNumber(data);break;case"Alphanumeric":newData=qrAlphaNum(data);break;case"Byte":newData=qr8BitByte(data);break;case"Kanji":newData=qrKanji(data);break;default:throw"mode:"+mode}_dataList.push(newData);_dataCache=null};_this.isDark=function(row,col){if(row<0||_moduleCount<=row||col<0||_moduleCount<=col)throw row+","+col;return _modules[row][col]};_this.getModuleCount=function(){return _moduleCount};_this.make=function(){var typeNumber2,rsBlocks,buffer,i2,data,totalDataCount;if(_typeNumber<1){typeNumber2=1;for(;typeNumber2<40;typeNumber2++){rsBlocks=QRRSBlock.getRSBlocks(typeNumber2,_errorCorrectionLevel);buffer=qrBitBuffer();for(i2=0;i2<_dataList.length;i2++){data=_dataList[i2];buffer.put(data.getMode(),4);buffer.put(data.getLength(),QRUtil.getLengthInBits(data.getMode(),typeNumber2));data.write(buffer)}totalDataCount=0;for(i2=0;i2<rsBlocks.length;i2++)totalDataCount+=rsBlocks[i2].dataCount;if(buffer.getLengthInBits()<=8*totalDataCount)break}_typeNumber=typeNumber2}makeImpl(!1,getBestMaskPattern())};_this.createTableTag=function(cellSize,margin){var qrHtml,r4,c3;cellSize=cellSize||2;qrHtml="";qrHtml+='<table style="';qrHtml+=" border-width: 0px; border-style: none;";qrHtml+=" border-collapse: collapse;";qrHtml+=" padding: 0px; margin: "+(margin=void 0===margin?4*cellSize:margin)+"px;";qrHtml+='">';qrHtml+="<tbody>";for(r4=0;r4<_this.getModuleCount();r4+=1){qrHtml+="<tr>";for(c3=0;c3<_this.getModuleCount();c3+=1){qrHtml+='<td style="';qrHtml+=" border-width: 0px; border-style: none;";qrHtml+=" border-collapse: collapse;";qrHtml+=" padding: 0px; margin: 0px;";qrHtml+=" width: "+cellSize+"px;";qrHtml+=" height: "+cellSize+"px;";qrHtml+=" background-color: ";qrHtml+=_this.isDark(r4,c3)?"#000000":"#ffffff";qrHtml+=";";qrHtml+='"/>'}qrHtml+="</tr>"}return(qrHtml+="</tbody>")+"</table>"};_this.createSvgTag=function(cellSize,margin,alt,title){var size,c3,r4,mr,qrSvg,rect,opts={};if("object"==typeof arguments[0]){cellSize=(opts=arguments[0]).cellSize;margin=opts.margin;alt=opts.alt;title=opts.title}cellSize=cellSize||2;margin=void 0===margin?4*cellSize:margin;(alt="string"==typeof alt?{text:alt}:alt||{}).text=alt.text||null;alt.id=alt.text?alt.id||"qrcode-description":null;(title="string"==typeof title?{text:title}:title||{}).text=title.text||null;title.id=title.text?title.id||"qrcode-title":null;size=_this.getModuleCount()*cellSize+2*margin;qrSvg="";rect="l"+cellSize+",0 0,"+cellSize+" -"+cellSize+",0 0,-"+cellSize+"z ";qrSvg+='<svg version="1.1" xmlns="http://www.w3.org/2000/svg"';qrSvg+=opts.scalable?"":' width="'+size+'px" height="'+size+'px"';qrSvg+=' viewBox="0 0 '+size+" "+size+'" ';qrSvg+=' preserveAspectRatio="xMinYMin meet"';qrSvg+=title.text||alt.text?' role="img" aria-labelledby="'+escapeXml([title.id,alt.id].join(" ").trim())+'"':"";qrSvg+=">";qrSvg+=title.text?'<title id="'+escapeXml(title.id)+'">'+escapeXml(title.text)+"</title>":"";qrSvg+=alt.text?'<description id="'+escapeXml(alt.id)+'">'+escapeXml(alt.text)+"</description>":"";qrSvg+='<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>';qrSvg+='<path d="';for(r4=0;r4<_this.getModuleCount();r4+=1){mr=r4*cellSize+margin;for(c3=0;c3<_this.getModuleCount();c3+=1)_this.isDark(r4,c3)&&(qrSvg+="M"+(c3*cellSize+margin)+","+mr+rect)}return(qrSvg+='" stroke="transparent" fill="black"/>')+"</svg>"};_this.createDataURL=function(cellSize,margin){var size,min,max3;cellSize=cellSize||2;margin=void 0===margin?4*cellSize:margin;size=_this.getModuleCount()*cellSize+2*margin;min=margin;max3=size-margin;return createDataURL(size,size,function(x2,y2){var c3,r4;if(min<=x2&&x2<max3&&min<=y2&&y2<max3){c3=Math.floor((x2-min)/cellSize);r4=Math.floor((y2-min)/cellSize);return _this.isDark(r4,c3)?0:1}return 1})};_this.createImgTag=function(cellSize,margin,alt){var size,img;cellSize=cellSize||2;margin=void 0===margin?4*cellSize:margin;size=_this.getModuleCount()*cellSize+2*margin;img="";img+="<img";img+=' src="';img+=_this.createDataURL(cellSize,margin);img+='"';img+=' width="';img+=size;img+='"';img+=' height="';img+=size;img+='"';if(alt){img+=' alt="';img+=escapeXml(alt);img+='"'}return img+"/>"};escapeXml=function(s2){var i2,c3,escaped="";for(i2=0;i2<s2.length;i2+=1)switch(c3=s2.charAt(i2)){case"<":escaped+="&lt;";break;case">":escaped+="&gt;";break;case"&":escaped+="&amp;";break;case'"':escaped+="&quot;";break;default:escaped+=c3;break}return escaped};_createHalfASCII=function(margin){var size,min,max3,y2,x2,r12,r22,p2,blocks,blocksLastLineNoMargin,ascii;min=margin=void 0===margin?2:margin;max3=(size=1*_this.getModuleCount()+2*margin)-margin;blocks={"██":"█","█ ":"▀"," █":"▄"," ":" "};blocksLastLineNoMargin={"██":"▀","█ ":"▀"," █":" "," ":" "};ascii="";for(y2=0;y2<size;y2+=2){r12=Math.floor((y2-min)/1);r22=Math.floor((y2+1-min)/1);for(x2=0;x2<size;x2+=1){p2="█";min<=x2&&x2<max3&&min<=y2&&y2<max3&&_this.isDark(r12,Math.floor((x2-min)/1))&&(p2=" ");min<=x2&&x2<max3&&min<=y2+1&&y2+1<max3&&_this.isDark(r22,Math.floor((x2-min)/1))?p2+=" ":p2+="█";ascii+=margin<1&&y2+1>=max3?blocksLastLineNoMargin[p2]:blocks[p2]}ascii+="\n"}return size%2&&margin>0?ascii.substring(0,ascii.length-size-1)+Array(size+1).join("▀"):ascii.substring(0,ascii.length-1)};_this.createASCII=function(cellSize,margin){var size,min,max3,y2,x2,r4,p2,white,black,ascii,line;if((cellSize=cellSize||1)<2)return _createHalfASCII(margin);cellSize-=1;min=margin=void 0===margin?2*cellSize:margin;max3=(size=_this.getModuleCount()*cellSize+2*margin)-margin;white=Array(cellSize+1).join("██");black=Array(cellSize+1).join(" ");ascii="";line="";for(y2=0;y2<size;y2+=1){r4=Math.floor((y2-min)/cellSize);line="";for(x2=0;x2<size;x2+=1){p2=1;min<=x2&&x2<max3&&min<=y2&&y2<max3&&_this.isDark(r4,Math.floor((x2-min)/cellSize))&&(p2=0);line+=p2?white:black}for(r4=0;r4<cellSize;r4+=1)ascii+=line+"\n"}return ascii.substring(0,ascii.length-1)};_this.renderTo2dContext=function(context2,cellSize){var length,row,col;cellSize=cellSize||2;length=_this.getModuleCount();for(row=0;row<length;row++)for(col=0;col<length;col++){context2.fillStyle=_this.isDark(row,col)?"black":"white";context2.fillRect(row*cellSize,col*cellSize,cellSize,cellSize)}};return _this};qrcode3.stringToBytesFuncs={default:function(s2){var i2,c3,bytes=[];for(i2=0;i2<s2.length;i2+=1){c3=s2.charCodeAt(i2);bytes.push(255&c3)}return bytes}};qrcode3.stringToBytes=qrcode3.stringToBytesFuncs.default;qrcode3.createStringToBytes=function(unicodeData,numChars){var unicodeMap=function(){for(var b0,b1,v2,bin=base64DecodeInputStream(unicodeData),read=function(){var b5=bin.read();if(-1==b5)throw"eof";return b5},count=0,unicodeMap2={};-1!=(b0=bin.read());){b1=read();v2=read()<<8|read();unicodeMap2[String.fromCharCode(b0<<8|b1)]=v2;count+=1}if(count!=numChars)throw count+" != "+numChars;return unicodeMap2}(),unknownChar="?".charCodeAt(0);return function(s2){var i2,c3,b3,bytes=[];for(i2=0;i2<s2.length;i2+=1)if((c3=s2.charCodeAt(i2))<128)bytes.push(c3);else if("number"==typeof(b3=unicodeMap[s2.charAt(i2)]))if((255&b3)==b3)bytes.push(b3);else{bytes.push(b3>>>8);bytes.push(255&b3)}else bytes.push(unknownChar);return bytes}};QRErrorCorrectionLevel={L:1,M:0,Q:3,H:2};QRUtil=function(){var PATTERN_POSITION_TABLE=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],_this={},getBCHDigit=function(data){for(var digit=0;0!=data;){digit+=1;data>>>=1}return digit};_this.getBCHTypeInfo=function(data){for(var d4=data<<10;getBCHDigit(d4)-getBCHDigit(1335)>=0;)d4^=1335<<getBCHDigit(d4)-getBCHDigit(1335);return 21522^(data<<10|d4)};_this.getBCHTypeNumber=function(data){for(var d4=data<<12;getBCHDigit(d4)-getBCHDigit(7973)>=0;)d4^=7973<<getBCHDigit(d4)-getBCHDigit(7973);return data<<12|d4};_this.getPatternPosition=function(typeNumber){return PATTERN_POSITION_TABLE[typeNumber-1]};_this.getMaskFunction=function(maskPattern){switch(maskPattern){case 0:return function(i2,j2){return(i2+j2)%2==0};case 1:return function(i2,j2){return i2%2==0};case 2:return function(i2,j2){return j2%3==0};case 3:return function(i2,j2){return(i2+j2)%3==0};case 4:return function(i2,j2){return(Math.floor(i2/2)+Math.floor(j2/3))%2==0};case 5:return function(i2,j2){return i2*j2%2+i2*j2%3==0};case 6:return function(i2,j2){return(i2*j2%2+i2*j2%3)%2==0};case 7:return function(i2,j2){return(i2*j2%3+(i2+j2)%2)%2==0};default:throw"bad maskPattern:"+maskPattern}};_this.getErrorCorrectPolynomial=function(errorCorrectLength){var i2,a2=qrPolynomial([1],0);for(i2=0;i2<errorCorrectLength;i2+=1)a2=a2.multiply(qrPolynomial([1,QRMath.gexp(i2)],0));return a2};_this.getLengthInBits=function(mode,type){if(1<=type&&type<10)switch(mode){case 1:return 10;case 2:return 9;case 4:return 8;case 8:return 8;default:throw"mode:"+mode}else if(type<27)switch(mode){case 1:return 12;case 2:return 11;case 4:return 16;case 8:return 10;default:throw"mode:"+mode}else{if(!(type<41))throw"type:"+type;switch(mode){case 1:return 14;case 2:return 13;case 4:return 16;case 8:return 12;default:throw"mode:"+mode}}};_this.getLostPoint=function(qrcode4){var row,col,sameCount,dark,r4,c3,count,darkCount,moduleCount=qrcode4.getModuleCount(),lostPoint=0;for(row=0;row<moduleCount;row+=1)for(col=0;col<moduleCount;col+=1){sameCount=0;dark=qrcode4.isDark(row,col);for(r4=-1;r4<=1;r4+=1)if(!(row+r4<0||moduleCount<=row+r4))for(c3=-1;c3<=1;c3+=1)col+c3<0||moduleCount<=col+c3||0==r4&&0==c3||dark==qrcode4.isDark(row+r4,col+c3)&&(sameCount+=1);sameCount>5&&(lostPoint+=3+sameCount-5)}for(row=0;row<moduleCount-1;row+=1)for(col=0;col<moduleCount-1;col+=1){count=0;qrcode4.isDark(row,col)&&(count+=1);qrcode4.isDark(row+1,col)&&(count+=1);qrcode4.isDark(row,col+1)&&(count+=1);qrcode4.isDark(row+1,col+1)&&(count+=1);0!=count&&4!=count||(lostPoint+=3)}for(row=0;row<moduleCount;row+=1)for(col=0;col<moduleCount-6;col+=1)qrcode4.isDark(row,col)&&!qrcode4.isDark(row,col+1)&&qrcode4.isDark(row,col+2)&&qrcode4.isDark(row,col+3)&&qrcode4.isDark(row,col+4)&&!qrcode4.isDark(row,col+5)&&qrcode4.isDark(row,col+6)&&(lostPoint+=40);for(col=0;col<moduleCount;col+=1)for(row=0;row<moduleCount-6;row+=1)qrcode4.isDark(row,col)&&!qrcode4.isDark(row+1,col)&&qrcode4.isDark(row+2,col)&&qrcode4.isDark(row+3,col)&&qrcode4.isDark(row+4,col)&&!qrcode4.isDark(row+5,col)&&qrcode4.isDark(row+6,col)&&(lostPoint+=40);darkCount=0;for(col=0;col<moduleCount;col+=1)for(row=0;row<moduleCount;row+=1)qrcode4.isDark(row,col)&&(darkCount+=1);return lostPoint+Math.abs(100*darkCount/moduleCount/moduleCount-50)/5*10};return _this}();QRMath=function(){var i2,_this,EXP_TABLE=new Array(256),LOG_TABLE=new Array(256);for(i2=0;i2<8;i2+=1)EXP_TABLE[i2]=1<<i2;for(i2=8;i2<256;i2+=1)EXP_TABLE[i2]=EXP_TABLE[i2-4]^EXP_TABLE[i2-5]^EXP_TABLE[i2-6]^EXP_TABLE[i2-8];for(i2=0;i2<255;i2+=1)LOG_TABLE[EXP_TABLE[i2]]=i2;(_this={}).glog=function(n3){if(n3<1)throw"glog("+n3+")";return LOG_TABLE[n3]};_this.gexp=function(n3){for(;n3<0;)n3+=255;for(;n3>=256;)n3-=255;return EXP_TABLE[n3]};return _this}();QRRSBlock=function(){var RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],qrRSBlock=function(totalCount,dataCount){var _this2={};_this2.totalCount=totalCount;_this2.dataCount=dataCount;return _this2},_this={},getRsBlockTable=function(typeNumber,errorCorrectionLevel){switch(errorCorrectionLevel){case QRErrorCorrectionLevel.L:return RS_BLOCK_TABLE[4*(typeNumber-1)+0];case QRErrorCorrectionLevel.M:return RS_BLOCK_TABLE[4*(typeNumber-1)+1];case QRErrorCorrectionLevel.Q:return RS_BLOCK_TABLE[4*(typeNumber-1)+2];case QRErrorCorrectionLevel.H:return RS_BLOCK_TABLE[4*(typeNumber-1)+3];default:return}};_this.getRSBlocks=function(typeNumber,errorCorrectionLevel){var length,list,i2,count,totalCount,dataCount,j2,rsBlock=getRsBlockTable(typeNumber,errorCorrectionLevel);if(void 0===rsBlock)throw"bad rs block @ typeNumber:"+typeNumber+"/errorCorrectionLevel:"+errorCorrectionLevel;length=rsBlock.length/3;list=[];for(i2=0;i2<length;i2+=1){count=rsBlock[3*i2+0];totalCount=rsBlock[3*i2+1];dataCount=rsBlock[3*i2+2];for(j2=0;j2<count;j2+=1)list.push(qrRSBlock(totalCount,dataCount))}return list};return _this}();qrBitBuffer=function(){var _buffer=[],_length=0,_this={getBuffer:function(){return _buffer},getAt:function(index6){var bufIndex=Math.floor(index6/8);return 1==(_buffer[bufIndex]>>>7-index6%8&1)},put:function(num,length){for(var i2=0;i2<length;i2+=1)_this.putBit(1==(num>>>length-i2-1&1))},getLengthInBits:function(){return _length},putBit:function(bit){var bufIndex=Math.floor(_length/8);_buffer.length<=bufIndex&&_buffer.push(0);bit&&(_buffer[bufIndex]|=128>>>_length%8);_length+=1}};return _this};qrNumber=function(data){var strToNum2,chatToNum,_data2=data,_this={getMode:function(){return 1},getLength:function(buffer){return _data2.length},write:function(buffer){for(var data2=_data2,i2=0;i2+2<data2.length;){buffer.put(strToNum2(data2.substring(i2,i2+3)),10);i2+=3}i2<data2.length&&(data2.length-i2==1?buffer.put(strToNum2(data2.substring(i2,i2+1)),4):data2.length-i2==2&&buffer.put(strToNum2(data2.substring(i2,i2+2)),7))}};strToNum2=function(s2){var i2,num=0;for(i2=0;i2<s2.length;i2+=1)num=10*num+chatToNum(s2.charAt(i2));return num};chatToNum=function(c3){if("0"<=c3&&c3<="9")return c3.charCodeAt(0)-"0".charCodeAt(0);throw"illegal char :"+c3};return _this};qrAlphaNum=function(data){var getCode,_data2=data,_this={getMode:function(){return 2},getLength:function(buffer){return _data2.length},write:function(buffer){for(var s2=_data2,i2=0;i2+1<s2.length;){buffer.put(45*getCode(s2.charAt(i2))+getCode(s2.charAt(i2+1)),11);i2+=2}i2<s2.length&&buffer.put(getCode(s2.charAt(i2)),6)}};getCode=function(c3){if("0"<=c3&&c3<="9")return c3.charCodeAt(0)-"0".charCodeAt(0);if("A"<=c3&&c3<="Z")return c3.charCodeAt(0)-"A".charCodeAt(0)+10;switch(c3){case" ":return 36;case"$":return 37;case"%":return 38;case"*":return 39;case"+":return 40;case"-":return 41;case".":return 42;case"/":return 43;case":":return 44;default:throw"illegal char :"+c3}};return _this};qr8BitByte=function(data){var _bytes=qrcode3.stringToBytes(data),_this={getMode:function(){return 4},getLength:function(buffer){return _bytes.length},write:function(buffer){for(var i2=0;i2<_bytes.length;i2+=1)buffer.put(_bytes[i2],8)}};return _this};qrKanji=function(data){var _bytes,_this,stringToBytes=qrcode3.stringToBytesFuncs.SJIS;if(!stringToBytes)throw"sjis not supported.";!function(){var test=stringToBytes("友");if(2!=test.length||38726!=(test[0]<<8|test[1]))throw"sjis not supported."}();_bytes=stringToBytes(data);(_this={}).getMode=function(){return 8};_this.getLength=function(buffer){return~~(_bytes.length/2)};_this.write=function(buffer){for(var c3,data2=_bytes,i2=0;i2+1<data2.length;){if(33088<=(c3=(255&data2[i2])<<8|255&data2[i2+1])&&c3<=40956)c3-=33088;else{if(!(57408<=c3&&c3<=60351))throw"illegal char at "+(i2+1)+"/"+c3;c3-=49472}c3=192*(c3>>>8&255)+(255&c3);buffer.put(c3,13);i2+=2}if(i2<data2.length)throw"illegal char at "+(i2+1)};return _this};byteArrayOutputStream=function(){var _bytes=[],_this={writeByte:function(b3){_bytes.push(255&b3)},writeShort:function(i2){_this.writeByte(i2);_this.writeByte(i2>>>8)},writeBytes:function(b3,off,len){off=off||0;len=len||b3.length;for(var i2=0;i2<len;i2+=1)_this.writeByte(b3[i2+off])},writeString:function(s2){for(var i2=0;i2<s2.length;i2+=1)_this.writeByte(s2.charCodeAt(i2))},toByteArray:function(){return _bytes},toString:function(){var i2,s2="";s2+="[";for(i2=0;i2<_bytes.length;i2+=1){i2>0&&(s2+=",");s2+=_bytes[i2]}return s2+"]"}};return _this};base64EncodeOutputStream=function(){var _buffer=0,_buflen=0,_length=0,_base64="",_this={},writeEncoded=function(b3){_base64+=String.fromCharCode(encode(63&b3))},encode=function(n3){if(n3<0);else{if(n3<26)return 65+n3;if(n3<52)return n3-26+97;if(n3<62)return n3-52+48;if(62==n3)return 43;if(63==n3)return 47}throw"n:"+n3};_this.writeByte=function(n3){_buffer=_buffer<<8|255&n3;_buflen+=8;_length+=1;for(;_buflen>=6;){writeEncoded(_buffer>>>_buflen-6);_buflen-=6}};_this.flush=function(){var padlen,i2;if(_buflen>0){writeEncoded(_buffer<<6-_buflen);_buffer=0;_buflen=0}if(_length%3!=0){padlen=3-_length%3;for(i2=0;i2<padlen;i2+=1)_base64+="="}};_this.toString=function(){return _base64};return _this};base64DecodeInputStream=function(str){var decode,_str=str,_pos=0,_buffer=0,_buflen=0,_this={read:function(){for(var c3,n3;_buflen<8;){if(_pos>=_str.length){if(0==_buflen)return-1;throw"unexpected end of file./"+_buflen}c3=_str.charAt(_pos);_pos+=1;if("="==c3){_buflen=0;return-1}if(!c3.match(/^\s$/)){_buffer=_buffer<<6|decode(c3.charCodeAt(0));_buflen+=6}}n3=_buffer>>>_buflen-8&255;_buflen-=8;return n3}};decode=function(c3){if(65<=c3&&c3<=90)return c3-65;if(97<=c3&&c3<=122)return c3-97+26;if(48<=c3&&c3<=57)return c3-48+52;if(43==c3)return 62;if(47==c3)return 63;throw"c:"+c3};return _this};gifImage=function(width,height){var bitOutputStream,getLZWRaster,lzwTable,_width=width,_height=height,_data2=new Array(width*height),_this={setPixel:function(x2,y2,pixel){_data2[y2*_width+x2]=pixel},write:function(out){var raster,offset;out.writeString("GIF87a");out.writeShort(_width);out.writeShort(_height);out.writeByte(128);out.writeByte(0);out.writeByte(0);out.writeByte(0);out.writeByte(0);out.writeByte(0);out.writeByte(255);out.writeByte(255);out.writeByte(255);out.writeString(",");out.writeShort(0);out.writeShort(0);out.writeShort(_width);out.writeShort(_height);out.writeByte(0);raster=getLZWRaster(2);out.writeByte(2);offset=0;for(;raster.length-offset>255;){out.writeByte(255);out.writeBytes(raster,offset,255);offset+=255}out.writeByte(raster.length-offset);out.writeBytes(raster,offset,raster.length-offset);out.writeByte(0);out.writeString(";")}};bitOutputStream=function(out){var _out=out,_bitLength=0,_bitBuffer=0;return{write:function(data,length){if(data>>>length!=0)throw"length over";for(;_bitLength+length>=8;){_out.writeByte(255&(data<<_bitLength|_bitBuffer));length-=8-_bitLength;data>>>=8-_bitLength;_bitBuffer=0;_bitLength=0}_bitBuffer|=data<<_bitLength;_bitLength+=length},flush:function(){_bitLength>0&&_out.writeByte(_bitBuffer)}}};getLZWRaster=function(lzwMinCodeSize){var i2,byteOut,bitOut,dataIndex,s2,c3,clearCode=1<<lzwMinCodeSize,endCode=1+(1<<lzwMinCodeSize),bitLength=lzwMinCodeSize+1,table2=lzwTable();for(i2=0;i2<clearCode;i2+=1)table2.add(String.fromCharCode(i2));table2.add(String.fromCharCode(clearCode));table2.add(String.fromCharCode(endCode));byteOut=byteArrayOutputStream();(bitOut=bitOutputStream(byteOut)).write(clearCode,bitLength);dataIndex=0;s2=String.fromCharCode(_data2[dataIndex]);dataIndex+=1;for(;dataIndex<_data2.length;){c3=String.fromCharCode(_data2[dataIndex]);dataIndex+=1;if(table2.contains(s2+c3))s2+=c3;else{bitOut.write(table2.indexOf(s2),bitLength);if(table2.size()<4095){table2.size()==1<<bitLength&&(bitLength+=1);table2.add(s2+c3)}s2=c3}}bitOut.write(table2.indexOf(s2),bitLength);bitOut.write(endCode,bitLength);bitOut.flush();return byteOut.toByteArray()};lzwTable=function(){var _map={},_size=0,_this2={add:function(key3){if(_this2.contains(key3))throw"dup key:"+key3;_map[key3]=_size;_size+=1},size:function(){return _size},indexOf:function(key3){return _map[key3]},contains:function(key3){return void 0!==_map[key3]}};return _this2};return _this};createDataURL=function(width,height,getPixel){var y2,x2,b3,base64,bytes,i2,gif=gifImage(width,height);for(y2=0;y2<height;y2+=1)for(x2=0;x2<width;x2+=1)gif.setPixel(x2,y2,getPixel(x2,y2));b3=byteArrayOutputStream();gif.write(b3);base64=base64EncodeOutputStream();bytes=b3.toByteArray();for(i2=0;i2<bytes.length;i2+=1)base64.writeByte(bytes[i2]);base64.flush();return"data:image/gif;base64,"+base64};return qrcode3}();!function(){qrcode2.stringToBytesFuncs["UTF-8"]=function(s2){return function toUTF8Array(str){var i2,charcode,utf8=[];for(i2=0;i2<str.length;i2++)if((charcode=str.charCodeAt(i2))<128)utf8.push(charcode);else if(charcode<2048)utf8.push(192|charcode>>6,128|63&charcode);else if(charcode<55296||charcode>=57344)utf8.push(224|charcode>>12,128|charcode>>6&63,128|63&charcode);else{i2++;charcode=65536+((1023&charcode)<<10|1023&str.charCodeAt(i2));utf8.push(240|charcode>>18,128|charcode>>12&63,128|charcode>>6&63,128|63&charcode)}return utf8}(s2)}}();(function(factory){"function"==typeof define&&define.amd?define([],factory):"object"==typeof exports&&(module2.exports=factory())})(function(){return qrcode2})}});__export(main_exports={},{default:()=>ObsidianLiveSyncPlugin});module.exports=__toCommonJS(main_exports);LOG_KIND_ERROR=8;LOG_LEVEL_DEBUG=-1;LEVEL_INFO=LOG_LEVEL_INFO=32;LEVEL_NOTICE=LOG_LEVEL_NOTICE=64;LOG_LEVEL_VERBOSE=16;defaultLoggerEnv_minLogLevel=LOG_LEVEL_INFO;_logger=function defaultLogger2(message,level=LEVEL_INFO,key3){if(level<defaultLoggerEnv_minLogLevel)return;const newMessage=`${(new Date).toLocaleString()}\t${level}\t${"string"==typeof message?message:message instanceof Error?`${message.name}:${message.message}`:JSON.stringify(message,null,2)}`;1&level?console.debug(newMessage):4&level?console.warn(newMessage):level&LOG_KIND_ERROR?console.error(newMessage):2&level?console.info(newMessage):console.log(newMessage);message instanceof Error&&console.dir(message.stack)};RESULT_TIMED_OUT=Symbol("timed out");Symbol("NotFound");MILESTONE_DOCID="_local/obsydian_livesync_milestone";NODEINFO_DOCID="_local/obsydian_livesync_nodeinfo";SYNCINFO_ID="syncinfo";CANCELLED=Symbol("cancelled");AUTO_MERGED=Symbol("auto_merged");NOT_CONFLICTED=Symbol("not_conflicted");MISSING_OR_ERROR=Symbol("missing_or_error");LEAVE_TO_SUBSEQUENT=Symbol("leave_to_subsequent_proc");Symbol("infinity");BASE_IS_NEW=Symbol("base");TARGET_IS_NEW=Symbol("target");EVEN=Symbol("even");LEAF_WAIT_TIMEOUT=3e4;LEAF_WAIT_ONLY_REMOTE=5e3;LEAF_WAIT_TIMEOUT_SEQUENTIAL_REPLICATOR=5e3;IDPrefixes_Chunk="h:";PREFIX_OBFUSCATED="f:";PREFIX_ENCRYPTED_CHUNK="h:+";AutoAccepting=(AutoAccepting2=>{AutoAccepting2[AutoAccepting2.NONE=0]="NONE";AutoAccepting2[AutoAccepting2.ALL=1]="ALL";return AutoAccepting2})(AutoAccepting||{});REMOTE_COUCHDB=RemoteTypes_REMOTE_COUCHDB="";REMOTE_MINIO=RemoteTypes_REMOTE_MINIO="MINIO";REMOTE_P2P=RemoteTypes_REMOTE_P2P="ONLY_P2P";E2EEAlgorithmNames={"":"V1: Legacy",v2:"V2: AES-256-GCM With HKDF",forceV1:"Force-V1: Force Legacy (Not recommended)"};ChunkAlgorithmNames={v1:"V1: Legacy",v2:"V2: Simple (Default)","v2-segmenter":"V2.5: Lexical chunks","v3-rabin-karp":"V3: Fine deduplication"};MODE_SELECTIVE=0;MODE_AUTOMATIC=1;MODE_PAUSED=2;MODE_SHINY=3;NetworkWarningStyles_BANNER="",NetworkWarningStyles_ICON="icon",NetworkWarningStyles_HIDDEN="hidden";PREFERRED_BASE={syncMaxSizeInMB:50,chunkSplitterVersion:"v3-rabin-karp",doNotUseFixedRevisionForChunks:!1,usePluginSyncV2:!0,handleFilenameCaseSensitive:!1,E2EEAlgorithm:(E2EEAlgorithms={V1:"",V2:"v2",ForceV1:"forceV1"}).V2};PREFERRED_SETTING_CLOUDANT={...PREFERRED_BASE,customChunkSize:0,sendChunksBulkMaxSize:1,concurrencyOfReadChunksOnline:100,minimumIntervalOfReadChunksOnline:333};PREFERRED_SETTING_SELF_HOSTED={...PREFERRED_BASE,customChunkSize:50,sendChunksBulkMaxSize:1,concurrencyOfReadChunksOnline:30,minimumIntervalOfReadChunksOnline:25};PREFERRED_JOURNAL_SYNC={...PREFERRED_BASE,customChunkSize:10,concurrencyOfReadChunksOnline:30,minimumIntervalOfReadChunksOnline:25};P2P_DEFAULT_SETTINGS={P2P_Enabled:!1,P2P_AutoAccepting:0,P2P_AppID:"self-hosted-livesync",P2P_roomID:"",P2P_passphrase:"",P2P_relays:"wss://exp-relay.vrtmrz.net/",P2P_AutoBroadcast:!1,P2P_AutoStart:!1,P2P_AutoSyncPeers:"",P2P_AutoWatchPeers:"",P2P_SyncOnReplication:"",P2P_RebuildFrom:"",P2P_AutoAcceptingPeers:"",P2P_AutoDenyingPeers:"",P2P_IsHeadless:!1,P2P_DevicePeerName:"",P2P_turnServers:"",P2P_turnUsername:"",P2P_turnCredential:""};DEFAULT_SETTINGS={remoteType:REMOTE_COUCHDB,useCustomRequestHandler:!1,couchDB_URI:"",couchDB_USER:"",couchDB_PASSWORD:"",couchDB_DBNAME:"",liveSync:!1,syncOnSave:!1,syncOnStart:!1,savingDelay:200,lessInformationInLog:!1,gcDelay:300,versionUpFlash:"",minimumChunkSize:20,longLineThreshold:250,showVerboseLog:!1,suspendFileWatching:!1,trashInsteadDelete:!0,periodicReplication:!1,periodicReplicationInterval:60,syncOnFileOpen:!1,encrypt:!1,passphrase:"",usePathObfuscation:!1,doNotDeleteFolder:!1,resolveConflictsByNewerFile:!1,batchSave:!1,batchSaveMinimumDelay:5,batchSaveMaximumDelay:60,deviceAndVaultName:"",usePluginSettings:!1,showOwnPlugins:!1,showStatusOnEditor:!0,showStatusOnStatusbar:!0,showOnlyIconsOnEditor:!1,hideFileWarningNotice:!1,networkWarningStyle:"",usePluginSync:!1,autoSweepPlugins:!1,autoSweepPluginsPeriodic:!1,notifyPluginOrSettingUpdated:!1,checkIntegrityOnSave:!1,batch_size:25,batches_limit:25,useHistory:!1,disableRequestURI:!1,skipOlderFilesOnSync:!0,checkConflictOnlyOnOpen:!1,showMergeDialogOnlyOnActive:!1,syncInternalFiles:!1,syncInternalFilesBeforeReplication:!1,syncInternalFilesIgnorePatterns:"\\/node_modules\\/, \\/\\.git\\/, \\/obsidian-livesync\\/",syncInternalFilesTargetPatterns:"",syncInternalFilesInterval:60,additionalSuffixOfDatabaseName:"",ignoreVersionCheck:!1,lastReadUpdates:0,deleteMetadataOfDeletedFiles:!1,syncIgnoreRegEx:"",syncOnlyRegEx:"",customChunkSize:0,readChunksOnline:!0,watchInternalFileChanges:!0,automaticallyDeleteMetadataOfDeletedFiles:0,disableMarkdownAutoMerge:!1,writeDocumentsIfConflicted:!1,useDynamicIterationCount:!1,syncAfterMerge:!1,configPassphraseStore:"",encryptedPassphrase:"",encryptedCouchDBConnection:"",permitEmptyPassphrase:!1,remoteConfigurations:{},activeConfigurationId:"",useIndexedDBAdapter:!1,useTimeouts:!1,writeLogToTheFile:!1,doNotPaceReplication:!1,hashCacheMaxCount:300,hashCacheMaxAmount:50,concurrencyOfReadChunksOnline:40,minimumIntervalOfReadChunksOnline:50,hashAlg:"xxhash64",suspendParseReplicationResult:!1,doNotSuspendOnFetching:!1,useIgnoreFiles:!1,ignoreFiles:".gitignore",syncOnEditorSave:!1,pluginSyncExtendedSetting:{},syncMaxSizeInMB:50,settingSyncFile:"",writeCredentialsForSettingSync:!1,notifyAllSettingSyncFile:!1,isConfigured:void 0,settingVersion:10,enableCompression:!1,accessKey:"",bucket:"",endpoint:"",region:"auto",secretKey:"",useEden:!1,maxChunksInEden:10,maxTotalLengthInEden:1024,maxAgeInEden:10,disableCheckingConfigMismatch:!1,displayLanguage:"",enableChunkSplitterV2:!1,disableWorkerForGeneratingChunks:!1,processSmallFilesInUIThread:!1,notifyThresholdOfRemoteStorageSize:-1,usePluginSyncV2:!1,usePluginEtc:!1,handleFilenameCaseSensitive:void 0,doNotUseFixedRevisionForChunks:!0,showLongerLogInsideEditor:!1,sendChunksBulk:!1,sendChunksBulkMaxSize:1,useSegmenter:!1,useAdvancedMode:!1,usePowerUserMode:!1,useEdgeCaseMode:!1,enableDebugTools:!1,suppressNotifyHiddenFilesChange:!1,syncMinimumInterval:2e3,...P2P_DEFAULT_SETTINGS,doctorProcessedVersion:"",bucketCustomHeaders:"",couchDB_CustomHeaders:"",useJWT:!1,jwtAlgorithm:"",jwtKey:"",jwtKid:"",jwtSub:"",jwtExpDuration:5,useRequestAPI:!1,bucketPrefix:"",chunkSplitterVersion:"v3-rabin-karp",E2EEAlgorithm:E2EEAlgorithms.V2,processSizeMismatchedFiles:!1,forcePathStyle:!0,syncInternalFileOverwritePatterns:"",useOnlyLocalChunk:!1,maxMTimeForReflectEvents:0};KeyIndexOfSettings={remoteType:0,useCustomRequestHandler:1,couchDB_URI:2,couchDB_USER:3,couchDB_PASSWORD:4,couchDB_DBNAME:5,minimumChunkSize:6,longLineThreshold:7,encrypt:8,passphrase:9,usePathObfuscation:10,checkIntegrityOnSave:11,batch_size:12,batches_limit:13,useHistory:14,disableRequestURI:15,checkConflictOnlyOnOpen:16,showMergeDialogOnlyOnActive:17,additionalSuffixOfDatabaseName:18,ignoreVersionCheck:19,deleteMetadataOfDeletedFiles:20,customChunkSize:21,readChunksOnline:22,automaticallyDeleteMetadataOfDeletedFiles:23,useDynamicIterationCount:24,permitEmptyPassphrase:25,useTimeouts:26,doNotPaceReplication:27,hashCacheMaxCount:28,hashCacheMaxAmount:29,concurrencyOfReadChunksOnline:30,minimumIntervalOfReadChunksOnline:31,hashAlg:32,enableCompression:33,accessKey:34,bucket:35,endpoint:36,region:37,secretKey:38,useEden:39,maxChunksInEden:40,maxTotalLengthInEden:41,maxAgeInEden:42,disableCheckingConfigMismatch:43,handleFilenameCaseSensitive:44,doNotUseFixedRevisionForChunks:45,sendChunksBulk:46,sendChunksBulkMaxSize:47,useSegmenter:48,liveSync:49,syncOnSave:50,syncOnStart:51,syncOnFileOpen:52,syncOnEditorSave:53,syncMinimumInterval:54,showVerboseLog:55,lessInformationInLog:56,showLongerLogInsideEditor:57,showStatusOnEditor:58,showStatusOnStatusbar:59,showOnlyIconsOnEditor:60,displayLanguage:61,trashInsteadDelete:62,doNotDeleteFolder:63,batchSave:64,batchSaveMinimumDelay:64,batchSaveMaximumDelay:65,syncMaxSizeInMB:66,useIgnoreFiles:67,ignoreFiles:68,syncOnlyRegEx:69,syncIgnoreRegEx:70,syncAfterMerge:71,resolveConflictsByNewerFile:72,writeDocumentsIfConflicted:73,disableMarkdownAutoMerge:74,configPassphraseStore:75,encryptedPassphrase:76,encryptedCouchDBConnection:77,periodicReplication:78,periodicReplicationInterval:79,syncInternalFiles:80,syncInternalFilesBeforeReplication:81,syncInternalFilesInterval:82,syncInternalFilesIgnorePatterns:83,watchInternalFileChanges:84,suppressNotifyHiddenFilesChange:85,usePluginSync:86,usePluginSettings:87,showOwnPlugins:88,autoSweepPlugins:89,autoSweepPluginsPeriodic:90,notifyPluginOrSettingUpdated:91,deviceAndVaultName:92,usePluginSyncV2:93,usePluginEtc:94,pluginSyncExtendedSetting:95,useAdvancedMode:96,usePowerUserMode:97,useEdgeCaseMode:98,notifyThresholdOfRemoteStorageSize:99,disableWorkerForGeneratingChunks:100,processSmallFilesInUIThread:101,enableChunkSplitterV2:102,savingDelay:103,gcDelay:104,skipOlderFilesOnSync:105,useIndexedDBAdapter:106,enableDebugTools:107,writeLogToTheFile:108,settingSyncFile:109,writeCredentialsForSettingSync:110,notifyAllSettingSyncFile:111,suspendFileWatching:112,suspendParseReplicationResult:113,doNotSuspendOnFetching:114,versionUpFlash:115,settingVersion:116,isConfigured:117,lastReadUpdates:118,doctorProcessedVersion:119,P2P_Enabled:120,P2P_relays:121,P2P_roomID:122,P2P_passphrase:123,P2P_AutoAccepting:124,P2P_AutoStart:125,P2P_AutoBroadcast:126,P2P_AutoSyncPeers:127,P2P_AutoWatchPeers:128,P2P_SyncOnReplication:129,P2P_AppID:130,P2P_RebuildFrom:131,bucketCustomHeaders:132,couchDB_CustomHeaders:133,useJWT:134,jwtAlgorithm:135,jwtKey:136,jwtKid:137,jwtSub:138,jwtExpDuration:139,P2P_AutoAcceptingPeers:140,P2P_AutoDenyingPeers:141,P2P_IsHeadless:-1,syncInternalFilesTargetPatterns:142,useRequestAPI:143,hideFileWarningNotice:144,bucketPrefix:145,chunkSplitterVersion:146,E2EEAlgorithm:147,processSizeMismatchedFiles:148,forcePathStyle:149,P2P_DevicePeerName:-1,P2P_turnServers:150,P2P_turnUsername:151,P2P_turnCredential:152,syncInternalFileOverwritePatterns:153,useOnlyLocalChunk:154,maxMTimeForReflectEvents:155,networkWarningStyle:156,remoteConfigurations:157,activeConfigurationId:158};SETTING_KEY_P2P_DEVICE_NAME="p2p_device_name";configURIBase="obsidian://setuplivesync?settings=";configURIBaseQR="obsidian://setuplivesync?settingsQR=";SuffixDatabaseName="-livesync-v2";ExtraSuffixIndexedDB="-indexeddb";LEVEL_ADVANCED="ADVANCED";LEVEL_POWER_USER="POWER_USER";LEVEL_EDGE_CASE="EDGE_CASE";configurationNames={minimumChunkSize:{name:"Minimum Chunk Size (Not Configurable from the UI Now)."},longLineThreshold:{name:"Longest chunk line threshold value (Not Configurable from the UI Now)."},encrypt:{name:"End-to-End Encryption",desc:"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended."},usePathObfuscation:{name:"Property Encryption",desc:"If enabled, the file properties will be encrypted in the remote database. This is useful for protecting sensitive information in file paths, sizes, and IDs of its chunks. If you are using V1 E2EE, this only obfuscates the file path."},enableCompression:{name:"Data Compression",status:"EXPERIMENTAL"},useEden:{name:"Incubate Chunks in Document",desc:"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.",status:"BETA"},customChunkSize:{name:"Enhance chunk size"},useDynamicIterationCount:{name:"Use dynamic iteration count",status:"EXPERIMENTAL"},hashAlg:{name:"The Hash algorithm for chunk IDs",status:"EXPERIMENTAL"},enableChunkSplitterV2:{name:"Use splitting-limit-capped chunk splitter",desc:"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker."},maxChunksInEden:{name:"Maximum Incubating Chunks",desc:"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks."},maxTotalLengthInEden:{name:"Maximum Incubating Chunk Size",desc:"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks."},maxAgeInEden:{name:"Maximum Incubation Period",desc:"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks."},usePluginSyncV2:{name:"Per-file-saved customization sync",desc:"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions."},handleFilenameCaseSensitive:{name:"Handle files as Case-Sensitive",desc:"If this enabled, All files are handled as case-Sensitive (Previous behaviour)."},doNotUseFixedRevisionForChunks:{name:"Compute revisions for chunks (Previous behaviour)",desc:"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)"},useSegmenter:{name:"Use Segmented-splitter",desc:"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature."},useJWT:{name:"Use JWT instead of Basic Authentication",desc:"If this enabled, JWT will be used for authentication.",isAdvanced:!0},jwtAlgorithm:{name:"JWT Algorithm",desc:"The algorithm used for JWT authentication.",isAdvanced:!0},jwtKey:{name:"Keypair or pre-shared key",desc:"The key (PSK in HSxxx in base64, or private key in ESxxx in PEM) used for JWT authentication.",isAdvanced:!0,isHidden:!0},jwtKid:{name:"Key ID",desc:"The key ID. this should be matched with CouchDB->jwt_keys->ALG:_`kid`.",isAdvanced:!0},jwtExpDuration:{name:"Rotation Duration",desc:"The Rotation duration of token in minutes. Each generated tokens will be valid only within this duration.",isAdvanced:!0},jwtSub:{name:"Subject (whoami)",desc:"The subject for JWT authentication. Mostly username.",isAdvanced:!0},bucketCustomHeaders:{name:"Custom Headers",desc:"Custom headers for requesting the bucket. e.g. `x-custom-header1: value1\n x-custom-header2: value2`",placeHolder:"x-custom-header1: value1\n x-custom-header2: value2"},couchDB_CustomHeaders:{name:"Custom Headers",desc:"Custom headers for requesting the CouchDB. e.g. `x-custom-header1: value1\n x-custom-header2: value2`",placeHolder:"x-custom-header1: value1\n x-custom-header2: value2"},chunkSplitterVersion:{name:"Chunk Splitter",desc:"Now we can choose how to split the chunks; V3 is the most efficient. If you have troubled, please make this Default or Legacy."},E2EEAlgorithm:{name:"End-to-End Encryption Algorithm",desc:"Please use V2, V1 is deprecated and will be removed in the future, It was not a very appropriate algorithm. Only for compatibility V1 is kept.",isAdvanced:!0},P2P_AppID:{name:"Application ID",desc:"The Application ID for P2P connection. This should be same among your devices. Default is 'self-hosted-livesync' and could not be modified from the UI.",isAdvanced:!0},P2P_relays:{name:"Signalling Relays",desc:"The Nostr relay servers to establish connections for P2P connections. Multiple servers can be separated by commas.",placeHolder:"wss://relay1.example.com,wss://relay2.example.com"},P2P_roomID:{name:"Room ID",desc:"The Room ID for P2P connection. This should be same among your devices."},P2P_passphrase:{name:"Passphrase",desc:"The Passphrase for P2P connection. This should be same among your devices.",isHidden:!0},P2P_turnServers:{name:"TURN Servers",desc:"The TURN servers to use for P2P connections. Multiple servers can be separated by commas.",placeHolder:"turn:turn1.example.com,turn:turn2.example.com"},P2P_turnUsername:{name:"TURN Username",desc:"The username for the TURN servers."},P2P_turnCredential:{name:"TURN Credential",desc:"The credential/password for the TURN servers.",isHidden:!0},useOnlyLocalChunk:{name:"Use Only Local Chunks",desc:"If enabled, the plugin will not attempt to connect to the remote database even if the chunk was not found locally.",isAdvanced:!0}};DEFAULT_SYNC_PARAMETERS={_id:"_local/obsidian_livesync_sync_parameters",type:"sync-parameters",protocolVersion:2,pbkdf2salt:""};TweakValuesShouldMatchedTemplate={minimumChunkSize:20,longLineThreshold:250,encrypt:!1,usePathObfuscation:!1,enableCompression:!1,useEden:!1,customChunkSize:0,useDynamicIterationCount:!1,hashAlg:"xxhash64",enableChunkSplitterV2:!1,maxChunksInEden:10,maxTotalLengthInEden:1024,maxAgeInEden:10,usePluginSyncV2:!1,handleFilenameCaseSensitive:!1,doNotUseFixedRevisionForChunks:!0,useSegmenter:!1,E2EEAlgorithm:E2EEAlgorithms.V2,chunkSplitterVersion:"v3-rabin-karp"};IncompatibleChanges=["encrypt","usePathObfuscation","useDynamicIterationCount","handleFilenameCaseSensitive"];CompatibleButLossyChanges=["hashAlg"];IncompatibleChangesInSpecificPattern=[{key:"doNotUseFixedRevisionForChunks",from:!0,to:!1,isRecommendation:!0},{key:"doNotUseFixedRevisionForChunks",to:!0,isRecommendation:!1}];TweakValuesRecommendedTemplate={useIgnoreFiles:!1,useCustomRequestHandler:!1,batch_size:25,batches_limit:25,useTimeouts:!1,readChunksOnline:!0,hashCacheMaxCount:300,hashCacheMaxAmount:50,concurrencyOfReadChunksOnline:40,minimumIntervalOfReadChunksOnline:50,ignoreFiles:".gitignore",syncMaxSizeInMB:50,enableChunkSplitterV2:!1,usePluginSyncV2:!0,handleFilenameCaseSensitive:!1,doNotUseFixedRevisionForChunks:!1,E2EEAlgorithm:E2EEAlgorithms.V2,chunkSplitterVersion:"v3-rabin-karp"};TweakValuesDefault={usePluginSyncV2:!1,E2EEAlgorithm:DEFAULT_SETTINGS.E2EEAlgorithm,chunkSplitterVersion:DEFAULT_SETTINGS.chunkSplitterVersion};TweakValuesTemplate={...TweakValuesRecommendedTemplate,...TweakValuesShouldMatchedTemplate};DEVICE_ID_PREFERRED="PREFERRED";PREFIXMD_LOGFILE="livesync_log_";PREFIXMD_LOGFILE_UC="LIVESYNC_LOG_";FLAGMD_REDFLAG=FlagFilesOriginal_SUSPEND_ALL="redflag.md";FLAGMD_REDFLAG2=FlagFilesOriginal_REBUILD_ALL="redflag2.md";FLAGMD_REDFLAG2_HR=FlagFilesHumanReadable_REBUILD_ALL="flag_rebuild.md";FLAGMD_REDFLAG3=FlagFilesOriginal_FETCH_ALL="redflag3.md";FLAGMD_REDFLAG3_HR=FlagFilesHumanReadable_FETCH_ALL="flag_fetch.md";DEFAULT_REPLICATION_STATICS={sent:0,arrived:0,maxPullSeq:0,maxPushSeq:0,lastSyncPullSeq:0,lastSyncPushSeq:0,syncStatus:"CLOSED"};import_obsidian=require("obsidian");import_obsidian2=require("obsidian");import_diff_match_patch=__toESM(require_diff_match_patch(),1);normalizePath=import_obsidian2.normalizePath;FallbackWeakRef="WeakRef"in globalThis?globalThis.WeakRef:(_a=class WeakRef{constructor(target){Object.defineProperty(this,"__target",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this.__target=target}deref(){return this.__target}},Object.defineProperty(_a,"__",{enumerable:!0,configurable:!0,writable:!0,value:console.warn("WeakRef is not supported in this environment. Using a fallback implementation. This may cause memory leaks. Please consider upgrading your browser or Node.js version. If you are on Android, please consider changing your WebView engine to a newer version. It is on the Developer Settings.")}),_a);"FinalizationRegistry"in globalThis&&globalThis.FinalizationRegistry;prefixMapObject={s:{1:"V",2:"W",3:"X",4:"Y",5:"Z"},o:{1:"v",2:"w",3:"x",4:"y",5:"z"}};decodePrefixMapObject=Object.fromEntries(Object.entries(prefixMapObject).flatMap(([prefix,map3])=>Object.entries(map3).map(([len,char])=>[char,{prefix,len:parseInt(len)}])));prefixMapNumber={n:{1:"a",2:"b",3:"c",4:"d",5:"e"},N:{1:"A",2:"B",3:"C",4:"D",5:"E"}};decodePrefixMapNumber=Object.fromEntries(Object.entries(prefixMapNumber).flatMap(([prefix,map3])=>Object.entries(map3).map(([len,char])=>[char,{prefix,len:parseInt(len)}])));ARRAY_MARKER="_";OBJECT_MARKER="^";decodeMapConstant={u:void 0,n:null,f:!1,t:!0};SYMBOL_A=Symbol("a");SYMBOL_B=Symbol("b");topologicalSortCache=new Map;_reactiveSourceId=0;delay=(ms,result)=>new Promise(res2=>{setTimeout(()=>{res2(result)},ms)});UNRESOLVED=Symbol("UNRESOLVED");promiseWithResolvers=polyfilledFunc="withResolvers"in Promise?function nativePromiseWithResolvers(){const p2=Promise.withResolvers(),{promise,resolve,reject}=p2;return{promise,resolve,reject}}:function polyfillPromiseWithResolvers(){let resolve,reject;return{promise:new Promise((res2,rej)=>{resolve=res2;reject=rej}),resolve,reject}};promiseWithResolver=polyfilledFunc;noop=()=>{};TIMED_OUT_SIGNAL=Symbol("timed out");serializedMap=new Map;queueCount=new Map;waitingProcessMap=new Map;shareSerializedMap=new Map;skipDuplicatedMap=new Map;Symbol("SKIPPED");Symbol("skipped");GENERIC_COMPATIBILITY_VALUE="x-compatibility-value";GENERIC_COMPATIBILITY_SIGNAL="x-compatibility-signal";globalSlipBoard=new class{constructor(){Object.defineProperty(this,"_clip",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}isAwaiting(type,key3){return this._clip.has(`${String(type)}:${key3}`)}issueAndProceed(type,key3="",opt){this.isAwaiting(type,key3)||fireAndForget(async()=>{try{const ret=await opt.callback();this.submit(type,key3,ret)}catch(ex){opt.submitAsSuccess?this.submit(type,key3,opt.transformError?opt.transformError(ex):ex):opt.dropSlipWithRisks?this._clip.delete(type):this.reject(type,key3,ex)}});return this.awaitNext(type,key3)}async awaitNext(type,key3="",{timeout,onNotAwaited}={timeout:void 0,onNotAwaited:void 0}){let taskPromise=this._clip.get(`${String(type)}:${key3}`);if(!taskPromise){taskPromise=promiseWithResolvers();taskPromise.promise=taskPromise.promise.then(ret=>ret).finally(()=>{this._clip.delete(`${String(type)}:${key3}`)});this._clip.set(`${String(type)}:${key3}`,taskPromise);onNotAwaited&&fireAndForget(async()=>(await yieldMicrotask(),onNotAwaited()))}if(timeout){const cDelay=cancelableDelay(timeout);return Promise.race([cDelay.promise,taskPromise.promise.then(ret=>ret).finally(()=>cDelay.cancel())])}return await taskPromise.promise}submit(type,key3,data){const taskPromise=this._clip.get(`${String(type)}:${key3}`);taskPromise&&taskPromise.resolve(data)}submitToAll(type,prefix,data){for(const[key3,taskPromise]of this._clip.entries())`${String(key3)}`.startsWith(`${String(type)}:${prefix}`)&&taskPromise.resolve(data)}reject(type,key3="",reason){const taskPromise=this._clip.get(`${String(type)}:${key3}`);taskPromise&&taskPromise.reject(reason)}};tasks=new Map;intervals={};waitingItems=new Set;LRUCache=class{constructor(maxCache,maxCacheLength,forwardOnly=!1){Object.defineProperty(this,"cache",{enumerable:!0,configurable:!0,writable:!0,value:new Map([])});Object.defineProperty(this,"revCache",{enumerable:!0,configurable:!0,writable:!0,value:new Map([])});Object.defineProperty(this,"maxCache",{enumerable:!0,configurable:!0,writable:!0,value:200});Object.defineProperty(this,"maxCachedLength",{enumerable:!0,configurable:!0,writable:!0,value:5e7});Object.defineProperty(this,"cachedLength",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"enableReversed",{enumerable:!0,configurable:!0,writable:!0,value:!0});this.maxCache=maxCache||200;this.maxCachedLength=1e6*(maxCacheLength||1);this.enableReversed=!forwardOnly;Logger(`Cache initialized ${this.maxCache} / ${this.maxCachedLength}`,LOG_LEVEL_VERBOSE)}clear(){this.cache.clear();this.revCache.clear()}has(key3){return this.cache.has(key3)}get(key3){const v2=this.cache.get(key3);if(v2){this.cache.delete(key3);this.cache.set(key3,v2);if(this.enableReversed){this.revCache.delete(v2);this.revCache.set(v2,key3)}}return v2}revGet(value){const key3=this.revCache.get(value);if(key3){this.cache.delete(key3);this.revCache.delete(value);this.cache.set(key3,value);this.revCache.set(value,key3)}return key3}set(key3,value){this.cache.set(key3,value);this.enableReversed&&this.revCache.set(value,key3);this.cachedLength+=`${value}`.length;if(this.cache.size>this.maxCache||this.cachedLength>this.maxCachedLength)for(const[key4,value2]of this.cache){this.cache.delete(key4);this.enableReversed&&this.revCache.delete(value2);this.cachedLength-=`${value2}`.length;if(this.cache.size<=this.maxCache&&this.cachedLength<=this.maxCachedLength)break}}};balanced=(a2,b3,str)=>{const ma=a2 instanceof RegExp?maybeMatch(a2,str):a2,mb=b3 instanceof RegExp?maybeMatch(b3,str):b3,r4=null!==ma&&null!=mb&&range(ma,mb,str);return r4&&{start:r4[0],end:r4[1],pre:str.slice(0,r4[0]),body:str.slice(r4[0]+ma.length,r4[1]),post:str.slice(r4[1]+mb.length)}};maybeMatch=(reg,str)=>{const m3=str.match(reg);return m3?m3[0]:null};range=(a2,b3,str)=>{let begs,beg,left,right,result,ai2=str.indexOf(a2),bi2=str.indexOf(b3,ai2+1),i2=ai2;if(ai2>=0&&bi2>0){if(a2===b3)return[ai2,bi2];begs=[];left=str.length;for(;i2>=0&&!result;){if(i2===ai2){begs.push(i2);ai2=str.indexOf(a2,i2+1)}else if(1===begs.length){const r4=begs.pop();void 0!==r4&&(result=[r4,bi2])}else{beg=begs.pop();if(void 0!==beg&&beg<left){left=beg;right=bi2}bi2=str.indexOf(b3,i2+1)}i2=ai2<bi2&&ai2>=0?ai2:bi2}begs.length&&void 0!==right&&(result=[left,right])}return result};escSlash="\0SLASH"+Math.random()+"\0";escOpen="\0OPEN"+Math.random()+"\0";escClose="\0CLOSE"+Math.random()+"\0";escComma="\0COMMA"+Math.random()+"\0";escPeriod="\0PERIOD"+Math.random()+"\0";escSlashPattern=new RegExp(escSlash,"g");escOpenPattern=new RegExp(escOpen,"g");escClosePattern=new RegExp(escClose,"g");escCommaPattern=new RegExp(escComma,"g");escPeriodPattern=new RegExp(escPeriod,"g");slashPattern=/\\\\/g;openPattern=/\\{/g;closePattern=/\\}/g;commaPattern=/\\,/g;periodPattern=/\\\./g;EXPANSION_MAX=1e5;assertValidPattern=pattern=>{if("string"!=typeof pattern)throw new TypeError("invalid pattern");if(pattern.length>65536)throw new TypeError("pattern is too long")};posixClasses={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]};braceEscape=s2=>s2.replace(/[[\]\\-]/g,"\\$&");regexpEscape=s2=>s2.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");rangesToString=ranges=>ranges.join("");parseClass=(glob,position)=>{const pos=position;if("["!==glob.charAt(pos))throw new Error("not in a brace expression");const ranges=[],negs=[];let i2=pos+1,sawStart=!1,uflag=!1,escaping=!1,negate3=!1,endPos=pos,rangeStart="";WHILE:for(;i2<glob.length;){const c3=glob.charAt(i2);if("!"!==c3&&"^"!==c3||i2!==pos+1){if("]"===c3&&sawStart&&!escaping){endPos=i2+1;break}sawStart=!0;if("\\"!==c3||escaping){if("["===c3&&!escaping)for(const[cls,[unip,u2,neg]]of Object.entries(posixClasses))if(glob.startsWith(cls,i2)){if(rangeStart)return["$.",!1,glob.length-pos,!0];i2+=cls.length;neg?negs.push(unip):ranges.push(unip);uflag=uflag||u2;continue WHILE}escaping=!1;if(rangeStart){c3>rangeStart?ranges.push(braceEscape(rangeStart)+"-"+braceEscape(c3)):c3===rangeStart&&ranges.push(braceEscape(c3));rangeStart="";i2++}else if(glob.startsWith("-]",i2+1)){ranges.push(braceEscape(c3+"-"));i2+=2}else if(glob.startsWith("-",i2+1)){rangeStart=c3;i2+=2}else{ranges.push(braceEscape(c3));i2++}}else{escaping=!0;i2++}}else{negate3=!0;i2++}}if(endPos<i2)return["",!1,0,!1];if(!ranges.length&&!negs.length)return["$.",!1,glob.length-pos,!0];if(0===negs.length&&1===ranges.length&&/^\\?.$/.test(ranges[0])&&!negate3){const r4=2===ranges[0].length?ranges[0].slice(-1):ranges[0];return[regexpEscape(r4),!1,endPos-pos,!1]}const sranges="["+(negate3?"^":"")+rangesToString(ranges)+"]",snegs="["+(negate3?"":"^")+rangesToString(negs)+"]";return[ranges.length&&negs.length?"("+sranges+"|"+snegs+")":ranges.length?sranges:snegs,uflag,endPos-pos,!0]};unescape2=(s2,{windowsPathsNoEscape=!1,magicalBraces=!0}={})=>magicalBraces?windowsPathsNoEscape?s2.replace(/\[([^/\\])\]/g,"$1"):s2.replace(/((?!\\).|^)\[([^/\\])\]/g,"$1$2").replace(/\\([^/])/g,"$1"):windowsPathsNoEscape?s2.replace(/\[([^/\\{}])\]/g,"$1"):s2.replace(/((?!\\).|^)\[([^/\\{}])\]/g,"$1$2").replace(/\\([^/{}])/g,"$1");types=new Set(["!","?","+","*","@"]);isExtglobType=c3=>types.has(c3);isExtglobAST=c3=>isExtglobType(c3.type);adoptionMap=new Map([["!",["@"]],["?",["?","@"]],["@",["@"]],["*",["*","+","?","@"]],["+",["+","@"]]]);adoptionWithSpaceMap=new Map([["!",["?"]],["@",["?"]],["+",["?","*"]]]);adoptionAnyMap=new Map([["!",["?","@"]],["?",["?","@"]],["@",["?","@"]],["*",["*","+","?","@"]],["+",["+","@","?","*"]]]);usurpMap=new Map([["!",new Map([["!","@"]])],["?",new Map([["*","*"],["+","*"]])],["@",new Map([["!","!"],["?","?"],["@","@"],["*","*"],["+","+"]])],["+",new Map([["?","*"],["*","*"]])]]);addPatternStart=new Set(["[","."]);justDots=new Set(["..","."]);reSpecials=new Set("().*{}+?[]^$\\!");regExpEscape=s2=>s2.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");ID=0;AST=class{constructor(type,parent,options={}){__privateAdd(this,_AST_instances);__publicField(this,"type");__privateAdd(this,_root);__privateAdd(this,_hasMagic);__privateAdd(this,_uflag,!1);__privateAdd(this,_parts,[]);__privateAdd(this,_parent);__privateAdd(this,_parentIndex);__privateAdd(this,_negs);__privateAdd(this,_filledNegs,!1);__privateAdd(this,_options);__privateAdd(this,_toString);__privateAdd(this,_emptyExt,!1);__publicField(this,"id",++ID);this.type=type;type&&__privateSet(this,_hasMagic,!0);__privateSet(this,_parent,parent);__privateSet(this,_root,__privateGet(this,_parent)?__privateGet(__privateGet(this,_parent),_root):this);__privateSet(this,_options,__privateGet(this,_root)===this?options:__privateGet(__privateGet(this,_root),_options));__privateSet(this,_negs,__privateGet(this,_root)===this?[]:__privateGet(__privateGet(this,_root),_negs));"!"!==type||__privateGet(__privateGet(this,_root),_filledNegs)||__privateGet(this,_negs).push(this);__privateSet(this,_parentIndex,__privateGet(this,_parent)?__privateGet(__privateGet(this,_parent),_parts).length:0)}get depth(){var _a8,_b5;return(null!=(_b5=null==(_a8=__privateGet(this,_parent))?void 0:_a8.depth)?_b5:-1)+1}[Symbol.for("nodejs.util.inspect.custom")](){var _a8;return{"@@type":"AST",id:this.id,type:this.type,root:__privateGet(this,_root).id,parent:null==(_a8=__privateGet(this,_parent))?void 0:_a8.id,depth:this.depth,partsLength:__privateGet(this,_parts).length,parts:__privateGet(this,_parts)}}get hasMagic(){if(void 0!==__privateGet(this,_hasMagic))return __privateGet(this,_hasMagic);for(const p2 of __privateGet(this,_parts))if("string"!=typeof p2&&(p2.type||p2.hasMagic))return __privateSet(this,_hasMagic,!0);return __privateGet(this,_hasMagic)}toString(){return void 0!==__privateGet(this,_toString)?__privateGet(this,_toString):this.type?__privateSet(this,_toString,this.type+"("+__privateGet(this,_parts).map(p2=>String(p2)).join("|")+")"):__privateSet(this,_toString,__privateGet(this,_parts).map(p2=>String(p2)).join(""))}push(...parts){for(const p2 of parts)if(""!==p2){if("string"!=typeof p2&&!(p2 instanceof _a2&&__privateGet(p2,_parent)===this))throw new Error("invalid part: "+p2);__privateGet(this,_parts).push(p2)}}toJSON(){var _a8;const ret=null===this.type?__privateGet(this,_parts).slice().map(p2=>"string"==typeof p2?p2:p2.toJSON()):[this.type,...__privateGet(this,_parts).map(p2=>p2.toJSON())];this.isStart()&&!this.type&&ret.unshift([]);this.isEnd()&&(this===__privateGet(this,_root)||__privateGet(__privateGet(this,_root),_filledNegs)&&"!"===(null==(_a8=__privateGet(this,_parent))?void 0:_a8.type))&&ret.push({});return ret}isStart(){var _a8;if(__privateGet(this,_root)===this)return!0;if(!(null==(_a8=__privateGet(this,_parent))?void 0:_a8.isStart()))return!1;if(0===__privateGet(this,_parentIndex))return!0;const p2=__privateGet(this,_parent);for(let i2=0;i2<__privateGet(this,_parentIndex);i2++){const pp=__privateGet(p2,_parts)[i2];if(!(pp instanceof _a2&&"!"===pp.type))return!1}return!0}isEnd(){var _a8,_b5,_c3;if(__privateGet(this,_root)===this)return!0;if("!"===(null==(_a8=__privateGet(this,_parent))?void 0:_a8.type))return!0;if(!(null==(_b5=__privateGet(this,_parent))?void 0:_b5.isEnd()))return!1;if(!this.type)return null==(_c3=__privateGet(this,_parent))?void 0:_c3.isEnd();const pl=__privateGet(this,_parent)?__privateGet(__privateGet(this,_parent),_parts).length:0;return __privateGet(this,_parentIndex)===pl-1}copyIn(part){"string"==typeof part?this.push(part):this.push(part.clone(this))}clone(parent){const c3=new _a2(this.type,parent);for(const p2 of __privateGet(this,_parts))c3.copyIn(p2);return c3}static fromGlob(pattern,options={}){var _a8;const ast=new _a2(null,void 0,options);__privateMethod(_a8=_a2,_AST_static,parseAST_fn).call(_a8,pattern,ast,0,options,0);return ast}toMMPattern(){if(this!==__privateGet(this,_root))return __privateGet(this,_root).toMMPattern();const glob=this.toString(),[re,body,hasMagic,uflag]=this.toRegExpSource();if(!(hasMagic||__privateGet(this,_hasMagic)||__privateGet(this,_options).nocase&&!__privateGet(this,_options).nocaseMagicOnly&&glob.toUpperCase()!==glob.toLowerCase()))return body;const flags2=(__privateGet(this,_options).nocase?"i":"")+(uflag?"u":"");return Object.assign(new RegExp(`^${re}$`,flags2),{_src:re,_glob:glob})}get options(){return __privateGet(this,_options)}toRegExpSource(allowDot){var _a8;const dot=null!=allowDot?allowDot:!!__privateGet(this,_options).dot;if(__privateGet(this,_root)===this){__privateMethod(this,_AST_instances,flatten_fn).call(this);__privateMethod(this,_AST_instances,fillNegs_fn).call(this)}if(!isExtglobAST(this)){const noEmpty=this.isStart()&&this.isEnd()&&!__privateGet(this,_parts).some(s2=>"string"!=typeof s2),src=__privateGet(this,_parts).map(p2=>{var _a9;const[re,_,hasMagic,uflag]="string"==typeof p2?__privateMethod(_a9=_a2,_AST_static,parseGlob_fn).call(_a9,p2,__privateGet(this,_hasMagic),noEmpty):p2.toRegExpSource(allowDot);__privateSet(this,_hasMagic,__privateGet(this,_hasMagic)||hasMagic);__privateSet(this,_uflag,__privateGet(this,_uflag)||uflag);return re}).join("");let start2="";if(this.isStart()&&"string"==typeof __privateGet(this,_parts)[0]&&(1!==__privateGet(this,_parts).length||!justDots.has(__privateGet(this,_parts)[0]))){const aps=addPatternStart,needNoTrav=dot&&aps.has(src.charAt(0))||src.startsWith("\\.")&&aps.has(src.charAt(2))||src.startsWith("\\.\\.")&&aps.has(src.charAt(4)),needNoDot=!dot&&!allowDot&&aps.has(src.charAt(0));start2=needNoTrav?"(?!(?:^|/)\\.\\.?(?:$|/))":needNoDot?"(?!\\.)":""}let end="";this.isEnd()&&__privateGet(__privateGet(this,_root),_filledNegs)&&"!"===(null==(_a8=__privateGet(this,_parent))?void 0:_a8.type)&&(end="(?:$|\\/)");return[start2+src+end,unescape2(src),__privateSet(this,_hasMagic,!!__privateGet(this,_hasMagic)),__privateGet(this,_uflag)]}const repeated="*"===this.type||"+"===this.type,start="!"===this.type?"(?:(?!(?:":"(?:";let body=__privateMethod(this,_AST_instances,partsToRegExp_fn).call(this,dot);if(this.isStart()&&this.isEnd()&&!body&&"!"!==this.type){const s2=this.toString(),me=this;__privateSet(me,_parts,[s2]);me.type=null;__privateSet(me,_hasMagic,void 0);return[s2,unescape2(this.toString()),!1,!1]}let bodyDotAllowed=!repeated||allowDot||dot?"":__privateMethod(this,_AST_instances,partsToRegExp_fn).call(this,!0);bodyDotAllowed===body&&(bodyDotAllowed="");bodyDotAllowed&&(body=`(?:${body})(?:${bodyDotAllowed})*?`);let final="";final="!"===this.type&&__privateGet(this,_emptyExt)?(this.isStart()&&!dot?"(?!\\.)":"")+"[^/]+?":start+body+("!"===this.type?"))"+(!this.isStart()||dot||allowDot?"":"(?!\\.)")+"[^/]*?)":"@"===this.type?")":"?"===this.type?")?":"+"===this.type&&bodyDotAllowed?")":"*"===this.type&&bodyDotAllowed?")?":`)${this.type}`);return[final,unescape2(body),__privateSet(this,_hasMagic,!!__privateGet(this,_hasMagic)),__privateGet(this,_uflag)]}};_root=new WeakMap;_hasMagic=new WeakMap;_uflag=new WeakMap;_parts=new WeakMap;_parent=new WeakMap;_parentIndex=new WeakMap;_negs=new WeakMap;_filledNegs=new WeakMap;_options=new WeakMap;_toString=new WeakMap;_emptyExt=new WeakMap;_AST_instances=new WeakSet;fillNegs_fn=function(){if(this!==__privateGet(this,_root))throw new Error("should only call on root");if(__privateGet(this,_filledNegs))return this;this.toString();__privateSet(this,_filledNegs,!0);let n3;for(;n3=__privateGet(this,_negs).pop();){if("!"!==n3.type)continue;let p2=n3,pp=__privateGet(p2,_parent);for(;pp;){for(let i2=__privateGet(p2,_parentIndex)+1;!pp.type&&i2<__privateGet(pp,_parts).length;i2++)for(const part of __privateGet(n3,_parts)){if("string"==typeof part)throw new Error("string part in extglob AST??");part.copyIn(__privateGet(pp,_parts)[i2])}p2=pp;pp=__privateGet(p2,_parent)}}return this};_AST_static=new WeakSet;parseAST_fn=function(str,ast,pos,opt,extDepth){var _a8,_b5,_c3,_d2,_e2;const maxDepth=null!=(_a8=opt.maxExtglobRecursion)?_a8:2;let escaping=!1,inBrace=!1,braceStart=-1,braceNeg=!1;if(null===ast.type){let i3=pos,acc2="";for(;i3<str.length;){const c3=str.charAt(i3++);if(escaping||"\\"===c3){escaping=!escaping;acc2+=c3}else if(inBrace){i3===braceStart+1?"^"!==c3&&"!"!==c3||(braceNeg=!0):"]"!==c3||i3===braceStart+2&&braceNeg||(inBrace=!1);acc2+=c3}else if("["!==c3){if(!opt.noext&&isExtglobType(c3)&&"("===str.charAt(i3)&&extDepth<=maxDepth){ast.push(acc2);acc2="";const ext2=new _a2(c3,ast);i3=__privateMethod(_b5=_a2,_AST_static,parseAST_fn).call(_b5,str,ext2,i3,opt,extDepth+1);ast.push(ext2);continue}acc2+=c3}else{inBrace=!0;braceStart=i3;braceNeg=!1;acc2+=c3}}ast.push(acc2);return i3}let i2=pos+1,part=new _a2(null,ast);const parts=[];let acc="";for(;i2<str.length;){const c3=str.charAt(i2++);if(escaping||"\\"===c3){escaping=!escaping;acc+=c3}else if(inBrace){i2===braceStart+1?"^"!==c3&&"!"!==c3||(braceNeg=!0):"]"!==c3||i2===braceStart+2&&braceNeg||(inBrace=!1);acc+=c3}else if("["!==c3){if(!opt.noext&&isExtglobType(c3)&&"("===str.charAt(i2)&&(extDepth<=maxDepth||ast&&__privateMethod(_c3=ast,_AST_instances,canAdoptType_fn).call(_c3,c3))){const depthAdd=ast&&__privateMethod(_d2=ast,_AST_instances,canAdoptType_fn).call(_d2,c3)?0:1;part.push(acc);acc="";const ext2=new _a2(c3,part);part.push(ext2);i2=__privateMethod(_e2=_a2,_AST_static,parseAST_fn).call(_e2,str,ext2,i2,opt,extDepth+depthAdd);continue}if("|"!==c3){if(")"===c3){""===acc&&0===__privateGet(ast,_parts).length&&__privateSet(ast,_emptyExt,!0);part.push(acc);acc="";ast.push(...parts,part);return i2}acc+=c3}else{part.push(acc);acc="";parts.push(part);part=new _a2(null,ast)}}else{inBrace=!0;braceStart=i2;braceNeg=!1;acc+=c3}}ast.type=null;__privateSet(ast,_hasMagic,void 0);__privateSet(ast,_parts,[str.substring(pos-1)]);return i2};canAdoptWithSpace_fn=function(child2){return __privateMethod(this,_AST_instances,canAdopt_fn).call(this,child2,adoptionWithSpaceMap)};canAdopt_fn=function(child2,map3=adoptionMap){if(!child2||"object"!=typeof child2||null!==child2.type||1!==__privateGet(child2,_parts).length||null===this.type)return!1;const gc=__privateGet(child2,_parts)[0];return!(!gc||"object"!=typeof gc||null===gc.type)&&__privateMethod(this,_AST_instances,canAdoptType_fn).call(this,gc.type,map3)};canAdoptType_fn=function(c3,map3=adoptionAnyMap){var _a8;return!!(null==(_a8=map3.get(this.type))?void 0:_a8.includes(c3))};adoptWithSpace_fn=function(child2,index6){const gc=__privateGet(child2,_parts)[0],blank=new _a2(null,gc,this.options);__privateGet(blank,_parts).push("");gc.push(blank);__privateMethod(this,_AST_instances,adopt_fn).call(this,child2,index6)};adopt_fn=function(child2,index6){const gc=__privateGet(child2,_parts)[0];__privateGet(this,_parts).splice(index6,1,...__privateGet(gc,_parts));for(const p2 of __privateGet(gc,_parts))"object"==typeof p2&&__privateSet(p2,_parent,this);__privateSet(this,_toString,void 0)};canUsurpType_fn=function(c3){const m3=usurpMap.get(this.type);return!!(null==m3?void 0:m3.has(c3))};canUsurp_fn=function(child2){if(!child2||"object"!=typeof child2||null!==child2.type||1!==__privateGet(child2,_parts).length||null===this.type||1!==__privateGet(this,_parts).length)return!1;const gc=__privateGet(child2,_parts)[0];return!(!gc||"object"!=typeof gc||null===gc.type)&&__privateMethod(this,_AST_instances,canUsurpType_fn).call(this,gc.type)};usurp_fn=function(child2){const m3=usurpMap.get(this.type),gc=__privateGet(child2,_parts)[0],nt=null==m3?void 0:m3.get(gc.type);if(!nt)return!1;__privateSet(this,_parts,__privateGet(gc,_parts));for(const p2 of __privateGet(this,_parts))"object"==typeof p2&&__privateSet(p2,_parent,this);this.type=nt;__privateSet(this,_toString,void 0);__privateSet(this,_emptyExt,!1)};flatten_fn=function(){var _a8,_b5;if(isExtglobAST(this)){let iterations=0,done=!1;do{done=!0;for(let i2=0;i2<__privateGet(this,_parts).length;i2++){const c3=__privateGet(this,_parts)[i2];if("object"==typeof c3){__privateMethod(_b5=c3,_AST_instances,flatten_fn).call(_b5);if(__privateMethod(this,_AST_instances,canAdopt_fn).call(this,c3)){done=!1;__privateMethod(this,_AST_instances,adopt_fn).call(this,c3,i2)}else if(__privateMethod(this,_AST_instances,canAdoptWithSpace_fn).call(this,c3)){done=!1;__privateMethod(this,_AST_instances,adoptWithSpace_fn).call(this,c3,i2)}else if(__privateMethod(this,_AST_instances,canUsurp_fn).call(this,c3)){done=!1;__privateMethod(this,_AST_instances,usurp_fn).call(this,c3)}}}}while(!done&&++iterations<10)}else for(const p2 of __privateGet(this,_parts))"object"==typeof p2&&__privateMethod(_a8=p2,_AST_instances,flatten_fn).call(_a8);__privateSet(this,_toString,void 0)};partsToRegExp_fn=function(dot){return __privateGet(this,_parts).map(p2=>{if("string"==typeof p2)throw new Error("string type in extglob ast??");const[re,_,_hasMagic2,uflag]=p2.toRegExpSource(dot);__privateSet(this,_uflag,__privateGet(this,_uflag)||uflag);return re}).filter(p2=>!(this.isStart()&&this.isEnd()&&!p2)).join("|")};parseGlob_fn=function(glob,hasMagic,noEmpty=!1){let escaping=!1,re="",uflag=!1,inStar=!1;for(let i2=0;i2<glob.length;i2++){const c3=glob.charAt(i2);if(escaping){escaping=!1;re+=(reSpecials.has(c3)?"\\":"")+c3}else if("*"!==c3){inStar=!1;if("\\"!==c3){if("["===c3){const[src,needUflag,consumed,magic]=parseClass(glob,i2);if(consumed){re+=src;uflag=uflag||needUflag;i2+=consumed-1;hasMagic=hasMagic||magic;continue}}if("?"!==c3)re+=regExpEscape(c3);else{re+="[^/]";hasMagic=!0}}else i2===glob.length-1?re+="\\\\":escaping=!0}else{if(inStar)continue;inStar=!0;re+=noEmpty&&/^[*]+$/.test(glob)?"[^/]+?":"[^/]*?";hasMagic=!0}}return[re,unescape2(glob),!!hasMagic,uflag]};__privateAdd(AST,_AST_static);_a2=AST;escape=(s2,{windowsPathsNoEscape=!1,magicalBraces=!1}={})=>magicalBraces?windowsPathsNoEscape?s2.replace(/[?*()[\]{}]/g,"[$&]"):s2.replace(/[?*()[\]\\{}]/g,"\\$&"):windowsPathsNoEscape?s2.replace(/[?*()[\]]/g,"[$&]"):s2.replace(/[?*()[\]\\]/g,"\\$&");minimatch=(p2,pattern,options={})=>{assertValidPattern(pattern);return!(!options.nocomment&&"#"===pattern.charAt(0))&&new Minimatch(pattern,options).match(p2)};starDotExtRE=/^\*+([^+@!?*[(]*)$/;starDotExtTest=ext2=>f4=>!f4.startsWith(".")&&f4.endsWith(ext2);starDotExtTestDot=ext2=>f4=>f4.endsWith(ext2);starDotExtTestNocase=ext2=>{ext2=ext2.toLowerCase();return f4=>!f4.startsWith(".")&&f4.toLowerCase().endsWith(ext2)};starDotExtTestNocaseDot=ext2=>{ext2=ext2.toLowerCase();return f4=>f4.toLowerCase().endsWith(ext2)};starDotStarRE=/^\*+\.\*+$/;starDotStarTest=f4=>!f4.startsWith(".")&&f4.includes(".");starDotStarTestDot=f4=>"."!==f4&&".."!==f4&&f4.includes(".");dotStarRE=/^\.\*+$/;dotStarTest=f4=>"."!==f4&&".."!==f4&&f4.startsWith(".");starRE=/^\*+$/;starTest=f4=>0!==f4.length&&!f4.startsWith(".");starTestDot=f4=>0!==f4.length&&"."!==f4&&".."!==f4;qmarksRE=/^\?+([^+@!?*[(]*)?$/;qmarksTestNocase=([$0,ext2=""])=>{const noext=qmarksTestNoExt([$0]);if(!ext2)return noext;ext2=ext2.toLowerCase();return f4=>noext(f4)&&f4.toLowerCase().endsWith(ext2)};qmarksTestNocaseDot=([$0,ext2=""])=>{const noext=qmarksTestNoExtDot([$0]);if(!ext2)return noext;ext2=ext2.toLowerCase();return f4=>noext(f4)&&f4.toLowerCase().endsWith(ext2)};qmarksTestDot=([$0,ext2=""])=>{const noext=qmarksTestNoExtDot([$0]);return ext2?f4=>noext(f4)&&f4.endsWith(ext2):noext};qmarksTest=([$0,ext2=""])=>{const noext=qmarksTestNoExt([$0]);return ext2?f4=>noext(f4)&&f4.endsWith(ext2):noext};qmarksTestNoExt=([$0])=>{const len=$0.length;return f4=>f4.length===len&&!f4.startsWith(".")};qmarksTestNoExtDot=([$0])=>{const len=$0.length;return f4=>f4.length===len&&"."!==f4&&".."!==f4};path_posix={sep:"/"};sep="win32"===(defaultPlatform="object"==typeof process&&process?"object"==typeof process.env&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix")?"\\":path_posix.sep;minimatch.sep=sep;GLOBSTAR=Symbol("globstar **");minimatch.GLOBSTAR=GLOBSTAR;filter=(pattern,options={})=>p2=>minimatch(p2,pattern,options);minimatch.filter=filter;ext=(a2,b3={})=>Object.assign({},a2,b3);defaults=def=>{if(!def||"object"!=typeof def||!Object.keys(def).length)return minimatch;const orig=minimatch;return Object.assign((p2,pattern,options={})=>orig(p2,pattern,ext(def,options)),{Minimatch:class Minimatch extends orig.Minimatch{constructor(pattern,options={}){super(pattern,ext(def,options))}static defaults(options){return orig.defaults(ext(def,options)).Minimatch}},AST:class AST extends orig.AST{constructor(type,parent,options={}){super(type,parent,ext(def,options))}static fromGlob(pattern,options={}){return orig.AST.fromGlob(pattern,ext(def,options))}},unescape:(s2,options={})=>orig.unescape(s2,ext(def,options)),escape:(s2,options={})=>orig.escape(s2,ext(def,options)),filter:(pattern,options={})=>orig.filter(pattern,ext(def,options)),defaults:options=>orig.defaults(ext(def,options)),makeRe:(pattern,options={})=>orig.makeRe(pattern,ext(def,options)),braceExpand:(pattern,options={})=>orig.braceExpand(pattern,ext(def,options)),match:(list,pattern,options={})=>orig.match(list,pattern,ext(def,options)),sep:orig.sep,GLOBSTAR})};minimatch.defaults=defaults;braceExpand=(pattern,options={})=>{assertValidPattern(pattern);return options.nobrace||!/\{(?:(?!\{).)*\}/.test(pattern)?[pattern]:expand(pattern,{max:options.braceExpandMax})};minimatch.braceExpand=braceExpand;makeRe=(pattern,options={})=>new Minimatch(pattern,options).makeRe();minimatch.makeRe=makeRe;match=(list,pattern,options={})=>{const mm=new Minimatch(pattern,options);list=list.filter(f4=>mm.match(f4));mm.options.nonull&&!list.length&&list.push(pattern);return list};minimatch.match=match;globMagic=/[?*]|[+@!]\(.*?\)|\[|\]/;regExpEscape2=s2=>s2.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");Minimatch=class{constructor(pattern,options={}){__privateAdd(this,_Minimatch_instances);__publicField(this,"options");__publicField(this,"set");__publicField(this,"pattern");__publicField(this,"windowsPathsNoEscape");__publicField(this,"nonegate");__publicField(this,"negate");__publicField(this,"comment");__publicField(this,"empty");__publicField(this,"preserveMultipleSlashes");__publicField(this,"partial");__publicField(this,"globSet");__publicField(this,"globParts");__publicField(this,"nocase");__publicField(this,"isWindows");__publicField(this,"platform");__publicField(this,"windowsNoMagicRoot");__publicField(this,"maxGlobstarRecursion");__publicField(this,"regexp");var _a8;assertValidPattern(pattern);options=options||{};this.options=options;this.maxGlobstarRecursion=null!=(_a8=options.maxGlobstarRecursion)?_a8:200;this.pattern=pattern;this.platform=options.platform||defaultPlatform;this.isWindows="win32"===this.platform;this.windowsPathsNoEscape=!!options.windowsPathsNoEscape||!1===options.allowWindowsEscape;this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/"));this.preserveMultipleSlashes=!!options.preserveMultipleSlashes;this.regexp=null;this.negate=!1;this.nonegate=!!options.nonegate;this.comment=!1;this.empty=!1;this.partial=!!options.partial;this.nocase=!!this.options.nocase;this.windowsNoMagicRoot=void 0!==options.windowsNoMagicRoot?options.windowsNoMagicRoot:!(!this.isWindows||!this.nocase);this.globSet=[];this.globParts=[];this.set=[];this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(const pattern of this.set)for(const part of pattern)if("string"!=typeof part)return!0;return!1}debug(..._){}make(){const pattern=this.pattern,options=this.options;if(!options.nocomment&&"#"===pattern.charAt(0)){this.comment=!0;return}if(!pattern){this.empty=!0;return}this.parseNegate();this.globSet=[...new Set(this.braceExpand())];options.debug&&(this.debug=(...args)=>console.error(...args));this.debug(this.pattern,this.globSet);const rawGlobParts=this.globSet.map(s2=>this.slashSplit(s2));this.globParts=this.preprocess(rawGlobParts);this.debug(this.pattern,this.globParts);let set2=this.globParts.map((s2,_,__)=>{if(this.isWindows&&this.windowsNoMagicRoot){const isUNC=!(""!==s2[0]||""!==s2[1]||"?"!==s2[2]&&globMagic.test(s2[2])||globMagic.test(s2[3])),isDrive=/^[a-z]:/i.test(s2[0]);if(isUNC)return[...s2.slice(0,4),...s2.slice(4).map(ss=>this.parse(ss))];if(isDrive)return[s2[0],...s2.slice(1).map(ss=>this.parse(ss))]}return s2.map(ss=>this.parse(ss))});this.debug(this.pattern,set2);this.set=set2.filter(s2=>-1===s2.indexOf(!1));if(this.isWindows)for(let i2=0;i2<this.set.length;i2++){const p2=this.set[i2];""===p2[0]&&""===p2[1]&&"?"===this.globParts[i2][2]&&"string"==typeof p2[3]&&/^[a-z]:$/i.test(p2[3])&&(p2[2]="?")}this.debug(this.pattern,this.set)}preprocess(globParts){if(this.options.noglobstar)for(const partset of globParts)for(let j2=0;j2<partset.length;j2++)"**"===partset[j2]&&(partset[j2]="*");const{optimizationLevel=1}=this.options;if(optimizationLevel>=2){globParts=this.firstPhasePreProcess(globParts);globParts=this.secondPhasePreProcess(globParts)}else globParts=optimizationLevel>=1?this.levelOneOptimize(globParts):this.adjascentGlobstarOptimize(globParts);return globParts}adjascentGlobstarOptimize(globParts){return globParts.map(parts=>{let gs=-1;for(;-1!==(gs=parts.indexOf("**",gs+1));){let i2=gs;for(;"**"===parts[i2+1];)i2++;i2!==gs&&parts.splice(gs,i2-gs)}return parts})}levelOneOptimize(globParts){return globParts.map(parts=>0===(parts=parts.reduce((set2,part)=>{const prev=set2[set2.length-1];if("**"===part&&"**"===prev)return set2;if(".."===part&&prev&&".."!==prev&&"."!==prev&&"**"!==prev){set2.pop();return set2}set2.push(part);return set2},[])).length?[""]:parts)}levelTwoFileOptimize(parts){Array.isArray(parts)||(parts=this.slashSplit(parts));let didSomething=!1;do{didSomething=!1;if(!this.preserveMultipleSlashes){for(let i2=1;i2<parts.length-1;i2++){const p2=parts[i2];if(!(1===i2&&""===p2&&""===parts[0]||"."!==p2&&""!==p2)){didSomething=!0;parts.splice(i2,1);i2--}}if("."===parts[0]&&2===parts.length&&("."===parts[1]||""===parts[1])){didSomething=!0;parts.pop()}}let dd=0;for(;-1!==(dd=parts.indexOf("..",dd+1));){const p2=parts[dd-1];if(p2&&"."!==p2&&".."!==p2&&"**"!==p2&&(!this.isWindows||!/^[a-z]:$/i.test(p2))){didSomething=!0;parts.splice(dd-1,2);dd-=2}}}while(didSomething);return 0===parts.length?[""]:parts}firstPhasePreProcess(globParts){let didSomething=!1;do{didSomething=!1;for(let parts of globParts){let gs=-1;for(;-1!==(gs=parts.indexOf("**",gs+1));){let gss=gs;for(;"**"===parts[gss+1];)gss++;gss>gs&&parts.splice(gs+1,gss-gs);let next2=parts[gs+1];const p2=parts[gs+2],p22=parts[gs+3];if(".."!==next2)continue;if(!p2||"."===p2||".."===p2||!p22||"."===p22||".."===p22)continue;didSomething=!0;parts.splice(gs,1);const other=parts.slice(0);other[gs]="**";globParts.push(other);gs--}if(!this.preserveMultipleSlashes){for(let i2=1;i2<parts.length-1;i2++){const p2=parts[i2];if(!(1===i2&&""===p2&&""===parts[0]||"."!==p2&&""!==p2)){didSomething=!0;parts.splice(i2,1);i2--}}if("."===parts[0]&&2===parts.length&&("."===parts[1]||""===parts[1])){didSomething=!0;parts.pop()}}let dd=0;for(;-1!==(dd=parts.indexOf("..",dd+1));){const p2=parts[dd-1];if(p2&&"."!==p2&&".."!==p2&&"**"!==p2){didSomething=!0;const splin=1===dd&&"**"===parts[dd+1]?["."]:[];parts.splice(dd-1,2,...splin);0===parts.length&&parts.push("");dd-=2}}}}while(didSomething);return globParts}secondPhasePreProcess(globParts){for(let i2=0;i2<globParts.length-1;i2++)for(let j2=i2+1;j2<globParts.length;j2++){const matched=this.partsMatch(globParts[i2],globParts[j2],!this.preserveMultipleSlashes);if(matched){globParts[i2]=[];globParts[j2]=matched;break}}return globParts.filter(gs=>gs.length)}partsMatch(a2,b3,emptyGSMatch=!1){let ai2=0,bi2=0,result=[],which="";for(;ai2<a2.length&&bi2<b3.length;)if(a2[ai2]===b3[bi2]){result.push("b"===which?b3[bi2]:a2[ai2]);ai2++;bi2++}else if(emptyGSMatch&&"**"===a2[ai2]&&b3[bi2]===a2[ai2+1]){result.push(a2[ai2]);ai2++}else if(emptyGSMatch&&"**"===b3[bi2]&&a2[ai2]===b3[bi2+1]){result.push(b3[bi2]);bi2++}else if("*"!==a2[ai2]||!b3[bi2]||!this.options.dot&&b3[bi2].startsWith(".")||"**"===b3[bi2]){if("*"!==b3[bi2]||!a2[ai2]||!this.options.dot&&a2[ai2].startsWith(".")||"**"===a2[ai2])return!1;if("a"===which)return!1;which="b";result.push(b3[bi2]);ai2++;bi2++}else{if("b"===which)return!1;which="a";result.push(a2[ai2]);ai2++;bi2++}return a2.length===b3.length&&result}parseNegate(){if(this.nonegate)return;const pattern=this.pattern;let negate3=!1,negateOffset=0;for(let i2=0;i2<pattern.length&&"!"===pattern.charAt(i2);i2++){negate3=!negate3;negateOffset++}negateOffset&&(this.pattern=pattern.slice(negateOffset));this.negate=negate3}matchOne(file,pattern,partial=!1){let fileStartIndex=0,patternStartIndex=0;if(this.isWindows){const fileDrive="string"==typeof file[0]&&/^[a-z]:$/i.test(file[0]),fileUNC=!fileDrive&&""===file[0]&&""===file[1]&&"?"===file[2]&&/^[a-z]:$/i.test(file[3]),patternDrive="string"==typeof pattern[0]&&/^[a-z]:$/i.test(pattern[0]),fdi=fileUNC?3:fileDrive?0:void 0,pdi=!patternDrive&&""===pattern[0]&&""===pattern[1]&&"?"===pattern[2]&&"string"==typeof pattern[3]&&/^[a-z]:$/i.test(pattern[3])?3:patternDrive?0:void 0;if("number"==typeof fdi&&"number"==typeof pdi){const[fd2,pd]=[file[fdi],pattern[pdi]];if(fd2.toLowerCase()===pd.toLowerCase()){pattern[pdi]=fd2;patternStartIndex=pdi;fileStartIndex=fdi}}}const{optimizationLevel=1}=this.options;optimizationLevel>=2&&(file=this.levelTwoFileOptimize(file));return pattern.includes(GLOBSTAR)?__privateMethod(this,_Minimatch_instances,matchGlobstar_fn).call(this,file,pattern,partial,fileStartIndex,patternStartIndex):__privateMethod(this,_Minimatch_instances,matchOne_fn).call(this,file,pattern,partial,fileStartIndex,patternStartIndex)}braceExpand(){return braceExpand(this.pattern,this.options)}parse(pattern){assertValidPattern(pattern);const options=this.options;if("**"===pattern)return GLOBSTAR;if(""===pattern)return"";let m3,fastTest=null;(m3=pattern.match(starRE))?fastTest=options.dot?starTestDot:starTest:(m3=pattern.match(starDotExtRE))?fastTest=(options.nocase?options.dot?starDotExtTestNocaseDot:starDotExtTestNocase:options.dot?starDotExtTestDot:starDotExtTest)(m3[1]):(m3=pattern.match(qmarksRE))?fastTest=(options.nocase?options.dot?qmarksTestNocaseDot:qmarksTestNocase:options.dot?qmarksTestDot:qmarksTest)(m3):(m3=pattern.match(starDotStarRE))?fastTest=options.dot?starDotStarTestDot:starDotStarTest:(m3=pattern.match(dotStarRE))&&(fastTest=dotStarTest);const re=AST.fromGlob(pattern,this.options).toMMPattern();fastTest&&"object"==typeof re&&Reflect.defineProperty(re,"test",{value:fastTest});return re}makeRe(){if(this.regexp||!1===this.regexp)return this.regexp;const set2=this.set;if(!set2.length){this.regexp=!1;return this.regexp}const options=this.options,twoStar=options.noglobstar?"[^/]*?":options.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",flags2=new Set(options.nocase?["i"]:[]);let re=set2.map(pattern=>{const pp=pattern.map(p2=>{if(p2 instanceof RegExp)for(const f4 of p2.flags.split(""))flags2.add(f4);return"string"==typeof p2?regExpEscape2(p2):p2===GLOBSTAR?GLOBSTAR:p2._src});pp.forEach((p2,i2)=>{const next2=pp[i2+1],prev=pp[i2-1];if(p2===GLOBSTAR&&prev!==GLOBSTAR)if(void 0===prev)void 0!==next2&&next2!==GLOBSTAR?pp[i2+1]="(?:\\/|"+twoStar+"\\/)?"+next2:pp[i2]=twoStar;else if(void 0===next2)pp[i2-1]=prev+"(?:\\/|\\/"+twoStar+")?";else if(next2!==GLOBSTAR){pp[i2-1]=prev+"(?:\\/|\\/"+twoStar+"\\/)"+next2;pp[i2+1]=GLOBSTAR}});const filtered=pp.filter(p2=>p2!==GLOBSTAR);if(this.partial&&filtered.length>=1){const prefixes=[];for(let i2=1;i2<=filtered.length;i2++)prefixes.push(filtered.slice(0,i2).join("/"));return"(?:"+prefixes.join("|")+")"}return filtered.join("/")}).join("|");const[open,close]=set2.length>1?["(?:",")"]:["",""];re="^"+open+re+close+"$";this.partial&&(re="^(?:\\/|"+open+re.slice(1,-1)+close+")$");this.negate&&(re="^(?!"+re+").+$");try{this.regexp=new RegExp(re,[...flags2].join(""))}catch(e3){this.regexp=!1}return this.regexp}slashSplit(p2){return this.preserveMultipleSlashes?p2.split("/"):this.isWindows&&/^\/\/[^/]+/.test(p2)?["",...p2.split(/\/+/)]:p2.split(/\/+/)}match(f4,partial=this.partial){this.debug("match",f4,this.pattern);if(this.comment)return!1;if(this.empty)return""===f4;if("/"===f4&&partial)return!0;const options=this.options;this.isWindows&&(f4=f4.split("\\").join("/"));const ff2=this.slashSplit(f4);this.debug(this.pattern,"split",ff2);const set2=this.set;this.debug(this.pattern,"set",set2);let filename=ff2[ff2.length-1];if(!filename)for(let i2=ff2.length-2;!filename&&i2>=0;i2--)filename=ff2[i2];for(const pattern of set2){let file=ff2;options.matchBase&&1===pattern.length&&(file=[filename]);if(this.matchOne(file,pattern,partial))return!!options.flipNegate||!this.negate}return!options.flipNegate&&this.negate}static defaults(def){return minimatch.defaults(def).Minimatch}};_Minimatch_instances=new WeakSet;matchGlobstar_fn=function(file,pattern,partial,fileIndex,patternIndex){const firstgs=pattern.indexOf(GLOBSTAR,patternIndex),lastgs=pattern.lastIndexOf(GLOBSTAR),[head2,body,tail]=partial?[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1),[]]:[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1,lastgs),pattern.slice(lastgs+1)];if(head2.length){const fileHead=file.slice(fileIndex,fileIndex+head2.length);if(!__privateMethod(this,_Minimatch_instances,matchOne_fn).call(this,fileHead,head2,partial,0,0))return!1;fileIndex+=head2.length;patternIndex+=head2.length}let fileTailMatch=0;if(tail.length){if(tail.length+fileIndex>file.length)return!1;let tailStart=file.length-tail.length;if(__privateMethod(this,_Minimatch_instances,matchOne_fn).call(this,file,tail,partial,tailStart,0))fileTailMatch=tail.length;else{if(""!==file[file.length-1]||fileIndex+tail.length===file.length)return!1;tailStart--;if(!__privateMethod(this,_Minimatch_instances,matchOne_fn).call(this,file,tail,partial,tailStart,0))return!1;fileTailMatch=tail.length+1}}if(!body.length){let sawSome=!!fileTailMatch;for(let i3=fileIndex;i3<file.length-fileTailMatch;i3++){const f4=String(file[i3]);sawSome=!0;if("."===f4||".."===f4||!this.options.dot&&f4.startsWith("."))return!1}return partial||sawSome}const bodySegments=[[[],0]];let currentBody=bodySegments[0],nonGsParts=0;const nonGsPartsSums=[0];for(const b3 of body)if(b3===GLOBSTAR){nonGsPartsSums.push(nonGsParts);currentBody=[[],0];bodySegments.push(currentBody)}else{currentBody[0].push(b3);nonGsParts++}let i2=bodySegments.length-1;const fileLength=file.length-fileTailMatch;for(const b3 of bodySegments)b3[1]=fileLength-(nonGsPartsSums[i2--]+b3[0].length);return!!__privateMethod(this,_Minimatch_instances,matchGlobStarBodySections_fn).call(this,file,bodySegments,fileIndex,0,partial,0,!!fileTailMatch)};matchGlobStarBodySections_fn=function(file,bodySegments,fileIndex,bodyIndex,partial,globStarDepth,sawTail){const bs2=bodySegments[bodyIndex];if(!bs2){for(let i2=fileIndex;i2<file.length;i2++){sawTail=!0;const f4=file[i2];if("."===f4||".."===f4||!this.options.dot&&f4.startsWith("."))return!1}return sawTail}const[body,after]=bs2;for(;fileIndex<=after;){if(__privateMethod(this,_Minimatch_instances,matchOne_fn).call(this,file.slice(0,fileIndex+body.length),body,partial,fileIndex,0)&&globStarDepth<this.maxGlobstarRecursion){const sub=__privateMethod(this,_Minimatch_instances,matchGlobStarBodySections_fn).call(this,file,bodySegments,fileIndex+body.length,bodyIndex+1,partial,globStarDepth+1,sawTail);if(!1!==sub)return sub}const f4=file[fileIndex];if("."===f4||".."===f4||!this.options.dot&&f4.startsWith("."))return!1;fileIndex++}return partial||null};matchOne_fn=function(file,pattern,partial,fileIndex,patternIndex){let fi,pi,pl,fl2;for(fi=fileIndex,pi=patternIndex,fl2=file.length,pl=pattern.length;fi<fl2&&pi<pl;fi++,pi++){this.debug("matchOne loop");let hit,p2=pattern[pi],f4=file[fi];this.debug(pattern,p2,f4);if(!1===p2||p2===GLOBSTAR)return!1;if("string"==typeof p2){hit=f4===p2;this.debug("string match",p2,f4,hit)}else{hit=p2.test(f4);this.debug("pattern match",p2,f4,hit)}if(!hit)return!1}if(fi===fl2&&pi===pl)return!0;if(fi===fl2)return partial;if(pi===pl)return fi===fl2-1&&""===file[fi];throw new Error("wtf?")};minimatch.AST=AST;minimatch.Minimatch=Minimatch;minimatch.escape=escape;minimatch.unescape=unescape2;isProposalArrayBufferBase64Available="undefined"!=typeof Uint8Array&&"function"==typeof Uint8Array.prototype.toBase64&&"function"==typeof Uint8Array.fromBase64;base64ToArrayBuffer=isProposalArrayBufferBase64Available?base64ToArrayBufferNative:function base64ToArrayBufferBrowser(base64){if("string"==typeof base64)return base64ToArrayBufferInternalBrowser(base64);const bufItems=base64.map(e3=>base64ToArrayBufferInternalBrowser(e3)),len=bufItems.reduce((p2,c3)=>p2+c3.byteLength,0),joinedArray=new Uint8Array(len);let offset=0;bufItems.forEach(e3=>{joinedArray.set(new Uint8Array(e3),offset);offset+=e3.byteLength});return joinedArray.buffer};arrayBufferToBase64Single=isProposalArrayBufferBase64Available?function arrayBufferToBase64SingleNative(buffer){const buf=buffer instanceof Uint8Array?buffer:new Uint8Array(buffer);return Promise.resolve(buf.toBase64())}:async function arrayBufferToBase64SingleBrowser(buffer){const buf=buffer instanceof Uint8Array?buffer:new Uint8Array(buffer);return buf.byteLength<QUANTUM?btoa(String.fromCharCode.apply(null,[...buf])):await arrayBufferToBase64internalBrowser(buf)};arrayBufferToBase64=isProposalArrayBufferBase64Available?function arrayBufferToBase64Native(buffer){const result=(buffer instanceof Uint8Array?buffer:new Uint8Array(buffer)).toBase64();return Promise.resolve([result])}:async function arrayBufferToBase64Browser(buffer){const buf=buffer instanceof Uint8Array?buffer:new Uint8Array(buffer);if(buf.byteLength<QUANTUM)return[btoa(String.fromCharCode.apply(null,[...buf]))];const bufLen=buf.byteLength,pieces=[];let idx2=0;do{const offset=15e7*idx2,pBuf=new DataView(buf.buffer,offset,Math.min(15e7,buf.byteLength-offset));pieces.push(await arrayBufferToBase64internalBrowser(pBuf));idx2++}while(15e7*idx2<bufLen);return pieces};QUANTUM=32768;te=new TextEncoder;td=new TextDecoder;base64ToString=isProposalArrayBufferBase64Available?function base64ToStringNative(base64){try{if("string"!=typeof base64)return base64.map(e3=>base64ToStringNative(e3)).join("");const buffer=base64ToArrayBufferNative(base64),bytes=new Uint8Array(buffer);if(0===bytes.length&&base64.length>0)throw new TypeError("Could not parse the encoded string");return readString(bytes)}catch(ex){Logger("Base64 To String error",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);return"string"!=typeof base64?base64.join(""):base64}}:function base64ToStringBrowser(base64){try{if("string"!=typeof base64)return base64.map(e3=>base64ToStringBrowser(e3)).join("");const binary_string=atob(base64),len=binary_string.length,bytes=new Uint8Array(len);for(let i2=0;i2<len;i2++)bytes[i2]=binary_string.charCodeAt(i2);return readString(bytes)}catch(ex){Logger("Base64 To String error",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);return"string"!=typeof base64?base64.join(""):base64}};regexpBase64=/^[A-Za-z0-9+/]+=*$/;tryConvertBase64ToArrayBuffer=isProposalArrayBufferBase64Available?function tryConvertBase64ToArrayBufferNative(base64){try{const b64F=base64.replace(/\r|\n/g,"");if(!regexpBase64.test(b64F))return!1;const buf=Uint8Array.fromBase64(b64F);return buf.toBase64()===b64F&&buf.byteLength>0&&buf.buffer}catch(e3){return!1}}:function tryConvertBase64ToArrayBufferBrowser(base64){try{const b64F=base64.replace(/\r|\n/g,"");if(!regexpBase64.test(b64F))return!1;const binary_string=globalThis.atob(b64F);if(globalThis.btoa(binary_string)!==b64F)return!1;const len=binary_string.length,bytes=new Uint8Array(len);for(let i2=0;i2<len;i2++)bytes[i2]=binary_string.charCodeAt(i2);return bytes.buffer}catch(e3){return!1}};table={};revTable={};[...function*range2(from,to){for(let i2=from;i2<=to;i2++)yield i2}(192,447)].forEach((e3,i2)=>{table[i2]=e3;revTable[e3]=i2});revMap={};numMap={};for(let i2=0;i2<256;i2++){revMap[`00${i2.toString(16)}`.slice(-2)]=i2;numMap[i2]=`00${i2.toString(16)}`.slice(-2)}isProposalArrayBufferBase64Available2="undefined"!=typeof Uint8Array&&"function"==typeof Uint8Array.prototype.toBase64&&"function"==typeof Uint8Array.fromBase64;hexStringToUint8Array=isProposalArrayBufferBase64Available2?function hexStringToUint8ArrayNative(src){return Uint8Array.fromHex(src)}:function hexStringToUint8ArrayBrowser(src){const len=src.length/2,ret=new Uint8Array(len);for(let i2=0;i2<len;i2++)ret[i2]=revMap[src[2*i2]+src[2*i2+1]];return ret};uint8ArrayToHexString=isProposalArrayBufferBase64Available2?function uint8ArrayToHexStringNative(src){return src.toHex()}:function uint8ArrayToHexStringBrowser(src){return[...src].map(e3=>numMap[e3]).join("")};_hashString=function memorizeFuncWithLRUCache(func){const cache2=new LRUCache(100,1e5,!0);return key3=>{if(cache2.has(key3))return cache2.get(key3);const value=func(key3);cache2.set(key3,value);return value}}(async key3=>{const buff=writeString(key3),webcrypto6=await getWebCrypto();let digest=await webcrypto6.subtle.digest("SHA-256",buff);const len=key3.length;for(let i2=0;i2<len;i2++)digest=await webcrypto6.subtle.digest("SHA-256",buff);return uint8ArrayToHexString(new Uint8Array(digest))});matchOpts={platform:"linux",dot:!0,flipNegate:!0,nocase:!0};isValidRemoteCouchDBURI=uri=>!!uri.startsWith("https://")||!!uri.startsWith("http://");_requestToCouchDBFetch=async(baseUri,username,password,path2,body,method)=>{const utf8str=String.fromCharCode.apply(null,[...writeString(`${username}:${password}`)]),encoded=globalThis.btoa(utf8str),uri=`${baseUri}/${path2}`,requestParam={url:uri,method:method||(body?"PUT":"GET"),headers:new Headers({authorization:"Basic "+encoded,"content-type":"application/json"}),contentType:"application/json",body:JSON.stringify(body)};return await fetch(uri,requestParam)};throttle=(func,timeout)=>{let timer,lastTime=0;return(...args)=>{if(lastTime){clearTimeout(timer);const delayTime=timeout-(Date.now()-lastTime);timer=setTimeout(()=>{func(...args);lastTime=Date.now()},delayTime)}else{func(...args);lastTime=Date.now()}}};isIndexDBCmpExist=void 0!==(null==(_a3=null==globalThis?void 0:globalThis.indexedDB)?void 0:_a3.cmp);globalConcurrencyController=Semaphore(50);map={"\n":"\\n","\r":"\\r","\\":"\\\\"};revMap2={"\\n":"\n","\\r":"\r","\\\\":"\\"};previousValues=new Map;MARK_DELETED="__DELETED";MARK_ISARRAY="__ARRAY";MARK_SWAPPED="__SWAP";CustomRegExp=class{constructor(regexp,flags2){const[negate3,exp]=parseCustomRegExp(regexp);this.pattern=exp;this.regexp=new RegExp(exp,flags2);this.negate=negate3}test(str){return this.negate?!this.regexp.test(str):this.regexp.test(str)}};resolution=2e3;reactiveSource({pending:[],running:[],count:0});collectingChunks=reactiveSource(0);pluginScanningCount=reactiveSource(0);hiddenFilesProcessingCount=reactiveSource(0);hiddenFilesEventCount=reactiveSource(0);logMessages=reactiveSource([]);eventHub=new(EventHub=class{constructor(emitter){Object.defineProperty(this,"_emitter",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_assigned",{enumerable:!0,configurable:!0,writable:!0,value:new Map});Object.defineProperty(this,"_allAssigned",{enumerable:!0,configurable:!0,writable:!0,value:new Map});this._emitter=null!=emitter?emitter:new EventTarget}_issueSignal(key3,callback){var _a8;let assigned=this._assigned.get(key3);void 0===assigned&&(assigned=new WeakMap);const controllerRef=assigned.get(callback);let controller=null==controllerRef?void 0:controllerRef.deref();if(!controller||controller.signal.aborted){controller=new AbortController;const refController=new FallbackWeakRef(controller);controller.signal.addEventListener("abort",()=>{var _a9,_b5;null==(_a9=this._assigned.get(key3))||_a9.delete(callback);null==(_b5=this._allAssigned.get(key3))||_b5.delete(refController)},{once:!0});assigned.set(callback,refController);this._assigned.set(key3,assigned);const allAssigned=null!=(_a8=this._allAssigned.get(key3))?_a8:new Set;allAssigned.add(refController);this._allAssigned.set(key3,allAssigned);return controller}return controller}emitEvent(event2,data){this._emitter.dispatchEvent(new CustomEvent(`${event2.toString()}`,{detail:null!=data?data:void 0}))}on(event2,callback,options){const key3=event2,controller=this._issueSignal(key3,callback);this._emitter.addEventListener(key3,e3=>{callback(e3,e3 instanceof CustomEvent?null==e3?void 0:e3.detail:void 0)},{...options,signal:controller.signal});return()=>this.off(event2,callback)}off(event2,callback){var _a8,_b5;const key3=event2;if(callback){const w2=null==(_a8=this._assigned.get(key3))?void 0:_a8.get(callback),controller=null==w2?void 0:w2.deref();null==controller||controller.abort()}else null==(_b5=this._allAssigned.get(key3))||_b5.forEach(w2=>{const controller=w2.deref();null==controller||controller.abort()})}offAll(){for(const[key3]of this._allAssigned)this.off(key3)}onEvent(event2,callback,options){const key3=event2,controller=this._issueSignal(key3,callback);this._emitter.addEventListener(key3,e3=>{callback(e3 instanceof CustomEvent?null==e3?void 0:e3.detail:void 0)},{...options,signal:controller.signal});return()=>this.off(event2,callback)}once(event2,callback){return this.on(event2,callback,{once:!0})}onceEvent(event2,callback){return this.on(event2,(_,data)=>callback(data),{once:!0})}waitFor(event2){return new Promise(resolve=>{this.onceEvent(event2,data=>{resolve(data)})})}});EVENT_LAYOUT_READY="layout-ready";EVENT_SETTING_SAVED="setting-saved";EVENT_DATABASE_REBUILT="database-rebuilt";EVENT_REQUEST_OPEN_SETUP_URI="request-open-setup-uri";EVENT_REQUEST_COPY_SETUP_URI="request-copy-setup-uri";EVENT_REQUEST_SHOW_SETUP_QR="request-show-setup-qr";EVENT_REQUEST_OPEN_P2P_SETTINGS="request-open-p2p-settings";EVENT_REQUEST_OPEN_P2P="request-open-p2p";EVENT_PLATFORM_UNLOADED="platform-unloaded";EVENT_ON_UNRESOLVED_ERROR="on-unresolved-error";EVENT_REQUEST_CHECK_REMOTE_SIZE="request-check-remote-size";EVENT_REQUEST_OPEN_SETUP_URI2="request-open-setup-uri";EVENT_REQUEST_COPY_SETUP_URI2="request-copy-setup-uri";EVENT_REQUEST_SHOW_SETUP_QR2="request-show-setup-qr";EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG2="request-open-plugin-sync-dialog";EVENT_REQUEST_RUN_DOCTOR="request-run-doctor";EVENT_REQUEST_RUN_FIX_INCOMPLETE="request-run-fix-incomplete";EVENT_ANALYSE_DB_USAGE="analyse-db-usage";EVENT_REQUEST_PERFORM_GC_V3="request-perform-gc-v3";MARK_LOG_SEPARATOR="";MARK_LOG_NETWORK_ERROR="";AbstractModule=class{constructor(core){this.core=core;this._log=createInstanceLogFunction(this.constructor.name,this.services.API);this.addCommand=this.services.API.addCommand.bind(this.services.API);this.registerView=this.services.API.registerWindow.bind(this.services.API);this.addRibbonIcon=this.services.API.addRibbonIcon.bind(this.services.API);this.registerObsidianProtocolHandler=this.services.API.registerProtocolHandler.bind(this.services.API);this.saveSettings=this.core.services.setting.saveSettingData.bind(this.core.services.setting);Logger(`[${this.constructor.name}] Loaded`,LOG_LEVEL_VERBOSE)}get services(){if(!this.core._services)throw new Error("Services are not ready yet.");return this.core._services}get localDatabase(){return this.core.localDatabase}get settings(){return this.core.settings}set settings(value){this.core.settings=value}getPath(entry){return this.services.path.getPath(entry)}getPathWithoutPrefix(entry){return stripAllPrefixes(this.services.path.getPath(entry))}onBindFunction(core,services){}addTestResult(key3,value,summary,message){this.services.test.addTestResult(`${this.constructor.name}`,key3,value,summary,message)}testDone(result=!0){return Promise.resolve(result)}testFail(message){this._log(message,LOG_LEVEL_NOTICE);return this.testDone(!1)}async _test(key3,process2){this._log(`Testing ${key3}`,LOG_LEVEL_VERBOSE);try{const ret=await process2();if(!0!==ret){this.addTestResult(key3,!1,ret.toString());return this.testFail(`${key3} failed: ${ret}`)}this.addTestResult(key3,!0,"")}catch(ex){this.addTestResult(key3,!1,"Failed by Exception",ex.toString());return this.testFail(`${key3} failed: ${ex}`)}return this.testDone()}isMainReady(){return this.services.appLifecycle.isReady()}isMainSuspended(){return this.services.appLifecycle.isSuspended()}isDatabaseReady(){return this.services.database.isDatabaseReady()}};AbstractObsidianModule=class extends AbstractModule{constructor(plugin3,core){super(core);this.plugin=plugin3}get app(){return this.plugin.app}isThisModuleEnabled(){return!0}};"undefined"!=typeof window&&(null!=(_c=(_b=null!=(_a4=window.__svelte)?_a4:window.__svelte={}).v)?_c:_b.v=new Set).add("5");EACH_ITEM_REACTIVE=1;EACH_INDEX_REACTIVE=2;EACH_IS_CONTROLLED=4;EACH_IS_ANIMATED=8;EACH_ITEM_IMMUTABLE=16;PROPS_IS_IMMUTABLE=1;PROPS_IS_RUNES=2;PROPS_IS_UPDATED=4;PROPS_IS_BINDABLE=8;PROPS_IS_LAZY_INITIAL=16;TEMPLATE_FRAGMENT=1;TEMPLATE_USE_IMPORT_NODE=2;HYDRATION_START="[";HYDRATION_START_ELSE="[!";HYDRATION_END="]";HYDRATION_ERROR={};UNINITIALIZED=Symbol();FILENAME=Symbol("filename");Symbol("hmr");NAMESPACE_HTML="http://www.w3.org/1999/xhtml";node_env=null==(_b2=null==(_a5=globalThis.process)?void 0:_a5.env)?void 0:_b2.NODE_ENV;dev_fallback_default=node_env&&!node_env.toLowerCase().startsWith("prod");is_array=Array.isArray;index_of=Array.prototype.indexOf;array_from=Array.from;Object.keys;define_property=Object.defineProperty;get_descriptor=Object.getOwnPropertyDescriptor;get_descriptors=Object.getOwnPropertyDescriptors;object_prototype=Object.prototype;array_prototype=Array.prototype;get_prototype_of=Object.getPrototypeOf;is_extensible=Object.isExtensible;noop2=()=>{};DERIVED=2;EFFECT=4;RENDER_EFFECT=8;BLOCK_EFFECT=16;BRANCH_EFFECT=32;ROOT_EFFECT=64;BOUNDARY_EFFECT=128;UNOWNED=256;DISCONNECTED=512;CLEAN=1024;DIRTY=2048;MAYBE_DIRTY=4096;INERT=8192;DESTROYED=16384;EFFECT_RAN=32768;EFFECT_TRANSPARENT=65536;INSPECT_EFFECT=1<<17;HEAD_EFFECT=1<<18;EFFECT_PRESERVED=1<<19;USER_EFFECT=1<<20;REACTION_IS_UPDATING=1<<21;ASYNC=1<<22;ERROR_VALUE=1<<23;STATE_SYMBOL=Symbol("$state");LEGACY_PROPS=Symbol("legacy props");LOADING_ATTR_SYMBOL=Symbol("");PROXY_PATH_SYMBOL=Symbol("proxy path");STALE_REACTION=new class StaleReactionError extends Error{constructor(){super(...arguments);__publicField(this,"name","StaleReactionError");__publicField(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};TEXT_NODE=3;COMMENT_NODE=8;bold="font-weight: bold";normal="font-weight: normal";hydrating=!1;async_mode_flag=!1;legacy_mode_flag=!1;tracing_mode_flag=!1;tracing_expressions=null;component_context=null;dev_stack=null;dev_current_component_function=null;micro_tasks=[];adjustments=new WeakMap;batches=new Set;current_batch=null;previous_batch=null;batch_values=null;effect_pending_updates=new Set;queued_root_effects=[];last_scheduled_effect=null;is_flushing=!1;is_flushing_sync=!1;_Batch=class _Batch{constructor(){__privateAdd(this,_Batch_instances);__publicField(this,"current",new Map);__privateAdd(this,_previous,new Map);__privateAdd(this,_callbacks,new Set);__privateAdd(this,_pending,0);__privateAdd(this,_deferred,null);__privateAdd(this,_render_effects,[]);__privateAdd(this,_effects,[]);__privateAdd(this,_block_effects,[]);__privateAdd(this,_dirty_effects,[]);__privateAdd(this,_maybe_dirty_effects,[]);__publicField(this,"skipped_effects",new Set)}process(root_effects){var _a8,previous_batch_sources,render_effects,effects;queued_root_effects=[];previous_batch=null;this.apply();for(const root40 of root_effects)__privateMethod(this,_Batch_instances,traverse_effect_tree_fn).call(this,root40);if(0===__privateGet(this,_pending)){previous_batch_sources=batch_values;__privateMethod(this,_Batch_instances,commit_fn).call(this);render_effects=__privateGet(this,_render_effects);effects=__privateGet(this,_effects);__privateSet(this,_render_effects,[]);__privateSet(this,_effects,[]);__privateSet(this,_block_effects,[]);previous_batch=this;current_batch=null;batch_values=previous_batch_sources;flush_queued_effects(render_effects);flush_queued_effects(effects);previous_batch=null;null==(_a8=__privateGet(this,_deferred))||_a8.resolve()}else{__privateMethod(this,_Batch_instances,defer_effects_fn).call(this,__privateGet(this,_render_effects));__privateMethod(this,_Batch_instances,defer_effects_fn).call(this,__privateGet(this,_effects));__privateMethod(this,_Batch_instances,defer_effects_fn).call(this,__privateGet(this,_block_effects))}batch_values=null}capture(source2,value){__privateGet(this,_previous).has(source2)||__privateGet(this,_previous).set(source2,value);this.current.set(source2,source2.v);null==batch_values||batch_values.set(source2,source2.v)}activate(){current_batch=this}deactivate(){current_batch=null;batch_values=null}flush(){if(queued_root_effects.length>0){this.activate();flush_effects();if(null!==current_batch&&current_batch!==this)return}else 0===__privateGet(this,_pending)&&__privateMethod(this,_Batch_instances,commit_fn).call(this);this.deactivate();for(const update2 of effect_pending_updates){effect_pending_updates.delete(update2);update2();if(null!==current_batch)break}}increment(){__privateSet(this,_pending,__privateGet(this,_pending)+1)}decrement(){__privateSet(this,_pending,__privateGet(this,_pending)-1);for(const e3 of __privateGet(this,_dirty_effects)){set_signal_status(e3,DIRTY);schedule_effect(e3)}for(const e3 of __privateGet(this,_maybe_dirty_effects)){set_signal_status(e3,MAYBE_DIRTY);schedule_effect(e3)}this.flush()}add_callback(fn){__privateGet(this,_callbacks).add(fn)}settled(){var _a8;return(null!=(_a8=__privateGet(this,_deferred))?_a8:__privateSet(this,_deferred,deferred())).promise}static ensure(){if(null===current_batch){const batch=current_batch=new _Batch;batches.add(current_batch);is_flushing_sync||_Batch.enqueue(()=>{current_batch===batch&&batch.flush()})}return current_batch}static enqueue(task){queue_micro_task(task)}apply(){if(async_mode_flag&&1!==batches.size){batch_values=new Map(this.current);for(const batch of batches)if(batch!==this)for(const[source2,previous]of __privateGet(batch,_previous))batch_values.has(source2)||batch_values.set(source2,previous)}}};_previous=new WeakMap;_callbacks=new WeakMap;_pending=new WeakMap;_deferred=new WeakMap;_render_effects=new WeakMap;_effects=new WeakMap;_block_effects=new WeakMap;_dirty_effects=new WeakMap;_maybe_dirty_effects=new WeakMap;_Batch_instances=new WeakSet;traverse_effect_tree_fn=function(root40){var effect2,flags2,is_branch,child2,parent;root40.f^=CLEAN;effect2=root40.first;for(;null!==effect2;){if(!((is_branch=0!==((flags2=effect2.f)&(BRANCH_EFFECT|ROOT_EFFECT)))&&0!==(flags2&CLEAN)||0!==(flags2&INERT)||this.skipped_effects.has(effect2))&&null!==effect2.fn){if(is_branch)effect2.f^=CLEAN;else if(0!==(flags2&EFFECT))__privateGet(this,_effects).push(effect2);else if(async_mode_flag&&0!==(flags2&RENDER_EFFECT))__privateGet(this,_render_effects).push(effect2);else if(is_dirty(effect2)){0!==(effect2.f&BLOCK_EFFECT)&&__privateGet(this,_block_effects).push(effect2);update_effect(effect2)}if(null!==(child2=effect2.first)){effect2=child2;continue}}parent=effect2.parent;effect2=effect2.next;for(;null===effect2&&null!==parent;){effect2=parent.next;parent=parent.parent}}};defer_effects_fn=function(effects){for(const e3 of effects){(0!==(e3.f&DIRTY)?__privateGet(this,_dirty_effects):__privateGet(this,_maybe_dirty_effects)).push(e3);set_signal_status(e3,CLEAN)}effects.length=0};commit_fn=function(){var _a8;for(const fn of __privateGet(this,_callbacks))fn();__privateGet(this,_callbacks).clear();if(batches.size>1){__privateGet(this,_previous).clear();let is_earlier=!0;for(const batch of batches){if(batch===this){is_earlier=!1;continue}const sources=[];for(const[source2,value]of this.current){if(batch.current.has(source2)){if(!is_earlier||value===batch.current.get(source2))continue;batch.current.set(source2,value)}sources.push(source2)}if(0===sources.length)continue;const others=[...batch.current.keys()].filter(s2=>!this.current.has(s2));if(others.length>0){for(const source2 of sources)mark_effects(source2,others);if(queued_root_effects.length>0){current_batch=batch;batch.apply();for(const root40 of queued_root_effects)__privateMethod(_a8=batch,_Batch_instances,traverse_effect_tree_fn).call(_a8,root40);queued_root_effects=[];batch.deactivate()}}}current_batch=null}batches.delete(this)};Batch=_Batch;eager_block_effects=null;flags=EFFECT_TRANSPARENT|EFFECT_PRESERVED|BOUNDARY_EFFECT;Boundary=class{constructor(node,props,children){__privateAdd(this,_Boundary_instances);__publicField(this,"parent");__privateAdd(this,_pending2,!1);__privateAdd(this,_anchor);__privateAdd(this,_hydrate_open,hydrating?hydrate_node:null);__privateAdd(this,_props);__privateAdd(this,_children);__privateAdd(this,_effect);__privateAdd(this,_main_effect,null);__privateAdd(this,_pending_effect,null);__privateAdd(this,_failed_effect,null);__privateAdd(this,_offscreen_fragment,null);__privateAdd(this,_local_pending_count,0);__privateAdd(this,_pending_count,0);__privateAdd(this,_is_creating_fallback,!1);__privateAdd(this,_effect_pending,null);__privateAdd(this,_effect_pending_update,()=>{__privateGet(this,_effect_pending)&&internal_set(__privateGet(this,_effect_pending),__privateGet(this,_local_pending_count))});__privateAdd(this,_effect_pending_subscriber,createSubscriber(()=>{__privateSet(this,_effect_pending,source(__privateGet(this,_local_pending_count)));dev_fallback_default&&tag(__privateGet(this,_effect_pending),"$effect.pending()");return()=>{__privateSet(this,_effect_pending,null)}}));__privateSet(this,_anchor,node);__privateSet(this,_props,props);__privateSet(this,_children,children);this.parent=active_effect.b;__privateSet(this,_pending2,!!__privateGet(this,_props).pending);__privateSet(this,_effect,block(()=>{active_effect.b=this;if(hydrating){const comment2=__privateGet(this,_hydrate_open);hydrate_next();comment2.nodeType===COMMENT_NODE&&comment2.data===HYDRATION_START_ELSE?__privateMethod(this,_Boundary_instances,hydrate_pending_content_fn).call(this):__privateMethod(this,_Boundary_instances,hydrate_resolved_content_fn).call(this)}else{try{__privateSet(this,_main_effect,branch(()=>children(__privateGet(this,_anchor))))}catch(error){this.error(error)}__privateGet(this,_pending_count)>0?__privateMethod(this,_Boundary_instances,show_pending_snippet_fn).call(this):__privateSet(this,_pending2,!1)}},flags));hydrating&&__privateSet(this,_anchor,hydrate_node)}is_pending(){return __privateGet(this,_pending2)||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!__privateGet(this,_props).pending}update_pending_count(d4){__privateMethod(this,_Boundary_instances,update_pending_count_fn).call(this,d4);__privateSet(this,_local_pending_count,__privateGet(this,_local_pending_count)+d4);effect_pending_updates.add(__privateGet(this,_effect_pending_update))}get_effect_pending(){__privateGet(this,_effect_pending_subscriber).call(this);return get(__privateGet(this,_effect_pending))}error(error){var did_reset,calling_on_error,previous_reaction,onerror=__privateGet(this,_props).onerror;let failed2=__privateGet(this,_props).failed;if(__privateGet(this,_is_creating_fallback)||!onerror&&!failed2)throw error;if(__privateGet(this,_main_effect)){destroy_effect(__privateGet(this,_main_effect));__privateSet(this,_main_effect,null)}if(__privateGet(this,_pending_effect)){destroy_effect(__privateGet(this,_pending_effect));__privateSet(this,_pending_effect,null)}if(__privateGet(this,_failed_effect)){destroy_effect(__privateGet(this,_failed_effect));__privateSet(this,_failed_effect,null)}if(hydrating){set_hydrate_node(__privateGet(this,_hydrate_open));next();set_hydrate_node(skip_nodes())}did_reset=!1;calling_on_error=!1;const reset2=()=>{if(did_reset)svelte_boundary_reset_noop();else{did_reset=!0;calling_on_error&&svelte_boundary_reset_onerror();Batch.ensure();__privateSet(this,_local_pending_count,0);null!==__privateGet(this,_failed_effect)&&pause_effect(__privateGet(this,_failed_effect),()=>{__privateSet(this,_failed_effect,null)});__privateSet(this,_pending2,this.has_pending_snippet());__privateSet(this,_main_effect,__privateMethod(this,_Boundary_instances,run_fn).call(this,()=>{__privateSet(this,_is_creating_fallback,!1);return branch(()=>__privateGet(this,_children).call(this,__privateGet(this,_anchor)))}));__privateGet(this,_pending_count)>0?__privateMethod(this,_Boundary_instances,show_pending_snippet_fn).call(this):__privateSet(this,_pending2,!1)}};previous_reaction=active_reaction;try{set_active_reaction(null);calling_on_error=!0;null==onerror||onerror(error,reset2);calling_on_error=!1}catch(error2){invoke_error_boundary(error2,__privateGet(this,_effect)&&__privateGet(this,_effect).parent)}finally{set_active_reaction(previous_reaction)}failed2&&queue_micro_task(()=>{__privateSet(this,_failed_effect,__privateMethod(this,_Boundary_instances,run_fn).call(this,()=>{__privateSet(this,_is_creating_fallback,!0);try{return branch(()=>{failed2(__privateGet(this,_anchor),()=>error,()=>reset2)})}catch(error2){invoke_error_boundary(error2,__privateGet(this,_effect).parent);return null}finally{__privateSet(this,_is_creating_fallback,!1)}}))})}};_pending2=new WeakMap;_anchor=new WeakMap;_hydrate_open=new WeakMap;_props=new WeakMap;_children=new WeakMap;_effect=new WeakMap;_main_effect=new WeakMap;_pending_effect=new WeakMap;_failed_effect=new WeakMap;_offscreen_fragment=new WeakMap;_local_pending_count=new WeakMap;_pending_count=new WeakMap;_is_creating_fallback=new WeakMap;_effect_pending=new WeakMap;_effect_pending_update=new WeakMap;_effect_pending_subscriber=new WeakMap;_Boundary_instances=new WeakSet;hydrate_resolved_content_fn=function(){try{__privateSet(this,_main_effect,branch(()=>__privateGet(this,_children).call(this,__privateGet(this,_anchor))))}catch(error){this.error(error)}__privateSet(this,_pending2,!1)};hydrate_pending_content_fn=function(){const pending3=__privateGet(this,_props).pending;if(pending3){__privateSet(this,_pending_effect,branch(()=>pending3(__privateGet(this,_anchor))));Batch.enqueue(()=>{__privateSet(this,_main_effect,__privateMethod(this,_Boundary_instances,run_fn).call(this,()=>{Batch.ensure();return branch(()=>__privateGet(this,_children).call(this,__privateGet(this,_anchor)))}));if(__privateGet(this,_pending_count)>0)__privateMethod(this,_Boundary_instances,show_pending_snippet_fn).call(this);else{pause_effect(__privateGet(this,_pending_effect),()=>{__privateSet(this,_pending_effect,null)});__privateSet(this,_pending2,!1)}})}};run_fn=function(fn){var previous_effect=active_effect,previous_reaction=active_reaction,previous_ctx=component_context;set_active_effect(__privateGet(this,_effect));set_active_reaction(__privateGet(this,_effect));set_component_context(__privateGet(this,_effect).ctx);try{return fn()}catch(e3){handle_error(e3);return null}finally{set_active_effect(previous_effect);set_active_reaction(previous_reaction);set_component_context(previous_ctx)}};show_pending_snippet_fn=function(){const pending3=__privateGet(this,_props).pending;if(null!==__privateGet(this,_main_effect)){__privateSet(this,_offscreen_fragment,document.createDocumentFragment());move_effect(__privateGet(this,_main_effect),__privateGet(this,_offscreen_fragment))}null===__privateGet(this,_pending_effect)&&__privateSet(this,_pending_effect,branch(()=>pending3(__privateGet(this,_anchor))))};update_pending_count_fn=function(d4){var _a8;if(this.has_pending_snippet()){__privateSet(this,_pending_count,__privateGet(this,_pending_count)+d4);if(0===__privateGet(this,_pending_count)){__privateSet(this,_pending2,!1);__privateGet(this,_pending_effect)&&pause_effect(__privateGet(this,_pending_effect),()=>{__privateSet(this,_pending_effect,null)});if(__privateGet(this,_offscreen_fragment)){__privateGet(this,_anchor).before(__privateGet(this,_offscreen_fragment));__privateSet(this,_offscreen_fragment,null)}queue_micro_task(()=>{Batch.ensure().flush()})}}else this.parent&&__privateMethod(_a8=this.parent,_Boundary_instances,update_pending_count_fn).call(_a8,d4)};current_async_effect=null;recent_async_deriveds=new Set;stack=[];inspect_effects=new Set;old_values=new Map;inspect_effects_deferred=!1;regex_is_valid_identifier=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;ARRAY_MUTATING_METHODS=new Set(["copyWithin","fill","pop","push","reverse","shift","sort","splice","unshift"]);listening_to_form_reset=!1;captured_signals=null;is_updating_effect=!1;is_destroying_effect=!1;active_reaction=null;untracking=!1;active_effect=null;current_sources=null;new_deps=null;skipped_deps=0;untracked_writes=null;write_version=1;update_version=read_version=0;skip_reaction=!1;STATUS_MASK=~(DIRTY|MAYBE_DIRTY|CLEAN);all_registered_events=new Set;root_event_handles=new Set;PASSIVE_EVENTS=["touchstart","touchmove"];document_listeners=new Map;mounted_components=new WeakMap;BranchManager=class{constructor(anchor,transition2=!0){__publicField(this,"anchor");__privateAdd(this,_batches,new Map);__privateAdd(this,_onscreen,new Map);__privateAdd(this,_offscreen,new Map);__privateAdd(this,_transition,!0);__privateAdd(this,_commit,()=>{var key3,onscreen,offscreen,batch=current_batch;if(__privateGet(this,_batches).has(batch)){key3=__privateGet(this,_batches).get(batch);if(onscreen=__privateGet(this,_onscreen).get(key3))resume_effect(onscreen);else if(offscreen=__privateGet(this,_offscreen).get(key3)){__privateGet(this,_onscreen).set(key3,offscreen.effect);__privateGet(this,_offscreen).delete(key3);offscreen.fragment.lastChild.remove();this.anchor.before(offscreen.fragment);onscreen=offscreen.effect}for(const[b3,k2]of __privateGet(this,_batches)){__privateGet(this,_batches).delete(b3);if(b3===batch)break;const offscreen2=__privateGet(this,_offscreen).get(k2);if(offscreen2){destroy_effect(offscreen2.effect);__privateGet(this,_offscreen).delete(k2)}}for(const[k2,effect2]of __privateGet(this,_onscreen)){if(k2===key3)continue;const on_destroy=()=>{if(Array.from(__privateGet(this,_batches).values()).includes(k2)){var fragment=document.createDocumentFragment();move_effect(effect2,fragment);fragment.append(create_text());__privateGet(this,_offscreen).set(k2,{effect:effect2,fragment})}else destroy_effect(effect2);__privateGet(this,_onscreen).delete(k2)};__privateGet(this,_transition)||!onscreen?pause_effect(effect2,on_destroy,!1):on_destroy()}}});this.anchor=anchor;__privateSet(this,_transition,transition2)}ensure(key3,fn){var fragment,target,batch=current_batch,defer=should_defer_append();if(fn&&!__privateGet(this,_onscreen).has(key3)&&!__privateGet(this,_offscreen).has(key3))if(defer){fragment=document.createDocumentFragment();target=create_text();fragment.append(target);__privateGet(this,_offscreen).set(key3,{effect:branch(()=>fn(target)),fragment})}else __privateGet(this,_onscreen).set(key3,branch(()=>fn(this.anchor)));__privateGet(this,_batches).set(batch,key3);if(defer){for(const[k2,effect2]of __privateGet(this,_onscreen))k2===key3?batch.skipped_effects.delete(effect2):batch.skipped_effects.add(effect2);for(const[k2,branch2]of __privateGet(this,_offscreen))k2===key3?batch.skipped_effects.delete(branch2.effect):batch.skipped_effects.add(branch2.effect);batch.add_callback(__privateGet(this,_commit))}else{hydrating&&(this.anchor=hydrate_node);__privateGet(this,_commit).call(this)}}};_batches=new WeakMap;_onscreen=new WeakMap;_offscreen=new WeakMap;_transition=new WeakMap;_commit=new WeakMap;if(dev_fallback_default){let throw_rune_error=function(rune){if(!(rune in globalThis)){let value;Object.defineProperty(globalThis,rune,{configurable:!0,get:()=>{if(void 0!==value)return value;rune_outside_svelte(rune)},set:v2=>{value=v2}})}};throw_rune_error("$state");throw_rune_error("$effect");throw_rune_error("$derived");throw_rune_error("$inspect");throw_rune_error("$props");throw_rune_error("$bindable")}all_styles=new Map;current_each_item=null;whitespace=[..." \t\n\r\f \v\ufeff"];Symbol("class");Symbol("style");IS_CUSTOM_ELEMENT=Symbol("is custom element");IS_HTML=Symbol("is html");setters_cache=new Map;pending2=new Set;_ResizeObserverSingleton=class _ResizeObserverSingleton{constructor(options){__privateAdd(this,_ResizeObserverSingleton_instances);__privateAdd(this,_listeners,new WeakMap);__privateAdd(this,_observer);__privateAdd(this,_options2);__privateSet(this,_options2,options)}observe(element2,listener){var listeners=__privateGet(this,_listeners).get(element2)||new Set;listeners.add(listener);__privateGet(this,_listeners).set(element2,listeners);__privateMethod(this,_ResizeObserverSingleton_instances,getObserver_fn).call(this).observe(element2,__privateGet(this,_options2));return()=>{var listeners2=__privateGet(this,_listeners).get(element2);listeners2.delete(listener);if(0===listeners2.size){__privateGet(this,_listeners).delete(element2);__privateGet(this,_observer).unobserve(element2)}}}};_listeners=new WeakMap;_observer=new WeakMap;_options2=new WeakMap;_ResizeObserverSingleton_instances=new WeakSet;getObserver_fn=function(){var _a8;return null!=(_a8=__privateGet(this,_observer))?_a8:__privateSet(this,_observer,new ResizeObserver(entries2=>{var entry,listener;for(entry of entries2){_ResizeObserverSingleton.entries.set(entry.target,entry);for(listener of __privateGet(this,_listeners).get(entry.target)||[])listener(entry)}}))};__publicField(_ResizeObserverSingleton,"entries",new WeakMap);subscriber_queue=[];is_store_binding=!1;IS_UNMOUNTED=Symbol();spread_props_handler={get(target,key3){let i2=target.props.length;for(;i2--;){let p2=target.props[i2];is_function(p2)&&(p2=p2());if("object"==typeof p2&&null!==p2&&key3 in p2)return p2[key3]}},set(target,key3,value){let i2=target.props.length;for(;i2--;){let p2=target.props[i2];is_function(p2)&&(p2=p2());const desc=get_descriptor(p2,key3);if(desc&&desc.set){desc.set(value);return!0}}return!1},getOwnPropertyDescriptor(target,key3){let i2=target.props.length;for(;i2--;){let p2=target.props[i2];is_function(p2)&&(p2=p2());if("object"==typeof p2&&null!==p2&&key3 in p2){const descriptor=get_descriptor(p2,key3);descriptor&&!descriptor.configurable&&(descriptor.configurable=!0);return descriptor}}},has(target,key3){if(key3===STATE_SYMBOL||key3===LEGACY_PROPS)return!1;for(let p2 of target.props){is_function(p2)&&(p2=p2());if(null!=p2&&key3 in p2)return!0}return!1},ownKeys(target){const keys3=[];for(let p2 of target.props){is_function(p2)&&(p2=p2());if(p2){for(const key3 in p2)keys3.includes(key3)||keys3.push(key3);for(const key3 of Object.getOwnPropertySymbols(p2))keys3.includes(key3)||keys3.push(key3)}}return keys3}};new WeakMap;new WeakMap;"function"==typeof HTMLElement&&HTMLElement;SUPPORTED_I18N_LANGS=["def","de","es","ja","ko","ru","zh","zh-tw"];expandedMessage={...expandKeywords(_allMessages={"(BETA) Always overwrite with a newer file":{def:"(BETA) Always overwrite with a newer file",es:"(BETA) Sobrescribir siempre con archivo más nuevo",ja:"(ベータ機能) 常に新しいファイルで上書きする",ko:"(베타) 항상 새로운 파일로 덮어쓰기",ru:"(БЕТА) Всегда перезаписывать более новым файлом",zh:"始终使用更新的文件覆盖(测试版)"},"(Beta) Use ignore files":{def:"(Beta) Use ignore files",es:"(Beta) Usar archivos de ignorar",ja:"(ベータ機能) 除外ファイル(ignore)の使用",ko:"(베타) 제외 규칙 파일 사용",ru:"(Бета) Использовать файлы игнорирования",zh:"(测试版)使用忽略文件"},"(Days passed, 0 to disable automatic-deletion)":{def:"(Days passed, 0 to disable automatic-deletion)",es:"(Días transcurridos, 0 para desactivar)",ja:"(経過日数、0で自動削除を無効化)",ko:"(지난 일수, 0으로 설정하면 자동 삭제 비활성화)",ru:"(Дней прошло, 0 для отключения автоматического удаления)",zh:"(已过天数,0为禁用自动删除)"},"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.":{def:"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.",es:"(Ej: Leer chunks online) Lee chunks directamente en línea. Aumente tamaño de chunks personalizados",ja:"(例: チャンクをオンラインで読む) このオプションを有効にすると、LiveSyncはチャンクをローカルに複製せず、直接オンラインで読み込みます。カスタムチャンクサイズを増やすことをお勧めします。",ko:"(예: 청크를 원격에서 읽음) 이 옵션을 활성화하면, LiveSync는 청크를 로컬에 복제하지 않고 원격에서 직접 읽습니다. 커스텀 청크 크기를 키우는 것을 권장합니다.",ru:"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended.",zh:"(例如,在线读取块)如果启用此选项,LiveSync 将直接在线读取块,而不是在本地复制块。建议增加自定义块大小"},"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.":{def:"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.",es:"(MB) Saltar cambios en archivos locales/remotos mayores a este tamaño. Si se reduce, se usará versión nueva",ja:"(MB) この値を設定すると、これより大きいサイズのローカルファイルやリモートファイルの変更はスキップされます。ファイルが再び小さくなった場合は、新しいものが使用されます。",ko:"(MB) 이 값이 설정되면, 이보다 큰 로컬 및 원격 파일의 변경 사항은 건너뜁니다. 파일이 다시 작아지면 더 새로운 파일이 사용됩니다.",ru:"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used.",zh:"(MB)如果设置了此项,大于此大小的本地和远程文件的更改将被跳过。如果文件再次变小,将使用更新的文件"},"(Mega chars)":{def:"(Mega chars)",es:"(Millones de caracteres)",ja:"(メガ文字)",ko:"(메가 문자)",ru:"(Мега символов)",zh:"(百万字符)"},"(Not recommended) If set, credentials will be stored in the file.":{def:"(Not recommended) If set, credentials will be stored in the file.",es:"(No recomendado) Almacena credenciales en el archivo",ja:"(非推奨) 設定した場合、認証情報がファイルに保存されます。",ko:"(권장하지 않음) 설정한 경우 자격 증명이 파일에 저장됩니다.",ru:"(Not recommended) If set, credentials will be stored in the file.",zh:"(不建议)如果设置,凭据将存储在文件中"},"(Obsolete) Use an old adapter for compatibility":{def:"(Obsolete) Use an old adapter for compatibility",es:"(Obsoleto) Usar adaptador antiguo",ja:"(廃止済み)古いアダプターを互換性のために利用",ko:"(사용 중단) 호환성을 위해 이전 어댑터 사용",ru:"(Устарело) Использовать старый адаптер для совместимости",zh:"(已弃用)为兼容性使用旧适配器"},"Access Key":{def:"Access Key",es:"Clave de acceso",ja:"アクセスキー",ko:"액세스 키",ru:"Ключ доступа",zh:"访问密钥"},"Active Remote Configuration":{def:"Active Remote Configuration",ru:"Активная удалённая конфигурация",zh:"生效中的远程配置"},"Always prompt merge conflicts":{def:"Always prompt merge conflicts",es:"Siempre preguntar en conflictos",ja:"常に競合は手動で解決する",ko:"항상 병합 충돌 알림",ru:"Всегда запрашивать разрешение конфликтов слияния",zh:"始终提示合并冲突"},Analyse:{def:"Analyse",ru:"Анализировать",zh:"立即分析"},"Analyse database usage":{def:"Analyse database usage",ru:"Анализ использования базы данных",zh:"分析数据库使用情况"},"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.":{def:"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.",ru:"Analyse database usage and generate a TSV report for diagnosis yourself. You can paste the generated report with any spreadsheet you like.",zh:"分析数据库使用情况并生成 TSV 报告以供您自行诊断。您可以将生成的报告粘贴到您喜欢的任何电子表格中。"},"Apply Latest Change if Conflicting":{def:"Apply Latest Change if Conflicting",es:"Aplicar último cambio en conflictos",ja:"競合がある場合は最新の変更を適用する",ko:"충돌 시 최신 변경 사항 적용",ru:"Применить последнее изменение при конфликте",zh:"如果冲突则应用最新更改"},"Apply preset configuration":{def:"Apply preset configuration",es:"Aplicar configuración predefinida",ja:"プリセットを適用する",ko:"프리셋 구성 적용",ru:"Применить предустановленную конфигурацию",zh:"应用预设配置"},"Automatically Sync all files when opening Obsidian.":{def:"Automatically Sync all files when opening Obsidian.",es:"Sincronizar automáticamente todos los archivos al abrir Obsidian",ja:"Obsidian起動時にすべてのファイルを自動同期します。",ko:"Obsidian을 열 때 모든 파일을 자동으로 동기화합니다.",ru:"Автоматически синхронизировать все файлы при открытии Obsidian.",zh:"打开 Obsidian 时自动同步所有文件"},"Batch database update":{def:"Batch database update",es:"Actualización por lotes de BD",ja:"データベースのバッチ更新",ko:"일괄 데이터베이스 업데이트",ru:"Пакетное обновление базы данных",zh:"批量数据库更新"},"Batch limit":{def:"Batch limit",es:"Límite de lotes",ja:"バッチの上限",ko:"일괄 제한",ru:"Пакетный лимит",zh:"批量限制"},"Batch size":{def:"Batch size",es:"Tamaño de lote",ja:"バッチ容量",ko:"일괄 크기",ru:"Размер пакета",zh:"批量大小"},"Batch size of on-demand fetching":{def:"Batch size of on-demand fetching",es:"Tamaño de lote para obtención bajo demanda",ja:"オンデマンド取得のバッチサイズ",ko:"필요 시 가져올 청크 묶음 크기",ru:"Размер пакета при запросе по требованию",zh:"按需获取的批量大小"},"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.":{def:"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.",es:"Antes de v0.17.16 usábamos adaptador antiguo. Nuevo adaptador requiere reconstruir BD local. Desactive cuando pueda",ja:"v0.17.6までは古いアダプターをローカル用のデータベースに使用していましたが、現在は新しいアダプターを推奨しています。しかし、新しいアダプターに変更するにはローカルデータベースの再構築が必要です。有効のままにしておくと、リモートデータベースからフェッチする場合に、この設定を無効にするかの質問が表示されます。",ko:"v0.17.16 이전에는 로컬 데이터베이스에 이전 어댑터를 사용했습니다. 이제는 새로운 어댑터를 권장합니다. 하지만 로컬 데이터베이스 재구축이 필요합니다. 충분한 시간이 있을 때 이 토글을 비활성화해 주세요. 활성화된 상태로 두면 원격 데이터베이스에서 가져올 때도 이를 비활성화하라는 메시지가 나타납니다.",ru:"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.",zh:"在 v0.17.16 之前,我们使用旧适配器作为本地数据库。现在首选新适配器。但是,它需要重建本地数据库。请在有足够时间时禁用此开关。如果保持启用状态,并且在从远程数据库获取时,系统将要求您禁用此开关。"},"Bucket Name":{def:"Bucket Name",es:"Nombre del bucket",ja:"バケット名",ko:"버킷 이름",ru:"Имя бакета",zh:"存储桶名称"},Check:{def:"Check",ru:"Проверить",zh:"立即检查"},"cmdConfigSync.showCustomizationSync":{def:"Show Customization sync",es:"Mostrar sincronización de personalización",ja:"カスタマイズ同期を表示",ko:"사용자 설정 동기화 표시",ru:"Показать синхронизацию настроек",zh:"显示自定义同步"},"Comma separated `.gitignore, .dockerignore`":{def:"Comma separated `.gitignore, .dockerignore`",es:"Separados por comas: `.gitignore, .dockerignore`",ja:"カンマ区切り `.gitignore, .dockerignore`",ko:"쉼표로 구분된 `.gitignore, .dockerignore`",ru:"Через запятую `.gitignore, .dockerignore`",zh:"用逗号分隔,例如 `.gitignore, .dockerignore`"},"Compute revisions for chunks":{def:"Compute revisions for chunks",ja:"チャンクの修正(リビジョン)を計算",ko:"청크에 대한 리비전 계산",ru:"Вычислять ревизии для чанков",zh:"为 chunks 计算修订版本(以前的行为)"},"Copy Report to clipboard":{def:"Copy Report to clipboard",ru:"Копировать отчёт в буфер обмена",zh:"将报告复制到剪贴板"},"Data Compression":{def:"Data Compression",es:"Compresión de datos",ja:"データ圧縮",ko:"데이터 압축",ru:"Сжатие данных",zh:"数据压缩"},"Database Name":{def:"Database Name",es:"Nombre de la base de datos",ja:"データベース名",ko:"데이터베이스 이름",ru:"Имя базы данных",zh:"数据库名称"},"Database suffix":{def:"Database suffix",es:"Sufijo de base de datos",ja:"データベースの接尾辞(suffix)",ko:"데이터베이스 접미사",ru:"Суффикс базы данных",zh:"数据库后缀"},"Delay conflict resolution of inactive files":{def:"Delay conflict resolution of inactive files",es:"Retrasar resolución de conflictos en archivos inactivos",ja:"非アクティブなファイルは、競合解決を先送りする",ko:"비활성 파일의 충돌 해결 지연",ru:"Отложить разрешение конфликтов для неактивных файлов",zh:"推迟解决不活动文件"},"Delay merge conflict prompt for inactive files.":{def:"Delay merge conflict prompt for inactive files.",es:"Retrasar aviso de fusión para archivos inactivos",ja:"非アクティブなファイルの競合解決のプロンプトの表示を遅延させる",ko:"비활성 파일의 병합 충돌 프롬프트 지연.",ru:"Отложить запрос конфликта слияния для неактивных файлов.",zh:"推迟手动解决不活动文件"},"Delete old metadata of deleted files on start-up":{def:"Delete old metadata of deleted files on start-up",es:"Borrar metadatos viejos al iniciar",ja:"削除済みデータのメタデータをクリーンナップする",ko:"시작 시 삭제된 파일의 오래된 메타데이터 삭제",ru:"Удалять старые метаданные удалённых файлов при запуске",zh:"启动时删除已删除文件的旧元数据"},"Device name":{def:"Device name",es:"Nombre del dispositivo",ja:"デバイス名",ko:"기기 이름",ru:"Имя устройства",zh:"设备名称"},"dialog.yourLanguageAvailable":{def:"Self-hosted LiveSync had translations for your language, so the %{Display language} setting was enabled.\n\nNote: Not all messages are translated. We are waiting for your contributions!\nNote 2: If you create an Issue, **please revert to %{lang-def}** and then take screenshots, messages and logs. This can be done in the setting dialogue.\nMay you find it easy to use!",ja:"Self-hosted LiveSync に設定されている言語の翻訳がありましたので、%{Display Language}が適用されました。\n\n注意 全てのメッセージは翻訳されていません。あなたの貢献をお待ちしています!\nGithubにIssueを作成する際には、 %{Display Language} を一旦 %{lang-def} に戻してから、スクショやメッセージ、ログを収集してください。これは設定から変更できます。\n\n便利に使用できれば幸いです。",ko:"Self-hosted LiveSync에서 귀하의 언어로 번역을 제공하므로 %{Display language} 설정이 활성화되었습니다.\n\n참고: 모든 메시지가 번역되지는 않습니다. 귀하의 기여를 기다리고 있습니다!\n참고 2: 이슈를 생성하는 경우 **%{lang-def}로 되돌린 후** 스크린샷, 메시지, 로그를 가져와 주세요. 이는 설정 대화 상자에서 할 수 있습니다.\n간편하게 사용하실 수 있었으면 좋겠습니다!",ru:"Self-hosted LiveSync имеет переводы для вашего языка, поэтому была включена настройка языка Display language.\n\nПримечание: Не все сообщения переведены. Мы ждём ваших предложений!\nПримечание 2: При создании Issue, пожалуйста, вернитесь к lang-def, затем сделайте скриншоты, сообщения и логи. Это можно сделать в настройках.\nНадеемся, вам будет удобно использовать!",zh:"Self-hosted LiveSync已提供您语言的翻译,因此启用了%{Display language}\n\n注意并非所有消息都已翻译。我们期待您的贡献\n注意 2若您创建问题报告 **请切换回%{lang-def}** ,然后截取屏幕截图、消息和日志,此操作可在设置对话框中完成\n愿您使用顺心"},"dialog.yourLanguageAvailable.btnRevertToDefault":{def:"Keep %{lang-def}",ja:"Keep %{lang-def}",ko:"%{lang-def} 유지",ru:"Оставить lang-def",zh:"保持%{lang-def}"},"dialog.yourLanguageAvailable.Title":{def:" Translation is available!",ja:"翻訳が利用可能です!",ko:" 번역을 사용할 수 있습니다!",ru:"Доступен перевод!",zh:" 翻译可用!"},"Disables logging, only shows notifications. Please disable if you report an issue.":{def:"Disables logging, only shows notifications. Please disable if you report an issue.",es:"Desactiva registros, solo muestra notificaciones. Desactívelo si reporta un problema.",ja:"ログを無効にし、通知のみを表示します。Issueを報告する場合は無効にしてください。",ko:"로깅을 비활성화하고 알림만 표시합니다. 문제를 신고하는 경우 비활성화해 주세요.",ru:"Отключает логирование, показывает только уведомления. Пожалуйста, отключите при сообщении о проблеме.",zh:"禁用日志记录,仅显示通知。如果您报告问题,请禁用此选项"},"Display Language":{def:"Display Language",es:"Idioma de visualización",ja:"インターフェースの表示言語",ko:"표시 언어",ru:"Язык интерфейса",zh:"显示语言"},"Do not check configuration mismatch before replication":{def:"Do not check configuration mismatch before replication",es:"No verificar incompatibilidades antes de replicar",ja:"サーバーから同期する前に設定の不一致を確認しない",ko:"복제 전 구성 불일치 확인 안 함",ru:"Не проверять несовпадение конфигурации перед репликацией",zh:"在复制前不检查配置不匹配"},"Do not keep metadata of deleted files.":{def:"Do not keep metadata of deleted files.",es:"No conservar metadatos de archivos borrados",ja:"削除済みファイルのメタデータを保持しない",ko:"삭제된 파일의 메타데이터를 보관하지 않습니다.",ru:"Не хранить метаданные удалённых файлов.",zh:"不保留已删除文件的元数据 "},"Do not split chunks in the background":{def:"Do not split chunks in the background",es:"No dividir chunks en segundo plano",ja:"バックグラウンドでチャンクを分割しない",ko:"백그라운드에서 청크 분할 안 함",ru:"Не разделять чанки в фоновом режиме",zh:"不在后台分割 chunks"},"Do not use internal API":{def:"Do not use internal API",es:"No usar API interna",ja:"内部APIを使用しない",ko:"내부 API 사용 안 함",ru:"Не использовать внутренний API",zh:"不使用内部 API"},"Doctor.Button.DismissThisVersion":{def:"No, and do not ask again until the next release",ja:"いいえ、次のリリースまで再度確認しない",ko:"아니요, 다음 릴리스까지 다시 묻지 않음",ru:"Нет, и не спрашивать до следующего выпуска",zh:"拒绝,并且直到下个版本前不再询问"},"Doctor.Button.Fix":{def:"Fix it",ja:"修正する",ko:"수정",ru:"Исправить",zh:"修复"},"Doctor.Button.FixButNoRebuild":{def:"Fix it but no rebuild",ja:"修正するが再構築はしない",ko:"수정하지만 재구축하지 않음",ru:"Исправить без перестроения",zh:"修复但不重建"},"Doctor.Button.No":{def:"No",ja:"いいえ",ko:"아니요",ru:"Нет",zh:"拒绝"},"Doctor.Button.Skip":{def:"Leave it as is",ja:"そのままにする",ko:"그대로 두기",ru:"Оставить как есть",zh:"保持不变"},"Doctor.Button.Yes":{def:"Yes",ja:"はい",ko:"예",ru:"Да",zh:"确定"},"Doctor.Dialogue.Main":{def:"Hi! Config Doctor has been activated because of ${activateReason}!\nAnd, unfortunately some configurations were detected as potential problems.\nPlease be assured. Let's solve them one by one.\n\nTo let you know ahead of time, we will ask you about the following items.\n\n${issues}\n\nShall we get started?",ja:"こんにちは!${activateReason}のため、設定診断ツールが起動しました!\n残念ながら、いくつかの設定が潜在的な問題として検出されました。\nご安心ください。一つずつ解決していきましょう。\n\n事前にお知らせしますと、以下の項目についてお尋ねします。\n\n${issues}\n\n始めていいですか",ko:"안녕하세요! ${activateReason} 로 인해 구성 진단 마법사가 활성화되었습니다!\n그리고 일부 구성이 잠재적인 문제로 감지되었습니다.\n안심하세요. 하나씩 해결해 봅시다.\n\n대상 항목은 다음과 같습니다.\n\n${issues}\n\n시작하시겠습니까?",ru:"Привет! Диагностика настроек активирована из-за activateReason!\nК сожалению, некоторые настройки были обнаружены как потенциальные проблемы.\nНе волнуйтесь. Давайте решим их по очереди.\n\nСообщаем вам заранее, мы спросим о следующих пунктах.\n\nissues\n\nНачнём?",zh:"您好!配置医生已根据您的要求启动(感谢您)!!遗憾的是,检测到部分配置存在潜在问题。请放心,我们将逐一解决这些问题。\n\n提前告知您,我们将就以下事项进行确认:\n\n为数据块计算修订版本(此前行为)\n增强块大小\n\n我们开始处理吗?"},"Doctor.Dialogue.MainFix":{def:"\n## ${name}\n\n| Current | Ideal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Recommendation Level:** ${level}\n\n### Why this has been detected?\n\n${reason}\n\n${note}\n\nFix this to the ideal value?",ja:"\n## ${name}\n\n| 現在の値 | 理想値 |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**推奨レベル:** ${level}\n\n### 診断理由?\n\n${reason}\n\n${note}\n\nこれを理想値に修正しますか",ko:"**구성 이름:** `${name}`\n**현재 값:** `${current}`, **이상적인 값:** `${ideal}`\n**권장 수준:** ${level}\n**왜 이것이 감지되었나요?**\n${reason}\n\n\n${note}\n\n이상적인 값으로 수정하시겠습니까?",ru:"name\n\n| Текущее | Идеальное |\n|:---:|:---:|\n| current | ideal |\n\n**Уровень рекомендации:** level\n\n### Почему это было обнаружено?\n\nreason\n\nnote\n\nИсправить на идеальное значение?",zh:"\n## ${name}\n\n| Current | Ideal |\n|:---:|:---:|\n| ${current} | ${ideal} |\n\n**Recommendation Level:** ${level}\n\n### Why this has been detected?\n\n${reason}\n\n${note}\n\nFix this to the ideal value?"},"Doctor.Dialogue.Title":{def:"Self-hosted LiveSync Config Doctor",ja:"Self-hosted LiveSync 設定診断ツール",ko:"Self-hosted LiveSync 구성 진단 마법사",ru:"Диагностика Self-hosted LiveSync",zh:"Self-hosted LiveSync 配置诊断"},"Doctor.Dialogue.TitleAlmostDone":{def:"Almost done!",ja:"あと少しです!",ko:"거의 완료되었습니다!",ru:"Почти готово!",zh:"全部完成!"},"Doctor.Dialogue.TitleFix":{def:"Fix issue ${current}/${total}",ja:"問題の修正 ${current}/${total}",ko:"문제 해결 ${current}/${total}",ru:"Исправление проблемы current/total",zh:"修复问题 ${current}/${total}"},"Doctor.Level.Must":{def:"Must",ja:"必須",ko:"필수",ru:"Обязательно",zh:"必须"},"Doctor.Level.Necessary":{def:"Necessary",ja:"必要",ko:"필수",ru:"Необходимо",zh:"必要"},"Doctor.Level.Optional":{def:"Optional",ja:"任意",ko:"선택사항",ru:"Опционально",zh:"可选"},"Doctor.Level.Recommended":{def:"Recommended",ja:"推奨",ko:"권장",ru:"Рекомендуется",zh:"推荐"},"Doctor.Message.NoIssues":{def:"No issues detected!",ja:"問題は検出されませんでした!",ko:"문제가 감지되지 않았습니다!",ru:"Проблем не обнаружено!",zh:"未发现问题!"},"Doctor.Message.RebuildLocalRequired":{def:"Attention! A local database rebuild is required to apply this!",ja:"注意!これを適用するにはローカルデータベースの再構築が必要です!",ko:"주의! 이를 적용하려면 로컬 데이터베이스 재구축이 필요합니다!",ru:"Внимание! Для применения требуется перестроение локальной базы данных!",zh:"注意!需要重建本地数据库以应用此项!"},"Doctor.Message.RebuildRequired":{def:"Attention! A rebuild is required to apply this!",ja:"注意!これを適用するには再構築が必要です!",ko:"주의! 이를 적용하려면 재구축이 필요합니다!",ru:"Внимание! Для применения требуется перестроение!",zh:"注意!需要重建才能应用此项!"},"Doctor.Message.SomeSkipped":{def:"We left some issues as is. Shall I ask you again on next startup?",ja:"いくつかの問題をそのままにしました。次回起動時に再度確認しますか?",ko:"일부 문제를 그대로 두었습니다. 다음 시작 시 다시 질문할까요?",ru:"Некоторые проблемы оставлены как есть. Спросить снова при следующем запуске?",zh:"我们将某些问题留给了以后处理。是否要在下次启动时再次询问您?"},"Doctor.RULES.E2EE_V02500.REASON":{def:"The End-to-End Encryption has got now more robust and faster. Also because, the previous E2EE was found to be compromised in a re-conducted code review. It should be applied as soon as possible. Really apologises for your inconvenience. And, this setting is not forward compatible. All synchronised devices must be updated to v0.25.0 or higher. Rebuilds are not required and will be converted from the new transfer to the new format, However, it is recommended to rebuild whenever possible.",ja:"エンドツーエンド暗号化がより堅牢で高速になりました。また、以前のE2EEは再コードレビューにより脆弱性が発見されました。できるだけ早く適用することをお勧めします。ご不便をおかけして申し訳ありません。また、この設定は下位互換性がありません。すべての同期デバイスをv0.25.0以降にアップデートする必要があります。再構築は必須ではなく、新しい転送から新しいフォーマットに変換されますが、可能な限り再構築をお勧めします。",ru:"Сквозное шифрование стало более надёжным и быстрым. Предыдущее E2EE было скомпрометировано. Следует применить как можно скорее.",zh:"The End-to-End Encryption has got now more robust and faster. Also because, the previous E2EE was found to be compromised in a re-conducted code review. It should be applied as soon as possible. Really apologises for your inconvenience. And, this setting is not forward compatible. All synchronised devices must be updated to v0.25.0 or higher. Rebuilds are not required and will be converted from the new transfer to the new format, However, it is recommended to rebuild whenever possible."},"Enable advanced features":{def:"Enable advanced features",es:"Habilitar características avanzadas",ja:"高度な機能を有効にする",ko:"고급 기능 활성화",ru:"Включить расширенные функции",zh:"启用高级功能"},"Enable customization sync":{def:"Enable customization sync",es:"Habilitar sincronización de personalización",ja:"カスタマイズ同期を有効",ko:"사용자 설정 동기화 활성화",ru:"Включить синхронизацию настроек",zh:"启用自定义同步"},"Enable Developers' Debug Tools.":{def:"Enable Developers' Debug Tools.",es:"Habilitar herramientas de depuración",ja:"開発者用デバッグツールを有効にする",ko:"개발자 디버그 도구 활성화",ru:"Включить инструменты разработчика.",zh:"启用开发者调试工具 "},"Enable edge case treatment features":{def:"Enable edge case treatment features",es:"Habilitar manejo de casos límite",ja:"エッジケース対応機能を有効にする",ko:"특수 사례 처리 기능 활성화",ru:"Включить функции обработки граничных случаев",zh:"启用边缘情况处理功能"},"Enable poweruser features":{def:"Enable poweruser features",es:"Habilitar funciones para usuarios avanzados",ja:"エキスパート機能を有効にする",ko:"파워 유저 기능 활성화",ru:"Включить функции для опытных пользователей",zh:"启用高级用户功能"},"Enable this if your Object Storage doesn't support CORS":{def:"Enable this if your Object Storage doesn't support CORS",es:"Habilitar si su almacenamiento no soporta CORS",ja:"オブジェクトストレージがCORSをサポートしていない場合は有効にしてください",ko:"객체 스토리지가 CORS를 지원하지 않는 경우 활성화하세요",ru:"Включите, если ваше объектное хранилище не поддерживает CORS",zh:"如果您的对象存储不支持 CORS,请启用此功能 "},"Enable this option to automatically apply the most recent change to documents even when it conflicts":{def:"Enable this option to automatically apply the most recent change to documents even when it conflicts",es:"Aplicar cambios recientes automáticamente aunque generen conflictos",ja:"このオプションを有効にすると、競合があっても最新の変更を自動的にドキュメントに適用します",ko:"이 옵션을 활성화하면 충돌이 있어도 문서에 가장 최근 변경 사항을 자동으로 적용합니다",ru:"Включите эту опцию для автоматического применения последних изменений к документам даже при конфликте",zh:"启用此选项可在文档冲突时自动应用最新的更改"},"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.":{def:"Encrypt contents on the remote database. If you use the plugin's synchronization feature, enabling this is recommended.",es:"Cifrar contenido en la base de datos remota. Se recomienda habilitar si usa la sincronización del plugin.",ja:"リモートデータベースの暗号化(オンにすることを推奨)",ko:"원격 데이터베이스의 내용을 암호화합니다. 플러그인의 동기화 기능을 사용하는 경우 활성화를 권장합니다.",ru:"Шифровать содержимое на удалённой базе данных. Рекомендуется включить при использовании функции синхронизации плагина.",zh:"加密远程数据库中的内容。如果您使用插件的同步功能,则建议启用此功能 "},"Encrypting sensitive configuration items":{def:"Encrypting sensitive configuration items",es:"Cifrando elementos sensibles",ja:"機密性の高い設定項目の暗号化",ko:"민감한 구성 항목 암호화",ru:"Шифрование конфиденциальных настроек",zh:"加密敏感配置项"},"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.":{def:"Encryption phassphrase. If changed, you should overwrite the server's database with the new (encrypted) files.",es:"Frase de cifrado. Si la cambia, sobrescriba la base del servidor con los nuevos archivos cifrados.",ja:"暗号化パスフレーズ。変更した場合、新しい(暗号化された)ファイルでサーバーのデータベースを上書きする必要があります。",ko:"패스프레이즈는 암호화에 사용되는 긴 암호 문구입니다. 변경한 경우, 암호화된 새 파일로 서버의 데이터베이스를 덮어써야 합니다.",ru:"Парольная фраза шифрования. При изменении нужно перезаписать базу данных сервера новыми (зашифрованными) файлами.",zh:"加密密码。如果更改,您应该用新的(加密的)文件覆盖服务器的数据库 "},"End-to-End Encryption":{def:"End-to-End Encryption",es:"Cifrado de extremo a extremo",ja:"E2E暗号化",ko:"종단간 암호화",ru:"Сквозное шифрование",zh:"端到端加密"},"Endpoint URL":{def:"Endpoint URL",es:"URL del endpoint",ja:"エンドポイントURL",ko:"엔드포인트 URL",ru:"URL конечной точки",zh:"终端URL"},"Enhance chunk size":{def:"Enhance chunk size",es:"Mejorar tamaño de chunks",ja:"チャンクサイズを最適化する",ko:"청크 크기 향상",ru:"Улучшить размер чанка",zh:"增大块大小"},"Fetch chunks on demand":{def:"Fetch chunks on demand",es:"Obtener chunks bajo demanda",ja:"ユーザーのタイミングでチャンクの更新を確認する",ko:"필요 시 청크 원격 가져오기",ru:"Загружать чанки по требованию",zh:"按需获取块"},"Fetch database with previous behaviour":{def:"Fetch database with previous behaviour",es:"Obtener BD con comportamiento anterior",ja:"以前の動作でデータベースを取得",ko:"이전 동작으로 데이터베이스 가져오기",ru:"Загрузить базу данных с предыдущим поведением",zh:"使用以前的行为获取数据库"},Filename:{def:"Filename",es:"Nombre de archivo",ja:"ファイル名",ko:"파일명",ru:"Имя файла",zh:"文件名"},"Forces the file to be synced when opened.":{def:"Forces the file to be synced when opened.",es:"Forzar sincronización al abrir archivo",ja:"ファイルを開いたときに強制的に同期します。",ko:"파일을 열 때 강제로 동기화합니다.",ru:"Принудительно синхронизировать файл при открытии.",zh:"打开文件时强制同步该文件 "},"Handle files as Case-Sensitive":{def:"Handle files as Case-Sensitive",es:"Manejar archivos como sensibles a mayúsculas",ja:"ファイルの大文字・小文字を区別する",ko:"파일을 대소문자 구분으로 처리",ru:"Обрабатывать файлы с учётом регистра",zh:"将文件视为区分大小写"},"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).":{def:"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour).",es:"Si se desactiva, chunks se dividen en hilo UI (comportamiento anterior)",ja:"無効トグルにすると、チャンクはUIスレッドで分割されます以前の動作。",ko:"비활성화(토글)되면 청크는 UI 스레드에서 분할됩니다 (이전 동작).",ru:"Если отключено, чанки будут разделяться в основном потоке.",zh:"如果禁用(切换),chunks 将在 UI 线程上分割(以前的行为)"},"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.":{def:"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.",es:"Habilita sincronización eficiente por archivo. Requiere migración y actualizar todos dispositivos a v0.23.18. Pierde compatibilidad con versiones antiguas",ja:"有効にすると、ファイルごとの効率的なカスタマイズ同期が使用されます。有効化時に小規模な移行が必要です。また、すべてのデバイスをv0.23.18にアップデートする必要があります。一度有効にすると、古いバージョンとの互換性がなくなります。",ko:"활성화하면 파일별 효율적인 사용자 설정 동기화가 사용됩니다. 이를 활성화할 때 소규모 데이터 구조 전환이 필요합니다. 모든 기기를 v0.23.18로 업데이트해야 합니다. 이를 활성화하면 이전 버전과의 호환성이 사라집니다.",ru:"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this. And all devices should be updated to v0.23.18. Once we enabled this, we lost a compatibility with old versions.",zh:"如果启用,将使用基于文件的、高效的自定义同步。启用此功能需要进行一次小的迁移。所有设备都应更新到 v0.23.18。一旦启用此功能,我们将失去与旧版本的兼容性"},"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.":{def:"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker.",es:"Divide chunks en máximo 100 ítems. Menos eficiente en deduplicación",ja:"有効にすると、チャンクは最大100項目に分割されます。ただし、重複除去の精度は落ちます。",ko:"활성화하면 청크는 최대 100개 항목으로 분할됩니다. 하지만 중복 제거 기능이 약간 약해집니다.",ru:"Если включено, чанки будут разделены не более чем на 100 элементов.",zh:"如果启用,数据块将被分割成不超过 100 项。但是,去重效果会稍弱"},"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.":{def:"If enabled, newly created chunks are temporarily kept within the document, and graduated to become independent chunks once stabilised.",es:"Chunks nuevos se mantienen temporalmente en el documento hasta estabilizarse",ja:"有効にすると、新しく作成されたチャンクはドキュメント内に一時的に保持され、安定したら独立したチャンクになります。",ko:"활성화하면 새로 생성된 변경 기록(청크)은 문서 안에 임시로 보관되며, 일정 조건을 만족하면 자동으로 문서 밖으로 분리되어 저장됩니다.",ru:"Если включено, вновь созданные чанки временно хранятся в документе.",zh:"如果启用,新创建的数据块将暂时保留在文档中,并在稳定后成为独立数据块"},"If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.":{def:"If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown.",ru:"Если включено, значок будет показан внутри статуса.",zh:"如果启用,状态栏内将显示 ⛔ 图标,而非文件警告横幅,不会显示任何详细信息。"},"If enabled, the file under 1kb will be processed in the UI thread.":{def:"If enabled, the file under 1kb will be processed in the UI thread.",es:"Archivos <1kb se procesan en hilo UI",ja:"有効にすると、1kb未満のファイルはUIスレッドで処理されます。",ko:"활성화하면 1kb 미만의 파일은 UI 스레드에서 처리됩니다.",ru:"Если включено, файлы меньше 1КБ будут обрабатываться в основном потоке.",zh:"如果启用,小于 1kb 的文件将在 UI 线程中处理"},"If enabled, the notification of hidden files change will be suppressed.":{def:"If enabled, the notification of hidden files change will be suppressed.",es:"Si se habilita, se suprimirá la notificación de cambios en archivos ocultos.",ja:"有効にすると、隠しファイルの変更通知が抑制されます。",ko:"활성화하면 숨겨진 파일 변경 알림이 억제됩니다.",ru:"Если включено, уведомление об изменении скрытых файлов будет подавлено.",zh:"如果启用,将不再通知隐藏文件被更改"},"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)":{def:"If this enabled, all chunks will be stored with the revision made from its content. (Previous behaviour)",es:"Si se habilita, todos los chunks se almacenan con la revisión hecha desde su contenido. (comportamiento anterior)",ja:"有効にすると、すべてのチャンクはコンテンツから作成されたリビジョンと共に保存されます(以前の動作)。",ko:"이 옵션이 활성화되면 모든 청크는 콘텐츠에서 생성된 리비전과 함께 저장됩니다. (이전 동작)",ru:"Если включено, все чанки будут храниться с ревизией из содержимого.",zh:"如果启用,所有 chunks 将使用根据其内容生成的修订版本存储(以前的行为)"},"If this enabled, All files are handled as case-Sensitive (Previous behaviour).":{def:"If this enabled, All files are handled as case-Sensitive (Previous behaviour).",es:"Si se habilita, todos los archivos se manejan como sensibles a mayúsculas (comportamiento anterior)",ja:"有効にすると、すべてのファイルは大文字小文字を区別して処理されます(以前の動作)。",ko:"이 옵션이 활성화되면 모든 파일이 대소문자를 구분하여 처리됩니다 (이전 동작).",ru:"Если включено, все файлы обрабатываются с учётом регистра.",zh:"如果启用,所有文件都将视为区分大小写(以前的行为)"},"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.":{def:"If this enabled, chunks will be split into semantically meaningful segments. Not all platforms support this feature.",es:"Divide chunks en segmentos semánticos. No todos los sistemas lo soportan",ja:"有効にすると、チャンクは意味的に有意なセグメントに分割されます。すべてのプラットフォームがこの機能をサポートしているわけではありません。",ko:"이 옵션을 활성화하면 청크가 문단이나 의미 단위로 나뉘어 저장됩니다. 단, 이 기능은 일부 플랫폼에서는 지원되지 않을 수 있습니다.",ru:"Если включено, чанки будут разделены на семантически значимые сегменты.",zh:"如果启用此功能,数据块将被分割成具有语义意义的段落。并非所有平台都支持此功能"},"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.":{def:"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.",es:"Saltar cambios en archivos locales que coincidan con ignore files. Cambios remotos usan ignore files locales",ja:"これを設定すると、除外ファイルに一致するローカルファイルの変更はスキップされます。リモートの変更はローカルの無視ファイルを使用して判定されます。",ko:"이 옵션을 활성화하면, 제외 규칙 파일에 일치하는 로컬 파일의 변경 사항은 건너뜁니다. 원격 변경 여부 또한 로컬의 제외 규칙 파일에 따라 판단됩니다.",ru:"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files.",zh:"如果设置了此项,与忽略文件匹配的本地文件的更改将被跳过。远程更改使用本地忽略文件确定"},"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.":{def:"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.",es:"Mantiene conexión 60s. Si no hay cambios, reinicia socket. Útil con proxies limitantes",ja:"このオプションを有効にすると、PouchDBは接続を60秒間保持し、その間に通信がない場合、一度接続を閉じて再接続します。接続を無期限に保持する代わりにこの動作を行います。プロキシ(Cloudflareなど)がリクエストの持続時間を制限している場合に有用ですが、リソース使用量が増加する可能性があります。",ko:"이 옵션이 활성화되면 PouchDB는 연결을 더이상 무한히 열어두지 않고 60초 동안 유지합니다. 그 시간 내에 변경 사항이 없으면 소켓을 닫고 다시 엽니다. 프록시가 요청 지속 시간을 제한할 때 유용하지만 리소스 사용량이 증가할 수 있습니다.",ru:"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage.",zh:"如果启用此选项,PouchDB 将保持连接打开 60 秒,如果在此时间内没有更改到达,则关闭并重新打开套接字,而不是无限期保持打开。当代理限制请求持续时间时有用,但可能会增加资源使用ß"},"Ignore files":{def:"Ignore files",es:"Archivos a ignorar",ja:"除外ファイル",ko:"제외 규칙 파일",ru:"Файлы для игнорирования",zh:"忽略文件"},"Incubate Chunks in Document":{def:"Incubate Chunks in Document",es:"Incubar chunks en documento",ja:"ドキュメント内でチャンクを一時保管する",ko:"문서 내 변경 기록 임시 보관",ru:"Инкубировать чанки в документе",zh:"在文档中孵化块"},"Interval (sec)":{def:"Interval (sec)",es:"Intervalo (segundos)",ja:"秒",ko:"간격 (초)",ru:"Интервал (сек)",zh:"间隔(秒)"},"K.exp":{def:"Experimental",ja:"試験機能",ko:"실험 기능",ru:"Экспериментальная",zh:"实验性"},"K.long_p2p_sync":{def:"%{title_p2p_sync}",ja:"%{title_p2p_sync} (%{exp})",ko:"%{title_p2p_sync} (%{exp})",ru:"title_p2p_sync",zh:"%{title_p2p_sync} (%{exp})"},"K.P2P":{def:"%{Peer}-to-%{Peer}",ja:"%{Peer}-to-%{Peer}",ko:"%{Peer}-to-%{Peer}",ru:"Peer-к-Peer",zh:"%{Peer}-to-%{Peer}"},"K.Peer":{def:"Peer",ja:"Peer",ko:"피어",ru:"Устройство",zh:"Peer"},"K.ScanCustomization":{def:"Scan customization",ja:"Scan customization",ko:"사용자 설정 검색",ru:"Scan customization",zh:"扫描自定义"},"K.short_p2p_sync":{def:"P2P Sync",ja:"P2P Sync (%{exp})",ko:"P2P 동기화 (%{exp})",ru:"P2P Синхр.",zh:"P2P同步(%{exp})"},"K.title_p2p_sync":{def:"Peer-to-Peer Sync",ja:"Peer-to-Peer Sync",ko:"피어 투 피어(P2P) 동기화",ru:"Синхронизация между устройствами",zh:"Peer-to-Peer同步"},"Keep empty folder":{def:"Keep empty folder",es:"Mantener carpetas vacías",ja:"空フォルダの維持",ko:"빈 폴더 유지",ru:"Сохранять пустые папки",zh:"保留空文件夹"},lang_def:{def:"Default",ja:"Default",ko:"Default",ru:"По умолчанию",zh:"Default"},"lang-de":{def:"Deutsche",es:"Alemán",ja:"Deutsche",ko:"Deutsche",ru:"Deutsch",zh:"Deutsche"},"lang-def":{def:"%{lang_def}",ja:"%{lang_def}",ko:"%{lang_def}",ru:"lang_def",zh:"%{lang_def}"},"lang-es":{def:"Español",es:"Español",ja:"Español",ko:"Español",ru:"Español",zh:"Español"},"lang-ja":{def:"日本語",es:"Japonés",ja:"日本語",ko:"日本語",ru:"日本語",zh:"日本語"},"lang-ko":{def:"한국어",ja:"한국어",ko:"한국어",ru:"한국어",zh:"한국어"},"lang-ru":{def:"Русский",es:"Ruso",ja:"Русский",ko:"Русский",ru:"Русский",zh:"Русский"},"lang-zh":{def:"简体中文",es:"Chino simplificado",ja:"简体中文",ko:"简体中文",ru:"简体中文",zh:"简体中文"},"lang-zh-tw":{def:"繁體中文",es:"Chino tradicional",ja:"繁體中文",ko:"繁體中文",ru:"繁體中文",zh:"繁體中文"},"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.":{def:"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured.",es:"LiveSync no puede manejar múltiples bóvedas con mismo nombre sin prefijo. Se configura automáticamente",ja:"LiveSyncは、接頭辞プレフィックスのない同名の保管庫(Vault)を扱うことができません。これは自動的に設定されます。",ko:"LiveSync는 서로 다른 접두사 없이 동일한 이름을 가진 여러 볼트를 처리할 수 없습니다. 이는 자동으로 구성되어야 합니다.",ru:"LiveSync не может обработать несколько хранилищ с одинаковым именем без разных префиксов.",zh:"LiveSync 无法处理具有相同名称但没有不同前缀的多个库。这应该自动配置"},"liveSyncReplicator.beforeLiveSync":{def:"Before LiveSync, start OneShot once...",es:"Antes de LiveSync, inicia OneShot...",ja:"LiveSyncの前に、まずOneShotを開始します...",ko:"LiveSync 전에 OneShot을 먼저 시작합니다...",ru:"Перед LiveSync запускаем OneShot...",zh:"在LiveSync前,先启动OneShot一次..."},"liveSyncReplicator.cantReplicateLowerValue":{def:"We can't replicate more lower value.",es:"No podemos replicar un valor más bajo.",ja:"これ以上低い値ではレプリケーション(複製)できません。",ko:"더 낮은 값으로 복제할 수 없습니다.",ru:"Нельзя реплицировать с меньшим значением.",zh:"我们无法复制更小的值"},"liveSyncReplicator.checkingLastSyncPoint":{def:"Looking for the point last synchronized point.",es:"Buscando el último punto sincronizado.",ja:"最後に同期したポイントを探しています。",ko:"마지막으로 동기화된 지점을 찾고 있습니다.",ru:"Поиск последней точки синхронизации.",zh:"查找上次同步点"},"liveSyncReplicator.couldNotConnectTo":{def:"Could not connect to ${uri} : ${name}\n(${db})",es:"No se pudo conectar a ${uri} : ${name} \n(${db})",ja:"${uri} : ${name}に接続できませんでした\n(${db})",ko:"${uri}에 연결할 수 없습니다: ${name} \n(${db})",ru:"Не удалось подключиться к uri : name\n(db)",zh:"无法连接到 ${uri} : ${name}\n(${db})"},"liveSyncReplicator.couldNotConnectToRemoteDb":{def:"Could not connect to remote database: ${d}",es:"No se pudo conectar a base de datos remota: ${d}",ja:"リモートデータベースに接続できませんでした: ${d}",ko:"원격 데이터베이스에 연결할 수 없습니다: ${d}",ru:"Не удалось подключиться к удалённой базе данных: d",zh:"无法连接到远程数据库:${d}"},"liveSyncReplicator.couldNotConnectToServer":{def:"Could not connect to server.",es:"No se pudo conectar al servidor.",ja:"サーバーに接続できませんでした。",ko:"서버에 연결할 수 없습니다.",ru:"Не удалось подключиться к серверу.",zh:"无法连接到服务器"},"liveSyncReplicator.couldNotConnectToURI":{def:"Could not connect to ${uri}:${dbRet}",es:"No se pudo conectar a ${uri}:${dbRet}",ja:"${uri}に接続できませんでした: ${dbRet}",ko:"${uri}에 연결할 수 없습니다: ${dbRet}",ru:"Не удалось подключиться к uri:dbRet",zh:"无法连接到 ${uri}:${dbRet}"},"liveSyncReplicator.couldNotMarkResolveRemoteDb":{def:"Could not mark resolve remote database.",es:"No se pudo marcar como resuelta la base de datos remota.",ja:"リモートデータベースを解決済みとしてマークできませんでした。",ko:"원격 데이터베이스를 해결됨으로 표시할 수 없습니다.",ru:"Не удалось отметить удалённую базу данных как разрешённую.",zh:"无法标记并解决远程数据库"},"liveSyncReplicator.liveSyncBegin":{def:"LiveSync begin...",es:"Inicio de LiveSync...",ja:"LiveSyncを開始...",ko:"LiveSync 시작...",ru:"Начало LiveSync...",zh:"LiveSync 开始..."},"liveSyncReplicator.lockRemoteDb":{def:"Lock remote database to prevent data corruption",es:"Bloquear base de datos remota para prevenir corrupción de datos",ja:"データ破損を防ぐためリモートデータベースをロック",ko:"데이터 손상을 방지하기 위해 원격 데이터베이스를 잠급니다",ru:"Блокировка удалённой базы данных для предотвращения повреждения данных",zh:"锁定远程数据库以防止数据损坏"},"liveSyncReplicator.markDeviceResolved":{def:"Mark this device as 'resolved'.",es:"Marcar este dispositivo como 'resuelto'.",ja:"このデバイスを『解決済み』としてマーク。",ko:"이 기기를 '해결됨'으로 표시합니다.",ru:"Отметить это устройство как «разрешённое».",zh:"将此设备标记为“已解决”"},"liveSyncReplicator.oneShotSyncBegin":{def:"OneShot Sync begin... (${syncMode})",es:"Inicio de sincronización OneShot... (${syncMode})",ja:"OneShot同期を開始... (${syncMode})",ko:"OneShot 동기화 시작... (${syncMode})",ru:"Начало OneShot синхронизации... (syncMode)",zh:"OneShot同步开始...(${syncMode})"},"liveSyncReplicator.remoteDbCorrupted":{def:"Remote database is newer or corrupted, make sure to latest version of self-hosted-livesync installed",es:"La base de datos remota es más nueva o está dañada, asegúrese de tener la última versión de self-hosted-livesync instalada",ja:"リモートデータベースが新しいか破損しています。self-hosted-livesyncの最新バージョンがインストールされていることを確認してください",ko:"원격 데이터베이스가 더 최신이거나 손상되었습니다. 최신 버전의 self-hosted-livesync가 설치되어 있는지 확인하세요",ru:"Удалённая база данных новее или повреждена, убедитесь, что установлена последняя версия self-hosted-livesync",zh:"远程数据库较新或已损坏,请确保已安装最新版本的self-hosted-livesync"},"liveSyncReplicator.remoteDbCreatedOrConnected":{def:"Remote Database Created or Connected",es:"Base de datos remota creada o conectada",ja:"リモートデータベースが作成または接続されました",ko:"원격 데이터베이스가 생성되거나 연결되었습니다",ru:"Удалённая база данных создана или подключена",zh:"远程数据库已创建或连接"},"liveSyncReplicator.remoteDbDestroyed":{def:"Remote Database Destroyed",es:"Base de datos remota destruida",ja:"リモートデータベースが削除されました",ko:"원격 데이터베이스가 삭제되었습니다",ru:"Удалённая база данных уничтожена",zh:"远程数据库已销毁"},"liveSyncReplicator.remoteDbDestroyError":{def:"Something happened on Remote Database Destroy:",es:"Algo ocurrió al destruir base de datos remota:",ja:"リモートデータベースの削除中に問題が発生しました:",ko:"원격 데이터베이스 삭제 중 오류가 발생했습니다:",ru:"Произошла ошибка при уничтожении удалённой базы данных:",zh:"远程数据库销毁时发生错误:"},"liveSyncReplicator.remoteDbMarkedResolved":{def:"Remote database has been marked resolved.",es:"Base de datos remota marcada como resuelta.",ja:"リモートデータベースが解決済みとしてマークされました。",ko:"원격 데이터베이스가 해결됨으로 표시되었습니다.",ru:"Удалённая база данных отмечена как разрешённая.",zh:"远程数据库已标记为已解决"},"liveSyncReplicator.replicationClosed":{def:"Replication closed",es:"Replicación cerrada",ja:"レプリケーション(複製)が終了しました",ko:"복제가 종료되었습니다",ru:"Репликация закрыта",zh:"同步已关闭"},"liveSyncReplicator.replicationInProgress":{def:"Replication is already in progress",es:"Replicación en curso",ja:"レプリケーション(複製)は既に進行中です",ko:"복제가 이미 진행 중입니다",ru:"Репликация уже выполняется",zh:"同步正在进行中"},"liveSyncReplicator.retryLowerBatchSize":{def:"Retry with lower batch size:${batch_size}/${batches_limit}",es:"Reintentar con tamaño de lote más bajo:${batch_size}/${batches_limit}",ja:"より小さいバッチサイズで再試行: ${batch_size}/${batches_limit}",ko:"더 낮은 일괄 크기로 재시도: ${batch_size}/${batches_limit}",ru:"Повтор с меньшим размером пакета: batch_size/batches_limit",zh:"使用更小的批量大小重试:${batch_size}/${batches_limit}"},"liveSyncReplicator.unlockRemoteDb":{def:"Unlock remote database to prevent data corruption",es:"Desbloquear base de datos remota para prevenir corrupción de datos",ja:"データ破損を防ぐためリモートデータベースをアンロック",ko:"데이터 손상을 방지하기 위해 원격 데이터베이스를 잠금 해제합니다",ru:"Разблокировка удалённой базы данных для предотвращения повреждения данных",zh:"解锁远程数据库以防止数据损坏"},"liveSyncSetting.errorNoSuchSettingItem":{def:"No such setting item: ${key}",es:"No existe el ajuste: ${key}",ja:"その設定項目は存在しません: ${key}",ko:"해당 설정 항목이 없습니다: ${key}",ru:"Такого параметра настройки не существует: key",zh:"没有此设置项:${key}"},"liveSyncSetting.originalValue":{def:"Original: ${value}",es:"Original: ${value}",ja:"元の値: ${value}",ko:"원본: ${value}",ru:"Оригинал: value",zh:"原始值:${value}"},"liveSyncSetting.valueShouldBeInRange":{def:"The value should ${min} < value < ${max}",es:"El valor debe estar entre ${min} y ${max}",ja:"値は ${min} < 値 < ${max} の範囲である必要があります",ko:"값은 ${min} < 값 < ${max} 범위에 있어야 합니다",ru:"Значение должно быть min < значение < max",zh:"值应该在 ${min} < value < ${max} 之间"},"liveSyncSettings.btnApply":{def:"Apply",es:"Aplicar",ja:"適用",ko:"적용",ru:"Применить",zh:"应用"},"logPane.autoScroll":{def:"Auto scroll",es:"Autodesplazamiento",ja:"自動スクロール",ko:"자동 스크롤",ru:"Автопрокрутка",zh:"自动滚动"},"logPane.logWindowOpened":{def:"Log window opened",es:"Ventana de registro abierta",ja:"ログウィンドウが開かれました",ko:"로그 창이 열렸습니다",ru:"Окно лога открыто",zh:"日志窗口已打开"},"logPane.pause":{def:"Pause",es:"Pausar",ja:"一時停止",ko:"일시 중단",ru:"Пауза",zh:"暂停"},"logPane.title":{def:"Self-hosted LiveSync Log",es:"Registro de Self-hosted LiveSync",ja:"Self-hosted LiveSync ログ",ko:"Self-hosted LiveSync 로그",ru:"Лог Self-hosted LiveSync",zh:"Self-hosted LiveSync 日志"},"logPane.wrap":{def:"Wrap",es:"Ajustar",ja:"折り返し",ko:"줄 바꿈",ru:"Перенос",zh:"自动换行"},"Maximum delay for batch database updating":{def:"Maximum delay for batch database updating",es:"Retraso máximo para actualización por lotes",ja:"バッチデータベース更新の最大遅延",ko:"일괄 데이터베이스 업데이트 최대 지연",ru:"Максимальная задержка пакетного обновления базы данных",zh:"批量数据库更新的最大延迟"},"Maximum file size":{def:"Maximum file size",es:"Tamaño máximo de archivo",ja:"最大ファイル容量",ko:"최대 파일 크기",ru:"Максимальный размер файла",zh:"最大文件大小"},"Maximum Incubating Chunk Size":{def:"Maximum Incubating Chunk Size",es:"Tamaño máximo de chunks incubados",ja:"保持するチャンクの最大サイズ",ko:"임시 보관 변경 기록의 최대 크기",ru:"Максимальный размер инкубируемого чанка",zh:"最大孵化块大小"},"Maximum Incubating Chunks":{def:"Maximum Incubating Chunks",es:"Máximo de chunks incubados",ja:"一時保管する最大チャンク数",ko:"임시 보관 중인 변경 기록 최대 수",ru:"Максимальное количество инкубируемых чанков",zh:"最大孵化块数"},"Maximum Incubation Period":{def:"Maximum Incubation Period",es:"Periodo máximo de incubación",ja:"最大保持期限",ko:"변경 기록 임시 보관 최대 시간",ru:"Максимальный период инкубации",zh:"最大孵化期"},"MB (0 to disable).":{def:"MB (0 to disable).",es:"MB (0 para desactivar)",ja:"MB (0で無効化)。",ko:"MB (0으로 설정하면 비활성화).",ru:"МБ (0 для отключения).",zh:"MB(0为禁用)"},"Memory cache size (by total characters)":{def:"Memory cache size (by total characters)",es:"Tamaño caché memoria (por caracteres)",ja:"全体でキャッシュする文字数",ko:"메모리 캐시 크기 (총 문자 수)",ru:"Размер кэша памяти (по общему количеству символов)",zh:"内存缓存大小(按总字符数)"},"Memory cache size (by total items)":{def:"Memory cache size (by total items)",es:"Tamaño caché memoria (por ítems)",ja:"全体のキャッシュサイズ",ko:"메모리 캐시 크기 (총 항목 수)",ru:"Размер кэша памяти (по общему количеству элементов)",zh:"内存缓存大小(按总项目数)"},"Minimum delay for batch database updating":{def:"Minimum delay for batch database updating",es:"Retraso mínimo para actualización por lotes",ja:"バッチデータベース更新の最小遅延",ko:"일괄 데이터베이스 업데이트 최소 지연",ru:"Минимальная задержка пакетного обновления базы данных",zh:"批量数据库更新的最小延迟"},"Minimum interval for syncing":{def:"Minimum interval for syncing",ru:"Минимальный интервал синхронизации",zh:"同步最小间隔"},"moduleCheckRemoteSize.logCheckingStorageSizes":{def:"Checking storage sizes",es:"Comprobando tamaños de almacenamiento",ja:"ストレージサイズを確認中",ko:"스토리지 크기 확인 중",ru:"Проверка размеров хранилища",zh:"正在检查存储大小"},"moduleCheckRemoteSize.logCurrentStorageSize":{def:"Remote storage size: ${measuredSize}",es:"Tamaño del almacenamiento remoto: ${measuredSize}",ja:"リモートストレージサイズ: ${measuredSize}",ko:"원격 스토리지 크기: ${measuredSize}",ru:"Размер удалённого хранилища: measuredSize",zh:"远程存储大小:${measuredSize}"},"moduleCheckRemoteSize.logExceededWarning":{def:"Remote storage size: ${measuredSize} exceeded ${notifySize}",es:"Tamaño del almacenamiento remoto: ${measuredSize} superó ${notifySize}",ja:"リモートストレージサイズ: ${measuredSize} が ${notifySize} を超過しました",ko:"원격 스토리지 크기: ${measuredSize}가 ${notifySize}를 초과했습니다",ru:"Размер удалённого хранилища: measuredSize превысил notifySize",zh:"远程存储大小:${measuredSize} 超过 ${notifySize}"},"moduleCheckRemoteSize.logThresholdEnlarged":{def:"Threshold has been enlarged to ${size}MB",es:"El umbral se ha ampliado a ${size}MB",ja:"しきい値が ${size}MB に設定されました",ko:"임계값이 ${size}MB로 증가되었습니다",ru:"Порог увеличен до sizeМБ",zh:"阈值已扩大到 ${size}MB"},"moduleCheckRemoteSize.msgConfirmRebuild":{def:"This may take a bit of a long time. Do you really want to rebuild everything now?",es:"Esto puede llevar un poco de tiempo. ¿Realmente quieres reconstruir todo ahora?",ja:"これは少し時間がかかる場合があります。本当に今すべてを再構築しますか?",ko:"시간이 꽤 오래 걸릴 수 있습니다. 정말 지금 모든 것을 재구축하시겠습니까?",ru:"Это может занять некоторое время. Вы действительно хотите перестроить всё сейчас?",zh:"这可能需要一些时间。您真的想现在重建所有内容吗?"},"moduleCheckRemoteSize.msgDatabaseGrowing":{def:"**Your database is getting larger!** But do not worry, we can address it now. The time before running out of space on the remote storage.\n\n| Measured size | Configured size |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> If you have been using it for many years, there may be unreferenced chunks - that is, garbage - accumulating in the database. Therefore, we recommend rebuilding everything. It will probably become much smaller.\n>\n> If the volume of your vault is simply increasing, it is better to rebuild everything after organizing the files. Self-hosted LiveSync does not delete the actual data even if you delete it to speed up the process. It is roughly [documented](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> If you don't mind the increase, you can increase the notification limit by 100MB. This is the case if you are running it on your own server. However, it is better to rebuild everything from time to time.\n>\n\n> [!WARNING]\n> If you perform rebuild everything, make sure all devices are synchronised. The plug-in will merge as much as possible, though.\n",es:"**¡Tu base de datos está creciendo!** Pero no te preocupes, podemos abordarlo ahora. El tiempo antes de quedarse sin espacio en el almacenamiento remoto.\n\n| Tamaño medido | Tamaño configurado |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> Si lo has estado utilizando durante muchos años, puede haber fragmentos no referenciados - es decir, basura - acumulándose en la base de datos. Por lo tanto, recomendamos reconstruir todo. Probablemente se volverá mucho más pequeño.\n>\n> Si el volumen de tu bóveda simplemente está aumentando, es mejor reconstruir todo después de organizar los archivos. Self-hosted LiveSync no elimina los datos reales incluso si los eliminas para acelerar el proceso. Está aproximadamente [documentado](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md).\n>\n> Si no te importa el aumento, puedes aumentar el límite de notificación en 100 MB. Este es el caso si lo estás ejecutando en tu propio servidor. Sin embargo, es mejor reconstruir todo de vez en cuando.\n>\n\n> [!WARNING]\n> Si realizas la reconstrucción completa, asegúrate de que todos los dispositivos estén sincronizados. El complemento fusionará tanto como sea posible, sin embargo.\n",ja:"**データベースが大きくなっています!** でも心配しないでください。リモートストレージの容量が不足する前に対応できます。\n\n| 測定サイズ | 設定サイズ |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 長年使用している場合、参照されていないチャンク(つまりゴミ)がデータベースに蓄積している可能性があります。そのため、すべてを再構築することをお勧めします。おそらくかなり小さくなるでしょう。\n>\n> 単純に保管庫の容量が増えている場合は、事前にファイルを整理してからすべてを再構築するのが良いでしょう。Self-hosted LiveSyncは処理速度を上げるため、削除しても実際のデータを削除しません。これはおおまかに[documentation](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)に記載されています。\n>\n> 増加を気にしない場合は、通知制限を100MB単位で増やすことができます。これは自分のサーバーで実行している場合に適しています。ただし、定期的にすべてを再構築する方が良いでしょう。\n>\n\n> [!WARNING]\n> すべてを再構築する場合は、すべてのデバイスが同期されていることを確認してください。もちろん、プラグインは可能な限り解決しようと努力はしますけど...\n",ko:"**데이터베이스 용량이 점점 커지고 있습니다!** 하지만 걱정하지 마세요. 아직 원격 스토리지 공간이 완전히 부족해진 건 아닙니다.\n\n| 측정된 크기 | 설정된 한도 |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 오랜 기간 사용했다면 참조되지 않는 청크, 즉 '쓰레기 데이터'가 쌓였을 수 있습니다. 이 경우 전체 재구성을 권장합니다. 용량이 훨씬 줄어들 수 있습니다.\n> \n> 단순히 볼트 자체 용량이 커지고 있는 것이라면, 먼저 파일을 정리한 후 전체를 재구성하는 것이 좋습니다. Self-hosted LiveSync는 처리 속도를 위해 삭제해도 실제 데이터를 바로 지우지 않습니다. 이 내용은 [기술 문서](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)에 간략히 정리되어 있습니다.\n> \n> 용량 증가가 괜찮다면 알림 임계치를 100MB 단위로 높일 수 있습니다. 직접 서버를 운영하는 경우에 적합한 방법입니다. 다만, 가끔은 전체 재구성을 해주는 것이 바람직합니다.\n\n> [!WARNING]\n> 전체 재구성을 실행할 경우, 모든 기기가 반드시 동기화되어 있어야 합니다. 플러그인이 최대한 병합하려고 시도하긴 하지만 완전하지 않을 수 있습니다.",ru:"Ваша база данных увеличивается! Но не волнуйтесь, мы можем решить это сейчас.",zh:"**您的数据库正在变大!** 但别担心,我们现在可以解决它。在远程存储空间用完之前还有时间。\n\n| 测量大小 | 配置大小 |\n| --- | --- |\n| ${estimatedSize} | ${maxSize} |\n\n> [!MORE]-\n> 如果您已经使用了很多年,数据库中可能会积累未引用的 chunks——也就是垃圾。因此,我们建议重建所有内容。它可能会变得小得多。\n> \n> 如果您的库容量只是在增加,最好在整理文件后重建所有内容。即使您为了加速过程删除了文件,Self-hosted LiveSync 也不会删除实际数据。这大致[有文档记录](https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/tech_info.md)。\n> \n> 如果您不介意增加,可以将通知限制增加 100MB。如果您在自己的服务器上运行,就是这种情况。但是,最好还是不时地重建所有内容。\n> \n\n> [!WARNING]\n> 如果您执行重建所有内容,请确保所有设备都已同步。尽管如此,插件会尽可能地合并\n"},"moduleCheckRemoteSize.msgSetDBCapacity":{def:"We can set a maximum database capacity warning, **to take action before running out of space on the remote storage**.\nDo you want to enable this?\n\n> [!MORE]-\n> - 0: Do not warn about storage size.\n> This is recommended if you have enough space on the remote storage especially you have self-hosted. And you can check the storage size and rebuild manually.\n> - 800: Warn if the remote storage size exceeds 800MB.\n> This is recommended if you are using fly.io with 1GB limit or IBM Cloudant.\n> - 2000: Warn if the remote storage size exceeds 2GB.\n\nIf we have reached the limit, we will be asked to enlarge the limit step by step.\n",es:"Podemos configurar una advertencia de capacidad máxima de base de datos, **para tomar medidas antes de quedarse sin espacio en el almacenamiento remoto**.\n¿Quieres habilitar esto?\n\n> [!MORE]-\n> - 0: No advertir sobre el tamaño del almacenamiento.\n> Esto es recomendado si tienes suficiente espacio en el almacenamiento remoto, especialmente si lo tienes autoalojado. Y puedes comprobar el tamaño del almacenamiento y reconstruir manualmente.\n> - 800: Advertir si el tamaño del almacenamiento remoto supera los 800 MB.\n> Esto es recomendado si estás usando fly.io con un límite de 1 GB o IBM Cloudant.\n> - 2000: Advertir si el tamaño del almacenamiento remoto supera los 2 GB.\n\nSi hemos alcanzado el límite, se nos pedirá que aumentemos el límite paso a paso.\n",ja:"リモートストレージの容量が不足する前に対策を講じるため、**最大データベース容量の警告**を設定できます。\nこれを有効にしますか\n\n> [!MORE]-\n> - 0: ストレージサイズについて警告しない。\n> 自宅サーバーなど、リモートストレージに十分な容量がある場合に推奨されます。ストレージサイズを確認し、手動で再構築できます。\n> - 800: リモートストレージサイズが800MBを超えたら警告。\n> 1GB制限のfly.ioやIBM Cloudantを使用している場合に推奨されます。\n> - 2000: リモートストレージサイズが2GBを超えたら警告。\n\n制限に達した場合、段階的に制限を増やすよう求められます。\n",ko:"**원격 스토리지 공간이 부족해지기 전에 미리 조치할 수 있도록** 데이터베이스 용량 경고를 설정할 수 있습니다.\n이 기능을 활성화하시겠습니까?\n\n> [!MORE]-\n> - 0: 스토리지 용량에 대한 경고 없음\n> 자체 서버를 사용하는 등 여유 공간이 충분한 경우에 권장됩니다. 스토리지 용량을 직접 확인하고 수동으로 재구성할 수 있습니다.\n> - 800: 원격 스토리지 용량이 800MB를 초과하면 경고\n> 1GB 제한이 있는 fly.io나 IBM Cloudant 사용 시 권장됩니다.\n> - 2000: 원격 스토리지 용량이 2GB를 초과하면 경고\n\n설정한 용량 한도에 도달하면, 단계적으로 경고 한도를 늘릴지 여부를 묻게 됩니다.\n",ru:"Можно установить предупреждение о максимальной ёмкости базы данных.",zh:"我们可以设置一个最大数据库容量警告,**以便在远程存储空间耗尽前采取行动**。\n您想启用这个功能吗?\n\n> [!MORE]-\n> - 0: 不警告存储大小。\n> 如果您在远程存储(尤其是自托管)上有足够的空间,则推荐此选项。您可以手动检查存储大小并重建。\n> - 800: 如果远程存储大小超过 800MB 则发出警告。\n> 如果您使用的是 fly.io(1GB 限制) 或 IBM Cloudant,则推荐此选项。\n> - 2000: 如果远程存储大小超过 2GB 则发出警告。\n\n如果达到限制,系统会要求我们逐步增大限制\n"},"moduleCheckRemoteSize.option2GB":{def:"2GB (Standard)",es:"2GB (Estándar)",ja:"2GB (標準)",ko:"2GB (표준)",ru:"2ГБ (Стандарт)",zh:"2GB (标准)"},"moduleCheckRemoteSize.option800MB":{def:"800MB (Cloudant, fly.io)",es:"800MB (Cloudant, fly.io)",ja:"800MB (Cloudant, fly.io)",ko:"800MB (Cloudant, fly.io)",ru:"800МБ (Cloudant, fly.io)",zh:"800MB (Cloudant, fly.io)"},"moduleCheckRemoteSize.optionAskMeLater":{def:"Ask me later",es:"Pregúntame más tarde",ja:"後で確認する",ko:"나중에 물어보기",ru:"Спросить позже",zh:"稍后问我"},"moduleCheckRemoteSize.optionDismiss":{def:"Dismiss",es:"Descartar",ja:"無視",ko:"무시",ru:"Отклонить",zh:"忽略"},"moduleCheckRemoteSize.optionIncreaseLimit":{def:"increase to ${newMax}MB",es:"aumentar a ${newMax}MB",ja:"${newMax}MBに設定",ko:"${newMax}MB로 증가",ru:"увеличить до newMaxМБ",zh:"增加到 ${newMax}MB"},"moduleCheckRemoteSize.optionNoWarn":{def:"No, never warn please",es:"No, nunca advertir por favor",ja:"いいえ、警告しないでください",ko:"아니요, 경고하지 마세요",ru:"Нет, не уведомлять",zh:"不,请永远不要警告"},"moduleCheckRemoteSize.optionRebuildAll":{def:"Rebuild Everything Now",es:"Reconstruir todo ahora",ja:"今すべてを再構築",ko:"지금 모든 것 재구축",ru:"Перестроить всё сейчас",zh:"立即重建所有内容"},"moduleCheckRemoteSize.titleDatabaseSizeLimitExceeded":{def:"Remote storage size exceeded the limit",es:"El tamaño del almacenamiento remoto superó el límite",ja:"リモートストレージサイズが制限を超過しました",ko:"원격 스토리지 크기가 제한을 초과했습니다",ru:"Размер удалённого хранилища превысил лимит",zh:"远程存储大小超出限制"},"moduleCheckRemoteSize.titleDatabaseSizeNotify":{def:"Setting up database size notification",es:"Configuración de notificación de tamaño de base de datos",ja:"データベースサイズ通知の設定",ko:"데이터베이스 크기 알림 설정",ru:"Настройка уведомления о размере базы данных",zh:"设置数据库大小通知"},"moduleInputUIObsidian.defaultTitleConfirmation":{def:"Confirmation",es:"Confirmación",ja:"確認",ko:"확인",ru:"Подтверждение",zh:"确认"},"moduleInputUIObsidian.defaultTitleSelect":{def:"Select",es:"Seleccionar",ja:"選択",ko:"선택",ru:"Выбор",zh:"选择"},"moduleInputUIObsidian.optionNo":{def:"No",es:"No",ja:"いいえ",ko:"아니요",ru:"Нет",zh:"否"},"moduleInputUIObsidian.optionYes":{def:"Yes",es:"Sí",ja:"はい",ko:"예",ru:"Да",zh:"是"},"moduleLiveSyncMain.logAdditionalSafetyScan":{def:"Additional safety scan...",es:"Escanéo de seguridad adicional...",ja:"追加の安全スキャン中...",ko:"추가 안전 검사 중...",ru:"Дополнительная проверка безопасности...",zh:"额外的安全扫描..."},"moduleLiveSyncMain.logLoadingPlugin":{def:"Loading plugin...",es:"Cargando complemento...",ja:"プラグインをロード中...",ko:"플러그인 로딩 중...",ru:"Загрузка плагина...",zh:"正在加载插件..."},"moduleLiveSyncMain.logPluginInitCancelled":{def:"Plugin initialisation was cancelled by a module",es:"La inicialización del complemento fue cancelada por un módulo",ja:"プラグインの初期化がモジュールによってキャンセルされました",ko:"모듈에 의해 플러그인 초기화가 취소되었습니다",ru:"Инициализация плагина отменена модулем",zh:"插件初始化被某个模块取消"},"moduleLiveSyncMain.logPluginVersion":{def:"Self-hosted LiveSync v${manifestVersion} ${packageVersion}",es:"Self-hosted LiveSync v${manifestVersion} ${packageVersion}",ja:"Self-hosted LiveSync v${manifestVersion} ${packageVersion}",ko:"Self-hosted LiveSync v${manifestVersion} ${packageVersion}",ru:"Self-hosted LiveSync vmanifestVersion packageVersion",zh:"Self-hosted LiveSync v${manifestVersion} ${packageVersion}"},"moduleLiveSyncMain.logReadChangelog":{def:"LiveSync has updated, please read the changelog!",es:"LiveSync se ha actualizado, ¡por favor lee el registro de cambios!",ja:"LiveSyncが更新されました。変更履歴をお読みください",ko:"LiveSync가 업데이트되었습니다. 변경사항을 읽어보세요!",ru:"LiveSync обновлён, пожалуйста, прочитайте список изменений!",zh:"LiveSync 已更新,请阅读更新日志!"},"moduleLiveSyncMain.logSafetyScanCompleted":{def:"Additional safety scan completed",es:"Escanéo de seguridad adicional completado",ja:"追加の安全スキャンが完了しました",ko:"추가 안전 검사가 완료되었습니다",ru:"Дополнительная проверка безопасности завершена",zh:"额外的安全扫描完成"},"moduleLiveSyncMain.logSafetyScanFailed":{def:"Additional safety scan has failed on a module",es:"El escaneo de seguridad adicional ha fallado en un módulo",ja:"モジュールで追加の安全スキャンが失敗しました",ko:"모듈에서 추가 안전 검사가 실패했습니다",ru:"Дополнительная проверка безопасности не удалась в модуле",zh:"额外的安全扫描在某个模块上失败"},"moduleLiveSyncMain.logUnloadingPlugin":{def:"Unloading plugin...",es:"Descargando complemento...",ja:"プラグインをアンロード中...",ko:"플러그인 언로딩 중...",ru:"Выгрузка плагина...",zh:"正在卸载插件..."},"moduleLiveSyncMain.logVersionUpdate":{def:"LiveSync has been updated, In case of breaking updates, all automatic synchronization has been temporarily disabled. Ensure that all devices are up to date before enabling.",es:"LiveSync se ha actualizado, en caso de actualizaciones que rompan, toda la sincronización automática se ha desactivado temporalmente. Asegúrate de que todos los dispositivos estén actualizados antes de habilitar.",ja:"LiveSyncが更新されました。互換性のない更新の場合、すべての自動同期が一時的に無効化されています。有効にする前に、すべてのデバイスが最新の状態であることを確認してください。",ko:"LiveSync가 업데이트되었습니다. 호환성 문제가 있는 업데이트의 경우 모든 자동 동기화가 일시적으로 비활성화되었습니다. 활성화하기 전에 모든 기기가 최신 상태인지 확인하세요.",ru:"LiveSync обновлён. В случае критических изменений автоматическая синхронизация временно отключена. Убедитесь, что все устройства обновлены перед включением.",zh:"LiveSync 已更新,如果存在破坏性更新,所有自动同步已暂时禁用。请确保所有设备都更新到最新版本后再启用"},"moduleLiveSyncMain.msgScramEnabled":{def:"Self-hosted LiveSync has been configured to ignore some events. Is this correct?\n\n| Type | Status | Note |\n|:---:|:---:|---|\n| Storage Events | ${fileWatchingStatus} | Every modification will be ignored |\n| Database Events | ${parseReplicationStatus} | Every synchronised change will be postponed |\n\nDo you want to resume them and restart Obsidian?\n\n> [!DETAILS]-\n> These flags are set by the plug-in while rebuilding, or fetching. If the process ends abnormally, it may be kept unintended.\n> If you are not sure, you can try to rerun these processes. Make sure to back your vault up.\n",es:"Self-hosted LiveSync se ha configurado para ignorar algunos eventos. ¿Es esto correcto?\n\n| Tipo | Estado | Nota |\n|:---:|:---:|---|\n| Eventos de almacenamiento | ${fileWatchingStatus} | Se ignorará cada modificación |\n| Eventos de base de datos | ${parseReplicationStatus} | Cada cambio sincronizado se pospondrá |\n\n¿Quieres reanudarlos y reiniciar Obsidian?\n\n> [!DETAILS]-\n> Estas banderas son establecidas por el complemento mientras se reconstruye o se obtiene. Si el proceso termina de forma anormal, puede mantenerse sin querer.\n> Si no estás seguro, puedes intentar volver a ejecutar estos procesos. Asegúrate de hacer una copia de seguridad de tu bóveda.\n",ja:"Self-hosted LiveSyncは一部のイベントを無視するように設定されています。これは正しいですか\n\n| タイプ | ステータス | メモ |\n|:---:|:---:|---|\n| ストレージイベント | ${fileWatchingStatus} | すべての変更が無視されます |\n| データベースイベント | ${parseReplicationStatus} | すべての同期された変更が延期されます |\n\nこれらを再開してObsidianを再起動しますか\n\n> [!DETAILS]-\n> これらのフラグは、プラグインが再構築またはフェッチ中に設定されます。プロセスが異常終了した場合、意図せず保持されることがあります。\n> 不明な場合は、これらのプロセスを再実行してみてください。必ず保管庫をバックアップしてください。\n",ko:"Self-hosted LiveSync가 일부 이벤트를 무시하도록 설정되어 있습니다. 이 설정이 맞습니까?\n\n| 유형 | 상태 | 설명 |\n|:---:|:---:|---|\n| 스토리지 이벤트 | ${fileWatchingStatus} | 모든 수정 사항이 무시됩니다 |\n| 데이터베이스 이벤트 | ${parseReplicationStatus} | 모든 동기화 변경이 지연됩니다 |\n\n이벤트 감지를 다시 활성화하고 Obsidian을 재시작하시겠습니까?\n\n> [!DETAILS]-\n> 이러한 설정은 플러그인이 재구성 또는 데이터 가져오기 중에 자동으로 설정한 것입니다. 프로세스가 비정상적으로 종료되면 이 상태가 의도치 않게 유지될 수 있습니다.\n> 상태가 확실하지 않다면 이 과정을 다시 실행해 보세요. 재시작 전에 반드시 볼트를 백업해 주세요.",ru:"Self-hosted LiveSync has been configured to ignore some events. Is this correct?\n\n| Type | Status | Note |\n|:---:|:---:|---|\n| Storage Events | ${fileWatchingStatus} | Every modification will be ignored |\n| Database Events | ${parseReplicationStatus} | Every synchronised change will be postponed |\n\nDo you want to resume them and restart Obsidian?\n\n> [!DETAILS]-\n> These flags are set by the plug-in while rebuilding, or fetching. If the process ends abnormally, it may be kept unintended.\n> If you are not sure, you can try to rerun these processes. Make sure to back your vault up.\n",zh:"Self-hosted LiveSync 已被配置为忽略某些事件。这样对吗?\n\n| 类型 | 状态 | 说明 |\n|:---:|:---:|---|\n| 存储事件 | ${fileWatchingStatus} | 所有修改都将被忽略 |\n| 数据库事件 | ${parseReplicationStatus} | 所有同步的更改都将被推迟 |\n\n您想恢复它们并重启 Obsidian 吗?\n\n> [!DETAILS]-\n> 这些标志是在重建或获取时由插件设置的。如果过程异常结束,它们可能会被无意中保留。\n> 如果您不确定,可以尝试重新运行这些过程。请确保备份您的库。\n"},"moduleLiveSyncMain.optionKeepLiveSyncDisabled":{def:"Keep LiveSync disabled",es:"Mantener LiveSync desactivado",ja:"LiveSyncを無効のままにする",ko:"LiveSync 비활성화 유지",ru:"Оставить LiveSync отключённым",zh:"保持 LiveSync 禁用"},"moduleLiveSyncMain.optionResumeAndRestart":{def:"Resume and restart Obsidian",es:"Reanudar y reiniciar Obsidian",ja:"再開してObsidianを再起動",ko:"재개 후 Obsidian 재시작",ru:"Продолжить и перезапустить Obsidian",zh:"恢复并重启 Obsidian"},"moduleLiveSyncMain.titleScramEnabled":{def:"Scram Enabled",es:"Scram habilitado",ja:"緊急停止(Scram)が有効",ko:"Scram 활성화됨",ru:"Экстренная остановка включена",zh:"紧急停止已启用"},"moduleLocalDatabase.logWaitingForReady":{def:"Waiting for ready...",es:"Esperando a que la base de datos esté lista...",ja:"しばらくお待ちください...",ko:"준비 대기 중...",ru:"Ожидание готовности...",zh:"等待就绪..."},"moduleLog.showLog":{def:"Show Log",es:"Mostrar registro",ja:"ログを表示",ko:"로그 표시",ru:"Показать лог",zh:"显示日志"},"moduleMigration.docUri":{def:"https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use",es:"https://github.com/vrtmrz/obsidian-livesync/blob/main/README_ES.md#how-to-use",ja:"https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use",ko:"https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use",ru:"https://github.com/vrtmrz/obsidian-livesync/blob/main/README.md#how-to-use",zh:"https://github.com/vrtmrz/obsidian-livesync/blob/main/docs/zh/README_zh.md#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8"},"moduleMigration.fix0256.buttons.checkItLater":{def:"Check it later",ja:"後で確認する",ru:"Проверить позже",zh:"稍后检查"},"moduleMigration.fix0256.buttons.DismissForever":{def:"I have fixed it, and do not ask again",ja:"修正済み、今後確認しない",ru:"Исправлено, больше не спрашивать",zh:"我已经修复了,不再询问"},"moduleMigration.fix0256.buttons.fix":{def:"Fix",ja:"修正",ru:"Исправить",zh:"修复"},"moduleMigration.fix0256.message":{def:'Due to a recent bug (in v0.25.6), some files may not have been saved correctly in the sync database.\nWe have scanned our files and found some that need to be fixed.\n\n**Files ready to be fixed:**\n\n${files}\n\nThese files have size-matched original file on the storage, and are likely to be recoverable.\nWe can use them to fix the database, please click the "Fix" button below to fix them.\n\n${messageUnrecoverable}\n\nIf you want to run it again, you can do so from Hatch.\n',ja:"最近のバグv0.25.6)により、一部のファイルが同期データベースに正しく保存されていない可能性があります。\nファイルをスキャンし、修正が必要なものが見つかりました。\n\n**修正準備ができたファイル:**\n\n${files}\n\nこれらのファイルはストレージ上の元ファイルとサイズが一致しており、復元可能です。\n「修正」ボタンをクリックしてデータベースを修正できます。\n\n${messageUnrecoverable}\n\n再実行したい場合は、Hatchから実行できます。\n",ru:"Из-за недавней ошибки некоторые файлы могут быть неправильно сохранены.",zh:"由于最近的一个 bug在 v0.25.6 版本中),某些文件可能未正确保存到同步数据库中\n我们已经扫描了文件并发现一些需要修复的文件\n\n**准备修复的文件:**\n\n${files}\n\n这些文件在存储中与原文件的大小匹配可能是可恢复的\n我们可以使用它们修复数据库请点击下方的“修复”按钮进行修复\n\n${messageUnrecoverable}\n\n\n如果你希望再次执行此操作可以前往 Hatch 页面进行操作\n"},"moduleMigration.fix0256.messageUnrecoverable":{def:"**Files cannot be fixed on this device:**\n\n${filesNotRecoverable}\n\nThese files have inconsistent metadata, and cannot be fixed on this device (mostly we cannot determine which is correct).\nTo restore them, please check your other devices (also by this feature) or restore them manually from a backup.\n",ja:"**このデバイスで修正できないファイル:**\n\n${filesNotRecoverable}\n\nこれらのファイルはメタデータに不整合があり、このデバイスでは修正できませんほとんどの場合、どちらが正しいか判定できません。\n復元するには、他のデバイスで確認するか、バックアップから手動で復元してください。\n",ru:"Файлы не могут быть исправлены на этом устройстве:",zh:"**无法在此设备上修复的文件:**\n\n${filesNotRecoverable}\n\n这些文件的元数据不一致无法在此设备上修复大多数情况下我们无法确定哪一个是正确的\n要恢复它们请检查你的其他设备同样使用此功能或从备份中手动恢复\n"},"moduleMigration.fix0256.title":{def:"Broken files has been detected",ja:"破損ファイルが検出されました",ru:"Обнаружены повреждённые файлы",zh:"检测到损坏的文件"},"moduleMigration.insecureChunkExist.buttons.fetch":{def:"I already rebuilt the remote. Fetch from the remote",ja:"リモートを既に再構築した。リモートからフェッチ",ru:"Я уже перестроил удалённую. Загрузить с удалённой",zh:"我已经重建了远程数据库,将从远程获取"},"moduleMigration.insecureChunkExist.buttons.later":{def:"I will do it later",ja:"後で行う",ru:"Сделаю позже",zh:"我稍后再做"},"moduleMigration.insecureChunkExist.buttons.rebuild":{def:"Rebuild Everything",ja:"すべてを再構築",ru:"Перестроить всё",zh:"重建所有内容"},"moduleMigration.insecureChunkExist.laterMessage":{def:"We strongly recommend to treat this as soon as possible!",ja:"できるだけ早く対処することを強くお勧めします!",ru:"Мы настоятельно рекомендуем обработать это как можно скорее!",zh:"我们强烈建议尽快处理此问题!"},"moduleMigration.insecureChunkExist.message":{def:"Some chunks are not securely stored and are not encrypted in databases.\n**Please rebuild the database to fix this issue**.\n\nIf your Remote Database is not configured with SSL, or using less-secure credentials, **you are at risk of exposing sensitive data**.\n\nNote: Please upgrade your Self-hosted LiveSync v0.25.6 or higher on all your devices, and back your vault up surely.\nNote2: Rebuild Everything and Fetch consumes a bit of time and traffic, please do it in off-peak hours and ensure a stable network connection.\n",ja:"一部のチャンクが安全に保存されておらず、データベースで暗号化されていません。\n**この問題を修正するにはデータベースを再構築してください**。\n\nリモートデータベースがSSLで設定されていない、または安全性の低い認証情報を使用している場合、**機密データが漏洩するリスクがあります**。\n\n注意: すべてのデバイスでSelf-hosted LiveSync v0.25.6以降にアップグレードし、必ず保管庫をバックアップしてください。\n注意2: すべてを再構築とフェッチは時間とトラフィックを消費します。オフピーク時間に安定したネットワークで実行してください。\n",ru:"Некоторые чанки хранятся небезопасно. Пожалуйста, перестройте базу данных.",zh:"一些块未安全存储,并且在数据库中未加密\n**请重建数据库以修复此问题**.\n\n如果你的远程数据库未配置 SSL或者使用了不安全的凭据 **你可能面临暴露敏感数据的风险**.\n\n注意请在所有设备上将 Self-hosted LiveSync 升级到 v0.25.6 或更高版本,并确保备份你的保险库\n\n注意2重建所有内容和获取操作会消耗一些时间和流量请在非高峰时段进行并确保网络连接稳定\n"},"moduleMigration.insecureChunkExist.title":{def:"Insecure chunks found!",ja:"安全でないチャンクが見つかりました!",ru:"Обнаружены небезопасные чанки!",zh:"发现不安全的块!"},"moduleMigration.logBulkSendCorrupted":{def:"Send chunks in bulk has been enabled, however, this feature had been corrupted. Sorry for your inconvenience. Automatically disabled.",es:"El envío de fragmentos en bloque se ha habilitado, sin embargo, esta función se ha corrompido. Disculpe las molestias. Deshabilitado automáticamente.",ja:"チャンクの一括送信が有効にされていましたが、この機能に問題がありました。ご不便をおかけして申し訳ありません。自動的に無効化されました。",ko:"청크 일괄 전송이 활성화되었지만, 이 기능에 문제가 있었습니다. 불편을 드려 죄송합니다. 자동으로 비활성화되었습니다.",ru:"Отправка чанков пакетами была включена, но эта функция была повреждена. Приносим извинения. Автоматически отключено.",zh:"已启用批量发送 chunks,但此功能已损坏。给您带来不便,我们深表歉意。已自动禁用"},"moduleMigration.logFetchRemoteTweakFailed":{def:"Failed to fetch remote tweak values",es:"Error al obtener los valores de ajuste remoto",ja:"リモートの調整値の取得に失敗しました",ko:"원격 조정 값을 가져오는데 실패했습니다",ru:"Не удалось загрузить удалённые настройки",zh:"获取远程调整值失败"},"moduleMigration.logLocalDatabaseNotReady":{def:"Something went wrong! The local database is not ready",es:"¡Algo salió mal! La base de datos local no está lista",ja:"何か問題が発生しました!ローカルデータベースが準備できていません",ko:"문제가 발생했습니다! 로컬 데이터베이스가 준비되지 않았습니다",ru:"Что-то пошло не так! Локальная база данных не готова",zh:"出错了!本地数据库尚未准备好"},"moduleMigration.logMigratedSameBehaviour":{def:"Migrated to db:${current} with the same behaviour as before",es:"Migrado a db:${current} con el mismo comportamiento que antes",ja:"以前と同じ動作でdb:${current}に移行しました",ko:"이전과 같은 방식으로 동작하도록 db:${current}로 데이터 구조 전환이 완료되었습니다",ru:"Миграция на db:current с тем же поведением, что и раньше",zh:"已迁移到 db:${current},行为与之前相同"},"moduleMigration.logMigrationFailed":{def:"Migration failed or cancelled from ${old} to ${current}",es:"La migración falló o se canceló de ${old} a ${current}",ja:"${old}から${current}への移行が失敗またはキャンセルされました",ko:"${old}에서 ${current}로의 데이터 구조 전환이 실패했거나 중단되었습니다",ru:"Миграция не удалась или отменена с old на current",zh:"从 ${old} 到 ${current} 的迁移失败或已取消"},"moduleMigration.logRedflag2CreationFail":{def:"Failed to create redflag2",es:"Error al crear redflag2",ja:"redflag2の作成に失敗しました",ko:"redflag2 생성에 실패했습니다",ru:"Не удалось создать redflag2",zh:"创建 redflag2 失败"},"moduleMigration.logRemoteTweakUnavailable":{def:"Could not get remote tweak values",es:"No se pudieron obtener los valores de ajuste remoto",ja:"リモートの調整値を取得できませんでした",ko:"원격 조정 값을 가져올 수 없습니다",ru:"Не удалось получить удалённые настройки",zh:"无法获取远程调整值"},"moduleMigration.logSetupCancelled":{def:"The setup has been cancelled, Self-hosted LiveSync waiting for your setup!",es:"La configuración ha sido cancelada, ¡Self-hosted LiveSync está esperando tu configuración!",ja:"セットアップがキャンセルされました。Self-hosted LiveSyncはセットアップを待っています",ko:"설정이 취소되었습니다. Self-hosted LiveSync가 설정을 기다리고 있습니다!",ru:"Настройка отменена, Self-hosted LiveSync ожидает вашей настройки!",zh:"设置已取消,Self-hosted LiveSync 正在等待您的设置!"},"moduleMigration.msgFetchRemoteAgain":{def:"As you may already know, the self-hosted LiveSync has changed its default behaviour and database structure.\n\nAnd thankfully, with your time and efforts, the remote database appears to have already been migrated. Congratulations!\n\nHowever, we need a bit more. The configuration of this device is not compatible with the remote database. We will need to fetch the remote database again. Should we fetch from the remote again now?\n\n___Note: We cannot synchronise until the configuration has been changed and the database has been fetched again.___\n___Note2: The chunks are completely immutable, we can fetch only the metadata and difference.___",es:"Como ya sabrás, Self-hosted LiveSync ha cambiado su comportamiento predeterminado y la estructura de la base de datos.\n\nAfortunadamente, con tu tiempo y esfuerzo, la base de datos remota parece haber sido ya migrada. ¡Felicidades!\n\nSin embargo, necesitamos un poco más. La configuración de este dispositivo no es compatible con la base de datos remota. Necesitaremos volver a obtener la base de datos remota. ¿Debemos obtenerla nuevamente ahora?\n\n___Nota: No podemos sincronizar hasta que la configuración haya sido cambiada y la base de datos haya sido obtenida nuevamente.___\n___Nota2: Los fragmentos son completamente inmutables, solo podemos obtener los metadatos y diferencias.___",ja:"ご存知のとおり、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。\n\nご協力のおかげで、リモートデータベースはすでに移行されているようです。おめでとうございます\n\nしかし、もう少し必要です。このデバイスの設定はリモートデータベースと互換性がありません。リモートデータベースを再度フェッチする必要があります。今すぐリモートから再フェッチしますか\n\n___注意: 設定が変更され、データベースが再フェッチされるまで同期できません。___\n___注意2: チャンクは完全に不変なので、メタデータと差分のみフェッチできます。___",ko:"이미 알고 계시겠지만, Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다.\n\n다행히도 여러분의 노력 덕분에 원격 데이터베이스는 이미 성공적으로 데이터 구조 전환이 완료된 것으로 보입니다. 축하드립니다!\n\n하지만 아직 일부 추가 작업이 필요합니다. 이 기기의 설정이 원격 데이터베이스와 호환되지 않으므로, 원격 데이터를 다시 가져와야 합니다. 지금 원격 데이터베이스를 다시 가져오시겠습니까?\n\n___참고: 설정이 변경되고 데이터베이스를 다시 불러오기 전까지는 동기화가 불가능합니다.___\n___참고2: 청크는 변경이 불가능한 구조이므로, 메타데이터와 차이점만 가져올 수 있습니다.___",ru:"Удалённая база данных, похоже, уже была мигрирована. Конфигурация этого устройства несовместима.",zh:"您可能已经知道,Self-hosted LiveSync 更改了其默认行为和数据库结构。\n\n值得庆幸的是,在您的时间和努力下,远程数据库似乎已经迁移完成。恭喜!\n\n但是,我们还需要一点点操作。此设备的配置与远程数据库不兼容。我们需要再次从远程数据库获取。我们现在应该再次从远程获取吗?\n\n___注意:在更改配置并再次获取数据库之前,我们无法进行同步。___\n___注意2:chunks 是完全不可变的,我们只能获取元数据和差异"},"moduleMigration.msgInitialSetup":{def:"Your device has **not been set up yet**. Let me guide you through the setup process.\n\nPlease keep in mind that every dialogue content can be copied to the clipboard. If you need to refer to it later, you can paste it into a note in Obsidian. You can also translate it into your language using a translation tool.\n\nFirst, do you have **Setup URI**?\n\nNote: If you do not know what it is, please refer to the [documentation](${URI_DOC}).",es:"Tu dispositivo **aún no ha sido configurado**. Permíteme guiarte a través del proceso de configuración.\n\nTen en cuenta que todo el contenido del diálogo se puede copiar al portapapeles. Si necesitas consultarlo más tarde, puedes pegarlo en una nota en Obsidian. También puedes traducirlo a tu idioma utilizando una herramienta de traducción.\n\nPrimero, ¿tienes **URI de configuración**?\n\nNota: Si no sabes qué es, consulta la [documentación](${URI_DOC}).",ja:"このデバイスは**まだセットアップされていません**。セットアッププロセスをご案内します。\n\nすべてのダイアログの内容はクリップボードにコピーできます。後で参照する必要があれば、Obsidianのートに貼り付けてください。翻訳ツールを使ってお使いの言語に翻訳することもできます。\n\nまず、**セットアップURI**をお持ちですか?\n\n注意: それが何か分からない場合は、[documentation](${URI_DOC})を参照してください。",ko:"이 기기는 **아직 초기 설정이 완료되지 않았습니다**. 지금부터 설정 과정을 안내해 드리겠습니다.\n\n모든 대화 내용은 클립보드에 복사할 수 있습니다. 나중에 참고하려면 Obsidian 노트에 붙여넣거나 번역 도구를 활용해 번역하셔도 됩니다.\n\n먼저, **Setup URI**를 가지고 계신가요?\n\n참고: Setup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요.",ru:"Ваше устройство ещё не настроено. У вас есть Setup URI?",zh:"您的设备**尚未设置**。让我引导您完成设置过程。\n\n请记住,每个对话框内容都可以复制到剪贴板。如果以后需要参考,可以将其粘贴到 Obsidian 的笔记中。您也可以使用翻译工具将其翻译成您的语言。\n\n首先,您有**设置 URI** 吗?\n\n注意:如果您不知道这是什么,请参阅[文档](${URI_DOC})"},"moduleMigration.msgRecommendSetupUri":{def:"We strongly recommend that you generate a set-up URI and use it.\nIf you do not have knowledge about it, please refer to the [documentation](${URI_DOC}) (Sorry again, but it is important).\n\nHow do you want to set it up manually?",es:"Te recomendamos encarecidamente que generes una URI de configuración y la utilices.\nSi no tienes conocimientos al respecto, consulta la [documentación](${URI_DOC}) (Lo siento de nuevo, pero es importante).\n\n¿Cómo quieres configurarlo manualmente?",ja:"セットアップURIを生成して使用することを強くお勧めします。\nこれについて知識がない場合は、[documentation](${URI_DOC})を参照してください(重要です)。\n\n手動でセットアップしますか",ko:"Setup URI를 생성해 사용하는 것을 강력히 권장합니다.\nSetup URI가 무엇인지 잘 모르시겠다면 [문서](${URI_DOC})를 참고해 주세요. 중요한 내용이니 꼭 확인하시기 바랍니다.\n\n직접 수동 설정을 진행하시겠습니까?",ru:"Мы рекомендуем сгенерировать Setup URI.",zh:"我们强烈建议您生成一个设置 URI 并使用它。\n如果您对此不了解,请参阅[文档](${URI_DOC})(再次抱歉,但这很重要)。\n\n您想如何手动设置?"},"moduleMigration.msgSinceV02321":{def:"Since v0.23.21, the self-hosted LiveSync has changed the default behaviour and database structure. The following changes have been made:\n\n1. **Case sensitivity of filenames**\n The handling of filenames is now case-insensitive. This is a beneficial change for most platforms, other than Linux and iOS, which do not manage filename case sensitivity effectively.\n (On These, a warning will be displayed for files with the same name but different cases).\n\n2. **Revision handling of the chunks**\n Chunks are immutable, which allows their revisions to be fixed. This change will enhance the performance of file saving.\n\n___However, to enable either of these changes, both remote and local databases need to be rebuilt. This process takes a few minutes, and we recommend doing it when you have ample time.___\n\n- If you wish to maintain the previous behaviour, you can skip this process by using `${KEEP}`.\n- If you do not have enough time, please choose `${DISMISS}`. You will be prompted again later.\n- If you have rebuilt the database on another device, please select `${DISMISS}` and try synchronizing again. Since a difference has been detected, you will be prompted again.",es:"Desde la versión v0.23.21, Self-hosted LiveSync ha cambiado el comportamiento predeterminado y la estructura de la base de datos. Se han realizado los siguientes cambios:\n\n1. **Sensibilidad a mayúsculas de los nombres de archivo**\n El manejo de los nombres de archivo ahora no distingue entre mayúsculas y minúsculas. Este cambio es beneficioso para la mayoría de las plataformas, excepto Linux y iOS, que no gestionan efectivamente la sensibilidad a mayúsculas de los nombres de archivo.\n (En estos, se mostrará una advertencia para archivos con el mismo nombre pero diferentes mayúsculas).\n\n2. **Manejo de revisiones de los fragmentos**\n Los fragmentos son inmutables, lo que permite que sus revisiones sean fijas. Este cambio mejorará el rendimiento al guardar archivos.\n\n___Sin embargo, para habilitar cualquiera de estos cambios, es necesario reconstruir tanto las bases de datos remota como la local. Este proceso toma unos minutos, y recomendamos hacerlo cuando tengas tiempo suficiente.___\n\n- Si deseas mantener el comportamiento anterior, puedes omitir este proceso usando `${KEEP}`.\n- Si no tienes suficiente tiempo, por favor elige `${DISMISS}`. Se te pedirá nuevamente más tarde.\n- Si has reconstruido la base de datos en otro dispositivo, selecciona `${DISMISS}` e intenta sincronizar nuevamente. Dado que se ha detectado una diferencia, se te solicitará nuevamente.",ja:"v0.23.21以降、self-hosted LiveSyncはデフォルトの動作とデータベース構造を変更しました。以下の変更が行われました\n\n1. **ファイル名の大文字小文字の区別**\n ファイル名の処理が大文字小文字を区別しなくなりました。これは、ファイル名の大文字小文字を効果的に管理しないLinuxとiOS以外のほとんどのプラットフォームにとって有益な変更です。\n (これらの環境では、同じ名前で大文字小文字が異なるファイルに対して警告が表示されます)。\n\n2. **チャンクのリビジョン処理**\n チャンクは不変であり、リビジョンを固定できます。この変更により、ファイル保存のパフォーマンスが向上します。\n\n___しかし、これらの変更を有効にするには、リモートとローカルの両方のデータベースを再構築する必要があります。このプロセスは数分かかります。時間に余裕があるときに行うことをお勧めします。___\n\n- 以前の動作を維持したい場合は、`${KEEP}`を使用してこのプロセスをスキップできます。\n- 時間がない場合は、`${DISMISS}`を選択してください。後で再度確認されます。\n- 別のデバイスでデータベースを再構築した場合は、`${DISMISS}`を選択して再度同期してみてください。差異が検出されたため、再度確認されます。",ko:"v0.23.21부터 Self-hosted LiveSync의 기본 동작 방식과 데이터베이스 구조가 변경되었습니다. 주요 변경사항은 다음과 같습니다:\n\n1. **파일명 대소문자 구분 처리**\n 이제 파일명은 대소문자를 구분하지 않고 처리됩니다. 이는 파일명 구분을 제대로 지원하지 않는 Linux 및 iOS를 제외한 대부분의 플랫폼에서 유리한 변화입니다.\n (Linux나 iOS에서는 대소문자만 다른 파일이 존재할 경우 경고가 표시됩니다)\n\n2. **청크 리비전 관리 방식 개선**\n 청크는 변경 불가능한(immutable) 구조로 고정되며, 이를 통해 리비전 처리가 안정화되고 파일 저장 성능이 향상됩니다.\n\n___단, 위 기능을 활성화하려면 원격 및 로컬 데이터베이스를 모두 재구성해야 합니다. 이 과정은 수 분이 소요되므로 여유가 있을 때 실행하시는 것을 권장합니다.___\n\n- 기존 방식대로 유지하려면 `${KEEP}`을 선택해 이 과정을 건너뛸 수 있습니다.\n- 시간이 부족하다면 `${DISMISS}`를 눌러주시면 나중에 다시 안내드리겠습니다.\n- 이미 다른 기기에서 데이터베이스를 재구성하셨다면 `${DISMISS}`를 선택한 뒤 다시 동기화해 보세요. 차이점이 감지되면 다시 안내드리겠습니다.",ru:"Начиная с v0.23.21, self-hosted LiveSync изменил поведение и структуру базы данных.",zh:"自 v0.23.21 起,Self-hosted LiveSync 更改了默认行为和数据库结构。进行了以下更改:\n\n1. **文件名的区分大小写** \n现在处理文件名时不区分大小写。这对于大多数平台来说是一个有益的更改,除了 Linux 和 iOS,它们不能有效地管理文件名的大小写敏感性。\n(在这些平台上,对于名称相同但大小写不同的文件将显示警告)。\n\n2. **chunks 的版本处理** \nchunks 是不可变的,这使得它们的版本可以固定。此更改将提高文件保存的性能。\n\n___然而,要启用这些更改中的任何一个,都需要重建远程和本地数据库。这个过程需要几分钟,我们建议您在有充足时间时进行。___\n\n- 如果您希望保持以前的行为,可以使用 `${KEEP}` 跳过此过程。\n- 如果您没有足够的时间,请选择 `${DISMISS}`。稍后会再次提示您。\n- 如果您已在另一台设备上重建了数据库,请选择 `${DISMISS}` 并尝试再次同步。由于检测到差异,系统会再次提示您"},"moduleMigration.optionAdjustRemote":{def:"Adjust to remote",es:"Ajustar al remoto",ja:"リモートに合わせる",ko:"원격에 맞추기",ru:"Настроить под удалённую",zh:"调整到远程设置"},"moduleMigration.optionDecideLater":{def:"Decide it later",es:"Decidirlo más tarde",ja:"後で決める",ko:"나중에 결정하기",ru:"Решить позже",zh:"稍后决定"},"moduleMigration.optionEnableBoth":{def:"Enable both",es:"Habilitar ambos",ja:"両方を有効にする",ko:"둘 다 활성화",ru:"Включить оба",zh:"启用两者"},"moduleMigration.optionEnableFilenameCaseInsensitive":{def:"Enable only #1",es:"Habilitar solo #1",ja:"#1のみ有効にする",ko:"#1만 활성화",ru:"Включить только #1",zh:"仅启用 #1"},"moduleMigration.optionEnableFixedRevisionForChunks":{def:"Enable only #2",es:"Habilitar solo #2",ja:"#2のみ有効にする",ko:"#2만 활성화",ru:"Включить только #2",zh:"仅启用 #2"},"moduleMigration.optionHaveSetupUri":{def:"Yes, I have",es:"Sí, tengo",ja:"はい、持っています",ko:"예, 있습니다",ru:"Да, есть",zh:"是的,我有"},"moduleMigration.optionKeepPreviousBehaviour":{def:"Keep previous behaviour",es:"Mantener comportamiento anterior",ja:"以前の動作を維持",ko:"이전 동작 유지",ru:"Сохранить предыдущее поведение",zh:"保持以前的行为"},"moduleMigration.optionManualSetup":{def:"Set it up all manually",es:"Configurarlo todo manualmente",ja:"すべて手動でセットアップ",ko:"모든 것을 수동으로 설정",ru:"Настроить всё вручную",zh:"全部手动设置"},"moduleMigration.optionNoAskAgain":{def:"No, please ask again",es:"No, por favor pregúntame de nuevo",ja:"いいえ、後で確認する",ko:"아니요 (나중에 다시 물어보기)",ru:"Нет, спросить снова",zh:"不,请稍后再次询问"},"moduleMigration.optionNoSetupUri":{def:"No, I do not have",es:"No, no tengo",ja:"いいえ、持っていません",ko:"아니요, 없습니다",ru:"Нет, нет",zh:"不,我没有"},"moduleMigration.optionRemindNextLaunch":{def:"Remind me at the next launch",es:"Recordármelo en el próximo inicio",ja:"次回起動時にリマインド",ko:"다음 시작 시 알림",ru:"Напомнить при следующем запуске",zh:"下次启动时提醒我"},"moduleMigration.optionSetupViaP2P":{def:"Use %{short_p2p_sync} to set up",ja:"%{short_p2p_sync}を使ってセットアップ",ko:"%{short_p2p_sync}를 사용하여 설정",ru:"Использовать short_p2p_sync для настройки",zh:"Use %{short_p2p_sync} to set up"},"moduleMigration.optionSetupWizard":{def:"Take me into the setup wizard",es:"Llévame al asistente de configuración",ja:"セットアップウィザードへ",ko:"설정 마법사로 안내",ru:"Перейти в мастер настройки",zh:"带我进入设置向导"},"moduleMigration.optionYesFetchAgain":{def:"Yes, fetch again",es:"Sí, obtener nuevamente",ja:"はい、再フェッチする",ko:"예 (다시 가져오기)",ru:"Да, загрузить снова",zh:"是的,再次获取"},"moduleMigration.titleCaseSensitivity":{def:"Case Sensitivity",es:"Sensibilidad a mayúsculas",ja:"大文字小文字の区別",ko:"대소문자 구분",ru:"Чувствительность к регистру",zh:"大小写敏感性"},"moduleMigration.titleRecommendSetupUri":{def:"Recommendation to use Setup URI",es:"Recomendación de uso de URI de configuración",ja:"セットアップURIの使用を推奨",ko:"Setup URI 사용 권장",ru:"Рекомендация использовать Setup URI",zh:"推荐使用设置 URI"},"moduleMigration.titleWelcome":{def:"Welcome to Self-hosted LiveSync",es:"Bienvenido a Self-hosted LiveSync",ja:"Self-hosted LiveSyncへようこそ",ko:"Self-hosted LiveSync에 오신 것을 환영합니다",ru:"Добро пожаловать в Self-hosted LiveSync",zh:"欢迎使用 Self-hosted LiveSync"},"moduleObsidianMenu.replicate":{def:"Replicate",es:"Replicar",ja:"レプリケート",ko:"복제",ru:"Реплицировать",zh:"复制"},"Move remotely deleted files to the trash, instead of deleting.":{def:"Move remotely deleted files to the trash, instead of deleting.",es:"Mover archivos borrados remotos a papelera en lugar de eliminarlos",ja:"リモートで削除されたファイルを削除せずにゴミ箱に移動する。",ko:"원격에서 삭제된 파일을 삭제하는 대신 휴지통으로 이동합니다.",ru:"Перемещать удалённые на удалённом сервере файлы в корзину вместо удаления.",zh:"将远程删除的文件移至回收站,而不是直接删除"},'Not all messages have been translated. And, please revert to "Default" when reporting errors.':{def:'Not all messages have been translated. And, please revert to "Default" when reporting errors.',es:'No todos los mensajes están traducidos. Por favor, vuelva a "Predeterminado" al reportar errores.',ja:'すべてのメッセージが翻訳されているわけではありません。また、Issue報告の際にはいったん"Default"に戻してください',ko:'모든 메시지가 번역되지 않았습니다. 오류 신고 시 "기본값"으로 되돌려 주세요.',ru:"Не все сообщения переведены. И, пожалуйста, вернитесь к «По умолчанию» при сообщении об ошибках.",zh:'并非所有消息都已翻译。请在报告错误时恢复为"默认"'},"Notify all setting files":{def:"Notify all setting files",es:"Notificar todos los archivos de configuración",ja:"すべての設定を通知",ko:"모든 설정 파일 알림",ru:"Уведомлять обо всех файлах настроек",zh:"通知所有设置文件"},"Notify customized":{def:"Notify customized",es:"Notificar personalizaciones",ja:"カスタマイズが行われたら通知する",ko:"사용자 설정 알림",ru:"Уведомлять о настройках",zh:"通知自定义设置"},"Notify when other device has newly customized.":{def:"Notify when other device has newly customized.",es:"Notificar cuando otro dispositivo personalice",ja:"別の端末がカスタマイズを行なったら通知する",ko:"다른 기기에서 새로운 사용자 설정이 있을 때 알림을 받습니다.",ru:"Уведомлять, когда другое устройство изменило настройки.",zh:"当其他设备有新的自定义设置时通知 "},"Notify when the estimated remote storage size exceeds on start up":{def:"Notify when the estimated remote storage size exceeds on start up",es:"Notificar cuando el tamaño estimado del almacenamiento remoto exceda al iniciar",ja:"起動時に予想リモートストレージサイズを超えたら通知",ko:"시작 시 예상 원격 스토리지 크기가 초과되면 알림",ru:"Уведомлять, когда оценочный размер удалённого хранилища превышает при запуске",zh:"启动时当估计的远程存储大小超出时通知"},"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.":{def:"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.",es:"Número de lotes a procesar. Default 40, mínimo 2. Controla documentos en memoria",ja:"1度に処理するバッチの数。デフォルトは40、最小は2。この数値は、どれだけの容量の書類がメモリに保存されるかも定義します。",ko:"한 번에 처리할 일괄 처리 수입니다. 기본값은 40입니다. 최소값은 2입니다. 이는 일괄 크기와 함께 메모리에 보관되는 문서 수를 제어합니다.",ru:"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time.",zh:"一次处理的批量数量。默认为 40。最小为 2。此设置与批量大小一起控制一次在内存中保留多少文档"},"Number of changes to sync at a time. Defaults to 50. Minimum is 2.":{def:"Number of changes to sync at a time. Defaults to 50. Minimum is 2.",es:"Número de cambios a sincronizar simultáneamente. Default 50, mínimo 2",ja:"一度に同期する変更の数。デフォルトは50、最小は2。",ko:"한 번에 동기화할 변경 사항의 수입니다. 기본값은 50입니다. 최소값은 2입니다.",ru:"Количество изменений для синхронизации за раз. По умолчанию 50. Минимум 2.",zh:"一次同步的更改数量。默认为 50。最小为 2。"},"obsidianLiveSyncSettingTab.btnApply":{def:"Apply",es:"Aplicar",ja:"適用",ko:"적용",ru:"Применить",zh:"应用"},"obsidianLiveSyncSettingTab.btnCheck":{def:"Check",es:"Verificar",ja:"確認",ko:"확인",ru:"Проверить",zh:"检查"},"obsidianLiveSyncSettingTab.btnCopy":{def:"Copy",es:"Copiar",ja:"コピー",ko:"복사",ru:"Копировать",zh:"复制"},"obsidianLiveSyncSettingTab.btnDisable":{def:"Disable",es:"Desactivar",ja:"無効化",ko:"비활성화",ru:"Отключить",zh:"禁用"},"obsidianLiveSyncSettingTab.btnDiscard":{def:"Discard",es:"Descartar",ja:"破棄",ko:"삭제",ru:"Отменить",zh:"丢弃"},"obsidianLiveSyncSettingTab.btnEnable":{def:"Enable",es:"Activar",ja:"有効化",ko:"활성화",ru:"Включить",zh:"启用"},"obsidianLiveSyncSettingTab.btnFix":{def:"Fix",es:"Corregir",ja:"修正",ko:"수정",ru:"Исправить",zh:"修复"},"obsidianLiveSyncSettingTab.btnGotItAndUpdated":{def:"I got it and updated.",es:"Lo entendí y actualicé.",ja:"理解しました、更新しました。",ko:"알겠습니다. 업데이트했습니다.",ru:"Понял и обновил.",zh:"我明白了并且已更新"},"obsidianLiveSyncSettingTab.btnNext":{def:"Next",es:"Siguiente",ja:"次へ",ko:"다음",ru:"Далее",zh:"下一步"},"obsidianLiveSyncSettingTab.btnStart":{def:"Start",es:"Iniciar",ja:"開始",ko:"시작",ru:"Старт",zh:"开始"},"obsidianLiveSyncSettingTab.btnTest":{def:"Test",es:"Probar",ja:"テスト",ko:"테스트",ru:"Тест",zh:"测试"},"obsidianLiveSyncSettingTab.btnUse":{def:"Use",es:"Usar",ja:"使用",ko:"사용",ru:"Использовать",zh:"使用"},"obsidianLiveSyncSettingTab.buttonFetch":{def:"Fetch",es:"Obtener",ja:"フェッチ",ko:"가져오기",ru:"Загрузить",zh:"获取"},"obsidianLiveSyncSettingTab.buttonNext":{def:"Next",es:"Siguiente",ja:"次へ",ko:"다음",ru:"Далее",zh:"下一步"},"obsidianLiveSyncSettingTab.defaultLanguage":{def:"Default",es:"Predeterminado",ja:"デフォルト",ko:"기본값",ru:"По умолчанию",zh:"默认"},"obsidianLiveSyncSettingTab.descConnectSetupURI":{def:"This is the recommended method to set up Self-hosted LiveSync with a Setup URI.",es:"Este es el método recomendado para configurar Self-hosted LiveSync con una URI de configuración.",ja:"セットアップURIを使用してSelf-hosted LiveSyncをセットアップする推奨方法です。",ko:"이것은 Setup URI로 Self-hosted LiveSync를 설정하는 권장 방법입니다.",ru:"This is the recommended method to set up Self-hosted LiveSync with a Setup URI.",zh:"这是使用设置 URI 设置 Self-hosted LiveSync 的推荐方法"},"obsidianLiveSyncSettingTab.descCopySetupURI":{def:"Perfect for setting up a new device!",es:"¡Perfecto para configurar un nuevo dispositivo!",ja:"新しいデバイスのセットアップにおすすめ!",ko:"새 기기 설정에 완벽합니다!",ru:"Perfect for setting up a new device!",zh:"非常适合设置新设备!"},"obsidianLiveSyncSettingTab.descEnableLiveSync":{def:"Only enable this after configuring either of the above two options or completing all configuration manually.",es:"Solo habilita esto después de configurar cualquiera de las dos opciones anteriores o completar toda la configuración manualmente.",ja:"上記の2つのオプションのいずれかを設定するか、すべての設定を手動で完了した後にのみ有効にしてください。",ko:"위의 두 옵션 중 하나를 구성하거나 모든 구성을 수동으로 완료한 후에만 활성화하세요.",ru:"Only enable this after configuring either of the above two options or completing all configuration manually.",zh:"仅在配置了上述两个选项之一或手动完成所有配置后启用此选项"},"obsidianLiveSyncSettingTab.descFetchConfigFromRemote":{def:"Fetch necessary settings from already configured remote server.",es:"Obtener las configuraciones necesarias del servidor remoto ya configurado.",ja:"既に設定済みのリモートサーバーから必要な設定を取得します。",ko:"이미 구성된 원격 서버에서 필요한 설정을 가져옵니다.",ru:"Fetch necessary settings from already configured remote server.",zh:"从已配置的远程服务器获取必要的设置"},"obsidianLiveSyncSettingTab.descManualSetup":{def:"Not recommended, but useful if you don't have a Setup URI",es:"No recomendado, pero útil si no tienes una URI de configuración",ja:"推奨しませんが、セットアップURIがない場合に便利です",ko:"권장하지 않지만 Setup URI가 없는 경우에 유용합니다",ru:"Not recommended, but useful if you don't have a Setup URI",zh:"不推荐,但如果您没有设置 URI 则很有用"},"obsidianLiveSyncSettingTab.descTestDatabaseConnection":{def:"Open database connection. If the remote database is not found and you have permission to create a database, the database will be created.",es:"Abrir conexión a la base de datos. Si no se encuentra la base de datos remota y tienes permiso para crear una base de datos, se creará la base de datos.",ja:"データベース接続を開きます。リモートデータベースが見つからず、データベースを作成する権限がある場合は、データベースが作成されます。",ko:"데이터베이스 연결을 엽니다. 원격 데이터베이스를 찾을 수 없고 데이터베이스 생성 권한이 있는 경우, 데이터베이스가 생성됩니다.",ru:"Open database connection. If the remote database is not found and you have permission to create a database, the database will be created.",zh:"打开数据库连接。如果未找到远程数据库并且您有创建数据库的权限,则将创建数据库"},"obsidianLiveSyncSettingTab.descValidateDatabaseConfig":{def:"Checks and fixes any potential issues with the database config.",es:"Verifica y soluciona cualquier problema potencial con la configuración de la base de datos.",ja:"データベース設定の潜在的な問題を確認し、修正します。",ko:"데이터베이스 구성의 잠재적 문제를 확인하고 수정합니다.",ru:"Checks and fixes any potential issues with the database config.",zh:"检查并修复数据库配置中的任何潜在问题"},"obsidianLiveSyncSettingTab.errAccessForbidden":{def:"❗ Access forbidden.",es:"Acceso prohibido.",ja:"❗ アクセスが禁止されています。",ko:"❗ 액세스가 금지되었습니다.",ru:"❗ Доступ запрещён.",zh:"❗ 访问被禁止"},"obsidianLiveSyncSettingTab.errCannotContinueTest":{def:"We could not continue the test.",es:"No se pudo continuar con la prueba.",ja:"テストを続行できませんでした。",ko:"테스트를 계속할 수 없습니다.",ru:"Мы не можем продолжить тест.",zh:"我们无法继续测试。"},"obsidianLiveSyncSettingTab.errCorsCredentials":{def:"❗ cors.credentials is wrong",es:"❗ cors.credentials es incorrecto",ja:"❗ cors.credentialsが不正です",ko:"❗ cors.credentials가 잘못되었습니다",ru:"❗ cors.credentials неверно",zh:"❗ cors.credentials 设置错误"},"obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials":{def:"❗ CORS is not allowing credentials",es:"CORS no permite credenciales",ja:"❗ CORSが認証情報を許可していません",ko:"❗ CORS에서 자격 증명을 허용하지 않습니다",ru:"❗ CORS не разрешает учётные данные",zh:"❗ CORS 不允许凭据"},"obsidianLiveSyncSettingTab.errCorsOrigins":{def:"❗ cors.origins is wrong",es:"❗ cors.origins es incorrecto",ja:"❗ cors.originsが不正です",ko:"❗ cors.origins가 잘못되었습니다",ru:"❗ cors.origins неверно",zh:"❗ cors.origins 设置错误"},"obsidianLiveSyncSettingTab.errEnableCors":{def:"❗ httpd.enable_cors is wrong",es:"❗ httpd.enable_cors es incorrecto",ja:"❗ httpd.enable_corsが不正です",ko:"❗ httpd.enable_cors가 잘못되었습니다",ru:"❗ httpd.enable_cors неверно",zh:"❗ httpd.enable_cors 设置错误"},"obsidianLiveSyncSettingTab.errEnableCorsChttpd":{def:"❗ chttpd.enable_cors is wrong",ja:"❗ chttpd.enable_corsが不正です",ru:"❗ chttpd.enable_cors неверно",zh:"❗ chttpd.enable_cors 设置错误"},"obsidianLiveSyncSettingTab.errMaxDocumentSize":{def:"❗ couchdb.max_document_size is low)",es:"❗ couchdb.max_document_size es bajo)",ja:"❗ couchdb.max_document_sizeが低すぎます",ko:"❗ couchdb.max_document_size가 낮습니다)",ru:"❗ couchdb.max_document_size низкое",zh:"❗ couchdb.max_document_size 设置过低)"},"obsidianLiveSyncSettingTab.errMaxRequestSize":{def:"❗ chttpd.max_http_request_size is low)",es:"❗ chttpd.max_http_request_size es bajo)",ja:"❗ chttpd.max_http_request_sizeが低すぎます",ko:"❗ chttpd.max_http_request_size가 낮습니다)",ru:"❗ chttpd.max_http_request_size низкое",zh:"❗ chttpd.max_http_request_size 设置过低)"},"obsidianLiveSyncSettingTab.errMissingWwwAuth":{def:"❗ httpd.WWW-Authenticate is missing",es:"❗ httpd.WWW-Authenticate falta",ja:"❗ httpd.WWW-Authenticateが不足しています",ko:"❗ httpd.WWW-Authenticate가 누락되었습니다",ru:"❗ httpd.WWW-Authenticate отсутствует",zh:"❗ 缺少 httpd.WWW-Authenticate 设置"},"obsidianLiveSyncSettingTab.errRequireValidUser":{def:"❗ chttpd.require_valid_user is wrong.",es:"❗ chttpd.require_valid_user es incorrecto.",ja:"❗ chttpd.require_valid_userが不正です。",ko:"❗ chttpd.require_valid_user가 잘못되었습니다.",ru:"❗ chttpd.require_valid_user неверно.",zh:"❗ chttpd.require_valid_user 设置错误"},"obsidianLiveSyncSettingTab.errRequireValidUserAuth":{def:"❗ chttpd_auth.require_valid_user is wrong.",es:"❗ chttpd_auth.require_valid_user es incorrecto.",ja:"❗ chttpd_auth.require_valid_userが不正です。",ko:"❗ chttpd_auth.require_valid_user가 잘못되었습니다.",ru:"❗ chttpd_auth.require_valid_user неверно.",zh:"❗ chttpd_auth.require_valid_user 设置错误"},"obsidianLiveSyncSettingTab.labelDisabled":{def:"⏹️ : Disabled",es:"⏹️ : Desactivado",ja:"⏹️ : 無効",ko:"⏹️ : 비활성화됨",ru:"⏹️ : Отключено",zh:"⏹️ : 已禁用"},"obsidianLiveSyncSettingTab.labelEnabled":{def:"🔁 : Enabled",es:"🔁 : Activado",ja:"🔁 : 有効",ko:"🔁 : 활성화됨",ru:"🔁 : Включено",zh:"🔁 : 已启用"},"obsidianLiveSyncSettingTab.levelAdvanced":{def:" (Advanced)",es:" (avanzado)",ja:" (上級)",ko:" (고급)",ru:" (Расширенные)",zh:"(进阶)"},"obsidianLiveSyncSettingTab.levelEdgeCase":{def:" (Edge Case)",es:" (excepción)",ja:" (エッジケース)",ko:" (특수 사례)",ru:" (Граничные случаи)",zh:"(边缘情况)"},"obsidianLiveSyncSettingTab.levelPowerUser":{def:" (Power User)",es:" (experto)",ja:" (エキスパート)",ko:" (파워 유저)",ru:" (Опытный пользователь)",zh:"(高级用户)"},"obsidianLiveSyncSettingTab.linkOpenInBrowser":{def:"Open in browser",es:"Abrir en el navegador",ja:"ブラウザで開く",ko:"브라우저에서 열기",ru:"Открыть в браузере",zh:"在浏览器中打开"},"obsidianLiveSyncSettingTab.linkPageTop":{def:"Page Top",es:"Ir arriba",ja:"ページトップ",ko:"페이지 상단",ru:"В начало страницы",zh:"页面顶部"},"obsidianLiveSyncSettingTab.linkTipsAndTroubleshooting":{def:"Tips and Troubleshooting",es:"Consejos y solución de problemas",ja:"ヒントとトラブルシューティング",ko:"팁 및 문제 해결",ru:"Советы и устранение неполадок",zh:"提示和故障排除"},"obsidianLiveSyncSettingTab.linkTroubleshooting":{def:"/docs/troubleshooting.md",es:"/docs/es/troubleshooting.md",ja:"/docs/troubleshooting.md",ko:"/docs/troubleshooting.md",ru:"/docs/troubleshooting.md",zh:"/docs/troubleshooting.md"},"obsidianLiveSyncSettingTab.logCannotUseCloudant":{def:"This feature cannot be used with IBM Cloudant.",es:"Esta función no se puede utilizar con IBM Cloudant.",ja:"この機能はIBM Cloudantでは使用できません。",ko:"이 기능은 IBM Cloudant와 함께 사용할 수 없습니다.",ru:"Эта функция недоступна для IBM Cloudant.",zh:"此功能不能与 IBM Cloudant 一起使用 "},"obsidianLiveSyncSettingTab.logCheckingConfigDone":{def:"Checking configuration done",es:"Verificación de configuración completada",ja:"設定の確認が完了しました",ko:"구성 확인 완료",ru:"Проверка конфигурации завершена",zh:"配置检查完成"},"obsidianLiveSyncSettingTab.logCheckingConfigFailed":{def:"Checking configuration failed",es:"La verificación de configuración falló",ja:"設定の確認に失敗しました",ko:"구성 확인 실패",ru:"Проверка конфигурации не удалась",zh:"配置检查失败"},"obsidianLiveSyncSettingTab.logCheckingDbConfig":{def:"Checking database configuration",es:"Verificando la configuración de la base de datos",ja:"データベース設定を確認中",ko:"데이터베이스 구성 확인 중",ru:"Проверка конфигурации базы данных",zh:"正在检查数据库配置"},"obsidianLiveSyncSettingTab.logCheckPassphraseFailed":{def:"ERROR: Failed to check passphrase with the remote server:\n${db}.",es:"ERROR: Error al comprobar la frase de contraseña con el servidor remoto: \n${db}.",ja:"エラー: リモートサーバーとのパスフレーズ確認に失敗しました:\n${db}。",ko:"오류: 원격 서버와 패스프레이즈 확인에 실패했습니다: \n${db}.",ru:"ОШИБКА: Не удалось проверить пароль с удалённым сервером: db.",zh:"错误:无法使用远程服务器检查密码:\n${db} "},"obsidianLiveSyncSettingTab.logConfiguredDisabled":{def:"Configured synchronization mode: DISABLED",es:"Modo de sincronización configurado: DESACTIVADO",ja:"設定された同期モード: 無効",ko:"구성된 동기화 모드: 비활성화됨",ru:"Настроенный режим синхронизации: ОТКЛЮЧЕН",zh:"配置的同步模式:已禁用"},"obsidianLiveSyncSettingTab.logConfiguredLiveSync":{def:"Configured synchronization mode: LiveSync",es:"Modo de sincronización configurado: Sincronización en Vivo",ja:"設定された同期モード: LiveSync",ko:"구성된 동기화 모드: LiveSync",ru:"Настроенный режим синхронизации: LiveSync",zh:"配置的同步模式:LiveSync"},"obsidianLiveSyncSettingTab.logConfiguredPeriodic":{def:"Configured synchronization mode: Periodic",es:"Modo de sincronización configurado: Periódico",ja:"設定された同期モード: 定期",ko:"구성된 동기화 모드: 주기적",ru:"Настроенный режим синхронизации: Периодический",zh:"配置的同步模式:定期"},"obsidianLiveSyncSettingTab.logCouchDbConfigFail":{def:"CouchDB Configuration: ${title} failed",es:"Configuración de CouchDB: ${title} falló",ja:"CouchDB設定: ${title} 失敗",ko:"CouchDB 구성: ${title} 실패",ru:"Конфигурация CouchDB: title не удалась",zh:"CouchDB 配置:${title} 失败"},"obsidianLiveSyncSettingTab.logCouchDbConfigSet":{def:"CouchDB Configuration: ${title} -> Set ${key} to ${value}",es:"Configuración de CouchDB: ${title} -> Establecer ${key} en ${value}",ja:"CouchDB設定: ${title} -> ${key}を${value}に設定",ko:"CouchDB 구성: ${title} -> ${key}를 ${value}로 설정",ru:"Конфигурация CouchDB: title -> Установить key в value",zh:"CouchDB 配置:${title} -> 设置 ${key} 为 ${value}"},"obsidianLiveSyncSettingTab.logCouchDbConfigUpdated":{def:"CouchDB Configuration: ${title} successfully updated",es:"Configuración de CouchDB: ${title} actualizado correctamente",ja:"CouchDB設定: ${title} 正常に更新されました",ko:"CouchDB 구성: ${title} 성공적으로 업데이트됨",ru:"Конфигурация CouchDB: title успешно обновлена",zh:"CouchDB 配置:${title} 成功更新"},"obsidianLiveSyncSettingTab.logDatabaseConnected":{def:"Database connected",es:"Base de datos conectada",ja:"データベースに接続しました",ko:"데이터베이스 연결됨",ru:"База данных подключена",zh:"数据库已连接"},"obsidianLiveSyncSettingTab.logEncryptionNoPassphrase":{def:"You cannot enable encryption without a passphrase",es:"No puedes habilitar el cifrado sin una frase de contraseña",ja:"パスフレーズなしでは暗号化を有効にできません",ko:"패스프레이즈 없이는 암호화를 활성화할 수 없습니다",ru:"Вы не можете включить шифрование без парольной фразы",zh:"没有密码无法启用加密"},"obsidianLiveSyncSettingTab.logEncryptionNoSupport":{def:"Your device does not support encryption.",es:"Tu dispositivo no admite el cifrado.",ja:"お使いのデバイスは暗号化をサポートしていません。",ko:"기기가 암호화를 지원하지 않습니다.",ru:"Ваше устройство не поддерживает шифрование.",zh:"您的设备不支持加密 "},"obsidianLiveSyncSettingTab.logErrorOccurred":{def:"An error occurred!!",es:"¡Ocurrió un error!",ja:"エラーが発生しました!!",ko:"오류가 발생했습니다!",ru:"Произошла ошибка!!",zh:"发生错误!!"},"obsidianLiveSyncSettingTab.logEstimatedSize":{def:"Estimated size: ${size}",es:"Tamaño estimado: ${size}",ja:"推定サイズ: ${size}",ko:"예상 크기: ${size}",ru:"Примерный размер: size",zh:"估计大小:${size}"},"obsidianLiveSyncSettingTab.logPassphraseInvalid":{def:"Passphrase is not valid, please fix it.",es:"La frase de contraseña no es válida, por favor corrígela.",ja:"パスフレーズが無効です、修正してください。",ko:"패스프레이즈가 유효하지 않습니다. 수정해 주세요.",ru:"Парольная фраза недействительна, пожалуйста, исправьте.",zh:"密码无效,请修正"},"obsidianLiveSyncSettingTab.logPassphraseNotCompatible":{def:"ERROR: Passphrase is not compatible with the remote server! Please check it again!",es:"ERROR: ¡La frase de contraseña no es compatible con el servidor remoto! ¡Por favor, revísala de nuevo!",ja:"エラー: パスフレーズがリモートサーバーと適合しません!再度確認してください!",ko:"오류: 패스프레이즈가 원격 서버와 호환되지 않습니다! 다시 확인해 주세요!",ru:"ОШИБКА: Парольная фраза несовместима с удалённым сервером!",zh:"错误:密码与远程服务器不兼容!请再次检查!"},"obsidianLiveSyncSettingTab.logRebuildNote":{def:"Syncing has been disabled, fetch and re-enabled if desired.",es:"La sincronización ha sido desactivada, obtén y vuelve a activar si lo deseas.",ja:"同期が無効になりました。必要に応じてフェッチして再有効化してください。",ko:"동기화가 비활성화되었습니다. 원하는 경우 가져오기 후 다시 활성화하세요.",ru:"Синхронизация отключена, загрузите и включите снова при желании.",zh:"同步已禁用,如果需要,请获取并重新启用"},"obsidianLiveSyncSettingTab.logSelectAnyPreset":{def:"Select any preset.",es:"Selecciona cualquier preestablecido.",ja:"プリセットを選択してください。",ko:"프리셋을 선택하세요.",ru:"Выберите любой пресет.",zh:"选择任何预设"},"obsidianLiveSyncSettingTab.msgAreYouSureProceed":{def:"Are you sure to proceed?",es:"¿Estás seguro de proceder?",ja:"本当に続行しますか?",ko:"정말로 진행하시겠습니까?",ru:"Вы уверены, что хотите продолжить?",zh:"您确定要继续吗?"},"obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied":{def:"Changes need to be applied!",es:"¡Los cambios deben aplicarse!",ja:"変更を適用する必要があります!",ko:"변경사항을 적용해야 합니다!",ru:"Изменения нужно применить!",zh:"需要应用更改!"},"obsidianLiveSyncSettingTab.msgConfigCheck":{def:"--Config check--",es:"--Verificación de configuración--",ja:"--設定確認--",ko:"--구성 확인--",ru:"--Проверка конфигурации--",zh:"--配置检查--"},"obsidianLiveSyncSettingTab.msgConfigCheckFailed":{def:"The configuration check has failed. Do you want to continue anyway?",es:"La verificación de configuración ha fallado. ¿Quieres continuar de todos modos?",ja:"設定確認に失敗しました。それでも続行しますか?",ko:"구성 확인에 실패했습니다. 그래도 계속하시겠습니까?",ru:"Проверка конфигурации не удалась. Вы всё равно хотите продолжить?",zh:"配置检查失败。您仍要继续吗?"},"obsidianLiveSyncSettingTab.msgConnectionCheck":{def:"--Connection check--",es:"--Verificación de conexión--",ja:"--接続確認--",ko:"--연결 확인--",ru:"--Проверка подключения--",zh:"--连接检查--"},"obsidianLiveSyncSettingTab.msgConnectionProxyNote":{def:"If you're having trouble with the Connection-check (even after checking config), please check your reverse proxy configuration.",es:"Si tienes problemas con la verificación de conexión (incluso después de verificar la configuración), por favor verifica la configuración de tu proxy reverso.",ja:"設定確認後も接続確認に問題がある場合は、リバースプロキシの設定を確認してください。",ko:"구성 확인 후에도 연결 확인에 문제가 있는 경우, 리버스 프록시 구성을 확인해 주세요.",ru:"Если у вас проблемы с проверкой подключения, проверьте конфигурацию обратного прокси.",zh:"如果您在连接检查时遇到问题(即使检查了配置后),请检查您的反向代理配置"},"obsidianLiveSyncSettingTab.msgCurrentOrigin":{def:"Current origin: ${origin}",es:"Origen actual: {origin}",ja:"現在のオリジン: ${origin}",ko:"현재 원점: {origin}",ru:"Текущий origin: origin",zh:"当前源: {origin}"},"obsidianLiveSyncSettingTab.msgDiscardConfirmation":{def:"Do you really want to discard existing settings and databases?",es:"¿Realmente deseas descartar las configuraciones y bases de datos existentes?",ja:"本当に既存の設定とデータベースを破棄しますか?",ko:"정말로 기존 설정과 데이터베이스를 삭제하시겠습니까?",ru:"Вы действительно хотите отменить существующие настройки и базы данных?",zh:"您真的要丢弃现有的设置和数据库吗?"},"obsidianLiveSyncSettingTab.msgDone":{def:"--Done--",es:"--Hecho--",ja:"--完了--",ko:"--완료--",ru:"--Готово--",zh:"--完成--"},"obsidianLiveSyncSettingTab.msgEnableCors":{def:"Set httpd.enable_cors",es:"Configurar httpd.enable_cors",ja:"httpd.enable_corsを設定",ko:"httpd.enable_cors 설정",ru:"Установить httpd.enable_cors",zh:"设置 httpd.enable_cors"},"obsidianLiveSyncSettingTab.msgEnableCorsChttpd":{def:"Set chttpd.enable_cors",ja:"chttpd.enable_corsを設定",ru:"Установить chttpd.enable_cors",zh:"设置 chttpd.enable_cors"},"obsidianLiveSyncSettingTab.msgEnableEncryptionRecommendation":{def:"We recommend enabling End-To-End Encryption, and Path Obfuscation. Are you sure you want to continue without encryption?",es:"Recomendamos habilitar el cifrado de extremo a extremo y la obfuscación de ruta. ¿Estás seguro de querer continuar sin cifrado?",ja:"エンドツーエンド暗号化とパス難読化を有効にすることをお勧めします。暗号化なしで続行してもよろしいですか?",ko:"종단간 암호화와 경로 난독화를 활성화하는 것을 권장합니다. 정말로 암호화 없이 계속하시겠습니까?",ru:"Мы рекомендуем включить сквозное шифрование. Вы уверены, что хотите продолжить без шифрования?",zh:"我们建议启用端到端加密和路径混淆。您确定要在没有加密的情况下继续吗?"},"obsidianLiveSyncSettingTab.msgFetchConfigFromRemote":{def:"Do you want to fetch the config from the remote server?",es:"¿Quieres obtener la configuración del servidor remoto?",ja:"リモートサーバーから設定を取得しますか?",ko:"원격 서버에서 구성을 가져오시겠습니까?",ru:"Вы хотите загрузить конфигурацию с удалённого сервера?",zh:"您想从远程服务器获取配置吗?"},"obsidianLiveSyncSettingTab.msgGenerateSetupURI":{def:"All done! Do you want to generate a setup URI to set up other devices?",es:"¡Todo listo! ¿Quieres generar un URI de configuración para configurar otros dispositivos?",ja:"完了他のデバイスをセットアップするためのセットアップURIを生成しますか",ko:"모든 작업이 완료되었습니다! 다른 기기를 설정하기 위해 Setup URI를 생성하시겠습니까?",ru:"Всё готово! Вы хотите сгенерировать Setup URI для настройки других устройств?",zh:"全部完成!您想生成一个设置 URI 来设置其他设备吗?"},"obsidianLiveSyncSettingTab.msgIfConfigNotPersistent":{def:"If the server configuration is not persistent (e.g., running on docker), the values here may change. Once you are able to connect, please update the settings in the server's local.ini.",es:"Si la configuración del servidor no es persistente (por ejemplo, ejecutándose en docker), los valores aquí pueden cambiar. Una vez que puedas conectarte, por favor actualiza las configuraciones en el local.ini del servidor.",ja:"サーバー設定が永続的でない場合(例: Dockerで実行中、ここの値は変更される可能性があります。接続できるようになったら、サーバーのlocal.iniの設定を更新してください。",ko:"서버 설정이 영구적으로 저장되지 않는 환경(예: Docker에서 실행 중)에서는 이곳의 값들이 변경될 수 있습니다. 연결이 가능해지면 서버의 local.ini 파일에서 설정을 수동으로 업데이트해 주세요.",ru:"Если конфигурация сервера непостоянна, значения здесь могут измениться.",zh:"如果服务器配置不是持久的(例如,在 docker 上运行),此处的值可能会更改。一旦能够连接,请更新服务器 local.ini 中的设置"},"obsidianLiveSyncSettingTab.msgInvalidPassphrase":{def:"Your encryption passphrase might be invalid. Are you sure you want to continue?",es:"Tu frase de contraseña de cifrado podría ser inválida. ¿Estás seguro de querer continuar?",ja:"暗号化パスフレーズが無効かもしれません。続行してもよろしいですか?",ko:"암호화 패스프레이즈가 유효하지 않을 수 있습니다. 정말로 계속하시겠습니까?",ru:"Ваша парольная фраза шифрования может быть недействительна.",zh:"您的加密密码可能无效。您确定要继续吗?"},"obsidianLiveSyncSettingTab.msgNewVersionNote":{def:"Here due to an upgrade notification? Please review the version history. If you're satisfied, click the button. A new update will prompt this again.",es:"¿Aquí debido a una notificación de actualización? Por favor, revise el historial de versiones. Si está satisfecho, haga clic en el botón. Una nueva actualización volverá a mostrar esto.",ja:"アップグレード通知でここに来ましたか?バージョン履歴を確認してください。納得したらボタンをクリックしてください。新しい更新があると再度確認されます。",ko:"업그레이드 알림으로 여기에 오셨나요? 버전 기록을 검토해 주세요. 만족하신다면 버튼을 클릭하세요. 새로운 업데이트 시 다시 안내됩니다.",ru:"Вы пришли из-за уведомления об обновлении? Просмотрите историю версий.",zh:"因为升级通知来到这里?请查看版本历史。如果您满意,请点击按钮。新的更新将再次提示此信息"},"obsidianLiveSyncSettingTab.msgNonHTTPSInfo":{def:"Configured as non-HTTPS URI. Be warned that this may not work on mobile devices.",es:"Configurado como URI que no es HTTPS. Ten en cuenta que esto puede no funcionar en dispositivos móviles.",ja:"非HTTPS URIとして設定されています。モバイルデバイスでは動作しない可能性があります。",ko:"비 HTTPS URI로 구성되었습니다. 모바일 기기에서는 작동하지 않을 수 있으니 주의하세요.",ru:"Настроено как не-HTTPS URI. Это может не работать на мобильных устройствах.",zh:"配置为非 HTTPS URI。请注意,这可能在移动设备上无法工作"},"obsidianLiveSyncSettingTab.msgNonHTTPSWarning":{def:"Cannot connect to non-HTTPS URI. Please update your config and try again.",es:"No se puede conectar a URI que no sean HTTPS. Por favor, actualiza tu configuración y vuelve a intentarlo.",ja:"非HTTPS URIに接続できません。設定を更新して再試行してください。",ko:"비 HTTPS URI에 연결할 수 없습니다. 구성을 업데이트하고 다시 시도해 주세요.",ru:"Не удаётся подключиться к не-HTTPS URI. Обновите конфигурацию.",zh:"无法连接到非 HTTPS URI。请更新您的配置并重试"},"obsidianLiveSyncSettingTab.msgNotice":{def:"---Notice---",es:"---Aviso---",ja:"---お知らせ---",ko:"---공지사항---",ru:"---Уведомление---",zh:"---注意---"},"obsidianLiveSyncSettingTab.msgObjectStorageWarning":{def:"WARNING: This feature is a Work In Progress, so please keep in mind the following:\n- Append only architecture. A rebuild is required to shrink the storage.\n- A bit fragile.\n- When first syncing, all history will be transferred from the remote. Be mindful of data caps and slow speeds.\n- Only differences are synced live.\n\nIf you run into any issues, or have ideas about this feature, please create a issue on GitHub.\nI appreciate you for your great dedication.",es:"ADVERTENCIA: Esta característica está en desarrollo, así que por favor ten en cuenta lo siguiente:\n- Arquitectura de solo anexado. Se requiere una reconstrucción para reducir el almacenamiento.\n- Un poco frágil.\n- Al sincronizar por primera vez, todo el historial será transferido desde el remoto. Ten en cuenta los límites de datos y las velocidades lentas.\n- Solo las diferencias se sincronizan en vivo.\n\nSi encuentras algún problema o tienes ideas sobre esta característica, por favor crea un issue en GitHub.\nAprecio mucho tu gran dedicación.",ja:"警告: この機能は開発中です。以下の点にご注意ください:\n- 追記専用アーキテクチャ。ストレージを縮小するには再構築が必要です。\n- やや不安定です。\n- 初回同期時、すべての履歴がリモートから転送されます。データ制限と速度に注意してください。\n- ライブ同期は差分のみです。\n\n問題があれば、またはこの機能についてアイデアがあれば、GitHubにIssueを作成してください。\nご協力に感謝します。",ko:"⚠️ 주의: 이 기능은 아직 개발 중(WIP)입니다. 다음 사항을 유의해 주세요:\n- 추가 전용 구조(append-only)로 동작합니다. 저장 용량을 줄이려면 데이터 재구성이 필요합니다.\n- 기능이 다소 불안정할 수 있습니다.\n- 최초 동기화 시, 전체 히스토리가 원격 서버에서 전송됩니다. 데이터 용량 제한 및 느린 속도에 유의해 주세요.\n- 실시간 동기화는 변경된 부분만 처리됩니다.\n\n문제가 발생했거나 개선 아이디어가 있으시면 GitHub에 이슈를 등록해 주세요.\n기여에 깊이 감사드립니다.",ru:"ПРЕДУПРЕЖДЕНИЕ: Эта функция в разработке.",zh:"警告:此功能仍在开发中,请注意以下几点:\n- 仅追加架构。需要重建才能缩小存储空间。\n- 有点脆弱。\n- 首次同步时,所有历史记录将从远程传输。注意数据上限和慢速。\n- 只有差异会实时同步。\n\n如果您遇到任何问题,或对此功能有任何想法,请在 GitHub 上创建 issue。\n感谢您的巨大贡献"},"obsidianLiveSyncSettingTab.msgOriginCheck":{def:"Origin check: ${org}",es:"Verificación de origen: {org}",ja:"オリジン確認: ${org}",ko:"원점 확인: {org}",ru:"Проверка origin: org",zh:"源检查: {org}"},"obsidianLiveSyncSettingTab.msgRebuildRequired":{def:"Rebuilding Databases are required to apply the changes.. Please select the method to apply the changes.\n\n<details>\n<summary>Legends</summary>\n\n| Symbol | Meaning |\n|: ------ :| ------- |\n| ⇔ | Up to Date |\n| ⇄ | Synchronise to balance |\n| ⇐,⇒ | Transfer to overwrite |\n| ⇠,⇢ | Transfer to overwrite from other side |\n\n</details>\n\n## ${OPTION_REBUILD_BOTH}\nAt a glance: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruct both the local and remote databases using existing files from this device.\nThis causes a lockout other devices, and they need to perform fetching.\n## ${OPTION_FETCH}\nAt a glance: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInitialise the local database and reconstruct it using data fetched from the remote database.\nThis case includes the case which you have rebuilt the remote database.\n## ${OPTION_ONLY_SETTING}\nStore only the settings. **Caution: This may lead to data corruption**; database reconstruction is generally necessary.",es:"Es necesario reconstruir las bases de datos para aplicar los cambios. Por favor selecciona el método para aplicar los cambios.\n\n<details>\n<summary>Legendas</summary>\n\n| Símbolo | Significado |\n|: ------ :| ------- |\n| ⇔ | Actualizado |\n| ⇄ | Sincronizar para equilibrar |\n| ⇐,⇒ | Transferir para sobrescribir |\n| ⇠,⇢ | Transferir para sobrescribir desde otro lado |\n\n</details>\n\n## ${OPTION_REBUILD_BOTH}\nA simple vista: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nReconstruir tanto la base de datos local como la remota utilizando los archivos existentes de este dispositivo.\nEsto bloquea a otros dispositivos, y necesitan realizar la obtención.\n## ${OPTION_FETCH}\nA simple vista: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nInicializa la base de datos local y la reconstruye utilizando los datos obtenidos de la base de datos remota.\nEste caso incluye el caso en el que has reconstruido la base de datos remota.\n## ${OPTION_ONLY_SETTING}\nAlmacena solo la configuración. **Precaución: esto puede provocar corrupción de datos**; generalmente es necesario reconstruir la base de datos.",ja:"変更を適用するにはデータベースの再構築が必要です。変更を適用する方法を選択してください。\n\n<details>\n<summary>凡例</summary>\n\n| 記号 | 意味 |\n|: ------ :| ------- |\n| ⇔ | 最新 |\n| ⇄ | 同期してバランスを取る |\n| ⇐,⇒ | 上書きするため転送 |\n| ⇠,⇢ | 反対側から上書きするため転送 |\n\n</details>\n\n## ${OPTION_REBUILD_BOTH}\n概要: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\nこのデバイスの既存ファイルを使用してローカルとリモートの両方のデータベースを再構築します。\n他のデバイスはロックアウトされ、フェッチが必要です。\n## ${OPTION_FETCH}\n概要: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\nローカルデータベースを初期化し、リモートデータベースから取得したデータを使用して再構築します。\nリモートデータベースを再構築した場合も含まれます。\n## ${OPTION_ONLY_SETTING}\n設定のみを保存します。**注意: データ破損につながる可能性があります**。通常、データベースの再構築が必要です。",ko:"변경사항을 적용하려면 데이터베이스를 재구축해야 합니다. 아래 중 한 가지 방법을 선택해 주세요.\n\n<details>\n<summary>범례</summary>\n\n| 기호 | 의미 |\n|: ------ :| ------- |\n| ⇔ | 최신 상태 |\n| ⇄ | 동기화 균형 유지 |\n| ⇐,⇒ | 덮어쓰기 방식의 전송 |\n| ⇠,⇢ | 상대편에서 가져와 덮어쓰기 |\n\n</details>\n\n## ${OPTION_REBUILD_BOTH}\n개요: 📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\n이 기기의 기존 파일을 기반으로 로컬과 원격 데이터베이스를 모두 재구축합니다.\n이 과정에서 다른 기기는 일시적으로 접근이 제한되며, 가져오기 작업을 별도로 수행해야 합니다.\n\n## ${OPTION_FETCH}\n개요: 📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\n로컬 데이터베이스를 초기화한 후, 원격 데이터베이스에서 데이터를 가져와 재구축합니다.\n이는 원격 측에서 데이터베이스를 먼저 재구축한 경우에도 해당됩니다.\n\n## ${OPTION_ONLY_SETTING}\n설정만 저장합니다. **⚠️ 주의: 이 방법은 데이터 손상을 일으킬 수 있습니다.** 일반적으로는 전체 데이터베이스 재구축이 필요합니다.",ru:"Требуется перестроение баз данных для применения изменений.",zh:"需要重建数据库以应用更改。请选择应用更改的方法。\n\n<details>\n<summary>图例</summary>\n\n| 符号 | 含义 |\n|: ------ :| ------- |\n| ⇔ | 最新 |\n| ⇄ | 同步以平衡 |\n| ⇐,⇒ | 传输以覆盖 |\n| ⇠,⇢ | 从另一侧传输以覆盖 |\n\n</details>\n\n## ${OPTION_REBUILD_BOTH}\n概览:📄 ⇒¹ 💻 ⇒² 🛰️ ⇢ⁿ 💻 ⇄ⁿ⁺¹ 📄\n使用此设备的现有文件重建本地和远程数据库。\n这将导致其他设备被锁定,并且它们需要执行获取操作。\n## ${OPTION_FETCH}\n概览:📄 ⇄² 💻 ⇐¹ 🛰️ ⇔ 💻 ⇔ 📄\n初始化本地数据库并使用从远程数据库获取的数据重建它。\n这种情况包括您已经重建了远程数据库的情况。\n## ${OPTION_ONLY_SETTING}\n仅存储设置。**注意:这可能导致数据损坏**;通常需要重建数据库"},"obsidianLiveSyncSettingTab.msgSelectAndApplyPreset":{def:"Please select and apply any preset item to complete the wizard.",es:"Por favor, selecciona y aplica cualquier elemento preestablecido para completar el asistente.",ja:"ウィザードを完了するには、プリセット項目を選択して適用してください。",ko:"마법사를 완료하려면 프리셋 항목을 선택하고 적용해 주세요.",ru:"Выберите и примените любой пресет для завершения мастера.",zh:"请选择并应用任何预设项以完成向导"},"obsidianLiveSyncSettingTab.msgSetCorsCredentials":{def:"Set cors.credentials",es:"Configurar cors.credentials",ja:"cors.credentialsを設定",ko:"cors.credentials 설정",ru:"Установить cors.credentials",zh:"设置 cors.credentials"},"obsidianLiveSyncSettingTab.msgSetCorsOrigins":{def:"Set cors.origins",es:"Configurar cors.origins",ja:"cors.originsを設定",ko:"cors.origins 설정",ru:"Установить cors.origins",zh:"设置 cors.origins"},"obsidianLiveSyncSettingTab.msgSetMaxDocSize":{def:"Set couchdb.max_document_size",es:"Configurar couchdb.max_document_size",ja:"couchdb.max_document_sizeを設定",ko:"couchdb.max_document_size 설정",ru:"Установить couchdb.max_document_size",zh:"设置 couchdb.max_document_size"},"obsidianLiveSyncSettingTab.msgSetMaxRequestSize":{def:"Set chttpd.max_http_request_size",es:"Configurar chttpd.max_http_request_size",ja:"chttpd.max_http_request_sizeを設定",ko:"chttpd.max_http_request_size 설정",ru:"Установить chttpd.max_http_request_size",zh:"设置 chttpd.max_http_request_size"},"obsidianLiveSyncSettingTab.msgSetRequireValidUser":{def:"Set chttpd.require_valid_user = true",es:"Configurar chttpd.require_valid_user = true",ja:"chttpd.require_valid_user = trueを設定",ko:"chttpd.require_valid_user = true로 설정",ru:"Установить chttpd.require_valid_user = true",zh:"设置 chttpd.require_valid_user = true"},"obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth":{def:"Set chttpd_auth.require_valid_user = true",es:"Configurar chttpd_auth.require_valid_user = true",ja:"chttpd_auth.require_valid_user = trueを設定",ko:"chttpd_auth.require_valid_user = true로 설정",ru:"Установить chttpd_auth.require_valid_user = true",zh:"设置 chttpd_auth.require_valid_user = true"},"obsidianLiveSyncSettingTab.msgSettingModified":{def:'The setting "${setting}" was modified from another device. Click {HERE} to reload settings. Click elsewhere to ignore changes.',es:'La configuración "${setting}" fue modificada desde otro dispositivo. Haz clic {HERE} para recargar la configuración. Haz clic en otro lugar para ignorar los cambios.',ja:'設定"${setting}"が別のデバイスから変更されました。{HERE}をクリックして設定を再読み込みしてください。変更を無視するには他の場所をクリックしてください。',ko:'"${setting}" 설정이 다른 기기에서 수정되었습니다. 설정을 다시 로드하려면 {HERE}를 클릭하세요. 변경사항을 무시하려면 다른 곳을 클릭하세요.',ru:"Настройка setting была изменена с другого устройства.",zh:'设置 "${setting}" 已从另一台设备修改。点击 {HERE} 重新加载设置。点击其他地方忽略更改'},"obsidianLiveSyncSettingTab.msgSettingsUnchangeableDuringSync":{def:'These settings are unable to be changed during synchronization. Please disable all syncing in the "Sync Settings" to unlock.',es:'Estas configuraciones no se pueden cambiar durante la sincronización. Por favor, deshabilita toda la sincronización en las "Configuraciones de Sincronización" para desbloquear.',ja:'これらの設定は同期中に変更できません。ロックを解除するには、"同期設定"ですべての同期を無効にしてください。',ko:'동기화 중에는 이 설정들을 변경할 수 없습니다. 잠금을 해제하려면 "동기화 설정"에서 모든 동기화를 비활성화해 주세요.',ru:"Эти настройки нельзя изменить во время синхронизации.",zh:"这些设置在同步期间无法更改。请在“同步设置”中禁用所有同步以解锁"},"obsidianLiveSyncSettingTab.msgSetWwwAuth":{def:"Set httpd.WWW-Authenticate",es:"Configurar httpd.WWW-Authenticate",ja:"httpd.WWW-Authenticateを設定",ko:"httpd.WWW-Authenticate 설정",ru:"Установить httpd.WWW-Authenticate",zh:"设置 httpd.WWW-Authenticate"},"obsidianLiveSyncSettingTab.nameApplySettings":{def:"Apply Settings",es:"Aplicar configuraciones",ja:"設定を適用",ko:"설정 적용",ru:"Применить настройки",zh:"应用设置"},"obsidianLiveSyncSettingTab.nameConnectSetupURI":{def:"Connect with Setup URI",es:"Conectar con URI de configuración",ja:"セットアップURIで接続",ko:"Setup URI로 연결",ru:"Подключиться через Setup URI",zh:"使用设置 URI 连接"},"obsidianLiveSyncSettingTab.nameCopySetupURI":{def:"Copy the current settings to a Setup URI",es:"Copiar la configuración actual a una URI de configuración",ja:"現在の設定をセットアップURIにコピー",ko:"현재 설정을 Setup URI로 복사",ru:"Копировать текущие настройки в Setup URI",zh:"将当前设置复制为设置 URI"},"obsidianLiveSyncSettingTab.nameDisableHiddenFileSync":{def:"Disable Hidden files sync",es:"Desactivar sincronización de archivos ocultos",ja:"隠しファイル同期を無効化",ko:"숨김 파일 동기화 비활성화",ru:"Отключить синхронизацию скрытых файлов",zh:"禁用隐藏文件同步"},"obsidianLiveSyncSettingTab.nameDiscardSettings":{def:"Discard existing settings and databases",es:"Descartar configuraciones y bases de datos existentes",ja:"既存の設定とデータベースを破棄",ko:"기존 설정 및 데이터베이스 삭제",ru:"Отменить существующие настройки и базы данных",zh:"丢弃现有设置和数据库"},"obsidianLiveSyncSettingTab.nameEnableHiddenFileSync":{def:"Enable Hidden files sync",es:"Activar sincronización de archivos ocultos",ja:"隠しファイル同期を有効化",ko:"숨김 파일 동기화 활성화",ru:"Включить синхронизацию скрытых файлов",zh:"启用隐藏文件同步"},"obsidianLiveSyncSettingTab.nameEnableLiveSync":{def:"Enable LiveSync",es:"Activar LiveSync",ja:"LiveSyncを有効化",ko:"LiveSync 활성화",ru:"Включить LiveSync",zh:"启用 LiveSync"},"obsidianLiveSyncSettingTab.nameHiddenFileSynchronization":{def:"Hidden file synchronization",es:"Sincronización de archivos ocultos",ja:"隠しファイル同期",ko:"숨김 파일 동기화",ru:"Синхронизация скрытых файлов",zh:"隐藏文件同步"},"obsidianLiveSyncSettingTab.nameManualSetup":{def:"Manual Setup",es:"Configuración manual",ja:"手動セットアップ",ko:"수동 설정",ru:"Ручная настройка",zh:"手动设置"},"obsidianLiveSyncSettingTab.nameTestConnection":{def:"Test Connection",es:"Probar conexión",ja:"接続テスト",ko:"연결 테스트",ru:"Тест подключения",zh:"测试连接"},"obsidianLiveSyncSettingTab.nameTestDatabaseConnection":{def:"Test Database Connection",es:"Probar Conexión de Base de Datos",ja:"データベース接続テスト",ko:"데이터베이스 연결 테스트",ru:"Тест подключения к базе данных",zh:"测试数据库连接"},"obsidianLiveSyncSettingTab.nameValidateDatabaseConfig":{def:"Validate Database Configuration",es:"Validar Configuración de la Base de Datos",ja:"データベース設定を検証",ko:"데이터베이스 구성 검증",ru:"Проверить конфигурацию базы данных",zh:"验证数据库配置"},"obsidianLiveSyncSettingTab.okAdminPrivileges":{def:"✔ You have administrator privileges.",es:"✔ Tienes privilegios de administrador.",ja:"✔ 管理者権限があります。",ko:"✔ 관리자 권한이 있습니다.",ru:"✔ У вас есть права администратора.",zh:"✔ 您拥有管理员权限"},"obsidianLiveSyncSettingTab.okCorsCredentials":{def:"✔ cors.credentials is ok.",es:"✔ cors.credentials está correcto.",ja:"✔ cors.credentialsは正常です。",ko:"✔ cors.credentials가 정상입니다.",ru:"✔ cors.credentials в порядке.",zh:"✔ cors.credentials 设置正确"},"obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin":{def:"CORS credentials OK",es:"CORS credenciales OK",ja:"CORS認証情報OK",ko:"CORS 자격 증명 정상",ru:"CORS учётные данные в порядке",zh:"CORS 凭据正常"},"obsidianLiveSyncSettingTab.okCorsOriginMatched":{def:"✔ CORS origin OK",es:"✔ Origen de CORS correcto",ja:"✔ CORSオリジンOK",ko:"✔ CORS 원점 정상",ru:"✔ CORS origin в порядке",zh:"✔ CORS 源正常"},"obsidianLiveSyncSettingTab.okCorsOrigins":{def:"✔ cors.origins is ok.",es:"✔ cors.origins está correcto.",ja:"✔ cors.originsは正常です。",ko:"✔ cors.origins가 정상입니다.",ru:"✔ cors.origins в порядке.",zh:"✔ cors.origins 设置正确"},"obsidianLiveSyncSettingTab.okEnableCors":{def:"✔ httpd.enable_cors is ok.",es:"✔ httpd.enable_cors está correcto.",ja:"✔ httpd.enable_corsは正常です。",ko:"✔ httpd.enable_cors가 정상입니다.",ru:"✔ httpd.enable_cors в порядке.",zh:"✔ httpd.enable_cors 设置正确"},"obsidianLiveSyncSettingTab.okEnableCorsChttpd":{def:"✔ chttpd.enable_cors is ok.",ja:"✔ chttpd.enable_corsは正常です。",ru:"✔ chttpd.enable_cors в порядке.",zh:"✔ chttpd.enable_cors is ok."},"obsidianLiveSyncSettingTab.okMaxDocumentSize":{def:"✔ couchdb.max_document_size is ok.",es:"✔ couchdb.max_document_size está correcto.",ja:"✔ couchdb.max_document_sizeは正常です。",ko:"✔ couchdb.max_document_size가 정상입니다.",ru:"✔ couchdb.max_document_size в порядке.",zh:"✔ couchdb.max_document_size 设置正确"},"obsidianLiveSyncSettingTab.okMaxRequestSize":{def:"✔ chttpd.max_http_request_size is ok.",es:"✔ chttpd.max_http_request_size está correcto.",ja:"✔ chttpd.max_http_request_sizeは正常です。",ko:"✔ chttpd.max_http_request_size가 정상입니다.",ru:"✔ chttpd.max_http_request_size в порядке.",zh:"✔ chttpd.max_http_request_size 设置正确"},"obsidianLiveSyncSettingTab.okRequireValidUser":{def:"✔ chttpd.require_valid_user is ok.",es:"✔ chttpd.require_valid_user está correcto.",ja:"✔ chttpd.require_valid_userは正常です。",ko:"✔ chttpd.require_valid_user가 정상입니다.",ru:"✔ chttpd.require_valid_user в порядке.",zh:"✔ chttpd.require_valid_user 设置正确"},"obsidianLiveSyncSettingTab.okRequireValidUserAuth":{def:"✔ chttpd_auth.require_valid_user is ok.",es:"✔ chttpd_auth.require_valid_user está correcto.",ja:"✔ chttpd_auth.require_valid_userは正常です。",ko:"✔ chttpd_auth.require_valid_user가 정상입니다.",ru:"✔ chttpd_auth.require_valid_user в порядке.",zh:"✔ chttpd_auth.require_valid_user 设置正确"},"obsidianLiveSyncSettingTab.okWwwAuth":{def:"✔ httpd.WWW-Authenticate is ok.",es:"✔ httpd.WWW-Authenticate está correcto.",ja:"✔ httpd.WWW-Authenticateは正常です。",ko:"✔ httpd.WWW-Authenticate가 정상입니다.",ru:"✔ httpd.WWW-Authenticate в порядке.",zh:"✔ httpd.WWW-Authenticate 设置正确"},"obsidianLiveSyncSettingTab.optionApply":{def:"Apply",es:"Aplicar",ja:"適用",ko:"적용",ru:"Применить",zh:"应用"},"obsidianLiveSyncSettingTab.optionCancel":{def:"Cancel",es:"Cancelar",ja:"キャンセル",ko:"취소",ru:"Отмена",zh:"取消"},"obsidianLiveSyncSettingTab.optionCouchDB":{def:"CouchDB",es:"CouchDB",ja:"CouchDB",ko:"CouchDB",ru:"CouchDB",zh:"CouchDB"},"obsidianLiveSyncSettingTab.optionDisableAllAutomatic":{def:"Disable all automatic",es:"Desactivar lo automático",ja:"すべての自動を無効化",ko:"모든 자동 비활성화",ru:"Отключить всё автоматическое",zh:"禁用所有自动同步"},"obsidianLiveSyncSettingTab.optionFetchFromRemote":{def:"Fetch from Remote",es:"Obtener del remoto",ja:"リモートからフェッチ",ko:"원격에서 가져오기",ru:"Загрузить с удалённого",zh:"从远程获取"},"obsidianLiveSyncSettingTab.optionHere":{def:"HERE",es:"AQUÍ",ja:"ここ",ko:"여기",ru:"ЗДЕСЬ",zh:"这里"},"obsidianLiveSyncSettingTab.optionLiveSync":{def:"LiveSync",es:"LiveSync",ja:"LiveSync",ko:"LiveSync",ru:"LiveSync",zh:"LiveSync"},"obsidianLiveSyncSettingTab.optionMinioS3R2":{def:"Minio,S3,R2",es:"Minio,S3,R2",ja:"Minio,S3,R2",ko:"Minio,S3,R2",ru:"Minio,S3,R2",zh:"Minio, S3, R2"},"obsidianLiveSyncSettingTab.optionOkReadEverything":{def:"OK, I have read everything.",es:"OK, he leído todo.",ja:"OK、すべて読みました。",ko:"네, 모든 것을 읽었습니다.",ru:"ОК, я всё прочитал.",zh:"好的,我已经阅读了所有内容 "},"obsidianLiveSyncSettingTab.optionOnEvents":{def:"On events",es:"En eventos",ja:"イベント時",ko:"이벤트 시",ru:"По событиям",zh:"基于事件"},"obsidianLiveSyncSettingTab.optionPeriodicAndEvents":{def:"Periodic and on events",es:"Periódico y en eventos",ja:"定期およびイベント時",ko:"주기적 및 이벤트 시",ru:"Периодически и по событиям",zh:"定期和基于事件"},"obsidianLiveSyncSettingTab.optionPeriodicWithBatch":{def:"Periodic w/ batch",es:"Periódico con lote",ja:"バッチ付き定期",ko:"주기적 w/ 일괄",ru:"Периодически с пакетами",zh:"定期与批量"},"obsidianLiveSyncSettingTab.optionRebuildBoth":{def:"Rebuild Both from This Device",es:"Reconstructuir ambos desde este dispositivo",ja:"このデバイスから両方を再構築",ko:"이 기기에서 둘 다 재구축",ru:"Перестроить оба с этого устройства",zh:"从此设备重建两者"},"obsidianLiveSyncSettingTab.optionSaveOnlySettings":{def:"(Danger) Save Only Settings",es:"(Peligro) Guardar solo configuración",ja:"(危険) 設定のみ保存",ko:"(위험) 설정만 저장",ru:"(Опасно) Сохранить только настройки",zh:"(危险)仅保存设置"},"obsidianLiveSyncSettingTab.panelChangeLog":{def:"Change Log",es:"Registro de cambios",ja:"変更履歴",ko:"변경 로그",ru:"История изменений",zh:"更新日志"},"obsidianLiveSyncSettingTab.panelGeneralSettings":{def:"General Settings",es:"Configuraciones Generales",ja:"一般設定",ko:"일반 설정",ru:"Основные настройки",zh:"常规设置"},"obsidianLiveSyncSettingTab.panelPrivacyEncryption":{def:"Privacy & Encryption",es:"Privacidad y Cifrado",ja:"プライバシーと暗号化",ko:"개인정보 보호 및 암호화",ru:"Конфиденциальность и шифрование",zh:"隐私与加密"},"obsidianLiveSyncSettingTab.panelRemoteConfiguration":{def:"Remote Configuration",es:"Configuración remota",ja:"リモート設定",ko:"원격 구성",ru:"Удалённая конфигурация",zh:"远程配置"},"obsidianLiveSyncSettingTab.panelSetup":{def:"Setup",es:"Configuración",ja:"セットアップ",ko:"설정",ru:"Настройка",zh:"设置"},"obsidianLiveSyncSettingTab.serverVersion":{def:"Server info: ${info}",ja:"サーバー情報: ${info}",ru:"Информация о сервере: info",zh:"服务器信息: ${info}"},"obsidianLiveSyncSettingTab.titleActiveRemoteServer":{def:"Active Remote Server",ja:"アクティブなリモートサーバー",ru:"Активный удалённый сервер",zh:"活动远程服务器"},"obsidianLiveSyncSettingTab.titleAppearance":{def:"Appearance",es:"Apariencia",ja:"外観",ko:"외관",ru:"Внешний вид",zh:"外观"},"obsidianLiveSyncSettingTab.titleConflictResolution":{def:"Conflict resolution",es:"Resolución de conflictos",ja:"競合解決",ko:"충돌 해결",ru:"Разрешение конфликтов",zh:"冲突解决"},"obsidianLiveSyncSettingTab.titleCongratulations":{def:"Congratulations!",es:"¡Felicidades!",ja:"おめでとうございます!",ko:"축하합니다!",ru:"Поздравляем!",zh:"恭喜!"},"obsidianLiveSyncSettingTab.titleCouchDB":{def:"CouchDB",es:"CouchDB",ja:"CouchDB",ko:"CouchDB",ru:"CouchDB",zh:"CouchDB"},"obsidianLiveSyncSettingTab.titleDeletionPropagation":{def:"Deletion Propagation",es:"Propagación de eliminación",ja:"削除の伝播",ko:"삭제 전파",ru:"Распространение удалений",zh:"删除传播"},"obsidianLiveSyncSettingTab.titleEncryptionNotEnabled":{def:"Encryption is not enabled",es:"El cifrado no está habilitado",ja:"暗号化が有効になっていません",ko:"암호화가 활성화되지 않음",ru:"Шифрование не включено",zh:"未启用加密"},"obsidianLiveSyncSettingTab.titleEncryptionPassphraseInvalid":{def:"Encryption Passphrase Invalid",es:"La frase de contraseña de cifrado es inválida",ja:"暗号化パスフレーズが無効です",ko:"암호화 패스프레이즈 유효하지 않음",ru:"Парольная фраза шифрования недействительна",zh:"加密密码无效"},"obsidianLiveSyncSettingTab.titleExtraFeatures":{def:"Enable extra and advanced features",es:"Habilitar funciones extras y avanzadas",ja:"追加および上級機能を有効化",ko:"추가 및 고급 기능 활성화",ru:"Включить дополнительные и расширенные функции",zh:"启用额外和高级功能"},"obsidianLiveSyncSettingTab.titleFetchConfig":{def:"Fetch Config",es:"Obtener configuración",ja:"設定を取得",ko:"구성 가져오기",ru:"Загрузить конфигурацию",zh:"获取配置"},"obsidianLiveSyncSettingTab.titleFetchConfigFromRemote":{def:"Fetch config from remote server",es:"Obtener configuración del servidor remoto",ja:"リモートサーバーから設定を取得",ko:"원격 서버에서 구성 가져오기",ru:"Загрузить конфигурацию с удалённого сервера",zh:"从远程服务器获取配置"},"obsidianLiveSyncSettingTab.titleFetchSettings":{def:"Fetch Settings",es:"Obtener configuraciones",ja:"設定の取得",ko:"설정 가져오기",ru:"Загрузить настройки",zh:"获取设置"},"obsidianLiveSyncSettingTab.titleHiddenFiles":{def:"Hidden Files",es:"Archivos ocultos",ja:"隠しファイル",ko:"숨김 파일",ru:"Скрытые файлы",zh:"隐藏文件"},"obsidianLiveSyncSettingTab.titleLogging":{def:"Logging",es:"Registro",ja:"ログ",ko:"로깅",ru:"Логирование",zh:"日志记录"},"obsidianLiveSyncSettingTab.titleMinioS3R2":{def:"Minio,S3,R2",es:"Minio,S3,R2",ja:"Minio,S3,R2",ko:"Minio,S3,R2",ru:"Minio,S3,R2",zh:"Minio, S3, R2"},"obsidianLiveSyncSettingTab.titleNotification":{def:"Notification",es:"Notificación",ja:"通知",ko:"알림",ru:"Уведомления",zh:"通知"},"obsidianLiveSyncSettingTab.titleOnlineTips":{def:"Online Tips",es:"Consejos en línea",ja:"オンラインヒント",ko:"온라인 팁",ru:"Онлайн советы",zh:"在线提示"},"obsidianLiveSyncSettingTab.titleQuickSetup":{def:"Quick Setup",es:"Configuración rápida",ja:"クイックセットアップ",ko:"빠른 설정",ru:"Быстрая настройка",zh:"快速设置"},"obsidianLiveSyncSettingTab.titleRebuildRequired":{def:"Rebuild Required",es:"Reconstrucción necesaria",ja:"再構築が必要",ko:"재구축 필요",ru:"Требуется перестроение",zh:"需要重建"},"obsidianLiveSyncSettingTab.titleRemoteConfigCheckFailed":{def:"Remote Configuration Check Failed",es:"La verificación de configuración remota falló",ja:"リモート設定の確認に失敗",ko:"원격 구성 확인 실패",ru:"Проверка удалённой конфигурации не удалась",zh:"远程配置检查失败"},"obsidianLiveSyncSettingTab.titleRemoteServer":{def:"Remote Server",es:"Servidor remoto",ja:"リモートサーバー",ko:"원격 서버",ru:"Удалённый сервер",zh:"远程服务器"},"obsidianLiveSyncSettingTab.titleReset":{def:"Reset",es:"Reiniciar",ja:"リセット",ko:"리셋",ru:"Сброс",zh:"重置"},"obsidianLiveSyncSettingTab.titleSetupOtherDevices":{def:"To setup other devices",es:"Para configurar otros dispositivos",ja:"他のデバイスのセットアップ",ko:"다른 기기 설정",ru:"Для настройки других устройств",zh:"设置其他设备"},"obsidianLiveSyncSettingTab.titleSynchronizationMethod":{def:"Synchronization Method",es:"Método de sincronización",ja:"同期方法",ko:"동기화 방법",ru:"Метод синхронизации",zh:"同步方法"},"obsidianLiveSyncSettingTab.titleSynchronizationPreset":{def:"Synchronization Preset",es:"Preestablecimiento de sincronización",ja:"同期プリセット",ko:"동기화 프리셋",ru:"Пресет синхронизации",zh:"同步预设"},"obsidianLiveSyncSettingTab.titleSyncSettings":{def:"Sync Settings",es:"Configuraciones de Sincronización",ja:"同期設定",ko:"동기화 설정",ru:"Настройки синхронизации",zh:"同步设置"},"obsidianLiveSyncSettingTab.titleSyncSettingsViaMarkdown":{def:"Sync Settings via Markdown",es:"Configuración de sincronización a través de Markdown",ja:"Markdown経由で設定を同期",ko:"마크다운을 통한 동기화 설정",ru:"Синхронизация настроек через Markdown",zh:"通过 Markdown 同步设置"},"obsidianLiveSyncSettingTab.titleUpdateThinning":{def:"Update Thinning",es:"Actualización de adelgazamiento",ja:"更新の間引き",ko:"업데이트 솎아내기",ru:"Оптимизация обновлений",zh:"更新频率限制"},"obsidianLiveSyncSettingTab.warnCorsOriginUnmatched":{def:"⚠ CORS Origin is unmatched ${from}->${to}",es:"⚠ El origen de CORS no coincide: {from}->{to}",ja:"⚠ CORS Originが一致しません ${from}->${to}",ko:"⚠ CORS 원점이 일치하지 않습니다 {from}->{to}",ru:"⚠ CORS Origin не совпадает from->to",zh:"⚠ CORS 源不匹配 {from}->{to}"},"obsidianLiveSyncSettingTab.warnNoAdmin":{def:"⚠ You do not have administrator privileges.",es:"⚠ No tienes privilegios de administrador.",ja:"⚠ 管理者権限がありません。",ko:"⚠ 관리자 권한이 없습니다.",ru:"⚠ У вас нет прав администратора.",zh:"⚠ 您没有管理员权限"},"P2P.AskPassphraseForDecrypt":{def:"The remote peer shared the configuration. Please input the passphrase to decrypt the configuration.",ja:"リモートピアから設定が共有されました。設定を復号するためのパスフレーズを入力してください。",ko:"원격 피어가 구성을 공유했습니다. 구성을 복호화하려면 패스프레이즈를 입력해 주세요.",ru:"Удалённое устройство предоставило конфигурацию. Введите пароль для расшифровки.",zh:"远程对等方共享了配置,请输入密码短语以解密配置"},"P2P.AskPassphraseForShare":{def:"The remote peer requested this device configuration. Please input the passphrase to share the configuration. You can ignore the request by cancelling this dialogue.",ja:"リモートピアからこのデバイスの設定が要求されました。設定を共有するためのパスフレーズを入力してください。このダイアログをキャンセルすることでリクエストを無視できます。",ko:"원격 피어가 이 기기의 구성을 요청했습니다. 구성을 공유하려면 패스프레이즈를 입력해 주세요. 이 대화상자를 취소하여 요청을 무시할 수 있습니다.",ru:"Удалённое устройство запрашивает эту конфигурацию. Введите пароль для передачи.",zh:"远程对等方请求此设备配置,请输入密码短语以共享配置。你可以通过取消此对话框来忽略此请求"},"P2P.DisabledButNeed":{def:"%{title_p2p_sync} is disabled. Do you really want to enable it?",ja:"%{title_p2p_sync}は無効になっています。本当に有効にしますか?",ko:"%{title_p2p_sync}가 비활성화되어 있습니다. 정말로 활성화하시겠습니까?",ru:"title_p2p_sync отключён. Вы действительно хотите включить?",zh:"%{title_p2p_sync} 已禁用。你确定要启用它吗?"},"P2P.FailedToOpen":{def:"Failed to open P2P connection to the signalling server.",ja:"シグナリングサーバーへのP2P接続を開けませんでした。",ko:"시그널링 서버에 P2P 연결을 열 수 없습니다.",ru:"Не удалось открыть P2P подключение к серверу сигнализации.",zh:"无法打开 P2P 连接到信令服务器"},"P2P.NoAutoSyncPeers":{def:"No auto-sync peers found. Please set peers on the %{long_p2p_sync} pane.",ja:"自動同期ピアが見つかりません。%{long_p2p_sync}ペインでピアを設定してください。",ko:"자동 동기화 피어를 찾을 수 없습니다. %{long_p2p_sync} 창에서 피어를 설정해 주세요.",ru:"Автосинхронизируемые устройства не найдены.",zh:"未找到自动同步的对等方,请在 %{long_p2p_sync} 面板中设置对等方"},"P2P.NoKnownPeers":{def:"No peers has been detected, waiting incoming other peers...",ja:"ピアが検出されていません。他のピアからの接続を待機中...",ko:"피어가 감지되지 않았습니다. 다른 피어의 접속을 기다리고 있습니다...",ru:"Устройства не обнаружены, ожидаем другие устройства...",zh:"未检测到对等方,正在等待其他对等方的连接..."},"P2P.Note.description":{def:" This replicator allows us to synchronise our vault with other devices\nusing a peer-to-peer connection. We can use this to synchronise our vault with our other devices without using a cloud service.\nThis replicator is based on Trystero. It also uses a signalling server to establish a connection between devices. The signalling server is used to exchange connection information between devices. It does (or,should) not know or store any of our data.\n\nThe signalling server can be hosted by anyone. This is just a Nostr relay. For the sake of simplicity and checking the behaviour of the replicator, an instance of the signalling server is hosted by vrtmrz. You can use the experimental server provided by vrtmrz, or you can use any other server.\n\nBy the way, even if the signalling server does not store our data, it can see the connection information of some of our devices. Please be aware of this. Also, be cautious when using the server provided by someone else.",ja:"このレプリケーターは、ピアツーピア接続を使用して、Vaultを他のデバイスと同期することができます。クラウドサービスを使用せずに、他のデバイスとVaultを同期することができます。\nこのレプリケーターはTrysteroをベースにしています。デバイス間の接続を確立するためにシグナリングサーバーを使用します。シグナリングサーバーはデバイス間で接続情報を交換するために使用されます。私たちのデータを知ったり保存したりすることはありませんまたは、そうあるべきではありません。\n\nシグナリングサーバーは誰でもホストできます。これは単なるNostrリレーです。簡便さとレプリケーターの動作確認のために、vrtmrzがシグナリングサーバーのインスタンスをホストしています。vrtmrzが提供する実験用サーバーを使用することも、他のサーバーを使用することもできます。\n\nなお、シグナリングサーバーが私たちのデータを保存しなくても、一部のデバイスの接続情報を見ることができます。これにご注意ください。また、他の人が提供するサーバーを使用する場合は注意してください。",ko:"이 복제기는 피어 투 피어(P2P) 연결을 통해 다른 기기들과 볼트를 동기화할 수 있도록 합니다. 클라우드 서비스를 거치지 않고도 기기간 동기화를 구현할 수 있습니다.\n\n이 복제기는 Trystero를 기반으로 하며, 기기 간 연결을 설정하기 위해 시그널링 서버를 사용합니다. 시그널링 서버는 단순히 연결 정보를 교환하는 용도로만 사용되며, 사용자 데이터를 저장하거나 접근하지 않습니다 (또는 그래야만 합니다).\n\n시그널링 서버는 누구나 운영할 수 있으며, 이는 단순한 Nostr 릴레이입니다. 편의성과 복제기의 작동 확인을 위해 `vrtmrz`가 자체적으로 시그널링 서버 인스턴스를 운영 중입니다. 사용자는 `vrtmrz`가 제공하는 실험용 서버를 사용할 수도 있고, 별도로 자신만의 서버를 설정할 수도 있습니다.\n\n참고로, 시그널링 서버는 사용자 데이터를 저장하지 않더라도 일부 기기의 연결 정보는 볼 수 있습니다. 이 점을 유의해 주세요. 특히 타인이 운영하는 서버를 사용할 경우 주의가 필요합니다.",ru:"Этот репликатор позволяет синхронизировать хранилище с другими устройствами с использованием однорангового соединения.",zh:" This replicator allows us to synchronise our vault with other devices\nusing a peer-to-peer connection. We can use this to synchronise our vault with our other devices without using a cloud service.\nThis replicator is based on Trystero. It also uses a signaling server to establish a connection between devices. The signaling server is used to exchange connection information between devices. It does (or,should) not know or store any of our data.\n\nThe signaling server can be hosted by anyone. This is just a Nostr relay. For the sake of simplicity and checking the behaviour of the replicator, an instance of the signaling server is hosted by vrtmrz. You can use the experimental server provided by vrtmrz, or you can use any other server.\n\nBy the way, even if the signaling server does not store our data, it can see the connection information of some of our devices. Please be aware of this. Also, be cautious when using the server provided by someone else."},"P2P.Note.important_note":{def:"Peer-to-Peer Replicator.",ja:"ピアツーピアレプリケーターの実験的実装",ko:"피어 투 피어(P2P) 복제기의 실험적 구현입니다.",ru:"P2P репликатор.",zh:"The Experimental Implementation of the Peer-to-Peer Replicator."},"P2P.Note.important_note_sub":{def:"This feature is still on the bleeding edge. Please be aware that ensure your data is backed up before using this feature. And, we would be so happy if you could contribute to the development of this feature.",ja:"この機能はまだ実験段階です。期待通りに動作しない可能性があることにご注意ください。さらに、バグ、セキュリティの問題、その他の問題がある可能性があります。この機能は自己責任でご使用ください。この機能の開発にご協力ください。",ko:"이 기능은 아직 실험 단계에 있습니다. 이 기능이 예상대로 작동하지 않을 수 있음을 알아주세요. 또한 버그, 보안 문제 및 기타 문제가 있을 수 있습니다. 이 기능을 사용할 때는 본인의 책임 하에 사용하세요. 이 기능의 개발에 기여해 주세요.",ru:"Эта функция всё ещё на стадии разработки. Пожалуйста, убедитесь, что ваши данные зарезервированы.",zh:"This feature is still in the experimental stage. Please be aware that this feature may not work as expected. Furthermore, it may have some bugs, security issues, and other issues. Please use this feature at your own risk. Please contribute to the development of this feature."},"P2P.Note.Summary":{def:"What is this feature? (and some important notes, please read once)",ja:"この機能について(重要な注意事項を含む、一度お読みください)",ko:"이 기능은 무엇인가요? (설명과 참고사항이 적혀있습니다. 한 번 읽어보세요!)",ru:"Что это за функция? (важные замечания)",zh:"What is this feature? (and some important notes, please read once)"},"P2P.NotEnabled":{def:"%{title_p2p_sync} is not enabled. We cannot open a new connection.",ja:"%{title_p2p_sync}が有効になっていません。新しい接続を開くことができません。",ko:"%{title_p2p_sync}가 활성화되지 않았습니다. 새로운 연결을 열 수 없습니다.",ru:"title_p2p_sync не включён. Мы не можем открыть новое подключение.",zh:"%{title_p2p_sync} is not enabled. We cannot open a new connection."},"P2P.P2PReplication":{def:"%{P2P} Replication",ja:"%{P2P}レプリケーション(複製)",ko:"%{P2P} 복제",ru:"P2P Репликация",zh:"%{P2P} Replication"},"P2P.PaneTitle":{def:"%{long_p2p_sync}",ja:"%{long_p2p_sync}",ko:"%{long_p2p_sync}",ru:"long_p2p_sync",zh:"%{long_p2p_sync}"},"P2P.ReplicatorInstanceMissing":{def:"P2P Sync replicator is not found, possibly not have been configured or enabled.",ja:"P2P同期レプリケーターが見つかりません。設定または有効化されていない可能性があります。",ko:"P2P 동기화 복제기를 찾을 수 없습니다. 구성되지 않았거나 활성화되지 않았을 수 있습니다.",ru:"P2P Sync репликатор не найден, возможно, не настроен.",zh:"P2P Sync replicator is not found, possibly not have been configured or enabled."},"P2P.SeemsOffline":{def:"Peer ${name} seems offline, skipped.",ja:"ピア${name}はオフラインのようです。スキップしました。",ko:"피어 ${name}이(가) 오프라인인 것 같습니다. 건너뜁니다.",ru:"Устройство name офлайн, пропущено.",zh:"Peer ${name} seems offline, skipped."},"P2P.SyncAlreadyRunning":{def:"P2P Sync is already running.",ja:"P2P同期はすでに実行中です。",ko:"P2P 동기화가 이미 실행 중입니다.",ru:"P2P Sync уже запущен.",zh:"P2P Sync is already running."},"P2P.SyncCompleted":{def:"P2P Sync completed.",ja:"P2P同期が完了しました。",ko:"P2P 동기화가 완료되었습니다.",ru:"P2P Sync завершён.",zh:"P2P Sync completed."},"P2P.SyncStartedWith":{def:"P2P Sync with ${name} have been started.",ja:"${name}とのP2P同期を開始しました。",ko:"${name}과의 P2P 동기화가 시작되었습니다.",ru:"P2P Sync с name начат.",zh:"P2P Sync with ${name} have been started."},Passphrase:{def:"Passphrase",es:"Frase de contraseña",ja:"パスフレーズ",ko:"패스프레이즈",ru:"Парольная фраза",zh:"密码"},"Passphrase of sensitive configuration items":{def:"Passphrase of sensitive configuration items",es:"Frase para elementos sensibles",ja:"機密性の高い設定項目にパスフレーズを使用",ko:"민감한 구성 항목의 패스프레이즈",ru:"Парольная фраза для конфиденциальных настроек",zh:"敏感配置项的密码"},password:{def:"password",es:"contraseña",ja:"パスワード",ko:"비밀번호",ru:"пароль",zh:"密码"},Password:{def:"Password",es:"Contraseña",ja:"パスワード",ko:"비밀번호",ru:"Пароль",zh:"密码"},"Path Obfuscation":{def:"Path Obfuscation",es:"Ofuscación de rutas",ja:"パスの難読化",ko:"경로 난독화",ru:"Обфускация путей",zh:"路径混淆"},"Per-file-saved customization sync":{def:"Per-file-saved customization sync",es:"Sincronización de personalización por archivo",ja:"ファイルごとのカスタマイズ同期",ko:"파일별 저장 사용자 설정 동기화",ru:"Синхронизация настроек для каждого файла",zh:"按文件保存的自定义同步"},"Periodic Sync interval":{def:"Periodic Sync interval",es:"Intervalo de sincronización periódica",ja:"定時同期の感覚",ko:"주기적 동기화 간격",ru:"Интервал периодической синхронизации",zh:"定期同步间隔"},"Prepare the 'report' to create an issue":{def:"Prepare the 'report' to create an issue",ru:"Подготовить «отчёт» для создания Issue",zh:"准备 '报告' 以创建问题单"},Presets:{def:"Presets",es:"Preconfiguraciones",ja:"プリセット",ko:"프리셋",ru:"Пресеты",zh:"预设"},"Process small files in the foreground":{def:"Process small files in the foreground",es:"Procesar archivos pequeños en primer plano",ja:"小さいファイルを最前面で処理",ko:"포그라운드에서 작은 파일 처리",ru:"Обрабатывать маленькие файлы в основном потоке",zh:"在前台处理小文件"},"Property Encryption":{def:"Property Encryption",ru:"Шифрование свойств",zh:"属性加密"},"RedFlag.Fetch.Method.Desc":{def:"How do you want to fetch?\n- %{RedFlag.Fetch.Method.FetchSafer}.\n **Low Traffic**, **High CPU**, **Low Risk**\n Recommended if ...\n - Files possibly inconsistent\n - Files were not so much\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk**\n Recommended if ...\n - Files probably consistent\n - You have a lot of files.\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **High Traffic**, **Low CPU**, **Low to Moderate Risk**\n\n>[!INFO]- Details\n> ## %{RedFlag.Fetch.Method.FetchSafer}.\n> **Low Traffic**, **High CPU**, **Low Risk**\n> This option first creates a local database using existing local files before fetching data from the remote source.\n> If matching files exist both locally and remotely, only the differences between them will be transferred.\n> However, files present in both locations will initially be handled as conflicted files. They will be resolved automatically if they are not actually conflicted, but this process may take time.\n> This is generally the safest method, minimizing data loss risk.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending operation)\n> This option first creates chunks from local files for the database, then fetches data. Consequently, only chunks missing locally are transferred. However, all metadata is taken from the remote source.\n> Local files are then compared against this metadata at launch. The content considered newer will overwrite the older one (by modified time). This outcome is then synchronised back to the remote database.\n> This is generally safe if local files are genuinely the latest timestamp. However, it can cause problems if a file has a newer timestamp but older content (like the initial `welcome.md`).\n> This uses less CPU and faster than \"%{RedFlag.Fetch.Method.FetchSafer}\", but it may lead to data loss if not used carefully.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending operation)\n> All things will be fetched from the remote.\n> Similar to the %{RedFlag.Fetch.Method.FetchSmoother}, but all chunks are fetched from the remote source.\n> This is the most traditional way to fetch, typically consuming the most network traffic and time. It also carries a similar risk of overwriting remote files to the '%{RedFlag.Fetch.Method.FetchSmoother}' option.\n> However, it is often considered the most stable method because it is the longest-established and most straightforward approach.",ja:"どのようにフェッチしますか?\n- %{RedFlag.Fetch.Method.FetchSafer}\n **低トラフィック**, **高CPU負荷**, **低リスク**\n 推奨条件...\n - ファイルの整合性に不安がある\n - ファイル数がそれほど多くない\n- %{RedFlag.Fetch.Method.FetchSmoother}\n **低トラフィック**, **中程CPU負荷**, **低~中リスク**\n 推奨条件...\n - ファイルがおそらく整合している\n - ファイル数が多い\n- %{RedFlag.Fetch.Method.FetchTraditional}\n **高トラフィック**, **低CPU負荷**, **低~中リスク**\n\n>[!INFO]- 詳細\n> ## %{RedFlag.Fetch.Method.FetchSafer}\n> **低トラフィック**, **高CPU負荷**, **低リスク**\n> このオプションは、リモートからデータをフェッチする前に、既存のローカルファイルを使用してローカルデータベースを作成します。\n> ローカルとリモートの両方に一致するファイルがある場合、差分のみが転送されます。\n> ただし、両方の場所に存在するファイルは最初は競合ファイルとして処理されます。実際に競合していなければ自動的に解決されますが、この処理には時間がかかる場合があります。\n> これは一般的に最も安全な方法で、データ損失のリスクを最小限に抑えます。\n> ## %{RedFlag.Fetch.Method.FetchSmoother}\n> **低トラフィック**, **中程CPU負荷**, **低~中リスク**(操作による)\n> このオプションは、最初にローカルファイルからデータベース用のチャンクを作成し、その後データをフェッチします。そのため、ローカルにないチャンクのみが転送されます。ただし、すべてのメタデータはリモートから取得されます。\n> ローカルファイルは起動時にこのメタデータと比較されます。新しいと判断されたコンテンツ(更新日時による)が古いものを上書きします。この結果はリモートデータベースに同期されます。\n> ローカルファイルが本当に最新のタイムスタンプであれば一般的に安全です。ただし、ファイルのタイムスタンプが新しくてもコンテンツが古い場合(初期の`welcome.md`など)は問題が発生する可能性があります。\n> これは\"%{RedFlag.Fetch.Method.FetchSafer}\"よりCPU使用量が少なく高速ですが、注意しないとデータ損失につながる可能性があります。\n> ## %{RedFlag.Fetch.Method.FetchTraditional}\n> **高トラフィック**, **低CPU負荷**, **低~中リスク**(操作による)\n> すべてのデータがリモートからフェッチされます。\n> %{RedFlag.Fetch.Method.FetchSmoother}と似ていますが、すべてのチャンクがリモートからフェッチされます。\n> これは最も従来のフェッチ方法で、通常最もネットワークトラフィックと時間を消費します。'%{RedFlag.Fetch.Method.FetchSmoother}'オプションと同様のリモートファイル上書きのリスクがあります。\n> ただし、最も歴史があり簡単なアプローチであるため、最も安定した方法と見なされることが多いです。",ko:"어떻게 가져오시겠습니까?\n- %{RedFlag.Fetch.Method.FetchSafer}. (권장)\n **낮은 트래픽**, **높은 CPU**, **낮은 위험**\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험**\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험**\n\n>[!INFO]- 세부 사항\n> ## %{RedFlag.Fetch.Method.FetchSafer}. (권장)\n> **낮은 트래픽**, **높은 CPU**, **낮은 위험**\n> 이 옵션은 원격 소스에서 데이터를 가져오기 전에 기존 로컬 파일을 사용하여 로컬 데이터베이스를 먼저 생성합니다.\n> 로컬과 원격 모두에 일치하는 파일이 있으면 둘 사이의 차이점만 전송됩니다.\n> 하지만 두 위치 모두에 있는 파일은 초기에 충돌 파일로 처리됩니다. 실제로 충돌하지 않는다면 자동으로 해결되지만 이 과정은 시간이 걸릴 수 있습니다.\n> 이는 일반적으로 가장 안전한 방법으로 데이터 손실 위험을 최소화합니다.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **낮은 트래픽**, **보통 CPU**, **낮음에서 보통 위험** (작업에 따라)\n> 이 옵션은 먼저 로컬 파일에서 데이터베이스용 청크를 생성한 다음 데이터를 가져옵니다. 따라서 로컬에 없는 청크만 전송됩니다. 하지만 모든 메타데이터는 원격 소스에서 가져옵니다.\n> 그런 다음 로컬 파일이 시작 시 이 메타데이터와 비교됩니다. 더 새로운 것으로 간주되는 콘텐츠가 오래된 것을 덮어씁니다(수정 시간 기준). 이 결과는 원격 데이터베이스에 다시 동기화됩니다.\n> 로컬 파일이 실제로 최신 타임스탬프라면 일반적으로 안전합니다. 하지만 파일이 더 새로운 타임스탬프를 가지고 있지만 더 오래된 콘텐츠를 가지고 있다면(초기 `welcome.md`처럼) 문제가 발생할 수 있습니다.\n> 이는 \"%{RedFlag.Fetch.Method.FetchSafer}\"보다 CPU를 덜 사용하고 더 빠르지만 주의 깊게 사용하지 않으면 데이터 손실로 이어질 수 있습니다.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **높은 트래픽**, **낮은 CPU**, **낮음에서 보통 위험** (작업에 따라)\n> 모든 것이 원격에서 가져와집니다.\n> %{RedFlag.Fetch.Method.FetchSmoother}와 유사하지만 모든 청크가 원격 소스에서 가져와집니다.\n> 이는 가장 전통적인 가져오기 방법으로 일반적으로 가장 많은 네트워크 트래픽과 시간을 소모합니다. 또한 '%{RedFlag.Fetch.Method.FetchSmoother}' 옵션과 유사하게 원격 파일을 덮어쓸 위험이 있습니다.\n> 하지만 가장 오래되고 가장 직접적인 접근 방식이기 때문에 종종 가장 안정적인 방법으로 간주됩니다.",ru:"Как вы хотите загрузить?",zh:"How do you want to fetch?\n- %{RedFlag.Fetch.Method.FetchSafer}.\n **Low Traffic**, **High CPU**, **Low Risk**\n Recommended if ...\n - Files possibly inconsistent\n - Files were not so much\n- %{RedFlag.Fetch.Method.FetchSmoother}.\n **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk**\n Recommended if ...\n - Files probably consistent\n - You have a lot of files.\n- %{RedFlag.Fetch.Method.FetchTraditional}.\n **High Traffic**, **Low CPU**, **Low to Moderate Risk**\n\n>[!INFO]- Details\n> ## %{RedFlag.Fetch.Method.FetchSafer}.\n> **Low Traffic**, **High CPU**, **Low Risk**\n> This option first creates a local database using existing local files before fetching data from the remote source.\n> If matching files exist both locally and remotely, only the differences between them will be transferred.\n> However, files present in both locations will initially be handled as conflicted files. They will be resolved automatically if they are not actually conflicted, but this process may take time.\n> This is generally the safest method, minimizing data loss risk.\n> ## %{RedFlag.Fetch.Method.FetchSmoother}.\n> **Low Traffic**, **Moderate CPU**, **Low to Moderate Risk** (depending operation)\n> This option first creates chunks from local files for the database, then fetches data. Consequently, only chunks missing locally are transferred. However, all metadata is taken from the remote source.\n> Local files are then compared against this metadata at launch. The content considered newer will overwrite the older one (by modified time). This outcome is then synchronised back to the remote database.\n> This is generally safe if local files are genuinely the latest timestamp. However, it can cause problems if a file has a newer timestamp but older content (like the initial `welcome.md`).\n> This uses less CPU and faster than \"%{RedFlag.Fetch.Method.FetchSafer}\", but it may lead to data loss if not used carefully.\n> ## %{RedFlag.Fetch.Method.FetchTraditional}.\n> **High Traffic**, **Low CPU**, **Low to Moderate Risk** (depending operation)\n> All things will be fetched from the remote.\n> Similar to the %{RedFlag.Fetch.Method.FetchSmoother}, but all chunks are fetched from the remote source.\n> This is the most traditional way to fetch, typically consuming the most network traffic and time. It also carries a similar risk of overwriting remote files to the '%{RedFlag.Fetch.Method.FetchSmoother}' option.\n> However, it is often considered the most stable method because it is the longest-established and most straightforward approach."},"RedFlag.Fetch.Method.FetchSafer":{def:"Create a local database once before fetching",ja:"フェッチ前にローカルデータベースを作成",ko:"가져오기 전에 로컬 데이터베이스를 한 번 생성",ru:"Создать локальную базу данных перед загрузкой",zh:"Create a local database once before fetching"},"RedFlag.Fetch.Method.FetchSmoother":{def:"Create local file chunks before fetching",ja:"フェッチ前にローカルファイルチャンクを作成",ko:"가져오기 전에 로컬 파일 청크 생성",ru:"Создать локальные чанки перед загрузкой",zh:"Create local file chunks before fetching"},"RedFlag.Fetch.Method.FetchTraditional":{def:"Fetch everything from the remote",ja:"リモートからすべてをフェッチ",ko:"원격에서 모든 것 가져오기",ru:"Загрузить всё с удалённого",zh:"Fetch everything from the remote"},"RedFlag.Fetch.Method.Title":{def:"How do you want to fetch?",ja:"どのようにフェッチしますか?",ko:"어떻게 가져오시겠습니까?",ru:"Как вы хотите загрузить?",zh:"How do you want to fetch?"},"RedFlag.FetchRemoteConfig.Buttons.Cancel":{def:"No, use local settings",ja:"いいえ、ローカル設定を使用",ru:"Нет, использовать локальные настройки",zh:"No, use local settings"},"RedFlag.FetchRemoteConfig.Buttons.Fetch":{def:"Yes, fetch and apply remote settings",ja:"はい、リモート設定を取得して適用",ru:"Да, загрузить и применить удалённые настройки",zh:"Yes, fetch and apply remote settings"},"RedFlag.FetchRemoteConfig.Message":{def:"Do you want to fetch and apply remotely stored preference settings to the device?",ja:"リモートに保存された設定を取得して、このデバイスに適用しますか?",ru:"Вы хотите загрузить и применить удалённые настройки?",zh:"Do you want to fetch and apply remotely stored preference settings to the device?"},"RedFlag.FetchRemoteConfig.Title":{def:"Fetch Remote Configuration",ja:"リモート設定の取得",ru:"Загрузить удалённую конфигурацию",zh:"Fetch Remote Configuration"},"Reducing the frequency with which on-disk changes are reflected into the DB":{def:"Reducing the frequency with which on-disk changes are reflected into the DB",es:"Reducir frecuencia de actualizaciones de disco a BD",ja:"ローカルでの変更がデータベースに反映される頻度を下げる(所定の回数まとめて同期する、逐一反映しない)",ko:"디스크 변경 사항이 데이터베이스에 반영되는 빈도를 줄입니다",ru:"Уменьшение частоты отражения изменений с диска в БД",zh:"降低将磁盘上的更改反映到数据库中的频率"},Region:{def:"Region",es:"Región",ja:"リージョン",ko:"지역",ru:"Регион",zh:"区域"},"Remote server type":{def:"Remote server type",es:"Tipo de servidor remoto",ja:"リモートの種別",ko:"원격 서버 유형",ru:"Тип удалённого сервера",zh:"远程服务器类型"},"Remote Type":{def:"Remote Type",es:"Tipo de remoto",ja:"同期方式",ko:"원격 유형",ru:"Удалённый тип",zh:"远程类型"},"Replicator.Dialogue.Locked.Action.Dismiss":{def:"Cancel for reconfirmation",ja:"再確認のためキャンセル",ko:"재확인을 위해 취소",ru:"Отмена для подтверждения",zh:"Cancel for reconfirmation"},"Replicator.Dialogue.Locked.Action.Fetch":{def:"Reset Synchronisation on This Device",ja:"このデバイスの同期をリセット",ko:"원격 데이터베이스에서 모든 것을 다시 가져오기",ru:"Сбросить синхронизацию на этом устройстве",zh:"Reset Synchronisation on This Device"},"Replicator.Dialogue.Locked.Action.Unlock":{def:"Unlock the remote database",ja:"リモートデータベースのロックを解除",ko:"원격 데이터베이스 잠금 해제",ru:"Разблокировать удалённую базу данных",zh:"Unlock the remote database"},"Replicator.Dialogue.Locked.Message":{def:"Remote database is locked. This is due to a rebuild on one of the terminals.\nThe device is therefore asked to withhold the connection to avoid database corruption.\n\nThere are three options that we can do:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n The most preferred and reliable way. This will dispose the local database once, and reset all synchronisation information from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n This will cancel the operation. And we will asked again on next request.\n",ja:"リモートデータベースがロックされています。これはいずれかの端末での再構築が原因です。\nデータベースの破損を避けるため、このデバイスは接続を保留するよう求められています。\n\n3つのオプションがあります\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n 最も推奨される信頼性の高い方法です。ローカルデータベースを一度破棄し、リモートデータベースからすべての同期情報を再取得します。ほとんどの場合、これは安全に実行できます。ただし、時間がかかり、安定したネットワークで実行する必要があります。\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n この方法は、他のレプリケーション(複製)方法ですでに確実に同期されている場合のみ使用できます。単に同じファイルがあるという意味ではありません。確信がない場合は避けてください。\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n 操作をキャンセルします。次回のリクエスト時に再度確認されます。\n",ko:"원격 데이터베이스가 잠겨 있습니다. 이는 일부 터미널에서 데이터베이스를 재구축했기 때문입니다.\n따라서 현재 기기는 데이터베이스 손상을 방지하기 위해 연결을 일시적으로 보류해야 합니다.\n\n선택할 수 있는 세 가지 방법이 있습니다:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n 가장 권장되고 신뢰할 수 있는 방법입니다. 로컬 데이터베이스를 초기화한 뒤, 원격 데이터베이스의 전체 데이터를 다시 가져옵니다. 대부분의 경우 안전하게 수행할 수 있으나, 시간이 다소 걸리며 안정적인 네트워크 환경에서 진행해야 합니다.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n 이 방법은 다른 동기화 방식으로 이미 완전하고 안정적으로 동기화된 경우에만 사용할 수 있습니다. 단순히 파일이 같다는 의미가 아니므로, 확신이 없다면 사용을 피하는 것이 좋습니다.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n 이번 작업을 취소하고, 다음 요청 시 다시 안내받습니다.\n",ru:"Удалённая база данных заблокирована. Это связано с перестроением на одном из устройств.",zh:"Remote database is locked. This is due to a rebuild on one of the terminals.\nThe device is therefore asked to withhold the connection to avoid database corruption.\n\nThere are three options that we can do:\n\n- %{Replicator.Dialogue.Locked.Action.Fetch}\n The most preferred and reliable way. This will dispose the local database once, and fetch all from the remote database again, In most case, we can perform this safely. However, it takes some time and should be done in stable network.\n- %{Replicator.Dialogue.Locked.Action.Unlock}\n This method can only be used if we are already reliably synchronised by other replication methods. This does not simply mean that we have the same files. If you are not sure, you should avoid it.\n- %{Replicator.Dialogue.Locked.Action.Dismiss}\n This will cancel the operation. And we will asked again on next request.\n"},"Replicator.Dialogue.Locked.Message.Fetch":{def:"Fetch all has been scheduled. Plug-in will be restarted to perform it.",ja:"全フェッチがスケジュールされました。プラグインは実行のために再起動されます。",ko:"모든 것 가져오기가 예약되었습니다. 이를 수행하기 위해 플러그인이 재시작됩니다.",ru:"Загрузка всего запланирована. Плагин будет перезапущен.",zh:"Fetch all has been scheduled. Plug-in will be restarted to perform it."},"Replicator.Dialogue.Locked.Message.Unlocked":{def:"The remote database has been unlocked. Please retry the operation.",ja:"リモートデータベースのロックが解除されました。操作を再試行してください。",ko:"원격 데이터베이스 잠금이 해제되었습니다. 작업을 다시 시도해 주세요.",ru:"Удалённая база данных разблокирована. Повторите операцию.",zh:"The remote database has been unlocked. Please retry the operation."},"Replicator.Dialogue.Locked.Title":{def:"Locked",ja:"ロック中",ko:"잠김",ru:"Заблокировано",zh:"Locked"},"Replicator.Message.Cleaned":{def:"Database cleaning up is in process. replication has been cancelled",ja:"データベースのクリーナップ中です。レプリケーション(複製)はキャンセルされました。",ko:"데이터베이스 정리가 진행 중입니다. 복제가 취소되었습니다",ru:"Очистка базы данных в процессе. Репликация отменена",zh:"Database cleaning up is in process. replication has been cancelled"},"Replicator.Message.InitialiseFatalError":{def:"No replicator is available, this is the fatal error.",ja:"レプリケーターが利用できません。これは致命的なエラーです。",ko:"사용 가능한 복제기가 없습니다. 치명적인 오류입니다.",ru:"Репликатор недоступен, это фатальная ошибка.",zh:"No replicator is available, this is the fatal error."},"Replicator.Message.Pending":{def:"Some file events are pending. Replication has been cancelled.",ja:"ファイルイベントが保留中です。レプリケーション(複製)はキャンセルされました。",ko:"일부 파일 이벤트가 대기 중입니다. 복제가 취소되었습니다.",ru:"Некоторые события файлов ожидают. Репликация отменена.",zh:"Some file events are pending. Replication has been cancelled."},"Replicator.Message.SomeModuleFailed":{def:"Replication has been cancelled by some module failure",ja:"一部のモジュールの失敗によりレプリケーション(複製)がキャンセルされました。",ko:"일부 모듈 실패로 복제가 취소되었습니다",ru:"Репликация отменена из-за сбоя модуля",zh:"Replication has been cancelled by some module failure"},"Replicator.Message.VersionUpFlash":{def:"An update has been detected. Please open the Settings dialogue and check the Change Log. Replication has been cancelled.",ja:"更新が検出されました。設定ダイアログを開いて変更ログを確認してください。レプリケーション(複製)はキャンセルされました。",ko:"설정을 열고 메시지를 확인해 주세요. 복제가 취소되었습니다.",ru:"Обновление обнаружено. Откройте настройки и проверьте историю изменений.",zh:"An update has been detected. Please open the Settings dialogue and check the Change Log. Replication has been cancelled."},"Requires restart of Obsidian":{def:"Requires restart of Obsidian",es:"Requiere reiniciar Obsidian",ja:"Obsidianの再起動が必要です",ko:"Obsidian 재시작 필요",ru:"Требуется перезапуск Obsidian",zh:"需要重启 Obsidian"},"Requires restart of Obsidian.":{def:"Requires restart of Obsidian.",es:"Requiere reiniciar Obsidian",ja:"Obsidianの再起動が必要です。",ko:"Obsidian 재시작이 필요합니다.",ru:"Требуется перезапуск Obsidian.",zh:"需要重启 Obsidian "},"Rerun Onboarding Wizard":{def:"Rerun Onboarding Wizard",ru:"Перезапустить мастер настройки",zh:"重新运行引导向导"},"Rerun the onboarding wizard to set up Self-hosted LiveSync again.":{def:"Rerun the onboarding wizard to set up Self-hosted LiveSync again.",ru:"Перезапустить мастер настройки для повторной настройки Self-hosted LiveSync.",zh:"重新运行引导向导以再次设置 Self-hosted LiveSync。"},"Rerun Wizard":{def:"Rerun Wizard",ru:"Перезапустить мастер",zh:"重新运行向导"},"Reset notification threshold and check the remote database usage":{def:"Reset notification threshold and check the remote database usage",ru:"Сбросить порог уведомления и проверить использование удалённой базы данных",zh:"重置通知阈值并检查远程数据库使用情况"},"Reset the remote storage size threshold and check the remote storage size again.":{def:"Reset the remote storage size threshold and check the remote storage size again.",ru:"Сбросить порог размера удалённого хранилища и проверить размер хранилища снова.",zh:"重置远程存储大小阈值并再次检查远程存储大小。"},"Run Doctor":{def:"Run Doctor",ru:"Запустить диагностику",zh:"立即诊断"},"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.":{def:"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.",es:"Guardar configuración en archivo markdown. Se notificarán nuevos ajustes. Puede definir diferentes archivos por plataforma",ja:"Markdownファイルに設定を保存します。新しい設定が到着すると通知されます。プラットフォームごとに異なるファイルを設定できます。",ko:"설정을 마크다운 파일에 저장합니다. 새로운 설정이 도착하면 알림을 받게 됩니다. 플랫폼별로 다른 파일을 설정할 수 있습니다.",ru:"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform.",zh:"将设置保存到一个 Markdown 文件中。当新设置到达时,您将收到通知。您可以根据平台设置不同的文件 "},"Saving will be performed forcefully after this number of seconds.":{def:"Saving will be performed forcefully after this number of seconds.",es:"Guardado forzado tras esta cantidad de segundos",ja:"この秒数後に強制的に保存されます。",ko:"이 시간(초) 후에 강제로 저장이 수행됩니다.",ru:"Сохранение будет принудительно выполнено после этого количества секунд.",zh:"在此秒数后将强制执行保存 "},"Scan changes on customization sync":{def:"Scan changes on customization sync",es:"Escanear cambios en sincronización de personalización",ja:"カスタマイズされた同期時に、変更をスキャンする",ko:"사용자 설정 동기화 시 변경 사항 검색",ru:"Сканировать изменения при синхронизации настроек",zh:"在自定义同步时扫描更改"},"Scan customization automatically":{def:"Scan customization automatically",es:"Escanear personalización automáticamente",ja:"自動的にカスタマイズをスキャン",ko:"사용자 설정 자동 검색",ru:"Сканировать настройки автоматически",zh:"自动扫描自定义设置"},"Scan customization before replicating.":{def:"Scan customization before replicating.",es:"Escanear personalización antes de replicar",ja:"レプリケーション(複製)前に、カスタマイズをスキャン",ko:"복제하기 전에 사용자 설정을 검색합니다.",ru:"Сканировать настройки перед репликацией.",zh:"在复制前扫描自定义设置 "},"Scan customization every 1 minute.":{def:"Scan customization every 1 minute.",es:"Escanear personalización cada 1 minuto",ja:"カスタマイズのスキャンを1分ごとに行う",ko:"1분마다 사용자 설정을 검색합니다.",ru:"Сканировать настройки каждую минуту.",zh:"每1分钟扫描自定义设置 "},"Scan customization periodically":{def:"Scan customization periodically",es:"Escanear personalización periódicamente",ja:"定期的にカスタマイズをスキャン",ko:"주기적으로 사용자 설정 검색",ru:"Сканировать настройки периодически",zh:"定期扫描自定义设置"},"Scan for hidden files before replication":{def:"Scan for hidden files before replication",es:"Escanear archivos ocultos antes de replicar",ja:"レプリケーション(複製)開始前に、隠しファイルのスキャンを行う",ko:"복제 전 숨겨진 파일 검색",ru:"Сканировать скрытые файлы перед репликацией",zh:"复制前扫描隐藏文件"},"Scan hidden files periodically":{def:"Scan hidden files periodically",es:"Escanear archivos ocultos periódicamente",ja:"定期的に隠しファイルのスキャンを行う",ko:"주기적으로 숨겨진 파일 검색",ru:"Сканировать скрытые файлы периодически",zh:"定期扫描隐藏文件"},"Seconds, 0 to disable":{def:"Seconds, 0 to disable",es:"Segundos, 0 para desactivar",ja:"秒数、0で無効",ko:"초 단위, 0으로 설정하면 비활성화",ru:"Секунд, 0 для отключения",zh:"秒,0为禁用"},"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.":{def:"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving.",es:"Segundos. Guardado en BD local se retrasará hasta este valor tras dejar de escribir/guardar",ja:"秒。入力や保存を停止してからこの値の間、ローカルデータベースへの保存が遅延されます。",ko:"초 단위입니다. 타이핑이나 저장을 중단한 후 이 시간동안 로컬 데이터베이스 저장이 지연됩니다.",ru:"Секунды. Сохранение в локальную базу данных будет отложено.",zh:"秒。在我们停止输入或保存后,保存到本地数据库将延迟此值 "},"Secret Key":{def:"Secret Key",es:"Clave secreta",ja:"シークレットキー",ko:"시크릿 키",ru:"Секретный ключ",zh:"Secret Key"},"Server URI":{def:"Server URI",es:"URI del servidor",ja:"URI",ko:"서버 URI",ru:"URI сервера",zh:"服务器 URI"},"Setting.GenerateKeyPair.Desc":{def:'We have generated a key pair!\n\nNote: This key pair will never be shown again. Please save it in a safe place. If you have lost it, you need to generate a new key pair.\nNote 2: The public key is in spki format, and the Private key is in pkcs8 format. For the sake of convenience, newlines are converted to `\\n` in public key.\nNote 3: The public key should be configured in the remote database, and the private key should be configured in local devices.\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-keypair">\n>\n> ### Public Key\n> ```\n${public_key}\n> ```\n>\n> ### Private Key\n> ```\n${private_key}\n> ```\n>\n> </div>\n\n>[!Both for copying]-\n>\n> <div class="sls-keypair">\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n> </div>\n\n',ja:'キーペアを生成しました!\n\n注意: このキーペアは再度表示されません。安全な場所に保存してください。紛失した場合は、新しいキーペアを生成する必要があります。\n注意2: 公開鍵はspki形式、秘密鍵はpkcs8形式です。利便性のため、公開鍵の改行は`\\n`に変換されています。\n注意3: 公開鍵はリモートデータベースに、秘密鍵はローカルデバイスに設定してください。\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-keypair">\n>\n> ### 公開鍵\n> ```\n${public_key}\n> ```\n>\n> ### 秘密鍵\n> ```\n${private_key}\n> ```\n>\n> </div>\n\n>[!Both for copying]-\n>\n> <div class="sls-keypair">\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n> </div>\n\n',ko:'키 페어를 생성했습니다!\n\n참고: 이 키 페어는 다시 표시되지 않습니다. 안전한 곳에 저장해 주세요. 분실하면 새 키 페어를 생성해야 합니다.\n참고 2: 공개 키는 spki 형식이고, 개인 키는 pkcs8 형식입니다. 편의상 공개 키의 줄 바꿈은 `\\n`으로 변환됩니다.\n참고 3: 공개 키는 원격 데이터베이스에서 구성되어야 하고, 개인 키는 로컬 기기에서 구성되어야 합니다.\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-keypair">\n>\n> ### 공개 키\n> ```\n${public_key}\n> ```\n>\n> ### 개인 키\n> ```\n${private_key}\n> ```\n>\n> </div>\n\n>[!Both for copying]-\n>\n> <div class="sls-keypair">\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n> </div>\n\n\n',ru:"Мы сгенерировали пару ключей!",zh:'We have generated a key pair!\n\nNote: This key pair will never be shown again. Please save it in a safe place. If you have lost it, you need to generate a new key pair.\nNote 2: The public key is in spki format, and the Private key is in pkcs8 format. For the sake of convenience, newlines are converted to `\\n` in public key.\nNote 3: The public key should be configured in the remote database, and the private key should be configured in local devices.\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-keypair">\n>\n> ### Public Key\n> ```\n${public_key}\n> ```\n>\n> ### Private Key\n> ```\n${private_key}\n> ```\n>\n> </div>\n\n>[!Both for copying]-\n>\n> <div class="sls-keypair">\n>\n> ```\n${public_key}\n${private_key}\n> ```\n>\n> </div>\n\n'},"Setting.GenerateKeyPair.Title":{def:"New key pair has been generated!",ja:"新しいキーペアが生成されました!",ko:"새 키 페어가 생성되었습니다!",ru:"Новая пара ключей сгенерирована!",zh:"New key pair has been generated!"},"Setting.TroubleShooting":{def:"TroubleShooting",ja:"トラブルシューティング",ko:"문제 해결",ru:"Устранение неполадок",zh:"故障排除"},"Setting.TroubleShooting.Doctor":{def:"Setting Doctor",ja:"設定診断ツール",ko:"설정 진단 마법사",ru:"Диагностика настроек",zh:"设置诊断"},"Setting.TroubleShooting.Doctor.Desc":{def:"Detects non optimal settings. (Same as during migration)",ja:"最適でない設定を検出します。(マイグレーション時と同じ)",ko:"최적화되지 않은 설정을 감지합니다. (데이터 구조 전환 시와 동일)",ru:"Обнаруживает неоптимальные настройки.",zh:"检测系统中不合理的设置。(与迁移期间逻辑相同)"},"Setting.TroubleShooting.ScanBrokenFiles":{def:"Scan for broken files",ja:"破損ファイルのスキャン",ru:"Сканировать повреждённые файлы",zh:"扫描损坏或异常的文件"},"Setting.TroubleShooting.ScanBrokenFiles.Desc":{def:"Scans for files that are not stored correctly in the database.",ja:"データベースに正しく保存されていないファイルをスキャンします。",ru:"Сканирует файлы, которые неправильно хранятся в базе данных.",zh:"扫描数据库中未正确存储的文件。"},"SettingTab.Message.AskRebuild":{def:"Your changes require fetching from the remote database. Do you want to proceed?",ja:"変更にはリモートデータベースからのフェッチが必要です。続行しますか?",ko:"변경 사항을 적용하려면 원격 데이터베이스에서 가져와야 합니다. 계속 진행하시겠습니까?",ru:"Ваши изменения требуют загрузки из удалённой базы данных. Хотите продолжить?",zh:"Your changes require fetching from the remote database. Do you want to proceed?"},"Setup.Apply.Buttons.ApplyAndFetch":{def:"Apply and Fetch",ja:"適用してフェッチ",ru:"Применить и загрузить",zh:"Apply and Fetch"},"Setup.Apply.Buttons.ApplyAndMerge":{def:"Apply and Merge",ja:"適用してマージ",ru:"Применить и объединить",zh:"Apply and Merge"},"Setup.Apply.Buttons.ApplyAndRebuild":{def:"Apply and Rebuild",ja:"適用して再構築",ru:"Применить и перестроить",zh:"Apply and Rebuild"},"Setup.Apply.Buttons.Cancel":{def:"Discard and Cancel",ja:"破棄してキャンセル",ru:"Отменить и отменить",zh:"Discard and Cancel"},"Setup.Apply.Buttons.OnlyApply":{def:"Only Apply",ja:"適用のみ",ru:"Только применить",zh:"Only Apply"},"Setup.Apply.Message":{def:"The new configuration is ready. Let us proceed to apply it.\nThere are several ways to apply this:\n\n- Apply and Fetch\n Configure this device as a new client. After applying, synchronise from the remote server.\n- Apply and Merge\n Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise.\n- Apply and Rebuild\n Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch.\n Other devices will be locked and required to re-fetch.\n- Only Apply\n Apply only. Conflicts may arise if a rebuild is required.",ja:"新しい設定の準備ができました。適用に進みましょう。\n適用方法はいくつかあります\n\n- 適用してフェッチ\n このデバイスを新しいクライアントとして設定します。適用後、リモートサーバーから同期します。\n- 適用してマージ\n 既にファイルがあるデバイスで設定します。ローカルファイルを処理し、差分を転送します。競合が発生する場合があります。\n- 適用して再構築\n ローカルファイルを使用してリモートを再構築します。これは通常、サーバーが破損した場合や最初からやり直したい場合に行います。\n 他のデバイスはロックされ、再フェッチが必要になります。\n- 適用のみ\n 適用のみを行います。再構築が必要な場合、競合が発生する可能性があります。",ru:"Новая конфигурация готова. Есть несколько способов применить её.",zh:"The new configuration is ready. Let us proceed to apply it.\nThere are several ways to apply this:\n\n- Apply and Fetch\n Configure this device as a new client. After applying, synchronise from the remote server.\n- Apply and Merge\n Configure on a device that already has the file. It processes the local files and transfers the differences. Conflicts may arise.\n- Apply and Rebuild\n Rebuild the remote using local files. This is typically done if the server becomes corrupted or we wish to start from scratch.\n Other devices will be locked and required to re-fetch.\n- Only Apply\n Apply only. Conflicts may arise if a rebuild is required."},"Setup.Apply.Title":{def:"Apply new configuration from the ${method}",ja:"${method}からの新しい設定を適用",ru:"Применить новую конфигурацию из method",zh:"Apply new configuration from the ${method}"},"Setup.Apply.WarningRebuildRecommended":{def:"NOTE: after adjusting the settings, it has been determined that a rebuild is required; Just Import is not recommended.",ja:"注意: 設定の調整後、再構築が必要と判断されました。インポートのみは推奨されません。",ru:"ПРИМЕЧАНИЕ: после настройки изменений определено, что требуется перестроение.",zh:"NOTE: after adjusting the settings, it has been determined that a rebuild is required; Just Import is not recommended."},"Setup.Doctor.Buttons.No":{def:"No, please use the settings in the URI as is",ja:"いいえ、URIの設定をそのまま使用",ru:"Нет, использовать настройки из URI как есть",zh:"No, please use the settings in the URI as is"},"Setup.Doctor.Buttons.Yes":{def:"Yes, please consult the doctor",ja:"はい、診断ツールに相談する",ru:"Да, пожалуйста, запустить диагностику",zh:"Yes, please consult the doctor"},"Setup.Doctor.Message":{def:"Self-hosted LiveSync has gradually become longer in history and some recommended settings have changed.\n\nNow, setup is a very good time to do this.\n\nDo you want to run Doctor to check if the imported settings are optimal compared to the latest state?",ja:"Self-hosted LiveSyncは徐々に歴史が長くなり、一部の推奨設定が変更されています。\n\nセットアップは、これを行う非常に良い機会です。\n\nインポートされた設定が最新の状態と比較して最適かどうかを確認するために、診断ツールを実行しますか",ru:"Self-hosted LiveSync постепенно набрал историю и некоторые рекомендуемые настройки изменились.",zh:"Self-hosted LiveSync has gradually become longer in history and some recommended settings have changed.\n\nNow, setup is a very good time to do this.\n\nDo you want to run Doctor to check if the imported settings are optimal compared to the latest state?"},"Setup.Doctor.Title":{def:"Do you want to consult the doctor?",ja:"診断ツールに相談しますか?",ru:"Хотите запустить диагностику?",zh:"Do you want to consult the doctor?"},"Setup.FetchRemoteConf.Buttons.Fetch":{def:"Yes, please fetch the configuration",ja:"はい、設定を取得",ru:"Да, загрузить конфигурацию",zh:"Yes, please fetch the configuration"},"Setup.FetchRemoteConf.Buttons.Skip":{def:"No, please use the settings in the URI",ja:"いいえ、URIの設定を使用",ru:"Нет, использовать настройки из URI",zh:"No, please use the settings in the URI"},"Setup.FetchRemoteConf.Message":{def:"If we have already synchronised once with another device, the remote database stores the suitable configuration values between the synchronised devices. The plug-in would like to retrieve them for robust configuration.\n\nHowever, we have to make sure the one thing. Are we currently in a situation where we can access the network safely and retrieve the settings?\n\nNote: Mostly, you are safe to do this, that your remote database is hosted with a SSL certificate, and your network is not compromised.",ja:"既に他のデバイスと同期したことがある場合、リモートデータベースには同期されたデバイス間の適切な設定値が保存されています。プラグインは堅牢な設定のためにそれらを取得したいと考えています。\n\nただし、1つ確認が必要です。現在、ネットワークに安全にアクセスして設定を取得できる状況ですか\n\n注意: リモートデータベースがSSL証明書でホストされており、ネットワークが侵害されていなければ、ほとんどの場合安全に実行できます。",ru:"Если мы уже синхронизировались с другим устройством, удалённая база данных хранит подходящие значения конфигурации.",zh:"If we have already synchronised once with another device, the remote database stores the suitable configuration values between the synchronised devices. The plug-in would like to retrieve them for robust configuration.\n\nHowever, we have to make sure the one thing. Are we currently in a situation where we can access the network safely and retrieve the settings?\n\nNote: Mostly, you are safe to do this, that your remote database is hosted with a SSL certificate, and your network is not compromised."},"Setup.FetchRemoteConf.Title":{def:"Fetch configuration from remote database?",ja:"リモートデータベースから設定を取得しますか?",ru:"Загрузить конфигурацию с удалённой базы данных?",zh:"Fetch configuration from remote database?"},"Setup.QRCode":{def:'We have generated a QR code to transfer the settings. Please scan the QR code with your phone or other device.\nNote: The QR code is not encrypted, so be careful to open this.\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-qr">${qr_image}</div>',ja:'設定を転送するためのQRコードを生成しました。スマートフォンや他のデバイスでQRコードをスキャンしてください。\n注意: QRコードは暗号化されていないため、開く際は注意してください。\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-qr">${qr_image}</div>',ko:'설정을 전송하기 위한 QR 코드를 생성했습니다. 휴대폰이나 다른 기기로 QR 코드를 스캔해 주세요.\n참고: QR 코드는 암호화되지 않았으므로 열 때 주의하세요.\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-qr">${qr_image}</div>',ru:"Мы сгенерировали QR-код для передачи настроек. Отсканируйте QR-код телефоном.",zh:'We have generated a QR code to transfer the settings. Please scan the QR code with your phone or other device.\nNote: The QR code is not encrypted, so be careful to open this.\n\n>[!FOR YOUR EYES ONLY]-\n> <div class="sls-qr">${qr_image}</div>'},"Setup.ShowQRCode":{def:"Show QR code",ja:"QRコードを表示",ko:"QR 코드 표시",ru:"Показать QR код",zh:"使用QR码"},"Setup.ShowQRCode.Desc":{def:"Show QR code to transfer the settings.",ja:"設定を転送するためのQRコードを表示します。",ko:"설정을 전송하기 위한 QR 코드를 표시합니다.",ru:"Показать QR код для передачи настроек.",zh:"使用QR码来传递配置"},"Should we keep folders that don't have any files inside?":{def:"Should we keep folders that don't have any files inside?",es:"¿Mantener carpetas vacías?",ja:"中にファイルがないフォルダーを保持しますか?",ko:"내부에 파일이 없는 폴더를 유지하시겠습니까?",ru:"Сохранять папки без файлов?",zh:"我们是否应该保留内部没有任何文件的文件夹?"},"Should we only check for conflicts when a file is opened?":{def:"Should we only check for conflicts when a file is opened?",es:"¿Solo comprobar conflictos al abrir archivo?",ja:"ファイルを開いたときのみ競合をチェックしますか?",ko:"파일을 열 때만 충돌을 확인하시겠습니까?",ru:"Проверять конфликты только при открытии файла?",zh:"我们是否应该仅在文件打开时检查冲突?"},"Should we prompt you about conflicting files when a file is opened?":{def:"Should we prompt you about conflicting files when a file is opened?",es:"¿Notificar sobre conflictos al abrir archivo?",ja:"ファイルを開いたときに競合ファイルについて確認を求めますか?",ko:"파일을 열 때 충돌하는 파일에 대해 알림을 표시하시겠습니까?",ru:"Спрашивать о конфликтующих файлах при открытии файла?",zh:"当文件打开时,是否提示冲突文件?"},"Should we prompt you for every single merge, even if we can safely merge automatcially?":{def:"Should we prompt you for every single merge, even if we can safely merge automatcially?",es:"¿Preguntar en cada fusión aunque sea automática?",ja:"自動的に安全にマージできる場合でも、すべてのマージについて確認を求めますか?",ko:"안전하게 자동 병합할 수 있는 경우에도 모든 병합에 대해 알림을 받으시겠습니까?",ru:"Спрашивать о каждом слиянии, даже если мы можем безопасно слить автоматически?",zh:"即使我们可以安全地自动合并,是否也应该为每一次合并提示您?"},"Show only notifications":{def:"Show only notifications",es:"Mostrar solo notificaciones",ja:"通知のみ表示",ko:"알림만 표시",ru:"Показывать только уведомления",zh:"仅显示通知"},"Show status as icons only":{def:"Show status as icons only",es:"Mostrar estado solo con íconos",ja:"ステータス表示をアイコンのみにする",ko:"아이콘으로만 상태 표시",ru:"Показывать статус только иконками",zh:"仅以图标显示状态"},"Show status icon instead of file warnings banner":{def:"Show status icon instead of file warnings banner",ru:"Показывать иконку статуса вместо предупреждения о файлах",zh:"显示状态图标,而非文件警告横幅"},"Show status inside the editor":{def:"Show status inside the editor",es:"Mostrar estado dentro del editor",ja:"ステータスをエディタ内に表示",ko:"편집기 내부에 상태 표시",ru:"Показывать статус внутри редактора",zh:"在编辑器内显示状态"},"Show status on the status bar":{def:"Show status on the status bar",es:"Mostrar estado en la barra de estado",ja:"ステータスバーに、ステータスを表示",ko:"상태 바에 상태 표시",ru:"Показывать статус в строке состояния",zh:"在状态栏上显示状态"},"Show verbose log. Please enable if you report an issue.":{def:"Show verbose log. Please enable if you report an issue.",es:"Mostrar registro detallado. Actívelo si reporta un problema.",ja:"エラー以外の詳細ログ項目も表示する。問題が発生した場合は有効にしてください。",ko:"자세한 로그를 표시합니다. 문제를 신고하는 경우 활성화해 주세요.",ru:"Показывать подробный лог. Пожалуйста, включите при сообщении о проблеме.",zh:"显示详细日志。如果您报告问题,请启用此选项 "},"Starts synchronisation when a file is saved.":{def:"Starts synchronisation when a file is saved.",es:"Inicia sincronización al guardar un archivo",ja:"ファイルが保存されたときに同期を開始します。",ko:"파일이 저장될 때 동기화를 시작합니다.",ru:"Запускать синхронизацию при сохранении файла.",zh:"当文件保存时启动同步 "},"Stop reflecting database changes to storage files.":{def:"Stop reflecting database changes to storage files.",es:"Dejar de reflejar cambios de BD en archivos",ja:"データベースの変更をストレージファイルに反映させない",ko:"데이터베이스 변경 사항을 스토리지 파일에 반영하는 것을 중단합니다.",ru:"Остановить отражение изменений базы данных в файлы хранилища.",zh:"停止将数据库更改反映到存储文件 "},"Stop watching for file changes.":{def:"Stop watching for file changes.",es:"Dejar de monitorear cambios en archivos",ja:"監視の停止",ko:"파일 변경 사항 감시를 중단합니다.",ru:"Остановить отслеживание изменений файлов.",zh:"停止监视文件更改 "},"Suppress notification of hidden files change":{def:"Suppress notification of hidden files change",es:"Suprimir notificaciones de cambios en archivos ocultos",ja:"隠しファイルの変更通知を抑制",ko:"숨겨진 파일 변경 알림 억제",ru:"Подавлять уведомления об изменении скрытых файлов",zh:"暂停隐藏文件更改的通知"},"Suspend database reflecting":{def:"Suspend database reflecting",es:"Suspender reflejo de base de datos",ja:"データベース反映の一時停止",ko:"데이터베이스 반영 일시 중단",ru:"Приостановить отражение базы данных",zh:"暂停数据库反映"},"Suspend file watching":{def:"Suspend file watching",es:"Suspender monitorización de archivos",ja:"監視の一時停止",ko:"파일 감시 일시 중단",ru:"Приостановить отслеживание файлов",zh:"暂停文件监视"},"Sync after merging file":{def:"Sync after merging file",es:"Sincronizar tras fusionar archivo",ja:"ファイルがマージ(統合)された時に同期",ko:"파일 병합 후 동기화",ru:"Синхронизировать после слияния файла",zh:"合并文件后同步"},"Sync automatically after merging files":{def:"Sync automatically after merging files",es:"Sincronizar automáticamente tras fusionar archivos",ja:"ファイルのマージ後に自動的に同期",ko:"파일 병합 후 자동으로 동기화",ru:"Синхронизировать автоматически после слияния файлов",zh:"合并文件后自动同步"},"Sync Mode":{def:"Sync Mode",es:"Modo de sincronización",ja:"同期モード",ko:"동기화 모드",ru:"Режим синхронизации",zh:"同步模式"},"Sync on Editor Save":{def:"Sync on Editor Save",es:"Sincronizar al guardar en editor",ja:"エディタでの保存時に、同期されます",ko:"편집기 저장 시 동기화",ru:"Синхронизация при сохранении в редакторе",zh:"编辑器保存时同步"},"Sync on File Open":{def:"Sync on File Open",es:"Sincronizar al abrir archivo",ja:"ファイルを開いた時に同期",ko:"파일 열기 시 동기화",ru:"Синхронизация при открытии файла",zh:"打开文件时同步"},"Sync on Save":{def:"Sync on Save",es:"Sincronizar al guardar",ja:"保存時に同期",ko:"저장 시 동기화",ru:"Синхронизация при сохранении",zh:"保存时同步"},"Sync on Startup":{def:"Sync on Startup",es:"Sincronizar al iniciar",ja:"起動時同期",ko:"시작 시 동기화",ru:"Синхронизация при запуске",zh:"启动时同步"},"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.":{def:"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned.",es:"Solo pruebas - Resolver conflictos sincronizando copias nuevas (puede sobrescribir modificaciones)",ja:"テスト用 - ファイルの新しいコピーを同期してファイル競合を解決します。これにより変更されたファイルが上書きされる可能性があります。注意してください。",ko:"테스트 전용 - 파일의 새로운 사본을 동기화하여 파일 충돌을 해결하며, 수정된 파일을 덮어쓸 수 있습니다. 주의하세요.",ru:"Только для тестирования - разрешать конфликты файлов синхронизацией новых копий.",zh:"仅供测试 - 通过同步文件的较新副本来解决文件冲突,这可能会覆盖修改过的文件。请注意 "},"The delay for consecutive on-demand fetches":{def:"The delay for consecutive on-demand fetches",es:"Retraso entre obtenciones consecutivas",ja:"連続したオンデマンドフェッチの遅延",ko:"연속 청크 요청 간 대기 시간",ru:"Задержка для последовательных запросов по требованию",zh:"连续按需获取的延迟"},"The Hash algorithm for chunk IDs":{def:"The Hash algorithm for chunk IDs",es:"Algoritmo hash para IDs de chunks",ja:"チャンクIDのハッシュアルゴリズム",ko:"청크 ID용 해시 알고리즘",ru:"Хэш-алгоритм для ID чанков",zh:"块 ID 的哈希算法(实验性)"},"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.":{def:"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.",es:"Duración máxima para incubar chunks. Excedentes se independizan",ja:"ドキュメント内でチャンクを保持できる最大期間。この期間を超えたチャンクは独立したチャンクに昇格します。",ko:"변경 기록이 문서에 함께 보관될 수 있는 최대 시간입니다. 초과 시 문서에서 분리되어 개별로 저장됩니다.",ru:"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks.",zh:"文档中可以孵化的数据块的最大持续时间。超过此时间的数据块将成为独立数据块 "},"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.":{def:"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.",es:"Número máximo de chunks que pueden incubarse en el documento. Excedentes se independizan",ja:"ドキュメント内で保持できるチャンクの最大数。この数を超えたチャンクは即座に独立したチャンクに昇格します。",ko:"문서 안에 임시로 보관할 수 있는 변경 기록의 최대 개수입니다. 이 수를 초과하면 즉시 독립된 청크로 분리되어 저장됩니다.",ru:"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks.",zh:"文档中可以孵化的数据块的最大数量。超过此数量的数据块将立即成为独立数据块 "},"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.":{def:"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.",es:"Tamaño total máximo de chunks incubados. Excedentes se independizan",ja:"ドキュメント内で保持できるチャンクの最大合計サイズ。このサイズを超えたチャンクは即座に独立したチャンクに昇格します。",ko:"문서 안에 임시로 보관할 수 있는 변경 기록의 전체 크기 제한입니다. 초과 시 자동으로 분리됩니다.",ru:"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks.",zh:"文档中可以孵化的数据块的最大总大小。超过此大小的数据块将立即成为独立数据块 "},"The minimum interval for automatic synchronisation on event.":{def:"The minimum interval for automatic synchronisation on event.",ru:"Минимальный интервал автоматической синхронизации по событию.",zh:"基于事件自动同步的最小间隔。"},"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.":{def:"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.",es:"Esta frase no se copia a otros dispositivos. Usará `Default` hasta reconfigurar",ja:"このパスフレーズは他のデバイスにコピーされません。再度設定するまで`Default`に設定されます。",ko:"이 패스프레이즈는 다른 기기로 복사되지 않습니다. 다시 구성할 때까지 `기본값`으로 설정됩니다.",ru:"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again.",zh:"此密码不会复制到另一台设备。在您再次配置之前,它将设置为 `Default` "},"TweakMismatchResolve.Action.Dismiss":{def:"Dismiss",ja:"無視",ko:"무시",ru:"Отмена",zh:"Dismiss"},"TweakMismatchResolve.Action.UseConfigured":{def:"Use configured settings",ja:"設定済みの設定を使用",ko:"구성된 설정 사용",ru:"Использовать настроенные параметры",zh:"Use configured settings"},"TweakMismatchResolve.Action.UseMine":{def:"Update remote database settings",ja:"リモートデータベースの設定を更新",ko:"원격 데이터베이스 설정 업데이트",ru:"Обновить настройки удалённой базы данных",zh:"Update remote database settings"},"TweakMismatchResolve.Action.UseMineAcceptIncompatible":{def:"Update remote database settings but keep as is",ja:"リモートデータベースの設定を更新するがそのまま維持",ko:"원격 데이터베이스 설정 업데이트하지만 그대로 유지",ru:"Обновить настройки, но оставить как есть",zh:"Update remote database settings but keep as is"},"TweakMismatchResolve.Action.UseMineWithRebuild":{def:"Update remote database settings and rebuild again",ja:"リモートデータベースの設定を更新して再構築",ko:"원격 데이터베이스 설정 업데이트하고 다시 재구축",ru:"Обновить настройки и перестроить снова",zh:"Update remote database settings and rebuild again"},"TweakMismatchResolve.Action.UseRemote":{def:"Apply settings to this device",ja:"このデバイスに設定を適用",ko:"이 기기에 설정 적용",ru:"Применить настройки к этому устройству",zh:"Apply settings to this device"},"TweakMismatchResolve.Action.UseRemoteAcceptIncompatible":{def:"Apply settings to this device, but and ignore incompatibility",ja:"このデバイスに設定を適用し、非互換性を無視",ko:"이 기기에 설정 적용하지만 호환성 문제 무시",ru:"Применить настройки, но игнорировать несовместимость",zh:"Apply settings to this device, but and ignore incompatibility"},"TweakMismatchResolve.Action.UseRemoteWithRebuild":{def:"Apply settings to this device, and fetch again",ja:"このデバイスに設定を適用し、再フェッチ",ko:"이 기기에 설정 적용하고 다시 가져오기",ru:"Применить настройки и загрузить снова",zh:"Apply settings to this device, and fetch again"},"TweakMismatchResolve.Message.Main":{def:"\nThe settings in the remote database are as follows. These values are configured by other devices, which are synchronised with this device at least once.\n\nIf you want to use these settings, please select %{TweakMismatchResolve.Action.UseConfigured}.\nIf you want to keep the settings of this device, please select %{TweakMismatchResolve.Action.Dismiss}.\n\n${table}\n\n>[!TIP]\n> If you want to synchronise all settings, please use `Sync settings via markdown` after applying minimal configuration with this feature.\n\n${additionalMessage}",ja:"\nリモートデータベースの設定は以下の通りです。これらの値は、このデバイスと少なくとも1回同期された他のデバイスによって設定されています。\n\nこれらの設定を使用する場合は、%{TweakMismatchResolve.Action.UseConfigured}を選択してください。\nこのデバイスの設定を維持する場合は、%{TweakMismatchResolve.Action.Dismiss}を選択してください。\n\n${table}\n\n>[!TIP]\n> すべての設定を同期したい場合は、この機能で最小限の設定を適用した後、`Sync settings via markdown`を使用してください。\n\n${additionalMessage}",ko:"\n원격 데이터베이스의 설정은 다음과 같습니다. 이 값들은 이 기기와 최소 한 번 동기화된 다른 기기에서 구성된 것입니다.\n\n이 설정을 사용하려면 %{TweakMismatchResolve.Action.UseConfigured}를 선택해 주세요.\n이 기기의 설정을 유지하려면 %{TweakMismatchResolve.Action.Dismiss}를 선택해 주세요.\n\n${table}\n\n>[!TIP]\n> 모든 설정을 동기화하려면 이 기능으로 최소 구성을 적용한 후 `마크다운을 통한 설정 동기화`를 사용해 주세요.\n\n${additionalMessage}",ru:"Настройки в удалённой базе данных следующие. Эти значения настроены другими устройствами.",zh:"\nThe settings in the remote database are as follows. These values are configured by other devices, which are synchronised with this device at least once.\n\nIf you want to use these settings, please select %{TweakMismatchResolve.Action.UseConfigured}.\nIf you want to keep the settings of this device, please select %{TweakMismatchResolve.Action.Dismiss}.\n\n${table}\n\n>[!TIP]\n> If you want to synchronise all settings, please use `Sync settings via markdown` after applying minimal configuration with this feature.\n\n${additionalMessage}"},"TweakMismatchResolve.Message.MainTweakResolving":{def:"Your configuration has not been matched with the one on the remote server.\n\nFollowing configuration should be matched:\n\n${table}\n\nLet us know your decision.\n\n${additionalMessage}",ja:"設定がリモートサーバーの設定と一致しません。\n\n以下の設定が一致している必要があります\n\n${table}\n\n判断をお知らせください。\n\n${additionalMessage}",ko:"구성이 원격 서버의 것과 일치하지 않습니다.\n\n다음 구성이 일치해야 합니다:\n\n${table}\n\n결정을 알려주세요.\n\n${additionalMessage}",ru:"Ваша конфигурация не совпадает с удалённым сервером.",zh:"Your configuration has not been matched with the one on the remote server.\n\nFollowing configuration should be matched:\n\n${table}\n\nLet us know your decision.\n\n${additionalMessage}"},"TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended":{def:"\n>[!NOTICE]\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> ***Please ensure that you have time and are connected to a stable network to apply!***",ja:"\n>[!NOTICE]\n> 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。\n> ***適用には時間と安定したネットワーク接続が必要です!***",ko:"\n>[!NOTICE]\n> 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다.\n> ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!***",ru:"Некоторые изменения совместимы, но могут потребовать дополнительного хранилища. Рекомендуется перестроение.",zh:"\n>[!NOTICE]\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> ***Please ensure that you have time and are connected to a stable network to apply!***"},"TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired":{def:"\n>[!WARNING]\n> Some remote configurations are not compatible with the local database of this device. Rebuilding the local database will be required.\n> ***Please ensure that you have time and are connected to a stable network to apply!***",ja:"\n>[!WARNING]\n> 一部のリモート設定はこのデバイスのローカルデータベースと互換性がありません。ローカルデータベースの再構築が必要です。\n> ***適用には時間と安定したネットワーク接続が必要です!***",ko:"\n>[!WARNING]\n> 일부 원격 구성이 이 기기의 로컬 데이터베이스와 호환되지 않습니다. 로컬 데이터베이스 재구축이 필요합니다.\n> ***시간적 여유가 있고 안정적인 네트워크에 연결된 상태에서 적용해 주세요!***",ru:"Некоторые удалённые конфигурации несовместимы с локальной базой данных. Требуется перестроение.",zh:"\n>[!WARNING]\n> Some remote configurations are not compatible with the local database of this device. Rebuilding the local database will be required.\n> ***Please ensure that you have time and are connected to a stable network to apply!***"},"TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended":{def:"\n>[!NOTICE]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> If you want to rebuild, it takes a few minutes or more. **Make sure it is safe to perform it now.**",ja:"\n>[!NOTICE]\n> ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。\n> 一部の変更は互換性がありますが、追加のストレージと転送量を消費する可能性があります。再構築をお勧めします。ただし、再構築は現時点では実行されない場合がありますが、将来のメンテナンスで実装される可能性があります。\n> 再構築を行う場合は数分以上かかります。**今実行しても安全か確認してください。**",ko:"\n>[!NOTICE]\n> 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다.\n> 일부 변경사항은 호환 가능하지만 추가 스토리지 및 전송량을 소모할 수 있습니다. 재구축을 권장합니다. 하지만 현재 재구축을 수행하지 않더라도 향후 유지보수에서 구현될 수 있습니다.\n> 재구축을 원한다면 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.**",ru:"Обнаружены значения, несовместимые с удалённой базой данных. Рекомендуется перестроение.",zh:"\n>[!NOTICE]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Some changes are compatible but may consume extra storage and transfer volumes. A rebuild is recommended. However, a rebuild may not be performed at present, but may be implemented in future maintenance.\n> If you want to rebuild, it takes a few minutes or more. **Make sure it is safe to perform it now.**"},"TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired":{def:"\n>[!WARNING]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Either local or remote rebuilds are required. Both of them takes a few minutes or more. **Make sure it is safe to perform it now.**",ja:"\n>[!WARNING]\n> ローカルデータベースとリモートデータベースの非互換性を引き起こす値の違いが検出されました。\n> ローカルまたはリモートの再構築が必要です。どちらも数分以上かかります。**今実行しても安全か確認してください。**",ko:"\n>[!WARNING]\n> 로컬 데이터베이스와 원격 데이터베이스가 호환되지 않도록 만드는 값들이 다른 것을 감지했습니다.\n> 로컬 또는 원격 재구축이 필요합니다. 둘 다 몇 분 이상 소요됩니다. **지금 수행해도 안전한지 확인해 주세요.**",ru:"Обнаружены значения, несовместимые с удалённой базой данных. Требуется перестроение.",zh:"\n>[!WARNING]\n> We have detected that some of the values are different to make incompatible the local database with the remote database.\n> Either local or remote rebuilds are required. Both of them takes a few minutes or more. **Make sure it is safe to perform it now.**"},"TweakMismatchResolve.Table":{def:"| Value name | This device | On Remote |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n",ja:"| 値の名前 | このデバイス | リモート |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n",ko:"| 값 이름 | 이 기기 | 원격 |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n",ru:"| Имя значения | Это устройство | На удалённом |\n|: --- |: ---- :|: ---- :|",zh:"| Value name | This device | On Remote |\n|: --- |: ---- :|: ---- :|\n${rows}\n\n"},"TweakMismatchResolve.Table.Row":{def:"| ${name} | ${self} | ${remote} |",ja:"| ${name} | ${self} | ${remote} |",ko:"| ${name} | ${self} | ${remote} |",ru:"| name | self | remote |",zh:"| ${name} | ${self} | ${remote} |"},"TweakMismatchResolve.Title":{def:"Configuration Mismatch Detected",ja:"設定の不一致が検出されました",ko:"구성 불일치 감지",ru:"Обнаружено несоответствие конфигурации",zh:"Configuration Mismatch Detected"},"TweakMismatchResolve.Title.TweakResolving":{def:"Configuration Mismatch Detected",ja:"設定の不一致が検出されました",ko:"구성 불일치 감지",ru:"Обнаружено несоответствие конфигурации",zh:"Configuration Mismatch Detected"},"TweakMismatchResolve.Title.UseRemoteConfig":{def:"Use Remote Configuration",ja:"リモート設定を使用",ko:"원격 구성 사용",ru:"Использовать удалённую конфигурацию",zh:"Use Remote Configuration"},"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.":{def:"Unique name between all synchronized devices. To edit this setting, please disable customization sync once.",es:"Nombre único entre dispositivos sincronizados. Para editarlo, desactive sincronización de personalización",ja:"同期するすべての端末間で重複しない(一意の)名前。この設定を変更する場合、カスタマイズ同期を無効にしてください。",ko:"모든 동기화된 기기 간 고유 이름입니다. 이 설정을 편집하려면 사용자 설정 동기화를 한 번 비활성화해 주세요.",ru:"Уникальное имя между всеми синхронизируемыми устройствами.",zh:"所有同步设备之间的唯一名称。要编辑此设置,请首先禁用自定义同步"},"Use Custom HTTP Handler":{def:"Use Custom HTTP Handler",es:"Usar manejador HTTP personalizado",ja:"カスタムHTTPハンドラーの利用",ko:"커스텀 HTTP 핸들러 사용",ru:"Использовать пользовательский HTTP обработчик",zh:"使用自定义 HTTP 处理程序"},"Use dynamic iteration count":{def:"Use dynamic iteration count",es:"Usar conteo de iteraciones dinámico",ja:"動的な繰り返し回数",ko:"동적 반복 횟수 사용",ru:"Использовать динамическое количество итераций",zh:"使用动态迭代次数"},"Use Segmented-splitter":{def:"Use Segmented-splitter",es:"Usar divisor segmentado",ja:"セグメント分割を使用",ko:"의미 기반 분할 사용",ru:"Использовать сегментный разделитель",zh:"使用分段分割器"},"Use splitting-limit-capped chunk splitter":{def:"Use splitting-limit-capped chunk splitter",es:"Usar divisor de chunks con límite",ja:"分割制限付きチャンク分割を使用",ko:"분할 제한 상한 청크 분할기 사용",ru:"Использовать разделитель чанков с ограничением",zh:"使用分割限制上限的块分割器"},"Use the trash bin":{def:"Use the trash bin",es:"Usar papelera",ja:"ゴミ箱を使用",ko:"휴지통 사용",ru:"Использовать корзину",zh:"使用回收站"},"Use timeouts instead of heartbeats":{def:"Use timeouts instead of heartbeats",es:"Usar timeouts en lugar de latidos",ja:"ハートビートの代わりにタイムアウトを使用",ko:"하트비트 대신 타임아웃 사용",ru:"Использовать таймауты вместо пульса",zh:"使用超时而不是心跳"},username:{def:"username",es:"nombre de usuario",ja:"ユーザー名",ko:"사용자명",ru:"имя пользователя",zh:"用户名"},Username:{def:"Username",es:"Usuario",ja:"ユーザー名",ko:"사용자명",ru:"Имя пользователя",zh:"用户名"},"Verbose Log":{def:"Verbose Log",es:"Registro detallado",ja:"エラー以外のログ項目",ko:"자세한 로그",ru:"Подробный лог",zh:"详细日志"},"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.":{def:"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.",es:"¡Advertencia! Impacta rendimiento. Los logs no se sincronizan con nombre predeterminado. Contienen información confidencial",ja:"警告!これはパフォーマンスに重大な影響を与えます。また、ログはデフォルト名では同期されません。ログには機密情報が含まれることが多いため、注意してください。",ko:"경고! 이는 성능에 심각한 영향을 미칩니다. 로그는 기본 이름으로 동기화되지 않습니다. 로그에는 종종 기밀 정보가 포함되어 있으므로 주의해 주세요.",ru:"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information.",zh:"警告!这将严重影响性能。并且日志不会以默认名称同步。请小心处理日志;它们通常包含您的敏感信息 "},"When you save a file in the editor, start a sync automatically":{def:"When you save a file in the editor, start a sync automatically",es:"Iniciar sincronización automática al guardar en editor",ja:"エディタでファイルを保存すると、自動的に同期を開始します",ko:"편집기에서 파일을 저장할 때 자동으로 동기화를 시작합니다",ru:"Когда вы сохраняете файл в редакторе, автоматически запускать синхронизацию",zh:"当您在编辑器中保存文件时,自动开始同步"},"Write credentials in the file":{def:"Write credentials in the file",es:"Escribir credenciales en archivo",ja:"認証情報のファイル内保存",ko:"파일에 자격 증명 저장",ru:"Записывать учётные данные в файл",zh:"将凭据写入文件"},"Write logs into the file":{def:"Write logs into the file",es:"Escribir logs en archivo",ja:"ファイルにログを記録",ko:"파일에 로그 기록",ru:"Записывать логи в файл",zh:"将日志写入文件"},"Compute revisions for chunks (Previous behaviour)":{es:"Calcular revisiones para chunks (comportamiento anterior)"},"(Not recommended) If set, credentials will be stored in the file":{ru:"(Не рекомендуется) Если установлено, учётные данные будут сохранены в файле"},"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding.":{ru:"До v0.17.16 мы использовали старый адаптер для локальной базы данных. Теперь предпочтителен новый адаптер. Однако требуется перестроение локальной базы данных."},descConnectSetupURI:{ru:"Это рекомендуемый способ настройки Self-hosted LiveSync с помощью Setup URI."},descCopySetupURI:{ru:"Идеально для настройки нового устройства!"},descEnableLiveSync:{ru:"Включайте это только после настройки одного из двух вариантов выше."},descFetchConfigFromRemote:{ru:"Загрузить необходимые настройки с уже настроенного удалённого сервера."},descManualSetup:{ru:"Не рекомендуется, но полезно, если у вас нет Setup URI"},descTestDatabaseConnection:{ru:"Открыть подключение к базе данных."},descValidateDatabaseConfig:{ru:"Проверяет и исправляет потенциальные проблемы с конфигурацией базы данных."},"If enabled per-filed efficient customization sync will be used. We need a small migration when enabling this.":{ru:"Если включено, будет использоваться эффективная синхронизация настроек для каждого файла."},"If this is set, changes to local files which are matched by the ignore files will be skipped.":{ru:"Если установлено, изменения файлов из списка игнорирования будут пропущены."},"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely.":{ru:"Если эта опция включена, PouchDB будет держать соединение открытым 60 секунд."},"Number of batches to process at a time. Defaults to 40. Minimum is 2.":{ru:"Количество пакетов для обработки за раз. По умолчанию 40. Минимум 2."},"Save settings to a markdown file.":{ru:"Сохранить настройки в файл markdown."},"The maximum duration for which chunks can be incubated within the document.":{ru:"Максимальная продолжительность инкубации чанков в документе."},"The maximum number of chunks that can be incubated within the document.":{ru:"Максимальное количество инкубируемых чанков в документе."},"The maximum total size of chunks that can be incubated within the document.":{ru:"Максимальный общий размер инкубируемых чанков в документе."},"This passphrase will not be copied to another device. It will be set to until you configure it again.":{ru:"Эта парольная фраза не будет скопирована на другое устройство."},"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name.":{ru:"Внимание! Это серьёзно повлияет на производительность."}},"def"),...expandKeywords(_allMessages,"es"),...expandKeywords(_allMessages,"ja"),...expandKeywords(_allMessages,"ko"),...expandKeywords(_allMessages,"ru"),...expandKeywords(_allMessages,"zh"),...expandKeywords(_allMessages,"zh-tw")};allMessages=expandedMessage;currentLang="";missingTranslations=[];__onMissingTranslations=key3=>console.warn(key3);msgCache=new Map;on_click=(_,closeDialogue)=>closeDialogue();root_1=from_html("<pre> </pre>");root=from_html('<div class="logpane svelte-o3lsbg"><div class="control svelte-o3lsbg"><div class="row svelte-o3lsbg"><label class="svelte-o3lsbg"><input type="checkbox" class="svelte-o3lsbg"/> <span class="svelte-o3lsbg"> </span></label> <label class="svelte-o3lsbg"><input type="checkbox" class="svelte-o3lsbg"/> <span class="svelte-o3lsbg"> </span></label> <label class="svelte-o3lsbg"><input type="checkbox" class="svelte-o3lsbg"/> <span class="svelte-o3lsbg"> </span></label> <span class="spacer svelte-o3lsbg"></span> <button class="svelte-o3lsbg">Close</button></div></div> <div class="log svelte-o3lsbg"></div></div>');$$css={hash:"svelte-o3lsbg",code:".svelte-o3lsbg {box-sizing:border-box;}.logpane.svelte-o3lsbg {display:flex;height:100%;flex-direction:column;}.log.svelte-o3lsbg {overflow-y:scroll;user-select:text;-webkit-user-select:text;padding-bottom:2em;}.log.svelte-o3lsbg > pre:where(.svelte-o3lsbg) {margin:0;}.log.svelte-o3lsbg > pre.wrap-right:where(.svelte-o3lsbg) {word-break:break-all;max-width:100%;width:100%;white-space:normal;}.row.svelte-o3lsbg {display:flex;flex-direction:row;justify-content:flex-end;}.row.svelte-o3lsbg > label:where(.svelte-o3lsbg) {display:flex;align-items:center;min-width:5em;margin-right:1em;}"};delegate(["click"]);SvelteItemView=class extends import_obsidian.ItemView{async onOpen(){await super.onOpen();this.contentEl.empty();await this._dismountComponent();this.component=await this.instantiateComponent(this.contentEl)}async _dismountComponent(){if(this.component){await unmount(this.component);this.component=void 0}}async onClose(){await super.onClose();if(this.component){await unmount(this.component);this.component=void 0}}};LogPaneView=class extends SvelteItemView{constructor(leaf,plugin3){super(leaf);this.icon="view-log";this.title="";this.navigation=!1;this.plugin=plugin3}instantiateComponent(target){return mount(LogPane,{target,props:{close:()=>{this.leaf.detach()}}})}getIcon(){return"view-log"}getViewType(){return"log-log"}getDisplayText(){return $msg("logPane.title")}};secp256k1_CURVE={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt("1"),a:BigInt("0"),b:BigInt("7"),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")};var{p:P,n:N,Gx,Gy,b:_b3}=secp256k1_CURVE;lengths={publicKey:1+(L=32),publicKeyUncompressed:65,signature:64,seed:48};captureTrace=(...args)=>{"captureStackTrace"in Error&&"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(...args)};err=(message="")=>{const e3=new Error(message);captureTrace(e3,err);throw e3};isBig=n3=>"bigint"==typeof n3;isStr=s2=>"string"==typeof s2;isBytes=a2=>a2 instanceof Uint8Array||ArrayBuffer.isView(a2)&&"Uint8Array"===a2.constructor.name;abytes=(value,length,title="")=>{const bytes=isBytes(value),len=null==value?void 0:value.length,needsLen=void 0!==length;(!bytes||needsLen&&len!==length)&&err((title&&`"${title}" `)+"expected Uint8Array"+(needsLen?` of length ${length}`:"")+", got "+(bytes?`length=${len}`:"type="+typeof value));return value};u8n=len=>new Uint8Array(len);padh=(n3,pad2)=>n3.toString(16).padStart(pad2,"0");bytesToHex=b3=>Array.from(abytes(b3)).map(e3=>padh(e3,2)).join("");_ch=ch4=>ch4>=48&&ch4<=57?ch4-48:ch4>=65&&ch4<=70?ch4-55:ch4>=97&&ch4<=102?ch4-87:void 0;hexToBytes=hex=>{const e3="hex invalid";if(!isStr(hex))return err(e3);const hl=hex.length,al2=hl/2;if(hl%2)return err(e3);const array=u8n(al2);for(let ai2=0,hi=0;ai2<al2;ai2++,hi+=2){const n1=_ch(hex.charCodeAt(hi)),n22=_ch(hex.charCodeAt(hi+1));if(void 0===n1||void 0===n22)return err(e3);array[ai2]=16*n1+n22}return array};cr=()=>null==globalThis?void 0:globalThis.crypto;subtle=()=>{var _a8,_b5;return null!=(_b5=null==(_a8=cr())?void 0:_a8.subtle)?_b5:err("crypto.subtle must be defined, consider polyfill")};concatBytes=(...arrs)=>{const r4=u8n(arrs.reduce((sum2,a2)=>sum2+abytes(a2).length,0));let pad2=0;arrs.forEach(a2=>{r4.set(a2,pad2);pad2+=a2.length});return r4};randomBytes=(len=L)=>cr().getRandomValues(u8n(len));big=BigInt;arange=(n3,min,max3,msg="bad number: out of range")=>isBig(n3)&&min<=n3&&n3<max3?n3:err(msg);M=(a2,b3=P)=>{const r4=a2%b3;return r4>=BigInt("0")?r4:b3+r4};modN=a2=>M(a2,N);invert=(num,md)=>{(num===BigInt("0")||md<=BigInt("0"))&&err("no inverse n="+num+" mod="+md);let a2=M(num,md),b3=md,x2=BigInt("0"),y2=BigInt("1"),u2=BigInt("1"),v2=BigInt("0");for(;a2!==BigInt("0");){const q2=b3/a2,r4=b3%a2,m3=x2-u2*q2,n3=y2-v2*q2;b3=a2,a2=r4,x2=u2,y2=v2,u2=m3,v2=n3}return b3===BigInt("1")?M(x2,md):err("no inverse")};callHash=name=>{const fn=hashes[name];"function"!=typeof fn&&err("hashes."+name+" not set");return fn};apoint=p2=>p2 instanceof Point?p2:err("Point expected");koblitz=x2=>M(M(x2*x2)*x2+_b3);FpIsValid=n3=>arange(n3,BigInt("0"),P);FpIsValidNot0=n3=>arange(n3,BigInt("1"),P);FnIsValidNot0=n3=>arange(n3,BigInt("1"),N);isEven=y2=>(y2&BigInt("1"))===BigInt("0");u8of=n3=>Uint8Array.of(n3);getPrefix=y2=>u8of(isEven(y2)?2:3);lift_x=x2=>{const c3=koblitz(FpIsValidNot0(x2));let r4=BigInt("1");for(let num=c3,e3=(P+BigInt("1"))/BigInt("4");e3>BigInt("0");e3>>=BigInt("1")){e3&BigInt("1")&&(r4=r4*num%P);num=num*num%P}return M(r4*r4)===c3?r4:err("sqrt invalid")};_Point=class _Point{constructor(X2,Y2,Z2){__publicField(this,"X");__publicField(this,"Y");__publicField(this,"Z");this.X=FpIsValid(X2);this.Y=FpIsValidNot0(Y2);this.Z=FpIsValid(Z2);Object.freeze(this)}static CURVE(){return secp256k1_CURVE}static fromAffine(ap2){const{x:x2,y:y2}=ap2;return x2===BigInt("0")&&y2===BigInt("0")?I:new _Point(x2,y2,BigInt("1"))}static fromBytes(bytes){abytes(bytes);const{publicKey:comp,publicKeyUncompressed:uncomp}=lengths;let p2;const length=bytes.length,head2=bytes[0],tail=bytes.subarray(1),x2=sliceBytesNumBE(tail,0,L);if(length===comp&&(2===head2||3===head2)){let y2=lift_x(x2);const evenY=isEven(y2);isEven(big(head2))!==evenY&&(y2=M(-y2));p2=new _Point(x2,y2,BigInt("1"))}length===uncomp&&4===head2&&(p2=new _Point(x2,sliceBytesNumBE(tail,L,64),BigInt("1")));return p2?p2.assertValidity():err("bad point: not on curve")}static fromHex(hex){return _Point.fromBytes(hexToBytes(hex))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}equals(other){const{X:X1,Y:Y1,Z:Z1}=this,{X:X2,Y:Y2,Z:Z2}=apoint(other),X1Z2=M(X1*Z2),X2Z1=M(X2*Z1),Y1Z2=M(Y1*Z2),Y2Z1=M(Y2*Z1);return X1Z2===X2Z1&&Y1Z2===Y2Z1}is0(){return this.equals(I)}negate(){return new _Point(this.X,M(-this.Y),this.Z)}double(){return this.add(this)}add(other){const{X:X1,Y:Y1,Z:Z1}=this,{X:X2,Y:Y2,Z:Z2}=apoint(other),a2=BigInt("0"),b3=_b3;let X3=BigInt("0"),Y3=BigInt("0"),Z3=BigInt("0");const b32=M(b3*BigInt("3"));let t02=M(X1*X2),t12=M(Y1*Y2),t22=M(Z1*Z2),t32=M(X1+Y1),t42=M(X2+Y2);t32=M(t32*t42);t42=M(t02+t12);t32=M(t32-t42);t42=M(X1+Z1);let t52=M(X2+Z2);t42=M(t42*t52);t52=M(t02+t22);t42=M(t42-t52);t52=M(Y1+Z1);X3=M(Y2+Z2);t52=M(t52*X3);X3=M(t12+t22);t52=M(t52-X3);Z3=M(a2*t42);X3=M(b32*t22);Z3=M(X3+Z3);X3=M(t12-Z3);Z3=M(t12+Z3);Y3=M(X3*Z3);t12=M(t02+t02);t12=M(t12+t02);t22=M(a2*t22);t42=M(b32*t42);t12=M(t12+t22);t22=M(t02-t22);t22=M(a2*t22);t42=M(t42+t22);t02=M(t12*t42);Y3=M(Y3+t02);t02=M(t52*t42);X3=M(t32*X3);X3=M(X3-t02);t02=M(t32*t12);Z3=M(t52*Z3);Z3=M(Z3+t02);return new _Point(X3,Y3,Z3)}subtract(other){return this.add(apoint(other).negate())}multiply(n3,safe=!0){if(!safe&&n3===BigInt("0"))return I;FnIsValidNot0(n3);if(n3===BigInt("1"))return this;if(this.equals(G))return wNAF(n3).p;let p2=I,f4=G;for(let d4=this;n3>BigInt("0");d4=d4.double(),n3>>=BigInt("1"))n3&BigInt("1")?p2=p2.add(d4):safe&&(f4=f4.add(d4));return p2}multiplyUnsafe(scalar){return this.multiply(scalar,!1)}toAffine(){const{X:x2,Y:y2,Z:z2}=this;if(this.equals(I))return{x:BigInt("0"),y:BigInt("0")};if(z2===BigInt("1"))return{x:x2,y:y2};const iz=invert(z2,P);M(z2*iz)!==BigInt("1")&&err("inverse invalid");return{x:M(x2*iz),y:M(y2*iz)}}assertValidity(){const{x:x2,y:y2}=this.toAffine();FpIsValidNot0(x2);FpIsValidNot0(y2);return M(y2*y2)===koblitz(x2)?this:err("bad point: not on curve")}toBytes(isCompressed=!0){const{x:x2,y:y2}=this.assertValidity().toAffine(),x32b=numTo32b(x2);return isCompressed?concatBytes(getPrefix(y2),x32b):concatBytes(u8of(4),x32b,numTo32b(y2))}toHex(isCompressed){return bytesToHex(this.toBytes(isCompressed))}};__publicField(_Point,"BASE");__publicField(_Point,"ZERO");G=new(Point=_Point)(Gx,Gy,BigInt("1"));I=new Point(BigInt("0"),BigInt("1"),BigInt("0"));Point.BASE=G;Point.ZERO=I;doubleScalarMulUns=(R2,u1,u2)=>G.multiply(u1,!1).add(R2.multiply(u2,!1)).assertValidity();bytesToNumBE=b3=>big("0x"+(bytesToHex(b3)||"0"));sliceBytesNumBE=(b3,from,to)=>bytesToNumBE(b3.subarray(from,to));B256=BigInt("2")**BigInt("256");numTo32b=num=>hexToBytes(padh(arange(num,BigInt("0"),B256),64));secretKeyToScalar=secretKey2=>{const num=bytesToNumBE(abytes(secretKey2,L,"secret key"));return arange(num,BigInt("1"),N,"invalid secret key: outside of range")};0;getPublicKey=(privKey,isCompressed=!0)=>G.multiply(secretKeyToScalar(privKey)).toBytes(isCompressed);0;assertSigFormat=format2=>{null==format2||ALL_SIG.includes(format2)||err(`Signature format must be one of: ${ALL_SIG.join(", ")}`);format2===SIG_DER&&err('Signature format "der" is not supported: switch to noble-curves')};0;0;ALL_SIG=[SIG_COMPACT="compact",SIG_RECOVERED="recovered",SIG_DER="der"];hashes={hmacSha256Async:async(key3,message)=>{const s2=subtle(),k2=await s2.importKey("raw",key3,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"]);return u8n(await s2.sign("HMAC",k2,message))},hmacSha256:void 0,sha256Async:async msg=>u8n(await subtle().digest("SHA-256",msg)),sha256:void 0};u8n(0);u8of(0);u8of(1);randomSecretKey=(seed=randomBytes(lengths.seed))=>{abytes(seed);(seed.length<lengths.seed||seed.length>1024)&&err("expected 40-1024b");const num=M(bytesToNumBE(seed),N-BigInt("1"));return numTo32b(num+BigInt("1"))};(createKeygen=getPublicKey2=>seed=>{const secretKey2=randomSecretKey(seed);return{secretKey:secretKey2,publicKey:getPublicKey2(secretKey2)}})(getPublicKey);getTag=tag3=>Uint8Array.from("BIP0340/"+tag3,c3=>c3.charCodeAt(0));taggedHash=(tag3,...messages)=>{const fn=callHash("sha256"),tagH=fn(getTag(tag3));return fn(concatBytes(tagH,tagH,...messages))};taggedHashAsync=async(tag3,...messages)=>{const fn=hashes.sha256Async,tagH=await fn(getTag(tag3));return await fn(concatBytes(tagH,tagH,...messages))};extpubSchnorr=priv=>{const d_=secretKeyToScalar(priv),p2=G.multiply(d_),{x:x2,y:y2}=p2.assertValidity().toAffine();return{d:isEven(y2)?d_:modN(-d_),px:numTo32b(x2)}};bytesModN=bytes=>modN(bytesToNumBE(bytes));challenge=(...args)=>bytesModN(taggedHash("challenge",...args));challengeAsync=async(...args)=>bytesModN(await taggedHashAsync("challenge",...args));keygenSchnorr=createKeygen(pubSchnorr=secretKey2=>extpubSchnorr(secretKey2).px);prepSigSchnorr=(message,secretKey2,auxRand)=>{const{px,d:d4}=extpubSchnorr(secretKey2);return{m:abytes(message),px,d:d4,a:abytes(auxRand,L)}};extractK=rand=>{const k_=bytesModN(rand);k_===BigInt("0")&&err("sign failed: k is zero");const{px,d:d4}=extpubSchnorr(numTo32b(k_));return{rx:px,k:d4}};createSigSchnorr=(k2,px,e3,d4)=>concatBytes(px,numTo32b(modN(k2+e3*d4)));E_INVSIG="invalid signature produced";callSyncAsyncFn=(res2,later)=>res2 instanceof Promise?res2.then(later):later(res2);_verifSchnorr=(signature,message,publicKey2,challengeFn)=>{const sig=abytes(signature,64,"signature"),msg=abytes(message,void 0,"message"),pub=abytes(publicKey2,L,"publicKey");try{const x2=bytesToNumBE(pub),y2=lift_x(x2),y_=isEven(y2)?y2:M(-y2),P_=new Point(x2,y_,BigInt("1")).assertValidity(),px=numTo32b(P_.toAffine().x),r4=sliceBytesNumBE(sig,0,L);arange(r4,BigInt("1"),P);const s2=sliceBytesNumBE(sig,L,64);arange(s2,BigInt("1"),N);const i2=concatBytes(numTo32b(r4),px,msg);return callSyncAsyncFn(challengeFn(i2),e3=>{const{x:x3,y:y3}=doubleScalarMulUns(P_,s2,modN(-e3)).toAffine();return!(!isEven(y3)||x3!==r4)})}catch(error){return!1}};schnorr={keygen:keygenSchnorr,getPublicKey:pubSchnorr,sign:(message,secretKey2,auxRand=randomBytes(L))=>{const{m:m3,px,d:d4,a:a2}=prepSigSchnorr(message,secretKey2,auxRand),aux=taggedHash("aux",a2),t9=numTo32b(d4^bytesToNumBE(aux)),rand=taggedHash("nonce",t9,px,m3),{rx,k:k2}=extractK(rand),e3=challenge(rx,px,m3),sig=createSigSchnorr(k2,rx,e3,d4);verifySchnorr(sig,m3,px)||err(E_INVSIG);return sig},verify:verifySchnorr=(s2,m3,p2)=>_verifSchnorr(s2,m3,p2,challenge),signAsync:async(message,secretKey2,auxRand=randomBytes(L))=>{const{m:m3,px,d:d4,a:a2}=prepSigSchnorr(message,secretKey2,auxRand),aux=await taggedHashAsync("aux",a2),t9=numTo32b(d4^bytesToNumBE(aux)),rand=await taggedHashAsync("nonce",t9,px,m3),{rx,k:k2}=extractK(rand),e3=await challengeAsync(rx,px,m3),sig=createSigSchnorr(k2,rx,e3,d4);await verifySchnorrAsync(sig,m3,px)||err(E_INVSIG);return sig},verifyAsync:verifySchnorrAsync=async(s2,m3,p2)=>_verifSchnorr(s2,m3,p2,challengeAsync)};pwindows=Math.ceil(32)+1;precompute=()=>{const points=[];let p2=G,b3=p2;for(let w2=0;w2<pwindows;w2++){b3=p2;points.push(b3);for(let i2=1;i2<128;i2++){b3=b3.add(p2);points.push(b3)}p2=b3.double()}return points};Gpows=void 0;ctneg=(cnd,p2)=>{const n3=p2.negate();return cnd?n3:p2};wNAF=n3=>{const comp=Gpows||(Gpows=precompute());let p2=I,f4=G;const mask=big(255),shiftBy=big(8);for(let w2=0;w2<pwindows;w2++){let wbits2=Number(n3&mask);n3>>=shiftBy;if(wbits2>128){wbits2-=256;n3+=BigInt("1")}const off=128*w2,offF=off,offP=off+Math.abs(wbits2)-1,isEven2=w2%2!=0,isNeg=wbits2<0;0===wbits2?f4=f4.add(ctneg(isEven2,comp[offF])):p2=p2.add(ctneg(isNeg,comp[offP]))}n3!==BigInt("0")&&err("invalid wnaf");return{p:p2,f:f4}};var{floor,random,sin}=Math;libName="Trystero";alloc=(n3,f4)=>Array(n3).fill(void 0).map(f4);selfId=(genId=n3=>alloc(n3,()=>{var _a8;return null!=(_a8="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"[floor(62*random())])?_a8:""}).join(""))(20);all=Promise.all.bind(Promise);isBrowser="undefined"!=typeof window;var{entries,fromEntries,keys,values}=Object;noOp=()=>{};resetTimer=timer=>{null!==timer&&clearTimeout(timer);return null};mkErr=msg=>new Error(`${libName}: ${msg}`);toErrorMessage=(reason,fallback3)=>reason instanceof Error&&reason.message?reason.message:"string"==typeof reason&&reason?reason:toJson(null!=reason?reason:fallback3);toError=(reason,fallback3)=>reason instanceof Error?reason:mkErr(toErrorMessage(reason,fallback3));encoder=new TextEncoder;decoder=new TextDecoder;encodeBytes=txt=>encoder.encode(txt);decodeBytes=buffer=>decoder.decode(buffer);toHex=buffer=>buffer.reduce((a2,c3)=>a2+c3.toString(16).padStart(2,"0"),"");topicPath=(...parts)=>parts.join("@");shuffle=(xs,seed)=>{const a2=[...xs],rand=()=>{const x2=1e4*sin(seed++);return x2-floor(x2)};let i2=a2.length;for(;i2;){const j2=floor(rand()*i2--),tmp=a2[i2];a2[i2]=a2[j2];a2[j2]=tmp}return a2};getRelays=(config,defaults2,defaultN,deriveFromAppId=!1)=>{var _a8;return config.relayUrls||(deriveFromAppId?shuffle(defaults2,strToNum(config.appId)):defaults2).slice(0,null!=(_a8=config.relayRedundancy)?_a8:defaultN)};toJson=JSON.stringify;fromJson=s2=>{try{return JSON.parse(s2)}catch(e3){throw mkErr(`failed to parse JSON: ${s2}`)}};strToNum=(str,limit=Number.MAX_SAFE_INTEGER)=>str.split("").reduce((a2,c3)=>a2+c3.charCodeAt(0),0)%limit;socketRetryPeriods={};reconnectionLockingPromise=null;resolver=null;pauseRelayReconnection=()=>{reconnectionLockingPromise||(reconnectionLockingPromise=new Promise(resolve=>{resolver=resolve}).finally(()=>{resolver=null;reconnectionLockingPromise=null}))};resumeRelayReconnection=()=>{null==resolver||resolver()};makeSocket=(url,onMessage)=>{const client={},init3=()=>{const socket=new WebSocket(url);socket.onclose=()=>{if(reconnectionLockingPromise)reconnectionLockingPromise.then(init3);else{null!=socketRetryPeriods[url]||(socketRetryPeriods[url]=3333);setTimeout(init3,socketRetryPeriods[url]);socketRetryPeriods[url]*=2}};socket.onmessage=e3=>onMessage(String(e3.data));client.socket=socket;client.url=socket.url;client.ready=new Promise(res2=>socket.onopen=()=>{res2(client);socketRetryPeriods[url]=3333});client.send=data=>{1===socket.readyState&&socket.send(data)}};init3();return client};createRelayManager=getSocket=>{const relays={},keysByRelay=new WeakMap,keyOf=relay=>{const key3=keysByRelay.get(relay);if(!key3)throw mkErr("relay bookkeeping missing registration for relay client");return key3};return{register:(key3,relay)=>{relays[key3]=relay;keysByRelay.set(relay,key3);return relay},keyOf,scoped:()=>{const store={},forKey=key3=>{var _a8;return null!=(_a8=store[key3])?_a8:store[key3]={}};return{forKey,forRelay:relay=>forKey(keyOf(relay))}},getSockets:()=>fromEntries(entries(relays).flatMap(([key3,relay])=>{const socket=getSocket(relay);return socket?[[key3,socket]]:[]}))}};watchOnline=()=>{if(isBrowser){const controller=new AbortController;addEventListener("online",resumeRelayReconnection,{signal:controller.signal});addEventListener("offline",pauseRelayReconnection,{signal:controller.signal});return()=>controller.abort()}return noOp};strToSha1={};pack=buff=>btoa(String.fromCharCode.apply(null,Array.from(new Uint8Array(buff))));unpack=packed=>{const str=atob(packed);return new Uint8Array(str.length).map((_,i2)=>str.charCodeAt(i2)).buffer};hashWith=async(algorithm,str)=>new Uint8Array(await crypto.subtle.digest(algorithm,encodeBytes(str)));sha1=async str=>{var _a8;return null!=(_a8=strToSha1[str])?_a8:strToSha1[str]=Array.from(await hashWith("SHA-1",str)).map(b3=>b3.toString(36)).join("")};genKey=async(secret,appId,roomId)=>crypto.subtle.importKey("raw",await crypto.subtle.digest({name:"SHA-256"},encodeBytes(`${secret}:${appId}:${roomId}`)),{name:"AES-GCM"},!1,["encrypt","decrypt"]);deriveRoomNamespace=async(appId,roomId)=>toHex(await hashWith("SHA-256",`${libName}:${appId}:${roomId}`));encrypt=async(keyP,plaintext)=>{const iv=crypto.getRandomValues(new Uint8Array(16));return iv.join(",")+"$"+pack(await crypto.subtle.encrypt({name:"AES-GCM",iv},await keyP,encodeBytes(plaintext)))};decrypt=async(keyP,raw)=>{var _a8;const[iv,c3]=raw.split("$");return decodeBytes(await crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(null!=(_a8=null==iv?void 0:iv.split(",").map(Number))?_a8:[])},await keyP,unpack(null!=c3?c3:"")))};OfferPool=class{constructor(makeOffer){__publicField(this,"pool",[]);__publicField(this,"pooled",new Set);__publicField(this,"leased",new Map);__publicField(this,"recycling",new Set);__publicField(this,"cleanupTimer",null);__publicField(this,"active",!1);this.makeOffer=makeOffer}get isActive(){return this.active}warmup(){this.pool=[];this.pooled.clear();alloc(20,this.makeOffer).forEach(p2=>this.push(p2));this.active=!0;this.cleanupTimer=setInterval(()=>{this.pool=this.pool.filter(peer=>{if(peer.isDead){this.pooled.delete(peer);return!1}return!0})},57333)}push(peer){if(!(peer.isDead||this.pooled.has(peer)||this.leased.has(peer))){this.pool.push(peer);this.pooled.add(peer)}}shift(n3){const peers=[];for(;peers.length<n3&&this.pool.length>0;){const peer=this.pool.shift();if(!peer)break;this.pooled.delete(peer);peers.push(peer)}return peers}claimLeased(peer){const timer=this.leased.get(peer);if(timer){resetTimer(timer);this.leased.delete(peer)}}recycle(peer){if(!peer.isDead&&!this.recycling.has(peer))if(peer.connection.remoteDescription)peer.destroy();else if(this.active){this.recycling.add(peer);peer.setHandlers({connect:noOp,close:noOp,error:noOp});peer.getOffer(!0).then(offer=>{offer&&"offer"===offer.type&&!peer.isDead&&this.active?this.push(peer):peer.destroy()}).catch(()=>peer.destroy()).finally(()=>this.recycling.delete(peer))}else peer.destroy()}reclaimLeased(peer){const timer=this.leased.get(peer);if(timer){resetTimer(timer);this.leased.delete(peer);this.recycle(peer)}}lease(peer){this.claimLeased(peer);this.leased.set(peer,setTimeout(()=>{this.leased.delete(peer);this.recycle(peer)},18e4))}checkout(n3,leaseOffers,encryptOffer){const peers=this.shift(n3),missing=Math.max(0,n3-peers.length);missing>0&&peers.push(...alloc(missing,this.makeOffer));const toRecord=async(candidate,didRetry=!1)=>{try{const offer=await encryptOffer(candidate);if(leaseOffers){this.lease(candidate);return{peer:candidate,offer,claim:()=>this.claimLeased(candidate),reclaim:()=>this.reclaimLeased(candidate)}}return{peer:candidate,offer}}catch(err3){this.claimLeased(candidate);this.pooled.delete(candidate);candidate.destroy();if(!didRetry)return toRecord(this.makeOffer(),!0);throw err3}};return all(peers.map(peer=>toRecord(peer)))}getOffers(n3,encryptOffer){return this.checkout(n3,!0,encryptOffer)}destroy(){this.active=!1;if(this.cleanupTimer){clearInterval(this.cleanupTimer);this.cleanupTimer=null}this.pool.forEach(peer=>peer.destroy());this.pool=[];this.pooled.clear();this.leased.forEach((timeout,peer)=>{resetTimer(timeout);peer.destroy()});this.leased.clear();this.recycling.forEach(peer=>peer.destroy());this.recycling.clear()}};overlapRoomPasswordErr=mkErr("incorrect password for overlapping room");createPasswordHandshake=(password,appId,roomId)=>{const hashChallenge=challenge2=>hashWith("SHA-256",`${challenge2}:${password}:${appId}:${roomId}`).then(toHex),run3=async(send,receive,isInitiator)=>{if(!password)return;if(isInitiator){const challenge2=genId(36);await send({__trystero_pw:"challenge",c:challenge2});const{data:data2}=await receive();if(!data2||"object"!=typeof data2||"response"!==data2.__trystero_pw||"string"!=typeof data2.h)throw overlapRoomPasswordErr;const expected=await hashChallenge(challenge2);if(data2.h!==expected)throw overlapRoomPasswordErr;return}const{data}=await receive();if(!data||"object"!=typeof data||"challenge"!==data.__trystero_pw||"string"!=typeof data.c)throw overlapRoomPasswordErr;await send({__trystero_pw:"response",h:await hashChallenge(data.c)})};return{run:run3,compose:userHandshake=>password||userHandshake?async(peerId,send,receive,isInitiator)=>{await run3(send,receive,isInitiator);await(null==userHandshake?void 0:userHandshake(peerId,send,receive,isInitiator))}:void 0}};outOfRangePattern=/out of range/i;rewriteMdnsCandidatesToLoopback=sdp=>sdp.replace(/ (\S+\.local) (\d+) typ host/g," 127.0.0.1 $2 typ host");peer_default=(initiator,{trickleIce,rtcConfig,rtcPolyfill,turnConfig,_test_only_mdnsHostFallbackToLoopback})=>{const pc=new(null!=rtcPolyfill?rtcPolyfill:RTCPeerConnection)({iceServers:defaultIceServers.concat(null!=turnConfig?turnConfig:[]),...rtcConfig}),handlers3={},pendingSignals=[],pendingData=[],shouldTrickleIce=!1!==trickleIce,pendingRemoteCandidates=[],pendingTracks=[];let makingOffer=!1,isSettingRemoteAnswerPending=!1,dataChannel=null,disconnectedCloseTimer=null,didEmitClose=!1;const clearDisconnectedCloseTimer=()=>disconnectedCloseTimer=resetTimer(disconnectedCloseTimer),emitClose=()=>{var _a8;if(!didEmitClose){didEmitClose=!0;clearDisconnectedCloseTimer();null==(_a8=handlers3.close)||_a8.call(handlers3)}},emitSignal=signal=>{handlers3.signal?handlers3.signal(signal):pendingSignals.push(signal)},appendSignalHandler=handler=>{const previousSignalHandler=handlers3.signal;handlers3.signal=signal=>{null==previousSignalHandler||previousSignalHandler(signal);handler(signal)};pendingSignals.length>0&&pendingSignals.splice(0).forEach(signal=>{var _a8;return null==(_a8=handlers3.signal)?void 0:_a8.call(handlers3,signal)})},normalizeSdp=sdp=>_test_only_mdnsHostFallbackToLoopback?rewriteMdnsCandidatesToLoopback(sdp):sdp,normalizeCandidate=candidate=>{if(!_test_only_mdnsHostFallbackToLoopback||"string"!=typeof candidate.candidate)return candidate;const normalizedCandidate=rewriteMdnsCandidatesToLoopback(candidate.candidate);return normalizedCandidate===candidate.candidate?candidate:{...candidate,candidate:normalizedCandidate}},localDescriptionSignal=peerConnection=>{var _a8,_b5,_c3,_d2;return{type:null!=(_b5=null==(_a8=peerConnection.localDescription)?void 0:_a8.type)?_b5:"offer",sdp:normalizeSdp(null!=(_d2=null==(_c3=peerConnection.localDescription)?void 0:_c3.sdp)?_d2:"")}},getRemoteUfrag=()=>{var _a8,_b5,_c3;const sdp=null==(_a8=pc.remoteDescription)?void 0:_a8.sdp;return sdp&&null!=(_c3=null==(_b5=sdp.match(/a=ice-ufrag:([^\s]+)/))?void 0:_b5[1])?_c3:null},getRemoteMediaSectionCount=()=>{var _a8,_b5,_c3;return(null!=(_c3=null==(_b5=null==(_a8=pc.remoteDescription)?void 0:_a8.sdp)?void 0:_b5.match(/^m=/gm))?_c3:[]).length},canApplyRemoteCandidate=candidate=>{if(!pc.remoteDescription)return!1;const remoteMLineCount=getRemoteMediaSectionCount();if("number"==typeof candidate.sdpMLineIndex&&remoteMLineCount>0&&candidate.sdpMLineIndex>=remoteMLineCount)return!1;const remoteUfrag=getRemoteUfrag();return!remoteUfrag||!candidate.usernameFragment||candidate.usernameFragment===remoteUfrag},addIceCandidateSafe=async candidate=>{try{await pc.addIceCandidate(candidate);return!0}catch(err3){if(err3 instanceof Error&&outOfRangePattern.test(err3.message)&&"number"==typeof candidate.sdpMLineIndex)return!1;throw err3}},flushPendingRemoteCandidates=async()=>{if(!pc.remoteDescription||0===pendingRemoteCandidates.length)return;const queuedCandidates=pendingRemoteCandidates.splice(0),stillPending=[];for(const candidate of queuedCandidates)canApplyRemoteCandidate(candidate)&&await addIceCandidateSafe(candidate)||stillPending.push(candidate);stillPending.length>0&&pendingRemoteCandidates.push(...stillPending)},addRemoteCandidate=async candidate=>{canApplyRemoteCandidate(candidate)&&await addIceCandidateSafe(candidate)||pendingRemoteCandidates.push(candidate)},setupDataChannel=channel=>{channel.binaryType="arraybuffer";channel.bufferedAmountLowThreshold=65535;channel.onmessage=e3=>{const data=e3.data;handlers3.data?handlers3.data(data):pendingData.push(data)};channel.onopen=()=>{var _a8;return null==(_a8=handlers3.connect)?void 0:_a8.call(handlers3)};channel.onclose=emitClose;channel.onerror=({error})=>{var _a8;return null==(_a8=handlers3.error)?void 0:_a8.call(handlers3,toError(error,"data channel error"))}},waitForIceGathering=async peerConnection=>{let timeout=null;try{await Promise.race([new Promise(res2=>{const checkState5=()=>{if("complete"===peerConnection.iceGatheringState){peerConnection.removeEventListener("icegatheringstatechange",checkState5);res2()}};peerConnection.addEventListener("icegatheringstatechange",checkState5);checkState5()}),new Promise(res2=>{timeout=setTimeout(res2,15e3)})])}finally{resetTimer(timeout)}return localDescriptionSignal(peerConnection)},emitLocalDescriptionSignal=async()=>{const signal=shouldTrickleIce?localDescriptionSignal(pc):await waitForIceGathering(pc);emitSignal(signal);return signal};if(initiator){dataChannel=pc.createDataChannel("data");setupDataChannel(dataChannel)}else pc.ondatachannel=({channel})=>{dataChannel=channel;setupDataChannel(channel)};const createOffer=async(restartIce=!1)=>{var _a8,_b5;if("closed"!==pc.connectionState)try{makingOffer=!0;if(restartIce){"stable"!==pc.signalingState&&"closed"!==pc.signalingState&&"offer"===(null==(_a8=pc.localDescription)?void 0:_a8.type)&&await pc.setLocalDescription({type:"rollback"});"function"==typeof pc.restartIce&&pc.restartIce()}await pc.setLocalDescription(restartIce?await pc.createOffer({iceRestart:!0}):void 0);return await emitLocalDescriptionSignal()}catch(err3){null==(_b5=handlers3.error)||_b5.call(handlers3,toError(err3,"failed to create local offer"))}finally{makingOffer=!1}};pc.onnegotiationneeded=async()=>createOffer(!1);pc.onicecandidate=({candidate})=>{if(!shouldTrickleIce||!candidate)return;const candidatePayload=normalizeCandidate("function"==typeof candidate.toJSON?candidate.toJSON():{candidate:candidate.candidate,sdpMid:candidate.sdpMid,sdpMLineIndex:candidate.sdpMLineIndex,usernameFragment:candidate.usernameFragment});emitSignal({type:"candidate",sdp:JSON.stringify(candidatePayload)})};pc.onconnectionstatechange=()=>{"connected"!==pc.connectionState&&"connecting"!==pc.connectionState?"disconnected"!==pc.connectionState?"failed"!==pc.connectionState&&"closed"!==pc.connectionState||emitClose():disconnectedCloseTimer||(disconnectedCloseTimer=setTimeout(()=>{disconnectedCloseTimer=null;"disconnected"===pc.connectionState&&emitClose()},5e3)):clearDisconnectedCloseTimer()};pc.ontrack=e3=>{var _a8,_b5;const stream=e3.streams[0];if(stream){if(!handlers3.track&&!handlers3.stream){pendingTracks.push({track:e3.track,stream});return}null==(_a8=handlers3.track)||_a8.call(handlers3,e3.track,stream);null==(_b5=handlers3.stream)||_b5.call(handlers3,stream)}};pc.onremovestream=e3=>{var _a8;return null==(_a8=handlers3.stream)?void 0:_a8.call(handlers3,e3.stream)};const offerPromise=initiator?new Promise(res2=>appendSignalHandler(signal=>{"offer"===signal.type&&res2(signal)})):Promise.resolve();initiator&&queueMicrotask(()=>{var _a8;makingOffer||"stable"!==pc.signalingState||pc.localDescription||"closed"===pc.connectionState||null==(_a8=pc.onnegotiationneeded)||_a8.call(pc,new Event("negotiationneeded"))});return{created:Date.now(),connection:pc,get channel(){return dataChannel},get isDead(){return"closed"===pc.connectionState},getOffer:async(restartIce=!1)=>{var _a8;if(initiator)return restartIce?createOffer(!0):"offer"===(null==(_a8=pc.localDescription)?void 0:_a8.type)?shouldTrickleIce?localDescriptionSignal(pc):waitForIceGathering(pc):offerPromise},async signal(sdp){var _a8,_b5,_c3;if("candidate"!==sdp.type){if("open"!==(null==dataChannel?void 0:dataChannel.readyState)||(null==(_b5=sdp.sdp)?void 0:_b5.includes("a=rtpmap")))try{const rtcSdp={...sdp,sdp:normalizeSdp(sdp.sdp)};if("offer"===sdp.type){if(makingOffer||"stable"!==pc.signalingState&&!isSettingRemoteAnswerPending){if(initiator)return;await all([pc.setLocalDescription({type:"rollback"}),pc.setRemoteDescription(rtcSdp)])}else await pc.setRemoteDescription(rtcSdp);await flushPendingRemoteCandidates();await pc.setLocalDescription();return await emitLocalDescriptionSignal()}if("answer"===sdp.type){isSettingRemoteAnswerPending=!0;try{await pc.setRemoteDescription(rtcSdp);await flushPendingRemoteCandidates()}finally{isSettingRemoteAnswerPending=!1}}}catch(err3){null==(_c3=handlers3.error)||_c3.call(handlers3,toError(err3,"failed to apply remote signal"))}}else try{const candidate=JSON.parse(sdp.sdp);candidate&&"object"==typeof candidate&&await addRemoteCandidate(normalizeCandidate(candidate))}catch(err3){null==(_a8=handlers3.error)||_a8.call(handlers3,toError(err3,"failed to parse remote candidate"))}},sendData:data=>null==dataChannel?void 0:dataChannel.send(data),destroy:()=>{clearDisconnectedCloseTimer();null==dataChannel||dataChannel.close();pc.close();makingOffer=!1;isSettingRemoteAnswerPending=!1;emitClose()},setHandlers:newHandlers=>{const{signal,...restHandlers}=newHandlers;Object.assign(handlers3,restHandlers);handlers3.data&&pendingData.length>0&&pendingData.splice(0).forEach(data=>{var _a8;return null==(_a8=handlers3.data)?void 0:_a8.call(handlers3,data)});signal&&appendSignalHandler(signal);(handlers3.track||handlers3.stream)&&pendingTracks.length>0&&pendingTracks.splice(0).forEach(({track,stream})=>{var _a8,_b5;null==(_a8=handlers3.track)||_a8.call(handlers3,track,stream);null==(_b5=handlers3.stream)||_b5.call(handlers3,stream)})},offerPromise,addStream:stream=>stream.getTracks().forEach(track=>pc.addTrack(track,stream)),removeStream:stream=>pc.getSenders().filter(sender=>sender.track&&stream.getTracks().includes(sender.track)).forEach(sender=>pc.removeTrack(sender)),addTrack:(track,stream)=>pc.addTrack(track,stream),removeTrack:track=>{const sender=pc.getSenders().find(s2=>s2.track===track);sender&&pc.removeTrack(sender)},replaceTrack:(oldTrack,newTrack)=>{const sender=pc.getSenders().find(s2=>s2.track===oldTrack);if(sender)return sender.replaceTrack(newTrack)}}};defaultIceServers=[...alloc(3,(_,i2)=>`stun:stun${i2||""}.l.google.com:19302`),"stun:stun.cloudflare.com:3478"].map(url=>({urls:url}));TypedArray=Object.getPrototypeOf(Uint8Array);chunkSize=16384-(payloadIndex=1+(progressIndex=1+34));internalNs=ns=>"@_"+ns;beforeUnloadRoomCleanups=new Set;cleanupActiveRoomsOnBeforeUnload=()=>beforeUnloadRoomCleanups.forEach(cleanup=>cleanup());registerBeforeUnloadCleanup=cleanup=>{beforeUnloadRoomCleanups.add(cleanup);1===beforeUnloadRoomCleanups.size&&addEventListener("beforeunload",cleanupActiveRoomsOnBeforeUnload);return()=>{beforeUnloadRoomCleanups.delete(cleanup);beforeUnloadRoomCleanups.size||removeEventListener("beforeunload",cleanupActiveRoomsOnBeforeUnload)}};toByteArray=value=>value instanceof ArrayBuffer?new Uint8Array(value):new Uint8Array(value.buffer,value.byteOffset,value.byteLength);toHandshakeErrorMessage=error=>{const message=toErrorMessage(error,"unknown error");return message.startsWith("handshake ")?message:`handshake failed: ${message}`};waitForBufferedAmountLow=(channel,timeoutMs=1e4)=>"open"!==channel.readyState||channel.bufferedAmount<=channel.bufferedAmountLowThreshold?Promise.resolve("open"===channel.readyState):new Promise(res2=>{let settled2=!1,timeout=null;const finish=didDrain=>{if(!settled2){settled2=!0;channel.removeEventListener("bufferedamountlow",onBufferLow);channel.removeEventListener("close",onCloseOrError);channel.removeEventListener("error",onCloseOrError);resetTimer(timeout);res2(didDrain)}},onBufferLow=()=>finish(!0),onCloseOrError=()=>finish(!1);channel.addEventListener("bufferedamountlow",onBufferLow);channel.addEventListener("close",onCloseOrError);channel.addEventListener("error",onCloseOrError);timeout=setTimeout(()=>finish(!1),timeoutMs);"open"===channel.readyState?channel.bufferedAmount<=channel.bufferedAmountLowThreshold&&finish(!0):finish(!1)});room_default=(onPeer,onPeerLeave,onSelfLeave,{onPeerHandshake,onHandshakeError,handshakeTimeoutMs=1e4}={})=>{const peerMap={},activePeerMap={},peerStates={},actions={},actionsCache={},pendingTransmissions={},pendingActionPayloads={},pendingPongs={},pendingStreamMetas={},pendingTrackMetas={},localStreamKeys=new WeakMap,localTrackKeys=new WeakMap,listeners={onPeerJoin:noOp,onPeerLeave:noOp,onPeerStream:noOp,onPeerTrack:noOp};let unregisterBeforeUnloadCleanup=noOp;const iterate2=(targets,f4,{includePending=!1}={})=>(targets?Array.isArray(targets)?targets:[targets]:keys(includePending?peerMap:activePeerMap)).flatMap(id=>{const peer=includePending?peerMap[id]:activePeerMap[id];if(!peer){console.warn(`${libName}: no peer with id ${id} found`);return[]}return[Promise.resolve(f4(id,peer))]}),applyMediaOp=(targets,key3,metadata,sendMeta,op)=>{const payload={k:key3,...void 0===metadata?{}:{m:metadata}};return iterate2(targets,async(id,peer)=>{await sendMeta(payload,id);op(peer)})},makeKeyGetter=map3=>item=>{let key3=map3.get(item);if(!key3){key3=genId(20);map3.set(item,key3)}return key3},getStreamKey=makeKeyGetter(localStreamKeys),getTrackKey=makeKeyGetter(localTrackKeys),getSharedMediaPeer=id=>{var _a8;return null!=(_a8=peerMap[id])?_a8:null},emitStream=(id,key3,stream,metadata)=>{var _a8,_b5;if(activePeerMap[id]){null==(_b5=null==(_a8=getSharedMediaPeer(id))?void 0:_a8.__trysteroSetRemoteStreamByKey)||_b5.call(_a8,key3,stream);listeners.onPeerStream(stream,id,metadata)}},emitTrack=(id,key3,track,stream,metadata)=>{var _a8,_b5;if(activePeerMap[id]){null==(_b5=null==(_a8=getSharedMediaPeer(id))?void 0:_a8.__trysteroSetRemoteTrackByKey)||_b5.call(_a8,key3,track,stream);listeners.onPeerTrack(track,stream,id,metadata)}},clearPeerState=(id,reason=mkErr("peer disconnected"))=>{var _a8;const state2=peerStates[id],err3=toError(reason,"peer disconnected");if(state2){resetTimer(state2.handshakeTimer);state2.pendingHandshakePayloads.length=0;state2.handshakeWaiters.splice(0).forEach(waiter=>waiter.reject(err3));delete peerStates[id]}delete peerMap[id];delete activePeerMap[id];delete pendingTransmissions[id];null==(_a8=pendingPongs[id])||_a8.splice(0).forEach(waiter=>waiter.reject(err3));delete pendingPongs[id];delete pendingStreamMetas[id];delete pendingTrackMetas[id]},exitPeer=(id,peer,reason)=>{const current=peerMap[id];if(!current)return;if(peer&&current!==peer)return;const wasActive=Boolean(activePeerMap[id]);clearPeerState(id,reason);current.destroy();wasActive&&listeners.onPeerLeave(id);onPeerLeave(id)},makeActionInternal=(type,options={})=>{const cached=actionsCache[type];if(actions[type]&&cached){const cachedOptions=actions[type].options;if(cachedOptions.sendToPending!==Boolean(options.sendToPending)||cachedOptions.receiveWhilePending!==Boolean(options.receiveWhilePending))throw mkErr(`action type "${type}" cannot be redefined`);return cached}if(!type)throw mkErr("action type argument is required");const typeBytes=encodeBytes(type);if(typeBytes.byteLength>32)throw mkErr(`action type string "${type}" (${typeBytes.byteLength}b) exceeds byte limit (32). Hint: choose a shorter name.`);const normalizedOptions={sendToPending:Boolean(options.sendToPending),receiveWhilePending:Boolean(options.receiveWhilePending)},typeBytesPadded=new Uint8Array(32);typeBytesPadded.set(typeBytes);let nonce=0;actions[type]={onComplete:noOp,onProgress:noOp,setOnComplete:f4=>{actions[type].onComplete=f4;const pending3=pendingActionPayloads[type];if(null==pending3?void 0:pending3.length){delete pendingActionPayloads[type];pending3.forEach(({payload,peerId,metadata})=>f4(payload,peerId,metadata))}},setOnProgress:f4=>{actions[type].onProgress=f4},send:async(data,targets,meta,onProgress)=>{const dataType=typeof data;if("undefined"===dataType)throw mkErr("action data cannot be undefined");const isJson="string"!==dataType,isBlob2=data instanceof Blob,isBinary=isBlob2||data instanceof ArrayBuffer||data instanceof TypedArray,hasMeta=void 0!==meta,buffer=isBinary?toByteArray(isBlob2?await data.arrayBuffer():data):encodeBytes(isJson?toJson(data):data),metaEncoded=hasMeta?encodeBytes(toJson(meta)):null,chunkTotal=Math.ceil(buffer.byteLength/chunkSize)+(hasMeta?1:0)||1,chunks=alloc(chunkTotal,(_,i2)=>{var _a8;const isLast=i2===chunkTotal-1,isMeta=Boolean(hasMeta&&0===i2),chunk=new Uint8Array(payloadIndex+(isMeta?null!=(_a8=null==metaEncoded?void 0:metaEncoded.byteLength)?_a8:0:isLast?buffer.byteLength-chunkSize*(chunkTotal-(hasMeta?2:1)):chunkSize));chunk.set(typeBytesPadded);chunk.set([nonce>>8,255&nonce],32);chunk.set([Number(isLast)|Number(isMeta)<<1|Number(isBinary)<<2|Number(isJson)<<3],34);chunk.set([Math.round((i2+1)/chunkTotal*255)],progressIndex);chunk.set(hasMeta?isMeta?null!=metaEncoded?metaEncoded:new Uint8Array:buffer.subarray((i2-1)*chunkSize,i2*chunkSize):buffer.subarray(i2*chunkSize,(i2+1)*chunkSize),payloadIndex);return chunk});nonce=nonce+1&65535;await all(iterate2(targets,async(id,peer)=>{var _a8;const{channel}=peer;let chunkN=0;for(;chunkN<chunkTotal;){const chunk=chunks[chunkN];if(!chunk)break;if(channel&&channel.bufferedAmount>channel.bufferedAmountLowThreshold&&!await waitForBufferedAmountLow(channel))break;const currentPeer=normalizedOptions.sendToPending?peerMap[id]:activePeerMap[id];if(!currentPeer||currentPeer!==peer)break;peer.sendData(chunk);chunkN++;const progressByte=null!=(_a8=chunk[progressIndex])?_a8:255;null==onProgress||onProgress(progressByte/255,id,meta)}},{includePending:normalizedOptions.sendToPending}));return[]},options:normalizedOptions};return actionsCache[type]=[actions[type].send,actions[type].setOnComplete,actions[type].setOnProgress]},handleData=(id,data)=>{var _a8,_b5,_c3,_d2,_f,_h2,_i2,_j,_k;const state2=peerStates[id];if(!state2)return;const buffer=new Uint8Array(data),type=decodeBytes(buffer.subarray(0,32)).replaceAll("\0",""),action2=actions[type];if(!state2.isActive&&!(null==action2?void 0:action2.options.receiveWhilePending))return;const nonce=(null!=(_a8=buffer[32])?_a8:0)<<8|(null!=(_b5=buffer[33])?_b5:0),tag3=null!=(_c3=buffer[34])?_c3:0,progress=null!=(_d2=buffer[progressIndex])?_d2:0,payload=buffer.subarray(payloadIndex),isLast=Boolean(1&tag3),isMeta=Boolean(2&tag3),isBinary=Boolean(4&tag3),isJson=Boolean(8&tag3);null!=pendingTransmissions[id]||(pendingTransmissions[id]={});null!=(_f=pendingTransmissions[id])[type]||(_f[type]={});const target=null!=(_i2=(_h2=pendingTransmissions[id][type])[nonce])?_i2:_h2[nonce]={chunks:[]};isMeta?target.meta=fromJson(decodeBytes(payload)):target.chunks.push(payload);null==action2||action2.onProgress(progress/255,id,target.meta);if(!isLast)return;const full=new Uint8Array(target.chunks.reduce((a2,c3)=>a2+c3.byteLength,0));target.chunks.reduce((a2,c3)=>{full.set(c3,a2);return a2+c3.byteLength},0);delete pendingTransmissions[id][type][nonce];if(isBinary)action2?action2.onComplete(full,id,target.meta):(null!=(_j=pendingActionPayloads[type])?_j:pendingActionPayloads[type]=[]).push({payload:full,peerId:id,...void 0===target.meta?{}:{metadata:target.meta}});else{const text2=decodeBytes(full),decoded=isJson?fromJson(text2):text2;action2?action2.onComplete(decoded,id,target.meta):(null!=(_k=pendingActionPayloads[type])?_k:pendingActionPayloads[type]=[]).push({payload:decoded,peerId:id,...void 0===target.meta?{}:{metadata:target.meta}})}},leave=async()=>{await sendLeave("");await new Promise(res2=>setTimeout(res2,99));entries(peerMap).forEach(([id,peer])=>{peer.destroy();clearPeerState(id,mkErr("room left"))});unregisterBeforeUnloadCleanup();onSelfLeave()},[sendPing,getPing]=makeActionInternal(internalNs("ping")),[sendPong,getPong]=makeActionInternal(internalNs("pong")),[sendSignal2,getSignal]=makeActionInternal(internalNs("signal")),[sendStreamMeta,getStreamMeta]=makeActionInternal(internalNs("stream")),[sendTrackMeta,getTrackMeta]=makeActionInternal(internalNs("track")),[sendLeave,getLeave]=makeActionInternal(internalNs("leave"),{sendToPending:!0,receiveWhilePending:!0}),[sendHandshakeData,getHandshakeData]=makeActionInternal(internalNs("hsdata"),{sendToPending:!0,receiveWhilePending:!0}),[sendHandshakeReady,getHandshakeReady]=makeActionInternal(internalNs("hsready"),{sendToPending:!0,receiveWhilePending:!0}),maybeActivatePeer=(id,peer)=>{const state2=peerStates[id];if(!(!state2||peer&&state2.peer!==peer||state2.isActive)&&state2.didLocalHandshakePass&&state2.didReceiveRemoteReady){state2.isActive=!0;activePeerMap[id]=state2.peer;state2.handshakeTimer=resetTimer(state2.handshakeTimer);listeners.onPeerJoin(id)}},failPeerHandshake=(id,peer,reason)=>{const state2=peerStates[id];if(!state2||state2.peer!==peer)return;const error=toHandshakeErrorMessage(reason);null==onHandshakeError||onHandshakeError(id,error);exitPeer(id,peer,mkErr(error))},markLocalHandshakePassed=(id,peer)=>{const state2=peerStates[id];if(state2&&state2.peer===peer&&!state2.isActive){state2.didLocalHandshakePass=!0;sendHandshakeReady("",id).catch(err3=>failPeerHandshake(id,peer,mkErr(`failed sending handshake readiness: ${toErrorMessage(err3,"unknown send failure")}`)));maybeActivatePeer(id,peer)}},startPeerHandshake=(id,peer)=>{const state2=peerStates[id];if(!state2||state2.peer!==peer)return;state2.handshakeTimer=setTimeout(()=>failPeerHandshake(id,peer,mkErr(`handshake timed out after ${handshakeTimeoutMs}ms`)),handshakeTimeoutMs);const isInitiator=selfId<id;Promise.resolve(null==onPeerHandshake?void 0:onPeerHandshake(id,async(data,metadata)=>{await sendHandshakeData(data,id,metadata)},()=>new Promise((resolve,reject)=>{const current=peerStates[id];if(!current||current.peer!==peer){reject(mkErr("peer disconnected during handshake"));return}const payload=current.pendingHandshakePayloads.shift();payload?resolve(payload):current.handshakeWaiters.push({resolve,reject:error=>reject(error)})}),isInitiator)).then(()=>markLocalHandshakePassed(id,peer)).catch(err3=>failPeerHandshake(id,peer,toError(err3,"handshake failed")))},toPendingMediaMeta=value=>value&&"object"==typeof value&&!Array.isArray(value)&&"string"==typeof value.k?{key:value.k,...Object.hasOwn(value,"m")?{metadata:value.m}:{}}:null;getPing((_,id)=>sendPong("",id));getPong((_,id)=>{var _a8;const queue2=pendingPongs[id];null==(_a8=null==queue2?void 0:queue2.shift())||_a8.resolve();queue2&&!queue2.length&&delete pendingPongs[id]});getSignal((sdp,id)=>{var _a8;activePeerMap[id]&&(null==(_a8=peerMap[id])||_a8.signal(sdp))});getStreamMeta((meta,id)=>{var _a8,_b5,_c3;if(!activePeerMap[id])return;const parsed=toPendingMediaMeta(meta);if(!parsed)return;(null!=(_a8=pendingStreamMetas[id])?_a8:pendingStreamMetas[id]=[]).push(parsed);const cached=null==(_c3=null==(_b5=getSharedMediaPeer(id))?void 0:_b5.__trysteroGetRemoteStreamByKey)?void 0:_c3.call(_b5,parsed.key);cached&&emitStream(id,parsed.key,cached,parsed.metadata)});getTrackMeta((meta,id)=>{var _a8,_b5,_c3;if(!activePeerMap[id])return;const parsed=toPendingMediaMeta(meta);if(!parsed)return;(null!=(_a8=pendingTrackMetas[id])?_a8:pendingTrackMetas[id]=[]).push(parsed);const cached=null==(_c3=null==(_b5=getSharedMediaPeer(id))?void 0:_b5.__trysteroGetRemoteTrackByKey)?void 0:_c3.call(_b5,parsed.key);cached&&emitTrack(id,parsed.key,cached.track,cached.stream,parsed.metadata)});getLeave((_,id)=>exitPeer(id,void 0,mkErr("peer left room")));getHandshakeData((data,id,metadata)=>{const state2=peerStates[id];if(!state2||state2.isActive)return;const payload=void 0===metadata?{data}:{data,metadata},pending3=state2.handshakeWaiters.shift();pending3?pending3.resolve(payload):state2.pendingHandshakePayloads.push(payload)});getHandshakeReady((_,id)=>{const state2=peerStates[id];if(state2&&!state2.isActive){state2.didReceiveRemoteReady=!0;maybeActivatePeer(id)}});onPeer((peer,id)=>{const existingPeer=peerMap[id];if(existingPeer){if(existingPeer===peer)return;existingPeer.destroy();clearPeerState(id,mkErr("peer replaced"))}peerMap[id]=peer;peerStates[id]={peer,isActive:!1,didLocalHandshakePass:!1,didReceiveRemoteReady:!1,handshakeTimer:null,pendingHandshakePayloads:[],handshakeWaiters:[]};peer.setHandlers({data:d4=>handleData(id,d4),stream:stream=>{var _a8;if(!activePeerMap[id])return;const next2=null==(_a8=pendingStreamMetas[id])?void 0:_a8.shift();next2&&emitStream(id,next2.key,stream,next2.metadata)},track:(track,stream)=>{var _a8;if(!activePeerMap[id])return;const next2=null==(_a8=pendingTrackMetas[id])?void 0:_a8.shift();next2&&emitTrack(id,next2.key,track,stream,next2.metadata)},signal:sdp=>{activePeerMap[id]&&sendSignal2(sdp,id)},close:()=>exitPeer(id,peer,mkErr("peer disconnected")),error:err3=>{console.error(`${libName} peer error:`,err3);exitPeer(id,peer,err3)}});startPeerHandshake(id,peer)});isBrowser&&(unregisterBeforeUnloadCleanup=registerBeforeUnloadCleanup(()=>leave().catch(noOp)));return{makeAction:type=>makeActionInternal(type),leave,ping:async id=>{if(!activePeerMap[id])throw mkErr(`no active peer with id ${id}`);const start=Date.now();await new Promise((resolve,reject)=>{var _a8;const queue2=null!=(_a8=pendingPongs[id])?_a8:pendingPongs[id]=[],clearFromQueue=()=>{const currentQueue=pendingPongs[id];if(!currentQueue)return;const i2=currentQueue.indexOf(waiter);i2>-1&&currentQueue.splice(i2,1);currentQueue.length||delete pendingPongs[id]},waiter={resolve:()=>{clearFromQueue();resolve()},reject:reason=>{clearFromQueue();reject(reason)}};queue2.push(waiter);sendPing("",id).catch(err3=>waiter.reject(toError(err3,"peer disconnected")))});return Date.now()-start},getPeers:()=>fromEntries(entries(activePeerMap).map(([id,peer])=>[id,peer.connection])),addStream:(stream,targets,meta)=>applyMediaOp(targets,getStreamKey(stream),meta,sendStreamMeta,peer=>peer.addStream(stream)),removeStream:(stream,targets)=>{iterate2(targets,(_,peer)=>peer.removeStream(stream))},addTrack:(track,stream,targets,meta)=>applyMediaOp(targets,getTrackKey(track),meta,sendTrackMeta,peer=>peer.addTrack(track,stream)),removeTrack:(track,targets)=>{iterate2(targets,(_,peer)=>peer.removeTrack(track))},replaceTrack:(oldTrack,newTrack,targets,meta)=>applyMediaOp(targets,getTrackKey(newTrack),meta,sendTrackMeta,peer=>peer.replaceTrack(oldTrack,newTrack)),onPeerJoin:f4=>{listeners.onPeerJoin=f4;keys(activePeerMap).forEach(peerId=>f4(peerId))},onPeerLeave:f4=>listeners.onPeerLeave=f4,onPeerStream:f4=>listeners.onPeerStream=f4,onPeerTrack:f4=>listeners.onPeerTrack=f4}};wrapRoomFrame=(roomToken,data)=>{const tokenBytes=encodeBytes(roomToken),frame=new Uint8Array(3+tokenBytes.byteLength+data.byteLength);frame[0]=1;frame[1]=tokenBytes.byteLength>>>8&255;frame[2]=255&tokenBytes.byteLength;frame.set(tokenBytes,3);frame.set(data,3+tokenBytes.byteLength);return frame};wrapRoomPresenceFrame=(roomToken,isPresent)=>{const tokenBytes=encodeBytes(roomToken),frame=new Uint8Array(4+tokenBytes.byteLength);frame[0]=2;frame[1]=Number(isPresent);frame[2]=tokenBytes.byteLength>>>8&255;frame[3]=255&tokenBytes.byteLength;frame.set(tokenBytes,4);return frame};unwrapFrame=data=>{var _a8,_b5,_c3,_d2;const buffer=new Uint8Array(data);if(buffer.byteLength<3)return null;if(1===buffer[0]){const tokenSize2=(null!=(_a8=buffer[1])?_a8:0)<<8|(null!=(_b5=buffer[2])?_b5:0),headerSize2=3+tokenSize2;return tokenSize2<=0||buffer.byteLength<headerSize2?null:{type:"room",roomToken:decodeBytes(buffer.subarray(3,headerSize2)),payload:buffer.subarray(headerSize2).slice().buffer}}if(2!==buffer[0]||buffer.byteLength<4)return null;const tokenSize=(null!=(_c3=buffer[2])?_c3:0)<<8|(null!=(_d2=buffer[3])?_d2:0),headerSize=4+tokenSize;return tokenSize<=0||buffer.byteLength<headerSize?null:{type:"presence",roomToken:decodeBytes(buffer.subarray(4,headerSize)),isPresent:1===buffer[1]}};isPeerUnderlyingStale=peer=>{const{connection,channel}=peer;return peer.isDead||"closed"===connection.connectionState||"failed"===connection.connectionState||"closed"===connection.iceConnectionState||"failed"===connection.iceConnectionState||"closing"===(null==channel?void 0:channel.readyState)||"closed"===(null==channel?void 0:channel.readyState)};getConnectedPeerHealth=peer=>{if(isPeerUnderlyingStale(peer))return"stale";const{channel}=peer;return channel&&"open"===channel.readyState?"live":"transient"};SharedPeerManager=class{constructor(){__publicField(this,"byApp",{});__publicField(this,"roomPresenceHandlers",{})}getMap(appId){var _a8,_b5;return null!=(_b5=(_a8=this.byApp)[appId])?_b5:_a8[appId]={}}get(appId,peerId){var _a8;return null==(_a8=this.byApp[appId])?void 0:_a8[peerId]}isPeerStale(peer){return isPeerUnderlyingStale(peer)}getHealth(peer){return this.isPeerStale(peer)?"stale":"live"}setRoomPresenceHandler(appId,handler){this.roomPresenceHandlers[appId]=handler;return()=>{this.roomPresenceHandlers[appId]===handler&&delete this.roomPresenceHandlers[appId]}}sendRoomPresence(shared,roomToken,isPresent){shared.isClosing||shared.peer.isDead||shared.peer.sendData(wrapRoomPresenceFrame(roomToken,isPresent))}clear(appId,peerId,{destroyPeer}){const map3=this.byApp[appId],shared=null==map3?void 0:map3[peerId];if(!shared||shared.isClosing)return;shared.idleTimer=resetTimer(shared.idleTimer);shared.isClosing=!0;destroyPeer&&!shared.peer.isDead&&shared.peer.destroy();const bindings=values(shared.bindings);shared.bindings={};shared.bindingsByToken={};shared.controlRoomId=null;delete map3[peerId];bindings.forEach(binding=>{var _a8,_b5;null==(_b5=(_a8=binding.handlers).close)||_b5.call(_a8);binding.pendingData.length=0;binding.pendingSendData.length=0;binding.pendingTracks.length=0});shared.remoteStreamsByKey.clear();shared.remoteTracksByKey.clear();shared.pendingDataByToken.clear();shared.remoteRoomTokens.clear();0===keys(map3).length&&delete this.byApp[appId]}register(appId,peerId,peer,idleMs){const map3=this.getMap(appId),existing=map3[peerId];if(existing){existing.idleTimer=resetTimer(existing.idleTimer);if(existing.peer===peer)return existing;this.clear(appId,peerId,{destroyPeer:!0})}const shared={appId,peerId,peer,bindings:{},bindingsByToken:{},pendingDataByToken:new Map,remoteRoomTokens:new Set,idleTimer:null,controlRoomId:null,streamOwners:new Map,trackOwners:new Map,remoteStreamsByKey:new Map,remoteTracksByKey:new Map,idleMs,isClosing:!1};peer.setHandlers({data:data=>this.dispatchData(shared,data),signal:signal=>this.dispatchSignal(shared,signal),close:()=>this.clear(appId,peerId,{destroyPeer:!1}),error:err3=>{console.error(`${libName} peer error:`,err3);this.clear(appId,peerId,{destroyPeer:!1})},track:(track,stream)=>this.dispatchTrack(shared,track,stream)});map3[peerId]=shared;return shared}bind(roomId,roomTokenPromise,shared,{onDetach}){const existingBinding=shared.bindings[roomId];if(existingBinding){shared.idleTimer=resetTimer(shared.idleTimer);return{proxy:existingBinding.proxy,isNew:!1}}const binding={roomId,roomToken:null,roomTokenPromise,handlers:{},pendingData:[],pendingSendData:[],pendingTracks:[],detach:noOp,proxy:{}},detachBinding=()=>{var _a9;if(shared.bindings[roomId]){this.pruneRoomOwnership(shared,roomId);delete shared.bindings[roomId];binding.roomToken&&shared.bindingsByToken[binding.roomToken]===binding&&delete shared.bindingsByToken[binding.roomToken];shared.controlRoomId===roomId&&(shared.controlRoomId=null!=(_a9=keys(shared.bindings)[0])?_a9:null);onDetach();this.scheduleIdleTimer(shared)}},proxy2={created:shared.peer.created,get connection(){return shared.peer.connection},get channel(){return shared.peer.channel},get isDead(){return shared.peer.isDead},getOffer:restartIce=>shared.peer.getOffer(restartIce),signal:sdp=>shared.peer.signal(sdp),sendData:data=>{binding.roomToken?shared.peer.sendData(wrapRoomFrame(binding.roomToken,data)):binding.pendingSendData.push(data)},destroy:()=>detachBinding(),setHandlers:newHandlers=>{const{signal,...rest}=newHandlers;Object.assign(binding.handlers,rest);signal&&(binding.handlers.signal=signal);this.flushBindingQueues(binding)},offerPromise:shared.peer.offerPromise,addStream:stream=>{var _a9;const owners=null!=(_a9=shared.streamOwners.get(stream))?_a9:new Set,shouldAttach=0===owners.size;owners.add(roomId);shared.streamOwners.set(stream,owners);shouldAttach&&shared.peer.addStream(stream)},removeStream:stream=>{const owners=shared.streamOwners.get(stream);if(owners){owners.delete(roomId);if(0===owners.size){shared.streamOwners.delete(stream);shared.peer.removeStream(stream)}}},addTrack:(track,stream)=>{var _a9,_b5;const entry=null!=(_a9=shared.trackOwners.get(track))?_a9:{stream,rooms:new Set},shouldAttach=0===entry.rooms.size;entry.stream=stream;entry.rooms.add(roomId);shared.trackOwners.set(track,entry);return shouldAttach?shared.peer.addTrack(track,stream):null!=(_b5=shared.peer.connection.getSenders().find(s2=>s2.track===track))?_b5:shared.peer.addTrack(track,stream)},removeTrack:track=>{const entry=shared.trackOwners.get(track);if(entry){entry.rooms.delete(roomId);if(0===entry.rooms.size){shared.trackOwners.delete(track);shared.peer.removeTrack(track)}}},replaceTrack:(oldTrack,newTrack)=>{var _a9;const oldEntry=shared.trackOwners.get(oldTrack);if(oldEntry){shared.trackOwners.delete(oldTrack);const nextEntry=null!=(_a9=shared.trackOwners.get(newTrack))?_a9:{stream:oldEntry.stream,rooms:new Set};oldEntry.rooms.forEach(room=>nextEntry.rooms.add(room));shared.trackOwners.set(newTrack,nextEntry)}return shared.peer.replaceTrack(oldTrack,newTrack)},__trysteroGetRemoteStreamByKey:key3=>shared.remoteStreamsByKey.get(key3),__trysteroSetRemoteStreamByKey:(key3,stream)=>{shared.remoteStreamsByKey.set(key3,stream)},__trysteroGetRemoteTrackByKey:key3=>shared.remoteTracksByKey.get(key3),__trysteroSetRemoteTrackByKey:(key3,track,stream)=>{shared.remoteTracksByKey.set(key3,{track,stream})}};binding.proxy=proxy2;binding.detach=detachBinding;shared.bindings[roomId]=binding;null!=shared.controlRoomId||(shared.controlRoomId=roomId);shared.idleTimer=resetTimer(shared.idleTimer);roomTokenPromise.then(roomToken=>{if(shared.isClosing||shared.bindings[roomId]!==binding)return;binding.roomToken=roomToken;shared.bindingsByToken[roomToken]=binding;const pendingData=shared.pendingDataByToken.get(roomToken);if(null==pendingData?void 0:pendingData.length){binding.pendingData.push(...pendingData);shared.pendingDataByToken.delete(roomToken)}binding.pendingSendData.splice(0).forEach(payload=>shared.peer.sendData(wrapRoomFrame(roomToken,payload)));this.flushBindingQueues(binding)});return{proxy:proxy2,isNew:!0}}pruneRoomOwnership(shared,roomIdToRemove){shared.streamOwners.forEach((rooms,stream)=>{rooms.delete(roomIdToRemove);if(0===rooms.size){shared.streamOwners.delete(stream);shared.peer.removeStream(stream)}});shared.trackOwners.forEach((entry,track)=>{entry.rooms.delete(roomIdToRemove);if(0===entry.rooms.size){shared.trackOwners.delete(track);shared.peer.removeTrack(track)}})}scheduleIdleTimer(shared){if(!(shared.isClosing||keys(shared.bindings).length>0)){shared.idleTimer=resetTimer(shared.idleTimer);shared.idleTimer=setTimeout(()=>{var _a8;const current=null==(_a8=this.byApp[shared.appId])?void 0:_a8[shared.peerId];!current||keys(current.bindings).length>0||this.clear(shared.appId,shared.peerId,{destroyPeer:!0})},shared.idleMs)}}getSignalBinding(shared){if(shared.controlRoomId){const selected=shared.bindings[shared.controlRoomId];if(null==selected?void 0:selected.handlers.signal)return selected}const fallback3=values(shared.bindings).find(binding=>Boolean(binding.handlers.signal));if(!fallback3)return null;shared.controlRoomId=fallback3.roomId;return fallback3}flushBindingQueues(binding){const{handlers:handlers3}=binding;handlers3.data&&binding.pendingData.length>0&&binding.pendingData.splice(0).forEach(payload=>{var _a8;return null==(_a8=handlers3.data)?void 0:_a8.call(handlers3,payload)});(handlers3.track||handlers3.stream)&&binding.pendingTracks.length&&binding.pendingTracks.splice(0).forEach(({track,stream})=>{var _a8,_b5;null==(_a8=handlers3.track)||_a8.call(handlers3,track,stream);null==(_b5=handlers3.stream)||_b5.call(handlers3,stream)})}dispatchData(shared,data){var _a8,_b5,_c3;const decoded=unwrapFrame(data);if(!decoded)return;if("presence"===decoded.type){decoded.isPresent?shared.remoteRoomTokens.add(decoded.roomToken):shared.remoteRoomTokens.delete(decoded.roomToken);null==(_b5=(_a8=this.roomPresenceHandlers)[shared.appId])||_b5.call(_a8,shared.peerId,decoded.roomToken,decoded.isPresent);return}const binding=shared.bindingsByToken[decoded.roomToken];if(!binding){const pending3=null!=(_c3=shared.pendingDataByToken.get(decoded.roomToken))?_c3:[];pending3.push(decoded.payload);shared.pendingDataByToken.set(decoded.roomToken,pending3);return}binding.handlers.data?binding.handlers.data(decoded.payload):binding.pendingData.push(decoded.payload)}dispatchSignal(shared,signal){var _a8,_b5,_c3;null==(_c3=null==(_a8=this.getSignalBinding(shared))?void 0:(_b5=_a8.handlers).signal)||_c3.call(_b5,signal)}dispatchTrack(shared,track,stream){values(shared.bindings).forEach(binding=>{var _a8,_b5,_c3,_d2;if(binding.handlers.track||binding.handlers.stream){null==(_b5=(_a8=binding.handlers).track)||_b5.call(_a8,track,stream);null==(_d2=(_c3=binding.handlers).stream)||_d2.call(_c3,stream)}else binding.pendingTracks.push({track,stream})})}};publishCipheredSignalingMessage=(ctx,signal,peerTopic,signalPeer,buildPayload,stillValid)=>{ctx.toCipher(signal).then(encryptedSignal=>{!ctx.isLeaving()&&stillValid()&&signalPeer(peerTopic,toJson(buildPayload(encryptedSignal.sdp)))})};makeState=()=>({status:"idle",offerPeer:null,offerId:null,offerSdp:null,offerInitPromise:null,offerAnswered:!1,offerRelays:[],offerSignalRelays:[],offerSignalBacklog:[],offerRelayTimers:[],offerExpiryTimer:null,connectedPeer:null,connectedPeerUnhealthySinceMs:null,answeringExpiryTimer:null,answeringPeer:null,pendingCandidates:{}});getState=(peerStates,peerId)=>{var _a8;return null!=(_a8=peerStates[peerId])?_a8:peerStates[peerId]=makeState()};updateStatus=state2=>{state2.connectedPeer?state2.status="connected":state2.answeringPeer?state2.status="answering":state2.offerPeer||state2.offerRelays.some(Boolean)?state2.status="offering":state2.status="idle"};clearAnswering=(state2,peer)=>{if(state2.answeringPeer===peer){state2.answeringExpiryTimer=resetTimer(state2.answeringExpiryTimer);state2.answeringPeer=null;updateStatus(state2)}};clearConnectedPeer=(state2,peerId,_reason)=>{if(state2.connectedPeer){state2.connectedPeer.isDead||state2.connectedPeer.destroy();state2.connectedPeer=null;state2.connectedPeerUnhealthySinceMs=null;updateStatus(state2)}};clearOfferRelay=(state2,relayId)=>{state2.offerRelayTimers[relayId]=resetTimer(state2.offerRelayTimers[relayId]);if(state2.offerRelays[relayId]){state2.offerRelays[relayId]=void 0;updateStatus(state2)}};clearOfferRelayIfPlaceholder=(state2,relayId)=>{"offer-placeholder"===(null==state2?void 0:state2.offerRelays[relayId])&&clearOfferRelay(state2,relayId)};hasRemoteDescription=peer=>{if(peer.isDead||"closed"===peer.connection.connectionState)return!0;try{return Boolean(peer.connection.remoteDescription)}catch(e3){return!0}};resetOfferState=(state2,offerPool)=>{const previousOfferAnswered=state2.offerAnswered;state2.offerExpiryTimer=resetTimer(state2.offerExpiryTimer);state2.offerInitPromise=null;state2.offerRelays.forEach((_,relayId)=>clearOfferRelay(state2,relayId));state2.offerRelays=[];state2.offerSignalRelays=[];state2.offerRelayTimers=[];state2.offerSignalBacklog=[];state2.offerPeer&&state2.offerPeer!==state2.connectedPeer&&(previousOfferAnswered||hasRemoteDescription(state2.offerPeer)?state2.offerPeer.isDead||state2.offerPeer.destroy():offerPool.recycle(state2.offerPeer));state2.offerPeer=null;state2.offerId=null;state2.offerSdp=null;state2.offerAnswered=!1;updateStatus(state2)};scheduleAnsweringExpiry=(ctx,state2,peerId,peer)=>{resetTimer(state2.answeringExpiryTimer);state2.answeringExpiryTimer=setTimeout(()=>{const current=ctx.peerStates[peerId];if(current&&!current.connectedPeer&&current.answeringPeer===peer){peer.destroy();clearAnswering(current,peer)}},23333)};flushBufferedCandidates=async(state2,peer,offerId)=>{const bufferKeys=offerId?[offerId,"__legacy__"]:["__legacy__"];for(const key3 of bufferKeys){const buffered=state2.pendingCandidates[key3];if(null==buffered?void 0:buffered.length){delete state2.pendingCandidates[key3];for(const candidate of buffered)await peer.signal(candidate)}}};scheduleOfferExpiry=(ctx,state2,peerId,ttlMs=57333)=>{resetTimer(state2.offerExpiryTimer);const offerId=state2.offerId;state2.offerExpiryTimer=setTimeout(()=>{const current=ctx.peerStates[peerId];current&&!current.connectedPeer&&current.offerId===offerId&&resetOfferState(current,ctx.offerPool)},ttlMs)};ensureOffer=(ctx,state2,peerId,relayId)=>{if(state2.offerPeer&&state2.offerId&&state2.offerSdp)return Promise.resolve({peer:state2.offerPeer,offer:state2.offerSdp,offerId:state2.offerId});if(state2.offerInitPromise)return state2.offerInitPromise;state2.offerInitPromise=(async()=>{const firstOffer=(await ctx.offerPool.checkout(1,!1,ctx.encryptOffer))[0];if(!firstOffer)throw mkErr("failed to allocate offer peer");const{peer,offer}=firstOffer;state2.offerPeer=peer;state2.offerId=genId(12);state2.offerSdp=offer;state2.offerAnswered=!1;state2.offerSignalBacklog=[];updateStatus(state2);const onOfferPeerClosedOrError=()=>{state2.offerPeer!==peer||state2.connectedPeer||resetOfferState(state2,ctx.offerPool);ctx.disconnectPeer(peer,peerId)};peer.setHandlers({connect:()=>ctx.connectPeer(peer,peerId,relayId),signal:signal=>{if(state2.offerPeer===peer){state2.offerSignalBacklog.push(signal);state2.offerSignalRelays.forEach(sendSignal2=>null==sendSignal2?void 0:sendSignal2(signal))}},close:onOfferPeerClosedOrError,error:onOfferPeerClosedOrError});scheduleOfferExpiry(ctx,state2,peerId);return{peer,offer,offerId:state2.offerId}})().finally(()=>state2.offerInitPromise=null);return state2.offerInitPromise};handleAnnouncement=async(ctx,relayId,peerId,shared,signalPeer)=>{var _a8;if(shared){ctx.attachSharedPeerToRoom(peerId,shared);return}const state2=ctx.peerStates[peerId];if(!state2||state2.connectedPeer||state2.answeringPeer||state2.offerAnswered){clearOfferRelayIfPlaceholder(state2,relayId);return}if("offer-placeholder"!==state2.offerRelays[relayId])return;const[peerTopic,offerInfo]=await all([sha1(topicPath(ctx.rootTopicPlaintext,peerId)),ensureOffer(ctx,state2,peerId,relayId)]);if(ctx.isLeaving())return;if(state2.connectedPeer||state2.answeringPeer||state2.offerAnswered||"offer-placeholder"!==state2.offerRelays[relayId]){clearOfferRelayIfPlaceholder(state2,relayId);return}state2.offerRelayTimers[relayId]=resetTimer(state2.offerRelayTimers[relayId]);state2.offerRelays[relayId]=!0;updateStatus(state2);state2.offerRelayTimers[relayId]=setTimeout(()=>prunePendingOffer(ctx,peerId,relayId),.9*(null!=(_a8=ctx.announceIntervals[relayId])?_a8:ctx.announceIntervalMs));let didSendOffer=!1;state2.offerSignalRelays[relayId]=signal=>{didSendOffer&&(ctx.isLeaving()||state2.connectedPeer||state2.offerPeer!==offerInfo.peer||state2.offerId!==offerInfo.offerId||"candidate"!==signal.type||publishCipheredSignalingMessage(ctx,signal,peerTopic,signalPeer,sdp=>({peerId:selfId,offerId:offerInfo.offerId,candidate:sdp}),()=>!state2.connectedPeer&&state2.offerPeer===offerInfo.peer&&state2.offerId===offerInfo.offerId))};signalPeer(peerTopic,toJson({peerId:selfId,offerId:offerInfo.offerId,offer:offerInfo.offer}));didSendOffer=!0;state2.offerSignalBacklog.forEach(signal=>{var _a9,_b5;return null==(_b5=(_a9=state2.offerSignalRelays)[relayId])?void 0:_b5.call(_a9,signal)})};handleOffer=async(ctx,relayId,peerId,offer,offerId,hasOutgoingOfferHint,signalPeer)=>{var _a8;const state2=getState(ctx.peerStates,peerId);if(state2.answeringPeer||state2.offerAnswered)return;const hasTrackedOutgoingOffer=Boolean(state2.offerPeer||state2.offerRelays.some(Boolean));if((hasTrackedOutgoingOffer||hasOutgoingOfferHint)&&selfId<peerId)return;hasTrackedOutgoingOffer&&resetOfferState(state2,ctx.offerPool);const answerPeer=ctx.initPeer(!1,ctx.config);state2.answeringPeer=answerPeer;scheduleAnsweringExpiry(ctx,state2,peerId,answerPeer);updateStatus(state2);const onAnswerPeerClosedOrError=()=>{clearAnswering(state2,answerPeer);ctx.disconnectPeer(answerPeer,peerId)};answerPeer.setHandlers({connect:()=>ctx.connectPeer(answerPeer,peerId,relayId),close:onAnswerPeerClosedOrError,error:onAnswerPeerClosedOrError});let plainOffer;try{plainOffer=await ctx.toPlain({type:"offer",sdp:offer})}catch(e3){clearAnswering(state2,answerPeer);null==(_a8=ctx.onJoinError)||_a8.call(ctx,{error:"incorrect room password when decrypting offer",appId:ctx.appId,peerId,roomId:ctx.roomId});return}if(answerPeer.isDead){clearAnswering(state2,answerPeer);return}const peerTopic=await sha1(topicPath(ctx.rootTopicPlaintext,peerId));if(!ctx.isLeaving()){answerPeer.setHandlers({signal:signal=>{ctx.isLeaving()||state2.answeringPeer!==answerPeer||answerPeer.isDead||"answer"!==signal.type&&"candidate"!==signal.type||publishCipheredSignalingMessage(ctx,signal,peerTopic,signalPeer,sdp=>{const payloadToSend={peerId:selfId};"answer"===signal.type?payloadToSend.answer=sdp:payloadToSend.candidate=sdp;offerId&&(payloadToSend.offerId=offerId);return payloadToSend},()=>state2.answeringPeer===answerPeer&&!answerPeer.isDead)}});await answerPeer.signal(plainOffer);await flushBufferedCandidates(state2,answerPeer,offerId)}};handleCandidate=async(ctx,peerId,candidate,offerId,peer)=>{var _a8,_b5,_c3,_d2;let plainCandidate;try{plainCandidate=await ctx.toPlain({type:"candidate",sdp:candidate})}catch(e3){return}const state2=getState(ctx.peerStates,peerId),offerPeerMatch=offerId&&(null==state2?void 0:state2.offerPeer)&&state2.offerId===offerId?state2.offerPeer:null,answeringPeer=null!=(_a8=null==state2?void 0:state2.answeringPeer)?_a8:null,fallbackOfferPeer=!offerId&&(null==state2?void 0:state2.offerPeer)?state2.offerPeer:null,targetPeer=peer&&!peer.isDead?peer:null!=(_b5=null!=offerPeerMatch?offerPeerMatch:answeringPeer)?_b5:fallbackOfferPeer;if(!targetPeer||targetPeer.isDead){const pendingKey=null!=offerId?offerId:"__legacy__";(null!=(_d2=(_c3=state2.pendingCandidates)[pendingKey])?_d2:_c3[pendingKey]=[]).push(plainCandidate);return}targetPeer.signal(plainCandidate)};handleAnswer=async(ctx,relayId,peerId,answer,offerId,peer)=>{var _a8;let plainAnswer;try{plainAnswer=await ctx.toPlain({type:"answer",sdp:answer})}catch(e3){null==(_a8=ctx.onJoinError)||_a8.call(ctx,{error:"incorrect room password when decrypting answer",appId:ctx.appId,peerId,roomId:ctx.roomId});return}if(peer){ctx.offerPool.claimLeased(peer);peer.setHandlers({connect:()=>ctx.connectPeer(peer,peerId,relayId),close:()=>ctx.disconnectPeer(peer,peerId)});peer.signal(plainAnswer)}else{const state2=ctx.peerStates[peerId];if(!state2||!state2.offerPeer||state2.offerAnswered||offerId&&state2.offerId&&offerId!==state2.offerId||state2.offerPeer.isDead)return;state2.offerAnswered=!0;scheduleOfferExpiry(ctx,state2,peerId,23333);state2.offerPeer.signal(plainAnswer)}};prunePendingOffer=(ctx,peerId,relayId)=>{const state2=ctx.peerStates[peerId];state2&&!state2.connectedPeer&&state2.offerRelays[relayId]&&clearOfferRelay(state2,relayId)};createSignalHandler=ctx=>relayId=>async(topic,msg,signalPeer)=>{var _a8;if(ctx.isLeaving())return;const payload="string"==typeof msg?fromJson(msg):msg,peerId="string"==typeof payload.peerId?payload.peerId:"",offer=payload.offer,answer=payload.answer,candidate=payload.candidate,offerId=payload.offerId,peer=payload.peer,hasOutgoingOfferHint=!0===payload.hasOutgoingOffer;if(peerId===selfId)return;const state2=ctx.peerStates[peerId],connectedPeer=null==state2?void 0:state2.connectedPeer;if(connectedPeer&&state2){const health=getConnectedPeerHealth(connectedPeer);if("live"===health){state2.connectedPeerUnhealthySinceMs=null;return}if("stale"===health)clearConnectedPeer(state2);else{const nowMs=Date.now(),unhealthySinceMs=null!=(_a8=state2.connectedPeerUnhealthySinceMs)?_a8:nowMs;state2.connectedPeerUnhealthySinceMs=unhealthySinceMs;if(nowMs-unhealthySinceMs<7533)return;clearConnectedPeer(state2)}}let shared=ctx.sharedPeers.get(ctx.appId,peerId);if(shared&&"stale"===ctx.sharedPeers.getHealth(shared.peer)){ctx.sharedPeers.clear(ctx.appId,peerId,{destroyPeer:!0});shared=void 0}const isAnnouncement=Boolean(peerId&&!offer&&!answer&&!candidate);if(isAnnouncement&&!shared){const announcePeerState=getState(ctx.peerStates,peerId),shouldLeadOffer=selfId<peerId;if(announcePeerState.answeringPeer||announcePeerState.connectedPeer||announcePeerState.offerAnswered)return;if(!shouldLeadOffer&&!announcePeerState.offerPeer)return;if(announcePeerState.offerRelays[relayId])return;announcePeerState.offerRelays[relayId]="offer-placeholder";updateStatus(announcePeerState)}const[rootTopic,selfTopic]=await all([ctx.rootTopicP,ctx.selfTopicP]);if(!ctx.isLeaving())if(topic===rootTopic||topic===selfTopic){if(!shared||!(offer||answer||candidate))return isAnnouncement?handleAnnouncement(ctx,relayId,peerId,shared,signalPeer):offer?handleOffer(ctx,relayId,peerId,offer,offerId,hasOutgoingOfferHint,signalPeer):candidate?handleCandidate(ctx,peerId,candidate,offerId,peer):answer?handleAnswer(ctx,relayId,peerId,answer,offerId,peer):void 0;if(shared.bindings[ctx.roomId])return;ctx.attachSharedPeerToRoom(peerId,shared)}else isAnnouncement&&clearOfferRelayIfPlaceholder(ctx.peerStates[peerId],relayId)};announceWarmupIntervalsMs=[233,533,1333];strategy_default=({init:init3,subscribe:subscribe2,announce})=>{const occupiedRooms={},roomRegistrations={},roomIdsByToken={},roomPresenceHandlerCleanups={},sharedPeers=new SharedPeerManager,hasActiveRooms=()=>values(occupiedRooms).some(rooms=>keys(rooms).length>0),getRoomRegistrations=appId=>{var _a8;return null!=(_a8=roomRegistrations[appId])?_a8:roomRegistrations[appId]={}},getRoomIdsByToken=appId=>{var _a8;return null!=(_a8=roomIdsByToken[appId])?_a8:roomIdsByToken[appId]={}},advertiseRoomPresence=(shared,roomToken,isPresent)=>{"live"===sharedPeers.getHealth(shared.peer)&&sharedPeers.sendRoomPresence(shared,roomToken,isPresent)},advertiseKnownRoomsToShared=(appId,shared)=>{var _a8;entries(null!=(_a8=roomRegistrations[appId])?_a8:{}).forEach(([roomId,registration])=>{const{roomToken,roomTokenPromise}=registration;roomToken?advertiseRoomPresence(shared,roomToken,!0):roomTokenPromise.then(token=>{var _a9;(null==(_a9=roomRegistrations[appId])?void 0:_a9[roomId])===registration&&registration.roomToken===token&&(sharedPeers.get(appId,shared.peerId)!==shared||shared.isClosing||advertiseRoomPresence(shared,token,!0))})})},advertiseRoomPresenceToAll=(appId,roomToken,isPresent)=>values(sharedPeers.getMap(appId)).forEach(shared=>advertiseRoomPresence(shared,roomToken,isPresent)),ensureRoomPresenceHandler=appId=>{roomPresenceHandlerCleanups[appId]||(roomPresenceHandlerCleanups[appId]=sharedPeers.setRoomPresenceHandler(appId,(peerId,roomToken,isPresent)=>{var _a8,_b5,_c3;if(!isPresent)return;const shared=sharedPeers.get(appId,peerId),roomId=null==(_a8=roomIdsByToken[appId])?void 0:_a8[roomToken];shared&&roomId&&(null==(_c3=null==(_b5=roomRegistrations[appId])?void 0:_b5[roomId])||_c3.attachSharedPeerToRoom(peerId,shared))}))},cleanupRoomPresenceHandler=appId=>{var _a8;if(!(occupiedRooms[appId]&&keys(occupiedRooms[appId]).length>0)){null==(_a8=roomPresenceHandlerCleanups[appId])||_a8.call(roomPresenceHandlerCleanups);delete roomPresenceHandlerCleanups[appId];delete roomRegistrations[appId];delete roomIdsByToken[appId]}};let didInit=!1,initPromises=[],offerPool=null,cleanupWatchOnline=noOp;return(config,roomId,callbacks)=>{var _a8,_b5,_c3,_d2;if(!config)throw mkErr("requires a config map as the first argument");if(callbacks&&"object"!=typeof callbacks)throw mkErr("third argument must be a callbacks object");const{appId}=config,onJoinError=null==callbacks?void 0:callbacks.onJoinError,onPeerHandshake=null==callbacks?void 0:callbacks.onPeerHandshake,handshakeTimeoutMs=null==callbacks?void 0:callbacks.handshakeTimeoutMs;if(!appId)throw mkErr("config map is missing appId field");if(!roomId)throw mkErr("roomId argument required");if(void 0!==handshakeTimeoutMs&&(!Number.isFinite(handshakeTimeoutMs)||handshakeTimeoutMs<=0))throw mkErr("handshakeTimeoutMs must be a positive number");if(null==(_a8=occupiedRooms[appId])?void 0:_a8[roomId])return occupiedRooms[appId][roomId];ensureRoomPresenceHandler(appId);const rootTopicPlaintext=topicPath(libName,appId,roomId),rootTopicP=sha1(rootTopicPlaintext),selfTopicP=sha1(topicPath(rootTopicPlaintext,selfId)),key3=genKey(null!=(_b5=config.password)?_b5:"",appId,roomId),roomNamespacePromise=deriveRoomNamespace(appId,roomId),sharedPeerIdleMs=null!=(_c3=config._test_only_sharedPeerIdleMs)?_c3:123333;let didLeaveRoom=!1;const withKey=f4=>async signal=>({type:signal.type,sdp:await f4(key3,signal.sdp)}),toPlain=withKey(decrypt),toCipher=withKey(encrypt),sharedPeerMap=sharedPeers.getMap(appId);offerPool||(offerPool=new OfferPool(()=>peer_default(!0,config)));const pool2=offerPool,encryptOffer=async peer=>{const plainOffer=await peer.getOffer(Date.now()-peer.created>57333);if(!plainOffer||"offer"!==plainOffer.type)throw mkErr("failed to get offer for peer");return(await toCipher(plainOffer)).sdp},attachSharedPeerToRoom=(peerId,shared)=>{const state2=getState(ctx.peerStates,peerId);state2.answeringExpiryTimer=resetTimer(state2.answeringExpiryTimer);state2.answeringPeer=null;const{proxy:proxy2,isNew}=sharedPeers.bind(roomId,roomNamespacePromise,shared,{onDetach:()=>{const current=ctx.peerStates[peerId];if((null==current?void 0:current.connectedPeer)===shared.peer){current.connectedPeer=null;current.connectedPeerUnhealthySinceMs=null;updateStatus(current)}}});state2.connectedPeer=shared.peer;state2.connectedPeerUnhealthySinceMs=null;updateStatus(state2);isNew&&onPeerConnect(proxy2,peerId);resetOfferState(state2,pool2)},ctx={appId,roomId,config,peerStates:{},rootTopicPlaintext,rootTopicP,selfTopicP,toPlain,toCipher,isLeaving:()=>didLeaveRoom,onJoinError,sharedPeers,offerPool:pool2,encryptOffer,initPeer:peer_default,connectPeer:(peer,peerId,_relayId)=>{if(didLeaveRoom){peer.destroy();return}const state2=getState(ctx.peerStates,peerId);if(state2.connectedPeer){const shared2=sharedPeerMap[peerId];if(shared2&&state2.connectedPeer===shared2.peer&&shared2.bindings[roomId])return;state2.connectedPeer===peer||peer.isDead||peer.destroy();return}let shared=sharedPeerMap[peerId];if(shared&&"stale"===sharedPeers.getHealth(shared.peer)){sharedPeers.clear(appId,peerId,{destroyPeer:!0});shared=void 0}if(shared&&shared.peer!==peer){peer.isDead||peer.destroy();attachSharedPeerToRoom(peerId,shared);return}const isNewShared=!shared;shared||(shared=sharedPeers.register(appId,peerId,peer,sharedPeerIdleMs));attachSharedPeerToRoom(peerId,shared);isNewShared&&advertiseKnownRoomsToShared(appId,shared)},disconnectPeer:(peer,peerId)=>{if(didLeaveRoom)return;const state2=ctx.peerStates[peerId];(null==state2?void 0:state2.connectedPeer)===peer&&clearConnectedPeer(state2)},attachSharedPeerToRoom,announceIntervals:[],announceIntervalMs:5333},handleMessage=createSignalHandler(ctx);if(!didInit){const initRes=init3(config);pool2.warmup();initPromises=(Array.isArray(initRes)?initRes:[initRes]).map(value=>Promise.resolve(value));didInit=!0;cleanupWatchOnline=config.manualRelayReconnection?noOp:watchOnline()}ctx.announceIntervals=initPromises.map(()=>5333);const announceAttemptCounts=initPromises.map(()=>0),announceTimeouts=[],unsubFns=initPromises.map(async(relayP,i2)=>subscribe2(await relayP,await rootTopicP,await selfTopicP,handleMessage(i2),n3=>pool2.getOffers(n3,encryptOffer)));all([rootTopicP,selfTopicP]).then(([rootTopic,selfTopic])=>{if(didLeaveRoom)return;const queueAnnounce=async(relay,i2)=>{var _a9,_b6;if(didLeaveRoom)return;const ms=await announce(relay,rootTopic,selfTopic);if(didLeaveRoom)return;"number"==typeof ms&&(ctx.announceIntervals[i2]=ms);const announceAttempt=null!=(_a9=announceAttemptCounts[i2])?_a9:0;announceAttemptCounts[i2]=announceAttempt+1;const currentInterval=null!=(_b6=ctx.announceIntervals[i2])?_b6:5333,warmupDelay=announceWarmupIntervalsMs[announceAttempt],nextAnnounceDelayMs="number"==typeof warmupDelay?Math.min(currentInterval,warmupDelay):currentInterval;announceTimeouts[i2]=setTimeout(()=>{queueAnnounce(relay,i2)},nextAnnounceDelayMs)};unsubFns.forEach(async(didSub,i2)=>{await didSub;if(didLeaveRoom)return;const relay=await initPromises[i2];relay&&!didLeaveRoom&&queueAnnounce(relay,i2)})});let onPeerConnect=noOp;const{compose}=createPasswordHandshake(null!=(_d2=config.password)?_d2:"",appId,roomId),composedPeerHandshake=compose(onPeerHandshake),roomOptions={...composedPeerHandshake?{onPeerHandshake:composedPeerHandshake}:{},...void 0===handshakeTimeoutMs?{}:{handshakeTimeoutMs},onHandshakeError:(peerId,error)=>null==onJoinError?void 0:onJoinError({error:error.replace(/^handshake failed: /,""),appId,peerId,roomId})};null!=occupiedRooms[appId]||(occupiedRooms[appId]={});const appRoomRegistrations=getRoomRegistrations(appId),joinedRoom=room_default(f4=>onPeerConnect=f4,id=>{if(didLeaveRoom)return;const state2=ctx.peerStates[id];if(null==state2?void 0:state2.connectedPeer){state2.connectedPeer=null;updateStatus(state2)}},()=>{var _a9,_b6;didLeaveRoom=!0;onPeerConnect=noOp;const registration=null==(_a9=roomRegistrations[appId])?void 0:_a9[roomId];if(null==registration?void 0:registration.roomToken){advertiseRoomPresenceToAll(appId,registration.roomToken,!1);null==(_b6=roomIdsByToken[appId])||delete _b6[registration.roomToken];roomIdsByToken[appId]&&!keys(roomIdsByToken[appId]).length&&delete roomIdsByToken[appId]}if(roomRegistrations[appId]){delete roomRegistrations[appId][roomId];keys(roomRegistrations[appId]).length||delete roomRegistrations[appId]}entries(ctx.peerStates).forEach(([peerId,state2])=>{state2.answeringExpiryTimer=resetTimer(state2.answeringExpiryTimer);if(state2.connectedPeer&&!state2.connectedPeer.isDead){const shared=sharedPeerMap[peerId];shared&&shared.peer===state2.connectedPeer||state2.connectedPeer.destroy()}state2.answeringPeer&&!state2.answeringPeer.isDead&&state2.answeringPeer.destroy();resetOfferState(state2,pool2);state2.connectedPeer=null;state2.answeringPeer=null;updateStatus(state2)});if(occupiedRooms[appId]){delete occupiedRooms[appId][roomId];0===keys(occupiedRooms[appId]).length&&delete occupiedRooms[appId]}announceTimeouts.forEach(resetTimer);unsubFns.forEach(async f4=>{(await f4)()});if(!hasActiveRooms()){didInit=!1;pool2.destroy();offerPool=null;cleanupWatchOnline();cleanupRoomPresenceHandler(appId)}},roomOptions),roomRegistration={roomToken:null,roomTokenPromise:roomNamespacePromise,attachSharedPeerToRoom};appRoomRegistrations[roomId]=roomRegistration;roomNamespacePromise.then(roomToken=>{var _a9;if(!didLeaveRoom&&(null==(_a9=roomRegistrations[appId])?void 0:_a9[roomId])===roomRegistration){roomRegistration.roomToken=roomToken;getRoomIdsByToken(appId)[roomToken]=roomId;values(sharedPeerMap).forEach(shared=>{shared.remoteRoomTokens.has(roomToken)&&attachSharedPeerToRoom(shared.peerId,shared)});advertiseRoomPresenceToAll(appId,roomToken,!0)}});return occupiedRooms[appId][roomId]=joinedRoom}};relayManager=createRelayManager(client=>client.socket);var{secretKey,publicKey}=schnorr.keygen();pubkey=toHex(publicKey);subIdToTopic={};msgHandlers={};kindCache={};now2=()=>Math.floor(Date.now()/1e3);topicToKind=topic=>{var _a8;return null!=(_a8=kindCache[topic])?_a8:kindCache[topic]=strToNum(topic,1e4)+2e4};createEvent=async(topic,content)=>{const payload={kind:topicToKind(topic),tags:[["x",topic]],created_at:now2(),content,pubkey},id=await hashWith("SHA-256",toJson([0,payload.pubkey,payload.created_at,payload.kind,payload.tags,payload.content]));return toJson(["EVENT",{...payload,id:toHex(id),sig:toHex(await schnorr.signAsync(id,secretKey))}])};subscribe=(subId,topic)=>{subIdToTopic[subId]=topic;return toJson(["REQ",subId,{kinds:[topicToKind(topic)],since:now2(),["#x"]:[topic]}])};unsubscribe=subId=>{delete subIdToTopic[subId];return toJson(["CLOSE",subId])};joinRoom=strategy_default({init:config=>getRelays(config,defaultRelayUrls,5,!0).map(url=>{const client=relayManager.register(url,makeSocket(url,data=>{var _a8,_b5;const[msgType,subId,payload,relayMsg]=fromJson(data);if("EVENT"!==msgType){const prefix=`${libName}: relay failure from ${client.url} - `;"NOTICE"===msgType?console.warn(prefix+subId):"OK"!==msgType||payload||console.warn(prefix+relayMsg);return}payload&&"object"==typeof payload&&"content"in payload&&(null==(_b5=msgHandlers[subId])||_b5.call(msgHandlers,null!=(_a8=subIdToTopic[subId])?_a8:"",String(payload.content)))}));return client.ready}),subscribe:(client,rootTopic,selfTopic,onMessage)=>{const rootSubId=genId(64),selfSubId=genId(64);msgHandlers[rootSubId]=msgHandlers[selfSubId]=(topic,data)=>{onMessage(topic,data,async(peerTopic,signal)=>{client.send(await createEvent(peerTopic,signal))})};client.send(subscribe(rootSubId,rootTopic));client.send(subscribe(selfSubId,selfTopic));return()=>{client.send(unsubscribe(rootSubId));client.send(unsubscribe(selfSubId));delete msgHandlers[rootSubId];delete msgHandlers[selfSubId]}},announce:async(client,rootTopic)=>client.send(await createEvent(rootTopic,toJson({peerId:selfId})))});getRelaySockets=relayManager.getSockets;defaultRelayUrls=["aaa-api.freefrom.space/v1/ws","antiprimal.net/hot","api.freefrom.space/v1/ws","bagus.my/nostrrelay/0","basspistol.org","bcast.seutoba.com.br","bucket.coracle.social","chorus.almostmachines.dev","chorus.pjv.me","communities.nos.social","freelay.sovbit.host","ftp.halifax.rwth-aachen.de/nostr","hol.is","hornetstorage.net/relay","inbox.mycelium.social","inner.sebastix.social","kanagrovv-pyramid.kozow.com","khatru.nostrver.se","koru.bitcointxoko.org","librerelay.aaroniumii.com","nos.lol","nostr-01.uid.ovh","nostr-01.yakihonne.com","nostr-03.dorafactory.org","nostr-relay.corb.net","nostr.data.haus","nostr.islandarea.net","nostr.klabo.world","nostr.l484.com","nostr.red5d.dev","nostr.robosats.org","nostr.sathoarder.com","nostr.self-determined.de","nostr.tac.lol","nostr.tegila.com.br","nostr.vulpem.com","nostrue.com","orly.musiquay.org","payments.u4er.net/nostr","purplerelay.com","relay-can.zombi.cloudrodion.com","relay-rpi.edufeed.org","relay.agorist.space","relay.angor.io","relay.artio.inf.unibe.ch","relay.binaryrobot.com","relay.bitcoindistrict.org","relay.damus.io","relay.degmods.com","relay.fountain.fm","relay.froth.zone","relay.guggero.org","relay.kcbitcoiners.com","relay.libernet.app","relay.lnau.net","relay.lumina.rocks","relay.mostr.pub","relay.mostro.network","relay.nosto.re","relay.nostr.place","relay.nostrdice.com","relay.notoshi.win","relay.nuts.cash","relay.orangepill.ovh","relay.satlantis.io","relay.sigit.io","relay.toastr.net","relay02.lnfi.network","relay2.angor.io","santo.iguanatech.net","schnorr.me","slick.mjex.me","social.amanah.eblessing.co","staging.yabu.me","strfry.openhoofd.nl","strfry.shock.network","talon.quest","testing.gathr.gives","testnet-relay.samt.st","top.testrelay.top","x.kojira.io","yabu.me/v2"].map(url=>"wss://"+url);ResponsePreventedError=class extends Error{constructor(message){super(`Response prevented: ${message}`)}};DeviceDecisions=(DeviceDecisions2=>{DeviceDecisions2.ACCEPT="accepted";DeviceDecisions2.REJECT="rejected";DeviceDecisions2.IGNORE="ignore";return DeviceDecisions2})(DeviceDecisions||{});StoredMapLike=class{constructor(store,prefix=""){this._cache=new Map;this._prefix="";this._store=store}addPrefix(key3){return`${this._prefix}-${key3}`}async get(key3){if(this._cache.has(key3))return this._cache.get(key3);const value=await this._store.get(this.addPrefix(key3));void 0!==value&&this._cache.set(key3,value);return value}async set(key3,value){try{const ret=await this._store.set(this.addPrefix(key3),value);this._cache.set(key3,value);return ret}catch(e3){this._cache.delete(key3);throw e3}}async delete(key3){try{const ret=await this._store.delete(this.addPrefix(key3));this._cache.delete(key3);return ret}catch(e3){this._cache.delete(key3);throw e3}}async has(key3){return!!this._cache.has(key3)||(await this._store.keys(this.addPrefix(key3),key3)).length>0}};TrysteroReplicatorP2PClient=class{constructor(server,connectedPeerId){this._prevSeq=0;this.waitingInvocations=new Map;this.invocationTimeouts=new Map;this._server=server;this._connectedPeerId=connectedPeerId;this._remoteDB=this._bindRemoteDB()}get remoteDB(){return this._remoteDB}_bindRemoteDB(){return{info:this.bindRemoteFunction("info"),changes:this.bindRemoteFunction("changes"),revsDiff:this.bindRemoteFunction("revsDiff"),bulkDocs:this.bindRemoteFunction("bulkDocs"),bulkGet:this.bindRemoteFunction("bulkGet",4e4),put:this.bindRemoteFunction("put"),get:this.bindRemoteFunction("get")}}get __send(){var _a8;return null==(_a8=this._server)?void 0:_a8.__send.bind(this._server)}generateNewSeq(){const seq=Math.floor(115*Math.random())+1+this._prevSeq;if(!this.waitingInvocations.has(seq)){this._prevSeq=seq%~~(Number.MAX_SAFE_INTEGER/2);return seq}return this.generateNewSeq()}_sendRPC(type,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");const seq=this.generateNewSeq(),p2=promiseWithResolver();this.waitingInvocations.set(seq,p2);const request2={type,direction:"request",seq,args};timeout&&timeout>0&&this.invocationTimeouts.set(seq,setTimeout(()=>{if(this.waitingInvocations.has(seq)){this.waitingInvocations.delete(seq);p2.reject(new Error(`Invocation Timed out: ${type} (${seq}) (Timeout: ${timeout}ms)`))}this.invocationTimeouts.delete(seq)},timeout));this.__send(request2,this._connectedPeerId);return p2.promise}__onResponse(data){const seq=data.seq,type=data.type;if(this.invocationTimeouts.has(seq)){clearTimeout(this.invocationTimeouts.get(seq));this.invocationTimeouts.delete(seq)}const p2=this.waitingInvocations.get(seq);if(p2){this.waitingInvocations.delete(seq);if(data.error){p2.reject(data.error);Logger(`Invoking remote function [ DONE] : ${type} (${seq}) : (Error)`,LOG_LEVEL_VERBOSE)}else p2.resolve(data.data)}else Logger(`Invoking remote function [ERROR] : ${type} (${seq}) : No Handler left. Possibly timed out`,LOG_LEVEL_VERBOSE)}bindRemoteFunction(type,timeout=3e4){return async(...args)=>{if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(type,args,timeout)}}async invokeRemoteFunction(type,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(type,args,timeout)}bindRemoteObjectFunctions(key3,timeout=3e4){return async(...args)=>{if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(`${key3.toString()}`,args,timeout)}}async invokeRemoteObjectFunction(key3,args,timeout=3e4){if(!this.__send)throw new Error("Not connected to any room");return await this._sendRPC(`${key3.toString()}`,args,timeout)}close(){this._remoteDB=void 0;this._server=void 0}};epochFNV1a=2166136261;c1=3432918353;c2=461845907;r1=15;r2=13;m=5;n=3864292196;new TextEncoder;Computed=class{constructor(params){Object.defineProperty(this,"_previousArgs",{enumerable:!0,configurable:!0,writable:!0,value:null});Object.defineProperty(this,"_previousResult",{enumerable:!0,configurable:!0,writable:!0,value:null});Object.defineProperty(this,"_evaluation",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_isEqual",{enumerable:!0,configurable:!0,writable:!0,value:(a2,b3)=>this._areArgsEqual(a2,b3)});Object.defineProperty(this,"_shouldForceUpdate",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_updating",{enumerable:!0,configurable:!0,writable:!0,value:Promise.resolve()});this._evaluation=params.evaluation;this._shouldForceUpdate=params.requiresUpdate||(()=>!1);params.isEqual&&(this._isEqual=params.isEqual)}updateValue(...args){return new Promise((resolve,reject)=>{this._updating=this._updating.then(async()=>{try{if(!await this._shouldForceUpdate(args,this._previousArgs,this._previousResult)&&this._previousArgs&&this._isEqual(args,this._previousArgs))return resolve(!1);try{this._previousResult=await this._evaluation(...args)}catch(error){const err3=error instanceof Error?error:new Error(String(error));this._previousResult=err3}finally{this._previousArgs=args}return resolve(!0)}catch(error){return reject(error)}})})}reset(){this._previousArgs=null;this._previousResult=null}async update(...args){await this.updateValue(...args);return this}get value(){if(this._previousResult instanceof Error)throw this._previousResult;return this._previousResult}_areArgsEqual(args1,args2){return JSON.stringify(args1)===JSON.stringify(args2)}};EVENT_SERVER_STATUS="p2p-server-status";EVENT_ADVERTISEMENT_RECEIVED="p2p-advertisement-received";EVENT_DEVICE_LEAVED="p2p-device-leaved";EVENT_REQUEST_STATUS="p2p-request-status";EVENT_P2P_REPLICATOR_STATUS="p2p-replicator-status";TrysteroReplicatorP2PServer=class{constructor(env,_serverPeerId=selfId){this.assignedFunctions=new Map;this.clients=new Map;this._bindingObjects=[];this._knownAdvertisements=new Map;this.temporaryAcceptedPeers=new Map;this._acceptablePeers=new Computed({evaluation:settings=>{var _a8;return`${null!=(_a8=null==settings?void 0:settings.P2P_AutoAcceptingPeers)?_a8:""}`.split(",").map(e3=>e3.trim()).filter(e3=>!!e3).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}});this._shouldDenyPeers=new Computed({evaluation:settings=>{var _a8;return`${null!=(_a8=null==settings?void 0:settings.P2P_AutoDenyingPeers)?_a8:""}`.split(",").map(e3=>e3.trim()).filter(e3=>!!e3).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}});this.activePeer=new Map;this._env=env;this._serverPeerId=_serverPeerId;eventHub.onEvent(EVENT_PLATFORM_UNLOADED,()=>{this.shutdown()});this.acceptedPeers=new StoredMapLike(this._env.simpleStore,"p2p-device-decisions")}get isDisposed(){return!this._room}get isServing(){return void 0!==this._room}async ensureLeaved(){var _a8;if(this._room){try{await(null==(_a8=this._room)?void 0:_a8.leave())}catch(ex){Logger("Some error has been occurred while leaving the room, but possibly can be ignored",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE)}this._room=void 0;eventHub.emitEvent("p2p-disconnected")}}async setRoom(room){var _a8;await(null==(_a8=this._room)?void 0:_a8.leave());this._room=room}async shutdown(){try{await this.close();await this.ensureLeaved()}catch(ex){Logger("Some error has been occurred while shutting down the server",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE)}}async dispatchConnectionStatus(){const adsTasks=[...this.knownAdvertisements].map(async e3=>{const isAccepted2=await this.acceptedPeers.get(e3.name),isTemporaryAccepted=this.temporaryAcceptedPeers.get(e3.peerId);return{...e3,isAccepted:isAccepted2,isTemporaryAccepted}}),ads=await Promise.all(adsTasks);eventHub.emitEvent(EVENT_SERVER_STATUS,{isConnected:this.isServing,knownAdvertisements:ads,serverPeerId:this.serverPeerId})}async makeDecision(decision){decision.decision?decision.isTemporary?this.temporaryAcceptedPeers.set(decision.peerId,!0):await this.acceptedPeers.set(decision.name,!0):decision.isTemporary?this.temporaryAcceptedPeers.set(decision.peerId,!1):await this.acceptedPeers.set(decision.name,!1);await this.dispatchConnectionStatus()}async revokeDecision(decision){this.temporaryAcceptedPeers.delete(decision.peerId);await this.acceptedPeers.delete(decision.name);await this.dispatchConnectionStatus()}get room(){return this._room}get serverPeerId(){return this._serverPeerId}get db(){return this._env.db}get confirm(){return this._env.confirm}get settings(){return this._env.settings}get isEnabled(){return this.settings.P2P_Enabled}get deviceInfo(){return{currentPeerId:this._serverPeerId,name:this._env.deviceName,platform:this._env.platform,version:"0.0.0"}}sendAdvertisement(peerId){if(!this.isEnabled)return;const devInfo=this.deviceInfo,data={peerId:devInfo.currentPeerId,name:devInfo.name,platform:devInfo.platform};if(this._sendAdvertisement){Logger(`peerId: ${this.serverPeerId} Sending Advertisement to ${null!=peerId?peerId:"All"}`,LOG_LEVEL_VERBOSE);this._sendAdvertisement(data,peerId)}}get knownAdvertisements(){return[...this._knownAdvertisements.values()]}onAdvertisement(data,peerId){if(this.isEnabled){Logger(`Advertisement from ${peerId}`,LOG_LEVEL_VERBOSE);if(peerId!==this.serverPeerId&&data.peerId!==this.serverPeerId&&data.name!==this.deviceInfo.name&&data.peerId===peerId){this._knownAdvertisements.set(peerId,data);this.dispatchConnectionStatus();eventHub.emitEvent(EVENT_ADVERTISEMENT_RECEIVED,data)}}}confirmUserToAccept(peerId){return shareRunningResult(`confirmUserToAccept-${peerId}`,()=>this._confirmUserToAccept(peerId))}_confirmUserToAccept(peerId){const peerInfo=this._knownAdvertisements.get(peerId);if(!peerInfo)throw new Error("Unknown Peer");const peerName=peerInfo.name,message=`Are you sure to establish connection to ${peerName} (${peerId})?\nYou can chose as follows:\n- Accept: Accept all connections from this peer.\n- Ignore: Reject all connections from this peer.\n- Accept Temporarily: Accept the connection for this session only.\n- Ignore Temporarily: Reject the connection for this session only.\n\n>[!INFO] You can revoke your decision from the Peer-to-Peer Replicator Pane.`;return this.confirm.askSelectStringDialogue(message,["Accept","Ignore","Accept Temporarily","Ignore Temporarily"],{title:"P2P Connection Request",defaultAction:"Ignore Temporarily",timeout:30}).then(decision=>{if("Accept Temporarily"===decision){this.temporaryAcceptedPeers.set(peerId,!0);this.dispatchConnectionStatus();return!0}if("Ignore Temporarily"===decision){this.temporaryAcceptedPeers.set(peerId,!1);this.dispatchConnectionStatus();return!1}if("Accept"===decision){this.temporaryAcceptedPeers.delete(peerId);this.acceptedPeers.set(peerName,!0);this.dispatchConnectionStatus();return!0}if("Ignore"===decision){this.temporaryAcceptedPeers.delete(peerId);this.acceptedPeers.set(peerName,!1);this.dispatchConnectionStatus();return!1}throw new ResponsePreventedError("User Accepting failed")})}async isAcceptablePeer(peerId){if(!this.isEnabled)return;const peerInfo=this._knownAdvertisements.get(peerId);if(!peerInfo)return!1;const peerName=peerInfo.name;if(this.temporaryAcceptedPeers.has(peerId))return this.temporaryAcceptedPeers.get(peerId);const accepted=await this.acceptedPeers.get(peerName);if(null!=accepted)return accepted;const isAcceptable=(await this._acceptablePeers.update(this.settings)).value.some(e3=>e3.test(peerName)),isDeny=(await this._shouldDenyPeers.update(this.settings)).value.some(e3=>e3.test(peerName));if(isAcceptable){if(isDeny)return!1;this.temporaryAcceptedPeers.set(peerId,!0);this.dispatchConnectionStatus();return!0}return!this.settings.P2P_IsHeadless&&await this.confirmUserToAccept(peerId)}async __send(data,peerId){if(this.isEnabled)if(await this.isAcceptablePeer(peerId)){if(this.___send)return await this.___send(data,peerId);Logger("Cannot send response, no send function")}else{Logger(`Invalid Message to ${peerId}`,LOG_LEVEL_VERBOSE);Logger(data,LOG_LEVEL_VERBOSE)}}async processArrivedRPC(data,peerId){if(this.isEnabled){if(!data.type.startsWith("!")&&!await this.isAcceptablePeer(peerId))throw new Error(`Not acceptable peer ${peerId}`);if("response"===data.direction)this.__onResponse(data,peerId);else{if("request"!==data.direction)throw new Error(`Invalid Message from ${peerId}`);await this.__onRequest(data,peerId)}}}onAfterJoinRoom(){Logger("Initializing...",LOG_LEVEL_VERBOSE);const room=this.room;if(!room)throw new Error("This server has been already disconnected");const[send,arrived]=room.makeAction("rpc");this.___send=send;arrived((data,peerId)=>{this.processArrivedRPC(data,peerId).catch(e3=>{Logger(e3.message,LOG_LEVEL_INFO);Logger(e3,LOG_LEVEL_VERBOSE)})});const[adSend,adArrived]=room.makeAction("ad");this._sendAdvertisement=adSend;adArrived((data,peerId)=>{this.onAdvertisement(data,peerId)});room.onPeerJoin(peerId=>{const peer=room.getPeers()[peerId];this.activePeer.set(peerId,peer);this.sendAdvertisement(peerId)});room.onPeerLeave(peerId=>{this._knownAdvertisements.delete(peerId);const peerConn=this.activePeer.get(peerId);if(peerConn){peerConn.close();this.activePeer.delete(peerId)}eventHub.emitEvent(EVENT_DEVICE_LEAVED,peerId);this.dispatchConnectionStatus()});eventHub.emitEvent("p2p-connected");this.dispatchConnectionStatus()}async startService(bindings=[]){if(!this.isEnabled){Logger($msg("P2P.NotEnabled"),LOG_LEVEL_NOTICE);return}const servingDB=createHostingDB(this._env);this._bindingObjects=[...bindings,servingDB];this._bindingObjects.forEach(b3=>{this.serveObject(b3)});await this.sendAdvertisement()}async start(bindings=[]){const passphraseNumbers=mixedHash(this.settings.P2P_passphrase,0),passphrase=passphraseNumbers[0].toString(36)+passphraseNumbers[1].toString(36);await this.shutdown();if(!this.settings.P2P_Enabled){Logger($msg("P2P.NotEnabled"),LOG_LEVEL_NOTICE);return}const relays=this.settings.P2P_relays.split(",").filter(e3=>e3.trim().length>0),turnServers=this.settings.P2P_turnServers.split(",").map(e3=>e3.trim()).filter(e3=>e3.length>0),rtcPolyfill=globalThis.RTCPeerConnection,options={relayUrls:relays,appId:this.settings.P2P_AppID,password:passphrase,manualRelayReconnection:!0,..."function"==typeof rtcPolyfill?{rtcPolyfill}:{},turnConfig:turnServers.length>0?[{urls:turnServers,username:this.settings.P2P_turnUsername,credential:this.settings.P2P_turnCredential}]:[]},room=joinRoom(options,this.settings.P2P_roomID);await this.setRoom(room);this.onAfterJoinRoom();this.dispatchConnectionStatus();await this.startService(bindings)}serveFunction(type,func){this.assignedFunctions.set(type,func)}serveObject(obj){Object.keys(obj).forEach(key3=>{if(key3.toString().startsWith("_"))return;const func=obj[key3].bind(obj);this.assignedFunctions.set(key3.toString(),func)})}__onResponse(data,peerId){const peer=this.clients.get(peerId);peer?peer.__onResponse(data):Logger(`Response from unknown peer ${peerId}`,LOG_LEVEL_VERBOSE)}async __onRequest(data,peerId){try{const func=this.assignedFunctions.get(data.type);if("function"!=typeof func)throw new Error(`Cannot serve function ${data.type}, no function provided or I am only a client`);const r4=await Promise.resolve(func.apply(this,data.args));await this.__send({type:data.type,seq:data.seq,direction:"response",data:r4},peerId)}catch(e3){if(e3 instanceof ResponsePreventedError){Logger(`Serving function: [FAILED] ${data.type}: Response prevented.`,LOG_LEVEL_VERBOSE);return}Logger(`Serving function: [FAILED] ${data.type} sending back the failure information`,LOG_LEVEL_VERBOSE);Logger(e3 instanceof Error?e3.message:e3,LOG_LEVEL_VERBOSE);await this.__send({type:data.type,seq:data.seq,direction:"response",data:void 0,error:e3},peerId)}}async close(){var _a8,_b5;this.assignedFunctions.clear();const peers=null!=(_b5=null==(_a8=this.room)?void 0:_a8.getPeers())?_b5:{};this.clients.forEach(client=>client.close());this.clients.clear();for(const[,peer]of Object.entries(peers))peer.close();await this.ensureLeaved();this._knownAdvertisements.clear();await this.dispatchConnectionStatus()}getConnection(peerId){if(this.clients.has(peerId))return this.clients.get(peerId);if(!this._knownAdvertisements.has(peerId))throw new Error(`Unknown Peer ${peerId}`);const client=new TrysteroReplicatorP2PClient(this,peerId);this.clients.set(peerId,client);return client}};P2PLogCollector=class{constructor(){this.p2pReplicationResult=new Map;this.p2pReplicationLine=reactiveSource("");eventHub.onEvent(EVENT_ADVERTISEMENT_RECEIVED,data=>{this.p2pReplicationResult.set(data.peerId,{peerId:data.peerId,peerName:data.name,fetching:{current:0,max:0,isActive:!1},sending:{current:0,max:0,isActive:!1}});this.updateP2PReplicationLine()});eventHub.onEvent("p2p-connected",()=>{this.p2pReplicationResult.clear();this.updateP2PReplicationLine()});eventHub.onEvent("p2p-disconnected",()=>{this.p2pReplicationResult.clear();this.updateP2PReplicationLine()});eventHub.onEvent(EVENT_DEVICE_LEAVED,peerId=>{this.p2pReplicationResult.delete(peerId);this.updateP2PReplicationLine()});eventHub.onEvent("p2p-replicator-progress",data=>{const prev=this.p2pReplicationResult.get(data.peerId)||{peerId:data.peerId,peerName:data.peerName,fetching:{current:0,max:0,isActive:!1},sending:{current:0,max:0,isActive:!1}};"fetching"in data&&(data.fetching.isActive?prev.fetching=data.fetching:prev.fetching.isActive=!1);"sending"in data&&(data.sending.isActive?prev.sending=data.sending:prev.sending.isActive=!1);this.p2pReplicationResult.set(data.peerId,prev);this.updateP2PReplicationLine()})}updateP2PReplicationLine(){const p2pReplicationResultX=[...this.p2pReplicationResult.values()].sort((a2,b3)=>a2.peerId.localeCompare(b3.peerId)),renderProgress=(current,max3)=>current==max3?`${current}`:`${current} (${max3})`,line=p2pReplicationResultX.map(e3=>`${e3.fetching.isActive||e3.sending.isActive?"⚡":"💤"} ${e3.peerName} ↑ ${renderProgress(e3.sending.current,e3.sending.max)} ↓ ${renderProgress(e3.fetching.current,e3.fetching.max)} `).join("\n");this.p2pReplicationLine.value=line}};LiveSyncError=class _LiveSyncError extends Error{constructor(message,options){super(message);this.name=this.constructor.name;(null==options?void 0:options.cause)&&(this.cause=options.cause instanceof Error?options.cause:new Error(`${options.cause}`));void 0!==(null==options?void 0:options.status)&&(this.overrideStatus=options.status)}get status(){return void 0!==this.overrideStatus?this.overrideStatus:this.cause&&"status"in this.cause?this.cause.status:500}static isCausedBy(error,errorClass){return!!error&&(error instanceof errorClass||!!error.cause&&_LiveSyncError.isCausedBy(error.cause,errorClass))}static fromError(error){if(error instanceof this)return error;const instance=new this(`${this.name}: ${null==error?void 0:error.message}`,{cause:error});(null==error?void 0:error.stack)?instance.stack=error.stack:instance.stack=(new Error).stack;return instance}};CHeader="h:";PSCHeader="ps:";ICHeaderLength=(ICHeader="i:").length;ICXHeader="ix:";PersistentMap=class{flush(){this._save()}_save(){localStorage.setItem(this._key,JSON.stringify([...this._map.entries()]))}_load(suppliedEntries=[]){var _a8;try{const savedSource=null!=(_a8=localStorage.getItem(this._key))?_a8:"",sourceToParse=""===savedSource?"[]":savedSource,obj=JSON.parse(sourceToParse);this._map=new Map([...obj,...suppliedEntries])}catch(ex){console.log(`Map read error : ${this._key}`);console.dir(ex);this._map=new Map([...suppliedEntries])}return Promise.resolve()}_queueSave(){this._setCount--;if(this._setCount<0){this._setCount=100;scheduleTask(`save-map-${this._key}`,0,()=>this._save())}scheduleTask(`save-map-${this._key}`,150,()=>this._save())}delete(key3){const ret=this._map.delete(key3);this._queueSave();return ret}has(key3){return this._map.has(key3)}set(key3,value){this._map.set(key3,value);this._queueSave();return this}clear(){this._map=new Map;this._save()}get(key3,defValue){const v2=this._map.get(key3);return void 0===v2?defValue:v2}constructor(key3,entries2){Object.defineProperty(this,"_setCount",{enumerable:!0,configurable:!0,writable:!0,value:100});Object.defineProperty(this,"_map",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_key",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._key=key3;this._map=new Map(null!=entries2?entries2:[]);this._load(entries2)}};BasicHeaderGenerator=class{constructor(){this._header=new Computed({evaluation:source2=>{if("username"in source2){const userNameAndPassword=source2.username&&source2.password?`${source2.username}:${source2.password}`:"";return`Basic ${btoa(userNameAndPassword)}`}return""}})}async getBasicHeader(auth){return(await this._header.update(auth)).value}};JWTTokenGenerator=class{constructor(){this._currentCryptoKey=new Computed({evaluation:async auth=>await this._importKey(auth)});this._jwt=new Computed({evaluation:async params=>{const buff=`${btoa(JSON.stringify(params.header))}.${btoa(JSON.stringify(params.payload))}`.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,""),key3=(await this._currentCryptoKey.update(params.credentials)).value;let token="";if("ES256"==params.header.alg||"ES512"==params.header.alg){const digestAlg="ES256"==params.header.alg?"SHA-256":"SHA-512",jwt=await crypto.subtle.sign({name:"ECDSA",hash:{name:digestAlg}},key3,writeString(buff));token=(await arrayBufferToBase64Single2(jwt)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}else{if("HS256"!=params.header.alg&&"HS512"!=params.header.alg)throw new Error("JWT algorithm is not supported.");{const jwt=await crypto.subtle.sign({name:"HMAC",hash:{name:params.header.alg}},key3,writeString(buff));token=(await arrayBufferToBase64Single2(jwt)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}}return{...params,token:`${buff}.${token}`}}});this._jwtParams=new Computed({evaluation(source2){const kid=source2.jwtKid||void 0;if(""==(source2.jwtSub||"").trim())throw new Error("JWT sub is empty");const algorithm=source2.jwtAlgorithm||"";if(!algorithm)throw new Error("JWT algorithm is not configured.");if("HS256"!=algorithm&&"HS512"!=algorithm&&"ES256"!=algorithm&&"ES512"!=algorithm)throw new Error("JWT algorithm is not supported.");const header={alg:source2.jwtAlgorithm||"HS256",typ:"JWT",kid},iat=~~((new Date).getTime()/1e3);return{header,payload:{exp:iat+60*(source2.jwtExpDuration||5),iat,sub:source2.jwtSub||"","_couchdb.roles":["_admin"]},credentials:source2}},requiresUpdate(args,previousArgs,previous){if(!previous||previous instanceof Error)return!0;const margin20p=.1*(previous.payload.exp-previous.payload.iat),margin=Math.min(10,Math.max(margin20p,60)),d4=~~((new Date).getTime()/1e3)+margin;return previous.payload.exp<d4}})}_importKey(auth){if("HS256"==auth.jwtAlgorithm||"HS512"==auth.jwtAlgorithm){const key3=(auth.jwtKey||"").trim();if(""==key3)throw new Error("JWT key is empty");const binaryDerString=window.atob(key3),binaryDer=new Uint8Array(binaryDerString.length);for(let i2=0;i2<binaryDerString.length;i2++)binaryDer[i2]=binaryDerString.charCodeAt(i2);const hashName="HS256"==auth.jwtAlgorithm?"SHA-256":"SHA-512";return crypto.subtle.importKey("raw",binaryDer,{name:"HMAC",hash:{name:hashName}},!0,["sign"])}if("ES256"==auth.jwtAlgorithm||"ES512"==auth.jwtAlgorithm){const pem=auth.jwtKey.replace(/-----BEGIN [^-]+-----/,"").replace(/-----END [^-]+-----/,"").replace(/\s+/g,""),binaryDerString=window.atob(pem),binaryDer=new Uint8Array(binaryDerString.length);for(let i2=0;i2<binaryDerString.length;i2++)binaryDer[i2]=binaryDerString.charCodeAt(i2);const param={name:"ECDSA",namedCurve:"ES256"==auth.jwtAlgorithm?"P-256":"P-521"};return crypto.subtle.importKey("pkcs8",binaryDer,param,!0,["sign"])}throw new Error("Supplied JWT algorithm is not supported.")}async getJWT(auth){const params=(await this._jwtParams.update(auth)).value;return(await this._jwt.update(params)).value}async getBearerToken(auth){return`Bearer ${(await this.getJWT(auth)).token}`}};AuthorizationHeaderGenerator=class{constructor(){this._basicHeader=new BasicHeaderGenerator;this._jwtHeader=new JWTTokenGenerator}async getAuthorizationHeader(auth){return"username"in auth?await this._basicHeader.getBasicHeader(auth):"jwtAlgorithm"in auth?await this._jwtHeader.getBearerToken(auth):""}};memos={};_requestToCouchDB=async(baseUri,credentials,origin2,path2,body,method,customHeaders)=>{const authHeaderGen=new AuthorizationHeaderGenerator,requestParam={url:`${baseUri}/${path2}`,method:method||(body?"PUT":"GET"),headers:{authorization:await authHeaderGen.getAuthorizationHeader(credentials),origin:origin2,...customHeaders},contentType:"application/json",body:body?JSON.stringify(body):void 0};return await(0,import_obsidian.requestUrl)(requestParam)};recentLogEntries=reactiveSource([]);(function setGlobalLogFunction(logger2){_logger=logger2})(globalLogFunction=(message,level,key3)=>{const entry={message:message instanceof Error?new LiveSyncError("[Error Logged]: "+message.message,{cause:message}):message,level,key:key3};recentLogEntries.value=[...recentLogEntries.value,entry]});recentLogs=[];ModuleLog=class extends AbstractObsidianModule{constructor(){super(...arguments);this.statusLog=reactiveSource("");this.activeFileStatus=reactiveSource("");this.notifies={};this.p2pLogCollector=new P2PLogCollector;this.nextFrameQueue=void 0;this.logLines=[]}observeForLogs(){function padLeftSpComputed(numI,mark){const formatted=reactiveSource("");let timer,maxLen=1;numI.onChanged(numX=>{const num=numX.value,numLen=`${Math.abs(num)}`.length+1;maxLen=maxLen<numLen?numLen:maxLen;timer&&clearTimeout(timer);0==num&&(timer=setTimeout(()=>{formatted.value="";maxLen=1},3e3));formatted.value=` ${mark}${`${padSpaces}${num}`.slice(-maxLen)}`});return computed(()=>formatted.value)}const padSpaces="".repeat(10),labelReplication=padLeftSpComputed(this.services.replication.replicationResultCount,"📥"),labelDBCount=padLeftSpComputed(this.services.replication.databaseQueueCount,"📄"),labelStorageCount=padLeftSpComputed(this.services.replication.storageApplyingCount,"💾"),labelChunkCount=padLeftSpComputed(collectingChunks,"🧩"),labelPluginScanCount=padLeftSpComputed(pluginScanningCount,"🔌"),labelConflictProcessCount=padLeftSpComputed(this.services.conflict.conflictProcessQueueCount,"🔩"),labelHiddenFilesCount=padLeftSpComputed(reactive(()=>hiddenFilesEventCount.value-hiddenFilesProcessingCount.value),"⚙️"),queueCountLabelX=reactive(()=>`${labelReplication()}${labelDBCount()}${labelStorageCount()}${labelChunkCount()}${labelPluginScanCount()}${labelHiddenFilesCount()}${labelConflictProcessCount()}`),queueCountLabel=()=>queueCountLabelX.value,requestingStatLabel=computed(()=>0!=this.services.API.requestCount.value-this.services.API.responseCount.value?"📲 ":""),replicationStatLabel=computed(()=>{const e3=this.services.replicator.replicationStatics.value,sent=e3.sent,arrived=e3.arrived,maxPullSeq=e3.maxPullSeq,maxPushSeq=e3.maxPushSeq,lastSyncPullSeq=e3.lastSyncPullSeq,lastSyncPushSeq=e3.lastSyncPushSeq;let pushLast="",pullLast="",w2="";const labels={CONNECTED:"⚡",JOURNAL_SEND:"📦↑",JOURNAL_RECEIVE:"📦↓"};switch(e3.syncStatus){case"CLOSED":case"COMPLETED":case"NOT_CONNECTED":w2="⏹";break;case"STARTED":w2="🌀";break;case"PAUSED":w2="💤";break;case"CONNECTED":case"JOURNAL_SEND":case"JOURNAL_RECEIVE":w2=labels[e3.syncStatus]||"⚡";pushLast=0==lastSyncPushSeq?"":lastSyncPushSeq>=maxPushSeq?" (LIVE)":` (${maxPushSeq-lastSyncPushSeq})`;pullLast=0==lastSyncPullSeq?"":lastSyncPullSeq>=maxPullSeq?" (LIVE)":` (${maxPullSeq-lastSyncPullSeq})`;break;case"ERRORED":w2="⚠";break;default:w2="?"}return{w:w2,sent,pushLast,arrived,pullLast}}),labelProc=padLeftSpComputed(this.services.fileProcessing.processing,"⏳"),labelPend=padLeftSpComputed(this.services.fileProcessing.totalQueued,"🛫"),labelInBatchDelay=padLeftSpComputed(this.services.fileProcessing.batched,"📬"),waitingLabel=computed(()=>`${labelProc()}${labelPend()}${labelInBatchDelay()}`),statusLineLabel=computed(()=>{const{w:w2,sent,pushLast,arrived,pullLast}=replicationStatLabel(),queued=queueCountLabel(),waiting=waitingLabel(),networkActivity=requestingStatLabel(),p2p=this.p2pLogCollector.p2pReplicationLine.value;return{message:`${networkActivity}Sync: ${w2} ↑ ${sent}${pushLast} ↓ ${arrived}${pullLast}${waiting}${queued}${""==p2p?"":"\n"+p2p}`}}),statusBarLabels=reactive(()=>{const scheduleMessage=this.services.appLifecycle.isReloadingScheduled()?"WARNING! RESTARTING OBSIDIAN IS SCHEDULED!\n":"",{message}=statusLineLabel(),fileStatus=this.activeFileStatus.value,status=scheduleMessage+this.statusLog.value;return{message:`${message}${fileStatus&&this.settings.hideFileWarningNotice?" ⛔ SKIP":""}`,status}});this.statusBarLabels=statusBarLabels;const applyToDisplay=throttle(label2=>{this.applyStatusBarText()},20);statusBarLabels.onChanged(label2=>applyToDisplay(label2.value));this.activeFileStatus.onChanged(()=>this.updateMessageArea())}_everyOnload(){eventHub.onEvent("leaf-active-changed",()=>this.onActiveLeafChange());eventHub.onceEvent(EVENT_LAYOUT_READY,()=>this.onActiveLeafChange());eventHub.onEvent(EVENT_ON_UNRESOLVED_ERROR,()=>this.updateMessageArea());return Promise.resolve(!0)}adjustStatusDivPosition(){const mdv=this.app.workspace.getMostRecentLeaf();if(mdv&&this.statusDiv){this.statusDiv.remove();const container=mdv.view.containerEl;container.insertBefore(this.statusDiv,container.lastChild)}}async getActiveFileStatus(){const reason=[],reasonWarn=[],thisFile=this.app.workspace.getActiveFile();if(!thisFile)return"";if(isValidPath(thisFile.path)){const validOnWindows=isValidFilenameInWidows(thisFile.name),validOnDarwin=isValidFilenameInDarwin(thisFile.name),validOnAndroid=isValidFilenameInAndroid(thisFile.name),labels=[];validOnWindows||labels.push("🪟");validOnDarwin||labels.push("🍎");validOnAndroid||labels.push("🤖");labels.length>0&&reasonWarn.push("Some platforms may be unable to process this file correctly: "+labels.join(" "))}else reason.push("This file has an invalid path under the current settings");this.services.vault.shouldCheckCaseInsensitively()&&(await this.core.storageAccess.getFiles()).map(e3=>e3.path).filter(e3=>e3.toLowerCase()==thisFile.path.toLowerCase()).length>1&&reason.push("There are multiple files with the same name (case-insensitive match)");await this.services.vault.isTargetFile(thisFile.path)||reason.push("This file is ignored by the ignore rules");this.services.vault.isFileSizeTooLarge(thisFile.stat.size)&&reason.push("This file size exceeds the configured limit");return[reason.length>0?"Not synchronised: "+reason.join(", "):"",reasonWarn.length>0?"Warning: "+reasonWarn.join(", "):""].filter(e3=>e3).join("\n")}async setFileStatus(){const fileStatus=await this.getActiveFileStatus();this.activeFileStatus.value=fileStatus}async updateMessageArea(){var _a8,_b5;if(!this.messageArea)return;const showStatusOnEditor=null!=(_b5=null==(_a8=this.settings)?void 0:_a8.showStatusOnEditor)&&_b5;this.statusDiv&&(this.statusDiv.style.display=showStatusOnEditor?"":"none");if(!showStatusOnEditor){this.messageArea.innerText="";return}const messageLines=[],fileStatus=this.activeFileStatus.value;fileStatus&&!this.settings.hideFileWarningNotice&&messageLines.push(fileStatus);const stringMessages=(await this.services.appLifecycle.getUnresolvedMessages()).flat().filter(e3=>e3).filter(m3=>"string"==typeof m3),networkMessages=stringMessages.filter(m3=>m3.startsWith(MARK_LOG_NETWORK_ERROR)),otherMessages=stringMessages.filter(m3=>!m3.startsWith(MARK_LOG_NETWORK_ERROR));messageLines.push(...otherMessages);this.settings.networkWarningStyle!==NetworkWarningStyles_ICON&&this.settings.networkWarningStyle!==NetworkWarningStyles_HIDDEN?messageLines.push(...networkMessages):this.settings.networkWarningStyle===NetworkWarningStyles_ICON&&networkMessages.length>0&&messageLines.push("🔗❌");this.messageArea.innerText=messageLines.map(e3=>`⚠️ ${e3}`).join("\n")}onActiveLeafChange(){fireAndForget(async()=>{this.adjustStatusDivPosition();await this.setFileStatus()})}applyStatusBarText(){if(!this.nextFrameQueue){this.nextFrameQueue=requestAnimationFrame(()=>{var _a8,_b5,_c3,_d2;this.nextFrameQueue=void 0;const{message,status}=this.statusBarLabels.value,newMsg=message;let newLog=(null==(_a8=this.settings)?void 0:_a8.showOnlyIconsOnEditor)?"":status;const moduleTagEnd=newLog.indexOf(`]${MARK_LOG_SEPARATOR}`);-1!=moduleTagEnd&&(newLog=newLog.substring(moduleTagEnd+MARK_LOG_SEPARATOR.length+1));null==(_b5=this.statusBar)||_b5.setText(newMsg.split("\n")[0]);this.statusDiv&&(this.statusDiv.style.display=(null==(_c3=this.settings)?void 0:_c3.showStatusOnEditor)?"":"none");if((null==(_d2=this.settings)?void 0:_d2.showStatusOnEditor)&&this.statusDiv){if(this.settings.showLongerLogInsideEditor){const now3=(new Date).getTime();this.logLines=this.logLines.filter(e3=>e3.ttl>now3);const minimumNext=this.logLines.reduce((a2,b3)=>a2<b3.ttl?a2:b3.ttl,Number.MAX_SAFE_INTEGER);this.logLines.length>0&&setTimeout(()=>this.applyStatusBarText(),minimumNext-now3);const recentLogs2=this.logLines.map(e3=>e3.message).reverse().join("\n");isDirty("recentLogs",recentLogs2)&&(this.logHistory.innerText=recentLogs2)}isDirty("newMsg",newMsg)&&(this.statusLine.innerText=newMsg);isDirty("newLog",newLog)&&(this.logMessage.innerText=newLog)}});scheduleTask("log-hide",3e3,()=>{this.statusLog.value=""})}}_allStartOnUnload(){var _a8;this.statusDiv&&this.statusDiv.remove();null==(_a8=document.querySelectorAll(".livesync-status"))||_a8.forEach(e3=>e3.remove());return Promise.resolve(!0)}_everyOnloadStart(){(0,import_obsidian.addIcon)("view-log",'<g transform="matrix(1.28 0 0 1.28 -131 -411)" fill="currentColor" fill-rule="evenodd">\n <path d="m103 330h76v12h-76z"/>\n <path d="m106 346v44h70v-44zm45 16h-20v-8h20z"/>\n </g>');this.addRibbonIcon("view-log",$msg("moduleLog.showLog"),()=>{this.services.API.showWindow("log-log")}).addClass("livesync-ribbon-showlog");this.addCommand({id:"view-log",name:"Show log",callback:()=>{this.services.API.showWindow("log-log")}});this.registerView("log-log",leaf=>new LogPaneView(leaf,this.plugin));return Promise.resolve(!0)}_everyOnloadAfterLoadSettings(){var _a8,_b5,_c3;recentLogEntries.onChanged(entries2=>{if(0===entries2.value.length)return;const newEntries=[...entries2.value];recentLogEntries.value=[];newEntries.forEach(e3=>this.__addLog(e3.message,e3.level,e3.key))});eventHub.onEvent("file-renamed",data=>{this.setFileStatus()});document.querySelectorAll(".livesync-status").forEach(e3=>e3.remove());this.observeForLogs();this.statusDiv=this.app.workspace.containerEl.createDiv({cls:"livesync-status"});this.statusLine=this.statusDiv.createDiv({cls:"livesync-status-statusline"});this.messageArea=this.statusDiv.createDiv({cls:"livesync-status-messagearea"});this.logMessage=this.statusDiv.createDiv({cls:"livesync-status-logmessage"});this.logHistory=this.statusDiv.createDiv({cls:"livesync-status-loghistory"});this.statusDiv.style.display=(null==(_a8=this.settings)?void 0:_a8.showStatusOnEditor)?"":"none";eventHub.onEvent(EVENT_LAYOUT_READY,()=>this.adjustStatusDivPosition());if(null==(_b5=this.settings)?void 0:_b5.showStatusOnStatusbar){this.statusBar=this.services.API.addStatusBarItem();null==(_c3=this.statusBar)||_c3.addClass("syncstatusbar")}this.adjustStatusDivPosition();return Promise.resolve(!0)}writeLogToTheFile(now3,vaultName,newMessage){fireAndForget(()=>serialized("writeLog",async()=>{const time2=now3.toISOString().split("T")[0],logDate=`${PREFIXMD_LOGFILE}${time2}.md`;await this.core.storageAccess.isExists(normalizePath(logDate))||await this.core.storageAccess.appendHiddenFile(normalizePath(logDate),"```\n");await this.core.storageAccess.appendHiddenFile(normalizePath(logDate),vaultName+":"+newMessage+"\n")}))}__addLog(message,level=LOG_LEVEL_INFO,key3=""){var _a8,_b5,_c3,_d2,_e2,_f;if(level==LOG_LEVEL_DEBUG)return;if(level<=LOG_LEVEL_INFO&&this.settings&&this.settings.lessInformationInLog)return;if(this.settings&&!this.settings.showVerboseLog&&level==LOG_LEVEL_VERBOSE)return;const vaultName=this.services.vault.getVaultName(),now3=new Date,timestamp=now3.toLocaleString();let errorInfo="";if(message instanceof Error)if(message instanceof LiveSyncError)errorInfo=`${null==(_a8=message.cause)?void 0:_a8.name}:${null==(_b5=message.cause)?void 0:_b5.message}\n[StackTrace]: ${message.stack}\n[CausedBy]: ${null==(_c3=message.cause)?void 0:_c3.stack}`;else{const thisStack=(new Error).stack;errorInfo=`${message.name}:${message.message}\n[StackTrace]: ${message.stack}\n[LogCallStack]: ${thisStack}`}const messageContent="string"==typeof message?message:message instanceof Error?`${errorInfo}`:JSON.stringify(message,null,2),newMessage=timestamp+"->"+messageContent;message instanceof Error?console.error(vaultName+":"+newMessage):level>=LOG_LEVEL_INFO?console.log(vaultName+":"+newMessage):console.debug(vaultName+":"+newMessage);(null==(_d2=this.settings)?void 0:_d2.showOnlyIconsOnEditor)||(this.statusLog.value=messageContent);(null==(_e2=this.settings)?void 0:_e2.writeLogToTheFile)&&this.writeLogToTheFile(now3,vaultName,newMessage);addLog(newMessage);this.logLines.push({ttl:now3.getTime()+3e3,message:newMessage});if(level>=LOG_LEVEL_NOTICE){key3||(key3=messageContent);if(key3 in this.notifies){(null==(_f=this.notifies[key3].notice.noticeEl)?void 0:_f.isShown())||(this.notifies[key3].notice=new import_obsidian.Notice(messageContent,0));cancelTask(`notify-${key3}`);if(key3==messageContent){this.notifies[key3].count++;this.notifies[key3].notice.setMessage(`(${this.notifies[key3].count}):${messageContent}`)}else this.notifies[key3].notice.setMessage(`${messageContent}`)}else{const notify=new import_obsidian.Notice(messageContent,0);this.notifies[key3]={count:0,notice:notify}}const timeout=5e3;key3.startsWith("keepalive-")&&-1===messageContent.indexOf("")||scheduleTask(`notify-${key3}`,timeout,()=>{const notify=this.notifies[key3].notice;delete this.notifies[key3];try{notify.hide()}catch(e3){}})}}onBindFunction(core,services){services.API.addLog.setHandler(globalLogFunction);services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.appLifecycle.onLoaded.addHandler(this._everyOnload.bind(this));services.appLifecycle.onBeforeUnload.addHandler(this._allStartOnUnload.bind(this))}};noticeIndex=0;LiveSyncCommands=class{constructor(plugin3,core){this._verbose=(msg,key3)=>{this._log(msg,LOG_LEVEL_VERBOSE,key3)};this._info=(msg,key3)=>{this._log(msg,LOG_LEVEL_INFO,key3)};this._notice=(msg,key3)=>{this._log(msg,LOG_LEVEL_NOTICE,key3)};this._progress=(prefix="",level=LOG_LEVEL_NOTICE)=>{const key3="keepalive-progress-"+noticeIndex++;return{log:msg=>{this._log(prefix+msg,level,key3)},once:msg=>{this._log(prefix+msg,level)},done:(msg="Done")=>{this._log(prefix+msg+"",level,key3)}}};this._debug=(msg,key3)=>{this._log(msg,LOG_LEVEL_VERBOSE,key3)};this.plugin=plugin3;this.core=core;this.onBindFunction(this.core,this.core.services);this._log=createInstanceLogFunction(this.constructor.name,this.services.API);__$checkInstanceBinding(this)}get app(){return this.plugin.app}get settings(){return this.core.settings}get localDatabase(){return this.core.localDatabase}get services(){return this.core.services}async path2id(filename,prefix){return await this.services.path.path2id(filename,prefix)}getPath(entry){return this.services.path.getPath(entry)}_isMainReady(){return this.services.appLifecycle.isReady()}_isMainSuspended(){return this.services.appLifecycle.isSuspended()}_isDatabaseReady(){return this.services.database.isDatabaseReady()}onBindFunction(core,services){}};PeriodicProcessor=class{constructor(core,process2){this._timer=void 0;this._core=core;this._process=process2;eventHub.onceEvent("plugin-unloaded",()=>{this.disable()})}async process(){try{await this._process()}catch(ex){Logger(ex)}}enable(interval){this.disable();0!=interval&&(this._timer=this._core.services.API.setInterval(()=>fireAndForget(async()=>{var _a8,_b5;await this.process();(null==(_b5=null==(_a8=this._core.services)?void 0:_a8.control)?void 0:_b5.hasUnloaded())&&this.disable()}),interval))}disable(){if(void 0!==this._timer){this._core.services.API.clearInterval(this._timer);this._timer=void 0}}};root_12=from_html('<div class="message svelte-1ah3y1j">Just for a minute, please!</div> <div class="buttons svelte-1ah3y1j"><button class="svelte-1ah3y1j">Dismiss</button></div>',1);root_4=from_html('<label><input type="radio" name="disp" class="sls-setting-tab svelte-1ah3y1j"/> <div class="sls-setting-menu-btn svelte-1ah3y1j"> </div></label>');root_6=from_html("<span> </span>");root_5=from_html('<div class="op-scrollable json-source ls-dialog svelte-1ah3y1j"></div>');root_10=from_html('<button class="svelte-1ah3y1j">Cancel</button>');root_2=from_html('<div class="options svelte-1ah3y1j"></div> <!> <div class="infos svelte-1ah3y1j"><table class="svelte-1ah3y1j"><tbody class="svelte-1ah3y1j"><tr class="svelte-1ah3y1j"><th class="svelte-1ah3y1j"> </th><td class="svelte-1ah3y1j"><!> </td><td class="svelte-1ah3y1j"> </td></tr><tr class="svelte-1ah3y1j"><th class="svelte-1ah3y1j"> </th><td class="svelte-1ah3y1j"><!> </td><td class="svelte-1ah3y1j"> </td></tr></tbody></table></div> <div class="buttons svelte-1ah3y1j"><!> <button class="svelte-1ah3y1j">Apply</button></div>',1);root2=from_html('<h2 class="svelte-1ah3y1j"> </h2> <!>',1);$$css2={hash:"svelte-1ah3y1j",code:".spacer.svelte-1ah3y1j {flex-grow:1;}.infos.svelte-1ah3y1j {display:flex;justify-content:space-between;margin:4px 0.5em;}.deleted.svelte-1ah3y1j {text-decoration:line-through;}.svelte-1ah3y1j {box-sizing:border-box;}.scroller.svelte-1ah3y1j {display:flex;flex-direction:column;overflow-y:scroll;max-height:60vh;user-select:text;-webkit-user-select:text;}.json-source.svelte-1ah3y1j {white-space:pre;height:auto;overflow:auto;min-height:var(--font-ui-medium);flex-grow:1;}"};delegate(["click"]);JsonResolveModal=class extends import_obsidian.Modal{constructor(app,filename,docs,callback,nameA,nameB,defaultSelect,keepOrder,hideLocal,title="Conflicted Setting"){super(app);this.title="Conflicted Setting";this.callback=callback;this.filename=filename;this.docs=docs;this.nameA=nameA||"";this.nameB=nameB||"";this.keepOrder=keepOrder||!1;this.defaultSelect=defaultSelect||"";this.title=title;this.hideLocal=null!=hideLocal&&hideLocal;waitForSignal(`cancel-internal-conflict:${filename}`).then(()=>this.close())}async UICallback(keepRev,mergedStr){this.callback&&await this.callback(keepRev,mergedStr);this.close();this.callback=void 0}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);contentEl.empty();null==this.component&&(this.component=mount(JsonResolvePane,{target:contentEl,props:{docs:this.docs,filename:this.filename,nameA:this.nameA,nameB:this.nameB,defaultSelect:this.defaultSelect,keepOrder:this.keepOrder,hideLocal:this.hideLocal,callback:(keepRev,mergedStr)=>this.UICallback(keepRev,mergedStr)}}))}onClose(){const{contentEl}=this;contentEl.empty();null!=this.callback&&this.callback(void 0);if(null!=this.component){unmount(this.component);this.component=void 0}}};PaceMaker=class{constructor(interval){Object.defineProperty(this,"_interval",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_minimumNext",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._interval=interval}changeInterval(interval){if(interval!==this._interval){this._interval=interval;this._minimumNext=void 0}}mark(now3=Date.now()){void 0===this._minimumNext?this._minimumNext=now3+this._interval:this._minimumNext=Math.max(this._minimumNext+this._interval,now3+this._interval)}_getPaced(doMark){const now3=Date.now(),prevMinimum=this._minimumNext;doMark&&this.mark(now3);if(void 0!==prevMinimum){const shouldWait=prevMinimum-now3;if(shouldWait>0)return new Promise(resolve=>setTimeout(()=>{resolve()},shouldWait))}return Promise.resolve()}get paced(){return this._getPaced(!0)}get pacedSinceMark(){return this._getPaced(!1)}};NOT_AVAILABLE=Symbol("NotAvailable");READY_PICK_SIGNAL=Symbol("lockReady");READY_POST_SIGNAL=Symbol("lockFull");DISPOSE_ERROR="Inbox has been disposed";SyncInbox=class{constructor(capacity){Object.defineProperty(this,"_capacity",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_buffer",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_writeIdx",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_readIdx",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_wrapAroundCount",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_isDisposed",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_disposedPromise",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});if(capacity<=0)throw new Error("Capacity must be greater than 0");this._capacity=~~capacity;let i2=256;for(;i2<capacity+1;)i2*=2;i2--;this._wrapAroundCount=i2;this._buffer=new Array(i2);this._writeIdx=0;this._readIdx=0}get size(){return this._writeIdx-this._readIdx}get free(){return this._capacity-this.size}get isRunningOut(){return this._writeIdx==this._readIdx}get isFull(){return 0==this.free}get isReady(){return this.free>0}get isDisposed(){return this._isDisposed}get onDisposed(){return this._disposedPromise.promise}__fixIdx(){if(this._readIdx>this._wrapAroundCount){this._readIdx=this._readIdx&this._wrapAroundCount;this._writeIdx=this._writeIdx&this._wrapAroundCount}}get state(){return{processed:this._writeIdx,size:this.size,free:this.free,isFull:this.isFull,isRunningOut:this.isRunningOut,isReady:this.isReady}}dispose(){this._readIdx=0;this._writeIdx=0;this._capacity=0;this._buffer.length=1;this._buffer[0]=void 0;this._wrapAroundCount=1;this._isDisposed=!0;this._disposedPromise.resolve()}__onPosted(){this.__onProgress()}__onPicked(){this.__onProgress()}__onProgress(){this.__fixIdx()}tryPost(item){if(this.isFull)return!1;this._writeIdx++;this._buffer[this._writeIdx&this._wrapAroundCount]=item;this.__onPosted();return!0}tryCancelPost(){if(0==this.size)return NOT_AVAILABLE;const pointingIdx=this._writeIdx&this._wrapAroundCount,item=this._buffer[pointingIdx];this._buffer[pointingIdx]=void 0;this._writeIdx--;this.__fixIdx();return item}tryPick(){if(this.isRunningOut)return NOT_AVAILABLE;this._readIdx++;const pointingIdx=this._readIdx&this._wrapAroundCount,item=this._buffer[pointingIdx];this._buffer[pointingIdx]=void 0;this.__onPicked();return item}};Inbox=class extends SyncInbox{constructor(capacity){super(capacity);Object.defineProperty(this,"_lockFull",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_lockReady",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}async _waitForFree(){for(;0==this.free;){this._lockFull||(this._lockFull=promiseWithResolvers());return await this._lockFull.promise}return READY_POST_SIGNAL}_notifyFree(){var _a8;null==(_a8=this._lockFull)||_a8.resolve(READY_POST_SIGNAL);this._lockFull=void 0}async _waitForReady(){for(;this.isRunningOut;){this._lockReady||(this._lockReady=promiseWithResolvers());return await this._lockReady.promise}return READY_PICK_SIGNAL}_notifyReady(){var _a8;null==(_a8=this._lockReady)||_a8.resolve(READY_PICK_SIGNAL);this._lockReady=void 0}__onPosted(){super.__onPosted();this._notifyReady()}__onPicked(){super.__onPicked();this._notifyFree()}dispose(){super.dispose();if(this._lockFull){this._lockFull.reject(new Error(DISPOSE_ERROR));this._lockFull=void 0}if(this._lockReady){this._lockReady.reject(new Error(DISPOSE_ERROR));this._lockReady=void 0}}async post(item,timeout,cancellation){if(this._isDisposed)throw new Error(DISPOSE_ERROR);do{if(cancellation&&cancellation.length>0&&await isSomeResolved(cancellation))return!1;if(this.tryPost(item))return!0;let p2;const tasks3=[this._waitForFree(),...timeout?[(p2=cancelableDelay(timeout)).promise]:[],...cancellation||[]],r4=await Promise.race(tasks3);null==p2||p2.cancel();if(r4!==READY_POST_SIGNAL)return!1}while(!this._isDisposed);return!1}async pick(timeout,cancellation){if(this._isDisposed)throw new Error(DISPOSE_ERROR);do{if(cancellation&&cancellation.length>0&&await isSomeResolved(cancellation))return NOT_AVAILABLE;const item=this.tryPick();if(item!==NOT_AVAILABLE)return item;let p2;const tasks3=[this._waitForReady(),...timeout?[(p2=cancelableDelay(timeout)).promise]:[],...cancellation||[]],r4=await Promise.race(tasks3);null==p2||p2.cancel();if(r4!==READY_PICK_SIGNAL)return NOT_AVAILABLE}while(!this.isDisposed);return NOT_AVAILABLE}};(function(ClerkState2){ClerkState2.IDLE="idle";ClerkState2.DISPOSED="disposed";ClerkState2.WORKING="working";ClerkState2.STALLED="not-started"})(ClerkState||(ClerkState={}));SENTINEL_FINISHED=Symbol("finished");SENTINEL_FLUSH=Symbol("flush");ClerkBase=class{get state(){return this._state}constructor(params){Object.defineProperty(this,"_inbox",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_name",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_state",{enumerable:!0,configurable:!0,writable:!0,value:ClerkState.STALLED});Object.defineProperty(this,"_totalProcessed",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalSuccess",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalFailed",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_totalFetched",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_disposed",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_disposePromise",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});Object.defineProperty(this,"_onProgress",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const{name,assigned}=params;this._inbox=assigned;this._name=null!=name?name:this.constructor.name;yieldMicrotask().then(()=>this._mainLoop());this._inbox.onDisposed.then(()=>this.dispose())}get stateDetail(){const hasStarted=0!=this._totalFetched,hasAnyUnprocessed=this._totalFetched!=this._totalProcessed,isBusy=0!=this._inbox.state.size||hasAnyUnprocessed;return{totalFetched:this._totalFetched,inboxDetail:this._inbox.state,totalProcessed:this._totalProcessed,state:this._state,hasStarted,isBusy}}onProgress(){var _a8;try{null==(_a8=this._onProgress)||_a8.call(this,this.stateDetail)}catch(e3){}}setOnProgress(callback){this._onProgress=callback}async _mainLoop(){var _a8;this._state=ClerkState.STALLED;this.onProgress();await yieldMicrotask();do{this._state=ClerkState.IDLE;this.onProgress();try{const item=await this._inbox.pick(void 0,[this._disposePromise.promise]);if(item===SENTINEL_FLUSH||item===SENTINEL_FINISHED){await(null==(_a8=this._onSentinel)?void 0:_a8.call(this,item));continue}if(item===NOT_AVAILABLE){if(this._inbox.isDisposed){this._state=ClerkState.DISPOSED;break}continue}this._totalFetched++;this._state=ClerkState.WORKING;this.onProgress();try{await this._onPick(item);this._totalSuccess++}catch(ex){this._totalFailed++;Logger("Error on processing job on clerk");Logger(ex,LOG_LEVEL_VERBOSE)}this._totalProcessed++;this.onProgress()}catch(ex){if(ex instanceof Error&&ex.message!==DISPOSE_ERROR){Logger("Error on picking item on clerk");Logger(ex,LOG_LEVEL_VERBOSE)}}}while(!this._inbox.isDisposed&&!this._disposed);this._state=ClerkState.IDLE;this._disposed?this._state=ClerkState.DISPOSED:this.dispose();this.onProgress()}dispose(){this._disposePromise.resolve();this._disposed=!0;this._state=ClerkState.DISPOSED}get onDisposed(){return this._disposePromise.promise}};Clerk=class extends ClerkBase{async _onPick(item){return await this._job(item)}constructor(params){super(params);Object.defineProperty(this,"_job",{enumerable:!0,configurable:!0,writable:!0,value:void 0});this._job=params.job}};ClerkGroup=class{constructor(params){var _a8;Object.defineProperty(this,"_clerks",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_nameBase",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_assigned",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_hiredCount",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_job",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_instantiate",{enumerable:!0,configurable:!0,writable:!0,value:void 0});const{assigned,job,instantiate,initialMemberCount}=params;this._assigned=assigned;this._instantiate=instantiate;this._job=job;this._nameBase=null!=(_a8=params.name)?_a8:this.constructor.name;this._clerks=[];for(let i2=0;i2<initialMemberCount;i2++)this.hireMember({assigned,job})}hireMember(params){const name=`${this._nameBase}-${this._hiredCount++}`,clerk=this._instantiate({name,assigned:params.assigned,job:params.job});this._clerks.push(clerk)}fireMember(){const clerk=this._clerks.pop();null==clerk||clerk.dispose()}adjustMemberCount(count){const diff=count-this._clerks.length;if(diff>0)for(let i2=0;i2<diff;i2++)this.hireMember({assigned:this._assigned,job:this._job});else if(diff<0)for(let i2=0;i2<-diff;i2++)this.fireMember()}get stateDetail(){const states=this._clerks.map(clerk=>clerk.stateDetail),totalFetched=states.reduce((acc,state2)=>acc+state2.totalFetched,0),totalProcessed=states.reduce((acc,state2)=>acc+state2.totalProcessed,0),isBusy=states.some(state2=>state2.isBusy),hasStarted=states.some(state2=>state2.hasStarted);return{totalFetched,totalProcessed,inboxDetail:this._assigned.state,isBusy,hasStarted,state:ClerkState.IDLE}}get freeMembers(){return this._clerks.filter(clerk=>clerk.state===ClerkState.IDLE).length}dispose(){this._clerks.forEach(clerk=>clerk.dispose())}};Notifier=class{constructor(){Object.defineProperty(this,"_p",{enumerable:!0,configurable:!0,writable:!0,value:promiseWithResolvers()});Object.defineProperty(this,"isUsed",{enumerable:!0,configurable:!0,writable:!0,value:!1})}notify(){if(this.isUsed){this.isUsed=!1;this._p.promise.finally(noop);this._p.resolve();this._p=promiseWithResolvers()}}get nextNotify(){this.isUsed=!0;return this._p.promise}};allRunningProcessors=new Set([]);QueueProcessor=class{get nowProcessing(){return this.processingEntities}get totalNowProcessing(){var _a8;return this.nowProcessing+((null==(_a8=this._pipeTo)?void 0:_a8.totalNowProcessing)||0)}get remaining(){return this._queue.length+this.processingEntities+this.waitingEntries}get totalRemaining(){var _a8;return this.remaining+((null==(_a8=this._pipeTo)?void 0:_a8.totalRemaining)||0)}updateStatus(setFunc){setFunc();this._updateReactiveSource()}suspend(){this._isSuspended=!0;this._hub.emitEvent("tickSuspended");return this}resume(){this._isSuspended=!1;this._hub.emitEvent("tickResumed");return this}resumePipeLine(){var _a8;null==(_a8=this._pipeTo)||_a8.resumePipeLine();this.resume();return this}startPipeline(){this.root.resumePipeLine();return this}get root(){return void 0===this._root?this:this._root}_initEventHub(){this._hub.onEvent("tickResumed",()=>this._run())}async _waitFor(keys3,timeout){const items=keys3.map(key3=>{const p2=promiseWithResolvers(),releaser=this._hub.onEvent(key3,()=>{p2.resolve(key3)});p2.promise=p2.promise.finally(()=>{releaser()});return p2}),timer=timeout?cancelableDelay(timeout):void 0,tasks3=[...items.map(i2=>i2.promise),...timer?[timer.promise]:[]],ret=await Promise.race(tasks3);items.forEach(i2=>i2.resolve(void 0));return ret}_triggerTickDelay(){this._delayTimer||(this._delayTimer=setTimeout(()=>{this._hub.emitEvent("tickDelayTimeout");this._delayTimer=void 0}))}_clearTickDelay(){if(this._delayTimer){clearTimeout(this._delayTimer);this._delayTimer=void 0}}_notifyIfIdle(){return this.root.__notifyIfIdle()}__notifyIfIdle(){0!=this._processCount||this._canCollectBatch()||this._hub.emitEvent("idle");this._pipeTo&&this._pipeTo.__notifyIfIdle()}_onTick(){if(this._canCollectBatch())if(this._nextProcessNeedsImmediate){this._clearTickDelay();this._nextProcessNeedsImmediate=!1;this._hub.emitEvent("tickImmediate")}else if(this._queue.length>this.yieldThreshold){this._clearTickDelay();this._hub.emitEvent("yielded")}else{if(!this.delay){this._clearTickDelay();this._hub.emitEvent("tickDelayTimeout");return}this._delayTimer||this._triggerTickDelay()}else{this._notifyIfIdle();this._clearTickDelay();this._hub.emitEvent("tickEmpty")}}constructor(processor,params,items,enqueueProcessor){var _a8,_b5,_c3,_d2,_e2,_f,_g;Object.defineProperty(this,"_queue",{enumerable:!0,configurable:!0,writable:!0,value:[]});Object.defineProperty(this,"_processor",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_enqueueProcessor",{enumerable:!0,configurable:!0,writable:!0,value:(queue2,entity)=>(queue2.push(entity),queue2)});Object.defineProperty(this,"_isSuspended",{enumerable:!0,configurable:!0,writable:!0,value:!0});Object.defineProperty(this,"_nextProcessNeedsImmediate",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_pipeTo",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_root",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_remainingReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_totalRemainingReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processingEntitiesReactiveSource",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_keepResultUntilDownstreamConnected",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_keptResult",{enumerable:!0,configurable:!0,writable:!0,value:[]});Object.defineProperty(this,"_runOnUpdateBatch",{enumerable:!0,configurable:!0,writable:!0,value:()=>{}});Object.defineProperty(this,"concurrentLimit",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"batchSize",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"yieldThreshold",{enumerable:!0,configurable:!0,writable:!0,value:1});Object.defineProperty(this,"delay",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"maintainDelay",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"interval",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"processingEntities",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"waitingEntries",{enumerable:!0,configurable:!0,writable:!0,value:0});Object.defineProperty(this,"_hub",{enumerable:!0,configurable:!0,writable:!0,value:new EventHub});Object.defineProperty(this,"_delayTimer",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_intervalPaceMaker",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processingBatches",{enumerable:!0,configurable:!0,writable:!0,value:new Set});Object.defineProperty(this,"addProcessingBatch",{enumerable:!0,configurable:!0,writable:!0,value:value=>{const r4=this._processingBatches.add(value);this._updateBatchProcessStatus();return r4}});Object.defineProperty(this,"deleteProcessingBatch",{enumerable:!0,configurable:!0,writable:!0,value:value=>{const r4=this._processingBatches.delete(value);this._updateBatchProcessStatus();return r4}});Object.defineProperty(this,"_processing",{enumerable:!0,configurable:!0,writable:!0,value:!1});Object.defineProperty(this,"_collected",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_clerks",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_processCount",{enumerable:!0,configurable:!0,writable:!0,value:0});this._root=this;this._processor=processor;this.batchSize=null!=(_a8=null==params?void 0:params.batchSize)?_a8:1;this.yieldThreshold=null!=(_c3=null!=(_b5=null==params?void 0:params.yieldThreshold)?_b5:null==params?void 0:params.batchSize)?_c3:0;this.concurrentLimit=null!=(_d2=null==params?void 0:params.concurrentLimit)?_d2:1;this.delay=null!=(_e2=null==params?void 0:params.delay)?_e2:0;this.maintainDelay=null!=(_f=null==params?void 0:params.maintainDelay)&&_f;this.interval=null!=(_g=null==params?void 0:params.interval)?_g:0;(null==params?void 0:params.keepResultUntilDownstreamConnected)&&(this._keepResultUntilDownstreamConnected=params.keepResultUntilDownstreamConnected);(null==params?void 0:params.remainingReactiveSource)&&(this._remainingReactiveSource=null==params?void 0:params.remainingReactiveSource);(null==params?void 0:params.totalRemainingReactiveSource)&&(this._totalRemainingReactiveSource=null==params?void 0:params.totalRemainingReactiveSource);(null==params?void 0:params.processingEntitiesReactiveSource)&&(this._processingEntitiesReactiveSource=null==params?void 0:params.processingEntitiesReactiveSource);void 0!==(null==params?void 0:params.suspended)&&(this._isSuspended=null==params?void 0:params.suspended);enqueueProcessor&&this.replaceEnqueueProcessor(enqueueProcessor);void 0!==(null==params?void 0:params.pipeTo)&&this.pipeTo(params.pipeTo);this._intervalPaceMaker=new PaceMaker(this.interval);items&&this.enqueueAll(items);allRunningProcessors.add(this);this._initClerks();this._initEventHub();this.resume()}replaceEnqueueProcessor(processor){this._enqueueProcessor=processor;return this}modifyQueue(processor){this._queue=processor(this._queue);this._onTick()}clearQueue(){this._queue=[];this._onTick()}onUpdateProgress(proc){this._runOnUpdateBatch=proc;return this}pipeTo(pipeTo){this._pipeTo=pipeTo;this._pipeTo._root=this.root;if(this._keptResult.length>0){const temp=[...this._keptResult];this._keptResult=[];this._pipeTo.enqueueAll(temp)}return pipeTo}isIdle(){return this._isIdle()&&(!this._pipeTo||this._pipeTo.isIdle())}_isIdle(){return 0==this.totalRemaining}async _waitForIdle(){if(this._isSuspended)return Promise.resolve();if(this._isIdle())return Promise.resolve();do{const r4=await this._waitFor(["tickEmpty","tick","tickSuspended","suspended","idle"]);if("tickSuspended"===r4)break;if("suspended"==r4)break;if("tickEmpty"==r4)break;if("idle"==r4)break}while(!this._isIdle());return Promise.resolve()}idleDetectors(){const thisPromise=this._waitForIdle();return this._pipeTo?[thisPromise,...this._pipeTo.idleDetectors()]:[thisPromise]}get isSuspended(){var _a8;return this._isSuspended||(null==(_a8=this._pipeTo)?void 0:_a8.isSuspended)||!1}_updateReactiveSource(){this.root.updateReactiveSource()}updateReactiveSource(){this._pipeTo&&this._pipeTo.updateReactiveSource();this._remainingReactiveSource&&(this._remainingReactiveSource.value=this.remaining);this._totalRemainingReactiveSource&&(this._totalRemainingReactiveSource.value=this.totalRemaining);this._processingEntitiesReactiveSource&&(this._processingEntitiesReactiveSource.value=this.nowProcessing)}_updateBatchProcessStatus(){this._updateReactiveSource();this._runOnUpdateBatch()}_collectBatch(){return this._queue.splice(0,this.batchSize)}_canCollectBatch(){return 0!==this._queue.length}enqueue(entity){this._queue=this._enqueueProcessor(this._queue,entity);this._updateBatchProcessStatus();this._onTick();return this}enqueueAll(entities){let queue2=this._queue;for(const v2 of entities)queue2=this._enqueueProcessor(queue2,v2);this._queue=queue2;this._updateBatchProcessStatus();this._onTick();return this}requestNextFlush(){this._nextProcessNeedsImmediate=!0;this._onTick()}async _waitForSuspended(){}flush(){if(this._isSuspended)return Promise.resolve(!1);this.requestNextFlush();return this.waitForAllDownstream()}async waitForAllDownstream(timeout){const baseTasks=[];timeout&&baseTasks.push(delay(timeout,RESULT_TIMED_OUT));do{const idleTasks=this.idleDetectors(),tasks3=[...baseTasks,Promise.all(idleTasks)];if(await Promise.race(tasks3)===RESULT_TIMED_OUT)return!1}while(!this.isIdle());return!0}waitForAllProcessed(timeout){this.root.startPipeline();return this.root.waitForAllDownstream(timeout)}async waitForAllDoneAndTerminate(timeout){this.root.startPipeline();const r4=await this.root.waitForAllDownstream(timeout);this.terminateAll();return r4}async _runProcessor(items){const ret=await this._processor(items);ret&&(this._pipeTo?this._pipeTo.enqueueAll(ret):this._keepResultUntilDownstreamConnected&&this._keptResult.push(...ret))}async*pump(){do{const ticked=await this._waitFor(["tickImmediate","yielded","tickSuspended","tickDelayTimeout","tickSuspended"]);L2:do{const items=this._collectBatch();if(0==items.length)break L2;yield items}while(this._canCollectBatch());if("tickSuspended"==ticked)break}while(!this._isSuspended)}_initClerks(){this._collected=new Inbox(2*this.concurrentLimit);this._clerks=new ClerkGroup({assigned:this._collected,job:async items=>{const batchLength=items.length;this.updateStatus(()=>{this.processingEntities+=batchLength;this.waitingEntries-=batchLength});await this._intervalPaceMaker.paced;this._processCount++;try{await this._runProcessor(items)}catch(ex){Logger("Processor error!");Logger(ex,LOG_LEVEL_VERBOSE)}this.updateStatus(()=>{this.processingEntities-=batchLength});this._processCount--;0==this._processCount&&this._notifyIfIdle()},initialMemberCount:this.concurrentLimit,instantiate:params=>new Clerk(params)})}async _process(){if(!this._processing&&!this._isSuspended)try{this._processing=!0;do{const batchPump=this.pump();for await(const batch of batchPump){if(!batch||0===batch.length){this._hub.emitEvent("tickEmpty");continue}const batchLength=batch.length;this.updateStatus(()=>{this.waitingEntries+=batchLength});await this._collected.post(batch)}}while(!this._isSuspended);this._hub.emitEvent("suspended")}finally{this._processing=!1}}_run(){this._isSuspended||this._processing||fireAndForget(()=>this._process())}terminateAll(){this.root.terminate()}terminate(){if(this._pipeTo){this._pipeTo.terminate();this._pipeTo=void 0}this._isSuspended=!0;this._enqueueProcessor=()=>[];this._processor=()=>Promise.resolve([]);this.clearQueue();this._hub.emitEvent("tickSuspended");this._hub.emitEvent("tickSuspended");this._hub.emitEvent("tickSuspended");this._collected.dispose();this._clerks.dispose();this._queue.length=0;allRunningProcessors.delete(this)}};HiddenFileSync=class extends LiveSyncCommands{constructor(){super(...arguments);this.periodicInternalFileScanProcessor=new PeriodicProcessor(this.core,async()=>this.isThisModuleEnabled()&&this._isDatabaseReady()&&await this.scanAllStorageChanges(!1));this.semaphore=Semaphore(10);this.conflictResolutionProcessor=new QueueProcessor(async paths=>{var _a8,_b5,_c3;const path2=paths[0];sendSignal(`cancel-internal-conflict:${path2}`);try{const id=await this.path2id(path2,ICHeader),doc=await this.localDatabase.getRaw(id,{conflicts:!0});if(void 0===doc._conflicts)return[];if(0==doc._conflicts.length)return[];this._log(`Hidden file conflicted:${path2}`);const conflicts=doc._conflicts.sort((a2,b3)=>Number(a2.split("-")[0])-Number(b3.split("-")[0])),revA=doc._rev,revB=conflicts[0];if(path2.endsWith(".json")){const conflictedRev=conflicts[0],conflictedRevNo=Number(conflictedRev.split("-")[0]),commonBase=null!=(_c3=null==(_b5=null==(_a8=(await this.localDatabase.getRaw(id,{revs_info:!0}))._revs_info)?void 0:_a8.filter(e3=>"available"==e3.status&&Number(e3.rev.split("-")[0])<conflictedRevNo).first())?void 0:_b5.rev)?_c3:"",result=await this.localDatabase.managers.conflictManager.mergeObject(doc.path,commonBase,doc._rev,conflictedRev);if(result){this._log(`Object merge:${path2}`,LOG_LEVEL_INFO);const filename=stripAllPrefixes(path2);await this.ensureDir(filename);const stat=await this.writeFile(filename,result);if(!stat)throw new Error(`conflictResolutionProcessor: Failed to stat file ${filename}`);await this.storeInternalFileToDatabase({path:filename,...stat});await this.extractInternalFileFromDatabase(filename);await this.localDatabase.removeRevision(id,revB);this.conflictResolutionProcessor.enqueue(path2);return[]}this._log("Object merge is not applicable.",LOG_LEVEL_VERBOSE);if(getFileRegExp(this.settings,"syncInternalFileOverwritePatterns").some(r4=>r4.test(stripAllPrefixes(path2)))){this._log(`Overwrite rule applied for conflicted hidden file: ${path2}`,LOG_LEVEL_INFO);await this.resolveByNewerEntry(id,path2,doc,revA,revB);return[]}return[{path:path2,revA,revB,id,doc}]}await this.resolveByNewerEntry(id,path2,doc,revA,revB);return[]}catch(ex){this._log(`Failed to resolve conflict (Hidden): ${path2}`);this._log(ex,LOG_LEVEL_VERBOSE);return[]}},{suspended:!1,batchSize:1,concurrentLimit:5,delay:10,keepResultUntilDownstreamConnected:!0,yieldThreshold:10,pipeTo:new QueueProcessor(async results=>{const{id,doc,path:path2,revA,revB}=results[0],prefixedPath=addPrefix(path2,ICHeader),docAMerge=await this.localDatabase.getDBEntry(prefixedPath,{rev:revA}),docBMerge=await this.localDatabase.getDBEntry(prefixedPath,{rev:revB});0==docAMerge||0==docBMerge?await this.resolveByNewerEntry(id,path2,doc,revA,revB):await this.showJSONMergeDialogAndMerge(docAMerge,docBMerge)&&this.conflictResolutionProcessor.enqueue(path2)},{suspended:!1,batchSize:1,concurrentLimit:1,delay:10,keepResultUntilDownstreamConnected:!1,yieldThreshold:10})});this.cacheFileRegExps=new Map;this.cacheCustomisationSyncIgnoredFiles=new Map;this.queuedNotificationFiles=new Set}isThisModuleEnabled(){return this.core.settings.syncInternalFiles}get kvDB(){return this.core.kvDB}getConflictedDoc(path2,rev3){return this.core.localDatabase.managers.conflictManager.getConflictedDoc(path2,rev3)}onunload(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable()}onload(){this.services.API.addCommand({id:"livesync-sync-internal",name:"(re)initialise hidden files between storage and database",callback:()=>{this.isReady()&&this.initialiseInternalFileSync("safe",!0)}});this.services.API.addCommand({id:"livesync-scaninternal-storage",name:"Scan hidden file changes on the storage",callback:()=>{this.isReady()&&this.scanAllStorageChanges(!0)}});this.services.API.addCommand({id:"livesync-scaninternal-database",name:"Scan hidden file changes on the local database",callback:()=>{this.isReady()&&this.scanAllDatabaseChanges(!0)}});this.services.API.addCommand({id:"livesync-internal-scan-offline-changes",name:"Scan and apply all offline hidden-file changes",callback:()=>{this.isReady()&&this.applyOfflineChanges(!0)}});eventHub.onEvent(EVENT_SETTING_SAVED,()=>{this.updateSettingCache()})}async _everyOnDatabaseInitialized(showNotice){this._fileInfoLastProcessed=await autosaveCache(this.kvDB,"hidden-file-lastProcessed");this._databaseInfoLastProcessed=await autosaveCache(this.kvDB,"hidden-file-lastProcessed-database");this._fileInfoLastKnown=await autosaveCache(this.kvDB,"hidden-file-lastKnown");if(this.isThisModuleEnabled())if(0==this._fileInfoLastProcessed.size&&0==this._fileInfoLastProcessed.size){this._log("No cache found. Performing startup scan.",LOG_LEVEL_VERBOSE);await this.performStartupScan(!0)}else await this.performStartupScan(showNotice);return!0}async _everyBeforeReplicate(showNotice){this.isThisModuleEnabled()&&this._isDatabaseReady()&&this.settings.syncInternalFilesBeforeReplication&&!this.settings.watchInternalFileChanges&&await this.scanAllStorageChanges(showNotice);return!0}_everyOnloadAfterLoadSettings(){this.updateSettingCache();return Promise.resolve(!0)}updateSettingCache(){this.cacheCustomisationSyncIgnoredFiles.clear();this.cacheFileRegExps.clear()}isReady(){return!!this._isMainReady&&!this._isMainSuspended()&&!!this.isThisModuleEnabled()}async performStartupScan(showNotice){await this.applyOfflineChanges(showNotice)}async _everyOnResumeProcess(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable();if(this._isMainSuspended())return!0;this.isThisModuleEnabled()&&await this.performStartupScan(!1);this.periodicInternalFileScanProcessor.enable(this.isThisModuleEnabled()&&this.settings.syncInternalFilesInterval?1e3*this.settings.syncInternalFilesInterval:0);return!0}_everyRealizeSettingSyncMode(){var _a8;null==(_a8=this.periodicInternalFileScanProcessor)||_a8.disable();if(this._isMainSuspended())return Promise.resolve(!0);if(!this.services.appLifecycle.isReady())return Promise.resolve(!0);this.periodicInternalFileScanProcessor.enable(this.isThisModuleEnabled()&&this.settings.syncInternalFilesInterval?1e3*this.settings.syncInternalFilesInterval:0);this.cacheFileRegExps.clear();return Promise.resolve(!0)}async _anyProcessOptionalFileEvent(path2){return this.isReady()&&await this.trackStorageFileModification(path2)||!1}_anyGetOptionalConflictCheckMethod(path2){if(isInternalMetadata(path2)){this.queueConflictCheck(path2);return Promise.resolve(!0)}return Promise.resolve(!1)}async _anyProcessOptionalSyncFiles(doc){if(isInternalMetadata(doc._id)){if(this.isThisModuleEnabled()){const unprefixedPath=stripAllPrefixes(this.getPath(doc));if(!await this.isTargetFile(stripAllPrefixes(unprefixedPath))){this._log(`Skipped processing sync file:${unprefixedPath} (Not Hidden File Sync target)`,LOG_LEVEL_VERBOSE);return!0}await this.processReplicationResult(doc)||this._log(`Failed to process sync file:${unprefixedPath}`,LOG_LEVEL_NOTICE)}return!0}return!1}async loadFileWithInfo(path2){var _a8,_b5;const stat=await this.core.storageAccess.statHidden(path2);if(!stat)return{name:null!=(_a8=path2.split("/").pop())?_a8:"",path:path2,stat:{size:0,mtime:0,ctime:0,type:"file"},isInternal:!0,deleted:!0,body:createBlob(new Uint8Array(0))};const content=await this.core.storageAccess.readHiddenFileAuto(path2);return{name:null!=(_b5=path2.split("/").pop())?_b5:"",path:path2,stat,isInternal:!0,deleted:!1,body:createBlob(content)}}statToKey(stat){var _a8,_b5;return`${null!=(_a8=null==stat?void 0:stat.mtime)?_a8:0}-${null!=(_b5=null==stat?void 0:stat.size)?_b5:0}`}docToKey(doc){return`${doc.mtime}-${doc.size}-${doc._rev}-${doc._deleted||doc.deleted?"-0":"-1"}`}async fileToStatKey(file,stat=null){stat||(stat=await this.core.storageAccess.statHidden(file));return this.statToKey(stat)}updateLastProcessedFile(file,keySrc){const key3="string"==typeof keySrc?keySrc:this.statToKey(keySrc),splitted=key3.split("-");"0"!=splitted[0]&&this._fileInfoLastKnown.set(file,Number(splitted[0]));this._fileInfoLastProcessed.set(file,key3)}async updateLastProcessedAsActualFile(file,stat){stat||(stat=await this.core.storageAccess.statHidden(file));this._fileInfoLastProcessed.set(file,this.statToKey(stat))}resetLastProcessedFile(targetFiles){if(targetFiles)for(const key3 of targetFiles)this._fileInfoLastProcessed.delete(key3);else{this._log("Delete all processed mark.",LOG_LEVEL_VERBOSE);this._fileInfoLastProcessed.clear()}}getLastProcessedFileMTime(file){return this._fileInfoLastKnown.get(file)||0}getLastProcessedFileKey(file){return this._fileInfoLastProcessed.get(file)}getLastProcessedDatabaseKey(file){return this._databaseInfoLastProcessed.get(file)}updateLastProcessedDatabase(file,keySrc){const key3="string"==typeof keySrc?keySrc:this.docToKey(keySrc);this._databaseInfoLastProcessed.set(file,key3)}updateLastProcessed(path2,db,stat){this.updateLastProcessedDatabase(path2,db);this.updateLastProcessedFile(path2,this.statToKey(stat));const dbMTime=getComparingMTime(db),storageMTime=getComparingMTime(stat);0==dbMTime||0==storageMTime?this.services.path.unmarkChanges(path2):this.services.path.markChangesAreSame(path2,getComparingMTime(db),getComparingMTime(stat))}updateLastProcessedDeletion(path2,db){this.services.path.unmarkChanges(path2);db&&this.updateLastProcessedDatabase(path2,db);this.updateLastProcessedFile(path2,this.statToKey(null))}async ensureDir(path2){await this.core.storageAccess.isExistsIncludeHidden(path2)||await this.core.storageAccess.ensureDir(path2)}async writeFile(path2,data,opt){await this.core.storageAccess.writeHiddenFileAuto(path2,data,opt);return await this.core.storageAccess.statHidden(path2)}async __removeFile(path2){try{if(!await this.core.storageAccess.isExistsIncludeHidden(path2))return"ALREADY";if(await this.core.storageAccess.removeHidden(path2))return"OK"}catch(ex){this._log(`Failed to remove file:${path2}`);this._log(ex,LOG_LEVEL_VERBOSE)}return!1}async triggerEvent(path2){try{await this.core.storageAccess.triggerHiddenFile(path2)}catch(ex){this._log("Failed to call internal API(reconcileInternalFile)",LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}async updateLastProcessedAsActualDatabase(file,doc){const dbPath=addPrefix(file,ICHeader);doc||(doc=await this.localDatabase.getDBEntryMeta(dbPath));doc&&this._databaseInfoLastProcessed.set(file,this.docToKey(doc))}resetLastProcessedDatabase(targetFiles){if(targetFiles)for(const key3 of targetFiles)this._databaseInfoLastProcessed.delete(key3);else{this._log("Delete all processed mark.",LOG_LEVEL_VERBOSE);this._databaseInfoLastProcessed.clear()}}async adoptCurrentStorageFilesAsProcessed(targetFiles){const allFiles=await this.scanInternalFileNames(),files=targetFiles?allFiles.filter(e3=>targetFiles.some(t9=>-1!==e3.indexOf(t9))):allFiles;for(const file of files)await this.updateLastProcessedAsActualFile(file)}async adoptCurrentDatabaseFilesAsProcessed(targetFiles){const allFiles=await this.getAllDatabaseFiles(),files=targetFiles?allFiles.filter(e3=>targetFiles.some(t9=>-1!==e3.path.indexOf(t9))):allFiles;for(const file of files){const path2=stripAllPrefixes(this.getPath(file));await this.updateLastProcessedAsActualDatabase(path2,file)}}async serializedForEvent(file,fn){hiddenFilesEventCount.value++;const rel=await this.semaphore.acquire();try{return await serialized(`hidden-file-event:${file}`,async()=>{hiddenFilesProcessingCount.value++;try{return await fn()}finally{hiddenFilesProcessingCount.value--}})}finally{rel();hiddenFilesEventCount.value--}}async useStorageFiles(files,showNotice=!1,onlyNew=!1){return await this.trackScannedStorageChanges(files,showNotice,onlyNew,!0)}async trackScannedStorageChanges(processFiles,showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeleted=!0){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Storage -> DB ]\n",logLevel),notifyProgress=onlyInNTimes(100,progress=>p2.log(`${progress}/${processFiles.length}`)),processes=processFiles.map(async(file,i2)=>{try{await this.trackStorageFileModification(file,onlyNew,forceWriteAll,includeDeleted);notifyProgress()}catch(ex){p2.once(`Failed to process storage change file:${file}`);this._log(ex,LOG_LEVEL_VERBOSE)}});await Promise.all(processes);p2.done()}async scanAllStorageChanges(showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeleted=!0){return await skipIfDuplicated("scanAllStorageChanges",async()=>{const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Scanning Storage -> DB ]\n",logLevel);p2.log("Scanning storage files...");const knownNames=[...this._fileInfoLastProcessed.keys()],existNames=await this.scanInternalFileNames(),files=new Set([...knownNames,...existNames]);this._log(`Known/Exist ${knownNames.length}/${existNames.length}, Totally ${files.size} files.`,LOG_LEVEL_VERBOSE);const taskNameAndMeta=[...files].map(async e3=>[e3,await this.core.storageAccess.statHidden(e3)]),processFiles=(await Promise.all(taskNameAndMeta)).filter(([path2,stat])=>!!forceWriteAll||this.getLastProcessedFileKey(path2)!=this.statToKey(stat)).map(([path2,stat])=>path2),staticsMessage=`[Storage hidden file statics]\nKnown files: ${knownNames.length}\nActual files: ${existNames.length}\nAll files: ${files.size}\nOffline Changed files: ${processFiles.length}`;p2.once(staticsMessage);await this.trackScannedStorageChanges(processFiles,showNotice,onlyNew,forceWriteAll,includeDeleted);p2.done()})}async trackStorageFileModification(path2,onlyNew=!1,forceWrite=!1,includeDeleted=!0){if(!await this.isTargetFile(path2)){this._log(`Storage file tracking: Hidden file skipped: ${path2} is filtered out by the defined patterns.`,LOG_LEVEL_VERBOSE);return!1}try{return await this.serializedForEvent(path2,async()=>{let stat=await this.core.storageAccess.statHidden(path2);if(null!=stat&&"file"!=stat.type)return!1;const key3=await this.fileToStatKey(path2,stat),lastKey=this.getLastProcessedFileKey(path2);if(lastKey==key3){this._log(`${path2} Already processed.`,LOG_LEVEL_DEBUG);return!0}const cache2=await this.loadFileWithInfo(path2);if(getComparingMTime(cache2.stat)!=getComparingMTime(stat)){this._log(`Hidden file:${path2} is changed.`,LOG_LEVEL_VERBOSE);stat=cache2.stat}this.updateLastProcessedFile(path2,stat);const lastIsNotFound=!lastKey||lastKey.endsWith("-0-0"),nowIsNotFound=cache2.deleted,type=lastIsNotFound&&nowIsNotFound?"invalid":nowIsNotFound?"delete":"modified";if("invalid"==type)return!1;const storageMTimeActual=getComparingMTime(stat),storageMTime=0==storageMTimeActual?this.getLastProcessedFileMTime(path2):storageMTimeActual;if(onlyNew){const prefixedFileName=addPrefix(path2,ICHeader),filesOnDB=await this.localDatabase.getDBEntryMeta(prefixedFileName);if(compareMTime(storageMTime,getComparingMTime(filesOnDB,includeDeleted))!=TARGET_IS_NEW){this._log(`Hidden file:${path2} is not new.`,LOG_LEVEL_VERBOSE);filesOnDB&&stat&&this.updateLastProcessed(path2,filesOnDB,stat);return!0}}if("delete"==type){this._log(`Deletion detected: ${path2}`);return await this.deleteInternalFileOnDatabase(path2,forceWrite)}if("modified"==type){this._log(`Modification detected:${path2}`,LOG_LEVEL_VERBOSE);const result=await this.storeInternalFileToDatabase(cache2,forceWrite),resultText=void 0===result?"Nothing changed":result?"Updated":"Failed";this._log(`${resultText}: ${path2} ${resultText}`,LOG_LEVEL_VERBOSE);return result}})}catch(ex){this._log(`Failed to process hidden file:${path2}`);this._log(ex,LOG_LEVEL_VERBOSE)}return!0}queueConflictCheck(path2){this.conflictResolutionProcessor.enqueue(path2)}async resolveConflictOnInternalFiles(){const conflicted=this.localDatabase.findEntries(ICHeader,"i;",{conflicts:!0});this.conflictResolutionProcessor.suspend();try{for await(const doc of conflicted)"_conflicts"in doc&&isInternalMetadata(doc._id)&&this.conflictResolutionProcessor.enqueue(doc.path)}catch(ex){this._log("something went wrong on resolving all conflicted internal files");this._log(ex,LOG_LEVEL_VERBOSE)}await this.conflictResolutionProcessor.startPipeline().waitForAllProcessed()}async resolveByNewerEntry(id,path2,currentDoc,currentRev,conflictedRev){var _a8;const conflictedDoc=await this.localDatabase.getRaw(id,{rev:conflictedRev}),delRev=getComparingMTime(currentDoc,!0)<getComparingMTime(conflictedDoc,!0)?currentRev:conflictedRev;await this.localDatabase.removeRevision(id,delRev);this._log(`Older one has been deleted:${path2}`);0===(null==(_a8=(await this.localDatabase.getRaw(id,{conflicts:!0}))._conflicts)?void 0:_a8.length)?await this.extractInternalFileFromDatabase(stripAllPrefixes(path2)):this.conflictResolutionProcessor.enqueue(path2)}showJSONMergeDialogAndMerge(docA,docB){return new Promise(res2=>{this._log("Opening data-merging dialog",LOG_LEVEL_VERBOSE);const docs=[docA,docB],strippedPath=stripAllPrefixes(docA.path),storageFilePath=strippedPath,storeFilePath=strippedPath,displayFilename=`${storeFilePath}`;new JsonResolveModal(this.app,storageFilePath,[docA,docB],async(keep,result)=>{var _a8,_b5;try{let needFlush=!1;if(!result&&!keep){this._log(`Skipped merging: ${displayFilename}`);res2(!1);return}if(result||keep)for(const doc of docs)if(doc._rev!=keep&&await this.localDatabase.deleteDBEntry(this.getPath(doc),{rev:doc._rev})){this._log(`Conflicted revision has been deleted: ${displayFilename}`);needFlush=!0}if(!keep&&result){await this.core.storageAccess.isExistsIncludeHidden(storageFilePath)||await this.core.storageAccess.ensureDir(storageFilePath);const stat=await this.writeFile(storageFilePath,result);if(!stat)throw new Error("Stat failed");const mtime=getComparingMTime(stat);await this.storeInternalFileToDatabase({path:storageFilePath,mtime,ctime:null!=(_a8=null==stat?void 0:stat.ctime)?_a8:mtime,size:null!=(_b5=null==stat?void 0:stat.size)?_b5:0},!0);await this.triggerEvent(storageFilePath);this._log(`STORAGE <-- DB:${displayFilename}: written (hidden,merged)`)}needFlush&&(await this.extractInternalFileFromDatabase(storeFilePath,!1)?this._log(`STORAGE --\x3e DB:${displayFilename}: extracted (hidden,merged)`):this._log(`STORAGE --\x3e DB:${displayFilename}: extracted (hidden,merged) Failed`));res2(!0)}catch(ex){this._log("Could not merge conflicted json");this._log(ex,LOG_LEVEL_VERBOSE);res2(!1)}}).open()})}getDocProps(doc){const id=doc._id,shortenedId=id.substring(0,10),prefixedPath=this.getPath(doc),path2=stripAllPrefixes(prefixedPath),rev3=doc._rev,revDisplay=rev3?displayRev(rev3):"0-NOREVS",shortenedPath=path2.substring(0,10);return{id,rev:rev3,revDisplay,prefixedPath,path:path2,isDeleted:doc._deleted||doc.deleted||!1,shortenedId,shortenedPath}}async processReplicationResult(doc){const info3=this.getDocProps(doc),path2=info3.path,headerLine=`Tracking DB ${info3.path} (${info3.revDisplay}) :`,ret=await this.trackDatabaseFileModification(path2,headerLine);this._log(`${headerLine} Done: ${info3.shortenedId})`,LOG_LEVEL_VERBOSE);return ret}parseRegExpSettings(){const regExpKey=`${this.core.settings.syncInternalFilesTargetPatterns}||${this.core.settings.syncInternalFilesIgnorePatterns}`;let ignoreFilter,targetFilter;if(this.cacheFileRegExps.has(regExpKey)){const cached=this.cacheFileRegExps.get(regExpKey);ignoreFilter=cached[1];targetFilter=cached[0]}else{ignoreFilter=getFileRegExp(this.core.settings,"syncInternalFilesIgnorePatterns");targetFilter=getFileRegExp(this.core.settings,"syncInternalFilesTargetPatterns");this.cacheFileRegExps.clear();this.cacheFileRegExps.set(regExpKey,[targetFilter,ignoreFilter])}return{ignoreFilter,targetFilter}}isTargetFileInPatterns(path2){const{ignoreFilter,targetFilter}=this.parseRegExpSettings();if(ignoreFilter&&ignoreFilter.length>0)for(const pattern of ignoreFilter)if(pattern.test(path2))return!1;if(targetFilter&&targetFilter.length>0){for(const pattern of targetFilter)if(pattern.test(path2))return!0;return!1}return!0}getCustomisationSynchronizationIgnoredFiles(){const configDir=this.services.API.getSystemConfigDir(),key3=JSON.stringify(this.settings.pluginSyncExtendedSetting)+`||${this.settings.usePluginSync}||${configDir}`;if(this.cacheCustomisationSyncIgnoredFiles.has(key3))return this.cacheCustomisationSyncIgnoredFiles.get(key3);this.cacheCustomisationSyncIgnoredFiles.clear();const synchronisedInConfigSync=this.settings.usePluginSync?Object.values(this.settings.pluginSyncExtendedSetting).filter(e3=>e3.mode==MODE_SELECTIVE||e3.mode==MODE_PAUSED).map(e3=>e3.files).flat().map(e3=>`${configDir}/${e3}`.toLowerCase()):[];this.cacheCustomisationSyncIgnoredFiles.set(key3,synchronisedInConfigSync);return synchronisedInConfigSync}isNotIgnoredByCustomisationSync(path2){return!this.getCustomisationSynchronizationIgnoredFiles().some(e3=>path2.startsWith(e3))}isHiddenFileSyncHandlingPath(path2){return path2.startsWith(".")&&!path2.startsWith(".trash")}async isTargetFile(path2){return!!(this.isTargetFileInPatterns(path2)&&this.isNotIgnoredByCustomisationSync(path2)&&this.isHiddenFileSyncHandlingPath(path2))&&!await this.services.vault.isIgnoredByIgnoreFile(path2)}async trackScannedDatabaseChange(processFiles,showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeletion=!0){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ DB -> Storage ]\n",logLevel),notifyProgress=onlyInNTimes(100,progress=>p2.log(`${progress}/${processFiles.length}`)),processes=processFiles.map(async file=>{try{const path2=stripAllPrefixes(this.getPath(file));await this.isTargetFile(path2)?await this.trackDatabaseFileModification(path2,"[Hidden file scan]",!forceWriteAll,onlyNew,file,includeDeletion):this._log(`Database file tracking: Hidden file skipped: ${path2} is filtered out by the defined patterns.`,LOG_LEVEL_VERBOSE);notifyProgress()}catch(ex){this._log(`Failed to process storage change file:${file}`,logLevel);this._log(ex,LOG_LEVEL_VERBOSE)}});await Promise.all(processes);p2.done()}async applyOfflineChanges(showNotice){const logLevel=getLogLevel(showNotice);return await serialized("applyOfflineChanges",async()=>{const p2=this._progress("[⚙ Apply untracked changes ]\n",logLevel);this._log("Track changes.",logLevel);p2.log("Enumerating local files...");const currentStorageFiles=await this.scanInternalFileNames();p2.log("Enumerating database files...");const currentDatabaseFiles=await this.getAllDatabaseFiles(),allDatabaseMap=Object.fromEntries(currentDatabaseFiles.map(e3=>[stripAllPrefixes(this.getPath(e3)),e3])),currentDatabaseFileNames=[...Object.keys(allDatabaseMap)],untrackedLocal=currentStorageFiles.filter(e3=>!this._fileInfoLastProcessed.has(e3)),untrackedDatabase=currentDatabaseFileNames.filter(e3=>!this._databaseInfoLastProcessed.has(e3)),bothUntracked=untrackedLocal.filter(e3=>-1!==untrackedDatabase.indexOf(e3));p2.log("Applying untracked changes...");const stat=`Tracking statics:\nLocal files: ${currentStorageFiles.length}\nDatabase files: ${currentDatabaseFileNames.length}\nUntracked local files: ${untrackedLocal.length}\nUntracked database files: ${untrackedDatabase.length}\nCommon untracked files: ${bothUntracked.length}`;p2.once(stat);const semaphores2=Semaphore(10),notifyProgress=onlyInNTimes(25,progress=>p2.log(`${progress}/${bothUntracked.length}`)),allProcesses=bothUntracked.map(async file=>{notifyProgress();const rel=await semaphores2.acquire();try{const fileStat=await this.core.storageAccess.statHidden(file);if(null==fileStat){this._log(`Unexpected error: Failed to stat file during applyOfflineChange :${file}`);return}const dbInfo=allDatabaseMap[file];if(dbInfo.deleted||dbInfo._deleted)return;const diff=compareMTime(getComparingMTime(fileStat),getComparingMTime(dbInfo));diff==BASE_IS_NEW?await this.trackStorageFileModification(file,!0):diff==TARGET_IS_NEW?await this.trackDatabaseFileModification(file,"[Apply]",!0,!0,dbInfo):diff==EVEN&&this.updateLastProcessed(file,dbInfo,fileStat)}finally{rel()}});await Promise.all(allProcesses);await this.scanAllStorageChanges(showNotice);await this.scanAllDatabaseChanges(showNotice);p2.done()})}async scanAllDatabaseChanges(showNotice=!1,onlyNew=!1,forceWriteAll=!1,includeDeletion=!0){return await skipIfDuplicated("scanAllDatabaseChanges",async()=>{const databaseFiles=await this.getAllDatabaseFiles(),files=databaseFiles.filter(e3=>{const doc=e3,key3=this.docToKey(doc),path2=stripAllPrefixes(this.getPath(doc));return this.getLastProcessedDatabaseKey(path2)!=key3}),logLevel=getLogLevel(showNotice),staticsMessage=`[Database hidden file statics]\nAll files: ${databaseFiles.length}\nOffline Changed files: ${files.length}`;this._log(staticsMessage,logLevel,"scan-changes");return await this.trackScannedDatabaseChange(files,showNotice,onlyNew,forceWriteAll,includeDeletion)})}async useDatabaseFiles(files,showNotice=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Scanning DB -> Storage ]\n",logLevel);p2.log("Scanning database files...");const notifyProgress=onlyInNTimes(25,progress=>p2.log(`${progress}/${files.length}`)),processFiles=files.map(async file=>{try{const path2=stripAllPrefixes(this.getPath(file));await this.trackDatabaseFileModification(path2,"[Scanning]",!0,onlyNew,file);notifyProgress()}catch(ex){this._log(`Failed to process database changes:${file}`);this._log(ex,LOG_LEVEL_VERBOSE)}});await Promise.all(processFiles);p2.done();return!0}async trackDatabaseFileModification(path2,headerLine,preventDoubleProcess=!1,onlyNew=!1,meta=!1,includeDeletion=!0){return await this.serializedForEvent(path2,async()=>{try{const prefixedPath=addPrefix(path2,ICHeader),docMeta=meta||await this.localDatabase.getDBEntryMeta(prefixedPath,{conflicts:!0},!0);if(!1===docMeta){this._log(`${headerLine}: Failed to read detail of ${path2}`);throw new Error(`Failed to read detail ${path2}`)}if(docMeta._conflicts&&docMeta._conflicts.length>0){this.conflictResolutionProcessor.enqueue(path2);this._log(`${headerLine} Hidden file conflicted, enqueued to resolve`);return!0}await this.extractInternalFileFromDatabase(path2,!1,docMeta,preventDoubleProcess,onlyNew,includeDeletion)&&this._log(`${headerLine} Hidden file processed`)}catch(ex){this._log(`${headerLine} Failed to process hidden file`);this._log(ex,LOG_LEVEL_VERBOSE)}return!0})}notifyConfigChange(){const updatedFolders=[...this.queuedNotificationFiles];this.queuedNotificationFiles.clear();try{const manifests=Object.values(this.app.plugins.manifests),enabledPlugins=this.app.plugins.enabledPlugins,modifiedManifests=manifests.filter(e3=>enabledPlugins.has(e3.id)).filter(e3=>{var _a8;return updatedFolders.indexOf(null!=(_a8=null==e3?void 0:e3.dir)?_a8:"")>=0});for(const manifest of modifiedManifests){const updatePluginId=manifest.id,updatePluginName=manifest.name;this.core.confirm.askInPopup(`updated-${updatePluginId}`,`Files in ${updatePluginName} has been updated!\nPress {HERE} to reload ${updatePluginName}, or press elsewhere to dismiss this message.`,anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{fireAndForget(async()=>{this._log(`Unloading plugin: ${updatePluginName}`,LOG_LEVEL_NOTICE,"plugin-reload-"+updatePluginId);await this.app.plugins.unloadPlugin(updatePluginId);await this.app.plugins.loadPlugin(updatePluginId);this._log(`Plugin reloaded: ${updatePluginName}`,LOG_LEVEL_NOTICE,"plugin-reload-"+updatePluginId)})})})}}catch(ex){this._log("Error on checking plugin status.");this._log(ex,LOG_LEVEL_VERBOSE)}updatedFolders.indexOf(this.services.API.getSystemConfigDir())>=0&&(this.services.appLifecycle.isReloadingScheduled()||this.core.confirm.askInPopup("updated-any-hidden","Some setting files have been modified\nPress {HERE} to schedule a reload of Obsidian, or press elsewhere to dismiss this message.",anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{this.services.appLifecycle.scheduleRestart()})}))}queueNotification(key3){if(this.settings.suppressNotifyHiddenFilesChange)return;const configDir=this.services.API.getSystemConfigDir();if(!key3.startsWith(configDir))return;const dirName=key3.split("/").slice(0,-1).join("/");this.queuedNotificationFiles.add(dirName);scheduleTask("notify-config-change",1e3,()=>{this.notifyConfigChange()})}async rebuildMerging(showNotice,targetFiles=!1){const logLevel=getLogLevel(showNotice),p2=this._progress("[⚙ Rebuild by Merge ]\n",logLevel);this._log("Rebuilding hidden files from the storage and the local database.",logLevel);p2.log("Enumerating local files...");const currentStorageFilesAll=await this.scanInternalFileNames(),currentStorageFiles=targetFiles?currentStorageFilesAll.filter(e3=>targetFiles.some(f4=>f4==e3)):currentStorageFilesAll;p2.log("Enumerating database files...");const allDatabaseFiles=await this.getAllDatabaseFiles(),allDatabaseMap=new Map(allDatabaseFiles.map(e3=>[stripAllPrefixes(this.getPath(e3)),e3])),currentDatabaseFiles=targetFiles?allDatabaseFiles.filter(e3=>targetFiles.some(f4=>f4==stripAllPrefixes(this.getPath(e3)))):allDatabaseFiles,allFileNames=new Set([...currentStorageFiles,...currentDatabaseFiles.map(e3=>stripAllPrefixes(this.getPath(e3)))]),storageToDatabase=[],databaseToStorage=[],eachProgress=onlyInNTimes(100,progress=>p2.log(`Checking ${progress}/${allFileNames.size}`));for(const file of allFileNames){eachProgress();const mtimeStorage=getComparingMTime(await this.core.storageAccess.statHidden(file)),dbEntry=allDatabaseMap.get(file),diff=compareMTime(mtimeStorage,getComparingMTime(dbEntry));diff==BASE_IS_NEW?storageToDatabase.push(file):diff==TARGET_IS_NEW?databaseToStorage.push(dbEntry):diff==EVEN&&storageToDatabase.push(file)}p2.once(`Storage to Database: ${storageToDatabase.length} files\n Database to Storage: ${databaseToStorage.length} files`);this.resetLastProcessedDatabase(targetFiles);this.resetLastProcessedFile(targetFiles);const processes=[this.useStorageFiles(storageToDatabase,showNotice,!1),this.useDatabaseFiles(databaseToStorage,showNotice,!1)];p2.log("Start processing...");await Promise.all(processes);p2.done();return[...allFileNames]}async rebuildFromStorage(showNotice,targetFiles=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice);this._verbose("Rebuilding hidden files from the storage.");this._log("Rebuilding hidden files from the storage.",logLevel);const p2=this._progress("[⚙ Rebuild by Storage ]\n",logLevel);p2.log("Enumerating local files...");const currentFilesAll=await this.scanInternalFileNames(),currentFiles=targetFiles?currentFilesAll.filter(e3=>targetFiles.some(f4=>f4==e3)):currentFilesAll;p2.once(`Storage to Database: ${currentFiles.length} files.`);p2.log("Start processing...");this.resetLastProcessedFile(targetFiles);await this.useStorageFiles(currentFiles,showNotice,onlyNew);p2.done();return currentFiles}async getAllDatabaseFiles(){const allFiles=(await this.localDatabase.allDocsRaw({startkey:ICHeader,endkey:"i;",include_docs:!0})).rows.filter(e3=>isInternalMetadata(e3.id)).map(e3=>e3.doc),files=[];for(const file of allFiles)await this.isTargetFile(stripAllPrefixes(this.getPath(file)))&&files.push(file);return files}async rebuildFromDatabase(showNotice,targetFiles=!1,onlyNew=!1){const logLevel=getLogLevel(showNotice);this._verbose("Rebuilding hidden files from the local database.");const p2=this._progress("[⚙ Rebuild by Database ]\n",logLevel);p2.log("Enumerating database files...");const allFiles=await this.getAllDatabaseFiles(),currentFiles=targetFiles?allFiles.filter(e3=>targetFiles.some(f4=>f4==stripAllPrefixes(this.getPath(e3)))):allFiles;p2.once(`Database to Storage: ${currentFiles.length} files.`);this.resetLastProcessedDatabase(targetFiles);p2.log("Start processing...");await this.useDatabaseFiles(currentFiles,showNotice,onlyNew);p2.done();return currentFiles}async initialiseInternalFileSync(direction,showMessage,targetFilesSrc=!1){const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,p2=this._progress("[⚙ Initialise]\n",logLevel);p2.log("Initialising hidden files sync...");const targetFiles=!!targetFilesSrc&&targetFilesSrc.map(e3=>stripAllPrefixes(e3));if("pushForce"==direction||"push"==direction){const onlyNew="push"==direction;p2.log("Started: Storage --\x3e Database "+(onlyNew?"(Only New)":""));const updatedFiles=await this.rebuildFromStorage(showMessage,targetFiles,onlyNew);await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllStorageChanges(showMessage,!0,!1);await this.scanAllDatabaseChanges(showMessage,!0,!1)}if("pullForce"==direction||"pull"==direction){const onlyNew="pull"==direction;p2.log("Started: Database --\x3e Storage "+(onlyNew?"(Only New)":""));const updatedFiles=(await this.rebuildFromDatabase(showMessage,targetFiles,onlyNew)).map(e3=>stripAllPrefixes(this.getPath(e3)));await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllDatabaseChanges(showMessage,!0,!1);await this.scanAllStorageChanges(showMessage,!0,!1)}if("safe"==direction){p2.log("Started: Database <--\x3e Storage (by modified date)");const updatedFiles=await this.rebuildMerging(showMessage,targetFiles);await this.adoptCurrentStorageFilesAsProcessed(updatedFiles);await this.adoptCurrentDatabaseFilesAsProcessed(updatedFiles);await this.scanAllStorageChanges(showMessage,!0,!1);await this.scanAllDatabaseChanges(showMessage,!0,!1)}p2.done()}async __loadBaseSaveData(file,includeContent=!0){const prefixedFileName=addPrefix(file,ICHeader),id=await this.path2id(prefixedFileName,ICHeader);try{const old=includeContent?await this.localDatabase.getDBEntry(prefixedFileName,void 0,!1,!0):await this.localDatabase.getDBEntryMeta(prefixedFileName,{conflicts:!0},!0);return!1===old?{_id:id,data:[],path:prefixedFileName,mtime:0,ctime:0,datatype:"newnote",children:[],size:0,deleted:!1,type:"newnote",eden:{}}:old}catch(ex){this._log("Getting base save data failed");this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async storeInternalFileToDatabase(file,forceWrite=!1){const storeFilePath=stripAllPrefixes(file.path),storageFilePath=file.path;if(await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return;const prefixedFileName=addPrefix(storeFilePath,ICHeader);return await serialized("file-"+prefixedFileName,async()=>{try{const fileInfo="stat"in file&&"body"in file?file:await this.loadFileWithInfo(storeFilePath);if(fileInfo.deleted)throw new Error(`Hidden file:${storeFilePath} is deleted. This should not be occurred.`);const baseData=await this.__loadBaseSaveData(storeFilePath,!0);if(!1===baseData)throw new Error("Failed to load base data");if(baseData._rev&&!forceWrite&&await isDocContentSame(readAsBlob(baseData),fileInfo.body)){this.updateLastProcessed(storeFilePath,baseData,fileInfo.stat);return}const saveData={...baseData,data:fileInfo.body,mtime:fileInfo.stat.mtime,size:fileInfo.stat.size,children:[],deleted:!1,type:baseData.datatype},ret=await this.localDatabase.putDBEntry(saveData);if(ret&&ret.ok){saveData._rev=ret.rev;this.updateLastProcessed(storeFilePath,saveData,fileInfo.stat)}const success=ret&&ret.ok;this._log(`STORAGE --\x3e DB:${storageFilePath}: (hidden) ${success?"Done":"Failed"}`);return success}catch(ex){this._log(`STORAGE --\x3e DB:${storageFilePath}: (hidden) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async deleteInternalFileOnDatabase(filenameSrc,forceWrite=!1){const storeFilePath=filenameSrc,storageFilePath=filenameSrc,displayFileName=filenameSrc,prefixedFileName=addPrefix(storeFilePath,ICHeader),mtime=(new Date).getTime();if(!await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return await serialized("file-"+prefixedFileName,async()=>{try{const baseData=await this.__loadBaseSaveData(storeFilePath,!1);if(!1===baseData)throw new Error("Failed to load base data during deleting");if(void 0!==baseData._conflicts)for(const conflictRev of baseData._conflicts){await this.localDatabase.removeRevision(baseData._id,conflictRev);this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) conflict removed ${baseData._rev} => ${conflictRev}`,LOG_LEVEL_VERBOSE)}if(baseData.deleted){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) already deleted`,LOG_LEVEL_VERBOSE);this.updateLastProcessedDeletion(storeFilePath,baseData);return!0}const saveData={...baseData,mtime,size:0,children:[],deleted:!0,type:baseData.datatype},ret=await this.localDatabase.putRaw(saveData);if(ret&&ret.ok){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Done`);saveData._rev=ret.rev;this.updateLastProcessedDeletion(storeFilePath,saveData);return!0}this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Failed`);return!1}catch(ex){this._log(`STORAGE -x> DB: ${displayFileName}: (hidden) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async extractInternalFileFromDatabase(storageFilePath,force=!1,metaEntry,preventDoubleProcess=!0,onlyNew=!1,includeDeletion=!0){const prefixedFileName=addPrefix(storageFilePath,ICHeader);if(!await this.services.vault.isIgnoredByIgnoreFile(storageFilePath))return await serialized("file-"+prefixedFileName,async()=>{var _a8,_b5;try{const metaOnDB=metaEntry||await this.localDatabase.getDBEntryMeta(prefixedFileName,{conflicts:!0},!0);if(!1===metaOnDB)throw new Error(`File not found on database.:${storageFilePath}`);if(null==(_a8=null==metaOnDB?void 0:metaOnDB._conflicts)?void 0:_a8.length){this._log(`Hidden file ${storageFilePath} has conflicted revisions, to keep in safe, writing to storage has been prevented`,LOG_LEVEL_INFO);return!1}if(preventDoubleProcess){const key3=this.docToKey(metaOnDB);if(this.getLastProcessedDatabaseKey(storageFilePath)==key3&&!force){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden, overwrite${force?", force":""}) (Previously processed)`);return}}if(onlyNew){const dbMTime=getComparingMTime(metaOnDB,includeDeletion),storageStat=await this.core.storageAccess.statHidden(storageFilePath),storageMTimeActual=null!=(_b5=null==storageStat?void 0:storageStat.mtime)?_b5:0;if(compareMTime(0==storageMTimeActual?this.getLastProcessedFileMTime(storageFilePath):storageMTimeActual,dbMTime)!=TARGET_IS_NEW){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden, overwrite${force?", force":""}) (Not new)`);this.updateLastProcessedDatabase(storageFilePath,metaOnDB);storageStat&&this.updateLastProcessedFile(storageFilePath,storageStat);return}}if(metaOnDB.deleted||metaOnDB._deleted){const result=await this.__deleteFile(storageFilePath);if("OK"==result){this.updateLastProcessedDeletion(storageFilePath,metaOnDB);return!0}if("ALREADY"==result){this.updateLastProcessedDatabase(storageFilePath,metaOnDB);return!0}return!1}{const fileOnDB=await this.localDatabase.getDBEntryFromMeta(metaOnDB,!1,!0);if(!1===fileOnDB)throw new Error(`Failed to read file from database:${storageFilePath}`);const resultStat=await this.__writeFile(storageFilePath,fileOnDB,force);if(resultStat){this.updateLastProcessed(storageFilePath,metaOnDB,resultStat);this.queueNotification(storageFilePath);this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Done`);return!0}}return!1}catch(ex){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async __checkIsNeedToWriteFile(storageFilePath,content){try{const storageContent=await this.core.storageAccess.readHiddenFileAuto(storageFilePath);return!await isDocContentSame(storageContent,content)}catch(ex){this._log(`Cannot check the content of ${storageFilePath}`);this._log(ex,LOG_LEVEL_VERBOSE);return!0}}async __writeFile(storageFilePath,fileOnDB,force){try{const statBefore=await this.core.storageAccess.statHidden(storageFilePath),isExist=null!=statBefore,writeContent=readContent(fileOnDB);await this.ensureDir(storageFilePath);if(!(force||!isExist||isExist&&await this.__checkIsNeedToWriteFile(storageFilePath,writeContent))){this._log(`STORAGE <-- DB: ${storageFilePath}: skipped (hidden) Not changed`,LOG_LEVEL_DEBUG);return statBefore}const writeResultStat=await this.writeFile(storageFilePath,writeContent,{mtime:fileOnDB.mtime,ctime:fileOnDB.ctime});if(null==writeResultStat){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden,new${force?", force":""}) Failed (writeResult)`);return!1}this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""})`);return writeResultStat}catch(ex){this._log(`STORAGE <-- DB: ${storageFilePath}: written (hidden, overwrite${force?", force":""}) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async __deleteFile(storageFilePath){const result=await this.__removeFile(storageFilePath);if(!1===result){this._log(`STORAGE <x- DB: ${storageFilePath}: deleting (hidden) Failed`);return!1}"OK"===result&&await this.triggerEvent(storageFilePath);this._log(`STORAGE <x- DB: ${storageFilePath}: deleting (hidden) ${"OK"==result?"Done":"Already not found"}`);return result}async _allAskUsingOptionalSyncFeature(opt){await this.__askHiddenFileConfiguration(opt);return!0}async __askHiddenFileConfiguration(opt){const message=`Would you like to enable **Hidden File Synchronization**?\n\n> [!DETAILS]-\n> This feature allows you to synchronize all hidden files without any user interaction.\n> To enable this feature, you should choose one of the following options:\n${opt.enableFetch?"> - Fetch: Use the files stored from other devices. Choose this option if you have already configured hidden file synchronization on those devices and wish to accept their files.\n":""}${opt.enableOverwrite?"> - Overwrite: Use the files from this device. Select this option if you want to overwrite the files stored on other devices.\n":""}> - Merge: Merge the files from this device with those on other devices. Choose this option if you wish to combine files from multiple sources.\n> However, please be reminded that merging may cause conflicts if the files are not identical. Additionally, this process may occur within the same folder, potentially breaking your plug-in or theme settings that comprise multiple files.\n\n\n> [!IMPORTANT]\n> Please keep in mind that enabling this feature alongside customisation sync may override certain behaviors.`,choices=[];(null==opt?void 0:opt.enableFetch)&&choices.push("Fetch");(null==opt?void 0:opt.enableOverwrite)&&choices.push("Overwrite");choices.push("Merge");choices.push("Disable");const ret=await this.core.confirm.confirmWithMessage("Hidden file sync",message,choices,"Disable",40);"Fetch"==ret?await this.configureHiddenFileSync("FETCH"):"Overwrite"==ret?await this.configureHiddenFileSync("OVERWRITE"):"Merge"==ret?await this.configureHiddenFileSync("MERGE"):"Disable"==ret&&await this.configureHiddenFileSync("DISABLE_HIDDEN")}_allSuspendExtraSync(){if(this.core.settings.syncInternalFiles){this._log("Hidden file synchronization have been temporarily disabled. Please enable them after the fetching, if you need them.",LOG_LEVEL_NOTICE);this.core.settings.syncInternalFiles=!1}return Promise.resolve(!0)}async _allConfigureOptionalSyncFeature(mode){await this.configureHiddenFileSync(mode);return!0}async configureHiddenFileSync(mode){if("FETCH"==mode||"OVERWRITE"==mode||"MERGE"==mode||"DISABLE"==mode||"DISABLE_HIDDEN"==mode)if("DISABLE"!=mode&&"DISABLE_HIDDEN"!=mode){this._log("Gathering files for enabling Hidden File Sync",LOG_LEVEL_NOTICE);"FETCH"==mode?await this.initialiseInternalFileSync("pullForce",!0):"OVERWRITE"==mode?await this.initialiseInternalFileSync("pushForce",!0):"MERGE"==mode&&await this.initialiseInternalFileSync("safe",!0);await this.core.services.setting.applyPartial({useAdvancedMode:!0,syncInternalFiles:!0},!0);this._log("Done! Restarting the app is strongly recommended!",LOG_LEVEL_NOTICE)}else await this.core.services.setting.applyPartial({syncInternalFiles:!1},!0)}async scanInternalFileNames(){const findRoot=this.app.vault.getRoot().path;return await this.getFiles(findRoot,path2=>this.isTargetFile(path2))}async scanInternalFiles(){var _a8,_b5,_c3,_d2,_e2,_f;const files=(await this.scanInternalFileNames()).map(async e3=>({path:e3,stat:await this.core.storageAccess.statHidden(e3)})),result=[];for(const f4 of files){const w2=await f4;if(await this.services.vault.isIgnoredByIgnoreFile(w2.path))continue;const mtime=null!=(_b5=null==(_a8=w2.stat)?void 0:_a8.mtime)?_b5:0,ctime=null!=(_d2=null==(_c3=w2.stat)?void 0:_c3.ctime)?_d2:mtime,size=null!=(_f=null==(_e2=w2.stat)?void 0:_e2.size)?_f:0;result.push({...w2,mtime,ctime,size})}return result}async getFiles(path2,checkFunction){let w2;try{w2=await this.app.vault.adapter.list(path2)}catch(ex){this._log(`Could not traverse(HiddenSync):${path2}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}let files=[];for(const file of w2.files)await checkFunction(file)&&files.push(file);for(const v2 of w2.folders)await checkFunction(v2)&&(files=files.concat(await this.getFiles(v2,checkFunction)));return files}onBindFunction(core,services){services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.fileProcessing.processOptionalFileEvent.addHandler(this._anyProcessOptionalFileEvent.bind(this));services.conflict.getOptionalConflictCheckMethod.addHandler(this._anyGetOptionalConflictCheckMethod.bind(this));services.replication.processOptionalSynchroniseResult.addHandler(this._anyProcessOptionalSyncFiles.bind(this));services.setting.onRealiseSetting.addHandler(this._everyRealizeSettingSyncMode.bind(this));services.appLifecycle.onResuming.addHandler(this._everyOnResumeProcess.bind(this));services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this));services.databaseEvents.onDatabaseInitialised.addHandler(this._everyOnDatabaseInitialized.bind(this));services.setting.suspendExtraSync.addHandler(this._allSuspendExtraSync.bind(this));services.setting.suggestOptionalFeatures.addHandler(this._allAskUsingOptionalSyncFeature.bind(this));services.setting.enableOptionalFeature.addHandler(this._allConfigureOptionalSyncFeature.bind(this));services.vault.isTargetFileInExtra.addHandler(this.isTargetFile.bind(this))}};t=new Uint8Array([0,97,115,109,1,0,0,0,1,48,8,96,3,127,127,127,0,96,3,127,127,127,1,127,96,2,127,127,0,96,2,127,126,0,96,1,127,1,127,96,1,127,1,126,96,3,127,127,126,1,126,96,3,126,127,127,1,126,3,11,10,1,1,2,0,4,6,7,3,0,5,5,3,1,0,1,7,85,9,3,109,101,109,2,0,5,120,120,104,51,50,0,0,6,105,110,105,116,51,50,0,2,8,117,112,100,97,116,101,51,50,0,3,8,100,105,103,101,115,116,51,50,0,4,5,120,120,104,54,52,0,5,6,105,110,105,116,54,52,0,7,8,117,112,100,97,116,101,54,52,0,8,8,100,105,103,101,115,116,54,52,0,9,10,211,23,10,242,1,1,4,127,32,0,32,1,106,33,3,32,1,65,16,79,4,127,32,3,65,16,107,33,6,32,2,65,168,136,141,161,2,106,33,3,32,2,65,247,148,175,175,120,106,33,4,32,2,65,177,243,221,241,121,107,33,5,3,64,32,0,40,2,0,65,247,148,175,175,120,108,32,3,106,65,13,119,65,177,243,221,241,121,108,33,3,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,4,106,65,13,119,65,177,243,221,241,121,108,33,4,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,2,106,65,13,119,65,177,243,221,241,121,108,33,2,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,32,5,106,65,13,119,65,177,243,221,241,121,108,33,5,32,0,65,4,106,34,0,32,6,77,13,0,11,32,2,65,12,119,32,5,65,18,119,106,32,4,65,7,119,106,32,3,65,1,119,106,5,32,2,65,177,207,217,178,1,106,11,32,1,106,32,0,32,1,65,15,113,16,1,11,146,1,0,32,1,32,2,106,33,2,3,64,32,1,65,4,106,32,2,75,69,4,64,32,1,40,2,0,65,189,220,202,149,124,108,32,0,106,65,17,119,65,175,214,211,190,2,108,33,0,32,1,65,4,106,33,1,12,1,11,11,3,64,32,1,32,2,79,69,4,64,32,1,45,0,0,65,177,207,217,178,1,108,32,0,106,65,11,119,65,177,243,221,241,121,108,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,65,15,118,32,0,115,65,247,148,175,175,120,108,34,0,32,0,65,13,118,115,65,189,220,202,149,124,108,34,0,32,0,65,16,118,115,11,63,0,32,0,65,8,106,32,1,65,168,136,141,161,2,106,54,2,0,32,0,65,12,106,32,1,65,247,148,175,175,120,106,54,2,0,32,0,65,16,106,32,1,54,2,0,32,0,65,20,106,32,1,65,177,243,221,241,121,107,54,2,0,11,211,4,1,6,127,32,1,32,2,106,33,6,32,0,65,24,106,33,5,32,0,65,40,106,40,2,0,33,3,32,0,32,0,40,2,0,32,2,106,54,2,0,32,0,65,4,106,34,4,32,4,40,2,0,32,2,65,16,79,32,0,40,2,0,65,16,79,114,114,54,2,0,32,2,32,3,106,65,16,73,4,64,32,3,32,5,106,32,1,32,2,252,10,0,0,32,0,65,40,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,5,106,32,1,65,16,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,40,2,0,32,5,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,12,106,34,3,40,2,0,32,5,65,4,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,16,106,34,3,40,2,0,32,5,65,8,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,20,106,34,3,40,2,0,32,5,65,12,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,3,32,4,54,2,0,32,0,65,40,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,32,6,65,16,107,77,4,64,32,6,65,16,107,33,8,32,0,65,8,106,40,2,0,33,2,32,0,65,12,106,40,2,0,33,3,32,0,65,16,106,40,2,0,33,4,32,0,65,20,106,40,2,0,33,7,3,64,32,1,40,2,0,65,247,148,175,175,120,108,32,2,106,65,13,119,65,177,243,221,241,121,108,33,2,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,3,106,65,13,119,65,177,243,221,241,121,108,33,3,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,4,106,65,13,119,65,177,243,221,241,121,108,33,4,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,32,7,106,65,13,119,65,177,243,221,241,121,108,33,7,32,1,65,4,106,34,1,32,8,77,13,0,11,32,0,65,8,106,32,2,54,2,0,32,0,65,12,106,32,3,54,2,0,32,0,65,16,106,32,4,54,2,0,32,0,65,20,106,32,7,54,2,0,11,32,1,32,6,73,4,64,32,5,32,1,32,6,32,1,107,34,1,252,10,0,0,32,0,65,40,106,32,1,54,2,0,11,11,97,1,1,127,32,0,65,16,106,40,2,0,33,1,32,0,65,4,106,40,2,0,4,127,32,1,65,12,119,32,0,65,20,106,40,2,0,65,18,119,106,32,0,65,12,106,40,2,0,65,7,119,106,32,0,65,8,106,40,2,0,65,1,119,106,5,32,1,65,177,207,217,178,1,106,11,32,0,40,2,0,106,32,0,65,24,106,32,0,65,40,106,40,2,0,16,1,11,157,4,2,1,127,3,126,32,0,32,1,106,33,3,32,1,65,32,79,4,126,32,3,65,32,107,33,3,32,2,66,135,149,175,175,152,182,222,155,158,127,124,66,207,214,211,190,210,199,171,217,66,124,33,4,32,2,66,207,214,211,190,210,199,171,217,66,124,33,5,32,2,66,0,124,33,6,32,2,66,135,149,175,175,152,182,222,155,158,127,125,33,2,3,64,32,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,4,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,4,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,5,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,5,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,6,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,2,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,2,32,0,65,8,106,34,0,32,3,77,13,0,11,32,6,66,12,137,32,2,66,18,137,124,32,5,66,7,137,124,32,4,66,1,137,124,32,4,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,5,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,6,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,2,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,5,32,2,66,197,207,217,178,241,229,186,234,39,124,11,32,1,173,124,32,0,32,1,65,31,113,16,6,11,137,2,0,32,1,32,2,106,33,2,3,64,32,1,65,8,106,32,2,77,4,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,27,137,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,33,0,32,1,65,8,106,33,1,12,1,11,11,32,1,65,4,106,32,2,77,4,64,32,1,53,2,0,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,23,137,66,207,214,211,190,210,199,171,217,66,126,66,249,243,221,241,153,246,153,171,22,124,33,0,32,1,65,4,106,33,1,11,3,64,32,1,32,2,73,4,64,32,1,49,0,0,66,197,207,217,178,241,229,186,234,39,126,32,0,133,66,11,137,66,135,149,175,175,152,182,222,155,158,127,126,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,66,33,136,32,0,133,66,207,214,211,190,210,199,171,217,66,126,34,0,32,0,66,29,136,133,66,249,243,221,241,153,246,153,171,22,126,34,0,32,0,66,32,136,133,11,88,0,32,0,65,8,106,32,1,66,135,149,175,175,152,182,222,155,158,127,124,66,207,214,211,190,210,199,171,217,66,124,55,3,0,32,0,65,16,106,32,1,66,207,214,211,190,210,199,171,217,66,124,55,3,0,32,0,65,24,106,32,1,55,3,0,32,0,65,32,106,32,1,66,135,149,175,175,152,182,222,155,158,127,125,55,3,0,11,132,5,2,3,127,4,126,32,1,32,2,106,33,5,32,0,65,40,106,33,4,32,0,65,200,0,106,40,2,0,33,3,32,0,32,0,41,3,0,32,2,173,124,55,3,0,32,2,32,3,106,65,32,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,200,0,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,32,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,41,3,0,32,4,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,16,106,34,3,41,3,0,32,4,65,8,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,24,106,34,3,41,3,0,32,4,65,16,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,32,106,34,3,41,3,0,32,4,65,24,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,3,32,6,55,3,0,32,0,65,200,0,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,65,32,106,32,5,77,4,64,32,5,65,32,107,33,2,32,0,65,8,106,41,3,0,33,6,32,0,65,16,106,41,3,0,33,7,32,0,65,24,106,41,3,0,33,8,32,0,65,32,106,41,3,0,33,9,3,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,6,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,7,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,7,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,8,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,8,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,32,9,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,9,32,1,65,8,106,34,1,32,2,77,13,0,11,32,0,65,8,106,32,6,55,3,0,32,0,65,16,106,32,7,55,3,0,32,0,65,24,106,32,8,55,3,0,32,0,65,32,106,32,9,55,3,0,11,32,1,32,5,73,4,64,32,4,32,1,32,5,32,1,107,34,1,252,10,0,0,32,0,65,200,0,106,32,1,54,2,0,11,11,200,2,1,5,126,32,0,65,24,106,41,3,0,33,1,32,0,41,3,0,34,2,66,32,90,4,126,32,0,65,8,106,41,3,0,34,3,66,1,137,32,0,65,16,106,41,3,0,34,4,66,7,137,124,32,1,66,12,137,32,0,65,32,106,41,3,0,34,5,66,18,137,124,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,4,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,1,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,32,5,66,207,214,211,190,210,199,171,217,66,126,66,0,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,227,220,202,149,252,206,242,245,133,127,124,5,32,1,66,197,207,217,178,241,229,186,234,39,124,11,32,2,124,32,0,65,40,106,32,2,66,31,131,167,16,6,11]);hashFunc=str=>fallbackMixedHashEach(str);!async function initHashFunc(){try{const{h32ToString}=await e();hashFunc=h32ToString;Logger("xxhash for plugin initialised",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not initialise xxhash. fallback...",LOG_LEVEL_VERBOSE);Logger(ex);hashFunc=str=>fallbackMixedHashEach(str)}}();globalSlipBoard2=globalSlipBoard;import_diff_match_patch2=__toESM(require_diff_match_patch(),1);ConflictResolveModal=class extends import_obsidian.Modal{constructor(app,filename,diff,pluginPickMode,remoteName){super(app);this.response=CANCELLED;this.isClosed=!1;this.consumed=!1;this.title="Conflicting changes";this.pluginPickMode=!1;this.localName="Base";this.remoteName="Conflicted";this.result=diff;this.filename=filename;this.pluginPickMode=pluginPickMode||!1;if(this.pluginPickMode){this.title="Pick a version";this.remoteName=`${remoteName||"Remote"}`;this.localName="Local"}}onOpen(){const{contentEl}=this;globalSlipBoard2.submit("conflict-resolved",this.filename,CANCELLED);this.offEvent&&this.offEvent();this.offEvent=eventHub.onEvent("conflict-cancelled",path2=>{path2===this.filename&&this.sendResponse(CANCELLED)});this.titleEl.setText(this.title);contentEl.empty();contentEl.createEl("span",{text:this.filename});const div=contentEl.createDiv("");div.addClass("op-scrollable");div.addClass("ls-dialog");let diff="";for(const v2 of this.result.diff){const x1=v2[0],x2=v2[1];x1==import_diff_match_patch2.DIFF_DELETE?diff+="<span class='deleted'>"+escapeStringToHTML(x2).replace(/\n/g,"<span class='ls-mark-cr'></span>\n")+"</span>":x1==import_diff_match_patch2.DIFF_EQUAL?diff+="<span class='normal'>"+escapeStringToHTML(x2).replace(/\n/g,"<span class='ls-mark-cr'></span>\n")+"</span>":x1==import_diff_match_patch2.DIFF_INSERT&&(diff+="<span class='added'>"+escapeStringToHTML(x2).replace(/\n/g,"<span class='ls-mark-cr'></span>\n")+"</span>")}const div2=contentEl.createDiv("");div2.addClass("ls-dialog");const date1=new Date(this.result.left.mtime).toLocaleString()+(this.result.left.deleted?" (Deleted)":""),date2=new Date(this.result.right.mtime).toLocaleString()+(this.result.right.deleted?" (Deleted)":"");div2.innerHTML=`<span class='deleted'><span class='conflict-dev-name'>${this.localName}</span>: ${date1}</span><br>\n<span class='added'><span class='conflict-dev-name'>${this.remoteName}</span>: ${date2}</span><br>`;contentEl.createEl("button",{text:`Use ${this.localName}`},e3=>e3.addEventListener("click",()=>this.sendResponse(this.result.right.rev))).style.marginRight="4px";contentEl.createEl("button",{text:`Use ${this.remoteName}`},e3=>e3.addEventListener("click",()=>this.sendResponse(this.result.left.rev))).style.marginRight="4px";this.pluginPickMode||(contentEl.createEl("button",{text:"Concat both"},e3=>e3.addEventListener("click",()=>this.sendResponse(LEAVE_TO_SUBSEQUENT))).style.marginRight="4px");contentEl.createEl("button",{text:this.pluginPickMode?"Cancel":"Not now"},e3=>e3.addEventListener("click",()=>this.sendResponse(CANCELLED))).style.marginRight="4px";diff=diff.replace(/\n/g,"<br>");diff.length>102400?div.innerText="(Too large diff to display)":div.innerHTML=diff}sendResponse(result){this.response=result;this.close()}onClose(){const{contentEl}=this;contentEl.empty();this.offEvent&&this.offEvent();if(!this.consumed){this.consumed=!0;globalSlipBoard2.submit("conflict-resolved",this.filename,this.response)}}async waitForResult(){await delay(100);return await globalSlipBoard2.awaitNext("conflict-resolved",this.filename)}};(function enable_legacy_mode_flag(){legacy_mode_flag=!0})();root_3=from_html("<option> </option>");root_62=from_html('<button class="svelte-14nm4oc">🗃️</button>');root_7=from_html('<button class="svelte-14nm4oc">⮂</button>');root_8=from_html('<button disabled class="svelte-14nm4oc"></button>');root_42=from_html('<!> <button class="svelte-14nm4oc">✓</button>',1);root_9=from_html('<button disabled class="svelte-14nm4oc"></button> <button disabled class="svelte-14nm4oc"></button>',1);root_11=from_html('<button class="svelte-14nm4oc">🗑️</button>');root_122=from_html('<button class="svelte-14nm4oc">📑</button>');root_22=from_html('<span class="chip-wrap svelte-14nm4oc"><span class="chip modified svelte-14nm4oc"> </span> <span class="chip content svelte-14nm4oc"> </span> <span class="chip version svelte-14nm4oc"> </span></span> <select><option>-</option><!></select> <!> <!>',1);root_13=from_html('<span class="spacer svelte-14nm4oc"></span> <!>',1);root_132=from_html('<span class="spacer svelte-14nm4oc"></span> <span class="message even svelte-14nm4oc">All the same or non-existent</span> <button disabled class="svelte-14nm4oc"></button> <button disabled class="svelte-14nm4oc"></button>',1);$$css3={hash:"svelte-14nm4oc",code:'.spacer.svelte-14nm4oc {min-width:1px;flex-grow:1;}button.svelte-14nm4oc {margin:2px 4px;min-width:3em;max-width:4em;}button.svelte-14nm4oc:disabled {border:none;box-shadow:none;background-color:transparent;visibility:collapse;}button.svelte-14nm4oc:disabled:hover {border:none;box-shadow:none;background-color:transparent;visibility:collapse;}span.message.svelte-14nm4oc {color:var(--text-muted);font-size:var(--font-ui-smaller);padding:0 1em;line-height:var(--line-height-tight);}\n /* span.messages {\n display: flex;\n flex-direction: column;\n align-items: center;\n } */.is-mobile .spacer.svelte-14nm4oc {margin-left:auto;}.chip-wrap.svelte-14nm4oc {display:flex;gap:2px;flex-direction:column;justify-content:center;align-items:flex-start;}.chip.svelte-14nm4oc {display:inline-block;border-radius:2px;font-size:0.8em;padding:0 4px;margin:0 2px;border-color:var(--tag-border-color);background-color:var(--tag-background);color:var(--tag-color);}.chip.svelte-14nm4oc:empty {display:none;}.chip.svelte-14nm4oc:not(:empty)::before {min-width:1.8em;display:inline-block;}.chip.content.svelte-14nm4oc:not(:empty)::before {content:"📄: ";}.chip.version.svelte-14nm4oc:not(:empty)::before {content:"🏷️: ";}.chip.modified.svelte-14nm4oc:not(:empty)::before {content:"📅: ";}'};root_14=from_html('<button class="svelte-10jah2g">Reload</button>');root_23=from_html("<span> </span>");root_32=from_html('<div class="center svelte-10jah2g">No Items.</div>');root_82=from_html('<div class="statusnote svelte-10jah2g"> </div>');root_63=from_html('<div><div class="title svelte-10jah2g"><button class="status svelte-10jah2g"> </button> <span class="name"> </span></div> <div class="body svelte-10jah2g"><!></div></div>');root_52=from_html('<div><h3 class="svelte-10jah2g"> </h3> <!></div>');root_133=from_html('<div class="statusnote svelte-10jah2g"> </div>');root_15=from_html('<div class="statusnote svelte-10jah2g"> </div>');root_18=from_html('<div class="statusnote svelte-10jah2g"> </div>');root_16=from_html('<div><div class="filetitle svelte-10jah2g"><button class="status svelte-10jah2g"> </button> <span class="name">Other files</span></div> <div class="body svelte-10jah2g"><!></div></div>');root_112=from_html('<div><div class="filetitle svelte-10jah2g"><button class="status svelte-10jah2g"> </button> <span class="name">MAIN</span></div> <div class="body svelte-10jah2g"><!></div></div> <div><div class="filetitle svelte-10jah2g"><button class="status svelte-10jah2g"> </button> <span class="name">DATA</span></div> <div class="body svelte-10jah2g"><!></div></div> <!>',1);root_19=from_html('<div class="noterow svelte-10jah2g"><div class="statusnote svelte-10jah2g"> </div></div>');root_92=from_html('<div><div class="title svelte-10jah2g"><button class="status svelte-10jah2g"> </button> <span class="name"> </span></div> <div class="body svelte-10jah2g"><!></div></div> <!>',1);root_43=from_html('<!> <div><h3 class="svelte-10jah2g">Plugins</h3> <!></div>',1);root_21=from_html("<option> </option>");root_20=from_html('<div class="buttons svelte-10jah2g"><div><h3 class="svelte-10jah2g">Maintenance Commands</h3> <div class="maintenancerow svelte-10jah2g"><label for="" class="svelte-10jah2g">Delete All of</label> <select></select> <button class="status svelte-10jah2g">🗑️</button></div></div></div>');root3=from_html('<div class="buttonsWrap svelte-10jah2g"><div class="buttons svelte-10jah2g"><button class="svelte-10jah2g">Scan changes</button> <button class="svelte-10jah2g">Sync once</button> <button class="svelte-10jah2g">Refresh</button> <!></div> <div class="buttons svelte-10jah2g"><button class="svelte-10jah2g">Select All Shiny</button> <button class="svelte-10jah2g"></button> <button class="svelte-10jah2g">Deselect all</button> <button class="mod-cta svelte-10jah2g">Apply All Selected</button></div></div> <div class="loading svelte-10jah2g"><!></div> <div class="list svelte-10jah2g"><!></div> <!> <div class="buttons svelte-10jah2g"><label class="svelte-10jah2g"><span class="svelte-10jah2g">Hide not applicable items</span><input type="checkbox"/></label></div> <div class="buttons svelte-10jah2g"><label class="svelte-10jah2g"><span class="svelte-10jah2g">Maintenance mode</span><input type="checkbox"/></label></div>',1);$$css4={hash:"svelte-10jah2g",code:".buttonsWrap.svelte-10jah2g {padding-bottom:4px;}h3.svelte-10jah2g {position:sticky;top:0;background-color:var(--modal-background);}.labelrow.svelte-10jah2g {margin-left:0.4em;display:flex;justify-content:flex-start;align-items:center;border-top:1px solid var(--background-modifier-border);padding:4px;flex-wrap:wrap;}.filerow.svelte-10jah2g {margin-left:1.25em;display:flex;justify-content:flex-start;align-items:center;padding-right:4px;flex-wrap:wrap;}.filerow.hideeven.svelte-10jah2g:has(.even),\n .labelrow.hideeven.svelte-10jah2g:has(.even) {display:none;}.noterow.svelte-10jah2g {min-height:2em;display:flex;}button.status.svelte-10jah2g {flex-grow:0;margin:2px 4px;min-width:3em;max-width:4em;}.statusnote.svelte-10jah2g {display:flex;justify-content:flex-end;padding-right:var(--size-4-12);align-items:center;min-width:10em;flex-grow:1;}.list.svelte-10jah2g {overflow-y:auto;}.title.svelte-10jah2g {color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto;}.body.svelte-10jah2g {\n /* margin-left: 0.4em; */margin-left:auto;display:flex;justify-content:flex-start;align-items:center;\n /* flex-wrap: wrap; */}.filetitle.svelte-10jah2g {color:var(--text-normal);font-size:var(--font-ui-medium);line-height:var(--line-height-tight);margin-right:auto;}.buttons.svelte-10jah2g {display:flex;flex-direction:row;justify-content:flex-end;margin-top:8px;flex-wrap:wrap;}.buttons.svelte-10jah2g > button:where(.svelte-10jah2g) {margin-left:4px;width:auto;}label.svelte-10jah2g {display:flex;justify-content:center;align-items:center;}label.svelte-10jah2g > span:where(.svelte-10jah2g) {margin-right:0.25em;}.is-mobile .title.svelte-10jah2g,\n .is-mobile .filetitle.svelte-10jah2g {width:100%;}.center.svelte-10jah2g {display:flex;justify-content:center;align-items:center;min-height:3em;}.maintenancerow.svelte-10jah2g {display:flex;justify-content:flex-end;align-items:center;}.maintenancerow.svelte-10jah2g label:where(.svelte-10jah2g) {margin-right:0.5em;margin-left:0.5em;}.loading.svelte-10jah2g {transition:height 0.25s ease-in-out;transition-delay:4ms;overflow-y:hidden;flex-shrink:0;display:flex;justify-content:flex-start;align-items:center;}.loading.svelte-10jah2g:empty {height:0px;transition:height 0.25s ease-in-out;transition-delay:1s;}.loading.svelte-10jah2g:not(:empty) {height:2em;transition:height 0.25s ease-in-out;transition-delay:0;}"};PluginDialogModal=class extends import_obsidian.Modal{isOpened(){return null!=this.component}constructor(app,plugin3){super(app);this.plugin=plugin3}onOpen(){const{contentEl}=this;this.contentEl.style.overflow="auto";this.contentEl.style.display="flex";this.contentEl.style.flexDirection="column";this.titleEl.setText("Customization Sync (Beta3)");this.component||(this.component=mount(PluginPane,{target:contentEl,props:{plugin:this.plugin,core:this.plugin.core}}))}onClose(){if(this.component){unmount(this.component);this.component=void 0}}};d="";d2="\n";DUMMY_HEAD=serialize({category:"CONFIG",name:"migrated",files:[],mtime:0,term:"-",displayName:"MIRAGED"});DUMMY_END=d+d2+"";pluginList=writable([]);pluginIsEnumerating=writable(!1);pluginV2Progress=writable(0);pluginManifestStore=writable(pluginManifests=new Map);PluginDataExDisplayV2=class{constructor(data){this.files=[];this.documentPath=`${data.documentPath}`;this.category=`${data.category}`;this.name=`${data.name}`;this.term=`${data.term}`;this.files=[...data.files];this.confKey=`${categoryToFolder(this.category,this.term)}${this.name}`;this.applyLoadedManifest()}async setFile(file){const old=this.files.find(e3=>e3.filename==file.filename);if(old){if(old.mtime==file.mtime&&await isDocContentSame(old.data,file.data))return;this.files=this.files.filter(e3=>e3.filename!=file.filename)}this.files.push(file);"manifest.json"==file.filename&&this.applyLoadedManifest()}deleteFile(filename){this.files=this.files.filter(e3=>e3.filename!=filename)}applyLoadedManifest(){const manifest=pluginManifests.get(this.confKey);if(manifest){this._displayName=manifest.name;"PLUGIN_MAIN"!=this.category&&"THEME"!=this.category||(this._version=null==manifest?void 0:manifest.version)}}get displayName(){return this._displayName||this.name}get version(){return this._version}get mtime(){return~~this.files.reduce((a2,b3)=>a2+b3.mtime,0)/this.files.length}};ConfigSync=class extends LiveSyncCommands{constructor(plugin3,core){super(plugin3,core);this.pluginDialog=void 0;this.periodicPluginSweepProcessor=new PeriodicProcessor(this.core,async()=>await this.scanAllConfigFiles(!1));this.pluginList=[];this.addRibbonIcon=this.services.API.addRibbonIcon.bind(this.services.API);this.pluginScanProcessor=new QueueProcessor(async v2=>{const plugin3=v2[0];if(this.useV2){await this.migrateV1ToV2(!1,plugin3);return[]}const path2=plugin3.path||this.getPath(plugin3),oldEntry=this.pluginList.find(e3=>e3.documentPath==path2);if(oldEntry&&oldEntry.mtime==plugin3.mtime)return[];try{const pluginData=await this.loadPluginData(path2);if(pluginData){let newList=[...this.pluginList];newList=newList.filter(x2=>x2.documentPath!=pluginData.documentPath);newList.push(pluginData);this.pluginList=newList;pluginList.set(newList)}return[]}catch(ex){this._log(`Something happened at enumerating customization :${path2}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}return[]},{suspended:!1,batchSize:1,concurrentLimit:10,delay:100,yieldThreshold:10,maintainDelay:!1,totalRemainingReactiveSource:pluginScanningCount}).startPipeline();this.pluginScanProcessorV2=new QueueProcessor(async v2=>{const plugin3=v2[0],path2=plugin3.path||this.getPath(plugin3),oldEntry=this.pluginList.find(e3=>e3.documentPath==path2);if(oldEntry&&oldEntry.mtime==plugin3.mtime)return[];try{const pluginData=await this.loadPluginData(path2);if(pluginData){let newList=[...this.pluginList];newList=newList.filter(x2=>x2.documentPath!=pluginData.documentPath);newList.push(pluginData);this.pluginList=newList;pluginList.set(newList)}return[]}catch(ex){this._log(`Something happened at enumerating customization :${path2}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}return[]},{suspended:!1,batchSize:1,concurrentLimit:10,delay:100,yieldThreshold:10,maintainDelay:!1,totalRemainingReactiveSource:pluginScanningCount}).startPipeline();this.loadedManifest_mTime=new Map;this.updatingV2Count=0;this.recentProcessedInternalFiles=[];pluginScanningCount.onChanged(e3=>{const total=e3.value;pluginIsEnumerating.set(0!=total)})}get configDir(){return this.core.services.API.getSystemConfigDir()}get kvDB(){return this.core.kvDB}get useV2(){return this.core.settings.usePluginSyncV2}get useSyncPluginEtc(){return this.core.settings.usePluginEtc}isThisModuleEnabled(){return this.core.settings.usePluginSync}showPluginSyncModal(){if(this.isThisModuleEnabled())if(this.pluginDialog)this.pluginDialog.open();else{this.pluginDialog=new PluginDialogModal(this.app,this.plugin);this.pluginDialog.open()}}hidePluginSyncModal(){if(null!=this.pluginDialog){this.pluginDialog.close();this.pluginDialog=void 0}}onunload(){var _a8;this.hidePluginSyncModal();null==(_a8=this.periodicPluginSweepProcessor)||_a8.disable()}onload(){(0,import_obsidian.addIcon)("custom-sync",'<g transform="rotate(-90 75 218)" fill="currentColor" fill-rule="evenodd">\n <path d="m272 166-9.38 9.38 9.38 9.38 9.38-9.38c1.96-1.93 5.11-1.9 7.03 0.058 1.91 1.94 1.91 5.04 0 6.98l-9.38 9.38 5.86 5.86-11.7 11.7c-8.34 8.35-21.4 9.68-31.3 3.19l-3.84 3.98c-8.45 8.7-20.1 13.6-32.2 13.6h-5.55v-9.95h5.55c9.43-0.0182 18.5-3.84 25-10.6l3.95-4.09c-6.54-9.86-5.23-23 3.14-31.3l11.7-11.7 5.86 5.86 9.38-9.38c1.96-1.93 5.11-1.9 7.03 0.0564 1.91 1.93 1.91 5.04 2e-3 6.98z"/>\n </g>');this.services.API.addCommand({id:"livesync-plugin-dialog-ex",name:"Show customization sync dialog",callback:()=>{this.showPluginSyncModal()}});this.addRibbonIcon("custom-sync",$msg("cmdConfigSync.showCustomizationSync"),()=>{this.showPluginSyncModal()}).addClass("livesync-ribbon-showcustom");eventHub.onEvent(EVENT_REQUEST_OPEN_PLUGIN_SYNC_DIALOG2,()=>this.showPluginSyncModal())}getFileCategory(filePath){return 2==filePath.split("/").length&&filePath.endsWith(".json")?"CONFIG":4==filePath.split("/").length&&filePath.startsWith(`${this.configDir}/themes/`)?"THEME":filePath.startsWith(`${this.configDir}/snippets/`)&&filePath.endsWith(".css")?"SNIPPET":filePath.startsWith(`${this.configDir}/plugins/`)?filePath.endsWith("/styles.css")||filePath.endsWith("/manifest.json")||filePath.endsWith("/main.js")?"PLUGIN_MAIN":filePath.endsWith("/data.json")?"PLUGIN_DATA":this.useV2&&this.useSyncPluginEtc?"PLUGIN_ETC":"":""}isTargetPath(filePath){return!!filePath.startsWith(this.configDir)&&""!=this.getFileCategory(filePath)}async _everyOnDatabaseInitialized(showNotice){if(!this.isThisModuleEnabled())return!0;try{this._log("Scanning customizations...");await this.scanAllConfigFiles(showNotice);this._log("Scanning customizations : done")}catch(ex){this._log("Scanning customizations : failed");this._log(ex,LOG_LEVEL_VERBOSE)}return!0}async _everyBeforeReplicate(showNotice){if(!this.isThisModuleEnabled())return!0;if(this.settings.autoSweepPlugins){await this.scanAllConfigFiles(showNotice);return!0}return!0}async _everyOnResumeProcess(){if(!this.isThisModuleEnabled())return!0;if(this._isMainSuspended())return!0;this.settings.autoSweepPlugins&&await this.scanAllConfigFiles(!1);this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic&&!this.settings.watchInternalFileChanges?6e4:0);return!0}_everyAfterResumeProcess(){const q2=activeDocument.querySelector(".livesync-ribbon-showcustom");null==q2||q2.toggleClass("sls-hidden",!this.isThisModuleEnabled());return Promise.resolve(!0)}async reloadPluginList(showMessage){this.pluginList=[];this.loadedManifest_mTime.clear();pluginList.set(this.pluginList);await this.updatePluginList(showMessage)}async loadPluginData(path2){const wx=await this.localDatabase.getDBEntry(path2,void 0,!1,!1);if(wx){const data=deserialize(getDocDataAsArray(wx.data),{}),xFiles=[];let missingHash=!1;for(const file of data.files){const work={...file,data:[]};if(!file.hash){const hash3=digestHash(getDocDataAsArray(work.data));file.hash=hash3;missingHash=!0}work.data=[file.hash];xFiles.push(work)}if(missingHash){this._log(`Digest created for ${path2} to improve checking`,LOG_LEVEL_VERBOSE);wx.data=serialize(data);fireAndForget(()=>this.localDatabase.putDBEntry(createSavingEntryFromLoadedEntry(wx)))}return{...data,documentPath:this.getPath(wx),files:xFiles}}return!1}filenameToUnifiedKey(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName(),category=this.getFileCategory(path2),name="CONFIG"==category||"SNIPPET"==category?path2.split("/").slice(-1)[0]:"PLUGIN_ETC"==category?path2.split("/").slice(-2).join("/"):path2.split("/").slice(-2)[0];return`${ICXHeader}${term}/${category}/${name}.md`}filenameWithUnifiedKey(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName(),category=this.getFileCategory(path2),name="CONFIG"==category||"SNIPPET"==category?path2.split("/").slice(-1)[0]:path2.split("/").slice(-2)[0],baseName="CONFIG"==category||"SNIPPET"==category?name:path2.split("/").slice(3).join("/");return`${ICXHeader}${term}/${category}/${name}%${baseName}`}unifiedKeyPrefixOfTerminal(termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName();return`${ICXHeader}${term}/`}parseUnifiedPath(unifiedPath){const[device,category,...rest]=stripAllPrefixes(unifiedPath).split("/"),relativePath=rest.join("/"),[key3,filename]=relativePath.split("%");return{device,category,key:key3,filename,pathV1:unifiedPath.split("%")[0]+".md"}}async createPluginDataExFileV2(unifiedPathV2,loaded){const{category,key:key3,filename,device}=this.parseUnifiedPath(unifiedPathV2);if(!loaded){const d4=await this.localDatabase.getDBEntry(unifiedPathV2);if(!d4){this._log(`The file ${unifiedPathV2} is not found`,LOG_LEVEL_VERBOSE);return!1}if(!isLoadedEntry(d4)){this._log(`The file ${unifiedPathV2} is not a note`,LOG_LEVEL_VERBOSE);return!1}loaded=d4}const confKey=`${categoryToFolder(category,device)}${key3}`,relativeFilename=`${categoryToFolder(category,"")}${"CONFIG"==category||"SNIPPET"==category?"":key3+"/"}${filename}`.substring(1),dataSrc=getDocData(loaded.data),dataStart=dataSrc.indexOf(DUMMY_END),data=dataSrc.substring(dataStart+DUMMY_END.length),file={...loaded,hash:"",data:[base64ToString(data)],filename:relativeFilename,displayName:filename};if("manifest.json"==filename)if(this.loadedManifest_mTime.get(confKey)!=file.mtime&&null==pluginManifests.get(confKey)){try{const parsedManifest=JSON.parse(base64ToString(data));setManifest(confKey,parsedManifest);this.pluginList.filter(e3=>e3 instanceof PluginDataExDisplayV2&&e3.confKey==confKey).forEach(e3=>e3.applyLoadedManifest());pluginList.set(this.pluginList)}catch(ex){this._log(`The file ${loaded.path} seems to manifest, but could not be decoded as JSON`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}this.loadedManifest_mTime.set(confKey,file.mtime)}else{this.pluginList.filter(e3=>e3 instanceof PluginDataExDisplayV2&&e3.confKey==confKey).forEach(e3=>e3.applyLoadedManifest());pluginList.set(this.pluginList)}return file}createPluginDataFromV2(unifiedPathV2){const{category,device,key:key3,pathV1}=this.parseUnifiedPath(unifiedPathV2);if(""!=category)return new PluginDataExDisplayV2({documentPath:pathV1,category,name:key3,term:`${device}`,files:[],mtime:0})}async updatePluginListV2(showMessage,unifiedFilenameWithKey){try{this.updatingV2Count++;pluginV2Progress.set(this.updatingV2Count);const{pathV1}=this.parseUnifiedPath(unifiedFilenameWithKey),oldEntry=this.pluginList.find(e3=>e3.documentPath==pathV1);let entry;if(oldEntry&&oldEntry instanceof PluginDataExDisplayV2)oldEntry instanceof PluginDataExDisplayV2&&(entry=oldEntry);else{const newEntry=this.createPluginDataFromV2(unifiedFilenameWithKey);newEntry&&(entry=newEntry)}if(!entry)return;const file=await this.createPluginDataExFileV2(unifiedFilenameWithKey);if(file)await entry.setFile(file);else{entry.deleteFile(unifiedFilenameWithKey);0==entry.files.length&&(this.pluginList=this.pluginList.filter(e3=>e3.documentPath!=pathV1))}const newList=this.pluginList.filter(e3=>e3.documentPath!=entry.documentPath);newList.push(entry);this.pluginList=newList;scheduleTask("updatePluginListV2",100,()=>{pluginList.set(this.pluginList)})}finally{this.updatingV2Count--;pluginV2Progress.set(this.updatingV2Count)}}async migrateV1ToV2(showMessage,entry){var _a8;const v1Path=entry.path;this._log(`Migrating ${entry.path} to V2`,showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);if(entry.deleted){this._log(`The entry ${v1Path} is already deleted`,LOG_LEVEL_VERBOSE);return}if(!v1Path.endsWith(".md")&&!v1Path.startsWith(ICXHeader)){this._log(`The entry ${v1Path} is not a customisation sync binder`,LOG_LEVEL_VERBOSE);return}if(-1!==v1Path.indexOf("%")){this._log(`The entry ${v1Path} is already migrated`,LOG_LEVEL_VERBOSE);return}const loadedEntry=await this.localDatabase.getDBEntry(v1Path);if(!loadedEntry){this._log(`The entry ${v1Path} is not found`,LOG_LEVEL_VERBOSE);return}const pluginData=deserialize(getDocDataAsArray(loadedEntry.data),{}),prefixPath=v1Path.slice(0,-3)+"%",category=pluginData.category;for(const f4 of pluginData.files){const stripTable={CONFIG:0,THEME:2,SNIPPET:1,PLUGIN_MAIN:2,PLUGIN_DATA:2,PLUGIN_ETC:2},deletePrefixCount=null!=(_a8=null==stripTable?void 0:stripTable[category])?_a8:1,relativeFilename=f4.filename.split("/").slice(deletePrefixCount).join("/"),v2Path=prefixPath+relativeFilename;this._log(`Migrating ${v1Path} / ${relativeFilename} to ${v2Path}`,LOG_LEVEL_VERBOSE);const newId=await this.services.path.path2id(v2Path),data=createBlob([DUMMY_HEAD,DUMMY_END,...getDocDataAsArray(f4.data)]),saving={...loadedEntry,_rev:void 0,_id:newId,path:v2Path,data,datatype:"plain",type:"plain",children:[],eden:{}},r4=await this.core.localDatabase.putDBEntry(saving);if(r4&&r4.ok){this._log(`Migrated ${v1Path} / ${f4.filename} to ${v2Path}`,LOG_LEVEL_INFO);await this.deleteConfigOnDatabase(v1Path)?this._log(`Deleted ${v1Path} successfully`,LOG_LEVEL_INFO):this._log(`Failed to delete ${v1Path}`,LOG_LEVEL_NOTICE)}}}async updatePluginList(showMessage,updatedDocumentPath){if(this.isThisModuleEnabled()){try{this.updatingV2Count++;pluginV2Progress.set(this.updatingV2Count);const updatedDocumentId=updatedDocumentPath?await this.path2id(updatedDocumentPath):"",plugins=updatedDocumentPath?this.localDatabase.findEntries(updatedDocumentId,updatedDocumentId+"􏿿",{include_docs:!0,key:updatedDocumentId,limit:1}):this.localDatabase.findEntries(ICXHeader+"",`${ICXHeader}􏿿`,{include_docs:!0});for await(const v2 of plugins){if(v2.deleted||v2._deleted)continue;if(-1!==v2.path.indexOf("%")){fireAndForget(()=>this.updatePluginListV2(showMessage,v2.path));continue}const path2=v2.path||this.getPath(v2);updatedDocumentPath&&updatedDocumentPath!=path2||this.pluginScanProcessor.enqueue(v2)}}finally{pluginIsEnumerating.set(!1);this.updatingV2Count--;pluginV2Progress.set(this.updatingV2Count)}pluginIsEnumerating.set(!1)}else{this.pluginScanProcessor.clearQueue();this.pluginList=[];pluginList.set(this.pluginList)}}async compareUsingDisplayData(dataA,dataB,compareEach=!1){const loadFile=async data=>{if(data instanceof PluginDataExDisplayV2||compareEach)return data.files[0];const loadDoc=await this.localDatabase.getDBEntry(data.documentPath);if(!loadDoc)return!1;const pluginData=deserialize(getDocDataAsArray(loadDoc.data),{});pluginData.documentPath=data.documentPath;const file=pluginData.files[0];return{...loadDoc,...file,datatype:"newnote"}},fileA=await loadFile(dataA),fileB=await loadFile(dataB);this._log(`Comparing: ${dataA.documentPath} <-> ${dataB.documentPath}`,LOG_LEVEL_VERBOSE);if(!fileA||!fileB){this._log(`Could not load ${dataA.name} for comparison: ${fileA?"":dataA.term}${fileB?"":dataB.term}`,LOG_LEVEL_NOTICE);return!1}let path2=stripAllPrefixes(fileA.path.split("/").slice(-1).join("/"));-1!==path2.indexOf("%")&&(path2=path2.split("%")[1]);if(fileA.path.endsWith(".json"))return serialized("config:merge-data",()=>new Promise(res2=>{this._log("Opening data-merging dialog",LOG_LEVEL_VERBOSE);new JsonResolveModal(this.app,path2,[fileA,fileB],async(keep,result)=>{if(null==result)return res2(!1);try{res2(await this.applyData(dataA,result))}catch(ex){this._log("Could not apply merged file");this._log(ex,LOG_LEVEL_VERBOSE);res2(!1)}},"Local",`${dataB.term}`,"B",!0,!0,"Difference between local and remote").open()}));{const dmp=new import_diff_match_patch.diff_match_patch;let docAData=getDocData(fileA.data),docBData=getDocData(fileB.data);"plain"!=(null==fileA?void 0:fileA.datatype)&&(docAData=base64ToString(docAData));"plain"!=(null==fileB?void 0:fileB.datatype)&&(docBData=base64ToString(docBData));const diffMap=dmp.diff_linesToChars_(docAData,docBData),diff=dmp.diff_main(diffMap.chars1,diffMap.chars2,!1);dmp.diff_charsToLines_(diff,diffMap.lineArray);dmp.diff_cleanupSemantic(diff);const diffResult={left:{rev:"A",...fileA,data:docAData},right:{rev:"B",...fileB,data:docBData},diff},d4=new ConflictResolveModal(this.app,path2,diffResult,!0,dataB.term);d4.open();const ret=await d4.waitForResult();if(ret===CANCELLED)return!1;if(ret===LEAVE_TO_SUBSEQUENT)return!1;const resultContent="A"==ret?docAData:"B"==ret?docBData:void 0;return!!resultContent&&await this.applyData(dataA,resultContent)}}async applyDataV2(data,content){const baseDir=this.configDir;try{if(content){const filename=data.files[0].filename;this._log(`Applying ${filename} of ${data.displayName||data.name}..`);const path2=`${baseDir}/${filename}`;await this.core.storageAccess.ensureDir(path2);await this.core.storageAccess.writeHiddenFileAuto(path2,content);await this.storeCustomisationFileV2(path2,this.services.setting.getDeviceAndVaultName())}else{const files=data.files;for(const f4 of files){const stat={mtime:f4.mtime,ctime:f4.ctime},path2=`${baseDir}/${f4.filename}`;this._log(`Applying ${f4.filename} of ${data.displayName||data.name}..`);await this.core.storageAccess.ensureDir(path2);if("newnote"==f4.datatype){let oldData;try{oldData=await this.core.storageAccess.readHiddenFileBinary(path2)}catch(ex){this._log(`Could not read the file ${f4.filename}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);oldData=new ArrayBuffer(0)}const content2=base64ToArrayBuffer(f4.data);if(await isDocContentSame(oldData,content2)){this._log(`The file ${f4.filename} is already up-to-date`,LOG_LEVEL_VERBOSE);continue}await this.core.storageAccess.writeHiddenFileAuto(path2,content2,stat)}else{let oldData;try{oldData=await this.core.storageAccess.readHiddenFileText(path2)}catch(ex){this._log(`Could not read the file ${f4.filename}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);oldData=""}const content2=getDocData(f4.data);if(await isDocContentSame(oldData,content2)){this._log(`The file ${f4.filename} is already up-to-date`,LOG_LEVEL_VERBOSE);continue}await this.core.storageAccess.writeHiddenFileAuto(path2,content2,stat)}this._log(`Applied ${f4.filename} of ${data.displayName||data.name}..`);await this.storeCustomisationFileV2(path2,this.services.setting.getDeviceAndVaultName())}}}catch(ex){this._log(`Applying ${data.displayName||data.name}.. Failed`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}return!0}async applyData(data,content){this._log(`Applying ${data.displayName||data.name}..`);if(data instanceof PluginDataExDisplayV2)return this.applyDataV2(data,content);const baseDir=this.configDir;try{if(!data.documentPath)throw"InternalError: Document path not exist";const dx=await this.localDatabase.getDBEntry(data.documentPath);if(0==dx)throw"Not found on database";const loadedData=deserialize(getDocDataAsArray(dx.data),{});for(const f4 of loadedData.files){this._log(`Applying ${f4.filename} of ${data.displayName||data.name}..`);try{const path2=`${baseDir}/${f4.filename}`;await this.core.storageAccess.ensureDir(path2);if(content)await this.core.storageAccess.writeHiddenFileAuto(path2,content);else{const dt=decodeBinary(f4.data);await this.core.storageAccess.writeHiddenFileAuto(path2,dt)}this._log(`Applying ${f4.filename} of ${data.displayName||data.name}.. Done`)}catch(ex){this._log(`Applying ${f4.filename} of ${data.displayName||data.name}.. Failed`);this._log(ex,LOG_LEVEL_VERBOSE)}}const uPath=`${baseDir}/${loadedData.files[0].filename}`;await this.storeCustomizationFiles(uPath);await this.updatePluginList(!0,uPath);await delay(100);this._log(`Config ${data.displayName||data.name} has been applied`,LOG_LEVEL_NOTICE);if("PLUGIN_DATA"==data.category||"PLUGIN_MAIN"==data.category){const manifests=Object.values(this.app.plugins.manifests),enabledPlugins=this.app.plugins.enabledPlugins,pluginManifest=manifests.find(manifest=>enabledPlugins.has(manifest.id)&&manifest.dir==`${baseDir}/plugins/${data.name}`);if(pluginManifest){this._log(`Unloading plugin: ${pluginManifest.name}`,LOG_LEVEL_NOTICE,"plugin-reload-"+pluginManifest.id);await this.app.plugins.unloadPlugin(pluginManifest.id);await this.app.plugins.loadPlugin(pluginManifest.id);this._log(`Plugin reloaded: ${pluginManifest.name}`,LOG_LEVEL_NOTICE,"plugin-reload-"+pluginManifest.id)}}else"CONFIG"==data.category&&this.services.appLifecycle.askRestart();return!0}catch(ex){this._log(`Applying ${data.displayName||data.name}.. Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async deleteData(data){try{if(data.documentPath){const delList=[];if(this.useV2){const deleteList=this.pluginList.filter(e3=>e3.documentPath==data.documentPath).filter(e3=>e3 instanceof PluginDataExDisplayV2).map(e3=>e3.files).flat();for(const e3 of deleteList)delList.push(e3.path)}delList.push(data.documentPath);const p2=delList.map(async e3=>{await this.deleteConfigOnDatabase(e3);await this.updatePluginList(!1,e3)});await Promise.allSettled(p2);this._log(`Deleted: ${data.category}/${data.name} of ${data.category} (${delList.length} items)`,LOG_LEVEL_NOTICE)}return!0}catch(ex){this._log(`Failed to delete: ${data.documentPath}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async _anyModuleParsedReplicationResultItem(docs){if(!docs._id.startsWith(ICXHeader))return!1;this.isThisModuleEnabled()&&await this.updatePluginList(!1,docs.path?docs.path:this.getPath(docs));if(this.isThisModuleEnabled()&&this.core.settings.notifyPluginOrSettingUpdated&&(!this.pluginDialog||this.pluginDialog&&!this.pluginDialog.isOpened())){const fragment=createFragment(doc=>{doc.createEl("span",void 0,a2=>{a2.appendText("Some configuration has been arrived, Press ");a2.appendChild(a2.createEl("a",void 0,anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{this.showPluginSyncModal()})}));a2.appendText(" to open the config sync dialog , or press elsewhere to dismiss this message.")})}),updatedPluginKey="popupUpdated-plugins";scheduleTask(updatedPluginKey,1e3,async()=>{var _a8;const popup=await memoIfNotExist(updatedPluginKey,()=>new import_obsidian.Notice(fragment,0));(null==(_a8=null==popup?void 0:popup.noticeEl)?void 0:_a8.isShown())||memoObject(updatedPluginKey,new import_obsidian.Notice(fragment,0));scheduleTask(updatedPluginKey+"-close",2e4,()=>{var _a9;const popup2=retrieveMemoObject(updatedPluginKey);if(popup2){(null==(_a9=null==popup2?void 0:popup2.noticeEl)?void 0:_a9.isShown())&&popup2.hide();disposeMemoObject(updatedPluginKey)}})})}return!0}async _everyRealizeSettingSyncMode(){var _a8;null==(_a8=this.periodicPluginSweepProcessor)||_a8.disable();if(!this._isMainReady)return!0;if(!this._isMainSuspended())return!0;if(!this.isThisModuleEnabled())return!0;this.settings.autoSweepPlugins&&await this.scanAllConfigFiles(!1);this.periodicPluginSweepProcessor.enable(this.settings.autoSweepPluginsPeriodic&&!this.settings.watchInternalFileChanges?6e4:0);return!0}async makeEntryFromFile(path2){const stat=await this.core.storageAccess.statHidden(path2);let version2,displayName;if(!stat)return!1;const contentBin=await this.core.storageAccess.readHiddenFileBinary(path2);let content;try{content=await arrayBufferToBase64(contentBin);if(path2.toLowerCase().endsWith("/manifest.json")){const v2=readString(new Uint8Array(contentBin));try{const json=JSON.parse(v2);"version"in json&&(version2=`${json.version}`);"name"in json&&(displayName=`${json.name}`)}catch(ex){this._log(`Configuration sync data: ${path2} looks like manifest, but could not read the version`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE)}}}catch(ex){this._log(`The file ${path2} could not be encoded`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}const mtime=stat.mtime;return{filename:path2.substring(this.configDir.length+1),data:content,mtime,size:stat.size,version:version2,displayName}}async storeCustomisationFileV2(path2,term,force=!1){const vf=this.filenameWithUnifiedKey(path2,term);return await serialized(`plugin-${vf}`,async()=>{const prefixedFileName=vf,id=await this.path2id(prefixedFileName),stat=await this.core.storageAccess.statHidden(path2);if(!stat)return!1;const mtime=stat.mtime,content=await this.core.storageAccess.readHiddenFileBinary(path2),contentBlob=createBlob([DUMMY_HEAD,DUMMY_END,...await arrayBufferToBase64(content)]);try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old)saveData={_id:id,path:prefixedFileName,data:contentBlob,mtime,ctime:mtime,datatype:"plain",size:contentBlob.size,children:[],deleted:!1,type:"plain",eden:{}};else{if(this.services.path.isMarkedAsSameChanges(prefixedFileName,[old.mtime,mtime+1])==EVEN){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (Already checked the same)`,LOG_LEVEL_DEBUG);return}const docXDoc=await this.localDatabase.getDBEntryFromMeta(old,!1,!1);if(0==docXDoc)throw"Could not load the document";const dataSrc=getDocData(docXDoc.data),dataStart=dataSrc.indexOf(DUMMY_END),oldContent=dataSrc.substring(dataStart+DUMMY_END.length),oldContentArray=base64ToArrayBuffer(oldContent);if(await isDocContentSame(oldContentArray,content)){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (the same content)`,LOG_LEVEL_VERBOSE);this.services.path.markChangesAreSame(prefixedFileName,old.mtime,mtime+1);return!0}saveData={...old,data:contentBlob,mtime,size:contentBlob.size,datatype:"plain",children:[],deleted:!1,type:"plain"}}const ret=await this.localDatabase.putDBEntry(saveData);this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Done`);fireAndForget(()=>this.updatePluginListV2(!1,this.filenameWithUnifiedKey(path2)));return ret}catch(ex){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async storeCustomizationFiles(path2,termOverRide){const term=termOverRide||this.services.setting.getDeviceAndVaultName();if(""==term){this._log("We have to configure the device name",LOG_LEVEL_NOTICE);return}if(this.useV2)return await this.storeCustomisationFileV2(path2,term);const vf=this.filenameToUnifiedKey(path2,term);return await serialized(`plugin-${vf}`,async()=>{const category=this.getFileCategory(path2);let mtime=0,fileTargets=[];const name="CONFIG"==category||"SNIPPET"==category?path2.split("/").reverse()[0]:path2.split("/").reverse()[1],parentPath=path2.split("/").slice(0,-1).join("/"),prefixedFileName=this.filenameToUnifiedKey(path2,term),id=await this.path2id(prefixedFileName),dt={category,files:[],name,mtime:0,term};if("CONFIG"==category||"SNIPPET"==category||"PLUGIN_ETC"==category||"PLUGIN_DATA"==category){fileTargets=[path2];"PLUGIN_ETC"==category&&(dt.displayName=path2.split("/").slice(-1).join("/"))}else"PLUGIN_MAIN"==category?fileTargets=["manifest.json","main.js","styles.css"].map(e3=>`${parentPath}/${e3}`):"THEME"==category&&(fileTargets=["manifest.json","theme.css"].map(e3=>`${parentPath}/${e3}`));for(const target of fileTargets){const data=await this.makeEntryFromFile(target);if(0!=data){data.version&&(dt.version=data.version);data.displayName&&(dt.displayName=data.displayName);mtime=0==mtime?data.mtime:(data.mtime+mtime)/2;dt.files.push(data)}else this._log(`Config: skipped (Possibly is not exist): ${target} `,LOG_LEVEL_VERBOSE)}dt.mtime=mtime;if(0==dt.files.length){this._log(`Nothing left: deleting.. ${path2}`);await this.deleteConfigOnDatabase(prefixedFileName);await this.updatePluginList(!1,prefixedFileName);return}const content=createTextBlob(serialize(dt));try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old)saveData={_id:id,path:prefixedFileName,data:content,mtime,ctime:mtime,datatype:"newnote",size:content.size,children:[],deleted:!1,type:"newnote",eden:{}};else{if(old.mtime==mtime)return!0;const oldC=await this.localDatabase.getDBEntryFromMeta(old,!1,!1);if(oldC){const d4=await deserialize(getDocDataAsArray(oldC.data),{});if(d4.files.length==dt.files.length){const diffs=d4.files.map(previous=>({prev:previous,curr:dt.files.find(e3=>e3.filename==previous.filename)})).map(async e3=>{var _a8,_b5;try{return await isDocContentSame(null!=(_b5=null==(_a8=e3.curr)?void 0:_a8.data)?_b5:[],e3.prev.data)}catch(e4){return!1}});if((await Promise.all(diffs)).every(e3=>1==e3)){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Skipped (Same content)`,LOG_LEVEL_VERBOSE);return!0}}}saveData={...old,data:content,mtime,size:content.size,datatype:"newnote",children:[],deleted:!1,type:"newnote"}}const ret=await this.localDatabase.putDBEntry(saveData);await this.updatePluginList(!1,saveData.path);this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Done`);return ret}catch(ex){this._log(`STORAGE --\x3e DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async _anyProcessOptionalFileEvent(path2){return await this.watchVaultRawEventsAsync(path2)}async watchVaultRawEventsAsync(path2){if(!this._isMainReady)return!1;if(this._isMainSuspended())return!1;if(!this.isThisModuleEnabled())return!1;const stat=await this.core.storageAccess.statHidden(path2);if(stat&&"file"!=stat.type)return!1;const configDir=normalizePath(this.configDir);if(Object.values(this.settings.pluginSyncExtendedSetting).filter(e3=>e3.mode!=MODE_SELECTIVE&&e3.mode!=MODE_SHINY).map(e3=>e3.files).flat().map(e3=>`${configDir}/${e3}`.toLowerCase()).some(e3=>e3.startsWith(path2.toLowerCase()))){this._log(`Customization file skipped: ${path2}`,LOG_LEVEL_VERBOSE);return!1}const storageMTime=~~((stat&&stat.mtime||0)/1e3),key3=`${path2}-${storageMTime}`;if(this.recentProcessedInternalFiles.contains(key3))return!0;this.recentProcessedInternalFiles=[key3,...this.recentProcessedInternalFiles].slice(0,100);scheduleTask(this.filenameToUnifiedKey(path2),100,async()=>{await this.storeCustomizationFiles(path2)});return!0}async scanAllConfigFiles(showMessage){await shareRunningResult("scanAllConfigFiles",async()=>{var _a8;const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;this._log("Scanning customizing files.",logLevel,"scan-all-config");const term=this.services.setting.getDeviceAndVaultName();if(""==term){this._log("We have to configure the device name",LOG_LEVEL_NOTICE);return}const filesAll=await this.scanInternalFiles();if(this.useV2){const filesAllUnified=filesAll.filter(e3=>this.isTargetPath(e3)).map(e3=>[this.filenameWithUnifiedKey(e3,term),e3]),localFileMap=new Map(filesAllUnified.map(e3=>[e3[0],e3[1]])),prefix=this.unifiedKeyPrefixOfTerminal(term),entries2=this.localDatabase.findEntries(prefix+"",`${prefix}􏿿`,{include_docs:!0}),tasks3=[],semaphore=Semaphore(10);for await(const item of entries2)-1===item.path.indexOf("%")&&tasks3.push(async()=>{const releaser=await semaphore.acquire();try{const unifiedFilenameWithKey=`${item._id}`,localPath=localFileMap.get(unifiedFilenameWithKey);if(localPath){await this.storeCustomisationFileV2(localPath,term);localFileMap.delete(unifiedFilenameWithKey)}else await this.deleteConfigOnDatabase(unifiedFilenameWithKey)}catch(ex){this._log(`scanAllConfigFiles - Error: ${item._id}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}finally{releaser()}});await Promise.all(tasks3.map(e3=>e3()));const taskExtra=[];for(const[,filePath]of localFileMap)taskExtra.push(async()=>{const releaser=await semaphore.acquire();try{await this.storeCustomisationFileV2(filePath,term)}catch(ex){this._log(`scanAllConfigFiles - Error: ${filePath}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}finally{releaser()}});await Promise.all(taskExtra.map(e3=>e3()));fireAndForget(()=>this.updatePluginList(!1))}else{const files=filesAll.filter(e3=>this.isTargetPath(e3)).map(e3=>({key:this.filenameToUnifiedKey(e3),file:e3})),virtualPathsOfLocalFiles=[...new Set(files.map(e3=>e3.key))];let deleteCandidate=(await this.localDatabase.allDocsRaw({startkey:ICXHeader+"",endkey:`${ICXHeader}􏿿`,include_docs:!0})).rows.map(e3=>e3.doc).filter(e3=>!e3.deleted).map(e3=>this.getPath(e3)).filter(e3=>e3.startsWith(`${ICXHeader}${term}/`));for(const vp of virtualPathsOfLocalFiles){const p2=null==(_a8=files.find(e3=>e3.key==vp))?void 0:_a8.file;if(p2){await this.storeCustomizationFiles(p2);deleteCandidate=deleteCandidate.filter(e3=>e3!=vp)}else this._log(`scanAllConfigFiles - File not found: ${vp}`,LOG_LEVEL_VERBOSE)}for(const vp of deleteCandidate)await this.deleteConfigOnDatabase(vp);fireAndForget(()=>this.updatePluginList(!1))}})}async deleteConfigOnDatabase(prefixedFileName,forceWrite=!1){const mtime=(new Date).getTime();return await serialized("file-x-"+prefixedFileName,async()=>{try{const old=await this.localDatabase.getDBEntryMeta(prefixedFileName,void 0,!1);let saveData;if(!1===old){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) already deleted (Not found on database)`);return!0}if(old.deleted){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) already deleted`);return!0}saveData={...old,mtime,size:0,children:[],deleted:!0,type:"newnote"};await this.localDatabase.putRaw(saveData);await this.updatePluginList(!1,prefixedFileName);this._log(`STORAGE -x> DB:${prefixedFileName}: (config) Done`);return!0}catch(ex){this._log(`STORAGE -x> DB:${prefixedFileName}: (config) Failed`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}})}async scanInternalFiles(){return(await this.getFiles(this.configDir,2)).filter(e3=>e3.startsWith(".")).filter(e3=>!e3.startsWith(".trash"))}async _allAskUsingOptionalSyncFeature(opt){await this.__askHiddenFileConfiguration(opt);return!0}async __askHiddenFileConfiguration(opt){const choices=[];choices.push("Yes, Enable it");choices.push("No, Disable it");choices.push("Later");const ret=await this.core.confirm.askSelectStringDialogue("Would you like to enable **Customization sync**?\n\n> [!DETAILS]-\n> This feature allows you to sync your customisations -- such as configurations, themes, snippets, and plugins -- across your devices in a fully controlled manner, unlike the fully automatic behaviour of hidden file synchronisation.\n> \n> You may use this feature alongside hidden file synchronisation. When both features are enabled, items configured as `Automatic` in this feature will be managed by **hidden file synchronisation**.\n> Do not worry, you will be prompted to enable or keep disabled **hidden file synchronisation** after this dialogue.\n",choices,{defaultAction:"Later",timeout:40,title:"Customisation sync"});"Yes, Enable it"==ret?await this.configureHiddenFileSync("CUSTOMIZE"):"No, Disable it"==ret&&await this.configureHiddenFileSync("DISABLE_CUSTOM")}_anyGetOptionalConflictCheckMethod(path2){return isPluginMetadata(path2)||isCustomisationSyncMetadata(path2)?Promise.resolve("newer"):Promise.resolve(!1)}_allSuspendExtraSync(){if(this.core.settings.usePluginSync||this.core.settings.autoSweepPlugins){this._log("Customisation sync have been temporarily disabled. Please enable them after the fetching, if you need them.",LOG_LEVEL_NOTICE);this.core.settings.usePluginSync=!1;this.core.settings.autoSweepPlugins=!1}return Promise.resolve(!0)}async _allConfigureOptionalSyncFeature(mode){await this.configureHiddenFileSync(mode);return!0}async configureHiddenFileSync(mode){if("DISABLE"!=mode){if("CUSTOMIZE"==mode){if(!this.services.setting.getDeviceAndVaultName()){let name=await this.core.confirm.askString("Device name","Please set this device name","desktop");if(!name){name=import_obsidian.Platform.isAndroidApp?"android-app":import_obsidian.Platform.isIosApp?"ios":import_obsidian.Platform.isMacOS?"macos":import_obsidian.Platform.isMobileApp?"mobile-app":import_obsidian.Platform.isMobile?"mobile":import_obsidian.Platform.isSafari?"safari":import_obsidian.Platform.isDesktop?"desktop":import_obsidian.Platform.isDesktopApp?"desktop-app":"unknown";name+=Math.random().toString(36).slice(-4)}this.services.setting.setDeviceAndVaultName(name)}await this.core.services.setting.applyPartial({usePluginSync:!0,useAdvancedMode:!0},!0);await this.scanAllConfigFiles(!0)}}else await this.core.services.setting.applyPartial({usePluginSync:!1},!0)}async getFiles(path2,lastDepth){if(-1==lastDepth)return[];let w2;try{w2=await this.app.vault.adapter.list(path2)}catch(ex){this._log(`Could not traverse(ConfigSync):${path2}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}let files=[...w2.files];for(const v2 of w2.folders)files=files.concat(await this.getFiles(v2,lastDepth-1));return files}onBindFunction(core,services){services.fileProcessing.processOptionalFileEvent.addHandler(this._anyProcessOptionalFileEvent.bind(this));services.conflict.getOptionalConflictCheckMethod.addHandler(this._anyGetOptionalConflictCheckMethod.bind(this));services.replication.processVirtualDocument.addHandler(this._anyModuleParsedReplicationResultItem.bind(this));services.setting.onRealiseSetting.addHandler(this._everyRealizeSettingSyncMode.bind(this));services.appLifecycle.onResuming.addHandler(this._everyOnResumeProcess.bind(this));services.appLifecycle.onResumed.addHandler(this._everyAfterResumeProcess.bind(this));services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this));services.databaseEvents.onDatabaseInitialised.addHandler(this._everyOnDatabaseInitialized.bind(this));services.setting.suspendExtraSync.addHandler(this._allSuspendExtraSync.bind(this));services.setting.suggestOptionalFeatures.addHandler(this._allAskUsingOptionalSyncFeature.bind(this));services.setting.enableOptionalFeature.addHandler(this._allConfigureOptionalSyncFeature.bind(this))}};PREFIX_TRENCH="trench";idx=0;series=`${Date.now()}`;indexes=new Map;inProgress=new Set;failed=new Map;Trench=class{constructor(db,flushExistItems=!0){Object.defineProperty(this,"_db",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"_flushTask",{enumerable:!0,configurable:!0,writable:!0,value:void 0});Object.defineProperty(this,"concealing",{enumerable:!0,configurable:!0,writable:!0,value:new Map});this._db=db;flushExistItems&&(this._flushTask=(async()=>{const keys3=await db.keys(`${PREFIX_TRENCH}-ephemeral`,`${PREFIX_TRENCH}-ephemeral.`);for(const key3 of keys3)await db.delete(key3)})())}async eraseAllEphemerals(){const keys3=await this._db.keys(`${PREFIX_TRENCH}-ephemeral`,`${PREFIX_TRENCH}-ephemeral.`);for(const key3 of keys3)await this._db.delete(key3)}async eraseAllPermanences(){const keys3=await this._db.keys(`${PREFIX_TRENCH}-permanent`,`${PREFIX_TRENCH}-permanent.`);for(const key3 of keys3)await this._db.delete(key3)}conceal(obj){const key3=generateId("ephemeral");this.concealing.set(key3,obj);this._db.set(key3,obj).then(async e3=>{this.concealing.has(key3)?this.concealing.delete(key3):await this._db.delete(key3)});return key3}async bury(key3){this.concealing.has(key3)&&this.concealing.delete(key3);await this._db.delete(key3)}async expose(key3){if(this.concealing.has(key3)){const value=this.concealing.get(key3);this.concealing.delete(key3);return value}const obj=await this._db.get(key3);await this._db.delete(key3);return obj}_evacuate(storeTask,key3){return async()=>{if(this._flushTask){await this._flushTask;this._flushTask=void 0}await storeTask;const item=await this._db.get(key3);await this._db.delete(key3);return item}}evacuatePromise(task){const key3=generateId("ephemeral"),storeTask=(async()=>{const data=await task;await this._db.set(key3,data)})();return this._evacuate(storeTask,key3)}evacuate(obj){if(obj instanceof Promise)return this.evacuatePromise(obj);const key3=generateId("ephemeral"),storeTask=this._db.set(key3,obj);return this._evacuate(storeTask,key3)}async _queue(type,key3,obj,index6){var _a8;if(void 0===index6){index6=null!=(_a8=indexes.get(key3))?_a8:0;indexes.set(key3,index6+1)}const storeKey=createId(type,key3,index6);await this._db.set(storeKey,obj)}async _dequeue(type,key3){const range4=createRange(type,key3),keys3=(await this._db.keys(range4[0],range4[1])).filter(e3=>!inProgress.has(e3));if(0!==keys3.length)return await this.expose(keys3[0])}async _dequeueWithCommit(type,key3){const range4=createRange(type,key3),keysAll=await this._db.keys(range4[0],range4[1]),keys3=keysAll.filter(e3=>!inProgress.has(e3));if(0===keys3.length)return;const storeKey=keys3[0];inProgress.add(storeKey);const previousFailed=failed.get(storeKey)||0,value=await this._db.get(storeKey);return{key:storeKey,value,cancelCount:previousFailed,pendingItems:keysAll.length-1,commit:async()=>{await this._db.delete(storeKey);failed.delete(storeKey);inProgress.delete(storeKey)},cancel:()=>{failed.set(storeKey,(failed.get(storeKey)||0)+1);inProgress.delete(storeKey)}}}queue(key3,obj,index6){return this._queue("ephemeral",key3,obj,index6)}dequeue(key3){return this._dequeue("ephemeral",key3)}dequeueWithCommit(key3){return this._dequeueWithCommit("ephemeral",key3)}queuePermanent(key3,obj,index6){return this._queue("permanent",key3,obj,index6)}dequeuePermanent(key3){return this._dequeue("permanent",key3)}dequeuePermanentWithCommit(key3){return this._dequeueWithCommit("permanent",key3)}};measures=new Map;root_17=from_html('<details class="svelte-fa4ppj"><summary class="svelte-fa4ppj"> </summary> <pre class="svelte-fa4ppj"> </pre></details>');root4=from_html('<h2 class="svelte-fa4ppj">TESTING BENCH: Self-hosted LiveSync</h2> <h3 class="svelte-fa4ppj">Module Checks</h3> <button class="svelte-fa4ppj">MultiDevice Test</button> <button class="svelte-fa4ppj">SingleDevice Test</button> <button class="svelte-fa4ppj">All Test</button> <button class="svelte-fa4ppj">Clear</button> <!> <h3 class="svelte-fa4ppj">Synchronisation Result Status</h3> <pre class="svelte-fa4ppj"> </pre> <h3 class="svelte-fa4ppj">Performance test</h3> <button class="svelte-fa4ppj">Test!</button> <button class="svelte-fa4ppj">Clear</button> <div class="svelte-fa4ppj"></div>',1);$$css5={hash:"svelte-fa4ppj",code:".svelte-fa4ppj {box-sizing:border-box;}"};TestPaneView=class extends import_obsidian.ItemView{constructor(leaf,plugin3,moduleDev){super(leaf);this.icon="view-log";this.title="Self-hosted LiveSync Test and Results";this.navigation=!0;this.plugin=plugin3;this.moduleDev=moduleDev}getIcon(){return"view-log"}getViewType(){return"ols-pane-test"}getDisplayText(){return"Self-hosted LiveSync Test and Results"}async onOpen(){this.component=new TestPane({target:this.contentEl,props:{plugin:this.plugin,moduleDev:this.moduleDev}});await Promise.resolve()}async onClose(){var _a8;null==(_a8=this.component)||_a8.$destroy();await Promise.resolve()}};ModuleDev=class extends AbstractObsidianModule{constructor(){super(...arguments);this.testResults=writable([])}_everyOnloadStart(){__onMissingTranslation(()=>{});return Promise.resolve(!0)}async onMissingTranslation(key3){const outFile=`missing-translation-${(new Date).toISOString().split("T")[0]}.jsonl`,piece=JSON.stringify({[key3]:{}}),writePiece=piece.substring(1,piece.length-1)+",";try{await this.core.storageAccess.ensureDir(this.app.vault.configDir+"/ls-debug/");await this.core.storageAccess.appendHiddenFile(this.app.vault.configDir+"/ls-debug/"+outFile,writePiece+"\n")}catch(ex){this._log(`Could not write ${outFile}`,LOG_LEVEL_VERBOSE);this._log(`Missing translation: ${writePiece}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}_everyOnloadAfterLoadSettings(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.onMissingTranslation=this.onMissingTranslation.bind(this);__onMissingTranslation(key3=>{this.onMissingTranslation(key3)});eventHub.onEvent("document-stub-created",detail=>{fireAndForget(async()=>{const stub=detail.stub,toc2=detail.toc,stubDocX=Object.entries(stub).map(([key3,value])=>[`## ${key3}`,Object.entries(value).map(([key22,value2])=>[`### ${key22}`,[...value2.entries()].map(([key32,value3])=>{var _a8;const isObsolete=value3.is_obsolete?" (obsolete)":"",desc=null!=(_a8=value3.desc)?_a8:"";return`#### ${key32}${isObsolete}\n${value3.key?"Setting key: "+value3.key+"\n":""}${desc}\n`})].flat()).flat()].flat()).flat(),stubDocMD="\n| Icon | Description |\n| :---: | ----------------------------------------------------------------- |\n"+[...toc2.values()].map(e3=>`${e3}`).join("\n")+"\n\n"+stubDocX.join("\n");await this.core.storageAccess.writeHiddenFileAuto(this.app.vault.configDir+"/ls-debug/stub-doc.md",stubDocMD)})});this.plugin;this.registerView("ols-pane-test",leaf=>new TestPaneView(leaf,this.plugin,this));this.addCommand({id:"view-test",name:"Open Test dialogue",callback:()=>{this.services.API.showWindow("ols-pane-test")}});return Promise.resolve(!0)}async _everyOnLayoutReady(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.addCommand({id:"test-create-conflict",name:"Create conflict",callback:async()=>{const filename="test-create-conflict.md";if(await this.core.databaseFileAccess.store({name:filename,path:filename,body:new Blob(["# Test create conflict\n\n"],{type:"text/markdown"}),stat:{ctime:(new Date).getTime(),mtime:(new Date).getTime(),size:24,type:"file"}})){const id=await this.services.path.path2id(filename),f4=await this.core.localDatabase.getRaw(id);console.log(f4);console.log(f4._rev);const revConflict=f4._rev.split("-")[0]+"-"+(parseInt(f4._rev.split("-")[1])+1).toString();console.log(await this.core.localDatabase.bulkDocsRaw([f4],{new_edits:!1}));console.log(await this.core.localDatabase.bulkDocsRaw([{...f4,_rev:revConflict}],{new_edits:!1}))}}});await delay(1);return!0}_addTestResult(name,key3,result,summary,message){const logLine=`${name}: ${key3} ${null!=summary?summary:""}`;this.testResults.update(results=>{results.push([result,logLine,null!=message?message:""]);return results})}_everyModuleTest(){return this.settings.enableDebugTools?this.testDone():Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.onLayoutReady.addHandler(this._everyOnLayoutReady.bind(this));services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.test.test.addHandler(this._everyModuleTest.bind(this));services.test.addTestResult.setHandler(this._addTestResult.bind(this))}};ModuleInteractiveConflictResolver=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-conflictcheck",name:"Pick a file to resolve conflict",callback:async()=>{await this.pickFileForResolve()}});this.addCommand({id:"livesync-all-conflictcheck",name:"Resolve all conflicted files",callback:async()=>{await this.allConflictCheck()}});return Promise.resolve(!0)}async _anyResolveConflictByUI(filename,conflictCheckResult){return await serialized("conflict-resolve-ui",async()=>{this._log("Merge:open conflict dialog",LOG_LEVEL_VERBOSE);const dialog=new ConflictResolveModal(this.app,filename,conflictCheckResult);dialog.open();const selected=await dialog.waitForResult();if(selected===CANCELLED){this._log(`Merge: Cancelled ${filename}`,LOG_LEVEL_INFO);return!1}const testDoc=await this.localDatabase.getDBEntry(filename,{conflicts:!0},!1,!0,!0);if(!1===testDoc){this._log(`Merge: Could not read ${filename} from the local database`,LOG_LEVEL_VERBOSE);return!1}if(!testDoc._conflicts){this._log(`Merge: Nothing to do ${filename}`,LOG_LEVEL_VERBOSE);return!1}const toDelete=selected;if(toDelete===LEAVE_TO_SUBSEQUENT){const p2=conflictCheckResult.diff.map(e3=>e3[1]).join(""),delRev=testDoc._conflicts[0];if(!await this.core.databaseFileAccess.storeContent(filename,p2)){this._log(`Concatenated content cannot be stored:${filename}`,LOG_LEVEL_NOTICE);return!1}if(await this.services.conflict.resolveByDeletingRevision(filename,delRev,"UI Concatenated")==MISSING_OR_ERROR){this._log(`Concatenated saved, but cannot delete conflicted revisions: ${filename}, (${displayRev(delRev)})`,LOG_LEVEL_NOTICE);return!1}}else{if("string"!=typeof toDelete){this._log(`Merge: Something went wrong: ${filename}, (${toDelete})`,LOG_LEVEL_NOTICE);return!1}if(await this.services.conflict.resolveByDeletingRevision(filename,toDelete,"UI Selected")==MISSING_OR_ERROR){this._log(`Merge: Something went wrong: ${filename}, (${toDelete})`,LOG_LEVEL_NOTICE);return!1}}this.settings.syncAfterMerge&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();await this.services.conflict.queueCheckFor(filename);return!1})}async allConflictCheck(){for(;await this.pickFileForResolve(););}async pickFileForResolve(){const notes=[];for await(const doc of this.localDatabase.findAllDocs({conflicts:!0}))"_conflicts"in doc&&notes.push({id:doc._id,path:this.getPath(doc),dispPath:this.getPathWithoutPrefix(doc),mtime:doc.mtime});notes.sort((a2,b3)=>b3.mtime-a2.mtime);const notesList=notes.map(e3=>e3.dispPath);if(0==notesList.length){this._log("There are no conflicted documents",LOG_LEVEL_NOTICE);return!1}const target=await this.core.confirm.askSelectString("File to resolve conflict",notesList);if(target){const targetItem=notes.find(e3=>e3.dispPath==target);await this.services.conflict.queueCheckFor(targetItem.path);await this.services.conflict.ensureAllProcessed();return!0}return!1}async _allScanStat(){const notes=[];this._log("Checking conflicted files",LOG_LEVEL_VERBOSE);try{for await(const doc of this.localDatabase.findAllDocs({conflicts:!0}))"_conflicts"in doc&&notes.push({path:this.getPath(doc),mtime:doc.mtime});if(notes.length>0){this.core.confirm.askInPopup("conflicting-detected-on-safety",'Some files have been left conflicted! Press {HERE} to resolve them, or you can do it later by "Pick a file to resolve conflict',anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{fireAndForget(()=>this.allConflictCheck())})});this._log('Some files have been left conflicted! Please resolve them by "Pick a file to resolve conflict". The list is written in the log.',LOG_LEVEL_VERBOSE);for(const note of notes)this._log(`Conflicted: ${note.path}`)}else this._log("There are no conflicting files",LOG_LEVEL_VERBOSE)}catch(e3){this._log(`Error while scanning conflicted files: ${e3}`,LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}onBindFunction(core,services){services.appLifecycle.onScanningStartupIssues.addHandler(this._allScanStat.bind(this));services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.conflict.resolveByUserInteraction.addHandler(this._anyResolveConflictByUI.bind(this))}};ModuleObsidianEvents=class extends AbstractObsidianModule{constructor(){super(...arguments);this.hasFocus=!0;this.isLastHidden=!1;this._totalProcessingCount=void 0}_everyOnloadStart(){this.plugin.registerEvent(this.app.vault.on("rename",(file,oldPath)=>{eventHub.emitEvent("file-renamed",{newPath:file.path,old:oldPath})}));this.plugin.registerEvent(this.app.workspace.on("active-leaf-change",()=>eventHub.emitEvent("leaf-active-changed")));return Promise.resolve(!0)}__performAppReload(){this.services.appLifecycle.performRestart()}swapSaveCommand(){var _a8,_b5;this._log("Modifying callback of the save command",LOG_LEVEL_VERBOSE);const saveCommandDefinition=null==(_b5=null==(_a8=this.app.commands)?void 0:_a8.commands)?void 0:_b5["editor:save-file"],save2=null==saveCommandDefinition?void 0:saveCommandDefinition.callback;if("function"==typeof save2){this.initialCallback=save2;saveCommandDefinition.callback=()=>{scheduleTask("syncOnEditorSave",250,()=>{if(this.services.control.hasUnloaded()){this._log("Unload and remove the handler.",LOG_LEVEL_VERBOSE);saveCommandDefinition.callback=this.initialCallback;this.initialCallback=void 0}else if(this.settings.syncOnEditorSave){this._log("Sync on Editor Save.",LOG_LEVEL_VERBOSE);fireAndForget(()=>this.services.replication.replicateByEvent())}});save2()}}const _this=this;window.CodeMirrorAdapter?window.CodeMirrorAdapter.commands.save=()=>{_this.app.commands.executeCommandById("editor:save-file")}:this._log("CodeMirrorAdapter is not available")}registerWatchEvents(){this.setHasFocus=this.setHasFocus.bind(this);this.watchWindowVisibility=this.watchWindowVisibility.bind(this);this.watchWorkspaceOpen=this.watchWorkspaceOpen.bind(this);this.watchOnline=this.watchOnline.bind(this);this.plugin.registerEvent(this.app.workspace.on("file-open",this.watchWorkspaceOpen));this.plugin.registerDomEvent(document,"visibilitychange",this.watchWindowVisibility);this.plugin.registerDomEvent(window,"focus",()=>this.setHasFocus(!0));this.plugin.registerDomEvent(window,"blur",()=>this.setHasFocus(!1));this.plugin.registerDomEvent(window,"online",this.watchOnline);this.plugin.registerDomEvent(window,"offline",this.watchOnline)}setHasFocus(hasFocus){this.hasFocus=hasFocus;this.watchWindowVisibility()}watchWindowVisibility(){scheduleTask("watch-window-visibility",100,()=>fireAndForget(()=>this.watchWindowVisibilityAsync()))}watchOnline(){scheduleTask("watch-online",500,()=>fireAndForget(()=>this.watchOnlineAsync()))}async watchOnlineAsync(){if(navigator.onLine&&this.localDatabase.needScanning){this.localDatabase.needScanning=!1;await this.services.vault.scanVault()}}async watchWindowVisibilityAsync(){if(this.settings.suspendFileWatching)return;if(!this.settings.isConfigured)return;if(!this.services.appLifecycle.isReady())return;if(this.isLastHidden&&!this.hasFocus)return;const isHidden=document.hidden;if(this.isLastHidden!==isHidden){this.isLastHidden=isHidden;await this.services.fileProcessing.commitPendingFileEvents();if(isHidden)await this.services.appLifecycle.onSuspending();else{if(this.services.appLifecycle.isSuspended())return;if(!this.hasFocus)return;await this.services.appLifecycle.onResuming();await this.services.appLifecycle.onResumed()}}}watchWorkspaceOpen(file){this.settings.suspendFileWatching||this.settings.isConfigured&&this.services.appLifecycle.isReady()&&file&&scheduleTask("watch-workspace-open",500,()=>fireAndForget(()=>this.watchWorkspaceOpenAsync(file)))}async watchWorkspaceOpenAsync(file){if(!this.settings.suspendFileWatching&&this.settings.isConfigured&&this.services.appLifecycle.isReady()){await this.services.fileProcessing.commitPendingFileEvents();if(null!=file){this.settings.syncOnFileOpen&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();await this.services.conflict.queueCheckForIfOpen(file.path)}}}_everyOnLayoutReady(){this.swapSaveCommand();this.registerWatchEvents();return Promise.resolve(!0)}_askReload(message){this.services.appLifecycle.isReloadingScheduled()?this._log("Reloading is already scheduled",LOG_LEVEL_VERBOSE):scheduleTask("configReload",250,async()=>{const ret=await this.core.confirm.askSelectStringDialogue(message||"Do you want to restart and reload Obsidian now?",["Yes, schedule a restart after stabilisation","Yes, restart immediately","No, Leave it to me"],{defaultAction:"No, Leave it to me"});"Yes, restart immediately"==ret?this.__performAppReload():"Yes, schedule a restart after stabilisation"==ret&&this.services.appLifecycle.scheduleRestart()})}_scheduleAppReload(){if(!this._totalProcessingCount){const __tick=reactiveSource(0);this._totalProcessingCount=reactive(()=>{const dbCount=this.services.replication.databaseQueueCount.value,replicationCount=this.services.replication.replicationResultCount.value,storageApplyingCount=this.services.replication.storageApplyingCount.value,chunkCount=collectingChunks.value,pluginScanCount=pluginScanningCount.value,hiddenFilesCount=hiddenFilesEventCount.value+hiddenFilesProcessingCount.value,conflictProcessCount=this.services.conflict.conflictProcessQueueCount.value;__tick.value;return dbCount+replicationCount+storageApplyingCount+chunkCount+pluginScanCount+hiddenFilesCount+conflictProcessCount+0+0});this.plugin.registerInterval(setInterval(()=>{__tick.value++},1e3));let stableCheck=3;this._totalProcessingCount.onChanged(e3=>{if(0==e3.value){stableCheck--<=0&&this.__performAppReload();this._log(`Obsidian will be restarted soon! (Within ${stableCheck} seconds)`,LOG_LEVEL_NOTICE,"restart-notice")}else stableCheck=3})}}_isReloadingScheduled(){return void 0!==this._totalProcessingCount}onBindFunction(core,services){services.appLifecycle.onLayoutReady.addHandler(this._everyOnLayoutReady.bind(this));services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this));services.appLifecycle.askRestart.setHandler(this._askReload.bind(this));services.appLifecycle.scheduleRestart.setHandler(this._scheduleAppReload.bind(this));services.appLifecycle.isReloadingScheduled.setHandler(this._isReloadingScheduled.bind(this))}};checkRemoteVersion=async(db,migrate,barrier=12)=>{try{const versionInfo=await db.get("obsydian_livesync_version");if("versioninfo"!=versionInfo.type)return!1;const version2=versionInfo.version;if(version2<barrier&&await migrate(version2,barrier)){await bumpRemoteVersion(db);return!0}return version2==barrier}catch(ex){if(isErrorOfMissingDoc(ex))return!!await bumpRemoteVersion(db);throw ex}};bumpRemoteVersion=async(db,barrier=12)=>{const vi={_id:"obsydian_livesync_version",version:barrier,type:"versioninfo"},versionInfo=await resolveWithIgnoreKnownError(db.get("obsydian_livesync_version"),vi);if("versioninfo"!=versionInfo.type)return!1;vi._rev=versionInfo._rev;await db.put(vi);return!0};checkSyncInfo=async db=>{try{const syncinfo=await db.get(SYNCINFO_ID);console.log(syncinfo);return!0}catch(ex){if(isErrorOfMissingDoc(ex)){const randomStrSrc="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",temp=[...Array(30)].map(_e2=>Math.floor(Math.random()*randomStrSrc.length)).map(e3=>randomStrSrc[e3]).join(""),newSyncInfo={_id:SYNCINFO_ID,type:"syncinfo",data:temp};return!!await db.put(newSyncInfo)}console.dir(ex);return!1}};SELECTOR_COMPROMISED_CHUNK_1={selector:{_id:{$lt:"h:"},type:"leaf"}};SELECTOR_COMPROMISED_CHUNK_2={selector:{_id:{$gt:"h;"},type:"leaf"}};webcrypto2=globalThis.crypto;SALT=(new TextEncoder).encode("fancySyncForYou!");previousPassphrase="";_nonceV3=new Uint32Array(1);bufV3=new Uint8Array(12);previousDecryptionPassphrase="";UNDEFINED=Symbol("undefined");webcrypto3=globalThis.crypto;IV_LENGTH=12;HKDF_SALT_LENGTH=32;PBKDF2_SALT_LENGTH=32;gcmTagLength=128;HKDF_ENCRYPTED_PREFIX="%=";HKDF_SALTED_ENCRYPTED_PREFIX="%$";deriveMasterKey=function memoWithMap(bufferLength,fn,keyFunction){if(bufferLength<=0)throw new Error("Buffer length must be greater than 0");const cache2=new Map,getKey3=args=>args.length>0&&"string"==typeof args[0]?args[0]:JSON.stringify(args,(key3,value)=>void 0===value?UNDEFINED:value);return function(...args){const key3=keyFunction?keyFunction(args):getKey3(args);if(cache2.has(key3)){const hitPromise=cache2.get(key3);cache2.delete(key3);cache2.set(key3,hitPromise);return hitPromise}const newPromise=fn(...args);cache2.set(key3,newPromise);newPromise.catch(()=>{cache2.get(key3)===newPromise&&cache2.delete(key3)});if(cache2.size>bufferLength){const oldestKey=cache2.keys().next().value;oldestKey&&cache2.delete(oldestKey)}return newPromise}}(10,async(passphrase,pbkdf2Salt)=>{const binaryPassphrase=writeString(passphrase),keyMaterial=await webcrypto3.subtle.importKey("raw",binaryPassphrase,{name:"PBKDF2",length:256},!1,["deriveKey"]),masterKeyRaw=await webcrypto3.subtle.deriveKey({name:"PBKDF2",salt:pbkdf2Salt,iterations:31e4,hash:"SHA-256"},keyMaterial,{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),masterKeyBuffer=await webcrypto3.subtle.exportKey("raw",masterKeyRaw);return await webcrypto3.subtle.importKey("raw",masterKeyBuffer,{name:"HKDF"},!1,["deriveKey"])},([passphrase,salt])=>`${passphrase}-${uint8ArrayToHexString(salt)}`);webcrypto4=globalThis.crypto;ENCRYPT_V1_PREFIX_PROBABLY="[";ENCRYPT_V2_PREFIX="%";ENCRYPT_V3_PREFIX="%~";KeyBuffs=new Map;decKeyBuffs=new Map;KEY_RECYCLE_COUNT=100;nonceBuffer=new Uint32Array(1);webcrypto5=globalThis.crypto;keyGCCount=5*KEY_RECYCLE_COUNT;decKeyIdx=0;decKeyMin=0;SYMBOL_USED=Symbol("used");SYMBOL_END_OF_DATA=Symbol("endOfData");workerStreams=new Map;writers=new Map;responseBuf=new Map;writerPromise=Promise.resolve();tasks2=new Map;workers=[];key2=0;roundRobinIdx=0;encrypt4=function encryptWorker(input,passphrase,autoCalculateIterations){return encryptionOnWorker({type:"encrypt",input,passphrase,autoCalculateIterations})};decrypt4=function decryptWorker(input,passphrase,autoCalculateIterations){return encryptionOnWorker({type:"decrypt",input,passphrase,autoCalculateIterations})};encryptHKDF=encryptHKDFWorker;decryptHKDF=function decryptHKDFWorker(input,passphrase,pbkdf2Salt){return encryptionHKDFOnWorker({type:"decryptHKDF",input,passphrase,pbkdf2Salt})};Encrypt_HKDF_Header="%=";Encrypt_OLD_Header="%";EncryptionVersions_UNENCRYPTED=0,EncryptionVersions_ENCRYPTED=1,EncryptionVersions_HKDF=2,EncryptionVersions_UNKNOWN=99;ENCRYPTED_META_PREFIX="/\\:";MESSAGE_FALLBACK_DECRYPT_FAILED="Failed to decrypt the data with V1 method. Cannot encrypt with HKDF.";ENCRYPTION_HKDF_FAILED="Encryption with HKDF failed.";DECRYPTION_HKDF_FAILED="Decryption with HKDF failed.";DECRYPTION_FALLBACK_FAILED="Decryption with fallback failed.";preprocessOutgoing=async doc=>await Promise.resolve(doc);enableEncryption=(db,passphrase,useDynamicIterationCount,migrationDecrypt,getPBKDF2Salt,algorithm)=>{const decrypted=new Map,incoming=doc=>algorithm===E2EEAlgorithms.V2?incomingEncryptHKDF(doc,passphrase,useDynamicIterationCount,getPBKDF2Salt):incomingEncryptV1(doc,passphrase,useDynamicIterationCount);preprocessOutgoing=incoming;db.transform({incoming,outgoing:doc=>algorithm!==E2EEAlgorithms.ForceV1?outgoingDecryptHKDF(doc,0,0,passphrase,useDynamicIterationCount,getPBKDF2Salt):outgoingDecryptV1(doc,migrationDecrypt,decrypted,passphrase,useDynamicIterationCount)})};EDEN_ENCRYPTED_KEY="h:++encrypted";EDEN_ENCRYPTED_KEY_HKDF="h:++encrypted-hkdf";LiveSyncAbstractReplicator=class{constructor(env){this.syncStatus="NOT_CONNECTED";this.docArrived=0;this.docSent=0;this.lastSyncPullSeq=0;this.maxPullSeq=0;this.lastSyncPushSeq=0;this.maxPushSeq=0;this.nodeid="";this.remoteLocked=!1;this.remoteCleaned=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;this.updateInfo=()=>{this.env.services.replicator.replicationStatics.value={sent:this.docSent,arrived:this.docArrived,maxPullSeq:this.maxPullSeq,maxPushSeq:this.maxPushSeq,lastSyncPullSeq:this.lastSyncPullSeq,lastSyncPushSeq:this.lastSyncPushSeq,syncStatus:this.syncStatus}};this.env=env}get database(){return this.env.services.database.localDatabase}get rawDatabase(){return this.env.services.database.localDatabase.localDatabase}get currentSettings(){return this.env.services.setting.currentSettings()}sendChunks(setting,remoteDB,showResult,fromSeq){return Promise.resolve(!0)}async ensurePBKDF2Salt(setting,showMessage=!1,useCache=!0){try{const hash3=await this.getReplicationPBKDF2Salt(setting,!useCache);if(0==hash3.length)throw new Error("PBKDF2 salt (Security Seed) is empty");Logger(`PBKDF2 salt (Security Seed): ${await arrayBufferToBase64Single2(hash3)}`,LOG_LEVEL_VERBOSE);return!0}catch(ex){Logger("Failed to obtain PBKDF2 salt (Security Seed) for replication",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async initializeDatabaseForReplication(){const db=this.rawDatabase;try{const nodeinfo=await resolveWithIgnoreKnownError(db.get(NODEINFO_DOCID),{_id:NODEINFO_DOCID,type:"nodeinfo",nodeid:"",v20220607:!0});if(""==nodeinfo.nodeid){nodeinfo.nodeid=Math.random().toString(36).slice(-10);await db.put(nodeinfo)}this.nodeid=nodeinfo.nodeid;return!0}catch(ex){Logger(ex)}return!1}};_handlers=new Map;SyncParamsHandlerError=class extends LiveSyncError{};SyncParamsFetchError=class extends SyncParamsHandlerError{};SyncParamsNotFoundError=class extends SyncParamsHandlerError{};SyncParamsUpdateError=class extends SyncParamsHandlerError{};currentVersionRange={min:0,max:2400,current:2};selectorOnDemandPull={selector:{type:{$ne:"leaf"}}};LiveSyncCouchDBReplicator=class extends LiveSyncAbstractReplicator{get isChunkSendingSupported(){return!0}isMobile(){return this.env.services.API.isMobile()}constructor(env){super(env);this.env=env;this.initializeDatabaseForReplication();this.rawDatabase.on("close",()=>{this.closeReplication()})}getInitialSyncParameters(setting){return Promise.resolve({...DEFAULT_SYNC_PARAMETERS,protocolVersion:2})}async getSyncParameters(setting){try{const downloadedSyncParams=await this.fetchRemoteDocument(setting,"_local/obsidian_livesync_sync_parameters");if(!downloadedSyncParams)throw new SyncParamsNotFoundError("Sync parameters not found on remote server");return downloadedSyncParams}catch(ex){Logger("Could not retrieve remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsFetchError.fromError(ex)}}async putSyncParameters(setting,params){try{const ret=await this.putRemoteDocument(setting,params);if(ret.ok)return!0;throw new SyncParamsUpdateError(`Could not store remote sync parameters: ${JSON.stringify(ret)}`)}catch(ex){Logger("Could not store remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsUpdateError.fromError(ex)}}async getReplicationPBKDF2Salt(setting,refresh){const manager=createSyncParamsHanderForServer(`${setting.couchDB_URI}/${setting.couchDB_DBNAME}`,{put:params=>this.putSyncParameters(setting,params),get:()=>this.getSyncParameters(setting),create:()=>this.getInitialSyncParameters(setting)});return await manager.getPBKDF2Salt(refresh)}async migrate(from,to){Logger(`Database updated from ${from} to ${to}`,LOG_LEVEL_NOTICE);return Promise.resolve(!0)}terminateSync(){if(this.controller){this.controller.abort();this.controller=void 0}}async openReplication(setting,keepAlive,showResult,ignoreCleanLock){await this.initializeDatabaseForReplication();if(!keepAlive)return this.openOneShotReplication(setting,showResult,!1,"sync",ignoreCleanLock);this.openContinuousReplication(setting,showResult,!1)}replicationActivated(showResult){this.syncStatus="CONNECTED";this.updateInfo();Logger("Replication activated",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync")}async replicationChangeDetected(e3,showResult,docSentOnStart,docArrivedOnStart){try{if("pull"==e3.direction){await this.env.services.replication.parseSynchroniseResult(e3.change.docs);this.docArrived+=e3.change.docs.length}else this.docSent+=e3.change.docs.length;if(showResult){const maxPullSeq=this.maxPullSeq,maxPushSeq=this.maxPushSeq,lastSyncPullSeq=this.lastSyncPullSeq,lastSyncPushSeq=this.lastSyncPushSeq,pushLast=0==lastSyncPushSeq?"":lastSyncPushSeq>=maxPushSeq?" (LIVE)":` (${maxPushSeq-lastSyncPushSeq})`,pullLast=0==lastSyncPullSeq?"":lastSyncPullSeq>=maxPullSeq?" (LIVE)":` (${maxPullSeq-lastSyncPullSeq})`;Logger(`↑${this.docSent-docSentOnStart}${pushLast} ↓${this.docArrived-docArrivedOnStart}${pullLast}`,LOG_LEVEL_NOTICE,"sync")}this.updateInfo()}catch(ex){Logger("Replication callback error",LOG_LEVEL_NOTICE,"sync");Logger(ex,LOG_LEVEL_VERBOSE)}}replicationCompleted(showResult){this.syncStatus="COMPLETED";this.updateInfo();Logger("Replication completed",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,showResult?"sync":"");this.terminateSync()}replicationDenied(e3){this.syncStatus="ERRORED";this.updateInfo();this.terminateSync();Logger("Replication denied",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE)}replicationErrored(e3){this.syncStatus="ERRORED";this.terminateSync();this.updateInfo();Logger("Replication error",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE)}replicationPaused(){this.syncStatus="PAUSED";this.updateInfo();Logger("Replication paused",LOG_LEVEL_VERBOSE,"sync")}async processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying,reportCancelledAsDone=!0){const controller=new AbortController;this.controller&&this.controller.abort();this.controller=controller;const gen=genReplication(syncHandler,controller.signal);try{for await(const[type,e3]of gen){const releaser=await globalConcurrencyController.tryAcquire(1,3e6);if(!1===releaser){Logger("Replication stopped for busy.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return"FAILED"}releaser();switch(type){case"change":if("direction"in e3){"pull"==e3.direction?this.lastSyncPullSeq=Number(`${e3.change.last_seq}`.split("-")[0]):this.lastSyncPushSeq=Number(`${e3.change.last_seq}`.split("-")[0]);await this.replicationChangeDetected(e3,showResult,docSentOnStart,docArrivedOnStart)}else if("pullOnly"==syncMode){this.lastSyncPullSeq=Number(`${e3.last_seq}`.split("-")[0]);await this.replicationChangeDetected({direction:"pull",change:e3},showResult,docSentOnStart,docArrivedOnStart)}else if("pushOnly"==syncMode){this.lastSyncPushSeq=Number(`${e3.last_seq}`.split("-")[0]);this.updateInfo();await this.replicationChangeDetected({direction:"push",change:e3},showResult,docSentOnStart,docArrivedOnStart)}if(retrying&&this.docSent-docSentOnStart+(this.docArrived-docArrivedOnStart)>2*this.originalSetting.batch_size)return"NEED_RESURRECT";break;case"complete":this.replicationCompleted(showResult);return"DONE";case"active":this.replicationActivated(showResult);break;case"denied":this.replicationDenied(e3);return"FAILED";case"error":this.replicationErrored(e3);Logger("Replication stopped.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");if(this.env.services.remote.hadLastPostFailedBySize){if(e3&&413==(null==e3?void 0:e3.status)){Logger("Something went wrong during synchronisation. Please check the log!",LOG_LEVEL_NOTICE);return"FAILED"}return"NEED_RETRY"}Logger("Replication error",LOG_LEVEL_NOTICE,"sync");Logger(e3,LOG_LEVEL_VERBOSE);return"FAILED";case"paused":this.replicationPaused();break;case"finally":break;default:Logger(`Unexpected synchronization status:${JSON.stringify(e3)}`)}}return reportCancelledAsDone?"DONE":"CANCELLED"}catch(ex){Logger("Unexpected synchronization exception");Logger(ex,LOG_LEVEL_VERBOSE);return"FAILED"}finally{this.terminateSync();this.controller=void 0}}getEmptyMaxEntry(remoteID){return{_id:`_local/max_seq_on_chunk-${remoteID}`,maxSeq:0,remoteID,seqStatusMap:{},_rev:void 0}}async getLastTransferredSeqOfChunks(localDB,remoteID){const prevMax={_id:`_local/max_seq_on_chunk-${remoteID}`,maxSeq:0,remoteID,seqStatusMap:{},_rev:void 0},previous_max_seq_on_chunk=await wrapException(()=>localDB.get(prevMax._id));return previous_max_seq_on_chunk instanceof Error?prevMax:previous_max_seq_on_chunk}async updateMaxTransferredSeqOnChunks(localDB,remoteID,seqStatusMap){const newMax={_id:"_local/max_seq_on_chunk",maxSeq:0,remoteID,seqStatusMap,_rev:void 0},seqs=Object.keys(seqStatusMap).map(e3=>Number(e3));let maxSeq=0;for(const seq of seqs){if(!seqStatusMap[seq])break;maxSeq=seq}Logger(`Updating max seq on chunk to ${maxSeq}`,LOG_LEVEL_VERBOSE);newMax.maxSeq=maxSeq;const previous_max_seq_on_chunk=await wrapException(()=>localDB.get(newMax._id));if(previous_max_seq_on_chunk instanceof Error)delete newMax._rev;else{newMax._rev=previous_max_seq_on_chunk._rev;newMax.seqStatusMap={...previous_max_seq_on_chunk.seqStatusMap,...seqStatusMap}}await wrapException(()=>localDB.put(newMax));return newMax}async sendChunks(setting,remoteDB,showResult,fromSeq){const trench=new Trench(this.env.services.keyValueDB.openSimpleStore("sc-"),!1);await trench.eraseAllEphemerals();if(!remoteDB){const d4=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof d4){Logger($msg("liveSyncReplicator.couldNotConnectToRemoteDb",{d:d4}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");return!1}remoteDB=d4.db}await this.checkReplicationConnectivity(setting,!1,!1,!1,!1);Logger("Bulk sending chunks to remote database...",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");const remoteMilestone=await remoteDB.get(MILESTONE_DOCID),remoteID=null==remoteMilestone?void 0:remoteMilestone.created,localDB=this.rawDatabase,te5=new TextEncoder;Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");this.syncStatus="CONNECTED";const prev=await this.getLastTransferredSeqOfChunks(localDB,remoteID),seq=null!=fromSeq?fromSeq:prev.maxSeq,localScannedDocs=[],sentMap={},diffChunks=localDB.changes({since:seq,live:!1,include_docs:!0,return_docs:!1,selector:{type:"leaf"}}).on("change",e3=>{const numSeq=Number(e3.seq);prev.seqStatusMap[numSeq]||localScannedDocs.push({id:e3.id,seq:Number(e3.seq)})});await diffChunks;localScannedDocs.sort((a2,b3)=>a2.seq-b3.seq);const idSeqMap=Object.fromEntries(localScannedDocs.map(e3=>[e3.id,e3.seq]));for(const checkDocs of arrayToChunkedArray(localScannedDocs,250)){const remoteDocs=await remoteDB.allDocs({keys:checkDocs.map(e3=>e3.id),include_docs:!1}),remoteDocMap=Object.fromEntries(remoteDocs.rows.map(e3=>[e3.key,"error"in e3?e3.error:e3.value])),sendDocs=checkDocs.filter(e3=>"not_found"==remoteDocMap[e3.id]),sentDocs=checkDocs.filter(e3=>"not_found"!=remoteDocMap[e3.id]);sendDocs.forEach(e3=>sentMap[e3.seq]=!1);sentDocs.forEach(e3=>sentMap[e3.seq]=!0);const sendDocsMap=Object.fromEntries(sendDocs.map(e3=>[e3.id,e3.seq]));if(sendDocs.length>0){const localDocs=await localDB.allDocs({keys:sendDocs.map(e3=>e3.id),include_docs:!0});await trench.queue("send-chunks",localDocs.rows.filter(e3=>"id"in e3).map(e3=>({seq:sendDocsMap[e3.id],doc:e3.doc,id:e3.id})))}}let bulkDocs2=[],bulkDocsSizeBytes=0,bulkDocsSizeCount=0,maxSeq=0;const maxBatchSizeBytes=1024*setting.sendChunksBulkMaxSize*1024,semaphore=Semaphore(4);let sendingDocs=0,sentDocsCount=0;const sendChunks=async(bulkDocs3,bulkDocsSize,seq2)=>{Logger(`Sending ${bulkDocs3.length} (${bulkDocsSize} => ${sizeToHumanReadable(bulkDocsSize)} in plain) chunks to remote database...`,LOG_LEVEL_VERBOSE);const releaser=await semaphore.acquire(1);sendingDocs+=bulkDocs3.length;Logger(`↑ Uploading chunks \n${sendingDocs}/(${sentDocsCount} done)`,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");try{const uploadBulkDocTasks=bulkDocs3.map(e3=>preprocessOutgoing(e3)),uploadBulkDocs=await Promise.all(uploadBulkDocTasks);await remoteDB.bulkDocs(uploadBulkDocs,{new_edits:!1});uploadBulkDocs.forEach(e3=>sentMap[idSeqMap[e3._id]]=!0);await this.updateMaxTransferredSeqOnChunks(localDB,remoteID,sentMap);sentDocsCount+=bulkDocs3.length;Logger(`↑ Uploading chunks \n${sendingDocs}/(${sentDocsCount} done)`,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send")}catch(ex){Logger("Bulk sending failed.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");Logger(ex,LOG_LEVEL_VERBOSE);return!1}finally{releaser()}return!0},tasks3=[];for(;;){const nowSendChunks=await trench.dequeue("send-chunks");if(!nowSendChunks||0==nowSendChunks.length)break;for(const chunk of nowSendChunks){const jsonLength=te5.encode(JSON.stringify(chunk.doc)).byteLength+32;if((bulkDocsSizeBytes+jsonLength>maxBatchSizeBytes||bulkDocsSizeCount+1>200)&&bulkDocs2.length>0){tasks3.push(sendChunks([...bulkDocs2],bulkDocsSizeBytes));bulkDocs2=[];bulkDocsSizeBytes=0;bulkDocsSizeCount=0}bulkDocs2.push(chunk.doc);maxSeq=chunk.seq;bulkDocsSizeBytes+=jsonLength;bulkDocsSizeCount+=1}bulkDocs2.length>0&&tasks3.push(sendChunks([...bulkDocs2],bulkDocsSizeBytes));if((await Promise.all(tasks3.map(async e3=>{try{await e3}catch(ex){Logger("Bulk sending failed.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"send");Logger(ex,LOG_LEVEL_VERBOSE);return!1}}))).some(e3=>!1===e3))return!1}return!0}async openOneShotReplication(setting,showResult,retrying,syncMode,ignoreCleanLock=!1){if(!1===await this.ensurePBKDF2Salt(setting,showResult,!retrying))return!1;const next2=await shareRunningResult("oneShotReplication",async()=>{if(this.controller){Logger($msg("liveSyncReplicator.replicationInProgress"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return!1}const localDB=this.rawDatabase;Logger($msg("liveSyncReplicator.oneShotSyncBegin",{syncMode}));const ret=await this.checkReplicationConnectivity(setting,!1,retrying,showResult,ignoreCleanLock);if(!1===ret){Logger($msg("liveSyncReplicator.couldNotConnectToServer"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"sync");return!1}this.maxPullSeq=Number(`${ret.info.update_seq}`.split("-")[0]);this.maxPushSeq=Number(`${(await localDB.info()).update_seq}`.split("-")[0]);showResult&&Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),LOG_LEVEL_NOTICE,"sync");const{db,syncOptionBase}=ret;this.syncStatus="STARTED";this.updateInfo();const docArrivedOnStart=this.docArrived,docSentOnStart=this.docSent;retrying||(this.originalSetting=setting);this.terminateSync();const syncHandler="sync"==syncMode?localDB.sync(db,{...syncOptionBase}):"pullOnly"==syncMode?localDB.replicate.from(db,{...syncOptionBase,...setting.readChunksOnline?selectorOnDemandPull:{}}):"pushOnly"==syncMode?localDB.replicate.to(db,{...syncOptionBase}):void 0,syncResult=await this.processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying,!1);if("DONE"==syncResult)return!0;if("CANCELLED"==syncResult)return!1;if("FAILED"==syncResult)return!1;if("NEED_RESURRECT"==syncResult){this.terminateSync();return async()=>await this.openOneShotReplication(this.originalSetting,showResult,!1,syncMode,ignoreCleanLock)}if("NEED_RETRY"==syncResult){const tempSetting=JSON.parse(JSON.stringify(setting));tempSetting.batch_size=Math.ceil(tempSetting.batch_size/2)+2;tempSetting.batches_limit=Math.ceil(tempSetting.batches_limit/2)+2;if(tempSetting.batch_size<=5&&tempSetting.batches_limit<=5){Logger($msg("liveSyncReplicator.cantReplicateLowerValue"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}Logger($msg("liveSyncReplicator.retryLowerBatchSize",{batch_size:tempSetting.batch_size.toString(),batches_limit:tempSetting.batches_limit.toString()}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return async()=>await this.openOneShotReplication(tempSetting,showResult,!0,syncMode,ignoreCleanLock)}return!1});return"boolean"==typeof next2?next2:await next2()}replicateAllToServer(setting,showingNotice){return this.openOneShotReplication(setting,null!=showingNotice&&showingNotice,!1,"pushOnly")}replicateAllFromServer(setting,showingNotice){return this.openOneShotReplication(setting,null!=showingNotice&&showingNotice,!1,"pullOnly")}async checkReplicationConnectivity(setting,keepAlive,skipCheck,showResult,ignoreCleanLock=!1){if(""!=setting.versionUpFlash){Logger($msg("Replicator.Message.VersionUpFlash"),LOG_LEVEL_NOTICE);return!1}const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME);if(this.controller){Logger("Another replication running.");return!1}const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}if(!skipCheck){if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return!1}this.remoteCleaned=!1;this.remoteLocked=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;this.preferredTweakValue=void 0;const progress=`${dbRet.info.update_seq}`,info3={app_version:this.env.services.API.getAppVersion(),plugin_version:this.env.services.API.getPluginVersion(),vault_name:this.env.services.vault.vaultName(),device_name:this.env.services.vault.getVaultName(),progress},ensure=await ensureDatabaseIsCompatible(dbRet.db,setting,this.nodeid,currentVersionRange,info3);if("INCOMPATIBLE"==ensure){Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.",LOG_LEVEL_NOTICE);return!1}if("NODE_LOCKED"==ensure){Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;return!1}if("LOCKED"==ensure)this.remoteLocked=!0;else if("NODE_CLEANED"==ensure){if(!ignoreCleanLock){Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;this.remoteCleaned=!0;return!1}this.remoteLocked=!0}else if("OK"==ensure);else if("MISMATCHED"==ensure[0]){Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified. When replication is initiated manually via the command palette or ribbon, a dialogue box will open to address this.",LOG_LEVEL_NOTICE);this.tweakSettingsMismatched=!0;this.preferredTweakValue=ensure[1];return!1}}const syncOptionBase={batches_limit:setting.batches_limit,batch_size:setting.batch_size,push:{}};setting.readChunksOnline&&(syncOptionBase.pull={...selectorOnDemandPull});const syncOption=keepAlive?{live:!0,retry:!0,heartbeat:!setting.useTimeouts&&3e4,...syncOptionBase}:{...syncOptionBase};return{db:dbRet.db,info:dbRet.info,syncOptionBase,syncOption}}async openContinuousReplication(setting,showResult,retrying){const next2=await shareRunningResult("continuousReplication",async()=>{if(this.controller){Logger($msg("liveSyncReplicator.replicationInProgress"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}const localDB=this.rawDatabase;Logger($msg("liveSyncReplicator.beforeLiveSync"));if(await this.openOneShotReplication(setting,showResult,!1,"pullOnly")){Logger($msg("liveSyncReplicator.liveSyncBegin"));const ret=await this.checkReplicationConnectivity(setting,!0,!0,showResult);if(!1===ret){Logger($msg("liveSyncReplicator.couldNotConnectToServer"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}showResult&&Logger($msg("liveSyncReplicator.checkingLastSyncPoint"),LOG_LEVEL_NOTICE,"sync");const{db,syncOption}=ret;this.syncStatus="STARTED";this.maxPullSeq=Number(`${ret.info.update_seq}`.split("-")[0]);this.maxPushSeq=Number(`${(await localDB.info()).update_seq}`.split("-")[0]);this.updateInfo();const docArrivedOnStart=this.docArrived,docSentOnStart=this.docSent;retrying||(this.originalSetting=setting);this.terminateSync();const syncHandler=localDB.sync(db,{...syncOption}),syncMode="sync",syncResult=await this.processSync(syncHandler,showResult,docSentOnStart,docArrivedOnStart,syncMode,retrying);if("DONE"==syncResult)return!0;if("FAILED"==syncResult)return!1;if("NEED_RESURRECT"==syncResult){this.terminateSync();return async()=>await this.openContinuousReplication(this.originalSetting,showResult,!1)}if("NEED_RETRY"==syncResult){const tempSetting=JSON.parse(JSON.stringify(setting));tempSetting.batch_size=Math.ceil(tempSetting.batch_size/2)+2;tempSetting.batches_limit=Math.ceil(tempSetting.batches_limit/2)+2;if(tempSetting.batch_size<=5&&tempSetting.batches_limit<=5){Logger($msg("liveSyncReplicator.cantReplicateLowerValue"),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}Logger($msg("liveSyncReplicator.retryLowerBatchSize",{batch_size:tempSetting.batch_size.toString(),batches_limit:tempSetting.batches_limit.toString()}),showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return async()=>await this.openContinuousReplication(tempSetting,showResult,!0)}}return!1});return"boolean"==typeof next2?next2:await next2()}closeReplication(){if(this.controller){this.controller.abort();this.controller=void 0;this.syncStatus="CLOSED";Logger($msg("liveSyncReplicator.replicationClosed"));this.updateInfo()}}async tryResetRemoteDatabase(setting){this.closeReplication();const con=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof con){try{await con.db.destroy();Logger($msg("liveSyncReplicator.remoteDbDestroyed"),LOG_LEVEL_NOTICE);await this.tryCreateRemoteDatabase(setting)}catch(ex){Logger($msg("liveSyncReplicator.remoteDbDestroyError"),LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE)}clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1)}}async tryCreateRemoteDatabase(setting){this.closeReplication();if("string"!=typeof await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0)){clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1);Logger($msg("liveSyncReplicator.remoteDbCreatedOrConnected"),LOG_LEVEL_NOTICE)}}async markRemoteLocked(setting,locked,lockByClean){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return}const defInitPoint={_id:MILESTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked,cleaned:lockByClean,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await resolveWithIgnoreKnownError(dbRet.db.get(MILESTONE_DOCID),defInitPoint)};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=[this.nodeid];remoteMilestone.locked=locked;remoteMilestone.cleaned=remoteMilestone.cleaned||lockByClean;Logger($msg(locked?"liveSyncReplicator.lockRemoteDb":"liveSyncReplicator.unlockRemoteDb"),LOG_LEVEL_NOTICE);await dbRet.db.put(remoteMilestone)}async markRemoteResolved(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return}const defInitPoint={_id:MILESTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked:!1,accepted_nodes:[this.nodeid],node_info:{},node_chunk_info:{[this.nodeid]:currentVersionRange},tweak_values:{}},remoteMilestone={...defInitPoint,...await resolveWithIgnoreKnownError(dbRet.db.get(MILESTONE_DOCID),defInitPoint)};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=Array.from(new Set([...remoteMilestone.accepted_nodes,this.nodeid]));Logger($msg("liveSyncReplicator.markDeviceResolved"),LOG_LEVEL_NOTICE);(await dbRet.db.put(remoteMilestone)).ok?Logger($msg("liveSyncReplicator.remoteDbMarkedResolved"),LOG_LEVEL_VERBOSE):Logger($msg("liveSyncReplicator.couldNotMarkResolveRemoteDb"),LOG_LEVEL_NOTICE)}connectRemoteCouchDBWithSetting(settings,isMobile,performSetup=!1,skipInfo=!1){if(settings.encrypt&&""==settings.passphrase&&!settings.permitEmptyPassphrase)return"Empty passphrases cannot be used without explicit permission";const customHeaders=parseHeaderValues(settings.couchDB_CustomHeaders),auth=settings.useJWT?{jwtAlgorithm:settings.jwtAlgorithm,jwtKey:settings.jwtKey,jwtExpDuration:settings.jwtExpDuration,jwtKid:settings.jwtKid,jwtSub:settings.jwtSub,type:"jwt"}:{username:settings.couchDB_USER,password:settings.couchDB_PASSWORD,type:"basic"};return this.env.services.remote.connect(settings.couchDB_URI+(""==settings.couchDB_DBNAME?"":"/"+settings.couchDB_DBNAME),auth,settings.disableRequestURI||isMobile,settings.encrypt?settings.passphrase:settings.encrypt,settings.useDynamicIterationCount,performSetup,skipInfo,settings.enableCompression,customHeaders,settings.useRequestAPI,async()=>await this.getReplicationPBKDF2Salt(settings))}async _ensureConnection(settings){const ret=await this.connectRemoteCouchDBWithSetting(settings,this.isMobile(),!1,!0);if("string"==typeof ret)throw new Error(`${$msg("liveSyncReplicator.couldNotConnectToServer")}:${ret}`);return ret.db}async fetchRemoteDocument(settings,id,db){try{const connDB=null!=db?db:await this._ensureConnection(settings);return await connDB.get(id)}catch(ex){if("status"in ex&&404==ex.status)return!1;throw ex}}async putRemoteDocument(settings,doc,db){const connDB=null!=db?db:await this._ensureConnection(settings);return await connDB.put(doc)}async fetchRemoteChunks(missingChunks,showResult){const ret=await this.connectRemoteCouchDBWithSetting(this.currentSettings,this.isMobile(),!1,!0);if("string"==typeof ret){Logger(`${$msg("liveSyncReplicator.couldNotConnectToServer")} ${ret} `,showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");return!1}const remoteChunks=await ret.db.allDocs({keys:missingChunks,include_docs:!0});if(remoteChunks.rows.some(e3=>"error"in e3)){Logger("Some chunks are not exists both on remote and local database.",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"fetch");Logger(`Missing chunks: ${missingChunks.join(",")}`,LOG_LEVEL_VERBOSE);Logger(`Error chunks: ${remoteChunks.rows.filter(e3=>"error"in e3).map(e3=>e3.key).join(",")}`,LOG_LEVEL_VERBOSE);return!1}return remoteChunks.rows.map(e3=>e3.doc)}async tryConnectRemote(setting,showResult=!0){const db=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof db){Logger($msg("liveSyncReplicator.couldNotConnectTo",{uri:setting.couchDB_URI,name:setting.couchDB_DBNAME,db}),LOG_LEVEL_NOTICE);return!1}Logger(`Connected to ${db.info.db_name} successfully`,LOG_LEVEL_NOTICE);return!0}async resetRemoteTweakSettings(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof dbRet)if(await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12))try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);remoteMilestone.tweak_values={};await dbRet.db.put(remoteMilestone);Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}else Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);else Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE)}async setPreferredRemoteTweakSettings(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"!=typeof dbRet)if(await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12))try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);remoteMilestone.tweak_values[DEVICE_ID_PREFERRED]=extractObject(TweakValuesTemplate,{...setting});await dbRet.db.put(remoteMilestone);Logger("Preferred tweak values has been registered",LOG_LEVEL_VERBOSE)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}else Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);else Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE)}async getRemotePreferredTweakValues(setting){var _a8;const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return!1}if(!await checkRemoteVersion(dbRet.db,this.migrate.bind(this),12)){Logger($msg("liveSyncReplicator.remoteDbCorrupted"),LOG_LEVEL_NOTICE);return!1}try{const remoteMilestone=await dbRet.db.get(MILESTONE_DOCID);if(!remoteMilestone)throw new Error("Remote milestone not found");return(null==(_a8=null==remoteMilestone?void 0:remoteMilestone.tweak_values)?void 0:_a8[DEVICE_ID_PREFERRED])||!1}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async compactRemote(setting){const uri=setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri,dbRet}),LOG_LEVEL_NOTICE);return!1}return(await dbRet.db.compact({interval:1e3})).ok}async getRemoteStatus(setting){var _a8;const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}const info3=await dbRet.db.info();return{...info3,estimatedSize:(null==(_a8=null==info3?void 0:info3.sizes)?void 0:_a8.file)||0}}async countCompromisedChunks(setting=this.currentSettings){const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}return await countCompromisedChunks(dbRet.db)}async getConnectedDeviceList(setting=this.currentSettings){const dbRet=await this.connectRemoteCouchDBWithSetting(setting,this.isMobile(),!0);if("string"==typeof dbRet){Logger($msg("liveSyncReplicator.couldNotConnectToURI",{uri:setting.couchDB_URI+(""==setting.couchDB_DBNAME?"":"/"+setting.couchDB_DBNAME),dbRet}),LOG_LEVEL_NOTICE);return!1}const milestoneDoc=await dbRet.db.get(MILESTONE_DOCID);if(!milestoneDoc){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);return!1}return{node_info:milestoneDoc.node_info,accepted_nodes:milestoneDoc.accepted_nodes||[]}}};OnDialogSettingsDefault={configPassphrase:"",preset:"",syncMode:"ONEVENTS",dummy:0,deviceAndVaultName:""};SettingInformation={liveSync:{name:"Sync Mode"},couchDB_URI:{name:"Server URI",placeHolder:"https://........"},couchDB_USER:{name:"Username",desc:"username"},couchDB_PASSWORD:{name:"Password",desc:"password",isHidden:!0},couchDB_DBNAME:{name:"Database Name"},passphrase:{name:"Passphrase",desc:"Encryption passphrase. If changed, you should overwrite the server's database with the new (encrypted) files.",isHidden:!0},showStatusOnEditor:{name:"Show status inside the editor",desc:"Requires restart of Obsidian."},showOnlyIconsOnEditor:{name:"Show status as icons only"},showStatusOnStatusbar:{name:"Show status on the status bar",desc:"Requires restart of Obsidian."},lessInformationInLog:{name:"Show only notifications",desc:"Disables logging, only shows notifications. Please disable if you report an issue."},showVerboseLog:{name:"Verbose Log",desc:"Show verbose log. Please enable if you report an issue."},hashCacheMaxCount:{name:"Memory cache size (by total items)"},hashCacheMaxAmount:{name:"Memory cache size (by total characters)",desc:"(Mega chars)"},writeCredentialsForSettingSync:{name:"Write credentials in the file",desc:"(Not recommended) If set, credentials will be stored in the file."},notifyAllSettingSyncFile:{name:"Notify all setting files"},configPassphrase:{name:"Passphrase of sensitive configuration items",desc:"This passphrase will not be copied to another device. It will be set to `Default` until you configure it again."},configPassphraseStore:{name:"Encrypting sensitive configuration items"},syncOnSave:{name:"Sync on Save",desc:"Starts synchronisation when a file is saved."},syncOnEditorSave:{name:"Sync on Editor Save",desc:"When you save a file in the editor, start a sync automatically"},syncOnFileOpen:{name:"Sync on File Open",desc:"Forces the file to be synced when opened."},syncOnStart:{name:"Sync on Startup",desc:"Automatically Sync all files when opening Obsidian."},syncAfterMerge:{name:"Sync after merging file",desc:"Sync automatically after merging files"},trashInsteadDelete:{name:"Use the trash bin",desc:"Move remotely deleted files to the trash, instead of deleting."},doNotDeleteFolder:{name:"Keep empty folder",desc:"Should we keep folders that don't have any files inside?"},resolveConflictsByNewerFile:{name:"(BETA) Always overwrite with a newer file",desc:"Testing only - Resolve file conflicts by syncing newer copies of the file, this can overwrite modified files. Be Warned."},checkConflictOnlyOnOpen:{name:"Delay conflict resolution of inactive files",desc:"Should we only check for conflicts when a file is opened?"},showMergeDialogOnlyOnActive:{name:"Delay merge conflict prompt for inactive files.",desc:"Should we prompt you about conflicting files when a file is opened?"},disableMarkdownAutoMerge:{name:"Always prompt merge conflicts",desc:"Should we prompt you for every single merge, even if we can safely merge automatcially?"},writeDocumentsIfConflicted:{name:"Apply Latest Change if Conflicting",desc:"Enable this option to automatically apply the most recent change to documents even when it conflicts"},syncInternalFilesInterval:{name:"Scan hidden files periodically",desc:"Seconds, 0 to disable"},batchSave:{name:"Batch database update",desc:"Reducing the frequency with which on-disk changes are reflected into the DB"},readChunksOnline:{name:"Fetch chunks on demand",desc:"(ex. Read chunks online) If this option is enabled, LiveSync reads chunks online directly instead of replicating them locally. Increasing Custom chunk size is recommended."},syncMaxSizeInMB:{name:"Maximum file size",desc:"(MB) If this is set, changes to local and remote files that are larger than this will be skipped. If the file becomes smaller again, a newer one will be used."},useIgnoreFiles:{name:"(Beta) Use ignore files",desc:"If this is set, changes to local files which are matched by the ignore files will be skipped. Remote changes are determined using local ignore files."},ignoreFiles:{name:"Ignore files",desc:"Comma separated `.gitignore, .dockerignore`"},batch_size:{name:"Batch size",desc:"Number of changes to sync at a time. Defaults to 50. Minimum is 2."},batches_limit:{name:"Batch limit",desc:"Number of batches to process at a time. Defaults to 40. Minimum is 2. This along with batch size controls how many docs are kept in memory at a time."},useTimeouts:{name:"Use timeouts instead of heartbeats",desc:"If this option is enabled, PouchDB will hold the connection open for 60 seconds, and if no change arrives in that time, close and reopen the socket, instead of holding it open indefinitely. Useful when a proxy limits request duration but can increase resource usage."},concurrencyOfReadChunksOnline:{name:"Batch size of on-demand fetching"},minimumIntervalOfReadChunksOnline:{name:"The delay for consecutive on-demand fetches"},suspendFileWatching:{name:"Suspend file watching",desc:"Stop watching for file changes."},suspendParseReplicationResult:{name:"Suspend database reflecting",desc:"Stop reflecting database changes to storage files."},writeLogToTheFile:{name:"Write logs into the file",desc:"Warning! This will have a serious impact on performance. And the logs will not be synchronised under the default name. Please be careful with logs; they often contain your confidential information."},deleteMetadataOfDeletedFiles:{name:"Do not keep metadata of deleted files."},useIndexedDBAdapter:{name:"(Obsolete) Use an old adapter for compatibility",desc:"Before v0.17.16, we used an old adapter for the local database. Now the new adapter is preferred. However, it needs local database rebuilding. Please disable this toggle when you have enough time. If leave it enabled, also while fetching from the remote database, you will be asked to disable this.",obsolete:!0},watchInternalFileChanges:{name:"Scan changes on customization sync",desc:"Do not use internal API"},doNotSuspendOnFetching:{name:"Fetch database with previous behaviour"},disableCheckingConfigMismatch:{name:"Do not check configuration mismatch before replication"},usePluginSync:{name:"Enable customization sync"},autoSweepPlugins:{name:"Scan customization automatically",desc:"Scan customization before replicating."},autoSweepPluginsPeriodic:{name:"Scan customization periodically",desc:"Scan customization every 1 minute."},notifyPluginOrSettingUpdated:{name:"Notify customized",desc:"Notify when other device has newly customized."},remoteType:{name:"Active Remote Type",desc:"Remote server type"},endpoint:{name:"Endpoint URL",placeHolder:"https://........"},accessKey:{name:"Access Key"},secretKey:{name:"Secret Key",isHidden:!0},region:{name:"Region",placeHolder:"auto"},bucket:{name:"Bucket Name"},useCustomRequestHandler:{name:"Use Custom HTTP Handler",desc:"Enable this if your Object Storage doesn't support CORS"},maxChunksInEden:{name:"Maximum Incubating Chunks",desc:"The maximum number of chunks that can be incubated within the document. Chunks exceeding this number will immediately graduate to independent chunks."},maxTotalLengthInEden:{name:"Maximum Incubating Chunk Size",desc:"The maximum total size of chunks that can be incubated within the document. Chunks exceeding this size will immediately graduate to independent chunks."},maxAgeInEden:{name:"Maximum Incubation Period",desc:"The maximum duration for which chunks can be incubated within the document. Chunks exceeding this period will graduate to independent chunks."},settingSyncFile:{name:"Filename",desc:"Save settings to a markdown file. You will be notified when new settings arrive. You can set different files by the platform."},preset:{name:"Presets",desc:"Apply preset configuration"},syncMode:{name:"Sync Mode"},periodicReplicationInterval:{name:"Periodic Sync interval",desc:"Interval (sec)"},syncInternalFilesBeforeReplication:{name:"Scan for hidden files before replication"},automaticallyDeleteMetadataOfDeletedFiles:{name:"Delete old metadata of deleted files on start-up",desc:"(Days passed, 0 to disable automatic-deletion)"},additionalSuffixOfDatabaseName:{name:"Database suffix",desc:"LiveSync could not handle multiple vaults which have same name without different prefix, This should be automatically configured."},hashAlg:{name:(null==(_a6=configurationNames.hashAlg)?void 0:_a6.name)||"",desc:"xxhash64 is the current default."},deviceAndVaultName:{name:"Device name",desc:"Unique name between all synchronized devices. To edit this setting, please disable customization sync once."},displayLanguage:{name:"Display Language",desc:'Not all messages have been translated. And, please revert to "Default" when reporting errors.'},enableChunkSplitterV2:{name:"Use splitting-limit-capped chunk splitter",desc:"If enabled, chunks will be split into no more than 100 items. However, dedupe is slightly weaker."},disableWorkerForGeneratingChunks:{name:"Do not split chunks in the background",desc:"If disabled(toggled), chunks will be split on the UI thread (Previous behaviour)."},processSmallFilesInUIThread:{name:"Process small files in the foreground",desc:"If enabled, the file under 1kb will be processed in the UI thread."},batchSaveMinimumDelay:{name:"Minimum delay for batch database updating",desc:"Seconds. Saving to the local database will be delayed until this value after we stop typing or saving."},batchSaveMaximumDelay:{name:"Maximum delay for batch database updating",desc:"Saving will be performed forcefully after this number of seconds."},notifyThresholdOfRemoteStorageSize:{name:"Notify when the estimated remote storage size exceeds on start up",desc:"MB (0 to disable)."},usePluginSyncV2:{name:"Enable per-file customization sync",desc:"If enabled, efficient per-file customization sync will be used. A minor migration is required when enabling this feature, and all devices must be updated to v0.23.18. Enabling this feature will result in losing compatibility with older versions."},handleFilenameCaseSensitive:{name:"Handle files as Case-Sensitive",desc:"If this enabled, All files are handled as case-Sensitive (Previous behaviour)."},doNotUseFixedRevisionForChunks:{name:"Compute revisions for chunks",desc:"If this enabled, all chunks will be stored with the revision made from its content."},sendChunksBulkMaxSize:{name:"Maximum size of chunks to send in one request",desc:"MB"},useAdvancedMode:{name:"Enable advanced features"},usePowerUserMode:{name:"Enable poweruser features"},useEdgeCaseMode:{name:"Enable edge case treatment features"},enableDebugTools:{name:"Enable Developers' Debug Tools.",desc:"While enabled, it causes very performance impact but debugging replication testing and other features will be enabled. Please disable this if you have not read the source code. Requires restart of Obsidian."},suppressNotifyHiddenFilesChange:{name:"Suppress notification of hidden files change",desc:"If enabled, the notification of hidden files change will be suppressed."},syncMinimumInterval:{name:"Minimum interval for syncing",desc:"The minimum interval for automatic synchronisation on event."},useRequestAPI:{name:"Use Request API to avoid `inevitable` CORS problem",desc:"If enabled, the request API will be used to avoid `inevitable` CORS problems. This is a workaround and may not work in all cases. PLEASE READ THE DOCUMENTATION BEFORE USING THIS OPTION. This is a less-secure option."},hideFileWarningNotice:{name:"Show status icon instead of file warnings banner",desc:"If enabled, the ⛔ icon will be shown inside the status instead of the file warnings banner. No details will be shown."},networkWarningStyle:{name:"Network warning style",desc:"How to display network errors when the sync server is unreachable."},bucketPrefix:{name:"File prefix on the bucket",desc:"Effectively a directory. Should end with `/`. e.g., `vault-name/`."},chunkSplitterVersion:{name:"Chunk Splitter",desc:"Now we can choose how to split the chunks; V3 is the most efficient. If you have troubled, please make this Default or Legacy."},processSizeMismatchedFiles:{name:"Process files even if seems to be corrupted",desc:"You can enable this setting to process the files with size mismatches, these files can be created by some APIs or integrations."},forcePathStyle:{name:"Enable forcePathStyle",desc:"If enabled, the forcePathStyle option will be used for bucket operations."},P2P_AutoBroadcast:{name:"Automatically broadcast changes to connected peers",desc:"If enabled, changes will be automatically broadcasted to all connected peers. Notified peers will start fetching the changes."},P2P_AutoStart:{name:"Automatically start P2P connection on launch",desc:"If enabled, the P2P connection will be automatically started when the application launches."},P2P_Enabled:{name:"Enable P2P Synchronization"},maxMTimeForReflectEvents:{name:"Maximum file modification time for reflected file events",desc:"Files with modification times greater than this value (in seconds since the Unix epoch) will not have their events reflected. Set to 0 to disable this limit."}};setLevelClass=(el,level)=>{switch(level){case LEVEL_POWER_USER:el.addClass("sls-setting-poweruser");break;case LEVEL_ADVANCED:el.addClass("sls-setting-advanced");break;case LEVEL_EDGE_CASE:el.addClass("sls-setting-edgecase");break;default:}};LiveSyncSetting=class _LiveSyncSetting extends import_obsidian.Setting{constructor(containerEl){super(containerEl);this.watchDirtyKeys=[];this.holdValue=!1;this.descBuf="";this.nameBuf="";this.placeHolderBuf="";this.hasPassword=!1;this.updateHandlers=new Set;this.prevStatus={};_LiveSyncSetting.env.settingComponents.push(this)}_createDocStub(key3,value){var _a8,_b5,_c3,_d2;{const paneName=findAttrFromParent(this.settingEl,"data-pane"),panelName=findAttrFromParent(this.settingEl,"data-panel");createStub("string"==typeof this.nameBuf?this.nameBuf:null!=(_b5=null==(_a8=this.nameBuf.textContent)?void 0:_a8.toString())?_b5:"",key3,"string"==typeof value?value:null!=(_d2=null==(_c3=value.textContent)?void 0:_c3.toString())?_d2:"",panelName,paneName)}}setDesc(desc){this.descBuf=desc;this._createDocStub("desc",desc);super.setDesc(desc);return this}setName(name){this.nameBuf=name;this._createDocStub("name",name);super.setName(name);return this}setAuto(key3,opt){this.autoWireSetting(key3,opt);return this}autoWireSetting(key3,opt){const conf=getConfig(key3);if(!conf)return;const name=`${conf.name}${statusDisplay(conf.status)}`;this.setName(name);conf.desc&&this.setDesc(conf.desc);this._createDocStub("key",key3);conf.obsolete&&this._createDocStub("is_obsolete","true");conf.level&&this._createDocStub("level",conf.level);this.holdValue=(null==opt?void 0:opt.holdValue)||this.holdValue;this.selfKey=key3;(conf.obsolete||(null==opt?void 0:opt.obsolete))&&this.settingEl.toggleClass("sls-setting-obsolete",!0);(null==opt?void 0:opt.onUpdate)&&this.addOnUpdate(opt.onUpdate);const stat=this._getComputedStatus();!1===stat.visibility&&this.settingEl.toggleClass("sls-setting-hidden",!stat.visibility);return conf}autoWireComponent(component2,conf,opt){this.placeHolderBuf=(null==conf?void 0:conf.placeHolder)||(null==opt?void 0:opt.placeHolder)||"";(null==conf?void 0:conf.level)==LEVEL_ADVANCED?this.settingEl.toggleClass("sls-setting-advanced",!0):(null==conf?void 0:conf.level)==LEVEL_POWER_USER&&this.settingEl.toggleClass("sls-setting-poweruser",!0);this.placeHolderBuf&&component2 instanceof import_obsidian.TextComponent&&component2.setPlaceholder(this.placeHolderBuf);(null==opt?void 0:opt.onUpdate)&&this.addOnUpdate(opt.onUpdate)}async commitValue(value){const key3=this.selfKey;if(void 0!==key3&&value!=_LiveSyncSetting.env.editingSettings[key3]){_LiveSyncSetting.env.editingSettings[key3]=value;this.holdValue||await _LiveSyncSetting.env.saveSettings([key3])}_LiveSyncSetting.env.requestUpdate()}autoWireText(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addText(text2=>{this.autoWiredComponent=text2;const setValue=wrapMemo(value=>{text2.setValue(value)});this.invalidateValue=()=>setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`);this.invalidateValue();text2.onChange(async value=>{await this.commitValue(value)});if(null==opt?void 0:opt.isPassword){text2.inputEl.setAttribute("type","password");this.hasPassword=!0}this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireTextArea(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addTextArea(text2=>{this.autoWiredComponent=text2;const setValue=wrapMemo(value=>{text2.setValue(value)});this.invalidateValue=()=>setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`);this.invalidateValue();text2.onChange(async value=>{await this.commitValue(value)});if(null==opt?void 0:opt.isPassword){text2.inputEl.setAttribute("type","password");this.hasPassword=!0}this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireNumeric(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addText(text2=>{this.autoWiredComponent=text2;void 0!==opt.clampMin&&text2.inputEl.setAttribute("min",`${opt.clampMin}`);void 0!==opt.clampMax&&text2.inputEl.setAttribute("max",`${opt.clampMax}`);let lastError=!1;const setValue=wrapMemo(value=>{text2.setValue(value)});this.invalidateValue=()=>{lastError||setValue(`${_LiveSyncSetting.env.editingSettings[key3]}`)};this.invalidateValue();text2.onChange(async TextValue=>{var _a8,_b5;const value=Number(TextValue);let hasError=!1;isNaN(value)&&(hasError=!0);void 0!==opt.clampMax&&opt.clampMax<value&&(hasError=!0);void 0!==opt.clampMin&&opt.clampMin>value&&(opt.acceptZero&&0==value||(hasError=!0));if(hasError){this.setTooltip($msg("liveSyncSetting.valueShouldBeInRange",{min:(null==(_a8=opt.clampMin)?void 0:_a8.toString())||"~",max:(null==(_b5=opt.clampMax)?void 0:_b5.toString())||"~"}));text2.inputEl.toggleClass("sls-item-invalid-value",!0);lastError=!0;return!1}lastError=!1;this.setTooltip("");text2.inputEl.toggleClass("sls-item-invalid-value",!1);await this.commitValue(value)});text2.inputEl.setAttr("type","number");this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireToggle(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addToggle(toggle=>{this.autoWiredComponent=toggle;const setValue=wrapMemo(value=>{toggle.setValue((null==opt?void 0:opt.invert)?!value:value)});this.invalidateValue=()=>{var _a8;return setValue(null!=(_a8=_LiveSyncSetting.env.editingSettings[key3])&&_a8)};this.invalidateValue();toggle.onChange(async value=>{await this.commitValue((null==opt?void 0:opt.invert)?!value:value)});this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}autoWireDropDown(key3,opt){const conf=this.autoWireSetting(key3,opt);this.addDropdown(dropdown=>{this.autoWiredComponent=dropdown;const setValue=wrapMemo(value=>{dropdown.setValue(value)});dropdown.addOptions(opt.options);this.invalidateValue=()=>setValue(_LiveSyncSetting.env.editingSettings[key3]||"");this.invalidateValue();dropdown.onChange(async value=>{await this.commitValue(value)});this.autoWireComponent(this.autoWiredComponent,conf,opt)});return this}addApplyButton(keys3,text2){this.addButton(button=>{this.applyButtonComponent=button;this.watchDirtyKeys=unique([...keys3,...this.watchDirtyKeys]);button.setButtonText(null!=text2?text2:$msg("liveSyncSettings.btnApply"));button.onClick(async()=>{await _LiveSyncSetting.env.saveSettings(keys3);_LiveSyncSetting.env.reloadAllSettings()});_LiveSyncSetting.env.requestUpdate()});return this}addOnUpdate(func){this.updateHandlers.add(func);return this}_getComputedStatus(){let newConf={};for(const handler of this.updateHandlers)newConf={...newConf,...handler()};return newConf}_applyOnUpdateHandlers(){if(this.updateHandlers.size>0){const newConf=this._getComputedStatus(),keys3=Object.keys(newConf);for(const k2 of keys3)if(!(k2 in this.prevStatus)||this.prevStatus[k2]!=newConf[k2])switch(k2){case"visibility":this.settingEl.toggleClass("sls-setting-hidden",!newConf[k2]);this.prevStatus[k2]=newConf[k2];break;case"classes":break;case"disabled":this.setDisabled(newConf[k2]||!1);this.settingEl.toggleClass("sls-setting-disabled",newConf[k2]||!1);this.prevStatus[k2]=newConf[k2];break;case"isCta":{const component2=this.autoWiredComponent;component2 instanceof import_obsidian.ButtonComponent&&(newConf[k2]?component2.setCta():component2.removeCta());this.prevStatus[k2]=newConf[k2]}break;case"isWarning":{const component2=this.autoWiredComponent;component2 instanceof import_obsidian.ButtonComponent&&newConf[k2]&&component2.setWarning();this.prevStatus[k2]=newConf[k2]}break}}}_onUpdate(){var _a8,_b5;if(this.applyButtonComponent){const isDirty2=_LiveSyncSetting.env.isSomeDirty(this.watchDirtyKeys);this.applyButtonComponent.setDisabled(!isDirty2);isDirty2?this.applyButtonComponent.setCta():this.applyButtonComponent.removeCta()}this.selfKey&&!_LiveSyncSetting.env.isDirty(this.selfKey)&&this.invalidateValue&&this.invalidateValue();if(this.holdValue&&this.selfKey){const isDirty2=_LiveSyncSetting.env.isDirty(this.selfKey),alt=isDirty2?$msg("liveSyncSetting.originalValue",{value:String(null!=(_b5=null==(_a8=_LiveSyncSetting.env.initialSettings)?void 0:_a8[this.selfKey])?_b5:"")}):"";this.controlEl.toggleClass("sls-item-dirty",isDirty2);if(!this.hasPassword){this.nameEl.toggleClass("sls-item-dirty-help",isDirty2);this.setTooltip(alt,{delay:10,placement:"right"})}}this._applyOnUpdateHandlers()}};AutoClosableModal=class extends import_obsidian.Modal{_closeByUnload(){eventHub.off("plugin-unloaded",this._closeByUnload);this.close()}constructor(app){super(app);this._closeByUnload=this._closeByUnload.bind(this);eventHub.once("plugin-unloaded",this._closeByUnload)}onClose(){eventHub.off("plugin-unloaded",this._closeByUnload)}};InputStringDialog=class extends AutoClosableModal{constructor(app,title,key3,placeholder,isPassword,onSubmit){super(app);this.result=!1;this.isManuallyClosed=!1;this.isPassword=!1;this.onSubmit=onSubmit;this.title=title;this.placeholder=placeholder;this.key=key3;this.isPassword=isPassword}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);const formEl=contentEl.createDiv();new import_obsidian.Setting(formEl).setName(this.key).setClass(this.isPassword?"password-input":"normal-input").addText(text2=>text2.onChange(value=>{this.result=value}));new import_obsidian.Setting(formEl).addButton(btn=>btn.setButtonText("Ok").setCta().onClick(()=>{this.isManuallyClosed=!0;this.close()})).addButton(btn=>btn.setButtonText("Cancel").setCta().onClick(()=>{this.close()}))}onClose(){super.onClose();const{contentEl}=this;contentEl.empty();this.isManuallyClosed?this.onSubmit(this.result):this.onSubmit(!1)}};PopoverSelectString=class extends import_obsidian.FuzzySuggestModal{constructor(app,note,placeholder,getItemsFun,callback){super(app);this.callback=()=>{};this.getItemsFun=()=>["yes","no"];this._app=app;this.setPlaceholder((null!=placeholder?placeholder:"y/n) ")+note);getItemsFun&&(this.getItemsFun=getItemsFun);this.callback=callback}getItems(){return this.getItemsFun()}getItemText(item){return item}onChooseItem(item,evt){var _a8;null==(_a8=this.callback)||_a8.call(this,item);this.callback=void 0}onClose(){setTimeout(()=>{if(this.callback){this.callback("");this.callback=void 0}},100)}};MessageBox=class extends AutoClosableModal{constructor(plugin3,title,contentMd,buttons,defaultAction,timeout,wideButton,onSubmit){super(plugin3.app);this.result=!1;this.isManuallyClosed=!1;this.timer=void 0;this.plugin=plugin3;this.title=title;this.contentMd=contentMd;this.buttons=buttons;this.onSubmit=onSubmit;this.defaultAction=defaultAction;this.timeout=timeout;this.wideButton=wideButton;this.timeout&&(this.timer=setInterval(()=>{var _a8,_b5;if(void 0!==this.timeout){this.timeout--;if(this.timeout<0){if(this.timer){clearInterval(this.timer);null==(_a8=this.defaultButtonComponent)||_a8.setButtonText(`${defaultAction}`);this.timer=void 0}this.result=defaultAction;this.isManuallyClosed=!0;this.close()}else null==(_b5=this.defaultButtonComponent)||_b5.setButtonText(`( ${this.timeout} ) ${defaultAction}`)}},1e3))}onOpen(){const{contentEl}=this;this.titleEl.setText(this.title);const div=contentEl.createDiv();div.style.userSelect="text";div.style.webkitUserSelect="text";import_obsidian.MarkdownRenderer.render(this.plugin.app,this.contentMd,div,"/",this.plugin);const buttonSetting=new import_obsidian.Setting(contentEl),labelWrapper=contentEl.createDiv();labelWrapper.addClass("sls-dialogue-note-wrapper");labelWrapper.createEl("label",{text:"To stop the countdown, tap anywhere on the dialogue"}).addClass("sls-dialogue-note-countdown");if(!this.timeout||!this.timer){labelWrapper.empty();labelWrapper.style.display="none"}buttonSetting.infoEl.style.display="none";buttonSetting.controlEl.style.flexWrap="wrap";if(this.wideButton){buttonSetting.controlEl.style.flexDirection="column";buttonSetting.controlEl.style.alignItems="center";buttonSetting.controlEl.style.justifyContent="center";buttonSetting.controlEl.style.flexGrow="1"}contentEl.addEventListener("click",()=>{var _a8;if(this.timer){labelWrapper.empty();labelWrapper.style.display="none";clearInterval(this.timer);this.timer=void 0;null==(_a8=this.defaultButtonComponent)||_a8.setButtonText(`${this.defaultAction}`)}});for(const button of this.buttons)buttonSetting.addButton(btn=>{btn.setButtonText(button).onClick(()=>{this.isManuallyClosed=!0;this.result=button;if(this.timer){clearInterval(this.timer);this.timer=void 0}this.close()});if(button==this.defaultAction){this.defaultButtonComponent=btn;btn.setCta()}if(this.wideButton){btn.buttonEl.style.flexGrow="1";btn.buttonEl.style.width="100%"}return btn})}onClose(){super.onClose();const{contentEl}=this;contentEl.empty();if(this.timer){clearInterval(this.timer);this.timer=void 0}this.isManuallyClosed?this.onSubmit(this.result):this.onSubmit(!1)}};askYesNo=(app,message)=>new Promise(res2=>{new PopoverSelectString(app,message,void 0,void 0,result=>res2(result)).open()});askSelectString=(app,message,items)=>{const getItemsFun=()=>items;return new Promise(res2=>{new PopoverSelectString(app,message,"",getItemsFun,result=>res2(result)).open()})};askString=(app,title,key3,placeholder,isPassword=!1)=>new Promise(res2=>{new InputStringDialog(app,title,key3,placeholder,isPassword,result=>res2(result)).open()});getHttpHandlerExtensionConfiguration=runtimeConfig=>({setHttpHandler(handler){runtimeConfig.httpHandler=handler},httpHandler:()=>runtimeConfig.httpHandler,updateHttpClientConfig(key3,value){var _a8;null==(_a8=runtimeConfig.httpHandler)||_a8.updateHttpClientConfig(key3,value)},httpHandlerConfigs:()=>runtimeConfig.httpHandler.httpHandlerConfigs()});resolveHttpHandlerRuntimeConfig=httpHandlerExtensionConfiguration=>({httpHandler:httpHandlerExtensionConfiguration.httpHandler()});(function(EndpointURLScheme2){EndpointURLScheme2.HTTP="http";EndpointURLScheme2.HTTPS="https"})(EndpointURLScheme||(EndpointURLScheme={}));(function(AlgorithmId2){AlgorithmId2.MD5="md5";AlgorithmId2.CRC32="crc32";AlgorithmId2.CRC32C="crc32c";AlgorithmId2.SHA1="sha1";AlgorithmId2.SHA256="sha256"})(AlgorithmId||(AlgorithmId={}));SMITHY_CONTEXT_KEY="__smithy_context";HttpRequest=class _HttpRequest{constructor(options){__publicField(this,"method");__publicField(this,"protocol");__publicField(this,"hostname");__publicField(this,"port");__publicField(this,"path");__publicField(this,"query");__publicField(this,"headers");__publicField(this,"username");__publicField(this,"password");__publicField(this,"fragment");__publicField(this,"body");this.method=options.method||"GET";this.hostname=options.hostname||"localhost";this.port=options.port;this.query=options.query||{};this.headers=options.headers||{};this.body=options.body;this.protocol=options.protocol?":"!==options.protocol.slice(-1)?`${options.protocol}:`:options.protocol:"https:";this.path=options.path?"/"!==options.path.charAt(0)?`/${options.path}`:options.path:"/";this.username=options.username;this.password=options.password;this.fragment=options.fragment}static clone(request2){const cloned=new _HttpRequest({...request2,headers:{...request2.headers}});cloned.query&&(cloned.query=cloneQuery(cloned.query));return cloned}static isInstance(request2){if(!request2)return!1;const req=request2;return"method"in req&&"protocol"in req&&"hostname"in req&&"path"in req&&"object"==typeof req.query&&"object"==typeof req.headers}clone(){return _HttpRequest.clone(this)}};HttpResponse=class{constructor(options){__publicField(this,"statusCode");__publicField(this,"reason");__publicField(this,"headers");__publicField(this,"body");this.statusCode=options.statusCode;this.reason=options.reason;this.headers=options.headers||{};this.body=options.body}static isInstance(response){if(!response)return!1;const resp=response;return"number"==typeof resp.statusCode&&"object"==typeof resp.headers}};addExpectContinueMiddlewareOptions={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0};getAddExpectContinuePlugin=options=>({applyToStack:clientStack=>{clientStack.add(addExpectContinueMiddleware(options),addExpectContinueMiddlewareOptions)}});(function(ChecksumAlgorithm2){ChecksumAlgorithm2.MD5="MD5";ChecksumAlgorithm2.CRC32="CRC32";ChecksumAlgorithm2.CRC32C="CRC32C";ChecksumAlgorithm2.CRC64NVME="CRC64NVME";ChecksumAlgorithm2.SHA1="SHA1";ChecksumAlgorithm2.SHA256="SHA256"})(ChecksumAlgorithm||(ChecksumAlgorithm={}));(function(ChecksumLocation2){ChecksumLocation2.HEADER="header";ChecksumLocation2.TRAILER="trailer"})(ChecksumLocation||(ChecksumLocation={}));DEFAULT_CHECKSUM_ALGORITHM=ChecksumAlgorithm.CRC32;getDateHeader=response=>{var _a8,_b5,_c3;return HttpResponse.isInstance(response)?null!=(_c3=null==(_a8=response.headers)?void 0:_a8.date)?_c3:null==(_b5=response.headers)?void 0:_b5.Date:void 0};getSkewCorrectedDate=systemClockOffset=>new Date(Date.now()+systemClockOffset);isClockSkewed=(clockTime,systemClockOffset)=>Math.abs(getSkewCorrectedDate(systemClockOffset).getTime()-clockTime)>=3e5;getUpdatedSystemClockOffset=(clockTime,currentSystemClockOffset)=>{const clockTimeInMs=Date.parse(clockTime);return isClockSkewed(clockTimeInMs,currentSystemClockOffset)?clockTimeInMs-Date.now():currentSystemClockOffset};throwSigningPropertyError=(name,property)=>{if(!property)throw new Error(`Property \`${name}\` is not resolved for AWS SDK SigV4Auth`);return property};validateSigningProperties=async signingProperties=>{var _a8,_b5,_c3;const context2=throwSigningPropertyError("context",signingProperties.context),config=throwSigningPropertyError("config",signingProperties.config),authScheme=null==(_c3=null==(_b5=null==(_a8=context2.endpointV2)?void 0:_a8.properties)?void 0:_b5.authSchemes)?void 0:_c3[0],signerFunction=throwSigningPropertyError("signer",config.signer);return{config,signer:await signerFunction(authScheme),signingRegion:null==signingProperties?void 0:signingProperties.signingRegion,signingRegionSet:null==signingProperties?void 0:signingProperties.signingRegionSet,signingName:null==signingProperties?void 0:signingProperties.signingName}};AwsSdkSigV4Signer=class{async sign(httpRequest,identity,signingProperties){var _a8,_b5,_c3,_d2;if(!HttpRequest.isInstance(httpRequest))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");const validatedProps=await validateSigningProperties(signingProperties),{config,signer}=validatedProps;let{signingRegion,signingName}=validatedProps;const handlerExecutionContext=signingProperties.context;if(null!=(_b5=null==(_a8=null==handlerExecutionContext?void 0:handlerExecutionContext.authSchemes)?void 0:_a8.length)&&_b5){const[first,second]=handlerExecutionContext.authSchemes;if("sigv4a"===(null==first?void 0:first.name)&&"sigv4"===(null==second?void 0:second.name)){signingRegion=null!=(_c3=null==second?void 0:second.signingRegion)?_c3:signingRegion;signingName=null!=(_d2=null==second?void 0:second.signingName)?_d2:signingName}}return await signer.sign(httpRequest,{signingDate:getSkewCorrectedDate(config.systemClockOffset),signingRegion,signingService:signingName})}errorHandler(signingProperties){return error=>{var _a8;const serverTime=null!=(_a8=error.ServerTime)?_a8:getDateHeader(error.$response);if(serverTime){const config=throwSigningPropertyError("config",signingProperties.config),initialSystemClockOffset=config.systemClockOffset;config.systemClockOffset=getUpdatedSystemClockOffset(serverTime,config.systemClockOffset);config.systemClockOffset!==initialSystemClockOffset&&error.$metadata&&(error.$metadata.clockSkewCorrected=!0)}throw error}}successHandler(httpResponse,signingProperties){const dateHeader=getDateHeader(httpResponse);if(dateHeader){const config=throwSigningPropertyError("config",signingProperties.config);config.systemClockOffset=getUpdatedSystemClockOffset(dateHeader,config.systemClockOffset)}}};AwsSdkSigV4ASigner=class extends AwsSdkSigV4Signer{async sign(httpRequest,identity,signingProperties){var _a8,_b5;if(!HttpRequest.isInstance(httpRequest))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");const{config,signer,signingRegion,signingRegionSet,signingName}=await validateSigningProperties(signingProperties),configResolvedSigningRegionSet=await(null==(_a8=config.sigv4aSigningRegionSet)?void 0:_a8.call(config)),multiRegionOverride=(null!=(_b5=null!=configResolvedSigningRegionSet?configResolvedSigningRegionSet:signingRegionSet)?_b5:[signingRegion]).join(",");return await signer.sign(httpRequest,{signingDate:getSkewCorrectedDate(config.systemClockOffset),signingRegion:multiRegionOverride,signingService:signingName})}};getSmithyContext=context2=>context2.__smithy_context||(context2.__smithy_context={});normalizeProvider=input=>{if("function"==typeof input)return input;const promisified=Promise.resolve(input);return()=>promisified};resolveAuthOptions=(candidateAuthOptions,authSchemePreference)=>{if(!authSchemePreference||0===authSchemePreference.length)return candidateAuthOptions;const preferredAuthOptions=[];for(const preferredSchemeName of authSchemePreference)for(const candidateAuthOption of candidateAuthOptions)candidateAuthOption.schemeId.split("#")[1]===preferredSchemeName&&preferredAuthOptions.push(candidateAuthOption);for(const candidateAuthOption of candidateAuthOptions)preferredAuthOptions.find(({schemeId})=>schemeId===candidateAuthOption.schemeId)||preferredAuthOptions.push(candidateAuthOption);return preferredAuthOptions};httpAuthSchemeMiddleware=(config,mwOptions)=>(next2,context2)=>async args=>{var _a8;const options=config.httpAuthSchemeProvider(await mwOptions.httpAuthSchemeParametersProvider(config,context2,args.input)),authSchemePreference=config.authSchemePreference?await config.authSchemePreference():[],resolvedOptions=resolveAuthOptions(options,authSchemePreference),authSchemes=convertHttpAuthSchemesToMap(config.httpAuthSchemes),smithyContext=getSmithyContext(context2),failureReasons=[];for(const option of resolvedOptions){const scheme=authSchemes.get(option.schemeId);if(!scheme){failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` was not enabled for this service.`);continue}const identityProvider=scheme.identityProvider(await mwOptions.identityProviderConfigProvider(config));if(!identityProvider){failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` did not have an IdentityProvider configured.`);continue}const{identityProperties={},signingProperties={}}=(null==(_a8=option.propertiesExtractor)?void 0:_a8.call(option,config,context2))||{};option.identityProperties=Object.assign(option.identityProperties||{},identityProperties);option.signingProperties=Object.assign(option.signingProperties||{},signingProperties);smithyContext.selectedHttpAuthScheme={httpAuthOption:option,identity:await identityProvider(option.identityProperties),signer:scheme.signer};break}if(!smithyContext.selectedHttpAuthScheme)throw new Error(failureReasons.join("\n"));return next2(args)};httpAuthSchemeEndpointRuleSetMiddlewareOptions={step:"serialize",tags:["HTTP_AUTH_SCHEME"],name:"httpAuthSchemeMiddleware",override:!0,relation:"before",toMiddleware:"endpointV2Middleware"};getHttpAuthSchemeEndpointRuleSetPlugin=(config,{httpAuthSchemeParametersProvider,identityProviderConfigProvider})=>({applyToStack:clientStack=>{clientStack.addRelativeTo(httpAuthSchemeMiddleware(config,{httpAuthSchemeParametersProvider,identityProviderConfigProvider}),httpAuthSchemeEndpointRuleSetMiddlewareOptions)}});defaultErrorHandler=signingProperties=>error=>{throw error};defaultSuccessHandler=(httpResponse,signingProperties)=>{};httpSigningMiddleware=config=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const scheme=getSmithyContext(context2).selectedHttpAuthScheme;if(!scheme)throw new Error("No HttpAuthScheme was selected: unable to sign request");const{httpAuthOption:{signingProperties={}},identity,signer}=scheme,output=await next2({...args,request:await signer.sign(args.request,identity,signingProperties)}).catch((signer.errorHandler||defaultErrorHandler)(signingProperties));(signer.successHandler||defaultSuccessHandler)(output.response,signingProperties);return output};httpSigningMiddlewareOptions={step:"finalizeRequest",tags:["HTTP_SIGNING"],name:"httpSigningMiddleware",aliases:["apiKeyMiddleware","tokenMiddleware","awsAuthMiddleware"],override:!0,relation:"after",toMiddleware:"retryMiddleware"};getHttpSigningPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(httpSigningMiddleware(),httpSigningMiddlewareOptions)}});normalizeProvider2=input=>{if("function"==typeof input)return input;const promisified=Promise.resolve(input);return()=>promisified};makePagedClientRequest=async(CommandCtor,client,input,withCommand=_=>_,...args)=>{var _a8;let command=new CommandCtor(input);command=null!=(_a8=withCommand(command))?_a8:command;return await client.send(command,...args)};get3=(fromObject,path2)=>{let cursor=fromObject;const pathComponents=path2.split(".");for(const step of pathComponents){if(!cursor||"object"!=typeof cursor)return;cursor=cursor[step]}return cursor};chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";alphabetByEncoding=Object.entries(chars).reduce((acc,[i2,c3])=>{acc[c3]=Number(i2);return acc},{});alphabetByValue=chars.split("");bitsPerLetter=6;bitsPerByte=8;maxLetterValue=63;fromBase64=input=>{let totalByteLength=input.length/4*3;"=="===input.slice(-2)?totalByteLength-=2:"="===input.slice(-1)&&totalByteLength--;const out=new ArrayBuffer(totalByteLength),dataView=new DataView(out);for(let i2=0;i2<input.length;i2+=4){let bits2=0,bitLength=0;for(let j2=i2,limit=i2+3;j2<=limit;j2++)if("="!==input[j2]){if(!(input[j2]in alphabetByEncoding))throw new TypeError(`Invalid character ${input[j2]} in base64 string.`);bits2|=alphabetByEncoding[input[j2]]<<(limit-j2)*bitsPerLetter;bitLength+=bitsPerLetter}else bits2>>=bitsPerLetter;const chunkOffset=i2/4*3;bits2>>=bitLength%bitsPerByte;const byteLength=Math.floor(bitLength/bitsPerByte);for(let k2=0;k2<byteLength;k2++){const offset=(byteLength-k2-1)*bitsPerByte;dataView.setUint8(chunkOffset+k2,(bits2&255<<offset)>>offset)}}return new Uint8Array(out)};init_dist_es();init_dist_es();Uint8ArrayBlobAdapter=class _Uint8ArrayBlobAdapter extends Uint8Array{static fromString(source2,encoding="utf-8"){if("string"==typeof source2)return"base64"===encoding?_Uint8ArrayBlobAdapter.mutate(fromBase64(source2)):_Uint8ArrayBlobAdapter.mutate(fromUtf8(source2));throw new Error(`Unsupported conversion from ${typeof source2} to Uint8ArrayBlobAdapter.`)}static mutate(source2){Object.setPrototypeOf(source2,_Uint8ArrayBlobAdapter.prototype);return source2}transformToString(encoding="utf-8"){return"base64"===encoding?toBase64(this):toUtf8(this)}};ReadableStreamRef="function"==typeof ReadableStream?ReadableStream:function(){};ChecksumStream=class extends ReadableStreamRef{};isReadableStream=stream=>{var _a8;return"function"==typeof ReadableStream&&((null==(_a8=null==stream?void 0:stream.constructor)?void 0:_a8.name)===ReadableStream.name||stream instanceof ReadableStream)};createChecksumStream=({expectedChecksum,checksum,source:source2,checksumSourceLocation,base64Encoder})=>{var _a8,_b5;if(!isReadableStream(source2))throw new Error(`@smithy/util-stream: unsupported source type ${null!=(_b5=null==(_a8=null==source2?void 0:source2.constructor)?void 0:_a8.name)?_b5:source2} in ChecksumStream.`);const encoder2=null!=base64Encoder?base64Encoder:toBase64;if("function"!=typeof TransformStream)throw new Error("@smithy/util-stream: unable to instantiate ChecksumStream because API unavailable: ReadableStream/TransformStream.");const transform2=new TransformStream({start(){},async transform(chunk,controller){checksum.update(chunk);controller.enqueue(chunk)},async flush(controller){const digest=await checksum.digest(),received=encoder2(digest);if(expectedChecksum!==received){const error=new Error(`Checksum mismatch: expected "${expectedChecksum}" but received "${received}" in response header "${checksumSourceLocation}".`);controller.error(error)}else controller.terminate()}});source2.pipeThrough(transform2);const readable2=transform2.readable;Object.setPrototypeOf(readable2,ChecksumStream.prototype);return readable2};ByteArrayCollector=class{constructor(allocByteArray){__publicField(this,"allocByteArray");__publicField(this,"byteLength",0);__publicField(this,"byteArrays",[]);this.allocByteArray=allocByteArray}push(byteArray){this.byteArrays.push(byteArray);this.byteLength+=byteArray.byteLength}flush(){if(1===this.byteArrays.length){const bytes=this.byteArrays[0];this.reset();return bytes}const aggregation=this.allocByteArray(this.byteLength);let cursor=0;for(let i2=0;i2<this.byteArrays.length;++i2){const bytes=this.byteArrays[i2];aggregation.set(bytes,cursor);cursor+=bytes.byteLength}this.reset();return aggregation}reset(){this.byteArrays=[];this.byteLength=0}};createBufferedReadable=function createBufferedReadableStream(upstream,size,logger2){const reader=upstream.getReader();let streamBufferingLoggedWarning=!1,bytesSeen=0;const buffers=["",new ByteArrayCollector(size2=>new Uint8Array(size2))];let mode=-1;const pull=async controller=>{const{value,done}=await reader.read(),chunk=value;if(done){if(-1!==mode){const remainder=flush(buffers,mode);sizeOf(remainder)>0&&controller.enqueue(remainder)}controller.close()}else{const chunkMode=modeOf(chunk,!1);if(mode!==chunkMode){mode>=0&&controller.enqueue(flush(buffers,mode));mode=chunkMode}if(-1===mode){controller.enqueue(chunk);return}const chunkSize2=sizeOf(chunk);bytesSeen+=chunkSize2;const bufferSize=sizeOf(buffers[mode]);if(chunkSize2>=size&&0===bufferSize)controller.enqueue(chunk);else{const newSize=merge(buffers,mode,chunk);if(!streamBufferingLoggedWarning&&bytesSeen>2*size){streamBufferingLoggedWarning=!0;null==logger2||logger2.warn(`@smithy/util-stream - stream chunk size ${chunkSize2} is below threshold of ${size}, automatically buffering.`)}newSize>=size?controller.enqueue(flush(buffers,mode)):await pull(controller)}}};return new ReadableStream({pull})};getAwsChunkedEncodingStream=(readableStream,options)=>{const{base64Encoder,bodyLengthChecker,checksumAlgorithmFn,checksumLocationName,streamHasher}=options,checksumRequired=void 0!==base64Encoder&&void 0!==bodyLengthChecker&&void 0!==checksumAlgorithmFn&&void 0!==checksumLocationName&&void 0!==streamHasher,digest=checksumRequired?streamHasher(checksumAlgorithmFn,readableStream):void 0,reader=readableStream.getReader();return new ReadableStream({async pull(controller){const{value,done}=await reader.read();if(done){controller.enqueue("0\r\n");if(checksumRequired){const checksum=base64Encoder(await digest);controller.enqueue(`${checksumLocationName}:${checksum}\r\n`);controller.enqueue("\r\n")}controller.close()}else controller.enqueue(`${(bodyLengthChecker(value)||0).toString(16)}\r\n${value}\r\n`)}})};escapeUri=uri=>encodeURIComponent(uri).replace(/[!'()*]/g,hexEncode);hexEncode=c3=>`%${c3.charCodeAt(0).toString(16).toUpperCase()}`;keepAliveSupport={supported:void 0};FetchHttpHandler=class _FetchHttpHandler{constructor(options){__publicField(this,"config");__publicField(this,"configProvider");if("function"==typeof options)this.configProvider=options().then(opts=>opts||{});else{this.config=null!=options?options:{};this.configProvider=Promise.resolve(this.config)}void 0===keepAliveSupport.supported&&(keepAliveSupport.supported=Boolean("undefined"!=typeof Request&&"keepalive"in createRequest("https://[::1]")))}static create(instanceOrOptions){return"function"==typeof(null==instanceOrOptions?void 0:instanceOrOptions.handle)?instanceOrOptions:new _FetchHttpHandler(instanceOrOptions)}destroy(){}async handle(request2,{abortSignal,requestTimeout:requestTimeout2}={}){var _a8,_b5,_c3;this.config||(this.config=await this.configProvider);const requestTimeoutInMs=null!=requestTimeout2?requestTimeout2:this.config.requestTimeout,keepAlive=!0===this.config.keepAlive,credentials=this.config.credentials;if(null==abortSignal?void 0:abortSignal.aborted){const abortError=buildAbortError(abortSignal);return Promise.reject(abortError)}let path2=request2.path;const queryString=buildQueryString(request2.query||{});queryString&&(path2+=`?${queryString}`);request2.fragment&&(path2+=`#${request2.fragment}`);let auth="";null==request2.username&&null==request2.password||(auth=`${null!=(_a8=request2.username)?_a8:""}:${null!=(_b5=request2.password)?_b5:""}@`);const{port,method}=request2,url=`${request2.protocol}//${auth}${request2.hostname}${port?`:${port}`:""}${path2}`,body="GET"===method||"HEAD"===method?void 0:request2.body,requestOptions={body,headers:new Headers(request2.headers),method,credentials};(null==(_c3=this.config)?void 0:_c3.cache)&&(requestOptions.cache=this.config.cache);body&&(requestOptions.duplex="half");"undefined"!=typeof AbortController&&(requestOptions.signal=abortSignal);keepAliveSupport.supported&&(requestOptions.keepalive=keepAlive);"function"==typeof this.config.requestInit&&Object.assign(requestOptions,this.config.requestInit(request2));let removeSignalEventListener=()=>{};const fetchRequest=createRequest(url,requestOptions),raceOfPromises=[fetch(fetchRequest).then(response=>{const fetchHeaders=response.headers,transformedHeaders={};for(const pair of fetchHeaders.entries())transformedHeaders[pair[0]]=pair[1];return null!=response.body?{response:new HttpResponse({headers:transformedHeaders,reason:response.statusText,statusCode:response.status,body:response.body})}:response.blob().then(body2=>({response:new HttpResponse({headers:transformedHeaders,reason:response.statusText,statusCode:response.status,body:body2})}))}),requestTimeout(requestTimeoutInMs)];abortSignal&&raceOfPromises.push(new Promise((resolve,reject)=>{const onAbort=()=>{const abortError=buildAbortError(abortSignal);reject(abortError)};if("function"==typeof abortSignal.addEventListener){const signal=abortSignal;signal.addEventListener("abort",onAbort,{once:!0});removeSignalEventListener=()=>signal.removeEventListener("abort",onAbort)}else abortSignal.onabort=onAbort}));return Promise.race(raceOfPromises).finally(removeSignalEventListener)}updateHttpClientConfig(key3,value){this.config=void 0;this.configProvider=this.configProvider.then(config=>{config[key3]=value;return config})}httpHandlerConfigs(){var _a8;return null!=(_a8=this.config)?_a8:{}}};streamCollector=async stream=>{var _a8;return"function"==typeof Blob&&stream instanceof Blob||"Blob"===(null==(_a8=stream.constructor)?void 0:_a8.name)?void 0!==Blob.prototype.arrayBuffer?new Uint8Array(await stream.arrayBuffer()):collectBlob(stream):collectStream(stream)};SHORT_TO_HEX={};HEX_TO_SHORT={};for(let i2=0;i2<256;i2++){let encodedByte=i2.toString(16).toLowerCase();1===encodedByte.length&&(encodedByte=`0${encodedByte}`);SHORT_TO_HEX[i2]=encodedByte;HEX_TO_SHORT[encodedByte]=i2}init_dist_es();sdkStreamMixin=stream=>{var _a8,_b5;if(!isBlobInstance(stream)&&!isReadableStream(stream)){const name=(null==(_b5=null==(_a8=null==stream?void 0:stream.__proto__)?void 0:_a8.constructor)?void 0:_b5.name)||stream;throw new Error(`Unexpected stream implementation, expect Blob or ReadableStream, got ${name}`)}let transformed=!1;const transformToByteArray=async()=>{if(transformed)throw new Error("The stream has already been transformed.");transformed=!0;return await streamCollector(stream)},blobToWebStream=blob=>{if("function"!=typeof blob.stream)throw new Error("Cannot transform payload Blob to web stream. Please make sure the Blob.stream() is polyfilled.\nIf you are using React Native, this API is not yet supported, see: https://react-native.canny.io/feature-requests/p/fetch-streaming-body");return blob.stream()};return Object.assign(stream,{transformToByteArray,transformToString:async encoding=>{const buf=await transformToByteArray();if("base64"===encoding)return toBase64(buf);if("hex"===encoding)return toHex2(buf);if(void 0===encoding||"utf8"===encoding||"utf-8"===encoding)return toUtf8(buf);if("function"==typeof TextDecoder)return new TextDecoder(encoding).decode(buf);throw new Error("TextDecoder is not available, please make sure polyfill is provided.")},transformToWebStream:()=>{if(transformed)throw new Error("The stream has already been transformed.");transformed=!0;if(isBlobInstance(stream))return blobToWebStream(stream);if(isReadableStream(stream))return stream;throw new Error(`Cannot transform payload to web stream, got ${stream}`)}})};isBlobInstance=stream=>"function"==typeof Blob&&stream instanceof Blob;collectBody=async(streamBody=new Uint8Array,context2)=>{if(streamBody instanceof Uint8Array)return Uint8ArrayBlobAdapter.mutate(streamBody);if(!streamBody)return Uint8ArrayBlobAdapter.mutate(new Uint8Array);const fromContext=context2.streamCollector(streamBody);return Uint8ArrayBlobAdapter.mutate(await fromContext)};deref=schemaRef=>"function"==typeof schemaRef?schemaRef():schemaRef;operation=(namespace,name,traits,input,output)=>({name,namespace,traits,input,output});schemaDeserializationMiddleware=config=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;const{response}=await next2(args),{operationSchema}=getSmithyContext(context2),[,ns,n3,t9,i2,o2]=null!=operationSchema?operationSchema:[];try{return{response,output:await config.protocol.deserializeResponse(operation(ns,n3,t9,i2,o2),{...config,...context2},response)}}catch(error){Object.defineProperty(error,"$response",{value:response,enumerable:!1,writable:!1,configurable:!1});if(!("$metadata"in error)){const hint="Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.";try{error.message+="\n "+hint}catch(e3){context2.logger&&"NoOpLogger"!==(null==(_b5=null==(_a8=context2.logger)?void 0:_a8.constructor)?void 0:_b5.name)?null==(_d2=null==(_c3=context2.logger)?void 0:_c3.warn)||_d2.call(_c3,hint):console.warn(hint)}void 0!==error.$responseBodyText&&error.$response&&(error.$response.body=error.$responseBodyText);try{if(HttpResponse.isInstance(response)){const{headers={}}=response,headerEntries=Object.entries(headers);error.$metadata={httpStatusCode:response.statusCode,requestId:findHeader(/^x-[\w-]+-request-?id$/,headerEntries),extendedRequestId:findHeader(/^x-[\w-]+-id-2$/,headerEntries),cfId:findHeader(/^x-[\w-]+-cf-id$/,headerEntries)}}}catch(e3){}}throw error}};findHeader=(pattern,headers)=>(headers.find(([k2])=>k2.match(pattern))||[void 0,void 0])[1];parseUrl=url=>{if("string"==typeof url)return parseUrl(new URL(url));const{hostname,pathname,port,protocol,search}=url;let query3;search&&(query3=parseQueryString(search));return{hostname,port:port?parseInt(port):void 0,protocol,path:pathname,query:query3}};toEndpointV1=endpoint=>{if("object"==typeof endpoint){if("url"in endpoint){const v1Endpoint=parseUrl(endpoint.url);if(endpoint.headers){v1Endpoint.headers={};for(const[name,values2]of Object.entries(endpoint.headers))v1Endpoint.headers[name.toLowerCase()]=values2.join(", ")}return v1Endpoint}return endpoint}return parseUrl(endpoint)};schemaSerializationMiddleware=config=>(next2,context2)=>async args=>{const{operationSchema}=getSmithyContext(context2),[,ns,n3,t9,i2,o2]=null!=operationSchema?operationSchema:[],endpoint=context2.endpointV2?async()=>toEndpointV1(context2.endpointV2):config.endpoint,request2=await config.protocol.serializeRequest(operation(ns,n3,t9,i2,o2),args.input,{...config,...context2,endpoint});return next2({...args,request:request2})};deserializerMiddlewareOption={name:"deserializerMiddleware",step:"deserialize",tags:["DESERIALIZER"],override:!0};serializerMiddlewareOption={name:"serializerMiddleware",step:"serialize",tags:["SERIALIZER"],override:!0};traitsCache=[];anno_it=Symbol.for("@smithy/nor-struct-it"),anno_ns=Symbol.for("@smithy/ns");simpleSchemaCacheN=[];simpleSchemaCacheS={};_NormalizedSchema=class _NormalizedSchema{constructor(ref,memberName){__publicField(this,"ref");__publicField(this,"memberName");__publicField(this,"symbol",_NormalizedSchema.symbol);__publicField(this,"name");__publicField(this,"schema");__publicField(this,"_isMemberSchema");__publicField(this,"traits");__publicField(this,"memberTraits");__publicField(this,"normalizedTraits");var _a8;this.ref=ref;this.memberName=memberName;const traitStack=[];let _ref=ref,schema=ref;this._isMemberSchema=!1;for(;isMemberSchema(_ref);){traitStack.push(_ref[1]);_ref=_ref[0];schema=deref(_ref);this._isMemberSchema=!0}if(traitStack.length>0){this.memberTraits={};for(let i2=traitStack.length-1;i2>=0;--i2){const traitSet=traitStack[i2];Object.assign(this.memberTraits,translateTraits(traitSet))}}else this.memberTraits=0;if(schema instanceof _NormalizedSchema){const computedMemberTraits=this.memberTraits;Object.assign(this,schema);this.memberTraits=Object.assign({},computedMemberTraits,schema.getMemberTraits(),this.getMemberTraits());this.normalizedTraits=void 0;this.memberName=null!=memberName?memberName:schema.memberName;return}this.schema=deref(schema);if(isStaticSchema(this.schema)){this.name=`${this.schema[1]}#${this.schema[2]}`;this.traits=this.schema[3]}else{this.name=null!=(_a8=this.memberName)?_a8:String(schema);this.traits=0}if(this._isMemberSchema&&!memberName)throw new Error(`@smithy/core/schema - NormalizedSchema member init ${this.getName(!0)} missing member name.`)}static[Symbol.hasInstance](lhs){const isPrototype=this.prototype.isPrototypeOf(lhs);return isPrototype||"object"!=typeof lhs||null===lhs?isPrototype:lhs.symbol===this.symbol}static of(ref){const keyAble="function"==typeof ref||"object"==typeof ref&&null!==ref;if("number"==typeof ref){if(simpleSchemaCacheN[ref])return simpleSchemaCacheN[ref]}else if("string"==typeof ref){if(simpleSchemaCacheS[ref])return simpleSchemaCacheS[ref]}else if(keyAble&&ref[anno_ns])return ref[anno_ns];const sc=deref(ref);if(sc instanceof _NormalizedSchema)return sc;if(isMemberSchema(sc)){const[ns2,traits]=sc;if(ns2 instanceof _NormalizedSchema){Object.assign(ns2.getMergedTraits(),translateTraits(traits));return ns2}throw new Error(`@smithy/core/schema - may not init unwrapped member schema=${JSON.stringify(ref,null,2)}.`)}const ns=new _NormalizedSchema(sc);return keyAble?ref[anno_ns]=ns:"string"==typeof sc?simpleSchemaCacheS[sc]=ns:"number"==typeof sc?simpleSchemaCacheN[sc]=ns:ns}getSchema(){const sc=this.schema;return Array.isArray(sc)&&0===sc[0]?sc[4]:sc}getName(withNamespace=!1){const{name}=this;return!withNamespace&&name&&name.includes("#")?name.split("#")[1]:name||void 0}getMemberName(){return this.memberName}isMemberSchema(){return this._isMemberSchema}isListSchema(){const sc=this.getSchema();return"number"==typeof sc?sc>=64&&sc<128:1===sc[0]}isMapSchema(){const sc=this.getSchema();return"number"==typeof sc?sc>=128&&sc<=255:2===sc[0]}isStructSchema(){const sc=this.getSchema();if("object"!=typeof sc)return!1;const id=sc[0];return 3===id||-3===id||4===id}isUnionSchema(){const sc=this.getSchema();return"object"==typeof sc&&4===sc[0]}isBlobSchema(){const sc=this.getSchema();return 21===sc||42===sc}isTimestampSchema(){const sc=this.getSchema();return"number"==typeof sc&&sc>=4&&sc<=7}isUnitSchema(){return"unit"===this.getSchema()}isDocumentSchema(){return 15===this.getSchema()}isStringSchema(){return 0===this.getSchema()}isBooleanSchema(){return 2===this.getSchema()}isNumericSchema(){return 1===this.getSchema()}isBigIntegerSchema(){return 17===this.getSchema()}isBigDecimalSchema(){return 19===this.getSchema()}isStreaming(){const{streaming}=this.getMergedTraits();return!!streaming||42===this.getSchema()}isIdempotencyToken(){return!!this.getMergedTraits().idempotencyToken}getMergedTraits(){var _a8;return null!=(_a8=this.normalizedTraits)?_a8:this.normalizedTraits={...this.getOwnTraits(),...this.getMemberTraits()}}getMemberTraits(){return translateTraits(this.memberTraits)}getOwnTraits(){return translateTraits(this.traits)}getKeySchema(){var _a8;const[isDoc,isMap]=[this.isDocumentSchema(),this.isMapSchema()];if(!isDoc&&!isMap)throw new Error(`@smithy/core/schema - cannot get key for non-map: ${this.getName(!0)}`);const schema=this.getSchema();return member([isDoc?15:null!=(_a8=schema[4])?_a8:0,0],"key")}getValueSchema(){const sc=this.getSchema(),[isDoc,isMap,isList]=[this.isDocumentSchema(),this.isMapSchema(),this.isListSchema()],memberSchema="number"==typeof sc?63&sc:sc&&"object"==typeof sc&&(isMap||isList)?sc[3+sc[0]]:isDoc?15:void 0;if(null!=memberSchema)return member([memberSchema,0],isMap?"value":"member");throw new Error(`@smithy/core/schema - ${this.getName(!0)} has no value member.`)}getMemberSchema(memberName){const struct=this.getSchema();if(this.isStructSchema()&&struct[4].includes(memberName)){const i2=struct[4].indexOf(memberName),memberSchema=struct[5][i2];return member(isMemberSchema(memberSchema)?memberSchema:[memberSchema,0],memberName)}if(this.isDocumentSchema())return member([15,0],memberName);throw new Error(`@smithy/core/schema - ${this.getName(!0)} has no member=${memberName}.`)}getMemberSchemas(){const buffer={};try{for(const[k2,v2]of this.structIterator())buffer[k2]=v2}catch(ignored){}return buffer}getEventStreamMember(){if(this.isStructSchema())for(const[memberName,memberSchema]of this.structIterator())if(memberSchema.isStreaming()&&memberSchema.isStructSchema())return memberName;return""}*structIterator(){if(this.isUnitSchema())return;if(!this.isStructSchema())throw new Error("@smithy/core/schema - cannot iterate non-struct schema.");const struct=this.getSchema(),z2=struct[4].length;let it=struct[anno_it];if(it&&z2===it.length)yield*it;else{it=Array(z2);for(let i2=0;i2<z2;++i2){const k2=struct[4][i2],v2=member([struct[5][i2],0],k2);yield it[i2]=[k2,v2]}struct[anno_it]=it}}};__publicField(_NormalizedSchema,"symbol",Symbol.for("@smithy/nor"));NormalizedSchema=_NormalizedSchema;isMemberSchema=sc=>Array.isArray(sc)&&2===sc.length;isStaticSchema=sc=>Array.isArray(sc)&&sc.length>=5;_TypeRegistry=class _TypeRegistry{constructor(namespace,schemas=new Map,exceptions=new Map){__publicField(this,"namespace");__publicField(this,"schemas");__publicField(this,"exceptions");this.namespace=namespace;this.schemas=schemas;this.exceptions=exceptions}static for(namespace){_TypeRegistry.registries.has(namespace)||_TypeRegistry.registries.set(namespace,new _TypeRegistry(namespace));return _TypeRegistry.registries.get(namespace)}copyFrom(other){const{schemas,exceptions}=this;for(const[k2,v2]of other.schemas)schemas.has(k2)||schemas.set(k2,v2);for(const[k2,v2]of other.exceptions)exceptions.has(k2)||exceptions.set(k2,v2)}register(shapeId,schema){const qualifiedName=this.normalizeShapeId(shapeId);for(const r4 of[this,_TypeRegistry.for(qualifiedName.split("#")[0])])r4.schemas.set(qualifiedName,schema)}getSchema(shapeId){const id=this.normalizeShapeId(shapeId);if(!this.schemas.has(id))throw new Error(`@smithy/core/schema - schema not found for ${id}`);return this.schemas.get(id)}registerError(es,ctor){const $error=es,ns=$error[1];for(const r4 of[this,_TypeRegistry.for(ns)]){r4.schemas.set(ns+"#"+$error[2],$error);r4.exceptions.set($error,ctor)}}getErrorCtor(es){const $error=es;return this.exceptions.has($error)?this.exceptions.get($error):_TypeRegistry.for($error[1]).exceptions.get($error)}getBaseException(){for(const exceptionKey of this.exceptions.keys())if(Array.isArray(exceptionKey)){const[,ns,name]=exceptionKey,id=ns+"#"+name;if(id.startsWith("smithy.ts.sdk.synthetic.")&&id.endsWith("ServiceException"))return exceptionKey}}find(predicate){return[...this.schemas.values()].find(predicate)}clear(){this.schemas.clear();this.exceptions.clear()}normalizeShapeId(shapeId){return shapeId.includes("#")?shapeId:this.namespace+"#"+shapeId}};__publicField(_TypeRegistry,"registries",new Map);TypeRegistry=_TypeRegistry;expectNumber=value=>{if(null!=value){if("string"==typeof value){const parsed=parseFloat(value);if(!Number.isNaN(parsed)){String(parsed)!==String(value)&&logger.warn(stackTraceWarning(`Expected number but observed string: ${value}`));return parsed}}if("number"==typeof value)return value;throw new TypeError(`Expected number, got ${typeof value}: ${value}`)}};MAX_FLOAT=Math.ceil(2**127*(2-2**-23));expectFloat32=value=>{const expected=expectNumber(value);if(void 0!==expected&&!Number.isNaN(expected)&&expected!==1/0&&expected!==-1/0&&Math.abs(expected)>MAX_FLOAT)throw new TypeError(`Expected 32-bit float, got ${value}`);return expected};expectLong=value=>{if(null!=value){if(Number.isInteger(value)&&!Number.isNaN(value))return value;throw new TypeError(`Expected integer, got ${typeof value}: ${value}`)}};expectShort=value=>expectSizedInt(value,16);expectByte=value=>expectSizedInt(value,8);expectSizedInt=(value,size)=>{const expected=expectLong(value);if(void 0!==expected&&castInt(expected,size)!==expected)throw new TypeError(`Expected ${size}-bit integer, got ${value}`);return expected};castInt=(value,size)=>{switch(size){case 32:return Int32Array.of(value)[0];case 16:return Int16Array.of(value)[0];case 8:return Int8Array.of(value)[0]}};strictParseFloat32=value=>expectFloat32("string"==typeof value?parseNumber(value):value);NUMBER_REGEX=/(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)|(-?Infinity)|(NaN)/g;parseNumber=value=>{const matches=value.match(NUMBER_REGEX);if(null===matches||matches[0].length!==value.length)throw new TypeError("Expected real number, got implicit NaN");return parseFloat(value)};strictParseShort=value=>expectShort("string"==typeof value?parseNumber(value):value);strictParseByte=value=>expectByte("string"==typeof value?parseNumber(value):value);stackTraceWarning=message=>String(new TypeError(message).stack||message).split("\n").slice(0,5).filter(s2=>!s2.includes("stackTraceWarning")).join("\n");logger={warn:console.warn};DAYS=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];MONTHS=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?[zZ]$/);new RegExp(/^(\d{4})-(\d{2})-(\d{2})[tT](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(([-+]\d{2}\:\d{2})|[zZ])$/);IMF_FIXDATE=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);RFC_850_DATE=new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? GMT$/);ASC_TIME=new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\d{2}) (\d{1,2}):(\d{2}):(\d{2})(?:\.(\d+))? (\d{4})$/);parseRfc7231DateTime=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC-7231 date-times must be expressed as strings");let match3=IMF_FIXDATE.exec(value);if(match3){const[_,dayStr,monthStr,yearStr,hours,minutes,seconds,fractionalMilliseconds]=match3;return buildDate(strictParseShort(stripLeadingZeroes(yearStr)),parseMonthByShortName(monthStr),parseDateValue(dayStr,"day",1,31),{hours,minutes,seconds,fractionalMilliseconds})}match3=RFC_850_DATE.exec(value);if(match3){const[_,dayStr,monthStr,yearStr,hours,minutes,seconds,fractionalMilliseconds]=match3;return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr),parseMonthByShortName(monthStr),parseDateValue(dayStr,"day",1,31),{hours,minutes,seconds,fractionalMilliseconds}))}match3=ASC_TIME.exec(value);if(match3){const[_,monthStr,dayStr,hours,minutes,seconds,fractionalMilliseconds,yearStr]=match3;return buildDate(strictParseShort(stripLeadingZeroes(yearStr)),parseMonthByShortName(monthStr),parseDateValue(dayStr.trimLeft(),"day",1,31),{hours,minutes,seconds,fractionalMilliseconds})}throw new TypeError("Invalid RFC-7231 date-time value")};buildDate=(year2,month,day,time2)=>{const adjustedMonth=month-1;validateDayOfMonth(year2,adjustedMonth,day);return new Date(Date.UTC(year2,adjustedMonth,day,parseDateValue(time2.hours,"hour",0,23),parseDateValue(time2.minutes,"minute",0,59),parseDateValue(time2.seconds,"seconds",0,60),parseMilliseconds(time2.fractionalMilliseconds)))};parseTwoDigitYear=value=>{const thisYear=(new Date).getUTCFullYear(),valueInThisCentury=100*Math.floor(thisYear/100)+strictParseShort(stripLeadingZeroes(value));return valueInThisCentury<thisYear?valueInThisCentury+100:valueInThisCentury};adjustRfc850Year=input=>input.getTime()-(new Date).getTime()>15768e8?new Date(Date.UTC(input.getUTCFullYear()-100,input.getUTCMonth(),input.getUTCDate(),input.getUTCHours(),input.getUTCMinutes(),input.getUTCSeconds(),input.getUTCMilliseconds())):input;parseMonthByShortName=value=>{const monthIdx=MONTHS.indexOf(value);if(monthIdx<0)throw new TypeError(`Invalid month: ${value}`);return monthIdx+1};DAYS_IN_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31];validateDayOfMonth=(year2,month,day)=>{let maxDays=DAYS_IN_MONTH[month];1===month&&isLeapYear(year2)&&(maxDays=29);if(day>maxDays)throw new TypeError(`Invalid day for ${MONTHS[month]} in ${year2}: ${day}`)};isLeapYear=year2=>year2%4==0&&(year2%100!=0||year2%400==0);parseDateValue=(value,type,lower,upper)=>{const dateVal=strictParseByte(stripLeadingZeroes(value));if(dateVal<lower||dateVal>upper)throw new TypeError(`${type} must be between ${lower} and ${upper}, inclusive`);return dateVal};parseMilliseconds=value=>null==value?0:1e3*strictParseFloat32("0."+value);stripLeadingZeroes=value=>{let idx2=0;for(;idx2<value.length-1&&"0"===value.charAt(idx2);)idx2++;return 0===idx2?value:value.slice(idx2)};randomUUID="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);decimalToHex=Array.from({length:256},(_,i2)=>i2.toString(16).padStart(2,"0"));v4=()=>{if(randomUUID)return randomUUID();const rnds=new Uint8Array(16);crypto.getRandomValues(rnds);rnds[6]=15&rnds[6]|64;rnds[8]=63&rnds[8]|128;return decimalToHex[rnds[0]]+decimalToHex[rnds[1]]+decimalToHex[rnds[2]]+decimalToHex[rnds[3]]+"-"+decimalToHex[rnds[4]]+decimalToHex[rnds[5]]+"-"+decimalToHex[rnds[6]]+decimalToHex[rnds[7]]+"-"+decimalToHex[rnds[8]]+decimalToHex[rnds[9]]+"-"+decimalToHex[rnds[10]]+decimalToHex[rnds[11]]+decimalToHex[rnds[12]]+decimalToHex[rnds[13]]+decimalToHex[rnds[14]]+decimalToHex[rnds[15]]};(LazyJsonString=function LazyJsonString2(val){return Object.assign(new String(val),{deserializeJSON:()=>JSON.parse(String(val)),toString:()=>String(val),toJSON:()=>String(val)})}).from=object=>object&&"object"==typeof object&&(object instanceof LazyJsonString||"deserializeJSON"in object)?object:"string"==typeof object||Object.getPrototypeOf(object)===String.prototype?LazyJsonString(String(object)):LazyJsonString(JSON.stringify(object));LazyJsonString.fromObject=LazyJsonString.from;ddd="(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:[ne|u?r]?s?day)?";mmm="(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)";time="(\\d?\\d):(\\d{2}):(\\d{2})(?:\\.(\\d+))?";RFC3339_WITH_OFFSET2=new RegExp(/^(\d{4})-(\d\d)-(\d\d)[tT](\d\d):(\d\d):(\d\d)(\.(\d+))?(([-+]\d\d:\d\d)|[zZ])$/);IMF_FIXDATE2=new RegExp(`^${ddd}, (\\d?\\d) ${mmm} (\\d{4}) ${time} GMT$`);RFC_850_DATE2=new RegExp(`^${ddd}, (\\d?\\d)-${mmm}-(\\d\\d) ${time} GMT$`);ASC_TIME2=new RegExp(`^${ddd} ${mmm} ( [1-9]|\\d\\d) ${time} (\\d{4})$`);months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];_parseEpochTimestamp=value=>{if(null==value)return;let num=NaN;if("number"==typeof value)num=value;else if("string"==typeof value){if(!/^-?\d*\.?\d+$/.test(value))throw new TypeError("parseEpochTimestamp - numeric string invalid.");num=Number.parseFloat(value)}else"object"==typeof value&&1===value.tag&&(num=value.value);if(isNaN(num)||Math.abs(num)===1/0)throw new TypeError("Epoch timestamps must be valid finite numbers.");return new Date(Math.round(1e3*num))};_parseRfc3339DateTimeWithOffset=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC3339 timestamps must be strings");const matches=RFC3339_WITH_OFFSET2.exec(value);if(!matches)throw new TypeError(`Invalid RFC3339 timestamp format ${value}`);const[,yearStr,monthStr,dayStr,hours,minutes,seconds,,ms,offsetStr]=matches;range3(monthStr,1,12);range3(dayStr,1,31);range3(hours,0,23);range3(minutes,0,59);range3(seconds,0,60);const date2=new Date(Date.UTC(Number(yearStr),Number(monthStr)-1,Number(dayStr),Number(hours),Number(minutes),Number(seconds),Number(ms)?Math.round(1e3*parseFloat(`0.${ms}`)):0));date2.setUTCFullYear(Number(yearStr));if("Z"!=offsetStr.toUpperCase()){const[,sign2,offsetH,offsetM]=/([+-])(\d\d):(\d\d)/.exec(offsetStr)||[void 0,"+",0,0],scalar="-"===sign2?1:-1;date2.setTime(date2.getTime()+scalar*(60*Number(offsetH)*60*1e3+60*Number(offsetM)*1e3))}return date2};_parseRfc7231DateTime=value=>{if(null==value)return;if("string"!=typeof value)throw new TypeError("RFC7231 timestamps must be strings.");let day,month,year2,hour,minute,second,fraction,matches;if(matches=IMF_FIXDATE2.exec(value))[,day,month,year2,hour,minute,second,fraction]=matches;else if(matches=RFC_850_DATE2.exec(value)){[,day,month,year2,hour,minute,second,fraction]=matches;year2=(Number(year2)+1900).toString()}else(matches=ASC_TIME2.exec(value))&&([,month,day,hour,minute,second,fraction,year2]=matches);if(year2&&second){const timestamp=Date.UTC(Number(year2),months.indexOf(month),Number(day),Number(hour),Number(minute),Number(second),fraction?Math.round(1e3*parseFloat(`0.${fraction}`)):0);range3(day,1,31);range3(hour,0,23);range3(minute,0,59);range3(second,0,60);const date2=new Date(timestamp);date2.setUTCFullYear(Number(year2));return date2}throw new TypeError(`Invalid RFC7231 date-time value ${value}.`)};splitHeader=value=>{const z2=value.length,values2=[];let prevChar,withinQuotes=!1,anchor=0;for(let i2=0;i2<z2;++i2){const char=value[i2];switch(char){case'"':"\\"!==prevChar&&(withinQuotes=!withinQuotes);break;case",":if(!withinQuotes){values2.push(value.slice(anchor,i2));anchor=i2+1}break;default:}prevChar=char}values2.push(value.slice(anchor));return values2.map(v2=>{const z3=(v2=v2.trim()).length;if(z3<2)return v2;'"'===v2[0]&&'"'===v2[z3-1]&&(v2=v2.slice(1,z3-1));return v2.replace(/\\"/g,'"')})};format=/^-?\d*(\.\d+)?$/;NumericValue=class _NumericValue{constructor(string,type){__publicField(this,"string");__publicField(this,"type");this.string=string;this.type=type;if(!format.test(string))throw new Error('@smithy/core/serde - NumericValue must only contain [0-9], at most one decimal point ".", and an optional negation prefix "-".')}toString(){return this.string}static[Symbol.hasInstance](object){if(!object||"object"!=typeof object)return!1;const _nv=object;return _NumericValue.prototype.isPrototypeOf(object)||"bigDecimal"===_nv.type&&format.test(_nv.string)}};SerdeContext=class{constructor(){__publicField(this,"serdeContext")}setSerdeContext(serdeContext){this.serdeContext=serdeContext}};HttpProtocol=class extends SerdeContext{constructor(options){var _a8;super();__publicField(this,"options");__publicField(this,"compositeErrorRegistry");this.options=options;this.compositeErrorRegistry=TypeRegistry.for(options.defaultNamespace);for(const etr of null!=(_a8=options.errorTypeRegistries)?_a8:[])this.compositeErrorRegistry.copyFrom(etr)}getRequestType(){return HttpRequest}getResponseType(){return HttpResponse}setSerdeContext(serdeContext){this.serdeContext=serdeContext;this.serializer.setSerdeContext(serdeContext);this.deserializer.setSerdeContext(serdeContext);this.getPayloadCodec()&&this.getPayloadCodec().setSerdeContext(serdeContext)}updateServiceEndpoint(request2,endpoint){if("url"in endpoint){request2.protocol=endpoint.url.protocol;request2.hostname=endpoint.url.hostname;request2.port=endpoint.url.port?Number(endpoint.url.port):void 0;request2.path=endpoint.url.pathname;request2.fragment=endpoint.url.hash||void 0;request2.username=endpoint.url.username||void 0;request2.password=endpoint.url.password||void 0;request2.query||(request2.query={});for(const[k2,v2]of endpoint.url.searchParams.entries())request2.query[k2]=v2;if(endpoint.headers)for(const[name,values2]of Object.entries(endpoint.headers))request2.headers[name]=values2.join(", ");return request2}request2.protocol=endpoint.protocol;request2.hostname=endpoint.hostname;request2.port=endpoint.port?Number(endpoint.port):void 0;request2.path=endpoint.path;request2.query={...endpoint.query};if(endpoint.headers)for(const[name,value]of Object.entries(endpoint.headers))request2.headers[name]=value;return request2}setHostPrefix(request2,operationSchema,input){var _a8,_b5,_c3;if(null==(_a8=this.serdeContext)?void 0:_a8.disableHostPrefix)return;const inputNs=NormalizedSchema.of(operationSchema.input),opTraits=translateTraits(null!=(_b5=operationSchema.traits)?_b5:{});if(opTraits.endpoint){let hostPrefix=null==(_c3=opTraits.endpoint)?void 0:_c3[0];if("string"==typeof hostPrefix){const hostLabelInputs=[...inputNs.structIterator()].filter(([,member2])=>member2.getMergedTraits().hostLabel);for(const[name]of hostLabelInputs){const replacement=input[name];if("string"!=typeof replacement)throw new Error(`@smithy/core/schema - ${name} in input must be a string as hostLabel.`);hostPrefix=hostPrefix.replace(`{${name}}`,replacement)}request2.hostname=hostPrefix+request2.hostname}}}deserializeMetadata(output){var _a8,_b5;return{httpStatusCode:output.statusCode,requestId:null!=(_b5=null!=(_a8=output.headers["x-amzn-requestid"])?_a8:output.headers["x-amzn-request-id"])?_b5:output.headers["x-amz-request-id"],extendedRequestId:output.headers["x-amz-id-2"],cfId:output.headers["x-amz-cf-id"]}}async serializeEventStream({eventStream,requestSchema,initialRequest}){return(await this.loadEventStreamCapability()).serializeEventStream({eventStream,requestSchema,initialRequest})}async deserializeEventStream({response,responseSchema,initialResponseContainer}){return(await this.loadEventStreamCapability()).deserializeEventStream({response,responseSchema,initialResponseContainer})}async loadEventStreamCapability(){const{EventStreamSerde:EventStreamSerde2}=await Promise.resolve().then(()=>(init_event_streams(),event_streams_exports));return new EventStreamSerde2({marshaller:this.getEventStreamMarshaller(),serializer:this.serializer,deserializer:this.deserializer,serdeContext:this.serdeContext,defaultContentType:this.getDefaultContentType()})}getDefaultContentType(){throw new Error(`@smithy/core/protocols - ${this.constructor.name} getDefaultContentType() implementation missing.`)}async deserializeHttpMessage(schema,context2,response,arg4,arg5){return[]}getEventStreamMarshaller(){const context2=this.serdeContext;if(!context2.eventStreamMarshaller)throw new Error("@smithy/core - HttpProtocol: eventStreamMarshaller missing in serdeContext.");return context2.eventStreamMarshaller}};HttpBindingProtocol=class extends HttpProtocol{async serializeRequest(operationSchema,_input,context2){var _a8,_b5;const input={...null!=_input?_input:{}},serializer=this.serializer,query3={},headers={},endpoint=await context2.endpoint(),ns=NormalizedSchema.of(null==operationSchema?void 0:operationSchema.input),payloadMemberNames=[],payloadMemberSchemas=[];let payload,hasNonHttpBindingMember=!1;const request2=new HttpRequest({protocol:"",hostname:"",port:void 0,path:"",fragment:void 0,query:query3,headers,body:void 0});if(endpoint){this.updateServiceEndpoint(request2,endpoint);this.setHostPrefix(request2,operationSchema,input);const opTraits=translateTraits(operationSchema.traits);if(opTraits.http){request2.method=opTraits.http[0];const[path2,search]=opTraits.http[1].split("?");"/"==request2.path?request2.path=path2:request2.path+=path2;const traitSearchParams=new URLSearchParams(null!=search?search:"");Object.assign(query3,Object.fromEntries(traitSearchParams))}}for(const[memberName,memberNs]of ns.structIterator()){const memberTraits=null!=(_a8=memberNs.getMergedTraits())?_a8:{},inputMemberValue=input[memberName];if(null!=inputMemberValue||memberNs.isIdempotencyToken())if(memberTraits.httpPayload){if(memberNs.isStreaming())memberNs.isStructSchema()?input[memberName]&&(payload=await this.serializeEventStream({eventStream:input[memberName],requestSchema:ns})):payload=inputMemberValue;else{serializer.write(memberNs,inputMemberValue);payload=serializer.flush()}delete input[memberName]}else if(memberTraits.httpLabel){serializer.write(memberNs,inputMemberValue);const replacement=serializer.flush();request2.path.includes(`{${memberName}+}`)?request2.path=request2.path.replace(`{${memberName}+}`,replacement.split("/").map(extendedEncodeURIComponent).join("/")):request2.path.includes(`{${memberName}}`)&&(request2.path=request2.path.replace(`{${memberName}}`,extendedEncodeURIComponent(replacement)));delete input[memberName]}else if(memberTraits.httpHeader){serializer.write(memberNs,inputMemberValue);headers[memberTraits.httpHeader.toLowerCase()]=String(serializer.flush());delete input[memberName]}else if("string"==typeof memberTraits.httpPrefixHeaders){for(const[key3,val]of Object.entries(inputMemberValue)){const amalgam=memberTraits.httpPrefixHeaders+key3;serializer.write([memberNs.getValueSchema(),{httpHeader:amalgam}],val);headers[amalgam.toLowerCase()]=serializer.flush()}delete input[memberName]}else if(memberTraits.httpQuery||memberTraits.httpQueryParams){this.serializeQuery(memberNs,inputMemberValue,query3);delete input[memberName]}else{hasNonHttpBindingMember=!0;payloadMemberNames.push(memberName);payloadMemberSchemas.push(memberNs)}else if(memberTraits.httpLabel&&(request2.path.includes(`{${memberName}+}`)||request2.path.includes(`{${memberName}}`)))throw new Error(`No value provided for input HTTP label: ${memberName}.`)}if(hasNonHttpBindingMember&&input){const[namespace,name]=(null!=(_b5=ns.getName(!0))?_b5:"#Unknown").split("#"),requiredMembers=ns.getSchema()[6],payloadSchema=[3,namespace,name,ns.getMergedTraits(),payloadMemberNames,payloadMemberSchemas,void 0];requiredMembers?payloadSchema[6]=requiredMembers:payloadSchema.pop();serializer.write(payloadSchema,input);payload=serializer.flush()}request2.headers=headers;request2.query=query3;request2.body=payload;return request2}serializeQuery(ns,data,query3){const serializer=this.serializer,traits=ns.getMergedTraits();if(traits.httpQueryParams){for(const[key3,val]of Object.entries(data))if(!(key3 in query3)){const valueSchema=ns.getValueSchema();Object.assign(valueSchema.getMergedTraits(),{...traits,httpQuery:key3,httpQueryParams:void 0});this.serializeQuery(valueSchema,val,query3)}}else if(ns.isListSchema()){const sparse=!!ns.getMergedTraits().sparse,buffer=[];for(const item of data){serializer.write([ns.getValueSchema(),traits],item);const serializable=serializer.flush();(sparse||void 0!==serializable)&&buffer.push(serializable)}query3[traits.httpQuery]=buffer}else{serializer.write([ns,traits],data);query3[traits.httpQuery]=serializer.flush()}}async deserializeResponse(operationSchema,context2,response){const deserializer=this.deserializer,ns=NormalizedSchema.of(operationSchema.output),dataObject={};if(response.statusCode>=300){const bytes=await collectBody(response.body,context2);bytes.byteLength>0&&Object.assign(dataObject,await deserializer.read(15,bytes));await this.handleError(operationSchema,context2,response,dataObject,this.deserializeMetadata(response));throw new Error("@smithy/core/protocols - HTTP Protocol error handler failed to throw.")}for(const header in response.headers){const value=response.headers[header];delete response.headers[header];response.headers[header.toLowerCase()]=value}const nonHttpBindingMembers=await this.deserializeHttpMessage(ns,context2,response,dataObject);if(nonHttpBindingMembers.length){const bytes=await collectBody(response.body,context2);if(bytes.byteLength>0){const dataFromBody=await deserializer.read(ns,bytes);for(const member2 of nonHttpBindingMembers)null!=dataFromBody[member2]&&(dataObject[member2]=dataFromBody[member2])}}else nonHttpBindingMembers.discardResponseBody&&await collectBody(response.body,context2);dataObject.$metadata=this.deserializeMetadata(response);return dataObject}async deserializeHttpMessage(schema,context2,response,arg4,arg5){let dataObject;dataObject=arg4 instanceof Set?arg5:arg4;let discardResponseBody=!0;const deserializer=this.deserializer,ns=NormalizedSchema.of(schema),nonHttpBindingMembers=[];for(const[memberName,memberSchema]of ns.structIterator()){const memberTraits=memberSchema.getMemberTraits();if(memberTraits.httpPayload){discardResponseBody=!1;if(memberSchema.isStreaming()){const isEventStream=memberSchema.isStructSchema();dataObject[memberName]=isEventStream?await this.deserializeEventStream({response,responseSchema:ns}):sdkStreamMixin(response.body)}else if(response.body){const bytes=await collectBody(response.body,context2);bytes.byteLength>0&&(dataObject[memberName]=await deserializer.read(memberSchema,bytes))}}else if(memberTraits.httpHeader){const key3=String(memberTraits.httpHeader).toLowerCase(),value=response.headers[key3];if(null!=value)if(memberSchema.isListSchema()){const headerListValueSchema=memberSchema.getValueSchema();headerListValueSchema.getMergedTraits().httpHeader=key3;let sections;sections=headerListValueSchema.isTimestampSchema()&&4===headerListValueSchema.getSchema()?splitEvery(value,",",2):splitHeader(value);const list=[];for(const section of sections)list.push(await deserializer.read(headerListValueSchema,section.trim()));dataObject[memberName]=list}else dataObject[memberName]=await deserializer.read(memberSchema,value)}else if(void 0!==memberTraits.httpPrefixHeaders){dataObject[memberName]={};for(const[header,value]of Object.entries(response.headers))if(header.startsWith(memberTraits.httpPrefixHeaders)){const valueSchema=memberSchema.getValueSchema();valueSchema.getMergedTraits().httpHeader=header;dataObject[memberName][header.slice(memberTraits.httpPrefixHeaders.length)]=await deserializer.read(valueSchema,value)}}else memberTraits.httpResponseCode?dataObject[memberName]=response.statusCode:nonHttpBindingMembers.push(memberName)}nonHttpBindingMembers.discardResponseBody=discardResponseBody;return nonHttpBindingMembers}};init_dist_es();FromStringShapeDeserializer=class extends SerdeContext{constructor(settings){super();__publicField(this,"settings");this.settings=settings}read(_schema,data){var _a8,_b5;const ns=NormalizedSchema.of(_schema);if(ns.isListSchema())return splitHeader(data).map(item=>this.read(ns.getValueSchema(),item));if(ns.isBlobSchema())return(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Decoder)?_b5:fromBase64)(data);if(ns.isTimestampSchema())switch(determineTimestampFormat(ns,this.settings)){case 5:return _parseRfc3339DateTimeWithOffset(data);case 6:return _parseRfc7231DateTime(data);case 7:return _parseEpochTimestamp(data);default:console.warn("Missing timestamp format, parsing value with Date constructor:",data);return new Date(data)}if(ns.isStringSchema()){const mediaType=ns.getMergedTraits().mediaType;let intermediateValue=data;if(mediaType){ns.getMergedTraits().httpHeader&&(intermediateValue=this.base64ToUtf8(intermediateValue));("application/json"===mediaType||mediaType.endsWith("+json"))&&(intermediateValue=LazyJsonString.from(intermediateValue));return intermediateValue}}return ns.isNumericSchema()?Number(data):ns.isBigIntegerSchema()?BigInt(data):ns.isBigDecimalSchema()?new NumericValue(data,"bigDecimal"):ns.isBooleanSchema()?"true"===String(data).toLowerCase():data}base64ToUtf8(base64String){var _a8,_b5,_c3,_d2;return(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.utf8Encoder)?_b5:toUtf8)((null!=(_d2=null==(_c3=this.serdeContext)?void 0:_c3.base64Decoder)?_d2:fromBase64)(base64String))}};init_dist_es();HttpInterceptingShapeDeserializer=class extends SerdeContext{constructor(codecDeserializer,codecSettings){super();__publicField(this,"codecDeserializer");__publicField(this,"stringDeserializer");this.codecDeserializer=codecDeserializer;this.stringDeserializer=new FromStringShapeDeserializer(codecSettings)}setSerdeContext(serdeContext){this.stringDeserializer.setSerdeContext(serdeContext);this.codecDeserializer.setSerdeContext(serdeContext);this.serdeContext=serdeContext}read(schema,data){var _a8,_b5,_c3,_d2;const ns=NormalizedSchema.of(schema),traits=ns.getMergedTraits(),toString=null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.utf8Encoder)?_b5:toUtf8;if(traits.httpHeader||traits.httpResponseCode)return this.stringDeserializer.read(ns,toString(data));if(traits.httpPayload){if(ns.isBlobSchema()){const toBytes=null!=(_d2=null==(_c3=this.serdeContext)?void 0:_c3.utf8Decoder)?_d2:fromUtf8;return"string"==typeof data?toBytes(data):data}if(ns.isStringSchema())return"byteLength"in data?toString(data):data}return this.codecDeserializer.read(ns,data)}};ToStringShapeSerializer=class extends SerdeContext{constructor(settings){super();__publicField(this,"settings");__publicField(this,"stringBuffer","");this.settings=settings}write(schema,value){var _a8,_b5,_c3,_d2;const ns=NormalizedSchema.of(schema);switch(typeof value){case"object":if(null===value){this.stringBuffer="null";return}if(ns.isTimestampSchema()){if(!(value instanceof Date))throw new Error(`@smithy/core/protocols - received non-Date value ${value} when schema expected Date in ${ns.getName(!0)}`);switch(determineTimestampFormat(ns,this.settings)){case 5:this.stringBuffer=value.toISOString().replace(".000Z","Z");break;case 6:this.stringBuffer=dateToUtcString(value);break;case 7:this.stringBuffer=String(value.getTime()/1e3);break;default:console.warn("Missing timestamp format, using epoch seconds",value);this.stringBuffer=String(value.getTime()/1e3)}return}if(ns.isBlobSchema()&&"byteLength"in value){this.stringBuffer=(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Encoder)?_b5:toBase64)(value);return}if(ns.isListSchema()&&Array.isArray(value)){let buffer="";for(const item of value){this.write([ns.getValueSchema(),ns.getMergedTraits()],item);const headerItem=this.flush();""!==buffer&&(buffer+=", ");buffer+=ns.getValueSchema().isTimestampSchema()?headerItem:quoteHeader(headerItem)}this.stringBuffer=buffer;return}this.stringBuffer=JSON.stringify(value,null,2);break;case"string":const mediaType=ns.getMergedTraits().mediaType;let intermediateValue=value;if(mediaType){("application/json"===mediaType||mediaType.endsWith("+json"))&&(intermediateValue=LazyJsonString.from(intermediateValue));if(ns.getMergedTraits().httpHeader){this.stringBuffer=(null!=(_d2=null==(_c3=this.serdeContext)?void 0:_c3.base64Encoder)?_d2:toBase64)(intermediateValue.toString());return}}this.stringBuffer=value;break;default:ns.isIdempotencyToken()?this.stringBuffer=v4():this.stringBuffer=String(value)}}flush(){const buffer=this.stringBuffer;this.stringBuffer="";return buffer}};HttpInterceptingShapeSerializer=class{constructor(codecSerializer,codecSettings,stringSerializer=new ToStringShapeSerializer(codecSettings)){__publicField(this,"codecSerializer");__publicField(this,"stringSerializer");__publicField(this,"buffer");this.codecSerializer=codecSerializer;this.stringSerializer=stringSerializer}setSerdeContext(serdeContext){this.codecSerializer.setSerdeContext(serdeContext);this.stringSerializer.setSerdeContext(serdeContext)}write(schema,value){const ns=NormalizedSchema.of(schema),traits=ns.getMergedTraits();if(!(traits.httpHeader||traits.httpLabel||traits.httpQuery))return this.codecSerializer.write(ns,value);this.stringSerializer.write(ns,value);this.buffer=this.stringSerializer.flush()}flush(){if(void 0!==this.buffer){const buffer=this.buffer;this.buffer=void 0;return buffer}return this.codecSerializer.flush()}};DefaultIdentityProviderConfig=class{constructor(config){__publicField(this,"authSchemes",new Map);for(const[key3,value]of Object.entries(config))void 0!==value&&this.authSchemes.set(key3,value)}getIdentityProvider(schemeId){return this.authSchemes.get(schemeId)}};isIdentityExpired=(()=>function isIdentityExpired2(identity){return doesIdentityRequireRefresh(identity)&&identity.expiration.getTime()-Date.now()<3e5})();doesIdentityRequireRefresh=identity=>void 0!==identity.expiration;memoizeIdentityProvider=(provider,isExpired,requiresRefresh)=>{if(void 0===provider)return;const normalizedProvider="function"!=typeof provider?async()=>Promise.resolve(provider):provider;let resolved,pending3,hasResult,isConstant=!1;const coalesceProvider=async options=>{pending3||(pending3=normalizedProvider(options));try{resolved=await pending3;hasResult=!0;isConstant=!1}finally{pending3=void 0}return resolved};return void 0===isExpired?async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider(options));return resolved}:async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider(options));if(isConstant)return resolved;if(!requiresRefresh(resolved)){isConstant=!0;return resolved}if(isExpired(resolved)){await coalesceProvider(options);return resolved}return resolved}};Error;memoize=(provider,isExpired,requiresRefresh)=>{let resolved,pending3,hasResult,isConstant=!1;const coalesceProvider=async()=>{pending3||(pending3=provider());try{resolved=await pending3;hasResult=!0;isConstant=!1}finally{pending3=void 0}return resolved};return void 0===isExpired?async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider());return resolved}:async options=>{hasResult&&!(null==options?void 0:options.forceRefresh)||(resolved=await coalesceProvider());if(isConstant)return resolved;if(requiresRefresh&&!requiresRefresh(resolved)){isConstant=!0;return resolved}if(isExpired(resolved)){await coalesceProvider();return resolved}return resolved}};resolveAwsSdkSigV4AConfig=config=>{config.sigv4aSigningRegionSet=normalizeProvider2(config.sigv4aSigningRegionSet);return config};AMZ_DATE_HEADER=(AMZ_DATE_QUERY_PARAM="X-Amz-Date").toLowerCase();GENERATED_HEADERS=["authorization",AMZ_DATE_HEADER,"date"];SIGNATURE_HEADER="X-Amz-Signature".toLowerCase();TOKEN_HEADER="X-Amz-Security-Token".toLowerCase();ALWAYS_UNSIGNABLE_HEADERS={authorization:!0,"cache-control":!0,connection:!0,expect:!0,from:!0,"keep-alive":!0,"max-forwards":!0,pragma:!0,referer:!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0,"user-agent":!0,"x-amzn-trace-id":!0};PROXY_HEADER_PATTERN=/^proxy-/;SEC_HEADER_PATTERN=/^sec-/;EVENT_ALGORITHM_IDENTIFIER="AWS4-HMAC-SHA256-PAYLOAD";init_dist_es();signingKeyCache={};cacheQueue=[];createScope=(shortDate,region,service)=>`${shortDate}/${region}/${service}/aws4_request`;getSigningKey=async(sha256Constructor,credentials,shortDate,region,service)=>{const cacheKey=`${shortDate}:${region}:${service}:${toHex2(await hmac(sha256Constructor,credentials.secretAccessKey,credentials.accessKeyId))}:${credentials.sessionToken}`;if(cacheKey in signingKeyCache)return signingKeyCache[cacheKey];cacheQueue.push(cacheKey);for(;cacheQueue.length>50;)delete signingKeyCache[cacheQueue.shift()];let key3=`AWS4${credentials.secretAccessKey}`;for(const signable of[shortDate,region,service,"aws4_request"])key3=await hmac(sha256Constructor,key3,signable);return signingKeyCache[cacheKey]=key3};hmac=(ctor,secret,data)=>{const hash3=new ctor(secret);hash3.update(toUint8Array(data));return hash3.digest()};getCanonicalHeaders=({headers},unsignableHeaders,signableHeaders)=>{const canonical={};for(const headerName of Object.keys(headers).sort()){if(null==headers[headerName])continue;const canonicalHeaderName=headerName.toLowerCase();(canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS||(null==unsignableHeaders?void 0:unsignableHeaders.has(canonicalHeaderName))||PROXY_HEADER_PATTERN.test(canonicalHeaderName)||SEC_HEADER_PATTERN.test(canonicalHeaderName))&&(!signableHeaders||signableHeaders&&!signableHeaders.has(canonicalHeaderName))||(canonical[canonicalHeaderName]=headers[headerName].trim().replace(/\s+/g," "))}return canonical};isArrayBuffer=arg=>"function"==typeof ArrayBuffer&&arg instanceof ArrayBuffer||"[object ArrayBuffer]"===Object.prototype.toString.call(arg);init_dist_es();getPayloadHash=async({headers,body},hashConstructor)=>{for(const headerName of Object.keys(headers))if("x-amz-content-sha256"===headerName.toLowerCase())return headers[headerName];if(null==body)return"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";if("string"==typeof body||ArrayBuffer.isView(body)||isArrayBuffer(body)){const hashCtor=new hashConstructor;hashCtor.update(toUint8Array(body));return toHex2(await hashCtor.digest())}return"UNSIGNED-PAYLOAD"};init_dist_es();HeaderFormatter=class{format(headers){const chunks=[];for(const headerName of Object.keys(headers)){const bytes=fromUtf8(headerName);chunks.push(Uint8Array.from([bytes.byteLength]),bytes,this.formatHeaderValue(headers[headerName]))}const out=new Uint8Array(chunks.reduce((carry,bytes)=>carry+bytes.byteLength,0));let position=0;for(const chunk of chunks){out.set(chunk,position);position+=chunk.byteLength}return out}formatHeaderValue(header){switch(header.type){case"boolean":return Uint8Array.from([header.value?0:1]);case"byte":return Uint8Array.from([2,header.value]);case"short":const shortView=new DataView(new ArrayBuffer(3));shortView.setUint8(0,3);shortView.setInt16(1,header.value,!1);return new Uint8Array(shortView.buffer);case"integer":const intView=new DataView(new ArrayBuffer(5));intView.setUint8(0,4);intView.setInt32(1,header.value,!1);return new Uint8Array(intView.buffer);case"long":const longBytes=new Uint8Array(9);longBytes[0]=5;longBytes.set(header.value.bytes,1);return longBytes;case"binary":const binView=new DataView(new ArrayBuffer(3+header.value.byteLength));binView.setUint8(0,6);binView.setUint16(1,header.value.byteLength,!1);const binBytes=new Uint8Array(binView.buffer);binBytes.set(header.value,3);return binBytes;case"string":const utf8Bytes=fromUtf8(header.value),strView=new DataView(new ArrayBuffer(3+utf8Bytes.byteLength));strView.setUint8(0,7);strView.setUint16(1,utf8Bytes.byteLength,!1);const strBytes=new Uint8Array(strView.buffer);strBytes.set(utf8Bytes,3);return strBytes;case"timestamp":const tsBytes=new Uint8Array(9);tsBytes[0]=8;tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes,1);return tsBytes;case"uuid":if(!UUID_PATTERN.test(header.value))throw new Error(`Invalid UUID received: ${header.value}`);const uuidBytes=new Uint8Array(17);uuidBytes[0]=9;uuidBytes.set(fromHex(header.value.replace(/\-/g,"")),1);return uuidBytes}}};(function(HEADER_VALUE_TYPE3){HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolTrue=0]="boolTrue";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolFalse=1]="boolFalse";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byte=2]="byte";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.short=3]="short";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.integer=4]="integer";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.long=5]="long";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byteArray=6]="byteArray";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.string=7]="string";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.timestamp=8]="timestamp";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.uuid=9]="uuid"})(HEADER_VALUE_TYPE||(HEADER_VALUE_TYPE={}));UUID_PATTERN=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;Int64=class _Int64{constructor(bytes){__publicField(this,"bytes");this.bytes=bytes;if(8!==bytes.byteLength)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(number){if(number>0x8000000000000000||number<-0x8000000000000000)throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);const bytes=new Uint8Array(8);for(let i2=7,remaining=Math.abs(Math.round(number));i2>-1&&remaining>0;i2--,remaining/=256)bytes[i2]=remaining;number<0&&negate(bytes);return new _Int64(bytes)}valueOf(){const bytes=this.bytes.slice(0),negative=128&bytes[0];negative&&negate(bytes);return parseInt(toHex2(bytes),16)*(negative?-1:1)}toString(){return String(this.valueOf())}};hasHeader=(soughtHeader,headers)=>{soughtHeader=soughtHeader.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};moveHeadersToQuery=(request2,options={})=>{var _a8,_b5;const{headers,query:query3={}}=HttpRequest.clone(request2);for(const name of Object.keys(headers)){const lname=name.toLowerCase();if("x-amz-"===lname.slice(0,6)&&!(null==(_a8=options.unhoistableHeaders)?void 0:_a8.has(lname))||(null==(_b5=options.hoistableHeaders)?void 0:_b5.has(lname))){query3[name]=headers[name];delete headers[name]}}return{...request2,headers,query:query3}};prepareRequest=request2=>{request2=HttpRequest.clone(request2);for(const headerName of Object.keys(request2.headers))GENERATED_HEADERS.indexOf(headerName.toLowerCase())>-1&&delete request2.headers[headerName];return request2};getCanonicalQuery=({query:query3={}})=>{const keys3=[],serialized2={};for(const key3 of Object.keys(query3)){if(key3.toLowerCase()===SIGNATURE_HEADER)continue;const encodedKey=escapeUri(key3);keys3.push(encodedKey);const value=query3[key3];"string"==typeof value?serialized2[encodedKey]=`${encodedKey}=${escapeUri(value)}`:Array.isArray(value)&&(serialized2[encodedKey]=value.slice(0).reduce((encoded,value2)=>encoded.concat([`${encodedKey}=${escapeUri(value2)}`]),[]).sort().join("&"))}return keys3.sort().map(key3=>serialized2[key3]).filter(serialized3=>serialized3).join("&")};iso8601=time2=>toDate(time2).toISOString().replace(/\.\d{3}Z$/,"Z");toDate=time2=>"number"==typeof time2?new Date(1e3*time2):"string"==typeof time2?Number(time2)?new Date(1e3*Number(time2)):new Date(time2):time2;init_dist_es();SignatureV4Base=class{constructor({applyChecksum,credentials,region,service,sha256,uriEscapePath=!0}){__publicField(this,"service");__publicField(this,"regionProvider");__publicField(this,"credentialProvider");__publicField(this,"sha256");__publicField(this,"uriEscapePath");__publicField(this,"applyChecksum");this.service=service;this.sha256=sha256;this.uriEscapePath=uriEscapePath;this.applyChecksum="boolean"!=typeof applyChecksum||applyChecksum;this.regionProvider=normalizeProvider(region);this.credentialProvider=normalizeProvider(credentials)}createCanonicalRequest(request2,canonicalHeaders,payloadHash){const sortedHeaders=Object.keys(canonicalHeaders).sort();return`${request2.method}\n${this.getCanonicalPath(request2)}\n${getCanonicalQuery(request2)}\n${sortedHeaders.map(name=>`${name}:${canonicalHeaders[name]}`).join("\n")}\n\n${sortedHeaders.join(";")}\n${payloadHash}`}async createStringToSign(longDate,credentialScope,canonicalRequest,algorithmIdentifier){const hash3=new this.sha256;hash3.update(toUint8Array(canonicalRequest));return`${algorithmIdentifier}\n${longDate}\n${credentialScope}\n${toHex2(await hash3.digest())}`}getCanonicalPath({path:path2}){if(this.uriEscapePath){const normalizedPathSegments=[];for(const pathSegment of path2.split("/"))0!==(null==pathSegment?void 0:pathSegment.length)&&"."!==pathSegment&&(".."===pathSegment?normalizedPathSegments.pop():normalizedPathSegments.push(pathSegment));const normalizedPath=`${(null==path2?void 0:path2.startsWith("/"))?"/":""}${normalizedPathSegments.join("/")}${normalizedPathSegments.length>0&&(null==path2?void 0:path2.endsWith("/"))?"/":""}`;return escapeUri(normalizedPath).replace(/%2F/g,"/")}return path2}validateResolvedCredentials(credentials){if("object"!=typeof credentials||"string"!=typeof credentials.accessKeyId||"string"!=typeof credentials.secretAccessKey)throw new Error("Resolved credential object is not valid")}formatDate(now3){const longDate=iso8601(now3).replace(/[\-:]/g,"");return{longDate,shortDate:longDate.slice(0,8)}}getCanonicalHeaderList(headers){return Object.keys(headers).sort().join(";")}};init_dist_es();SignatureV4=class extends SignatureV4Base{constructor({applyChecksum,credentials,region,service,sha256,uriEscapePath=!0}){super({applyChecksum,credentials,region,service,sha256,uriEscapePath});__publicField(this,"headerFormatter",new HeaderFormatter)}async presign(originalRequest,options={}){const{signingDate=new Date,expiresIn=3600,unsignableHeaders,unhoistableHeaders,signableHeaders,hoistableHeaders,signingRegion,signingService}=options,credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),{longDate,shortDate}=this.formatDate(signingDate);if(expiresIn>604800)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");const scope=createScope(shortDate,region,null!=signingService?signingService:this.service),request2=moveHeadersToQuery(prepareRequest(originalRequest),{unhoistableHeaders,hoistableHeaders});credentials.sessionToken&&(request2.query["X-Amz-Security-Token"]=credentials.sessionToken);request2.query["X-Amz-Algorithm"]="AWS4-HMAC-SHA256";request2.query["X-Amz-Credential"]=`${credentials.accessKeyId}/${scope}`;request2.query[AMZ_DATE_QUERY_PARAM]=longDate;request2.query["X-Amz-Expires"]=expiresIn.toString(10);const canonicalHeaders=getCanonicalHeaders(request2,unsignableHeaders,signableHeaders);request2.query["X-Amz-SignedHeaders"]=this.getCanonicalHeaderList(canonicalHeaders);request2.query["X-Amz-Signature"]=await this.getSignature(longDate,scope,this.getSigningKey(credentials,region,shortDate,signingService),this.createCanonicalRequest(request2,canonicalHeaders,await getPayloadHash(originalRequest,this.sha256)));return request2}async sign(toSign,options){return"string"==typeof toSign?this.signString(toSign,options):toSign.headers&&toSign.payload?this.signEvent(toSign,options):toSign.message?this.signMessage(toSign,options):this.signRequest(toSign,options)}async signEvent({headers,payload},{signingDate=new Date,priorSignature,signingRegion,signingService}){const region=null!=signingRegion?signingRegion:await this.regionProvider(),{shortDate,longDate}=this.formatDate(signingDate),scope=createScope(shortDate,region,null!=signingService?signingService:this.service),hashedPayload=await getPayloadHash({headers:{},body:payload},this.sha256),hash3=new this.sha256;hash3.update(headers);const hashedHeaders=toHex2(await hash3.digest()),stringToSign=[EVENT_ALGORITHM_IDENTIFIER,longDate,scope,priorSignature,hashedHeaders,hashedPayload].join("\n");return this.signString(stringToSign,{signingDate,signingRegion:region,signingService})}async signMessage(signableMessage,{signingDate=new Date,signingRegion,signingService}){return this.signEvent({headers:this.headerFormatter.format(signableMessage.message.headers),payload:signableMessage.message.body},{signingDate,signingRegion,signingService,priorSignature:signableMessage.priorSignature}).then(signature=>({message:signableMessage.message,signature}))}async signString(stringToSign,{signingDate=new Date,signingRegion,signingService}={}){const credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),{shortDate}=this.formatDate(signingDate),hash3=new this.sha256(await this.getSigningKey(credentials,region,shortDate,signingService));hash3.update(toUint8Array(stringToSign));return toHex2(await hash3.digest())}async signRequest(requestToSign,{signingDate=new Date,signableHeaders,unsignableHeaders,signingRegion,signingService}={}){const credentials=await this.credentialProvider();this.validateResolvedCredentials(credentials);const region=null!=signingRegion?signingRegion:await this.regionProvider(),request2=prepareRequest(requestToSign),{longDate,shortDate}=this.formatDate(signingDate),scope=createScope(shortDate,region,null!=signingService?signingService:this.service);request2.headers[AMZ_DATE_HEADER]=longDate;credentials.sessionToken&&(request2.headers[TOKEN_HEADER]=credentials.sessionToken);const payloadHash=await getPayloadHash(request2,this.sha256);!hasHeader("x-amz-content-sha256",request2.headers)&&this.applyChecksum&&(request2.headers["x-amz-content-sha256"]=payloadHash);const canonicalHeaders=getCanonicalHeaders(request2,unsignableHeaders,signableHeaders),signature=await this.getSignature(longDate,scope,this.getSigningKey(credentials,region,shortDate,signingService),this.createCanonicalRequest(request2,canonicalHeaders,payloadHash));request2.headers.authorization=`AWS4-HMAC-SHA256 Credential=${credentials.accessKeyId}/${scope}, SignedHeaders=${this.getCanonicalHeaderList(canonicalHeaders)}, Signature=${signature}`;return request2}async getSignature(longDate,credentialScope,keyPromise,canonicalRequest){const stringToSign=await this.createStringToSign(longDate,credentialScope,canonicalRequest,"AWS4-HMAC-SHA256"),hash3=new this.sha256(await keyPromise);hash3.update(toUint8Array(stringToSign));return toHex2(await hash3.digest())}getSigningKey(credentials,region,shortDate,service){return getSigningKey(this.sha256,credentials,shortDate,region,service||this.service)}};resolveAwsSdkSigV4Config=config=>{let resolvedCredentials,inputCredentials=config.credentials,isUserSupplied=!!config.credentials;Object.defineProperty(config,"credentials",{set(credentials){credentials&&credentials!==inputCredentials&&credentials!==resolvedCredentials&&(isUserSupplied=!0);inputCredentials=credentials;const memoizedProvider=normalizeCredentialProvider(config,{credentials:inputCredentials,credentialDefaultProvider:config.credentialDefaultProvider}),boundProvider=bindCallerConfig(config,memoizedProvider);if(isUserSupplied&&!boundProvider.attributed){const isCredentialObject="object"==typeof inputCredentials&&null!==inputCredentials;resolvedCredentials=async options=>{const attributedCreds=await boundProvider(options);return!isCredentialObject||attributedCreds.$source&&0!==Object.keys(attributedCreds.$source).length?attributedCreds:setCredentialFeature(attributedCreds,"CREDENTIALS_CODE","e")};resolvedCredentials.memoized=boundProvider.memoized;resolvedCredentials.configBound=boundProvider.configBound;resolvedCredentials.attributed=!0}else resolvedCredentials=boundProvider},get:()=>resolvedCredentials,enumerable:!0,configurable:!0});config.credentials=inputCredentials;const{signingEscapePath=!0,systemClockOffset=config.systemClockOffset||0,sha256}=config;let signer;signer=config.signer?normalizeProvider2(config.signer):config.regionInfoProvider?()=>normalizeProvider2(config.region)().then(async region=>[await config.regionInfoProvider(region,{useFipsEndpoint:await config.useFipsEndpoint(),useDualstackEndpoint:await config.useDualstackEndpoint()})||{},region]).then(([regionInfo,region])=>{const{signingRegion,signingService}=regionInfo;config.signingRegion=config.signingRegion||signingRegion||region;config.signingName=config.signingName||signingService||config.serviceId;const params={...config,credentials:config.credentials,region:config.signingRegion,service:config.signingName,sha256,uriEscapePath:signingEscapePath};return new(config.signerConstructor||SignatureV4)(params)}):async authScheme=>{const signingRegion=(authScheme=Object.assign({},{name:"sigv4",signingName:config.signingName||config.defaultSigningName,signingRegion:await normalizeProvider2(config.region)(),properties:{}},authScheme)).signingRegion,signingService=authScheme.signingName;config.signingRegion=config.signingRegion||signingRegion;config.signingName=config.signingName||signingService||config.serviceId;const params={...config,credentials:config.credentials,region:config.signingRegion,service:config.signingName,sha256,uriEscapePath:signingEscapePath};return new(config.signerConstructor||SignatureV4)(params)};return Object.assign(config,{systemClockOffset,signingEscapePath,signer})};TEXT_ENCODER="function"==typeof TextEncoder?new TextEncoder:null;calculateBodyLength=body=>{if("string"==typeof body){if(TEXT_ENCODER)return TEXT_ENCODER.encode(body).byteLength;let len=body.length;for(let i2=len-1;i2>=0;i2--){const code=body.charCodeAt(i2);code>127&&code<=2047?len++:code>2047&&code<=65535&&(len+=2);code>=56320&&code<=57343&&i2--}return len}if("number"==typeof body.byteLength)return body.byteLength;if("number"==typeof body.size)return body.size;throw new Error(`Body Length computation failed for ${body}`)};getAllAliases=(name,aliases)=>{const _aliases=[];name&&_aliases.push(name);if(aliases)for(const alias of aliases)_aliases.push(alias);return _aliases};getMiddlewareNameWithAliases=(name,aliases)=>`${name||"anonymous"}${aliases&&aliases.length>0?` (a.k.a. ${aliases.join(",")})`:""}`;constructStack=()=>{let absoluteEntries=[],relativeEntries=[],identifyOnResolve=!1;const entriesNameSet=new Set,sort=entries2=>entries2.sort((a2,b3)=>stepWeights[b3.step]-stepWeights[a2.step]||priorityWeights[b3.priority||"normal"]-priorityWeights[a2.priority||"normal"]),removeByName=toRemove=>{let isRemoved=!1;const filterCb=entry=>{const aliases=getAllAliases(entry.name,entry.aliases);if(aliases.includes(toRemove)){isRemoved=!0;for(const alias of aliases)entriesNameSet.delete(alias);return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},removeByReference=toRemove=>{let isRemoved=!1;const filterCb=entry=>{if(entry.middleware===toRemove){isRemoved=!0;for(const alias of getAllAliases(entry.name,entry.aliases))entriesNameSet.delete(alias);return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},cloneTo=toStack=>{var _a8;absoluteEntries.forEach(entry=>{toStack.add(entry.middleware,{...entry})});relativeEntries.forEach(entry=>{toStack.addRelativeTo(entry.middleware,{...entry})});null==(_a8=toStack.identifyOnResolve)||_a8.call(toStack,stack2.identifyOnResolve());return toStack},expandRelativeMiddlewareList=from=>{const expandedMiddlewareList=[];from.before.forEach(entry=>{0===entry.before.length&&0===entry.after.length?expandedMiddlewareList.push(entry):expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry))});expandedMiddlewareList.push(from);from.after.reverse().forEach(entry=>{0===entry.before.length&&0===entry.after.length?expandedMiddlewareList.push(entry):expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry))});return expandedMiddlewareList},getMiddlewareList=(debug2=!1)=>{const normalizedAbsoluteEntries=[],normalizedRelativeEntries=[],normalizedEntriesNameMap={};absoluteEntries.forEach(entry=>{const normalizedEntry={...entry,before:[],after:[]};for(const alias of getAllAliases(normalizedEntry.name,normalizedEntry.aliases))normalizedEntriesNameMap[alias]=normalizedEntry;normalizedAbsoluteEntries.push(normalizedEntry)});relativeEntries.forEach(entry=>{const normalizedEntry={...entry,before:[],after:[]};for(const alias of getAllAliases(normalizedEntry.name,normalizedEntry.aliases))normalizedEntriesNameMap[alias]=normalizedEntry;normalizedRelativeEntries.push(normalizedEntry)});normalizedRelativeEntries.forEach(entry=>{if(entry.toMiddleware){const toMiddleware=normalizedEntriesNameMap[entry.toMiddleware];if(void 0===toMiddleware){if(debug2)return;throw new Error(`${entry.toMiddleware} is not found when adding ${getMiddlewareNameWithAliases(entry.name,entry.aliases)} middleware ${entry.relation} ${entry.toMiddleware}`)}"after"===entry.relation&&toMiddleware.after.push(entry);"before"===entry.relation&&toMiddleware.before.push(entry)}});return sort(normalizedAbsoluteEntries).map(expandRelativeMiddlewareList).reduce((wholeList,expandedMiddlewareList)=>{wholeList.push(...expandedMiddlewareList);return wholeList},[])},stack2={add:(middleware,options={})=>{const{name,override,aliases:_aliases}=options,entry={step:"initialize",priority:"normal",middleware,...options},aliases=getAllAliases(name,_aliases);if(aliases.length>0){if(aliases.some(alias=>entriesNameSet.has(alias))){if(!override)throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name,_aliases)}'`);for(const alias of aliases){const toOverrideIndex=absoluteEntries.findIndex(entry2=>{var _a8;return entry2.name===alias||(null==(_a8=entry2.aliases)?void 0:_a8.some(a2=>a2===alias))});if(-1===toOverrideIndex)continue;const toOverride=absoluteEntries[toOverrideIndex];if(toOverride.step!==entry.step||entry.priority!==toOverride.priority)throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name,toOverride.aliases)}" middleware with ${toOverride.priority} priority in ${toOverride.step} step cannot be overridden by "${getMiddlewareNameWithAliases(name,_aliases)}" middleware with ${entry.priority} priority in ${entry.step} step.`);absoluteEntries.splice(toOverrideIndex,1)}}for(const alias of aliases)entriesNameSet.add(alias)}absoluteEntries.push(entry)},addRelativeTo:(middleware,options)=>{const{name,override,aliases:_aliases}=options,entry={middleware,...options},aliases=getAllAliases(name,_aliases);if(aliases.length>0){if(aliases.some(alias=>entriesNameSet.has(alias))){if(!override)throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name,_aliases)}'`);for(const alias of aliases){const toOverrideIndex=relativeEntries.findIndex(entry2=>{var _a8;return entry2.name===alias||(null==(_a8=entry2.aliases)?void 0:_a8.some(a2=>a2===alias))});if(-1===toOverrideIndex)continue;const toOverride=relativeEntries[toOverrideIndex];if(toOverride.toMiddleware!==entry.toMiddleware||toOverride.relation!==entry.relation)throw new Error(`"${getMiddlewareNameWithAliases(toOverride.name,toOverride.aliases)}" middleware ${toOverride.relation} "${toOverride.toMiddleware}" middleware cannot be overridden by "${getMiddlewareNameWithAliases(name,_aliases)}" middleware ${entry.relation} "${entry.toMiddleware}" middleware.`);relativeEntries.splice(toOverrideIndex,1)}}for(const alias of aliases)entriesNameSet.add(alias)}relativeEntries.push(entry)},clone:()=>cloneTo(constructStack()),use:plugin3=>{plugin3.applyToStack(stack2)},remove:toRemove=>"string"==typeof toRemove?removeByName(toRemove):removeByReference(toRemove),removeByTag:toRemove=>{let isRemoved=!1;const filterCb=entry=>{const{tags,name,aliases:_aliases}=entry;if(tags&&tags.includes(toRemove)){const aliases=getAllAliases(name,_aliases);for(const alias of aliases)entriesNameSet.delete(alias);isRemoved=!0;return!1}return!0};absoluteEntries=absoluteEntries.filter(filterCb);relativeEntries=relativeEntries.filter(filterCb);return isRemoved},concat:from=>{var _a8,_b5;const cloned=cloneTo(constructStack());cloned.use(from);cloned.identifyOnResolve(identifyOnResolve||cloned.identifyOnResolve()||null!=(_b5=null==(_a8=from.identifyOnResolve)?void 0:_a8.call(from))&&_b5);return cloned},applyToStack:cloneTo,identify:()=>getMiddlewareList(!0).map(mw=>{var _a8;const step=null!=(_a8=mw.step)?_a8:mw.relation+" "+mw.toMiddleware;return getMiddlewareNameWithAliases(mw.name,mw.aliases)+" - "+step}),identifyOnResolve(toggle){"boolean"==typeof toggle&&(identifyOnResolve=toggle);return identifyOnResolve},resolve:(handler,context2)=>{for(const middleware of getMiddlewareList().map(entry=>entry.middleware).reverse())handler=middleware(handler,context2);identifyOnResolve&&console.log(stack2.identify());return handler}};return stack2};stepWeights={initialize:5,serialize:4,build:3,finalizeRequest:2,deserialize:1};priorityWeights={high:3,normal:2,low:1};Client=class{constructor(config){__publicField(this,"config");__publicField(this,"middlewareStack",constructStack());__publicField(this,"initConfig");__publicField(this,"handlers");this.config=config;const{protocol,protocolSettings}=config;protocolSettings&&"function"==typeof protocol&&(config.protocol=new protocol(protocolSettings))}send(command,optionsOrCb,cb2){const options="function"!=typeof optionsOrCb?optionsOrCb:void 0,callback="function"==typeof optionsOrCb?optionsOrCb:cb2;let handler;if(void 0===options&&!0===this.config.cacheMiddleware){this.handlers||(this.handlers=new WeakMap);const handlers3=this.handlers;if(handlers3.has(command.constructor))handler=handlers3.get(command.constructor);else{handler=command.resolveMiddleware(this.middlewareStack,this.config,options);handlers3.set(command.constructor,handler)}}else{delete this.handlers;handler=command.resolveMiddleware(this.middlewareStack,this.config,options)}if(!callback)return handler(command).then(result=>result.output);handler(command).then(result=>callback(null,result.output),err3=>callback(err3)).catch(()=>{})}destroy(){var _a8,_b5,_c3;null==(_c3=null==(_b5=null==(_a8=this.config)?void 0:_a8.requestHandler)?void 0:_b5.destroy)||_c3.call(_b5);delete this.handlers}};SENSITIVE_STRING="***SensitiveInformation***";Command=class{constructor(){__publicField(this,"middlewareStack",constructStack());__publicField(this,"schema")}static classBuilder(){return new ClassBuilder}resolveMiddlewareWithContext(clientStack,configuration,options,{middlewareFn,clientName,commandName,inputFilterSensitiveLog,outputFilterSensitiveLog,smithyContext,additionalContext,CommandCtor}){for(const mw of middlewareFn.bind(this)(CommandCtor,clientStack,configuration,options))this.middlewareStack.use(mw);const stack2=clientStack.concat(this.middlewareStack),{logger:logger2}=configuration,handlerExecutionContext={logger:logger2,clientName,commandName,inputFilterSensitiveLog,outputFilterSensitiveLog,[SMITHY_CONTEXT_KEY]:{commandInstance:this,...smithyContext},...additionalContext},{requestHandler}=configuration;return stack2.resolve(request2=>requestHandler.handle(request2.request,options||{}),handlerExecutionContext)}};ClassBuilder=class{constructor(){__publicField(this,"_init",()=>{});__publicField(this,"_ep",{});__publicField(this,"_middlewareFn",()=>[]);__publicField(this,"_commandName","");__publicField(this,"_clientName","");__publicField(this,"_additionalContext",{});__publicField(this,"_smithyContext",{});__publicField(this,"_inputFilterSensitiveLog");__publicField(this,"_outputFilterSensitiveLog");__publicField(this,"_serializer",null);__publicField(this,"_deserializer",null);__publicField(this,"_operationSchema")}init(cb2){this._init=cb2}ep(endpointParameterInstructions){this._ep=endpointParameterInstructions;return this}m(middlewareSupplier){this._middlewareFn=middlewareSupplier;return this}s(service,operation2,smithyContext={}){this._smithyContext={service,operation:operation2,...smithyContext};return this}c(additionalContext={}){this._additionalContext=additionalContext;return this}n(clientName,commandName){this._clientName=clientName;this._commandName=commandName;return this}f(inputFilter=_=>_,outputFilter=_=>_){this._inputFilterSensitiveLog=inputFilter;this._outputFilterSensitiveLog=outputFilter;return this}ser(serializer){this._serializer=serializer;return this}de(deserializer){this._deserializer=deserializer;return this}sc(operation2){this._operationSchema=operation2;this._smithyContext.operationSchema=operation2;return this}build(){const closure=this;let CommandRef;return CommandRef=class extends Command{constructor(...[input]){super();__publicField(this,"input");__publicField(this,"serialize",closure._serializer);__publicField(this,"deserialize",closure._deserializer);this.input=null!=input?input:{};closure._init(this);this.schema=closure._operationSchema}static getEndpointParameterInstructions(){return closure._ep}resolveMiddleware(stack2,configuration,options){var _a8,_b5,_c3,_d2;const op=closure._operationSchema,input=null!=(_a8=null==op?void 0:op[4])?_a8:null==op?void 0:op.input,output=null!=(_b5=null==op?void 0:op[5])?_b5:null==op?void 0:op.output;return this.resolveMiddlewareWithContext(stack2,configuration,options,{CommandCtor:CommandRef,middlewareFn:closure._middlewareFn,clientName:closure._clientName,commandName:closure._commandName,inputFilterSensitiveLog:null!=(_c3=closure._inputFilterSensitiveLog)?_c3:op?schemaLogFilter.bind(null,input):_=>_,outputFilterSensitiveLog:null!=(_d2=closure._outputFilterSensitiveLog)?_d2:op?schemaLogFilter.bind(null,output):_=>_,smithyContext:closure._smithyContext,additionalContext:closure._additionalContext})}}}};createAggregatedClient=(commands2,Client2,options)=>{for(const[command,CommandCtor]of Object.entries(commands2)){const methodImpl=async function(args,optionsOrCb,cb2){const command2=new CommandCtor(args);if("function"==typeof optionsOrCb)this.send(command2,optionsOrCb);else{if("function"!=typeof cb2)return this.send(command2,optionsOrCb);if("object"!=typeof optionsOrCb)throw new Error("Expected http options but got "+typeof optionsOrCb);this.send(command2,optionsOrCb||{},cb2)}},methodName=(command[0].toLowerCase()+command.slice(1)).replace(/Command$/,"");Client2.prototype[methodName]=methodImpl}const{paginators:paginators2={},waiters:waiters2={}}=null!=options?options:{};for(const[paginatorName,paginatorFn]of Object.entries(paginators2))void 0===Client2.prototype[paginatorName]&&(Client2.prototype[paginatorName]=function(commandInput={},paginationConfiguration,...rest){return paginatorFn({...paginationConfiguration,client:this},commandInput,...rest)});for(const[waiterName,waiterFn]of Object.entries(waiters2))void 0===Client2.prototype[waiterName]&&(Client2.prototype[waiterName]=async function(commandInput={},waiterConfiguration,...rest){let config=waiterConfiguration;"number"==typeof waiterConfiguration&&(config={maxWaitTime:waiterConfiguration});return waiterFn({...config,client:this},commandInput,...rest)})};ServiceException=class _ServiceException extends Error{constructor(options){super(options.message);__publicField(this,"$fault");__publicField(this,"$response");__publicField(this,"$retryable");__publicField(this,"$metadata");Object.setPrototypeOf(this,Object.getPrototypeOf(this).constructor.prototype);this.name=options.name;this.$fault=options.$fault;this.$metadata=options.$metadata}static isInstance(value){if(!value)return!1;const candidate=value;return _ServiceException.prototype.isPrototypeOf(candidate)||Boolean(candidate.$fault)&&Boolean(candidate.$metadata)&&("client"===candidate.$fault||"server"===candidate.$fault)}static[Symbol.hasInstance](instance){if(!instance)return!1;const candidate=instance;return this===_ServiceException?_ServiceException.isInstance(instance):!!_ServiceException.isInstance(instance)&&(candidate.name&&this.name?this.prototype.isPrototypeOf(instance)||candidate.name===this.name:this.prototype.isPrototypeOf(instance))}};decorateServiceException=(exception,additions={})=>{Object.entries(additions).filter(([,v2])=>void 0!==v2).forEach(([k2,v2])=>{null!=exception[k2]&&""!==exception[k2]||(exception[k2]=v2)});const message=exception.message||exception.Message||"UnknownError";exception.message=message;delete exception.Message;return exception};loadConfigsForDefaultMode=mode=>{switch(mode){case"standard":return{retryMode:"standard",connectionTimeout:3100};case"in-region":return{retryMode:"standard",connectionTimeout:1100};case"cross-region":return{retryMode:"standard",connectionTimeout:3100};case"mobile":return{retryMode:"standard",connectionTimeout:3e4};default:return{}}};knownAlgorithms=Object.values(AlgorithmId);getChecksumConfiguration2=runtimeConfig=>{var _a8;const checksumAlgorithms=[];for(const id in AlgorithmId){const algorithmId=AlgorithmId[id];void 0!==runtimeConfig[algorithmId]&&checksumAlgorithms.push({algorithmId:()=>algorithmId,checksumConstructor:()=>runtimeConfig[algorithmId]})}for(const[id,ChecksumCtor]of Object.entries(null!=(_a8=runtimeConfig.checksumAlgorithms)?_a8:{}))checksumAlgorithms.push({algorithmId:()=>id,checksumConstructor:()=>ChecksumCtor});return{addChecksumAlgorithm(algo2){var _a9;runtimeConfig.checksumAlgorithms=null!=(_a9=runtimeConfig.checksumAlgorithms)?_a9:{};const id=algo2.algorithmId(),ctor=algo2.checksumConstructor();knownAlgorithms.includes(id)?runtimeConfig.checksumAlgorithms[id.toUpperCase()]=ctor:runtimeConfig.checksumAlgorithms[id]=ctor;checksumAlgorithms.push(algo2)},checksumAlgorithms:()=>checksumAlgorithms}};resolveChecksumRuntimeConfig2=clientConfig=>{const runtimeConfig={};clientConfig.checksumAlgorithms().forEach(checksumAlgorithm=>{const id=checksumAlgorithm.algorithmId();knownAlgorithms.includes(id)&&(runtimeConfig[id]=checksumAlgorithm.checksumConstructor())});return runtimeConfig};getRetryConfiguration=runtimeConfig=>({setRetryStrategy(retryStrategy){runtimeConfig.retryStrategy=retryStrategy},retryStrategy:()=>runtimeConfig.retryStrategy});resolveRetryRuntimeConfig=retryStrategyConfiguration=>{const runtimeConfig={};runtimeConfig.retryStrategy=retryStrategyConfiguration.retryStrategy();return runtimeConfig};getDefaultExtensionConfiguration=runtimeConfig=>Object.assign(getChecksumConfiguration2(runtimeConfig),getRetryConfiguration(runtimeConfig));resolveDefaultRuntimeConfig=config=>Object.assign(resolveChecksumRuntimeConfig2(config),resolveRetryRuntimeConfig(config));getValueFromTextNode=obj=>{for(const key3 in obj)obj.hasOwnProperty(key3)&&void 0!==obj[key3]["#text"]?obj[key3]=obj[key3]["#text"]:"object"==typeof obj[key3]&&null!==obj[key3]&&(obj[key3]=getValueFromTextNode(obj[key3]));return obj};NoOpLogger=class{trace(){}debug(){}info(){}warn(){}error(){}};ProtocolLib=class{constructor(queryCompat=!1){__publicField(this,"queryCompat");__publicField(this,"errorRegistry");this.queryCompat=queryCompat}resolveRestContentType(defaultContentType,inputSchema){const members=inputSchema.getMemberSchemas(),httpPayloadMember=Object.values(members).find(m3=>!!m3.getMergedTraits().httpPayload);return httpPayloadMember?httpPayloadMember.getMergedTraits().mediaType||(httpPayloadMember.isStringSchema()?"text/plain":httpPayloadMember.isBlobSchema()?"application/octet-stream":defaultContentType):!inputSchema.isUnitSchema()&&Object.values(members).find(m3=>{const{httpQuery,httpQueryParams,httpHeader,httpLabel,httpPrefixHeaders}=m3.getMergedTraits();return!(httpQuery||httpQueryParams||httpHeader||httpLabel||void 0!==httpPrefixHeaders)})?defaultContentType:void 0}async getErrorSchemaOrThrowBaseException(errorIdentifier,defaultNamespace,response,dataObject,metadata,getErrorSchema){var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2;let errorName=errorIdentifier;errorIdentifier.includes("#")&&([,errorName]=errorIdentifier.split("#"));const errorMetadata={$metadata:metadata,$fault:response.statusCode<500?"client":"server"};if(!this.errorRegistry)throw new Error("@aws-sdk/core/protocols - error handler not initialized.");try{return{errorSchema:null!=(_a8=null==getErrorSchema?void 0:getErrorSchema(this.errorRegistry,errorName))?_a8:this.errorRegistry.getSchema(errorIdentifier),errorMetadata}}catch(e3){dataObject.message=null!=(_c3=null!=(_b5=dataObject.message)?_b5:dataObject.Message)?_c3:"UnknownError";const synthetic=this.errorRegistry,baseExceptionSchema=synthetic.getBaseException();if(baseExceptionSchema){const ErrorCtor=null!=(_d2=synthetic.getErrorCtor(baseExceptionSchema))?_d2:Error;throw this.decorateServiceException(Object.assign(new ErrorCtor({name:errorName}),errorMetadata),dataObject)}const d4=dataObject,message=null!=(_i2=null!=(_g=null!=(_e2=null==d4?void 0:d4.message)?_e2:null==d4?void 0:d4.Message)?_g:null==(_f=null==d4?void 0:d4.Error)?void 0:_f.Message)?_i2:null==(_h2=null==d4?void 0:d4.Error)?void 0:_h2.message;throw this.decorateServiceException(Object.assign(new Error(message),{name:errorName},errorMetadata),dataObject)}}compose(composite,errorIdentifier,defaultNamespace){let namespace=defaultNamespace;errorIdentifier.includes("#")&&([namespace]=errorIdentifier.split("#"));const staticRegistry=TypeRegistry.for(namespace),defaultSyntheticRegistry=TypeRegistry.for("smithy.ts.sdk.synthetic."+defaultNamespace);composite.copyFrom(staticRegistry);composite.copyFrom(defaultSyntheticRegistry);this.errorRegistry=composite}decorateServiceException(exception,additions={}){var _a8,_b5,_c3,_d2,_e2,_f,_g;if(this.queryCompat){const msg=null!=(_a8=exception.Message)?_a8:additions.Message,error=decorateServiceException(exception,additions);msg&&(error.message=msg);error.Error={...error.Error,Type:null==(_b5=error.Error)?void 0:_b5.Type,Code:null==(_c3=error.Error)?void 0:_c3.Code,Message:null!=(_g=null!=(_f=null==(_d2=error.Error)?void 0:_d2.message)?_f:null==(_e2=error.Error)?void 0:_e2.Message)?_g:msg};const reqId=error.$metadata.requestId;reqId&&(error.RequestId=reqId);return error}return decorateServiceException(exception,additions)}setQueryCompatError(output,response){var _a8;const queryErrorHeader=null==(_a8=response.headers)?void 0:_a8["x-amzn-query-error"];if(void 0!==output&&null!=queryErrorHeader){const[Code,Type]=queryErrorHeader.split(";"),entries2=Object.entries(output),Error2={Code,Type};Object.assign(output,Error2);for(const[k2,v2]of entries2)Error2["message"===k2?"Message":k2]=v2;delete Error2.__type;output.Error=Error2}}queryCompatOutput(queryCompatErrorData,errorData){queryCompatErrorData.Error&&(errorData.Error=queryCompatErrorData.Error);queryCompatErrorData.Type&&(errorData.Type=queryCompatErrorData.Type);queryCompatErrorData.Code&&(errorData.Code=queryCompatErrorData.Code)}findQueryCompatibleError(registry,errorName){try{return registry.getSchema(errorName)}catch(e3){return registry.find(schema=>{var _a8;return(null==(_a8=NormalizedSchema.of(schema).getMergedTraits().awsQueryError)?void 0:_a8[0])===errorName})}}};SerdeContextConfig=class{constructor(){__publicField(this,"serdeContext")}setSerdeContext(serdeContext){this.serdeContext=serdeContext}};UnionSerde=class{constructor(from,to){__publicField(this,"from");__publicField(this,"to");__publicField(this,"keys");this.from=from;this.to=to;this.keys=new Set(Object.keys(this.from).filter(k2=>"__type"!==k2))}mark(key3){this.keys.delete(key3)}hasUnknown(){return 1===this.keys.size&&0===Object.keys(this.to).length}writeUnknown(){if(this.hasUnknown()){const k2=this.keys.values().next().value,v2=this.from[k2];this.to.$unknown=[k2,v2]}}};init_dist_es();ATTR_ESCAPE_RE=/[&<>"]/g;ATTR_ESCAPE_MAP={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};ELEMENT_ESCAPE_RE=/[&"'<>\r\n\u0085\u2028]/g;ELEMENT_ESCAPE_MAP={"&":"&amp;",'"':"&quot;","'":"&apos;","<":"&lt;",">":"&gt;","\r":"&#x0D;","\n":"&#x0A;","…":"&#x85;","\u2028":"&#x2028;"};XmlText=class{constructor(value){__publicField(this,"value");this.value=value}toString(){return escapeElement(""+this.value)}};XmlNode=class _XmlNode{constructor(name,children=[]){__publicField(this,"name");__publicField(this,"children");__publicField(this,"attributes",{});this.name=name;this.children=children}static of(name,childText,withName){const node=new _XmlNode(name);void 0!==childText&&node.addChildNode(new XmlText(childText));void 0!==withName&&node.withName(withName);return node}withName(name){this.name=name;return this}addAttribute(name,value){this.attributes[name]=value;return this}addChildNode(child2){this.children.push(child2);return this}removeAttribute(name){delete this.attributes[name];return this}n(name){this.name=name;return this}c(child2){this.children.push(child2);return this}a(name,value){null!=value&&(this.attributes[name]=value);return this}cc(input,field,withName=field){if(null!=input[field]){const node=_XmlNode.of(field,input[field]).withName(withName);this.c(node)}}l(input,listName,memberName,valueProvider){null!=input[listName]&&valueProvider().map(node=>{node.withName(memberName);this.c(node)})}lc(input,listName,memberName,valueProvider){if(null!=input[listName]){const nodes=valueProvider(),containerNode=new _XmlNode(memberName);nodes.map(node=>{containerNode.c(node)});this.c(containerNode)}}toString(){const hasChildren=Boolean(this.children.length);let xmlText=`<${this.name}`;const attributes=this.attributes;for(const attributeName of Object.keys(attributes)){const attribute=attributes[attributeName];null!=attribute&&(xmlText+=` ${attributeName}="${escapeAttribute(""+attribute)}"`)}return xmlText+(hasChildren?`>${this.children.map(c3=>c3.toString()).join("")}</${this.name}>`:"/>")}};init_dist_es();XmlShapeDeserializer=class extends SerdeContextConfig{constructor(settings){super();__publicField(this,"settings");__publicField(this,"stringDeserializer");this.settings=settings;this.stringDeserializer=new FromStringShapeDeserializer(settings)}setSerdeContext(serdeContext){this.serdeContext=serdeContext;this.stringDeserializer.setSerdeContext(serdeContext)}read(schema,bytes,key3){var _a8,_b5;const ns=NormalizedSchema.of(schema),memberSchemas=ns.getMemberSchemas();if(ns.isStructSchema()&&ns.isMemberSchema()&&Object.values(memberSchemas).find(memberNs=>!!memberNs.getMemberTraits().eventPayload)){const output={},memberName=Object.keys(memberSchemas)[0];memberSchemas[memberName].isBlobSchema()?output[memberName]=bytes:output[memberName]=this.read(memberSchemas[memberName],bytes);return output}const xmlString=(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.utf8Encoder)?_b5:toUtf8)(bytes),parsedObject=this.parseXml(xmlString);return this.readSchema(schema,key3?parsedObject[key3]:parsedObject)}readSchema(_schema,value){var _a8,_b5,_c3,_d2,_e2,_f;const ns=NormalizedSchema.of(_schema);if(ns.isUnitSchema())return;const traits=ns.getMergedTraits();if(ns.isListSchema()&&!Array.isArray(value))return this.readSchema(ns,[value]);if(null==value)return value;if("object"==typeof value){const flat=!!traits.xmlFlattened;if(ns.isListSchema()){const listValue=ns.getValueSchema(),buffer2=[],sourceKey=null!=(_a8=listValue.getMergedTraits().xmlName)?_a8:"member",source2=flat?value:(null!=(_b5=value[0])?_b5:value)[sourceKey];if(null==source2)return buffer2;const sourceArray=Array.isArray(source2)?source2:[source2];for(const v2 of sourceArray)buffer2.push(this.readSchema(listValue,v2));return buffer2}const buffer={};if(ns.isMapSchema()){const keyNs=ns.getKeySchema(),memberNs=ns.getValueSchema();let entries2;entries2=flat?Array.isArray(value)?value:[value]:Array.isArray(value.entry)?value.entry:[value.entry];const keyProperty=null!=(_c3=keyNs.getMergedTraits().xmlName)?_c3:"key",valueProperty=null!=(_d2=memberNs.getMergedTraits().xmlName)?_d2:"value";for(const entry of entries2){const key3=entry[keyProperty],value2=entry[valueProperty];buffer[key3]=this.readSchema(memberNs,value2)}return buffer}if(ns.isStructSchema()){const union=ns.isUnionSchema();let unionSerde;union&&(unionSerde=new UnionSerde(value,buffer));for(const[memberName,memberSchema]of ns.structIterator()){const memberTraits=memberSchema.getMergedTraits(),xmlObjectKey=memberTraits.httpPayload?null!=(_f=memberTraits.xmlName)?_f:memberSchema.getName():null!=(_e2=memberSchema.getMemberTraits().xmlName)?_e2:memberName;union&&unionSerde.mark(xmlObjectKey);null!=value[xmlObjectKey]&&(buffer[memberName]=this.readSchema(memberSchema,value[xmlObjectKey]))}union&&unionSerde.writeUnknown();return buffer}if(ns.isDocumentSchema())return value;throw new Error(`@aws-sdk/core/protocols - xml deserializer unhandled schema type for ${ns.getName(!0)}`)}return ns.isListSchema()?[]:ns.isMapSchema()||ns.isStructSchema()?{}:this.stringDeserializer.read(ns,value)}parseXml(xml){if(xml.length){let parsedObj;try{parsedObj=parseXML(xml)}catch(e3){e3&&"object"==typeof e3&&Object.defineProperty(e3,"$responseBodyText",{value:xml});throw e3}const textNodeName="#text",key3=Object.keys(parsedObj)[0],parsedObjToReturn=parsedObj[key3];if(parsedObjToReturn[textNodeName]){parsedObjToReturn[key3]=parsedObjToReturn[textNodeName];delete parsedObjToReturn[textNodeName]}return getValueFromTextNode(parsedObjToReturn)}return{}}};loadRestXmlErrorCode=(output,data)=>{var _a8;return void 0!==(null==(_a8=null==data?void 0:data.Error)?void 0:_a8.Code)?data.Error.Code:void 0!==(null==data?void 0:data.Code)?data.Code:404==output.statusCode?"NotFound":void 0};XmlShapeSerializer=class extends SerdeContextConfig{constructor(settings){super();__publicField(this,"settings");__publicField(this,"stringBuffer");__publicField(this,"byteBuffer");__publicField(this,"buffer");this.settings=settings}write(schema,value){var _a8,_b5;const ns=NormalizedSchema.of(schema);if(ns.isStringSchema()&&"string"==typeof value)this.stringBuffer=value;else if(ns.isBlobSchema())this.byteBuffer="byteLength"in value?value:(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Decoder)?_b5:fromBase64)(value);else{this.buffer=this.writeStruct(ns,value,void 0);const traits=ns.getMergedTraits();traits.httpPayload&&!traits.xmlName&&this.buffer.withName(ns.getName())}}flush(){var _a8;if(void 0!==this.byteBuffer){const bytes=this.byteBuffer;delete this.byteBuffer;return bytes}if(void 0!==this.stringBuffer){const str=this.stringBuffer;delete this.stringBuffer;return str}const buffer=this.buffer;this.settings.xmlNamespace&&((null==(_a8=null==buffer?void 0:buffer.attributes)?void 0:_a8.xmlns)||buffer.addAttribute("xmlns",this.settings.xmlNamespace));delete this.buffer;return buffer.toString()}writeStruct(ns,value,parentXmlns){var _a8,_b5,_c3,_d2;const traits=ns.getMergedTraits(),name=ns.isMemberSchema()&&!traits.httpPayload?null!=(_a8=ns.getMemberTraits().xmlName)?_a8:ns.getMemberName():null!=(_b5=traits.xmlName)?_b5:ns.getName();if(!name||!ns.isStructSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write struct with empty name or non-struct, schema=${ns.getName(!0)}.`);const structXmlNode=XmlNode.of(name),[xmlnsAttr,xmlns]=this.getXmlnsAttribute(ns,parentXmlns);for(const[memberName,memberSchema]of ns.structIterator()){const val=value[memberName];if(null!=val||memberSchema.isIdempotencyToken()){if(memberSchema.getMergedTraits().xmlAttribute){structXmlNode.addAttribute(null!=(_c3=memberSchema.getMergedTraits().xmlName)?_c3:memberName,this.writeSimple(memberSchema,val));continue}if(memberSchema.isListSchema())this.writeList(memberSchema,val,structXmlNode,xmlns);else if(memberSchema.isMapSchema())this.writeMap(memberSchema,val,structXmlNode,xmlns);else if(memberSchema.isStructSchema())structXmlNode.addChildNode(this.writeStruct(memberSchema,val,xmlns));else{const memberNode=XmlNode.of(null!=(_d2=memberSchema.getMergedTraits().xmlName)?_d2:memberSchema.getMemberName());this.writeSimpleInto(memberSchema,val,memberNode,xmlns);structXmlNode.addChildNode(memberNode)}}}const{$unknown}=value;if($unknown&&ns.isUnionSchema()&&Array.isArray($unknown)&&1===Object.keys(value).length){const[k2,v2]=$unknown,node=XmlNode.of(k2);if("string"!=typeof v2){if(!(value instanceof XmlNode||value instanceof XmlText))throw new Error("@aws-sdk - $unknown union member in XML requires value of type string, @aws-sdk/xml-builder::XmlNode or XmlText.");structXmlNode.addChildNode(value)}this.writeSimpleInto(0,v2,node,xmlns);structXmlNode.addChildNode(node)}xmlns&&structXmlNode.addAttribute(xmlnsAttr,xmlns);return structXmlNode}writeList(listMember,array,container,parentXmlns){var _a8;if(!listMember.isMemberSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member list: ${listMember.getName(!0)}`);const listTraits=listMember.getMergedTraits(),listValueSchema=listMember.getValueSchema(),listValueTraits=listValueSchema.getMergedTraits(),sparse=!!listValueTraits.sparse,flat=!!listTraits.xmlFlattened,[xmlnsAttr,xmlns]=this.getXmlnsAttribute(listMember,parentXmlns),writeItem=(container2,value)=>{var _a9,_b5,_c3,_d2;if(listValueSchema.isListSchema())this.writeList(listValueSchema,Array.isArray(value)?value:[value],container2,xmlns);else if(listValueSchema.isMapSchema())this.writeMap(listValueSchema,value,container2,xmlns);else if(listValueSchema.isStructSchema()){const struct=this.writeStruct(listValueSchema,value,xmlns);container2.addChildNode(struct.withName(flat?null!=(_a9=listTraits.xmlName)?_a9:listMember.getMemberName():null!=(_b5=listValueTraits.xmlName)?_b5:"member"))}else{const listItemNode=XmlNode.of(flat?null!=(_c3=listTraits.xmlName)?_c3:listMember.getMemberName():null!=(_d2=listValueTraits.xmlName)?_d2:"member");this.writeSimpleInto(listValueSchema,value,listItemNode,xmlns);container2.addChildNode(listItemNode)}};if(flat)for(const value of array)(sparse||null!=value)&&writeItem(container,value);else{const listNode=XmlNode.of(null!=(_a8=listTraits.xmlName)?_a8:listMember.getMemberName());xmlns&&listNode.addAttribute(xmlnsAttr,xmlns);for(const value of array)(sparse||null!=value)&&writeItem(listNode,value);container.addChildNode(listNode)}}writeMap(mapMember,map3,container,parentXmlns,containerIsMap=!1){var _a8,_b5,_c3,_d2;if(!mapMember.isMemberSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member map: ${mapMember.getName(!0)}`);const mapTraits=mapMember.getMergedTraits(),mapKeySchema=mapMember.getKeySchema(),keyTag=null!=(_a8=mapKeySchema.getMergedTraits().xmlName)?_a8:"key",mapValueSchema=mapMember.getValueSchema(),mapValueTraits=mapValueSchema.getMergedTraits(),valueTag=null!=(_b5=mapValueTraits.xmlName)?_b5:"value",sparse=!!mapValueTraits.sparse,flat=!!mapTraits.xmlFlattened,[xmlnsAttr,xmlns]=this.getXmlnsAttribute(mapMember,parentXmlns),addKeyValue=(entry,key3,val)=>{const keyNode=XmlNode.of(keyTag,key3),[keyXmlnsAttr,keyXmlns]=this.getXmlnsAttribute(mapKeySchema,xmlns);keyXmlns&&keyNode.addAttribute(keyXmlnsAttr,keyXmlns);entry.addChildNode(keyNode);let valueNode=XmlNode.of(valueTag);mapValueSchema.isListSchema()?this.writeList(mapValueSchema,val,valueNode,xmlns):mapValueSchema.isMapSchema()?this.writeMap(mapValueSchema,val,valueNode,xmlns,!0):mapValueSchema.isStructSchema()?valueNode=this.writeStruct(mapValueSchema,val,xmlns):this.writeSimpleInto(mapValueSchema,val,valueNode,xmlns);entry.addChildNode(valueNode)};if(flat){for(const[key3,val]of Object.entries(map3))if(sparse||null!=val){const entry=XmlNode.of(null!=(_c3=mapTraits.xmlName)?_c3:mapMember.getMemberName());addKeyValue(entry,key3,val);container.addChildNode(entry)}}else{let mapNode;if(!containerIsMap){mapNode=XmlNode.of(null!=(_d2=mapTraits.xmlName)?_d2:mapMember.getMemberName());xmlns&&mapNode.addAttribute(xmlnsAttr,xmlns);container.addChildNode(mapNode)}for(const[key3,val]of Object.entries(map3))if(sparse||null!=val){const entry=XmlNode.of("entry");addKeyValue(entry,key3,val);(containerIsMap?container:mapNode).addChildNode(entry)}}}writeSimple(_schema,value){var _a8,_b5;if(null===value)throw new Error("@aws-sdk/core/protocols - (XML serializer) cannot write null value.");const ns=NormalizedSchema.of(_schema);let nodeContents=null;if(value&&"object"==typeof value)if(ns.isBlobSchema())nodeContents=(null!=(_b5=null==(_a8=this.serdeContext)?void 0:_a8.base64Encoder)?_b5:toBase64)(value);else{if(!(ns.isTimestampSchema()&&value instanceof Date)){if(ns.isBigDecimalSchema()&&value)return value instanceof NumericValue?value.string:String(value);throw ns.isMapSchema()||ns.isListSchema()?new Error("@aws-sdk/core/protocols - xml serializer, cannot call _write() on List/Map schema, call writeList or writeMap() instead."):new Error(`@aws-sdk/core/protocols - xml serializer, unhandled schema type for object value and schema: ${ns.getName(!0)}`)}switch(determineTimestampFormat(ns,this.settings)){case 5:nodeContents=value.toISOString().replace(".000Z","Z");break;case 6:nodeContents=dateToUtcString(value);break;case 7:nodeContents=String(value.getTime()/1e3);break;default:console.warn("Missing timestamp format, using http date",value);nodeContents=dateToUtcString(value);break}}(ns.isBooleanSchema()||ns.isNumericSchema()||ns.isBigIntegerSchema()||ns.isBigDecimalSchema())&&(nodeContents=String(value));ns.isStringSchema()&&(nodeContents=void 0===value&&ns.isIdempotencyToken()?v4():String(value));if(null===nodeContents)throw new Error(`Unhandled schema-value pair ${ns.getName(!0)}=${value}`);return nodeContents}writeSimpleInto(_schema,value,into,parentXmlns){const nodeContents=this.writeSimple(_schema,value),ns=NormalizedSchema.of(_schema),content=new XmlText(nodeContents),[xmlnsAttr,xmlns]=this.getXmlnsAttribute(ns,parentXmlns);xmlns&&into.addAttribute(xmlnsAttr,xmlns);into.addChildNode(content)}getXmlnsAttribute(ns,parentXmlns){var _a8;const traits=ns.getMergedTraits(),[prefix,xmlns]=null!=(_a8=traits.xmlNamespace)?_a8:[];return xmlns&&xmlns!==parentXmlns?[prefix?`xmlns:${prefix}`:"xmlns",xmlns]:[void 0,void 0]}};XmlCodec=class extends SerdeContextConfig{constructor(settings){super();__publicField(this,"settings");this.settings=settings}createSerializer(){const serializer=new XmlShapeSerializer(this.settings);serializer.setSerdeContext(this.serdeContext);return serializer}createDeserializer(){const deserializer=new XmlShapeDeserializer(this.settings);deserializer.setSerdeContext(this.serdeContext);return deserializer}};AwsRestXmlProtocol=class extends HttpBindingProtocol{constructor(options){super(options);__publicField(this,"codec");__publicField(this,"serializer");__publicField(this,"deserializer");__publicField(this,"mixin",new ProtocolLib);const settings={timestampFormat:{useTrait:!0,default:5},httpBindings:!0,xmlNamespace:options.xmlNamespace,serviceNamespace:options.defaultNamespace};this.codec=new XmlCodec(settings);this.serializer=new HttpInterceptingShapeSerializer(this.codec.createSerializer(),settings);this.deserializer=new HttpInterceptingShapeDeserializer(this.codec.createDeserializer(),settings);this.compositeErrorRegistry}getPayloadCodec(){return this.codec}getShapeId(){return"aws.protocols#restXml"}async serializeRequest(operationSchema,input,context2){const request2=await super.serializeRequest(operationSchema,input,context2),inputSchema=NormalizedSchema.of(operationSchema.input);if(!request2.headers["content-type"]){const contentType=this.mixin.resolveRestContentType(this.getDefaultContentType(),inputSchema);contentType&&(request2.headers["content-type"]=contentType)}"string"!=typeof request2.body||request2.headers["content-type"]!==this.getDefaultContentType()||request2.body.startsWith("<?xml ")||this.hasUnstructuredPayloadBinding(inputSchema)||(request2.body='<?xml version="1.0" encoding="UTF-8"?>'+request2.body);return request2}async deserializeResponse(operationSchema,context2,response){return super.deserializeResponse(operationSchema,context2,response)}async handleError(operationSchema,context2,response,dataObject,metadata){var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k;const errorIdentifier=null!=(_a8=loadRestXmlErrorCode(response,dataObject))?_a8:"Unknown";this.mixin.compose(this.compositeErrorRegistry,errorIdentifier,this.options.defaultNamespace);if(dataObject.Error&&"object"==typeof dataObject.Error)for(const key3 of Object.keys(dataObject.Error)){dataObject[key3]=dataObject.Error[key3];"message"===key3.toLowerCase()&&(dataObject.message=dataObject.Error[key3])}dataObject.RequestId&&!metadata.requestId&&(metadata.requestId=dataObject.RequestId);const{errorSchema,errorMetadata}=await this.mixin.getErrorSchemaOrThrowBaseException(errorIdentifier,this.options.defaultNamespace,response,dataObject,metadata),ns=NormalizedSchema.of(errorSchema),message=null!=(_g=null!=(_f=null!=(_e2=null!=(_d2=null==(_b5=dataObject.Error)?void 0:_b5.message)?_d2:null==(_c3=dataObject.Error)?void 0:_c3.Message)?_e2:dataObject.message)?_f:dataObject.Message)?_g:"UnknownError",exception=new(null!=(_h2=this.compositeErrorRegistry.getErrorCtor(errorSchema))?_h2:Error)(message);await this.deserializeHttpMessage(errorSchema,context2,response,dataObject);const output={};for(const[name,member2]of ns.structIterator()){const target=null!=(_i2=member2.getMergedTraits().xmlName)?_i2:name,value=null!=(_k=null==(_j=dataObject.Error)?void 0:_j[target])?_k:dataObject[target];output[name]=this.codec.createDeserializer().readSchema(member2,value)}throw this.mixin.decorateServiceException(Object.assign(exception,errorMetadata,{$fault:ns.getMergedTraits().error,message},output),dataObject)}getDefaultContentType(){return"application/xml"}hasUnstructuredPayloadBinding(ns){for(const[,member2]of ns.structIterator())if(member2.getMergedTraits().httpPayload)return!(member2.isStructSchema()||member2.isMapSchema()||member2.isListSchema());return!1}};getChecksumAlgorithmForRequest=(input,{requestChecksumRequired,requestAlgorithmMember,requestChecksumCalculation})=>requestAlgorithmMember?input[requestAlgorithmMember]?input[requestAlgorithmMember]:void 0:"WHEN_SUPPORTED"===requestChecksumCalculation||requestChecksumRequired?DEFAULT_CHECKSUM_ALGORITHM:void 0;getChecksumLocationName=algorithm=>algorithm===ChecksumAlgorithm.MD5?"content-md5":`x-amz-checksum-${algorithm.toLowerCase()}`;hasHeader2=(header,headers)=>{const soughtHeader=header.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};hasHeaderWithPrefix=(headerPrefix,headers)=>{const soughtHeaderPrefix=headerPrefix.toLowerCase();for(const headerName of Object.keys(headers))if(headerName.toLowerCase().startsWith(soughtHeaderPrefix))return!0;return!1};isStreaming=body=>void 0!==body&&"string"!=typeof body&&!ArrayBuffer.isView(body)&&!isArrayBuffer(body);__assign=function(){__assign=Object.assign||function __assign2(t9){var s2,i2,n3,p2;for(i2=1,n3=arguments.length;i2<n3;i2++){s2=arguments[i2];for(p2 in s2)Object.prototype.hasOwnProperty.call(s2,p2)&&(t9[p2]=s2[p2])}return t9};return __assign.apply(this,arguments)};Object.create;Object.create;"function"==typeof SuppressedError&&SuppressedError;fromUtf82=input=>(new TextEncoder).encode(input);fromUtf83="undefined"!=typeof Buffer&&Buffer.from?function(input){return Buffer.from(input,"utf8")}:fromUtf82;AwsCrc32c=function(){function AwsCrc32c2(){this.crc32c=new Crc32c}AwsCrc32c2.prototype.update=function(toHash){isEmptyData(toHash)||this.crc32c.update(convertToBuffer(toHash))};AwsCrc32c2.prototype.digest=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a8){return[2,numToUint8(this.crc32c.digest())]})})};AwsCrc32c2.prototype.reset=function(){this.crc32c=new Crc32c};return AwsCrc32c2}();Crc32c=function(){function Crc32c2(){this.checksum=4294967295}Crc32c2.prototype.update=function(data){var e_1,_a8,data_1,data_1_1,byte;try{for(data_1_1=(data_1=__values(data)).next();!data_1_1.done;data_1_1=data_1.next()){byte=data_1_1.value;this.checksum=this.checksum>>>8^lookupTable[255&(this.checksum^byte)]}}catch(e_1_1){e_1={error:e_1_1}}finally{try{data_1_1&&!data_1_1.done&&(_a8=data_1.return)&&_a8.call(data_1)}finally{if(e_1)throw e_1.error}}return this};Crc32c2.prototype.digest=function(){return(4294967295^this.checksum)>>>0};return Crc32c2}();lookupTable=uint32ArrayFrom([0,4067132163,3778769143,324072436,3348797215,904991772,648144872,3570033899,2329499855,2024987596,1809983544,2575936315,1296289744,3207089363,2893594407,1578318884,274646895,3795141740,4049975192,51262619,3619967088,632279923,922689671,3298075524,2592579488,1760304291,2075979607,2312596564,1562183871,2943781820,3156637768,1313733451,549293790,3537243613,3246849577,871202090,3878099393,357341890,102525238,4101499445,2858735121,1477399826,1264559846,3107202533,1845379342,2677391885,2361733625,2125378298,820201905,3263744690,3520608582,598981189,4151959214,85089709,373468761,3827903834,3124367742,1213305469,1526817161,2842354314,2107672161,2412447074,2627466902,1861252501,1098587580,3004210879,2688576843,1378610760,2262928035,1955203488,1742404180,2511436119,3416409459,969524848,714683780,3639785095,205050476,4266873199,3976438427,526918040,1361435347,2739821008,2954799652,1114974503,2529119692,1691668175,2005155131,2247081528,3690758684,697762079,986182379,3366744552,476452099,3993867776,4250756596,255256311,1640403810,2477592673,2164122517,1922457750,2791048317,1412925310,1197962378,3037525897,3944729517,427051182,170179418,4165941337,746937522,3740196785,3451792453,1070968646,1905808397,2213795598,2426610938,1657317369,3053634322,1147748369,1463399397,2773627110,4215344322,153784257,444234805,3893493558,1021025245,3467647198,3722505002,797665321,2197175160,1889384571,1674398607,2443626636,1164749927,3070701412,2757221520,1446797203,137323447,4198817972,3910406976,461344835,3484808360,1037989803,781091935,3705997148,2460548119,1623424788,1939049696,2180517859,1429367560,2807687179,3020495871,1180866812,410100952,3927582683,4182430767,186734380,3756733383,763408580,1053836080,3434856499,2722870694,1344288421,1131464017,2971354706,1708204729,2545590714,2229949006,1988219213,680717673,3673779818,3383336350,1002577565,4010310262,493091189,238226049,4233660802,2987750089,1082061258,1395524158,2705686845,1972364758,2279892693,2494862625,1725896226,952904198,3399985413,3656866545,731699698,4283874585,222117402,510512622,3959836397,3280807620,837199303,582374963,3504198960,68661723,4135334616,3844915500,390545967,1230274059,3141532936,2825850620,1510247935,2395924756,2091215383,1878366691,2644384480,3553878443,565732008,854102364,3229815391,340358836,3861050807,4117890627,119113024,1493875044,2875275879,3090270611,1247431312,2660249211,1828433272,2141937292,2378227087,3811616794,291187481,34330861,4032846830,615137029,3603020806,3314634738,939183345,1776939221,2609017814,2295496738,2058945313,2926798794,1545135305,1330124605,3173225534,4084100981,17165430,307568514,3762199681,888469610,3332340585,3587147933,665062302,2042050490,2346497209,2559330125,1793573966,3190661285,1279665062,1595330642,2910671697]);generateCRC64NVMETable=()=>{const tables=new Array(8);for(let slice=0;slice<8;slice++){const table2=new Array(512);for(let i2=0;i2<256;i2++){let crc2=BigInt(i2);for(let j2=0;j2<8*(slice+1);j2++)crc2&BigInt("1")?crc2=crc2>>BigInt("1")^BigInt("0x9a6c9329ac4bc9b5"):crc2>>=BigInt("1");table2[2*i2]=Number(crc2>>BigInt("32")&BigInt("0xffffffff"));table2[2*i2+1]=Number(crc2&BigInt("0xffffffff"))}tables[slice]=new Uint32Array(table2)}return tables};ensureTablesInitialized=()=>{if(!CRC64_NVME_REVERSED_TABLE){CRC64_NVME_REVERSED_TABLE=generateCRC64NVMETable();[t0,t1,t2,t3,t4,t5,t6,t7]=CRC64_NVME_REVERSED_TABLE}};Crc64Nvme=class{constructor(){__publicField(this,"c1",0);__publicField(this,"c2",0);ensureTablesInitialized();this.reset()}update(data){const len=data.length;let i2=0,crc1=this.c1,crc2=this.c2;for(;i2+8<=len;){const idx0=(255&(crc2^data[i2++]))<<1,idx1=(255&(crc2>>>8^data[i2++]))<<1,idx2=(255&(crc2>>>16^data[i2++]))<<1,idx3=(255&(crc2>>>24^data[i2++]))<<1,idx4=(255&(crc1^data[i2++]))<<1,idx5=(255&(crc1>>>8^data[i2++]))<<1,idx6=(255&(crc1>>>16^data[i2++]))<<1,idx7=(255&(crc1>>>24^data[i2++]))<<1;crc1=t7[idx0]^t6[idx1]^t5[idx2]^t4[idx3]^t3[idx4]^t2[idx5]^t1[idx6]^t0[idx7];crc2=t7[idx0+1]^t6[idx1+1]^t5[idx2+1]^t4[idx3+1]^t3[idx4+1]^t2[idx5+1]^t1[idx6+1]^t0[idx7+1]}for(;i2<len;){const idx2=(255&(crc2^data[i2]))<<1;crc2=(crc2>>>8|(255&crc1)<<24)>>>0;crc1=crc1>>>8^t0[idx2];crc2^=t0[idx2+1];i2++}this.c1=crc1;this.c2=crc2}async digest(){const c12=4294967295^this.c1,c22=4294967295^this.c2;return new Uint8Array([c12>>>24,c12>>>16&255,c12>>>8&255,255&c12,c22>>>24,c22>>>16&255,c22>>>8&255,255&c22])}reset(){this.c1=4294967295;this.c2=4294967295}};AwsCrc32=function(){function AwsCrc322(){this.crc32=new Crc32}AwsCrc322.prototype.update=function(toHash){isEmptyData(toHash)||this.crc32.update(convertToBuffer(toHash))};AwsCrc322.prototype.digest=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a8){return[2,numToUint8(this.crc32.digest())]})})};AwsCrc322.prototype.reset=function(){this.crc32=new Crc32};return AwsCrc322}();Crc32=function(){function Crc322(){this.checksum=4294967295}Crc322.prototype.update=function(data){var e_1,_a8,data_1,data_1_1,byte;try{for(data_1_1=(data_1=__values(data)).next();!data_1_1.done;data_1_1=data_1.next()){byte=data_1_1.value;this.checksum=this.checksum>>>8^lookupTable2[255&(this.checksum^byte)]}}catch(e_1_1){e_1={error:e_1_1}}finally{try{data_1_1&&!data_1_1.done&&(_a8=data_1.return)&&_a8.call(data_1)}finally{if(e_1)throw e_1.error}}return this};Crc322.prototype.digest=function(){return(4294967295^this.checksum)>>>0};return Crc322}();lookupTable2=uint32ArrayFrom([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);getCrc32ChecksumAlgorithmFunction=()=>AwsCrc32;CLIENT_SUPPORTED_ALGORITHMS=[ChecksumAlgorithm.CRC32,ChecksumAlgorithm.CRC32C,ChecksumAlgorithm.CRC64NVME,ChecksumAlgorithm.SHA1,ChecksumAlgorithm.SHA256];PRIORITY_ORDER_ALGORITHMS=[ChecksumAlgorithm.SHA256,ChecksumAlgorithm.SHA1,ChecksumAlgorithm.CRC32,ChecksumAlgorithm.CRC32C,ChecksumAlgorithm.CRC64NVME];selectChecksumAlgorithmFunction=(checksumAlgorithm,config)=>{var _a8,_b5,_c3,_d2,_f,_g;const{checksumAlgorithms={}}=config;switch(checksumAlgorithm){case ChecksumAlgorithm.MD5:return null!=(_a8=null==checksumAlgorithms?void 0:checksumAlgorithms.MD5)?_a8:config.md5;case ChecksumAlgorithm.CRC32:return null!=(_b5=null==checksumAlgorithms?void 0:checksumAlgorithms.CRC32)?_b5:getCrc32ChecksumAlgorithmFunction();case ChecksumAlgorithm.CRC32C:return null!=(_c3=null==checksumAlgorithms?void 0:checksumAlgorithms.CRC32C)?_c3:AwsCrc32c;case ChecksumAlgorithm.CRC64NVME:return null!=(_d2=null==checksumAlgorithms?void 0:checksumAlgorithms.CRC64NVME)?_d2:Crc64Nvme;case ChecksumAlgorithm.SHA1:return null!=(_f=null==checksumAlgorithms?void 0:checksumAlgorithms.SHA1)?_f:config.sha1;case ChecksumAlgorithm.SHA256:return null!=(_g=null==checksumAlgorithms?void 0:checksumAlgorithms.SHA256)?_g:config.sha256;default:if(null==checksumAlgorithms?void 0:checksumAlgorithms[checksumAlgorithm])return checksumAlgorithms[checksumAlgorithm];throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client. Select one of ${CLIENT_SUPPORTED_ALGORITHMS}, or provide an implementation to the client constructor checksums field.`)}};init_dist_es();stringHasher=(checksumAlgorithmFn,body)=>{const hash3=new checksumAlgorithmFn;hash3.update(toUint8Array(body||""));return hash3.digest()};flexibleChecksumsMiddlewareOptions={name:"flexibleChecksumsMiddleware",step:"build",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);if(hasHeaderWithPrefix("x-amz-checksum-",args.request.headers))return next2(args);const{request:request2,input}=args,{body:requestBody,headers}=request2,{base64Encoder,streamHasher}=config,{requestChecksumRequired,requestAlgorithmMember}=middlewareConfig,requestChecksumCalculation=await config.requestChecksumCalculation(),requestAlgorithmMemberName=null==requestAlgorithmMember?void 0:requestAlgorithmMember.name,requestAlgorithmMemberHttpHeader=null==requestAlgorithmMember?void 0:requestAlgorithmMember.httpHeader;if(requestAlgorithmMemberName&&!input[requestAlgorithmMemberName]&&("WHEN_SUPPORTED"===requestChecksumCalculation||requestChecksumRequired)){input[requestAlgorithmMemberName]=DEFAULT_CHECKSUM_ALGORITHM;requestAlgorithmMemberHttpHeader&&(headers[requestAlgorithmMemberHttpHeader]=DEFAULT_CHECKSUM_ALGORITHM)}const checksumAlgorithm=getChecksumAlgorithmForRequest(input,{requestChecksumRequired,requestAlgorithmMember:null==requestAlgorithmMember?void 0:requestAlgorithmMember.name,requestChecksumCalculation});let updatedBody=requestBody,updatedHeaders=headers;if(checksumAlgorithm){switch(checksumAlgorithm){case ChecksumAlgorithm.CRC32:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC32","U");break;case ChecksumAlgorithm.CRC32C:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC32C","V");break;case ChecksumAlgorithm.CRC64NVME:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_CRC64","W");break;case ChecksumAlgorithm.SHA1:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_SHA1","X");break;case ChecksumAlgorithm.SHA256:setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_SHA256","Y");break}const checksumLocationName=getChecksumLocationName(checksumAlgorithm),checksumAlgorithmFn=selectChecksumAlgorithmFunction(checksumAlgorithm,config);if(isStreaming(requestBody)){const{getAwsChunkedEncodingStream:getAwsChunkedEncodingStream2,bodyLengthChecker}=config;updatedBody=getAwsChunkedEncodingStream2("number"==typeof config.requestStreamBufferSize&&config.requestStreamBufferSize>=8192?createBufferedReadable(requestBody,config.requestStreamBufferSize,context2.logger):requestBody,{base64Encoder,bodyLengthChecker,checksumLocationName,checksumAlgorithmFn,streamHasher});updatedHeaders={...headers,"content-encoding":headers["content-encoding"]?`${headers["content-encoding"]},aws-chunked`:"aws-chunked","transfer-encoding":"chunked","x-amz-decoded-content-length":headers["content-length"],"x-amz-content-sha256":"STREAMING-UNSIGNED-PAYLOAD-TRAILER","x-amz-trailer":checksumLocationName};delete updatedHeaders["content-length"]}else if(!hasHeader2(checksumLocationName,headers)){const rawChecksum=await stringHasher(checksumAlgorithmFn,requestBody);updatedHeaders={...headers,[checksumLocationName]:base64Encoder(rawChecksum)}}}try{return await next2({...args,request:{...request2,headers:updatedHeaders,body:updatedBody}})}catch(e3){if(e3 instanceof Error&&"InvalidChunkSizeError"===e3.name)try{e3.message.endsWith(".")||(e3.message+=".");e3.message+=" Set [requestStreamBufferSize=number e.g. 65_536] in client constructor to instruct AWS SDK to buffer your input stream."}catch(ignored){}throw e3}};flexibleChecksumsInputMiddlewareOptions={name:"flexibleChecksumsInputMiddleware",toMiddleware:"serializerMiddleware",relation:"before",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsInputMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{const input=args.input,{requestValidationModeMember}=middlewareConfig,requestChecksumCalculation=await config.requestChecksumCalculation(),responseChecksumValidation=await config.responseChecksumValidation();switch(requestChecksumCalculation){case"WHEN_REQUIRED":setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_WHEN_REQUIRED","a");break;case"WHEN_SUPPORTED":setFeature(context2,"FLEXIBLE_CHECKSUMS_REQ_WHEN_SUPPORTED","Z");break}switch(responseChecksumValidation){case"WHEN_REQUIRED":setFeature(context2,"FLEXIBLE_CHECKSUMS_RES_WHEN_REQUIRED","c");break;case"WHEN_SUPPORTED":setFeature(context2,"FLEXIBLE_CHECKSUMS_RES_WHEN_SUPPORTED","b");break}requestValidationModeMember&&!input[requestValidationModeMember]&&"WHEN_SUPPORTED"===responseChecksumValidation&&(input[requestValidationModeMember]="ENABLED");return next2(args)};getChecksumAlgorithmListForResponse=(responseAlgorithms=[])=>{const validChecksumAlgorithms=[];let i2=PRIORITY_ORDER_ALGORITHMS.length;for(const algorithm of responseAlgorithms){const priority=PRIORITY_ORDER_ALGORITHMS.indexOf(algorithm);-1!==priority?validChecksumAlgorithms[priority]=algorithm:validChecksumAlgorithms[i2++]=algorithm}return validChecksumAlgorithms.filter(Boolean)};isChecksumWithPartNumber=checksum=>{const lastHyphenIndex=checksum.lastIndexOf("-");if(-1!==lastHyphenIndex){const numberPart=checksum.slice(lastHyphenIndex+1);if(!numberPart.startsWith("0")){const number=parseInt(numberPart,10);if(!isNaN(number)&&number>=1&&number<=1e4)return!0}}return!1};getChecksum=async(body,{checksumAlgorithmFn,base64Encoder})=>base64Encoder(await stringHasher(checksumAlgorithmFn,body));validateChecksumFromResponse=async(response,{config,responseAlgorithms,logger:logger2})=>{const checksumAlgorithms=getChecksumAlgorithmListForResponse(responseAlgorithms),{body:responseBody,headers:responseHeaders}=response;for(const algorithm of checksumAlgorithms){const responseHeader=getChecksumLocationName(algorithm),checksumFromResponse=responseHeaders[responseHeader];if(checksumFromResponse){let checksumAlgorithmFn;try{checksumAlgorithmFn=selectChecksumAlgorithmFunction(algorithm,config)}catch(error){if(algorithm===ChecksumAlgorithm.CRC64NVME){null==logger2||logger2.warn(`Skipping ${ChecksumAlgorithm.CRC64NVME} checksum validation: ${error.message}`);continue}throw error}const{base64Encoder}=config;if(isStreaming(responseBody)){response.body=createChecksumStream({expectedChecksum:checksumFromResponse,checksumSourceLocation:responseHeader,checksum:new checksumAlgorithmFn,source:responseBody,base64Encoder});return}const checksum=await getChecksum(responseBody,{checksumAlgorithmFn,base64Encoder});if(checksum===checksumFromResponse)break;throw new Error(`Checksum mismatch: expected "${checksum}" but received "${checksumFromResponse}" in response header "${responseHeader}".`)}}};flexibleChecksumsResponseMiddlewareOptions={name:"flexibleChecksumsResponseMiddleware",toMiddleware:"deserializerMiddleware",relation:"after",tags:["BODY_CHECKSUM"],override:!0};flexibleChecksumsResponseMiddleware=(config,middlewareConfig)=>(next2,context2)=>async args=>{var _a8;if(!HttpRequest.isInstance(args.request))return next2(args);const input=args.input,result=await next2(args),response=result.response,{requestValidationModeMember,responseAlgorithms}=middlewareConfig;if(requestValidationModeMember&&"ENABLED"===input[requestValidationModeMember]){const{clientName,commandName}=context2,customChecksumAlgorithms=Object.keys(null!=(_a8=config.checksumAlgorithms)?_a8:{}).filter(algorithm=>{const responseHeader=getChecksumLocationName(algorithm);return void 0!==response.headers[responseHeader]}),algoList=getChecksumAlgorithmListForResponse([...null!=responseAlgorithms?responseAlgorithms:[],...customChecksumAlgorithms]);if("S3Client"===clientName&&"GetObjectCommand"===commandName&&algoList.every(algorithm=>{const responseHeader=getChecksumLocationName(algorithm),checksumFromResponse=response.headers[responseHeader];return!checksumFromResponse||isChecksumWithPartNumber(checksumFromResponse)}))return result;await validateChecksumFromResponse(response,{config,responseAlgorithms:algoList,logger:context2.logger})}return result};getFlexibleChecksumsPlugin=(config,middlewareConfig)=>({applyToStack:clientStack=>{clientStack.add(flexibleChecksumsMiddleware(config,middlewareConfig),flexibleChecksumsMiddlewareOptions);clientStack.addRelativeTo(flexibleChecksumsInputMiddleware(config,middlewareConfig),flexibleChecksumsInputMiddlewareOptions);clientStack.addRelativeTo(flexibleChecksumsResponseMiddleware(config,middlewareConfig),flexibleChecksumsResponseMiddlewareOptions)}});resolveFlexibleChecksumsConfig=input=>{var _a8;const{requestChecksumCalculation,responseChecksumValidation,requestStreamBufferSize}=input;return Object.assign(input,{requestChecksumCalculation:normalizeProvider(null!=requestChecksumCalculation?requestChecksumCalculation:"WHEN_SUPPORTED"),responseChecksumValidation:normalizeProvider(null!=responseChecksumValidation?responseChecksumValidation:"WHEN_SUPPORTED"),requestStreamBufferSize:Number(null!=requestStreamBufferSize?requestStreamBufferSize:0),checksumAlgorithms:null!=(_a8=input.checksumAlgorithms)?_a8:{}})};hostHeaderMiddleware=options=>next2=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const{request:request2}=args,{handlerProtocol=""}=options.requestHandler.metadata||{};if(handlerProtocol.indexOf("h2")>=0&&!request2.headers[":authority"]){delete request2.headers.host;request2.headers[":authority"]=request2.hostname+(request2.port?":"+request2.port:"")}else if(!request2.headers.host){let host=request2.hostname;null!=request2.port&&(host+=`:${request2.port}`);request2.headers.host=host}return next2(args)};hostHeaderMiddlewareOptions={name:"hostHeaderMiddleware",step:"build",priority:"low",tags:["HOST"],override:!0};getHostHeaderPlugin=options=>({applyToStack:clientStack=>{clientStack.add(hostHeaderMiddleware(options),hostHeaderMiddlewareOptions)}});loggerMiddleware=()=>(next2,context2)=>async args=>{var _a8,_b5;try{const response=await next2(args),{clientName,commandName,logger:logger2,dynamoDbDocumentClientOptions={}}=context2,{overrideInputFilterSensitiveLog,overrideOutputFilterSensitiveLog}=dynamoDbDocumentClientOptions,inputFilterSensitiveLog=null!=overrideInputFilterSensitiveLog?overrideInputFilterSensitiveLog:context2.inputFilterSensitiveLog,outputFilterSensitiveLog=null!=overrideOutputFilterSensitiveLog?overrideOutputFilterSensitiveLog:context2.outputFilterSensitiveLog,{$metadata,...outputWithoutMetadata}=response.output;null==(_a8=null==logger2?void 0:logger2.info)||_a8.call(logger2,{clientName,commandName,input:inputFilterSensitiveLog(args.input),output:outputFilterSensitiveLog(outputWithoutMetadata),metadata:$metadata});return response}catch(error){const{clientName,commandName,logger:logger2,dynamoDbDocumentClientOptions={}}=context2,{overrideInputFilterSensitiveLog}=dynamoDbDocumentClientOptions,inputFilterSensitiveLog=null!=overrideInputFilterSensitiveLog?overrideInputFilterSensitiveLog:context2.inputFilterSensitiveLog;null==(_b5=null==logger2?void 0:logger2.error)||_b5.call(logger2,{clientName,commandName,input:inputFilterSensitiveLog(args.input),error,metadata:error.$metadata});throw error}};loggerMiddlewareOptions={name:"loggerMiddleware",tags:["LOGGER"],step:"initialize",override:!0};getLoggerPlugin=options=>({applyToStack:clientStack=>{clientStack.add(loggerMiddleware(),loggerMiddlewareOptions)}});recursionDetectionMiddlewareOptions={step:"build",tags:["RECURSION_DETECTION"],name:"recursionDetectionMiddleware",override:!0,priority:"low"};recursionDetectionMiddleware=()=>next2=>async args=>next2(args);getRecursionDetectionPlugin=options=>({applyToStack:clientStack=>{clientStack.add(recursionDetectionMiddleware(),recursionDetectionMiddlewareOptions)}});CONTENT_LENGTH_HEADER="content-length";DECODED_CONTENT_LENGTH_HEADER="x-amz-decoded-content-length";checkContentLengthHeaderMiddlewareOptions={step:"finalizeRequest",tags:["CHECK_CONTENT_LENGTH_HEADER"],name:"getCheckContentLengthHeaderPlugin",override:!0};getCheckContentLengthHeaderPlugin=unused=>({applyToStack:clientStack=>{clientStack.add(checkContentLengthHeader(),checkContentLengthHeaderMiddlewareOptions)}});regionRedirectEndpointMiddleware=config=>(next2,context2)=>async args=>{const originalRegion=await config.region(),regionProviderRef=config.region;let unlock=()=>{};if(context2.__s3RegionRedirect){Object.defineProperty(config,"region",{writable:!1,value:async()=>context2.__s3RegionRedirect});unlock=()=>Object.defineProperty(config,"region",{writable:!0,value:regionProviderRef})}try{const result=await next2(args);if(context2.__s3RegionRedirect){unlock();if(originalRegion!==await config.region())throw new Error("Region was not restored following S3 region redirect.")}return result}catch(e3){unlock();throw e3}};regionRedirectEndpointMiddlewareOptions={tags:["REGION_REDIRECT","S3"],name:"regionRedirectEndpointMiddleware",override:!0,relation:"before",toMiddleware:"endpointV2Middleware"};regionRedirectMiddlewareOptions={step:"initialize",tags:["REGION_REDIRECT","S3"],name:"regionRedirectMiddleware",override:!0};getRegionRedirectMiddlewarePlugin=clientConfig=>({applyToStack:clientStack=>{clientStack.add(regionRedirectMiddleware(clientConfig),regionRedirectMiddlewareOptions);clientStack.addRelativeTo(regionRedirectEndpointMiddleware(clientConfig),regionRedirectEndpointMiddlewareOptions)}});s3ExpiresMiddleware=config=>(next2,context2)=>async args=>{var _a8;const result=await next2(args),{response}=result;if(HttpResponse.isInstance(response)&&response.headers.expires){response.headers.expiresstring=response.headers.expires;try{parseRfc7231DateTime(response.headers.expires)}catch(e3){null==(_a8=context2.logger)||_a8.warn(`AWS SDK Warning for ${context2.clientName}::${context2.commandName} response parsing (${response.headers.expires}): ${e3}`);delete response.headers.expires}}return result};s3ExpiresMiddlewareOptions={tags:["S3"],name:"s3ExpiresMiddleware",override:!0,relation:"after",toMiddleware:"deserializerMiddleware"};getS3ExpiresMiddlewarePlugin=clientConfig=>({applyToStack:clientStack=>{clientStack.addRelativeTo(s3ExpiresMiddleware(),s3ExpiresMiddlewareOptions)}});_S3ExpressIdentityCache=class _S3ExpressIdentityCache{constructor(data={}){__publicField(this,"data");__publicField(this,"lastPurgeTime",Date.now());this.data=data}get(key3){const entry=this.data[key3];if(entry)return entry}set(key3,entry){this.data[key3]=entry;return entry}delete(key3){delete this.data[key3]}async purgeExpired(){const now3=Date.now();if(!(this.lastPurgeTime+_S3ExpressIdentityCache.EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS>now3))for(const key3 in this.data){const entry=this.data[key3];if(!entry.isRefreshing){const credential=await entry.identity;credential.expiration&&credential.expiration.getTime()<now3&&delete this.data[key3]}}}};__publicField(_S3ExpressIdentityCache,"EXPIRED_CREDENTIAL_PURGE_INTERVAL_MS",3e4);S3ExpressIdentityCache=_S3ExpressIdentityCache;S3ExpressIdentityCacheEntry=class{constructor(_identity,isRefreshing=!1,accessed=Date.now()){__publicField(this,"_identity");__publicField(this,"isRefreshing");__publicField(this,"accessed");this._identity=_identity;this.isRefreshing=isRefreshing;this.accessed=accessed}get identity(){this.accessed=Date.now();return this._identity}};_S3ExpressIdentityProviderImpl=class _S3ExpressIdentityProviderImpl{constructor(createSessionFn,cache2=new S3ExpressIdentityCache){__publicField(this,"createSessionFn");__publicField(this,"cache");this.createSessionFn=createSessionFn;this.cache=cache2}async getS3ExpressIdentity(awsIdentity,identityProperties){const key3=identityProperties.Bucket,{cache:cache2}=this,entry=cache2.get(key3);return entry?entry.identity.then(identity=>{var _a8,_b5,_c3,_d2;if((null!=(_b5=null==(_a8=identity.expiration)?void 0:_a8.getTime())?_b5:0)<Date.now())return cache2.set(key3,new S3ExpressIdentityCacheEntry(this.getIdentity(key3))).identity;if((null!=(_d2=null==(_c3=identity.expiration)?void 0:_c3.getTime())?_d2:0)<Date.now()+_S3ExpressIdentityProviderImpl.REFRESH_WINDOW_MS&&!entry.isRefreshing){entry.isRefreshing=!0;this.getIdentity(key3).then(id=>{cache2.set(key3,new S3ExpressIdentityCacheEntry(Promise.resolve(id)))})}return identity}):cache2.set(key3,new S3ExpressIdentityCacheEntry(this.getIdentity(key3))).identity}async getIdentity(key3){var _a8,_b5;await this.cache.purgeExpired().catch(error=>{console.warn("Error while clearing expired entries in S3ExpressIdentityCache: \n"+error)});const session=await this.createSessionFn(key3);if(!(null==(_a8=session.Credentials)?void 0:_a8.AccessKeyId)||!(null==(_b5=session.Credentials)?void 0:_b5.SecretAccessKey))throw new Error("s3#createSession response credential missing AccessKeyId or SecretAccessKey.");return{accessKeyId:session.Credentials.AccessKeyId,secretAccessKey:session.Credentials.SecretAccessKey,sessionToken:session.Credentials.SessionToken,expiration:session.Credentials.Expiration?new Date(session.Credentials.Expiration):void 0}}};__publicField(_S3ExpressIdentityProviderImpl,"REFRESH_WINDOW_MS",6e4);S3ExpressIdentityProviderImpl=_S3ExpressIdentityProviderImpl;(function(SelectorType2){SelectorType2.ENV="env";SelectorType2.CONFIG="shared config entry"})(SelectorType||(SelectorType={}));SESSION_TOKEN_HEADER=(SESSION_TOKEN_QUERY_PARAM="X-Amz-S3session-Token").toLowerCase();SignatureV4S3Express=class extends SignatureV4{async signWithCredentials(requestToSign,credentials,options){const credentialsWithoutSessionToken=getCredentialsWithoutSessionToken(credentials);requestToSign.headers[SESSION_TOKEN_HEADER]=credentials.sessionToken;setSingleOverride(this,credentialsWithoutSessionToken);return this.signRequest(requestToSign,null!=options?options:{})}async presignWithCredentials(requestToSign,credentials,options){var _a8;const credentialsWithoutSessionToken=getCredentialsWithoutSessionToken(credentials);delete requestToSign.headers[SESSION_TOKEN_HEADER];requestToSign.headers[SESSION_TOKEN_QUERY_PARAM]=credentials.sessionToken;requestToSign.query=null!=(_a8=requestToSign.query)?_a8:{};requestToSign.query[SESSION_TOKEN_QUERY_PARAM]=credentials.sessionToken;setSingleOverride(this,credentialsWithoutSessionToken);return this.presign(requestToSign,options)}};s3ExpressMiddleware=options=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2,_e2;if(context2.endpointV2){const endpoint=context2.endpointV2,isS3ExpressAuth="sigv4-s3express"===(null==(_c3=null==(_b5=null==(_a8=endpoint.properties)?void 0:_a8.authSchemes)?void 0:_b5[0])?void 0:_c3.name);if("S3Express"===(null==(_d2=endpoint.properties)?void 0:_d2.backend)||"Directory"===(null==(_e2=endpoint.properties)?void 0:_e2.bucketType)){setFeature(context2,"S3_EXPRESS_BUCKET","J");context2.isS3ExpressBucket=!0}if(isS3ExpressAuth){const requestBucket=args.input.Bucket;if(requestBucket){const s3ExpressIdentity=await options.s3ExpressIdentityProvider.getS3ExpressIdentity(await options.credentials(),{Bucket:requestBucket});context2.s3ExpressIdentity=s3ExpressIdentity;HttpRequest.isInstance(args.request)&&s3ExpressIdentity.sessionToken&&(args.request.headers[SESSION_TOKEN_HEADER]=s3ExpressIdentity.sessionToken)}}}return next2(args)};s3ExpressMiddlewareOptions={name:"s3ExpressMiddleware",step:"build",tags:["S3","S3_EXPRESS"],override:!0};getS3ExpressPlugin=options=>({applyToStack:clientStack=>{clientStack.add(s3ExpressMiddleware(options),s3ExpressMiddlewareOptions)}});signS3Express=async(s3ExpressIdentity,signingOptions,request2,sigV4MultiRegionSigner)=>{const signedRequest=await sigV4MultiRegionSigner.signWithCredentials(request2,s3ExpressIdentity,{});if(signedRequest.headers["X-Amz-Security-Token"]||signedRequest.headers["x-amz-security-token"])throw new Error("X-Amz-Security-Token must not be set for s3-express requests.");return signedRequest};defaultErrorHandler2=signingProperties=>error=>{throw error};defaultSuccessHandler2=(httpResponse,signingProperties)=>{};s3ExpressHttpSigningMiddleware=config=>(next2,context2)=>async args=>{if(!HttpRequest.isInstance(args.request))return next2(args);const scheme=getSmithyContext(context2).selectedHttpAuthScheme;if(!scheme)throw new Error("No HttpAuthScheme was selected: unable to sign request");const{httpAuthOption:{signingProperties={}},identity,signer}=scheme;let request2;request2=context2.s3ExpressIdentity?await signS3Express(context2.s3ExpressIdentity,0,args.request,await config.signer()):await signer.sign(args.request,identity,signingProperties);const output=await next2({...args,request:request2}).catch((signer.errorHandler||defaultErrorHandler2)(signingProperties));(signer.successHandler||defaultSuccessHandler2)(output.response,signingProperties);return output};getS3ExpressHttpSigningPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(s3ExpressHttpSigningMiddleware(config),httpSigningMiddlewareOptions)}});resolveS3Config=(input,{session})=>{const[s3ClientProvider,CreateSessionCommandCtor]=session,{forcePathStyle,useAccelerateEndpoint,disableMultiregionAccessPoints,followRegionRedirects,s3ExpressIdentityProvider,bucketEndpoint,expectContinueHeader}=input;return Object.assign(input,{forcePathStyle:null!=forcePathStyle&&forcePathStyle,useAccelerateEndpoint:null!=useAccelerateEndpoint&&useAccelerateEndpoint,disableMultiregionAccessPoints:null!=disableMultiregionAccessPoints&&disableMultiregionAccessPoints,followRegionRedirects:null!=followRegionRedirects&&followRegionRedirects,s3ExpressIdentityProvider:null!=s3ExpressIdentityProvider?s3ExpressIdentityProvider:new S3ExpressIdentityProviderImpl(async key3=>s3ClientProvider().send(new CreateSessionCommandCtor({Bucket:key3}))),bucketEndpoint:null!=bucketEndpoint&&bucketEndpoint,expectContinueHeader:null!=expectContinueHeader?expectContinueHeader:2097152})};THROW_IF_EMPTY_BODY={CopyObjectCommand:!0,UploadPartCopyCommand:!0,CompleteMultipartUploadCommand:!0};throw200ExceptionsMiddleware=config=>(next2,context2)=>async args=>{const result=await next2(args),{response}=result;if(!HttpResponse.isInstance(response))return result;const{statusCode,body:sourceBody}=response;if(statusCode<200||statusCode>=300)return result;if("function"!=typeof(null==sourceBody?void 0:sourceBody.stream)&&"function"!=typeof(null==sourceBody?void 0:sourceBody.pipe)&&"function"!=typeof(null==sourceBody?void 0:sourceBody.tee))return result;let bodyCopy=sourceBody,body=sourceBody;!sourceBody||"object"!=typeof sourceBody||sourceBody instanceof Uint8Array||([bodyCopy,body]=await splitStream(sourceBody));response.body=body;const bodyBytes=await collectBody2(bodyCopy,{streamCollector:async stream=>headStream(stream,3e3)});"function"==typeof(null==bodyCopy?void 0:bodyCopy.destroy)&&bodyCopy.destroy();const bodyStringTail=config.utf8Encoder(bodyBytes.subarray(bodyBytes.length-16));if(0===bodyBytes.length&&THROW_IF_EMPTY_BODY[context2.commandName]){const err3=new Error("S3 aborted request");err3.name="InternalError";throw err3}bodyStringTail&&bodyStringTail.endsWith("</Error>")&&(response.statusCode=400);return result};collectBody2=(streamBody=new Uint8Array,context2)=>streamBody instanceof Uint8Array?Promise.resolve(streamBody):context2.streamCollector(streamBody)||Promise.resolve(new Uint8Array);throw200ExceptionsMiddlewareOptions={relation:"after",toMiddleware:"deserializerMiddleware",tags:["THROW_200_EXCEPTIONS","S3"],name:"throw200ExceptionsMiddleware",override:!0};getThrow200ExceptionsPlugin=config=>({applyToStack:clientStack=>{clientStack.addRelativeTo(throw200ExceptionsMiddleware(config),throw200ExceptionsMiddlewareOptions)}});validate=str=>"string"==typeof str&&0===str.indexOf("arn:")&&str.split(":").length>=6;bucketEndpointMiddlewareOptions={name:"bucketEndpointMiddleware",override:!0,relation:"after",toMiddleware:"endpointV2Middleware"};validateBucketNameMiddlewareOptions={step:"initialize",tags:["VALIDATE_BUCKET_NAME"],name:"validateBucketNameMiddleware",override:!0};getValidateBucketNamePlugin=options=>({applyToStack:clientStack=>{clientStack.add(validateBucketNameMiddleware(options),validateBucketNameMiddlewareOptions);clientStack.addRelativeTo(bucketEndpointMiddleware(options),bucketEndpointMiddlewareOptions)}});S3RestXmlProtocol=class extends AwsRestXmlProtocol{async serializeRequest(operationSchema,input,context2){var _a8;const request2=await super.serializeRequest(operationSchema,input,context2),ns=NormalizedSchema.of(operationSchema.input);let bucketMemberIndex=0;const requiredMemberCount=null!=(_a8=ns.getSchema()[6])?_a8:0;if(input&&"object"==typeof input)for(const[memberName,memberNs]of ns.structIterator()){if(++bucketMemberIndex>requiredMemberCount)break;if("Bucket"===memberName){if(!input.Bucket&&memberNs.getMergedTraits().httpLabel)throw new Error("No value provided for input HTTP label: Bucket.");break}}return request2}};DEFAULT_UA_APP_ID=void 0;EndpointCache=class{constructor({size,params}){__publicField(this,"capacity");__publicField(this,"data",new Map);__publicField(this,"parameters",[]);this.capacity=null!=size?size:50;params&&(this.parameters=params)}get(endpointParams,resolver2){const key3=this.hash(endpointParams);if(!1===key3)return resolver2();if(!this.data.has(key3)){if(this.data.size>this.capacity+10){const keys3=this.data.keys();let i2=0;for(;;){const{value,done}=keys3.next();this.data.delete(value);if(done||++i2>10)break}}this.data.set(key3,resolver2())}return this.data.get(key3)}size(){return this.data.size}hash(endpointParams){var _a8;let buffer="";const{parameters}=this;if(0===parameters.length)return!1;for(const param of parameters){const val=String(null!=(_a8=endpointParams[param])?_a8:"");if(val.includes("|;"))return!1;buffer+=val+"|;"}return buffer}};IP_V4_REGEX=new RegExp("^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$");isIpAddress=value=>IP_V4_REGEX.test(value)||value.startsWith("[")&&value.endsWith("]");VALID_HOST_LABEL_REGEX=new RegExp("^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$");isValidHostLabel=(value,allowSubDomains=!1)=>{if(!allowSubDomains)return VALID_HOST_LABEL_REGEX.test(value);const labels=value.split(".");for(const label2 of labels)if(!isValidHostLabel(label2))return!1;return!0};customEndpointFunctions={};EndpointError=class extends Error{constructor(message){super(message);this.name="EndpointError"}};booleanEquals=(value1,value2)=>value1===value2;getAttrPathList=path2=>{const parts=path2.split("."),pathList=[];for(const part of parts){const squareBracketIndex=part.indexOf("[");if(-1!==squareBracketIndex){if(part.indexOf("]")!==part.length-1)throw new EndpointError(`Path: '${path2}' does not end with ']'`);const arrayIndex=part.slice(squareBracketIndex+1,-1);if(Number.isNaN(parseInt(arrayIndex)))throw new EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path2}'`);0!==squareBracketIndex&&pathList.push(part.slice(0,squareBracketIndex));pathList.push(arrayIndex)}else pathList.push(part)}return pathList};getAttr=(value,path2)=>getAttrPathList(path2).reduce((acc,index6)=>{if("object"!=typeof acc)throw new EndpointError(`Index '${index6}' in '${path2}' not found in '${JSON.stringify(value)}'`);return Array.isArray(acc)?acc[parseInt(index6)]:acc[index6]},value);isSet=value=>null!=value;not=value=>!value;DEFAULT_PORTS={[EndpointURLScheme.HTTP]:80,[EndpointURLScheme.HTTPS]:443};endpointFunctions={booleanEquals,getAttr,isSet,isValidHostLabel,not,parseURL:value=>{const whatwgURL=(()=>{try{if(value instanceof URL)return value;if("object"==typeof value&&"hostname"in value){const{hostname:hostname2,port,protocol:protocol2="",path:path2="",query:query3={}}=value,url=new URL(`${protocol2}//${hostname2}${port?`:${port}`:""}${path2}`);url.search=Object.entries(query3).map(([k2,v2])=>`${k2}=${v2}`).join("&");return url}return new URL(value)}catch(error){return null}})();if(!whatwgURL){console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);return null}const urlString=whatwgURL.href,{host,hostname,pathname,protocol,search}=whatwgURL;if(search)return null;const scheme=protocol.slice(0,-1);if(!Object.values(EndpointURLScheme).includes(scheme))return null;const isIp=isIpAddress(hostname);return{scheme,authority:`${host}${urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`)||"string"==typeof value&&value.includes(`${host}:${DEFAULT_PORTS[scheme]}`)?`:${DEFAULT_PORTS[scheme]}`:""}`,path:pathname,normalizedPath:pathname.endsWith("/")?pathname:`${pathname}/`,isIp}},stringEquals:(value1,value2)=>value1===value2,substring:(input,start,stop,reverse)=>start>=stop||input.length<stop||/[^\u0000-\u007f]/.test(input)?null:reverse?input.substring(input.length-stop,input.length-start):input.substring(start,stop),uriEncode:value=>encodeURIComponent(value).replace(/[!*'()]/g,c3=>`%${c3.charCodeAt(0).toString(16).toUpperCase()}`)};evaluateTemplate=(template,options)=>{const evaluatedTemplateArr=[],templateContext={...options.endpointParams,...options.referenceRecord};let currentIndex=0;for(;currentIndex<template.length;){const openingBraceIndex=template.indexOf("{",currentIndex);if(-1===openingBraceIndex){evaluatedTemplateArr.push(template.slice(currentIndex));break}evaluatedTemplateArr.push(template.slice(currentIndex,openingBraceIndex));const closingBraceIndex=template.indexOf("}",openingBraceIndex);if(-1===closingBraceIndex){evaluatedTemplateArr.push(template.slice(openingBraceIndex));break}if("{"===template[openingBraceIndex+1]&&"}"===template[closingBraceIndex+1]){evaluatedTemplateArr.push(template.slice(openingBraceIndex+1,closingBraceIndex));currentIndex=closingBraceIndex+2}const parameterName=template.substring(openingBraceIndex+1,closingBraceIndex);if(parameterName.includes("#")){const[refName,attrName]=parameterName.split("#");evaluatedTemplateArr.push(getAttr(templateContext[refName],attrName))}else evaluatedTemplateArr.push(templateContext[parameterName]);currentIndex=closingBraceIndex+1}return evaluatedTemplateArr.join("")};getReferenceValue=({ref},options)=>({...options.endpointParams,...options.referenceRecord}[ref]);evaluateExpression=(obj,keyName,options)=>{if("string"==typeof obj)return evaluateTemplate(obj,options);if(obj.fn)return group.callFunction(obj,options);if(obj.ref)return getReferenceValue(obj,options);throw new EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`)};callFunction=({fn,argv},options)=>{const evaluatedArgs=argv.map(arg=>["boolean","number"].includes(typeof arg)?arg:group.evaluateExpression(arg,"arg",options)),fnSegments=fn.split(".");return fnSegments[0]in customEndpointFunctions&&null!=fnSegments[1]?customEndpointFunctions[fnSegments[0]][fnSegments[1]](...evaluatedArgs):endpointFunctions[fn](...evaluatedArgs)};group={evaluateExpression,callFunction};evaluateCondition=({assign:assign2,...fnArgs},options)=>{var _a8,_b5;if(assign2&&assign2 in options.referenceRecord)throw new EndpointError(`'${assign2}' is already defined in Reference Record.`);const value=callFunction(fnArgs,options);null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints evaluateCondition: ${toDebugString(fnArgs)} = ${toDebugString(value)}`);return{result:""===value||!!value,...null!=assign2&&{toAssign:{name:assign2,value}}}};evaluateConditions=(conditions=[],options)=>{var _a8,_b5;const conditionsReferenceRecord={};for(const condition of conditions){const{result,toAssign}=evaluateCondition(condition,{...options,referenceRecord:{...options.referenceRecord,...conditionsReferenceRecord}});if(!result)return{result};if(toAssign){conditionsReferenceRecord[toAssign.name]=toAssign.value;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints assign: ${toAssign.name} := ${toDebugString(toAssign.value)}`)}}return{result:!0,referenceRecord:conditionsReferenceRecord}};getEndpointHeaders=(headers,options)=>Object.entries(headers).reduce((acc,[headerKey,headerVal])=>({...acc,[headerKey]:headerVal.map(headerValEntry=>{const processedExpr=evaluateExpression(headerValEntry,"Header value entry",options);if("string"!=typeof processedExpr)throw new EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);return processedExpr})}),{});getEndpointProperties=(properties,options)=>Object.entries(properties).reduce((acc,[propertyKey,propertyVal])=>({...acc,[propertyKey]:group2.getEndpointProperty(propertyVal,options)}),{});getEndpointProperty=(property,options)=>{if(Array.isArray(property))return property.map(propertyEntry=>getEndpointProperty(propertyEntry,options));switch(typeof property){case"string":return evaluateTemplate(property,options);case"object":if(null===property)throw new EndpointError(`Unexpected endpoint property: ${property}`);return group2.getEndpointProperties(property,options);case"boolean":return property;default:throw new EndpointError("Unexpected endpoint property type: "+typeof property)}};group2={getEndpointProperty,getEndpointProperties};getEndpointUrl=(endpointUrl,options)=>{const expression=evaluateExpression(endpointUrl,"Endpoint URL",options);if("string"==typeof expression)try{return new URL(expression)}catch(error){console.error(`Failed to construct URL with ${expression}`,error);throw error}throw new EndpointError("Endpoint URL must be a string, got "+typeof expression)};evaluateEndpointRule=(endpointRule,options)=>{var _a8,_b5;const{conditions,endpoint}=endpointRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(!result)return;const endpointRuleOptions={...options,referenceRecord:{...options.referenceRecord,...referenceRecord}},{url,properties,headers}=endpoint;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints Resolving endpoint from template: ${toDebugString(endpoint)}`);return{...null!=headers&&{headers:getEndpointHeaders(headers,endpointRuleOptions)},...null!=properties&&{properties:getEndpointProperties(properties,endpointRuleOptions)},url:getEndpointUrl(url,endpointRuleOptions)}};evaluateErrorRule=(errorRule,options)=>{const{conditions,error}=errorRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(result)throw new EndpointError(evaluateExpression(error,"Error",{...options,referenceRecord:{...options.referenceRecord,...referenceRecord}}))};evaluateRules=(rules,options)=>{for(const rule of rules)if("endpoint"===rule.type){const endpointOrUndefined=evaluateEndpointRule(rule,options);if(endpointOrUndefined)return endpointOrUndefined}else if("error"===rule.type)evaluateErrorRule(rule,options);else{if("tree"!==rule.type)throw new EndpointError(`Unknown endpoint rule: ${rule}`);{const endpointOrUndefined=group3.evaluateTreeRule(rule,options);if(endpointOrUndefined)return endpointOrUndefined}}throw new EndpointError("Rules evaluation failed")};evaluateTreeRule=(treeRule,options)=>{const{conditions,rules}=treeRule,{result,referenceRecord}=evaluateConditions(conditions,options);if(result)return group3.evaluateRules(rules,{...options,referenceRecord:{...options.referenceRecord,...referenceRecord}})};group3={evaluateRules,evaluateTreeRule};resolveEndpoint=(ruleSetObject,options)=>{var _a8,_b5,_c3,_d2,_e2;const{endpointParams,logger:logger2}=options,{parameters,rules}=ruleSetObject;null==(_b5=null==(_a8=options.logger)?void 0:_a8.debug)||_b5.call(_a8,`endpoints Initial EndpointParams: ${toDebugString(endpointParams)}`);const paramsWithDefault=Object.entries(parameters).filter(([,v2])=>null!=v2.default).map(([k2,v2])=>[k2,v2.default]);if(paramsWithDefault.length>0)for(const[paramKey,paramDefaultValue]of paramsWithDefault)endpointParams[paramKey]=null!=(_c3=endpointParams[paramKey])?_c3:paramDefaultValue;const requiredParams=Object.entries(parameters).filter(([,v2])=>v2.required).map(([k2])=>k2);for(const requiredParam of requiredParams)if(null==endpointParams[requiredParam])throw new EndpointError(`Missing required parameter: '${requiredParam}'`);const endpoint=evaluateRules(rules,{endpointParams,logger:logger2,referenceRecord:{}});null==(_e2=null==(_d2=options.logger)?void 0:_d2.debug)||_e2.call(_d2,`endpoints Resolved endpoint: ${toDebugString(endpoint)}`);return endpoint};selectedPartitionsInfo={partitions:[{id:"aws",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-east-1",name:"aws",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^(us|eu|ap|sa|ca|me|af|il|mx)\\-\\w+\\-\\d+$",regions:{"af-south-1":{description:"Africa (Cape Town)"},"ap-east-1":{description:"Asia Pacific (Hong Kong)"},"ap-east-2":{description:"Asia Pacific (Taipei)"},"ap-northeast-1":{description:"Asia Pacific (Tokyo)"},"ap-northeast-2":{description:"Asia Pacific (Seoul)"},"ap-northeast-3":{description:"Asia Pacific (Osaka)"},"ap-south-1":{description:"Asia Pacific (Mumbai)"},"ap-south-2":{description:"Asia Pacific (Hyderabad)"},"ap-southeast-1":{description:"Asia Pacific (Singapore)"},"ap-southeast-2":{description:"Asia Pacific (Sydney)"},"ap-southeast-3":{description:"Asia Pacific (Jakarta)"},"ap-southeast-4":{description:"Asia Pacific (Melbourne)"},"ap-southeast-5":{description:"Asia Pacific (Malaysia)"},"ap-southeast-6":{description:"Asia Pacific (New Zealand)"},"ap-southeast-7":{description:"Asia Pacific (Thailand)"},"aws-global":{description:"aws global region"},"ca-central-1":{description:"Canada (Central)"},"ca-west-1":{description:"Canada West (Calgary)"},"eu-central-1":{description:"Europe (Frankfurt)"},"eu-central-2":{description:"Europe (Zurich)"},"eu-north-1":{description:"Europe (Stockholm)"},"eu-south-1":{description:"Europe (Milan)"},"eu-south-2":{description:"Europe (Spain)"},"eu-west-1":{description:"Europe (Ireland)"},"eu-west-2":{description:"Europe (London)"},"eu-west-3":{description:"Europe (Paris)"},"il-central-1":{description:"Israel (Tel Aviv)"},"me-central-1":{description:"Middle East (UAE)"},"me-south-1":{description:"Middle East (Bahrain)"},"mx-central-1":{description:"Mexico (Central)"},"sa-east-1":{description:"South America (Sao Paulo)"},"us-east-1":{description:"US East (N. Virginia)"},"us-east-2":{description:"US East (Ohio)"},"us-west-1":{description:"US West (N. California)"},"us-west-2":{description:"US West (Oregon)"}}},{id:"aws-cn",outputs:{dnsSuffix:"amazonaws.com.cn",dualStackDnsSuffix:"api.amazonwebservices.com.cn",implicitGlobalRegion:"cn-northwest-1",name:"aws-cn",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^cn\\-\\w+\\-\\d+$",regions:{"aws-cn-global":{description:"aws-cn global region"},"cn-north-1":{description:"China (Beijing)"},"cn-northwest-1":{description:"China (Ningxia)"}}},{id:"aws-eusc",outputs:{dnsSuffix:"amazonaws.eu",dualStackDnsSuffix:"api.amazonwebservices.eu",implicitGlobalRegion:"eusc-de-east-1",name:"aws-eusc",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^eusc\\-(de)\\-\\w+\\-\\d+$",regions:{"eusc-de-east-1":{description:"AWS European Sovereign Cloud (Germany)"}}},{id:"aws-iso",outputs:{dnsSuffix:"c2s.ic.gov",dualStackDnsSuffix:"api.aws.ic.gov",implicitGlobalRegion:"us-iso-east-1",name:"aws-iso",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-iso\\-\\w+\\-\\d+$",regions:{"aws-iso-global":{description:"aws-iso global region"},"us-iso-east-1":{description:"US ISO East"},"us-iso-west-1":{description:"US ISO WEST"}}},{id:"aws-iso-b",outputs:{dnsSuffix:"sc2s.sgov.gov",dualStackDnsSuffix:"api.aws.scloud",implicitGlobalRegion:"us-isob-east-1",name:"aws-iso-b",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-isob\\-\\w+\\-\\d+$",regions:{"aws-iso-b-global":{description:"aws-iso-b global region"},"us-isob-east-1":{description:"US ISOB East (Ohio)"},"us-isob-west-1":{description:"US ISOB West"}}},{id:"aws-iso-e",outputs:{dnsSuffix:"cloud.adc-e.uk",dualStackDnsSuffix:"api.cloud-aws.adc-e.uk",implicitGlobalRegion:"eu-isoe-west-1",name:"aws-iso-e",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^eu\\-isoe\\-\\w+\\-\\d+$",regions:{"aws-iso-e-global":{description:"aws-iso-e global region"},"eu-isoe-west-1":{description:"EU ISOE West"}}},{id:"aws-iso-f",outputs:{dnsSuffix:"csp.hci.ic.gov",dualStackDnsSuffix:"api.aws.hci.ic.gov",implicitGlobalRegion:"us-isof-south-1",name:"aws-iso-f",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-isof\\-\\w+\\-\\d+$",regions:{"aws-iso-f-global":{description:"aws-iso-f global region"},"us-isof-east-1":{description:"US ISOF EAST"},"us-isof-south-1":{description:"US ISOF SOUTH"}}},{id:"aws-us-gov",outputs:{dnsSuffix:"amazonaws.com",dualStackDnsSuffix:"api.aws",implicitGlobalRegion:"us-gov-west-1",name:"aws-us-gov",supportsDualStack:!0,supportsFIPS:!0},regionRegex:"^us\\-gov\\-\\w+\\-\\d+$",regions:{"aws-us-gov-global":{description:"aws-us-gov global region"},"us-gov-east-1":{description:"AWS GovCloud (US-East)"},"us-gov-west-1":{description:"AWS GovCloud (US-West)"}}}],version:"1.1"};getUserAgentPrefix=()=>"";awsEndpointFunctions={isVirtualHostableS3Bucket:isVirtualHostableS3Bucket=(value,allowSubDomains=!1)=>{if(allowSubDomains){for(const label2 of value.split("."))if(!isVirtualHostableS3Bucket(label2))return!1;return!0}return!(!isValidHostLabel(value)||value.length<3||value.length>63||value!==value.toLowerCase()||isIpAddress(value))},parseArn:value=>{const segments=value.split(":");if(segments.length<6)return null;const[arn,partition2,service,region,accountId,...resourcePath]=segments;return"arn"!==arn||""===partition2||""===service||""===resourcePath.join(":")?null:{partition:partition2,service,region,accountId,resourceId:resourcePath.map(resource=>resource.split("/")).flat()}},partition:value=>{const{partitions}=selectedPartitionsInfo;for(const partition2 of partitions){const{regions,outputs}=partition2;for(const[region,regionData]of Object.entries(regions))if(region===value)return{...outputs,...regionData}}for(const partition2 of partitions){const{regionRegex,outputs}=partition2;if(new RegExp(regionRegex).test(value))return{...outputs}}const DEFAULT_PARTITION=partitions.find(partition2=>"aws"===partition2.id);if(!DEFAULT_PARTITION)throw new Error("Provided region was not found in the partition array or regex, and default partition with id 'aws' doesn't exist.");return{...DEFAULT_PARTITION.outputs}}};customEndpointFunctions.aws=awsEndpointFunctions;(function(RETRY_MODES2){RETRY_MODES2.STANDARD="standard";RETRY_MODES2.ADAPTIVE="adaptive"})(RETRY_MODES||(RETRY_MODES={}));DEFAULT_RETRY_MODE=RETRY_MODES.STANDARD;THROTTLING_ERROR_CODES=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"];TRANSIENT_ERROR_CODES=["TimeoutError","RequestTimeout","RequestTimeoutException"];TRANSIENT_ERROR_STATUS_CODES=[500,502,503,504];NODEJS_TIMEOUT_ERROR_CODES=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"];NODEJS_NETWORK_ERROR_CODES=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"];isRetryableByTrait=error=>void 0!==(null==error?void 0:error.$retryable);isClockSkewCorrectedError=error=>{var _a8;return null==(_a8=error.$metadata)?void 0:_a8.clockSkewCorrected};isBrowserNetworkError=error=>!!(error&&error instanceof TypeError)&&new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]).has(error.message);isThrottlingError=error=>{var _a8,_b5;return 429===(null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)||THROTTLING_ERROR_CODES.includes(error.name)||1==(null==(_b5=error.$retryable)?void 0:_b5.throttling)};isTransientError=(error,depth=0)=>{var _a8;return isRetryableByTrait(error)||isClockSkewCorrectedError(error)||TRANSIENT_ERROR_CODES.includes(error.name)||NODEJS_TIMEOUT_ERROR_CODES.includes((null==error?void 0:error.code)||"")||NODEJS_NETWORK_ERROR_CODES.includes((null==error?void 0:error.code)||"")||TRANSIENT_ERROR_STATUS_CODES.includes((null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)||0)||isBrowserNetworkError(error)||void 0!==error.cause&&depth<=10&&isTransientError(error.cause,depth+1)};isServerError=error=>{var _a8;if(void 0!==(null==(_a8=error.$metadata)?void 0:_a8.httpStatusCode)){const statusCode=error.$metadata.httpStatusCode;return 500<=statusCode&&statusCode<=599&&!isTransientError(error)}return!1};_DefaultRateLimiter=class _DefaultRateLimiter{constructor(options){__publicField(this,"beta");__publicField(this,"minCapacity");__publicField(this,"minFillRate");__publicField(this,"scaleConstant");__publicField(this,"smooth");__publicField(this,"currentCapacity",0);__publicField(this,"enabled",!1);__publicField(this,"lastMaxRate",0);__publicField(this,"measuredTxRate",0);__publicField(this,"requestCount",0);__publicField(this,"fillRate");__publicField(this,"lastThrottleTime");__publicField(this,"lastTimestamp",0);__publicField(this,"lastTxRateBucket");__publicField(this,"maxCapacity");__publicField(this,"timeWindow",0);var _a8,_b5,_c3,_d2,_e2;this.beta=null!=(_a8=null==options?void 0:options.beta)?_a8:.7;this.minCapacity=null!=(_b5=null==options?void 0:options.minCapacity)?_b5:1;this.minFillRate=null!=(_c3=null==options?void 0:options.minFillRate)?_c3:.5;this.scaleConstant=null!=(_d2=null==options?void 0:options.scaleConstant)?_d2:.4;this.smooth=null!=(_e2=null==options?void 0:options.smooth)?_e2:.8;const currentTimeInSeconds=this.getCurrentTimeInSeconds();this.lastThrottleTime=currentTimeInSeconds;this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds());this.fillRate=this.minFillRate;this.maxCapacity=this.minCapacity}getCurrentTimeInSeconds(){return Date.now()/1e3}async getSendToken(){return this.acquireTokenBucket(1)}async acquireTokenBucket(amount){if(this.enabled){this.refillTokenBucket();if(amount>this.currentCapacity){const delay2=(amount-this.currentCapacity)/this.fillRate*1e3;await new Promise(resolve=>_DefaultRateLimiter.setTimeoutFn(resolve,delay2))}this.currentCapacity=this.currentCapacity-amount}}refillTokenBucket(){const timestamp=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=timestamp;return}const fillAmount=(timestamp-this.lastTimestamp)*this.fillRate;this.currentCapacity=Math.min(this.maxCapacity,this.currentCapacity+fillAmount);this.lastTimestamp=timestamp}updateClientSendingRate(response){let calculatedRate;this.updateMeasuredRate();if(isThrottlingError(response)){const rateToUse=this.enabled?Math.min(this.measuredTxRate,this.fillRate):this.measuredTxRate;this.lastMaxRate=rateToUse;this.calculateTimeWindow();this.lastThrottleTime=this.getCurrentTimeInSeconds();calculatedRate=this.cubicThrottle(rateToUse);this.enableTokenBucket()}else{this.calculateTimeWindow();calculatedRate=this.cubicSuccess(this.getCurrentTimeInSeconds())}const newRate=Math.min(calculatedRate,2*this.measuredTxRate);this.updateTokenBucketRate(newRate)}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,1/3))}cubicThrottle(rateToUse){return this.getPrecise(rateToUse*this.beta)}cubicSuccess(timestamp){return this.getPrecise(this.scaleConstant*Math.pow(timestamp-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(newRate){this.refillTokenBucket();this.fillRate=Math.max(newRate,this.minFillRate);this.maxCapacity=Math.max(newRate,this.minCapacity);this.currentCapacity=Math.min(this.currentCapacity,this.maxCapacity)}updateMeasuredRate(){const t9=this.getCurrentTimeInSeconds(),timeBucket=Math.floor(2*t9)/2;this.requestCount++;if(timeBucket>this.lastTxRateBucket){const currentRate=this.requestCount/(timeBucket-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(currentRate*this.smooth+this.measuredTxRate*(1-this.smooth));this.requestCount=0;this.lastTxRateBucket=timeBucket}}getPrecise(num){return parseFloat(num.toFixed(8))}};__publicField(_DefaultRateLimiter,"setTimeoutFn",setTimeout);DefaultRateLimiter=_DefaultRateLimiter;getDefaultRetryBackoffStrategy=()=>{let delayBase=100;return{computeNextBackoffDelay:attempts=>Math.floor(Math.min(2e4,Math.random()*2**attempts*delayBase)),setDelayBase:delay2=>{delayBase=delay2}}};createDefaultRetryToken=({retryDelay,retryCount,retryCost})=>({getRetryCount:()=>retryCount,getRetryDelay:()=>Math.min(2e4,retryDelay),getRetryCost:()=>retryCost});StandardRetryStrategy=class{constructor(maxAttempts){__publicField(this,"maxAttempts");__publicField(this,"mode",RETRY_MODES.STANDARD);__publicField(this,"capacity",500);__publicField(this,"retryBackoffStrategy",getDefaultRetryBackoffStrategy());__publicField(this,"maxAttemptsProvider");this.maxAttempts=maxAttempts;this.maxAttemptsProvider="function"==typeof maxAttempts?maxAttempts:async()=>maxAttempts}async acquireInitialRetryToken(retryTokenScope){return createDefaultRetryToken({retryDelay:100,retryCount:0})}async refreshRetryTokenForRetry(token,errorInfo){const maxAttempts=await this.getMaxAttempts();if(this.shouldRetry(token,errorInfo,maxAttempts)){const errorType=errorInfo.errorType;this.retryBackoffStrategy.setDelayBase("THROTTLING"===errorType?500:100);const delayFromErrorType=this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount()),retryDelay=errorInfo.retryAfterHint?Math.max(errorInfo.retryAfterHint.getTime()-Date.now()||0,delayFromErrorType):delayFromErrorType,capacityCost=this.getCapacityCost(errorType);this.capacity-=capacityCost;return createDefaultRetryToken({retryDelay,retryCount:token.getRetryCount()+1,retryCost:capacityCost})}throw new Error("No retry token available")}recordSuccess(token){var _a8;this.capacity=Math.max(500,this.capacity+(null!=(_a8=token.getRetryCost())?_a8:1))}getCapacity(){return this.capacity}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(error){console.warn("Max attempts provider could not resolve. Using default of 3");return 3}}shouldRetry(tokenToRenew,errorInfo,maxAttempts){return tokenToRenew.getRetryCount()+1<maxAttempts&&this.capacity>=this.getCapacityCost(errorInfo.errorType)&&this.isRetryableError(errorInfo.errorType)}getCapacityCost(errorType){return"TRANSIENT"===errorType?10:5}isRetryableError(errorType){return"THROTTLING"===errorType||"TRANSIENT"===errorType}};AdaptiveRetryStrategy=class{constructor(maxAttemptsProvider,options){__publicField(this,"maxAttemptsProvider");__publicField(this,"rateLimiter");__publicField(this,"standardRetryStrategy");__publicField(this,"mode",RETRY_MODES.ADAPTIVE);this.maxAttemptsProvider=maxAttemptsProvider;const{rateLimiter}=null!=options?options:{};this.rateLimiter=null!=rateLimiter?rateLimiter:new DefaultRateLimiter;this.standardRetryStrategy=new StandardRetryStrategy(maxAttemptsProvider)}async acquireInitialRetryToken(retryTokenScope){await this.rateLimiter.getSendToken();return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope)}async refreshRetryTokenForRetry(tokenToRenew,errorInfo){this.rateLimiter.updateClientSendingRate(errorInfo);return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew,errorInfo)}recordSuccess(token){this.rateLimiter.updateClientSendingRate({});this.standardRetryStrategy.recordSuccess(token)}};ConfiguredRetryStrategy=class extends StandardRetryStrategy{constructor(maxAttempts,computeNextBackoffDelay=100){super("function"==typeof maxAttempts?maxAttempts:async()=>maxAttempts);__publicField(this,"computeNextBackoffDelay");this.computeNextBackoffDelay="number"==typeof computeNextBackoffDelay?()=>computeNextBackoffDelay:computeNextBackoffDelay}async refreshRetryTokenForRetry(tokenToRenew,errorInfo){const token=await super.refreshRetryTokenForRetry(tokenToRenew,errorInfo);token.getRetryDelay=()=>this.computeNextBackoffDelay(token.getRetryCount());return token}};ACCOUNT_ID_ENDPOINT_REGEX=/\d{12}\.ddb/;UA_NAME_ESCAPE_REGEX=/[^!$%&'*+\-.^_`|~\w]/g;UA_VALUE_ESCAPE_REGEX=/[^!$%&'*+\-.^_`|~\w#]/g;BYTE_LIMIT=1024;userAgentMiddleware=options=>(next2,context2)=>async args=>{var _a8,_b5,_c3,_d2;const{request:request2}=args;if(!HttpRequest.isInstance(request2))return next2(args);const{headers}=request2,userAgent=(null==(_a8=null==context2?void 0:context2.userAgent)?void 0:_a8.map(escapeUserAgent))||[],defaultUserAgent2=(await options.defaultUserAgentProvider()).map(escapeUserAgent);await checkFeatures(context2,options,args);const awsContext=context2;defaultUserAgent2.push(`m/${encodeFeatures(Object.assign({},null==(_b5=context2.__smithy_context)?void 0:_b5.features,null==(_c3=awsContext.__aws_sdk_context)?void 0:_c3.features))}`);const customUserAgent=(null==(_d2=null==options?void 0:options.customUserAgent)?void 0:_d2.map(escapeUserAgent))||[],appId=await options.userAgentAppId();appId&&defaultUserAgent2.push(escapeUserAgent(["app",`${appId}`]));const prefix=getUserAgentPrefix(),sdkUserAgentValue=(prefix?[prefix]:[]).concat([...defaultUserAgent2,...userAgent,...customUserAgent]).join(" "),normalUAValue=[...defaultUserAgent2.filter(section=>section.startsWith("aws-sdk-")),...customUserAgent].join(" ");if("browser"!==options.runtime){normalUAValue&&(headers["x-amz-user-agent"]=headers["x-amz-user-agent"]?`${headers["user-agent"]} ${normalUAValue}`:normalUAValue);headers["user-agent"]=sdkUserAgentValue}else headers["x-amz-user-agent"]=sdkUserAgentValue;return next2({...args,request:request2})};escapeUserAgent=userAgentPair=>{var _a8;const name=userAgentPair[0].split("/").map(part=>part.replace(UA_NAME_ESCAPE_REGEX,"-")).join("/"),version2=null==(_a8=userAgentPair[1])?void 0:_a8.replace(UA_VALUE_ESCAPE_REGEX,"-"),prefixSeparatorIndex=name.indexOf("/"),prefix=name.substring(0,prefixSeparatorIndex);let uaName=name.substring(prefixSeparatorIndex+1);"api"===prefix&&(uaName=uaName.toLowerCase());return[prefix,uaName,version2].filter(item=>item&&item.length>0).reduce((acc,item,index6)=>{switch(index6){case 0:return item;case 1:return`${acc}/${item}`;default:return`${acc}#${item}`}},"")};getUserAgentMiddlewareOptions={name:"getUserAgentMiddleware",step:"build",priority:"low",tags:["SET_USER_AGENT","USER_AGENT"],override:!0};getUserAgentPlugin=config=>({applyToStack:clientStack=>{clientStack.add(userAgentMiddleware(config),getUserAgentMiddlewareOptions)}});validRegions=new Set;checkRegion=(region,check=isValidHostLabel)=>{if(validRegions.has(region)||check(region))validRegions.add(region);else{if("*"!==region)throw new Error(`Region not accepted: region="${region}" is not a valid hostname component.`);console.warn('@smithy/config-resolver WARN - Please use the caller region instead of "*". See "sigv4a" in https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md.')}};isFipsRegion=region=>"string"==typeof region&&(region.startsWith("fips-")||region.endsWith("-fips"));getRealRegion=region=>isFipsRegion(region)?["fips-aws-global","aws-fips"].includes(region)?"us-east-1":region.replace(/fips-(dkr-|prod-)?|-fips/,""):region;resolveRegionConfig=input=>{const{region,useFipsEndpoint}=input;if(!region)throw new Error("Region is missing");return Object.assign(input,{region:async()=>{const providedRegion="function"==typeof region?await region():region,realRegion=getRealRegion(providedRegion);checkRegion(realRegion);return realRegion},useFipsEndpoint:async()=>{const providedRegion="string"==typeof region?region:await region();return!!isFipsRegion(providedRegion)||("function"!=typeof useFipsEndpoint?Promise.resolve(!!useFipsEndpoint):useFipsEndpoint())}})};resolveEventStreamSerdeConfig=input=>Object.assign(input,{eventStreamMarshaller:input.eventStreamSerdeProvider(input)});CONTENT_LENGTH_HEADER2="content-length";contentLengthMiddlewareOptions={step:"build",tags:["SET_CONTENT_LENGTH","CONTENT_LENGTH"],name:"contentLengthMiddleware",override:!0};getContentLengthPlugin=options=>({applyToStack:clientStack=>{clientStack.add(contentLengthMiddleware(options.bodyLengthChecker),contentLengthMiddlewareOptions)}});resolveParamsForS3=async endpointParams=>{const bucket=(null==endpointParams?void 0:endpointParams.Bucket)||"";"string"==typeof endpointParams.Bucket&&(endpointParams.Bucket=bucket.replace(/#/g,encodeURIComponent("#")).replace(/\?/g,encodeURIComponent("?")));if(isArnBucketName(bucket)){if(!0===endpointParams.ForcePathStyle)throw new Error("Path-style addressing cannot be used with ARN buckets")}else(!isDnsCompatibleBucketName(bucket)||-1!==bucket.indexOf(".")&&!String(endpointParams.Endpoint).startsWith("http:")||bucket.toLowerCase()!==bucket||bucket.length<3)&&(endpointParams.ForcePathStyle=!0);if(endpointParams.DisableMultiRegionAccessPoints){endpointParams.disableMultiRegionAccessPoints=!0;endpointParams.DisableMRAP=!0}return endpointParams};DOMAIN_PATTERN=/^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/;IP_ADDRESS_PATTERN=/(\d+\.){3}\d+/;DOTS_PATTERN=/\.\./;isDnsCompatibleBucketName=bucketName=>DOMAIN_PATTERN.test(bucketName)&&!IP_ADDRESS_PATTERN.test(bucketName)&&!DOTS_PATTERN.test(bucketName);isArnBucketName=bucketName=>{const[arn,partition2,service,,,bucket]=bucketName.split(":"),isArn="arn"===arn&&bucketName.split(":").length>=6,isValidArn=Boolean(isArn&&partition2&&service&&bucket);if(isArn&&!isValidArn)throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);return isValidArn};createConfigValueProvider=(configKey,canonicalEndpointParamKey,config,isClientContextParam=!1)=>{const configProvider=async()=>{var _a8,_b5;let configValue;if(isClientContextParam){const clientContextParams=config.clientContextParams,nestedValue=null==clientContextParams?void 0:clientContextParams[configKey];configValue=null!=(_a8=null!=nestedValue?nestedValue:config[configKey])?_a8:config[canonicalEndpointParamKey]}else configValue=null!=(_b5=config[configKey])?_b5:config[canonicalEndpointParamKey];return"function"==typeof configValue?configValue():configValue};return"credentialScope"===configKey||"CredentialScope"===canonicalEndpointParamKey?async()=>{var _a8;const credentials="function"==typeof config.credentials?await config.credentials():config.credentials;return null!=(_a8=null==credentials?void 0:credentials.credentialScope)?_a8:null==credentials?void 0:credentials.CredentialScope}:"accountId"===configKey||"AccountId"===canonicalEndpointParamKey?async()=>{var _a8;const credentials="function"==typeof config.credentials?await config.credentials():config.credentials;return null!=(_a8=null==credentials?void 0:credentials.accountId)?_a8:null==credentials?void 0:credentials.AccountId}:"endpoint"===configKey||"endpoint"===canonicalEndpointParamKey?async()=>{if(!1===config.isCustomEndpoint)return;const endpoint=await configProvider();if(endpoint&&"object"==typeof endpoint){if("url"in endpoint)return endpoint.url.href;if("hostname"in endpoint){const{protocol,hostname,port,path:path2}=endpoint;return`${protocol}//${hostname}${port?":"+port:""}${path2}`}}return endpoint}:configProvider};getEndpointFromConfig=async serviceId=>{};toEndpointV12=endpoint=>{if("object"==typeof endpoint){if("url"in endpoint){const v1Endpoint=parseUrl(endpoint.url);if(endpoint.headers){v1Endpoint.headers={};for(const[name,values2]of Object.entries(endpoint.headers))v1Endpoint.headers[name.toLowerCase()]=values2.join(", ")}return v1Endpoint}return endpoint}return parseUrl(endpoint)};getEndpointFromInstructions=async(commandInput,instructionsSupplier,clientConfig,context2)=>{if(!clientConfig.isCustomEndpoint){let endpointFromConfig;endpointFromConfig=clientConfig.serviceConfiguredEndpoint?await clientConfig.serviceConfiguredEndpoint():await getEndpointFromConfig(clientConfig.serviceId);if(endpointFromConfig){clientConfig.endpoint=()=>Promise.resolve(toEndpointV12(endpointFromConfig));clientConfig.isCustomEndpoint=!0}}const endpointParams=await resolveParams(commandInput,instructionsSupplier,clientConfig);if("function"!=typeof clientConfig.endpointProvider)throw new Error("config.endpointProvider is not set.");const endpoint=clientConfig.endpointProvider(endpointParams,context2);if(clientConfig.isCustomEndpoint&&clientConfig.endpoint){const customEndpoint=await clientConfig.endpoint();if(null==customEndpoint?void 0:customEndpoint.headers){null!=endpoint.headers||(endpoint.headers={});for(const[name,value]of Object.entries(customEndpoint.headers))endpoint.headers[name]=Array.isArray(value)?value:[value]}}return endpoint};resolveParams=async(commandInput,instructionsSupplier,clientConfig)=>{var _a8;const endpointParams={},instructions=(null==(_a8=null==instructionsSupplier?void 0:instructionsSupplier.getEndpointParameterInstructions)?void 0:_a8.call(instructionsSupplier))||{};for(const[name,instruction]of Object.entries(instructions))switch(instruction.type){case"staticContextParams":endpointParams[name]=instruction.value;break;case"contextParams":endpointParams[name]=commandInput[instruction.name];break;case"clientContextParams":case"builtInParams":endpointParams[name]=await createConfigValueProvider(instruction.name,name,clientConfig,"builtInParams"!==instruction.type)();break;case"operationContextParams":endpointParams[name]=instruction.get(commandInput);break;default:throw new Error("Unrecognized endpoint parameter instruction: "+JSON.stringify(instruction))}0===Object.keys(instructions).length&&Object.assign(endpointParams,clientConfig);"s3"===String(clientConfig.serviceId).toLowerCase()&&await resolveParamsForS3(endpointParams);return endpointParams};endpointMiddleware=({config,instructions})=>(next2,context2)=>async args=>{var _a8,_b5,_c3;config.isCustomEndpoint&&setFeature2(context2,"ENDPOINT_OVERRIDE","N");const endpoint=await getEndpointFromInstructions(args.input,{getEndpointParameterInstructions:()=>instructions},{...config},context2);context2.endpointV2=endpoint;context2.authSchemes=null==(_a8=endpoint.properties)?void 0:_a8.authSchemes;const authScheme=null==(_b5=context2.authSchemes)?void 0:_b5[0];if(authScheme){context2.signing_region=authScheme.signingRegion;context2.signing_service=authScheme.signingName;const smithyContext=getSmithyContext(context2),httpAuthOption=null==(_c3=null==smithyContext?void 0:smithyContext.selectedHttpAuthScheme)?void 0:_c3.httpAuthOption;httpAuthOption&&(httpAuthOption.signingProperties=Object.assign(httpAuthOption.signingProperties||{},{signing_region:authScheme.signingRegion,signingRegion:authScheme.signingRegion,signing_service:authScheme.signingName,signingName:authScheme.signingName,signingRegionSet:authScheme.signingRegionSet},authScheme.properties))}return next2({...args})};endpointMiddlewareOptions={step:"serialize",tags:["ENDPOINT_PARAMETERS","ENDPOINT_V2","ENDPOINT"],name:"endpointV2Middleware",override:!0,relation:"before",toMiddleware:"serializerMiddleware"};getEndpointPlugin=(config,instructions)=>({applyToStack:clientStack=>{clientStack.addRelativeTo(endpointMiddleware({config,instructions}),endpointMiddlewareOptions)}});resolveEndpointConfig=input=>{var _a8;const tls=null==(_a8=input.tls)||_a8,{endpoint,useDualstackEndpoint,useFipsEndpoint}=input,customEndpointProvider=null!=endpoint?async()=>toEndpointV12(await normalizeProvider(endpoint)()):void 0,isCustomEndpoint=!!endpoint,resolvedConfig=Object.assign(input,{endpoint:customEndpointProvider,tls,isCustomEndpoint,useDualstackEndpoint:normalizeProvider(null!=useDualstackEndpoint&&useDualstackEndpoint),useFipsEndpoint:normalizeProvider(null!=useFipsEndpoint&&useFipsEndpoint)});let configuredEndpointPromise;resolvedConfig.serviceConfiguredEndpoint=async()=>{input.serviceId&&!configuredEndpointPromise&&(configuredEndpointPromise=getEndpointFromConfig(input.serviceId));return configuredEndpointPromise};return resolvedConfig};asSdkError=error=>error instanceof Error?error:error instanceof Object?Object.assign(new Error,error):"string"==typeof error?new Error(error):new Error(`AWS SDK error wrapper for ${error}`);resolveRetryConfig=input=>{var _a8;const{retryStrategy,retryMode}=input,maxAttempts=normalizeProvider(null!=(_a8=input.maxAttempts)?_a8:3);let controller=retryStrategy?Promise.resolve(retryStrategy):void 0;const getDefault=async()=>await normalizeProvider(retryMode)()===RETRY_MODES.ADAPTIVE?new AdaptiveRetryStrategy(maxAttempts):new StandardRetryStrategy(maxAttempts);return Object.assign(input,{maxAttempts,retryStrategy:()=>null!=controller?controller:controller=getDefault()})};isStreamingPayload=request2=>(null==request2?void 0:request2.body)instanceof ReadableStream;retryMiddleware=options=>(next2,context2)=>async args=>{var _a8;let retryStrategy=await options.retryStrategy();const maxAttempts=await options.maxAttempts();if(!isRetryStrategyV2(retryStrategy)){(null==retryStrategy?void 0:retryStrategy.mode)&&(context2.userAgent=[...context2.userAgent||[],["cfg/retry-mode",retryStrategy.mode]]);return retryStrategy.retry(next2,args)}{let retryToken=await retryStrategy.acquireInitialRetryToken(context2.partition_id),lastError=new Error,attempts=0,totalRetryDelay=0;const{request:request2}=args,isRequest=HttpRequest.isInstance(request2);isRequest&&(request2.headers["amz-sdk-invocation-id"]=v4());for(;;)try{isRequest&&(request2.headers["amz-sdk-request"]=`attempt=${attempts+1}; max=${maxAttempts}`);const{response,output}=await next2(args);retryStrategy.recordSuccess(retryToken);output.$metadata.attempts=attempts+1;output.$metadata.totalRetryDelay=totalRetryDelay;return{response,output}}catch(e3){const retryErrorInfo=getRetryErrorInfo(e3);lastError=asSdkError(e3);if(isRequest&&isStreamingPayload(request2)){null==(_a8=context2.logger instanceof NoOpLogger?console:context2.logger)||_a8.warn("An error was encountered in a non-retryable streaming request.");throw lastError}try{retryToken=await retryStrategy.refreshRetryTokenForRetry(retryToken,retryErrorInfo)}catch(refreshError){lastError.$metadata||(lastError.$metadata={});lastError.$metadata.attempts=attempts+1;lastError.$metadata.totalRetryDelay=totalRetryDelay;throw lastError}attempts=retryToken.getRetryCount();const delay2=retryToken.getRetryDelay();totalRetryDelay+=delay2;await new Promise(resolve=>setTimeout(resolve,delay2))}}};isRetryStrategyV2=retryStrategy=>void 0!==retryStrategy.acquireInitialRetryToken&&void 0!==retryStrategy.refreshRetryTokenForRetry&&void 0!==retryStrategy.recordSuccess;getRetryErrorInfo=error=>{const errorInfo={error,errorType:getRetryErrorType(error)},retryAfterHint=getRetryAfterHint(error.$response);retryAfterHint&&(errorInfo.retryAfterHint=retryAfterHint);return errorInfo};getRetryErrorType=error=>isThrottlingError(error)?"THROTTLING":isTransientError(error)?"TRANSIENT":isServerError(error)?"SERVER_ERROR":"CLIENT_ERROR";retryMiddlewareOptions={name:"retryMiddleware",tags:["RETRY"],step:"finalizeRequest",priority:"high",override:!0};getRetryPlugin=options=>({applyToStack:clientStack=>{clientStack.add(retryMiddleware(options),retryMiddlewareOptions)}});getRetryAfterHint=response=>{if(!HttpResponse.isInstance(response))return;const retryAfterHeaderName=Object.keys(response.headers).find(key3=>"retry-after"===key3.toLowerCase());if(!retryAfterHeaderName)return;const retryAfter=response.headers[retryAfterHeaderName],retryAfterSeconds=Number(retryAfter);return Number.isNaN(retryAfterSeconds)?new Date(retryAfter):new Date(1e3*retryAfterSeconds)};SignatureV4MultiRegion=class{constructor(options){__publicField(this,"sigv4aSigner");__publicField(this,"sigv4Signer");__publicField(this,"signerOptions");this.sigv4Signer=new SignatureV4S3Express(options);this.signerOptions=options}static sigv4aDependency(){return"none"}async sign(requestToSign,options={}){return"*"===options.signingRegion?this.getSigv4aSigner().sign(requestToSign,options):this.sigv4Signer.sign(requestToSign,options)}async signWithCredentials(requestToSign,credentials,options={}){if("*"===options.signingRegion){this.getSigv4aSigner();throw new Error('signWithCredentials with signingRegion \'*\' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt')}return this.sigv4Signer.signWithCredentials(requestToSign,credentials,options)}async presign(originalRequest,options={}){if("*"===options.signingRegion){this.getSigv4aSigner();throw new Error('presign with signingRegion \'*\' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt')}return this.sigv4Signer.presign(originalRequest,options)}async presignWithCredentials(originalRequest,credentials,options={}){if("*"===options.signingRegion)throw new Error("Method presignWithCredentials is not supported for [signingRegion=*].");return this.sigv4Signer.presignWithCredentials(originalRequest,credentials,options)}getSigv4aSigner(){if(!this.sigv4aSigner){const CrtSignerV4=null,JsSigV4aSigner=null;if("node"===this.signerOptions.runtime){if(!CrtSignerV4&&!JsSigV4aSigner)throw new Error("Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");if(CrtSignerV4&&"function"==typeof CrtSignerV4)this.sigv4aSigner=new CrtSignerV4({...this.signerOptions,signingAlgorithm:1});else{if(!JsSigV4aSigner||"function"!=typeof JsSigV4aSigner)throw new Error("Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");this.sigv4aSigner=new JsSigV4aSigner({...this.signerOptions})}}else{if(!JsSigV4aSigner||"function"!=typeof JsSigV4aSigner)throw new Error("JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a");this.sigv4aSigner=new JsSigV4aSigner({...this.signerOptions})}}return this.sigv4aSigner}};cs="required",ct="type",cu="rules",cv="conditions",cw="fn",cx="argv",cy="ref",cz="assign",cA="url",cB="properties",cC="backend",cD="authSchemes",cE="disableDoubleEncoding",cF="signingName",cG="signingRegion",cH="headers",cI="signingRegionSet";c=!0,d3="isSet",e2="booleanEquals",f="error",g="aws.partition",h="stringEquals",i="getAttr",j="name",k="substring",l="bucketSuffix",m2="parseURL",n2="endpoint",o="tree",p="aws.isVirtualHostableS3Bucket",q="{url#scheme}://{Bucket}.{url#authority}{url#path}",r3="not",s="accessPointSuffix",t8="{url#scheme}://{url#authority}{url#path}",u="hardwareType",v="regionPrefix",w="bucketAliasSuffix",x="outpostId",y="isValidHostLabel",z="sigv4a",A="s3-outposts",B="s3",C2="{url#scheme}://{url#authority}{url#normalizedPath}{Bucket}",D="https://{Bucket}.s3-accelerate.{partitionResult#dnsSuffix}",E="https://{Bucket}.s3.{partitionResult#dnsSuffix}",F="aws.parseArn",G2="bucketArn",H="arnType",J="s3-object-lambda",K="accesspoint",L3="accessPointName",M2="{url#scheme}://{accessPointName}-{bucketArn#accountId}.{url#authority}{url#path}",N2="mrapPartition",O="outpostType",P2="arnPrefix",Q="{url#scheme}://{url#authority}{url#normalizedPath}{uri_encoded_bucket}",R="https://s3.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",S="https://s3.{partitionResult#dnsSuffix}",T={[cs]:!1,[ct]:"string"},U={[cs]:!0,default:!1,[ct]:"boolean"},V={[cs]:!1,[ct]:"boolean"},W2={[cw]:e2,[cx]:[{[cy]:"Accelerate"},!0]},X={[cw]:e2,[cx]:[{[cy]:"UseFIPS"},!0]},Y={[cw]:e2,[cx]:[{[cy]:"UseDualStack"},!0]},Z={[cw]:d3,[cx]:[{[cy]:"Endpoint"}]},aa={[cw]:g,[cx]:[{[cy]:"Region"}],[cz]:"partitionResult"},ab={[cw]:h,[cx]:[{[cw]:i,[cx]:[{[cy]:"partitionResult"},j]},"aws-cn"]},ac={[cw]:d3,[cx]:[{[cy]:"Bucket"}]},ad={[cy]:"Bucket"},ae={[cv]:[W2],[f]:"S3Express does not support S3 Accelerate.",[ct]:f},af={[cv]:[Z,{[cw]:m2,[cx]:[{[cy]:"Endpoint"}],[cz]:"url"}],[cu]:[{[cv]:[{[cw]:d3,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"}]},{[cw]:e2,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"},!0]}],[cu]:[{[cv]:[{[cw]:e2,[cx]:[{[cw]:i,[cx]:[{[cy]:"url"},"isIp"]},!0]}],[cu]:[{[cv]:[{[cw]:"uriEncode",[cx]:[ad],[cz]:"uri_encoded_bucket"}],[cu]:[{[n2]:{[cA]:"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:p,[cx]:[ad,!1]}],[cu]:[{[n2]:{[cA]:q,[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o},{[f]:"S3Express bucket name is not a valid virtual hostable name.",[ct]:f}],[ct]:o},{[cv]:[{[cw]:e2,[cx]:[{[cw]:i,[cx]:[{[cy]:"url"},"isIp"]},!0]}],[cu]:[{[cv]:[{[cw]:"uriEncode",[cx]:[ad],[cz]:"uri_encoded_bucket"}],[cu]:[{[n2]:{[cA]:"{url#scheme}://{url#authority}/{uri_encoded_bucket}{url#path}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:p,[cx]:[ad,!1]}],[cu]:[{[n2]:{[cA]:q,[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],[ct]:o},{[f]:"S3Express bucket name is not a valid virtual hostable name.",[ct]:f}],[ct]:o},ag={[cw]:m2,[cx]:[{[cy]:"Endpoint"}],[cz]:"url"},ah={[cw]:e2,[cx]:[{[cw]:i,[cx]:[{[cy]:"url"},"isIp"]},!0]},ai={[cy]:"url"},aj={[cw]:"uriEncode",[cx]:[ad],[cz]:"uri_encoded_bucket"},ak={[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:"s3express",[cG]:"{Region}"}]},al={},am={[cw]:p,[cx]:[ad,!1]},an={[f]:"S3Express bucket name is not a valid virtual hostable name.",[ct]:f},ao={[cw]:d3,[cx]:[{[cy]:"UseS3ExpressControlEndpoint"}]},ap={[cw]:e2,[cx]:[{[cy]:"UseS3ExpressControlEndpoint"},!0]},aq={[cw]:r3,[cx]:[Z]},ar={[cw]:e2,[cx]:[{[cy]:"UseDualStack"},!1]},as={[cw]:e2,[cx]:[{[cy]:"UseFIPS"},!1]},at={[f]:"Unrecognized S3Express bucket name format.",[ct]:f},au={[cw]:r3,[cx]:[ac]},av={[cy]:u},aw={[cv]:[aq],[f]:"Expected a endpoint to be specified but no endpoint was found",[ct]:f},ax={[cD]:[{[cE]:!0,[j]:z,[cF]:A,[cI]:["*"]},{[cE]:!0,[j]:"sigv4",[cF]:A,[cG]:"{Region}"}]},ay={[cw]:e2,[cx]:[{[cy]:"ForcePathStyle"},!1]},az={[cy]:"ForcePathStyle"},aA={[cw]:e2,[cx]:[{[cy]:"Accelerate"},!1]},aB={[cw]:h,[cx]:[{[cy]:"Region"},"aws-global"]},aC={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"us-east-1"}]},aD={[cw]:r3,[cx]:[aB]},aE={[cw]:e2,[cx]:[{[cy]:"UseGlobalEndpoint"},!0]},aF={[cA]:"https://{Bucket}.s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"{Region}"}]},[cH]:{}},aG={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"{Region}"}]},aH={[cw]:e2,[cx]:[{[cy]:"UseGlobalEndpoint"},!1]},aI={[cA]:"https://{Bucket}.s3-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aJ={[cA]:"https://{Bucket}.s3-accelerate.dualstack.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aK={[cA]:"https://{Bucket}.s3.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aL={[cw]:e2,[cx]:[{[cw]:i,[cx]:[ai,"isIp"]},!1]},aM={[cA]:C2,[cB]:aG,[cH]:{}},aN={[cA]:q,[cB]:aG,[cH]:{}},aO={[n2]:aN,[ct]:n2},aP={[cA]:D,[cB]:aG,[cH]:{}},aQ={[cA]:"https://{Bucket}.s3.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},aR={[f]:"Invalid region: region was not a valid DNS name.",[ct]:f},aS={[cy]:G2},aT={[cy]:H},aU={[cw]:i,[cx]:[aS,"service"]},aV={[cy]:L3},aW={[cv]:[Y],[f]:"S3 Object Lambda does not support Dual-stack",[ct]:f},aX={[cv]:[W2],[f]:"S3 Object Lambda does not support S3 Accelerate",[ct]:f},aY={[cv]:[{[cw]:d3,[cx]:[{[cy]:"DisableAccessPoints"}]},{[cw]:e2,[cx]:[{[cy]:"DisableAccessPoints"},!0]}],[f]:"Access points are not supported for this operation",[ct]:f},aZ={[cv]:[{[cw]:d3,[cx]:[{[cy]:"UseArnRegion"}]},{[cw]:e2,[cx]:[{[cy]:"UseArnRegion"},!1]},{[cw]:r3,[cx]:[{[cw]:h,[cx]:[{[cw]:i,[cx]:[aS,"region"]},"{Region}"]}]}],[f]:"Invalid configuration: region from ARN `{bucketArn#region}` does not match client region `{Region}` and UseArnRegion is `false`",[ct]:f},ba={[cw]:i,[cx]:[{[cy]:"bucketPartition"},j]},bb={[cw]:i,[cx]:[aS,"accountId"]},bc={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:J,[cG]:"{bucketArn#region}"}]},bd={[f]:"Invalid ARN: The access point name may only contain a-z, A-Z, 0-9 and `-`. Found: `{accessPointName}`",[ct]:f},be={[f]:"Invalid ARN: The account id may only contain a-z, A-Z, 0-9 and `-`. Found: `{bucketArn#accountId}`",[ct]:f},bf={[f]:"Invalid region in ARN: `{bucketArn#region}` (invalid DNS name)",[ct]:f},bg={[f]:"Client was configured for partition `{partitionResult#name}` but ARN (`{Bucket}`) has `{bucketPartition#name}`",[ct]:f},bh={[f]:"Invalid ARN: The ARN may only contain a single resource component after `accesspoint`.",[ct]:f},bi={[f]:"Invalid ARN: Expected a resource of the format `accesspoint:<accesspoint name>` but no name was provided",[ct]:f},bj={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:B,[cG]:"{bucketArn#region}"}]},bk={[cD]:[{[cE]:!0,[j]:z,[cF]:A,[cI]:["*"]},{[cE]:!0,[j]:"sigv4",[cF]:A,[cG]:"{bucketArn#region}"}]},bl={[cw]:F,[cx]:[ad]},bm={[cA]:"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},bn={[cA]:"https://s3-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},bo={[cA]:"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},bp={[cA]:Q,[cB]:aG,[cH]:{}},bq={[cA]:"https://s3.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aG,[cH]:{}},br={[cy]:"UseObjectLambdaEndpoint"},bs={[cD]:[{[cE]:!0,[j]:"sigv4",[cF]:J,[cG]:"{Region}"}]},bt={[cA]:"https://s3-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},bu={[cA]:"https://s3-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},bv={[cA]:"https://s3.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},bw={[cA]:t8,[cB]:aG,[cH]:{}},bx={[cA]:"https://s3.{Region}.{partitionResult#dnsSuffix}",[cB]:aG,[cH]:{}},by=[{[cy]:"Region"}],bz=[{[cy]:"Endpoint"}],bA=[ad],bB=[W2],bC=[Z,ag],bD=[{[cw]:d3,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"}]},{[cw]:e2,[cx]:[{[cy]:"DisableS3ExpressSessionAuth"},!0]}],bE=[aj],bF=[am],bG=[aa],bH=[X,Y],bI=[X,ar],bJ=[as,Y],bK=[as,ar],bL=[{[cw]:k,[cx]:[ad,6,14,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,14,16,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bM=[{[cv]:[X,Y],[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2},{[cv]:bI,[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2},{[cv]:bJ,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2},{[cv]:bK,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:{}},[ct]:n2}],bN=[{[cw]:k,[cx]:[ad,6,15,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,15,17,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bO=[{[cw]:k,[cx]:[ad,6,19,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,19,21,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bP=[{[cw]:k,[cx]:[ad,6,20,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,20,22,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bQ=[{[cw]:k,[cx]:[ad,6,26,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,26,28,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bR=[{[cv]:[X,Y],[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2},{[cv]:bI,[n2]:{[cA]:"https://{Bucket}.s3express-fips-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2},{[cv]:bJ,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2},{[cv]:bK,[n2]:{[cA]:"https://{Bucket}.s3express-{s3expressAvailabilityZoneId}.{Region}.{partitionResult#dnsSuffix}",[cB]:{[cC]:"S3Express",[cD]:[{[cE]:!0,[j]:"sigv4-s3express",[cF]:"s3express",[cG]:"{Region}"}]},[cH]:{}},[ct]:n2}],bS=[ad,0,7,!0],bT=[{[cw]:k,[cx]:[ad,7,15,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,15,17,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bU=[{[cw]:k,[cx]:[ad,7,16,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,16,18,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bV=[{[cw]:k,[cx]:[ad,7,20,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,20,22,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bW=[{[cw]:k,[cx]:[ad,7,21,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,21,23,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bX=[{[cw]:k,[cx]:[ad,7,27,!0],[cz]:"s3expressAvailabilityZoneId"},{[cw]:k,[cx]:[ad,27,29,!0],[cz]:"s3expressAvailabilityZoneDelim"},{[cw]:h,[cx]:[{[cy]:"s3expressAvailabilityZoneDelim"},"--"]}],bY=[ac],bZ=[{[cw]:y,[cx]:[{[cy]:x},!1]}],ca=[{[cw]:h,[cx]:[{[cy]:v},"beta"]}],cb=["*"],cc=[{[cw]:y,[cx]:[{[cy]:"Region"},!1]}],cd=[{[cw]:h,[cx]:[{[cy]:"Region"},"us-east-1"]}],ce=[{[cw]:h,[cx]:[aT,K]}],cf=[{[cw]:i,[cx]:[aS,"resourceId[1]"],[cz]:L3},{[cw]:r3,[cx]:[{[cw]:h,[cx]:[aV,""]}]}],cg=[aS,"resourceId[1]"],ch=[Y],ci=[{[cw]:r3,[cx]:[{[cw]:h,[cx]:[{[cw]:i,[cx]:[aS,"region"]},""]}]}],cj=[{[cw]:r3,[cx]:[{[cw]:d3,[cx]:[{[cw]:i,[cx]:[aS,"resourceId[2]"]}]}]}],ck=[aS,"resourceId[2]"],cl=[{[cw]:g,[cx]:[{[cw]:i,[cx]:[aS,"region"]}],[cz]:"bucketPartition"}],cm=[{[cw]:h,[cx]:[ba,{[cw]:i,[cx]:[{[cy]:"partitionResult"},j]}]}],cn=[{[cw]:y,[cx]:[{[cw]:i,[cx]:[aS,"region"]},!0]}],co=[{[cw]:y,[cx]:[bb,!1]}],cp=[{[cw]:y,[cx]:[aV,!1]}],cq=[X],cr2=[{[cw]:y,[cx]:[{[cy]:"Region"},!0]}];ruleSet={version:"1.0",parameters:{Bucket:T,Region:T,UseFIPS:U,UseDualStack:U,Endpoint:T,ForcePathStyle:U,Accelerate:U,UseGlobalEndpoint:U,UseObjectLambdaEndpoint:V,Key:T,Prefix:T,CopySource:T,DisableAccessPoints:V,DisableMultiRegionAccessPoints:U,UseArnRegion:V,UseS3ExpressControlEndpoint:V,DisableS3ExpressSessionAuth:V},[cu]:[{[cv]:[{[cw]:d3,[cx]:by}],[cu]:[{[cv]:[W2,X],error:"Accelerate cannot be used with FIPS",[ct]:f},{[cv]:[Y,Z],error:"Cannot set dual-stack in combination with a custom endpoint.",[ct]:f},{[cv]:[Z,X],error:"A custom endpoint cannot be combined with FIPS",[ct]:f},{[cv]:[Z,W2],error:"A custom endpoint cannot be combined with S3 Accelerate",[ct]:f},{[cv]:[X,aa,ab],error:"Partition does not support FIPS",[ct]:f},{[cv]:[ac,{[cw]:k,[cx]:[ad,0,6,c],[cz]:l},{[cw]:h,[cx]:[{[cy]:l},"--x-s3"]}],[cu]:[ae,af,{[cv]:[ao,ap],[cu]:[{[cv]:bG,[cu]:[{[cv]:[aj,aq],[cu]:[{[cv]:bH,endpoint:{[cA]:"https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bI,endpoint:{[cA]:"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bJ,endpoint:{[cA]:"https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bK,endpoint:{[cA]:"https://s3express-control.{Region}.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:ak,[cH]:al},[ct]:n2}],[ct]:o}],[ct]:o}],[ct]:o},{[cv]:bF,[cu]:[{[cv]:bG,[cu]:[{[cv]:bD,[cu]:[{[cv]:bL,[cu]:bM,[ct]:o},{[cv]:bN,[cu]:bM,[ct]:o},{[cv]:bO,[cu]:bM,[ct]:o},{[cv]:bP,[cu]:bM,[ct]:o},{[cv]:bQ,[cu]:bM,[ct]:o},at],[ct]:o},{[cv]:bL,[cu]:bR,[ct]:o},{[cv]:bN,[cu]:bR,[ct]:o},{[cv]:bO,[cu]:bR,[ct]:o},{[cv]:bP,[cu]:bR,[ct]:o},{[cv]:bQ,[cu]:bR,[ct]:o},at],[ct]:o}],[ct]:o},an],[ct]:o},{[cv]:[ac,{[cw]:k,[cx]:bS,[cz]:s},{[cw]:h,[cx]:[{[cy]:s},"--xa-s3"]}],[cu]:[ae,af,{[cv]:bF,[cu]:[{[cv]:bG,[cu]:[{[cv]:bD,[cu]:[{[cv]:bT,[cu]:bM,[ct]:o},{[cv]:bU,[cu]:bM,[ct]:o},{[cv]:bV,[cu]:bM,[ct]:o},{[cv]:bW,[cu]:bM,[ct]:o},{[cv]:bX,[cu]:bM,[ct]:o},at],[ct]:o},{[cv]:bT,[cu]:bR,[ct]:o},{[cv]:bU,[cu]:bR,[ct]:o},{[cv]:bV,[cu]:bR,[ct]:o},{[cv]:bW,[cu]:bR,[ct]:o},{[cv]:bX,[cu]:bR,[ct]:o},at],[ct]:o}],[ct]:o},an],[ct]:o},{[cv]:[au,ao,ap],[cu]:[{[cv]:bG,[cu]:[{[cv]:bC,endpoint:{[cA]:t8,[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bH,endpoint:{[cA]:"https://s3express-control-fips.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bI,endpoint:{[cA]:"https://s3express-control-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bJ,endpoint:{[cA]:"https://s3express-control.dualstack.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2},{[cv]:bK,endpoint:{[cA]:"https://s3express-control.{Region}.{partitionResult#dnsSuffix}",[cB]:ak,[cH]:al},[ct]:n2}],[ct]:o}],[ct]:o},{[cv]:[ac,{[cw]:k,[cx]:[ad,49,50,c],[cz]:u},{[cw]:k,[cx]:[ad,8,12,c],[cz]:v},{[cw]:k,[cx]:bS,[cz]:w},{[cw]:k,[cx]:[ad,32,49,c],[cz]:x},{[cw]:g,[cx]:by,[cz]:"regionPartition"},{[cw]:h,[cx]:[{[cy]:w},"--op-s3"]}],[cu]:[{[cv]:bZ,[cu]:[{[cv]:bF,[cu]:[{[cv]:[{[cw]:h,[cx]:[av,"e"]}],[cu]:[{[cv]:ca,[cu]:[aw,{[cv]:bC,endpoint:{[cA]:"https://{Bucket}.ec2.{url#authority}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{endpoint:{[cA]:"https://{Bucket}.ec2.s3-outposts.{Region}.{regionPartition#dnsSuffix}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{[cv]:[{[cw]:h,[cx]:[av,"o"]}],[cu]:[{[cv]:ca,[cu]:[aw,{[cv]:bC,endpoint:{[cA]:"https://{Bucket}.op-{outpostId}.{url#authority}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{endpoint:{[cA]:"https://{Bucket}.op-{outpostId}.s3-outposts.{Region}.{regionPartition#dnsSuffix}",[cB]:ax,[cH]:al},[ct]:n2}],[ct]:o},{error:'Unrecognized hardware type: "Expected hardware type o or e but got {hardwareType}"',[ct]:f}],[ct]:o},{error:"Invalid Outposts Bucket alias - it must be a valid bucket name.",[ct]:f}],[ct]:o},{error:"Invalid ARN: The outpost Id must only contain a-z, A-Z, 0-9 and `-`.",[ct]:f}],[ct]:o},{[cv]:bY,[cu]:[{[cv]:[Z,{[cw]:r3,[cx]:[{[cw]:d3,[cx]:[{[cw]:m2,[cx]:bz}]}]}],error:"Custom endpoint `{Endpoint}` was not a valid URI",[ct]:f},{[cv]:[ay,am],[cu]:[{[cv]:bG,[cu]:[{[cv]:cc,[cu]:[{[cv]:[W2,ab],error:"S3 Accelerate cannot be used in this region",[ct]:f},{[cv]:[Y,X,aA,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,X,aA,aq,aD,aE],[cu]:[{endpoint:aF,[ct]:n2}],[ct]:o},{[cv]:[Y,X,aA,aq,aD,aH],endpoint:aF,[ct]:n2},{[cv]:[ar,X,aA,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3-fips.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,X,aA,aq,aD,aE],[cu]:[{endpoint:aI,[ct]:n2}],[ct]:o},{[cv]:[ar,X,aA,aq,aD,aH],endpoint:aI,[ct]:n2},{[cv]:[Y,as,W2,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3-accelerate.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,as,W2,aq,aD,aE],[cu]:[{endpoint:aJ,[ct]:n2}],[ct]:o},{[cv]:[Y,as,W2,aq,aD,aH],endpoint:aJ,[ct]:n2},{[cv]:[Y,as,aA,aq,aB],endpoint:{[cA]:"https://{Bucket}.s3.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,as,aA,aq,aD,aE],[cu]:[{endpoint:aK,[ct]:n2}],[ct]:o},{[cv]:[Y,as,aA,aq,aD,aH],endpoint:aK,[ct]:n2},{[cv]:[ar,as,aA,Z,ag,ah,aB],endpoint:{[cA]:C2,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,aA,Z,ag,aL,aB],endpoint:{[cA]:q,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,aA,Z,ag,ah,aD,aE],[cu]:[{[cv]:cd,endpoint:aM,[ct]:n2},{endpoint:aM,[ct]:n2}],[ct]:o},{[cv]:[ar,as,aA,Z,ag,aL,aD,aE],[cu]:[{[cv]:cd,endpoint:aN,[ct]:n2},aO],[ct]:o},{[cv]:[ar,as,aA,Z,ag,ah,aD,aH],endpoint:aM,[ct]:n2},{[cv]:[ar,as,aA,Z,ag,aL,aD,aH],endpoint:aN,[ct]:n2},{[cv]:[ar,as,W2,aq,aB],endpoint:{[cA]:D,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,W2,aq,aD,aE],[cu]:[{[cv]:cd,endpoint:aP,[ct]:n2},{endpoint:aP,[ct]:n2}],[ct]:o},{[cv]:[ar,as,W2,aq,aD,aH],endpoint:aP,[ct]:n2},{[cv]:[ar,as,aA,aq,aB],endpoint:{[cA]:E,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,as,aA,aq,aD,aE],[cu]:[{[cv]:cd,endpoint:{[cA]:E,[cB]:aG,[cH]:al},[ct]:n2},{endpoint:aQ,[ct]:n2}],[ct]:o},{[cv]:[ar,as,aA,aq,aD,aH],endpoint:aQ,[ct]:n2}],[ct]:o},aR],[ct]:o}],[ct]:o},{[cv]:[Z,ag,{[cw]:h,[cx]:[{[cw]:i,[cx]:[ai,"scheme"]},"http"]},{[cw]:p,[cx]:[ad,c]},ay,as,ar,aA],[cu]:[{[cv]:bG,[cu]:[{[cv]:cc,[cu]:[aO],[ct]:o},aR],[ct]:o}],[ct]:o},{[cv]:[ay,{[cw]:F,[cx]:bA,[cz]:G2}],[cu]:[{[cv]:[{[cw]:i,[cx]:[aS,"resourceId[0]"],[cz]:H},{[cw]:r3,[cx]:[{[cw]:h,[cx]:[aT,""]}]}],[cu]:[{[cv]:[{[cw]:h,[cx]:[aU,J]}],[cu]:[{[cv]:ce,[cu]:[{[cv]:cf,[cu]:[aW,aX,{[cv]:ci,[cu]:[aY,{[cv]:cj,[cu]:[aZ,{[cv]:cl,[cu]:[{[cv]:bG,[cu]:[{[cv]:cm,[cu]:[{[cv]:cn,[cu]:[{[cv]:[{[cw]:h,[cx]:[bb,""]}],error:"Invalid ARN: Missing account id",[ct]:f},{[cv]:co,[cu]:[{[cv]:cp,[cu]:[{[cv]:bC,endpoint:{[cA]:M2,[cB]:bc,[cH]:al},[ct]:n2},{[cv]:cq,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bc,[cH]:al},[ct]:n2},{endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-object-lambda.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bc,[cH]:al},[ct]:n2}],[ct]:o},bd],[ct]:o},be],[ct]:o},bf],[ct]:o},bg],[ct]:o}],[ct]:o}],[ct]:o},bh],[ct]:o},{error:"Invalid ARN: bucket ARN is missing a region",[ct]:f}],[ct]:o},bi],[ct]:o},{error:"Invalid ARN: Object Lambda ARNs only support `accesspoint` arn types, but found: `{arnType}`",[ct]:f}],[ct]:o},{[cv]:ce,[cu]:[{[cv]:cf,[cu]:[{[cv]:ci,[cu]:[{[cv]:ce,[cu]:[{[cv]:ci,[cu]:[aY,{[cv]:cj,[cu]:[aZ,{[cv]:cl,[cu]:[{[cv]:bG,[cu]:[{[cv]:[{[cw]:h,[cx]:[ba,"{partitionResult#name}"]}],[cu]:[{[cv]:cn,[cu]:[{[cv]:[{[cw]:h,[cx]:[aU,B]}],[cu]:[{[cv]:co,[cu]:[{[cv]:cp,[cu]:[{[cv]:bB,error:"Access Points do not support S3 Accelerate",[ct]:f},{[cv]:bH,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2},{[cv]:bI,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint-fips.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2},{[cv]:bJ,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.dualstack.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2},{[cv]:[as,ar,Z,ag],endpoint:{[cA]:M2,[cB]:bj,[cH]:al},[ct]:n2},{[cv]:bK,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.s3-accesspoint.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bj,[cH]:al},[ct]:n2}],[ct]:o},bd],[ct]:o},be],[ct]:o},{error:"Invalid ARN: The ARN was not for the S3 service, found: {bucketArn#service}",[ct]:f}],[ct]:o},bf],[ct]:o},bg],[ct]:o}],[ct]:o}],[ct]:o},bh],[ct]:o}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:y,[cx]:[aV,c]}],[cu]:[{[cv]:ch,error:"S3 MRAP does not support dual-stack",[ct]:f},{[cv]:cq,error:"S3 MRAP does not support FIPS",[ct]:f},{[cv]:bB,error:"S3 MRAP does not support S3 Accelerate",[ct]:f},{[cv]:[{[cw]:e2,[cx]:[{[cy]:"DisableMultiRegionAccessPoints"},c]}],error:"Invalid configuration: Multi-Region Access Point ARNs are disabled.",[ct]:f},{[cv]:[{[cw]:g,[cx]:by,[cz]:N2}],[cu]:[{[cv]:[{[cw]:h,[cx]:[{[cw]:i,[cx]:[{[cy]:N2},j]},{[cw]:i,[cx]:[aS,"partition"]}]}],[cu]:[{endpoint:{[cA]:"https://{accessPointName}.accesspoint.s3-global.{mrapPartition#dnsSuffix}",[cB]:{[cD]:[{[cE]:c,name:z,[cF]:B,[cI]:cb}]},[cH]:al},[ct]:n2}],[ct]:o},{error:"Client was configured for partition `{mrapPartition#name}` but bucket referred to partition `{bucketArn#partition}`",[ct]:f}],[ct]:o}],[ct]:o},{error:"Invalid Access Point Name",[ct]:f}],[ct]:o},bi],[ct]:o},{[cv]:[{[cw]:h,[cx]:[aU,A]}],[cu]:[{[cv]:ch,error:"S3 Outposts does not support Dual-stack",[ct]:f},{[cv]:cq,error:"S3 Outposts does not support FIPS",[ct]:f},{[cv]:bB,error:"S3 Outposts does not support S3 Accelerate",[ct]:f},{[cv]:[{[cw]:d3,[cx]:[{[cw]:i,[cx]:[aS,"resourceId[4]"]}]}],error:"Invalid Arn: Outpost Access Point ARN contains sub resources",[ct]:f},{[cv]:[{[cw]:i,[cx]:cg,[cz]:x}],[cu]:[{[cv]:bZ,[cu]:[aZ,{[cv]:cl,[cu]:[{[cv]:bG,[cu]:[{[cv]:cm,[cu]:[{[cv]:cn,[cu]:[{[cv]:co,[cu]:[{[cv]:[{[cw]:i,[cx]:ck,[cz]:O}],[cu]:[{[cv]:[{[cw]:i,[cx]:[aS,"resourceId[3]"],[cz]:L3}],[cu]:[{[cv]:[{[cw]:h,[cx]:[{[cy]:O},K]}],[cu]:[{[cv]:bC,endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.{url#authority}",[cB]:bk,[cH]:al},[ct]:n2},{endpoint:{[cA]:"https://{accessPointName}-{bucketArn#accountId}.{outpostId}.s3-outposts.{bucketArn#region}.{bucketPartition#dnsSuffix}",[cB]:bk,[cH]:al},[ct]:n2}],[ct]:o},{error:"Expected an outpost type `accesspoint`, found {outpostType}",[ct]:f}],[ct]:o},{error:"Invalid ARN: expected an access point name",[ct]:f}],[ct]:o},{error:"Invalid ARN: Expected a 4-component resource",[ct]:f}],[ct]:o},be],[ct]:o},bf],[ct]:o},bg],[ct]:o}],[ct]:o}],[ct]:o},{error:"Invalid ARN: The outpost Id may only contain a-z, A-Z, 0-9 and `-`. Found: `{outpostId}`",[ct]:f}],[ct]:o},{error:"Invalid ARN: The Outpost Id was not set",[ct]:f}],[ct]:o},{error:"Invalid ARN: Unrecognized format: {Bucket} (type: {arnType})",[ct]:f}],[ct]:o},{error:"Invalid ARN: No ARN type specified",[ct]:f}],[ct]:o},{[cv]:[{[cw]:k,[cx]:[ad,0,4,!1],[cz]:P2},{[cw]:h,[cx]:[{[cy]:P2},"arn:"]},{[cw]:r3,[cx]:[{[cw]:d3,[cx]:[bl]}]}],error:"Invalid ARN: `{Bucket}` was not a valid ARN",[ct]:f},{[cv]:[{[cw]:e2,[cx]:[az,c]},bl],error:"Path-style addressing cannot be used with ARN buckets",[ct]:f},{[cv]:bE,[cu]:[{[cv]:bG,[cu]:[{[cv]:[aA],[cu]:[{[cv]:[Y,aq,X,aB],endpoint:{[cA]:"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,aq,X,aD,aE],[cu]:[{endpoint:bm,[ct]:n2}],[ct]:o},{[cv]:[Y,aq,X,aD,aH],endpoint:bm,[ct]:n2},{[cv]:[ar,aq,X,aB],endpoint:{[cA]:"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,aq,X,aD,aE],[cu]:[{endpoint:bn,[ct]:n2}],[ct]:o},{[cv]:[ar,aq,X,aD,aH],endpoint:bn,[ct]:n2},{[cv]:[Y,aq,as,aB],endpoint:{[cA]:"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}/{uri_encoded_bucket}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[Y,aq,as,aD,aE],[cu]:[{endpoint:bo,[ct]:n2}],[ct]:o},{[cv]:[Y,aq,as,aD,aH],endpoint:bo,[ct]:n2},{[cv]:[ar,Z,ag,as,aB],endpoint:{[cA]:Q,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,Z,ag,as,aD,aE],[cu]:[{[cv]:cd,endpoint:bp,[ct]:n2},{endpoint:bp,[ct]:n2}],[ct]:o},{[cv]:[ar,Z,ag,as,aD,aH],endpoint:bp,[ct]:n2},{[cv]:[ar,aq,as,aB],endpoint:{[cA]:R,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[ar,aq,as,aD,aE],[cu]:[{[cv]:cd,endpoint:{[cA]:R,[cB]:aG,[cH]:al},[ct]:n2},{endpoint:bq,[ct]:n2}],[ct]:o},{[cv]:[ar,aq,as,aD,aH],endpoint:bq,[ct]:n2}],[ct]:o},{error:"Path-style addressing cannot be used with S3 Accelerate",[ct]:f}],[ct]:o}],[ct]:o}],[ct]:o},{[cv]:[{[cw]:d3,[cx]:[br]},{[cw]:e2,[cx]:[br,c]}],[cu]:[{[cv]:bG,[cu]:[{[cv]:cr2,[cu]:[aW,aX,{[cv]:bC,endpoint:{[cA]:t8,[cB]:bs,[cH]:al},[ct]:n2},{[cv]:cq,endpoint:{[cA]:"https://s3-object-lambda-fips.{Region}.{partitionResult#dnsSuffix}",[cB]:bs,[cH]:al},[ct]:n2},{endpoint:{[cA]:"https://s3-object-lambda.{Region}.{partitionResult#dnsSuffix}",[cB]:bs,[cH]:al},[ct]:n2}],[ct]:o},aR],[ct]:o}],[ct]:o},{[cv]:[au],[cu]:[{[cv]:bG,[cu]:[{[cv]:cr2,[cu]:[{[cv]:[X,Y,aq,aB],endpoint:{[cA]:"https://s3-fips.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[X,Y,aq,aD,aE],[cu]:[{endpoint:bt,[ct]:n2}],[ct]:o},{[cv]:[X,Y,aq,aD,aH],endpoint:bt,[ct]:n2},{[cv]:[X,ar,aq,aB],endpoint:{[cA]:"https://s3-fips.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[X,ar,aq,aD,aE],[cu]:[{endpoint:bu,[ct]:n2}],[ct]:o},{[cv]:[X,ar,aq,aD,aH],endpoint:bu,[ct]:n2},{[cv]:[as,Y,aq,aB],endpoint:{[cA]:"https://s3.dualstack.us-east-1.{partitionResult#dnsSuffix}",[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[as,Y,aq,aD,aE],[cu]:[{endpoint:bv,[ct]:n2}],[ct]:o},{[cv]:[as,Y,aq,aD,aH],endpoint:bv,[ct]:n2},{[cv]:[as,ar,Z,ag,aB],endpoint:{[cA]:t8,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[as,ar,Z,ag,aD,aE],[cu]:[{[cv]:cd,endpoint:bw,[ct]:n2},{endpoint:bw,[ct]:n2}],[ct]:o},{[cv]:[as,ar,Z,ag,aD,aH],endpoint:bw,[ct]:n2},{[cv]:[as,ar,aq,aB],endpoint:{[cA]:S,[cB]:aC,[cH]:al},[ct]:n2},{[cv]:[as,ar,aq,aD,aE],[cu]:[{[cv]:cd,endpoint:{[cA]:S,[cB]:aG,[cH]:al},[ct]:n2},{endpoint:bx,[ct]:n2}],[ct]:o},{[cv]:[as,ar,aq,aD,aH],endpoint:bx,[ct]:n2}],[ct]:o},aR],[ct]:o}],[ct]:o}],[ct]:o},{error:"A region must be set when sending requests to S3.",[ct]:f}]};cache=new EndpointCache({size:50,params:["Accelerate","Bucket","DisableAccessPoints","DisableMultiRegionAccessPoints","DisableS3ExpressSessionAuth","Endpoint","ForcePathStyle","Region","UseArnRegion","UseDualStack","UseFIPS","UseGlobalEndpoint","UseObjectLambdaEndpoint","UseS3ExpressControlEndpoint"]});defaultEndpointResolver=(endpointParams,context2={})=>cache.get(endpointParams,()=>resolveEndpoint(ruleSet,{endpointParams,logger:context2.logger}));customEndpointFunctions.aws=awsEndpointFunctions;defaultS3HttpAuthSchemeParametersProvider=(defaultHttpAuthSchemeParametersProvider=>async(config,context2,input)=>{var _a8,_b5,_c3;if(!input)throw new Error("Could not find `input` for `defaultEndpointRuleSetHttpAuthSchemeParametersProvider`");const defaultParameters=await defaultHttpAuthSchemeParametersProvider(config,context2),instructionsFn=null==(_c3=null==(_b5=null==(_a8=getSmithyContext(context2))?void 0:_a8.commandInstance)?void 0:_b5.constructor)?void 0:_c3.getEndpointParameterInstructions;if(!instructionsFn)throw new Error(`getEndpointParameterInstructions() is not defined on '${context2.commandName}'`);const endpointParameters=await resolveParams(input,{getEndpointParameterInstructions:instructionsFn},config);return Object.assign(defaultParameters,endpointParameters)})(async(config,context2,input)=>({operation:getSmithyContext(context2).operation,region:await normalizeProvider(config.region)()||(()=>{throw new Error("expected `region` to be configured for `aws.auth#sigv4`")})()}));defaultS3HttpAuthSchemeProvider=((defaultEndpointResolver2,defaultHttpAuthSchemeResolver,createHttpAuthOptionFunctions)=>authParameters=>{var _a8;const authSchemes=null==(_a8=defaultEndpointResolver2(authParameters).properties)?void 0:_a8.authSchemes;if(!authSchemes)return defaultHttpAuthSchemeResolver(authParameters);const options=[];for(const scheme of authSchemes){const{name:resolvedName,properties={},...rest}=scheme,name=resolvedName.toLowerCase();resolvedName!==name&&console.warn(`HttpAuthScheme has been normalized with lowercasing: '${resolvedName}' to '${name}'`);let schemeId;if("sigv4a"===name){schemeId="aws.auth#sigv4a";const sigv4Present=authSchemes.find(s2=>{const name2=s2.name.toLowerCase();return"sigv4a"!==name2&&name2.startsWith("sigv4")});if("none"===SignatureV4MultiRegion.sigv4aDependency()&&sigv4Present)continue}else{if(!name.startsWith("sigv4"))throw new Error(`Unknown HttpAuthScheme found in '@smithy.rules#endpointRuleSet': '${name}'`);schemeId="aws.auth#sigv4"}const createOption=createHttpAuthOptionFunctions[schemeId];if(!createOption)throw new Error(`Could not find HttpAuthOption create function for '${schemeId}'`);const option=createOption(authParameters);option.schemeId=schemeId;option.signingProperties={...option.signingProperties||{},...rest,...properties};options.push(option)}return options})(defaultEndpointResolver,authParameters=>{const options=[];switch(authParameters.operation){default:options.push(createAwsAuthSigv4HttpAuthOption(authParameters));options.push(createAwsAuthSigv4aHttpAuthOption(authParameters))}return options},{"aws.auth#sigv4":createAwsAuthSigv4HttpAuthOption,"aws.auth#sigv4a":createAwsAuthSigv4aHttpAuthOption});resolveHttpAuthSchemeConfig=config=>{var _a8;const config_0=resolveAwsSdkSigV4Config(config),config_1=resolveAwsSdkSigV4AConfig(config_0);return Object.assign(config_1,{authSchemePreference:normalizeProvider(null!=(_a8=config.authSchemePreference)?_a8:[])})};resolveClientEndpointParameters=options=>{var _a8,_b5,_c3,_d2,_e2,_f,_g;return Object.assign(options,{useFipsEndpoint:null!=(_a8=options.useFipsEndpoint)&&_a8,useDualstackEndpoint:null!=(_b5=options.useDualstackEndpoint)&&_b5,forcePathStyle:null!=(_c3=options.forcePathStyle)&&_c3,useAccelerateEndpoint:null!=(_d2=options.useAccelerateEndpoint)&&_d2,useGlobalEndpoint:null!=(_e2=options.useGlobalEndpoint)&&_e2,disableMultiregionAccessPoints:null!=(_f=options.disableMultiregionAccessPoints)&&_f,defaultSigningName:"s3",clientContextParams:null!=(_g=options.clientContextParams)?_g:{}})};commonParams={ForcePathStyle:{type:"clientContextParams",name:"forcePathStyle"},UseArnRegion:{type:"clientContextParams",name:"useArnRegion"},DisableMultiRegionAccessPoints:{type:"clientContextParams",name:"disableMultiregionAccessPoints"},Accelerate:{type:"clientContextParams",name:"useAccelerateEndpoint"},DisableS3ExpressSessionAuth:{type:"clientContextParams",name:"disableS3ExpressSessionAuth"},UseGlobalEndpoint:{type:"builtInParams",name:"useGlobalEndpoint"},UseFIPS:{type:"builtInParams",name:"useFipsEndpoint"},Endpoint:{type:"builtInParams",name:"endpoint"},Region:{type:"builtInParams",name:"region"},UseDualStack:{type:"builtInParams",name:"useDualstackEndpoint"}};S3ServiceException=class _S3ServiceException extends ServiceException{constructor(options){super(options);Object.setPrototypeOf(this,_S3ServiceException.prototype)}};NoSuchUpload=class _NoSuchUpload extends S3ServiceException{constructor(opts){super({name:"NoSuchUpload",$fault:"client",...opts});__publicField(this,"name","NoSuchUpload");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchUpload.prototype)}};AccessDenied=class _AccessDenied extends S3ServiceException{constructor(opts){super({name:"AccessDenied",$fault:"client",...opts});__publicField(this,"name","AccessDenied");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_AccessDenied.prototype)}};ObjectNotInActiveTierError=class _ObjectNotInActiveTierError extends S3ServiceException{constructor(opts){super({name:"ObjectNotInActiveTierError",$fault:"client",...opts});__publicField(this,"name","ObjectNotInActiveTierError");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_ObjectNotInActiveTierError.prototype)}};BucketAlreadyExists=class _BucketAlreadyExists extends S3ServiceException{constructor(opts){super({name:"BucketAlreadyExists",$fault:"client",...opts});__publicField(this,"name","BucketAlreadyExists");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_BucketAlreadyExists.prototype)}};BucketAlreadyOwnedByYou=class _BucketAlreadyOwnedByYou extends S3ServiceException{constructor(opts){super({name:"BucketAlreadyOwnedByYou",$fault:"client",...opts});__publicField(this,"name","BucketAlreadyOwnedByYou");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_BucketAlreadyOwnedByYou.prototype)}};NoSuchBucket=class _NoSuchBucket extends S3ServiceException{constructor(opts){super({name:"NoSuchBucket",$fault:"client",...opts});__publicField(this,"name","NoSuchBucket");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchBucket.prototype)}};InvalidObjectState=class _InvalidObjectState extends S3ServiceException{constructor(opts){super({name:"InvalidObjectState",$fault:"client",...opts});__publicField(this,"name","InvalidObjectState");__publicField(this,"$fault","client");__publicField(this,"StorageClass");__publicField(this,"AccessTier");Object.setPrototypeOf(this,_InvalidObjectState.prototype);this.StorageClass=opts.StorageClass;this.AccessTier=opts.AccessTier}};NoSuchKey=class _NoSuchKey extends S3ServiceException{constructor(opts){super({name:"NoSuchKey",$fault:"client",...opts});__publicField(this,"name","NoSuchKey");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NoSuchKey.prototype)}};NotFound=class _NotFound extends S3ServiceException{constructor(opts){super({name:"NotFound",$fault:"client",...opts});__publicField(this,"name","NotFound");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_NotFound.prototype)}};EncryptionTypeMismatch=class _EncryptionTypeMismatch extends S3ServiceException{constructor(opts){super({name:"EncryptionTypeMismatch",$fault:"client",...opts});__publicField(this,"name","EncryptionTypeMismatch");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_EncryptionTypeMismatch.prototype)}};InvalidRequest=class _InvalidRequest extends S3ServiceException{constructor(opts){super({name:"InvalidRequest",$fault:"client",...opts});__publicField(this,"name","InvalidRequest");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_InvalidRequest.prototype)}};InvalidWriteOffset=class _InvalidWriteOffset extends S3ServiceException{constructor(opts){super({name:"InvalidWriteOffset",$fault:"client",...opts});__publicField(this,"name","InvalidWriteOffset");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_InvalidWriteOffset.prototype)}};TooManyParts=class _TooManyParts extends S3ServiceException{constructor(opts){super({name:"TooManyParts",$fault:"client",...opts});__publicField(this,"name","TooManyParts");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_TooManyParts.prototype)}};IdempotencyParameterMismatch=class _IdempotencyParameterMismatch extends S3ServiceException{constructor(opts){super({name:"IdempotencyParameterMismatch",$fault:"client",...opts});__publicField(this,"name","IdempotencyParameterMismatch");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_IdempotencyParameterMismatch.prototype)}};ObjectAlreadyInActiveTierError=class _ObjectAlreadyInActiveTierError extends S3ServiceException{constructor(opts){super({name:"ObjectAlreadyInActiveTierError",$fault:"client",...opts});__publicField(this,"name","ObjectAlreadyInActiveTierError");__publicField(this,"$fault","client");Object.setPrototypeOf(this,_ObjectAlreadyInActiveTierError.prototype)}};_AC="AccelerateConfiguration";_ACL="AccessControlList";_ACLn="AnalyticsConfigurationList";_ACP="AccessControlPolicy";_ACT="AccessControlTranslation";_ACn="AnalyticsConfiguration";_AIMU="AbortIncompleteMultipartUpload";_AR="AcceptRanges";_AS="AbacStatus";_AT="AccessTier";_B="Bucket";_BA="BucketArn";_BET="BlockedEncryptionTypes";_BGR="BypassGovernanceRetention";_BKE="BucketKeyEnabled";_BLS="BucketLoggingStatus";_BP="BytesProcessed";_BPA="BlockPublicAcls";_BPP="BlockPublicPolicy";_BR="BucketRegion";_BRy="BytesReturned";_BS="BytesScanned";_Bo="Body";_Bu="Buckets";_C="Checksum";_CA="ChecksumAlgorithm";_CBC="CreateBucketConfiguration";_CC="CacheControl";_CCRC="ChecksumCRC32";_CCRCC="ChecksumCRC32C";_CCRCNVME="ChecksumCRC64NVME";_CC_="Cache-Control";_CD_="Content-Disposition";_CDo="ContentDisposition";_CE_="Content-Encoding";_CEo="ContentEncoding";_CL="ContentLanguage";_CL_="Content-Language";_CL__="Content-Length";_CLo="ContentLength";_CM="Content-MD5";_CMD="ContentMD5";_CMUo="CompleteMultipartUpload";_COR="CopyObjectResult";_CORSC="CORSConfiguration";_CPR="CopyPartResult";_CPom="CommonPrefixes";_CR="ContentRange";_CR_="Content-Range";_CS="CopySource";_CSHA="ChecksumSHA1";_CSHAh="ChecksumSHA256";_CSIM="CopySourceIfMatch";_CSIMS="CopySourceIfModifiedSince";_CSINM="CopySourceIfNoneMatch";_CSIUS="CopySourceIfUnmodifiedSince";_CSSSECA="CopySourceSSECustomerAlgorithm";_CSSSECK="CopySourceSSECustomerKey";_CSVI="CopySourceVersionId";_CSo="ConfigurationState";_CT="ChecksumType";_CT_="Content-Type";_CTo="ContentType";_CTon="ContinuationToken";_Cr="Credentials";_D="Days";_DM="DeleteMarker";_DMR="DeleteMarkerReplication";_DMe="DeleteMarkers";_DN="DisplayName";_DRe="DefaultRetention";_DRes="DestinationResult";_De="Delete";_Deli="Delimiter";_Des="Destination";_E="Expiration";_EBC="EventBridgeConfiguration";_EBO="ExpectedBucketOwner";_EC="EncryptionConfiguration";_EDr="ErrorDocument";_EM="ErrorMessage";_EOR="ExistingObjectReplication";_ES="ExpiresString";_ESBO="ExpectedSourceBucketOwner";_ET="EncryptionType";_ETa="ETag";_ETn="EncodingType";_ETx="ExpressionType";_En="Encryption";_Err="Error";_Ev="Events";_Ex="Expires";_F="Filter";_FD="FieldDelimiter";_FR="FilterRule";_G="Grants";_GBMCR="GetBucketMetadataConfigurationResult";_GBMTCR="GetBucketMetadataTableConfigurationResult";_GFC="GrantFullControl";_GJP="GlacierJobParameters";_GR="GrantRead";_GRACP="GrantReadACP";_GW="GrantWrite";_GWACP="GrantWriteACP";_I="Id";_IC="InventoryConfiguration";_ICL="InventoryConfigurationList";_IDn="IndexDocument";_IM="IfMatch";_IMS_="If-Modified-Since";_IM_="If-Match";_INM="IfNoneMatch";_INM_="If-None-Match";_IPA="IgnorePublicAcls";_IS="InputSerialization";_IT="IsTruncated";_ITC="IntelligentTieringConfiguration";_ITCL="IntelligentTieringConfigurationList";_ITCR="InventoryTableConfigurationResult";_ITCn="InventoryTableConfiguration";_IUS="IfUnmodifiedSince";_IUS_="If-Unmodified-Since";_In="Initiator";_JTC="JournalTableConfiguration";_JTCR="JournalTableConfigurationResult";_K="Key";_KM="KeyMarker";_L="Location";_LBRi="ListBucketResult";_LC="LocationConstraint";_LCi="LifecycleConfiguration";_LE="LoggingEnabled";_LH="LegalHold";_LM="LastModified";_LM_="Last-Modified";_M="Metadata";_MC="MetadataConfiguration";_MCL="MetricsConfigurationList";_MCR="MetadataConfigurationResult";_MCe="MetricsConfiguration";_ME="MetadataEntry";_MK="MaxKeys";_MM="MissingMeta";_MP="MaxParts";_MTC="MetadataTableConfiguration";_MTCR="MetadataTableConfigurationResult";_MU="MultipartUpload";_N="Name";_NC="NotificationConfiguration";_NCT="NextContinuationToken";_ND="NoncurrentDays";_NKM="NextKeyMarker";_NNV="NewerNoncurrentVersions";_NPNM="NextPartNumberMarker";_NVE="NoncurrentVersionExpiration";_NVTo="NoncurrentVersionTransition";_O="Owner";_OC="OwnershipControls";_OE="ObjectEncryption";_OL="OutputLocation";_OLC="ObjectLockConfiguration";_OLLHS="ObjectLockLegalHoldStatus";_OLM="ObjectLockMode";_OLRUD="ObjectLockRetainUntilDate";_OO="ObjectOwnership";_OOA="OptionalObjectAttributes";_OSGT="ObjectSizeGreaterThan";_OSLT="ObjectSizeLessThan";_OSu="OutputSerialization";_P="Prefix";_PABC="PublicAccessBlockConfiguration";_PC="PartsCount";_PN="PartNumber";_PNM="PartNumberMarker";_PP="PartitionedPrefix";_PS="PolicyStatus";_Pa="Parts";_Pe="Permission";_QC="QuoteCharacter";_QCue="QueueConfiguration";_QEC="QuoteEscapeCharacter";_R="Rules";_RART="RedirectAllRequestsTo";_RC="RequestCharged";_RCC="ResponseCacheControl";_RCD="ResponseContentDisposition";_RCE="ResponseContentEncoding";_RCL="ResponseContentLanguage";_RCT="ResponseContentType";_RCe="ReplicationConfiguration";_RD="RecordDelimiter";_RE="ResponseExpires";_REe="RecordExpiration";_RM="ReplicaModifications";_RP="RequestPayer";_RPB="RestrictPublicBuckets";_RPC="RequestPaymentConfiguration";_RPe="RequestProgress";_RR="RoutingRules";_RRes="RestoreRequest";_RS="ReplicationStatus";_RSe="RestoreStatus";_RT="ReplicationTime";_Ra="Range";_Re="Restore";_Ret="Retention";_Ru="Rule";_S="Status";_SA="StartAfter";_SAK="SecretAccessKey";_SBD="S3BucketDestination";_SC="StorageClass";_SCA="StorageClassAnalysis";_SK="SSE-KMS";_SKEO="SseKmsEncryptedObjects";_SP="SelectParameters";_SPi="SimplePrefix";_SSC="SourceSelectionCriteria";_SSE="ServerSideEncryption";_SSEC="ServerSideEncryptionConfiguration";_SSECA="SSECustomerAlgorithm";_SSECK="SSECustomerKey";_SSECKMD="SSECustomerKeyMD5";_SSEKMSEC="SSEKMSEncryptionContext";_SSEKMSKI="SSEKMSKeyId";_ST="SessionToken";_STD="S3TablesDestination";_STDR="S3TablesDestinationResult";_Si="Size";_T="Tags";_TA="TableArn";_TBA="TableBucketArn";_TC="TagCount";_TCop="TopicConfiguration";_TDMOS="TransitionDefaultMinimumObjectSize";_TG="TargetGrants";_TN="TableNamespace";_TNa="TableName";_TOKF="TargetObjectKeyFormat";_TS="TagSet";_Ta="Tag";_Tag="Tagging";_Ty="Type";_UI="UploadId";_UIM="UploadIdMarker";_UM="UserMetadata";_V="Value";_VC="VersioningConfiguration";_VI="VersionId";_VIM="VersionIdMarker";_WC="WebsiteConfiguration";_WRL="WebsiteRedirectLocation";_ar="accept-ranges";_c2="client";_ct="continuation-token";_d="delimiter";_e="error";_eP="eventPayload";_en="endpoint";_et="encoding-type";_h="http";_hC="httpChecksum";_hE="httpError";_hH="httpHeader";_hL="hostLabel";_hP="httpPayload";_hPH="httpPrefixHeaders";_hQ="httpQuery";_hi="http://www.w3.org/2001/XMLSchema-instance";_i="id";_iT="idempotencyToken";_km="key-marker";_mk="max-keys";_p="prefix";_pN="partNumber";_rcc="response-cache-control";_rcd="response-content-disposition";_rce="response-content-encoding";_rcl="response-content-language";_rct="response-content-type";_re="response-expires";_st="streaming";_uI="uploadId";_vI="versionId";_xA="xmlAttribute";_xF="xmlFlattened";_xN="xmlName";_xNm="xmlNamespace";_xaa="x-amz-acl";_xaad="x-amz-abort-date";_xaari="x-amz-abort-rule-id";_xaba="x-amz-bucket-arn";_xabgr="x-amz-bypass-governance-retention";_xabolt="x-amz-bucket-object-lock-token";_xaca="x-amz-checksum-algorithm";_xacc="x-amz-checksum-crc32";_xacc_="x-amz-checksum-crc32c";_xacc__="x-amz-checksum-crc64nvme";_xacm="x-amz-checksum-mode";_xacs="x-amz-checksum-sha1";_xacs_="x-amz-checksum-sha256";_xacsim="x-amz-copy-source-if-match";_xacsims="x-amz-copy-source-if-modified-since";_xacsinm="x-amz-copy-source-if-none-match";_xacsius="x-amz-copy-source-if-unmodified-since";_xacssseca="x-amz-copy-source-server-side-encryption-customer-algorithm";_xacssseck="x-amz-copy-source-server-side-encryption-customer-key";_xacssseckM="x-amz-copy-source-server-side-encryption-customer-key-MD5";_xacsvi="x-amz-copy-source-version-id";_xact="x-amz-checksum-type";_xadm="x-amz-delete-marker";_xae="x-amz-expiration";_xaebo="x-amz-expected-bucket-owner";_xagfc="x-amz-grant-full-control";_xagr="x-amz-grant-read";_xagra="x-amz-grant-read-acp";_xagw="x-amz-grant-write";_xagwa="x-amz-grant-write-acp";_xam="x-amz-meta-";_xamm="x-amz-missing-meta";_xampc="x-amz-mp-parts-count";_xaollh="x-amz-object-lock-legal-hold";_xaolm="x-amz-object-lock-mode";_xaolrud="x-amz-object-lock-retain-until-date";_xaooa="x-amz-optional-object-attributes";_xar="x-amz-restore";_xarc="x-amz-request-charged";_xarp="x-amz-request-payer";_xars="x-amz-replication-status";_xasc="x-amz-storage-class";_xasca="x-amz-sdk-checksum-algorithm";_xasebo="x-amz-source-expected-bucket-owner";_xasse="x-amz-server-side-encryption";_xasseakki="x-amz-server-side-encryption-aws-kms-key-id";_xassebke="x-amz-server-side-encryption-bucket-key-enabled";_xassec="x-amz-server-side-encryption-context";_xasseca="x-amz-server-side-encryption-customer-algorithm";_xasseck="x-amz-server-side-encryption-customer-key";_xasseckM="x-amz-server-side-encryption-customer-key-MD5";_xat="x-amz-tagging";_xatc="x-amz-tagging-count";_xatdmos="x-amz-transition-default-minimum-object-size";_xavi="x-amz-version-id";_xawrl="x-amz-website-redirect-location";n0="com.amazonaws.s3";S3ServiceException$=[-3,"smithy.ts.sdk.synthetic.com.amazonaws.s3","S3ServiceException",0,[],[]];(_s_registry=TypeRegistry.for("smithy.ts.sdk.synthetic.com.amazonaws.s3")).registerError(S3ServiceException$,S3ServiceException);n0_registry=TypeRegistry.for(n0);AccessDenied$=[-3,n0,"AccessDenied",{[_e]:_c2,[_hE]:403},[],[]];n0_registry.registerError(AccessDenied$,AccessDenied);BucketAlreadyExists$=[-3,n0,"BucketAlreadyExists",{[_e]:_c2,[_hE]:409},[],[]];n0_registry.registerError(BucketAlreadyExists$,BucketAlreadyExists);BucketAlreadyOwnedByYou$=[-3,n0,"BucketAlreadyOwnedByYou",{[_e]:_c2,[_hE]:409},[],[]];n0_registry.registerError(BucketAlreadyOwnedByYou$,BucketAlreadyOwnedByYou);EncryptionTypeMismatch$=[-3,n0,"EncryptionTypeMismatch",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(EncryptionTypeMismatch$,EncryptionTypeMismatch);IdempotencyParameterMismatch$=[-3,n0,"IdempotencyParameterMismatch",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(IdempotencyParameterMismatch$,IdempotencyParameterMismatch);InvalidObjectState$=[-3,n0,"InvalidObjectState",{[_e]:_c2,[_hE]:403},[_SC,_AT],[0,0]];n0_registry.registerError(InvalidObjectState$,InvalidObjectState);InvalidRequest$=[-3,n0,"InvalidRequest",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(InvalidRequest$,InvalidRequest);InvalidWriteOffset$=[-3,n0,"InvalidWriteOffset",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(InvalidWriteOffset$,InvalidWriteOffset);NoSuchBucket$=[-3,n0,"NoSuchBucket",{[_e]:_c2,[_hE]:404},[],[]];n0_registry.registerError(NoSuchBucket$,NoSuchBucket);NoSuchKey$=[-3,n0,"NoSuchKey",{[_e]:_c2,[_hE]:404},[],[]];n0_registry.registerError(NoSuchKey$,NoSuchKey);NoSuchUpload$=[-3,n0,"NoSuchUpload",{[_e]:_c2,[_hE]:404},[],[]];n0_registry.registerError(NoSuchUpload$,NoSuchUpload);NotFound$=[-3,n0,"NotFound",{[_e]:_c2},[],[]];n0_registry.registerError(NotFound$,NotFound);ObjectAlreadyInActiveTierError$=[-3,n0,"ObjectAlreadyInActiveTierError",{[_e]:_c2,[_hE]:403},[],[]];n0_registry.registerError(ObjectAlreadyInActiveTierError$,ObjectAlreadyInActiveTierError);ObjectNotInActiveTierError$=[-3,n0,"ObjectNotInActiveTierError",{[_e]:_c2,[_hE]:403},[],[]];n0_registry.registerError(ObjectNotInActiveTierError$,ObjectNotInActiveTierError);TooManyParts$=[-3,n0,"TooManyParts",{[_e]:_c2,[_hE]:400},[],[]];n0_registry.registerError(TooManyParts$,TooManyParts);errorTypeRegistries=[_s_registry,n0_registry];CopySourceSSECustomerKey=[0,n0,_CSSSECK,8,0];NonEmptyKmsKeyArnString=[0,n0,"NonEmptyKmsKeyArnString",8,0];SessionCredentialValue=[0,n0,"SessionCredentialValue",8,0];SSECustomerKey=[0,n0,_SSECK,8,0];SSEKMSEncryptionContext=[0,n0,_SSEKMSEC,8,0];SSEKMSKeyId=[0,n0,_SSEKMSKI,8,0];StreamingBlob=[0,n0,"StreamingBlob",{[_st]:1},42];AbacStatus$=[3,n0,_AS,0,[_S],[0]];AbortIncompleteMultipartUpload$=[3,n0,_AIMU,0,["DaysAfterInitiation"],[1]];AbortMultipartUploadOutput$=[3,n0,"AbortMultipartUploadOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];AbortMultipartUploadRequest$=[3,n0,"AbortMultipartUploadRequest",0,[_B,_K,_UI,_RP,_EBO,"IfMatchInitiatedTime"],[[0,1],[0,1],[0,{[_hQ]:_uI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[6,{[_hH]:"x-amz-if-match-initiated-time"}]],3];AccelerateConfiguration$=[3,n0,_AC,0,[_S],[0]];AccessControlPolicy$=[3,n0,_ACP,0,[_G,_O],[[()=>Grants,{[_xN]:_ACL}],()=>Owner$]];AccessControlTranslation$=[3,n0,_ACT,0,[_O],[0],1];AnalyticsAndOperator$=[3,n0,"AnalyticsAndOperator",0,[_P,_T],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}]]];AnalyticsConfiguration$=[3,n0,_ACn,0,[_I,_SCA,_F],[0,()=>StorageClassAnalysis$,[()=>AnalyticsFilter$,0]],2];AnalyticsExportDestination$=[3,n0,"AnalyticsExportDestination",0,[_SBD],[()=>AnalyticsS3BucketDestination$],1];AnalyticsS3BucketDestination$=[3,n0,"AnalyticsS3BucketDestination",0,["Format",_B,"BucketAccountId",_P],[0,0,0,0],2];BlockedEncryptionTypes$=[3,n0,_BET,0,[_ET],[[()=>EncryptionTypeList,{[_xF]:1}]]];Bucket$=[3,n0,_B,0,[_N,"CreationDate",_BR,_BA],[0,4,0,0]];BucketInfo$=[3,n0,"BucketInfo",0,["DataRedundancy",_Ty],[0,0]];BucketLifecycleConfiguration$=[3,n0,"BucketLifecycleConfiguration",0,[_R],[[()=>LifecycleRules,{[_xF]:1,[_xN]:_Ru}]],1];BucketLoggingStatus$=[3,n0,_BLS,0,[_LE],[[()=>LoggingEnabled$,0]]];Checksum$=[3,n0,_C,0,[_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT],[0,0,0,0,0,0]];CommonPrefix$=[3,n0,"CommonPrefix",0,[_P],[0]];CompletedMultipartUpload$=[3,n0,"CompletedMultipartUpload",0,[_Pa],[[()=>CompletedPartList,{[_xF]:1,[_xN]:"Part"}]]];CompletedPart$=[3,n0,"CompletedPart",0,[_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_PN],[0,0,0,0,0,0,1]];CompleteMultipartUploadOutput$=[3,n0,"CompleteMultipartUploadOutput",{[_xN]:"CompleteMultipartUploadResult"},[_L,_B,_K,_E,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_SSE,_VI,_SSEKMSKI,_BKE,_RC],[0,0,0,[0,{[_hH]:_xae}],0,0,0,0,0,0,0,[0,{[_hH]:_xasse}],[0,{[_hH]:_xavi}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];CompleteMultipartUploadRequest$=[3,n0,"CompleteMultipartUploadRequest",0,[_B,_K,_UI,_MU,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,"MpuObjectSize",_RP,_EBO,_IM,_INM,_SSECA,_SSECK,_SSECKMD],[[0,1],[0,1],[0,{[_hQ]:_uI}],[()=>CompletedMultipartUpload$,{[_hP]:1,[_xN]:_CMUo}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[1,{[_hH]:"x-amz-mp-object-size"}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}]],3];Condition$=[3,n0,"Condition",0,["HttpErrorCodeReturnedEquals","KeyPrefixEquals"],[0,0]];ContinuationEvent$=[3,n0,"ContinuationEvent",0,[],[]];CopyObjectOutput$=[3,n0,"CopyObjectOutput",0,[_COR,_E,_CSVI,_VI,_SSE,_SSECA,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RC],[[()=>CopyObjectResult$,16],[0,{[_hH]:_xae}],[0,{[_hH]:_xacsvi}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];CopyObjectRequest$=[3,n0,"CopyObjectRequest",0,[_B,_CS,_K,"ACL",_CC,_CA,_CDo,_CEo,_CL,_CTo,_CSIM,_CSIMS,_CSINM,_CSIUS,_Ex,_GFC,_GR,_GRACP,_GWACP,_IM,_INM,_M,"MetadataDirective","TaggingDirective",_SSE,_SC,_WRL,_SSECA,_SSECK,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_CSSSECA,_CSSSECK,"CopySourceSSECustomerKeyMD5",_RP,_Tag,_OLM,_OLRUD,_OLLHS,_EBO,_ESBO],[[0,1],[0,{[_hH]:"x-amz-copy-source"}],[0,1],[0,{[_hH]:_xaa}],[0,{[_hH]:_CC_}],[0,{[_hH]:_xaca}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CT_}],[0,{[_hH]:_xacsim}],[4,{[_hH]:_xacsims}],[0,{[_hH]:_xacsinm}],[4,{[_hH]:_xacsius}],[4,{[_hH]:_Ex}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagwa}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[128,{[_hPH]:_xam}],[0,{[_hH]:"x-amz-metadata-directive"}],[0,{[_hH]:"x-amz-tagging-directive"}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xacssseca}],[()=>CopySourceSSECustomerKey,{[_hH]:_xacssseck}],[0,{[_hH]:_xacssseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xat}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasebo}]],3];CopyObjectResult$=[3,n0,_COR,0,[_ETa,_LM,_CT,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[0,4,0,0,0,0,0,0]];CopyPartResult$=[3,n0,_CPR,0,[_ETa,_LM,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[0,4,0,0,0,0,0]];CORSConfiguration$=[3,n0,_CORSC,0,["CORSRules"],[[()=>CORSRules,{[_xF]:1,[_xN]:"CORSRule"}]],1];CORSRule$=[3,n0,"CORSRule",0,["AllowedMethods","AllowedOrigins","ID","AllowedHeaders","ExposeHeaders","MaxAgeSeconds"],[[64,{[_xF]:1,[_xN]:"AllowedMethod"}],[64,{[_xF]:1,[_xN]:"AllowedOrigin"}],0,[64,{[_xF]:1,[_xN]:"AllowedHeader"}],[64,{[_xF]:1,[_xN]:"ExposeHeader"}],1],2];CreateBucketConfiguration$=[3,n0,_CBC,0,[_LC,_L,_B,_T],[0,()=>LocationInfo$,()=>BucketInfo$,[()=>TagSet,0]]];CreateBucketMetadataConfigurationRequest$=[3,n0,"CreateBucketMetadataConfigurationRequest",0,[_B,_MC,_CMD,_CA,_EBO],[[0,1],[()=>MetadataConfiguration$,{[_hP]:1,[_xN]:_MC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];CreateBucketMetadataTableConfigurationRequest$=[3,n0,"CreateBucketMetadataTableConfigurationRequest",0,[_B,_MTC,_CMD,_CA,_EBO],[[0,1],[()=>MetadataTableConfiguration$,{[_hP]:1,[_xN]:_MTC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];CreateBucketOutput$=[3,n0,"CreateBucketOutput",0,[_L,_BA],[[0,{[_hH]:_L}],[0,{[_hH]:_xaba}]]];CreateBucketRequest$=[3,n0,"CreateBucketRequest",0,[_B,"ACL",_CBC,_GFC,_GR,_GRACP,_GW,_GWACP,"ObjectLockEnabledForBucket",_OO,"BucketNamespace"],[[0,1],[0,{[_hH]:_xaa}],[()=>CreateBucketConfiguration$,{[_hP]:1,[_xN]:_CBC}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagw}],[0,{[_hH]:_xagwa}],[2,{[_hH]:"x-amz-bucket-object-lock-enabled"}],[0,{[_hH]:"x-amz-object-ownership"}],[0,{[_hH]:"x-amz-bucket-namespace"}]],1];CreateMultipartUploadOutput$=[3,n0,"CreateMultipartUploadOutput",{[_xN]:"InitiateMultipartUploadResult"},["AbortDate","AbortRuleId",_B,_K,_UI,_SSE,_SSECA,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RC,_CA,_CT],[[4,{[_hH]:_xaad}],[0,{[_hH]:_xaari}],[0,{[_xN]:_B}],0,0,[0,{[_hH]:_xasse}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}],[0,{[_hH]:_xaca}],[0,{[_hH]:_xact}]]];CreateMultipartUploadRequest$=[3,n0,"CreateMultipartUploadRequest",0,[_B,_K,"ACL",_CC,_CDo,_CEo,_CL,_CTo,_Ex,_GFC,_GR,_GRACP,_GWACP,_M,_SSE,_SC,_WRL,_SSECA,_SSECK,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RP,_Tag,_OLM,_OLRUD,_OLLHS,_EBO,_CA,_CT],[[0,1],[0,1],[0,{[_hH]:_xaa}],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CT_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagwa}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xat}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xaca}],[0,{[_hH]:_xact}]],2];CreateSessionOutput$=[3,n0,"CreateSessionOutput",{[_xN]:"CreateSessionResult"},[_Cr,_SSE,_SSEKMSKI,_SSEKMSEC,_BKE],[[()=>SessionCredentials$,{[_xN]:_Cr}],[0,{[_hH]:_xasse}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}]],1];CreateSessionRequest$=[3,n0,"CreateSessionRequest",0,[_B,"SessionMode",_SSE,_SSEKMSKI,_SSEKMSEC,_BKE],[[0,1],[0,{[_hH]:"x-amz-create-session-mode"}],[0,{[_hH]:_xasse}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}]],1];CSVInput$=[3,n0,"CSVInput",0,["FileHeaderInfo","Comments",_QEC,_RD,_FD,_QC,"AllowQuotedRecordDelimiter"],[0,0,0,0,0,0,2]];CSVOutput$=[3,n0,"CSVOutput",0,["QuoteFields",_QEC,_RD,_FD,_QC],[0,0,0,0,0]];DefaultRetention$=[3,n0,_DRe,0,["Mode",_D,"Years"],[0,1,1]];Delete$=[3,n0,_De,0,["Objects","Quiet"],[[()=>ObjectIdentifierList,{[_xF]:1,[_xN]:"Object"}],2],1];DeleteBucketAnalyticsConfigurationRequest$=[3,n0,"DeleteBucketAnalyticsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketCorsRequest$=[3,n0,"DeleteBucketCorsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketEncryptionRequest$=[3,n0,"DeleteBucketEncryptionRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketIntelligentTieringConfigurationRequest$=[3,n0,"DeleteBucketIntelligentTieringConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketInventoryConfigurationRequest$=[3,n0,"DeleteBucketInventoryConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketLifecycleRequest$=[3,n0,"DeleteBucketLifecycleRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketMetadataConfigurationRequest$=[3,n0,"DeleteBucketMetadataConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketMetadataTableConfigurationRequest$=[3,n0,"DeleteBucketMetadataTableConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketMetricsConfigurationRequest$=[3,n0,"DeleteBucketMetricsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];DeleteBucketOwnershipControlsRequest$=[3,n0,"DeleteBucketOwnershipControlsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketPolicyRequest$=[3,n0,"DeleteBucketPolicyRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketReplicationRequest$=[3,n0,"DeleteBucketReplicationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketRequest$=[3,n0,"DeleteBucketRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketTaggingRequest$=[3,n0,"DeleteBucketTaggingRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeleteBucketWebsiteRequest$=[3,n0,"DeleteBucketWebsiteRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];DeletedObject$=[3,n0,"DeletedObject",0,[_K,_VI,_DM,"DeleteMarkerVersionId"],[0,0,2,0]];DeleteMarkerEntry$=[3,n0,"DeleteMarkerEntry",0,[_O,_K,_VI,"IsLatest",_LM],[()=>Owner$,0,0,2,4]];DeleteMarkerReplication$=[3,n0,_DMR,0,[_S],[0]];DeleteObjectOutput$=[3,n0,"DeleteObjectOutput",0,[_DM,_VI,_RC],[[2,{[_hH]:_xadm}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xarc}]]];DeleteObjectRequest$=[3,n0,"DeleteObjectRequest",0,[_B,_K,"MFA",_VI,_RP,_BGR,_EBO,_IM,"IfMatchLastModifiedTime","IfMatchSize"],[[0,1],[0,1],[0,{[_hH]:"x-amz-mfa"}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[2,{[_hH]:_xabgr}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_IM_}],[6,{[_hH]:"x-amz-if-match-last-modified-time"}],[1,{[_hH]:"x-amz-if-match-size"}]],2];DeleteObjectsOutput$=[3,n0,"DeleteObjectsOutput",{[_xN]:"DeleteResult"},["Deleted",_RC,"Errors"],[[()=>DeletedObjects,{[_xF]:1}],[0,{[_hH]:_xarc}],[()=>Errors,{[_xF]:1,[_xN]:_Err}]]];DeleteObjectsRequest$=[3,n0,"DeleteObjectsRequest",0,[_B,_De,"MFA",_RP,_BGR,_EBO,_CA],[[0,1],[()=>Delete$,{[_hP]:1,[_xN]:_De}],[0,{[_hH]:"x-amz-mfa"}],[0,{[_hH]:_xarp}],[2,{[_hH]:_xabgr}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasca}]],2];DeleteObjectTaggingOutput$=[3,n0,"DeleteObjectTaggingOutput",0,[_VI],[[0,{[_hH]:_xavi}]]];DeleteObjectTaggingRequest$=[3,n0,"DeleteObjectTaggingRequest",0,[_B,_K,_VI,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xaebo}]],2];DeletePublicAccessBlockRequest$=[3,n0,"DeletePublicAccessBlockRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];Destination$=[3,n0,_Des,0,[_B,"Account",_SC,_ACT,_EC,_RT,"Metrics"],[0,0,0,()=>AccessControlTranslation$,()=>EncryptionConfiguration$,()=>ReplicationTime$,()=>Metrics$],1];DestinationResult$=[3,n0,_DRes,0,["TableBucketType",_TBA,_TN],[0,0,0]];Encryption$=[3,n0,_En,0,[_ET,"KMSKeyId","KMSContext"],[0,[()=>SSEKMSKeyId,0],0],1];EncryptionConfiguration$=[3,n0,_EC,0,["ReplicaKmsKeyID"],[0]];EndEvent$=[3,n0,"EndEvent",0,[],[]];_Error$=[3,n0,_Err,0,[_K,_VI,"Code","Message"],[0,0,0,0]];ErrorDetails$=[3,n0,"ErrorDetails",0,["ErrorCode",_EM],[0,0]];ErrorDocument$=[3,n0,_EDr,0,[_K],[0],1];EventBridgeConfiguration$=[3,n0,_EBC,0,[],[]];ExistingObjectReplication$=[3,n0,_EOR,0,[_S],[0],1];FilterRule$=[3,n0,_FR,0,[_N,_V],[0,0]];GetBucketAbacOutput$=[3,n0,"GetBucketAbacOutput",0,[_AS],[[()=>AbacStatus$,16]]];GetBucketAbacRequest$=[3,n0,"GetBucketAbacRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketAccelerateConfigurationOutput$=[3,n0,"GetBucketAccelerateConfigurationOutput",{[_xN]:_AC},[_S,_RC],[0,[0,{[_hH]:_xarc}]]];GetBucketAccelerateConfigurationRequest$=[3,n0,"GetBucketAccelerateConfigurationRequest",0,[_B,_EBO,_RP],[[0,1],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],1];GetBucketAclOutput$=[3,n0,"GetBucketAclOutput",{[_xN]:_ACP},[_O,_G],[()=>Owner$,[()=>Grants,{[_xN]:_ACL}]]];GetBucketAclRequest$=[3,n0,"GetBucketAclRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketAnalyticsConfigurationOutput$=[3,n0,"GetBucketAnalyticsConfigurationOutput",0,[_ACn],[[()=>AnalyticsConfiguration$,16]]];GetBucketAnalyticsConfigurationRequest$=[3,n0,"GetBucketAnalyticsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketCorsOutput$=[3,n0,"GetBucketCorsOutput",{[_xN]:_CORSC},["CORSRules"],[[()=>CORSRules,{[_xF]:1,[_xN]:"CORSRule"}]]];GetBucketCorsRequest$=[3,n0,"GetBucketCorsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketEncryptionOutput$=[3,n0,"GetBucketEncryptionOutput",0,[_SSEC],[[()=>ServerSideEncryptionConfiguration$,16]]];GetBucketEncryptionRequest$=[3,n0,"GetBucketEncryptionRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketIntelligentTieringConfigurationOutput$=[3,n0,"GetBucketIntelligentTieringConfigurationOutput",0,[_ITC],[[()=>IntelligentTieringConfiguration$,16]]];GetBucketIntelligentTieringConfigurationRequest$=[3,n0,"GetBucketIntelligentTieringConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketInventoryConfigurationOutput$=[3,n0,"GetBucketInventoryConfigurationOutput",0,[_IC],[[()=>InventoryConfiguration$,16]]];GetBucketInventoryConfigurationRequest$=[3,n0,"GetBucketInventoryConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketLifecycleConfigurationOutput$=[3,n0,"GetBucketLifecycleConfigurationOutput",{[_xN]:_LCi},[_R,_TDMOS],[[()=>LifecycleRules,{[_xF]:1,[_xN]:_Ru}],[0,{[_hH]:_xatdmos}]]];GetBucketLifecycleConfigurationRequest$=[3,n0,"GetBucketLifecycleConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketLocationOutput$=[3,n0,"GetBucketLocationOutput",{[_xN]:_LC},[_LC],[0]];GetBucketLocationRequest$=[3,n0,"GetBucketLocationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketLoggingOutput$=[3,n0,"GetBucketLoggingOutput",{[_xN]:_BLS},[_LE],[[()=>LoggingEnabled$,0]]];GetBucketLoggingRequest$=[3,n0,"GetBucketLoggingRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketMetadataConfigurationOutput$=[3,n0,"GetBucketMetadataConfigurationOutput",0,[_GBMCR],[[()=>GetBucketMetadataConfigurationResult$,16]]];GetBucketMetadataConfigurationRequest$=[3,n0,"GetBucketMetadataConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketMetadataConfigurationResult$=[3,n0,_GBMCR,0,[_MCR],[()=>MetadataConfigurationResult$],1];GetBucketMetadataTableConfigurationOutput$=[3,n0,"GetBucketMetadataTableConfigurationOutput",0,[_GBMTCR],[[()=>GetBucketMetadataTableConfigurationResult$,16]]];GetBucketMetadataTableConfigurationRequest$=[3,n0,"GetBucketMetadataTableConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketMetadataTableConfigurationResult$=[3,n0,_GBMTCR,0,[_MTCR,_S,_Err],[()=>MetadataTableConfigurationResult$,0,()=>ErrorDetails$],2];GetBucketMetricsConfigurationOutput$=[3,n0,"GetBucketMetricsConfigurationOutput",0,[_MCe],[[()=>MetricsConfiguration$,16]]];GetBucketMetricsConfigurationRequest$=[3,n0,"GetBucketMetricsConfigurationRequest",0,[_B,_I,_EBO],[[0,1],[0,{[_hQ]:_i}],[0,{[_hH]:_xaebo}]],2];GetBucketNotificationConfigurationRequest$=[3,n0,"GetBucketNotificationConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketOwnershipControlsOutput$=[3,n0,"GetBucketOwnershipControlsOutput",0,[_OC],[[()=>OwnershipControls$,16]]];GetBucketOwnershipControlsRequest$=[3,n0,"GetBucketOwnershipControlsRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketPolicyOutput$=[3,n0,"GetBucketPolicyOutput",0,["Policy"],[[0,16]]];GetBucketPolicyRequest$=[3,n0,"GetBucketPolicyRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketPolicyStatusOutput$=[3,n0,"GetBucketPolicyStatusOutput",0,[_PS],[[()=>PolicyStatus$,16]]];GetBucketPolicyStatusRequest$=[3,n0,"GetBucketPolicyStatusRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketReplicationOutput$=[3,n0,"GetBucketReplicationOutput",0,[_RCe],[[()=>ReplicationConfiguration$,16]]];GetBucketReplicationRequest$=[3,n0,"GetBucketReplicationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketRequestPaymentOutput$=[3,n0,"GetBucketRequestPaymentOutput",{[_xN]:_RPC},["Payer"],[0]];GetBucketRequestPaymentRequest$=[3,n0,"GetBucketRequestPaymentRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketTaggingOutput$=[3,n0,"GetBucketTaggingOutput",{[_xN]:_Tag},[_TS],[[()=>TagSet,0]],1];GetBucketTaggingRequest$=[3,n0,"GetBucketTaggingRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketVersioningOutput$=[3,n0,"GetBucketVersioningOutput",{[_xN]:_VC},[_S,"MFADelete"],[0,[0,{[_xN]:"MfaDelete"}]]];GetBucketVersioningRequest$=[3,n0,"GetBucketVersioningRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetBucketWebsiteOutput$=[3,n0,"GetBucketWebsiteOutput",{[_xN]:_WC},[_RART,_IDn,_EDr,_RR],[()=>RedirectAllRequestsTo$,()=>IndexDocument$,()=>ErrorDocument$,[()=>RoutingRules,0]]];GetBucketWebsiteRequest$=[3,n0,"GetBucketWebsiteRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetObjectAclOutput$=[3,n0,"GetObjectAclOutput",{[_xN]:_ACP},[_O,_G,_RC],[()=>Owner$,[()=>Grants,{[_xN]:_ACL}],[0,{[_hH]:_xarc}]]];GetObjectAclRequest$=[3,n0,"GetObjectAclRequest",0,[_B,_K,_VI,_RP,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetObjectAttributesOutput$=[3,n0,"GetObjectAttributesOutput",{[_xN]:"GetObjectAttributesResponse"},[_DM,_LM,_VI,_RC,_ETa,_C,"ObjectParts",_SC,"ObjectSize"],[[2,{[_hH]:_xadm}],[4,{[_hH]:_LM_}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xarc}],0,()=>Checksum$,[()=>GetObjectAttributesParts$,0],0,1]];GetObjectAttributesParts$=[3,n0,"GetObjectAttributesParts",0,["TotalPartsCount",_PNM,_NPNM,_MP,_IT,_Pa],[[1,{[_xN]:_PC}],0,0,1,2,[()=>PartsList,{[_xF]:1,[_xN]:"Part"}]]];GetObjectAttributesRequest$=[3,n0,"GetObjectAttributesRequest",0,[_B,_K,"ObjectAttributes",_VI,_MP,_PNM,_SSECA,_SSECK,_SSECKMD,_RP,_EBO],[[0,1],[0,1],[64,{[_hH]:"x-amz-object-attributes"}],[0,{[_hQ]:_vI}],[1,{[_hH]:"x-amz-max-parts"}],[0,{[_hH]:"x-amz-part-number-marker"}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],3];GetObjectLegalHoldOutput$=[3,n0,"GetObjectLegalHoldOutput",0,[_LH],[[()=>ObjectLockLegalHold$,{[_hP]:1,[_xN]:_LH}]]];GetObjectLegalHoldRequest$=[3,n0,"GetObjectLegalHoldRequest",0,[_B,_K,_VI,_RP,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetObjectLockConfigurationOutput$=[3,n0,"GetObjectLockConfigurationOutput",0,[_OLC],[[()=>ObjectLockConfiguration$,16]]];GetObjectLockConfigurationRequest$=[3,n0,"GetObjectLockConfigurationRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GetObjectOutput$=[3,n0,"GetObjectOutput",0,[_Bo,_DM,_AR,_E,_Re,_LM,_CLo,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_MM,_VI,_CC,_CDo,_CEo,_CL,_CR,_CTo,_Ex,_ES,_WRL,_SSE,_M,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_SC,_RC,_RS,_PC,_TC,_OLM,_OLRUD,_OLLHS],[[()=>StreamingBlob,16],[2,{[_hH]:_xadm}],[0,{[_hH]:_ar}],[0,{[_hH]:_xae}],[0,{[_hH]:_xar}],[4,{[_hH]:_LM_}],[1,{[_hH]:_CL__}],[0,{[_hH]:_ETa}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[1,{[_hH]:_xamm}],[0,{[_hH]:_xavi}],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CR_}],[0,{[_hH]:_CT_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_ES}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasse}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xarc}],[0,{[_hH]:_xars}],[1,{[_hH]:_xampc}],[1,{[_hH]:_xatc}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}]]];GetObjectRequest$=[3,n0,"GetObjectRequest",0,[_B,_K,_IM,"IfModifiedSince",_INM,_IUS,_Ra,_RCC,_RCD,_RCE,_RCL,_RCT,_RE,_VI,_SSECA,_SSECK,_SSECKMD,_RP,_PN,_EBO,"ChecksumMode"],[[0,1],[0,1],[0,{[_hH]:_IM_}],[4,{[_hH]:_IMS_}],[0,{[_hH]:_INM_}],[4,{[_hH]:_IUS_}],[0,{[_hH]:_Ra}],[0,{[_hQ]:_rcc}],[0,{[_hQ]:_rcd}],[0,{[_hQ]:_rce}],[0,{[_hQ]:_rcl}],[0,{[_hQ]:_rct}],[6,{[_hQ]:_re}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[1,{[_hQ]:_pN}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xacm}]],2];GetObjectRetentionOutput$=[3,n0,"GetObjectRetentionOutput",0,[_Ret],[[()=>ObjectLockRetention$,{[_hP]:1,[_xN]:_Ret}]]];GetObjectRetentionRequest$=[3,n0,"GetObjectRetentionRequest",0,[_B,_K,_VI,_RP,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetObjectTaggingOutput$=[3,n0,"GetObjectTaggingOutput",{[_xN]:_Tag},[_TS,_VI],[[()=>TagSet,0],[0,{[_hH]:_xavi}]],1];GetObjectTaggingRequest$=[3,n0,"GetObjectTaggingRequest",0,[_B,_K,_VI,_EBO,_RP],[[0,1],[0,1],[0,{[_hQ]:_vI}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],2];GetObjectTorrentOutput$=[3,n0,"GetObjectTorrentOutput",0,[_Bo,_RC],[[()=>StreamingBlob,16],[0,{[_hH]:_xarc}]]];GetObjectTorrentRequest$=[3,n0,"GetObjectTorrentRequest",0,[_B,_K,_RP,_EBO],[[0,1],[0,1],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],2];GetPublicAccessBlockOutput$=[3,n0,"GetPublicAccessBlockOutput",0,[_PABC],[[()=>PublicAccessBlockConfiguration$,16]]];GetPublicAccessBlockRequest$=[3,n0,"GetPublicAccessBlockRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];GlacierJobParameters$=[3,n0,_GJP,0,["Tier"],[0],1];Grant$=[3,n0,"Grant",0,["Grantee",_Pe],[[()=>Grantee$,{[_xNm]:["xsi",_hi]}],0]];Grantee$=[3,n0,"Grantee",0,[_Ty,_DN,"EmailAddress","ID","URI"],[[0,{[_xA]:1,[_xN]:"xsi:type"}],0,0,0,0],1];HeadBucketOutput$=[3,n0,"HeadBucketOutput",0,[_BA,"BucketLocationType","BucketLocationName",_BR,"AccessPointAlias"],[[0,{[_hH]:_xaba}],[0,{[_hH]:"x-amz-bucket-location-type"}],[0,{[_hH]:"x-amz-bucket-location-name"}],[0,{[_hH]:"x-amz-bucket-region"}],[2,{[_hH]:"x-amz-access-point-alias"}]]];HeadBucketRequest$=[3,n0,"HeadBucketRequest",0,[_B,_EBO],[[0,1],[0,{[_hH]:_xaebo}]],1];HeadObjectOutput$=[3,n0,"HeadObjectOutput",0,[_DM,_AR,_E,_Re,"ArchiveStatus",_LM,_CLo,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_ETa,_MM,_VI,_CC,_CDo,_CEo,_CL,_CTo,_CR,_Ex,_ES,_WRL,_SSE,_M,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_SC,_RC,_RS,_PC,_TC,_OLM,_OLRUD,_OLLHS],[[2,{[_hH]:_xadm}],[0,{[_hH]:_ar}],[0,{[_hH]:_xae}],[0,{[_hH]:_xar}],[0,{[_hH]:"x-amz-archive-status"}],[4,{[_hH]:_LM_}],[1,{[_hH]:_CL__}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[0,{[_hH]:_ETa}],[1,{[_hH]:_xamm}],[0,{[_hH]:_xavi}],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[0,{[_hH]:_CT_}],[0,{[_hH]:_CR_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_ES}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasse}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xarc}],[0,{[_hH]:_xars}],[1,{[_hH]:_xampc}],[1,{[_hH]:_xatc}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}]]];HeadObjectRequest$=[3,n0,"HeadObjectRequest",0,[_B,_K,_IM,"IfModifiedSince",_INM,_IUS,_Ra,_RCC,_RCD,_RCE,_RCL,_RCT,_RE,_VI,_SSECA,_SSECK,_SSECKMD,_RP,_PN,_EBO,"ChecksumMode"],[[0,1],[0,1],[0,{[_hH]:_IM_}],[4,{[_hH]:_IMS_}],[0,{[_hH]:_INM_}],[4,{[_hH]:_IUS_}],[0,{[_hH]:_Ra}],[0,{[_hQ]:_rcc}],[0,{[_hQ]:_rcd}],[0,{[_hQ]:_rce}],[0,{[_hQ]:_rcl}],[0,{[_hQ]:_rct}],[6,{[_hQ]:_re}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[1,{[_hQ]:_pN}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xacm}]],2];IndexDocument$=[3,n0,_IDn,0,["Suffix"],[0],1];Initiator$=[3,n0,_In,0,["ID",_DN],[0,0]];InputSerialization$=[3,n0,_IS,0,["CSV","CompressionType","JSON","Parquet"],[()=>CSVInput$,0,()=>JSONInput$,()=>ParquetInput$]];IntelligentTieringAndOperator$=[3,n0,"IntelligentTieringAndOperator",0,[_P,_T],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}]]];IntelligentTieringConfiguration$=[3,n0,_ITC,0,[_I,_S,"Tierings",_F],[0,0,[()=>TieringList,{[_xF]:1,[_xN]:"Tiering"}],[()=>IntelligentTieringFilter$,0]],3];IntelligentTieringFilter$=[3,n0,"IntelligentTieringFilter",0,[_P,_Ta,"And"],[0,()=>Tag$,[()=>IntelligentTieringAndOperator$,0]]];InventoryConfiguration$=[3,n0,_IC,0,[_Des,"IsEnabled",_I,"IncludedObjectVersions","Schedule",_F,"OptionalFields"],[[()=>InventoryDestination$,0],2,0,0,()=>InventorySchedule$,()=>InventoryFilter$,[()=>InventoryOptionalFields,0]],5];InventoryDestination$=[3,n0,"InventoryDestination",0,[_SBD],[[()=>InventoryS3BucketDestination$,0]],1];InventoryEncryption$=[3,n0,"InventoryEncryption",0,["SSES3","SSEKMS"],[[()=>SSES3$,{[_xN]:"SSE-S3"}],[()=>SSEKMS$,{[_xN]:_SK}]]];InventoryFilter$=[3,n0,"InventoryFilter",0,[_P],[0],1];InventoryS3BucketDestination$=[3,n0,"InventoryS3BucketDestination",0,[_B,"Format","AccountId",_P,_En],[0,0,0,0,[()=>InventoryEncryption$,0]],2];InventorySchedule$=[3,n0,"InventorySchedule",0,["Frequency"],[0],1];InventoryTableConfiguration$=[3,n0,_ITCn,0,[_CSo,_EC],[0,()=>MetadataTableEncryptionConfiguration$],1];InventoryTableConfigurationResult$=[3,n0,_ITCR,0,[_CSo,"TableStatus",_Err,_TNa,_TA],[0,0,()=>ErrorDetails$,0,0],1];InventoryTableConfigurationUpdates$=[3,n0,"InventoryTableConfigurationUpdates",0,[_CSo,_EC],[0,()=>MetadataTableEncryptionConfiguration$],1];JournalTableConfiguration$=[3,n0,_JTC,0,[_REe,_EC],[()=>RecordExpiration$,()=>MetadataTableEncryptionConfiguration$],1];JournalTableConfigurationResult$=[3,n0,_JTCR,0,["TableStatus",_TNa,_REe,_Err,_TA],[0,0,()=>RecordExpiration$,()=>ErrorDetails$,0],3];JournalTableConfigurationUpdates$=[3,n0,"JournalTableConfigurationUpdates",0,[_REe],[()=>RecordExpiration$],1];JSONInput$=[3,n0,"JSONInput",0,[_Ty],[0]];JSONOutput$=[3,n0,"JSONOutput",0,[_RD],[0]];LambdaFunctionConfiguration$=[3,n0,"LambdaFunctionConfiguration",0,["LambdaFunctionArn",_Ev,_I,_F],[[0,{[_xN]:"CloudFunction"}],[64,{[_xF]:1,[_xN]:"Event"}],0,[()=>NotificationConfigurationFilter$,0]],2];LifecycleExpiration$=[3,n0,"LifecycleExpiration",0,["Date",_D,"ExpiredObjectDeleteMarker"],[5,1,2]];LifecycleRule$=[3,n0,"LifecycleRule",0,[_S,_E,"ID",_P,_F,"Transitions","NoncurrentVersionTransitions",_NVE,_AIMU],[0,()=>LifecycleExpiration$,0,0,[()=>LifecycleRuleFilter$,0],[()=>TransitionList,{[_xF]:1,[_xN]:"Transition"}],[()=>NoncurrentVersionTransitionList,{[_xF]:1,[_xN]:_NVTo}],()=>NoncurrentVersionExpiration$,()=>AbortIncompleteMultipartUpload$],1];LifecycleRuleAndOperator$=[3,n0,"LifecycleRuleAndOperator",0,[_P,_T,_OSGT,_OSLT],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}],1,1]];LifecycleRuleFilter$=[3,n0,"LifecycleRuleFilter",0,[_P,_Ta,_OSGT,_OSLT,"And"],[0,()=>Tag$,1,1,[()=>LifecycleRuleAndOperator$,0]]];ListBucketAnalyticsConfigurationsOutput$=[3,n0,"ListBucketAnalyticsConfigurationsOutput",{[_xN]:"ListBucketAnalyticsConfigurationResult"},[_IT,_CTon,_NCT,_ACLn],[2,0,0,[()=>AnalyticsConfigurationList,{[_xF]:1,[_xN]:_ACn}]]];ListBucketAnalyticsConfigurationsRequest$=[3,n0,"ListBucketAnalyticsConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketIntelligentTieringConfigurationsOutput$=[3,n0,"ListBucketIntelligentTieringConfigurationsOutput",0,[_IT,_CTon,_NCT,_ITCL],[2,0,0,[()=>IntelligentTieringConfigurationList,{[_xF]:1,[_xN]:_ITC}]]];ListBucketIntelligentTieringConfigurationsRequest$=[3,n0,"ListBucketIntelligentTieringConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketInventoryConfigurationsOutput$=[3,n0,"ListBucketInventoryConfigurationsOutput",{[_xN]:"ListInventoryConfigurationsResult"},[_CTon,_ICL,_IT,_NCT],[0,[()=>InventoryConfigurationList,{[_xF]:1,[_xN]:_IC}],2,0]];ListBucketInventoryConfigurationsRequest$=[3,n0,"ListBucketInventoryConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketMetricsConfigurationsOutput$=[3,n0,"ListBucketMetricsConfigurationsOutput",{[_xN]:"ListMetricsConfigurationsResult"},[_IT,_CTon,_NCT,_MCL],[2,0,0,[()=>MetricsConfigurationList,{[_xF]:1,[_xN]:_MCe}]]];ListBucketMetricsConfigurationsRequest$=[3,n0,"ListBucketMetricsConfigurationsRequest",0,[_B,_CTon,_EBO],[[0,1],[0,{[_hQ]:_ct}],[0,{[_hH]:_xaebo}]],1];ListBucketsOutput$=[3,n0,"ListBucketsOutput",{[_xN]:"ListAllMyBucketsResult"},[_Bu,_O,_CTon,_P],[[()=>Buckets,0],()=>Owner$,0,0]];ListBucketsRequest$=[3,n0,"ListBucketsRequest",0,["MaxBuckets",_CTon,_P,_BR],[[1,{[_hQ]:"max-buckets"}],[0,{[_hQ]:_ct}],[0,{[_hQ]:_p}],[0,{[_hQ]:"bucket-region"}]]];ListDirectoryBucketsOutput$=[3,n0,"ListDirectoryBucketsOutput",{[_xN]:"ListAllMyDirectoryBucketsResult"},[_Bu,_CTon],[[()=>Buckets,0],0]];ListDirectoryBucketsRequest$=[3,n0,"ListDirectoryBucketsRequest",0,[_CTon,"MaxDirectoryBuckets"],[[0,{[_hQ]:_ct}],[1,{[_hQ]:"max-directory-buckets"}]]];ListMultipartUploadsOutput$=[3,n0,"ListMultipartUploadsOutput",{[_xN]:"ListMultipartUploadsResult"},[_B,_KM,_UIM,_NKM,_P,_Deli,"NextUploadIdMarker","MaxUploads",_IT,"Uploads",_CPom,_ETn,_RC],[0,0,0,0,0,0,0,1,2,[()=>MultipartUploadList,{[_xF]:1,[_xN]:"Upload"}],[()=>CommonPrefixList,{[_xF]:1}],0,[0,{[_hH]:_xarc}]]];ListMultipartUploadsRequest$=[3,n0,"ListMultipartUploadsRequest",0,[_B,_Deli,_ETn,_KM,"MaxUploads",_P,_UIM,_EBO,_RP],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[0,{[_hQ]:_km}],[1,{[_hQ]:"max-uploads"}],[0,{[_hQ]:_p}],[0,{[_hQ]:"upload-id-marker"}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],1];ListObjectsOutput$=[3,n0,"ListObjectsOutput",{[_xN]:_LBRi},[_IT,"Marker","NextMarker","Contents",_N,_P,_Deli,_MK,_CPom,_ETn,_RC],[2,0,0,[()=>ObjectList,{[_xF]:1}],0,0,0,1,[()=>CommonPrefixList,{[_xF]:1}],0,[0,{[_hH]:_xarc}]]];ListObjectsRequest$=[3,n0,"ListObjectsRequest",0,[_B,_Deli,_ETn,"Marker",_MK,_P,_RP,_EBO,_OOA],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[0,{[_hQ]:"marker"}],[1,{[_hQ]:_mk}],[0,{[_hQ]:_p}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[64,{[_hH]:_xaooa}]],1];ListObjectsV2Output$=[3,n0,"ListObjectsV2Output",{[_xN]:_LBRi},[_IT,"Contents",_N,_P,_Deli,_MK,_CPom,_ETn,"KeyCount",_CTon,_NCT,_SA,_RC],[2,[()=>ObjectList,{[_xF]:1}],0,0,0,1,[()=>CommonPrefixList,{[_xF]:1}],0,1,0,0,0,[0,{[_hH]:_xarc}]]];ListObjectsV2Request$=[3,n0,"ListObjectsV2Request",0,[_B,_Deli,_ETn,_MK,_P,_CTon,"FetchOwner",_SA,_RP,_EBO,_OOA],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[1,{[_hQ]:_mk}],[0,{[_hQ]:_p}],[0,{[_hQ]:_ct}],[2,{[_hQ]:"fetch-owner"}],[0,{[_hQ]:"start-after"}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[64,{[_hH]:_xaooa}]],1];ListObjectVersionsOutput$=[3,n0,"ListObjectVersionsOutput",{[_xN]:"ListVersionsResult"},[_IT,_KM,_VIM,_NKM,"NextVersionIdMarker","Versions",_DMe,_N,_P,_Deli,_MK,_CPom,_ETn,_RC],[2,0,0,0,0,[()=>ObjectVersionList,{[_xF]:1,[_xN]:"Version"}],[()=>DeleteMarkers,{[_xF]:1,[_xN]:_DM}],0,0,0,1,[()=>CommonPrefixList,{[_xF]:1}],0,[0,{[_hH]:_xarc}]]];ListObjectVersionsRequest$=[3,n0,"ListObjectVersionsRequest",0,[_B,_Deli,_ETn,_KM,_MK,_P,_VIM,_EBO,_RP,_OOA],[[0,1],[0,{[_hQ]:_d}],[0,{[_hQ]:_et}],[0,{[_hQ]:_km}],[1,{[_hQ]:_mk}],[0,{[_hQ]:_p}],[0,{[_hQ]:"version-id-marker"}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}],[64,{[_hH]:_xaooa}]],1];ListPartsOutput$=[3,n0,"ListPartsOutput",{[_xN]:"ListPartsResult"},["AbortDate","AbortRuleId",_B,_K,_UI,_PNM,_NPNM,_MP,_IT,_Pa,_In,_O,_SC,_RC,_CA,_CT],[[4,{[_hH]:_xaad}],[0,{[_hH]:_xaari}],0,0,0,0,0,1,2,[()=>Parts,{[_xF]:1,[_xN]:"Part"}],()=>Initiator$,()=>Owner$,0,[0,{[_hH]:_xarc}],0,0]];ListPartsRequest$=[3,n0,"ListPartsRequest",0,[_B,_K,_UI,_MP,_PNM,_RP,_EBO,_SSECA,_SSECK,_SSECKMD],[[0,1],[0,1],[0,{[_hQ]:_uI}],[1,{[_hQ]:"max-parts"}],[0,{[_hQ]:"part-number-marker"}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}]],3];LocationInfo$=[3,n0,"LocationInfo",0,[_Ty,_N],[0,0]];LoggingEnabled$=[3,n0,_LE,0,["TargetBucket","TargetPrefix",_TG,_TOKF],[0,0,[()=>TargetGrants,0],[()=>TargetObjectKeyFormat$,0]],2];MetadataConfiguration$=[3,n0,_MC,0,[_JTC,_ITCn],[()=>JournalTableConfiguration$,()=>InventoryTableConfiguration$],1];MetadataConfigurationResult$=[3,n0,_MCR,0,[_DRes,_JTCR,_ITCR],[()=>DestinationResult$,()=>JournalTableConfigurationResult$,()=>InventoryTableConfigurationResult$],1];MetadataEntry$=[3,n0,_ME,0,[_N,_V],[0,0]];MetadataTableConfiguration$=[3,n0,_MTC,0,[_STD],[()=>S3TablesDestination$],1];MetadataTableConfigurationResult$=[3,n0,_MTCR,0,[_STDR],[()=>S3TablesDestinationResult$],1];MetadataTableEncryptionConfiguration$=[3,n0,"MetadataTableEncryptionConfiguration",0,["SseAlgorithm","KmsKeyArn"],[0,0],1];Metrics$=[3,n0,"Metrics",0,[_S,"EventThreshold"],[0,()=>ReplicationTimeValue$],1];MetricsAndOperator$=[3,n0,"MetricsAndOperator",0,[_P,_T,"AccessPointArn"],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}],0]];MetricsConfiguration$=[3,n0,_MCe,0,[_I,_F],[0,[()=>MetricsFilter$,0]],1];MultipartUpload$=[3,n0,_MU,0,[_UI,_K,"Initiated",_SC,_O,_In,_CA,_CT],[0,0,4,0,()=>Owner$,()=>Initiator$,0,0]];NoncurrentVersionExpiration$=[3,n0,_NVE,0,[_ND,_NNV],[1,1]];NoncurrentVersionTransition$=[3,n0,_NVTo,0,[_ND,_SC,_NNV],[1,0,1]];NotificationConfiguration$=[3,n0,_NC,0,["TopicConfigurations","QueueConfigurations","LambdaFunctionConfigurations",_EBC],[[()=>TopicConfigurationList,{[_xF]:1,[_xN]:_TCop}],[()=>QueueConfigurationList,{[_xF]:1,[_xN]:_QCue}],[()=>LambdaFunctionConfigurationList,{[_xF]:1,[_xN]:"CloudFunctionConfiguration"}],()=>EventBridgeConfiguration$]];NotificationConfigurationFilter$=[3,n0,"NotificationConfigurationFilter",0,[_K],[[()=>S3KeyFilter$,{[_xN]:"S3Key"}]]];_Object$=[3,n0,"Object",0,[_K,_LM,_ETa,_CA,_CT,_Si,_SC,_O,_RSe],[0,4,0,[64,{[_xF]:1}],0,1,0,()=>Owner$,()=>RestoreStatus$]];ObjectIdentifier$=[3,n0,"ObjectIdentifier",0,[_K,_VI,_ETa,"LastModifiedTime",_Si],[0,0,0,6,1],1];ObjectLockConfiguration$=[3,n0,_OLC,0,["ObjectLockEnabled",_Ru],[0,()=>ObjectLockRule$]];ObjectLockLegalHold$=[3,n0,"ObjectLockLegalHold",0,[_S],[0]];ObjectLockRetention$=[3,n0,"ObjectLockRetention",0,["Mode","RetainUntilDate"],[0,5]];ObjectLockRule$=[3,n0,"ObjectLockRule",0,[_DRe],[()=>DefaultRetention$]];ObjectPart$=[3,n0,"ObjectPart",0,[_PN,_Si,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[1,1,0,0,0,0,0]];ObjectVersion$=[3,n0,"ObjectVersion",0,[_ETa,_CA,_CT,_Si,_SC,_K,_VI,"IsLatest",_LM,_O,_RSe],[0,[64,{[_xF]:1}],0,1,0,0,0,2,4,()=>Owner$,()=>RestoreStatus$]];OutputLocation$=[3,n0,_OL,0,["S3"],[[()=>S3Location$,0]]];OutputSerialization$=[3,n0,_OSu,0,["CSV","JSON"],[()=>CSVOutput$,()=>JSONOutput$]];Owner$=[3,n0,_O,0,[_DN,"ID"],[0,0]];OwnershipControls$=[3,n0,_OC,0,[_R],[[()=>OwnershipControlsRules,{[_xF]:1,[_xN]:_Ru}]],1];OwnershipControlsRule$=[3,n0,"OwnershipControlsRule",0,[_OO],[0],1];ParquetInput$=[3,n0,"ParquetInput",0,[],[]];Part$=[3,n0,"Part",0,[_PN,_LM,_ETa,_Si,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh],[1,4,0,1,0,0,0,0,0]];PartitionedPrefix$=[3,n0,_PP,{[_xN]:_PP},["PartitionDateSource"],[0]];PolicyStatus$=[3,n0,_PS,0,["IsPublic"],[[2,{[_xN]:"IsPublic"}]]];Progress$=[3,n0,"Progress",0,[_BS,_BP,_BRy],[1,1,1]];ProgressEvent$=[3,n0,"ProgressEvent",0,["Details"],[[()=>Progress$,{[_eP]:1}]]];PublicAccessBlockConfiguration$=[3,n0,_PABC,0,[_BPA,_IPA,_BPP,_RPB],[[2,{[_xN]:_BPA}],[2,{[_xN]:_IPA}],[2,{[_xN]:_BPP}],[2,{[_xN]:_RPB}]]];PutBucketAbacRequest$=[3,n0,"PutBucketAbacRequest",0,[_B,_AS,_CMD,_CA,_EBO],[[0,1],[()=>AbacStatus$,{[_hP]:1,[_xN]:_AS}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketAccelerateConfigurationRequest$=[3,n0,"PutBucketAccelerateConfigurationRequest",0,[_B,_AC,_EBO,_CA],[[0,1],[()=>AccelerateConfiguration$,{[_hP]:1,[_xN]:_AC}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasca}]],2];PutBucketAclRequest$=[3,n0,"PutBucketAclRequest",0,[_B,"ACL",_ACP,_CMD,_CA,_GFC,_GR,_GRACP,_GW,_GWACP,_EBO],[[0,1],[0,{[_hH]:_xaa}],[()=>AccessControlPolicy$,{[_hP]:1,[_xN]:_ACP}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagw}],[0,{[_hH]:_xagwa}],[0,{[_hH]:_xaebo}]],1];PutBucketAnalyticsConfigurationRequest$=[3,n0,"PutBucketAnalyticsConfigurationRequest",0,[_B,_I,_ACn,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>AnalyticsConfiguration$,{[_hP]:1,[_xN]:_ACn}],[0,{[_hH]:_xaebo}]],3];PutBucketCorsRequest$=[3,n0,"PutBucketCorsRequest",0,[_B,_CORSC,_CMD,_CA,_EBO],[[0,1],[()=>CORSConfiguration$,{[_hP]:1,[_xN]:_CORSC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketEncryptionRequest$=[3,n0,"PutBucketEncryptionRequest",0,[_B,_SSEC,_CMD,_CA,_EBO],[[0,1],[()=>ServerSideEncryptionConfiguration$,{[_hP]:1,[_xN]:_SSEC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketIntelligentTieringConfigurationRequest$=[3,n0,"PutBucketIntelligentTieringConfigurationRequest",0,[_B,_I,_ITC,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>IntelligentTieringConfiguration$,{[_hP]:1,[_xN]:_ITC}],[0,{[_hH]:_xaebo}]],3];PutBucketInventoryConfigurationRequest$=[3,n0,"PutBucketInventoryConfigurationRequest",0,[_B,_I,_IC,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>InventoryConfiguration$,{[_hP]:1,[_xN]:_IC}],[0,{[_hH]:_xaebo}]],3];PutBucketLifecycleConfigurationOutput$=[3,n0,"PutBucketLifecycleConfigurationOutput",0,[_TDMOS],[[0,{[_hH]:_xatdmos}]]];PutBucketLifecycleConfigurationRequest$=[3,n0,"PutBucketLifecycleConfigurationRequest",0,[_B,_CA,_LCi,_EBO,_TDMOS],[[0,1],[0,{[_hH]:_xasca}],[()=>BucketLifecycleConfiguration$,{[_hP]:1,[_xN]:_LCi}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xatdmos}]],1];PutBucketLoggingRequest$=[3,n0,"PutBucketLoggingRequest",0,[_B,_BLS,_CMD,_CA,_EBO],[[0,1],[()=>BucketLoggingStatus$,{[_hP]:1,[_xN]:_BLS}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketMetricsConfigurationRequest$=[3,n0,"PutBucketMetricsConfigurationRequest",0,[_B,_I,_MCe,_EBO],[[0,1],[0,{[_hQ]:_i}],[()=>MetricsConfiguration$,{[_hP]:1,[_xN]:_MCe}],[0,{[_hH]:_xaebo}]],3];PutBucketNotificationConfigurationRequest$=[3,n0,"PutBucketNotificationConfigurationRequest",0,[_B,_NC,_EBO,"SkipDestinationValidation"],[[0,1],[()=>NotificationConfiguration$,{[_hP]:1,[_xN]:_NC}],[0,{[_hH]:_xaebo}],[2,{[_hH]:"x-amz-skip-destination-validation"}]],2];PutBucketOwnershipControlsRequest$=[3,n0,"PutBucketOwnershipControlsRequest",0,[_B,_OC,_CMD,_EBO,_CA],[[0,1],[()=>OwnershipControls$,{[_hP]:1,[_xN]:_OC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasca}]],2];PutBucketPolicyRequest$=[3,n0,"PutBucketPolicyRequest",0,[_B,"Policy",_CMD,_CA,"ConfirmRemoveSelfBucketAccess",_EBO],[[0,1],[0,16],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[2,{[_hH]:"x-amz-confirm-remove-self-bucket-access"}],[0,{[_hH]:_xaebo}]],2];PutBucketReplicationRequest$=[3,n0,"PutBucketReplicationRequest",0,[_B,_RCe,_CMD,_CA,"Token",_EBO],[[0,1],[()=>ReplicationConfiguration$,{[_hP]:1,[_xN]:_RCe}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xabolt}],[0,{[_hH]:_xaebo}]],2];PutBucketRequestPaymentRequest$=[3,n0,"PutBucketRequestPaymentRequest",0,[_B,_RPC,_CMD,_CA,_EBO],[[0,1],[()=>RequestPaymentConfiguration$,{[_hP]:1,[_xN]:_RPC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketTaggingRequest$=[3,n0,"PutBucketTaggingRequest",0,[_B,_Tag,_CMD,_CA,_EBO],[[0,1],[()=>Tagging$,{[_hP]:1,[_xN]:_Tag}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutBucketVersioningRequest$=[3,n0,"PutBucketVersioningRequest",0,[_B,_VC,_CMD,_CA,"MFA",_EBO],[[0,1],[()=>VersioningConfiguration$,{[_hP]:1,[_xN]:_VC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:"x-amz-mfa"}],[0,{[_hH]:_xaebo}]],2];PutBucketWebsiteRequest$=[3,n0,"PutBucketWebsiteRequest",0,[_B,_WC,_CMD,_CA,_EBO],[[0,1],[()=>WebsiteConfiguration$,{[_hP]:1,[_xN]:_WC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutObjectAclOutput$=[3,n0,"PutObjectAclOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectAclRequest$=[3,n0,"PutObjectAclRequest",0,[_B,_K,"ACL",_ACP,_CMD,_CA,_GFC,_GR,_GRACP,_GW,_GWACP,_RP,_VI,_EBO],[[0,1],[0,1],[0,{[_hH]:_xaa}],[()=>AccessControlPolicy$,{[_hP]:1,[_xN]:_ACP}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagw}],[0,{[_hH]:_xagwa}],[0,{[_hH]:_xarp}],[0,{[_hQ]:_vI}],[0,{[_hH]:_xaebo}]],2];PutObjectLegalHoldOutput$=[3,n0,"PutObjectLegalHoldOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectLegalHoldRequest$=[3,n0,"PutObjectLegalHoldRequest",0,[_B,_K,_LH,_RP,_VI,_CMD,_CA,_EBO],[[0,1],[0,1],[()=>ObjectLockLegalHold$,{[_hP]:1,[_xN]:_LH}],[0,{[_hH]:_xarp}],[0,{[_hQ]:_vI}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutObjectLockConfigurationOutput$=[3,n0,"PutObjectLockConfigurationOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectLockConfigurationRequest$=[3,n0,"PutObjectLockConfigurationRequest",0,[_B,_OLC,_RP,"Token",_CMD,_CA,_EBO],[[0,1],[()=>ObjectLockConfiguration$,{[_hP]:1,[_xN]:_OLC}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xabolt}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],1];PutObjectOutput$=[3,n0,"PutObjectOutput",0,[_E,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_CT,_SSE,_VI,_SSECA,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_Si,_RC],[[0,{[_hH]:_xae}],[0,{[_hH]:_ETa}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xact}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xavi}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[1,{[_hH]:"x-amz-object-size"}],[0,{[_hH]:_xarc}]]];PutObjectRequest$=[3,n0,"PutObjectRequest",0,[_B,_K,"ACL",_Bo,_CC,_CDo,_CEo,_CL,_CLo,_CMD,_CTo,_CA,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_Ex,_IM,_INM,_GFC,_GR,_GRACP,_GWACP,"WriteOffsetBytes",_M,_SSE,_SC,_WRL,_SSECA,_SSECK,_SSECKMD,_SSEKMSKI,_SSEKMSEC,_BKE,_RP,_Tag,_OLM,_OLRUD,_OLLHS,_EBO],[[0,1],[0,1],[0,{[_hH]:_xaa}],[()=>StreamingBlob,16],[0,{[_hH]:_CC_}],[0,{[_hH]:_CD_}],[0,{[_hH]:_CE_}],[0,{[_hH]:_CL_}],[1,{[_hH]:_CL__}],[0,{[_hH]:_CM}],[0,{[_hH]:_CT_}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[4,{[_hH]:_Ex}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[0,{[_hH]:_xagfc}],[0,{[_hH]:_xagr}],[0,{[_hH]:_xagra}],[0,{[_hH]:_xagwa}],[1,{[_hH]:"x-amz-write-offset-bytes"}],[128,{[_hPH]:_xam}],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasc}],[0,{[_hH]:_xawrl}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[()=>SSEKMSEncryptionContext,{[_hH]:_xassec}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xat}],[0,{[_hH]:_xaolm}],[5,{[_hH]:_xaolrud}],[0,{[_hH]:_xaollh}],[0,{[_hH]:_xaebo}]],2];PutObjectRetentionOutput$=[3,n0,"PutObjectRetentionOutput",0,[_RC],[[0,{[_hH]:_xarc}]]];PutObjectRetentionRequest$=[3,n0,"PutObjectRetentionRequest",0,[_B,_K,_Ret,_RP,_VI,_BGR,_CMD,_CA,_EBO],[[0,1],[0,1],[()=>ObjectLockRetention$,{[_hP]:1,[_xN]:_Ret}],[0,{[_hH]:_xarp}],[0,{[_hQ]:_vI}],[2,{[_hH]:_xabgr}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];PutObjectTaggingOutput$=[3,n0,"PutObjectTaggingOutput",0,[_VI],[[0,{[_hH]:_xavi}]]];PutObjectTaggingRequest$=[3,n0,"PutObjectTaggingRequest",0,[_B,_K,_Tag,_VI,_CMD,_CA,_EBO,_RP],[[0,1],[0,1],[()=>Tagging$,{[_hP]:1,[_xN]:_Tag}],[0,{[_hQ]:_vI}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xarp}]],3];PutPublicAccessBlockRequest$=[3,n0,"PutPublicAccessBlockRequest",0,[_B,_PABC,_CMD,_CA,_EBO],[[0,1],[()=>PublicAccessBlockConfiguration$,{[_hP]:1,[_xN]:_PABC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];QueueConfiguration$=[3,n0,_QCue,0,["QueueArn",_Ev,_I,_F],[[0,{[_xN]:"Queue"}],[64,{[_xF]:1,[_xN]:"Event"}],0,[()=>NotificationConfigurationFilter$,0]],2];RecordExpiration$=[3,n0,_REe,0,[_E,_D],[0,1],1];RecordsEvent$=[3,n0,"RecordsEvent",0,["Payload"],[[21,{[_eP]:1}]]];Redirect$=[3,n0,"Redirect",0,["HostName","HttpRedirectCode","Protocol","ReplaceKeyPrefixWith","ReplaceKeyWith"],[0,0,0,0,0]];RedirectAllRequestsTo$=[3,n0,_RART,0,["HostName","Protocol"],[0,0],1];RenameObjectOutput$=[3,n0,"RenameObjectOutput",0,[],[]];RenameObjectRequest$=[3,n0,"RenameObjectRequest",0,[_B,_K,"RenameSource","DestinationIfMatch","DestinationIfNoneMatch","DestinationIfModifiedSince","DestinationIfUnmodifiedSince","SourceIfMatch","SourceIfNoneMatch","SourceIfModifiedSince","SourceIfUnmodifiedSince","ClientToken"],[[0,1],[0,1],[0,{[_hH]:"x-amz-rename-source"}],[0,{[_hH]:_IM_}],[0,{[_hH]:_INM_}],[4,{[_hH]:_IMS_}],[4,{[_hH]:_IUS_}],[0,{[_hH]:"x-amz-rename-source-if-match"}],[0,{[_hH]:"x-amz-rename-source-if-none-match"}],[6,{[_hH]:"x-amz-rename-source-if-modified-since"}],[6,{[_hH]:"x-amz-rename-source-if-unmodified-since"}],[0,{[_hH]:"x-amz-client-token",[_iT]:1}]],3];ReplicaModifications$=[3,n0,_RM,0,[_S],[0],1];ReplicationConfiguration$=[3,n0,_RCe,0,["Role",_R],[0,[()=>ReplicationRules,{[_xF]:1,[_xN]:_Ru}]],2];ReplicationRule$=[3,n0,"ReplicationRule",0,[_S,_Des,"ID","Priority",_P,_F,_SSC,_EOR,_DMR],[0,()=>Destination$,0,1,0,[()=>ReplicationRuleFilter$,0],()=>SourceSelectionCriteria$,()=>ExistingObjectReplication$,()=>DeleteMarkerReplication$],2];ReplicationRuleAndOperator$=[3,n0,"ReplicationRuleAndOperator",0,[_P,_T],[0,[()=>TagSet,{[_xF]:1,[_xN]:_Ta}]]];ReplicationRuleFilter$=[3,n0,"ReplicationRuleFilter",0,[_P,_Ta,"And"],[0,()=>Tag$,[()=>ReplicationRuleAndOperator$,0]]];ReplicationTime$=[3,n0,_RT,0,[_S,"Time"],[0,()=>ReplicationTimeValue$],2];ReplicationTimeValue$=[3,n0,"ReplicationTimeValue",0,["Minutes"],[1]];RequestPaymentConfiguration$=[3,n0,_RPC,0,["Payer"],[0],1];RequestProgress$=[3,n0,_RPe,0,["Enabled"],[2]];RestoreObjectOutput$=[3,n0,"RestoreObjectOutput",0,[_RC,"RestoreOutputPath"],[[0,{[_hH]:_xarc}],[0,{[_hH]:"x-amz-restore-output-path"}]]];RestoreObjectRequest$=[3,n0,"RestoreObjectRequest",0,[_B,_K,_VI,_RRes,_RP,_CA,_EBO],[[0,1],[0,1],[0,{[_hQ]:_vI}],[()=>RestoreRequest$,{[_hP]:1,[_xN]:_RRes}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];RestoreRequest$=[3,n0,_RRes,0,[_D,_GJP,_Ty,"Tier","Description",_SP,_OL],[1,()=>GlacierJobParameters$,0,0,0,()=>SelectParameters$,[()=>OutputLocation$,0]]];RestoreStatus$=[3,n0,_RSe,0,["IsRestoreInProgress","RestoreExpiryDate"],[2,4]];RoutingRule$=[3,n0,"RoutingRule",0,["Redirect","Condition"],[()=>Redirect$,()=>Condition$],1];S3KeyFilter$=[3,n0,"S3KeyFilter",0,["FilterRules"],[[()=>FilterRuleList,{[_xF]:1,[_xN]:_FR}]]];S3Location$=[3,n0,"S3Location",0,["BucketName",_P,_En,"CannedACL",_ACL,_Tag,_UM,_SC],[0,0,[()=>Encryption$,0],0,[()=>Grants,0],[()=>Tagging$,0],[()=>UserMetadata,0],0],2];S3TablesDestination$=[3,n0,_STD,0,[_TBA,_TNa],[0,0],2];S3TablesDestinationResult$=[3,n0,_STDR,0,[_TBA,_TNa,_TA,_TN],[0,0,0,0],4];ScanRange$=[3,n0,"ScanRange",0,["Start","End"],[1,1]];SelectObjectContentOutput$=[3,n0,"SelectObjectContentOutput",0,["Payload"],[[()=>SelectObjectContentEventStream$,16]]];SelectObjectContentRequest$=[3,n0,"SelectObjectContentRequest",0,[_B,_K,"Expression",_ETx,_IS,_OSu,_SSECA,_SSECK,_SSECKMD,_RPe,"ScanRange",_EBO],[[0,1],[0,1],0,0,()=>InputSerialization$,()=>OutputSerialization$,[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],()=>RequestProgress$,()=>ScanRange$,[0,{[_hH]:_xaebo}]],6];SelectParameters$=[3,n0,_SP,0,[_IS,_ETx,"Expression",_OSu],[()=>InputSerialization$,0,0,()=>OutputSerialization$],4];ServerSideEncryptionByDefault$=[3,n0,"ServerSideEncryptionByDefault",0,["SSEAlgorithm","KMSMasterKeyID"],[0,[()=>SSEKMSKeyId,0]],1];ServerSideEncryptionConfiguration$=[3,n0,_SSEC,0,[_R],[[()=>ServerSideEncryptionRules,{[_xF]:1,[_xN]:_Ru}]],1];ServerSideEncryptionRule$=[3,n0,"ServerSideEncryptionRule",0,["ApplyServerSideEncryptionByDefault",_BKE,_BET],[[()=>ServerSideEncryptionByDefault$,0],2,[()=>BlockedEncryptionTypes$,0]]];SessionCredentials$=[3,n0,"SessionCredentials",0,["AccessKeyId",_SAK,_ST,_E],[[0,{[_xN]:"AccessKeyId"}],[()=>SessionCredentialValue,{[_xN]:_SAK}],[()=>SessionCredentialValue,{[_xN]:_ST}],[4,{[_xN]:_E}]],4];SimplePrefix$=[3,n0,_SPi,{[_xN]:_SPi},[],[]];SourceSelectionCriteria$=[3,n0,_SSC,0,[_SKEO,_RM],[()=>SseKmsEncryptedObjects$,()=>ReplicaModifications$]];SSEKMS$=[3,n0,"SSEKMS",{[_xN]:_SK},["KeyId"],[[()=>SSEKMSKeyId,0]],1];SseKmsEncryptedObjects$=[3,n0,_SKEO,0,[_S],[0],1];SSEKMSEncryption$=[3,n0,"SSEKMSEncryption",{[_xN]:_SK},["KMSKeyArn",_BKE],[[()=>NonEmptyKmsKeyArnString,0],2],1];SSES3$=[3,n0,"SSES3",{[_xN]:"SSE-S3"},[],[]];Stats$=[3,n0,"Stats",0,[_BS,_BP,_BRy],[1,1,1]];StatsEvent$=[3,n0,"StatsEvent",0,["Details"],[[()=>Stats$,{[_eP]:1}]]];StorageClassAnalysis$=[3,n0,_SCA,0,["DataExport"],[()=>StorageClassAnalysisDataExport$]];StorageClassAnalysisDataExport$=[3,n0,"StorageClassAnalysisDataExport",0,["OutputSchemaVersion",_Des],[0,()=>AnalyticsExportDestination$],2];Tag$=[3,n0,_Ta,0,[_K,_V],[0,0],2];Tagging$=[3,n0,_Tag,0,[_TS],[[()=>TagSet,0]],1];TargetGrant$=[3,n0,"TargetGrant",0,["Grantee",_Pe],[[()=>Grantee$,{[_xNm]:["xsi",_hi]}],0]];TargetObjectKeyFormat$=[3,n0,_TOKF,0,[_SPi,_PP],[[()=>SimplePrefix$,{[_xN]:_SPi}],[()=>PartitionedPrefix$,{[_xN]:_PP}]]];Tiering$=[3,n0,"Tiering",0,[_D,_AT],[1,0],2];TopicConfiguration$=[3,n0,_TCop,0,["TopicArn",_Ev,_I,_F],[[0,{[_xN]:"Topic"}],[64,{[_xF]:1,[_xN]:"Event"}],0,[()=>NotificationConfigurationFilter$,0]],2];Transition$=[3,n0,"Transition",0,["Date",_D,_SC],[5,1,0]];UpdateBucketMetadataInventoryTableConfigurationRequest$=[3,n0,"UpdateBucketMetadataInventoryTableConfigurationRequest",0,[_B,_ITCn,_CMD,_CA,_EBO],[[0,1],[()=>InventoryTableConfigurationUpdates$,{[_hP]:1,[_xN]:_ITCn}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];UpdateBucketMetadataJournalTableConfigurationRequest$=[3,n0,"UpdateBucketMetadataJournalTableConfigurationRequest",0,[_B,_JTC,_CMD,_CA,_EBO],[[0,1],[()=>JournalTableConfigurationUpdates$,{[_hP]:1,[_xN]:_JTC}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xaebo}]],2];UpdateObjectEncryptionRequest$=[3,n0,"UpdateObjectEncryptionRequest",0,[_B,_K,_OE,_VI,_RP,_EBO,_CMD,_CA],[[0,1],[0,1],[()=>ObjectEncryption$,16],[0,{[_hQ]:_vI}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}]],3];UpdateObjectEncryptionResponse$=[3,n0,"UpdateObjectEncryptionResponse",0,[_RC],[[0,{[_hH]:_xarc}]]];UploadPartCopyOutput$=[3,n0,"UploadPartCopyOutput",0,[_CSVI,_CPR,_SSE,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_RC],[[0,{[_hH]:_xacsvi}],[()=>CopyPartResult$,16],[0,{[_hH]:_xasse}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];UploadPartCopyRequest$=[3,n0,"UploadPartCopyRequest",0,[_B,_CS,_K,_PN,_UI,_CSIM,_CSIMS,_CSINM,_CSIUS,"CopySourceRange",_SSECA,_SSECK,_SSECKMD,_CSSSECA,_CSSSECK,"CopySourceSSECustomerKeyMD5",_RP,_EBO,_ESBO],[[0,1],[0,{[_hH]:"x-amz-copy-source"}],[0,1],[1,{[_hQ]:_pN}],[0,{[_hQ]:_uI}],[0,{[_hH]:_xacsim}],[4,{[_hH]:_xacsims}],[0,{[_hH]:_xacsinm}],[4,{[_hH]:_xacsius}],[0,{[_hH]:"x-amz-copy-source-range"}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xacssseca}],[()=>CopySourceSSECustomerKey,{[_hH]:_xacssseck}],[0,{[_hH]:_xacssseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}],[0,{[_hH]:_xasebo}]],5];UploadPartOutput$=[3,n0,"UploadPartOutput",0,[_SSE,_ETa,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_SSECA,_SSECKMD,_SSEKMSKI,_BKE,_RC],[[0,{[_hH]:_xasse}],[0,{[_hH]:_ETa}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xasseca}],[0,{[_hH]:_xasseckM}],[()=>SSEKMSKeyId,{[_hH]:_xasseakki}],[2,{[_hH]:_xassebke}],[0,{[_hH]:_xarc}]]];UploadPartRequest$=[3,n0,"UploadPartRequest",0,[_B,_K,_PN,_UI,_Bo,_CLo,_CMD,_CA,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_SSECA,_SSECK,_SSECKMD,_RP,_EBO],[[0,1],[0,1],[1,{[_hQ]:_pN}],[0,{[_hQ]:_uI}],[()=>StreamingBlob,16],[1,{[_hH]:_CL__}],[0,{[_hH]:_CM}],[0,{[_hH]:_xasca}],[0,{[_hH]:_xacc}],[0,{[_hH]:_xacc_}],[0,{[_hH]:_xacc__}],[0,{[_hH]:_xacs}],[0,{[_hH]:_xacs_}],[0,{[_hH]:_xasseca}],[()=>SSECustomerKey,{[_hH]:_xasseck}],[0,{[_hH]:_xasseckM}],[0,{[_hH]:_xarp}],[0,{[_hH]:_xaebo}]],4];VersioningConfiguration$=[3,n0,_VC,0,["MFADelete",_S],[[0,{[_xN]:"MfaDelete"}],0]];WebsiteConfiguration$=[3,n0,_WC,0,[_EDr,_IDn,_RART,_RR],[()=>ErrorDocument$,()=>IndexDocument$,()=>RedirectAllRequestsTo$,[()=>RoutingRules,0]]];WriteGetObjectResponseRequest$=[3,n0,"WriteGetObjectResponseRequest",0,["RequestRoute","RequestToken",_Bo,"StatusCode","ErrorCode",_EM,_AR,_CC,_CDo,_CEo,_CL,_CLo,_CR,_CTo,_CCRC,_CCRCC,_CCRCNVME,_CSHA,_CSHAh,_DM,_ETa,_Ex,_E,_LM,_MM,_M,_OLM,_OLLHS,_OLRUD,_PC,_RS,_RC,_Re,_SSE,_SSECA,_SSEKMSKI,_SSECKMD,_SC,_TC,_VI,_BKE],[[0,{[_hL]:1,[_hH]:"x-amz-request-route"}],[0,{[_hH]:"x-amz-request-token"}],[()=>StreamingBlob,16],[1,{[_hH]:"x-amz-fwd-status"}],[0,{[_hH]:"x-amz-fwd-error-code"}],[0,{[_hH]:"x-amz-fwd-error-message"}],[0,{[_hH]:"x-amz-fwd-header-accept-ranges"}],[0,{[_hH]:"x-amz-fwd-header-Cache-Control"}],[0,{[_hH]:"x-amz-fwd-header-Content-Disposition"}],[0,{[_hH]:"x-amz-fwd-header-Content-Encoding"}],[0,{[_hH]:"x-amz-fwd-header-Content-Language"}],[1,{[_hH]:_CL__}],[0,{[_hH]:"x-amz-fwd-header-Content-Range"}],[0,{[_hH]:"x-amz-fwd-header-Content-Type"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-crc32"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-crc32c"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-crc64nvme"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-sha1"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-checksum-sha256"}],[2,{[_hH]:"x-amz-fwd-header-x-amz-delete-marker"}],[0,{[_hH]:"x-amz-fwd-header-ETag"}],[4,{[_hH]:"x-amz-fwd-header-Expires"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-expiration"}],[4,{[_hH]:"x-amz-fwd-header-Last-Modified"}],[1,{[_hH]:"x-amz-fwd-header-x-amz-missing-meta"}],[128,{[_hPH]:_xam}],[0,{[_hH]:"x-amz-fwd-header-x-amz-object-lock-mode"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-object-lock-legal-hold"}],[5,{[_hH]:"x-amz-fwd-header-x-amz-object-lock-retain-until-date"}],[1,{[_hH]:"x-amz-fwd-header-x-amz-mp-parts-count"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-replication-status"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-request-charged"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-restore"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm"}],[()=>SSEKMSKeyId,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-customer-key-MD5"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-storage-class"}],[1,{[_hH]:"x-amz-fwd-header-x-amz-tagging-count"}],[0,{[_hH]:"x-amz-fwd-header-x-amz-version-id"}],[2,{[_hH]:"x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled"}]],2];AnalyticsConfigurationList=[1,n0,_ACLn,0,[()=>AnalyticsConfiguration$,0]];Buckets=[1,n0,_Bu,0,[()=>Bucket$,{[_xN]:_B}]];CommonPrefixList=[1,n0,"CommonPrefixList",0,()=>CommonPrefix$];CompletedPartList=[1,n0,"CompletedPartList",0,()=>CompletedPart$];CORSRules=[1,n0,"CORSRules",0,[()=>CORSRule$,0]];DeletedObjects=[1,n0,"DeletedObjects",0,()=>DeletedObject$];DeleteMarkers=[1,n0,_DMe,0,()=>DeleteMarkerEntry$];EncryptionTypeList=[1,n0,"EncryptionTypeList",0,[0,{[_xN]:_ET}]];Errors=[1,n0,"Errors",0,()=>_Error$];FilterRuleList=[1,n0,"FilterRuleList",0,()=>FilterRule$];Grants=[1,n0,_G,0,[()=>Grant$,{[_xN]:"Grant"}]];IntelligentTieringConfigurationList=[1,n0,_ITCL,0,[()=>IntelligentTieringConfiguration$,0]];InventoryConfigurationList=[1,n0,_ICL,0,[()=>InventoryConfiguration$,0]];InventoryOptionalFields=[1,n0,"InventoryOptionalFields",0,[0,{[_xN]:"Field"}]];LambdaFunctionConfigurationList=[1,n0,"LambdaFunctionConfigurationList",0,[()=>LambdaFunctionConfiguration$,0]];LifecycleRules=[1,n0,"LifecycleRules",0,[()=>LifecycleRule$,0]];MetricsConfigurationList=[1,n0,_MCL,0,[()=>MetricsConfiguration$,0]];MultipartUploadList=[1,n0,"MultipartUploadList",0,()=>MultipartUpload$];NoncurrentVersionTransitionList=[1,n0,"NoncurrentVersionTransitionList",0,()=>NoncurrentVersionTransition$];ObjectIdentifierList=[1,n0,"ObjectIdentifierList",0,()=>ObjectIdentifier$];ObjectList=[1,n0,"ObjectList",0,[()=>_Object$,0]];ObjectVersionList=[1,n0,"ObjectVersionList",0,[()=>ObjectVersion$,0]];OwnershipControlsRules=[1,n0,"OwnershipControlsRules",0,()=>OwnershipControlsRule$];Parts=[1,n0,_Pa,0,()=>Part$];PartsList=[1,n0,"PartsList",0,()=>ObjectPart$];QueueConfigurationList=[1,n0,"QueueConfigurationList",0,[()=>QueueConfiguration$,0]];ReplicationRules=[1,n0,"ReplicationRules",0,[()=>ReplicationRule$,0]];RoutingRules=[1,n0,_RR,0,[()=>RoutingRule$,{[_xN]:"RoutingRule"}]];ServerSideEncryptionRules=[1,n0,"ServerSideEncryptionRules",0,[()=>ServerSideEncryptionRule$,0]];TagSet=[1,n0,_TS,0,[()=>Tag$,{[_xN]:_Ta}]];TargetGrants=[1,n0,_TG,0,[()=>TargetGrant$,{[_xN]:"Grant"}]];TieringList=[1,n0,"TieringList",0,()=>Tiering$];TopicConfigurationList=[1,n0,"TopicConfigurationList",0,[()=>TopicConfiguration$,0]];TransitionList=[1,n0,"TransitionList",0,()=>Transition$];UserMetadata=[1,n0,_UM,0,[()=>MetadataEntry$,{[_xN]:_ME}]];AnalyticsFilter$=[4,n0,"AnalyticsFilter",0,[_P,_Ta,"And"],[0,()=>Tag$,[()=>AnalyticsAndOperator$,0]]];MetricsFilter$=[4,n0,"MetricsFilter",0,[_P,_Ta,"AccessPointArn","And"],[0,()=>Tag$,0,[()=>MetricsAndOperator$,0]]];ObjectEncryption$=[4,n0,_OE,0,["SSEKMS"],[[()=>SSEKMSEncryption$,{[_xN]:_SK}]]];SelectObjectContentEventStream$=[4,n0,"SelectObjectContentEventStream",{[_st]:1},["Records","Stats","Progress","Cont","End"],[[()=>RecordsEvent$,0],[()=>StatsEvent$,0],[()=>ProgressEvent$,0],()=>ContinuationEvent$,()=>EndEvent$]];AbortMultipartUpload$=[9,n0,"AbortMultipartUpload",{[_h]:["DELETE","/{Key+}?x-id=AbortMultipartUpload",204]},()=>AbortMultipartUploadRequest$,()=>AbortMultipartUploadOutput$];CompleteMultipartUpload$=[9,n0,_CMUo,{[_h]:["POST","/{Key+}",200]},()=>CompleteMultipartUploadRequest$,()=>CompleteMultipartUploadOutput$];CopyObject$=[9,n0,"CopyObject",{[_h]:["PUT","/{Key+}?x-id=CopyObject",200]},()=>CopyObjectRequest$,()=>CopyObjectOutput$];CreateBucket$=[9,n0,"CreateBucket",{[_h]:["PUT","/",200]},()=>CreateBucketRequest$,()=>CreateBucketOutput$];CreateBucketMetadataConfiguration$=[9,n0,"CreateBucketMetadataConfiguration",{[_hC]:"-",[_h]:["POST","/?metadataConfiguration",200]},()=>CreateBucketMetadataConfigurationRequest$,()=>"unit"];CreateBucketMetadataTableConfiguration$=[9,n0,"CreateBucketMetadataTableConfiguration",{[_hC]:"-",[_h]:["POST","/?metadataTable",200]},()=>CreateBucketMetadataTableConfigurationRequest$,()=>"unit"];CreateMultipartUpload$=[9,n0,"CreateMultipartUpload",{[_h]:["POST","/{Key+}?uploads",200]},()=>CreateMultipartUploadRequest$,()=>CreateMultipartUploadOutput$];CreateSession$=[9,n0,"CreateSession",{[_h]:["GET","/?session",200]},()=>CreateSessionRequest$,()=>CreateSessionOutput$];DeleteBucket$=[9,n0,"DeleteBucket",{[_h]:["DELETE","/",204]},()=>DeleteBucketRequest$,()=>"unit"];DeleteBucketAnalyticsConfiguration$=[9,n0,"DeleteBucketAnalyticsConfiguration",{[_h]:["DELETE","/?analytics",204]},()=>DeleteBucketAnalyticsConfigurationRequest$,()=>"unit"];DeleteBucketCors$=[9,n0,"DeleteBucketCors",{[_h]:["DELETE","/?cors",204]},()=>DeleteBucketCorsRequest$,()=>"unit"];DeleteBucketEncryption$=[9,n0,"DeleteBucketEncryption",{[_h]:["DELETE","/?encryption",204]},()=>DeleteBucketEncryptionRequest$,()=>"unit"];DeleteBucketIntelligentTieringConfiguration$=[9,n0,"DeleteBucketIntelligentTieringConfiguration",{[_h]:["DELETE","/?intelligent-tiering",204]},()=>DeleteBucketIntelligentTieringConfigurationRequest$,()=>"unit"];DeleteBucketInventoryConfiguration$=[9,n0,"DeleteBucketInventoryConfiguration",{[_h]:["DELETE","/?inventory",204]},()=>DeleteBucketInventoryConfigurationRequest$,()=>"unit"];DeleteBucketLifecycle$=[9,n0,"DeleteBucketLifecycle",{[_h]:["DELETE","/?lifecycle",204]},()=>DeleteBucketLifecycleRequest$,()=>"unit"];DeleteBucketMetadataConfiguration$=[9,n0,"DeleteBucketMetadataConfiguration",{[_h]:["DELETE","/?metadataConfiguration",204]},()=>DeleteBucketMetadataConfigurationRequest$,()=>"unit"];DeleteBucketMetadataTableConfiguration$=[9,n0,"DeleteBucketMetadataTableConfiguration",{[_h]:["DELETE","/?metadataTable",204]},()=>DeleteBucketMetadataTableConfigurationRequest$,()=>"unit"];DeleteBucketMetricsConfiguration$=[9,n0,"DeleteBucketMetricsConfiguration",{[_h]:["DELETE","/?metrics",204]},()=>DeleteBucketMetricsConfigurationRequest$,()=>"unit"];DeleteBucketOwnershipControls$=[9,n0,"DeleteBucketOwnershipControls",{[_h]:["DELETE","/?ownershipControls",204]},()=>DeleteBucketOwnershipControlsRequest$,()=>"unit"];DeleteBucketPolicy$=[9,n0,"DeleteBucketPolicy",{[_h]:["DELETE","/?policy",204]},()=>DeleteBucketPolicyRequest$,()=>"unit"];DeleteBucketReplication$=[9,n0,"DeleteBucketReplication",{[_h]:["DELETE","/?replication",204]},()=>DeleteBucketReplicationRequest$,()=>"unit"];DeleteBucketTagging$=[9,n0,"DeleteBucketTagging",{[_h]:["DELETE","/?tagging",204]},()=>DeleteBucketTaggingRequest$,()=>"unit"];DeleteBucketWebsite$=[9,n0,"DeleteBucketWebsite",{[_h]:["DELETE","/?website",204]},()=>DeleteBucketWebsiteRequest$,()=>"unit"];DeleteObject$=[9,n0,"DeleteObject",{[_h]:["DELETE","/{Key+}?x-id=DeleteObject",204]},()=>DeleteObjectRequest$,()=>DeleteObjectOutput$];DeleteObjects$=[9,n0,"DeleteObjects",{[_hC]:"-",[_h]:["POST","/?delete",200]},()=>DeleteObjectsRequest$,()=>DeleteObjectsOutput$];DeleteObjectTagging$=[9,n0,"DeleteObjectTagging",{[_h]:["DELETE","/{Key+}?tagging",204]},()=>DeleteObjectTaggingRequest$,()=>DeleteObjectTaggingOutput$];DeletePublicAccessBlock$=[9,n0,"DeletePublicAccessBlock",{[_h]:["DELETE","/?publicAccessBlock",204]},()=>DeletePublicAccessBlockRequest$,()=>"unit"];GetBucketAbac$=[9,n0,"GetBucketAbac",{[_h]:["GET","/?abac",200]},()=>GetBucketAbacRequest$,()=>GetBucketAbacOutput$];GetBucketAccelerateConfiguration$=[9,n0,"GetBucketAccelerateConfiguration",{[_h]:["GET","/?accelerate",200]},()=>GetBucketAccelerateConfigurationRequest$,()=>GetBucketAccelerateConfigurationOutput$];GetBucketAcl$=[9,n0,"GetBucketAcl",{[_h]:["GET","/?acl",200]},()=>GetBucketAclRequest$,()=>GetBucketAclOutput$];GetBucketAnalyticsConfiguration$=[9,n0,"GetBucketAnalyticsConfiguration",{[_h]:["GET","/?analytics&x-id=GetBucketAnalyticsConfiguration",200]},()=>GetBucketAnalyticsConfigurationRequest$,()=>GetBucketAnalyticsConfigurationOutput$];GetBucketCors$=[9,n0,"GetBucketCors",{[_h]:["GET","/?cors",200]},()=>GetBucketCorsRequest$,()=>GetBucketCorsOutput$];GetBucketEncryption$=[9,n0,"GetBucketEncryption",{[_h]:["GET","/?encryption",200]},()=>GetBucketEncryptionRequest$,()=>GetBucketEncryptionOutput$];GetBucketIntelligentTieringConfiguration$=[9,n0,"GetBucketIntelligentTieringConfiguration",{[_h]:["GET","/?intelligent-tiering&x-id=GetBucketIntelligentTieringConfiguration",200]},()=>GetBucketIntelligentTieringConfigurationRequest$,()=>GetBucketIntelligentTieringConfigurationOutput$];GetBucketInventoryConfiguration$=[9,n0,"GetBucketInventoryConfiguration",{[_h]:["GET","/?inventory&x-id=GetBucketInventoryConfiguration",200]},()=>GetBucketInventoryConfigurationRequest$,()=>GetBucketInventoryConfigurationOutput$];GetBucketLifecycleConfiguration$=[9,n0,"GetBucketLifecycleConfiguration",{[_h]:["GET","/?lifecycle",200]},()=>GetBucketLifecycleConfigurationRequest$,()=>GetBucketLifecycleConfigurationOutput$];GetBucketLocation$=[9,n0,"GetBucketLocation",{[_h]:["GET","/?location",200]},()=>GetBucketLocationRequest$,()=>GetBucketLocationOutput$];GetBucketLogging$=[9,n0,"GetBucketLogging",{[_h]:["GET","/?logging",200]},()=>GetBucketLoggingRequest$,()=>GetBucketLoggingOutput$];GetBucketMetadataConfiguration$=[9,n0,"GetBucketMetadataConfiguration",{[_h]:["GET","/?metadataConfiguration",200]},()=>GetBucketMetadataConfigurationRequest$,()=>GetBucketMetadataConfigurationOutput$];GetBucketMetadataTableConfiguration$=[9,n0,"GetBucketMetadataTableConfiguration",{[_h]:["GET","/?metadataTable",200]},()=>GetBucketMetadataTableConfigurationRequest$,()=>GetBucketMetadataTableConfigurationOutput$];GetBucketMetricsConfiguration$=[9,n0,"GetBucketMetricsConfiguration",{[_h]:["GET","/?metrics&x-id=GetBucketMetricsConfiguration",200]},()=>GetBucketMetricsConfigurationRequest$,()=>GetBucketMetricsConfigurationOutput$];GetBucketNotificationConfiguration$=[9,n0,"GetBucketNotificationConfiguration",{[_h]:["GET","/?notification",200]},()=>GetBucketNotificationConfigurationRequest$,()=>NotificationConfiguration$];GetBucketOwnershipControls$=[9,n0,"GetBucketOwnershipControls",{[_h]:["GET","/?ownershipControls",200]},()=>GetBucketOwnershipControlsRequest$,()=>GetBucketOwnershipControlsOutput$];GetBucketPolicy$=[9,n0,"GetBucketPolicy",{[_h]:["GET","/?policy",200]},()=>GetBucketPolicyRequest$,()=>GetBucketPolicyOutput$];GetBucketPolicyStatus$=[9,n0,"GetBucketPolicyStatus",{[_h]:["GET","/?policyStatus",200]},()=>GetBucketPolicyStatusRequest$,()=>GetBucketPolicyStatusOutput$];GetBucketReplication$=[9,n0,"GetBucketReplication",{[_h]:["GET","/?replication",200]},()=>GetBucketReplicationRequest$,()=>GetBucketReplicationOutput$];GetBucketRequestPayment$=[9,n0,"GetBucketRequestPayment",{[_h]:["GET","/?requestPayment",200]},()=>GetBucketRequestPaymentRequest$,()=>GetBucketRequestPaymentOutput$];GetBucketTagging$=[9,n0,"GetBucketTagging",{[_h]:["GET","/?tagging",200]},()=>GetBucketTaggingRequest$,()=>GetBucketTaggingOutput$];GetBucketVersioning$=[9,n0,"GetBucketVersioning",{[_h]:["GET","/?versioning",200]},()=>GetBucketVersioningRequest$,()=>GetBucketVersioningOutput$];GetBucketWebsite$=[9,n0,"GetBucketWebsite",{[_h]:["GET","/?website",200]},()=>GetBucketWebsiteRequest$,()=>GetBucketWebsiteOutput$];GetObject$=[9,n0,"GetObject",{[_hC]:"-",[_h]:["GET","/{Key+}?x-id=GetObject",200]},()=>GetObjectRequest$,()=>GetObjectOutput$];GetObjectAcl$=[9,n0,"GetObjectAcl",{[_h]:["GET","/{Key+}?acl",200]},()=>GetObjectAclRequest$,()=>GetObjectAclOutput$];GetObjectAttributes$=[9,n0,"GetObjectAttributes",{[_h]:["GET","/{Key+}?attributes",200]},()=>GetObjectAttributesRequest$,()=>GetObjectAttributesOutput$];GetObjectLegalHold$=[9,n0,"GetObjectLegalHold",{[_h]:["GET","/{Key+}?legal-hold",200]},()=>GetObjectLegalHoldRequest$,()=>GetObjectLegalHoldOutput$];GetObjectLockConfiguration$=[9,n0,"GetObjectLockConfiguration",{[_h]:["GET","/?object-lock",200]},()=>GetObjectLockConfigurationRequest$,()=>GetObjectLockConfigurationOutput$];GetObjectRetention$=[9,n0,"GetObjectRetention",{[_h]:["GET","/{Key+}?retention",200]},()=>GetObjectRetentionRequest$,()=>GetObjectRetentionOutput$];GetObjectTagging$=[9,n0,"GetObjectTagging",{[_h]:["GET","/{Key+}?tagging",200]},()=>GetObjectTaggingRequest$,()=>GetObjectTaggingOutput$];GetObjectTorrent$=[9,n0,"GetObjectTorrent",{[_h]:["GET","/{Key+}?torrent",200]},()=>GetObjectTorrentRequest$,()=>GetObjectTorrentOutput$];GetPublicAccessBlock$=[9,n0,"GetPublicAccessBlock",{[_h]:["GET","/?publicAccessBlock",200]},()=>GetPublicAccessBlockRequest$,()=>GetPublicAccessBlockOutput$];HeadBucket$=[9,n0,"HeadBucket",{[_h]:["HEAD","/",200]},()=>HeadBucketRequest$,()=>HeadBucketOutput$];HeadObject$=[9,n0,"HeadObject",{[_h]:["HEAD","/{Key+}",200]},()=>HeadObjectRequest$,()=>HeadObjectOutput$];ListBucketAnalyticsConfigurations$=[9,n0,"ListBucketAnalyticsConfigurations",{[_h]:["GET","/?analytics&x-id=ListBucketAnalyticsConfigurations",200]},()=>ListBucketAnalyticsConfigurationsRequest$,()=>ListBucketAnalyticsConfigurationsOutput$];ListBucketIntelligentTieringConfigurations$=[9,n0,"ListBucketIntelligentTieringConfigurations",{[_h]:["GET","/?intelligent-tiering&x-id=ListBucketIntelligentTieringConfigurations",200]},()=>ListBucketIntelligentTieringConfigurationsRequest$,()=>ListBucketIntelligentTieringConfigurationsOutput$];ListBucketInventoryConfigurations$=[9,n0,"ListBucketInventoryConfigurations",{[_h]:["GET","/?inventory&x-id=ListBucketInventoryConfigurations",200]},()=>ListBucketInventoryConfigurationsRequest$,()=>ListBucketInventoryConfigurationsOutput$];ListBucketMetricsConfigurations$=[9,n0,"ListBucketMetricsConfigurations",{[_h]:["GET","/?metrics&x-id=ListBucketMetricsConfigurations",200]},()=>ListBucketMetricsConfigurationsRequest$,()=>ListBucketMetricsConfigurationsOutput$];ListBuckets$=[9,n0,"ListBuckets",{[_h]:["GET","/?x-id=ListBuckets",200]},()=>ListBucketsRequest$,()=>ListBucketsOutput$];ListDirectoryBuckets$=[9,n0,"ListDirectoryBuckets",{[_h]:["GET","/?x-id=ListDirectoryBuckets",200]},()=>ListDirectoryBucketsRequest$,()=>ListDirectoryBucketsOutput$];ListMultipartUploads$=[9,n0,"ListMultipartUploads",{[_h]:["GET","/?uploads",200]},()=>ListMultipartUploadsRequest$,()=>ListMultipartUploadsOutput$];ListObjects$=[9,n0,"ListObjects",{[_h]:["GET","/",200]},()=>ListObjectsRequest$,()=>ListObjectsOutput$];ListObjectsV2$=[9,n0,"ListObjectsV2",{[_h]:["GET","/?list-type=2",200]},()=>ListObjectsV2Request$,()=>ListObjectsV2Output$];ListObjectVersions$=[9,n0,"ListObjectVersions",{[_h]:["GET","/?versions",200]},()=>ListObjectVersionsRequest$,()=>ListObjectVersionsOutput$];ListParts$=[9,n0,"ListParts",{[_h]:["GET","/{Key+}?x-id=ListParts",200]},()=>ListPartsRequest$,()=>ListPartsOutput$];PutBucketAbac$=[9,n0,"PutBucketAbac",{[_hC]:"-",[_h]:["PUT","/?abac",200]},()=>PutBucketAbacRequest$,()=>"unit"];PutBucketAccelerateConfiguration$=[9,n0,"PutBucketAccelerateConfiguration",{[_hC]:"-",[_h]:["PUT","/?accelerate",200]},()=>PutBucketAccelerateConfigurationRequest$,()=>"unit"];PutBucketAcl$=[9,n0,"PutBucketAcl",{[_hC]:"-",[_h]:["PUT","/?acl",200]},()=>PutBucketAclRequest$,()=>"unit"];PutBucketAnalyticsConfiguration$=[9,n0,"PutBucketAnalyticsConfiguration",{[_h]:["PUT","/?analytics",200]},()=>PutBucketAnalyticsConfigurationRequest$,()=>"unit"];PutBucketCors$=[9,n0,"PutBucketCors",{[_hC]:"-",[_h]:["PUT","/?cors",200]},()=>PutBucketCorsRequest$,()=>"unit"];PutBucketEncryption$=[9,n0,"PutBucketEncryption",{[_hC]:"-",[_h]:["PUT","/?encryption",200]},()=>PutBucketEncryptionRequest$,()=>"unit"];PutBucketIntelligentTieringConfiguration$=[9,n0,"PutBucketIntelligentTieringConfiguration",{[_h]:["PUT","/?intelligent-tiering",200]},()=>PutBucketIntelligentTieringConfigurationRequest$,()=>"unit"];PutBucketInventoryConfiguration$=[9,n0,"PutBucketInventoryConfiguration",{[_h]:["PUT","/?inventory",200]},()=>PutBucketInventoryConfigurationRequest$,()=>"unit"];PutBucketLifecycleConfiguration$=[9,n0,"PutBucketLifecycleConfiguration",{[_hC]:"-",[_h]:["PUT","/?lifecycle",200]},()=>PutBucketLifecycleConfigurationRequest$,()=>PutBucketLifecycleConfigurationOutput$];PutBucketLogging$=[9,n0,"PutBucketLogging",{[_hC]:"-",[_h]:["PUT","/?logging",200]},()=>PutBucketLoggingRequest$,()=>"unit"];PutBucketMetricsConfiguration$=[9,n0,"PutBucketMetricsConfiguration",{[_h]:["PUT","/?metrics",200]},()=>PutBucketMetricsConfigurationRequest$,()=>"unit"];PutBucketNotificationConfiguration$=[9,n0,"PutBucketNotificationConfiguration",{[_h]:["PUT","/?notification",200]},()=>PutBucketNotificationConfigurationRequest$,()=>"unit"];PutBucketOwnershipControls$=[9,n0,"PutBucketOwnershipControls",{[_hC]:"-",[_h]:["PUT","/?ownershipControls",200]},()=>PutBucketOwnershipControlsRequest$,()=>"unit"];PutBucketPolicy$=[9,n0,"PutBucketPolicy",{[_hC]:"-",[_h]:["PUT","/?policy",200]},()=>PutBucketPolicyRequest$,()=>"unit"];PutBucketReplication$=[9,n0,"PutBucketReplication",{[_hC]:"-",[_h]:["PUT","/?replication",200]},()=>PutBucketReplicationRequest$,()=>"unit"];PutBucketRequestPayment$=[9,n0,"PutBucketRequestPayment",{[_hC]:"-",[_h]:["PUT","/?requestPayment",200]},()=>PutBucketRequestPaymentRequest$,()=>"unit"];PutBucketTagging$=[9,n0,"PutBucketTagging",{[_hC]:"-",[_h]:["PUT","/?tagging",200]},()=>PutBucketTaggingRequest$,()=>"unit"];PutBucketVersioning$=[9,n0,"PutBucketVersioning",{[_hC]:"-",[_h]:["PUT","/?versioning",200]},()=>PutBucketVersioningRequest$,()=>"unit"];PutBucketWebsite$=[9,n0,"PutBucketWebsite",{[_hC]:"-",[_h]:["PUT","/?website",200]},()=>PutBucketWebsiteRequest$,()=>"unit"];PutObject$=[9,n0,"PutObject",{[_hC]:"-",[_h]:["PUT","/{Key+}?x-id=PutObject",200]},()=>PutObjectRequest$,()=>PutObjectOutput$];PutObjectAcl$=[9,n0,"PutObjectAcl",{[_hC]:"-",[_h]:["PUT","/{Key+}?acl",200]},()=>PutObjectAclRequest$,()=>PutObjectAclOutput$];PutObjectLegalHold$=[9,n0,"PutObjectLegalHold",{[_hC]:"-",[_h]:["PUT","/{Key+}?legal-hold",200]},()=>PutObjectLegalHoldRequest$,()=>PutObjectLegalHoldOutput$];PutObjectLockConfiguration$=[9,n0,"PutObjectLockConfiguration",{[_hC]:"-",[_h]:["PUT","/?object-lock",200]},()=>PutObjectLockConfigurationRequest$,()=>PutObjectLockConfigurationOutput$];PutObjectRetention$=[9,n0,"PutObjectRetention",{[_hC]:"-",[_h]:["PUT","/{Key+}?retention",200]},()=>PutObjectRetentionRequest$,()=>PutObjectRetentionOutput$];PutObjectTagging$=[9,n0,"PutObjectTagging",{[_hC]:"-",[_h]:["PUT","/{Key+}?tagging",200]},()=>PutObjectTaggingRequest$,()=>PutObjectTaggingOutput$];PutPublicAccessBlock$=[9,n0,"PutPublicAccessBlock",{[_hC]:"-",[_h]:["PUT","/?publicAccessBlock",200]},()=>PutPublicAccessBlockRequest$,()=>"unit"];RenameObject$=[9,n0,"RenameObject",{[_h]:["PUT","/{Key+}?renameObject",200]},()=>RenameObjectRequest$,()=>RenameObjectOutput$];RestoreObject$=[9,n0,"RestoreObject",{[_hC]:"-",[_h]:["POST","/{Key+}?restore",200]},()=>RestoreObjectRequest$,()=>RestoreObjectOutput$];SelectObjectContent$=[9,n0,"SelectObjectContent",{[_h]:["POST","/{Key+}?select&select-type=2",200]},()=>SelectObjectContentRequest$,()=>SelectObjectContentOutput$];UpdateBucketMetadataInventoryTableConfiguration$=[9,n0,"UpdateBucketMetadataInventoryTableConfiguration",{[_hC]:"-",[_h]:["PUT","/?metadataInventoryTable",200]},()=>UpdateBucketMetadataInventoryTableConfigurationRequest$,()=>"unit"];UpdateBucketMetadataJournalTableConfiguration$=[9,n0,"UpdateBucketMetadataJournalTableConfiguration",{[_hC]:"-",[_h]:["PUT","/?metadataJournalTable",200]},()=>UpdateBucketMetadataJournalTableConfigurationRequest$,()=>"unit"];UpdateObjectEncryption$=[9,n0,"UpdateObjectEncryption",{[_hC]:"-",[_h]:["PUT","/{Key+}?encryption",200]},()=>UpdateObjectEncryptionRequest$,()=>UpdateObjectEncryptionResponse$];UploadPart$=[9,n0,"UploadPart",{[_hC]:"-",[_h]:["PUT","/{Key+}?x-id=UploadPart",200]},()=>UploadPartRequest$,()=>UploadPartOutput$];UploadPartCopy$=[9,n0,"UploadPartCopy",{[_h]:["PUT","/{Key+}?x-id=UploadPartCopy",200]},()=>UploadPartCopyRequest$,()=>UploadPartCopyOutput$];WriteGetObjectResponse$=[9,n0,"WriteGetObjectResponse",{[_en]:["{RequestRoute}."],[_h]:["POST","/WriteGetObjectResponse",200]},()=>WriteGetObjectResponseRequest$,()=>"unit"];CreateSessionCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","CreateSession",{}).n("S3Client","CreateSessionCommand").sc(CreateSession$).build()){};fromUtf84=input=>(new TextEncoder).encode(input);SHA_1_HMAC_ALGO={name:"HMAC",hash:SHA_1_HASH={name:"SHA-1"}};EMPTY_DATA_SHA_1=new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]);fallbackWindow={};Sha1=function(){function Sha13(secret){this.toHash=new Uint8Array(0);if(void 0!==secret){this.key=new Promise(function(resolve,reject){locateWindow().crypto.subtle.importKey("raw",convertToBuffer2(secret),SHA_1_HMAC_ALGO,!1,["sign"]).then(resolve,reject)});this.key.catch(function(){})}}Sha13.prototype.update=function(data){var update2,typedArray;if(!isEmptyData2(data)){update2=convertToBuffer2(data);(typedArray=new Uint8Array(this.toHash.byteLength+update2.byteLength)).set(this.toHash,0);typedArray.set(update2,this.toHash.byteLength);this.toHash=typedArray}};Sha13.prototype.digest=function(){var _this=this;return this.key?this.key.then(function(key3){return locateWindow().crypto.subtle.sign(SHA_1_HMAC_ALGO,key3,_this.toHash).then(function(data){return new Uint8Array(data)})}):isEmptyData2(this.toHash)?Promise.resolve(EMPTY_DATA_SHA_1):Promise.resolve().then(function(){return locateWindow().crypto.subtle.digest(SHA_1_HASH,_this.toHash)}).then(function(data){return Promise.resolve(new Uint8Array(data))})};Sha13.prototype.reset=function(){this.toHash=new Uint8Array(0)};return Sha13}();subtleCryptoMethods=["decrypt","digest","encrypt","exportKey","generateKey","importKey","sign","verify"];Sha12=function(){function Sha13(secret){if(!supportsWebCrypto(locateWindow()))throw new Error("SHA1 not supported");this.hash=new Sha1(secret)}Sha13.prototype.update=function(data,encoding){this.hash.update(convertToBuffer(data))};Sha13.prototype.digest=function(){return this.hash.digest()};Sha13.prototype.reset=function(){this.hash.reset()};return Sha13}();SHA_256_HMAC_ALGO={name:"HMAC",hash:SHA_256_HASH={name:"SHA-256"}};EMPTY_DATA_SHA_256=new Uint8Array([227,176,196,66,152,252,28,20,154,251,244,200,153,111,185,36,39,174,65,228,100,155,147,76,164,149,153,27,120,82,184,85]);Sha256=function(){function Sha2564(secret){this.toHash=new Uint8Array(0);this.secret=secret;this.reset()}Sha2564.prototype.update=function(data){var update2,typedArray;if(!isEmptyData(data)){update2=convertToBuffer(data);(typedArray=new Uint8Array(this.toHash.byteLength+update2.byteLength)).set(this.toHash,0);typedArray.set(update2,this.toHash.byteLength);this.toHash=typedArray}};Sha2564.prototype.digest=function(){var _this=this;return this.key?this.key.then(function(key3){return locateWindow().crypto.subtle.sign(SHA_256_HMAC_ALGO,key3,_this.toHash).then(function(data){return new Uint8Array(data)})}):isEmptyData(this.toHash)?Promise.resolve(EMPTY_DATA_SHA_256):Promise.resolve().then(function(){return locateWindow().crypto.subtle.digest(SHA_256_HASH,_this.toHash)}).then(function(data){return Promise.resolve(new Uint8Array(data))})};Sha2564.prototype.reset=function(){var _this=this;this.toHash=new Uint8Array(0);if(this.secret&&void 0!==this.secret){this.key=new Promise(function(resolve,reject){locateWindow().crypto.subtle.importKey("raw",convertToBuffer(_this.secret),SHA_256_HMAC_ALGO,!1,["sign"]).then(resolve,reject)});this.key.catch(function(){})}};return Sha2564}();BLOCK_SIZE=64;KEY=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);INIT=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];MAX_HASHABLE_LENGTH=Math.pow(2,53)-1;RawSha256=function(){function RawSha2562(){this.state=Int32Array.from(INIT);this.temp=new Int32Array(64);this.buffer=new Uint8Array(64);this.bufferLength=0;this.bytesHashed=0;this.finished=!1}RawSha2562.prototype.update=function(data){var position,byteLength;if(this.finished)throw new Error("Attempted to update an already finished hash.");position=0;byteLength=data.byteLength;this.bytesHashed+=byteLength;if(8*this.bytesHashed>MAX_HASHABLE_LENGTH)throw new Error("Cannot hash more than 2^53 - 1 bits");for(;byteLength>0;){this.buffer[this.bufferLength++]=data[position++];byteLength--;if(this.bufferLength===BLOCK_SIZE){this.hashBuffer();this.bufferLength=0}}};RawSha2562.prototype.digest=function(){var bitsHashed,bufferView,undecoratedLength,i2,out;if(!this.finished){bitsHashed=8*this.bytesHashed;bufferView=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength);undecoratedLength=this.bufferLength;bufferView.setUint8(this.bufferLength++,128);if(undecoratedLength%BLOCK_SIZE>=BLOCK_SIZE-8){for(i2=this.bufferLength;i2<BLOCK_SIZE;i2++)bufferView.setUint8(i2,0);this.hashBuffer();this.bufferLength=0}for(i2=this.bufferLength;i2<BLOCK_SIZE-8;i2++)bufferView.setUint8(i2,0);bufferView.setUint32(BLOCK_SIZE-8,Math.floor(bitsHashed/4294967296),!0);bufferView.setUint32(BLOCK_SIZE-4,bitsHashed);this.hashBuffer();this.finished=!0}out=new Uint8Array(32);for(i2=0;i2<8;i2++){out[4*i2]=this.state[i2]>>>24&255;out[4*i2+1]=this.state[i2]>>>16&255;out[4*i2+2]=this.state[i2]>>>8&255;out[4*i2+3]=this.state[i2]>>>0&255}return out};RawSha2562.prototype.hashBuffer=function(){var i2,u2,t1_1,t2_1,t12,t22,buffer=this.buffer,state2=this.state,state0=state2[0],state1=state2[1],state22=state2[2],state3=state2[3],state4=state2[4],state5=state2[5],state6=state2[6],state7=state2[7];for(i2=0;i2<BLOCK_SIZE;i2++){if(i2<16)this.temp[i2]=(255&buffer[4*i2])<<24|(255&buffer[4*i2+1])<<16|(255&buffer[4*i2+2])<<8|255&buffer[4*i2+3];else{t1_1=((u2=this.temp[i2-2])>>>17|u2<<15)^(u2>>>19|u2<<13)^u2>>>10;t2_1=((u2=this.temp[i2-15])>>>7|u2<<25)^(u2>>>18|u2<<14)^u2>>>3;this.temp[i2]=(t1_1+this.temp[i2-7]|0)+(t2_1+this.temp[i2-16]|0)}t12=(((state4>>>6|state4<<26)^(state4>>>11|state4<<21)^(state4>>>25|state4<<7))+(state4&state5^~state4&state6)|0)+(state7+(KEY[i2]+this.temp[i2]|0)|0)|0;t22=((state0>>>2|state0<<30)^(state0>>>13|state0<<19)^(state0>>>22|state0<<10))+(state0&state1^state0&state22^state1&state22)|0;state7=state6;state6=state5;state5=state4;state4=state3+t12|0;state3=state22;state22=state1;state1=state0;state0=t12+t22|0}state2[0]+=state0;state2[1]+=state1;state2[2]+=state22;state2[3]+=state3;state2[4]+=state4;state2[5]+=state5;state2[6]+=state6;state2[7]+=state7};return RawSha2562}();Sha2562=function(){function Sha2564(secret){this.secret=secret;this.hash=new RawSha256;this.reset()}Sha2564.prototype.update=function(toHash){if(!isEmptyData(toHash)&&!this.error)try{this.hash.update(convertToBuffer(toHash))}catch(e3){this.error=e3}};Sha2564.prototype.digestSync=function(){if(this.error)throw this.error;if(this.outer){this.outer.finished||this.outer.update(this.hash.digest());return this.outer.digest()}return this.hash.digest()};Sha2564.prototype.digest=function(){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(_a8){return[2,this.digestSync()]})})};Sha2564.prototype.reset=function(){var inner,outer,i2;this.hash=new RawSha256;if(this.secret){this.outer=new RawSha256;inner=bufferFromSecret(this.secret);(outer=new Uint8Array(BLOCK_SIZE)).set(inner);for(i2=0;i2<BLOCK_SIZE;i2++){inner[i2]^=54;outer[i2]^=92}this.hash.update(inner);this.outer.update(outer);for(i2=0;i2<inner.byteLength;i2++)inner[i2]=0}};return Sha2564}();Sha2563=function(){function Sha2564(secret){supportsWebCrypto(locateWindow())?this.hash=new Sha256(secret):this.hash=new Sha2562(secret)}Sha2564.prototype.update=function(data,encoding){this.hash.update(convertToBuffer(data))};Sha2564.prototype.digest=function(){return this.hash.digest()};Sha2564.prototype.reset=function(){this.hash.reset()};return Sha2564}();createDefaultUserAgentProvider=({serviceId,clientVersion})=>async config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j;const navigator2="undefined"!=typeof window?window.navigator:void 0,uaString=null!=(_a8=null==navigator2?void 0:navigator2.userAgent)?_a8:"",osName=null!=(_d2=null!=(_c3=null==(_b5=null==navigator2?void 0:navigator2.userAgentData)?void 0:_b5.platform)?_c3:fallback2.os(uaString))?_d2:"other",brands=null!=(_f=null==(_e2=null==navigator2?void 0:navigator2.userAgentData)?void 0:_e2.brands)?_f:[],brand=brands[brands.length-1],browserName=null!=(_h2=null!=(_g=null==brand?void 0:brand.brand)?_g:fallback2.browser(uaString))?_h2:"unknown",browserVersion=null!=(_i2=null==brand?void 0:brand.version)?_i2:"unknown",sections=[["aws-sdk-js",clientVersion],["ua","2.1"],[`os/${osName}`,void 0],["lang/js"],["md/browser",`${browserName}_${browserVersion}`]];serviceId&&sections.push([`api/${serviceId}`,clientVersion]);const appId=await(null==(_j=null==config?void 0:config.userAgentAppId)?void 0:_j.call(config));appId&&sections.push([`app/${appId}`]);return sections};fallback2={os:ua=>/iPhone|iPad|iPod/.test(ua)?"iOS":/Macintosh|Mac OS X/.test(ua)?"macOS":/Windows NT/.test(ua)?"Windows":/Android/.test(ua)?"Android":/Linux/.test(ua)?"Linux":void 0,browser:ua=>/EdgiOS|EdgA|Edg\//.test(ua)?"Microsoft Edge":/Firefox\//.test(ua)?"Firefox":/Chrome\//.test(ua)?"Chrome":/Safari\//.test(ua)?"Safari":void 0};Int642=class _Int64{constructor(bytes){__publicField(this,"bytes");this.bytes=bytes;if(8!==bytes.byteLength)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(number){if(number>0x8000000000000000||number<-0x8000000000000000)throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);const bytes=new Uint8Array(8);for(let i2=7,remaining=Math.abs(Math.round(number));i2>-1&&remaining>0;i2--,remaining/=256)bytes[i2]=remaining;number<0&&negate2(bytes);return new _Int64(bytes)}valueOf(){const bytes=this.bytes.slice(0),negative=128&bytes[0];negative&&negate2(bytes);return parseInt(toHex2(bytes),16)*(negative?-1:1)}toString(){return String(this.valueOf())}};HeaderMarshaller=class{constructor(toUtf82,fromUtf85){__publicField(this,"toUtf8");__publicField(this,"fromUtf8");this.toUtf8=toUtf82;this.fromUtf8=fromUtf85}format(headers){const chunks=[];for(const headerName of Object.keys(headers)){const bytes=this.fromUtf8(headerName);chunks.push(Uint8Array.from([bytes.byteLength]),bytes,this.formatHeaderValue(headers[headerName]))}const out=new Uint8Array(chunks.reduce((carry,bytes)=>carry+bytes.byteLength,0));let position=0;for(const chunk of chunks){out.set(chunk,position);position+=chunk.byteLength}return out}formatHeaderValue(header){switch(header.type){case"boolean":return Uint8Array.from([header.value?0:1]);case"byte":return Uint8Array.from([2,header.value]);case"short":const shortView=new DataView(new ArrayBuffer(3));shortView.setUint8(0,3);shortView.setInt16(1,header.value,!1);return new Uint8Array(shortView.buffer);case"integer":const intView=new DataView(new ArrayBuffer(5));intView.setUint8(0,4);intView.setInt32(1,header.value,!1);return new Uint8Array(intView.buffer);case"long":const longBytes=new Uint8Array(9);longBytes[0]=5;longBytes.set(header.value.bytes,1);return longBytes;case"binary":const binView=new DataView(new ArrayBuffer(3+header.value.byteLength));binView.setUint8(0,6);binView.setUint16(1,header.value.byteLength,!1);const binBytes=new Uint8Array(binView.buffer);binBytes.set(header.value,3);return binBytes;case"string":const utf8Bytes=this.fromUtf8(header.value),strView=new DataView(new ArrayBuffer(3+utf8Bytes.byteLength));strView.setUint8(0,7);strView.setUint16(1,utf8Bytes.byteLength,!1);const strBytes=new Uint8Array(strView.buffer);strBytes.set(utf8Bytes,3);return strBytes;case"timestamp":const tsBytes=new Uint8Array(9);tsBytes[0]=8;tsBytes.set(Int642.fromNumber(header.value.valueOf()).bytes,1);return tsBytes;case"uuid":if(!UUID_PATTERN2.test(header.value))throw new Error(`Invalid UUID received: ${header.value}`);const uuidBytes=new Uint8Array(17);uuidBytes[0]=9;uuidBytes.set(fromHex(header.value.replace(/\-/g,"")),1);return uuidBytes}}parse(headers){const out={};let position=0;for(;position<headers.byteLength;){const nameLength=headers.getUint8(position++),name=this.toUtf8(new Uint8Array(headers.buffer,headers.byteOffset+position,nameLength));position+=nameLength;switch(headers.getUint8(position++)){case 0:out[name]={type:BOOLEAN_TAG,value:!0};break;case 1:out[name]={type:BOOLEAN_TAG,value:!1};break;case 2:out[name]={type:BYTE_TAG,value:headers.getInt8(position++)};break;case 3:out[name]={type:SHORT_TAG,value:headers.getInt16(position,!1)};position+=2;break;case 4:out[name]={type:INT_TAG,value:headers.getInt32(position,!1)};position+=4;break;case 5:out[name]={type:LONG_TAG,value:new Int642(new Uint8Array(headers.buffer,headers.byteOffset+position,8))};position+=8;break;case 6:const binaryLength=headers.getUint16(position,!1);position+=2;out[name]={type:BINARY_TAG,value:new Uint8Array(headers.buffer,headers.byteOffset+position,binaryLength)};position+=binaryLength;break;case 7:const stringLength=headers.getUint16(position,!1);position+=2;out[name]={type:STRING_TAG,value:this.toUtf8(new Uint8Array(headers.buffer,headers.byteOffset+position,stringLength))};position+=stringLength;break;case 8:out[name]={type:TIMESTAMP_TAG,value:new Date(new Int642(new Uint8Array(headers.buffer,headers.byteOffset+position,8)).valueOf())};position+=8;break;case 9:const uuidBytes=new Uint8Array(headers.buffer,headers.byteOffset+position,16);position+=16;out[name]={type:UUID_TAG,value:`${toHex2(uuidBytes.subarray(0,4))}-${toHex2(uuidBytes.subarray(4,6))}-${toHex2(uuidBytes.subarray(6,8))}-${toHex2(uuidBytes.subarray(8,10))}-${toHex2(uuidBytes.subarray(10))}`};break;default:throw new Error("Unrecognized header type tag")}}return out}};(function(HEADER_VALUE_TYPE3){HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolTrue=0]="boolTrue";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.boolFalse=1]="boolFalse";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byte=2]="byte";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.short=3]="short";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.integer=4]="integer";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.long=5]="long";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.byteArray=6]="byteArray";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.string=7]="string";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.timestamp=8]="timestamp";HEADER_VALUE_TYPE3[HEADER_VALUE_TYPE3.uuid=9]="uuid"})(HEADER_VALUE_TYPE2||(HEADER_VALUE_TYPE2={}));BOOLEAN_TAG="boolean";BYTE_TAG="byte";SHORT_TAG="short";INT_TAG="integer";LONG_TAG="long";BINARY_TAG="binary";STRING_TAG="string";TIMESTAMP_TAG="timestamp";UUID_TAG="uuid";UUID_PATTERN2=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;MINIMUM_MESSAGE_LENGTH=(PRELUDE_LENGTH=2*(PRELUDE_MEMBER_LENGTH=4))+2*(CHECKSUM_LENGTH=4);EventStreamCodec=class{constructor(toUtf82,fromUtf85){__publicField(this,"headerMarshaller");__publicField(this,"messageBuffer");__publicField(this,"isEndOfStream");this.headerMarshaller=new HeaderMarshaller(toUtf82,fromUtf85);this.messageBuffer=[];this.isEndOfStream=!1}feed(message){this.messageBuffer.push(this.decode(message))}endOfStream(){this.isEndOfStream=!0}getMessage(){const message=this.messageBuffer.pop(),isEndOfStream=this.isEndOfStream;return{getMessage:()=>message,isEndOfStream:()=>isEndOfStream}}getAvailableMessages(){const messages=this.messageBuffer;this.messageBuffer=[];const isEndOfStream=this.isEndOfStream;return{getMessages:()=>messages,isEndOfStream:()=>isEndOfStream}}encode({headers:rawHeaders,body}){const headers=this.headerMarshaller.format(rawHeaders),length=headers.byteLength+body.byteLength+16,out=new Uint8Array(length),view=new DataView(out.buffer,out.byteOffset,out.byteLength),checksum=new Crc32;view.setUint32(0,length,!1);view.setUint32(4,headers.byteLength,!1);view.setUint32(8,checksum.update(out.subarray(0,8)).digest(),!1);out.set(headers,12);out.set(body,headers.byteLength+12);view.setUint32(length-4,checksum.update(out.subarray(8,length-4)).digest(),!1);return out}decode(message){const{headers,body}=splitMessage(message);return{headers:this.headerMarshaller.parse(headers),body}}formatHeaders(rawHeaders){return this.headerMarshaller.format(rawHeaders)}};MessageDecoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const bytes of this.options.inputStream){const decoded=this.options.decoder.decode(bytes);yield decoded}}};MessageEncoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const msg of this.options.messageStream){const encoded=this.options.encoder.encode(msg);yield encoded}this.options.includeEndFrame&&(yield new Uint8Array(0))}};SmithyMessageDecoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const message of this.options.messageStream){const deserialized=await this.options.deserializer(message);void 0!==deserialized&&(yield deserialized)}}};SmithyMessageEncoderStream=class{constructor(options){__publicField(this,"options");this.options=options}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(const chunk of this.options.inputStream){const payloadBuf=this.options.serializer(chunk);yield payloadBuf}}};EventStreamMarshaller=class{constructor({utf8Encoder,utf8Decoder}){__publicField(this,"eventStreamCodec");__publicField(this,"utfEncoder");this.eventStreamCodec=new EventStreamCodec(utf8Encoder,utf8Decoder);this.utfEncoder=utf8Encoder}deserialize(body,deserializer){const inputStream=getChunkedStream(body);return new SmithyMessageDecoderStream({messageStream:new MessageDecoderStream({inputStream,decoder:this.eventStreamCodec}),deserializer:getMessageUnmarshaller(deserializer,this.utfEncoder)})}serialize(inputStream,serializer){return new MessageEncoderStream({messageStream:new SmithyMessageEncoderStream({inputStream,serializer}),encoder:this.eventStreamCodec,includeEndFrame:!0})}};readableStreamtoIterable=readableStream=>({[Symbol.asyncIterator]:async function*(){const reader=readableStream.getReader();try{for(;;){const{done,value}=await reader.read();if(done)return;yield value}}finally{reader.releaseLock()}}});iterableToReadableStream=asyncIterable=>{const iterator=asyncIterable[Symbol.asyncIterator]();return new ReadableStream({async pull(controller){const{done,value}=await iterator.next();if(done)return controller.close();controller.enqueue(value)}})};EventStreamMarshaller2=class{constructor({utf8Encoder,utf8Decoder}){__publicField(this,"universalMarshaller");this.universalMarshaller=new EventStreamMarshaller({utf8Decoder,utf8Encoder})}deserialize(body,deserializer){const bodyIterable=isReadableStream2(body)?readableStreamtoIterable(body):body;return this.universalMarshaller.deserialize(bodyIterable,deserializer)}serialize(input,serializer){const serialziedIterable=this.universalMarshaller.serialize(input,serializer);return"function"==typeof ReadableStream?iterableToReadableStream(serialziedIterable):serialziedIterable}};isReadableStream2=body=>"function"==typeof ReadableStream&&body instanceof ReadableStream;eventStreamSerdeProvider=options=>new EventStreamMarshaller2(options);blobHasher=async function blobHasher2(hashCtor,blob){const hash3=new hashCtor;await blobReader(blob,chunk=>{hash3.update(chunk)});return hash3.digest()};invalidProvider=message=>()=>Promise.reject(message);INIT2=[1732584193,4023233417,2562383102,271733878];init_dist_es();Md5=class{constructor(){__publicField(this,"state");__publicField(this,"buffer");__publicField(this,"bufferLength");__publicField(this,"bytesHashed");__publicField(this,"finished");this.reset()}update(sourceData){if(isEmptyData3(sourceData))return;if(this.finished)throw new Error("Attempted to update an already finished hash.");const data=convertToBuffer3(sourceData);let position=0,{byteLength}=data;this.bytesHashed+=byteLength;for(;byteLength>0;){this.buffer.setUint8(this.bufferLength++,data[position++]);byteLength--;if(64===this.bufferLength){this.hashBuffer();this.bufferLength=0}}}async digest(){if(!this.finished){const{buffer,bufferLength:undecoratedLength,bytesHashed}=this,bitsHashed=8*bytesHashed;buffer.setUint8(this.bufferLength++,128);if(undecoratedLength%64>=56){for(let i2=this.bufferLength;i2<64;i2++)buffer.setUint8(i2,0);this.hashBuffer();this.bufferLength=0}for(let i2=this.bufferLength;i2<56;i2++)buffer.setUint8(i2,0);buffer.setUint32(56,bitsHashed>>>0,!0);buffer.setUint32(60,Math.floor(bitsHashed/4294967296),!0);this.hashBuffer();this.finished=!0}const out=new DataView(new ArrayBuffer(16));for(let i2=0;i2<4;i2++)out.setUint32(4*i2,this.state[i2],!0);return new Uint8Array(out.buffer,out.byteOffset,out.byteLength)}hashBuffer(){const{buffer,state:state2}=this;let a2=state2[0],b3=state2[1],c3=state2[2],d4=state2[3];a2=ff(a2,b3,c3,d4,buffer.getUint32(0,!0),7,3614090360);d4=ff(d4,a2,b3,c3,buffer.getUint32(4,!0),12,3905402710);c3=ff(c3,d4,a2,b3,buffer.getUint32(8,!0),17,606105819);b3=ff(b3,c3,d4,a2,buffer.getUint32(12,!0),22,3250441966);a2=ff(a2,b3,c3,d4,buffer.getUint32(16,!0),7,4118548399);d4=ff(d4,a2,b3,c3,buffer.getUint32(20,!0),12,1200080426);c3=ff(c3,d4,a2,b3,buffer.getUint32(24,!0),17,2821735955);b3=ff(b3,c3,d4,a2,buffer.getUint32(28,!0),22,4249261313);a2=ff(a2,b3,c3,d4,buffer.getUint32(32,!0),7,1770035416);d4=ff(d4,a2,b3,c3,buffer.getUint32(36,!0),12,2336552879);c3=ff(c3,d4,a2,b3,buffer.getUint32(40,!0),17,4294925233);b3=ff(b3,c3,d4,a2,buffer.getUint32(44,!0),22,2304563134);a2=ff(a2,b3,c3,d4,buffer.getUint32(48,!0),7,1804603682);d4=ff(d4,a2,b3,c3,buffer.getUint32(52,!0),12,4254626195);c3=ff(c3,d4,a2,b3,buffer.getUint32(56,!0),17,2792965006);b3=ff(b3,c3,d4,a2,buffer.getUint32(60,!0),22,1236535329);a2=gg(a2,b3,c3,d4,buffer.getUint32(4,!0),5,4129170786);d4=gg(d4,a2,b3,c3,buffer.getUint32(24,!0),9,3225465664);c3=gg(c3,d4,a2,b3,buffer.getUint32(44,!0),14,643717713);b3=gg(b3,c3,d4,a2,buffer.getUint32(0,!0),20,3921069994);a2=gg(a2,b3,c3,d4,buffer.getUint32(20,!0),5,3593408605);d4=gg(d4,a2,b3,c3,buffer.getUint32(40,!0),9,38016083);c3=gg(c3,d4,a2,b3,buffer.getUint32(60,!0),14,3634488961);b3=gg(b3,c3,d4,a2,buffer.getUint32(16,!0),20,3889429448);a2=gg(a2,b3,c3,d4,buffer.getUint32(36,!0),5,568446438);d4=gg(d4,a2,b3,c3,buffer.getUint32(56,!0),9,3275163606);c3=gg(c3,d4,a2,b3,buffer.getUint32(12,!0),14,4107603335);b3=gg(b3,c3,d4,a2,buffer.getUint32(32,!0),20,1163531501);a2=gg(a2,b3,c3,d4,buffer.getUint32(52,!0),5,2850285829);d4=gg(d4,a2,b3,c3,buffer.getUint32(8,!0),9,4243563512);c3=gg(c3,d4,a2,b3,buffer.getUint32(28,!0),14,1735328473);b3=gg(b3,c3,d4,a2,buffer.getUint32(48,!0),20,2368359562);a2=hh(a2,b3,c3,d4,buffer.getUint32(20,!0),4,4294588738);d4=hh(d4,a2,b3,c3,buffer.getUint32(32,!0),11,2272392833);c3=hh(c3,d4,a2,b3,buffer.getUint32(44,!0),16,1839030562);b3=hh(b3,c3,d4,a2,buffer.getUint32(56,!0),23,4259657740);a2=hh(a2,b3,c3,d4,buffer.getUint32(4,!0),4,2763975236);d4=hh(d4,a2,b3,c3,buffer.getUint32(16,!0),11,1272893353);c3=hh(c3,d4,a2,b3,buffer.getUint32(28,!0),16,4139469664);b3=hh(b3,c3,d4,a2,buffer.getUint32(40,!0),23,3200236656);a2=hh(a2,b3,c3,d4,buffer.getUint32(52,!0),4,681279174);d4=hh(d4,a2,b3,c3,buffer.getUint32(0,!0),11,3936430074);c3=hh(c3,d4,a2,b3,buffer.getUint32(12,!0),16,3572445317);b3=hh(b3,c3,d4,a2,buffer.getUint32(24,!0),23,76029189);a2=hh(a2,b3,c3,d4,buffer.getUint32(36,!0),4,3654602809);d4=hh(d4,a2,b3,c3,buffer.getUint32(48,!0),11,3873151461);c3=hh(c3,d4,a2,b3,buffer.getUint32(60,!0),16,530742520);b3=hh(b3,c3,d4,a2,buffer.getUint32(8,!0),23,3299628645);a2=ii(a2,b3,c3,d4,buffer.getUint32(0,!0),6,4096336452);d4=ii(d4,a2,b3,c3,buffer.getUint32(28,!0),10,1126891415);c3=ii(c3,d4,a2,b3,buffer.getUint32(56,!0),15,2878612391);b3=ii(b3,c3,d4,a2,buffer.getUint32(20,!0),21,4237533241);a2=ii(a2,b3,c3,d4,buffer.getUint32(48,!0),6,1700485571);d4=ii(d4,a2,b3,c3,buffer.getUint32(12,!0),10,2399980690);c3=ii(c3,d4,a2,b3,buffer.getUint32(40,!0),15,4293915773);b3=ii(b3,c3,d4,a2,buffer.getUint32(4,!0),21,2240044497);a2=ii(a2,b3,c3,d4,buffer.getUint32(32,!0),6,1873313359);d4=ii(d4,a2,b3,c3,buffer.getUint32(60,!0),10,4264355552);c3=ii(c3,d4,a2,b3,buffer.getUint32(24,!0),15,2734768916);b3=ii(b3,c3,d4,a2,buffer.getUint32(52,!0),21,1309151649);a2=ii(a2,b3,c3,d4,buffer.getUint32(16,!0),6,4149444226);d4=ii(d4,a2,b3,c3,buffer.getUint32(44,!0),10,3174756917);c3=ii(c3,d4,a2,b3,buffer.getUint32(8,!0),15,718787259);b3=ii(b3,c3,d4,a2,buffer.getUint32(36,!0),21,3951481745);state2[0]=a2+state2[0]&4294967295;state2[1]=b3+state2[1]&4294967295;state2[2]=c3+state2[2]&4294967295;state2[3]=d4+state2[3]&4294967295}reset(){this.state=Uint32Array.from(INIT2);this.buffer=new DataView(new ArrayBuffer(64));this.bufferLength=0;this.bytesHashed=0;this.finished=!1}};DEFAULTS_MODE_OPTIONS=["in-region","cross-region","mobile","standard","legacy"];resolveDefaultsModeConfig=({defaultsMode}={})=>memoize(async()=>{const mode="function"==typeof defaultsMode?await defaultsMode():defaultsMode;switch(null==mode?void 0:mode.toLowerCase()){case"auto":return Promise.resolve(useMobileConfiguration()?"mobile":"standard");case"mobile":case"in-region":case"cross-region":case"standard":case"legacy":return Promise.resolve(null==mode?void 0:mode.toLocaleLowerCase());case void 0:return Promise.resolve("legacy");default:throw new Error(`Invalid parameter for "defaultsMode", expect ${DEFAULTS_MODE_OPTIONS.join(", ")}, got ${mode}`)}});useMobileConfiguration=()=>{var _a8;const navigator2=null==window?void 0:window.navigator;if(null==navigator2?void 0:navigator2.connection){const{effectiveType,rtt,downlink}=null==navigator2?void 0:navigator2.connection;if("string"==typeof effectiveType&&"4g"!==effectiveType||Number(rtt)>100||Number(downlink)<10)return!0}return(null==(_a8=null==navigator2?void 0:navigator2.userAgentData)?void 0:_a8.mobile)||"number"==typeof(null==navigator2?void 0:navigator2.maxTouchPoints)&&(null==navigator2?void 0:navigator2.maxTouchPoints)>1};init_dist_es();getRuntimeConfig=config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k,_l,_m2,_n,_o,_p2,_q,_r,_s2;return{apiVersion:"2006-03-01",base64Decoder:null!=(_a8=null==config?void 0:config.base64Decoder)?_a8:fromBase64,base64Encoder:null!=(_b5=null==config?void 0:config.base64Encoder)?_b5:toBase64,disableHostPrefix:null!=(_c3=null==config?void 0:config.disableHostPrefix)&&_c3,endpointProvider:null!=(_d2=null==config?void 0:config.endpointProvider)?_d2:defaultEndpointResolver,extensions:null!=(_e2=null==config?void 0:config.extensions)?_e2:[],getAwsChunkedEncodingStream:null!=(_f=null==config?void 0:config.getAwsChunkedEncodingStream)?_f:getAwsChunkedEncodingStream,httpAuthSchemeProvider:null!=(_g=null==config?void 0:config.httpAuthSchemeProvider)?_g:defaultS3HttpAuthSchemeProvider,httpAuthSchemes:null!=(_h2=null==config?void 0:config.httpAuthSchemes)?_h2:[{schemeId:"aws.auth#sigv4",identityProvider:ipc=>ipc.getIdentityProvider("aws.auth#sigv4"),signer:new AwsSdkSigV4Signer},{schemeId:"aws.auth#sigv4a",identityProvider:ipc=>ipc.getIdentityProvider("aws.auth#sigv4a"),signer:new AwsSdkSigV4ASigner}],logger:null!=(_i2=null==config?void 0:config.logger)?_i2:new NoOpLogger,protocol:null!=(_j=null==config?void 0:config.protocol)?_j:S3RestXmlProtocol,protocolSettings:null!=(_k=null==config?void 0:config.protocolSettings)?_k:{defaultNamespace:"com.amazonaws.s3",errorTypeRegistries,xmlNamespace:"http://s3.amazonaws.com/doc/2006-03-01/",version:"2006-03-01",serviceTarget:"AmazonS3"},sdkStreamMixin:null!=(_l=null==config?void 0:config.sdkStreamMixin)?_l:sdkStreamMixin,serviceId:null!=(_m2=null==config?void 0:config.serviceId)?_m2:"S3",signerConstructor:null!=(_n=null==config?void 0:config.signerConstructor)?_n:SignatureV4MultiRegion,signingEscapePath:null!=(_o=null==config?void 0:config.signingEscapePath)&&_o,urlParser:null!=(_p2=null==config?void 0:config.urlParser)?_p2:parseUrl,useArnRegion:null!=(_q=null==config?void 0:config.useArnRegion)?_q:void 0,utf8Decoder:null!=(_r=null==config?void 0:config.utf8Decoder)?_r:fromUtf8,utf8Encoder:null!=(_s2=null==config?void 0:config.utf8Encoder)?_s2:toUtf8}};getRuntimeConfig2=config=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k,_l,_m2,_n,_o;const defaultsMode=resolveDefaultsModeConfig(config),defaultConfigProvider=()=>defaultsMode().then(loadConfigsForDefaultMode),clientSharedValues=getRuntimeConfig(config);return{...clientSharedValues,...config,runtime:"browser",defaultsMode,bodyLengthChecker:null!=(_a8=null==config?void 0:config.bodyLengthChecker)?_a8:calculateBodyLength,credentialDefaultProvider:null!=(_b5=null==config?void 0:config.credentialDefaultProvider)?_b5:_=>()=>Promise.reject(new Error("Credential is missing")),defaultUserAgentProvider:null!=(_c3=null==config?void 0:config.defaultUserAgentProvider)?_c3:createDefaultUserAgentProvider({serviceId:clientSharedValues.serviceId,clientVersion:"3.1017.0"}),eventStreamSerdeProvider:null!=(_d2=null==config?void 0:config.eventStreamSerdeProvider)?_d2:eventStreamSerdeProvider,maxAttempts:null!=(_e2=null==config?void 0:config.maxAttempts)?_e2:3,md5:null!=(_f=null==config?void 0:config.md5)?_f:Md5,region:null!=(_g=null==config?void 0:config.region)?_g:invalidProvider("Region is missing"),requestHandler:FetchHttpHandler.create(null!=(_h2=null==config?void 0:config.requestHandler)?_h2:defaultConfigProvider),retryMode:null!=(_i2=null==config?void 0:config.retryMode)?_i2:async()=>(await defaultConfigProvider()).retryMode||DEFAULT_RETRY_MODE,sha1:null!=(_j=null==config?void 0:config.sha1)?_j:Sha12,sha256:null!=(_k=null==config?void 0:config.sha256)?_k:Sha2563,streamCollector:null!=(_l=null==config?void 0:config.streamCollector)?_l:streamCollector,streamHasher:null!=(_m2=null==config?void 0:config.streamHasher)?_m2:blobHasher,useDualstackEndpoint:null!=(_n=null==config?void 0:config.useDualstackEndpoint)?_n:()=>Promise.resolve(!1),useFipsEndpoint:null!=(_o=null==config?void 0:config.useFipsEndpoint)?_o:()=>Promise.resolve(!1)}};getAwsRegionExtensionConfiguration=runtimeConfig=>({setRegion(region){runtimeConfig.region=region},region:()=>runtimeConfig.region});resolveAwsRegionExtensionConfiguration=awsRegionExtensionConfiguration=>({region:awsRegionExtensionConfiguration.region()});getHttpAuthExtensionConfiguration=runtimeConfig=>{const _httpAuthSchemes=runtimeConfig.httpAuthSchemes;let _httpAuthSchemeProvider=runtimeConfig.httpAuthSchemeProvider,_credentials=runtimeConfig.credentials;return{setHttpAuthScheme(httpAuthScheme){const index6=_httpAuthSchemes.findIndex(scheme=>scheme.schemeId===httpAuthScheme.schemeId);-1===index6?_httpAuthSchemes.push(httpAuthScheme):_httpAuthSchemes.splice(index6,1,httpAuthScheme)},httpAuthSchemes:()=>_httpAuthSchemes,setHttpAuthSchemeProvider(httpAuthSchemeProvider){_httpAuthSchemeProvider=httpAuthSchemeProvider},httpAuthSchemeProvider:()=>_httpAuthSchemeProvider,setCredentials(credentials){_credentials=credentials},credentials:()=>_credentials}};resolveHttpAuthRuntimeConfig=config=>({httpAuthSchemes:config.httpAuthSchemes(),httpAuthSchemeProvider:config.httpAuthSchemeProvider(),credentials:config.credentials()});resolveRuntimeExtensions=(runtimeConfig,extensions)=>{const extensionConfiguration=Object.assign(getAwsRegionExtensionConfiguration(runtimeConfig),getDefaultExtensionConfiguration(runtimeConfig),getHttpHandlerExtensionConfiguration(runtimeConfig),getHttpAuthExtensionConfiguration(runtimeConfig));extensions.forEach(extension=>extension.configure(extensionConfiguration));return Object.assign(runtimeConfig,resolveAwsRegionExtensionConfiguration(extensionConfiguration),resolveDefaultRuntimeConfig(extensionConfiguration),resolveHttpHandlerRuntimeConfig(extensionConfiguration),resolveHttpAuthRuntimeConfig(extensionConfiguration))};S3Client=class extends Client{constructor(...[configuration]){const _config_0=getRuntimeConfig2(configuration||{});super(_config_0);__publicField(this,"config");this.initConfig=_config_0;const _config_2=resolveUserAgentConfig(resolveClientEndpointParameters(_config_0)),_config_3=resolveFlexibleChecksumsConfig(_config_2),_config_4=resolveRetryConfig(_config_3),_config_6=resolveHostHeaderConfig(resolveRegionConfig(_config_4)),_config_7=resolveEndpointConfig(_config_6),_config_8=resolveEventStreamSerdeConfig(_config_7),_config_9=resolveHttpAuthSchemeConfig(_config_8),_config_10=resolveS3Config(_config_9,{session:[()=>this,CreateSessionCommand]}),_config_11=resolveRuntimeExtensions(_config_10,(null==configuration?void 0:configuration.extensions)||[]);this.config=_config_11;this.middlewareStack.use(getSchemaSerdePlugin(this.config));this.middlewareStack.use(getUserAgentPlugin(this.config));this.middlewareStack.use(getRetryPlugin(this.config));this.middlewareStack.use(getContentLengthPlugin(this.config));this.middlewareStack.use(getHostHeaderPlugin(this.config));this.middlewareStack.use(getLoggerPlugin(this.config));this.middlewareStack.use(getRecursionDetectionPlugin(this.config));this.middlewareStack.use(getHttpAuthSchemeEndpointRuleSetPlugin(this.config,{httpAuthSchemeParametersProvider:defaultS3HttpAuthSchemeParametersProvider,identityProviderConfigProvider:async config=>new DefaultIdentityProviderConfig({"aws.auth#sigv4":config.credentials,"aws.auth#sigv4a":config.credentials})}));this.middlewareStack.use(getHttpSigningPlugin(this.config));this.middlewareStack.use(getValidateBucketNamePlugin(this.config));this.middlewareStack.use(getAddExpectContinuePlugin(this.config));this.middlewareStack.use(getRegionRedirectMiddlewarePlugin(this.config));this.middlewareStack.use(getS3ExpressPlugin(this.config));this.middlewareStack.use(getS3ExpressHttpSigningPlugin(this.config))}destroy(){super.destroy()}};AbortMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","AbortMultipartUpload",{}).n("S3Client","AbortMultipartUploadCommand").sc(AbortMultipartUpload$).build()){};ssecMiddlewareOptions={name:"ssecMiddleware",step:"initialize",tags:["SSE"],override:!0};getSsecPlugin=config=>({applyToStack:clientStack=>{clientStack.add(ssecMiddleware(config),ssecMiddlewareOptions)}});CompleteMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","CompleteMultipartUpload",{}).n("S3Client","CompleteMultipartUploadCommand").sc(CompleteMultipartUpload$).build()){};CopyObjectCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"},CopySource:{type:"contextParams",name:"CopySource"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","CopyObject",{}).n("S3Client","CopyObjectCommand").sc(CopyObject$).build()){};locationConstraintMiddlewareOptions={step:"initialize",tags:["LOCATION_CONSTRAINT","CREATE_BUCKET_CONFIGURATION"],name:"locationConstraintMiddleware",override:!0};getLocationConstraintPlugin=config=>({applyToStack:clientStack=>{clientStack.add(locationConstraintMiddleware(config),locationConstraintMiddlewareOptions)}});CreateBucketCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},DisableAccessPoints:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getLocationConstraintPlugin(config)]}).s("AmazonS3","CreateBucket",{}).n("S3Client","CreateBucketCommand").sc(CreateBucket$).build()){};CreateBucketMetadataConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","CreateBucketMetadataConfiguration",{}).n("S3Client","CreateBucketMetadataConfigurationCommand").sc(CreateBucketMetadataConfiguration$).build()){};CreateBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","CreateBucketMetadataTableConfiguration",{}).n("S3Client","CreateBucketMetadataTableConfigurationCommand").sc(CreateBucketMetadataTableConfiguration$).build()){};CreateMultipartUploadCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","CreateMultipartUpload",{}).n("S3Client","CreateMultipartUploadCommand").sc(CreateMultipartUpload$).build()){};DeleteBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketAnalyticsConfiguration",{}).n("S3Client","DeleteBucketAnalyticsConfigurationCommand").sc(DeleteBucketAnalyticsConfiguration$).build()){};DeleteBucketCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucket",{}).n("S3Client","DeleteBucketCommand").sc(DeleteBucket$).build()){};DeleteBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketCors",{}).n("S3Client","DeleteBucketCorsCommand").sc(DeleteBucketCors$).build()){};DeleteBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketEncryption",{}).n("S3Client","DeleteBucketEncryptionCommand").sc(DeleteBucketEncryption$).build()){};DeleteBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketIntelligentTieringConfiguration",{}).n("S3Client","DeleteBucketIntelligentTieringConfigurationCommand").sc(DeleteBucketIntelligentTieringConfiguration$).build()){};DeleteBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketInventoryConfiguration",{}).n("S3Client","DeleteBucketInventoryConfigurationCommand").sc(DeleteBucketInventoryConfiguration$).build()){};DeleteBucketLifecycleCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketLifecycle",{}).n("S3Client","DeleteBucketLifecycleCommand").sc(DeleteBucketLifecycle$).build()){};DeleteBucketMetadataConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketMetadataConfiguration",{}).n("S3Client","DeleteBucketMetadataConfigurationCommand").sc(DeleteBucketMetadataConfiguration$).build()){};DeleteBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketMetadataTableConfiguration",{}).n("S3Client","DeleteBucketMetadataTableConfigurationCommand").sc(DeleteBucketMetadataTableConfiguration$).build()){};DeleteBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketMetricsConfiguration",{}).n("S3Client","DeleteBucketMetricsConfigurationCommand").sc(DeleteBucketMetricsConfiguration$).build()){};DeleteBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketOwnershipControls",{}).n("S3Client","DeleteBucketOwnershipControlsCommand").sc(DeleteBucketOwnershipControls$).build()){};DeleteBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketPolicy",{}).n("S3Client","DeleteBucketPolicyCommand").sc(DeleteBucketPolicy$).build()){};DeleteBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketReplication",{}).n("S3Client","DeleteBucketReplicationCommand").sc(DeleteBucketReplication$).build()){};DeleteBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketTagging",{}).n("S3Client","DeleteBucketTaggingCommand").sc(DeleteBucketTagging$).build()){};DeleteBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeleteBucketWebsite",{}).n("S3Client","DeleteBucketWebsiteCommand").sc(DeleteBucketWebsite$).build()){};DeleteObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","DeleteObject",{}).n("S3Client","DeleteObjectCommand").sc(DeleteObject$).build()){};DeleteObjectsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","DeleteObjects",{}).n("S3Client","DeleteObjectsCommand").sc(DeleteObjects$).build()){};DeleteObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","DeleteObjectTagging",{}).n("S3Client","DeleteObjectTaggingCommand").sc(DeleteObjectTagging$).build()){};DeletePublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","DeletePublicAccessBlock",{}).n("S3Client","DeletePublicAccessBlockCommand").sc(DeletePublicAccessBlock$).build()){};GetBucketAbacCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAbac",{}).n("S3Client","GetBucketAbacCommand").sc(GetBucketAbac$).build()){};GetBucketAccelerateConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAccelerateConfiguration",{}).n("S3Client","GetBucketAccelerateConfigurationCommand").sc(GetBucketAccelerateConfiguration$).build()){};GetBucketAclCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAcl",{}).n("S3Client","GetBucketAclCommand").sc(GetBucketAcl$).build()){};GetBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketAnalyticsConfiguration",{}).n("S3Client","GetBucketAnalyticsConfigurationCommand").sc(GetBucketAnalyticsConfiguration$).build()){};GetBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketCors",{}).n("S3Client","GetBucketCorsCommand").sc(GetBucketCors$).build()){};GetBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketEncryption",{}).n("S3Client","GetBucketEncryptionCommand").sc(GetBucketEncryption$).build()){};GetBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketIntelligentTieringConfiguration",{}).n("S3Client","GetBucketIntelligentTieringConfigurationCommand").sc(GetBucketIntelligentTieringConfiguration$).build()){};GetBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketInventoryConfiguration",{}).n("S3Client","GetBucketInventoryConfigurationCommand").sc(GetBucketInventoryConfiguration$).build()){};GetBucketLifecycleConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketLifecycleConfiguration",{}).n("S3Client","GetBucketLifecycleConfigurationCommand").sc(GetBucketLifecycleConfiguration$).build()){};GetBucketLocationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketLocation",{}).n("S3Client","GetBucketLocationCommand").sc(GetBucketLocation$).build()){};GetBucketLoggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketLogging",{}).n("S3Client","GetBucketLoggingCommand").sc(GetBucketLogging$).build()){};GetBucketMetadataConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketMetadataConfiguration",{}).n("S3Client","GetBucketMetadataConfigurationCommand").sc(GetBucketMetadataConfiguration$).build()){};GetBucketMetadataTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketMetadataTableConfiguration",{}).n("S3Client","GetBucketMetadataTableConfigurationCommand").sc(GetBucketMetadataTableConfiguration$).build()){};GetBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketMetricsConfiguration",{}).n("S3Client","GetBucketMetricsConfigurationCommand").sc(GetBucketMetricsConfiguration$).build()){};GetBucketNotificationConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketNotificationConfiguration",{}).n("S3Client","GetBucketNotificationConfigurationCommand").sc(GetBucketNotificationConfiguration$).build()){};GetBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketOwnershipControls",{}).n("S3Client","GetBucketOwnershipControlsCommand").sc(GetBucketOwnershipControls$).build()){};GetBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketPolicy",{}).n("S3Client","GetBucketPolicyCommand").sc(GetBucketPolicy$).build()){};GetBucketPolicyStatusCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketPolicyStatus",{}).n("S3Client","GetBucketPolicyStatusCommand").sc(GetBucketPolicyStatus$).build()){};GetBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketReplication",{}).n("S3Client","GetBucketReplicationCommand").sc(GetBucketReplication$).build()){};GetBucketRequestPaymentCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketRequestPayment",{}).n("S3Client","GetBucketRequestPaymentCommand").sc(GetBucketRequestPayment$).build()){};GetBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketTagging",{}).n("S3Client","GetBucketTaggingCommand").sc(GetBucketTagging$).build()){};GetBucketVersioningCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketVersioning",{}).n("S3Client","GetBucketVersioningCommand").sc(GetBucketVersioning$).build()){};GetBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetBucketWebsite",{}).n("S3Client","GetBucketWebsiteCommand").sc(GetBucketWebsite$).build()){};GetObjectAclCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectAcl",{}).n("S3Client","GetObjectAclCommand").sc(GetObjectAcl$).build()){};GetObjectAttributesCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","GetObjectAttributes",{}).n("S3Client","GetObjectAttributesCommand").sc(GetObjectAttributes$).build()){};GetObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestChecksumRequired:!1,requestValidationModeMember:"ChecksumMode",responseAlgorithms:["CRC64NVME","CRC32","CRC32C","SHA256","SHA1"]}),getSsecPlugin(config),getS3ExpiresMiddlewarePlugin()]}).s("AmazonS3","GetObject",{}).n("S3Client","GetObjectCommand").sc(GetObject$).build()){};GetObjectLegalHoldCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectLegalHold",{}).n("S3Client","GetObjectLegalHoldCommand").sc(GetObjectLegalHold$).build()){};GetObjectLockConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectLockConfiguration",{}).n("S3Client","GetObjectLockConfigurationCommand").sc(GetObjectLockConfiguration$).build()){};GetObjectRetentionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectRetention",{}).n("S3Client","GetObjectRetentionCommand").sc(GetObjectRetention$).build()){};GetObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetObjectTagging",{}).n("S3Client","GetObjectTaggingCommand").sc(GetObjectTagging$).build()){};GetObjectTorrentCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","GetObjectTorrent",{}).n("S3Client","GetObjectTorrentCommand").sc(GetObjectTorrent$).build()){};GetPublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","GetPublicAccessBlock",{}).n("S3Client","GetPublicAccessBlockCommand").sc(GetPublicAccessBlock$).build()){};HeadBucketCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","HeadBucket",{}).n("S3Client","HeadBucketCommand").sc(HeadBucket$).build()){};HeadObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config),getS3ExpiresMiddlewarePlugin()]}).s("AmazonS3","HeadObject",{}).n("S3Client","HeadObjectCommand").sc(HeadObject$).build()){};ListBucketAnalyticsConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketAnalyticsConfigurations",{}).n("S3Client","ListBucketAnalyticsConfigurationsCommand").sc(ListBucketAnalyticsConfigurations$).build()){};ListBucketIntelligentTieringConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketIntelligentTieringConfigurations",{}).n("S3Client","ListBucketIntelligentTieringConfigurationsCommand").sc(ListBucketIntelligentTieringConfigurations$).build()){};ListBucketInventoryConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketInventoryConfigurations",{}).n("S3Client","ListBucketInventoryConfigurationsCommand").sc(ListBucketInventoryConfigurations$).build()){};ListBucketMetricsConfigurationsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBucketMetricsConfigurations",{}).n("S3Client","ListBucketMetricsConfigurationsCommand").sc(ListBucketMetricsConfigurations$).build()){};ListBucketsCommand=class extends(Command.classBuilder().ep(commonParams).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListBuckets",{}).n("S3Client","ListBucketsCommand").sc(ListBuckets$).build()){};ListDirectoryBucketsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListDirectoryBuckets",{}).n("S3Client","ListDirectoryBucketsCommand").sc(ListDirectoryBuckets$).build()){};ListMultipartUploadsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListMultipartUploads",{}).n("S3Client","ListMultipartUploadsCommand").sc(ListMultipartUploads$).build()){};ListObjectsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListObjects",{}).n("S3Client","ListObjectsCommand").sc(ListObjects$).build()){};ListObjectsV2Command=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListObjectsV2",{}).n("S3Client","ListObjectsV2Command").sc(ListObjectsV2$).build()){};ListObjectVersionsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Prefix:{type:"contextParams",name:"Prefix"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","ListObjectVersions",{}).n("S3Client","ListObjectVersionsCommand").sc(ListObjectVersions$).build()){};ListPartsCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","ListParts",{}).n("S3Client","ListPartsCommand").sc(ListParts$).build()){};PutBucketAbacCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1})]}).s("AmazonS3","PutBucketAbac",{}).n("S3Client","PutBucketAbacCommand").sc(PutBucketAbac$).build()){};PutBucketAccelerateConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1})]}).s("AmazonS3","PutBucketAccelerateConfiguration",{}).n("S3Client","PutBucketAccelerateConfigurationCommand").sc(PutBucketAccelerateConfiguration$).build()){};PutBucketAclCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketAcl",{}).n("S3Client","PutBucketAclCommand").sc(PutBucketAcl$).build()){};PutBucketAnalyticsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketAnalyticsConfiguration",{}).n("S3Client","PutBucketAnalyticsConfigurationCommand").sc(PutBucketAnalyticsConfiguration$).build()){};PutBucketCorsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketCors",{}).n("S3Client","PutBucketCorsCommand").sc(PutBucketCors$).build()){};PutBucketEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketEncryption",{}).n("S3Client","PutBucketEncryptionCommand").sc(PutBucketEncryption$).build()){};PutBucketIntelligentTieringConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketIntelligentTieringConfiguration",{}).n("S3Client","PutBucketIntelligentTieringConfigurationCommand").sc(PutBucketIntelligentTieringConfiguration$).build()){};PutBucketInventoryConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketInventoryConfiguration",{}).n("S3Client","PutBucketInventoryConfigurationCommand").sc(PutBucketInventoryConfiguration$).build()){};PutBucketLifecycleConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutBucketLifecycleConfiguration",{}).n("S3Client","PutBucketLifecycleConfigurationCommand").sc(PutBucketLifecycleConfiguration$).build()){};PutBucketLoggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketLogging",{}).n("S3Client","PutBucketLoggingCommand").sc(PutBucketLogging$).build()){};PutBucketMetricsConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketMetricsConfiguration",{}).n("S3Client","PutBucketMetricsConfigurationCommand").sc(PutBucketMetricsConfiguration$).build()){};PutBucketNotificationConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","PutBucketNotificationConfiguration",{}).n("S3Client","PutBucketNotificationConfigurationCommand").sc(PutBucketNotificationConfiguration$).build()){};PutBucketOwnershipControlsCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketOwnershipControls",{}).n("S3Client","PutBucketOwnershipControlsCommand").sc(PutBucketOwnershipControls$).build()){};PutBucketPolicyCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketPolicy",{}).n("S3Client","PutBucketPolicyCommand").sc(PutBucketPolicy$).build()){};PutBucketReplicationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketReplication",{}).n("S3Client","PutBucketReplicationCommand").sc(PutBucketReplication$).build()){};PutBucketRequestPaymentCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketRequestPayment",{}).n("S3Client","PutBucketRequestPaymentCommand").sc(PutBucketRequestPayment$).build()){};PutBucketTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketTagging",{}).n("S3Client","PutBucketTaggingCommand").sc(PutBucketTagging$).build()){};PutBucketVersioningCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketVersioning",{}).n("S3Client","PutBucketVersioningCommand").sc(PutBucketVersioning$).build()){};PutBucketWebsiteCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutBucketWebsite",{}).n("S3Client","PutBucketWebsiteCommand").sc(PutBucketWebsite$).build()){};PutObjectAclCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectAcl",{}).n("S3Client","PutObjectAclCommand").sc(PutObjectAcl$).build()){};PutObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getCheckContentLengthHeaderPlugin(),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","PutObject",{}).n("S3Client","PutObjectCommand").sc(PutObject$).build()){};PutObjectLegalHoldCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectLegalHold",{}).n("S3Client","PutObjectLegalHoldCommand").sc(PutObjectLegalHold$).build()){};PutObjectLockConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectLockConfiguration",{}).n("S3Client","PutObjectLockConfigurationCommand").sc(PutObjectLockConfiguration$).build()){};PutObjectRetentionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectRetention",{}).n("S3Client","PutObjectRetentionCommand").sc(PutObjectRetention$).build()){};PutObjectTaggingCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","PutObjectTagging",{}).n("S3Client","PutObjectTaggingCommand").sc(PutObjectTagging$).build()){};PutPublicAccessBlockCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","PutPublicAccessBlock",{}).n("S3Client","PutPublicAccessBlockCommand").sc(PutPublicAccessBlock$).build()){};RenameObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","RenameObject",{}).n("S3Client","RenameObjectCommand").sc(RenameObject$).build()){};RestoreObjectCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","RestoreObject",{}).n("S3Client","RestoreObjectCommand").sc(RestoreObject$).build()){};SelectObjectContentCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","SelectObjectContent",{eventStream:{output:!0}}).n("S3Client","SelectObjectContentCommand").sc(SelectObjectContent$).build()){};UpdateBucketMetadataInventoryTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","UpdateBucketMetadataInventoryTableConfiguration",{}).n("S3Client","UpdateBucketMetadataInventoryTableConfigurationCommand").sc(UpdateBucketMetadataInventoryTableConfiguration$).build()){};UpdateBucketMetadataJournalTableConfigurationCommand=class extends(Command.classBuilder().ep({...commonParams,UseS3ExpressControlEndpoint:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0})]}).s("AmazonS3","UpdateBucketMetadataJournalTableConfiguration",{}).n("S3Client","UpdateBucketMetadataJournalTableConfigurationCommand").sc(UpdateBucketMetadataJournalTableConfiguration$).build()){};UpdateObjectEncryptionCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!0}),getThrow200ExceptionsPlugin(config)]}).s("AmazonS3","UpdateObjectEncryption",{}).n("S3Client","UpdateObjectEncryptionCommand").sc(UpdateObjectEncryption$).build()){};UploadPartCommand=class extends(Command.classBuilder().ep({...commonParams,Bucket:{type:"contextParams",name:"Bucket"},Key:{type:"contextParams",name:"Key"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getFlexibleChecksumsPlugin(config,{requestAlgorithmMember:{httpHeader:"x-amz-sdk-checksum-algorithm",name:"ChecksumAlgorithm"},requestChecksumRequired:!1}),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","UploadPart",{}).n("S3Client","UploadPartCommand").sc(UploadPart$).build()){};UploadPartCopyCommand=class extends(Command.classBuilder().ep({...commonParams,DisableS3ExpressSessionAuth:{type:"staticContextParams",value:!0},Bucket:{type:"contextParams",name:"Bucket"}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions()),getThrow200ExceptionsPlugin(config),getSsecPlugin(config)]}).s("AmazonS3","UploadPartCopy",{}).n("S3Client","UploadPartCopyCommand").sc(UploadPartCopy$).build()){};WriteGetObjectResponseCommand=class extends(Command.classBuilder().ep({...commonParams,UseObjectLambdaEndpoint:{type:"staticContextParams",value:!0}}).m(function(Command2,cs2,config,o2){return[getEndpointPlugin(config,Command2.getEndpointParameterInstructions())]}).s("AmazonS3","WriteGetObjectResponse",{}).n("S3Client","WriteGetObjectResponseCommand").sc(WriteGetObjectResponse$).build()){};paginateListBuckets=createPaginator(S3Client,ListBucketsCommand,"ContinuationToken","ContinuationToken","MaxBuckets");paginateListDirectoryBuckets=createPaginator(S3Client,ListDirectoryBucketsCommand,"ContinuationToken","ContinuationToken","MaxDirectoryBuckets");paginateListObjectsV2=createPaginator(S3Client,ListObjectsV2Command,"ContinuationToken","NextContinuationToken","MaxKeys");paginateListParts=createPaginator(S3Client,ListPartsCommand,"PartNumberMarker","NextPartNumberMarker","MaxParts");getCircularReplacer=()=>{const seen=new WeakSet;return(key3,value)=>{if("object"==typeof value&&null!==value){if(seen.has(value))return"[Circular]";seen.add(value)}return value}};sleep=seconds=>new Promise(resolve=>setTimeout(resolve,1e3*seconds));waiterServiceDefaults={minDelay:2,maxDelay:120};(function(WaiterState2){WaiterState2.ABORTED="ABORTED";WaiterState2.FAILURE="FAILURE";WaiterState2.SUCCESS="SUCCESS";WaiterState2.RETRY="RETRY";WaiterState2.TIMEOUT="TIMEOUT"})(WaiterState||(WaiterState={}));checkExceptions=result=>{if(result.state===WaiterState.ABORTED){const abortError=new Error(`${JSON.stringify({...result,reason:"Request was aborted"},getCircularReplacer())}`);abortError.name="AbortError";throw abortError}if(result.state===WaiterState.TIMEOUT){const timeoutError=new Error(`${JSON.stringify({...result,reason:"Waiter has timed out"},getCircularReplacer())}`);timeoutError.name="TimeoutError";throw timeoutError}if(result.state!==WaiterState.SUCCESS)throw new Error(`${JSON.stringify(result,getCircularReplacer())}`);return result};exponentialBackoffWithJitter=(minDelay,maxDelay,attemptCeiling,attempt)=>attempt>attemptCeiling?maxDelay:randomInRange(minDelay,minDelay*2**(attempt-1));randomInRange=(min,max3)=>min+Math.random()*(max3-min);runPolling=async({minDelay,maxDelay,maxWaitTime,abortController,client,abortSignal},input,acceptorChecks)=>{var _a8;const observedResponses={},{state:state2,reason}=await acceptorChecks(client,input);if(reason){const message=createMessageFromResponse(reason);observedResponses[message]|=0;observedResponses[message]+=1}if(state2!==WaiterState.RETRY)return{state:state2,reason,observedResponses};let currentAttempt=1;const waitUntil=Date.now()+1e3*maxWaitTime,attemptCeiling=Math.log(maxDelay/minDelay)/Math.log(2)+1;for(;;){if((null==(_a8=null==abortController?void 0:abortController.signal)?void 0:_a8.aborted)||(null==abortSignal?void 0:abortSignal.aborted)){const message="AbortController signal aborted.";observedResponses[message]|=0;observedResponses[message]+=1;return{state:WaiterState.ABORTED,observedResponses}}const delay2=exponentialBackoffWithJitter(minDelay,maxDelay,attemptCeiling,currentAttempt);if(Date.now()+1e3*delay2>waitUntil)return{state:WaiterState.TIMEOUT,observedResponses};await sleep(delay2);const{state:state3,reason:reason2}=await acceptorChecks(client,input);if(reason2){const message=createMessageFromResponse(reason2);observedResponses[message]|=0;observedResponses[message]+=1}if(state3!==WaiterState.RETRY)return{state:state3,reason:reason2,observedResponses};currentAttempt+=1}};createMessageFromResponse=reason=>{var _a8,_b5,_c3,_d2,_e2,_f;return(null==reason?void 0:reason.$responseBodyText)?`Deserialization error for body: ${reason.$responseBodyText}`:(null==(_a8=null==reason?void 0:reason.$metadata)?void 0:_a8.httpStatusCode)?reason.$response||reason.message?`${null!=(_d2=null!=(_c3=null==(_b5=reason.$response)?void 0:_b5.statusCode)?_c3:reason.$metadata.httpStatusCode)?_d2:"Unknown"}: ${reason.message}`:`${reason.$metadata.httpStatusCode}: OK`:String(null!=(_f=null!=(_e2=null==reason?void 0:reason.message)?_e2:JSON.stringify(reason,getCircularReplacer()))?_f:"Unknown")};validateWaiterOptions=options=>{if(options.maxWaitTime<=0)throw new Error("WaiterConfiguration.maxWaitTime must be greater than 0");if(options.minDelay<=0)throw new Error("WaiterConfiguration.minDelay must be greater than 0");if(options.maxDelay<=0)throw new Error("WaiterConfiguration.maxDelay must be greater than 0");if(options.maxWaitTime<=options.minDelay)throw new Error(`WaiterConfiguration.maxWaitTime [${options.maxWaitTime}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`);if(options.maxDelay<options.minDelay)throw new Error(`WaiterConfiguration.maxDelay [${options.maxDelay}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`)};abortTimeout=abortSignal=>{let onAbort;const promise=new Promise(resolve=>{onAbort=()=>resolve({state:WaiterState.ABORTED});"function"==typeof abortSignal.addEventListener?abortSignal.addEventListener("abort",onAbort):abortSignal.onabort=onAbort});return{clearListener(){"function"==typeof abortSignal.removeEventListener&&abortSignal.removeEventListener("abort",onAbort)},aborted:promise}};createWaiter=async(options,input,acceptorChecks)=>{var _a8;const params={...waiterServiceDefaults,...options};validateWaiterOptions(params);const exitConditions=[runPolling(params,input,acceptorChecks)],finalize=[];if(options.abortSignal){const{aborted:aborted2,clearListener}=abortTimeout(options.abortSignal);finalize.push(clearListener);exitConditions.push(aborted2)}if(null==(_a8=options.abortController)?void 0:_a8.signal){const{aborted:aborted2,clearListener}=abortTimeout(options.abortController.signal);finalize.push(clearListener);exitConditions.push(aborted2)}return Promise.race(exitConditions).then(result=>{for(const fn of finalize)fn();return result})};checkState=async(client,input)=>{let reason;try{reason=await client.send(new HeadBucketCommand(input));return{state:WaiterState.SUCCESS,reason}}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.RETRY,reason}}return{state:WaiterState.RETRY,reason}};checkState2=async(client,input)=>{let reason;try{reason=await client.send(new HeadBucketCommand(input))}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.SUCCESS,reason}}return{state:WaiterState.RETRY,reason}};checkState3=async(client,input)=>{let reason;try{reason=await client.send(new HeadObjectCommand(input));return{state:WaiterState.SUCCESS,reason}}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.RETRY,reason}}return{state:WaiterState.RETRY,reason}};checkState4=async(client,input)=>{let reason;try{reason=await client.send(new HeadObjectCommand(input))}catch(exception){reason=exception;if(exception.name&&"NotFound"==exception.name)return{state:WaiterState.SUCCESS,reason}}return{state:WaiterState.RETRY,reason}};paginators={paginateListBuckets,paginateListDirectoryBuckets,paginateListObjectsV2,paginateListParts};waiters={waitUntilBucketExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState);return checkExceptions(result)},waitUntilBucketNotExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState2);return checkExceptions(result)},waitUntilObjectExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState3);return checkExceptions(result)},waitUntilObjectNotExists:async(params,input)=>{const result=await createWaiter({minDelay:5,maxDelay:120,...params},input,checkState4);return checkExceptions(result)}};createAggregatedClient({AbortMultipartUploadCommand,CompleteMultipartUploadCommand,CopyObjectCommand,CreateBucketCommand,CreateBucketMetadataConfigurationCommand,CreateBucketMetadataTableConfigurationCommand,CreateMultipartUploadCommand,CreateSessionCommand,DeleteBucketCommand,DeleteBucketAnalyticsConfigurationCommand,DeleteBucketCorsCommand,DeleteBucketEncryptionCommand,DeleteBucketIntelligentTieringConfigurationCommand,DeleteBucketInventoryConfigurationCommand,DeleteBucketLifecycleCommand,DeleteBucketMetadataConfigurationCommand,DeleteBucketMetadataTableConfigurationCommand,DeleteBucketMetricsConfigurationCommand,DeleteBucketOwnershipControlsCommand,DeleteBucketPolicyCommand,DeleteBucketReplicationCommand,DeleteBucketTaggingCommand,DeleteBucketWebsiteCommand,DeleteObjectCommand,DeleteObjectsCommand,DeleteObjectTaggingCommand,DeletePublicAccessBlockCommand,GetBucketAbacCommand,GetBucketAccelerateConfigurationCommand,GetBucketAclCommand,GetBucketAnalyticsConfigurationCommand,GetBucketCorsCommand,GetBucketEncryptionCommand,GetBucketIntelligentTieringConfigurationCommand,GetBucketInventoryConfigurationCommand,GetBucketLifecycleConfigurationCommand,GetBucketLocationCommand,GetBucketLoggingCommand,GetBucketMetadataConfigurationCommand,GetBucketMetadataTableConfigurationCommand,GetBucketMetricsConfigurationCommand,GetBucketNotificationConfigurationCommand,GetBucketOwnershipControlsCommand,GetBucketPolicyCommand,GetBucketPolicyStatusCommand,GetBucketReplicationCommand,GetBucketRequestPaymentCommand,GetBucketTaggingCommand,GetBucketVersioningCommand,GetBucketWebsiteCommand,GetObjectCommand,GetObjectAclCommand,GetObjectAttributesCommand,GetObjectLegalHoldCommand,GetObjectLockConfigurationCommand,GetObjectRetentionCommand,GetObjectTaggingCommand,GetObjectTorrentCommand,GetPublicAccessBlockCommand,HeadBucketCommand,HeadObjectCommand,ListBucketAnalyticsConfigurationsCommand,ListBucketIntelligentTieringConfigurationsCommand,ListBucketInventoryConfigurationsCommand,ListBucketMetricsConfigurationsCommand,ListBucketsCommand,ListDirectoryBucketsCommand,ListMultipartUploadsCommand,ListObjectsCommand,ListObjectsV2Command,ListObjectVersionsCommand,ListPartsCommand,PutBucketAbacCommand,PutBucketAccelerateConfigurationCommand,PutBucketAclCommand,PutBucketAnalyticsConfigurationCommand,PutBucketCorsCommand,PutBucketEncryptionCommand,PutBucketIntelligentTieringConfigurationCommand,PutBucketInventoryConfigurationCommand,PutBucketLifecycleConfigurationCommand,PutBucketLoggingCommand,PutBucketMetricsConfigurationCommand,PutBucketNotificationConfigurationCommand,PutBucketOwnershipControlsCommand,PutBucketPolicyCommand,PutBucketReplicationCommand,PutBucketRequestPaymentCommand,PutBucketTaggingCommand,PutBucketVersioningCommand,PutBucketWebsiteCommand,PutObjectCommand,PutObjectAclCommand,PutObjectLegalHoldCommand,PutObjectLockConfigurationCommand,PutObjectRetentionCommand,PutObjectTaggingCommand,PutPublicAccessBlockCommand,RenameObjectCommand,RestoreObjectCommand,SelectObjectContentCommand,UpdateBucketMetadataInventoryTableConfigurationCommand,UpdateBucketMetadataJournalTableConfigurationCommand,UpdateObjectEncryptionCommand,UploadPartCommand,UploadPartCopyCommand,WriteGetObjectResponseCommand},S3=class extends S3Client{},{paginators,waiters});applyMd5BodyChecksumMiddleware=options=>next2=>async args=>{const{request:request2}=args;if(HttpRequest.isInstance(request2)){const{body,headers}=request2;if(!hasHeader3("content-md5",headers)){let digest;if(void 0===body||"string"==typeof body||ArrayBuffer.isView(body)||isArrayBuffer(body)){const hash3=new options.md5;hash3.update(body||"");digest=hash3.digest()}else digest=options.streamHasher(options.md5,body);const cloned=HttpRequest.clone(request2);cloned.headers={...headers,"content-md5":options.base64Encoder(await digest)};return next2({...args,request:cloned})}}return next2(args)};hasHeader3=(soughtHeader,headers)=>{soughtHeader=soughtHeader.toLowerCase();for(const headerName of Object.keys(headers))if(soughtHeader===headerName.toLowerCase())return!0;return!1};ch2={};wk=function(c3,id,msg,transfer,cb2){var w2=new Worker(ch2[id]||(ch2[id]=URL.createObjectURL(new Blob([c3+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));w2.onmessage=function(e3){var err3,d4=e3.data,ed=d4.$e$;if(ed){(err3=new Error(ed[0])).code=ed[1];err3.stack=ed[2];cb2(err3,null)}else cb2(null,d4)};w2.postMessage(msg,transfer);return w2};u8=Uint8Array,u16=Uint16Array,i32=Int32Array;fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]);fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]);clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);freb=function(eb,start){var i2,r4,j2,b3=new u16(31);for(i2=0;i2<31;++i2)b3[i2]=start+=1<<eb[i2-1];r4=new i32(b3[30]);for(i2=1;i2<30;++i2)for(j2=b3[i2];j2<b3[i2+1];++j2)r4[j2]=j2-b3[i2]<<5|i2;return{b:b3,r:r4}};_a7=freb(fleb,2),fl=_a7.b,revfl=_a7.r;fl[28]=258,revfl[258]=28;_b4=freb(fdeb,0),fd=_b4.b,revfd=_b4.r;rev=new u16(32768);for(i2=0;i2<32768;++i2){x2=(61680&(x2=(52428&(x2=(43690&i2)>>1|(21845&i2)<<1))>>2|(13107&x2)<<2))>>4|(3855&x2)<<4;rev[i2]=((65280&x2)>>8|(255&x2)<<8)>>1}hMap=function(cd2,mb,r4){for(var le,co2,rvb,sv,r_1,v2,m3,s2=cd2.length,i2=0,l2=new u16(mb);i2<s2;++i2)cd2[i2]&&++l2[cd2[i2]-1];le=new u16(mb);for(i2=1;i2<mb;++i2)le[i2]=le[i2-1]+l2[i2-1]<<1;if(r4){co2=new u16(1<<mb);rvb=15-mb;for(i2=0;i2<s2;++i2)if(cd2[i2]){sv=i2<<4|cd2[i2];r_1=mb-cd2[i2];for(m3=(v2=le[cd2[i2]-1]++<<r_1)|(1<<r_1)-1;v2<=m3;++v2)co2[rev[v2]>>rvb]=sv}}else{co2=new u16(s2);for(i2=0;i2<s2;++i2)cd2[i2]&&(co2[i2]=rev[le[cd2[i2]-1]++]>>15-cd2[i2])}return co2};flt=new u8(288);for(i2=0;i2<144;++i2)flt[i2]=8;for(i2=144;i2<256;++i2)flt[i2]=9;for(i2=256;i2<280;++i2)flt[i2]=7;for(i2=280;i2<288;++i2)flt[i2]=8;fdt=new u8(32);for(i2=0;i2<32;++i2)fdt[i2]=5;flm=hMap(flt,9,0),flrm=hMap(flt,9,1);fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1);max=function(a2){var i2,m3=a2[0];for(i2=1;i2<a2.length;++i2)a2[i2]>m3&&(m3=a2[i2]);return m3};bits=function(d4,p2,m3){var o2=p2/8|0;return(d4[o2]|d4[o2+1]<<8)>>(7&p2)&m3};bits16=function(d4,p2){var o2=p2/8|0;return(d4[o2]|d4[o2+1]<<8|d4[o2+2]<<16)>>(7&p2)};shft=function(p2){return(p2+7)/8|0};slc=function(v2,s2,e3){(null==s2||s2<0)&&(s2=0);(null==e3||e3>v2.length)&&(e3=v2.length);return new u8(v2.subarray(s2,e3))};ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"];err2=function(ind,msg,nt){var e3=new Error(msg||ec[ind]);e3.code=ind;Error.captureStackTrace&&Error.captureStackTrace(e3,err2);if(!nt)throw e3;return e3};inflt=function(dat,st,buf,dict){var noBuf,resize,noSt,cbuf,final,pos,bt2,lm,dm,lbt,dbt,tbts,type,s2,l2,t9,hLit,hcLen,tl,ldt,clt,i2,clb,clbmsk,clm,r4,c3,n3,lt,dt,lms,dms,lpos,sym,add,b3,d4,dsym,end,shift,dend,sl=dat.length,dl=dict?dict.length:0;if(!sl||st.f&&!st.l)return buf||new u8(0);resize=(noBuf=!buf)||2!=st.i;noSt=st.i;noBuf&&(buf=new u8(3*sl));cbuf=function(l3){var nbuf,bl2=buf.length;if(l3>bl2){(nbuf=new u8(Math.max(2*bl2,l3))).set(buf);buf=nbuf}};final=st.f||0,pos=st.p||0,bt2=st.b||0,lm=st.l,dm=st.d,lbt=st.m,dbt=st.n;tbts=8*sl;do{if(!lm){final=bits(dat,pos,1);type=bits(dat,pos+1,3);pos+=3;if(!type){if((t9=(s2=shft(pos)+4)+(l2=dat[s2-4]|dat[s2-3]<<8))>sl){noSt&&err2(0);break}resize&&cbuf(bt2+l2);buf.set(dat.subarray(s2,t9),bt2);st.b=bt2+=l2,st.p=pos=8*t9,st.f=final;continue}if(1==type)lm=flrm,dm=fdrm,lbt=9,dbt=5;else if(2==type){hLit=bits(dat,pos,31)+257,hcLen=bits(dat,pos+10,15)+4;tl=hLit+bits(dat,pos+5,31)+1;pos+=14;ldt=new u8(tl);clt=new u8(19);for(i2=0;i2<hcLen;++i2)clt[clim[i2]]=bits(dat,pos+3*i2,7);pos+=3*hcLen;clbmsk=(1<<(clb=max(clt)))-1;clm=hMap(clt,clb,1);for(i2=0;i2<tl;){pos+=15&(r4=clm[bits(dat,pos,clbmsk)]);if((s2=r4>>4)<16)ldt[i2++]=s2;else{c3=0,n3=0;16==s2?(n3=3+bits(dat,pos,3),pos+=2,c3=ldt[i2-1]):17==s2?(n3=3+bits(dat,pos,7),pos+=3):18==s2&&(n3=11+bits(dat,pos,127),pos+=7);for(;n3--;)ldt[i2++]=c3}}lt=ldt.subarray(0,hLit),dt=ldt.subarray(hLit);lbt=max(lt);dbt=max(dt);lm=hMap(lt,lbt,1);dm=hMap(dt,dbt,1)}else err2(1);if(pos>tbts){noSt&&err2(0);break}}resize&&cbuf(bt2+131072);lms=(1<<lbt)-1,dms=(1<<dbt)-1;lpos=pos;for(;;lpos=pos){sym=(c3=lm[bits16(dat,pos)&lms])>>4;if((pos+=15&c3)>tbts){noSt&&err2(0);break}c3||err2(2);if(sym<256)buf[bt2++]=sym;else{if(256==sym){lpos=pos,lm=null;break}add=sym-254;if(sym>264){b3=fleb[i2=sym-257];add=bits(dat,pos,(1<<b3)-1)+fl[i2];pos+=b3}dsym=(d4=dm[bits16(dat,pos)&dms])>>4;d4||err2(3);pos+=15&d4;dt=fd[dsym];if(dsym>3){b3=fdeb[dsym];dt+=bits16(dat,pos)&(1<<b3)-1,pos+=b3}if(pos>tbts){noSt&&err2(0);break}resize&&cbuf(bt2+131072);end=bt2+add;if(bt2<dt){shift=dl-dt,dend=Math.min(dt,end);shift+bt2<0&&err2(3);for(;bt2<dend;++bt2)buf[bt2]=dict[shift+bt2]}for(;bt2<end;++bt2)buf[bt2]=buf[bt2-dt]}}st.l=lm,st.p=lpos,st.b=bt2,st.f=final;lm&&(final=1,st.m=lbt,st.d=dm,st.n=dbt)}while(!final);return bt2!=buf.length&&noBuf?slc(buf,0,bt2):buf.subarray(0,bt2)};wbits=function(d4,p2,v2){v2<<=7&p2;var o2=p2/8|0;d4[o2]|=v2;d4[o2+1]|=v2>>8};wbits16=function(d4,p2,v2){v2<<=7&p2;var o2=p2/8|0;d4[o2]|=v2;d4[o2+1]|=v2>>8;d4[o2+2]|=v2>>16};hTree=function(d4,mb){var i2,s2,t22,v2,l2,r4,i0,i1,i22,maxSym,tr,mbt,dt,lft,cst,i2_1,i2_2,i2_3,t9=[];for(i2=0;i2<d4.length;++i2)d4[i2]&&t9.push({s:i2,f:d4[i2]});s2=t9.length;t22=t9.slice();if(!s2)return{t:et,l:0};if(1==s2){(v2=new u8(t9[0].s+1))[t9[0].s]=1;return{t:v2,l:1}}t9.sort(function(a2,b3){return a2.f-b3.f});t9.push({s:-1,f:25001});l2=t9[0],r4=t9[1],i0=0,i1=1,i22=2;t9[0]={s:-1,f:l2.f+r4.f,l:l2,r:r4};for(;i1!=s2-1;){l2=t9[t9[i0].f<t9[i22].f?i0++:i22++];r4=t9[i0!=i1&&t9[i0].f<t9[i22].f?i0++:i22++];t9[i1++]={s:-1,f:l2.f+r4.f,l:l2,r:r4}}maxSym=t22[0].s;for(i2=1;i2<s2;++i2)t22[i2].s>maxSym&&(maxSym=t22[i2].s);tr=new u16(maxSym+1);if((mbt=ln(t9[i1-1],tr,0))>mb){i2=0,dt=0;cst=1<<(lft=mbt-mb);t22.sort(function(a2,b3){return tr[b3.s]-tr[a2.s]||a2.f-b3.f});for(;i2<s2;++i2){i2_1=t22[i2].s;if(!(tr[i2_1]>mb))break;dt+=cst-(1<<mbt-tr[i2_1]);tr[i2_1]=mb}dt>>=lft;for(;dt>0;){i2_2=t22[i2].s;tr[i2_2]<mb?dt-=1<<mb-tr[i2_2]++-1:++i2}for(;i2>=0&&dt;--i2){i2_3=t22[i2].s;if(tr[i2_3]==mb){--tr[i2_3];++dt}}mbt=mb}return{t:new u8(tr),l:mbt}};ln=function(n3,l2,d4){return-1==n3.s?Math.max(ln(n3.l,l2,d4+1),ln(n3.r,l2,d4+1)):l2[n3.s]=d4};lc=function(c3){for(var cl2,cli,cln,cls,w2,i2,s2=c3.length;s2&&!c3[--s2];);cl2=new u16(++s2);cli=0,cln=c3[0],cls=1;w2=function(v2){cl2[cli++]=v2};for(i2=1;i2<=s2;++i2)if(c3[i2]==cln&&i2!=s2)++cls;else{if(!cln&&cls>2){for(;cls>138;cls-=138)w2(32754);if(cls>2){w2(cls>10?cls-11<<5|28690:cls-3<<5|12305);cls=0}}else if(cls>3){w2(cln),--cls;for(;cls>6;cls-=6)w2(8304);cls>2&&(w2(cls-3<<5|8208),cls=0)}for(;cls--;)w2(cln);cls=1;cln=c3[i2]}return{c:cl2.subarray(0,cli),n:s2}};clen=function(cf2,cl2){var i2,l2=0;for(i2=0;i2<cl2.length;++i2)l2+=cf2[i2]*cl2[i2];return l2};wfblk=function(out,pos,dat){var i2,s2=dat.length,o2=shft(pos+2);out[o2]=255&s2;out[o2+1]=s2>>8;out[o2+2]=255^out[o2];out[o2+3]=255^out[o2+1];for(i2=0;i2<s2;++i2)out[o2+i2+4]=dat[i2];return 8*(o2+4+s2)};wblk=function(dat,out,final,syms,lf,df,eb,li,bs2,bl2,p2){var _a8,dlt,mlb,_b5,ddt,mdb,_c3,lclt,nlc,_d2,lcdt,ndc,lcfreq,i2,_e2,lct,mlcb,nlcc,flen,ftlen,dtlen,lm,ll,dm,dl,llm,lcts,it,clct,len,sym,dst;wbits(out,p2++,final);++lf[256];dlt=(_a8=hTree(lf,15)).t,mlb=_a8.l;ddt=(_b5=hTree(df,15)).t,mdb=_b5.l;lclt=(_c3=lc(dlt)).c,nlc=_c3.n;lcdt=(_d2=lc(ddt)).c,ndc=_d2.n;lcfreq=new u16(19);for(i2=0;i2<lclt.length;++i2)++lcfreq[31&lclt[i2]];for(i2=0;i2<lcdt.length;++i2)++lcfreq[31&lcdt[i2]];lct=(_e2=hTree(lcfreq,7)).t,mlcb=_e2.l;nlcc=19;for(;nlcc>4&&!lct[clim[nlcc-1]];--nlcc);flen=bl2+5<<3;ftlen=clen(lf,flt)+clen(df,fdt)+eb;dtlen=clen(lf,dlt)+clen(df,ddt)+eb+14+3*nlcc+clen(lcfreq,lct)+2*lcfreq[16]+3*lcfreq[17]+7*lcfreq[18];if(bs2>=0&&flen<=ftlen&&flen<=dtlen)return wfblk(out,p2,dat.subarray(bs2,bs2+bl2));wbits(out,p2,1+(dtlen<ftlen)),p2+=2;if(dtlen<ftlen){lm=hMap(dlt,mlb,0),ll=dlt,dm=hMap(ddt,mdb,0),dl=ddt;llm=hMap(lct,mlcb,0);wbits(out,p2,nlc-257);wbits(out,p2+5,ndc-1);wbits(out,p2+10,nlcc-4);p2+=14;for(i2=0;i2<nlcc;++i2)wbits(out,p2+3*i2,lct[clim[i2]]);p2+=3*nlcc;lcts=[lclt,lcdt];for(it=0;it<2;++it){clct=lcts[it];for(i2=0;i2<clct.length;++i2){len=31&clct[i2];wbits(out,p2,llm[len]),p2+=lct[len];len>15&&(wbits(out,p2,clct[i2]>>5&127),p2+=clct[i2]>>12)}}}else lm=flm,ll=flt,dm=fdm,dl=fdt;for(i2=0;i2<li;++i2)if((sym=syms[i2])>255){wbits16(out,p2,lm[257+(len=sym>>18&31)]),p2+=ll[len+257];len>7&&(wbits(out,p2,sym>>23&31),p2+=fleb[len]);wbits16(out,p2,dm[dst=31&sym]),p2+=dl[dst];dst>3&&(wbits16(out,p2,sym>>5&8191),p2+=fdeb[dst])}else wbits16(out,p2,lm[sym]),p2+=ll[sym];wbits16(out,p2,lm[256]);return p2+ll[256]};deo=new i32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]);et=new u8(0);dflt=function(dat,lvl,plvl,pre,post,st){var opt,n3,c3,msk_1,prev,head2,bs1_1,bs2_1,hsh,syms,lf,df,lc_1,eb,i2,li,wi,bs2,hv,imod,pimod,rem,j2,l2,d4,ch_1,dif,maxn,maxd,ml,nl,mmd,md,ti,cd2,lin,din,e3,s2=st.z||dat.length,o2=new u8(pre+s2+5*(1+Math.ceil(s2/7e3))+post),w2=o2.subarray(pre,o2.length-post),lst=st.l,pos=7&(st.r||0);if(lvl){pos&&(w2[0]=st.r>>3);n3=(opt=deo[lvl-1])>>13,c3=8191&opt;msk_1=(1<<plvl)-1;prev=st.p||new u16(32768),head2=st.h||new u16(msk_1+1);bs1_1=Math.ceil(plvl/3),bs2_1=2*bs1_1;hsh=function(i3){return(dat[i3]^dat[i3+1]<<bs1_1^dat[i3+2]<<bs2_1)&msk_1};syms=new i32(25e3);lf=new u16(288),df=new u16(32);lc_1=0,eb=0,i2=st.i||0,li=0,wi=st.w||0,bs2=0;for(;i2+2<s2;++i2){imod=32767&i2,pimod=head2[hv=hsh(i2)];prev[imod]=pimod;head2[hv]=imod;if(wi<=i2){rem=s2-i2;if((lc_1>7e3||li>24576)&&(rem>423||!lst)){pos=wblk(dat,w2,0,syms,lf,df,eb,li,bs2,i2-bs2,pos);li=lc_1=eb=0,bs2=i2;for(j2=0;j2<286;++j2)lf[j2]=0;for(j2=0;j2<30;++j2)df[j2]=0}l2=2,d4=0,ch_1=c3,dif=imod-pimod&32767;if(rem>2&&hv==hsh(i2-dif)){maxn=Math.min(n3,rem)-1;maxd=Math.min(32767,i2);ml=Math.min(258,rem);for(;dif<=maxd&&--ch_1&&imod!=pimod;){if(dat[i2+l2]==dat[i2+l2-dif]){nl=0;for(;nl<ml&&dat[i2+nl]==dat[i2+nl-dif];++nl);if(nl>l2){l2=nl,d4=dif;if(nl>maxn)break;mmd=Math.min(dif,nl-2);md=0;for(j2=0;j2<mmd;++j2)(cd2=(ti=i2-dif+j2&32767)-prev[ti]&32767)>md&&(md=cd2,pimod=ti)}}dif+=(imod=pimod)-(pimod=prev[imod])&32767}}if(d4){syms[li++]=268435456|revfl[l2]<<18|revfd[d4];lin=31&revfl[l2],din=31&revfd[d4];eb+=fleb[lin]+fdeb[din];++lf[257+lin];++df[din];wi=i2+l2;++lc_1}else{syms[li++]=dat[i2];++lf[dat[i2]]}}}for(i2=Math.max(i2,wi);i2<s2;++i2){syms[li++]=dat[i2];++lf[dat[i2]]}pos=wblk(dat,w2,lst,syms,lf,df,eb,li,bs2,i2-bs2,pos);if(!lst){st.r=7&pos|w2[pos/8|0]<<3;pos-=7;st.h=head2,st.p=prev,st.i=i2,st.w=wi}}else{for(i2=st.w||0;i2<s2+lst;i2+=65535){if((e3=i2+65535)>=s2){w2[pos/8|0]=lst;e3=s2}pos=wfblk(w2,pos+1,dat.subarray(i2,e3))}st.i=s2}return slc(o2,0,pre+shft(pos)+post)};0;0;dopt=function(dat,opt,pre,post,st){var dict,newDat;if(!st){st={l:1};if(opt.dictionary){dict=opt.dictionary.subarray(-32768);(newDat=new u8(dict.length+dat.length)).set(dict);newDat.set(dat,dict.length);dat=newDat;st.w=dict.length}}return dflt(dat,null==opt.level?6:opt.level,null==opt.mem?st.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(dat.length)))):20:12+opt.mem,pre,post,st)};mrg=function(a2,b3){var k2,o2={};for(k2 in a2)o2[k2]=a2[k2];for(k2 in b3)o2[k2]=b3[k2];return o2};wcln=function(fn,fnStr,td3){var i2,v2,k2,st_1,spInd,t9,dt=fn(),st=fn.toString(),ks=st.slice(st.indexOf("[")+1,st.lastIndexOf("]")).replace(/\s+/g,"").split(",");for(i2=0;i2<dt.length;++i2){v2=dt[i2],k2=ks[i2];if("function"==typeof v2){fnStr+=";"+k2+"=";st_1=v2.toString();if(v2.prototype)if(-1!=st_1.indexOf("[native code]")){spInd=st_1.indexOf(" ",8)+1;fnStr+=st_1.slice(spInd,st_1.indexOf("(",spInd))}else{fnStr+=st_1;for(t9 in v2.prototype)fnStr+=";"+k2+".prototype."+t9+"="+v2.prototype[t9].toString()}else fnStr+=st_1}else td3[k2]=v2}return fnStr};ch3=[];cbfs=function(v2){var k2,tl=[];for(k2 in v2)v2[k2].buffer&&tl.push((v2[k2]=new v2[k2].constructor(v2[k2])).buffer);return tl};wrkr=function(fns,init3,id,cb2){var fnStr,td_1,m3,i2,td3;if(!ch3[id]){fnStr="",td_1={},m3=fns.length-1;for(i2=0;i2<m3;++i2)fnStr=wcln(fns[i2],fnStr,td_1);ch3[id]={c:wcln(fns[m3],fnStr,td_1),e:td_1}}td3=mrg({},ch3[id].e);return wk(ch3[id].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+init3.toString()+"}",id,td3,cbfs(td3),cb2)};bInflt=function(){return[u8,u16,i32,fleb,fdeb,clim,fl,fd,flrm,fdrm,rev,ec,hMap,max,bits,bits16,shft,slc,err2,inflt,inflateSync,pbf,gopt]};bDflt=function(){return[u8,u16,i32,fleb,fdeb,clim,revfl,revfd,flm,flt,fdm,fdt,rev,deo,et,hMap,wbits,wbits16,hTree,ln,lc,clen,wfblk,wblk,shft,slc,dflt,dopt,deflateSync,pbf]};pbf=function(msg){return postMessage(msg,[msg.buffer])};gopt=function(o2){return o2&&{out:o2.size&&new u8(o2.size),dictionary:o2.dictionary}};cbify=function(dat,opts,fns,init3,id,cb2){var w2=wrkr(fns,init3,id,function(err3,dat2){w2.terminate();cb2(err3,dat2)});w2.postMessage([dat,opts],opts.consume?[dat.buffer]:[]);return function(){w2.terminate()}};0;0;0;0;0;0;fltn=function(d4,p2,t9,o2){var k2,val,n3,op;for(k2 in d4){val=d4[k2],n3=p2+k2,op=o2;Array.isArray(val)&&(op=mrg(o2,val[1]),val=val[0]);if(val instanceof u8)t9[n3]=[val,op];else{t9[n3+="/"]=[new u8(0),op];fltn(val,n3,t9,o2)}}};td2="undefined"!=typeof TextDecoder&&new TextDecoder;try{td2.decode(et,{stream:!0})}catch(e3){}"function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout&&setTimeout;wrappedInflate=wrapFflateFunc(function inflate(data,opts,cb2){cb2||(cb2=opts,opts={});"function"!=typeof cb2&&err2(7);return cbify(data,opts,[bInflt],function(ev){return pbf(inflateSync(ev.data[0],gopt(ev.data[1])))},1,cb2)});wrappedDeflate=wrapFflateFunc(function deflate(data,opts,cb2){cb2||(cb2=opts,opts={});"function"!=typeof cb2&&err2(7);return cbify(data,opts,[bDflt],function(ev){return pbf(deflateSync(ev.data[0],ev.data[1]))},0,cb2)});replicationFilter=(db,compress)=>{db.transform({incoming:async doc=>compress?await compressDoc(doc):doc,outgoing:async doc=>await decompressDoc(doc)})};MARK_SHIFT_COMPRESSED="LZ";CheckPointInfoDefault={lastLocalSeq:0,journalEpoch:"",knownIDs:new Set,sentIDs:new Set,receivedFiles:new Set,sentFiles:new Set};DatabaseReadLayer=class{constructor(database){this.database=database}isChunkDoc(doc){return doc&&"string"==typeof doc._id&&"leaf"===doc.type}getError(error){return error instanceof Error?error:"error"in error&&error.error instanceof Error?error.error:void 0}isMissingError(error){return"status"in error&&404===error.status||"error"in error&&"not_found"===error.error||"error"in error&&this.isMissingError(error.error)}async read(ids,options,next2){if(0===ids.length)return[];const resultMap=new Map,remainingIds=[];try{const results=await this.database.allDocs({keys:ids,include_docs:!0});for(const row of results.rows)if("doc"in row&&row.doc&&this.isChunkDoc(row.doc)){const chunk=row.doc;resultMap.set(chunk._id,chunk)}else{if(!this.isMissingError(row))throw new LiveSyncError(`Failed to read chunk ${row.key}`,{status:404,cause:this.getError(row)});{const idFromRow="string"==typeof row.key?row.key:void 0;idFromRow&&remainingIds.push(idFromRow)}}}catch(error){if(error instanceof LiveSyncError)throw error;Logger(`Database read error: ${error}`,LOG_LEVEL_VERBOSE);return ids.map(()=>!1)}if(0===remainingIds.length)return ids.map(id=>{var _a8;return null!=(_a8=resultMap.get(id))&&_a8});const nextResults=await next2(remainingIds),nextResultMap=new Map(remainingIds.map((id,index6)=>[id,nextResults[index6]]));return[...ids.map(id=>{var _a8,_b5;return null!=(_b5=null!=(_a8=resultMap.get(id))?_a8:nextResultMap.get(id))&&_b5})]}};CacheLayer=class{constructor(maxCacheSize){this.caches=new Map;this.allocCount=0;this.derefCount=0;this.maxCacheSize=maxCacheSize}getCachedChunk(id){if(!this.caches.has(id))return!1;const weakRef=this.caches.get(id);if(weakRef){const cachedChunk=weakRef.deref();if(cachedChunk)return cachedChunk;this.derefCount++;this.deleteCachedChunk(id);return!1}return!1}getChunkIDFromCache(data){for(const[id,weakRef]of this.caches){const chunk=weakRef.deref();if(chunk){if(chunk.data===data)return id}else{this.derefCount++;this.deleteCachedChunk(id)}}return!1}cacheChunk(chunk){if(this.getCachedChunk(chunk._id))this.reorderChunk(chunk._id);else{this.caches.set(chunk._id,new FallbackWeakRef(chunk));this.allocCount++;if(this.caches.size>this.maxCacheSize)do{const firstKey=this.caches.keys().next().value;firstKey&&this.caches.delete(firstKey)}while(this.caches.size>this.maxCacheSize)}}reorderChunk(id){const chunk=this.getCachedChunk(id);if(chunk){this.caches.delete(id);this.caches.set(id,new FallbackWeakRef(chunk))}}deleteCachedChunk(id){this.caches.has(id)&&this.caches.delete(id)}clearCaches(){this.caches.clear();this.allocCount=0;this.derefCount=0}tearDown(){this.clearCaches()}getStatistics(){return{size:this.caches.size,allocCount:this.allocCount,derefCount:this.derefCount}}async read(ids,options,next2){if(options.skipCache)return next2(ids);const resultMap=new Map,remainingIds=[];for(const id of ids){const cached=this.getCachedChunk(id);if(cached){this.reorderChunk(id);resultMap.set(id,cached)}else remainingIds.push(id)}if(0===remainingIds.length)return ids.map(id=>resultMap.get(id)||!1);const nextResults=await next2(remainingIds),nextResultMap=new Map(remainingIds.map((id,index6)=>[id,nextResults[index6]]));return ids.map(id=>{var _a8,_b5;return null!=(_b5=null!=(_a8=resultMap.get(id))?_a8:nextResultMap.get(id))&&_b5})}async write(chunks,options,origin2,next2){const filtered=[],cachedCount=chunks.length;for(const chunk of chunks)this.getCachedChunk(chunk._id)?this.reorderChunk(chunk._id):filtered.push(chunk);const result=await next2(filtered);if(result.result&&!options.skipCache)for(const chunk of chunks)this.cacheChunk(chunk);result.processed&&(result.processed.cached=cachedCount-filtered.length);return result}};ArrivalWaitLayer=class{constructor(eventEmitter2){this.waitingMap=new Map;this.DEFAULT_TIMEOUT=15e3;this.eventEmitter=eventEmitter2}enqueueWaiting(id,timeout){const previous=this.waitingMap.get(id);if(previous)return previous.resolver.promise;const resolver2=promiseWithResolvers();this.waitingMap.set(id,{resolver:resolver2});return this.withTimeout(resolver2.promise,timeout,()=>{const current=this.waitingMap.get(id);current&&current.resolver===resolver2&&this.waitingMap.delete(id);return!1})}withTimeout(proc,timeout,onTimedOut){return new Promise((resolve,reject)=>{const timer=setTimeout(()=>{resolve(onTimedOut())},timeout);proc.then(resolve).catch(reject).finally(()=>{clearTimeout(timer)})})}onChunkArrived(doc,deleted=!1){const id=doc._id;if(this.waitingMap.has(id)){const queue2=this.waitingMap.get(id);this.waitingMap.delete(id);doc._deleted||deleted?queue2.resolver.resolve(!1):queue2.resolver.resolve(doc)}}onMissingChunk(id){if(this.waitingMap.has(id)){const queue2=this.waitingMap.get(id);this.waitingMap.delete(id);queue2.resolver.resolve(!1)}}async read(ids,options,next2){var _a8;const timeout=null!=(_a8=options.timeout)?_a8:this.DEFAULT_TIMEOUT;if(timeout<=0||0===ids.length)return ids.map(()=>!1);const tasks3=ids.map(id=>this.enqueueWaiting(id,timeout));options.preventRemoteRequest||this.eventEmitter("missingChunks",ids);return await Promise.all(tasks3)}clearWaiting(){for(const[,queue2]of this.waitingMap.entries())queue2.resolver.resolve(!1);this.waitingMap.clear()}tearDown(){this.clearWaiting()}getWaitingCount(){return this.waitingMap.size}};DatabaseWriteLayer=class{constructor(database){this.database=database}async write(chunks,options=void 0,origin2,next2){if(0===chunks.length)return next2([]);try{const result=await this.database.bulkDocs(chunks,{new_edits:!(null==options?void 0:options.force)}),failed2=result.filter(res2=>"error"in res2);if(failed2.some(res2=>409!==res2.status))throw new LiveSyncError(`Failed to write chunks: ${failed2.map(res2=>res2.error).join(", ")}`,{status:500});const conflictedChunkIDs=failed2.filter(res2=>"string"==typeof res2.id).map(res2=>res2.id),nextResult=await next2(chunks),writeResult={result:!0,processed:{cached:nextResult.processed.cached,hotPack:nextResult.processed.hotPack,written:result.length-failed2.length,duplicated:conflictedChunkIDs.length}};conflictedChunkIDs.length;return writeResult}catch(error){if(error instanceof LiveSyncError)throw error;throw new LiveSyncError(`Database write layer error: ${error}`,{status:500,cause:error})}}};LayeredChunkManager=class{constructor(options){this.eventTarget=new EventTarget;this.abort=new AbortController;this.initialised=Promise.resolve();this.onChunkArrivedHandler=this.onChunkArrived.bind(this);this.onChangeHandler=this.onChange.bind(this);this.onMissingChunkRemoteHandler=this.onMissingChunkRemote.bind(this);this.concurrentTransactions=0;this.stabilised=Promise.resolve();this.options=options;const maxCacheSize=10*options.settingService.currentSettings().hashCacheMaxCount;this.cacheLayer=new CacheLayer(maxCacheSize);this.arrivalWaitLayer=new ArrivalWaitLayer((eventName,data)=>{"missingChunks"===eventName&&this.emitEvent(EVENT_MISSING_CHUNKS,data)});this.readLayers=[this.cacheLayer,new DatabaseReadLayer(this.database),this.arrivalWaitLayer];this.writeLayers=[new DatabaseWriteLayer(this.database),this.cacheLayer];this.offChangeHandler=this.changeManager.addCallback(this.onChangeHandler);this.addListener(EVENT_CHUNK_FETCHED,this.onChunkArrivedHandler,{signal:this.abort.signal});this.addListener(EVENT_MISSING_CHUNK_REMOTE,this.onMissingChunkRemoteHandler,{signal:this.abort.signal});this.initialised=this._initialise()}get changeManager(){return this.options.changeManager}get database(){return this.options.database}get cacheStatistics(){return this.cacheLayer.getStatistics()}addListener(type,listener,options){const callback=ev=>{listener.call(this,ev.detail)};this.eventTarget.addEventListener(type,callback,options);return()=>{this.eventTarget.removeEventListener(type,callback,options)}}emitEvent(type,detail){const event2=new CustomEvent(type,{detail});this.eventTarget.dispatchEvent(event2)}async _initialise(){Logger("ChunkManager initialised",LOG_LEVEL_VERBOSE);return await Promise.resolve()}destroy(){const layers=unique([...this.readLayers,...this.writeLayers]);this.abort.abort();this.offChangeHandler();for(const layer of layers)layer.tearDown&&layer.tearDown()}getCachedChunk(id){return this.cacheLayer.getCachedChunk(id)}getChunkIDFromCache(data){return this.cacheLayer.getChunkIDFromCache(data)}cacheChunk(chunk){this.cacheLayer.cacheChunk(chunk)}clearCaches(){this.cacheLayer.clearCaches()}async read(ids,options,preloadedChunks){const order=[...ids],resultMap=new Map(ids.map(id=>[id,!1])),readIds=new Set([...resultMap.keys()]);if(preloadedChunks)for(const[id,chunk]of Object.entries(preloadedChunks))if(this.isChunkDoc(chunk)){this.cacheLayer.cacheChunk(chunk);resultMap.set(id,chunk);readIds.delete(id)}const results=await this.executeReadPipeline([...readIds],options);for(let i2=0;i2<results.length;i2++)if(results[i2]){const chunk=results[i2];resultMap.set(chunk._id,chunk)}return order.map(id=>resultMap.get(id)||!1)}executeReadPipeline(ids,options){let layerIndex=0;const layers=this.readLayers,executeNextLayer=remaining=>{if(layerIndex>=layers.length)return Promise.resolve(remaining.map(()=>!1));const layer=layers[layerIndex];layerIndex++;return layer.read(remaining,options,executeNextLayer)};return executeNextLayer(ids)}async write(chunks,options,origin2){return await this.executeWritePipeline(chunks,options,origin2)}executeWritePipeline(chunks,options,origin2){let layerIndex=0;const layers=this.writeLayers,executeNextLayer=remaining=>{if(layerIndex>=layers.length)return Promise.resolve({result:!0,processed:{cached:0,hotPack:0,written:0,duplicated:0}});const layer=layers[layerIndex];layerIndex++;return layer.write(remaining,options,origin2,executeNextLayer)};return executeNextLayer(chunks)}isChunkDoc(doc){return doc&&"string"==typeof doc._id&&"leaf"===doc.type}onChunkArrived(doc,deleted=!1){this.arrivalWaitLayer.onChunkArrived(doc,deleted)}onChange(change){const doc=change.doc;doc&&doc._id&&"leaf"===doc.type&&this.onChunkArrived(doc,change.deleted)}onMissingChunkRemote(id){this.arrivalWaitLayer.onMissingChunk(id)}async transaction(callback){await this.initialised;await this.stabilised;this.concurrentTransactions++;try{return await callback()}finally{this.concurrentTransactions--;if(0===this.concurrentTransactions){Logger("All transactions completed. Performing stabilisation.",LOG_LEVEL_VERBOSE);await this._stabilise()}else Logger(`Transaction completed. Remaining: ${this.concurrentTransactions}`,LOG_LEVEL_VERBOSE)}}async _stabilise(){const pr=promiseWithResolvers();this.stabilised=pr.promise;try{await this.__stabilise()}finally{pr.resolve()}}__stabilise(){return Promise.resolve()}};EVENT_MISSING_CHUNKS="missingChunks";EVENT_MISSING_CHUNK_REMOTE="missingChunkRemote";EVENT_CHUNK_FETCHED="chunkFetched";ChunkFetcher=class{constructor(options){this.queue=[];this.abort=new AbortController;this.onEventHandler=this.onEvent.bind(this);this.currentProcessing=0;this.previousRequestTime=0;this.options=options;this.chunkManager.addListener(EVENT_MISSING_CHUNKS,this.onEventHandler,{signal:this.abort.signal})}get chunkManager(){return this.options.chunkManager}get interval(){return this.options.settingService.currentSettings().minimumIntervalOfReadChunksOnline||DEFAULT_SETTINGS.minimumIntervalOfReadChunksOnline}get concurrency(){return this.options.settingService.currentSettings().concurrencyOfReadChunksOnline||DEFAULT_SETTINGS.concurrencyOfReadChunksOnline}destroy(){this.abort.abort();this.queue=[]}onEvent(ids){this.queue=unique([...this.queue,...ids]);this.canRequestMore()&&setTimeout(()=>{this.requestMissingChunks()},1)}canRequestMore(){return this.currentProcessing<this.concurrency&&this.queue.length>0}async requestMissingChunks(){if(this.canRequestMore())try{let isValidChunk2=function(chunk){return chunk&&"string"==typeof(null==chunk?void 0:chunk._id)&&"string"==typeof(null==chunk?void 0:chunk.data)};this.currentProcessing++;const requestIDs=this.queue.splice(0,100),now3=Date.now(),timeSinceLastRequest=now3-this.previousRequestTime;this.previousRequestTime=now3;const timeToWait=Math.max(this.interval-timeSinceLastRequest,0);timeToWait>0&&await delay(timeToWait);const replicator=this.options.replicatorService.getActiveReplicator();if(!replicator){Logger("No active replicator was found to request missing chunks.");return}const fetched=await replicator.fetchRemoteChunks(requestIDs,!1);if(!fetched){Logger(`No chunks were found for the following IDs: ${requestIDs.join(", ")}`);for(const chunkID of requestIDs)this.chunkManager.emitEvent(EVENT_MISSING_CHUNK_REMOTE,chunkID);return}const chunks=fetched.filter(chunk=>isValidChunk2(chunk));if(chunks.length!==fetched.length){Logger(`Some fetched chunks are invalid and will be ignored: (${fetched.length-chunks.length} / ${fetched.length}).`,LOG_LEVEL_VERBOSE);for(const chunk of fetched)isValidChunk2(chunk)||Logger(`Invalid chunk: ${JSON.stringify(chunk)}`,LOG_LEVEL_VERBOSE)}0===chunks.length&&Logger(`No valid chunks were found for the following IDs: ${requestIDs.join(", ")}`);const missingIDs=requestIDs.filter(id=>!chunks.some(chunk=>chunk._id===id));try{if(0===chunks.length)return;Logger(`Writing fetched chunks (${chunks.length}) to the database...`);!0===(await this.chunkManager.write(chunks,{skipCache:!0,force:!0},"ChunkFetcher")).result?Logger(`Fetched chunks were stored successfully: ${chunks.length}`,LOG_LEVEL_VERBOSE):Logger(`Fetched chunks could not be stored: ${chunks.map(chunk=>chunk._id).join(", ")}`,LOG_LEVEL_VERBOSE)}catch(error){Logger(`An error occurred while storing fetched chunks: ${error}`,LOG_LEVEL_VERBOSE)}finally{for(const chunk of chunks)this.chunkManager.emitEvent(EVENT_CHUNK_FETCHED,chunk);for(const chunkID of missingIDs)this.chunkManager.emitEvent(EVENT_MISSING_CHUNK_REMOTE,chunkID)}}finally{this.currentProcessing--;this.previousRequestTime=Date.now();this.queue.length>0&&setTimeout(()=>{this.requestMissingChunks()},0)}}};ContentSplitterCore=class{constructor(params){this.options=params;this.initialised=this.initialise(params)}};ContentSplitterBase=class extends ContentSplitterCore{initialise(_options3){this.options=_options3;return Promise.resolve(!0)}static isAvailableFor(setting){return!1}getParamsFor(entry){const settings=this.options.settingService.currentSettings(),pieceSize=Math.floor(102400*(1*(settings.customChunkSize||0)+1)),minimumChunkSize=settings.minimumChunkSize,path2=entry.path,plainSplit=shouldSplitAsPlainText(path2),blob=entry.data instanceof Blob?entry.data:createTextBlob(entry.data);let useWorker=!0;settings.disableWorkerForGeneratingChunks&&(useWorker=!1);useWorker&&settings.processSmallFilesInUIThread&&blob.size<=1024&&(useWorker=!1);return{blob,path:path2,pieceSize,plainSplit,minimumChunkSize,useWorker,useSegmenter:"v2-segmenter"===settings.chunkSplitterVersion}}async splitContent(entry){await this.initialised;const options=this.getParamsFor(entry);return await this.processSplit(options)}};charNewLine="\n".charCodeAt(0);segmenter="Segmenter"in Intl?function wrapByDefault(func,onError){try{return func()}catch(ex){return onError(ex)}}(()=>new Intl.Segmenter(navigator.language,{granularity:"sentence"}),err3=>{Logger(`Failed to create Intl.Segmenter: ${err3.message}`,LOG_LEVEL_VERBOSE)}):void 0;MAX_ITEMS=100;ContentSplitterRabinKarp=class extends ContentSplitterBase{static isAvailableFor(setting){return"v3-rabin-karp"===setting.settingService.currentSettings().chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2WorkerRabinKarp(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path)():(await splitPiecesRabinKarp(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path))()}};ContentSplitters=[class extends ContentSplitterBase{static isAvailableFor(setting){const settings=setting.settingService.currentSettings();return"v1"===settings.chunkSplitterVersion||""===settings.chunkSplitterVersion||void 0===settings.chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2Worker(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter)():(await splitPieces2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter))()}},class extends ContentSplitterBase{static isAvailableFor(setting){const settings=setting.settingService.currentSettings();return"v2"===settings.chunkSplitterVersion||"v2-segmenter"===settings.chunkSplitterVersion}async processSplit(options){return options.useWorker?splitPieces2WorkerV2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter)():(await splitPieces2V2(options.blob,options.pieceSize,options.plainSplit,options.minimumChunkSize,options.path,options.useSegmenter))()}},ContentSplitterRabinKarp];ContentSplitter=class extends ContentSplitterCore{constructor(options){super(options)}initialise(options){for(const Splitter of ContentSplitters)if(Splitter.isAvailableFor(options)){this._activeSplitter=new Splitter(options);break}if(!this._activeSplitter)throw new Error("ContentSplitter: No available splitter for settings!!");return this._activeSplitter.initialise(options)}async splitContent(entry){await this.initialised;return this._activeSplitter.splitContent(entry)}};ChangeManager=class{constructor(options){this._callbacks=[];this._database=options.database;this.setupListener()}addCallback(callback){const callbackHandler=new FallbackWeakRef(callback);this._callbacks.push(callbackHandler);return()=>{this._callbacks=this._callbacks.filter(cb2=>cb2!==callbackHandler)}}removeCallback(callback){this._callbacks=this._callbacks.filter(cb2=>cb2.deref()!==callback)}async _onChange(changeResponse){var _a8;if(this._callbacks.length){this._callbacks=this._callbacks.filter(callback=>void 0!==callback.deref());for(const callback of this._callbacks)try{const cb2=callback.deref();if(!cb2)continue;await Promise.resolve(cb2(changeResponse))}catch(err3){null==(_a8=this._changes)||_a8.emit("error",err3)}}}setupListener(){if(this._changes){const changes4=this._changes;this._changes=void 0;changes4.removeAllListeners();changes4.cancel()}const changes3=this._database.changes({since:"now",live:!0,include_docs:!0});changes3.on("change",change=>{this._onChange(change)});changes3.on("error",err3=>{Logger("ChangeManager Error watching changes");Logger(err3,LOG_LEVEL_VERBOSE)});this._changes=changes3}teardown(){var _a8,_b5;null==(_a8=this._changes)||_a8.removeAllListeners();null==(_b5=this._changes)||_b5.cancel();this._changes=void 0}restartWatch(){this.teardown();this.setupListener()}};import_diff_match_patch3=__toESM(require_diff_match_patch(),1);ConflictManager=class{constructor(options){this.options=options}get database(){return this.options.database}async getConflictedDoc(path2,rev3){try{const doc=await this.options.entryManager.getDBEntry(path2,{rev:rev3},!1,!0,!0);if(!1===doc)return!1;let data=getDocData(doc.data);"newnote"==doc.datatype?data=readString(new Uint8Array(decodeBinary(doc.data))):doc.datatype;return{deleted:doc.deleted||doc._deleted,ctime:doc.ctime,mtime:doc.mtime,rev:rev3,data}}catch(ex){if(isErrorOfMissingDoc(ex))return!1}return!1}async mergeSensibly(path2,baseRev,currentRev,conflictedRev){function splitDiffPiece(src){const ret=[];do{const d4=src.shift();if(void 0===d4)return ret;const pieces=d4[1].split(/([^\n]*\n)/).filter(f4=>""!=f4);if(void 0===d4)break;d4[0]!=import_diff_match_patch3.DIFF_DELETE&&ret.push(...pieces.map(e3=>[d4[0],e3]));if(d4[0]==import_diff_match_patch3.DIFF_DELETE){const nd=src.shift();if(void 0!==nd){const piecesPair=nd[1].split(/([^\n]*\n)/).filter(f4=>""!=f4);if(nd[0]==import_diff_match_patch3.DIFF_INSERT){for(const pt of pieces){ret.push([d4[0],pt]);const pairP=piecesPair.shift();void 0!==pairP&&ret.push([import_diff_match_patch3.DIFF_INSERT,pairP])}ret.push(...piecesPair.map(e3=>[nd[0],e3]))}else{ret.push(...pieces.map(e3=>[d4[0],e3]));ret.push(...piecesPair.map(e3=>[nd[0],e3]))}}else ret.push(...pieces.map(e3=>[0,e3]))}}while(src.length>0);return ret}var _a8,_b5,_c3,_d2;const baseLeaf=await this.getConflictedDoc(path2,baseRev),leftLeaf=await this.getConflictedDoc(path2,currentRev),rightLeaf=await this.getConflictedDoc(path2,conflictedRev);let autoMerge=!1;if(0==baseLeaf||0==leftLeaf||0==rightLeaf)return!1;if(leftLeaf.deleted&&rightLeaf.deleted)return!1;const dmp=new import_diff_match_patch3.diff_match_patch,mapLeft=dmp.diff_linesToChars_(baseLeaf.data,leftLeaf.data),diffLeftSrc=dmp.diff_main(mapLeft.chars1,mapLeft.chars2,!1);dmp.diff_charsToLines_(diffLeftSrc,mapLeft.lineArray);const mapRight=dmp.diff_linesToChars_(baseLeaf.data,rightLeaf.data),diffRightSrc=dmp.diff_main(mapRight.chars1,mapRight.chars2,!1);dmp.diff_charsToLines_(diffRightSrc,mapRight.lineArray);const diffLeft=splitDiffPiece(diffLeftSrc),diffRight=splitDiffPiece(diffRightSrc);let rightIdx=0,leftIdx=0;const merged=[];autoMerge=!0;LOOP_MERGE:do{if(leftIdx>=diffLeft.length&&rightIdx>=diffRight.length)break LOOP_MERGE;const leftItem=null!=(_a8=diffLeft[leftIdx])?_a8:[0,""],rightItem=null!=(_b5=diffRight[rightIdx])?_b5:[0,""];leftIdx++;rightIdx++;if(leftItem[0]!=import_diff_match_patch3.DIFF_EQUAL||rightItem[0]!=import_diff_match_patch3.DIFF_EQUAL||leftItem[1]!=rightItem[1]){if(leftItem[0]==import_diff_match_patch3.DIFF_DELETE&&rightItem[0]==import_diff_match_patch3.DIFF_DELETE&&leftItem[1]==rightItem[1]){const nextLeftIdx=leftIdx,nextRightIdx=rightIdx,[nextLeftItem,nextRightItem]=[null!=(_c3=diffLeft[nextLeftIdx])?_c3:[0,""],null!=(_d2=diffRight[nextRightIdx])?_d2:[0,""]];if(nextLeftItem[0]==import_diff_match_patch3.DIFF_INSERT&&nextRightItem[0]==import_diff_match_patch3.DIFF_INSERT&&nextLeftItem[1]!=nextRightItem[1]){autoMerge=!1;break}merged.push(leftItem);continue}if(leftItem[0]!=import_diff_match_patch3.DIFF_INSERT||rightItem[0]!=import_diff_match_patch3.DIFF_INSERT)if(leftItem[0]!=import_diff_match_patch3.DIFF_INSERT){if(rightItem[0]!=import_diff_match_patch3.DIFF_INSERT){if(rightItem[1]!=leftItem[1]){Logger(`MERGING PANIC:${leftItem[0]},${leftItem[1]} == ${rightItem[0]},${rightItem[1]}`,LOG_LEVEL_VERBOSE);autoMerge=!1;break LOOP_MERGE}if(leftItem[0]==import_diff_match_patch3.DIFF_DELETE){if(rightItem[0]==import_diff_match_patch3.DIFF_EQUAL){merged.push(leftItem);continue}autoMerge=!1;break LOOP_MERGE}if(rightItem[0]==import_diff_match_patch3.DIFF_DELETE){if(leftItem[0]==import_diff_match_patch3.DIFF_EQUAL){merged.push(rightItem);continue}autoMerge=!1;break LOOP_MERGE}Logger(`Weird condition:${leftItem[0]},${leftItem[1]} == ${rightItem[0]},${rightItem[1]}`,LOG_LEVEL_VERBOSE);break LOOP_MERGE}leftIdx--;merged.push(rightItem)}else{rightIdx--;merged.push(leftItem)}else{if(leftItem[1]==rightItem[1]){merged.push(leftItem);continue}if(leftLeaf.mtime<=rightLeaf.mtime){merged.push(leftItem);merged.push(rightItem);continue}merged.push(rightItem);merged.push(leftItem)}}else merged.push(leftItem)}while(leftIdx<diffLeft.length||rightIdx<diffRight.length);if(autoMerge){Logger("Sensibly merge available",LOG_LEVEL_VERBOSE);return merged}return!1}async mergeObject(path2,baseRev,currentRev,conflictedRev){try{const baseLeaf=await this.getConflictedDoc(path2,baseRev),leftLeaf=await this.getConflictedDoc(path2,currentRev),rightLeaf=await this.getConflictedDoc(path2,conflictedRev);if(0==baseLeaf||0==leftLeaf||0==rightLeaf){Logger("Could not load leafs for merge",LOG_LEVEL_VERBOSE);Logger(`${baseLeaf?"base":"missing base"}, ${leftLeaf?"left":"missing left"}, ${rightLeaf?"right":"missing right"} }`,LOG_LEVEL_VERBOSE);return!1}if(leftLeaf.deleted&&rightLeaf.deleted){Logger("Both are deleted",LOG_LEVEL_VERBOSE);return!1}const baseObj={data:tryParseJSON(baseLeaf.data,{})},leftObj={data:tryParseJSON(leftLeaf.data,{})},rightObj={data:tryParseJSON(rightLeaf.data,{})},diffLeft=generatePatchObj(baseObj,leftObj),diffRight=generatePatchObj(baseObj,rightObj),diffSetLeft=new Map(flattenObject(diffLeft)),diffSetRight=new Map(flattenObject(diffRight));for(const[key3,value]of diffSetLeft)diffSetRight.has(key3)&&diffSetRight.get(key3)==value&&diffSetRight.delete(key3);for(const[key3,value]of diffSetRight)if(diffSetLeft.has(key3)&&diffSetLeft.get(key3)!=value){Logger(`Conflicted key:${key3}`,LOG_LEVEL_VERBOSE);return!1}const patches=[{mtime:leftLeaf.mtime,patch:diffLeft},{mtime:rightLeaf.mtime,patch:diffRight}].sort((a2,b3)=>a2.mtime-b3.mtime);let newObj={...baseObj};for(const patch of patches)newObj=applyPatch(newObj,patch.patch);Logger("Object merge is applicable!",LOG_LEVEL_VERBOSE);return JSON.stringify(newObj.data)}catch(ex){Logger("Could not merge object");Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async tryAutoMergeSensibly(path2,test,conflicts){var _a8,_b5,_c3;const conflictedRev=conflicts[0],conflictedRevNo=Number(conflictedRev.split("-")[0]),commonBase=null!=(_c3=null==(_b5=null==(_a8=((await this.database.get(await this.options.pathService.path2id(path2),{revs_info:!0}))._revs_info||[]).filter(e3=>"available"==e3.status&&Number(e3.rev.split("-")[0])<conflictedRevNo))?void 0:_a8[0])?void 0:_b5.rev)?_c3:"";let p2;if(commonBase){if(isSensibleMargeApplicable(path2)){const result=await this.mergeSensibly(path2,commonBase,test._rev,conflictedRev);if(result){p2=result.filter(e3=>e3[0]!=import_diff_match_patch3.DIFF_DELETE).map(e3=>e3[1]).join("");Logger(`Sensible merge:${path2}`,LOG_LEVEL_INFO)}else Logger("Sensible merge is not applicable.",LOG_LEVEL_VERBOSE)}else if(isObjectMargeApplicable(path2)){const result=await this.mergeObject(path2,commonBase,test._rev,conflictedRev);if(result){Logger(`Object merge:${path2}`,LOG_LEVEL_INFO);p2=result}else Logger("Object merge is not applicable..",LOG_LEVEL_VERBOSE)}if(void 0!==p2)return{result:p2,conflictedRev}}return!1}async tryAutoMerge(path2,enableMarkdownAutoMerge){const test=await this.options.entryManager.getDBEntry(path2,{conflicts:!0,revs_info:!0},!1,!1,!0);if(!1===test)return{ok:MISSING_OR_ERROR};if(null==test)return{ok:MISSING_OR_ERROR};if(!test._conflicts)return{ok:NOT_CONFLICTED};if(0==test._conflicts.length)return{ok:NOT_CONFLICTED};const conflicts=test._conflicts.sort((a2,b3)=>Number(a2.split("-")[0])-Number(b3.split("-")[0]));if((isSensibleMargeApplicable(path2)||isObjectMargeApplicable(path2))&&enableMarkdownAutoMerge){const autoMergeResult=await this.tryAutoMergeSensibly(path2,test,conflicts);if(!1!==autoMergeResult)return autoMergeResult}const leftLeaf=await this.getConflictedDoc(path2,test._rev),rightLeaf=await this.getConflictedDoc(path2,conflicts[0]);return{leftRev:test._rev,rightRev:conflicts[0],leftLeaf,rightLeaf}}};EntryManager=class{constructor(options){this.options=options}get localDatabase(){return this.options.database}get hashManager(){return this.options.hashManager}get chunkManager(){return this.options.chunkManager}get splitter(){return this.options.splitter}get serviceHost(){return{services:{setting:this.options.settingService,path:this.options.pathService},serviceModules:{}}}get isOnDemandChunkEnabled(){const settings=this.options.settingService.currentSettings();return settings.remoteType===REMOTE_COUCHDB&&!settings.useOnlyLocalChunk}isTargetFile(filenameSrc){return isTargetFile(this.serviceHost,filenameSrc)}async prepareChunk(piece){return await prepareChunk(this,piece)}async getDBEntryMeta(path2,opt,includeDeleted=!1){return await getDBEntryMetaByPath(this.serviceHost,this,path2,opt,includeDeleted)}async getDBEntry(path2,opt,dump=!1,waitForReady=!0,includeDeleted=!1){return await getDBEntryByPath(this.serviceHost,this,path2,opt,dump,waitForReady,includeDeleted)}async getDBEntryFromMeta(meta,dump=!1,waitForReady=!0){return await getDBEntryFromMeta(this.serviceHost,this,meta,dump,waitForReady)}async deleteDBEntry(path2,opt){return await deleteDBEntryByPath(this.serviceHost,this,path2,opt)}async putDBEntry(note,onlyChunks){return await putDBEntry(this.serviceHost,this,note,onlyChunks)}};HashManagerCore=class{constructor(options){this.useEncryption=!1;this.hashedPassphrase="";this.hashedPassphrase32=0;this.options=options;this.settingService=options.settingService;this.applyOptions(options)}applyOptions(options){var _a8;options&&(this.options=options);const settings=this.options.settingService.currentSettings();this.useEncryption=null!=(_a8=settings.encrypt)&&_a8;const passphrase=settings.passphrase||"",usingLetters=~~(passphrase.length/4*3),passphraseForHash="a83hrf7fy7sa8g31"+passphrase.substring(0,usingLetters);this.hashedPassphrase=fallbackMixedHashEach(passphraseForHash);this.hashedPassphrase32=mixedHash(passphraseForHash,305419896)[0]}initialise(){if(this.initialiseTask)return this.initialiseTask;this.initialiseTask=this.processInitialise();return this.initialiseTask}async computeHash(piece){return this.useEncryption?"+"+await this.computeHashWithEncryption(piece):await this.computeHashWithoutEncryption(piece)}static isAvailableFor(hashAlg){return!1}};XXHashHashManager=class extends HashManagerCore{constructor(options){super(options)}async processInitialise(){this.xxhash=await e();return!0}};XXHash32RawHashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return""===hashAlg}computeHashWithEncryption(piece){return Promise.resolve((this.xxhash.h32Raw((new TextEncoder).encode(piece))^this.hashedPassphrase32^piece.length).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve((this.xxhash.h32Raw((new TextEncoder).encode(piece))^piece.length).toString(36))}};XXHash64HashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return"xxhash64"===hashAlg}computeHashWithEncryption(piece){return Promise.resolve(this.xxhash.h64(`${piece}-${this.hashedPassphrase}-${piece.length}`).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve(this.xxhash.h64(`${piece}-${piece.length}`).toString(36))}};FallbackWasmHashManager=class extends XXHashHashManager{static isAvailableFor(hashAlg){return!0}computeHashWithEncryption(piece){return Promise.resolve(this.xxhash.h32(`${piece}-${this.hashedPassphrase}-${piece.length}`).toString(36))}computeHashWithoutEncryption(piece){return Promise.resolve(this.xxhash.h32(`${piece}-${piece.length}`).toString(36))}};PureJSHashManager=class extends HashManagerCore{static isAvailableFor(hashAlg){return"mixed-purejs"===hashAlg}processInitialise(){return Promise.resolve(!0)}computeHashWithEncryption(input){return Promise.resolve(fallbackMixedHashEach(`${input}${this.hashedPassphrase}${input.length}`))}computeHashWithoutEncryption(input){return Promise.resolve(fallbackMixedHashEach(`${input}-${input.length}`))}};HashManagers=[XXHash64HashManager,XXHash32RawHashManager,class extends HashManagerCore{static isAvailableFor(hashAlg){return"sha1"===hashAlg}processInitialise(){return Promise.resolve(!0)}computeHashWithEncryption(input){return sha12(`${input}-${this.hashedPassphrase}-${input.length}`)}computeHashWithoutEncryption(input){return sha12(`${input}-${input.length}`)}},PureJSHashManager,FallbackWasmHashManager,class extends PureJSHashManager{static isAvailableFor(_hashAlg){return!0}}];HashManager=class extends HashManagerCore{constructor(options){super(options);this.manager=void 0}static isAvailableFor(hashAlg){return HashManagers.some(manager=>manager.isAvailableFor(hashAlg))}async setManager(){const settings=this.options.settingService.currentSettings();for(const Manager of HashManagers)if(Manager.isAvailableFor(settings.hashAlg)){this.manager=new Manager(this.options);return await this.manager.initialise()}throw new Error(`HashManager for ${settings.hashAlg} is not available`)}async processInitialise(){const settings=this.options.settingService.currentSettings();if(await this.setManager()){Logger(`HashManager for ${settings.hashAlg} has been initialised`,LOG_LEVEL_VERBOSE);return!0}Logger(`HashManager for ${settings.hashAlg} failed to initialise`);throw new Error(`HashManager for ${settings.hashAlg} failed to initialise`)}async computeHash(piece){return await this.manager.computeHash(piece)}computeHashWithoutEncryption(piece){return this.manager.computeHashWithoutEncryption(piece)}computeHashWithEncryption(piece){return this.manager.computeHashWithEncryption(piece)}};LiveSyncManagers=class{constructor(options){this.options=options;this._APIService=options.APIService;this._pathService=options.pathService;this._replicatorService=options.replicatorService;this._settingService=options.settingService;this.log=createInstanceLogFunction("LiveSyncManagers",this._APIService);const{changeManager,hashManager,splitter,chunkManager,chunkFetcher,entryManager,conflictManager}=this.getManagerMembers();this.changeManager=changeManager;this.hashManager=hashManager;this.splitter=splitter;this.chunkManager=chunkManager;this.chunkFetcher=chunkFetcher;this.entryManager=entryManager;this.conflictManager=conflictManager}async teardownManagers(){this.log("Teardown LiveSync Managers...",LOG_LEVEL_VERBOSE);if(this.changeManager){this.changeManager.teardown();this.changeManager=void 0}if(this.chunkFetcher){this.chunkFetcher.destroy();this.chunkFetcher=void 0}if(this.chunkManager){this.chunkManager.destroy();this.chunkManager=void 0}this.log("Teardown LiveSync Managers... Done");return await Promise.resolve()}getManagerMembers(){this.log("Creating LiveSync Managers...");const database=this.options.databaseService.localDatabase.localDatabase,changeManager=new ChangeManager({database}),hashManager=new HashManager({settingService:this.options.settingService}),splitter=new ContentSplitter({settingService:this.options.settingService}),chunkManager=new LayeredChunkManager({changeManager,database,settingService:this.options.settingService}),chunkFetcher=new ChunkFetcher({chunkManager,replicatorService:this.options.replicatorService,settingService:this.options.settingService}),entryManager=new EntryManager({database,hashManager,chunkManager,splitter,pathService:this._pathService,settingService:this.options.settingService}),conflictManager=new ConflictManager({entryManager,database,pathService:this._pathService});this.log("LiveSync Managers have been created");return{changeManager,hashManager,splitter,chunkManager,chunkFetcher,entryManager,conflictManager}}async initialise(){this.log("Initialising LiveSync Managers...",LOG_LEVEL_VERBOSE);await this.splitter.initialise({settingService:this.options.settingService});await this.hashManager.initialise();this.log("LiveSync Manager has been initialised")}async reinitialise(){await this.teardownManagers();const{changeManager,hashManager,splitter,chunkManager,chunkFetcher,entryManager,conflictManager}=this.getManagerMembers();this.changeManager=changeManager;this.hashManager=hashManager;this.splitter=splitter;this.chunkManager=chunkManager;this.chunkFetcher=chunkFetcher;this.entryManager=entryManager;this.conflictManager=conflictManager;await this.initialise()}clearCaches(){var _a8;null==(_a8=this.chunkManager)||_a8.clearCaches()}async prepareHashFunction(){this.hashManager=new HashManager({settingService:this.options.settingService});await this.hashManager.initialise()}};LiveSyncLocalDB=class{constructor(dbname,env){this.isReady=!1;this.needScanning=!1;this.auth={username:"",password:""};this.dbname=dbname;this.env=env;this._log=createInstanceLogFunction("LiveSyncLocalDB",this.env.services.API);this.refreshSettings()}get managers(){if(!this._managers)throw new Error("Managers are not ready yet.");return this._managers}clearCaches(){var _a8;null==(_a8=this._managers)||_a8.clearCaches()}async _prepareHashFunctions(){var _a8;await(null==(_a8=this._managers)?void 0:_a8.prepareHashFunction())}onunload(){this.env.services.databaseEvents.onUnloadDatabase(this);this.localDatabase.removeAllListeners()}refreshSettings(){const settings=this.env.services.setting.currentSettings();this.settings=settings;this._prepareHashFunctions()}async close(){var _a8;this._log("Database closed (by close)");this.isReady=!1;null==(_a8=this.offRemoteChunkFetchedHandler)||_a8.call(this);null!=this.localDatabase&&await this.localDatabase.close();await this.env.services.databaseEvents.onUnloadDatabase(this)}onNewLeaf(chunk){var _a8;null==(_a8=this.managers.chunkManager)||_a8.emitEvent(EVENT_CHUNK_FETCHED,chunk)}async initializeDatabase(){await this._prepareHashFunctions();if(null!=this.localDatabase){this.localDatabase.removeAllListeners();await this.localDatabase.close()}this.localDatabase=null;this.localDatabase=this.env.services.database.createPouchDBInstance(this.dbname+SuffixDatabaseName,{auto_compaction:!1,revs_limit:100,deterministic_revs:!0});const manager=new LiveSyncManagers({database:this.localDatabase,APIService:this.env.services.API,pathService:this.env.services.path,replicatorService:this.env.services.replicator,settingService:this.env.services.setting,databaseService:this.env.services.database});this._managers=manager;await this.env.services.databaseEvents.onDatabaseInitialisation(this)||this._log("Initializing Database has been failed on some module",LOG_LEVEL_NOTICE);this._log("Opening Database...");this._log("Database info",LOG_LEVEL_VERBOSE);this._log(JSON.stringify(await this.localDatabase.info(),null,2),LOG_LEVEL_VERBOSE);await this.managers.initialise();this.localDatabase.on("close",()=>{var _a8;this._log("Database closed.");this.isReady=!1;this.localDatabase.removeAllListeners();null==(_a8=this.env.services.replicator.getActiveReplicator())||_a8.closeReplication();this.managers.teardownManagers()});const _instance2=new FallbackWeakRef(this),unload=eventHub.onEvent("remote-chunk-fetched",chunk=>{var _a8;null==_instance2.deref()&&unload();null==(_a8=_instance2.deref())||_a8.onNewLeaf(chunk)});this.offRemoteChunkFetchedHandler=unload;this.isReady=!0;if(!await this.env.services.databaseEvents.onDatabaseHasReady()){this._log("Some module has prevented the database from being ready. The database is initialised but not ready for use.",LOG_LEVEL_NOTICE);return!1}this._log("Database is now ready.");return!0}async allChunks(includeDeleted=!1){const used=new Set,existing=new Map;let since=0;for(;;){const changes3=await this.localDatabase.changes({since,limit:100,include_docs:!0,conflicts:!0,style:includeDeleted?"all_docs":"main_only"});if(0==changes3.results.length)break;for(const change of changes3.results){const doc=change.doc;if("leaf"==doc.type){if(doc._deleted&&!includeDeleted)continue;existing.set(doc._id,doc)}if("children"in doc){if(change.deleted&&(!doc._conflicts||0==doc._conflicts.length))continue;doc.children.forEach(e3=>used.add(e3));if(doc._conflicts){const mineRevInfo=(await this.localDatabase.get(doc._id,{revs:!0,revs_info:!0}))._revs_info||[],keepRevs=new Set;for(const conflict of doc._conflicts){const conflictedRevInfo=(await this.localDatabase.get(doc._id,{rev:conflict,revs:!0,revs_info:!0}))._revs_info||[],diffRevs=mineRevInfo.filter(e3=>!conflictedRevInfo.some(f4=>f4.rev==e3.rev&&f4.status==e3.status)),diffRevs2=conflictedRevInfo.filter(e3=>!mineRevInfo.some(f4=>f4.rev==e3.rev&&f4.status==e3.status)),diffRevs3=diffRevs.concat(diffRevs2),sameRevs=mineRevInfo.filter(e3=>conflictedRevInfo.some(f4=>f4.rev==e3.rev&&f4.status==e3.status)).filter(e3=>"available"==e3.status).sort((a2,b3)=>getNoFromRev(b3.rev)-getNoFromRev(a2.rev)),sameRevsTop=sameRevs.length>0?[sameRevs[0].rev]:[];[...diffRevs3.filter(e3=>"available"==e3.status).map(e3=>e3.rev),...sameRevsTop].forEach(e3=>keepRevs.add(e3))}const detail=await this.localDatabase.bulkGet({docs:[...keepRevs.values()].map(e3=>({id:doc._id,rev:e3}))});for(const e3 of detail.results)if("docs"in e3){const docs=e3.docs;for(const doc2 of docs)"ok"in doc2&&"children"in doc2.ok&&doc2.ok.children.forEach(e4=>used.add(e4))}}}}since=changes3.results[changes3.results.length-1].seq}return{used,existing}}async resetDatabase(){var _a8;await this.managers.teardownManagers();null==(_a8=this.env.services.replicator.getActiveReplicator())||_a8.closeReplication();if(!await this.env.services.databaseEvents.onResetDatabase(this)){Logger("Database reset has been prevented or failed on some modules.",LOG_LEVEL_NOTICE);return!1}Logger("Database closed for reset Database.");this.isReady=!1;await this.localDatabase.destroy();this.localDatabase=null;await this.initializeDatabase();this._log("Local Database Reset",LOG_LEVEL_NOTICE);return!0}async*findEntries(startKey,endKey,opt){let nextKey=startKey;""==endKey&&(endKey="􏿿");let req=this.allDocsRaw({limit:100,startkey:nextKey,endkey:endKey,include_docs:!0,...opt});do{const docs=await req;if(0===docs.rows.length)break;nextKey=`${docs.rows[docs.rows.length-1].id}`;req=this.allDocsRaw({limit:100,skip:1,startkey:nextKey,endkey:endKey,include_docs:!0,...opt});for(const row of docs.rows){const doc=row.doc;"type"in doc&&("newnote"!=doc.type&&"plain"!=doc.type||(yield doc))}}while(""!=nextKey)}async*findAllDocs(opt){const targets=[()=>this.findEntries("","_",null!=opt?opt:{}),()=>this.findEntries("_􏿿","h:",null!=opt?opt:{}),()=>this.findEntries("h:􏿿","",null!=opt?opt:{})];for(const targetFun of targets)yield*targetFun()}async*findEntryNames(startKey,endKey,opt){let nextKey=startKey;""==endKey&&(endKey="􏿿");let req=this.allDocsRaw({limit:100,startkey:nextKey,endkey:endKey,...opt});do{const docs=await req;if(0==docs.rows.length){nextKey="";break}nextKey=`${docs.rows[docs.rows.length-1].key}`;req=this.allDocsRaw({limit:100,skip:1,startkey:nextKey,endkey:endKey,...opt});for(const row of docs.rows)yield row.id}while(""!=nextKey)}async*findAllDocNames(opt){const targets=[()=>this.findEntryNames("","_",null!=opt?opt:{}),()=>this.findEntryNames("_􏿿","h:",null!=opt?opt:{}),()=>this.findEntryNames("h:􏿿","i:",null!=opt?opt:{}),()=>this.findEntryNames("i:􏿿","ix:",null!=opt?opt:{}),()=>this.findEntryNames("ix:􏿿","ps:",null!=opt?opt:{}),()=>this.findEntryNames("ps:􏿿","",null!=opt?opt:{})];for(const targetFun of targets){const target=targetFun();for await(const f4 of target)f4.startsWith("_")||"obsydian_livesync_version"!=f4&&(yield f4)}}async*findAllNormalDocs(opt){const targets=[()=>this.findEntries("","_",null!=opt?opt:{}),()=>this.findEntries("_􏿿","h:",null!=opt?opt:{}),()=>this.findEntries("h:􏿿","i:",null!=opt?opt:{}),()=>this.findEntries("i:􏿿","ix:",null!=opt?opt:{}),()=>this.findEntries("ix:􏿿","ps:",null!=opt?opt:{}),()=>this.findEntries("ps:􏿿","",null!=opt?opt:{})];for(const targetFun of targets){const target=targetFun();for await(const f4 of target)f4._id.startsWith("_")||"newnote"!=f4.type&&"plain"!=f4.type||(yield f4)}}async removeRevision(docId,revision){try{const doc=await this.localDatabase.get(docId,{rev:revision});doc._deleted=!0;await this.localDatabase.put(doc);return!0}catch(ex){isErrorOfMissingDoc(ex)&&Logger(`Remove revision: Missing target revision, ${docId}-${revision}`,LOG_LEVEL_VERBOSE)}return!1}getRaw(docId,options){return this.localDatabase.get(docId,options||{})}removeRaw(docId,revision,options){return this.localDatabase.remove(docId,revision,options||{})}putRaw(doc,options){return this.localDatabase.put(doc,options||{})}allDocsRaw(options){return this.localDatabase.allDocs(options)}bulkDocsRaw(docs,options){return this.localDatabase.bulkDocs(docs,options||{})}isTargetFile(filenameSrc){return this.managers.entryManager.isTargetFile(filenameSrc)}async getDBEntryMeta(path2,opt,includeDeleted=!1){return await this.managers.entryManager.getDBEntryMeta(path2,opt,includeDeleted)}async getDBEntry(path2,opt,dump=!1,waitForReady=!0,includeDeleted=!1){return await this.managers.entryManager.getDBEntry(path2,opt,dump,waitForReady,includeDeleted)}async getDBEntryFromMeta(meta,dump=!1,waitForReady=!0){return await this.managers.entryManager.getDBEntryFromMeta(meta,dump,waitForReady)}async deleteDBEntry(path2,opt){return await this.managers.entryManager.deleteDBEntry(path2,opt)}async putDBEntry(note,onlyChunks){return await this.managers.entryManager.putDBEntry(note,onlyChunks)}async getConflictedDoc(path2,rev3){return await this.managers.conflictManager.getConflictedDoc(path2,rev3)}async tryAutoMerge(path2,enableMarkdownAutoMerge){return await this.managers.conflictManager.tryAutoMerge(path2,enableMarkdownAutoMerge)}};RECORD_SPLIT="\n";UNIT_SPLIT="";te4=new TextEncoder;JournalSyncAbstract=class{constructor(settings,store,env){this.hash="";this.batchSize=100;this.requestedStop=!1;this.notifier=new Notifier;this._currentCheckPointInfo={...CheckPointInfoDefault};this.isPacking=!1;this.isDownloading=!1;this._settings=settings;this.env=env;this.processReplication=async docs=>await env.services.replication.parseSynchroniseResult(docs);this.store=store;this.hash=this.getHash(settings);this.trench=new Trench(store);clearHandlers()}get id(){return this._settings.accessKey}get key(){return this._settings.secretKey}get bucket(){return this._settings.bucket}get endpoint(){return this._settings.endpoint}get prefix(){return this._settings.bucketPrefix}get region(){return this._settings.region}get forcePathStyle(){return this._settings.forcePathStyle}get db(){return this.env.services.database.localDatabase.localDatabase}get currentSettings(){return this.env.services.setting.currentSettings()}get useCustomRequestHandler(){return this._settings.useCustomRequestHandler}get customHeaders(){return 0==this._settings.bucketCustomHeaders.length?[]:Object.entries(parseHeaderValues(this._settings.bucketCustomHeaders))}getInitialSyncParameters(){return Promise.resolve({...DEFAULT_SYNC_PARAMETERS,protocolVersion:2,pbkdf2salt:""})}async getSyncParameters(){try{const downloadedSyncParams=await this.downloadJson("_obsidian_livesync_journal_sync_parameters.json");if(!downloadedSyncParams)throw new SyncParamsNotFoundError("Missing sync parameters");return downloadedSyncParams}catch(ex){Logger("Could not retrieve remote sync parameters",LOG_LEVEL_INFO);throw SyncParamsFetchError.fromError(ex)}}async putSyncParameters(params){try{if(await this.uploadJson("_obsidian_livesync_journal_sync_parameters.json",params))return!0;throw new SyncParamsUpdateError("Could not store remote sync parameters")}catch(ex){Logger("Could not upload sync parameters",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);throw SyncParamsUpdateError.fromError(ex)}}getHash(settings){return btoa(encodeURI([settings.endpoint,`${settings.bucket}${settings.bucketPrefix}`,settings.region].join()))}applyNewConfig(settings,store,env){this._settings=settings;this.env=env;this.processReplication=async docs=>await env.services.replication.parseSynchroniseResult(docs);this.store=store;this.hash=this.getHash(settings);clearHandlers()}updateInfo(info3){var _a8,_b5,_c3,_d2,_e2,_f,_g;const old=this.env.services.replicator.replicationStatics.value;this.env.services.replicator.replicationStatics.value={sent:null!=(_a8=info3.sent)?_a8:old.sent,arrived:null!=(_b5=info3.arrived)?_b5:old.arrived,maxPullSeq:null!=(_c3=info3.maxPullSeq)?_c3:old.maxPullSeq,maxPushSeq:null!=(_d2=info3.maxPushSeq)?_d2:old.maxPushSeq,lastSyncPullSeq:null!=(_e2=info3.lastSyncPullSeq)?_e2:old.lastSyncPullSeq,lastSyncPushSeq:null!=(_f=info3.lastSyncPushSeq)?_f:old.lastSyncPushSeq,syncStatus:null!=(_g=info3.syncStatus)?_g:old.syncStatus}}async updateCheckPointInfo(func){const checkPointKey=`bucketsync-checkpoint-${this.hash}`,newInfo=func(await this.getCheckpointInfo());this._currentCheckPointInfo=newInfo;await this.store.set(checkPointKey,newInfo);return newInfo}async getCheckpointInfo(){const checkPointKey=`bucketsync-checkpoint-${this.hash}`,old=await this.store.get(checkPointKey)||{},items=["knownIDs","sentIDs","receivedFiles","sentFiles"];for(const key3 of items){if(!(key3 in old))continue;const value=old[key3];value instanceof Set||(Array.isArray(value)?old[key3]=new Set(value):old[key3]=value&&"object"==typeof value?new Set(Object.keys(value)):new Set)}this._currentCheckPointInfo={...CheckPointInfoDefault,...old};return this._currentCheckPointInfo}async resetAllCaches(){await this.trench.eraseAllPermanences();clearHandlers()}async resetCheckpointInfo(){await this.updateCheckPointInfo(info3=>({...CheckPointInfoDefault}));clearHandlers()}getJournalEpochFromSyncParams(params){return`${params.protocolVersion}:${params.pbkdf2salt}`}async ensureCheckpointCachesAreFresh(){let journalEpoch="";try{const params=await this.getSyncParameters();journalEpoch=this.getJournalEpochFromSyncParams(params)}catch(e3){return}const current=await this.getCheckpointInfo();if(current.journalEpoch===journalEpoch)return;const lastSentFile=[...current.sentFiles].sort().pop();if(!lastSentFile){await this.updateCheckPointInfo(info3=>({...info3,journalEpoch}));return}let remoteWipeConfirmed;try{remoteWipeConfirmed=(await this.listFiles(lastSentFile.slice(0,-1),1))[0]!==lastSentFile}catch(e3){remoteWipeConfirmed=!0}if(remoteWipeConfirmed){Logger("Journal epoch changed and remote wipe confirmed. Clearing dedupe caches.",LOG_LEVEL_NOTICE);await this.updateCheckPointInfo(info3=>({...info3,journalEpoch,knownIDs:new Set,sentIDs:new Set,receivedFiles:new Set,sentFiles:new Set}));clearHandlers()}else{await this.updateCheckPointInfo(info3=>({...info3,journalEpoch}));Logger("Journal epoch changed (remote files still present). Epoch updated; caches kept.",LOG_LEVEL_NOTICE)}}getRemoteKey(){return this.getHash(this._settings)}async getReplicationPBKDF2Salt(refresh){const manager=createSyncParamsHanderForServer(this.getRemoteKey(),{put:params=>this.putSyncParameters(params),get:()=>this.getSyncParameters(),create:()=>this.getInitialSyncParameters()});return await manager.getPBKDF2Salt(refresh)}isEncryptionPrevented(fileName){return!!fileName.endsWith("_obsidian_livesync_journal_sync_parameters.json")}async decryptDataV2(encrypted,set2){const salt=await this.getReplicationPBKDF2Salt();return await decryptBinary(encrypted,set2.passphrase,salt)}async decryptDataV1(encrypted,set2){return await decryptBinary2(encrypted,set2.passphrase,set2.useDynamicIterationCount)}async decryptDownloaded(key3,encrypted,set2){const u2=new Uint8Array(encrypted);try{return!set2.encrypt||""==set2.passphrase||this.isEncryptionPrevented(key3)?u2:set2.E2EEAlgorithm===E2EEAlgorithms.ForceV1?await this.decryptDataV1(u2,set2):await this.decryptDataV2(u2,set2)}catch(ex){Logger(`Failed to decrypt in v2. Falling back to v1: ${key3}`,LOG_LEVEL_INFO);try{const r4=await this.decryptDataV1(u2,set2);Logger(`Decrypted in v1: ${key3}`,LOG_LEVEL_VERBOSE);return r4}catch(ex2){Logger(`Could not decrypt in v1: ${key3}`,LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(ex2,LOG_LEVEL_VERBOSE);throw ex2}}}async encryptForUpload(key3,data,set2){if(!set2.encrypt||""==set2.passphrase||this.isEncryptionPrevented(key3))return data;if(set2.E2EEAlgorithm===E2EEAlgorithms.V2){const salt=await this.getReplicationPBKDF2Salt();return await encryptBinary(data,set2.passphrase,salt)}return await encryptBinary2(data,set2.passphrase,set2.useDynamicIterationCount)}async _createJournalPack(override){const checkPointInfo=await this.getCheckpointInfo(),from=override||checkPointInfo.lastLocalSeq;Logger(`Journal reading from seq:${from}`,LOG_LEVEL_VERBOSE);let knownKeyCount=0;const allChangesTask=this.db.changes({live:!1,since:override||from,conflicts:!0,limit:this.batchSize,return_docs:!0,attachments:!1,style:"all_docs"}),allChanges=await allChangesTask;if(0==allChanges.results.length)return{changes:[],hasNext:!1,packLastSeq:allChanges.last_seq};const bd2=await this.db.bulkGet({docs:allChanges.results.map(e3=>e3.changes.map(change=>({id:e3.id,rev:change.rev}))).flat(),revs:!0}),packLastSeq=allChanges.last_seq,hasNext=packLastSeq<(await this.db.info()).update_seq,docChanges=bd2.results.map(e3=>e3.docs).flat().filter(e3=>"ok"in e3).map(e3=>e3.ok).filter(doc=>{const key3=this.getDocKey(doc);if(this._currentCheckPointInfo.knownIDs.has(key3)){knownKeyCount++;return!1}if(this._currentCheckPointInfo.sentIDs.has(key3)){knownKeyCount++;return!1}return!0});Logger(`Checked ${allChanges.results.length} changed entries, selected ${docChanges.length} docs (${knownKeyCount} keys already known)`,LOG_LEVEL_DEBUG);return{changes:docChanges,hasNext,packLastSeq}}getDocKey(doc){return doc&&doc._id.startsWith("h:")?doc._id:doc._id+"-"+doc._rev}async uploadQueued(showMessage=!1,wrapUp=!1){return await shareRunningResult("upload_queue",async()=>{const TASK_TITLE="Uploading journal:",logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;let uploaded=0;do{const queued=await this.trench.dequeuePermanentWithCommit("upload_queue");if(!queued){if(this.isPacking){Logger(`${TASK_TITLE} Queue run out, but process is running. wait for the next.`,LOG_LEVEL_VERBOSE);await Promise.race([this.notifier.nextNotify,delay(3e3)]);continue}uploaded?Logger(`${TASK_TITLE}: ${uploaded} files have been uploaded!`,logLevel,"send_journal"):wrapUp||Logger("No files needs to be uploaded!",logLevel,"send_journal");return!0}const{key:key3,value,commit,cancel:cancel2,cancelCount,pendingItems}=queued;this.updateInfo({sent:uploaded,maxPushSeq:pendingItems+uploaded,lastSyncPushSeq:1});Logger(`${TASK_TITLE} ${uploaded} / ${pendingItems+uploaded}${0!=cancelCount?`\nRETRY:${cancelCount}`:""}`,logLevel,"send_journal");Logger(`${TASK_TITLE} ${key3} ${0!=cancelCount?`TRY:${cancelCount}`:""} ${pendingItems} left`,LOG_LEVEL_VERBOSE);if(cancelCount>3){Logger(`${TASK_TITLE} Something went wrong on processing queue ${key3}.`,LOG_LEVEL_NOTICE);return!1}const filename=`${Date.now()}-docs.jsonl.gz`,mime="application/octet-stream",blob=new Blob([value],{type:mime});try{if(!await this.uploadFile(filename,blob,mime))throw new Error("Could not send journalPack to the bucket");await commit();uploaded++;await this.updateCheckPointInfo(info3=>({...info3,sentFiles:info3.sentFiles.add(filename)}));Logger(`${TASK_TITLE}: Uploaded ${key3} as ${filename}`,LOG_LEVEL_INFO)}catch(ex){Logger(`${TASK_TITLE} Could not send journalPack to the bucket (${key3} as ${filename})`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(`${TASK_TITLE} Uploading ${key3} cancelled for retry`,LOG_LEVEL_VERBOSE);cancel2();await delay(1e3);continue}}while(0==this.requestedStop)})}async packAndCompress(showMessage=!1){return await shareRunningResult("create_send_data",async()=>{try{this.isPacking=!0;const MSG_KEY="pack_journal",logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;this.requestedStop=!1;const checkPointInfo=await this.getCheckpointInfo(),max3=(await this.db.info()).update_seq,sentIDs=checkPointInfo.sentIDs,maxOutBufLength=250,maxBinarySize=10485760;let currentLastSeq=checkPointInfo.lastLocalSeq,binarySize=0;const outBuf=[];let isFinished=!1;const startSeq=checkPointInfo.lastLocalSeq,seqToProcess=max3-startSeq;Logger("Packing Journal: Start sending",logLevel,MSG_KEY);do{if(this.requestedStop){Logger("Packing Journal : Stop requested",logLevel,MSG_KEY);isFinished=!0;break}const{changes:changes3,hasNext,packLastSeq}=await this._createJournalPack(currentLastSeq),currentSeq=packLastSeq-startSeq;if(0==changes3.length)Logger(`Packing Journal: No sendable docs in this batch (${currentSeq} / ${seqToProcess}); continuing while there are newer changes.`,LOG_LEVEL_VERBOSE);else{Logger(`Packing Journal: ${currentSeq} / ${seqToProcess}`,logLevel,MSG_KEY);for(const row of changes3){const serialized2=serializeDoc(row);sentIDs.add(this.getDocKey(row));binarySize+=serialized2.length;outBuf.push(serialized2);if(outBuf.length>maxOutBufLength||binarySize>maxBinarySize){const sendBuf=concatUInt8Array2(outBuf),orgLen=sendBuf.byteLength,bin=await wrappedDeflate(sendBuf,{consume:!0,level:8});Logger(`Packing Journal: Compressed ${orgLen} bytes to ${bin.byteLength} bytes (${0!=orgLen?Math.ceil(bin.byteLength/orgLen*100):"--"}%)`,LOG_LEVEL_VERBOSE);await this.trench.queuePermanent("upload_queue",bin);this.notifier.notify();outBuf.length=0;binarySize=0}}}if(outBuf.length>0){const sendBuf=concatUInt8Array2(outBuf),orgLen=sendBuf.byteLength,bin=await wrappedDeflate(sendBuf,{consume:!0,level:8});Logger(`Packing Journal: Compressed ${orgLen} bytes to ${bin.byteLength} bytes (${0!=orgLen?Math.ceil(bin.byteLength/orgLen*100):"--"}%)`,LOG_LEVEL_VERBOSE);await this.trench.queuePermanent("upload_queue",bin);this.notifier.notify()}await this.updateCheckPointInfo(info3=>({...info3,lastLocalSeq:packLastSeq,sentIDs}));currentLastSeq=packLastSeq;if(!hasNext){isFinished=!0;break}}while(0==this.requestedStop&&!isFinished);Logger(0!=seqToProcess?`Packing Journal: Packaging ${seqToProcess}`:"Packing Journal: No journals to be packed!",logLevel,MSG_KEY);this.notifier.notify();return!0}finally{this.isPacking=!1;this.notifier.notify()}})}async sendLocalJournal(showMessage=!1){this.updateInfo({syncStatus:"JOURNAL_SEND"});if((await Promise.all([this.packAndCompress(showMessage),this.uploadQueued(showMessage)])).every(e3=>e3)&&await this.uploadQueued(showMessage,!0)){this.updateInfo({syncStatus:"COMPLETED"});return!0}this.updateInfo({syncStatus:"ERRORED"});return!1}async _getRemoteJournals(){const StartAfter=[...(await this.getCheckpointInfo()).receivedFiles.keys()].sort((a2,b3)=>b3.localeCompare(a2,void 0,{numeric:!0}))[0],files=(await this.listFiles(StartAfter)).filter(e3=>!e3.startsWith("_"));return files?files.sort((a2,b3)=>a2.localeCompare(b3,void 0,{numeric:!0})):[]}async processDocuments(allDocs2){let applyTotal=0,wholeItems=0;try{const chunks=[],docs=[];allDocs2.forEach(e3=>{e3._id.startsWith("h:")?chunks.push(e3):docs.push(e3)});try{const e22=(await this.db.allDocs({include_docs:!0,keys:[...chunks.map(e3=>e3._id)]})).rows.map(e3=>{var _a8;return null!=(_a8=e3.id)?_a8:void 0}),existChunks=new Set(e22.filter(e3=>void 0!==e3)),saveChunks=chunks.filter(e3=>!existChunks.has(e3._id)).map(e3=>({...e3,_rev:void 0})),ret=await this.db.bulkDocs(saveChunks,{new_edits:!0}),saveError=ret.filter(e3=>"error"in e3).map(e3=>e3.id);saveChunks.filter(e3=>-1===saveError.indexOf(e3._id)).forEach(doc=>eventHub.emitEvent("remote-chunk-fetched",doc));await this.updateCheckPointInfo(info3=>({...info3,knownIDs:setAllItems(info3.knownIDs,chunks.map(e3=>this.getDocKey(e3)))}));Logger(`Saved ${ret.length} chunks in transferred ${chunks.length} chunks (Error:${saveError.length})`,LOG_LEVEL_VERBOSE)}catch(ex){Logger("Applying chunks failed",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE)}const docsRevs=docs.map(e3=>[e3._id,[e3._rev]]).reduce((acc,[id,revs])=>{var _a8;return{...acc,[id]:[...null!=(_a8=acc[id])?_a8:[],...revs]}},{}),diffRevs=await this.db.revsDiff(docsRevs),saveDocs=docs.filter(e3=>{var _a8,_b5;return e3._id in diffRevs&&"missing"in diffRevs[e3._id]&&-1!==(null!=(_b5=null==(_a8=diffRevs[e3._id].missing)?void 0:_a8.indexOf(e3._rev))?_b5:0)});Logger(`Applying ${saveDocs.length} docs (Total transferred:${docs.length}, docs:${allDocs2.length})`,LOG_LEVEL_VERBOSE);await this.db.bulkDocs(saveDocs,{new_edits:!1});await this.processReplication(saveDocs);await this.updateCheckPointInfo(info3=>({...info3,knownIDs:setAllItems(info3.knownIDs,docs.map(e3=>this.getDocKey(e3)))}));applyTotal+=saveDocs.length;wholeItems+=docs.length;Logger(`Applied ${applyTotal} of ${wholeItems} docs (${wholeItems-applyTotal} skipped)`,LOG_LEVEL_VERBOSE);return!0}catch(ex){Logger("Applying journal failed",LOG_LEVEL_INFO);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async processDownloadedJournals(showMessage=!1,wrapUp=!1){return await shareRunningResult("process_downloaded_journals",async()=>{const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,TASK_TITLE="Processing journal:";let downloaded=0;do{const queued=await this.trench.dequeuePermanentWithCommit("parse_file");if(!queued){if(this.isDownloading){Logger(`${TASK_TITLE} Queue run out, but process is running. wait for the next.`,LOG_LEVEL_VERBOSE);await Promise.race([this.notifier.nextNotify,delay(3e3)]);continue}downloaded?Logger(`${TASK_TITLE} ${downloaded} files have been uploaded!`,logLevel,"send_journal"):wrapUp||Logger(`${TASK_TITLE} No files needs to be processed!`,logLevel,"send_journal");return!0}const{key:key3,value,commit,cancel:cancel2,cancelCount,pendingItems}=queued;this.updateInfo({arrived:downloaded,maxPullSeq:pendingItems+downloaded,lastSyncPullSeq:1});Logger(`${TASK_TITLE} ${downloaded} / ${pendingItems+downloaded}${0!=cancelCount?`\nRETRY:${cancelCount}`:""}`,logLevel,"processjournal");if(cancelCount>3){Logger(`${TASK_TITLE} Something went wrong on processing queue ${key3}.`,LOG_LEVEL_NOTICE);return!1}const compressed=new Uint8Array(value),decompressed=await wrappedInflate(compressed,{consume:!0});if(0==decompressed.length){await commit();downloaded++;Logger(`${TASK_TITLE}: ${key3} has been processed`,LOG_LEVEL_INFO);continue}let idxFrom=0,idxTo=0;const d4=new TextDecoder,result=[];do{idxTo=decompressed.indexOf(10,idxFrom);if(-1==idxTo)break;const piece=decompressed.slice(idxFrom,idxTo),strPiece=d4.decode(piece);if(strPiece.startsWith("~")){const[key4,data]=strPiece.substring(1).split(UNIT_SPLIT);result.push({_id:key4,data:unescapeNewLineFromString(data),type:"leaf",_rev:""})}else result.push(JSON.parse(strPiece));idxFrom=idxTo+1}while(idxTo>0);try{if(!await this.processDocuments(result))throw new Error("Could not process downloaded journals");await commit();downloaded++;Logger(`${TASK_TITLE}: ${key3} has been processed`,LOG_LEVEL_INFO)}catch(ex){Logger(`${TASK_TITLE}: Could not process downloaded journals`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);Logger(`${TASK_TITLE}: ${key3} cancelled for retry`,LOG_LEVEL_VERBOSE);cancel2();await delay(1e3);continue}}while(0==this.requestedStop);return!0})}async downloadRemoteJournals(showMessage=!1){return await shareRunningResult("downloadRemoteJournals",async()=>{try{this.isDownloading=!0;const logLevel=showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger("Receiving Journal: Getting list of remote journal",logLevel,"receivejournal");const files=await this._getRemoteJournals();if(0==files.length){Logger("Receiving Journal: No journals needs to be downloaded",logLevel,"receivejournal");return!0}let count=0;for(const key3 of files){count++;Logger(`Receiving Journal: ${count} / ${files.length}`,logLevel,"receivejournal");if(this.requestedStop){Logger(`Receiving canceled: ${key3}`,logLevel);return!1}if(this._currentCheckPointInfo.sentFiles.has(key3)){Logger(`Receiving Journal: ${key3} is own sent file`,LOG_LEVEL_VERBOSE);await this.updateCheckPointInfo(info3=>({...info3,receivedFiles:info3.receivedFiles.add(key3)}))}else try{const data=await this.downloadFile(key3);if(!1===data)throw new Error("Download Error");await this.trench.queuePermanent("parse_file",data);await this.updateCheckPointInfo(info3=>({...info3,receivedFiles:info3.receivedFiles.add(key3)}));this.notifier.notify()}catch(ex){Logger(`Could not download ${key3}`,logLevel);Logger(ex,LOG_LEVEL_DEBUG);return!1}}}finally{this.isDownloading=!1;this.notifier.notify()}this.notifier.notify();return!0})}async receiveRemoteJournal(showMessage=!1){this.updateInfo({syncStatus:"JOURNAL_RECEIVE"});this.requestedStop=!1;if((await Promise.all([this.downloadRemoteJournals(showMessage),this.processDownloadedJournals(showMessage)])).every(e3=>e3)&&await this.processDownloadedJournals(showMessage,!0)){this.updateInfo({syncStatus:"COMPLETED"});return!0}this.updateInfo({syncStatus:"ERRORED"});return!1}async sync(showResult=!1){var _a8;return null!=(_a8=await shareRunningResult("replicate",async()=>{this.requestedStop=!1;const receiveResult=await this.receiveRemoteJournal(showResult);if(!this.requestedStop){if(!receiveResult){Logger("Could not receive remote journal, so we prevent sending local journals to prevent unwanted mass transfers",showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return}return await this.sendLocalJournal(showResult)}}))&&_a8}requestStop(){this.requestedStop=!0}};JournalSyncMinio=class extends JournalSyncAbstract{_getClient(){if(this._instance)return this._instance;const ep=this.endpoint?{endpoint:this.endpoint,forcePathStyle:this.forcePathStyle}:{};this._instance=new S3({region:this.region,...ep,credentials:{accessKeyId:this.id,secretAccessKey:this.key},maxAttempts:4,retryStrategy:new ConfiguredRetryStrategy(4,attempt=>100+1e3*attempt),requestHandler:this.useCustomRequestHandler?this.env.services.API.getCustomFetchHandler():void 0,requestChecksumCalculation:"WHEN_REQUIRED",responseChecksumValidation:"WHEN_REQUIRED"});const bucketCustomHeaders=this.customHeaders;this._instance.middlewareStack.add((next2,context2)=>args=>{bucketCustomHeaders.forEach(([key3,value])=>{key3&&value&&(args.request.headers[key3]=value)});return next2(args)},{name:"addBucketCustomHeadersMiddleware",step:"build"});const arrayBufferToBase64Sync=buffer=>btoa(String.fromCharCode(...new Uint8Array(buffer)));this._instance.middlewareStack.add(applyMd5BodyChecksumMiddleware({md5:Md5,base64Encoder:data=>arrayBufferToBase64Sync(data.buffer),streamHasher:(hashConstructor,stream)=>{const result=promiseWithResolver(),hash3=new hashConstructor;stream.on("data",chunk=>{hash3.update(chunk)});stream.on("end",()=>{result.resolve(hash3.digest())});return result.promise}}),{step:"build",name:"applyMd5BodyChecksumMiddlewareForDeleteObjects"});clearHandlers();return this._instance}async resetBucket(){var _a8;const client=this._getClient();let files=[],deleteCount=0,errorCount=0;try{do{files=await this.listFiles("",100);if(0==files.length)break;const cmd2=new DeleteObjectsCommand({Bucket:this.bucket,Delete:{Objects:files.map(e3=>({Key:`${this.prefix}${e3}`}))}}),r5=await client.send(cmd2),{Deleted,Errors:Errors2}=r5;deleteCount+=(null==Deleted?void 0:Deleted.length)||0;errorCount+=(null==Errors2?void 0:Errors2.length)||0;Logger(`${deleteCount} items has been deleted!${0!=errorCount?` (${errorCount} items failed to delete)`:""}`,LOG_LEVEL_NOTICE,"reset-bucket")}while(0!=files.length);clearHandlers()}catch(ex){Logger("WARNING! Could not delete files. you should try it once or remake the bucket manually",LOG_LEVEL_NOTICE,"reset-bucket");Logger(ex,LOG_LEVEL_VERBOSE)}const journals=await this._getRemoteJournals();if(0==journals.length){Logger("Nothing to delete!",LOG_LEVEL_NOTICE);return!0}const cmd=new DeleteObjectsCommand({Bucket:this.bucket,Delete:{Objects:journals.map(e3=>({Key:e3}))}}),r4=await client.send(cmd);Logger(`${(null==(_a8=null==r4?void 0:r4.Deleted)?void 0:_a8.length)||0} items has been deleted!`,LOG_LEVEL_NOTICE);await this.resetCheckpointInfo();return!0}async uploadJson(key3,body){try{return await this.uploadFile(key3,new Blob([JSON.stringify(body)]),"application/json")}catch(ex){Logger(`Could not upload json ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async downloadJson(key3){try{const ret=await this.downloadFile(key3,!0);return!!ret&&JSON.parse((new TextDecoder).decode(ret))}catch(ex){Logger(`Could not download json ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async uploadFile(key3,blob,mime){try{const buf=new Uint8Array(await blob.arrayBuffer()),set2=this.currentSettings,u2=await this.encryptForUpload(key3,buf,set2),client=this._getClient(),cmd=new PutObjectCommand({Bucket:this.bucket,Key:`${this.prefix}${key3}`,Body:u2,ContentType:mime});if(await client.send(cmd))return!0}catch(ex){Logger(`Could not upload ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE)}return!1}async downloadFile(key3,ignoreCache=!1){const client=this._getClient(),cmd=new GetObjectCommand({Bucket:this.bucket,Key:`${this.prefix}${key3}`,...ignoreCache?{ResponseCacheControl:"no-cache"}:{}}),r4=await client.send(cmd),set2=this.currentSettings;try{if(r4.Body){const u2=new Uint8Array(await r4.Body.transformToByteArray());try{return await this.decryptDownloaded(key3,u2,set2)}catch(ex){Logger(`Could not decrypt downloaded file ${key3}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}}catch(ex){Logger(`Could not download ${key3}`);Logger(ex,LOG_LEVEL_VERBOSE)}return!1}async listFiles(from,limit){const client=this._getClient(),objects=await client.listObjectsV2({Bucket:this.bucket,Prefix:this.prefix,StartAfter:`${this.prefix||""}${from||""}`,...limit?{MaxKeys:limit}:{}});return objects.Contents?objects.Contents.filter(e3=>{var _a8;return null==(_a8=e3.Key)?void 0:_a8.startsWith(this.prefix)}).map(e3=>{var _a8;return null==(_a8=e3.Key)?void 0:_a8.substring(this.prefix.length)}):[]}async isAvailable(){const client=this._getClient(),cmd=new HeadBucketCommand({Bucket:this.bucket});try{await client.send(cmd);return!0}catch(ex){Logger("Could not connected to the remote bucket",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async getUsage(){const client=this._getClient();try{const objects=await client.listObjectsV2({Bucket:this.bucket});return objects.Contents?{estimatedSize:objects.Contents.reduce((acc,e3)=>acc+(e3.Size||0),0)}:{}}catch(ex){Logger("Could not get status of the remote bucket",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}};updateInformation="# 0.25\nSince 19th July, 2025 (beta1 in 0.25.0-beta1, 13th July, 2025)\n\nThe head note of 0.25 is now in [updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md). Because 0.25 got a lot of updates, thankfully, compatibility is kept and we do not need breaking changes! In other words, when get enough stabled. The next version will be v1.0.0. Even though it my hope.\n\n## 0.25.57\n\n9th April, 2026\n\n- Packing a batch during the journal sync now continues even if the batch contains no items to upload.\n- No unexpected error (about a replicator) during the early stage of initialisation.\n- Now error messages are kept hidden if the show status inside the editor is disabled (related: #829).\n- Fixed an issue where devices could no longer upload after another device performed 'Fresh Start Wipe' and 'Overwrite remote' in Object Storage mode (#848).\n - Each device's local deduplication caches (`knownIDs`, `sentIDs`, `receivedFiles`, `sentFiles`) now track the remote journal epoch (derived from the encryption parameters stored on the remote).\n - When the epoch changes, the plugin verifies whether the device's last uploaded file still exists on the remote. If the file is gone, it confirms a remote wipe and automatically clears the stale caches. If the file is still present (e.g. a protocol upgrade without a wipe), the caches are preserved, and only the epoch is updated. This means normal upgrades never cause unnecessary re-processing.\n\n### Translations\n\n- Russian translation has been added! Thank you so much for the contribution, @vipka1n! (#845)\n\n### New features\n\n- Now we can configure multiple Remote Databases of the same type, e.g, multiple CouchDBs or S3 remotes.\n - A user interface for managing multiple remote databases has been added to the settings dialogue. I think no explanation is needed for the UI, but please let me know if you have any questions.\n- We can switch between multiple Remote Databases in the settings dialogue.\n\n### CLI\n\n#### Fixed\n\n- Replication progress is now correctly saved and restored in the CLI (related: #846).\n\n## ~~0.25.55~~ 0.25.56\n\n30th March, 2026\n\n### Fixed\n\n- No longer `Peer-to-Peer Sync is not enabled. We cannot open a new connection.` error occurs when we have not enabled P2P sync and are not expected to use it (#830).\n\n### CLI\n\n- Fixed incomplete localStorage support in the CLI (#831). Thank you so much @rewse !\n- Fixed the issue where the CLI could not be connected to the remote which had been locked once (#833), also thanks to @rewse !\n\n## 0.25.54\n\n18th March, 2026\n\n### Fixed\n\n- Remote storage size check now works correctly again (#818).\n- Some buttons on the settings dialogue now respond correctly again (#827).\n\n### Refactored\n\n- P2P replicator has been refactored to be a little more robust and easier to understand.\n- Delete items which are no longer used that might cause potential problems\n\n### CLI\n\n- Fixed the corrupted display of the help message.\n- Remove some unnecessary code.\n\n### WebApp\n\n- Fixed the issue where the detail level was not being applied in the log pane.\n- Pop-ups are now shown.\n- Add coverage for the test.\n- Pop-ups are now shown in the web app as well.\n\n## 0.25.53\n\n17th March, 2026\n\nI did wonder whether I should have released a minor version update, but when I actually tested it, compatibility seemed to be intact, so I didnt. Hmm.\n\n### Fixed\n\n#### P2P Synchronisation\n\n- Fixed flaky timing issues in P2P synchronisation.\n- No longer unexpected `Unhandled Rejections` during P2P operations (waiting for acceptance).\n\n#### Journal Sync\n\n- Fixed an issue where some conflicts cannot be resolved in Journal Sync.\n- Many minor fixes have been made for better stability and reliability.\n\n### Tests\n\n- Rewrite P2P end-to-end tests to use the CLI as a host.\n\n### CLI\n\nWe have previously developed FileSystem LiveSync and various other components in a separate repository, but updates have been significantly delayed, and we have been plagued by compatibility issues. Now, a CLI tool using the same core logic is emerging. This does not directly manipulate the file system, but it offers a more convenient way of working and can also communicate with Object Storage. We can also resolve conflicts. Please refer to the code in `src/apps/cli` for the [self-hosted-livesync-cli](./src/apps/cli/README.md) for more details.\n- Add `self-hosted-livesync-cli` to `src/apps/cli` as a headless and dedicated version.\n- P2P sync and Object Storage are also supported in the CLI.\n - Yes, we have finally managed to 'get one file'.\n - Also, no more need for a [LiveSync PeerServer](https://github.com/vrtmrz/livesync-serverpeer) for virtual environments! The CLI can do it.\n\n- Now binary files are also supported in the CLI.\n\n### Refactored or internal changes\n\n- ServiceFileAccessBase now correctly handles the reading of binary files.\n- HeadlessAPIService now correctly provides the online status (always online) to the plug-in.\n- Non-worker version of bgWorker now correctly handles some functions.\n- Separated `ObsidianLiveSyncPlugin` into `ObsidianLiveSyncPlugin` and `LiveSyncBaseCore`.\n- Now `LiveSyncCore` indicates the type specified version of `LiveSyncBaseCore`.\n- Referencing `plugin.xxx` has been rewritten to referencing the corresponding service or `core.xxx`.\n- Offline change scanner and the local database preparation have been separated.\n- Set default priority for processFileEvent and processSynchroniseResult for the place to add hooks.\n- ControlService now provides the readiness for processing operations.\n- DatabaseService is now able to modify database opening options on derived classes.\n- Now `useOfflineScanner`, `useCheckRemoteSize`, and `useRedFlagFeatures` are set from `main.ts`, instead of `LiveSyncBaseCore`.\n- Storage Access APIs are now yielding Promises. This is to allow more limited storage platforms to be supported.\n- Journal Replicator now yields true after the replication is done.\n\n### R&D\n\n- Browser-version of Self-hosted LiveSync is now in development. This is not intended for public use now, but I will eventually make it available for testing.\n- We can see the code in `src/apps/webapp` for the browser version.\n\n## 0.25.52\n\n9th March, 2026\n\nExcuses: Too much `I`.\nWhilst I had a fever, I could not figure it out at all, but once I felt better, I spotted the problem in about thirty seconds. I apologise for causing you concern. I am grateful for your patience.\nI would like to devise a mechanism for running simple test scenarios. Now that we have got the Obsidian CLI up and running, it seems the perfect opportunity.\n\nTo improve the bus factor, we really need to organise the source code more thoroughly. Your cooperation and contributions would be greatly appreciated.\n\n### Fixed\n\n- No longer unexpected deletion-propagation occurs when the parent directory is not empty (#813).\n\n### Revert reversions\n\n- Reverted the reversion of ModuleCheckRemoteSize. Now it is back to the service feature.\n\n## 0.25.51\n\n7th March, 2026\n\n### Reverted\n\n- Reverted to ModuleRedFlag and ModuleInitializerFile to the previous version because of some unexpected issues. (#813)\n - I will re-implement them in the future with better design and tests.\n\n## 0.25.50\n\n3rd March, 2026\n\nNote: 0.25.49 has been skipped because of too verbose logging (credentials are logged in verbose level, but I realised that could lead to unexpected exposure on issue reporting). Please bump to 0.25.50 to get the fix if you are on 0.25.49. (No expected behaviour changes except the logging).\n\n### Fixed\n\n- No longer deleted files are not clickable in the Global History pane.\n- Diff view now uses more specific classes (#803).\n- A message of configuration mismatching slightly added for better understanding.\n - Now it says `When replication is initiated manually via the command palette or ribbon, a dialogue box will open to address this.` to make it clear that the user can fix the issue by themselves.\n\n### Refactored\n\n- `ModuleRedFlag` has been refactored to `serviceFeatures/redFlag` and also tested.\n- `ModuleInitializerFile` has been refactored to `lib/serviceFeatures/offlineScanner` and also tested.\n\n## 0.25.48\n\n2nd March, 2026\n\nNo behavioural changes except unidentified faults. Please report if you find any unexpected behaviour after this update.\n\n### Refactored\n\n- Many storage-related functions have been refactored for better maintainability and testability.\n - Now all platform-specific logics are supplied as adapters, and the core logic has become platform-agnostic.\n - Quite a number of tests have been added for the core logic, and the platform-specific logics are also tested with mocked adapters.\n\n## 0.25.47\n\n27th February, 2026\n\nPhew, the financial year is still not over yet, but I have got some time to work on the plug-in again!\n\n### Fixed and refactored\n\n- Fixed the inexplicable behaviour when retrieving chunks from the network.\n - The chunk manager has been layered to be responsible for its own areas and duties. e.g., `DatabaseWriteLayer`, `DatabaseReadLayer`, `NetworkLayer`, `CacheLayer`, and `ArrivalWaitLayer`.\n - All layers have been tested now!\n - `LayeredChunkManager` has been implemented to manage these layers. Also tested.\n - `EntryManager` has been mostly rewritten and also tested.\n\n- Now we can configure `Never warn` for remote storage size notification again.\n\n### Tests\n\n- The following test has been added:\n - `ConflictManager`.\n\n## 0.25.46\n\n26th February, 2026\n\n### Fixed\n\n- Unexpected errors no longer occurred when the plug-in was unloaded.\n- Hidden File Sync now respects selectors.\n- Registering protocol-handlers now works safely without causing unexpected errors.\n\n### Refactored\n\n- `ModuleCheckRemoteSize` has been ported to a serviceFeature, and tests have also been added.\n- Some unnecessary things have been removed.\n- LiveSyncManagers has now explicit dependencies.\n- LiveSyncLocalDB is now responsible for LiveSyncManagers, not accepting the managers as dependencies.\n - This is to avoid circular dependencies and clarify the ownership of the managers.\n- ChangeManager has been refactored. This had a potential issue, so something had been fixed, possibly.\n- Some tests have been ported from Deno's test runner to Vitest to accumulate coverage.\n\n## 0.25.45\n\n25th February, 2026\n\nAs a result of recent refactoring, we are able to write tests more easily now!\n\n### Refactored\n\n- `ModuleTargetFilter`, which was responsible for checking if a file is a target file, has been ported to a serviceFeature.\n - And also tests have been added. The middleware-style-power.\n- `ModuleObsidianAPI` has been removed and implemented in `APIService` and `RemoteService`.\n- Now `APIService` is responsible for the network-online-status, not `databaseService.managers.networkManager`.\n\n\nFull notes are in\n[updates_old.md](https://github.com/vrtmrz/obsidian-livesync/blob/main/updates_old.md).\n";lastVersion=~~(versionNumberString2Number("0.25.57")/1e3);CONTEXT_DIALOG_CONTROLS="svelte-dialog-controls";SvelteDialogManagerBase=class{get context(){return this._context}get dependents(){return this._dependents}constructor(c3,dependents){this._context=c3;this._dependents=dependents}async open(component2,initialData){return await this.openSvelteDialog(component2,initialData)}async openWithExplicitCancel(component2,initialData){for(let i2=0;i2<10;i2++){const ret=await this.openSvelteDialog(component2,initialData);if(void 0!==ret)return ret;if(this.dependents.control.hasUnloaded())throw new Error("Operation cancelled due to app shutdown.");Logger("Please select 'Cancel' explicitly to cancel this operation.",LOG_LEVEL_NOTICE)}throw new Error("Operation Forcibly cancelled by user.")}};root_110=from_html("<h4> </h4>");root5=from_html('<div class="dialog-header svelte-1gf4irx"><h2> </h2> <!></div>');$$css6={hash:"svelte-1gf4irx",code:".dialog-header.svelte-1gf4irx {display:none;}"};root_111=from_html("<h3> </h3>");root6=from_html("<div><!> <!></div>");root7=from_html("<button> </button>");delegate(["click"]);root_113=from_html("<h3><!></h3>");root8=from_html('<div class="question-container svelte-o7k4lc"><!> <div class="question-content"><!></div></div>');$$css7={hash:"svelte-o7k4lc",code:".question-container.svelte-o7k4lc {border-bottom:2px solid var(--interactive-accent);margin-bottom:0.5lh;padding-bottom:0.5lh;}"};root9=from_html('<div><label><div class="choice-row svelte-1h8m5at"><input type="radio" class="svelte-1h8m5at"/> <span class="choice-title svelte-1h8m5at"> </span></div> <div class="choice-notes svelte-1h8m5at"><!> <!></div></label></div>');$$css8={hash:"svelte-1h8m5at",code:'.option-container.svelte-1h8m5at {border:1px solid transparent;border-radius:0.25lh;padding:0.5rem;}.option-container.selected.svelte-1h8m5at {border-color:var(--interactive-accent);}.choice-row.svelte-1h8m5at {display:flex;align-items:center;gap:0.5rem;\n /* margin-top: 1rem; */cursor:pointer;}.choice-row.svelte-1h8m5at span.choice-title:where(.svelte-1h8m5at) {width:auto;}.choice-row.svelte-1h8m5at input[type="radio"]:where(.svelte-1h8m5at) {\n /* width: 1.2rem;\n height: 1.2rem; */cursor:pointer;}.choice-notes.svelte-1h8m5at {margin-left:2rem;margin-top:0.25rem;color:var(--text-muted);font-size:0.9rem;}.option-container.selected.svelte-1h8m5at .choice-notes:where(.svelte-1h8m5at) {color:var(--text-normal);}'};root10=from_html('<div class="options-container"><!></div>');root11=from_html('<div class="question-container"><!></div>');root12=from_html('<div class="button-group"><!></div>');root_44=from_html("<!> <!>",1);root_24=from_html("<!> <!>",1);root_72=from_html("<!> <!>",1);root13=from_html("<!> <!> <!> <!>",1);root_25=from_html("<h3> </h3>");root_114=from_html("<div><!> <!></div>");root14=from_html('<details><summary> </summary> <div class="sub-section"><!></div></details>');root15=from_html('<label class="choice-row svelte-2n6uv8"><input type="checkbox" class="svelte-2n6uv8"/> <span class="choice-title svelte-2n6uv8"> </span></label> <div class="choice-notes svelte-2n6uv8"><!> <!></div>',1);$$css9={hash:"svelte-2n6uv8",code:'.choice-row.svelte-2n6uv8 {display:flex;align-items:center;gap:0.5rem;margin-top:1rem;cursor:pointer;}.choice-row.svelte-2n6uv8 span.choice-title:where(.svelte-2n6uv8) {width:auto;}.choice-row.svelte-2n6uv8 input[type="checkbox"]:where(.svelte-2n6uv8) {\n /* width: 1.2rem;\n height: 1.2rem; */cursor:pointer;}.choice-notes.svelte-2n6uv8 {margin-left:2rem;margin-top:0.25rem;color:var(--text-muted);font-size:0.9rem;}'};root_45=from_html("<!> <!>",1);root_26=from_html("<!> <!>",1);root_73=from_html("<!> <!>",1);root16=from_html("<!> <!> <!> <!>",1);root_46=from_html("<!> <!> <!>",1);root_27=from_html("<!> <!>",1);root_83=from_html("<!> <!>",1);root17=from_html("<!> <!> <!> <!>",1);root_28=from_html("<ol><li>On this device, please keep this Vault open.</li> <li>On the source device, open Obsidian.</li> <li>On the source device, from the command palette, run the 'Show settings as a QR code' command.</li> <li>On this device, switch to the camera app or use a QR code scanner to scan the displayed QR code.</li></ol>");root18=from_html("<!> <!> <!> <!>",1);root19=from_html('<label class="row"><span> </span> <!></label>');root20=from_html('<input spellcheck="false" autocorrect="off" autocapitalize="off"/> <input type="checkbox"/>',1);root_115=from_html('Please enter the Setup URI that was generated during server installation or on another device, along with the vault\n passphrase.<br/> Note that you can generate a new Setup URI by running the "Copy settings as a new Setup URI" command in the command palette.',1);root_29=from_html('<input type="text" placeholder="obsidian://setuplivesync?settings=...." autocorrect="off" autocapitalize="off" spellcheck="false" required/>');root_74=from_html("<!> <!>",1);root21=from_html("<!> <!> <!> <!> <!> <!> <!> <!>",1);root_116=from_html("<p>The connection to the server has been configured successfully. As the next step, <strong>the synchronisation data on the server will be built based on the current data on this device.</strong></p> <p><strong>IMPORTANT</strong> <br/> After restarting, the data on this device will be uploaded to the server as the 'master copy'. Please be aware that\n any unintended data currently on the server will be completely overwritten.</p>",1);root_47=from_html("<!> <!>",1);root22=from_html("<!> <!> <!> <!>",1);root_117=from_html("<p>The connection to the server has been configured successfully. As the next step, <strong>the latest synchronisation data will be downloaded from the server to this device.</strong></p> <p><strong>PLEASE NOTE</strong> <br/> After restarting, the database on this device will be rebuilt using data from the server. If there are any unsynchronised\n files in this vault, conflicts may occur with the server data.</p>",1);root_48=from_html("<!> <!>",1);root23=from_html("<!> <!> <!> <!>",1);root_118=from_html("The connection to the server has been configured successfully. As the next step, <strong>the local database, that is to say the synchronisation information, must be reconstituted.</strong>",1);root_210=from_html("<!> <!> <!> <!>",1);root_102=from_html("<!> <!>",1);root24=from_html("<!> <!> <!> <!>",1);root_33=from_html("<!> <!> <!>",1);root_119=from_html("<!> <!>",1);root_75=from_html("<!> <!>",1);root25=from_html("<!> <!> <!>",1);checkConfig=async editingSettings=>{var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2,_i2,_j,_k,_l,_m2,_n;const result=[],addMessage=(msg,classes=[])=>{result.push({message:msg,classes})},addSuccess=(msg,value)=>{result.push({message:msg,result:"ok",value})},_addError=(message,fixMessage,fix,value)=>{result.push({message,result:"error",fixMessage,fix,value})},addErrorMessage=(msg,classes=[])=>{result.push({message:msg,result:"error",classes})},addError=(message,fixMessage,key3,expected)=>{_addError(message,fixMessage,async()=>{await updateRemoteSetting(editingSettings,key3,expected)})};addMessage($msg("obsidianLiveSyncSettingTab.logCheckingDbConfig"));try{if(isCloudantURI(editingSettings.couchDB_URI)){addMessage($msg("obsidianLiveSyncSettingTab.logCannotUseCloudant"));return result}const customHeaders=parseHeaderValues(editingSettings.couchDB_CustomHeaders),credential=generateCredentialObject(editingSettings),r4=await requestToCouchDBWithCredentials(editingSettings.couchDB_URI,credential,window.origin,void 0,void 0,void 0,customHeaders),responseConfig=r4.json;addMessage($msg("obsidianLiveSyncSettingTab.msgNotice"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgIfConfigNotPersistent"),["ob-btn-config-info"]);addMessage($msg("obsidianLiveSyncSettingTab.msgConfigCheck"),["ob-btn-config-head"]);const serverBanner=null!=(_b5=null!=(_a8=r4.headers.server)?_a8:r4.headers.Server)?_b5:"unknown";addMessage($msg("obsidianLiveSyncSettingTab.serverVersion",{info:serverBanner}));const versionMatch=serverBanner.match(/CouchDB(\/([0-9.]+))?/),versionStr=versionMatch?versionMatch[2]:"0.0.0";editingSettings.couchDB_USER in responseConfig.admins?addSuccess($msg("obsidianLiveSyncSettingTab.okAdminPrivileges")):addSuccess($msg("obsidianLiveSyncSettingTab.warnNoAdmin"));isGreaterThanOrEqual(versionStr,"3.2.0")?"true"!=(null==(_c3=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_c3.require_valid_user)?addError($msg("obsidianLiveSyncSettingTab.errRequireValidUser"),$msg("obsidianLiveSyncSettingTab.msgSetRequireValidUser"),"chttpd/require_valid_user","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUser")):"true"!=(null==(_d2=null==responseConfig?void 0:responseConfig.chttpd_auth)?void 0:_d2.require_valid_user)?addError($msg("obsidianLiveSyncSettingTab.errRequireValidUserAuth"),$msg("obsidianLiveSyncSettingTab.msgSetRequireValidUserAuth"),"chttpd_auth/require_valid_user","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okRequireValidUserAuth"));(null==responseConfig?void 0:responseConfig.httpd["WWW-Authenticate"])?addSuccess($msg("obsidianLiveSyncSettingTab.okWwwAuth")):addError($msg("obsidianLiveSyncSettingTab.errMissingWwwAuth"),$msg("obsidianLiveSyncSettingTab.msgSetWwwAuth"),"httpd/WWW-Authenticate",'Basic realm="couchdb"');isGreaterThanOrEqual(versionStr,"3.2.0")?"true"!=(null==(_e2=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_e2.enable_cors)?addError($msg("obsidianLiveSyncSettingTab.errEnableCorsChttpd"),$msg("obsidianLiveSyncSettingTab.msgEnableCorsChttpd"),"chttpd/enable_cors","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCorsChttpd")):"true"!=(null==(_f=null==responseConfig?void 0:responseConfig.httpd)?void 0:_f.enable_cors)?addError($msg("obsidianLiveSyncSettingTab.errEnableCors"),$msg("obsidianLiveSyncSettingTab.msgEnableCors"),"httpd/enable_cors","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okEnableCors"));if(!isCloudantURI(editingSettings.couchDB_URI)){Number(null!=(_h2=null==(_g=null==responseConfig?void 0:responseConfig.chttpd)?void 0:_g.max_http_request_size)?_h2:0)<4294967296?addError($msg("obsidianLiveSyncSettingTab.errMaxRequestSize"),$msg("obsidianLiveSyncSettingTab.msgSetMaxRequestSize"),"chttpd/max_http_request_size","4294967296"):addSuccess($msg("obsidianLiveSyncSettingTab.okMaxRequestSize"));Number(null!=(_j=null==(_i2=null==responseConfig?void 0:responseConfig.couchdb)?void 0:_i2.max_document_size)?_j:0)<5e7?addError($msg("obsidianLiveSyncSettingTab.errMaxDocumentSize"),$msg("obsidianLiveSyncSettingTab.msgSetMaxDocSize"),"couchdb/max_document_size","50000000"):addSuccess($msg("obsidianLiveSyncSettingTab.okMaxDocumentSize"))}"true"!=(null==(_k=null==responseConfig?void 0:responseConfig.cors)?void 0:_k.credentials)?addError($msg("obsidianLiveSyncSettingTab.errCorsCredentials"),$msg("obsidianLiveSyncSettingTab.msgSetCorsCredentials"),"cors/credentials","true"):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentials"));const ConfiguredOrigins=((null!=(_m2=null==(_l=null==responseConfig?void 0:responseConfig.cors)?void 0:_l.origins)?_m2:"")+"").split(",");if("*"==(null==(_n=null==responseConfig?void 0:responseConfig.cors)?void 0:_n.origins)||-1!==ConfiguredOrigins.indexOf("app://obsidian.md")&&-1!==ConfiguredOrigins.indexOf("capacitor://localhost")&&-1!==ConfiguredOrigins.indexOf("http://localhost"))addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOrigins"));else{const fixedValue=[...new Set([...ConfiguredOrigins.map(e3=>e3.trim()),"app://obsidian.md","capacitor://localhost","http://localhost"])].join(",");addError($msg("obsidianLiveSyncSettingTab.errCorsOrigins"),$msg("obsidianLiveSyncSettingTab.msgSetCorsOrigins"),"cors/origins",fixedValue)}addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionCheck"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgCurrentOrigin",{origin:window.location.origin}));const origins=["app://obsidian.md","capacitor://localhost","http://localhost"];for(const org of origins){const rr=await requestToCouchDBWithCredentials(editingSettings.couchDB_URI,credential,org,void 0,void 0,void 0,customHeaders),responseHeaders=Object.fromEntries(Object.entries(rr.headers).map(e3=>{e3[0]=`${e3[0]}`.toLowerCase();return e3}));addMessage($msg("obsidianLiveSyncSettingTab.msgOriginCheck",{org}));"true"!=responseHeaders["access-control-allow-credentials"]?addErrorMessage($msg("obsidianLiveSyncSettingTab.errCorsNotAllowingCredentials")):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsCredentialsForOrigin"));responseHeaders["access-control-allow-origin"]!=org?addErrorMessage($msg("obsidianLiveSyncSettingTab.warnCorsOriginUnmatched",{from:origin,to:responseHeaders["access-control-allow-origin"]})):addSuccess($msg("obsidianLiveSyncSettingTab.okCorsOriginMatched"))}addMessage($msg("obsidianLiveSyncSettingTab.msgDone"),["ob-btn-config-head"]);addMessage($msg("obsidianLiveSyncSettingTab.msgConnectionProxyNote"),["ob-btn-config-info"]);addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"))}catch(ex){if(401==(null==ex?void 0:ex.status)){addErrorMessage($msg("obsidianLiveSyncSettingTab.errAccessForbidden"));addErrorMessage($msg("obsidianLiveSyncSettingTab.errCannotContinueTest"));addMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigDone"))}else{addErrorMessage($msg("obsidianLiveSyncSettingTab.logCheckingConfigFailed"));Logger(ex)}}return result};on_click2=(_,fixIssue,issue)=>fixIssue(issue());root_211=from_html('<div class="operations svelte-a38xug"><button class="mod-cta">Fix</button></div>');root_120=from_html('<div><div class="message svelte-a38xug"> </div> <!></div>');root_84=from_html("<h3>Issue detection log:</h3> <!>",1);root26=from_html('<!> <div class="check-results svelte-a38xug"><details><summary><!></summary> <!></details></div>',1);$$css10={hash:"svelte-a38xug",code:"\n /* Make .check-result a CSS Grid: let .message expand and keep .operations at minimum width, aligned to the right */.check-results.svelte-a38xug {\n /* Adjust spacing as required */margin-top:0.75rem;}.check-result.svelte-a38xug {display:grid;grid-template-columns:1fr auto; /* message takes remaining space, operations use minimum width */align-items:center; /* vertically centre align */gap:0.5rem 1rem;padding:0rem 0.5rem;border-radius:0;box-shadow:none;border-left:0.5em solid var(--interactive-accent);margin-bottom:0.25lh;}.check-result.error.svelte-a38xug {border-left:0.5em solid var(--text-error);}.check-result.success.svelte-a38xug {border-left:0.5em solid var(--text-success);}.check-result.svelte-a38xug .message:where(.svelte-a38xug) {\n /* Wrap long messages */white-space:normal;word-break:break-word;font-size:0.95rem;color:var(--text-normal);}.check-result.svelte-a38xug .operations:where(.svelte-a38xug) {\n /* Centre the button(s) vertically and align to the right */display:flex;align-items:center;justify-content:flex-end;gap:0.5rem;}\n\n /* For small screens: move .operations below and stack vertically */\n @media (max-width: 520px) {.check-result.svelte-a38xug {grid-template-columns:1fr;grid-auto-rows:auto;}.check-result.svelte-a38xug .operations:where(.svelte-a38xug) {justify-content:flex-start;margin-top:0.5rem;}\n }"};delegate(["click"]);root_212=from_html('<input type="text" name="couchdb-url" placeholder="https://example.com" autocorrect="off" autocapitalize="off" spellcheck="false" required pattern="^https?://.+"/>');root_49=from_html('<input type="text" name="couchdb-username" placeholder="Enter your username" autocorrect="off" autocapitalize="off" spellcheck="false" required/>');root_64=from_html('<input type="text" name="couchdb-database" placeholder="Enter your database name" autocorrect="off" autocapitalize="off" spellcheck="false" required pattern="^[a-z0-9][a-z0-9_]*$"/>');root_85=from_html('<input type="checkbox" name="couchdb-use-internal-api"/>');root_1110=from_html('<textarea name="couchdb-custom-headers" placeholder="e.g., x-example-header: value\\n another-header: value2" autocapitalize="off" spellcheck="false" rows="4"></textarea>');root_134=from_html('<input type="checkbox" name="couchdb-use-jwt"/>');root_142=from_html("<select><option>HS256</option><option>HS512</option><option>ES256</option><option>ES512</option></select>");root_152=from_html('<input type="text" name="couchdb-jwt-exp-duration" placeholder="0"/>');root_162=from_html('<textarea name="couchdb-jwt-key" rows="5" autocapitalize="off" spellcheck="false" placeholder="Enter your JWT secret or private key"></textarea>');root_182=from_html('<input type="text" name="couchdb-jwt-kid" placeholder="Enter your JWT Key ID"/>');root_192=from_html('<input type="text" name="couchdb-jwt-sub" placeholder="Enter your JWT Subject (CouchDB Username)"/>');root_123=from_html("<!> <!> <!> <!> <!> <!> <!> <!>",1);root_242=from_html("<!> <!> <!>",1);root27=from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <hr/> <!> <!>",1);root_213=from_html('<input type="text" name="s3-endpoint" placeholder="https://s3.amazonaws.com" autocorrect="off" autocapitalize="off" spellcheck="false" required pattern="^https?://.+"/>');root_410=from_html('<input type="text" name="s3-access-key-id" placeholder="Enter your Access Key ID" autocorrect="off" autocapitalize="off" spellcheck="false" required/>');root_65=from_html('<input type="text" name="s3-bucket-name" placeholder="Enter your Bucket Name" autocorrect="off" autocapitalize="off" spellcheck="false" required/>');root_76=from_html('<input type="text" name="s3-region" placeholder="Enter your Region (e.g., us-east-1, auto for R2)" autocorrect="off" autocapitalize="off" spellcheck="false"/>');root_86=from_html('<input type="checkbox" name="s3-use-path-style"/>');root_93=from_html('<input type="text" name="s3-folder-prefix" placeholder="Enter a folder prefix (optional)" autocorrect="off" autocapitalize="off" spellcheck="false"/>');root_1111=from_html('<input type="checkbox" name="s3-use-internal-api"/>');root_143=from_html('<textarea name="bucket-custom-headers" placeholder="e.g., x-example-header: value\\n another-header: value2" autocapitalize="off" spellcheck="false" rows="4"></textarea>');root_183=from_html("<!> <!> <!>",1);root28=from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1);new(PouchError=class extends Error{constructor(status,error,reason){super();this.status=status;this.name=error;this.message=reason;this.error=!0}toString(){return JSON.stringify({status:this.status,name:this.name,message:this.message,reason:this.reason})}})(401,"unauthorized","Name or password is incorrect.");MISSING_BULK_DOCS=new PouchError(400,"bad_request","Missing JSON list of 'docs'");MISSING_DOC=new PouchError(404,"not_found","missing");REV_CONFLICT=new PouchError(409,"conflict","Document update conflict");INVALID_ID=new PouchError(400,"bad_request","_id field must contain a string");MISSING_ID=new PouchError(412,"missing_id","_id is required for puts");RESERVED_ID=new PouchError(400,"bad_request","Only reserved document ids may start with underscore.");new PouchError(412,"precondition_failed","Database not open");UNKNOWN_ERROR=new PouchError(500,"unknown_error","Database encountered an unknown error");BAD_ARG=new PouchError(500,"badarg","Some query argument is invalid");new PouchError(400,"invalid_request","Request was invalid");QUERY_PARSE_ERROR=new PouchError(400,"query_parse_error","Some query parameter is invalid");DOC_VALIDATION=new PouchError(500,"doc_validation","Bad special document member");BAD_REQUEST=new PouchError(400,"bad_request","Something wrong with the request");NOT_AN_OBJECT=new PouchError(400,"bad_request","Document must be a JSON object");new PouchError(404,"not_found","Database not found");IDB_ERROR=new PouchError(500,"indexed_db_went_bad","unknown");new PouchError(500,"web_sql_went_bad","unknown");new PouchError(500,"levelDB_went_went_bad","unknown");new PouchError(403,"forbidden","Forbidden by design doc validate_doc_update function");INVALID_REV=new PouchError(400,"bad_request","Invalid rev format");new PouchError(412,"file_exists","The database could not be created, the file already exists.");MISSING_STUB=new PouchError(412,"missing_stub","A pre-existing attachment stub wasn't found");new PouchError(413,"invalid_url","Provided URL is invalid");rnds8=new Uint8Array(16);regex_default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;validate_default=function validate2(uuid2){return"string"==typeof uuid2&&regex_default.test(uuid2)};byteToHex=[];for(i2=0;i2<256;++i2)byteToHex.push((i2+256).toString(16).substr(1));stringify_default=function stringify(arr){var offset=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,uuid2=(byteToHex[arr[offset+0]]+byteToHex[arr[offset+1]]+byteToHex[arr[offset+2]]+byteToHex[arr[offset+3]]+"-"+byteToHex[arr[offset+4]]+byteToHex[arr[offset+5]]+"-"+byteToHex[arr[offset+6]]+byteToHex[arr[offset+7]]+"-"+byteToHex[arr[offset+8]]+byteToHex[arr[offset+9]]+"-"+byteToHex[arr[offset+10]]+byteToHex[arr[offset+11]]+byteToHex[arr[offset+12]]+byteToHex[arr[offset+13]]+byteToHex[arr[offset+14]]+byteToHex[arr[offset+15]]).toLowerCase();if(!validate_default(uuid2))throw TypeError("Stringified UUID is invalid");return uuid2};v4_default=function v42(options,buf,offset){var rnds,i2;(rnds=(options=options||{}).random||(options.rng||rng)())[6]=15&rnds[6]|64;rnds[8]=63&rnds[8]|128;if(buf){offset=offset||0;for(i2=0;i2<16;++i2)buf[offset+i2]=rnds[i2];return buf}return stringify_default(rnds)};thisAtob=function(str){return atob(str)};thisBtoa=function(str){return btoa(str)};import_spark_md5=__toESM(require_spark_md5());setImmediateShim=self.setImmediate||self.setTimeout;MD5_CHUNK_SIZE=32768;import_events16=__toESM(require_events());funcToString=Function.prototype.toString;objectCtorString=funcToString.call(Object);MAX_NUM_CONCURRENT_REQUESTS=6;try{localStorage.setItem("_pouch_check_localstorage",1);hasLocal=!!localStorage.getItem("_pouch_check_localstorage")}catch(e3){hasLocal=!1}nextTick="function"==typeof queueMicrotask?queueMicrotask:function nextTick2(fn){Promise.resolve().then(fn)};Changes=class extends import_events16.default{constructor(){super();this._listeners={};hasLocalStorage()&&addEventListener("storage",e3=>{this.emit(e3.key)})}addListener(dbName,id,db,opts){function eventFunction(){if(self3._listeners[id])if(inprogress)inprogress="waiting";else{inprogress=!0;var changesOpts=pick(opts,["style","include_docs","attachments","conflicts","filter","doc_ids","view","since","query_params","binary","return_docs"]);db.changes(changesOpts).on("change",function(c3){if(c3.seq>opts.since&&!opts.cancelled){opts.since=c3.seq;opts.onChange(c3)}}).on("complete",function(){"waiting"===inprogress&&nextTick(eventFunction);inprogress=!1}).on("error",function onError(){inprogress=!1})}}var inprogress,self3;if(!this._listeners[id]){inprogress=!1;self3=this;this._listeners[id]=eventFunction;this.on(dbName,eventFunction)}}removeListener(dbName,id){if(id in this._listeners){super.removeListener(dbName,this._listeners[id]);delete this._listeners[id]}}notifyLocalWindows(dbName){hasLocalStorage()&&(localStorage[dbName]="a"===localStorage[dbName]?"b":"a")}notify(dbName){this.emit(dbName);this.notifyLocalWindows(dbName)}};(function f2(){}).name;keys2=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];qName="queryKey";qParser=/(?:^|&)([^&=]*)=?([^&]*)/g;parser2=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;uuid=v4_default;f3=fetch;h2=Headers;MIN_MAGNITUDE=-324;MAGNITUDE_DIGITS=3;SEP="";combinationFields=["$or","$nor","$not"];matchers={$elemMatch:function(doc,userValue,parsedField,docFieldValue){return!!Array.isArray(docFieldValue)&&0!==docFieldValue.length&&("object"==typeof docFieldValue[0]&&null!==docFieldValue[0]?docFieldValue.some(function(val){return rowFilter(val,userValue,Object.keys(userValue))}):docFieldValue.some(function(val){return matchSelector(userValue,doc,parsedField,val)}))},$allMatch:function(doc,userValue,parsedField,docFieldValue){return!!Array.isArray(docFieldValue)&&0!==docFieldValue.length&&("object"==typeof docFieldValue[0]&&null!==docFieldValue[0]?docFieldValue.every(function(val){return rowFilter(val,userValue,Object.keys(userValue))}):docFieldValue.every(function(val){return matchSelector(userValue,doc,parsedField,val)}))},$eq:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&0===collate(docFieldValue,userValue)},$gte:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)>=0},$gt:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)>0},$lte:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)<=0},$lt:function(doc,userValue,parsedField,docFieldValue){return fieldIsNotUndefined(docFieldValue)&&collate(docFieldValue,userValue)<0},$exists:function(doc,userValue,parsedField,docFieldValue){return userValue?fieldIsNotUndefined(docFieldValue):!fieldIsNotUndefined(docFieldValue)},$mod:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&modField(docFieldValue,userValue)},$ne:function(doc,userValue,parsedField,docFieldValue){return userValue.every(function(neValue){return 0!==collate(docFieldValue,neValue)})},$in:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&arrayContainsValue(docFieldValue,userValue)},$nin:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&!arrayContainsValue(docFieldValue,userValue)},$size:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&Array.isArray(docFieldValue)&&arraySize(docFieldValue,userValue)},$all:function(doc,userValue,parsedField,docFieldValue){return Array.isArray(docFieldValue)&&arrayContainsAllValues(docFieldValue,userValue)},$regex:function(doc,userValue,parsedField,docFieldValue){return fieldExists(docFieldValue)&&"string"==typeof docFieldValue&&userValue.every(function(regexValue){return regexMatch(docFieldValue,regexValue)})},$type:function(doc,userValue,parsedField,docFieldValue){return typeMatch(docFieldValue,userValue)}};index_browser_es_default=function applyChangesFilterPlugin(PouchDB2){PouchDB2._changesFilterPlugin={validate:validate3,normalize,shouldFilter,filter:filter2}};import_events17=__toESM(require_events());Changes2=class extends import_events17.default{constructor(db,opts,callback){var complete,promise;super();this.db=db;opts=opts?clone2(opts):{};complete=opts.complete=once2((err3,resp)=>{err3?listenerCount(this,"error")>0&&this.emit("error",err3):this.emit("complete",resp);this.removeAllListeners();db.removeListener("destroyed",onDestroy2)});if(callback){this.on("complete",function(resp){callback(null,resp)});this.on("error",callback)}const onDestroy2=()=>{this.cancel()};db.once("destroyed",onDestroy2);opts.onChange=(change,pending3,lastSeq)=>{this.isCancelled||tryCatchInChangeListener(this,change,pending3,lastSeq)};promise=new Promise(function(fulfill,reject){opts.complete=function(err3,res2){err3?reject(err3):fulfill(res2)}});this.once("cancel",function(){db.removeListener("destroyed",onDestroy2);opts.complete(null,{status:"cancelled"})});this.then=promise.then.bind(promise);this.catch=promise.catch.bind(promise);this.then(function(result){complete(null,result)},complete);db.taskqueue.isReady?this.validateChanges(opts):db.taskqueue.addTask(failed2=>{failed2?opts.complete(failed2):this.isCancelled?this.emit("cancel"):this.validateChanges(opts)})}cancel(){this.isCancelled=!0;this.db.taskqueue.isReady&&this.emit("cancel")}validateChanges(opts){var callback=opts.complete;PouchDB._changesFilterPlugin?PouchDB._changesFilterPlugin.validate(opts,err3=>{if(err3)return callback(err3);this.doChanges(opts)}):this.doChanges(opts)}doChanges(opts){var newPromise,callback=opts.complete;"live"in(opts=clone2(opts))&&!("continuous"in opts)&&(opts.continuous=opts.live);opts.processChange=processChange;"latest"===opts.since&&(opts.since="now");opts.since||(opts.since=0);if("now"!==opts.since){if(PouchDB._changesFilterPlugin){PouchDB._changesFilterPlugin.normalize(opts);if(PouchDB._changesFilterPlugin.shouldFilter(this,opts))return PouchDB._changesFilterPlugin.filter(this,opts)}else["doc_ids","filter","selector","view"].forEach(function(key3){key3 in opts&&guardedConsole("warn",'The "'+key3+'" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.')});"descending"in opts||(opts.descending=!1);opts.limit=0===opts.limit?1:opts.limit;opts.complete=callback;if((newPromise=this.db._changes(opts))&&"function"==typeof newPromise.cancel){const cancel2=this.cancel;this.cancel=(...args)=>{newPromise.cancel();cancel2.apply(this,args)}}}else this.db.info().then(info3=>{if(this.isCancelled)callback(null,{status:"cancelled"});else{opts.since=info3.update_seq;this.doChanges(opts)}},callback)}};validRevRegex=/^\d+-[^-]*$/;AbstractPouchDB=class extends import_events17.default{_setup(){this.post=adapterFun("post",function(doc,opts,callback){if("function"==typeof opts){callback=opts;opts={}}if(isNotSingleDoc(doc))return callback(createError(NOT_AN_OBJECT));this.bulkDocs({docs:[doc]},opts,yankError(callback,doc._id))}).bind(this);this.put=adapterFun("put",function(doc,opts,cb2){if("function"==typeof opts){cb2=opts;opts={}}if(isNotSingleDoc(doc))return cb2(createError(NOT_AN_OBJECT));invalidIdError(doc._id);if("_rev"in doc&&!isValidRev(doc._rev))return cb2(createError(INVALID_REV));if(isLocalId(doc._id)&&"function"==typeof this._putLocal)return doc._deleted?this._removeLocal(doc,cb2):this._putLocal(doc,cb2);const putDoc=next2=>{"function"==typeof this._put&&!1!==opts.new_edits?this._put(doc,opts,next2):this.bulkDocs({docs:[doc]},opts,yankError(next2,doc._id))};if(opts.force&&doc._rev){(function transformForceOptionToNewEditsOption(){var parts=doc._rev.split("-"),oldRevId=parts[1],newRevNum=parseInt(parts[0],10)+1,newRevId=rev2();doc._revisions={start:newRevNum,ids:[newRevId,oldRevId]};doc._rev=newRevNum+"-"+newRevId;opts.new_edits=!1})();putDoc(function(err3){var result=err3?null:{ok:!0,id:doc._id,rev:doc._rev};cb2(err3,result)})}else putDoc(cb2)}).bind(this);this.putAttachment=adapterFun("putAttachment",function(docId,attachmentId,rev$$1,blob,type){function createAttachment(doc){var prevrevpos="_rev"in doc?parseInt(doc._rev,10):0;doc._attachments=doc._attachments||{};doc._attachments[attachmentId]={content_type:type,data:blob,revpos:++prevrevpos};return api.put(doc)}var api=this;if("function"==typeof type){type=blob;blob=rev$$1;rev$$1=null}if(void 0===type){type=blob;blob=rev$$1;rev$$1=null}type||guardedConsole("warn","Attachment",attachmentId,"on document",docId,"is missing content_type");return api.get(docId).then(function(doc){if(doc._rev!==rev$$1)throw createError(REV_CONFLICT);return createAttachment(doc)},function(err3){if(err3.reason===MISSING_DOC.message)return createAttachment({_id:docId});throw err3})}).bind(this);this.removeAttachment=adapterFun("removeAttachment",function(docId,attachmentId,rev$$1,callback){this.get(docId,(err3,obj)=>{if(err3)callback(err3);else if(obj._rev===rev$$1){if(!obj._attachments)return callback();delete obj._attachments[attachmentId];0===Object.keys(obj._attachments).length&&delete obj._attachments;this.put(obj,callback)}else callback(createError(REV_CONFLICT))})}).bind(this);this.remove=adapterFun("remove",function(docOrId,optsOrRev,opts,callback){var doc,newDoc;if("string"==typeof optsOrRev){doc={_id:docOrId,_rev:optsOrRev};if("function"==typeof opts){callback=opts;opts={}}}else{doc=docOrId;if("function"==typeof optsOrRev){callback=optsOrRev;opts={}}else{callback=opts;opts=optsOrRev}}(opts=opts||{}).was_delete=!0;(newDoc={_id:doc._id,_rev:doc._rev||opts.rev})._deleted=!0;if(isLocalId(newDoc._id)&&"function"==typeof this._removeLocal)return this._removeLocal(doc,callback);this.bulkDocs({docs:[newDoc]},opts,yankError(callback,newDoc._id))}).bind(this);this.revsDiff=adapterFun("revsDiff",function(req,opts,callback){function addToMissing(id,revId){missing.has(id)||missing.set(id,{missing:[]});missing.get(id).missing.push(revId)}function processDoc(id,rev_tree){var missingForId=req[id].slice(0);traverseRevTree(rev_tree,function(isLeaf,pos,revHash,ctx,opts2){var rev$$1=pos+"-"+revHash,idx2=missingForId.indexOf(rev$$1);if(-1!==idx2){missingForId.splice(idx2,1);"available"!==opts2.status&&addToMissing(id,rev$$1)}});missingForId.forEach(function(rev$$1){addToMissing(id,rev$$1)})}var ids,count,missing;if("function"==typeof opts){callback=opts;opts={}}if(!(ids=Object.keys(req)).length)return callback(null,{});count=0;missing=new Map;ids.forEach(function(id){this._getRevisionTree(id,function(err3,rev_tree){if(err3&&404===err3.status&&"missing"===err3.message)missing.set(id,{missing:req[id]});else{if(err3)return callback(err3);processDoc(id,rev_tree)}if(++count===ids.length){var missingObj={};missing.forEach(function(value,key3){missingObj[key3]=value});return callback(null,missingObj)}})},this)}).bind(this);this.bulkGet=adapterFun("bulkGet",function(opts,callback){bulkGet(this,opts,callback)}).bind(this);this.compactDocument=adapterFun("compactDocument",function(docId,maxHeight,callback){this._getRevisionTree(docId,(err3,revTree)=>{var height,candidates,revs;if(err3)return callback(err3);height=computeHeight(revTree);candidates=[];revs=[];Object.keys(height).forEach(function(rev$$1){height[rev$$1]>maxHeight&&candidates.push(rev$$1)});traverseRevTree(revTree,function(isLeaf,pos,revHash,ctx,opts){var rev$$1=pos+"-"+revHash;"available"===opts.status&&-1!==candidates.indexOf(rev$$1)&&revs.push(rev$$1)});this._doCompaction(docId,revs,callback)})}).bind(this);this.compact=adapterFun("compact",function(opts,callback){if("function"==typeof opts){callback=opts;opts={}}opts=opts||{};this._compactionQueue=this._compactionQueue||[];this._compactionQueue.push({opts,callback});1===this._compactionQueue.length&&doNextCompaction(this)}).bind(this);this.get=adapterFun("get",function(id,opts,cb2){var leaves,i2;if("function"==typeof opts){cb2=opts;opts={}}opts=opts||{};if("string"!=typeof id)return cb2(createError(INVALID_ID));if(isLocalId(id)&&"function"==typeof this._getLocal)return this._getLocal(id,cb2);leaves=[];const finishOpenRevs=()=>{var result=[],count=leaves.length;if(!count)return cb2(null,result);leaves.forEach(leaf=>{this.get(id,{rev:leaf,revs:opts.revs,latest:opts.latest,attachments:opts.attachments,binary:opts.binary},function(err3,doc){var existing,i3,l3;if(err3)result.push({missing:leaf});else{for(i3=0,l3=result.length;i3<l3;i3++)if(result[i3].ok&&result[i3].ok._rev===doc._rev){existing=!0;break}existing||result.push({ok:doc})}--count||cb2(null,result)})})};if(!opts.open_revs)return this._get(id,opts,(err3,result)=>{var doc,metadata,ctx,conflicts,splittedRev,revNo,revHash,paths,path2,i3,currentPath,howMany,pos,attachments,count,key3;if(err3){err3.docId=id;return cb2(err3)}doc=result.doc;metadata=result.metadata;ctx=result.ctx;opts.conflicts&&(conflicts=collectConflicts(metadata)).length&&(doc._conflicts=conflicts);isDeleted(metadata,doc._rev)&&(doc._deleted=!0);if(opts.revs||opts.revs_info){splittedRev=doc._rev.split("-");revNo=parseInt(splittedRev[0],10);revHash=splittedRev[1];paths=rootToLeaf(metadata.rev_tree);path2=null;for(i3=0;i3<paths.length;i3++){const hashIndex=(currentPath=paths[i3]).ids.findIndex(x2=>x2.id===revHash);(hashIndex===revNo-1||!path2&&-1!==hashIndex)&&(path2=currentPath)}if(!path2){(err3=new Error("invalid rev tree")).docId=id;return cb2(err3)}const pathId=doc._rev.split("-")[1],indexOfRev=path2.ids.findIndex(x2=>x2.id===pathId)+1;howMany=path2.ids.length-indexOfRev;path2.ids.splice(indexOfRev,howMany);path2.ids.reverse();opts.revs&&(doc._revisions={start:path2.pos+path2.ids.length-1,ids:path2.ids.map(function(rev$$1){return rev$$1.id})});if(opts.revs_info){pos=path2.pos+path2.ids.length;doc._revs_info=path2.ids.map(function(rev$$1){return{rev:--pos+"-"+rev$$1.id,status:rev$$1.opts.status}})}}if(opts.attachments&&doc._attachments){attachments=doc._attachments;if(0===(count=Object.keys(attachments).length))return cb2(null,doc);Object.keys(attachments).forEach(key4=>{this._getAttachment(doc._id,key4,attachments[key4],{binary:opts.binary,metadata,ctx},function(err4,data){var att=doc._attachments[key4];att.data=data;delete att.stub;delete att.length;--count||cb2(null,doc)})})}else{if(doc._attachments)for(key3 in doc._attachments)Object.prototype.hasOwnProperty.call(doc._attachments,key3)&&(doc._attachments[key3].stub=!0);cb2(null,doc)}});if("all"===opts.open_revs)this._getRevisionTree(id,function(err3,rev_tree){if(err3)return cb2(err3);leaves=collectLeaves(rev_tree).map(function(leaf){return leaf.rev});finishOpenRevs()});else{if(!Array.isArray(opts.open_revs))return cb2(createError(UNKNOWN_ERROR,"function_clause"));leaves=opts.open_revs;for(i2=0;i2<leaves.length;i2++)if(!isValidRev(leaves[i2]))return cb2(createError(INVALID_REV));finishOpenRevs()}}).bind(this);this.getAttachment=adapterFun("getAttachment",function(docId,attachmentId,opts,callback){if(opts instanceof Function){callback=opts;opts={}}this._get(docId,opts,(err3,res2)=>{if(err3)return callback(err3);if(!res2.doc._attachments||!res2.doc._attachments[attachmentId])return callback(createError(MISSING_DOC));opts.ctx=res2.ctx;opts.binary=!0;opts.metadata=res2.metadata;this._getAttachment(docId,attachmentId,res2.doc._attachments[attachmentId],opts,callback)})}).bind(this);this.allDocs=adapterFun("allDocs",function(opts,callback){if("function"==typeof opts){callback=opts;opts={}}opts.skip=void 0!==opts.skip?opts.skip:0;opts.start_key&&(opts.startkey=opts.start_key);opts.end_key&&(opts.endkey=opts.end_key);if("keys"in opts){if(!Array.isArray(opts.keys))return callback(new TypeError("options.keys must be an array"));var incompatibleOpt=["startkey","endkey","key"].filter(function(incompatibleOpt2){return incompatibleOpt2 in opts})[0];if(incompatibleOpt){callback(createError(QUERY_PARSE_ERROR,"Query parameter `"+incompatibleOpt+"` is not compatible with multi-get"));return}if(!isRemote(this)){allDocsKeysParse(opts);if(0===opts.keys.length)return this._allDocs({limit:0},callback)}}return this._allDocs(opts,callback)}).bind(this);this.close=adapterFun("close",function(callback){this._closed=!0;this.emit("closed");return this._close(callback)}).bind(this);this.info=adapterFun("info",function(callback){this._info((err3,info3)=>{if(err3)return callback(err3);info3.db_name=info3.db_name||this.name;info3.auto_compaction=!(!this.auto_compaction||isRemote(this));info3.adapter=this.adapter;callback(null,info3)})}).bind(this);this.id=adapterFun("id",function(callback){return this._id(callback)}).bind(this);this.bulkDocs=adapterFun("bulkDocs",function(req,opts,callback){var i2,attachmentError,adapter,ids;if("function"==typeof opts){callback=opts;opts={}}opts=opts||{};Array.isArray(req)&&(req={docs:req});if(!req||!req.docs||!Array.isArray(req.docs))return callback(createError(MISSING_BULK_DOCS));for(i2=0;i2<req.docs.length;++i2){const doc=req.docs[i2];if(isNotSingleDoc(doc))return callback(createError(NOT_AN_OBJECT));if("_rev"in doc&&!isValidRev(doc._rev))return callback(createError(INVALID_REV))}req.docs.forEach(function(doc){doc._attachments&&Object.keys(doc._attachments).forEach(function(name){attachmentError=attachmentError||attachmentNameError(name);doc._attachments[name].content_type||guardedConsole("warn","Attachment",name,"on document",doc._id,"is missing content_type")})});if(attachmentError)return callback(createError(BAD_REQUEST,attachmentError));"new_edits"in opts||(opts.new_edits=!("new_edits"in req)||req.new_edits);adapter=this;opts.new_edits||isRemote(adapter)||req.docs.sort(compareByIdThenRev);cleanDocs(req.docs);ids=req.docs.map(function(doc){return doc._id});this._bulkDocs(req,opts,function(err3,res2){if(err3)return callback(err3);opts.new_edits||(res2=res2.filter(function(x2){return x2.error}));if(!isRemote(adapter))for(var i3=0,l2=res2.length;i3<l2;i3++)res2[i3].id=res2[i3].id||ids[i3];callback(null,res2)})}).bind(this);this.registerDependentDatabase=adapterFun("registerDependentDatabase",function(dependentDb,callback){var depDB,dbOptions=clone2(this.__opts);this.__opts.view_adapter&&(dbOptions.adapter=this.__opts.view_adapter);depDB=new this.constructor(dependentDb,dbOptions);upsert(this,"_local/_pouch_dependentDbs",function diffFun(doc){doc.dependentDbs=doc.dependentDbs||{};if(doc.dependentDbs[dependentDb])return!1;doc.dependentDbs[dependentDb]=!0;return doc}).then(function(){callback(null,{db:depDB})}).catch(callback)}).bind(this);this.destroy=adapterFun("destroy",function(opts,callback){if("function"==typeof opts){callback=opts;opts={}}var usePrefix=!("use_prefix"in this)||this.use_prefix;const destroyDb=()=>{this._destroy(opts,(err3,resp)=>{if(err3)return callback(err3);this._destroyed=!0;this.emit("destroyed");callback(null,resp||{ok:!0})})};if(isRemote(this))return destroyDb();this.get("_local/_pouch_dependentDbs",(err3,localDoc)=>{var dependentDbs,PouchDB2,deletedMap;if(err3)return 404!==err3.status?callback(err3):destroyDb();dependentDbs=localDoc.dependentDbs;PouchDB2=this.constructor;deletedMap=Object.keys(dependentDbs).map(name=>{var trueName=usePrefix?name.replace(new RegExp("^"+PouchDB2.prefix),""):name;return new PouchDB2(trueName,this.__opts).destroy()});Promise.all(deletedMap).then(destroyDb,callback)})}).bind(this)}_compact(opts,callback){var taskId,changesOpts={return_docs:!1,last_seq:opts.last_seq||0,since:opts.last_seq||0},promises=[],compactedDocs=0;const onChange=row=>{this.activeTasks.update(taskId,{completed_items:++compactedDocs});promises.push(this.compactDocument(row.id,0))},onError=err3=>{this.activeTasks.remove(taskId,err3);callback(err3)},onComplete=resp=>{var lastSeq=resp.last_seq;Promise.all(promises).then(()=>upsert(this,"_local/compaction",doc=>{if(!doc.last_seq||doc.last_seq<lastSeq){doc.last_seq=lastSeq;return doc}return!1})).then(()=>{this.activeTasks.remove(taskId);callback(null,{ok:!0})}).catch(onError)};this.info().then(info3=>{taskId=this.activeTasks.add({name:"database_compaction",total_items:info3.update_seq-changesOpts.last_seq});this.changes(changesOpts).on("change",onChange).on("complete",onComplete).on("error",onError)})}changes(opts,callback){if("function"==typeof opts){callback=opts;opts={}}(opts=opts||{}).return_docs="return_docs"in opts?opts.return_docs:!opts.live;return new Changes2(this,opts,callback)}type(){return"function"==typeof this._type?this._type():this.adapter}};AbstractPouchDB.prototype.purge=adapterFun("_purge",function(docId,rev$$1,callback){if(void 0===this._purge)return callback(createError(UNKNOWN_ERROR,"Purge is not implemented in the "+this.adapter+" adapter."));var self3=this;self3._getRevisionTree(docId,(error,revs)=>{if(error)return callback(error);if(!revs)return callback(createError(MISSING_DOC));let path2;try{path2=findPathToLeaf(revs,rev$$1)}catch(error2){return callback(error2.message||error2)}self3._purge(docId,path2,(error2,result)=>{if(error2)return callback(error2);appendPurgeSeq(self3,docId,rev$$1).then(function(){return callback(null,result)})})})});TaskQueue=class{constructor(){this.isReady=!1;this.failed=!1;this.queue=[]}execute(){var fun;if(this.failed)for(;fun=this.queue.shift();)fun(this.failed);else for(;fun=this.queue.shift();)fun()}fail(err3){this.failed=err3;this.execute()}ready(db){this.isReady=!0;this.db=db;this.execute()}addTask(fun){this.queue.push(fun);this.failed&&this.execute()}};PouchInternal=class extends AbstractPouchDB{constructor(name,opts){super();this._setup(name,opts)}_setup(name,opts){var backend;super._setup();opts=opts||{};if(name&&"object"==typeof name){name=(opts=name).name;delete opts.name}void 0===opts.deterministic_revs&&(opts.deterministic_revs=!0);this.__opts=opts=clone2(opts);this.auto_compaction=opts.auto_compaction;this.purged_infos_limit=opts.purged_infos_limit||1e3;this.prefix=PouchDB.prefix;if("string"!=typeof name)throw new Error("Missing/invalid DB name");backend=parseAdapter((opts.prefix||"")+name,opts);opts.name=backend.name;opts.adapter=opts.adapter||backend.adapter;this.name=name;this._adapter=opts.adapter;PouchDB.emit("debug",["adapter","Picked adapter: ",opts.adapter]);if(!PouchDB.adapters[opts.adapter]||!PouchDB.adapters[opts.adapter].valid())throw new Error("Invalid Adapter: "+opts.adapter);if(opts.view_adapter&&(!PouchDB.adapters[opts.view_adapter]||!PouchDB.adapters[opts.view_adapter].valid()))throw new Error("Invalid View Adapter: "+opts.view_adapter);this.taskqueue=new TaskQueue;this.adapter=opts.adapter;PouchDB.adapters[opts.adapter].call(this,opts,err3=>{if(err3)return this.taskqueue.fail(err3);prepareForDestruction(this);this.emit("created",this);PouchDB.emit("created",this.name);this.taskqueue.ready(this)})}};PouchDB=createClass(PouchInternal,function(name,opts){PouchInternal.prototype._setup.call(this,name,opts)});ActiveTasks=class{constructor(){this.tasks={}}list(){return Object.values(this.tasks)}add(task){const id=v4_default();this.tasks[id]={id,name:task.name,total_items:task.total_items,created_at:(new Date).toJSON()};return id}get(id){return this.tasks[id]}remove(id,reason){delete this.tasks[id];return this.tasks}update(id,updatedTask){const task=this.tasks[id];if(void 0!==task){const mergedTask={id:task.id,name:task.name,created_at:task.created_at,total_items:updatedTask.total_items||task.total_items,completed_items:updatedTask.completed_items||task.completed_items,updated_at:(new Date).toJSON()};this.tasks[id]=mergedTask}return this.tasks}};PouchDB.adapters={};PouchDB.preferredAdapters=[];PouchDB.prefix="_pouch_";eventEmitter=new import_events17.default;(function setUpEventEmitter(Pouch){Object.keys(import_events17.default.prototype).forEach(function(key3){"function"==typeof import_events17.default.prototype[key3]&&(Pouch[key3]=eventEmitter[key3].bind(eventEmitter))});var destructListeners=Pouch._destructionListeners=new Map;Pouch.on("ref",function onConstructorRef(db){destructListeners.has(db.name)||destructListeners.set(db.name,[]);destructListeners.get(db.name).push(db)});Pouch.on("unref",function onConstructorUnref(db){var dbList,pos;if(destructListeners.has(db.name)&&!((pos=(dbList=destructListeners.get(db.name)).indexOf(db))<0)){dbList.splice(pos,1);dbList.length>1?destructListeners.set(db.name,dbList):destructListeners.delete(db.name)}});Pouch.on("destroyed",function onConstructorDestroyed(name){if(destructListeners.has(name)){var dbList=destructListeners.get(name);destructListeners.delete(name);dbList.forEach(function(db){db.emit("destroyed",!0)})}})})(PouchDB);PouchDB.adapter=function(id,obj,addToPreferredAdapters){if(obj.valid()){PouchDB.adapters[id]=obj;addToPreferredAdapters&&PouchDB.preferredAdapters.push(id)}};PouchDB.plugin=function(obj){if("function"==typeof obj)obj(PouchDB);else{if("object"!=typeof obj||0===Object.keys(obj).length)throw new Error('Invalid plugin: got "'+obj+'", expected an object or a function');Object.keys(obj).forEach(function(id){PouchDB.prototype[id]=obj[id]})}this.__defaults&&(PouchDB.__defaults=Object.assign({},this.__defaults));return PouchDB};PouchDB.defaults=function(defaultOpts){let PouchWithDefaults=createClass(PouchDB,function(name,opts){opts=opts||{};if(name&&"object"==typeof name){name=(opts=name).name;delete opts.name}opts=Object.assign({},PouchWithDefaults.__defaults,opts);PouchDB.call(this,name,opts)});PouchWithDefaults.preferredAdapters=PouchDB.preferredAdapters.slice();Object.keys(PouchDB).forEach(function(key3){key3 in PouchWithDefaults||(PouchWithDefaults[key3]=PouchDB[key3])});PouchWithDefaults.__defaults=Object.assign({},this.__defaults,defaultOpts);return PouchWithDefaults};PouchDB.fetch=function(url,opts){return f3(url,opts)};PouchDB.prototype.activeTasks=PouchDB.activeTasks=new ActiveTasks;PouchDB.plugin(index_browser_es_default);PouchDB.version="9.0.0";index_es_default=PouchDB;import_vuvuzela=__toESM(require_vuvuzela());reservedWords=toObject(["_id","_rev","_access","_attachments","_deleted","_revisions","_revs_info","_conflicts","_deleted_conflicts","_local_seq","_rev_tree","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats","_removed"]);dataWords=toObject(["_access","_attachments","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats"]);ADAPTER_VERSION=5;DOC_STORE="document-store";BY_SEQ_STORE="by-sequence";ATTACH_STORE="attach-store";ATTACH_AND_SEQ_STORE="attach-seq-store";META_STORE="meta-store";LOCAL_STORE="local-store";DETECT_BLOB_SUPPORT_STORE="detect-blob-support";changesHandler$1=new Changes;running=!1;queue=[];cachedDBs=new Map;openReqList=new Map;IdbPouch.valid=function(){try{return"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e3){return!1}};index_es_default2=function index2(PouchDB2){PouchDB2.adapter("idb",IdbPouch,!0)};IDB_NULL=Number.MIN_SAFE_INTEGER;IDB_FALSE=Number.MIN_SAFE_INTEGER+1;IDB_TRUE=Number.MIN_SAFE_INTEGER+2;TEST_KEY_INVALID=/^[^a-zA-Z$]|[^a-zA-Z0-9$]+/;TEST_PATH_INVALID=/\\.|(^|\.)[^a-zA-Z$]|[^a-zA-Z0-9$.]+/;KEY_INVALID=new RegExp(TEST_KEY_INVALID.source,"g");PATH_INVALID=new RegExp(TEST_PATH_INVALID.source,"g");SLASH="\\".charCodeAt(0);IS_DOT=".".charCodeAt(0);DOC_STORE2="docs";META_LOCAL_STORE="meta";POUCHDB_IDB_VERSION=2;versionMultiplier=Math.pow(10,13);BINARY_ATTACHMENTS=!1;COUCH_COLLATE_LO=null;COUCH_COLLATE_HI="￿";IDB_COLLATE_LO=Number.NEGATIVE_INFINITY;IDB_COLLATE_HI=[[[[[[[[[[[[]]]]]]]]]]]];ADAPTER_NAME="indexeddb";idbChanges=new Changes;openDatabases={};IndexeddbPouch.valid=function(){return!0};index_es_default3=function index3(PouchDB2){PouchDB2.adapter(ADAPTER_NAME,IndexeddbPouch,!0)};CHANGES_BATCH_SIZE=25;MAX_SIMULTANEOUS_REVS=50;CHANGES_TIMEOUT_BUFFER=5e3;DEFAULT_HEARTBEAT=1e4;supportsBulkGetMap={};HttpPouch.valid=function(){return!0};index_es_default4=function index4(PouchDB2){PouchDB2.adapter("http",HttpPouch,!1);PouchDB2.adapter("https",HttpPouch,!1)};QueryParseError=class _QueryParseError extends Error{constructor(message){super();this.status=400;this.name="query_parse_error";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_QueryParseError)}catch(e3){}}};NotFoundError=class _NotFoundError extends Error{constructor(message){super();this.status=404;this.name="not_found";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_NotFoundError)}catch(e3){}}};BuiltInError=class _BuiltInError extends Error{constructor(message){super();this.status=500;this.name="invalid_value";this.message=message;this.error=!0;try{Error.captureStackTrace(this,_BuiltInError)}catch(e3){}}};persistentQueues={};tempViewQueue=new(TaskQueue2=class{constructor(){this.promise=Promise.resolve()}add(promiseFactory){this.promise=this.promise.catch(()=>{}).then(()=>promiseFactory());return this.promise}finish(){return this.promise}});index_es_default5=function createAbstractMapReduce(localDocName2,mapper3,reducer3,ddocValidator3){function tryMap(db,fun,doc){try{fun(doc)}catch(e3){emitError(db,e3,{fun,doc})}}function tryReduce(db,fun,keys3,values2,rereduce){try{return{output:fun(keys3,values2,rereduce)}}catch(e3){emitError(db,e3,{fun,keys:keys3,values:values2,rereduce});return{error:e3}}}function sortByKeyThenValue(x2,y2){const keyCompare=collate(x2.key,y2.key);return 0!==keyCompare?keyCompare:collate(x2.value,y2.value)}function sliceResults(results,limit,skip){skip=skip||0;return"number"==typeof limit?results.slice(skip,limit+skip):skip>0?results.slice(skip):results}function rowToDocId(row){const val=row.value;return val&&"object"==typeof val&&val._id||row.id}function readAttachmentsAsBlobOrBuffer2(res2){for(const row of res2.rows){const atts=row.doc&&row.doc._attachments;if(atts)for(const filename of Object.keys(atts)){const att=atts[filename];atts[filename].data=b64ToBluffer(att.data,att.content_type)}}}function postprocessAttachments(opts){return function(res2){opts.include_docs&&opts.attachments&&opts.binary&&readAttachmentsAsBlobOrBuffer2(res2);return res2}}function addHttpParam(paramName,opts,params,asJson){let val=opts[paramName];if(void 0!==val){asJson&&(val=encodeURIComponent(JSON.stringify(val)));params.push(paramName+"="+val)}}function coerceInteger(integerCandidate){if(void 0!==integerCandidate){const asNumber=Number(integerCandidate);return isNaN(asNumber)||asNumber!==parseInt(integerCandidate,10)?integerCandidate:asNumber}}function coerceOptions(opts){opts.group_level=coerceInteger(opts.group_level);opts.limit=coerceInteger(opts.limit);opts.skip=coerceInteger(opts.skip);return opts}function checkPositiveInteger(number){if(number){if("number"!=typeof number)return new QueryParseError(`Invalid value for integer: "${number}"`);if(number<0)return new QueryParseError(`Invalid value for positive integer: "${number}"`)}}function checkQueryParseError(options,fun){const startkeyName=options.descending?"endkey":"startkey",endkeyName=options.descending?"startkey":"endkey";if(void 0!==options[startkeyName]&&void 0!==options[endkeyName]&&collate(options[startkeyName],options[endkeyName])>0)throw new QueryParseError("No rows can match your key range, reverse your start_key and end_key or set {descending : true}");if(fun.reduce&&!1!==options.reduce){if(options.include_docs)throw new QueryParseError("{include_docs:true} is invalid for reduce");if(options.keys&&options.keys.length>1&&!options.group&&!options.group_level)throw new QueryParseError("Multi-key fetches for reduce views must use {group: true}")}for(const optionName of["group_level","limit","skip"]){const error=checkPositiveInteger(options[optionName]);if(error)throw error}}async function httpQuery(db,fun,opts){let body,ok,params=[],method="GET";addHttpParam("reduce",opts,params);addHttpParam("include_docs",opts,params);addHttpParam("attachments",opts,params);addHttpParam("limit",opts,params);addHttpParam("descending",opts,params);addHttpParam("group",opts,params);addHttpParam("group_level",opts,params);addHttpParam("skip",opts,params);addHttpParam("stale",opts,params);addHttpParam("conflicts",opts,params);addHttpParam("startkey",opts,params,!0);addHttpParam("start_key",opts,params,!0);addHttpParam("endkey",opts,params,!0);addHttpParam("end_key",opts,params,!0);addHttpParam("inclusive_end",opts,params);addHttpParam("key",opts,params,!0);addHttpParam("update_seq",opts,params);params=params.join("&");params=""===params?"":"?"+params;if(void 0!==opts.keys){const MAX_URL_LENGTH=2e3,keysAsString=`keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;if(keysAsString.length+params.length+1<=MAX_URL_LENGTH)params+=("?"===params[0]?"&":"?")+keysAsString;else{method="POST";"string"==typeof fun?body={keys:opts.keys}:fun.keys=opts.keys}}if("string"==typeof fun){const parts=parseViewName(fun),response2=await db.fetch("_design/"+parts[0]+"/_view/"+parts[1]+params,{headers:new h2({"Content-Type":"application/json"}),method,body:JSON.stringify(body)});ok=response2.ok;const result2=await response2.json();if(!ok){result2.status=response2.status;throw generateErrorFromResponse(result2)}for(const row of result2.rows)if(row.value&&row.value.error&&"builtin_reduce_error"===row.value.error)throw new Error(row.reason);return new Promise(function(resolve){resolve(result2)}).then(postprocessAttachments(opts))}body=body||{};for(const key3 of Object.keys(fun))Array.isArray(fun[key3])?body[key3]=fun[key3]:body[key3]=fun[key3].toString();const response=await db.fetch("_temp_view"+params,{headers:new h2({"Content-Type":"application/json"}),method:"POST",body:JSON.stringify(body)});ok=response.ok;const result=await response.json();if(!ok){result.status=response.status;throw generateErrorFromResponse(result)}return new Promise(function(resolve){resolve(result)}).then(postprocessAttachments(opts))}function customQuery(db,fun,opts){return new Promise(function(resolve,reject){db._query(fun,opts,function(err3,res2){if(err3)return reject(err3);resolve(res2)})})}function customViewCleanup(db){return new Promise(function(resolve,reject){db._viewCleanup(function(err3,res2){if(err3)return reject(err3);resolve(res2)})})}function defaultsTo(value){return function(reason){if(404===reason.status)return value;throw reason}}async function getDocsToPersist(docId,view,docIdsToChangesAndEmits){const metaDocId="_local/doc_"+docId,defaultMetaDoc={_id:metaDocId,keys:[]},docData=docIdsToChangesAndEmits.get(docId),indexableKeysToKeyValues=docData[0],changes3=docData[1],metaDoc=await function getMetaDoc(){return isGenOne(changes3)?Promise.resolve(defaultMetaDoc):view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc))}();return function processKeyValueDocs(metaDoc2,kvDocsRes){const kvDocs=[],oldKeys=new Set;for(const row of kvDocsRes.rows){const doc=row.doc;if(doc){kvDocs.push(doc);oldKeys.add(doc._id);doc._deleted=!indexableKeysToKeyValues.has(doc._id);if(!doc._deleted){const keyValue=indexableKeysToKeyValues.get(doc._id);"value"in keyValue&&(doc.value=keyValue.value)}}}const newKeys=mapToKeysArray(indexableKeysToKeyValues);for(const key3 of newKeys)if(!oldKeys.has(key3)){const kvDoc={_id:key3},keyValue=indexableKeysToKeyValues.get(key3);"value"in keyValue&&(kvDoc.value=keyValue.value);kvDocs.push(kvDoc)}metaDoc2.keys=uniq(newKeys.concat(metaDoc2.keys));kvDocs.push(metaDoc2);return kvDocs}(metaDoc,await function getKeyValueDocs(metaDoc2){return metaDoc2.keys.length?view.db.allDocs({keys:metaDoc2.keys,include_docs:!0}):Promise.resolve({rows:[]})}(metaDoc))}function updatePurgeSeq(view){return view.sourceDB.get("_local/purges").then(function(res2){const purgeSeq=res2.purgeSeq;return view.db.get("_local/purgeSeq").then(function(res3){return res3._rev}).catch(defaultsTo(void 0)).then(function(rev3){return view.db.put({_id:"_local/purgeSeq",_rev:rev3,purgeSeq})})}).catch(function(err3){if(404!==err3.status)throw err3})}function saveKeyValues(view,docIdsToChangesAndEmits,seq){return view.db.get("_local/lastSeq").catch(defaultsTo({_id:"_local/lastSeq",seq:0})).then(function(lastSeqDoc){var docIds=mapToKeysArray(docIdsToChangesAndEmits);return Promise.all(docIds.map(function(docId){return getDocsToPersist(docId,view,docIdsToChangesAndEmits)})).then(function(listOfDocsToPersist){var docsToPersist=listOfDocsToPersist.flat();lastSeqDoc.seq=seq;docsToPersist.push(lastSeqDoc);return view.db.bulkDocs({docs:docsToPersist})}).then(()=>updatePurgeSeq(view))})}function getQueue(view){const viewName="string"==typeof view?view:view.name;let queue2=persistentQueues[viewName];queue2||(queue2=persistentQueues[viewName]=new TaskQueue2);return queue2}async function updateView(view,opts){return sequentialize(getQueue(view),function(){return updateViewInQueue(view,opts)})()}async function updateViewInQueue(view,opts){function processChange2(docIdsToChangesAndEmits,seq){return function(){return saveKeyValues(view,docIdsToChangesAndEmits,seq)}}async function processNextBatch(){return processBatch(await view.sourceDB.changes({return_docs:!0,conflicts:!0,include_docs:!0,style:"all_docs",since:currentSeq,limit:opts.changes_batch_size}),await getRecentPurges())}function getRecentPurges(){return view.db.get("_local/purgeSeq").then(function(res2){return res2.purgeSeq}).catch(defaultsTo(-1)).then(function(purgeSeq){return view.sourceDB.get("_local/purges").then(function(res2){const recentPurges=res2.purges.filter(function(purge2,index6){return index6>purgeSeq}).map(purge2=>purge2.docId),uniquePurges=recentPurges.filter(function(docId,index6){return recentPurges.indexOf(docId)===index6});return Promise.all(uniquePurges.map(function(docId){return view.sourceDB.get(docId).then(function(doc2){return{docId,doc:doc2}}).catch(defaultsTo({docId}))}))}).catch(defaultsTo([]))})}function processBatch(response,purges){const results=response.results;if(!results.length&&!purges.length)return;for(const purge2 of purges)if(results.findIndex(function(change){return change.id===purge2.docId})<0){const entry={_id:purge2.docId,doc:{_id:purge2.docId,_deleted:1},changes:[]};if(purge2.doc){entry.doc=purge2.doc;entry.changes.push({rev:purge2.doc._rev})}results.push(entry)}const docIdsToChangesAndEmits=createDocIdsToChangesAndEmits(results);queue2.add(processChange2(docIdsToChangesAndEmits,currentSeq));indexed_docs+=results.length;const progress2={view:view.name,last_seq:response.last_seq,results_count:results.length,indexed_docs};view.sourceDB.emit("indexing",progress2);view.sourceDB.activeTasks.update(taskId,{completed_items:indexed_docs});return results.length<opts.changes_batch_size?void 0:processNextBatch()}function createDocIdsToChangesAndEmits(results){const docIdsToChangesAndEmits=new Map;for(const change of results){if("_"!==change.doc._id[0]){mapResults=[];doc=change.doc;doc._deleted||tryMap(view.sourceDB,mapFun,doc);mapResults.sort(sortByKeyThenValue);const indexableKeysToKeyValues=createIndexableKeysToKeyValues(mapResults);docIdsToChangesAndEmits.set(change.doc._id,[indexableKeysToKeyValues,change.changes])}currentSeq=change.seq}return docIdsToChangesAndEmits}function createIndexableKeysToKeyValues(mapResults2){const indexableKeysToKeyValues=new Map;let lastKey;for(let i2=0,len=mapResults2.length;i2<len;i2++){const emittedKeyValue=mapResults2[i2],complexKey=[emittedKeyValue.key,emittedKeyValue.id];i2>0&&0===collate(emittedKeyValue.key,lastKey)&&complexKey.push(i2);indexableKeysToKeyValues.set(toIndexableString(complexKey),emittedKeyValue);lastKey=emittedKeyValue.key}return indexableKeysToKeyValues}let mapResults,doc,taskId;const mapFun=mapper3(view.mapFun,function emit2(key3,value){const output={id:doc._id,key:normalizeKey(key3)};null!=value&&(output.value=normalizeKey(value));mapResults.push(output)});let currentSeq=view.seq||0,indexed_docs=0;const progress={view:view.name,indexed_docs};view.sourceDB.emit("indexing",progress);const queue2=new TaskQueue2;try{await function createTask(){return view.sourceDB.info().then(function(info3){taskId=view.sourceDB.activeTasks.add({name:"view_indexing",total_items:info3.update_seq-currentSeq})})}();await processNextBatch();await queue2.finish();view.seq=currentSeq;view.sourceDB.activeTasks.remove(taskId)}catch(error){view.sourceDB.activeTasks.remove(taskId,error)}}function reduceView(view,results,options){0===options.group_level&&delete options.group_level;const shouldGroup=options.group||options.group_level,reduceFun=reducer3(view.reduceFun),groups=[],lvl=isNaN(options.group_level)?Number.POSITIVE_INFINITY:options.group_level;for(const result of results){const last=groups[groups.length-1];let groupKey=shouldGroup?result.key:null;shouldGroup&&Array.isArray(groupKey)&&(groupKey=groupKey.slice(0,lvl));if(last&&0===collate(last.groupKey,groupKey)){last.keys.push([result.key,result.id]);last.values.push(result.value)}else groups.push({keys:[[result.key,result.id]],values:[result.value],groupKey})}results=[];for(const group4 of groups){const reduceTry=tryReduce(view.sourceDB,reduceFun,group4.keys,group4.values,!1);if(reduceTry.error&&reduceTry.error instanceof BuiltInError)throw reduceTry.error;results.push({value:reduceTry.error?null:reduceTry.output,key:group4.groupKey})}return{rows:sliceResults(results,options.limit,options.skip)}}function queryView(view,opts){return sequentialize(getQueue(view),function(){return queryViewInQueue(view,opts)})()}async function queryViewInQueue(view,opts){async function fetchFromView(viewOpts){viewOpts.include_docs=!0;const res2=await view.db.allDocs(viewOpts);totalRows=res2.total_rows;return res2.rows.map(function(result){if("value"in result.doc&&"object"==typeof result.doc.value&&null!==result.doc.value){const keys3=Object.keys(result.doc.value).sort(),expectedKeys=["id","key","value"];if(!(keys3<expectedKeys||keys3>expectedKeys))return result.doc.value}const parsedKeyAndDocId=parseIndexableString(result.doc._id);return{key:parsedKeyAndDocId[0],id:parsedKeyAndDocId[1],value:"value"in result.doc?result.doc.value:null}})}async function onMapResultsReady(rows){let finalResults;finalResults=shouldReduce?reduceView(view,rows,opts):void 0===opts.keys?{total_rows:totalRows,offset:skip,rows}:{total_rows:totalRows,offset:skip,rows:sliceResults(rows,opts.limit,opts.skip)};opts.update_seq&&(finalResults.update_seq=view.seq);if(opts.include_docs){const docIds=uniq(rows.map(rowToDocId)),allDocsRes=await view.sourceDB.allDocs({keys:docIds,include_docs:!0,conflicts:opts.conflicts,attachments:opts.attachments,binary:opts.binary}),docIdsToDocs=new Map;for(const row of allDocsRes.rows)docIdsToDocs.set(row.id,row.doc);for(const row of rows){const docId=rowToDocId(row),doc=docIdsToDocs.get(docId);doc&&(row.doc=doc)}}return finalResults}let totalRows;const shouldReduce=view.reduceFun&&!1!==opts.reduce,skip=opts.skip||0;if(void 0!==opts.keys&&!opts.keys.length){opts.limit=0;delete opts.keys}if(void 0!==opts.keys){const fetchPromises=opts.keys.map(function(key3){const viewOpts={startkey:toIndexableString([key3]),endkey:toIndexableString([key3,{}])};opts.update_seq&&(viewOpts.update_seq=!0);return fetchFromView(viewOpts)});return onMapResultsReady((await Promise.all(fetchPromises)).flat())}{const viewOpts={descending:opts.descending};opts.update_seq&&(viewOpts.update_seq=!0);let startkey,endkey;"start_key"in opts&&(startkey=opts.start_key);"startkey"in opts&&(startkey=opts.startkey);"end_key"in opts&&(endkey=opts.end_key);"endkey"in opts&&(endkey=opts.endkey);void 0!==startkey&&(viewOpts.startkey=opts.descending?toIndexableString([startkey,{}]):toIndexableString([startkey]));if(void 0!==endkey){let inclusiveEnd=!1!==opts.inclusive_end;opts.descending&&(inclusiveEnd=!inclusiveEnd);viewOpts.endkey=toIndexableString(inclusiveEnd?[endkey,{}]:[endkey])}if(void 0!==opts.key){const keyStart=toIndexableString([opts.key]),keyEnd=toIndexableString([opts.key,{}]);if(viewOpts.descending){viewOpts.endkey=keyStart;viewOpts.startkey=keyEnd}else{viewOpts.startkey=keyStart;viewOpts.endkey=keyEnd}}if(!shouldReduce){"number"==typeof opts.limit&&(viewOpts.limit=opts.limit);viewOpts.skip=skip}return onMapResultsReady(await fetchFromView(viewOpts))}}async function httpViewCleanup(db){return(await db.fetch("_view_cleanup",{headers:new h2({"Content-Type":"application/json"}),method:"POST"})).json()}async function localViewCleanup(db){try{const metaDoc=await db.get("_local/"+localDocName2),docsToViews=new Map;for(const fullViewName of Object.keys(metaDoc.views)){const parts=parseViewName(fullViewName),designDocName="_design/"+parts[0],viewName=parts[1];let views=docsToViews.get(designDocName);if(!views){views=new Set;docsToViews.set(designDocName,views)}views.add(viewName)}const opts={keys:mapToKeysArray(docsToViews),include_docs:!0},res2=await db.allDocs(opts),viewsToStatus={};for(const row of res2.rows){const ddocName=row.key.substring(8);for(const viewName of docsToViews.get(row.key)){let fullViewName=ddocName+"/"+viewName;metaDoc.views[fullViewName]||(fullViewName=viewName);const viewDBNames=Object.keys(metaDoc.views[fullViewName]),statusIsGood=row.doc&&row.doc.views&&row.doc.views[viewName];for(const viewDBName of viewDBNames)viewsToStatus[viewDBName]=viewsToStatus[viewDBName]||statusIsGood}}const destroyPromises=Object.keys(viewsToStatus).filter(function(viewDBName){return!viewsToStatus[viewDBName]}).map(function(viewDBName){return sequentialize(getQueue(viewDBName),function(){return new db.constructor(viewDBName,db.__opts).destroy()})()});return Promise.all(destroyPromises).then(function(){return{ok:!0}})}catch(err3){if(404===err3.status)return{ok:!0};throw err3}}async function queryPromised(db,fun,opts){if("function"==typeof db._query)return customQuery(db,fun,opts);if(isRemote(db))return httpQuery(db,fun,opts);const updateViewOpts={changes_batch_size:db.__opts.view_update_changes_batch_size||50};if("string"!=typeof fun){checkQueryParseError(opts,fun);tempViewQueue.add(async function(){const view=await createView(db,"temp_view/temp_view",fun.map,fun.reduce,!0,localDocName2);return fin(updateView(view,updateViewOpts).then(function(){return queryView(view,opts)}),function(){return view.db.destroy()})});return tempViewQueue.finish()}{const fullViewName=fun,parts=parseViewName(fullViewName),designDocName=parts[0],viewName=parts[1],doc=await db.get("_design/"+designDocName);if(!(fun=doc.views&&doc.views[viewName]))throw new NotFoundError(`ddoc ${doc._id} has no view named ${viewName}`);ddocValidator3(doc,viewName);checkQueryParseError(opts,fun);const view=await createView(db,fullViewName,fun.map,fun.reduce,!1,localDocName2);if("ok"===opts.stale||"update_after"===opts.stale){"update_after"===opts.stale&&nextTick(function(){updateView(view,updateViewOpts)});return queryView(view,opts)}await updateView(view,updateViewOpts);return queryView(view,opts)}}return{query:function abstractQuery(fun,opts,callback){const db=this;if("function"==typeof opts){callback=opts;opts={}}opts=opts?coerceOptions(opts):{};"function"==typeof fun&&(fun={map:fun});const promise=Promise.resolve().then(function(){return queryPromised(db,fun,opts)});promisedCallback(promise,callback);return promise},viewCleanup:callbackify(function(){const db=this;return"function"==typeof db._viewCleanup?customViewCleanup(db):isRemote(db)?httpViewCleanup(db):localViewCleanup(db)})}};log2=guardedConsole.bind(null,"log");isArray=Array.isArray;toJSON=JSON.parse;builtInReduce__sum=function(keys3,values2){return sum(values2)},builtInReduce__count=function(keys3,values2){return values2.length},builtInReduce__stats=function(keys3,values2){return{sum:sum(values2),min:Math.min.apply(null,values2),max:Math.max.apply(null,values2),count:values2.length,sumsqr:function sumsqr(values3){var i2,len,num,_sumsqr=0;for(i2=0,len=values3.length;i2<len;i2++)_sumsqr+=(num=values3[i2])*num;return _sumsqr}(values2)}};abstract=index_es_default5("mrviews",function mapper(mapFun,emit2){if("function"==typeof mapFun&&2===mapFun.length){var origMap=mapFun;return function(doc){return origMap(doc,emit2)}}return evalFunctionWithEval(mapFun.toString(),emit2)},function reducer(reduceFun){var reduceFunString=reduceFun.toString();return getBuiltIn(reduceFunString)||evalFunctionWithEval(reduceFunString)},function ddocValidator(ddoc,viewName){var fun=ddoc.views&&ddoc.views[viewName];if("string"!=typeof fun.map)throw new NotFoundError("ddoc "+ddoc._id+" has no string view named "+viewName+", instead found object of type: "+typeof fun.map)});index_browser_es_default2={query:function query2(fun,opts,callback){return abstract.query.call(this,fun,opts,callback)},viewCleanup:function viewCleanup2(callback){return abstract.viewCleanup.call(this,callback)}};CHECKPOINT_VERSION=1;REPLICATOR="pouchdb";CHECKPOINT_HISTORY_SIZE=5;LOWEST_SEQ=0;CheckpointerInternal=class{constructor(src,target,id,returnValue,opts={writeSourceCheckpoint:!0,writeTargetCheckpoint:!0}){this.src=src;this.target=target;this.id=id;this.returnValue=returnValue;this.opts=opts;void 0===opts.writeSourceCheckpoint&&(opts.writeSourceCheckpoint=!0);void 0===opts.writeTargetCheckpoint&&(opts.writeTargetCheckpoint=!0)}writeCheckpoint(checkpoint,session){var self3=this;return this.updateTarget(checkpoint,session).then(function(){return self3.updateSource(checkpoint,session)})}updateTarget(checkpoint,session){return this.opts.writeTargetCheckpoint?updateCheckpoint(this.target,this.id,checkpoint,session,this.returnValue):Promise.resolve(!0)}updateSource(checkpoint,session){if(this.opts.writeSourceCheckpoint){var self3=this;return updateCheckpoint(this.src,this.id,checkpoint,session,this.returnValue).catch(function(err3){if(isForbiddenError(err3)){self3.opts.writeSourceCheckpoint=!1;return!0}throw err3})}return Promise.resolve(!0)}getCheckpoint(){var self3=this;return self3.opts.writeSourceCheckpoint||self3.opts.writeTargetCheckpoint?self3.opts&&self3.opts.writeSourceCheckpoint&&!self3.opts.writeTargetCheckpoint?self3.src.get(self3.id).then(function(sourceDoc){return sourceDoc.last_seq||LOWEST_SEQ}).catch(function(err3){if(404!==err3.status)throw err3;return LOWEST_SEQ}):self3.target.get(self3.id).then(function(targetDoc){return self3.opts&&self3.opts.writeTargetCheckpoint&&!self3.opts.writeSourceCheckpoint?targetDoc.last_seq||LOWEST_SEQ:self3.src.get(self3.id).then(function(sourceDoc){return targetDoc.version!==sourceDoc.version?LOWEST_SEQ:(version2=targetDoc.version?targetDoc.version.toString():"undefined")in comparisons?comparisons[version2](targetDoc,sourceDoc):LOWEST_SEQ;var version2},function(err3){if(404===err3.status&&targetDoc.last_seq)return self3.src.put({_id:self3.id,last_seq:LOWEST_SEQ}).then(function(){return LOWEST_SEQ},function(err4){if(isForbiddenError(err4)){self3.opts.writeSourceCheckpoint=!1;return targetDoc.last_seq}return LOWEST_SEQ});throw err3})}).catch(function(err3){if(404!==err3.status)throw err3;return LOWEST_SEQ}):Promise.resolve(LOWEST_SEQ)}};comparisons={undefined:function(targetDoc,sourceDoc){return 0===collate(targetDoc.last_seq,sourceDoc.last_seq)?sourceDoc.last_seq:0},1:function(targetDoc,sourceDoc){return compareReplicationLogs(sourceDoc,targetDoc).last_seq}};index_es_default6=function Checkpointer(src,target,id,returnValue,opts){return this instanceof CheckpointerInternal?Checkpointer:new CheckpointerInternal(src,target,id,returnValue,opts)};index_es_default7=function generateReplicationId(src,target,opts){var docIds=opts.doc_ids?opts.doc_ids.sort(collate):"",filterFun=opts.filter?opts.filter.toString():"",queryParams="",filterViewName="",selector="";opts.selector&&(selector=JSON.stringify(opts.selector));opts.filter&&opts.query_params&&(queryParams=JSON.stringify(sortObjectPropertiesByKey(opts.query_params)));opts.filter&&"_view"===opts.filter&&(filterViewName=opts.view.toString());return Promise.all([src.id(),target.id()]).then(function(res2){var queryData=res2[0]+res2[1]+filterFun+filterViewName+queryParams+docIds+selector;return new Promise(function(resolve){binaryMd5(queryData,resolve)})}).then(function(md5sum){return"_local/"+md5sum.replace(/\//g,".").replace(/\+/g,"_")})};import_events18=__toESM(require_events());STARTING_BACK_OFF=0;Replication=class extends import_events18.default{constructor(){super();this.cancelled=!1;this.state="pending";const promise=new Promise((fulfill,reject)=>{this.once("complete",fulfill);this.once("error",reject)});this.then=function(resolve,reject){return promise.then(resolve,reject)};this.catch=function(reject){return promise.catch(reject)};this.catch(function(){})}cancel(){this.cancelled=!0;this.state="cancelled";this.emit("cancel")}ready(src,target){function cleanup(){src.removeListener("destroyed",onDestroy2);target.removeListener("destroyed",onDestroy2)}if(this._readyCalled)return;this._readyCalled=!0;const onDestroy2=()=>{this.cancel()};src.once("destroyed",onDestroy2);target.once("destroyed",onDestroy2);this.once("complete",cleanup);this.once("error",cleanup)}};Sync=class extends import_events18.default{constructor(src,target,opts,callback){function addOneListener(ee,event2,listener){-1==ee.listeners(event2).indexOf(listener)&&ee.on(event2,listener)}super();this.canceled=!1;const optsPush=opts.push?Object.assign({},opts,opts.push):opts,optsPull=opts.pull?Object.assign({},opts,opts.pull):opts;this.push=replicateWrapper(src,target,optsPush);this.pull=replicateWrapper(target,src,optsPull);this.pushPaused=!0;this.pullPaused=!0;const pullChange=change=>{this.emit("change",{direction:"pull",change})},pushChange=change=>{this.emit("change",{direction:"push",change})},pushDenied=doc=>{this.emit("denied",{direction:"push",doc})},pullDenied=doc=>{this.emit("denied",{direction:"pull",doc})},pushPaused=()=>{this.pushPaused=!0;this.pullPaused&&this.emit("paused")},pullPaused=()=>{this.pullPaused=!0;this.pushPaused&&this.emit("paused")},pushActive=()=>{this.pushPaused=!1;this.pullPaused&&this.emit("active",{direction:"push"})},pullActive=()=>{this.pullPaused=!1;this.pushPaused&&this.emit("active",{direction:"pull"})};let removed={};const removeAll=type=>(event2,func)=>{if("change"===event2&&(func===pullChange||func===pushChange)||"denied"===event2&&(func===pullDenied||func===pushDenied)||"paused"===event2&&(func===pullPaused||func===pushPaused)||"active"===event2&&(func===pullActive||func===pushActive)){event2 in removed||(removed[event2]={});removed[event2][type]=!0;2===Object.keys(removed[event2]).length&&this.removeAllListeners(event2)}};if(opts.live){this.push.on("complete",this.pull.cancel.bind(this.pull));this.pull.on("complete",this.push.cancel.bind(this.push))}this.on("newListener",function(event2){if("change"===event2){addOneListener(this.pull,"change",pullChange);addOneListener(this.push,"change",pushChange)}else if("denied"===event2){addOneListener(this.pull,"denied",pullDenied);addOneListener(this.push,"denied",pushDenied)}else if("active"===event2){addOneListener(this.pull,"active",pullActive);addOneListener(this.push,"active",pushActive)}else if("paused"===event2){addOneListener(this.pull,"paused",pullPaused);addOneListener(this.push,"paused",pushPaused)}});this.on("removeListener",function(event2){if("change"===event2){this.pull.removeListener("change",pullChange);this.push.removeListener("change",pushChange)}else if("denied"===event2){this.pull.removeListener("denied",pullDenied);this.push.removeListener("denied",pushDenied)}else if("active"===event2){this.pull.removeListener("active",pullActive);this.push.removeListener("active",pushActive)}else if("paused"===event2){this.pull.removeListener("paused",pullPaused);this.push.removeListener("paused",pushPaused)}});this.pull.on("removeListener",removeAll("pull"));this.push.on("removeListener",removeAll("push"));const promise=Promise.all([this.push,this.pull]).then(resp=>{const out={push:resp[0],pull:resp[1]};this.emit("complete",out);callback&&callback(null,out);this.removeAllListeners();return out},err3=>{this.cancel();callback?callback(err3):this.emit("error",err3);this.removeAllListeners();if(callback)throw err3});this.then=function(success,err3){return promise.then(success,err3)};this.catch=function(err3){return promise.catch(err3)}}cancel(){if(!this.canceled){this.canceled=!0;this.push.cancel();this.pull.cancel()}}};index_es_default8=function replication(PouchDB2){PouchDB2.replicate=replicateWrapper;PouchDB2.sync=sync;Object.defineProperty(PouchDB2.prototype,"replicate",{get:function(){var self3=this;void 0===this.replicateMethods&&(this.replicateMethods={from:function(other,opts,callback){return self3.constructor.replicate(other,self3,opts,callback)},to:function(other,opts,callback){return self3.constructor.replicate(self3,other,opts,callback)}});return this.replicateMethods}});PouchDB2.prototype.sync=function(dbName,opts,callback){return this.constructor.sync(this,dbName,opts,callback)}};nativeFlat=(...args)=>args.flat(1/0);polyFlat=(...args)=>{let res2=[];for(const subArr of args)Array.isArray(subArr)?res2=res2.concat(polyFlat(...subArr)):res2.push(subArr);return res2};flatten2="function"==typeof Array.prototype.flat?nativeFlat:polyFlat;requireValidation=["$all","$allMatch","$and","$elemMatch","$exists","$in","$mod","$nin","$nor","$not","$or","$regex","$size","$type"];arrayTypeComparisonOperators=["$in","$nin","$mod","$all"];equalityOperators=["$eq","$gt","$gte","$lt","$lte"];abstractMapper=index_es_default5("indexes",function mapper2(mapFunDef,emit2){return createMapper(Object.keys(mapFunDef.fields),emit2,mapFunDef.partial_filter_selector)},function reducer2(){throw new Error("reduce not supported")},function ddocValidator2(ddoc,viewName){const view=ddoc.views[viewName];if(!view.map||!view.map.fields)throw new Error("ddoc "+ddoc._id+" with view "+viewName+" doesn't have map.fields defined. maybe it wasn't created by this plugin?")});ddocIdPrefix=/^_design\//;SHORT_CIRCUIT_QUERY={queryOpts:{limit:0,startkey:COLLATE_HI={"￿":{}},endkey:COLLATE_LO=null},inMemoryFields:[]};logicalMatchers=["$eq","$gt","$gte","$lt","$lte"];(plugin2={}).createIndex=resolveToCallback(async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide an index to create");return(isRemote(this)?createIndex:createIndex$1)(this,requestDef)});plugin2.find=resolveToCallback(async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide search parameters to find()");return(isRemote(this)?find:find$1)(this,requestDef)});plugin2.explain=resolveToCallback(async function(requestDef){if("object"!=typeof requestDef)throw new Error("you must provide search parameters to explain()");return(isRemote(this)?explain:explain$1)(this,requestDef)});plugin2.getIndexes=resolveToCallback(async function(){return(isRemote(this)?getIndexes:getIndexes$1)(this)});plugin2.deleteIndex=resolveToCallback(async function(indexDef){if("object"!=typeof indexDef)throw new Error("you must provide an index to delete");return(isRemote(this)?deleteIndex:deleteIndex$1)(this,indexDef)});index_browser_es_default3=plugin2;import_transform_pouch=__toESM(require_transform_pouch(),1);index_es_default.plugin(index_es_default2).plugin(index_es_default3).plugin(index_es_default4).plugin(index_browser_es_default2).plugin(index_es_default8).plugin(index_browser_es_default3).plugin(import_transform_pouch.default);index_es_default.prototype.purgeMulti=adapterFun("_purgeMulti",function(docs,callback){if(void 0===this._purge)return callback(createError(UNKNOWN_ERROR,"Purge is not implemented in the "+this.adapter+" adapter."));const self3=this,tasks3=docs.map(param=>()=>new Promise((res2,rej)=>{const[docId,rev$$1]=param;self3._getRevisionTree(docId,(error,revs)=>{if(error)return res2([param,error]);if(!revs)return res2([param,createError(MISSING_DOC)]);let path2;try{path2=findPathToLeaf(revs,rev$$1)}catch(error2){return res2([param,error2.message||error2])}self3._purge(docId,path2,(error2,result)=>res2(error2?[param,error2]:[param,result]))})}));(async()=>{const retAll=(await mapAllTasksWithConcurrencyLimit(1,tasks3)).map(e3=>unwrapTaskResult(e3));await appendPurgeSeqs(self3,retAll.filter(e3=>"ok"in e3[1]).map(e3=>e3[0]));return Object.fromEntries(retAll.map(e3=>[e3[0][0],e3[1]]))})().then(result=>callback(void 0,result)).catch(error=>callback(error))});TrysteroReplicator=class{constructor(env,server){this._onSetup=!1;this.lastSeq="";this._isBroadcasting=!1;this.availableReplicationPairs=new Set;this._replicateToPeers=new Set;this._replicateFromPeers=new Set;this._watchingPeers=new Set;this._env=env;if(server)this.server=server;else try{if(!this.settings.P2P_Enabled){Logger("P2P is not enabled",LOG_LEVEL_VERBOSE);return}if(!this.settings.P2P_AppID)throw new Error("P2P App ID is not provided. We need it to establish the P2P connection");if(!this.settings.P2P_roomID||!this.settings.P2P_passphrase)throw new Error("Room ID and/or P2P Passphrase have not provided. We need them to establish the P2P connection");if(!this.settings.P2P_relays||0===this.settings.P2P_relays.length)throw new Error("No relay URIs provided. We need them to establish the P2P connection");this.server=new TrysteroReplicatorP2PServer(env)}catch(e3){Logger(e3 instanceof Error?e3.message:"Error while creating TrysteroReplicator",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);throw e3}}replicationStatus(){return{}}get settings(){return this._env.settings}get db(){return this._env.db}get deviceName(){return this._env.deviceName}get platform(){return this._env.platform}get confirm(){return this._env.confirm}async close(){var _a8;this.requestStatus();await(null==(_a8=this.server)?void 0:_a8.shutdown());this._replicateFromPeers.clear();this._replicateToPeers.clear();this._watchingPeers.clear();this.requestStatus();this.disconnectFromServer()}async open(){var _a8;this.allowReconnection();await(null==(_a8=this.server)?void 0:_a8.start([this.getCommands()]));this.dispatchStatus();this.settings.P2P_AutoBroadcast&&this.enableBroadcastChanges()}async makeSureOpened(){var _a8;(null==(_a8=this.server)?void 0:_a8.isServing)||await this.open()}get autoSyncPeers(){return this.settings.P2P_AutoSyncPeers.split(",").map(e3=>e3.trim()).filter(e3=>e3.length>0).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}get autoWatchPeers(){return this.settings.P2P_AutoWatchPeers.split(",").map(e3=>e3.trim()).filter(e3=>e3.length>0).map(e3=>e3.startsWith("~")?new RegExp(e3.substring(1),"i"):new RegExp(`^${e3}$`,"i"))}async onNewPeer(peer){const peerName=peer.name;this.autoSyncPeers.some(e3=>e3.test(peerName))&&await this.sync(peer.peerId);this.autoWatchPeers.some(e3=>e3.test(peerName))&&this.watchPeer(peer.peerId)}onPeerLeaved(peerId){this.unwatchPeer(peerId)}setOnSetup(){this._onSetup=!0}clearOnSetup(){this._onSetup=!1}async getTweakSettings(fromPeerId){var _a8;const allSettings=JSON.parse(JSON.stringify(this.settings));for(const key3 in allSettings)"encrypt"!=key3&&("passphrase"!=key3?key3 in TweakValuesShouldMatchedTemplate||delete allSettings[key3]:allSettings[key3]=await getHashedStringWithCurrentTime(null!=(_a8=allSettings[key3])?_a8:""));return allSettings}getCommands(){return{reqSync:async fromPeerId=>this._onSetup?{error:new Error("The setup is in progress")}:await this.replicateFrom(fromPeerId),"!reqAuth":async fromPeerId=>{var _a8;return await(null==(_a8=this.server)?void 0:_a8.isAcceptablePeer(fromPeerId))},getTweakSettings:async fromPeerId=>await this.getTweakSettings(fromPeerId),onProgress:async fromPeerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};await this.onUpdateDatabase(fromPeerId)},getAllConfig:async fromPeerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};const passphrase=await skipIfDuplicated(`getAllConfig-${fromPeerId}`,async()=>await this.confirm.askString("Passphrase required",$msg("P2P.AskPassphraseForShare"),"something you only know",!0)),setting={...this.settings,configPassphraseStore:"",encryptedCouchDBConnection:"",encryptedPassphrase:"",pluginSyncExtendedSetting:{}};if(!passphrase||""==passphrase.trim()){Logger("Passphrase is required to transfer the configuration. The peer cannot be decrypt the config\nIf you repeatedly receive unintended configuration-sharing requests, change the RPC channel immediately. It allows you to leave the connection and disappear, while they are trying brute force attack for the decoy on their local.",LOG_LEVEL_NOTICE);return encrypt5(JSON.stringify(Object.fromEntries(Object.entries(setting).map(([key3,value])=>[key3,"******".repeat(Math.ceil(10*Math.random())+2)]))),Math.random().toString(36).substring(7))}return encrypt5(JSON.stringify(setting),passphrase.trim())},onProgressAcknowledged:async(fromPeerId,info3)=>{try{await this.onProgressAcknowledged(fromPeerId,info3)}catch(e3){Logger("Error while acknowledging the progress",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}},getIsBroadcasting:()=>Promise.resolve(this._isBroadcasting),requestBroadcasting:async peerId=>{if(this._onSetup)return{error:new Error("The setup is in progress")};if(this._isBroadcasting)return!0;"yes"===await skipIfDuplicated(`requested-${peerId}`,async()=>await this.confirm.askYesNoDialog("The remote peer requested to broadcast the changes. Do you want to allow it?",{defaultOption:"No"}))&&this.enableBroadcastChanges()}}}async requestAuthenticate(peerId){if(!this.server)return!1;try{const connection=this.server.getConnection(peerId),selfPeerId=this.server.serverPeerId;return await connection.invokeRemoteObjectFunction("!reqAuth",[selfPeerId],2e4)}catch(e3){Logger("Error while requesting authentication",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE);return!1}}async selectPeer(){if(!this.server)return!1;const knownPeers=this.server.knownAdvertisements;if(0===knownPeers.length){Logger("No known peers",LOG_LEVEL_VERBOSE);return!1}const peers=[...Object.entries(knownPeers)].map(([peerId,info3])=>`${info3.peerId}: (${info3.name})`),selectedPeer=await this.confirm.askSelectString("Select a peer to replicate",peers);return!!selectedPeer&&selectedPeer.split("")[0]}async requestSynchroniseToPeer(peerId){await delay(25);if(!this.server)throw new Error("Server is not available");const conn=this.server.getConnection(peerId);return await conn.invokeRemoteFunction("reqSync",[this.server.serverPeerId],0)}async requestSynchroniseToAllAvailablePeers(){await scheduleOnceIfDuplicated("requestSynchroniseToAllAvailablePeers",async()=>{await delay(25);const replications=[...this.availableReplicationPairs].map(peerId=>this.requestSynchroniseToPeer(peerId));await Promise.all(replications)})}dispatchStatus(){eventHub.emitEvent(EVENT_P2P_REPLICATOR_STATUS,{isBroadcasting:this._isBroadcasting,replicatingTo:[...this._replicateToPeers],replicatingFrom:[...this._replicateFromPeers],watchingPeers:[...this._watchingPeers]})}requestStatus(){var _a8;this.dispatchStatus();null==(_a8=this.server)||_a8.dispatchConnectionStatus()}disableBroadcastChanges(){var _a8;null==(_a8=this.changes)||_a8.cancel();this._isBroadcasting=!1;this.dispatchStatus()}enableBroadcastChanges(){if(this._isBroadcasting)return;this._isBroadcasting=!0;this.dispatchStatus();if(this.changes){this.changes.cancel();this.changes.removeAllListeners()}this.changes=this.db.changes({since:"now",live:!0,include_docs:!1,selector:{_id:{$gt:"_local/"}}});this.changes.on("change",async change=>{this.lastSeq=change.seq;await this.notifyProgress()});const closeChanges=reason=>{var _a8,_b5;if(reason)if(reason instanceof Error){Logger("Error while broadcasting the changes",LOG_LEVEL_INFO);Logger(reason,LOG_LEVEL_VERBOSE)}else{Logger("Broadcasting the changes has been finished",LOG_LEVEL_INFO);Logger(reason,LOG_LEVEL_VERBOSE)}null==(_a8=this.changes)||_a8.cancel();null==(_b5=this.changes)||_b5.removeAllListeners();this.changes=void 0;this._isBroadcasting=!1;this.dispatchStatus()};this.changes.on("error",closeChanges);this.changes.on("complete",closeChanges);fireAndForget(async()=>await this.notifyProgress())}get knownAdvertisements(){var _a8,_b5;return null!=(_b5=null==(_a8=this.server)?void 0:_a8.knownAdvertisements)?_b5:[]}async sync(remotePeer,showNotice=!1){const from=await this.replicateFrom(remotePeer,showNotice);if(!from||from.error){Logger("Error while replicating from the remote",LOG_LEVEL_VERBOSE);Logger(from.error,LOG_LEVEL_VERBOSE);return from}const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger(`P2P Replication has been requested to ${remotePeer}`,logLevel,"p2p-replicator");const res2=await this.requestSynchroniseToPeer(remotePeer);res2.ok&&Logger("P2P Replication has been done",logLevel,"p2p-replicator");if(res2.error){Logger("Error while syncing from the remote",logLevel,"p2p-replicator");Logger(res2.error,LOG_LEVEL_VERBOSE)}}async replicateTo(){await this.makeSureOpened();const remotePeer=await this.selectPeer();if(remotePeer){Logger(`P2P Replicating to ${remotePeer}`,LOG_LEVEL_INFO);try{if(this._replicateToPeers.has(remotePeer)){Logger(`Replication to ${remotePeer} is already in progress`,LOG_LEVEL_VERBOSE);return}this._replicateToPeers.add(remotePeer);this.dispatchStatus();return await this.requestSynchroniseToPeer(remotePeer)}finally{this._replicateToPeers.delete(remotePeer);this.dispatchStatus()}}else Logger("No peer selected",LOG_LEVEL_VERBOSE)}dispatchReplicationProgress(peerId,info3){this.onReplicationProgress(peerId,info3)}onReplicationProgress(peerId,info3){var _a8,_b5;const stat={peerId,peerName:(null==(_b5=null==(_a8=this.server)?void 0:_a8._knownAdvertisements.get(peerId))?void 0:_b5.name)||peerId,fetching:{max:0,current:0,isActive:!1}};info3&&(stat.fetching={max:info3.maxSeqInBatch,current:info3.lastSeq,isActive:!0});eventHub.emitEvent("p2p-replicator-progress",stat);return!0}onProgressAcknowledged(peerId,info3){var _a8,_b5;const ack={peerId,peerName:(null==(_b5=null==(_a8=this.server)?void 0:_a8._knownAdvertisements.get(peerId))?void 0:_b5.name)||peerId,sending:{max:0,current:0,isActive:!1}};info3&&(ack.sending={max:info3.maxSeqInBatch,current:info3.lastSeq,isActive:!0});eventHub.emitEvent("p2p-replicator-progress",ack);return!0}acknowledgeProgress(remotePeerId,info3){this.server&&this.server.getConnection(remotePeerId).invokeRemoteFunction("onProgressAcknowledged",[this.server.serverPeerId,info3],500).catch(ex=>{Logger("Error while acknowledging the progress",LOG_LEVEL_VERBOSE);Logger(ex,LOG_LEVEL_VERBOSE)})}async replicateFrom(remotePeer,showNotice=!1,fromStart=!1){const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;Logger(`P2P Requesting Authentication to ${remotePeer}`,logLevel,"p2p-replicator");if(!0!==await this.requestAuthenticate(remotePeer)){Logger("Peer rejected the connection",LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Peer rejected the connection")}}if(!0!==await this.checkTweakValues(remotePeer)){Logger("Tweak values are not matched",LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Tweak values are not matched")}}Logger(`P2P Replicating from ${remotePeer}`,logLevel,"p2p-replicator");if(this._replicateFromPeers.has(remotePeer)){Logger(`Replication from ${remotePeer} is already in progress`,LOG_LEVEL_NOTICE,"p2p-replicator");return{error:new Error("Replication from this peer is already in progress")}}this._replicateFromPeers.add(remotePeer);this.dispatchStatus();try{if(!this.server)throw new Error("Server is not available");const remoteDB=this.server.getConnection(remotePeer).remoteDB;Logger(`P2P replicateFrom preparing remote DB info for ${remotePeer}`,LOG_LEVEL_VERBOSE,"p2p-replicator");const remoteDBInfo=await remoteDB.info();Logger(`P2P replicateFrom remote DB info for ${remotePeer}: ${remoteDBInfo.db_name} seq=${remoteDBInfo.update_seq}`,LOG_LEVEL_VERBOSE,"p2p-replicator");const localDBInfo=await this.db.info();Logger(`P2P replicateFrom local DB info for ${remotePeer}: ${localDBInfo.db_name} seq=${localDBInfo.update_seq}`,LOG_LEVEL_VERBOSE,"p2p-replicator");Logger(`P2P replicateFrom entering replicateShim for ${remotePeer}`,LOG_LEVEL_VERBOSE,"p2p-replicator");await replicateShim(this.db,remoteDB,async(docs,info3)=>{await this._env.processReplicatedDocs(docs);this.dispatchReplicationProgress(remotePeer,info3);this.acknowledgeProgress(remotePeer,info3);this.notifyProgress(remotePeer);Logger(`P2P Replication from ${remotePeer}\n${info3.lastSeq} / ${info3.maxSeqInBatch})`,logLevel,"p2p-replicator")},{live:!1,rewind:fromStart});Logger(`P2P replicateFrom replicateShim returned for ${remotePeer}`,LOG_LEVEL_VERBOSE,"p2p-replicator");this.acknowledgeProgress(remotePeer,void 0);Logger(`P2P Replication from ${remotePeer} has been completed`,logLevel,"p2p-replicator")}catch(e3){Logger("Error while P2P replicating",logLevel,"p2p-replicator");Logger(e3,LOG_LEVEL_VERBOSE);return{error:e3}}finally{this._replicateFromPeers.delete(remotePeer);this.dispatchStatus()}return{ok:!0}}notifyProgress(excludePeerId){if(this._isBroadcasting&&this.server){for(const peer of this.server.knownAdvertisements){const peerId=peer.peerId;peerId!==excludePeerId&&serialized(`notifyProgress-${peerId}`,async()=>{var _a8,_b5,_c3;if(await(null==(_a8=this.server)?void 0:_a8.isAcceptablePeer(peerId)))try{return await(null==(_c3=this.server)?void 0:_c3.getConnection(peerId).invokeRemoteFunction("onProgress",[null==(_b5=this.server)?void 0:_b5.serverPeerId],0))}catch(e3){Logger(`Error while notifying progress to ${peerId}`,LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}else Logger(`Peer ${peerId} is not acceptable to notify progress`,LOG_LEVEL_VERBOSE)})}return Promise.resolve()}}async requestBroadcastChanges(peerId){var _a8;return await(null==(_a8=this.server)?void 0:_a8.getConnection(peerId).invokeRemoteFunction("requestBroadcasting",[this.server.serverPeerId],0))}async getRemoteIsBroadcasting(peerId){var _a8;try{return await(null==(_a8=this.server)?void 0:_a8.getConnection(peerId).invokeRemoteFunction("getIsBroadcasting",[],0))}catch(e3){Logger("Error while getting remote is broadcasting",LOG_LEVEL_VERBOSE);Logger(e3,LOG_LEVEL_VERBOSE)}}watchPeer(peerId){this._watchingPeers.add(peerId);this.dispatchStatus()}unwatchPeer(peerId){this._watchingPeers.delete(peerId);this.dispatchStatus()}async onUpdateDatabase(fromPeerId){if(this._watchingPeers.has(fromPeerId)){Logger(`Progress notification from ${fromPeerId}`,LOG_LEVEL_VERBOSE);return await serialized(`onProgress-${fromPeerId}`,async()=>await this.replicateFrom(fromPeerId))}return!1}async getRemoteConfig(peerId){if(!this.server){Logger("Server is not available",LOG_LEVEL_NOTICE);return!1}const connection=this.server.getConnection(peerId),encryptedConfig=await connection.invokeRemoteFunction("getAllConfig",[this.server.serverPeerId],0),passphrase=await this.confirm.askString("Passphrase required",$msg("P2P.AskPassphraseForDecrypt"),"something you only know",!0);if(!passphrase||""==passphrase.trim()){Logger("Passphrase is required to decrypt the configuration. The config cannot be decrypted",LOG_LEVEL_NOTICE);return!1}try{return JSON.parse(await decrypt5(encryptedConfig,passphrase))}catch(e3){Logger("Error while decrypting the configuration",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);return!1}}async checkTweakValues(peerId){var _a8;if(!this.server){Logger("Server is not available",LOG_LEVEL_NOTICE);return!1}const peerPlatform=null==(_a8=this.server.knownAdvertisements.find(e3=>e3.peerId==peerId))?void 0:_a8.platform;if(null==peerPlatform){Logger("Peer is not found",LOG_LEVEL_NOTICE);return!1}if("pseudo-replicator"===this.platform)return!0;if("pseudo-replicator"===peerPlatform)return!0;const connection=this.server.getConnection(peerId),tweakValues=await connection.invokeRemoteObjectFunction("getTweakSettings",[this.server.serverPeerId],5e3),thisTweakValues=await this.getTweakSettings("");if(!isObjectDifferent(thisTweakValues,tweakValues))return!0;if(thisTweakValues.passphrase!==tweakValues.passphrase){Logger("Replication cancelled: Passphrase is not matched\nCannot replicate to a remote database until the problem is resolved.",LOG_LEVEL_NOTICE);return!1}Logger("Some mismatched configuration have been detected... Please check settings for efficient replication.",LOG_LEVEL_NOTICE);return!0}async replicateFromCommand(showResult=!1){null===await skipIfDuplicated("replicateFromCommand",async()=>{var _a8;const logLevel=showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if(!this._env.settings.P2P_Enabled){Logger($msg("P2P.NotEnabled"),logLevel);return Promise.resolve(!1)}const peers=this._env.settings.P2P_SyncOnReplication.split(",").map(e3=>e3.trim()).filter(e3=>e3);if(0==peers.length){Logger($msg("P2P.NoAutoSyncPeers"),logLevel);return Promise.resolve(!1)}for(const peer of peers){const peerId=null==(_a8=this.knownAdvertisements.find(e3=>e3.name==peer))?void 0:_a8.peerId;if(peerId){Logger($msg("P2P.SyncStartedWith",{name:peer}),logLevel);await this.sync(peerId,showResult)}else Logger($msg("P2P.SeemsOffline",{name:peer}),logLevel)}Logger($msg("P2P.SyncCompleted"),logLevel);return Promise.resolve(!0)})&&Logger($msg("P2P.SyncAlreadyRunning"),LOG_LEVEL_NOTICE)}disconnectFromServer(){const connections=getRelaySockets(),sockets=Object.entries(connections);pauseRelayReconnection();sockets.forEach(([,s2])=>{s2.close();s2.onclose=()=>{var _a8;null==(_a8=this.server)||_a8.dispatchConnectionStatus()}});this.pauseServe()}async pauseServe(){var _a8,_b5;await(null==(_a8=this.server)?void 0:_a8.close());await(null==(_b5=this.server)?void 0:_b5.dispatchConnectionStatus())}allowReconnection(){resumeRelayReconnection()}};root_214=from_html('<input type="checkbox" name="p2p-enabled"/>');on_click3=(_,setDefaultRelay)=>setDefaultRelay();root_34=from_html('<input type="text" name="p2p-relay-url" placeholder="Enter the Relay URL)" autocorrect="off" autocapitalize="off" spellcheck="false"/> <button class="button">Use vrtmrz\'s relay</button>',1);on_click_1=(__1,generateDefaultGroupId)=>generateDefaultGroupId();root_411=from_html('<input type="text" name="p2p-room-id" placeholder="123-456-789-abc" autocorrect="off" autocapitalize="off" spellcheck="false"/> <button class="button">Generate Random ID</button>',1);root_66=from_html("The Group ID and passphrase are used to identify your group of devices. Make sure to use the same Group ID and\n passphrase on all devices you want to synchronise.<br/> Note that the Group ID is not limited to the generated format; you can use any string as the Group ID.",1);root_77=from_html('<input type="text" name="p2p-device-peer-id" placeholder="main-iphone16" autocorrect="off" autocapitalize="off" spellcheck="false"/>');root_87=from_html('<input type="checkbox" name="p2p-auto-start"/>');root_103=from_html('<input type="checkbox" name="p2p-auto-broadcast"/>');root_153=from_html('<textarea name="p2p-turn-servers" placeholder="turn:turn.example.com:3478,turn:turn.example.com:443" autocapitalize="off" spellcheck="false" rows="5"></textarea>');root_163=from_html('<input type="text" name="p2p-turn-username" placeholder="Enter TURN username" autocorrect="off" autocapitalize="off" spellcheck="false"/>');root_124=from_html("<!> <!> <!> <!> <!>",1);root_215=from_html("<!> <!> <!>",1);root29=from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1);delegate(["click"]);root_216=from_html('<input type="checkbox"/> <!>',1);root_35=from_html("Enabling end-to-end encryption ensures that your data is encrypted on your device before being sent to the remote\n server. This means that even if someone gains access to the server, they won't be able to read your data without the\n passphrase. Make sure to remember your passphrase, as it will be required to decrypt your data on other devices. <br/> Also, please note that if you are using Peer-to-Peer synchronization, this configuration will be used when you switch\n to other methods and connect to a remote server in the future.",1);root_53=from_html('<input type="checkbox"/>');root_94=from_html("<option> </option>");root_88=from_html("<select></select>");root_78=from_html("<!> <!> <!>",1);root_125=from_html("<p>Please be aware that the End-to-End Encryption passphrase is not validated until the synchronisation process\n actually commences. This is a security measure designed to protect your data.</p> <p>Therefore, we ask that you exercise extreme caution when configuring server information manually. If an\n incorrect passphrase is entered, the data on the server will become corrupted. <br/><br/> Please understand that this is intended behaviour.</p>",1);root_135=from_html("<!> <!>",1);root30=from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1);import_qrcode_generator=__toESM(require_qrcode(),1);OutputFormat=(OutputFormat2=>{OutputFormat2[OutputFormat2.SVG=0]="SVG";OutputFormat2[OutputFormat2.ASCII=1]="ASCII";return OutputFormat2})(OutputFormat||{});necessaryErasureProperties=["configPassphraseStore","encryptedCouchDBConnection","encryptedPassphrase"];UserMode=(UserMode2=>{UserMode2.NewUser="new-user";UserMode2.ExistingUser="existing-user";UserMode2.Unknown="unknown";UserMode2.Update="unknown";return UserMode2})(UserMode||{});SetupManager=class extends AbstractModule{get dialogManager(){return this.services.UI.dialogManager}async startOnBoarding(){const isUserNewOrExisting=await this.dialogManager.openWithExplicitCancel(Intro);if("new-user"===isUserNewOrExisting)await this.onOnboard("new-user");else if("existing-user"===isUserNewOrExisting)await this.onOnboard("existing-user");else if("cancelled"===isUserNewOrExisting){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}return!1}async onOnboard(userMode){const originalSetting="new-user"===userMode?DEFAULT_SETTINGS:this.core.settings;if("new-user"===userMode){const method=await this.dialogManager.openWithExplicitCancel(SelectMethodNewUser);if("use-setup-uri"===method)await this.onUseSetupURI(userMode);else if("configure-manually"===method)await this.onConfigureManually(originalSetting,userMode);else if("cancelled"===method){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}}else if("existing-user"===userMode){const method=await this.dialogManager.openWithExplicitCancel(SelectMethodExisting);if("use-setup-uri"===method)await this.onUseSetupURI(userMode);else if("configure-manually"===method)await this.onConfigureManually(originalSetting,userMode);else if("scan-qr-code"===method)await this.onPromptQRCodeInstruction();else if("cancelled"===method){this._log("Onboarding cancelled by user.",LOG_LEVEL_NOTICE);return!1}}return!1}async onUseSetupURI(userMode,setupURI=""){const newSetting=await this.dialogManager.openWithExplicitCancel(UseSetupURI,setupURI);if("cancelled"===newSetting){this._log("Setup URI dialog cancelled.",LOG_LEVEL_NOTICE);return!1}this._log("Setup URI dialog closed.",LOG_LEVEL_VERBOSE);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode)}async onCouchDBManualSetup(userMode,currentSetting,activate=!0){const originalSetting=JSON.parse(JSON.stringify(currentSetting)),baseSetting=JSON.parse(JSON.stringify(originalSetting)),couchConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteCouchDB,originalSetting);if("cancelled"===couchConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...baseSetting,...couchConf};activate&&(newSetting.remoteType=REMOTE_COUCHDB);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onBucketManualSetup(userMode,currentSetting,activate=!0){const bucketConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteBucket,currentSetting);if("cancelled"===bucketConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...currentSetting,...bucketConf};activate&&(newSetting.remoteType=REMOTE_MINIO);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onP2PManualSetup(userMode,currentSetting,activate=!0){const p2pConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteP2P,currentSetting);if("cancelled"===p2pConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const newSetting={...currentSetting,...p2pConf};activate&&(newSetting.remoteType=REMOTE_P2P);return await this.onConfirmApplySettingsFromWizard(newSetting,userMode,activate)}async onlyE2EEConfiguration(userMode,currentSetting){const e2eeConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE,currentSetting);if("cancelled"===e2eeConf){this._log("E2EE configuration cancelled.",LOG_LEVEL_NOTICE);return await!1}const newSetting={...currentSetting,...e2eeConf};return await this.onConfirmApplySettingsFromWizard(newSetting,userMode)}async onConfigureManually(originalSetting,userMode){const e2eeConf=await this.dialogManager.openWithExplicitCancel(SetupRemoteE2EE,originalSetting);if("cancelled"===e2eeConf){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);return await this.onOnboard(userMode)}const currentSetting={...originalSetting,...e2eeConf};return await this.onSelectServer(currentSetting,userMode)}async onSelectServer(currentSetting,userMode){const method=await this.dialogManager.openWithExplicitCancel(SetupRemote);if("couchdb"===method)return await this.onCouchDBManualSetup(userMode,currentSetting,!0);if("bucket"===method)return await this.onBucketManualSetup(userMode,currentSetting,!0);if("p2p"===method)return await this.onP2PManualSetup(userMode,currentSetting,!0);if("cancelled"===method){this._log("Manual configuration cancelled.",LOG_LEVEL_NOTICE);if("unknown"!==userMode)return await this.onOnboard(userMode)}return!1}async onConfirmApplySettingsFromWizard(newConf,_userMode,activate=!0,extra=()=>{}){newConf=await this.services.setting.adjustSettings({...this.settings,...newConf});let userMode=_userMode;if("unknown"===userMode){if(!1===isObjectDifferent(this.settings,newConf,!0)){this._log("No changes in settings detected. Skipping applying settings from wizard.",LOG_LEVEL_NOTICE);return!0}const patch=generatePatchObj(this.settings,newConf);console.log("Changes:");console.dir(patch);if(!activate){extra();await this.applySetting(newConf,"existing-user");this._log("Setting Applied",LOG_LEVEL_NOTICE);return!0}if(!1===isObjectDifferent({...this.settings,P2P_DevicePeerName:""},{...newConf,P2P_DevicePeerName:""},!0)){extra();await this.applySetting(newConf,"existing-user");this._log("Settings from wizard applied.",LOG_LEVEL_NOTICE);return!0}{const userModeResult=await this.dialogManager.openWithExplicitCancel(OutroAskUserMode);if("new-user"===userModeResult)userMode="new-user";else if("existing-user"===userModeResult)userMode="existing-user";else{if("compatible-existing-user"===userModeResult){extra();await this.applySetting(newConf,"existing-user");this._log("Settings from wizard applied.",LOG_LEVEL_NOTICE);return!0}if("cancelled"===userModeResult){this._log("User cancelled applying settings from wizard.",LOG_LEVEL_NOTICE);return!1}}}}const component2="new-user"===userMode?OutroNewUser:OutroExistingUser,confirm=await this.dialogManager.openWithExplicitCancel(component2);if("cancelled"===confirm){this._log("User cancelled applying settings from wizard..",LOG_LEVEL_NOTICE);return!1}if(confirm){extra();await this.applySetting(newConf,userMode);"new-user"===userMode?await this.core.rebuilder.scheduleRebuild():await this.core.rebuilder.scheduleFetch()}return!1}async onPromptQRCodeInstruction(){const qrResult=await this.dialogManager.open(ScanQRCode);this._log("QR Code dialog closed.",LOG_LEVEL_VERBOSE);this._log(`QR Code result: ${qrResult}`,LOG_LEVEL_VERBOSE);return!1}async decodeQR(qr){const newSettings=decodeSettingsFromQRCodeData(qr);return await this.onConfirmApplySettingsFromWizard(newSettings,"unknown")}async applySetting(newConf,userMode){this.services.setting.clearUsedPassphrase();await this.services.setting.applyExternalSettings(newConf,!0);return!0}};SveltePanel=class{constructor(component2,mountTo,valueStore){this._componentValue=writable(void 0);this._componentValue=null!=valueStore?valueStore:writable(void 0);this._mountedComponent=mount(component2,{target:mountTo,props:{port:this._componentValue}});return this}destroy(){this._mountedComponent&&unmount(this._mountedComponent)}get componentValue(){return get2(this._componentValue)}set componentValue(value){this._componentValue.set(value)}};root_121=from_html('<div class="info-entry info-key svelte-xi83q0" role="listitem"><div class="key"> </div></div> <div class="info-entry info-item svelte-xi83q0" role="listitem"><div class="value svelte-xi83q0"> </div></div>',1);root31=from_html('<div class="info-panel svelte-xi83q0"><div class="info-grid svelte-xi83q0" role="list"></div></div>');$$css11={hash:"svelte-xi83q0",code:'.info-panel.svelte-xi83q0 {padding:0.6rem;flex-grow:1;}\n\n /* Main Grid (Info Items) 120px to 1fr, repeat */.info-grid.svelte-xi83q0 {display:grid;grid-template-columns:minmax(120px, 1fr) 1fr;column-count:2;gap:0.6rem;margin-top:0.5rem;grid-area:"info-key" "info-value";}.info-entry.svelte-xi83q0 {display:grid;gap:0.5rem;border-radius:6px;box-sizing:border-box;min-height:1.2em;}.info-key.svelte-xi83q0 {font-weight:600;align-items:center;border-top:1px solid var(--background-modifier-hover);border-bottom:1px solid var(--background-modifier-hover);grid-area:"info-key";}.info-item.svelte-xi83q0 {align-items:start;padding:0.5rem;background:var(--background-modifier-hover, rgba(0, 0, 0, 0.03));grid-area:"info-value";}.value.svelte-xi83q0 {white-space:pre-wrap;word-break:break-word;color:var(--text-normal, #e6e6e6);min-height:1em;}\n\n @container (max-width: 340px) {.info-grid.svelte-xi83q0 {grid-template-columns:1fr;}.info-item.svelte-xi83q0 {grid-template-columns:1fr;}\n }'};ConnectionStringParser=class{static parse(uriString){const url=new URL(uriString),protocol=url.protocol.replace(":","");switch(protocol){case"sls+http":case"sls+https":return{type:"couchdb",settings:this.parseCouchDB(url)};case"sls+s3":return{type:"s3",settings:this.parseS3(url)};case"sls+p2p":return{type:"p2p",settings:this.parseP2P(url)};default:throw new Error(`Unsupported protocol: ${protocol}`)}}static serialize(config){switch(config.type){case"couchdb":return this.serializeCouchDB(config.settings);case"s3":return this.serializeS3(config.settings);case"p2p":return this.serializeP2P(config.settings);default:throw new Error(`Unsupported type: ${config.type}`)}}static parseCouchDB(url){return{couchDB_URI:`${(url.protocol.split("+")[1]||"https").replace(":","")}://${url.host}${"/"===url.pathname?"":url.pathname}`,couchDB_USER:decodeURIComponent(url.username),couchDB_PASSWORD:decodeURIComponent(url.password),couchDB_DBNAME:url.searchParams.get("db")||"",couchDB_CustomHeaders:url.searchParams.get("headers")||"",useJWT:"true"===url.searchParams.get("useJWT"),jwtAlgorithm:url.searchParams.get("jwtAlg")||"",jwtKey:url.searchParams.get("jwtKey")||"",jwtKid:url.searchParams.get("jwtKid")||"",jwtSub:url.searchParams.get("jwtSub")||"",jwtExpDuration:parseInt(url.searchParams.get("jwtExp")||"5"),useRequestAPI:"true"===url.searchParams.get("useRequestAPI")}}static serializeCouchDB(settings){const url=new URL(settings.couchDB_URI),newUrl=new URL(`sls+${url.protocol.replace(":","")}://${url.host}${url.pathname}`);newUrl.username=encodeURIComponent(settings.couchDB_USER);newUrl.password=encodeURIComponent(settings.couchDB_PASSWORD);newUrl.searchParams.set("db",settings.couchDB_DBNAME);settings.couchDB_CustomHeaders&&newUrl.searchParams.set("headers",settings.couchDB_CustomHeaders);if(settings.useJWT){newUrl.searchParams.set("useJWT","true");newUrl.searchParams.set("jwtAlg",settings.jwtAlgorithm);settings.jwtKey&&newUrl.searchParams.set("jwtKey",settings.jwtKey);settings.jwtKid&&newUrl.searchParams.set("jwtKid",settings.jwtKid);settings.jwtSub&&newUrl.searchParams.set("jwtSub",settings.jwtSub);newUrl.searchParams.set("jwtExp",`${settings.jwtExpDuration||5}`)}settings.useRequestAPI&&newUrl.searchParams.set("useRequestAPI","true");return newUrl.toString()}static parseS3(url){const endpoint=url.searchParams.get("endpoint")||`https://${url.host}`;return{accessKey:decodeURIComponent(url.username),secretKey:decodeURIComponent(url.password),endpoint,bucket:url.searchParams.get("bucket")||"",region:url.searchParams.get("region")||"auto",bucketPrefix:url.searchParams.get("prefix")||"",useCustomRequestHandler:"true"===url.searchParams.get("useProxy"),bucketCustomHeaders:url.searchParams.get("headers")||"",forcePathStyle:"false"!==url.searchParams.get("pathStyle")}}static serializeS3(settings){const url=new URL(settings.endpoint),newUrl=new URL(`sls+s3://${url.host}`);newUrl.username=encodeURIComponent(settings.accessKey);newUrl.password=encodeURIComponent(settings.secretKey);newUrl.searchParams.set("endpoint",settings.endpoint);newUrl.searchParams.set("bucket",settings.bucket);newUrl.searchParams.set("region",settings.region);settings.bucketPrefix&&newUrl.searchParams.set("prefix",settings.bucketPrefix);settings.bucketCustomHeaders&&newUrl.searchParams.set("headers",settings.bucketCustomHeaders);settings.useCustomRequestHandler&&newUrl.searchParams.set("useProxy","true");settings.forcePathStyle||newUrl.searchParams.set("pathStyle","false");return newUrl.toString()}static parseP2P(url){return{P2P_Enabled:"false"!==url.searchParams.get("enabled"),P2P_roomID:decodeURIComponent(url.host),P2P_passphrase:decodeURIComponent(url.password),P2P_relays:url.searchParams.get("relays")||"",P2P_AppID:url.searchParams.get("appId")||"self-hosted-livesync",P2P_AutoStart:"true"===url.searchParams.get("autoStart"),P2P_AutoBroadcast:"true"===url.searchParams.get("autoBroadcast"),P2P_turnServers:url.searchParams.get("turnServers")||"",P2P_turnUsername:url.searchParams.get("turnUser")||"",P2P_turnCredential:url.searchParams.get("turnPass")||""}}static serializeP2P(settings){const newUrl=new URL(`sls+p2p://${encodeURIComponent(settings.P2P_roomID)}`);newUrl.password=encodeURIComponent(settings.P2P_passphrase);settings.P2P_Enabled||newUrl.searchParams.set("enabled","false");newUrl.searchParams.set("relays",settings.P2P_relays);newUrl.searchParams.set("appId",settings.P2P_AppID);settings.P2P_AutoStart&&newUrl.searchParams.set("autoStart","true");settings.P2P_AutoBroadcast&&newUrl.searchParams.set("autoBroadcast","true");settings.P2P_turnServers&&newUrl.searchParams.set("turnServers",settings.P2P_turnServers);settings.P2P_turnUsername&&newUrl.searchParams.set("turnUser",settings.P2P_turnUsername);settings.P2P_turnCredential&&newUrl.searchParams.set("turnPass",settings.P2P_turnCredential);return newUrl.toString()}};root_126=from_html('<li class="svelte-9kxeje"><label class="svelte-9kxeje"> </label> <span class="chip svelte-9kxeje"> </span> <input type="text"/> <button class="iconbutton svelte-9kxeje">🗑</button></li>');root32=from_html('<ul class="svelte-9kxeje"><!> <li class="svelte-9kxeje"><label class="svelte-9kxeje"><button>Add</button></label></li> <li class="buttons svelte-9kxeje"><button>Apply</button> <button>Revert</button></li></ul>');$$css12={hash:"svelte-9kxeje",code:"label.svelte-9kxeje {min-width:4em;width:4em;display:inline-flex;flex-direction:row;justify-content:flex-end;}ul.svelte-9kxeje {flex-grow:1;display:inline-flex;flex-direction:column;list-style-type:none;margin-block-start:0;margin-block-end:0;margin-inline-start:0;margin-inline-end:0;padding-inline-start:0;}li.svelte-9kxeje {padding:var(--size-2-1) var(--size-4-1);display:inline-flex;flex-grow:1;align-items:center;justify-content:flex-end;gap:var(--size-4-2);}li.svelte-9kxeje input:where(.svelte-9kxeje) {min-width:10em;}button.iconbutton.svelte-9kxeje {max-width:4em;}.chip.svelte-9kxeje {background-color:var(--tag-background);color:var(--tag-color);padding:var(--size-2-1) var(--size-4-1);border-radius:0.5em;font-size:0.8em;}.chip.svelte-9kxeje:empty {display:none;}"};EVENT_REQUEST_SHOW_HISTORY="show-history";toc=new Set;stubs={};ObsidianLiveSyncSettingTab=class extends import_obsidian.PluginSettingTab{constructor(app,plugin3){super(app,plugin3);this.selectedScreen="";this.settingComponents=[];this.controlledElementFunc=[];this.onSavedHandlers=[];this.inWizard=!1;this.isShown=!1;this.manifestVersion="0.25.57";this.lastVersion=~~(versionNumberString2Number(this.manifestVersion)/1e3);this.screenElements={};this.enableOnlySyncDisabled=enableOnly(()=>!this.isAnySyncEnabled());this.onlyOnP2POrCouchDB=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_P2P)||this.isConfiguredAs("remoteType",REMOTE_COUCHDB)});this.onlyOnCouchDB=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_COUCHDB)});this.onlyOnMinIO=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_MINIO)});this.onlyOnOnlyP2P=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_P2P)});this.onlyOnCouchDBOrMinIO=()=>({visibility:this.isConfiguredAs("remoteType",REMOTE_COUCHDB)||this.isConfiguredAs("remoteType",REMOTE_MINIO)});this.checkWorkingPassphrase=async()=>{if(this.editingSettings.remoteType==REMOTE_MINIO)return!0;const settingForCheck={...this.editingSettings},replicator=this.services.replicator.getNewReplicator(settingForCheck);if(!(replicator instanceof LiveSyncCouchDBReplicator))return!0;const db=await replicator.connectRemoteCouchDBWithSetting(settingForCheck,this.services.API.isMobile(),!0);if("string"==typeof db){Logger($msg("obsidianLiveSyncSettingTab.logCheckPassphraseFailed",{db}),LOG_LEVEL_NOTICE);return!1}if(await checkSyncInfo(db.db))return!0;Logger($msg("obsidianLiveSyncSettingTab.logPassphraseNotCompatible"),LOG_LEVEL_NOTICE);return!1};this.isPassphraseValid=async()=>{if(this.editingSettings.encrypt&&""==this.editingSettings.passphrase){Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoPassphrase"),LOG_LEVEL_NOTICE);return!1}if(this.editingSettings.encrypt&&!await testCrypt()){Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoSupport"),LOG_LEVEL_NOTICE);return!1}return!0};this.rebuildDB=async method=>{if(this.editingSettings.encrypt&&""==this.editingSettings.passphrase)Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoPassphrase"),LOG_LEVEL_NOTICE);else if(!this.editingSettings.encrypt||await testCrypt()){this.editingSettings.encrypt||(this.editingSettings.passphrase="");this.applyAllSettings();await this.services.setting.suspendAllSync();await this.services.setting.suspendExtraSync();this.reloadAllSettings();this.editingSettings.isConfigured=!0;Logger($msg("obsidianLiveSyncSettingTab.logRebuildNote"),LOG_LEVEL_NOTICE);await this.saveAllDirtySettings();this.closeSetting();await delay(2e3);await this.core.rebuilder.$performRebuildDB(method)}else Logger($msg("obsidianLiveSyncSettingTab.logEncryptionNoSupport"),LOG_LEVEL_NOTICE)};this.plugin=plugin3;LiveSyncSetting.env=this;eventHub.onEvent("reload-setting-tab",()=>{this.requestReload()})}get core(){return this.plugin.core}get services(){return this.core.services}get editingSettings(){this._editingSettings||this.reloadAllSettings();return this._editingSettings}set editingSettings(v2){this._editingSettings||this.reloadAllSettings();this._editingSettings=v2}applySetting(keys3){for(const k2 of keys3)if(this.isDirty(k2)&&!(k2 in OnDialogSettingsDefault)){this.core.settings[k2]=this.editingSettings[k2];this.initialSettings[k2]=this.core.settings[k2]}keys3.forEach(e3=>this.refreshSetting(e3))}applyAllSettings(){var _a8;const changedKeys=Object.keys(null!=(_a8=this.editingSettings)?_a8:{}).filter(e3=>this.isDirty(e3));this.applySetting(changedKeys);this.reloadAllSettings()}async saveLocalSetting(key3){var _a8,_b5,_c3,_d2;if("configPassphrase"==key3){localStorage.setItem("ls-setting-passphrase",null!=(_b5=null==(_a8=this.editingSettings)?void 0:_a8[key3])?_b5:"");return await Promise.resolve()}if("deviceAndVaultName"==key3){this.services.setting.setDeviceAndVaultName(null!=(_d2=null==(_c3=this.editingSettings)?void 0:_c3[key3])?_d2:"");this.services.setting.saveDeviceAndVaultName();return await Promise.resolve()}}async saveSettings(keys3){let hasChanged=!1;const appliedKeys=[];for(const k2 of keys3)if(this.isDirty(k2)){appliedKeys.push(k2);if(k2 in OnDialogSettingsDefault){await this.saveLocalSetting(k2);this.initialSettings[k2]=this.editingSettings[k2]}else{this.core.settings[k2]=this.editingSettings[k2];this.initialSettings[k2]=this.core.settings[k2];hasChanged=!0}}hasChanged&&await this.services.setting.saveSettingData();const handlers3=this.onSavedHandlers.filter(e3=>-1!==appliedKeys.indexOf(e3.key)).map(e3=>e3.handler(this.editingSettings[e3.key]));await Promise.all(handlers3);keys3.forEach(e3=>this.refreshSetting(e3))}async saveAllDirtySettings(){var _a8;const changedKeys=Object.keys(null!=(_a8=this.editingSettings)?_a8:{}).filter(e3=>this.isDirty(e3));await this.saveSettings(changedKeys);this.reloadAllSettings()}requestUpdate(){scheduleTask("update-setting",10,()=>{for(const setting of this.settingComponents)setting._onUpdate();for(const func of this.controlledElementFunc)func()})}reloadAllLocalSettings(){const ret={...OnDialogSettingsDefault};ret.configPassphrase=localStorage.getItem("ls-setting-passphrase")||"";ret.preset="";ret.deviceAndVaultName=this.services.setting.getDeviceAndVaultName();return ret}computeAllLocalSettings(){var _a8,_b5;return{syncMode:(null==(_a8=this.editingSettings)?void 0:_a8.liveSync)?"LIVESYNC":(null==(_b5=this.editingSettings)?void 0:_b5.periodicReplication)?"PERIODIC":"ONEVENTS"}}reloadAllSettings(skipUpdate=!1){const localSetting=this.reloadAllLocalSettings();this._editingSettings={...this.core.settings,...localSetting};this._editingSettings={...this.editingSettings,...this.computeAllLocalSettings()};this.initialSettings={...this.editingSettings};skipUpdate||this.requestUpdate()}refreshSetting(key3){const localSetting=this.reloadAllLocalSettings();if(key3 in this.core.settings)if(key3 in localSetting){this.initialSettings[key3]=localSetting[key3];this.editingSettings[key3]=localSetting[key3]}else{this.initialSettings[key3]=this.core.settings[key3];this.editingSettings[key3]=this.initialSettings[key3]}this.editingSettings={...this.editingSettings,...this.computeAllLocalSettings()};this.requestUpdate()}isDirty(key3){var _a8;return isObjectDifferent(this.editingSettings[key3],null==(_a8=this.initialSettings)?void 0:_a8[key3])}isSomeDirty(keys3){return keys3.some(e3=>this.isDirty(e3))}isConfiguredAs(key3,value){return!!this.editingSettings&&this.editingSettings[key3]==value}async testConnection(settingOverride={}){const trialSetting={...this.editingSettings,...settingOverride},replicator=await this.services.replicator.getNewReplicator(trialSetting);if(!replicator){Logger("No replicator available for the current settings.",LOG_LEVEL_NOTICE);return}await replicator.tryConnectRemote(trialSetting);const status=await replicator.getRemoteStatus(trialSetting);status&&status.estimatedSize&&Logger($msg("obsidianLiveSyncSettingTab.logEstimatedSize",{size:sizeToHumanReadable(status.estimatedSize)}),LOG_LEVEL_NOTICE)}closeSetting(){this.plugin.app.setting.close()}handleElement(element2,func){const updateFunc=((element3,func2)=>{const prev={};return()=>{const newValue=func2(),keys3=Object.keys(newValue);for(const k2 of keys3)if(prev[k2]!==newValue[k2]){"visibility"==k2&&element3.toggleClass("sls-setting-hidden",!newValue[k2]);prev[k2]=newValue[k2]}}})(element2,func);this.controlledElementFunc.push(updateFunc);updateFunc()}createEl(el,tag3,o2,callback,func){const element2=el.createEl(tag3,o2,callback);func&&this.handleElement(element2,func);return element2}addEl(el,tag3,o2,callback,func){const elm=this.createEl(el,tag3,o2,callback,func);return Promise.resolve(elm)}addOnSaved(key3,func){this.onSavedHandlers.push({key:key3,handler:func})}resetEditingSettings(){this._editingSettings=void 0;this.initialSettings=void 0}hide(){this.isShown=!1}requestReload(){var _a8;if(this.isShown){const newConf=this.core.settings,keys3=Object.keys(newConf);let hasLoaded=!1;for(const k2 of keys3)if(isObjectDifferent(newConf[k2],null==(_a8=this.initialSettings)?void 0:_a8[k2]))if(this.isDirty(k2))this.core.confirm.askInPopup(`config-reloaded-${k2}`,$msg("obsidianLiveSyncSettingTab.msgSettingModified",{setting:getConfName(k2)}),anchor=>{anchor.text=$msg("obsidianLiveSyncSettingTab.optionHere");anchor.addEventListener("click",()=>{this.refreshSetting(k2);this.display()})});else{this.refreshSetting(k2);if(k2 in OnDialogSettingsDefault)continue;hasLoaded=!0}hasLoaded?this.display():this.requestUpdate()}else this.reloadAllSettings(!0)}changeDisplay(screen){for(const k2 in this.screenElements)k2==screen?this.screenElements[k2].forEach(element2=>element2.removeClass("setting-collapsed")):this.screenElements[k2].forEach(element2=>element2.addClass("setting-collapsed"));this.menuEl&&this.menuEl.querySelectorAll(".sls-setting-label").forEach(element2=>{if(element2.hasClass(`c-${screen}`)){element2.addClass("selected");element2.querySelector("input[type=radio]").checked=!0}else{element2.removeClass("selected");element2.querySelector("input[type=radio]").checked=!1}});this.selectedScreen=screen}async enableMinimalSetup(){this.editingSettings.liveSync=!1;this.editingSettings.periodicReplication=!1;this.editingSettings.syncOnSave=!1;this.editingSettings.syncOnEditorSave=!1;this.editingSettings.syncOnStart=!1;this.editingSettings.syncOnFileOpen=!1;this.editingSettings.syncAfterMerge=!1;this.core.replicator.closeReplication();await this.saveAllDirtySettings();this.containerEl.addClass("isWizard");this.inWizard=!0;this.changeDisplay("20")}addScreenElement(key3,element2){key3 in this.screenElements||(this.screenElements[key3]=[]);this.screenElements[key3].push(element2)}selectPane(event2){const target=event2.target;if("INPUT"==target.tagName){const value=target.getAttribute("value");value&&this.selectedScreen!=value&&this.changeDisplay(value)}}isNeedRebuildLocal(){return this.isSomeDirty(["useIndexedDBAdapter","doNotUseFixedRevisionForChunks","handleFilenameCaseSensitive","passphrase","useDynamicIterationCount","usePathObfuscation","encrypt"])}isNeedRebuildRemote(){return this.isSomeDirty(["doNotUseFixedRevisionForChunks","handleFilenameCaseSensitive","passphrase","useDynamicIterationCount","usePathObfuscation","encrypt"])}isAnySyncEnabled(){var _a8,_b5,_c3,_d2;return!(this.isConfiguredAs("isConfigured",!1)||!this.isConfiguredAs("liveSync",!0)&&!this.isConfiguredAs("periodicReplication",!0)&&!this.isConfiguredAs("syncOnFileOpen",!0)&&!this.isConfiguredAs("syncOnSave",!0)&&!this.isConfiguredAs("syncOnEditorSave",!0)&&!this.isConfiguredAs("syncOnStart",!0)&&!this.isConfiguredAs("syncAfterMerge",!0)&&!this.isConfiguredAs("syncOnFileOpen",!0)&&"CONNECTED"!=(null==(_b5=null==(_a8=this.core)?void 0:_a8.replicator)?void 0:_b5.syncStatus)&&"PAUSED"!=(null==(_d2=null==(_c3=this.core)?void 0:_c3.replicator)?void 0:_d2.syncStatus))}async confirmRebuild(){if(!await this.isPassphraseValid()){Logger("Passphrase is not valid, please fix it.",LOG_LEVEL_NOTICE);return}const OPTION_FETCH=$msg("obsidianLiveSyncSettingTab.optionFetchFromRemote"),OPTION_REBUILD_BOTH=$msg("obsidianLiveSyncSettingTab.optionRebuildBoth"),OPTION_ONLY_SETTING=$msg("obsidianLiveSyncSettingTab.optionSaveOnlySettings"),OPTION_CANCEL=$msg("obsidianLiveSyncSettingTab.optionCancel"),title=$msg("obsidianLiveSyncSettingTab.titleRebuildRequired"),note=$msg("obsidianLiveSyncSettingTab.msgRebuildRequired",{OPTION_REBUILD_BOTH,OPTION_FETCH,OPTION_ONLY_SETTING}),buttons=[OPTION_FETCH,OPTION_REBUILD_BOTH,OPTION_ONLY_SETTING,OPTION_CANCEL],result=await confirmWithMessage(this.plugin,title,note,buttons,OPTION_CANCEL,0);if(result!=OPTION_CANCEL&&(result!=OPTION_FETCH||await this.checkWorkingPassphrase()||"yes"==await this.core.confirm.askYesNoDialog($msg("obsidianLiveSyncSettingTab.msgAreYouSureProceed"),{defaultOption:"No"}))){this.editingSettings.encrypt||(this.editingSettings.passphrase="");await this.saveAllDirtySettings();await this.applyAllSettings();if(result==OPTION_FETCH){await this.core.storageAccess.writeFileAuto(FLAGMD_REDFLAG3_HR,"");this.services.appLifecycle.scheduleRestart();this.closeSetting()}else if(result==OPTION_REBUILD_BOTH){await this.core.storageAccess.writeFileAuto(FLAGMD_REDFLAG2_HR,"");this.services.appLifecycle.scheduleRestart();this.closeSetting()}else result==OPTION_ONLY_SETTING&&await this.services.setting.saveSettingData()}}display(){const changeDisplay=this.changeDisplay.bind(this),{containerEl}=this;this.settingComponents.length=0;this.controlledElementFunc.length=0;this.onSavedHandlers.length=0;this.screenElements={};null!=this._editingSettings&&null!=this.initialSettings||this.reloadAllSettings();if(void 0===this.editingSettings||null==this.initialSettings)return;this.isShown=!0;containerEl.empty();containerEl.addClass("sls-setting");containerEl.removeClass("isWizard");setStyle(containerEl,"menu-setting-poweruser",()=>this.isConfiguredAs("usePowerUserMode",!0));setStyle(containerEl,"menu-setting-advanced",()=>this.isConfiguredAs("useAdvancedMode",!0));setStyle(containerEl,"menu-setting-edgecase",()=>this.isConfiguredAs("useEdgeCaseMode",!0));const menuWrapper=this.createEl(containerEl,"div",{cls:"sls-setting-menu-wrapper"});this.menuEl&&this.menuEl.remove();this.menuEl=menuWrapper.createDiv("");this.menuEl.addClass("sls-setting-menu");const menuTabs=this.menuEl.querySelectorAll(".sls-setting-label");this.createEl(menuWrapper,"div",{cls:"sls-setting-menu-buttons"},el=>{el.addClass("wizardHidden");el.createEl("label",{text:$msg("obsidianLiveSyncSettingTab.msgChangesNeedToBeApplied")});this.addEl(el,"button",{text:$msg("obsidianLiveSyncSettingTab.optionApply"),cls:"mod-warning"},buttonEl=>{buttonEl.addEventListener("click",()=>fireAndForget(async()=>await this.confirmRebuild()))})},visibleOnly(()=>this.isNeedRebuildLocal()||this.isNeedRebuildRemote()));let paneNo=0;const addPane=(parentEl,title,icon,order,wizardHidden,level)=>{const el=this.createEl(parentEl,"div",{text:""});{const mdTitle=`${paneNo++}. ${title}${getLevelStr(null!=level?level:"")}`;el.setAttribute("data-pane",mdTitle);toc.add(`| ${icon} | [${mdTitle}](#${mdTitle.toLowerCase().replace(/ /g,"-").replace(/[^\w\s-]/g,"")}) | `)}setLevelClass(el,level);el.createEl("h3",{text:title,cls:"sls-setting-pane-title"});this.menuEl&&this.menuEl.createEl("label",{cls:`sls-setting-label c-${order} ${wizardHidden?"wizardHidden":""}`},el2=>{setLevelClass(el2,level);const inputEl=el2.createEl("input",{type:"radio",name:"disp",value:`${order}`,cls:"sls-setting-tab"});el2.createEl("div",{cls:"sls-setting-menu-btn",text:icon,title});inputEl.addEventListener("change",evt=>this.selectPane(evt));inputEl.addEventListener("click",evt=>this.selectPane(evt))});this.addScreenElement(`${order}`,el);return Promise.resolve(el)},panelNoMap={},addPanel=(parentEl,title,callback,func,level)=>{const el=this.createEl(parentEl,"div",{text:""},callback,func);{const paneNo2=findAttrFromParent(parentEl,"data-pane");paneNo2 in panelNoMap||(panelNoMap[paneNo2]=0);panelNoMap[paneNo2]+=1;const panelNo=panelNoMap[paneNo2];el.setAttribute("data-panel",`${panelNo}. ${title}${getLevelStr(null!=level?level:"")}`)}setLevelClass(el,level);this.createEl(el,"h4",{text:title,cls:"sls-setting-panel-title"});return Promise.resolve(el)};menuTabs.forEach(element2=>{const e3=element2.querySelector(".sls-setting-tab");e3&&e3.addEventListener("change",event2=>{menuTabs.forEach(element3=>element3.removeClass("selected"));this.changeDisplay(event2.currentTarget.value);element2.addClass("selected")})});const bindPane=paneFunc=>paneEl=>{paneFunc.call(this,paneEl,{addPane,addPanel})};addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelChangeLog"),"💬",100,!1).then(bindPane(paneChangeLog));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelSetup"),"🧙‍♂️",110,!1).then(bindPane(paneSetup));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelGeneralSettings"),"⚙️",20,!1).then(bindPane(paneGeneral));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.panelRemoteConfiguration"),"🛰️",0,!1).then(bindPane(paneRemoteConfig));addPane(containerEl,$msg("obsidianLiveSyncSettingTab.titleSyncSettings"),"🔄",30,!1).then(bindPane(paneSyncSettings));addPane(containerEl,"Selector","🚦",33,!1,LEVEL_ADVANCED).then(bindPane(paneSelector));addPane(containerEl,"Customization sync","🔌",60,!1,LEVEL_ADVANCED).then(bindPane(paneCustomisationSync));addPane(containerEl,"Hatch","🧰",50,!0).then(bindPane(paneHatch));addPane(containerEl,"Advanced","🔧",46,!1,LEVEL_ADVANCED).then(bindPane(paneAdvanced));addPane(containerEl,"Power users","💪",47,!0,LEVEL_POWER_USER).then(bindPane(panePowerUsers));addPane(containerEl,"Patches","🩹",51,!1,LEVEL_EDGE_CASE).then(bindPane(panePatches));addPane(containerEl,"Maintenance","🎛️",70,!0).then(bindPane(paneMaintenance));yieldNextAnimationFrame().then(()=>{""==this.selectedScreen?this.lastVersion!=this.editingSettings.lastReadUpdates?this.editingSettings.isConfigured?changeDisplay("100"):changeDisplay("110"):this.isAnySyncEnabled()?changeDisplay("20"):changeDisplay("110"):changeDisplay(this.selectedScreen);this.requestUpdate()})}getMinioJournalSyncClient(){return new JournalSyncMinio(this.core.settings,this.core.simpleStore,this.core)}async resetRemoteBucket(){const minioJournal=this.getMinioJournalSyncClient();await minioJournal.resetBucket()}};ModuleObsidianSettingDialogue=class extends AbstractObsidianModule{_everyOnloadStart(){this.settingTab=new ObsidianLiveSyncSettingTab(this.app,this.plugin);this.plugin.addSettingTab(this.settingTab);eventHub.onEvent("request-open-settings",()=>this.openSetting());eventHub.onEvent("request-open-setting-wizard",()=>{this.openSetting();this.settingTab.enableMinimalSetup()});return Promise.resolve(!0)}openSetting(){this.app.setting.open();this.app.setting.openTabById("obsidian-livesync")}get appId(){return`${"appId"in this.app?this.app.appId:""}`}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};DocumentHistoryModal=class extends import_obsidian.Modal{constructor(app,core,plugin3,file,id,revision){super(app);this.showDiff=!1;this.revs_info=[];this.currentText="";this.currentDeleted=!1;this.BlobURLs=new Map;this.plugin=plugin3;this.core=core;this.file=file instanceof import_obsidian.TFile?getPathFromTFile(file):file;this.id=id;this.initialRev=revision;!file&&id&&(this.file=this.services.path.id2path(id));"1"==localStorage.getItem("ols-history-highlightdiff")&&(this.showDiff=!0)}get services(){return this.core.services}async loadFile(initialRev){var _a8,_b5;this.id||(this.id=await this.services.path.path2id(this.file));const db=this.core.localDatabase;try{const w2=await db.getRaw(this.id,{revs_info:!0});this.revs_info=null!=(_b5=null==(_a8=w2._revs_info)?void 0:_a8.filter(e3=>"available"==(null==e3?void 0:e3.status)))?_b5:[];this.range.max=`${Math.max(this.revs_info.length-1,0)}`;this.range.value=this.range.max;this.fileInfo.setText(`${this.file} / ${this.revs_info.length} revisions`);await this.loadRevs(initialRev)}catch(ex){if(isErrorOfMissingDoc(ex)){this.range.max="0";this.range.value="";this.range.disabled=!0;this.contentView.setText("We don't have any history for this note.")}else{this.contentView.setText("Error while loading file.");Logger(ex,LOG_LEVEL_VERBOSE)}}}async loadRevs(initialRev){if(0==this.revs_info.length)return;if(initialRev){const rIndex=this.revs_info.findIndex(e3=>e3.rev==initialRev);rIndex>=0&&(this.range.value=""+(this.revs_info.length-1-rIndex))}const index6=this.revs_info.length-1-this.range.value/1,rev3=this.revs_info[index6];await this.showExactRev(rev3.rev)}revokeURL(key3){const v2=this.BlobURLs.get(key3);v2&&URL.revokeObjectURL(v2);this.BlobURLs.delete(key3)}generateBlobURL(key3,data){this.revokeURL(key3);const v2=URL.createObjectURL(new Blob([data],{endings:"transparent",type:"application/octet-stream"}));this.BlobURLs.set(key3,v2);return v2}async showExactRev(rev3){const db=this.core.localDatabase,w2=await db.getDBEntry(this.file,{rev:rev3},!1,!1,!0);this.currentText="";this.currentDeleted=!1;if(!1===w2){this.currentDeleted=!0;this.info.innerHTML="";this.contentView.innerHTML=`Could not read this revision<br>(${rev3})`}else{this.currentDoc=w2;this.info.innerHTML=`Modified:${new Date(w2.mtime).toLocaleString()}`;let result;const w1data=readDocument(w2);this.currentDeleted=!!w2.deleted;if(this.showDiff){const prevRevIdx=this.revs_info.length-1-(this.range.value/1-1);if(prevRevIdx>=0&&prevRevIdx<this.revs_info.length){const oldRev=this.revs_info[prevRevIdx].rev,w22=await db.getDBEntry(this.file,{rev:oldRev},!1,!1,!0);if(0!=w22)if("string"==typeof w1data){result="";const dmp=new import_diff_match_patch.diff_match_patch,w2data=readDocument(w22),diff=dmp.diff_main(w2data,w1data);dmp.diff_cleanupSemantic(diff);for(const v2 of diff){const x1=v2[0],x2=v2[1];x1==import_diff_match_patch.DIFF_DELETE?result+="<span class='history-deleted'>"+escapeStringToHTML(x2)+"</span>":x1==import_diff_match_patch.DIFF_EQUAL?result+="<span class='history-normal'>"+escapeStringToHTML(x2)+"</span>":x1==import_diff_match_patch.DIFF_INSERT&&(result+="<span class='history-added'>"+escapeStringToHTML(x2)+"</span>")}result=result.replace(/\n/g,"<br>")}else if(isImage(this.file)){result=`<div class='ls-imgdiff-wrap'>\n <div class='overlay'>\n <img class='img-base' src="${this.generateBlobURL("base",w1data)}">\n <img class='img-overlay' src='${this.generateBlobURL("overlay",readDocument(w22))}'>\n </div>\n</div>`;this.contentView.removeClass("op-pre")}}}if(null==result)if("string"!=typeof w1data){if(isImage(this.file)){result=`<div class='ls-imgdiff-wrap'>\n<div class='overlay'>\n<img class='img-base' src="${this.generateBlobURL("base",w1data)}">\n</div>\n</div>`;this.contentView.removeClass("op-pre")}}else result=escapeStringToHTML(w1data);null==result&&(result="string"==typeof w1data?escapeStringToHTML(w1data):"Binary file");this.contentView.innerHTML=(this.currentDeleted?"(At this revision, the file has been deleted)\n":"")+result}}onOpen(){const{contentEl}=this;this.titleEl.setText("Document History");contentEl.empty();this.fileInfo=contentEl.createDiv("");this.fileInfo.addClass("op-info");const divView=contentEl.createDiv("");divView.addClass("op-flex");divView.createEl("input",{type:"range"},e3=>{this.range=e3;e3.addEventListener("change",e4=>{scheduleOnceIfDuplicated("loadRevs",()=>this.loadRevs())});e3.addEventListener("input",e4=>{scheduleOnceIfDuplicated("loadRevs",()=>this.loadRevs())})});contentEl.createDiv("",e3=>{e3.createEl("label",{},label2=>{label2.appendChild(createEl("input",{type:"checkbox"},checkbox=>{this.showDiff&&(checkbox.checked=!0);checkbox.addEventListener("input",evt=>{this.showDiff=checkbox.checked;localStorage.setItem("ols-history-highlightdiff",1==this.showDiff?"1":"");scheduleOnceIfDuplicated("loadRevs",()=>this.loadRevs())})}));label2.appendText("Highlight diff")})}).addClass("op-info");this.info=contentEl.createDiv("");this.info.addClass("op-info");fireAndForget(async()=>await this.loadFile(this.initialRev));const div=contentEl.createDiv({text:"Loading old revisions..."});this.contentView=div;div.addClass("op-scrollable");div.addClass("op-pre");const buttons=contentEl.createDiv("");buttons.createEl("button",{text:"Copy to clipboard"},e3=>{e3.addClass("mod-cta");e3.addEventListener("click",()=>{fireAndForget(async()=>{await navigator.clipboard.writeText(this.currentText);Logger("Old content copied to clipboard",LOG_LEVEL_NOTICE)})})});const focusFile=async path2=>{const targetFile=this.plugin.app.vault.getFileByPath(path2);if(targetFile){const leaf=this.plugin.app.workspace.getLeaf(!1);await leaf.openFile(targetFile)}else Logger("Unable to display the file in the editor",LOG_LEVEL_NOTICE)};buttons.createEl("button",{text:"Back to this revision"},e3=>{e3.addClass("mod-cta");e3.addEventListener("click",()=>{fireAndForget(async()=>{const pathToWrite=stripPrefix(this.file);if(!isValidPath(pathToWrite)){Logger("Path is not valid to write content.",LOG_LEVEL_INFO);return}if(!this.currentDoc){Logger("No active file loaded.",LOG_LEVEL_INFO);return}const d4=readContent(this.currentDoc);await this.core.storageAccess.writeHiddenFileAuto(pathToWrite,d4);await focusFile(pathToWrite);this.close()})})})}onClose(){const{contentEl}=this;contentEl.empty();this.BlobURLs.forEach(value=>{console.log(value);value&&URL.revokeObjectURL(value)})}};ModuleObsidianDocumentHistory=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-history",name:"Show history",callback:()=>{const file=this.services.vault.getActiveFilePath();file&&this.showHistory(file,void 0)}});this.addCommand({id:"livesync-filehistory",name:"Pick a file to show history",callback:()=>{fireAndForget(async()=>await this.fileHistory())}});eventHub.onEvent(EVENT_REQUEST_SHOW_HISTORY,({file,fileOnDB})=>{this.showHistory(file,fileOnDB._id)});return Promise.resolve(!0)}showHistory(file,id){new DocumentHistoryModal(this.app,this.core,this.plugin,file,id).open()}async fileHistory(){const notes=[];for await(const doc of this.localDatabase.findAllDocs())notes.push({id:doc._id,path:this.getPath(doc),dispPath:this.getPath(doc),mtime:doc.mtime});notes.sort((a2,b3)=>b3.mtime-a2.mtime);const notesList=notes.map(e3=>e3.dispPath),target=await this.core.confirm.askSelectString("File to view History",notesList);if(target){const targetId=notes.find(e3=>e3.dispPath==target);this.showHistory(targetId.path,targetId.id)}}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};root_127=from_html('<div class="svelte-1ddarry">Gathering information...</div>');root_217=from_html('<th class="svelte-1ddarry">Chunks</th>');root_36=from_html('<div class="svelte-1ddarry"></div>');root_412=from_html('<div class="svelte-1ddarry"><button class="svelte-1ddarry">+1 week</button></div>');root_67=from_html('<span class="filename svelte-1ddarry" style="text-decoration: line-through"> </span>');root_79=from_html('<span class="filename svelte-1ddarry"><a class="svelte-1ddarry"> </a></span>');root_89=from_html('<a class="svelte-1ddarry"> </a>');root_104=from_html('<td class="svelte-1ddarry"> </td>');root_54=from_html('<tr class="svelte-1ddarry"><td class="mtime svelte-1ddarry"> </td><td class="path svelte-1ddarry"><div class="filenames svelte-1ddarry"><span class="path svelte-1ddarry"> </span> <!></div></td><td class="svelte-1ddarry"><span class="rev svelte-1ddarry"><!></span></td><td class="svelte-1ddarry"> </td><!></tr>');root_1112=from_html('<div class="svelte-1ddarry"></div>');root_128=from_html('<div class="svelte-1ddarry"><button class="svelte-1ddarry">+1 week</button></div>');root33=from_html('<div class="globalhistory svelte-1ddarry"><h1 class="svelte-1ddarry">Vault history</h1> <div class="control svelte-1ddarry"><div class="row svelte-1ddarry"><label for="" class="svelte-1ddarry">From:</label><input type="date" class="svelte-1ddarry"/></div> <div class="row svelte-1ddarry"><label for="" class="svelte-1ddarry">To:</label><input type="date" class="svelte-1ddarry"/></div> <div class="row svelte-1ddarry"><label for="" class="svelte-1ddarry">Info:</label> <label class="svelte-1ddarry"><input type="checkbox" class="svelte-1ddarry"/><span class="svelte-1ddarry">Diff</span></label> <label class="svelte-1ddarry"><input type="checkbox" class="svelte-1ddarry"/><span class="svelte-1ddarry">Chunks</span></label> <label class="svelte-1ddarry"><input type="checkbox" class="svelte-1ddarry"/><span class="svelte-1ddarry">File integrity</span></label></div></div> <!> <table class="svelte-1ddarry"><tbody class="svelte-1ddarry"><tr class="svelte-1ddarry"><th class="svelte-1ddarry">Date</th><th class="svelte-1ddarry">Path</th><th class="svelte-1ddarry">Rev</th><th class="svelte-1ddarry">Stat</th><!></tr><tr class="svelte-1ddarry"><td colspan="5" class="more svelte-1ddarry"><!></td></tr><!><tr class="svelte-1ddarry"><td colspan="5" class="more svelte-1ddarry"><!></td></tr></tbody></table></div>');$$css13={hash:"svelte-1ddarry",code:".svelte-1ddarry {box-sizing:border-box;}.globalhistory.svelte-1ddarry {margin-bottom:2em;}table.svelte-1ddarry {width:100%;}.more.svelte-1ddarry > div:where(.svelte-1ddarry) {display:flex;}.more.svelte-1ddarry > div:where(.svelte-1ddarry) > button:where(.svelte-1ddarry) {flex-grow:1;}th.svelte-1ddarry {position:sticky;top:0;backdrop-filter:blur(10px);}td.mtime.svelte-1ddarry {white-space:break-spaces;}td.path.svelte-1ddarry {word-break:break-word;}.row.svelte-1ddarry {display:flex;flex-direction:row;flex-wrap:wrap;}.row.svelte-1ddarry > label:where(.svelte-1ddarry) {display:flex;align-items:center;min-width:5em;}.row.svelte-1ddarry > input:where(.svelte-1ddarry) {flex-grow:1;}.filenames.svelte-1ddarry {display:flex;flex-direction:column;}.filenames.svelte-1ddarry > .path:where(.svelte-1ddarry) {font-size:70%;}.rev.svelte-1ddarry {text-overflow:ellipsis;max-width:3em;display:inline-block;overflow:hidden;white-space:nowrap;}"};GlobalHistoryView=class extends SvelteItemView{constructor(leaf,plugin3){super(leaf);this.icon="clock";this.title="";this.navigation=!0;this.plugin=plugin3}instantiateComponent(target){return mount(GlobalHistory,{target,props:{plugin:this.plugin,core:this.plugin.core}})}getIcon(){return"clock"}getViewType(){return"global-history"}getDisplayText(){return"Vault history"}};ModuleObsidianGlobalHistory=class extends AbstractObsidianModule{_everyOnloadStart(){this.addCommand({id:"livesync-global-history",name:"Show vault history",callback:()=>{this.showGlobalHistory()}});this.registerView("global-history",leaf=>new GlobalHistoryView(leaf,this.plugin));return Promise.resolve(!0)}showGlobalHistory(){this.services.API.showWindow("global-history")}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};ModuleIntegratedTest=class extends AbstractObsidianModule{async waitFor(proc,timeout=1e4){await delay(100);const start=Date.now();for(;!await proc();){if(timeout>0&&Date.now()-start>timeout){this._log("Timeout");return!1}await delay(500)}return!0}waitWithReplicating(proc,timeout=1e4){return this.waitFor(async()=>{await this.tryReplicate();return await proc()},timeout)}async storageContentIsEqual(file,content){try{return await this.readStorageContent(file)===content}catch(e3){this._log(`Error: ${e3}`);return!1}}async assert(proc){if(!await proc()){this._log("Assertion failed");return!1}return!0}async __orDie(key3,proc){if(!await this._test(key3,proc))throw new Error(`${key3}`);return!0}tryReplicate(){if(!this.settings.liveSync)return shareRunningResult("replicate-test",async()=>{await this.services.replication.replicate()})}async readStorageContent(file){if(await this.core.storageAccess.isExistsIncludeHidden(file))return await this.core.storageAccess.readHiddenFileText(file)}async __proceed(no,title){const stepContent=`Step ${no}`;await this.services.conflict.resolveByNewest("_STEP.md");await this.core.storageAccess.writeFileAuto("_STEP.md",stepContent);await this.__orDie(`Wait for acknowledge ${no}`,async()=>!!await this.waitWithReplicating(async()=>await this.storageContentIsEqual("_STEP_ACK.md",stepContent),2e4));return!0}async __join(no,title){const stepContent=`Step ${no}`;await this.__orDie(`Wait for step ${no} (${title})`,async()=>!!await this.waitWithReplicating(async()=>await this.storageContentIsEqual("_STEP.md",stepContent),2e4));await this.services.conflict.resolveByNewest("_STEP_ACK.md");await this.core.storageAccess.writeFileAuto("_STEP_ACK.md",stepContent);await this.tryReplicate();return!0}async performStep({step,title,isGameChanger,proc,check}){if(isGameChanger){await this.__proceed(step,title);try{await proc()}catch(e3){this._log(`Error: ${e3}`);return!1}return await this.__orDie(`Step ${step} - ${title}`,async()=>await this.waitWithReplicating(check))}return await this.__join(step,title)}async nonLiveTestRunner(isLeader,testMain){const storage=this.core.storageAccess;let testFileName;this.addTestResult("-------Starting ... ",!0,`Test as ${isLeader?"Leader":"Receiver"} command file IT.md`);isLeader&&await this.__proceed(0,"start");await this.tryReplicate();await this.performStep({step:0,title:"Make sure that command File Not Exists",isGameChanger:isLeader,proc:async()=>await storage.removeHidden("IT.md"),check:async()=>!await storage.isExistsIncludeHidden("IT.md")});await this.performStep({step:1,title:"Make sure that command File Not Exists On Receiver",isGameChanger:!isLeader,proc:async()=>await storage.removeHidden("ITx.md"),check:async()=>!await storage.isExistsIncludeHidden("ITx.md")});await this.performStep({step:2,title:"Decide the test file name",isGameChanger:isLeader,proc:async()=>{testFileName=Date.now()+"-"+Math.ceil(1e3*Math.random())+".md";await storage.writeFileAuto("IT.md",testFileName)},check:()=>Promise.resolve(!0)});await this.performStep({step:3,title:"Wait for the command file to be arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await storage.isExistsIncludeHidden("IT.md")});await this.performStep({step:4,title:"Send the response file",isGameChanger:!isLeader,proc:async()=>{await storage.writeHiddenFileAuto("ITx.md","!")},check:()=>Promise.resolve(!0)});await this.performStep({step:5,title:"Wait for the response file to be arrived",isGameChanger:isLeader,proc:async()=>{},check:async()=>await storage.isExistsIncludeHidden("ITx.md")});await this.performStep({step:6,title:"Proceed to begin the test",isGameChanger:isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await this.performStep({step:6,title:"Begin the test",isGameChanger:!0,proc:async()=>{},check:()=>Promise.resolve(!0)});try{this.addTestResult("** Main------",!0,"");if(isLeader)return await testMain(testFileName,!0);{const testFileName2=await this.readStorageContent("IT.md");this.addTestResult("testFileName",!0,`Request client to use :${testFileName2}`);return await testMain(testFileName2,!1)}}finally{this.addTestResult("Teardown",!0,`Deleting ${testFileName}`);await storage.removeHidden(testFileName)}return!0}async testBasic(filename,isLeader){const storage=this.core.storageAccess,database=this.core.databaseFileAccess;await this.addTestResult("---**Starting Basic Test**---",!0,`Test as ${isLeader?"Leader":"Receiver"} command file ${filename}`);await this.performStep({step:0,title:"Make sure that file is not exist",isGameChanger:!isLeader,proc:async()=>{},check:async()=>!await storage.isExists(filename)});await this.performStep({step:1,title:"Write a file",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World"),check:async()=>await storage.isExists(filename)});await this.performStep({step:2,title:"Make sure the file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await storage.isExists(filename)});await this.performStep({step:3,title:"Update to Hello World 2",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World 2"),check:async()=>await this.storageContentIsEqual(filename,"Hello World 2")});await this.performStep({step:4,title:"Make sure the modified file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Hello World 2")});await this.performStep({step:5,title:"Update to Hello World 3",isGameChanger:!isLeader,proc:async()=>await storage.writeFileAuto(filename,"Hello World 3"),check:async()=>await this.storageContentIsEqual(filename,"Hello World 3")});await this.performStep({step:6,title:"Make sure the modified file is arrived",isGameChanger:isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Hello World 3")});await this.performStep({step:7,title:"Update to Multiline",isGameChanger:isLeader,proc:async()=>await storage.writeFileAuto(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D"),check:async()=>await this.storageContentIsEqual(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D")});await this.performStep({step:8,title:"Make sure the modified file is arrived",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,"Line1:A\nLine2:B\nLine3:C\nLine4:D")});if(!this.settings.liveSync){const multiLineContentL="Line1:A\nLine2:B\nLine3:C!\nLine4:D",multiLineContentC="Line1:A\nLine2:bbbbb\nLine3:C\nLine4:D";await this.performStep({step:9,title:"Progress to be conflicted",isGameChanger:isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await storage.writeFileAuto(filename,isLeader?multiLineContentL:multiLineContentC);await this.performStep({step:10,title:"Update As Conflicted",isGameChanger:!isLeader,proc:async()=>{},check:()=>Promise.resolve(!0)});await this.performStep({step:10,title:"Make sure Automatically resolved",isGameChanger:isLeader,proc:async()=>{},check:async()=>0===(await database.getConflictedRevs(filename)).length});await this.performStep({step:11,title:"Make sure Automatically resolved",isGameChanger:!isLeader,proc:async()=>{},check:async()=>0===(await database.getConflictedRevs(filename)).length});const sensiblyMergedContent="Line1:A\nLine2:bbbbb\nLine3:C!\nLine4:D";await this.performStep({step:12,title:"Make sure Sensibly Merged on Leader",isGameChanger:isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,sensiblyMergedContent)});await this.performStep({step:13,title:"Make sure Sensibly Merged on Receiver",isGameChanger:!isLeader,proc:async()=>{},check:async()=>await this.storageContentIsEqual(filename,sensiblyMergedContent)})}await this.performStep({step:14,title:"Delete File",isGameChanger:isLeader,proc:async()=>{await storage.removeHidden(filename)},check:async()=>!await storage.isExists(filename)});await this.performStep({step:15,title:"Make sure File is deleted",isGameChanger:!isLeader,proc:async()=>{},check:async()=>!await storage.isExists(filename)});this._log("The Basic Test has been completed",LOG_LEVEL_NOTICE);return!0}async testBasicEvent(isLeader){this.settings.liveSync=!1;await this.saveSettings();await this._test("basic",async()=>await this.nonLiveTestRunner(isLeader,(t9,l2)=>this.testBasic(t9,l2)))}async testBasicLive(isLeader){this.settings.liveSync=!0;await this.saveSettings();await this._test("basic",async()=>await this.nonLiveTestRunner(isLeader,(t9,l2)=>this.testBasic(t9,l2)))}async _everyModuleTestMultiDevice(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);const isLeader=-1===this.core.services.vault.vaultName().indexOf("recv");this.addTestResult("-------",!0,"Test as "+(isLeader?"Leader":"Receiver"));try{this._log("Starting Test");await this.testBasicEvent(isLeader);this.settings.remoteType==REMOTE_MINIO&&await this.testBasicLive(isLeader)}catch(e3){this._log(e3);this._log(`Error: ${e3}`);return Promise.resolve(!1)}return Promise.resolve(!0)}onBindFunction(core,services){services.test.testMultiDevice.addHandler(this._everyModuleTestMultiDevice.bind(this))}};ModuleReplicateTest=class extends AbstractObsidianModule{constructor(){super(...arguments);this.testRootPath="_test/";this.testInfoPath="_testinfo/";this.watchIsSynchronised=!1}get isLeader(){return this.services.vault.getVaultName().indexOf("dev")>=0&&this.services.vault.vaultName().indexOf("recv")<0}get nameByKind(){return this.isLeader?this.isLeader?"LEADER":void 0:"RECV"}get pairName(){return this.isLeader?"RECV":this.isLeader?void 0:"LEADER"}async readFileContent(file){try{return await this.core.storageAccess.readHiddenFileText(file)}catch(e3){return""}}async dumpList(){if(this.settings.syncInternalFiles){this._log("Write file list (Include Hidden)");await this.__dumpFileListIncludeHidden("files.md")}else{this._log("Write file list");await this.__dumpFileList("files.md")}}async _everyBeforeReplicate(showMessage){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this.dumpList();return!0}_everyOnloadAfterLoadSettings(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);this.addCommand({id:"dump-file-structure-normal",name:"Dump Structure (Normal)",callback:()=>{this.__dumpFileList("files.md").finally(()=>{this.refreshSyncStatus()})}});this.addCommand({id:"dump-file-structure-ih",name:"Dump Structure (Include Hidden)",callback:()=>{this.__dumpFileListIncludeHidden("files.md")}});this.addCommand({id:"dump-file-structure-auto",name:"Dump Structure",callback:()=>{this.dumpList()}});this.addCommand({id:"dump-file-test",name:"Perform Test (Dev) "+(this.isLeader?"(Leader)":"(Recv)"),callback:()=>{this.performTestManually()}});this.addCommand({id:"watch-sync-result",name:"Watch sync result is matched between devices",callback:()=>{this.watchIsSynchronised=!this.watchIsSynchronised;this.refreshSyncStatus()}});this.app.vault.on("modify",async file=>{file.path.startsWith(this.testInfoPath)?await this.refreshSyncStatus():scheduleTask("dumpStatus",125,async()=>{await this.dumpList();return!0})});this.statusBarSyncStatus=this.plugin.addStatusBarItem();return Promise.resolve(!0)}async getSyncStatusAsText(){const fileMine=this.testInfoPath+this.nameByKind+"/files.md",filePair=this.testInfoPath+this.pairName+"/files.md",mine=(0,import_obsidian.parseYaml)(await this.readFileContent(fileMine)),pair=(0,import_obsidian.parseYaml)(await this.readFileContent(filePair)),result=[];mine.length!=pair.length&&result.push(`File count is different: ${mine.length} vs ${pair.length}`);const filesAll=new Set([...mine.map(e3=>e3.path),...pair.map(e3=>e3.path)]);for(const file of filesAll){const mineFile=mine.find(e3=>e3.path==file),pairFile=pair.find(e3=>e3.path==file);if(mineFile&&pairFile){mineFile.size!=pairFile.size&&result.push(`Size is different: ${file} ${mineFile.size} vs ${pairFile.size}`);mineFile.hash!=pairFile.hash&&result.push(`Hash is different: ${file} ${mineFile.hash} vs ${pairFile.hash}`)}else result.push(`File not found: ${file}`)}eventHub.emitEvent("debug-sync-status",result);return result.join("\n")}async refreshSyncStatus(){if(this.watchIsSynchronised){const syncStatus=await this.getSyncStatusAsText();if(syncStatus){this.statusBarSyncStatus.setText("Sync Status: Having Error");this._log(`Sync Status: Having Error\n${syncStatus}`,LOG_LEVEL_INFO)}else this.statusBarSyncStatus.setText("Sync Status: Synchronised")}else this.statusBarSyncStatus.setText("")}async __dumpFileList(outFile){if(!this.core||!this.core.storageAccess){this._log("No storage access",LOG_LEVEL_INFO);return}const files=await this.core.storageAccess.getFiles(),out=[],webcrypto6=await getWebCrypto();for(const file of files){if(!await this.services.vault.isTargetFile(file.path))continue;if(file.path.startsWith(this.testInfoPath))continue;const stat=await this.core.storageAccess.stat(file.path);if(stat){const hashSrc=await this.core.storageAccess.readHiddenFileBinary(file.path),hash3=await webcrypto6.subtle.digest("SHA-1",hashSrc),hashStr=uint8ArrayToHexString(new Uint8Array(hash3)),item={path:file.path,name:file.name,size:stat.size,mtime:stat.mtime,hash:hashStr};out.push(item)}}out.sort((a2,b3)=>a2.path.localeCompare(b3.path));if(outFile){outFile=this.testInfoPath+this.nameByKind+"/"+outFile;await this.core.storageAccess.ensureDir(outFile);await this.core.storageAccess.writeHiddenFileAuto(outFile,(0,import_obsidian.stringifyYaml)(out))}this._log(`Dumped ${out.length} files`,LOG_LEVEL_INFO)}async __dumpFileListIncludeHidden(outFile){const ignorePatterns=getFileRegExp(this.core.settings,"syncInternalFilesIgnorePatterns"),targetPatterns=getFileRegExp(this.core.settings,"syncInternalFilesTargetPatterns"),out=[],files=await this.core.storageAccess.getFilesIncludeHidden("",targetPatterns,ignorePatterns),webcrypto6=await getWebCrypto();for(const file of files){if(file.startsWith(this.testInfoPath))continue;const stat=await this.core.storageAccess.statHidden(file);if(stat){const hashSrc=await this.core.storageAccess.readHiddenFileBinary(file),hash3=await webcrypto6.subtle.digest("SHA-1",hashSrc),hashStr=uint8ArrayToHexString(new Uint8Array(hash3)),item={path:file,name:file.split("/").pop(),size:stat.size,mtime:stat.mtime,hash:hashStr};out.push(item)}}out.sort((a2,b3)=>a2.path.localeCompare(b3.path));if(outFile){outFile=this.testInfoPath+this.nameByKind+"/"+outFile;await this.core.storageAccess.ensureDir(outFile);await this.core.storageAccess.writeHiddenFileAuto(outFile,(0,import_obsidian.stringifyYaml)(out))}this._log(`Dumped ${out.length} files`,LOG_LEVEL_NOTICE)}async collectTestFiles(){const files=["README.md","docs/adding_translations.md","docs/design_docs_of_journalsync.md","docs/design_docs_of_keep_newborn_chunks.md","docs/design_docs_of_prefixed_hidden_file_sync.md","docs/design_docs_of_sharing_tweak_value.md","docs/quick_setup_cn.md","docs/quick_setup_ja.md","docs/quick_setup.md","docs/settings_ja.md","docs/settings.md","docs/setup_cloudant_ja.md","docs/setup_cloudant.md","docs/setup_flyio.md","docs/setup_own_server_cn.md","docs/setup_own_server_ja.md","docs/setup_own_server.md","docs/tech_info_ja.md","docs/tech_info.md","docs/terms.md","docs/troubleshooting.md","images/1.png","images/2.png","images/corrupted_data.png","images/hatch.png","images/lock_pattern1.png","images/lock_pattern2.png","images/quick_setup_1.png","images/quick_setup_2.png","images/quick_setup_3.png","images/quick_setup_3b.png","images/quick_setup_4.png","images/quick_setup_5.png","images/quick_setup_6.png","images/quick_setup_7.png","images/quick_setup_8.png","images/quick_setup_9_1.png","images/quick_setup_9_2.png","images/quick_setup_10.png","images/remote_db_setting.png","images/write_logs_into_the_file.png"];for(const file of files){const remote="https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/refs/heads/main/"+file,local=this.testRootPath+file;try{const f4=(await(0,import_obsidian.requestUrl)(remote)).arrayBuffer;await this.core.storageAccess.ensureDir(local);await this.core.storageAccess.writeHiddenFileAuto(local,f4)}catch(ex){this._log(`Could not fetch ${remote}`,LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE)}}await this.dumpList()}async waitFor(proc,timeout=1e4){await delay(100);const start=Date.now();for(;!await proc();){if(timeout>0&&Date.now()-start>timeout){this._log("Timeout");return!1}await delay(500)}return!0}async testConflictedManually1(){await this.services.replication.replicate();this.isLeader&&await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md","Resolve! \n*****, the amazing chocolatier!!");await this.services.replication.replicate();await this.services.replication.replicate();if("no"==await this.core.confirm.askYesNoDialog("Ready to begin the test conflict Manually 1?",{timeout:30,defaultOption:"Yes"}))return;const fileA="Resolve to KEEP THIS\nWilly Wonka, Willy Wonka, the amazing chocolatier!!";this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md",fileA):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"wonka.md","Resolve to DISCARD THIS\nCharlie Bucket, Charlie Bucket, the amazing chocolatier!!");if("no"!=await this.core.confirm.askYesNoDialog("Ready to check the result of Manually 1?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return!!await this.waitFor(async()=>{await this.services.replication.replicate();return 1==await this.__assertStorageContent(this.testRootPath+"wonka.md",fileA,!1,!0)},3e4)||await this.__assertStorageContent(this.testRootPath+"wonka.md",fileA,!1,!0)}}async testConflictedManually2(){await this.services.replication.replicate();this.isLeader&&await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve To concatenate\nABCDEFG");await this.services.replication.replicate();await this.services.replication.replicate();if("no"==await this.core.confirm.askYesNoDialog("Ready to begin the test conflict Manually 2?",{timeout:30,defaultOption:"Yes"}))return;const concatenated="Resolve to Concatenate\nABCDEFGHIJKLMNOPQRSTUVWXYZ";this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve to Concatenate\nABCDEFGHIJKLMNOPQRSTYZ"):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"concat.md","Resolve to Concatenate\nAJKLMNOPQRSTUVWXYZ");if("no"!=await this.core.confirm.askYesNoDialog("Ready to test conflict Manually 2?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return!!await this.waitFor(async()=>{await this.services.replication.replicate();return 1==await this.__assertStorageContent(this.testRootPath+"concat.md",concatenated,!1,!0)},3e4)||await this.__assertStorageContent(this.testRootPath+"concat.md",concatenated,!1,!0)}}async testConflictAutomatic(){if(this.isLeader){const baseDoc="Tasks!\n- [ ] Task 1\n- [ ] Task 2\n- [ ] Task 3\n- [ ] Task 4\n";await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md",baseDoc)}await delay(100);await this.services.replication.replicate();await this.services.replication.replicate();if("no"!=await this.core.confirm.askYesNoDialog("Ready to test conflict?",{timeout:30,defaultOption:"Yes"})){this.isLeader?await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [v] Task 2\n- [ ] Task 3\n- [ ] Task 4\n"):await this.core.storageAccess.writeHiddenFileAuto(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [ ] Task 2\n- [v] Task 3\n- [ ] Task 4\n");await this.services.replication.replicate();await this.services.replication.replicate();await delay(1e3);if("no"!=await this.core.confirm.askYesNoDialog("Ready to check result?",{timeout:30,defaultOption:"Yes"})){await this.services.replication.replicate();await this.services.replication.replicate();return this.__assertStorageContent(this.testRootPath+"task.md","Tasks!\n- [ ] Task 1\n- [v] Task 2\n- [v] Task 3\n- [ ] Task 4\n",!1,!0)}}}async checkConflictResolution(){this._log("Before testing conflicted files, resolve all once",LOG_LEVEL_NOTICE);await this.services.conflict.resolveAllConflictedFilesByNewerOnes();await this.services.conflict.resolveAllConflictedFilesByNewerOnes();await this.services.replication.replicate();await delay(1e3);if(!await this.testConflictAutomatic()){this._log("Conflict resolution (Auto) failed",LOG_LEVEL_NOTICE);return!1}if(!await this.testConflictedManually1()){this._log("Conflict resolution (Manual1) failed",LOG_LEVEL_NOTICE);return!1}if(!await this.testConflictedManually2()){this._log("Conflict resolution (Manual2) failed",LOG_LEVEL_NOTICE);return!1}return!0}async __assertStorageContent(fileName,content,inverted=!1,showResult=!1){try{const fileContent=await this.core.storageAccess.readHiddenFileText(fileName);let result=fileContent===content;inverted&&(result=!result);if(result)return!0;showResult&&this._log(`Content is not same \n Expected:${content}\n Actual:${fileContent}`,LOG_LEVEL_VERBOSE);return`Content is not same \n Expected:${content}\n Actual:${fileContent}`}catch(e3){this._log(`Cannot assert storage content: ${e3}`);return!1}}async performTestManually(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this.checkConflictResolution()}async _everyModuleTestMultiDevice(){if(!this.settings.enableDebugTools)return Promise.resolve(!0);await this._test("Conflict resolution",async()=>await this.checkConflictResolution());return this.testDone()}onBindFunction(core,services){services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this));services.test.testMultiDevice.addHandler(this._everyModuleTestMultiDevice.bind(this))}};LocalDatabaseMaintenance=class extends LiveSyncCommands{onunload(){}onload(){this.plugin.addCommand({id:"analyse-database",name:"Analyse Database Usage (advanced)",icon:"database-search",callback:async()=>{await this.analyseDatabase()}});this.plugin.addCommand({id:"gc-v3",name:"Garbage Collection V3 (advanced, beta)",icon:"trash-2",callback:async()=>{await this.gcv3()}});eventHub.onEvent(EVENT_ANALYSE_DB_USAGE,()=>this.analyseDatabase());eventHub.onEvent(EVENT_REQUEST_PERFORM_GC_V3,()=>this.gcv3())}async allChunks(includeDeleted=!1){const p2=this._progress("",LOG_LEVEL_NOTICE);p2.log("Retrieving chunks informations..");try{return await this.localDatabase.allChunks(includeDeleted)}finally{p2.done()}}get database(){return this.localDatabase.localDatabase}clearHash(){this.localDatabase.clearCaches()}async confirm(title,message,affirmative="Yes",negative="No"){return await this.core.confirm.askSelectStringDialogue(message,[affirmative,negative],{title,defaultAction:affirmative})===affirmative}isAvailable(){if(!this.settings.doNotUseFixedRevisionForChunks){this._notice("Please enable 'Compute revisions for chunks' in settings to use Garbage Collection.");return!1}if(this.settings.readChunksOnline){this._notice("Please disable 'Read chunks online' in settings to use Garbage Collection.");return!1}return!0}async resurrectChunks(){if(!this.isAvailable())return;const{used,existing}=await this.allChunks(!0),excessiveDeletions=[...existing].filter(([key3,e3])=>e3._deleted).filter(([key3,e3])=>used.has(e3._id)).map(([key3,e3])=>e3),completelyLostChunks=[],dataLostChunks=[...existing].filter(([key3,e3])=>e3._deleted&&""===e3.data).map(([key3,e3])=>e3).filter(e3=>used.has(e3._id));for(const e3 of dataLostChunks){let resurrected=null;const availableRevs=((await this.database.get(e3._id,{rev:e3._rev,revs:!0,revs_info:!0,conflicts:!0}))._revs_info||[]).filter(e4=>"available"==e4.status).map(e4=>e4.rev).sort((a2,b3)=>getNoFromRev(a2)-getNoFromRev(b3));for(const rev3 of availableRevs){const revDoc=await this.database.get(e3._id,{rev:rev3});if("leaf"==revDoc.type&&""!==revDoc.data){resurrected=revDoc.data;break}}null!==resurrected?excessiveDeletions.push({...e3,data:resurrected,_deleted:!1}):completelyLostChunks.push(e3._id)}const resurrectChunks=excessiveDeletions.filter(e3=>""!==e3.data).map(e3=>({...e3,_deleted:!1}));if(0==resurrectChunks.length){this._notice("No chunks are found to be resurrected.");return}const message=`We have following chunks that are deleted but still used in the database.\n\n- Completely lost chunks: ${completelyLostChunks.length}\n- Resurrectable chunks: ${resurrectChunks.length}\n\nDo you want to resurrect these chunks?`;if(await this.confirm("Resurrect Chunks",message,"Resurrect","Cancel")){const result=await this.database.bulkDocs(resurrectChunks);this.clearHash();const resurrectedChunks=result.filter(e3=>"ok"in e3).map(e3=>e3.id);this._notice(`Resurrected chunks: ${resurrectedChunks.length} / ${resurrectChunks.length}`)}else this._notice("Resurrect operation is cancelled.")}async commitFileDeletion(){if(!this.isAvailable())return;const p2=this._progress("",LOG_LEVEL_NOTICE);p2.log("Searching for deleted files..");const deletedDocs=(await this.database.allDocs({include_docs:!0})).rows.filter(e3=>{var _a8,_b5,_c3;return("newnote"==(null==(_a8=e3.doc)?void 0:_a8.type)||"plain"==(null==(_b5=e3.doc)?void 0:_b5.type))&&(null==(_c3=e3.doc)?void 0:_c3.deleted)});if(0==deletedDocs.length){p2.done("No deleted files found.");return}p2.log(`Found ${deletedDocs.length} deleted files.`);const message=`We have following files that are marked as deleted.\n\n- Deleted files: ${deletedDocs.length}\n\nAre you sure to delete these files permanently?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation affects the database permanently. Deleted files will not be recovered after this operation.\n> And, the chunks that are used in the deleted files will be ready for compaction.`,deletingDocs=deletedDocs.map(e3=>({...e3.doc,_deleted:!0}));if(await this.confirm("Delete Files",message,"Delete","Cancel")){const result=await this.database.bulkDocs(deletingDocs);this.clearHash();p2.done(`Deleted ${result.filter(e3=>"ok"in e3).length} / ${deletedDocs.length} files.`)}else p2.done("Deletion operation is cancelled.")}async commitChunkDeletion(){if(!this.isAvailable())return;const{existing}=await this.allChunks(!0),deletedChunks=[...existing].filter(([key3,e3])=>e3._deleted&&""!==e3.data).map(([key3,e3])=>e3),deletedNotVacantChunks=deletedChunks.map(e3=>({...e3,data:"",_deleted:!0})),humanSize=sizeToHumanReadable(deletedChunks.reduce((acc,e3)=>acc+e3.data.length,0)),message=`We have following chunks that are marked as deleted.\n\n- Deleted chunks: ${deletedNotVacantChunks.length} (${humanSize})\n\nAre you sure to delete these chunks permanently?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation finally reduces the capacity of the remote.`;if(0!=deletedNotVacantChunks.length)if(await this.confirm("Delete Chunks",message,"Delete","Cancel")){const result=await this.database.bulkDocs(deletedNotVacantChunks);this.clearHash();this._notice(`Deleted chunks: ${result.filter(e3=>"ok"in e3).length} / ${deletedNotVacantChunks.length}`)}else this._notice("Deletion operation is cancelled.");else this._notice("No deleted chunks found.")}async markUnusedChunks(){if(!this.isAvailable())return;const{used,existing}=await this.allChunks(),deleteChunks=[...existing].filter(([key3,e3])=>!used.has(e3._id)).map(([key3,e3])=>e3).map(e3=>({...e3,_deleted:!0})),humanSize=sizeToHumanReadable(deleteChunks.reduce((acc,e3)=>acc+e3.data.length,0));if(0==deleteChunks.length){this._notice("No unused chunks found.");return}const message=`We have following chunks that are not used from any files.\n\n- Chunks: ${deleteChunks.length} (${humanSize})\n\nAre you sure to mark these chunks to be deleted?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> This operation will not reduces the capacity of the remote until permanent deletion.`;if(await this.confirm("Mark unused chunks",message,"Mark","Cancel")){const result=await this.database.bulkDocs(deleteChunks);this.clearHash();this._notice(`Marked chunks: ${result.filter(e3=>"ok"in e3).length} / ${deleteChunks.length}`)}}async removeUnusedChunks(){const{used,existing}=await this.allChunks(),unusedChunks=[...existing].filter(([key3,e3])=>!used.has(e3._id)).map(([key3,e3])=>e3),deleteChunks=unusedChunks.map(e3=>({...e3,data:"",_deleted:!0})),humanSize=sizeToHumanReadable(unusedChunks.reduce((acc,e3)=>acc+e3.data.length,0));if(0==deleteChunks.length){this._notice("No unused chunks found.");return}const message=`We have following chunks that are not used from any files.\n\n- Chunks: ${deleteChunks.length} (${humanSize})\n\nAre you sure to delete these chunks?\n\nNote: **Make sure to synchronise all devices before deletion.**\n\n> [!Note]\n> Chunks referenced from deleted files are not deleted. Please run "Commit File Deletion" before this operation.`;if(await this.confirm("Mark unused chunks",message,"Mark","Cancel")){const result=await this.database.bulkDocs(deleteChunks);this._notice(`Deleted chunks: ${result.filter(e3=>"ok"in e3).length} / ${deleteChunks.length}`);this.clearHash()}}async scanUnusedChunks(){const kvDB=this.core.kvDB,chunkSet=await kvDB.get("chunk-set")||new Set,chunkUsageMap=await kvDB.get("doc-usage-map")||new Map,unusedSet=new Set([...chunkSet]);for(const[,revIdMap]of chunkUsageMap){const sortedRevId=[...revIdMap.entries()].sort((a2,b3)=>getNoFromRev(b3[0])-getNoFromRev(a2[0]));sortedRevId.length;sortedRevId.slice(0,10).forEach(e3=>e3[1].forEach(ee=>unusedSet.delete(ee)))}return{chunkSet,chunkUsageMap,unusedSet}}async trackChanges(fromStart=!1,showNotice=!1){if(!this.isAvailable())return;const logLevel=showNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,kvDB=this.core.kvDB,previousSeq=fromStart?"":await kvDB.get("gc-seq"),chunkSet=await kvDB.get("chunk-set")||new Set,chunkUsageMap=await kvDB.get("doc-usage-map")||new Map,db=this.localDatabase.localDatabase,verbose2=msg=>this._verbose(msg),processDoc=async(doc,isDeleted2)=>{if(!("children"in doc))return;const id=doc._id,rev3=doc._rev,deleted=doc._deleted||isDeleted2,softDeleted=doc.deleted,children=doc.children||[];chunkUsageMap.has(id)||chunkUsageMap.set(id,new Map);for(const chunkId of children)deleted?chunkUsageMap.get(id).delete(rev3):chunkUsageMap.get(id).set(rev3,(chunkUsageMap.get(id).get(rev3)||new Set).add(chunkId));verbose2(`Tracking chunk: ${id}/${rev3} (${null==doc?void 0:doc.path}), deleted: ${deleted?"yes":"no"} Soft-Deleted:${softDeleted?"yes":"no"}`);return await Promise.resolve()},saveState=async seq=>{await kvDB.set("gc-seq",seq);await kvDB.set("chunk-set",chunkSet);await kvDB.set("doc-usage-map",chunkUsageMap)},processDocRevisions=async doc=>{var _a8;try{const oldRevisions=await db.get(doc._id,{revs:!0,revs_info:!0,conflicts:!0}),allRevs=(null==(_a8=oldRevisions._revs_info)?void 0:_a8.length)||0,info3=(oldRevisions._revs_info||[]).filter(e3=>"available"==e3.status&&e3.rev!=doc._rev).filter(info4=>{var _a9;return!(null==(_a9=chunkUsageMap.get(doc._id))?void 0:_a9.has(info4.rev))}),infoLength=info3.length;this._log(`Found ${allRevs} old revisions for ${doc._id} . ${infoLength} items to check `);if(info3.length>0){const oldDocs=await Promise.all(info3.filter(revInfo=>"available"==revInfo.status).map(revInfo=>db.get(doc._id,{rev:revInfo.rev}))).then(docs=>docs.filter(doc2=>doc2));for(const oldDoc of oldDocs)await processDoc(oldDoc,!1)}}catch(ex){if(404==(null==ex?void 0:ex.status))this._log(`No revisions found for ${doc._id}`,LOG_LEVEL_VERBOSE);else{this._log(`Error finding revisions for ${doc._id}`);this._verbose(ex)}}},processChange2=async(doc,isDeleted2,seq)=>{if("leaf"===doc.type){if(isDeleted2)return;chunkSet.add(doc._id)}else if("children"in doc){await processDoc(doc,isDeleted2);await serialized("x-process-doc",async()=>await processDocRevisions(doc))}};let i2=0;await db.changes({since:previousSeq||"",live:!1,conflicts:!0,include_docs:!0,style:"all_docs",return_docs:!1}).on("change",async change=>{var _a8;await processChange2(change.doc,null!=(_a8=change.deleted)&&_a8,change.seq);i2++%100==0&&await saveState(change.seq)}).on("complete",async info3=>{await saveState(info3.last_seq)});const result=await this.scanUnusedChunks(),message=`Total chunks: ${result.chunkSet.size}\nUnused chunks: ${result.unusedSet.size}`;this._log(message,logLevel)}async performGC(showingNotice=!1){var _a8;if(!this.isAvailable())return;await this.trackChanges(!1,showingNotice);const logLevel=showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if("Yes, delete chunks"!==await this.core.confirm.askSelectStringDialogue("This function deletes unused chunks from the device. If there are differences between devices, some chunks may be missing when resolving conflicts.\nBe sure to synchronise before executing.\n\nHowever, if you have deleted them, you may be able to recover them by performing Hatch -> Recreate missing chunks for all files.\n\nAre you ready to delete unused chunks?",["Yes, delete chunks","Cancel"],{title:"Are all devices synchronised?",defaultAction:"Cancel"})){this._log("User cancelled chunk deletion",logLevel);return}const{unusedSet,chunkSet}=await this.scanUnusedChunks(),deleteChunks=await this.database.allDocs({keys:[...unusedSet],include_docs:!0});for(const chunk of deleteChunks.rows)(null==(_a8=null==chunk?void 0:chunk.value)?void 0:_a8.deleted)&&chunkSet.delete(chunk.key);const deleteDocs=deleteChunks.rows.filter(e3=>"doc"in e3).map(e3=>({...e3.doc,_deleted:!0}));this._log(`Deleting chunks: ${deleteDocs.length}`,logLevel);const deleteChunkBatch=arrayToChunkedArray(deleteDocs,100);let successCount=0,errored=0;for(const batch of deleteChunkBatch){const results=await this.database.bulkDocs(batch);for(const result2 of results)if("ok"in result2){chunkSet.delete(result2.id);successCount++}else{this._log(`Failed to delete doc: ${result2.id}`,LOG_LEVEL_VERBOSE);errored++}this._log(`Deleting chunks: ${successCount} `,logLevel,"gc-preforming")}const message=`Garbage Collection completed.\nSuccess: ${successCount}, Errored: ${errored}`;this._log(message,logLevel);const kvDB=this.core.kvDB;await kvDB.set("chunk-set",chunkSet)}async analyseDatabase(){if(!this.isAvailable())return;const db=this.localDatabase.localDatabase,chunkMap=new Map,docMap=new Map,info3=await db.info(),maxSeq=new Number(info3.update_seq);let processed=0,read=0,errored=0;const ft=[],fetchRevision=async(id,rev3,seq)=>{try{processed++;const doc=await db.get(id,{rev:rev3});if(doc){if("children"in doc){const id2=doc._id,rev4=doc._rev,children=doc.children||[],set2=docMap.get(id2)||new Set;set2.add({id:id2,rev:rev4,chunks:new Set(children),uniqueChunks:new Set,sharedChunks:new Set,path:doc.path});docMap.set(id2,set2)}else if("leaf"===doc.type){const id2=doc._id;if(chunkMap.has(id2))return;if(doc._deleted)return;const length=doc.data.length,set2=chunkMap.get(id2)||new Set;set2.add({id:id2,length,refCount:0});chunkMap.set(id2,set2)}read++}else{this._log(`Analysing Database: not found: ${id} / ${rev3}`);errored++}}catch(error){this._log(`Error fetching document ${id} / ${rev3}: $`,LOG_LEVEL_NOTICE);this._log(error,LOG_LEVEL_VERBOSE);errored++}processed%100==0&&this._log(`Analysing database: ${read} (${errored}) / ${maxSeq} `,LOG_LEVEL_NOTICE,"db-analyse")},IDs=this.localDatabase.findEntryNames("","",{});for await(const id of IDs){const revInfos=(await this.localDatabase.getRaw(id,{revs:!0,revs_info:!0,conflicts:!0}))._revs_info||[];for(const revInfo of revInfos)"available"==revInfo.status&&ft.push(fetchRevision(id,revInfo.rev))}await Promise.all(ft);for(const[,docRevs]of docMap)for(const docRev of docRevs)for(const chunkId of docRev.chunks){const chunkInfos=chunkMap.get(chunkId);if(chunkInfos)for(const chunkInfo of chunkInfos){0===chunkInfo.refCount?docRev.uniqueChunks.add(chunkId):docRev.sharedChunks.add(chunkId);chunkInfo.refCount++}}const result=[],getTotalSize=ids=>[...ids].reduce((acc,chunkId)=>{const chunkInfos=chunkMap.get(chunkId);if(chunkInfos)for(const chunkInfo of chunkInfos)acc+=chunkInfo.length;return acc},0);for(const doc of docMap.values())for(const rev3 of doc){const title=`${rev3.path} (${rev3.rev})`,id=rev3.id,revStr=`${getNoFromRev(rev3.rev)}`,revHash=rev3.rev.split("-")[1].substring(0,6),path2=rev3.path,uniqueChunkCount=rev3.uniqueChunks.size,sharedChunkCount=rev3.sharedChunks.size,uniqueChunkSize=getTotalSize(rev3.uniqueChunks),sharedChunkSize=getTotalSize(rev3.sharedChunks);result.push({title,path:path2,rev:revStr,revHash,id,uniqueChunkCount,sharedChunkCount,uniqueChunkSize,sharedChunkSize})}const orphanChunks=[...chunkMap.entries()].filter(([chunkId,infos])=>0===[...infos].reduce((acc,info4)=>acc+info4.refCount,0)),orphanChunkSize=orphanChunks.reduce((acc,[chunkId,infos])=>{for(const info4 of infos)acc+=info4.length;return acc},0);result.push({title:"__orphan",id:"__orphan",path:"__orphan",rev:"1",revHash:"xxxxx",uniqueChunkCount:orphanChunks.length,sharedChunkCount:0,uniqueChunkSize:orphanChunkSize,sharedChunkSize:0});const csvSrc=result.map(e3=>[`${e3.title.replace(/"/g,'""')}"`,`${e3.id}`,`${e3.path}`,`${e3.rev}`,`${e3.revHash}`,`${e3.uniqueChunkCount}`,`${e3.sharedChunkCount}`,`${e3.uniqueChunkSize}`,`${e3.sharedChunkSize}`].join("\t"));csvSrc.unshift(Object.values({title:"Title",id:"Document ID",path:"Path",rev:"Revision No",revHash:"Revision Hash",uniqueChunkCount:"Unique Chunk Count",sharedChunkCount:"Shared Chunk Count",uniqueChunkSize:"Unique Chunk Size",sharedChunkSize:"Shared Chunk Size"}).join("\t"));const csv=csvSrc.join("\n");await this.services.UI.promptCopyToClipboard("Database Analysis data (TSV):",csv)}async compactDatabase(){const replicator=this.core.replicator,remote=await replicator.connectRemoteCouchDBWithSetting(this.settings,!1,!1,!0);if(!remote){this._notice("Failed to connect to remote for compaction.","gc-compact");return}if("string"==typeof remote){this._notice(`Failed to connect to remote for compaction. ${remote}`,"gc-compact");return}const compactResult=await remote.db.compact({interval:1e3});let timeout=12e4;for(;;){const status=await remote.db.info();if(!("compact_running"in status)||!(null==status?void 0:status.compact_running))break;this._notice("Compaction in progress on remote database...","gc-compact");await delay(2e3);timeout-=2e3;if(timeout<=0){this._notice("Compaction on remote database timed out.","gc-compact");break}}compactResult&&"ok"in compactResult?this._notice("Compaction on remote database completed successfully.","gc-compact"):this._notice("Compaction on remote database failed.","gc-compact")}async compactDatabaseWithRevLimit(){return!1}async gcv3(){if(!this.isAvailable())return;const replicator=this.core.replicator;if(!await replicator.openOneShotReplication(this.settings,!1,!1,"sync")){this._notice("Failed to start one-shot replication before Garbage Collection. Garbage Collection Cancelled.");return}const OPTION_CANCEL="Cancel Garbage Collection",info3=await this.core.replicator.getConnectedDeviceList();if(!info3){this._notice("No connected device information found. Cancelling Garbage Collection.");return}const{accepted_nodes,node_info}=info3,infoMissingNodes=[];for(const node of accepted_nodes)node in node_info||infoMissingNodes.push(node);if(infoMissingNodes.length>0){const message2=`The following accepted nodes are missing its node information:\n- ${infoMissingNodes.join("\n- ")}\n\nThis indicates that they have not been connected for some time or have been left on an older version.\nIt is preferable to update all devices if possible. If you have any devices that are no longer in use, you can clear all accepted nodes by locking the remote once.`,OPTION_IGNORE="Ignore and Proceed",buttons2=[OPTION_CANCEL,OPTION_IGNORE],result2=await this.core.confirm.askSelectStringDialogue(message2,buttons2,{title:"Node Information Missing",defaultAction:OPTION_CANCEL});if(result2===OPTION_CANCEL){this._notice("Garbage Collection cancelled by user.");return}result2===OPTION_IGNORE&&this._notice("Proceeding with Garbage Collection, ignoring missing nodes.")}const progressValues=Object.values(node_info).map(e3=>e3.progress.split("-")[0]).map(e3=>parseInt(e3)),maxProgress=Math.max(...progressValues),minProgress=Math.min(...progressValues),progressDifference=maxProgress-minProgress,detail=`> [!INFO]- The connected devices have been detected as follows:\n${Object.entries(node_info).map(([nodeId,nodeData])=>`> - Device: ${nodeData.device_name} (Node ID: ${nodeId})\n> - Obsidian version: ${nodeData.app_version}\n> - Plug-in version: ${nodeData.plugin_version}\n> - Progress: ${nodeData.progress.split("-")[0]}`).join("\n")}\n`,message=0!=progressDifference?`Some devices have differing progress values (max: ${maxProgress}, min: ${minProgress}).\nThis may indicate that some devices have not completed synchronisation, which could lead to conflicts. Strongly recommend confirming that all devices are synchronised before proceeding.`:`All devices have the same progress value (${maxProgress}). Your devices seem to be synchronised. And be able to proceed with Garbage Collection.`,buttons=["Proceed Garbage Collection",OPTION_CANCEL],defaultAction=0!=progressDifference?OPTION_CANCEL:"Proceed Garbage Collection";if("Proceed Garbage Collection"!==await this.core.confirm.askSelectStringDialogue(message+"\n\n"+detail,buttons,{title:"Garbage Collection Confirmation",defaultAction})){this._notice("Garbage Collection cancelled by user.");return}this._notice("Proceeding with Garbage Collection.");const gcStartTime=Date.now(),localDatabase=this.localDatabase.localDatabase,usedChunks=new Set,allChunks=new Map,IDs=this.localDatabase.findEntryNames("","",{});let i2=0;const doc_count=(await localDatabase.info()).doc_count;for await(const id of IDs){const doc=await this.localDatabase.getRaw(id);i2++;i2%100==0&&this._notice(`Garbage Collection: Scanned ${i2} / ~${doc_count} `,"gc-scanning");if(doc)if("children"in doc){const children=doc.children||[];for(const chunkId of children)usedChunks.add(chunkId)}else"leaf"===doc.type&&allChunks.set(doc._id,doc._rev)}this._notice(`Garbage Collection: Scanning completed. Total chunks: ${allChunks.size}, Used chunks: ${usedChunks.size}`,"gc-scanning");const unusedChunks=[...allChunks.keys()].filter(e3=>!usedChunks.has(e3));this._notice(`Garbage Collection: Found ${unusedChunks.length} unused chunks to delete.`,"gc-scanning");const deleteChunkDocs=unusedChunks.map(chunkId=>({_id:chunkId,_deleted:!0,_rev:allChunks.get(chunkId)})),deletedCount=(await localDatabase.bulkDocs(deleteChunkDocs)).filter(e3=>"ok"in e3).length,gcEndTime=Date.now();this._notice(`Garbage Collection completed. Deleted chunks: ${deletedCount} / ${unusedChunks.length}. Time taken: ${(gcEndTime-gcStartTime)/1e3} seconds.`);if(await replicator.openOneShotReplication(this.settings,!1,!1,"pushOnly")){await this.compactDatabase();this.clearHash()}else this._notice("Failed to start replication after Garbage Collection.")}};ServiceContext=class{};ServiceBase=class{constructor(context2){this.context=context2}};ControlService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._unloaded=!1;this.services=dependencies;this._log=createInstanceLogFunction("ControlService",this.services.APIService);this._activated=promiseWithResolvers();this.services.appLifecycleService.onLoaded.addHandler(()=>{this.onActivated();return Promise.resolve(!0)})}hasUnloaded(){return this._unloaded}get activated(){return this._activated.promise}onActivated(){this._activated.resolve(!0)}async applySettings(){await this.services.appLifecycleService.onSuspending();await this.services.settingService.onBeforeRealiseSetting();this.services.databaseService.localDatabase.refreshSettings();await this.services.fileProcessingService.commitPendingFileEvents();await this.services.settingService.onRealiseSetting();if(!this.services.appLifecycleService.isSuspended()){await this.services.appLifecycleService.onResuming();await this.services.appLifecycleService.onResumed();await this.services.settingService.onSettingRealised()}}async _onLiveSyncUnload(){eventHub.emitEvent("plugin-unloaded");await this.services.appLifecycleService.onBeforeUnload();await this.services.appLifecycleService.onAppUnload();cancelAllPeriodicTask();cancelAllTasks();stopAllRunningProcessors();await this.services.appLifecycleService.onUnload();this._unloaded=!0;const localDatabase=this.services.databaseService.localDatabaseDirect;if(null!=localDatabase){const activeReplicator=this.services.replicatorService.getActiveReplicator();activeReplicator&&activeReplicator.closeReplication();localDatabase.onunload();await localDatabase.close()}eventHub.emitEvent(EVENT_PLATFORM_UNLOADED);eventHub.offAll();this._log($msg("moduleLiveSyncMain.logUnloadingPlugin"))}async onLoad(){if(!await this.services.appLifecycleService.onLoad()){this._log("Self-hosted LiveSync cannot be initialised, exiting loading.",128);return!1}return!0}async onReady(){return await this.services.appLifecycleService.onReady()}async onUnload(){return await this._onLiveSyncUnload()}};PathService=class extends ServiceBase{get settings(){return this.settingService.currentSettings()}constructor(context2,dependencies){super(context2);this.settingService=dependencies.settingService}_id2path(id,entry){const temp=id2path_base(id,entry).split(":"),path2=temp.pop(),normalizedPath=this.normalizePath(path2);temp.push(normalizedPath);return temp.join(":")}async _path2id(filename,obfuscatePassphrase,caseInsensitive){const temp=filename.split(":"),path2=temp.pop(),normalizedPath=this.normalizePath(path2);temp.push(normalizedPath);const fixedPath=temp.join(":");return await path2id_base(fixedPath,obfuscatePassphrase,caseInsensitive)}id2path(id,entry,stripPrefix2){const tempId=this._id2path(id,entry);return stripPrefix2&&isInternalMetadata(tempId)?stripInternalMetadataPrefix(tempId):tempId}async path2id(filename,prefix){const destPath=addPrefix(filename,null!=prefix?prefix:""),setting=this.settings;return await this._path2id(destPath,setting.usePathObfuscation?setting.passphrase:"",!setting.handleFilenameCaseSensitive)}getPath(entry){return this.id2path(entry._id,entry)}};ServiceHub=class{constructor(context2,services={}){this._injected={};this.context=context2;this._injected=services}get API(){return this._injected.API||this._api}get path(){return this._injected.path||this._path}get database(){return this._injected.database||this._database}get databaseEvents(){return this._injected.databaseEvents||this._databaseEvents}get replicator(){return this._injected.replicator||this._replicator}get fileProcessing(){return this._injected.fileProcessing||this._fileProcessing}get replication(){return this._injected.replication||this._replication}get remote(){return this._injected.remote||this._remote}get conflict(){return this._injected.conflict||this._conflict}get appLifecycle(){return this._injected.appLifecycle||this._appLifecycle}get setting(){return this._injected.setting||this._setting}get tweakValue(){return this._injected.tweakValue||this._tweakValue}get vault(){return this._injected.vault||this._vault}get test(){return this._injected.test||this._test}get UI(){return this._injected.ui||this._ui}get config(){return this._injected.config||this._config}get keyValueDB(){return this._injected.keyValueDB||this._keyValueDB}get control(){return this._injected.control||this._control}};APIService=class extends ServiceBase{constructor(){super(...arguments);this.requestCount=reactiveSource(0);this.responseCount=reactiveSource(0)}get isOnline(){return!("navigator"in globalThis)||navigator.onLine}webCompatFetch(req,opts){return fetch(req,opts)}nativeFetch(req,opts){throw new Error("nativeFetch is not implemented for this platform")}setInterval(handler,timeout){return globalThis.setInterval(handler,timeout)}clearInterval(timerId){globalThis.clearInterval(timerId)}getSystemConfigDir(){return".livesync"}};Binder=class{constructor(name,initialCallback){this._callback=null;this._name=name;initialCallback&&(this._callback=initialCallback)}assign(callback,override=!1){if(this._callback&&!override)throw new Error(`Handler ${this._name} is already assigned.`);this._callback=callback;return()=>{this._callback=null}}invoke(...args){if(this._callback)return this._callback(...args);throw new Error(`Handler ${this._name} is not assigned.`)}};LazyBinder=class{constructor(name,initialCallback){this._callbackPromise=promiseWithResolvers();this._callback=null;this._name=name;if(initialCallback){this._callback=initialCallback;this._callbackPromise.resolve()}}assign(callback,override=!1){if(this._callback&&!override)throw new Error(`Handler ${this._name} is already assigned.`);this._callback=callback;this._callbackPromise.resolve();return()=>{this._callback=null;this._callbackPromise=promiseWithResolvers()}}async invoke(...args){await this._callbackPromise.promise;if(this._callback)return await this._callback(...args);throw new Error(`Handler ${this._name} is not assigned.`)}};MultiBinder=class{constructor(name){this._callbackMap=new Map;this._isCallbackDirty=!1;this._maxUsedPriority=0;this._sortedCallbacks=[];this._name=name}addHandler(callback,priority=0,allowSwap=!1){this._callbackMap.set(callback,[priority,this._maxUsedPriority++]);this._isCallbackDirty=!0;return()=>{this.removeHandler(callback);this._isCallbackDirty=!0}}removeHandler(callback){this._callbackMap.delete(callback);this._isCallbackDirty=!0}use(callback,priority=0){return this.addHandler(callback,priority)}get _callbacks(){if(this._isCallbackDirty){this._sortedCallbacks=Array.from(this._callbackMap.entries()).sort((a2,b3)=>{const[priorityA,registerOrderA]=a2[1],[priorityB,registerOrderB]=b3[1];return priorityA!==priorityB?priorityA-priorityB:registerOrderA-registerOrderB}).map(entry=>entry[0]);this._isCallbackDirty=!1}return this._sortedCallbacks}};DispatchParallel=class extends MultiBinder{dispatch(...args){const promises=[...this._callbacks].map(async callback=>{try{return await Promise.resolve(callback(...args))}catch(error){return error instanceof Error?error:new Error(String(error))}});return Promise.all(promises)}};BooleanHandlerBase=class extends MultiBinder{};AllHandler=class extends BooleanHandlerBase{async invoke(...args){const _callbacks2=[...this._callbacks];for(const callback of _callbacks2)try{if(!1===await Promise.resolve(callback(...args)))return!1}catch(error){Logger(`AllHandler ${this._name} treated error as failure: ${error}`,LOG_LEVEL_VERBOSE);Logger(error,LOG_LEVEL_VERBOSE);return!1}return!0}};ParallelAllHandler=class extends BooleanHandlerBase{async invoke(...args){const promises=[...this._callbacks].map(async callback=>{try{return await Promise.resolve(callback(...args))}catch(error){Logger(`ParallelAllHandler ${this._name} treated error as failure: ${error}`,LOG_LEVEL_VERBOSE);return!1}});return(await Promise.all(promises)).every(res2=>!0===res2)}};AnySuccessHandler=class extends BooleanHandlerBase{async invoke(...args){const _callbacks2=[...this._callbacks];for(const callback of _callbacks2)try{if(!0===await Promise.resolve(callback(...args)))return!0}catch(error){Logger(`FirstSuccessHandler ${this._name} ignored error: ${error}`,LOG_LEVEL_VERBOSE)}return!1}};FirstResultHandler=class extends MultiBinder{async invoke(...args){const _callbacks2=[...this._callbacks];for(const callback of _callbacks2)try{const result=await Promise.resolve(callback(...args));if(void 0!==result&&!1!==result)return result}catch(error){Logger(`FirstResultHandler ${this._name} ignored error: ${error}`,LOG_LEVEL_VERBOSE)}return!1}};InjectableAPIService=class extends APIService{constructor(){super(...arguments);this.addLog=handlers2().binder("addLog")}getPlatform(){return"unknown"}getCrypto(){if("undefined"!=typeof crypto)return crypto;throw new Error("Crypto API is not available in this environment.")}};AppLifecycleService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.onLayoutReady=handlers2().bailFirstFailure("onLayoutReady");this.onFirstInitialise=handlers2().bailFirstFailure("onFirstInitialise");this.onReady=handlers2().bailFirstFailure("onReady");this.onWireUpEvents=handlers2().bailFirstFailure("onWireUpEvents");this.onInitialise=handlers2().bailFirstFailure("onInitialise");this.onLoad=handlers2().bailFirstFailure("onLoad");this.onSettingLoaded=handlers2().bailFirstFailure("onSettingLoaded");this.onLoaded=handlers2().bailFirstFailure("onLoaded");this.onScanningStartupIssues=handlers2().all("onScanningStartupIssues");this.onAppUnload=handlers2().dispatchParallel("onAppUnload");this.onBeforeUnload=handlers2().all("onBeforeUnload");this.onUnload=handlers2().all("onUnload");this.onSuspending=handlers2().bailFirstFailure("onSuspending");this.onResuming=handlers2().bailFirstFailure("onResuming");this.onResumed=handlers2().bailFirstFailure("onResumed");this._isSuspended=!1;this._isReady=!1;this.getUnresolvedMessages=handlers2().dispatchParallel("getUnresolvedMessages");this.settingService=dependencies.settingService}isSuspended(){const settings=this.settingService.currentSettings();return this._isSuspended||!(null==settings?void 0:settings.isConfigured)}setSuspended(suspend){this._isSuspended=suspend}isReady(){return this._isReady}markIsReady(){this._isReady=!0}resetIsReady(){this._isReady=!1}};AppLifecycleServiceBase=class extends AppLifecycleService{constructor(){super(...arguments);this.askRestart=handlers2().binder("askRestart");this.scheduleRestart=handlers2().binder("scheduleRestart");this.isReloadingScheduled=handlers2().binder("isReloadingScheduled")}};ConflictService=class extends ServiceBase{constructor(){super(...arguments);this.getOptionalConflictCheckMethod=handlers2().firstResult("getOptionalConflictCheckMethod");this.resolveByUserInteraction=handlers2().firstResult("resolveByUserInteraction");this.conflictProcessQueueCount=reactiveSource(0)}};InjectableConflictService=class extends ConflictService{constructor(){super(...arguments);this.queueCheckForIfOpen=handlers2().binder("queueCheckForIfOpen");this.queueCheckFor=handlers2().binder("queueCheckFor");this.ensureAllProcessed=handlers2().binder("ensureAllProcessed");this.resolveByDeletingRevision=handlers2().binder("resolveByDeletingRevision");this.resolve=handlers2().binder("resolve");this.resolveByNewest=handlers2().binder("resolveByNewest");this.resolveAllConflictedFilesByNewerOnes=handlers2().binder("resolveAllConflictedFilesByNewerOnes")}};DatabaseEventService=class extends ServiceBase{constructor(){super(...arguments);this.onUnloadDatabase=handlers2().all("onUnloadDatabase");this.onCloseDatabase=handlers2().all("onCloseDatabase");this.onDatabaseInitialisation=handlers2().bailFirstFailure("onDatabaseInitialisation");this.onDatabaseInitialised=handlers2().bailFirstFailure("onDatabaseInitialised");this.onResetDatabase=handlers2().bailFirstFailure("onResetDatabase");this.onDatabaseHasReady=handlers2().bailFirstFailure("onDatabaseHasReady");this.initialiseDatabase=handlers2().bailFirstFailure("initialiseDatabase")}};InjectableDatabaseEventService=class extends DatabaseEventService{};FileProcessingService=class extends ServiceBase{constructor(){super(...arguments);this.processFileEvent=handlers2().anySuccess("processFileEvent");this.processOptionalFileEvent=handlers2().anySuccess("processOptionalFileEvent");this.commitPendingFileEvents=handlers2().bailFirstFailure("commitPendingFileEvents");this.batched=reactiveSource(0);this.totalQueued=reactiveSource(0);this.processing=reactiveSource(0);this.totalStorageFileEventCount=0}onStorageFileEvent(){this.totalStorageFileEventCount++}};InjectableFileProcessingService=class extends FileProcessingService{};UnresolvedErrorManager=class{constructor(appLifecycleService){this._log=createInstanceLogFunction("UnresolvedErrorManager");this._occurredErrors=new Set;this.appLifecycleService=appLifecycleService;this.appLifecycleService.getUnresolvedMessages.addHandler(this._reportUnresolvedMessages.bind(this))}showError(msg,max_log_level=LEVEL_NOTICE){const level=this._occurredErrors.has(msg)?LEVEL_INFO:max_log_level;this._log(msg,level);if(!this._occurredErrors.has(msg)){this._occurredErrors.add(msg);eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)}}clearError(msg){if(this._occurredErrors.has(msg)){this._occurredErrors.delete(msg);eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)}}clearErrors(){this._occurredErrors.clear();eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR)}countErrors(needle){return Array.from(this._occurredErrors).filter(error=>"string"==typeof error&&-1!==error.indexOf(needle)).length}_reportUnresolvedMessages(){return Promise.resolve(Array.from(this._occurredErrors))}};RemoteService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._authHeader=new AuthorizationHeaderGenerator;this.last_successful_post=!1;this._APIService=dependencies.APIService;this._appLifecycleService=dependencies.appLifecycle;this._settingService=dependencies.setting;this._log=createInstanceLogFunction("RemoteService",dependencies.APIService);this._unresolvedErrors=new UnresolvedErrorManager(this._appLifecycleService)}get hadLastPostFailedBySize(){return!this.last_successful_post}showError(msg,max_log_level=LOG_LEVEL_NOTICE){this._unresolvedErrors.showError(msg,max_log_level)}clearErrors(){this._unresolvedErrors.clearErrors()}async performFetch(req,opts,fetchMethod=0){var _a8;const fetchFunction=1===fetchMethod?this._APIService.nativeFetch.bind(this._APIService):this._APIService.webCompatFetch.bind(this._APIService);this._APIService.requestCount.value=this._APIService.requestCount.value+1;const response=await fetchFunction(req,opts),method=null!=(_a8=null==opts?void 0:opts.method)?_a8:"GET";this.last_successful_post="POST"!=method&&"PUT"!=method||response.ok;const url=new URL("string"==typeof req?req:req.url),localURL=`${url.protocol}//${url.host}${url.pathname}`;this._log(`[REQ] (${method}) ${localURL} -> ${response.status}`,LOG_LEVEL_DEBUG);if(2!==Math.floor(response.status/100))if(404==response.status)"GET"===method&&-1===url.pathname.indexOf("/_local/")&&this._log("Just checkpoint or some server information has been missing. The 404 error shown above is not an error.",LOG_LEVEL_VERBOSE);else{const r4=response.clone();this._log(`The request may have failed. The reason sent by the server: ${r4.status}: ${r4.statusText}`,LOG_LEVEL_NOTICE);try{const result=await r4.text();this._log(result,LOG_LEVEL_VERBOSE)}catch(_){this._log("Could not fetch response body",LOG_LEVEL_VERBOSE);this._log(_,LOG_LEVEL_VERBOSE)}}else this.clearErrors();return response}async connect(uri,auth,disableRequestURI,passphrase,useDynamicIterationCount,performSetup,skipInfo,compression,customHeaders,useRequestAPI,getPBKDF2Salt){if(!isValidRemoteCouchDBURI(uri))return"Remote URI is not valid";if(uri.toLowerCase()!=uri)return"Remote URI and database name could not contain capital letters.";if(-1!==uri.indexOf(" "))return"Remote URI and database name could not contain spaces.";if(!this._APIService.isOnline)return"Network is offline";const conf={adapter:"http",auth:"username"in auth?auth:void 0,skip_setup:!performSetup,fetch:async(url,opts)=>{var _a8;const authHeader=await this._authHeader.getAuthorizationHeader(auth);let size="";const localURL=url.toString().substring(uri.length),method=null!=(_a8=null==opts?void 0:opts.method)?_a8:"GET";if(null==opts?void 0:opts.body){const opts_length=opts.body.toString().length;if(opts_length>1e7&&isCloudantURI(uri)){this.last_successful_post=!1;this._log("This request should fail on IBM Cloudant.",LOG_LEVEL_VERBOSE);throw new Error("This request should fail on IBM Cloudant.")}size=` (${opts_length})`}try{const headers=new Headers(null==opts?void 0:opts.headers);if(customHeaders)for(const[key3,value]of Object.entries(customHeaders))key3&&value&&headers.append(key3,value);"username"in auth||headers.append("authorization",authHeader);try{this._APIService.requestCount.value=this._APIService.requestCount.value+1;return await this.performFetch(url,{...opts,headers},useRequestAPI?1:0)}catch(ex){if(ex instanceof TypeError){if(useRequestAPI){this._log("Failed to request by API.");throw ex}this._log("Failed to fetch by native fetch API. Trying to fetch by API to get more information.");const resp2=await this.performFetch(url,{...opts,headers},1);if(resp2.status/100==2){this.showError("The request was successful by API. But the native fetch API failed! Please check CORS settings on the remote database!. While this condition, you cannot enable LiveSync",LOG_LEVEL_NOTICE);return resp2}const r22=resp2.clone(),msg=await r22.text();this.showError(`Failed to fetch by API. ${resp2.status}: ${msg}`,LOG_LEVEL_NOTICE);return resp2}throw ex}}catch(ex){this._log(`HTTP:${method}${size} to:${localURL} -> failed`,LOG_LEVEL_VERBOSE);const msg=ex instanceof Error?`${null==ex?void 0:ex.name}:${null==ex?void 0:ex.message}`:null==ex?void 0:ex.toString();this.showError(`${MARK_LOG_NETWORK_ERROR}Network Error: Failed to fetch: ${msg}`);this._log(ex,LOG_LEVEL_VERBOSE);-1!==url.toString().indexOf("_bulk_docs")&&(this.last_successful_post=!1);this._log(ex);throw ex}finally{this._APIService.responseCount.value=this._APIService.responseCount.value+1}}},setting=this._settingService.currentSettings(),db=new index_es_default(uri,conf);replicationFilter(db,compression);disableEncryption();"false"!==passphrase&&"string"==typeof passphrase&&enableEncryption(db,passphrase,useDynamicIterationCount,!1,getPBKDF2Salt,setting.E2EEAlgorithm);if(skipInfo)return{db,info:{db_name:"",doc_count:0,update_seq:""}};try{const info3=await db.info();return{db,info:info3}}catch(ex){const msg=`${null==ex?void 0:ex.name}:${null==ex?void 0:ex.message}`;this._log(ex,LOG_LEVEL_VERBOSE);return msg}}};InjectableRemoteService=class extends RemoteService{};ReplicationService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.processSynchroniseResult=handlers2().anySuccess("processSynchroniseResult");this.processOptionalSynchroniseResult=handlers2().anySuccess("processOptionalSynchroniseResult");this.parseSynchroniseResult=handlers2().all("parseSynchroniseResult");this.processVirtualDocument=handlers2().anySuccess("processVirtualDocument");this.onBeforeReplicate=handlers2().bailFirstFailure("onBeforeReplicate");this.onCheckReplicationReady=handlers2().bailFirstFailure("onCheckReplicationReady");this.onReplicationFailed=handlers2().bailFirstFailure("onReplicationFailed");this.previousReplicated=0;this.checkConnectionFailure=handlers2().firstResult("checkConnectionFailure");this.databaseQueueCount=reactiveSource(0);this.storageApplyingCount=reactiveSource(0);this.replicationResultCount=reactiveSource(0);this.appLifecycleService=dependencies.appLifecycleService;this.settingService=dependencies.settingService;this.replicatorService=dependencies.replicatorService;this.APIService=dependencies.APIService;this.fileProcessing=dependencies.fileProcessingService;this.databaseService=dependencies.databaseService;this._log=createInstanceLogFunction("ReplicationService",dependencies.APIService);this._unresolvedErrorManager=new UnresolvedErrorManager(dependencies.appLifecycleService)}showError(msg,max_log_level=LOG_LEVEL_NOTICE){this._unresolvedErrorManager.showError(msg,max_log_level)}clearErrors(){this._unresolvedErrorManager.clearErrors()}async isReplicationReady(showMessage=!1){if(!this.appLifecycleService.isReady()){this._log("Not ready");return!1}const currentSettings=this.settingService.currentSettings();if(isLockAcquired("cleanup")){this._log($msg("Replicator.Message.Cleaned"),LOG_LEVEL_NOTICE);return!1}if(""!=currentSettings.versionUpFlash){this._log($msg("Replicator.Message.VersionUpFlash"),LOG_LEVEL_NOTICE);return!1}if(!await this.fileProcessing.commitPendingFileEvents()){this.showError($msg("Replicator.Message.Pending"),LOG_LEVEL_NOTICE);return!1}if(!this.APIService.isOnline){this.showError("Network is offline",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}if(!await this.onBeforeReplicate(showMessage)){(await this.appLifecycleService.getUnresolvedMessages()).flat().some(e3=>"string"==typeof e3&&-1!==e3.indexOf(MARK_LOG_NETWORK_ERROR))?this._log($msg("Replicator.Message.SomeModuleFailed"),LOG_LEVEL_INFO):this.showError($msg("Replicator.Message.SomeModuleFailed"),LOG_LEVEL_NOTICE);return!1}this.clearErrors();return!0}async performReplication(showMessage){const activeReplicator=this.replicatorService.getActiveReplicator();if(!activeReplicator){this._log("No active replicator found",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);return!1}const settings=this.settingService.currentSettings();return await activeReplicator.openReplication(settings,!1,!!showMessage,!1)||await this.onReplicationFailed(showMessage)}async replicate(showMessage){try{return!!await this.isReplicationReady(showMessage)&&await this.performReplication(showMessage)}finally{this.previousReplicated=Date.now()}}replicateByEvent(showMessage){return shareRunningResult("replication",async()=>{const least=this.settingService.currentSettings().syncMinimumInterval;if(least>0){const now3=Date.now(),elapsed=now3-this.previousReplicated;if(elapsed<least){this._log(`Replication triggered by event is rate limited. Elapsed: ${elapsed}ms, Least interval: ${least}ms`,LOG_LEVEL_VERBOSE);return Promise.resolve(!0)}this.previousReplicated=now3+5e3;return await this.replicate()}return this.replicate()})}getActiveReplicatorFor(usage){const activeReplicator=this.replicatorService.getActiveReplicator();if(!activeReplicator){this._log(`Active replicator not found during ${usage}`,LOG_LEVEL_NOTICE);return!1}return activeReplicator}async replicateAllToRemote(showingNotice=!1,sendChunksInBulkDisabled=!1){if(!this.appLifecycleService.isReady())return!1;if(!await this.onBeforeReplicate(showingNotice)){this._log($msg("Replicator.Message.SomeModuleFailed"),LOG_LEVEL_NOTICE);return!1}const currentSettings=this.settingService.currentSettings(),activeReplicator=this.getActiveReplicatorFor("sending data to remote");if(!activeReplicator)return!1;sendChunksInBulkDisabled||(null==activeReplicator?void 0:activeReplicator.isChunkSendingSupported)&&"yes"==await this.APIService.confirm.askYesNoDialog("Do you want to send all chunks before replication?",{defaultOption:"No",timeout:20})&&await activeReplicator.sendChunks(currentSettings,void 0,!0,0);if(await activeReplicator.replicateAllToServer(currentSettings,showingNotice))return!0;const checkResult=await this.checkConnectionFailure();return"CHECKAGAIN"==checkResult?await activeReplicator.replicateAllToServer(currentSettings,showingNotice):!checkResult}async replicateAllFromRemote(showingNotice=!1){if(!this.appLifecycleService.isReady())return!1;const activeReplicator=this.getActiveReplicatorFor("fetching data from remote");if(!activeReplicator)return!1;const currentSettings=this.settingService.currentSettings();if(await activeReplicator.replicateAllFromServer(currentSettings,showingNotice))return!0;const checkResult=await this.checkConnectionFailure();return"CHECKAGAIN"==checkResult?await activeReplicator.replicateAllFromServer(currentSettings,showingNotice):!checkResult}_getReplicatorAndPerform(action2,perform){const activeReplicator=this.getActiveReplicatorFor(action2);return activeReplicator?perform(this.settingService.currentSettings(),activeReplicator):Promise.resolve()}async markLocked(lockByClean=!1){return await this._getReplicatorAndPerform("marking remote locked",async(currentSettings,activeReplicator)=>await activeReplicator.markRemoteLocked(currentSettings,!0,lockByClean))}async markUnlocked(){return await this._getReplicatorAndPerform("marking remote unlocked",async(currentSettings,activeReplicator)=>await activeReplicator.markRemoteLocked(currentSettings,!1,!1))}async markResolved(){return await this._getReplicatorAndPerform("marking remote resolved",async(currentSettings,activeReplicator)=>await activeReplicator.markRemoteResolved(currentSettings))}};InjectableReplicationService=class extends ReplicationService{};ReplicatorService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.dependencies=dependencies;this._log=createInstanceLogFunction("ReplicatorService");this.onCloseActiveReplication=handlers2().anySuccess("onCloseActiveReplication");this.getNewReplicator=handlers2().firstResult("getNewReplicator");this.onReplicatorInitialised=handlers2().bailFirstFailure("onReplicatorInitialised");this.replicationStatics=reactiveSource({...DEFAULT_REPLICATION_STATICS});this.appLifecycleService=dependencies.appLifecycleService;this._unresolvedErrorManager=new UnresolvedErrorManager(dependencies.appLifecycleService);this.settingService=dependencies.settingService;this.settingService.onRealiseSetting.addHandler(this._initialiseReplicator.bind(this));this.databaseEventService=dependencies.databaseEventService;this.databaseEventService.onResetDatabase.addHandler(this.disposeReplicator.bind(this));this.databaseEventService.onDatabaseInitialisation.addHandler(this.disposeReplicator.bind(this));this.databaseEventService.onDatabaseInitialised.addHandler(this.reinitialiseReplicator.bind(this));this.databaseEventService.onDatabaseHasReady.addHandler(this.reinitialiseReplicator.bind(this));this.appLifecycleService.onSuspending.addHandler(this.suspendReplication.bind(this))}suspendReplication(){const activeReplicator=this._activeReplicator;activeReplicator&&activeReplicator.closeReplication();return Promise.resolve(!0)}async reinitialiseReplicator(){await this.disposeReplicator();await yieldMicrotask();return this._initialiseReplicator()}async disposeReplicator(){this._log("Detect database reset, closing active replicator if exists.");this._activeReplicator&&await this._activeReplicator.closeReplication();this._activeReplicator=void 0;this._replicatorType=void 0;return!0}async _initialiseReplicator(){const message=$msg("Replicator.Message.InitialiseFatalError"),setting=this.settingService.currentSettings();if(!setting){this._activeReplicator=void 0;this._replicatorType=void 0;this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE);return!1}const replicatorType=setting.remoteType;if(replicatorType===this._replicatorType&&this._activeReplicator){this._unresolvedErrorManager.clearError(message);this._log("Active replicator has been kept",LOG_LEVEL_VERBOSE);return!0}{this._log("Acquiring new replicator");const newReplicator=await this.getNewReplicator();if(!newReplicator){this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE);return!1}if(this._activeReplicator){await this._activeReplicator.closeReplication();this._log("Active replicator closed",LOG_LEVEL_VERBOSE)}this._activeReplicator=newReplicator;this._replicatorType=replicatorType;this.replicationStatics.value={...DEFAULT_REPLICATION_STATICS};await yieldMicrotask();if(!await this.onReplicatorInitialised()){this._log("Failed to initialise the replicator, onReplicatorInitialised reported some problems.");this._activeReplicator=void 0;this._replicatorType=void 0;this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE);return!1}const remoteTypeDisplay=replicatorType===RemoteTypes_REMOTE_COUCHDB?"CouchDB":replicatorType;this._log(`Replicator (${remoteTypeDisplay}) initialised and activated`,LOG_LEVEL_VERBOSE);this._unresolvedErrorManager.clearError(message);return!0}}getActiveReplicator(){const message="No replicator has been activated or has not been initialised yet.";if(this._activeReplicator){this._unresolvedErrorManager.clearError(message);return this._activeReplicator}this._unresolvedErrorManager.showError(message,LOG_LEVEL_NOTICE)}};InjectableReplicatorService=class extends ReplicatorService{};TestService=class extends ServiceBase{constructor(){super(...arguments);this.test=handlers2().bailFirstFailure("test");this.testMultiDevice=handlers2().bailFirstFailure("testMultiDevice")}};InjectableTestService=class extends TestService{constructor(){super(...arguments);this.addTestResult=handlers2().binder("addTestResult")}};TweakValueService=class extends ServiceBase{};InjectableTweakValueService=class extends TweakValueService{constructor(){super(...arguments);this.fetchRemotePreferred=handlers2().binder("fetchRemotePreferred");this.checkAndAskResolvingMismatched=handlers2().binder("checkAndAskResolvingMismatched");this.askResolvingMismatched=handlers2().binder("askResolvingMismatched");this.checkAndAskUseRemoteConfiguration=handlers2().binder("checkAndAskUseRemoteConfiguration");this.askUseRemoteConfiguration=handlers2().binder("askUseRemoteConfiguration")}};VaultService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.scanVault=handlers2().bailFirstFailure("scanVault");this.isIgnoredByIgnoreFile=handlers2().anySuccess("isIgnoredByIgnoreFile");this.isTargetFile=handlers2().bailFirstFailure("isTargetFile");this.isTargetFileInExtra=handlers2().anySuccess("isTargetFileInExtra");this.settingService=dependencies.settingService;this.APIService=dependencies.APIService}get settings(){return this.settingService.currentSettings()}vaultName(){return this.APIService.getSystemVaultName()}getVaultName(){return this.vaultName()+(this.settings.additionalSuffixOfDatabaseName?"-"+this.settings.additionalSuffixOfDatabaseName:"")}isFileSizeTooLarge(size){const maxSize=this.settings.syncMaxSizeInMB;return maxSize>0&&size>0&&1024*maxSize*1024<size}shouldCheckCaseInsensitively(){return!this.settings.handleFilenameCaseSensitive}};InjectableVaultService=class extends VaultService{};InjectableServiceHub=class extends ServiceHub{get API(){return this._api}get path(){return this._path}get database(){return this._database}get databaseEvents(){return this._databaseEvents}get replicator(){return this._replicator}get fileProcessing(){return this._fileProcessing}get replication(){return this._replication}get remote(){return this._remote}get conflict(){return this._conflict}get appLifecycle(){return this._appLifecycle}get setting(){return this._setting}get tweakValue(){return this._tweakValue}get vault(){return this._vault}get test(){return this._test}get control(){return this._control}get keyValueDB(){return this._keyValueDB}get UI(){return this._ui}get config(){return this._config}constructor(context2,services){var _a8,_b5,_c3,_d2,_e2,_f,_g,_h2;super(context2,services);this._api=services.API;this._path=services.path;this._database=services.database;this._databaseEvents=null!=(_a8=services.databaseEvents)?_a8:new InjectableDatabaseEventService(context2);this._replicator=services.replicator;this._fileProcessing=null!=(_b5=services.fileProcessing)?_b5:new InjectableFileProcessingService(context2);this._conflict=null!=(_c3=services.conflict)?_c3:new InjectableConflictService(context2);this._appLifecycle=services.appLifecycle;this._setting=services.setting;this._remote=null!=(_d2=services.remote)?_d2:new InjectableRemoteService(context2,{APIService:this._api,appLifecycle:this._appLifecycle,setting:this._setting});this._tweakValue=null!=(_e2=services.tweakValue)?_e2:new InjectableTweakValueService(context2);this._replication=null!=(_f=services.replication)?_f:new InjectableReplicationService(context2,{APIService:this._api,appLifecycleService:this._appLifecycle,replicatorService:this._replicator,settingService:this._setting,databaseService:this._database,fileProcessingService:this._fileProcessing});this._vault=services.vault;this._test=null!=(_g=services.test)?_g:new InjectableTestService(context2);this._ui=services.ui;this._config=services.config;this._keyValueDB=services.keyValueDB;this._control=null!=(_h2=services.control)?_h2:new ControlService(context2,{appLifecycleService:this._appLifecycle,databaseService:this._database,fileProcessingService:this._fileProcessing,settingService:this._setting,APIService:this._api,replicatorService:this._replicator})}};ObsidianServiceContext=class extends ServiceContext{constructor(app,plugin3,liveSyncPlugin){super();this.app=app;this.plugin=plugin3;this.liveSyncPlugin=liveSyncPlugin}};ConfigService=class extends ServiceBase{};ConfigServiceBrowserCompat=class extends ConfigService{constructor(context2,dependencies){super(context2);this._settingService=dependencies.settingService;this._log=createInstanceLogFunction("ConfigService",dependencies.APIService)}getSmallConfig(key3){return this._settingService.getSmallConfig(key3)}setSmallConfig(key3,value){return this._settingService.setSmallConfig(key3,value)}deleteSmallConfig(key3){return this._settingService.deleteSmallConfig(key3)}};instanceOfAny=(object,constructors)=>constructors.some(c3=>object instanceof c3);transactionDoneMap=new WeakMap;transformCache=new WeakMap;reverseTransformCache=new WeakMap;idbProxyTraps={get(target,prop2,receiver){if(target instanceof IDBTransaction){if("done"===prop2)return transactionDoneMap.get(target);if("store"===prop2)return receiver.objectStoreNames[1]?void 0:receiver.objectStore(receiver.objectStoreNames[0])}return wrap(target[prop2])},set(target,prop2,value){target[prop2]=value;return!0},has:(target,prop2)=>target instanceof IDBTransaction&&("done"===prop2||"store"===prop2)||prop2 in target};unwrap=value=>reverseTransformCache.get(value);readMethods=["get","getKey","getAll","getAllKeys","count"];writeMethods=["put","add","delete","clear"];cachedMethods=new Map;replaceTraps(oldTraps=>({...oldTraps,get:(target,prop2,receiver)=>getMethod(target,prop2)||oldTraps.get(target,prop2,receiver),has:(target,prop2)=>!!getMethod(target,prop2)||oldTraps.has(target,prop2)}));advanceMethodProps=["continue","continuePrimaryKey","advance"];methodMap={};advanceResults=new WeakMap;ittrProxiedCursorToOriginalProxy=new WeakMap;cursorIteratorTraps={get(target,prop2){if(!advanceMethodProps.includes(prop2))return target[prop2];let cachedFunc=methodMap[prop2];cachedFunc||(cachedFunc=methodMap[prop2]=function(...args){advanceResults.set(this,ittrProxiedCursorToOriginalProxy.get(this)[prop2](...args))});return cachedFunc}};replaceTraps(oldTraps=>({...oldTraps,get:(target,prop2,receiver)=>isIteratorProp(target,prop2)?iterate:oldTraps.get(target,prop2,receiver),has:(target,prop2)=>isIteratorProp(target,prop2)||oldTraps.has(target,prop2)}));databaseCache=new Map;IDBKeyValueDatabase=class{constructor(dbKey){this._dbPromise=null;this._isDestroyed=!1;this.destroyedPromise=null;this.dbKey=dbKey;this.storeKey=dbKey}get isDestroyed(){return this._isDestroyed}get ensuredDestroyed(){return this.destroyedPromise?this.destroyedPromise:Promise.resolve()}async getIsReady(){await this.ensureDB();return!1===this.isDestroyed}ensureDB(){if(this._isDestroyed)throw new Error("Database is destroyed");if(this._dbPromise)return this._dbPromise;this._dbPromise=openDB(this.dbKey,void 0,{upgrade:(db,_oldVersion,_newVersion,_transaction,_event)=>{if(!db.objectStoreNames.contains(this.storeKey))return db.createObjectStore(this.storeKey)},blocking:(currentVersion,blockedVersion,event2)=>{Logger(`Blocking database open for ${this.dbKey}: currentVersion=${currentVersion}, blockedVersion=${blockedVersion}`,LOG_LEVEL_VERBOSE);this.closeDB(!0)},blocked:(currentVersion,blockedVersion,event2)=>{Logger(`Database open blocked for ${this.dbKey}: currentVersion=${currentVersion}, blockedVersion=${blockedVersion}`,LOG_LEVEL_VERBOSE)},terminated:()=>{Logger(`Database connection terminated for ${this.dbKey}`,LOG_LEVEL_VERBOSE);this._dbPromise=null}}).catch(e3=>{this._dbPromise=null;throw e3});return this._dbPromise}async closeDB(setDestroyed=!1){if(this._dbPromise){const tempPromise=this._dbPromise;this._dbPromise=null;try{(await tempPromise).close()}catch(e3){Logger("Error closing database");Logger(e3,LOG_LEVEL_VERBOSE)}}this._dbPromise=null;if(setDestroyed){this._isDestroyed=!0;this.destroyedPromise=Promise.resolve()}}get DB(){return this._isDestroyed?Promise.reject(new Error("Database is destroyed")):this.ensureDB()}async get(key3){const db=await this.DB;return await db.get(this.storeKey,key3)}async set(key3,value){const db=await this.DB;await db.put(this.storeKey,value,key3);return key3}async del(key3){const db=await this.DB;return await db.delete(this.storeKey,key3)}async clear(){const db=await this.DB;return await db.clear(this.storeKey)}async keys(query3,count){const db=await this.DB;return await db.getAllKeys(this.storeKey,query3,count)}async close(){await this.closeDB()}async destroy(){this._isDestroyed=!0;this.destroyedPromise=(async()=>{await this.closeDB();await deleteDB(this.dbKey,{blocked:()=>{Logger(`Database delete blocked for ${this.dbKey}`)}})})();await this.destroyedPromise}};KeyValueDBService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._log=createInstanceLogFunction("KeyValueDBService");this.databaseEvents=dependencies.databaseEvents;this.vault=dependencies.vault;this.appLifecycle=dependencies.appLifecycle;this.databaseEvents.onResetDatabase.addHandler(this._everyOnResetDatabase.bind(this));this.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));this.databaseEvents.onDatabaseInitialisation.addHandler(this._everyOnInitializeDatabase.bind(this));this.databaseEvents.onUnloadDatabase.addHandler(this._onOtherDatabaseUnload.bind(this));this.databaseEvents.onCloseDatabase.addHandler(this._onOtherDatabaseClose.bind(this))}get simpleStore(){if(!this._simpleStore)throw new Error("SimpleStore is not initialized yet");return this._simpleStore}get kvDB(){if(!this._kvDB)throw new Error("KeyValueDB is not initialized yet");return this._kvDB}async _everyOnResetDatabase(any){var _a8,_b5;try{const kvDBKey="queued-files";await(null==(_a8=this._kvDB)?void 0:_a8.del(kvDBKey));await(null==(_b5=this._kvDB)?void 0:_b5.destroy());await yieldMicrotask();this._kvDB=await OpenKeyValueDatabase(this.vault.getVaultName()+"-livesync-kv");await delay(100)}catch(e3){this._kvDB=void 0;this._log("Failed to reset KeyValueDB",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}async tryCloseKvDB(){var _a8;try{await(null==(_a8=this._kvDB)?void 0:_a8.close());return!0}catch(e3){this._log("Failed to close KeyValueDB",LOG_LEVEL_VERBOSE);this._log(e3);return!1}}async openKeyValueDB(){await delay(10);try{await this.tryCloseKvDB();await delay(10);await yieldMicrotask();this._kvDB=await OpenKeyValueDatabase(this.vault.getVaultName()+"-livesync-kv");await yieldMicrotask();await delay(100)}catch(e3){this._kvDB=void 0;this._log("Failed to open KeyValueDB",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}return!0}async _onOtherDatabaseUnload(){this._kvDB&&await this.tryCloseKvDB();return Promise.resolve(!0)}async _onOtherDatabaseClose(){this._kvDB&&await this.tryCloseKvDB();return Promise.resolve(!0)}_everyOnInitializeDatabase(any){return this.openKeyValueDB()}async _everyOnloadAfterLoadSettings(){if(!await this.openKeyValueDB())return!1;this._simpleStore=this.openSimpleStore("os");return Promise.resolve(!0)}openSimpleStore(kind){const getDB=()=>{if(!this._kvDB)throw new Error("KeyValueDB is not initialized yet");return this._kvDB},prefix=`${kind}-`;return{get:async key3=>await getDB().get(`${prefix}${key3}`),set:async(key3,value)=>{await getDB().set(`${prefix}${key3}`,value)},delete:async key3=>{await getDB().del(`${prefix}${key3}`)},keys:async(from,to,count)=>(await getDB().keys(IDBKeyRange.bound(`${prefix}${from||""}`,`${prefix}${to||""}`),count)).map(e3=>e3.toString()).filter(e3=>e3.startsWith(prefix)).map(e3=>e3.substring(prefix.length)),db:Promise.resolve(getDB())}}};ObsidianDatabaseEventService=class extends InjectableDatabaseEventService{};ObsidianReplicatorService=class extends InjectableReplicatorService{};ObsidianFileProcessingService=class extends InjectableFileProcessingService{};ObsidianReplicationService=class extends InjectableReplicationService{};ObsidianRemoteService=class extends InjectableRemoteService{};ObsidianConflictService=class extends InjectableConflictService{};ObsidianTweakValueService=class extends InjectableTweakValueService{};ObsidianTestService=class extends InjectableTestService{};ObsidianConfigService=class extends ConfigServiceBrowserCompat{};ObsidianKeyValueDBService=class extends KeyValueDBService{};ObsidianControlService=class extends ControlService{};SettingService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this.deviceAndVaultName="";this.onBeforeRealiseSetting=handlers2().bailFirstFailure("onBeforeRealiseSetting");this.onSettingRealised=handlers2().bailFirstFailure("onSettingRealised");this.onRealiseSetting=handlers2().bailFirstFailure("onRealiseSetting");this.suspendAllSync=handlers2().all("suspendAllSync");this.suspendExtraSync=handlers2().all("suspendExtraSync");this.suggestOptionalFeatures=handlers2().all("suggestOptionalFeatures");this.enableOptionalFeature=handlers2().all("enableOptionalFeature");this.onSettingLoaded=handlers2().dispatchParallel("onSettingLoaded");this.onSettingChanged=handlers2().dispatchParallel("onSettingChanged");this.onSettingSaved=handlers2().dispatchParallel("onSettingSaved");this.usedPassphrase="";this.APIService=dependencies.APIService;this._log=createInstanceLogFunction("SettingService",this.APIService)}get settings(){return this._settings}set settings(value){this._settings=value}adjustSettings(settings){migrateLegacyRemoteConfigurationsInPlace(settings,message=>{this._log(message,LOG_LEVEL_NOTICE)})&&this._log("Legacy remote configuration has been migrated to the remote configuration list.",LOG_LEVEL_NOTICE);settings.disableRequestURI=!0;settings.gcDelay=0;settings.useHistory=!0;"workingEncrypt"in settings&&delete settings.workingEncrypt;"workingPassphrase"in settings&&delete settings.workingPassphrase;""==settings.chunkSplitterVersion?settings.enableChunkSplitterV2?settings.useSegmenter?settings.chunkSplitterVersion="v2-segmenter":settings.chunkSplitterVersion="v2":settings.chunkSplitterVersion="":settings.chunkSplitterVersion in ChunkAlgorithmNames||(settings.chunkSplitterVersion="");return Promise.resolve(settings)}getDeviceAndVaultName(){return this.deviceAndVaultName}setDeviceAndVaultName(name){this.deviceAndVaultName=name}saveDeviceAndVaultName(){const lsKey="obsidian-live-sync-vaultanddevicename-"+this.APIService.getSystemVaultName()+this.additionalSuffixOfDatabaseName();this.setItem(lsKey,this.deviceAndVaultName)}additionalSuffixOfDatabaseName(){var _a8;const suffix=null==(_a8=this.settings)?void 0:_a8.additionalSuffixOfDatabaseName;if(void 0===suffix){this._log("too early to get additionalSuffixOfDatabaseName, returning empty string");return""}return`-${suffix}`}getKey(key3){return`${this.APIService.getSystemVaultName()}${this.additionalSuffixOfDatabaseName()}-${key3}`}setSmallConfig(key3,value){const dbKey=this.getKey(key3);this.setItem(dbKey,value)}getSmallConfig(key3){const dbKey=this.getKey(key3);return this.getItem(dbKey)}deleteSmallConfig(key3){const dbKey=this.getKey(key3);this.deleteItem(dbKey)}async saveSettingData(){this.saveDeviceAndVaultName();const settings={...this.settings,remoteConfigurations:Object.fromEntries(Object.entries(this.settings.remoteConfigurations||{}).map(([id,config])=>[id,{...config}]))};settings.deviceAndVaultName="";if(settings.P2P_DevicePeerName&&""!==settings.P2P_DevicePeerName.trim()){this._log("Saving device peer name to small config");this.setSmallConfig(SETTING_KEY_P2P_DEVICE_NAME,settings.P2P_DevicePeerName.trim());settings.P2P_DevicePeerName=""}if(""!=this.usedPassphrase||await this.getPassphrase(settings)){if(""!=settings.couchDB_PASSWORD||""!=settings.couchDB_URI||""!=settings.couchDB_USER||settings.couchDB_DBNAME){const connectionSetting={couchDB_DBNAME:settings.couchDB_DBNAME,couchDB_PASSWORD:settings.couchDB_PASSWORD,couchDB_URI:settings.couchDB_URI,couchDB_USER:settings.couchDB_USER,accessKey:settings.accessKey,bucket:settings.bucket,endpoint:settings.endpoint,region:settings.region,secretKey:settings.secretKey,useCustomRequestHandler:settings.useCustomRequestHandler,bucketCustomHeaders:settings.bucketCustomHeaders,couchDB_CustomHeaders:settings.couchDB_CustomHeaders,useJWT:settings.useJWT,jwtKey:settings.jwtKey,jwtAlgorithm:settings.jwtAlgorithm,jwtKid:settings.jwtKid,jwtExpDuration:settings.jwtExpDuration,jwtSub:settings.jwtSub,useRequestAPI:settings.useRequestAPI,bucketPrefix:settings.bucketPrefix,forcePathStyle:settings.forcePathStyle};settings.encryptedCouchDBConnection=await this.encryptConfigurationItem(JSON.stringify(connectionSetting),settings);settings.couchDB_PASSWORD="";settings.couchDB_DBNAME="";settings.couchDB_URI="";settings.couchDB_USER="";settings.accessKey="";settings.bucket="";settings.region="";settings.secretKey="";settings.endpoint=""}if(settings.encrypt&&""!=settings.passphrase){settings.encryptedPassphrase=await this.encryptConfigurationItem(settings.passphrase,settings);settings.passphrase=""}await this.encryptRemoteConfigurationUris(settings)}else this._log("Failed to retrieve passphrase. data.json contains unencrypted items!",LOG_LEVEL_NOTICE);await this.saveData(settings);this.onSettingSaved(settings)}async encryptRemoteConfigurationUris(settings){const configs=settings.remoteConfigurations||{};for(const[id,config]of Object.entries(configs)){if(config.isEncrypted||""===config.uri.trim())continue;const encryptedURI=await this.encryptConfigurationItem(config.uri,settings);""!==encryptedURI?configs[id]={...config,uri:encryptedURI,isEncrypted:!0}:this._log(`Failed to encrypt remote configuration '${id}'. This entry will be saved in plain text.`,128)}}async decryptRemoteConfigurationUris(settings,passphrase){const configs=settings.remoteConfigurations||{};for(const[id,config]of Object.entries(configs)){if(!config.isEncrypted)continue;const decryptedURI=await this.decryptConfigurationItem(config.uri,passphrase);if(!1!==decryptedURI)configs[id]={...config,uri:decryptedURI,isEncrypted:!1};else{try{ConnectionStringParser.parse(config.uri);configs[id]={...config,isEncrypted:!1};this._log(`Remote configuration '${id}' had a plain-text URI marked as encrypted. The flag has been repaired.`,LOG_LEVEL_NOTICE);continue}catch(e3){}this._log(`Failed to decrypt remote configuration '${id}'. Verify passphrase and configuration.`,128)}}}currentSettings(){return this.settings}updateSettings(updateFn,saveImmediately){try{const updated=updateFn(this.settings);this.settings=updated}catch(ex){this._log("Error in update function: "+ex,128);return Promise.reject(ex)}return saveImmediately?this.saveSettingData():Promise.resolve()}async applyExternalSettings(partial,saveImmediately){try{this.settings=await this.adjustSettings({...this.settings,...partial})}catch(ex){this._log("Error in applying external settings: "+ex,128);return Promise.reject(ex)}return saveImmediately?this.saveSettingData():Promise.resolve()}applyPartial(partial,saveImmediately){try{this.settings={...this.settings,...partial}}catch(ex){this._log("Error in applying partial settings: "+ex,128);return Promise.reject(ex)}return saveImmediately?this.saveSettingData():Promise.resolve()}getPassphrase(settings){const methods={"":()=>Promise.resolve("*"),LOCALSTORAGE:()=>{var _a8;return Promise.resolve(null!=(_a8=this.getItem("ls-setting-passphrase"))&&_a8)},ASK_AT_LAUNCH:()=>this.APIService.confirm.askString("Passphrase","passphrase","")},method=settings.configPassphraseStore;return(method in methods?methods[method]:methods[""])()}clearUsedPassphrase(){this.usedPassphrase=""}async decryptConfigurationItem(encrypted,passphrase){try{const dec=await decryptString(encrypted,passphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");if(dec){this.usedPassphrase=passphrase;return dec}}catch(ex){this._log(`Failed to decrypt configuration item: ${ex}`,LOG_LEVEL_NOTICE)}return!1}async encryptConfigurationItem(src,settings){if(""!=this.usedPassphrase)return await encryptString(src,this.usedPassphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");const passphrase=await this.getPassphrase(settings);if(!1===passphrase){this._log("Failed to obtain passphrase when saving data.json! Please verify the configuration.",128);return""}const dec=await encryptString(src,passphrase+"rHGMPtr6oWw7VSa3W3wpa8fT8U");if(dec){this.usedPassphrase=passphrase;return dec}return""}async decryptSettings(settings){const passphrase=await this.getPassphrase(settings);if(!1===passphrase){this._log("No passphrase found for data.json! Verify configuration before syncing.",128);Object.values(settings.remoteConfigurations||{}).some(config=>config.isEncrypted)&&this._log("Encrypted remote configurations found, but passphrase is unavailable. Verify configuration before syncing.",128)}else{if(settings.encryptedCouchDBConnection){const keys3=["couchDB_URI","couchDB_USER","couchDB_PASSWORD","couchDB_DBNAME","accessKey","bucket","endpoint","region","secretKey"],decrypted=this.tryDecodeJson(await this.decryptConfigurationItem(settings.encryptedCouchDBConnection,passphrase));if(decrypted)for(const key3 of keys3)key3 in decrypted&&(settings[key3]=decrypted[key3]);else{this._log("Failed to decrypt passphrase from data.json! Ensure configuration is correct before syncing with remote.",128);for(const key3 of keys3)settings[key3]=""}}if(settings.encrypt&&settings.encryptedPassphrase){const encrypted=settings.encryptedPassphrase,decrypted=await this.decryptConfigurationItem(encrypted,passphrase);if(decrypted)settings.passphrase=decrypted;else{this._log("Failed to decrypt passphrase from data.json! Ensure configuration is correct before syncing with remote.",128);settings.passphrase=""}}await this.decryptRemoteConfigurationUris(settings,passphrase)}return settings}async loadSettings(){var _a8,_b5;const settings=Object.assign({},DEFAULT_SETTINGS,await this.loadData()),hadRemoteConfigurations=Object.keys(null!=(_a8=settings.remoteConfigurations)?_a8:{}).length>0;if(void 0===settings.isConfigured)if(JSON.stringify(settings)!==JSON.stringify(DEFAULT_SETTINGS))settings.isConfigured=!0;else{const appId=this.APIService.getAppID();settings.additionalSuffixOfDatabaseName=appId;settings.isConfigured=!1}this.settings=await this.decryptSettings(settings);setLang(this.settings.displayLanguage);await this.adjustSettings(this.settings);const shouldPersistMigratedRemoteConfigurations=!hadRemoteConfigurations&&Object.keys(null!=(_b5=this.settings.remoteConfigurations)?_b5:{}).length>0,lsKey="obsidian-live-sync-vaultanddevicename-"+this.APIService.getSystemVaultName()+this.additionalSuffixOfDatabaseName();if(""!=this.settings.deviceAndVaultName&&!this.getItem(lsKey)){this.setDeviceAndVaultName(this.settings.deviceAndVaultName);this.saveDeviceAndVaultName();this.settings.deviceAndVaultName=""}if(isCloudantURI(this.settings.couchDB_URI)&&0!=this.settings.customChunkSize){this._log("Configuration issues detected and automatically resolved. However, unsynchronized data may exist. Consider rebuilding if necessary.",LOG_LEVEL_NOTICE);this.settings.customChunkSize=0}this.setDeviceAndVaultName(this.getItem(lsKey)||"");if(""==this.getDeviceAndVaultName()&&this.settings.usePluginSync){this._log("Device name missing. Disabling plug-in sync.",LOG_LEVEL_NOTICE);this.settings.usePluginSync=!1}shouldPersistMigratedRemoteConfigurations&&await this.saveSettingData();const dispatch=this.settings;this.onSettingLoaded(dispatch);this.onSettingChanged(dispatch)}tryDecodeJson(encoded){try{return!!encoded&&JSON.parse(encoded)}catch(e3){return!1}}};ObsidianSettingService=class extends SettingService{constructor(context2,dependencies){super(context2,dependencies);this.onSettingSaved.addHandler(settings=>{eventHub.emitEvent(EVENT_SETTING_SAVED,settings);return Promise.resolve(!0)});this.onSettingLoaded.addHandler(settings=>{eventHub.emitEvent("reload-setting-tab");return Promise.resolve(!0)})}setItem(key3,value){return localStorage.setItem(key3,value)}getItem(key3){var _a8;return null!=(_a8=localStorage.getItem(key3))?_a8:""}deleteItem(key3){localStorage.removeItem(key3)}async saveData(data){return await this.context.liveSyncPlugin.saveData(data)}async loadData(){return await this.context.liveSyncPlugin.loadData()}};DatabaseService=class extends ServiceBase{constructor(context2,dependencies){super(context2);this._log=createInstanceLogFunction("InjectableDatabaseService");this._localDatabase=null;this.onOpenDatabase=handlers2().bailFirstFailure("onOpenDatabase");this.onDatabaseReset=handlers2().bailFirstFailure("onDatabaseReset");this.services=dependencies}get localDatabase(){if(!this._localDatabase)throw new Error("Local database is not ready yet.");return this._localDatabase}get localDatabaseDirect(){return this._localDatabase}modifyDatabaseOptions(settings,name,options){const optionPass={...options};if(settings.useIndexedDBAdapter){optionPass.adapter="indexeddb";optionPass.purged_infos_limit=1;return{name:name+ExtraSuffixIndexedDB,options:optionPass}}return{name,options:optionPass}}createPouchDBInstance(name,options){const settings=this.services.setting.currentSettings(),optionPass=this.modifyDatabaseOptions(settings,null!=name?name:"",null!=options?options:{});return new index_es_default(optionPass.name,optionPass.options)}async openDatabase(params){null!=this._localDatabase&&await this._localDatabase.close();const vaultName=this.services.vault.getVaultName();this._log($msg("moduleLocalDatabase.logWaitingForReady"));const env={services:{...this.services,...params,database:this}};this._localDatabase=new LiveSyncLocalDB(vaultName,env);await this.onOpenDatabase(vaultName);return await this.localDatabase.initializeDatabase()}isDatabaseReady(){return null!=this._localDatabase&&this._localDatabase.isReady}async resetDatabase(){return this._localDatabase?await this._localDatabase.resetDatabase():Promise.resolve(!0)}};ObsidianDatabaseService=class extends DatabaseService{__onOpenDatabase(vaultName){initializeStores(vaultName);return Promise.resolve(!0)}constructor(context2,dependencies){super(context2,dependencies);this.onOpenDatabase.addHandler(this.__onOpenDatabase.bind(this))}};ObsHttpHandler=class extends FetchHttpHandler{constructor(options,reverseProxyNoSignUrl){super(options);this.requestTimeoutInMs=void 0===options?void 0:options.requestTimeout;this.reverseProxyNoSignUrl=reverseProxyNoSignUrl}async handle(request2,{abortSignal}={}){if(null==abortSignal?void 0:abortSignal.aborted){const abortError=new Error("Request aborted");abortError.name="AbortError";return Promise.reject(abortError)}let path2=request2.path;if(request2.query){const queryString=buildQueryString(request2.query);queryString&&(path2+=`?${queryString}`)}const{port,method}=request2;let url=`${request2.protocol}//${request2.hostname}${port?`:${port}`:""}${path2}`;if(void 0!==this.reverseProxyNoSignUrl&&""!==this.reverseProxyNoSignUrl){const urlObj=new URL(url);urlObj.host=this.reverseProxyNoSignUrl;url=urlObj.href}const body="GET"===method||"HEAD"===method?void 0:request2.body,transformedHeaders={};for(const key3 of Object.keys(request2.headers)){const keyLower=key3.toLowerCase();"host"!==keyLower&&"content-length"!==keyLower&&(transformedHeaders[keyLower]=request2.headers[key3])}let contentType;void 0!==transformedHeaders["content-type"]&&(contentType=transformedHeaders["content-type"]);let transformedBody=body;ArrayBuffer.isView(body)&&(transformedBody=new Uint8Array(body.buffer).buffer);const param={body:transformedBody,headers:transformedHeaders,method,url,contentType},raceOfPromises=[(0,import_obsidian.requestUrl)(param).then(rsp=>{const headers=rsp.headers,headersLower={};for(const key3 of Object.keys(headers))headersLower[key3.toLowerCase()]=headers[key3];const stream=new ReadableStream({start(controller){controller.enqueue(new Uint8Array(rsp.arrayBuffer));controller.close()}});return{response:new HttpResponse({headers:headersLower,statusCode:rsp.status,body:stream})}}),requestTimeout(this.requestTimeoutInMs)];abortSignal&&raceOfPromises.push(new Promise((resolve,reject)=>{abortSignal.onabort=()=>{const abortError=new Error("Request aborted");abortError.name="AbortError";reject(abortError)}}));return Promise.race(raceOfPromises)}};ObsidianConfirm=class{get _app(){return this._context.app}get _plugin(){return this._context.plugin}constructor(context2){this._context=context2}askYesNo(message){return askYesNo(this._app,message)}askString(title,key3,placeholder,isPassword=!1){return askString(this._app,title,key3,placeholder,isPassword)}async askYesNoDialog(message,opt={title:"Confirmation"}){const defaultTitle=$msg("moduleInputUIObsidian.defaultTitleConfirmation"),yesLabel=$msg("moduleInputUIObsidian.optionYes"),noLabel=$msg("moduleInputUIObsidian.optionNo"),defaultOption="Yes"===opt.defaultOption?yesLabel:noLabel;return await confirmWithMessageWithWideButton(this._plugin,opt.title||defaultTitle,message,[yesLabel,noLabel],defaultOption,opt.timeout)===yesLabel?"yes":"no"}askSelectString(message,items){return askSelectString(this._app,message,items)}askSelectStringDialogue(message,buttons,opt){const defaultTitle=$msg("moduleInputUIObsidian.defaultTitleSelect");return confirmWithMessageWithWideButton(this._plugin,opt.title||defaultTitle,message,buttons,opt.defaultAction,opt.timeout)}askInPopup(key3,dialogText,anchorCallback){const fragment=createFragment(doc=>{const[beforeText,afterText]=dialogText.split("{HERE}",2);doc.createEl("span",void 0,a2=>{a2.appendText(beforeText);a2.appendChild(a2.createEl("a",void 0,anchor=>{anchorCallback(anchor)}));a2.appendText(afterText)})}),popupKey="popup-"+key3;scheduleTask(popupKey,1e3,async()=>{var _a8;const popup=await memoIfNotExist(popupKey,()=>new import_obsidian.Notice(fragment,0));(null==(_a8=null==popup?void 0:popup.noticeEl)?void 0:_a8.isShown())||memoObject(popupKey,new import_obsidian.Notice(fragment,0));scheduleTask(popupKey+"-close",2e4,()=>{var _a9;const popup2=retrieveMemoObject(popupKey);if(popup2){(null==(_a9=null==popup2?void 0:popup2.noticeEl)?void 0:_a9.isShown())&&popup2.hide();disposeMemoObject(popupKey)}})})}confirmWithMessage(title,contentMd,buttons,defaultAction,timeout){return confirmWithMessage(this._plugin,title,contentMd,buttons,defaultAction,timeout)}};import_obsidian3=require("obsidian");ObsidianAPIService=class extends InjectableAPIService{constructor(context2){super(context2);this._confirmInstance=new ObsidianConfirm(context2)}getCustomFetchHandler(){this._customHandler||(this._customHandler=new ObsHttpHandler(void 0,void 0));return this._customHandler}async showWindow(viewType){const leaves=this.app.workspace.getLeavesOfType(viewType);0==leaves.length?await this.app.workspace.getLeaf(!0).setViewState({type:viewType,active:!0}):await leaves[0].setViewState({type:viewType,active:!0});leaves.length>0&&await this.app.workspace.revealLeaf(leaves[0])}get app(){return this.context.app}getPlatform(){return import_obsidian3.Platform.isAndroidApp?"android-app":import_obsidian3.Platform.isIosApp?"ios":import_obsidian3.Platform.isMacOS?"macos":import_obsidian3.Platform.isMobileApp?"mobile-app":import_obsidian3.Platform.isMobile?"mobile":import_obsidian3.Platform.isSafari?"safari":import_obsidian3.Platform.isDesktop?"desktop":import_obsidian3.Platform.isDesktopApp?"desktop-app":"unknown-obsidian"}isMobile(){return this.app.isMobile}getAppID(){return`${"appId"in this.app?this.app.appId:""}`}getSystemVaultName(){return this.app.vault.getName()}getAppVersion(){var _a8,_b5;const match3=(null!=(_b5=null==(_a8=globalThis.navigator)?void 0:_a8.userAgent)?_b5:"").match(/obsidian\/([0-9]+\.[0-9]+\.[0-9]+)/);return match3&&match3.length>=2?match3[1]:"0.0.0"}getPluginVersion(){return this.context.plugin.manifest.version}get confirm(){return this._confirmInstance}addCommand(command){return this.context.plugin.addCommand(command)}registerWindow(type,factory){return this.context.plugin.registerView(type,factory)}addRibbonIcon(icon,title,callback){return this.context.plugin.addRibbonIcon(icon,title,callback)}registerProtocolHandler(action2,handler){return this.context.plugin.registerObsidianProtocolHandler(action2,handler)}async nativeFetch(req,opts){var _a8,_b5;const url="string"==typeof req?req:req.url;let body;const method="string"==typeof(null==opts?void 0:opts.method)?opts.method:req instanceof Request&&"string"==typeof req.method?req.method:"GET";"string"!=typeof req?(null==opts?void 0:opts.body)?body="string"==typeof opts.body?opts.body:await new Response(opts.body).arrayBuffer():req.body&&(body=await new Response(req.body).arrayBuffer()):body=null==opts?void 0:opts.body;const reqHeaders=new Headers(req instanceof Request?req.headers:{}),optHeaders={};reqHeaders.forEach((value,key3)=>{optHeaders[key3]=value});if(opts&&"headers"in opts)if(opts.headers instanceof Headers)opts.headers.forEach((value,key3)=>{optHeaders[key3]=value});else for(const[key3,value]of Object.entries(opts.headers))optHeaders[key3]=value;const transformedHeaders={...optHeaders};delete transformedHeaders.host;delete transformedHeaders.Host;delete transformedHeaders["content-length"];delete transformedHeaders["Content-Length"];const requestParam={url,method,body,headers:transformedHeaders,contentType:null!=(_b5=null!=(_a8=transformedHeaders["content-type"])?_a8:transformedHeaders["Content-Type"])?_b5:"application/json"},r4=await(0,import_obsidian.requestUrl)({...requestParam,throw:!1});return new Response(r4.arrayBuffer,{headers:r4.headers,status:r4.status,statusText:`${r4.status}`})}addStatusBarItem(){return this.context.plugin.addStatusBarItem()}setInterval(handler,timeout){const timerId=globalThis.setInterval(handler,timeout);this.context.plugin.registerInterval(timerId);return timerId}getSystemConfigDir(){return this.app.vault.configDir}};ObsidianAppLifecycleService=class extends AppLifecycleServiceBase{performRestart(){this.context.plugin.app.commands.executeCommandById("app:reload")}};ObsidianPathService=class extends PathService{markChangesAreSame(old,newMtime,oldMtime){return markChangesAreSame(old,newMtime,oldMtime)}unmarkChanges(file){return unmarkChanges(file)}compareFileFreshness(baseFile,checkTarget){return compareFileFreshness(baseFile,checkTarget)}isMarkedAsSameChanges(file,mtimes){return isMarkedAsSameChanges(file,mtimes)}normalizePath(path2){return normalizePath(path2)}};ObsidianVaultService=class extends InjectableVaultService{vaultName(){return this.context.app.vault.getName()}getActiveFilePath(){const file=this.context.app.workspace.getActiveFile();if(file)return getPathFromTFile(file)}isStorageInsensitive(){var _a8;return null==(_a8=this.context.app.vault.adapter.insensitive)||_a8}shouldCheckCaseInsensitively(){return!this.isStorageInsensitive()&&super.shouldCheckCaseInsensitively()}isValidPath(path2){return isValidPath(path2)}};UIService=class extends ServiceBase{constructor(context2,dependents){super(context2);this._dialogManager=dependents.dialogManager;this._APIService=dependents.APIService}get dialogManager(){return this._dialogManager}async promptCopyToClipboard(title,value){const param={title,dataToCopy:value};return"ok"===await this._dialogManager.open(this.dialogToCopy,param)}showMarkdownDialog(title,contentMD,buttons,defaultAction){return this._APIService.confirm.askSelectStringDialogue(contentMD,buttons,{title,defaultAction:null!=defaultAction?defaultAction:buttons[0],timeout:0})}get confirm(){return this._APIService.confirm}};root34=from_html('<div class="dialog-host svelte-3n2ufb"><!></div>');$$css14={hash:"svelte-3n2ufb",code:'.dialog-host.svelte-3n2ufb {padding:20px;gap:0.5em;display:flex;flex-direction:column;padding-bottom:var(--keyboard-height, 0px);}.dialog-host.svelte-3n2ufb button {margin-left:10px;}.dialog-host.svelte-3n2ufb .button-group {display:flex;flex-direction:column;gap:10px;margin-top:20px;}.dialog-host.svelte-3n2ufb .row {display:flex;flex-direction:row;justify-items:center;align-items:center;flex-wrap:wrap;}.dialog-host.svelte-3n2ufb .row > input[type="text"],\n .dialog-host.svelte-3n2ufb .row > input[type="password"],\n .dialog-host.svelte-3n2ufb .row > textarea,\n .dialog-host.svelte-3n2ufb .row > select {flex:1;margin-left:10px;min-width:10em;}.dialog-host.svelte-3n2ufb .row > input[type="password"] {-webkit-text-security:disc;}.dialog-host.svelte-3n2ufb .row > input[type="checkbox"] {margin-left:10px;margin-right:10px;}.dialog-host.svelte-3n2ufb label > span {display:block;width:8em;}.dialog-host.svelte-3n2ufb .note,\n .dialog-host.svelte-3n2ufb .note-important,\n .dialog-host.svelte-3n2ufb .note-error {padding:10px;margin-top:4px;margin-bottom:0.5lh;border-left:4px solid;}.dialog-host.svelte-3n2ufb .note {background-color:var(--interactive-hover);border-left-color:var(--interactive-accent);}.dialog-host.svelte-3n2ufb .note-important {background-color:var(--interactive-hover);border-left-color:var(--text-warning);}.dialog-host.svelte-3n2ufb .note-error {background-color:var(--interactive-hover);border-left-color:var(--text-error);}.dialog-host.svelte-3n2ufb hr {margin:0.7lh 0;}.dialog-host.svelte-3n2ufb details {gap:0.5em;padding-left:0.5em;border-left:2px solid var(--interactive-accent);}.dialog-host.svelte-3n2ufb summary::marker {display:none;content:"";}.dialog-host.svelte-3n2ufb summary {border-left:4px solid var(--interactive-accent);padding-left:0.5em;cursor:pointer;outline:none;}.dialog-host.svelte-3n2ufb details > summary::after {content:"⏷";float:right;margin-right:0.5em;}.dialog-host.svelte-3n2ufb details[open] > summary::after {content:"⏶";float:right;margin-right:0.5em;}.dialog-host.svelte-3n2ufb input:invalid,\n .dialog-host.svelte-3n2ufb textarea:invalid {border-color:var(--background-modifier-error);}.dialog-host.svelte-3n2ufb .sub-section {margin-left:1em;display:flex;flex-direction:column;gap:0.5em;}.dialog-host.svelte-3n2ufb .row > input[type="text"]:disabled,\n .dialog-host.svelte-3n2ufb .row > input[type="password"]:disabled,\n .dialog-host.svelte-3n2ufb .row > textarea:disabled,\n .dialog-host.svelte-3n2ufb .row > select:disabled {background-color:var(--background-secondary);}'};SvelteDialogBase=function SvelteDialogMixIn(TBase,d4){return class SvelteDialog extends TBase{constructor(...args){super(...args);this.title="Self-hosted LiveSync - Setup Wizard"}get context(){return this._context}initDialog(context2,dependents,component2,initialData){this._context=context2;this.dependents=dependents;this.component=component2;this.initialData=initialData}resolveResult(){var _a8;null==(_a8=this.resultPromiseWithResolvers)||_a8.resolve(this.result);this.resultPromiseWithResolvers=void 0}onOpen(){const{contentEl}=this;contentEl.empty();const dialog=this;this.resultPromiseWithResolvers&&this.resultPromiseWithResolvers.reject("Dialog opened again");const pr=promiseWithResolvers();eventHub.once("plugin-unloaded",()=>{if(this.resultPromiseWithResolvers===pr){pr.reject("Plugin unloaded");this.close()}});this.resultPromiseWithResolvers=pr;this.mountedComponent=mount(d4,{target:contentEl,props:{onSetupContext:props=>{setupDialogContext({...props,context:this.context,services:this.dependents})},setTitle:title=>{dialog.setTitle(title)},closeDialog:()=>{dialog.close()},setResult:result=>{this.result=result},getInitialData:()=>this.initialData,mountComponent:this.component}})}waitForClose(){if(!this.resultPromiseWithResolvers)throw new Error("Dialog not opened yet");return this.resultPromiseWithResolvers.promise}onClose(){this.resolveResult();fireAndForget(async()=>{this.mountedComponent&&await unmount(this.mountedComponent)})}}}(import_obsidian.Modal,function DialogHost($$anchor,$$props){var div;push($$props,!0);append_styles($$anchor,$$css14);const contextProps={setTitle:$$props.setTitle,closeDialog:$$props.closeDialog,setResult:$$props.setResult,getInitialData:$$props.getInitialData};null===$$props.onSetupContext||void 0===$$props.onSetupContext||$$props.onSetupContext(contextProps);let thisElement;(0,$$props.mountComponent)(child(div=root34()),{setResult:result=>{$$props.setResult(result);$$props.closeDialog()},get getInitialData(){return $$props.getInitialData}});reset(div);bind_this(div,$$value=>thisElement=$$value,()=>thisElement);append($$anchor,div);pop()});SvelteDialogObsidian=class extends SvelteDialogBase{constructor(context2,dependents,component2,initialData){super(context2.app);this.initDialog(context2,dependents,component2,initialData)}};ObsidianSvelteDialogManager=class extends SvelteDialogManagerBase{async openSvelteDialog(component2,initialData){const dialog=new SvelteDialogObsidian(this.context,this.dependents,component2,initialData);dialog.open();return await dialog.waitForClose()}};on_click4=(_,copyToClipboard)=>copyToClipboard();root_218=from_html('<textarea readonly="" rows="4" class="svelte-u2ix67"></textarea> <button><!></button>',1);root35=from_html("<!> <!> <!> <!>",1);$$css15={hash:"svelte-u2ix67",code:"textarea.svelte-u2ix67 {resize:none;}"};delegate(["click"]);ObsidianUIService=class extends UIService{get dialogToCopy(){return DialogueToCopy}constructor(context2,dependents){const obsidianConfirm=dependents.APIService.confirm,obsidianSvelteDialogManager=new ObsidianSvelteDialogManager(context2,{appLifecycle:dependents.appLifecycle,config:dependents.config,replicator:dependents.replicator,confirm:obsidianConfirm,control:dependents.control});super(context2,{appLifecycle:dependents.appLifecycle,dialogManager:obsidianSvelteDialogManager,APIService:dependents.APIService})}};ObsidianServiceHub=class extends InjectableServiceHub{constructor(plugin3){const context2=new ObsidianServiceContext(plugin3.app,plugin3,plugin3),API=new ObsidianAPIService(context2),conflict=new ObsidianConflictService(context2),fileProcessing=new ObsidianFileProcessingService(context2),tweakValue=new ObsidianTweakValueService(context2),setting=new ObsidianSettingService(context2,{APIService:API}),appLifecycle=new ObsidianAppLifecycleService(context2,{settingService:setting}),remote=new ObsidianRemoteService(context2,{APIService:API,appLifecycle,setting}),vault=new ObsidianVaultService(context2,{settingService:setting,APIService:API}),test=new ObsidianTestService(context2),databaseEvents=new ObsidianDatabaseEventService(context2),path2=new ObsidianPathService(context2,{settingService:setting}),database=new ObsidianDatabaseService(context2,{path:path2,vault,setting,API}),keyValueDB=new ObsidianKeyValueDBService(context2,{appLifecycle,databaseEvents,vault}),config=new ObsidianConfigService(context2,{settingService:setting,APIService:API}),replicator=new ObsidianReplicatorService(context2,{settingService:setting,appLifecycleService:appLifecycle,databaseEventService:databaseEvents}),replication2=new ObsidianReplicationService(context2,{APIService:API,appLifecycleService:appLifecycle,replicatorService:replicator,settingService:setting,fileProcessingService:fileProcessing,databaseService:database}),control=new ObsidianControlService(context2,{appLifecycleService:appLifecycle,databaseService:database,fileProcessingService:fileProcessing,settingService:setting,APIService:API,replicatorService:replicator});super(context2,{appLifecycle,conflict,database,databaseEvents,fileProcessing,replication:replication2,replicator,remote,setting,tweakValue,vault,test,ui:new ObsidianUIService(context2,{appLifecycle,config,replicator,APIService:API,control}),path:path2,API,config,keyValueDB,control})}};ServiceModuleBase=class{get name(){return this.constructor.name}constructor(services){this._log=createInstanceLogFunction(this.name,services.API)}};ServiceRebuilder=class extends ServiceModuleBase{constructor(services){super(services);this.appLifecycle=services.appLifecycle;this.API=services.API;this.UI=services.UI;this.setting=services.setting;this.remote=services.remote;this.databaseEvents=services.databaseEvents;this.storageAccess=services.storageAccess;this.replicator=services.replicator;this.vault=services.vault;this.replication=services.replication;this.database=services.database;this.fileHandler=services.fileHandler;this.control=services.control;services.database.onDatabaseReset.addHandler(this._onResetLocalDatabase.bind(this));services.setting.suspendAllSync.addHandler(this._allSuspendAllSync.bind(this))}async $performRebuildDB(method){"localOnly"==method&&await this.$fetchLocal();"localOnlyWithChunks"==method&&await this.$fetchLocal(!0);"remoteOnly"==method&&await this.$rebuildRemote();"rebuildBothByThisDevice"==method&&await this.$rebuildEverything()}async informOptionalFeatures(){await this.UI.showMarkdownDialog("All optional features are disabled","Customisation Sync and Hidden File Sync will all be disabled.\nPlease enable them from the settings screen after setup is complete.",["OK"])}async askUsingOptionalFeature(opt){"yes"==await this.UI.confirm.askYesNoDialog("Do you want to enable extra features? If you are new to Self-hosted LiveSync, try the core feature first!",{title:"Enable extra features",defaultOption:"No",timeout:15})&&await this.setting.suggestOptionalFeatures(opt)}async rebuildRemote(){await this.setting.suspendExtraSync();await this.setting.applyPartial({isConfigured:!0,notifyThresholdOfRemoteStorageSize:DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize});await this.control.applySettings();await this.replication.markLocked();await this._tryResetRemoteDatabase();await this.replication.markLocked();await delay(500);await delay(1e3);await this.replication.replicateAllToRemote(!0);await delay(1e3);await this.replication.replicateAllToRemote(!0,!0);await this.informOptionalFeatures()}$rebuildRemote(){return this.rebuildRemote()}async rebuildEverything(){await this.setting.suspendExtraSync();await this.setting.applyPartial({isConfigured:!0,notifyThresholdOfRemoteStorageSize:DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize});await this.control.applySettings();await this.resetLocalDatabase();await delay(1e3);await this.databaseEvents.initialiseDatabase(!0,!0,!0);await this.replication.markLocked();await this._tryResetRemoteDatabase();await this.replication.markLocked();await delay(500);await delay(1e3);await this.replication.replicateAllToRemote(!0);await delay(1e3);await this.replication.replicateAllToRemote(!0,!0);await this.informOptionalFeatures()}$rebuildEverything(){return this.rebuildEverything()}$fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync){return this.fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync)}async scheduleRebuild(){try{await this.storageAccess.writeFileAuto(FlagFilesHumanReadable_REBUILD_ALL,"")}catch(ex){this._log(`Could not create ${FlagFilesHumanReadable_REBUILD_ALL}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}this.appLifecycle.performRestart()}async scheduleFetch(){try{await this.storageAccess.writeFileAuto(FlagFilesHumanReadable_FETCH_ALL,"")}catch(ex){this._log(`Could not create ${FlagFilesHumanReadable_FETCH_ALL}`,LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE)}this.appLifecycle.performRestart()}async _tryResetRemoteDatabase(){const currentReplicator=this.replicator.getActiveReplicator(),settings=this.setting.currentSettings();currentReplicator?await currentReplicator.tryResetRemoteDatabase(settings):this._log("No active replicator found when trying to reset remote database.",LOG_LEVEL_NOTICE)}_onResetLocalDatabase(){this.storageAccess.clearTouched();return Promise.resolve(!0)}async suspendAllSync(){await this.setting.applyPartial({liveSync:!1,periodicReplication:!1,syncOnSave:!1,syncOnEditorSave:!1,syncOnStart:!1,syncOnFileOpen:!1,syncAfterMerge:!1});await this.setting.suspendExtraSync()}async suspendReflectingDatabase(){const settings=this.setting.currentSettings();if(!settings.doNotSuspendOnFetching&&settings.remoteType!=REMOTE_MINIO){this._log("Suspending reflection: Database and storage changes will not be reflected in each other until completely finished the fetching.",LOG_LEVEL_NOTICE);await this.setting.applyPartial({suspendParseReplicationResult:!0,suspendFileWatching:!0});await this.setting.saveSettingData()}}async resumeReflectingDatabase(){const settings=this.setting.currentSettings();if(!settings.doNotSuspendOnFetching&&settings.remoteType!=REMOTE_MINIO){this._log("Database and storage reflection has been resumed!",LOG_LEVEL_NOTICE);await this.setting.applyPartial({suspendParseReplicationResult:!1,suspendFileWatching:!1});await this.vault.scanVault(!0);await this.replication.onBeforeReplicate(!1);await this.setting.saveSettingData()}}async fetchLocal(makeLocalChunkBeforeSync,preventMakeLocalFilesBeforeSync){await this.setting.suspendExtraSync();await this.setting.applyPartial({isConfigured:!0,notifyThresholdOfRemoteStorageSize:DEFAULT_SETTINGS.notifyThresholdOfRemoteStorageSize});const settings=this.setting.currentSettings();if(settings.maxMTimeForReflectEvents>0){const ask=`Your settings restrict file reflection times to no later than ${new Date(settings.maxMTimeForReflectEvents)}.\n\n**This is a recovery configuration.**\n\nThis operation should only be performed on an empty vault.\nAre you sure you wish to proceed?`,CANCEL="Cancel operation",CLEARANDPROCEED="Clear restriction and proceed",choices=["I understand, proceed",CLEARANDPROCEED,CANCEL],ret=await this.UI.confirm.askSelectStringDialogue(ask,choices,{title:"Confirm restricted fetch",defaultAction:CANCEL,timeout:0});if(ret==CLEARANDPROCEED){await this.setting.applyPartial({maxMTimeForReflectEvents:0});await this.setting.saveSettingData()}if(ret==CANCEL)return}await this.suspendReflectingDatabase();await this.control.applySettings();await this.resetLocalDatabase();await delay(1e3);await this.database.openDatabase({databaseEvents:this.databaseEvents,replicator:this.replicator});this.appLifecycle.markIsReady();makeLocalChunkBeforeSync?await this.fileHandler.createAllChunks(!0):preventMakeLocalFilesBeforeSync||await this.databaseEvents.initialiseDatabase(!0,!0,!0);await this.replication.markResolved();await delay(500);await this.replication.replicateAllFromRemote(!0);await delay(1e3);await this.replication.replicateAllFromRemote(!0);await this.resumeReflectingDatabase();await this.informOptionalFeatures()}async fetchLocalWithRebuild(){return await this.fetchLocal(!0)}async _allSuspendAllSync(){await this.suspendAllSync();return!0}async resetLocalDatabase(){const settings=this.setting.currentSettings();settings.isConfigured&&""==settings.additionalSuffixOfDatabaseName&&await this.database.resetDatabase();const suffix=this.API.getAppID()||"";await this.setting.applyPartial({additionalSuffixOfDatabaseName:suffix});await this.database.resetDatabase();eventHub.emitEvent(EVENT_DATABASE_REBUILT)}};ServiceDatabaseFileAccessBase=class extends ServiceModuleBase{constructor(services){super(services);this.vault=services.vault;this.storageAccess=services.storageAccess;this.database=services.database;this.path=services.path}async checkIsTargetFile(file){const path2=getStoragePathFromUXFileInfo(file);if(!await this.vault.isTargetFile(path2)){this._log(`File is not target: ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(path2)){this._log(`File should be ignored: ${path2}`,LOG_LEVEL_VERBOSE);return!1}return!0}async delete(file,rev3){if(!await this.checkIsTargetFile(file))return!0;const fullPath=getDatabasePathFromUXFileInfo(file);try{this._log(`deleteDB By path:${fullPath}`);return await this.deleteFromDBbyPath(fullPath,rev3)}catch(ex){this._log(`Failed to delete ${fullPath}`);this._log(ex,LOG_LEVEL_VERBOSE);return!1}}async createChunks(file,force=!1,skipCheck){return await this.__store(file,force,skipCheck,!0)}async store(file,force=!1,skipCheck){return await this.__store(file,force,skipCheck,!1)}async storeContent(path2,content){const blob=createTextBlob(content),bytes=(await blob.arrayBuffer()).byteLength,isInternal=!!path2.startsWith(".")||void 0,dummyUXFileInfo={name:path2.split("/").pop(),path:path2,stat:{size:bytes,ctime:Date.now(),mtime:Date.now(),type:"file"},body:blob,isInternal};return await this.__store(dummyUXFileInfo,!0,!1,!1)}async __store(file,force=!1,skipCheck,onlyChunks){if(!skipCheck&&!await this.checkIsTargetFile(file))return!0;if(!file){this._log("File seems bad",LOG_LEVEL_VERBOSE);return!1}const possiblyLarge=!isPlainText(file.name),content=file.body,datatype=determineTypeFromBlob(content),idPrefix=file.isInternal?ICHeader:"",fullPath=getStoragePathFromUXFileInfo(file),fullPathOnDB=getDatabasePathFromUXFileInfo(file);possiblyLarge&&this._log(`Processing: ${fullPath}`,LOG_LEVEL_VERBOSE);if(file.isInternal)if(file.deleted)file.stat={size:0,ctime:Date.now(),mtime:Date.now(),type:"file"};else if(null==file.stat){const stat=await this.storageAccess.statHidden(file.path);if(!stat){this._log(`Internal file not found: ${fullPath}`,LOG_LEVEL_VERBOSE);return!1}file.stat=stat}const d4={_id:idPrefix+await this.path.path2id(fullPath),path:fullPathOnDB,data:content,ctime:file.stat.ctime,mtime:file.stat.mtime,size:file.stat.size,children:[],datatype,type:datatype,eden:{}},msg=`STORAGE -> DB (${datatype}) `;if(await serialized("file-"+fullPath,async()=>{if(force){this._log(msg+"Force writing "+fullPath,LOG_LEVEL_VERBOSE);return!1}try{const old=await this.database.localDatabase.getDBEntry(d4.path,void 0,!1,!0,!1);if(!1!==old){const oldData={data:old.data,deleted:old._deleted||old.deleted},newData={data:d4.data,deleted:d4._deleted||d4.deleted};if(oldData.deleted!=newData.deleted)return!1;if(!await isDocContentSame(old.data,newData.data))return!1;this._log(msg+"Skipped (not changed) "+fullPath+(d4._deleted||d4.deleted?" (deleted)":""),LOG_LEVEL_VERBOSE);this.path.markChangesAreSame(old,d4.mtime,old.mtime);return!0}}catch(ex){this._log(msg+"Error, Could not check the diff for the old one."+(force?"force writing.":"")+fullPath+(d4._deleted||d4.deleted?" (deleted)":""),LOG_LEVEL_VERBOSE);this._log(ex,LOG_LEVEL_VERBOSE);return!force}return!1})){this._log(msg+" Skip "+fullPath,LOG_LEVEL_VERBOSE);return!0}const ret=await this.database.localDatabase.putDBEntry(d4,onlyChunks);if(!1!==ret){this._log(msg+fullPath);eventHub.emitEvent("file-saved")}return 0!=ret}async getConflictedRevs(file){if(!await this.checkIsTargetFile(file))return[];const filename=getDatabasePathFromUXFileInfo(file),doc=await this.database.localDatabase.getDBEntryMeta(filename,{conflicts:!0},!0);return!1===doc?[]:doc._conflicts||[]}async fetch(file,rev3,waitForReady,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const entry=await this.fetchEntry(file,rev3,waitForReady,!0);if(!1===entry)return!1;const data=createBlob(readContent(entry)),path2=stripAllPrefixes(entry.path),fileInfo={name:path2.split("/").pop(),path:path2,stat:{size:entry.size,ctime:entry.ctime,mtime:entry.mtime,type:"file"},body:data,deleted:entry.deleted||entry._deleted};isInternalMetadata(entry.path)&&(fileInfo.isInternal=!0);return fileInfo}async fetchEntryMeta(file,rev3,skipCheck=!1){const dbFileName=getDatabasePathFromUXFileInfo(file);if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const doc=await this.database.localDatabase.getDBEntryMeta(dbFileName,rev3?{rev:rev3}:void 0,!0);return!1!==doc&&doc}async fetchEntryFromMeta(meta,waitForReady=!0,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(meta.path))return!1;const doc=await this.database.localDatabase.getDBEntryFromMeta(meta,!1,waitForReady);return!1!==doc&&doc}async fetchEntry(file,rev3,waitForReady=!0,skipCheck=!1){if(skipCheck&&!await this.checkIsTargetFile(file))return!1;const entry=await this.fetchEntryMeta(file,rev3,!0);return!1!==entry&&await this.fetchEntryFromMeta(entry,waitForReady,!0)}async deleteFromDBbyPath(fullPath,rev3){if(!await this.checkIsTargetFile(fullPath)){this._log(`deleteFromDBbyPath: File is not target: ${fullPath}`);return!0}const opt=rev3?{rev:rev3}:void 0,ret=await this.database.localDatabase.deleteDBEntry(fullPath,opt);eventHub.emitEvent("file-saved");return ret}};ServiceDatabaseFileAccess=class extends ServiceDatabaseFileAccessBase{};StorageEventManager=class{};ServiceFileAccessBase=class extends ServiceModuleBase{constructor(services){super(services);this.vault=services.vault;this.setting=services.setting;this.vaultManager=services.storageEventManager;this.vaultAccess=services.vaultAccess;services.appLifecycle.onFirstInitialise.addHandler(this._everyOnFirstInitialize.bind(this));services.fileProcessing.commitPendingFileEvents.addHandler(this._everyCommitPendingFileEvent.bind(this))}restoreState(){return this.vaultManager.restoreState()}async _everyOnFirstInitialize(){await this.vaultManager.beginWatch();return Promise.resolve(!0)}async _everyCommitPendingFileEvent(){await this.vaultManager.waitForIdle();return Promise.resolve(!0)}normalisePath(path2){return this.vaultAccess.normalisePath(path2)}async writeFileAuto(path2,data,opt){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(this.vaultAccess.isFile(file))return this.vaultAccess.vaultModify(file,data,opt);if(null!==file){this._log(`Could not write file (Possibly already exists as a folder): ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(!path2.endsWith(".md")){await this.vaultAccess.adapterWrite(path2,data,opt);return await this.vaultAccess.adapterExists(path2)}try{return null!==await this.vaultAccess.vaultCreate(path2,data,opt)}catch(ex){if(ex instanceof Error&&"File already exists."===ex.message){await this.vaultAccess.adapterWrite(path2,data,opt);return await this.vaultAccess.adapterExists(path2)}throw ex}}async readFileAuto(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(this.vaultAccess.isFile(file))return this.vaultAccess.vaultReadAuto(file);throw new Error(`Could not read file (Possibly does not exist): ${path2}`)}async readFileText(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(this.vaultAccess.isFile(file))return this.vaultAccess.vaultRead(file);throw new Error(`Could not read file (Possibly does not exist): ${path2}`)}async isExists(path2){return this.vaultAccess.isFile(await this.vaultAccess.getAbstractFileByPath(path2))}async writeHiddenFileAuto(path2,data,opt){try{await this.vaultAccess.adapterWrite(path2,data,opt);return!0}catch(e3){this._log(`Could not write hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async appendHiddenFile(path2,data,opt){try{await this.vaultAccess.adapterAppend(path2,data,opt);return!0}catch(e3){this._log(`Could not append hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async stat(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);if(null===file)return Promise.resolve(null);if(this.vaultAccess.isFile(file)){const fileWithStat=file;return Promise.resolve({ctime:fileWithStat.stat.ctime,mtime:fileWithStat.stat.mtime,size:fileWithStat.stat.size,type:"file"})}throw new Error(`Could not stat file (Possibly does not exist): ${path2}`)}statHidden(path2){return this.vaultAccess.tryAdapterStat(path2)}async removeHidden(path2){try{await this.vaultAccess.adapterRemove(path2);return null===this.vaultAccess.tryAdapterStat(path2)}catch(e3){this._log(`Could not remove hidden file: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async readHiddenFileAuto(path2){return await this.vaultAccess.adapterReadAuto(path2)}async readHiddenFileText(path2){return await this.vaultAccess.adapterRead(path2)}async readHiddenFileBinary(path2){return await this.vaultAccess.adapterReadBinary(path2)}async isExistsIncludeHidden(path2){return null!==await this.vaultAccess.tryAdapterStat(path2)}async ensureDir(path2){try{await this.vaultAccess.ensureDirectory(path2);return!0}catch(e3){this._log(`Could not ensure directory: ${path2}`,LOG_LEVEL_VERBOSE);this._log(e3,LOG_LEVEL_VERBOSE);return!1}}async _triggerFileEvent(event2,path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);null!==file&&this.vaultAccess.trigger(event2,file)}triggerFileEvent(event2,path2){fireAndForget(async()=>await this._triggerFileEvent(event2,path2))}async triggerHiddenFile(path2){await this.vaultAccess.reconcileInternalFile(path2)}async getFileStub(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);return this.vaultAccess.isFile(file)?this.vaultAccess.nativeFileToUXFileInfoStub(file):null}async readStubContent(stub){const file=await this.vaultAccess.getAbstractFileByPath(stub.path);if(!this.vaultAccess.isFile(file)){this._log(`Could not read file (Possibly does not exist or a folder): ${stub.path}`,LOG_LEVEL_VERBOSE);return!1}const data=await this.vaultAccess.vaultReadAuto(file);return{...stub,...this.vaultAccess.nativeFileToUXFileInfoStub(file),body:createBlob(data)}}async getStub(path2){const file=await this.vaultAccess.getAbstractFileByPath(path2);return this.vaultAccess.isFile(file)?this.vaultAccess.nativeFileToUXFileInfoStub(file):this.vaultAccess.isFolder(file)?this.vaultAccess.nativeFolderToUXFolder(file):null}async getFiles(){return(await this.vaultAccess.getFiles()).map(f4=>this.vaultAccess.nativeFileToUXFileInfoStub(f4))}async getFileNames(){return(await this.vaultAccess.getFiles()).map(f4=>f4.path)}async getFilesIncludeHidden(basePath,includeFilter,excludeFilter,skipFolder=[".git",".trash","node_modules"]){var _a8;let w2;try{w2=await this.vaultAccess.adapterList(basePath)}catch(ex){this._log(`Could not traverse(getFilesIncludeHidden):${basePath}`,LOG_LEVEL_INFO);this._log(ex,LOG_LEVEL_VERBOSE);return[]}skipFolder=skipFolder.map(e3=>e3.toLowerCase());let files=[];for(const file of w2.files)includeFilter&&includeFilter.length>0&&!includeFilter.some(e3=>e3.test(file))||excludeFilter&&excludeFilter.some(ee=>ee.test(file))||await this.vault.isIgnoredByIgnoreFile(file)||files.push(file);for(const v2 of w2.folders){const folderName=(null!=(_a8=v2.split("/").pop())?_a8:"").toLowerCase();skipFolder.some(e3=>folderName===e3)||excludeFilter&&excludeFilter.some(e3=>e3.test(v2))||await this.vault.isIgnoredByIgnoreFile(v2)||(files=files.concat(await this.getFilesIncludeHidden(v2,includeFilter,excludeFilter,skipFolder)))}return files}async touched(file){const path2="string"==typeof file?file:file.path;await this.vaultAccess.touch(path2)}async recentlyTouched(file){const xFile="string"==typeof file?await this.vaultAccess.getAbstractFileByPath(file):file;return null!==xFile&&!this.vaultAccess.isFolder(xFile)&&this.vaultAccess.recentlyTouched(xFile)}clearTouched(){this.vaultAccess.clearTouched()}async delete(file,force){const xPath="string"==typeof file?file:file.path,xFile=await this.vaultAccess.getAbstractFileByPath(xPath);return null===xFile?Promise.resolve():this.vaultAccess.isFile(xFile)||this.vaultAccess.isFolder(xFile)?this.vaultAccess.delete(xFile,force):Promise.resolve()}async trash(file,system){const xPath="string"==typeof file?file:file.path,xFile=await this.vaultAccess.getAbstractFileByPath(xPath);return null===xFile?Promise.resolve():this.vaultAccess.isFile(xFile)||this.vaultAccess.isFolder(xFile)?this.vaultAccess.trash(xFile,system):Promise.resolve()}async __deleteVaultItem(file){var _a8,_b5,_c3,_d2;const filePath=this.vaultAccess.getPath(file);if(this.vaultAccess.isFile(file)&&!await this.vault.isTargetFile(filePath))return;const dir=file.parent,settings=this.setting.currentSettings();settings.trashInsteadDelete?await this.vaultAccess.trash(file,!1):await this.vaultAccess.delete(file,!0);this._log(`xxx <- STORAGE (deleted) ${filePath}`);if(dir){this._log(`files: ${null!=(_b5=null==(_a8=null==dir?void 0:dir.children)?void 0:_a8.length)?_b5:"unknown"}`);if(0===(null!=(_d2=null==(_c3=null==dir?void 0:dir.children)?void 0:_c3.length)?_d2:0)&&!settings.doNotDeleteFolder){this._log(`All files under the parent directory (${dir.path}) have been deleted, so delete this one.`);await this.__deleteVaultItem(dir)}}}async deleteVaultItem(fileSrc){const path2="string"==typeof fileSrc?fileSrc:fileSrc.path,file=await this.vaultAccess.getAbstractFileByPath(path2);if(null!==file)return this.vaultAccess.isFile(file)||this.vaultAccess.isFolder(file)?await this.__deleteVaultItem(file):void 0}};ServiceFileAccessObsidian=class extends ServiceFileAccessBase{};StorageAccessManager=class{constructor(){this.processingFiles=new Set;this.touchedFiles=[]}processWriteFile(file,proc){const path2="string"==typeof file?file:file.path;return serialized(`file-lock:${path2}`,async()=>{try{this.processingFiles.add(path2);return await proc()}finally{this.processingFiles.delete(path2)}})}processReadFile(file,proc){const path2="string"==typeof file?file:file.path;return serialized(`file-lock:${path2}`,async()=>{try{this.processingFiles.add(path2);return await proc()}finally{this.processingFiles.delete(path2)}})}isFileProcessing(file){const path2="string"==typeof file?file:file.path;return this.processingFiles.has(path2)}touch(file){const key3="stat"in file?`${file.path}-${file.stat.mtime}-${file.stat.size}`:`${file.path}-${file.mtime}-${file.size}`;this.touchedFiles.unshift(key3);this.touchedFiles=this.touchedFiles.slice(0,100)}recentlyTouched(file){const key3="stat"in file?`${file.path}-${file.stat.mtime}-${file.stat.size}`:`${file.path}-${file.mtime}-${file.size}`;return-1!=this.touchedFiles.indexOf(key3)}clearTouched(){this.touchedFiles=[]}};ServiceFileHandlerBase=class extends ServiceModuleBase{constructor(services){super(services);this.databaseFileAccess=services.databaseFileAccess;this.storageAccess=services.storageAccess;this.conflict=services.conflict;this.path=services.path;this.setting=services.setting;this.vault=services.vault;services.fileProcessing.processFileEvent.addHandler(this._anyHandlerProcessesFileEvent.bind(this),100);services.replication.processSynchroniseResult.addHandler(this._anyProcessReplicatedDoc.bind(this),100)}get db(){return this.databaseFileAccess}get storage(){return this.storageAccess}getPath(entry){return this.path.getPath(entry)}getPathWithoutPrefix(entry){return stripAllPrefixes(this.path.getPath(entry))}async readFileFromStub(file){if("body"in file&&file.body)return file;const readFile=await this.storage.readStubContent(file);if(!readFile)throw new Error(`File ${file.path} is not exist on the storage`);return readFile}async infoToStub(info3){return null==info3?null:"string"==typeof info3?await this.storage.getFileStub(info3):info3}async storeFileToDB(info3,force=!1,onlyChunks=!1){const file=await this.infoToStub(info3);if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}if(file.isInternal){this._log(`Internal file ${file.path} is not allowed to be processed on processFileEvent`,LOG_LEVEL_VERBOSE);return!1}const entry=await this.db.fetchEntry(file,void 0,!0,!0);if(!entry||entry.deleted||entry._deleted){const readFile=await this.readFileFromStub(file);return onlyChunks?await this.db.createChunks(readFile,!1,!0):await this.db.store(readFile)}let shouldApplied=!1;if(force||onlyChunks){const readFile=await this.readFileFromStub(file);return onlyChunks?await this.db.createChunks(readFile,!0,!0):await this.db.store(readFile,!0,!0)}{this.path.compareFileFreshness(file,entry)!==EVEN&&(shouldApplied=!0);let readFile;if(!shouldApplied){readFile=await this.readFileFromStub(file);if(!readFile){this._log(`File ${file.path} is not exist on the storage`,LOG_LEVEL_NOTICE);return!1}await isDocContentSame(getDocDataAsArray(entry.data),readFile.body)?this.path.markChangesAreSame(readFile,readFile.stat.mtime,entry.mtime):shouldApplied=!0}if(!shouldApplied){this._log(`File ${file.path} is not changed`,LOG_LEVEL_VERBOSE);return!0}readFile||(readFile=await this.readFileFromStub(file));return onlyChunks?await this.db.createChunks(readFile,!1,!0):await this.db.store(readFile,!1,!0)}}async deleteFileFromDB(info3){const file=await this.infoToStub(info3);if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}if(file.isInternal){this._log(`Internal file ${file.path} is not allowed to be processed on processFileEvent`,LOG_LEVEL_VERBOSE);return!1}const entry=await this.db.fetchEntry(file,void 0,!0,!0);if(!entry||entry.deleted||entry._deleted){this._log(`File ${file.path} is not exist or already deleted on the database`,LOG_LEVEL_VERBOSE);return!1}return(await this.db.getConflictedRevs(file)).length>0?await this.db.delete(file,entry._rev):await this.db.delete(file)}async deleteRevisionFromDB(info3,rev3){return await this.db.delete(info3,rev3)}async resolveConflictedByDeletingRevision(info3,rev3){const path2=getStoragePathFromUXFileInfo(info3);if(!await this.deleteRevisionFromDB(info3,rev3)){this._log(`Failed to delete the conflicted revision ${rev3} of ${path2}`,LOG_LEVEL_VERBOSE);return!1}if(!await this.dbToStorageWithSpecificRev(info3,rev3,!0)){this._log(`Failed to apply the resolved revision ${rev3} of ${path2} to the storage`,LOG_LEVEL_VERBOSE);return!1}}async dbToStorageWithSpecificRev(info3,rev3,force){const file=await this.infoToStub(info3);if(null==file){this._log(`File ${info3} is not exist on the storage`,LOG_LEVEL_VERBOSE);return!1}const docEntry=await this.db.fetchEntryMeta(file,rev3,!0);if(!docEntry){this._log(`File ${file.path} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}return await this.dbToStorage(docEntry,file,force)}async dbToStorage(entryInfo,info3,force){const mode=null==await this.infoToStub(info3)?"create":"modify",pathFromEntryInfo="string"==typeof entryInfo?entryInfo:this.getPath(entryInfo),docEntry=await this.db.fetchEntryMeta(pathFromEntryInfo,void 0,!0);if(!docEntry){this._log(`File ${pathFromEntryInfo} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}const path2=this.getPath(docEntry),settings=this.setting.currentSettings();if((await this.db.getConflictedRevs(path2)).length>0&&!settings.writeDocumentsIfConflicted){await this.conflict.queueCheckForIfOpen(path2);return!0}const existDoc=await this.storage.getStub(path2);if(existDoc&&existDoc.isFolder){this._log(`Folder ${path2} is already exist on the storage as a folder`,LOG_LEVEL_VERBOSE);return!0}const existOnDB=!(docEntry._deleted||docEntry.deleted),existOnStorage=null!=existDoc;if(!existOnDB&&!existOnStorage){this._log(`File ${path2} seems to be deleted, but already not on storage`,LOG_LEVEL_VERBOSE);return!0}if(!existOnDB&&existOnStorage){await this.storage.deleteVaultItem(path2);return!0}const docRead=await this.db.fetchEntryFromMeta(docEntry);if(!docRead){this._log(`File ${path2} is not exist on the database`,LOG_LEVEL_VERBOSE);return!1}if(!settings.processSizeMismatchedFiles&&0!=docRead.size&&docRead.size!==readAsBlob(docRead).size){this._log(`File ${path2} seems to be corrupted! Writing prevented. (${docRead.size} != ${readAsBlob(docRead).size})`,LOG_LEVEL_NOTICE);return!1}const docData=readContent(docRead);if(existOnStorage&&!force){let shouldApplied=!1;this.path.compareFileFreshness(existDoc,docEntry)!==EVEN&&(shouldApplied=!0);if(!shouldApplied){const readFile=await this.readFileFromStub(existDoc);if(await isDocContentSame(docData,readFile.body)){shouldApplied=!1;this.path.markChangesAreSame(docRead,docRead.mtime,existDoc.stat.mtime)}else shouldApplied=!0}if(!shouldApplied){this._log(`File ${docRead.path} is not changed`,LOG_LEVEL_VERBOSE);return!0}}else this._log(`File ${docRead.path} ${existOnStorage?"(new) ":""} ${force?" (forced)":""}`,LOG_LEVEL_VERBOSE);await this.storage.ensureDir(path2);const ret=await this.storage.writeFileAuto(path2,docData,{ctime:docRead.ctime,mtime:docRead.mtime});await this.storage.touched(path2);this.storage.triggerFileEvent(mode,path2);return ret}async _anyHandlerProcessesFileEvent(item){const eventItem=item.args,type=item.type,path2=eventItem.file.path;if(!await this.vault.isTargetFile(path2)){this._log(`File ${path2} is not the target file`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(path2)){this._log(`File ${path2} should be ignored`,LOG_LEVEL_VERBOSE);return!1}const lockKey=`processFileEvent-${path2}`;return await serialized(lockKey,async()=>{switch(type){case"CREATE":case"CHANGED":return await this.storeFileToDB(item.args.file);case"DELETE":return await this.deleteFileFromDB(item.args.file);case"INTERNAL":return!1;default:this._log(`Unsupported event type: ${type}`,LOG_LEVEL_VERBOSE);return!1}})}async _anyProcessReplicatedDoc(entry){return await serialized(entry.path,async()=>{var _a8,_b5;if(!await this.vault.isTargetFile(entry.path)){this._log(`File ${entry.path} is not the target file`,LOG_LEVEL_VERBOSE);return!1}if(this.vault.isFileSizeTooLarge(entry.size)){this._log(`File ${entry.path} is too large (on database) to be processed`,LOG_LEVEL_VERBOSE);return!1}if(shouldBeIgnored(entry.path)){this._log(`File ${entry.path} should be ignored`,LOG_LEVEL_VERBOSE);return!1}const path2=this.getPath(entry),targetFile=await this.storage.getStub(this.getPathWithoutPrefix(entry));if(targetFile&&targetFile.isFolder){this._log(`${path2} is already exist as the folder`);return!0}{if(targetFile&&this.vault.isFileSizeTooLarge(targetFile.stat.size)){this._log(`File ${targetFile.path} is too large (on storage) to be processed`,LOG_LEVEL_VERBOSE);return!1}this._log(`Processing ${path2} (${entry._id.substring(0,8)} :${null==(_a8=entry._rev)?void 0:_a8.substring(0,5)}) : Started...`,LOG_LEVEL_VERBOSE);eventHub.emitEvent("conflict-cancelled",path2);const ret=await this.dbToStorage(entry,targetFile);this._log(`Processing ${path2} (${entry._id.substring(0,8)} :${null==(_b5=entry._rev)?void 0:_b5.substring(0,5)}) : Done`);return ret}})}async createAllChunks(showingNotice){this._log("Collecting local files on the storage",LOG_LEVEL_VERBOSE);const semaphore=Semaphore(10);let processed=0;const filesStorageSrc=await this.storage.getFiles(),incProcessed=()=>{processed++;processed%25==0&&this._log(`Creating missing chunks: ${processed} of ${total} files`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"chunkCreation")},total=filesStorageSrc.length,procAllChunks=filesStorageSrc.map(async file=>{if(!await this.vault.isTargetFile(file)){incProcessed();return!0}if(this.vault.isFileSizeTooLarge(file.stat.size)){incProcessed();return!0}if(shouldBeIgnored(file.path)){incProcessed();return!0}const release=await semaphore.acquire();incProcessed();try{await this.storeFileToDB(file,!1,!0)}catch(ex){this._log(ex,LOG_LEVEL_VERBOSE)}finally{release()}});await Promise.all(procAllChunks);this._log(`Creating chunks Done: ${processed} of ${total} files`,showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO,"chunkCreation")}};ServiceFileHandler=class extends ServiceFileHandlerBase{};FileAccessBase=class{constructor(adapter,dependencies){this.adapter=adapter;this.storageAccessManager=dependencies.storageAccessManager;this.vaultService=dependencies.vaultService;this.settingService=dependencies.settingService;this.APIService=dependencies.APIService;this.path=dependencies.pathService;this._log=createInstanceLogFunction("FileAccess",this.APIService)}isFile(file){return this.adapter.typeGuard.isFile(file)}isFolder(item){return this.adapter.typeGuard.isFolder(item)}getPath(file){return this.adapter.path.getPath(file)}nativeFileToUXFileInfoStub(file){return this.adapter.conversion.nativeFileToUXFileInfoStub(file)}nativeFolderToUXFolder(file){return this.adapter.conversion.nativeFolderToUXFolder(file)}normalisePath(path2){return this.adapter.path.normalisePath(path2)}_writeOp(file,callback){const path2=this.getPath(file);return this.storageAccessManager.processWriteFile(path2,async()=>await callback(path2,file))}_readOp(file,callback){const path2=this.getPath(file);return this.storageAccessManager.processReadFile(path2,async()=>await callback(path2,file))}async tryAdapterStat(file){return await this._readOp(file,async path2=>await this.adapter.storage.trystat(path2))}async adapterStat(file){return await this._readOp(file,async path2=>await this.adapter.storage.stat(path2))}async adapterExists(file){return await this._readOp(file,async path2=>await this.adapter.storage.exists(path2))}async adapterRemove(file){return await this._writeOp(file,async path2=>await this.adapter.storage.remove(path2))}async adapterRead(file){return await this._readOp(file,async path2=>await this.adapter.storage.read(path2))}async adapterReadBinary(file){return await this._readOp(file,async path2=>await this.adapter.storage.readBinary(path2))}async adapterReadAuto(file){return isPlainText(this.getPath(file))?await this._readOp(file,async path3=>await this.adapter.storage.read(path3)):await this._readOp(file,async path3=>await this.adapter.storage.readBinary(path3))}async adapterWrite(file,data,options){return"string"==typeof data?await this._writeOp(file,async path2=>await this.adapter.storage.write(path2,data,options)):await this._writeOp(file,async path2=>await this.adapter.storage.writeBinary(path2,toArrayBuffer(data),options))}adapterList(basePath){return this.adapter.storage.list(basePath)}async vaultCacheRead(file){return await this._readOp(file,async path2=>await this.adapter.vault.cachedRead(file))}vaultRead(file){return this._readOp(file,async path2=>await this.adapter.vault.read(file))}vaultReadBinary(file){return this._readOp(file,async path2=>await this.adapter.vault.readBinary(file))}async vaultReadAuto(file){const path2=this.getPath(file);return isPlainText(path2)?await this._readOp(path2,async path3=>await this.adapter.vault.read(file)):await this._readOp(path2,async path3=>await this.adapter.vault.readBinary(file))}async vaultModify(file,data,options){return"string"==typeof data?await this._writeOp(file,async path2=>{const oldData=await this.adapter.vault.read(file);if(data===oldData){const stat=await this.adapter.statFromNative(file);options&&options.mtime&&this.path.markChangesAreSame(path2,stat.mtime,options.mtime);return!0}await this.adapter.vault.modify(file,data,options);return!0}):await this._writeOp(file,async path2=>{const oldData=await this.adapter.vault.readBinary(file);if(await isDocContentSame(createBinaryBlob(oldData),createBinaryBlob(data))){const stat=await this.adapter.statFromNative(file);options&&options.mtime&&this.path.markChangesAreSame(path2,stat.mtime,options.mtime);return!0}await this.adapter.vault.modifyBinary(file,toArrayBuffer(data),options);return!0})}async vaultCreate(path2,data,options){return"string"==typeof data?await this._writeOp(path2,()=>this.adapter.vault.create(path2,data,options)):await this._writeOp(path2,()=>this.adapter.vault.createBinary(path2,toArrayBuffer(data),options))}trigger(name,...data){return this.adapter.vault.trigger(name,...data)}async reconcileInternalFile(path2){return await this.adapter.reconcileInternalFile(path2)}async adapterAppend(normalizedPath,data,options){return await this.adapter.storage.append(normalizedPath,data,options)}async delete(file,force){return await this._writeOp(file,async(path2,file2)=>await this.adapter.vault.delete(file2,force))}async trash(file,force){return await this._writeOp(file,async(path2,file2)=>await this.adapter.vault.trash(file2,force))}isStorageInsensitive(){return this.vaultService.isStorageInsensitive()}async getAbstractFileByPath(path2){return!this.settingService.currentSettings().handleFilenameCaseSensitive||this.isStorageInsensitive()?await this.adapter.getAbstractFileByPathInsensitive(path2):await this.adapter.getAbstractFileByPath(path2)}async getFiles(){return await this.adapter.getFiles()}async ensureDirectory(fullPath){const pathElements=fullPath.split("/");pathElements.pop();let c3="";for(const v2 of pathElements){c3+=v2;try{await this.adapter.storage.mkdir(c3)}catch(ex){if("Folder already exists."==(null==ex?void 0:ex.message));else{this._log("Folder Create Error");this._log(ex)}}c3+="/"}}async touch(file){const path2=this.getPath(file),statOrg=this.isFile(file)?file.stat:await this.adapter.storage.stat(path2);return this.storageAccessManager.touch({path:path2,stat:statOrg||{ctime:0,mtime:0,size:0}})}recentlyTouched(file){const path2=file.path;return this.storageAccessManager.recentlyTouched({...file,path:path2})}clearTouched(){return this.storageAccessManager.clearTouched()}};ObsidianConversionAdapter=class{nativeFileToUXFileInfoStub(file){return TFileToUXFileInfoStub(file)}nativeFolderToUXFolder(folder){return TFolderToUXFileInfoStub(folder)}};ObsidianPathAdapter=class{getPath(file){return"string"==typeof file?file:file.path}normalisePath(path2){return normalizePath(path2)}};ObsidianStorageAdapter=class{constructor(app){this.app=app}async exists(path2){return await this.app.vault.adapter.exists(path2)}async trystat(path2){return await this.app.vault.adapter.exists(path2)?await this.app.vault.adapter.stat(path2):null}async stat(path2){return await this.app.vault.adapter.stat(path2)}async mkdir(path2){await this.app.vault.adapter.mkdir(path2)}async remove(path2){await this.app.vault.adapter.remove(path2)}async read(path2){return await this.app.vault.adapter.read(path2)}async readBinary(path2){return await this.app.vault.adapter.readBinary(path2)}async write(path2,data,options){return await this.app.vault.adapter.write(path2,data,options)}async writeBinary(path2,data,options){return await this.app.vault.adapter.writeBinary(path2,toArrayBuffer(data),options)}async append(path2,data,options){return await this.app.vault.adapter.append(path2,data,options)}list(basePath){return Promise.resolve(this.app.vault.adapter.list(basePath))}};import_obsidian4=require("obsidian");ObsidianTypeGuardAdapter=class{isFile(file){return file instanceof import_obsidian4.TFile}isFolder(item){return item instanceof import_obsidian4.TFolder}};ObsidianVaultAdapter=class{constructor(app){this.app=app}async read(file){return await this.app.vault.read(file)}async cachedRead(file){return await this.app.vault.cachedRead(file)}async readBinary(file){return await this.app.vault.readBinary(file)}async modify(file,data,options){return await this.app.vault.modify(file,data,options)}async modifyBinary(file,data,options){return await this.app.vault.modifyBinary(file,toArrayBuffer(data),options)}async create(path2,data,options){return await this.app.vault.create(path2,data,options)}async createBinary(path2,data,options){return await this.app.vault.createBinary(path2,toArrayBuffer(data),options)}async delete(file,force=!1){return await this.app.vault.delete(file,force)}async trash(file,force=!1){return await this.app.vault.trash(file,force)}trigger(name,...data){return this.app.vault.trigger(name,...data)}};ObsidianFileSystemAdapter=class{constructor(app){this.app=app;this.path=new ObsidianPathAdapter;this.typeGuard=new ObsidianTypeGuardAdapter;this.conversion=new ObsidianConversionAdapter;this.storage=new ObsidianStorageAdapter(app);this.vault=new ObsidianVaultAdapter(app)}getAbstractFileByPath(path2){return Promise.resolve(this.app.vault.getAbstractFileByPath(path2))}getAbstractFileByPathInsensitive(path2){return Promise.resolve(this.app.vault.getAbstractFileByPathInsensitive(path2))}getFiles(){return Promise.resolve(this.app.vault.getFiles())}statFromNative(file){return Promise.resolve({...file.stat,type:"file"})}async reconcileInternalFile(path2){var _a8,_b5;return await Promise.resolve(null==(_b5=(_a8=this.app.vault.adapter).reconcileInternalFile)?void 0:_b5.call(_a8,path2))}};FileAccessObsidian=class extends FileAccessBase{constructor(app,dependencies){super(new ObsidianFileSystemAdapter(app),dependencies)}};StorageEventManagerBase=class extends StorageEventManager{constructor(adapter,dependencies){super();this.snapShotRestored=null;this.bufferedQueuedItems=[];this.triggerTakeSnapshot=throttle(()=>this._triggerTakeSnapshot(),100);this.concurrentProcessing=Semaphore(5);this._waitingMap=new Map;this._waitForIdle=null;this.processingCount=0;this.adapter=adapter;this.setting=dependencies.setting;this.vaultService=dependencies.vaultService;this.fileProcessing=dependencies.fileProcessing;this.storageAccess=dependencies.storageAccessManager;this._log=createInstanceLogFunction("StorageEventManager",dependencies.APIService)}get shouldBatchSave(){var _a8,_b5;return(null==(_a8=this.settings)?void 0:_a8.batchSave)&&1!=(null==(_b5=this.settings)?void 0:_b5.liveSync)}get batchSaveMinimumDelay(){var _a8,_b5;return null!=(_b5=null==(_a8=this.settings)?void 0:_a8.batchSaveMinimumDelay)?_b5:DEFAULT_SETTINGS.batchSaveMinimumDelay}get batchSaveMaximumDelay(){var _a8,_b5;return null!=(_b5=null==(_a8=this.settings)?void 0:_a8.batchSaveMaximumDelay)?_b5:DEFAULT_SETTINGS.batchSaveMaximumDelay}get settings(){return this.setting.currentSettings()}_saveSnapshot(snapshot2){return this.adapter.persistence.saveSnapshot(snapshot2)}_loadSnapshot(){return this.adapter.persistence.loadSnapshot()}isFolder(file){return this.adapter.typeGuard.isFolder(file)}isFile(file){return this.adapter.typeGuard.isFile(file)}updateStatus(){const totalItems=this.bufferedQueuedItems.filter(e3=>"args"in e3).filter(e3=>!e3.cancelled).length+this.concurrentProcessing.waiting,processing=this.processingCount,batchedCount=this._waitingMap.size;this.adapter.status.updateStatus({batched:batchedCount,processing,totalQueued:totalItems+batchedCount+processing})}restoreState(){this.snapShotRestored=this._restoreFromSnapshot();return this.snapShotRestored}async appendQueue(params,ctx){var _a8;const settings=this.settings;if(settings.isConfigured&&!(settings.suspendFileWatching||settings.maxMTimeForReflectEvents>0)){this.fileProcessing.onStorageFileEvent();for(const param of params){if(shouldBeIgnored(param.file.path))continue;const atomicKey=[0,0,0,0,0,0].map(e3=>`${Math.floor(1e5*Math.random())}`).join("-"),type=param.type,file=param.file,oldPath=param.oldPath;if("INTERNAL"!==type){const size=file.stat.size;if(this.vaultService.isFileSizeTooLarge(size)&&("CREATE"==type||"CHANGED"==type)){this._log(`The storage file has been changed but exceeds the maximum size. Skipping: ${param.file.path}`,LOG_LEVEL_NOTICE);continue}}if(this.isFolder(file)){this._log(`Folder event skipped: ${file.path}`,LOG_LEVEL_VERBOSE);continue}if(!await this.vaultService.isTargetFile(file.path))continue;if(this.isFile(file)&&("CREATE"==type||"CHANGED"==type)){await delay(10);if(this.storageAccess.recentlyTouched({path:file.path,stat:null!=(_a8=file.stat)?_a8:{ctime:0,mtime:0,size:0}}))continue}let cache2;param.cachedData&&(cache2=param.cachedData);this.enqueue({type,args:{file,oldPath,cache:cache2,ctx},skipBatchWait:param.skipBatchWait,key:atomicKey})}}}enqueue(newItem){"DELETE"==newItem.type&&this.bufferedQueuedItems.push({type:"SENTINEL_FLUSH"});this.updateStatus();this.bufferedQueuedItems.push(newItem);fireAndForget(()=>this._takeSnapshot().then(()=>this.runQueuedEvents()))}_triggerTakeSnapshot(){this._takeSnapshot()}waitForIdle(){if(0===this._waitingMap.size)return Promise.resolve();if(this._waitForIdle)return this._waitForIdle;const promises=[...this._waitingMap.entries()].map(([key3,waitInfo])=>new Promise(resolve=>{waitInfo.canProceed.promise.then(()=>{this._log(`Processing ${key3}: Wait for idle completed`,LOG_LEVEL_DEBUG)}).catch(e3=>{this._log(`Processing ${key3}: Wait for idle error`,LOG_LEVEL_INFO);this._log(e3,LOG_LEVEL_VERBOSE)}).finally(()=>{resolve()});this._proceedWaiting(key3)})),waitPromise=Promise.all(promises).then(()=>{this._waitForIdle=null;this._log("All wait for idle completed",LOG_LEVEL_VERBOSE)});this._waitForIdle=waitPromise;return waitPromise}_proceedWaiting(key3){const waitInfo=this._waitingMap.get(key3);if(waitInfo){waitInfo.canProceed.resolve(!0);clearTimeout(waitInfo.timerHandler);this._waitingMap.delete(key3)}this.triggerTakeSnapshot()}_cancelWaiting(key3){const waitInfo=this._waitingMap.get(key3);if(waitInfo){waitInfo.canProceed.resolve(!1);clearTimeout(waitInfo.timerHandler);this._waitingMap.delete(key3)}this.triggerTakeSnapshot()}_addWaiting(key3,event2,waitedSince){if(this._waitingMap.has(key3))throw new Error(`Already waiting for key: ${key3}`);const resolver2=promiseWithResolvers(),now3=Date.now(),since=null!=waitedSince?waitedSince:now3,elapsed=now3-since,maxDelay=1e3*this.batchSaveMaximumDelay,remainingDelay=Math.max(0,maxDelay-elapsed),nextDelay=Math.min(remainingDelay,1e3*this.batchSaveMinimumDelay);elapsed>=maxDelay?this._log(`Processing ${key3}: Batch save maximum delay already exceeded: ${event2.type}`,LOG_LEVEL_DEBUG):this._log(`Processing ${key3}: Adding waiting for batch save: ${event2.type} (${nextDelay}ms)`,LOG_LEVEL_DEBUG);const waitInfo={since,type:event2.type,event:event2,canProceed:resolver2,timerHandler:setTimeout(()=>{this._log(`Processing ${key3}: Batch save timeout reached: ${event2.type}`,LOG_LEVEL_DEBUG);this._proceedWaiting(key3)},nextDelay)};this._waitingMap.set(key3,waitInfo);this.triggerTakeSnapshot();return waitInfo}async processFileEvent(fei){const releaser=await this.concurrentProcessing.acquire();try{this.updateStatus();const filename=fei.args.file.path,waitingKey=`${filename}`,previous=this._waitingMap.get(waitingKey);let isShouldBeCancelled=fei.skipBatchWait||!1,previousPromise=Promise.resolve(!0),waitPromise=Promise.resolve(!0);if(previous){previousPromise=previous.canProceed.promise;isShouldBeCancelled&&this._log(`Processing ${filename}: Requested to perform immediately, cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);if(!isShouldBeCancelled&&"DELETE"===fei.type){this._log(`Processing ${filename}: DELETE requested, cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(!isShouldBeCancelled&&previous.type===fei.type){this._log(`Processing ${filename}: Cancelling previous waiting: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(isShouldBeCancelled){this._cancelWaiting(waitingKey);this._log(`Processing ${filename}: Previous cancelled: ${fei.type}`,LOG_LEVEL_DEBUG);isShouldBeCancelled=!0}if(!isShouldBeCancelled){this._log(`Processing ${filename}: Waiting for previous to complete: ${fei.type}`,LOG_LEVEL_DEBUG);this._proceedWaiting(waitingKey);this._log(`Processing ${filename}: Previous completed: ${fei.type}`,LOG_LEVEL_DEBUG)}}await previousPromise;if(this.shouldBatchSave&&!fei.skipBatchWait){"CREATE"==fei.type||"CHANGED"==fei.type?waitPromise=this._addWaiting(waitingKey,fei,null==previous?void 0:previous.since).canProceed.promise:fei.type;this._log(`Processing ${filename}: Waiting for batch save: ${fei.type}`,LOG_LEVEL_DEBUG);if(!await waitPromise){this._log(`Processing ${filename}: Cancelled by new queue: ${fei.type}`,LOG_LEVEL_DEBUG);return}}await this.requestProcessQueue(fei)}finally{await this._takeSnapshot();releaser()}}async _takeSnapshot(){const snapShot=[...[...this._waitingMap.values()].map(e3=>e3.event),...this.bufferedQueuedItems];await this._saveSnapshot(snapShot);this.updateStatus()}async _restoreFromSnapshot(){const snapShot=await this._loadSnapshot();if(snapShot&&Array.isArray(snapShot)&&snapShot.length>0){this._log(`Restoring storage operation snapshot: ${snapShot.length} items`,LOG_LEVEL_VERBOSE);this.bufferedQueuedItems=snapShot.map(e3=>({...e3,skipBatchWait:!0}));this.updateStatus();await this.runQueuedEvents()}else this._log("No snapshot to restore",LOG_LEVEL_VERBOSE)}runQueuedEvents(){return skipIfDuplicated("storage-event-manager-run-queued-events",async()=>{do{if(0===this.bufferedQueuedItems.length)break;const fei=this.bufferedQueuedItems.shift();await this._takeSnapshot();this.updateStatus();(await this.concurrentProcessing.acquire())();this.updateStatus();if("SENTINEL_FLUSH"!==fei.type)fireAndForget(()=>this.processFileEvent(fei));else{this._log("Waiting for idle",LOG_LEVEL_VERBOSE);await this.waitForIdle();this.updateStatus()}}while(this.bufferedQueuedItems.length>0)})}async requestProcessQueue(fei){try{this.processingCount++;this.updateStatus();await this.handleFileEvent(fei);await this._takeSnapshot()}finally{this.processingCount--;this.updateStatus()}}isWaiting(filename){return isWaitingForTimeout(`storage-event-manager-batchsave-${filename}`)}async handleFileEvent(queue2){const file=queue2.args.file,lockKey=`handleFile:${file.path}`,ret=await serialized(lockKey,async()=>{if(queue2.cancelled)this._log(`File event cancelled before processing: ${file.path}`,LOG_LEVEL_INFO);else if("INTERNAL"==queue2.type||file.isInternal)await this.fileProcessing.processOptionalFileEvent(file.path);else{const last=0;if("DELETE"==queue2.type)await this.fileProcessing.processFileEvent(queue2);else{if(file.stat.mtime==last){this._log(`File has been already scanned on ${queue2.type}, skip: ${file.path}`,LOG_LEVEL_VERBOSE);return}if(!await this.fileProcessing.processFileEvent(queue2)){this._log(`STORAGE -> DB: Handler failed, cancel the relative operations: ${file.path}`,LOG_LEVEL_INFO);this.cancelRelativeEvent(queue2);return}}}});this.updateStatus();return ret}cancelRelativeEvent(item){this._cancelWaiting(item.args.file.path)}async beginWatch(){await this.snapShotRestored;await this.adapter.watch.beginWatch({onCreate:(file,ctx)=>this.watchVaultCreate(file,ctx),onChange:(file,ctx)=>this.watchVaultChange(file,ctx),onDelete:(file,ctx)=>this.watchVaultDelete(file,ctx),onRename:(file,oldPath,ctx)=>this.watchVaultRename(file,oldPath,ctx),onRaw:path2=>this.watchVaultRawEvents(path2),onEditorChange:(editor,info3)=>this.watchEditorChange(editor,info3)})}watchEditorChange(editor,info3){if(!("path"in info3))return;if(!this.shouldBatchSave)return;const file=null==info3?void 0:info3.file;if(!file)return;const path2=this.adapter.typeGuard.isFile(file)?file.path:info3.path;if(!path2)return;if(this.storageAccess.isFileProcessing(path2))return;if(!this.isWaiting(path2))return;const data=null==info3?void 0:info3.data,fi={type:"CHANGED",file:this.adapter.converter.toFileInfo(file),cachedData:data};this.appendQueue([fi])}watchVaultCreate(file,ctx){if(this.adapter.typeGuard.isFolder(file))return;const path2=file.path;if(this.storageAccess.isFileProcessing(path2))return;const fileInfo=this.adapter.converter.toFileInfo(file);this.appendQueue([{type:"CREATE",file:fileInfo}],ctx)}watchVaultChange(file,ctx){if(this.adapter.typeGuard.isFolder(file))return;const path2=file.path;if(this.storageAccess.isFileProcessing(path2))return;const fileInfo=this.adapter.converter.toFileInfo(file);this.appendQueue([{type:"CHANGED",file:fileInfo}],ctx)}watchVaultDelete(file,ctx){if(this.adapter.typeGuard.isFolder(file))return;const path2=file.path;if(this.storageAccess.isFileProcessing(path2))return;const fileInfo=this.adapter.converter.toFileInfo(file,!0);this.appendQueue([{type:"DELETE",file:fileInfo}],ctx)}watchVaultRename(file,oldPath,ctx){if(this.adapter.typeGuard.isFile(file)){const fileInfo=this.adapter.converter.toFileInfo(file);this.appendQueue([{type:"DELETE",file:{path:oldPath,name:fileInfo.name,stat:fileInfo.stat,deleted:!0},skipBatchWait:!0},{type:"CREATE",file:fileInfo,skipBatchWait:!0}],ctx)}}watchVaultRawEvents(path2){this.storageAccess.isFileProcessing(path2)||this.settings&&(this.settings.useIgnoreFiles?this.vaultService.isTargetFile(path2).then(()=>this._watchVaultRawEvents(path2)):this._watchVaultRawEvents(path2))}async _watchVaultRawEvents(path2){}};ObsidianTypeGuardAdapter2=class{isFile(file){return file instanceof import_obsidian.TFile||!(!file||"object"!=typeof file||!("isFolder"in file))&&!file.isFolder}isFolder(item){return item instanceof import_obsidian.TFolder||!(!item||"object"!=typeof item||!("isFolder"in item))&&!!item.isFolder}};ObsidianPersistenceAdapter=class{constructor(core){this.core=core}async saveSnapshot(snapshot2){await this.core.kvDB.set("storage-event-manager-snapshot",snapshot2)}async loadSnapshot(){return await this.core.kvDB.get("storage-event-manager-snapshot")}};ObsidianStatusAdapter=class{constructor(fileProcessing){this.fileProcessing=fileProcessing}updateStatus(status){this.fileProcessing.batched.value=status.batched;this.fileProcessing.processing.value=status.processing;this.fileProcessing.totalQueued.value=status.totalQueued}};ObsidianConverterAdapter=class{toFileInfo(file,deleted){return TFileToUXFileInfoStub(file,deleted)}toInternalFileInfo(path2){return InternalFileToUXFileInfoStub(path2)}};ObsidianWatchAdapter=class{constructor(plugin3){this.plugin=plugin3}beginWatch(handlers3){var _a8;const plugin3=this.plugin,boundHandlers={onCreate:handlers3.onCreate.bind(handlers3),onChange:handlers3.onChange.bind(handlers3),onDelete:handlers3.onDelete.bind(handlers3),onRename:handlers3.onRename.bind(handlers3),onRaw:handlers3.onRaw.bind(handlers3),onEditorChange:null==(_a8=handlers3.onEditorChange)?void 0:_a8.bind(handlers3)};plugin3.registerEvent(plugin3.app.vault.on("create",boundHandlers.onCreate));plugin3.registerEvent(plugin3.app.vault.on("modify",boundHandlers.onChange));plugin3.registerEvent(plugin3.app.vault.on("delete",boundHandlers.onDelete));plugin3.registerEvent(plugin3.app.vault.on("rename",boundHandlers.onRename));plugin3.registerEvent(plugin3.app.vault.on("raw",boundHandlers.onRaw));boundHandlers.onEditorChange&&plugin3.registerEvent(plugin3.app.workspace.on("editor-change",boundHandlers.onEditorChange));return Promise.resolve()}};ObsidianStorageEventManagerAdapter=class{constructor(plugin3,core,fileProcessing){this.typeGuard=new ObsidianTypeGuardAdapter2;this.persistence=new ObsidianPersistenceAdapter(core);this.watch=new ObsidianWatchAdapter(plugin3);this.status=new ObsidianStatusAdapter(fileProcessing);this.converter=new ObsidianConverterAdapter}};StorageEventManagerObsidian=class extends StorageEventManagerBase{constructor(plugin3,core,dependencies){super(new ObsidianStorageEventManagerAdapter(plugin3,core,dependencies.fileProcessing),dependencies);this.core=core}async _watchVaultRawEvents(path2){(this.settings.syncInternalFiles||this.settings.usePluginSync)&&this.settings.watchInternalFileChanges&&path2.startsWith(this.core.services.API.getSystemConfigDir())&&(path2.endsWith("/")||await this.vaultService.isTargetFileInExtra(path2)&&this.appendQueue([{type:"INTERNAL",file:this.adapter.converter.toInternalFileInfo(path2),skipBatchWait:!0}],null))}};ModulePeriodicProcess=class extends AbstractModule{constructor(){super(...arguments);this.periodicSyncProcessor=new PeriodicProcessor(this.core,async()=>await this.services.replication.replicate())}disablePeriodic(){var _a8;null==(_a8=this.periodicSyncProcessor)||_a8.disable();return Promise.resolve(!0)}resumePeriodic(){this.periodicSyncProcessor.enable(this.settings.periodicReplication?1e3*this.settings.periodicReplicationInterval:0);return Promise.resolve(!0)}_allOnUnload(){return this.disablePeriodic()}_everyBeforeRealizeSetting(){return this.disablePeriodic()}_everyBeforeSuspendProcess(){return this.disablePeriodic()}_everyAfterResumeProcess(){return this.resumePeriodic()}_everyAfterRealizeSetting(){return this.resumePeriodic()}onBindFunction(core,services){services.appLifecycle.onUnload.addHandler(this._allOnUnload.bind(this));services.setting.onBeforeRealiseSetting.addHandler(this._everyBeforeRealizeSetting.bind(this));services.setting.onSettingRealised.addHandler(this._everyAfterRealizeSetting.bind(this));services.appLifecycle.onSuspending.addHandler(this._everyBeforeSuspendProcess.bind(this));services.appLifecycle.onResumed.addHandler(this._everyAfterResumeProcess.bind(this))}};ReplicateResultProcessor=class{constructor(replicator){this._suspended=!1;this.triggerTakeSnapshot=throttle(()=>this._triggerTakeSnapshot(),50);this._restoreFromSnapshot=void 0;this._queuedChanges=[];this._processingChanges=[];this._semaphore=Semaphore(10);this._isRunningProcessQueue=!1;this.replicator=replicator}log(message,level=LOG_LEVEL_INFO){Logger(`[ReplicateResultProcessor] ${message}`,level)}logError(e3){Logger(e3,LOG_LEVEL_VERBOSE)}get localDatabase(){return this.replicator.core.localDatabase}get services(){return this.replicator.core.services}get core(){return this.replicator.core}getPath(entry){return this.services.path.getPath(entry)}suspend(){this._suspended=!0}resume(){this._suspended=!1;fireAndForget(()=>this.runProcessQueue())}get isSuspended(){return this._suspended||!this.core.services.appLifecycle.isReady||this.replicator.settings.suspendParseReplicationResult||this.core.services.appLifecycle.isSuspended()}async _takeSnapshot(){const snapshot2={queued:this._queuedChanges.slice(),processing:this._processingChanges.slice()};await this.core.kvDB.set("replicationResultProcessorSnapshot",snapshot2);this.log(`Snapshot taken. Queued: ${snapshot2.queued.length}, Processing: ${snapshot2.processing.length}`,LOG_LEVEL_DEBUG);this.reportStatus()}_triggerTakeSnapshot(){fireAndForget(()=>this._takeSnapshot())}async restoreFromSnapshot(){const snapshot2=await this.core.kvDB.get("replicationResultProcessorSnapshot");if(snapshot2){const newQueue=[...snapshot2.processing,...snapshot2.queued,...this._queuedChanges];this._queuedChanges=[];this.enqueueAll(newQueue);this.log(`Restored from snapshot (${snapshot2.processing.length+snapshot2.queued.length} items)`,LOG_LEVEL_INFO)}}restoreFromSnapshotOnce(){this._restoreFromSnapshot||(this._restoreFromSnapshot=this.restoreFromSnapshot());return this._restoreFromSnapshot}async withCounting(proc,countValue){countValue.value++;try{return await proc()}finally{countValue.value--}}reportStatus(){this.services.replication.replicationResultCount.value=this._queuedChanges.length+this._processingChanges.length}enqueueAll(changes3){for(const change of changes3)this.processIfNonDocumentChange(change)||this.enqueueChange(change)}processIfNonDocumentChange(change){if(!change){this.log("Received empty change",LOG_LEVEL_VERBOSE);return!0}if(isChunk(change._id)){this.localDatabase.onNewLeaf(change);this.log(`Processed chunk: ${shortenId(change._id)}`,LOG_LEVEL_DEBUG);return!0}if("versioninfo"==change.type){this.log(`Version info document received: ${change._id}`,LOG_LEVEL_VERBOSE);if(change.version>12){this.core.replicator.closeReplication();this.log("Remote database updated to incompatible version. update your Self-hosted LiveSync plugin.",LOG_LEVEL_NOTICE)}return!0}if(change._id==SYNCINFO_ID||change._id.startsWith("_design")){this.log(`Skipped system document: ${change._id}`,LOG_LEVEL_VERBOSE);return!0}return!1}enqueueChange(doc){var _a8;const old=this._queuedChanges.find(e3=>e3._id==doc._id),docNote=`${"path"in doc?this.getPath(doc):"<unknown>"} (${shortenId(doc._id)}, ${shortenRev(doc._rev)})`;if(old){if(old._rev==doc._rev){this.log(`[Enqueue] skipped (Already queued): ${docNote}`,LOG_LEVEL_VERBOSE);return}const oldRev=null!=(_a8=old._rev)?_a8:"";if((!0===old._deleted||"deleted"in old&&!0===old.deleted)==(!0===doc._deleted||"deleted"in doc&&!0===doc.deleted)){this._queuedChanges=this._queuedChanges.filter(e3=>e3._id!=doc._id);this.log(`[Enqueue] requeued: ${docNote} (from rev: ${shortenRev(oldRev)})`,LOG_LEVEL_VERBOSE)}}this._queuedChanges.push(doc);this.triggerTakeSnapshot();this.triggerProcessQueue()}triggerProcessQueue(){fireAndForget(()=>this.runProcessQueue())}async runProcessQueue(){if(!this._isRunningProcessQueue&&!this.isSuspended&&0!=this._queuedChanges.length)try{this._isRunningProcessQueue=!0;for(;this._queuedChanges.length>0;){if(this.isSuspended){this.log(`Processing has got suspended. Remaining items in queue: ${this._queuedChanges.length}`,LOG_LEVEL_INFO);break}(await this._semaphore.acquire())();const doc=this._queuedChanges.shift();if(doc){this._processingChanges.push(doc);this.parseDocumentChange(doc)}this.triggerTakeSnapshot()}}finally{this._isRunningProcessQueue=!1}}async parseDocumentChange(change){var _a8;try{if(isAnyNote(change)){const docMtime=null!=(_a8=change.mtime)?_a8:0,maxMTime=this.replicator.settings.maxMTimeForReflectEvents;if(maxMTime>0&&docMtime>maxMTime){const docPath=this.getPath(change);this.log(`Processing ${docPath} has been skipped due to modification time (${new Date(1e3*docMtime).toISOString()}) exceeding the limit`,LOG_LEVEL_INFO);return}}if(await this.services.replication.processVirtualDocument(change))return;if(isAnyNote(change)){const docPath=this.getPath(change);if(!await this.services.vault.isTargetFile(docPath)){this.log(`Skipped: ${docPath}`,LOG_LEVEL_VERBOSE);return}const size=change.size;if(this.services.vault.isFileSizeTooLarge(size)){this.log(`Processing ${docPath} has been skipped due to file size exceeding the limit`,LOG_LEVEL_NOTICE);return}return await this.applyToDatabase(change)}this.log(`Skipped unexpected non-note document: ${change._id}`,LOG_LEVEL_INFO);return}finally{this._processingChanges=this._processingChanges.filter(e3=>e3!==change);this.triggerTakeSnapshot()}}applyToDatabase(doc){return this.withCounting(async()=>{let releaser;try{releaser=await this._semaphore.acquire();await this._applyToDatabase(doc)}catch(e3){this.log("Error while processing replication result",LOG_LEVEL_NOTICE);this.logError(e3)}finally{releaser&&releaser()}},this.services.replication.databaseQueueCount)}_applyToDatabase(doc_){const dbDoc=doc_,path2=this.getPath(dbDoc);return serialized(`replication-process:${dbDoc._id}`,async()=>{const docNote=`${path2} (${shortenId(dbDoc._id)}, ${shortenRev(dbDoc._rev)})`;if(!await this.checkIsChangeRequiredForDatabaseProcessing(dbDoc)){this.log(`Skipped (Not latest): ${docNote}`,LOG_LEVEL_VERBOSE);return}const doc=!0===dbDoc._deleted||"deleted"in dbDoc&&!0===dbDoc.deleted?{...dbDoc,data:""}:await this.localDatabase.getDBEntryFromMeta({...dbDoc},!1,!0);if(doc)if(await this.services.replication.processOptionalSynchroniseResult(dbDoc))this.log(`Processed by other processor: ${docNote}`,LOG_LEVEL_DEBUG);else if(this.services.vault.isValidPath(this.getPath(doc))){await this.applyToStorage(doc);this.log(`Processed: ${docNote}`,LOG_LEVEL_DEBUG)}else this.log(`Unprocessed (Invalid path): ${docNote}`,LOG_LEVEL_VERBOSE);else this.log(`Failed to gather content of ${docNote}`,LOG_LEVEL_NOTICE)})}applyToStorage(entry){return this.withCounting(async()=>{await this.services.replication.processSynchroniseResult(entry)},this.services.replication.storageApplyingCount)}async checkIsChangeRequiredForDatabaseProcessing(dbDoc){var _a8,_b5,_c3,_d2;const path2=this.getPath(dbDoc);try{const savedDoc=await this.localDatabase.getRaw(dbDoc._id,{conflicts:!0,revs_info:!0}),newRev=null!=(_a8=dbDoc._rev)?_a8:"",latestRev=null!=(_b5=savedDoc._rev)?_b5:"",revisions=null!=(_d2=null==(_c3=savedDoc._revs_info)?void 0:_c3.map(e3=>e3.rev))?_d2:[];return!(!(savedDoc._conflicts&&savedDoc._conflicts.length>0)&&newRev!=latestRev&&revisions.indexOf(newRev)>=0)}catch(e3){if("status"in e3&&404==e3.status)return!0;this.log(`Failed to get existing document for ${path2} (${shortenId(dbDoc._id)}, ${shortenRev(dbDoc._rev)}) `,LOG_LEVEL_NOTICE);this.logError(e3);return!1}}};ModuleReplicator=class extends AbstractModule{constructor(){super(...arguments);this.processor=new ReplicateResultProcessor(this);this._unresolvedErrorManager=new UnresolvedErrorManager(this.core.services.appLifecycle)}clearErrors(){this._unresolvedErrorManager.clearErrors()}_everyOnloadAfterLoadSettings(){eventHub.onEvent("file-saved",()=>{this.settings.syncOnSave&&!this.core.services.appLifecycle.isSuspended()&&scheduleTask("perform-replicate-after-save",250,()=>this.services.replication.replicateByEvent())});eventHub.onEvent(EVENT_SETTING_SAVED,setting=>{this.core.settings.suspendParseReplicationResult?this.processor.suspend():this.processor.resume()});return Promise.resolve(!0)}_onReplicatorInitialised(){clearHandlers();return Promise.resolve(!0)}_everyOnDatabaseInitialized(showNotice){fireAndForget(()=>this.processor.restoreFromSnapshotOnce());return Promise.resolve(!0)}async _everyBeforeReplicate(showMessage){await this.processor.restoreFromSnapshotOnce();this.clearErrors();return!0}async cleaned(showMessage){Logger("The remote database has been cleaned.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO);await skipIfDuplicated("cleanup",async()=>{var _a8;const message=`The remote database has been cleaned up.\nTo synchronize, this device must be also cleaned up. ${await purgeUnreferencedChunks(this.localDatabase.localDatabase,!0)} chunk(s) will be erased from this device.\nHowever, If there are many chunks to be deleted, maybe fetching again is faster.\nWe will lose the history of this device if we fetch the remote database again.\nEven if you choose to clean up, you will see this option again if you exit Obsidian and then synchronise again.`,ret=await this.core.confirm.confirmWithMessage("Cleaned",message,["Fetch again","Cleanup","Dismiss"],"Dismiss",30);"Fetch again"==ret&&await this.core.rebuilder.$performRebuildDB("localOnly");if("Cleanup"==ret){const replicator=this.services.replicator.getActiveReplicator();if(!(replicator instanceof LiveSyncCouchDBReplicator))return;const remoteDB=await replicator.connectRemoteCouchDBWithSetting(this.settings,this.services.API.isMobile(),!0);if("string"==typeof remoteDB){Logger(remoteDB,LOG_LEVEL_NOTICE);return!1}await purgeUnreferencedChunks(this.localDatabase.localDatabase,!1);this.localDatabase.clearCaches();if(await this.core.replicator.openReplication(this.settings,!1,showMessage,!0)){await balanceChunkPurgedDBs(this.localDatabase.localDatabase,remoteDB.db);await purgeUnreferencedChunks(this.localDatabase.localDatabase,!1);this.localDatabase.clearCaches();await(null==(_a8=this.services.replicator.getActiveReplicator())?void 0:_a8.markRemoteResolved(this.settings));Logger("The local database has been cleaned up.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO)}else Logger("Replication has been cancelled. Please try it again.",showMessage?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO)}})}async onReplicationFailed(showMessage=!1){const activeReplicator=this.services.replicator.getActiveReplicator();if(!activeReplicator){Logger("No active replicator found",LOG_LEVEL_INFO);return!1}if(activeReplicator.tweakSettingsMismatched&&activeReplicator.preferredTweakValue)await this.services.tweakValue.askResolvingMismatched(activeReplicator.preferredTweakValue);else if(activeReplicator.remoteLockedAndDeviceNotAccepted)if(activeReplicator.remoteCleaned&&this.settings.useIndexedDBAdapter)await this.cleaned(showMessage);else{const message=$msg("Replicator.Dialogue.Locked.Message"),CHOICE_FETCH=$msg("Replicator.Dialogue.Locked.Action.Fetch"),CHOICE_DISMISS=$msg("Replicator.Dialogue.Locked.Action.Dismiss"),CHOICE_UNLOCK=$msg("Replicator.Dialogue.Locked.Action.Unlock"),ret=await this.core.confirm.askSelectStringDialogue(message,[CHOICE_FETCH,CHOICE_UNLOCK,CHOICE_DISMISS],{title:$msg("Replicator.Dialogue.Locked.Title"),defaultAction:CHOICE_DISMISS,timeout:60});if(ret==CHOICE_FETCH){this._log($msg("Replicator.Dialogue.Locked.Message.Fetch"),LOG_LEVEL_NOTICE);await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.scheduleRestart();return!1}if(ret==CHOICE_UNLOCK){await activeReplicator.markRemoteResolved(this.settings);this._log($msg("Replicator.Dialogue.Locked.Message.Unlocked"),LOG_LEVEL_NOTICE);return!1}}return!1}_parseReplicationResult(docs){this.processor.enqueueAll(docs);return Promise.resolve(!0)}onBindFunction(core,services){services.replicator.onReplicatorInitialised.addHandler(this._onReplicatorInitialised.bind(this));services.databaseEvents.onDatabaseInitialised.addHandler(this._everyOnDatabaseInitialized.bind(this));services.appLifecycle.onSettingLoaded.addHandler(this._everyOnloadAfterLoadSettings.bind(this));services.replication.parseSynchroniseResult.addHandler(this._parseReplicationResult.bind(this));const isOnlineAndCanReplicateWithHost=isOnlineAndCanReplicate.bind(null,this._unresolvedErrorManager,{services:{API:services.API},serviceModules:{}}),canReplicateWithPBKDF2WithHost=canReplicateWithPBKDF2.bind(null,this._unresolvedErrorManager,{services:{replicator:services.replicator,setting:services.setting},serviceModules:{}});services.replication.onBeforeReplicate.addHandler(isOnlineAndCanReplicateWithHost,10);services.replication.onBeforeReplicate.addHandler(canReplicateWithPBKDF2WithHost,20);services.replication.onBeforeReplicate.addHandler(this._everyBeforeReplicate.bind(this),100);services.replication.onReplicationFailed.addHandler(this.onReplicationFailed.bind(this))}};ModuleReplicatorCouchDB=class extends AbstractModule{_anyNewReplicator(settingOverride={}){const settings={...this.settings,...settingOverride};return settings.remoteType==REMOTE_MINIO||settings.remoteType==REMOTE_P2P?Promise.resolve(!1):Promise.resolve(new LiveSyncCouchDBReplicator(this.core))}_everyAfterResumeProcess(){if(this.services.appLifecycle.isSuspended())return Promise.resolve(!0);if(!this.services.appLifecycle.isReady())return Promise.resolve(!0);if(this.settings.remoteType!=REMOTE_MINIO&&this.settings.remoteType!=REMOTE_P2P){const LiveSyncEnabled=this.settings.liveSync,continuous=LiveSyncEnabled,eventualOnStart=!LiveSyncEnabled&&this.settings.syncOnStart;(LiveSyncEnabled||eventualOnStart)&&fireAndForget(async()=>{await this.services.replication.isReplicationReady(!1)&&this.core.replicator.openReplication(this.settings,continuous,!1,!1)})}return Promise.resolve(!0)}onBindFunction(core,services){services.replicator.getNewReplicator.addHandler(this._anyNewReplicator.bind(this));services.appLifecycle.onResumed.addHandler(this._everyAfterResumeProcess.bind(this))}};MILSTONE_DOCID="_00000000-milestone.json";currentVersionRange2={min:0,max:2,current:2};LiveSyncJournalReplicator=class extends LiveSyncAbstractReplicator{get isChunkSendingSupported(){return!1}get client(){return this.setupJournalSyncClient()}get simpleStore(){return this.env.services.keyValueDB.simpleStore}async getReplicationPBKDF2Salt(setting,refresh){return await this.client.getReplicationPBKDF2Salt(refresh)}setupJournalSyncClient(){const settings=this.currentSettings;this._client?this._client.applyNewConfig(settings,this.simpleStore,this.env):this._client=new JournalSyncMinio(settings,this.simpleStore,this.env);return this._client}async ensureBucketIsCompatible(deviceNodeID,currentVersionRange3){const downloadedMilestone=await this.client.downloadJson(MILSTONE_DOCID),cPointInfo=await this.client.getCheckpointInfo(),progress=[...(null==cPointInfo?void 0:cPointInfo.receivedFiles)||[]].sort().pop()||"";return await ensureRemoteIsCompatible(downloadedMilestone,this.currentSettings,deviceNodeID,currentVersionRange3,{app_version:this.env.services.API.getAppVersion(),plugin_version:this.env.services.API.getPluginVersion(),vault_name:this.env.services.vault.vaultName(),device_name:this.env.services.vault.getVaultName(),progress},async info3=>{await this.client.uploadJson(MILSTONE_DOCID,info3)})}constructor(env){super(env);this.env=env;fireAndForget(()=>this.initializeDatabaseForReplication());this.rawDatabase.on("close",()=>{this.closeReplication()})}async migrate(from,to){Logger(`Database updated from ${from} to ${to}`,LOG_LEVEL_NOTICE);return Promise.resolve(!0)}terminateSync(){this.client.requestStop()}async openReplication(setting,_,showResult,ignoreCleanLock=!1){if(!await this.checkReplicationConnectivity(!1,ignoreCleanLock,showResult))return!1;await this.client.sync(showResult);return!0}async replicateAllToServer(setting,showingNotice){return!!await this.checkReplicationConnectivity(!1,!1,!!showingNotice)&&await this.client.sendLocalJournal(showingNotice)}async replicateAllFromServer(setting,showingNotice){return!!await this.checkReplicationConnectivity(!1,!1,!!showingNotice)&&await this.client.receiveRemoteJournal(showingNotice)}async checkReplicationConnectivity(skipCheck,ignoreCleanLock=!1,showMessage=!1){if(!await this.client.isAvailable())return!1;if(!skipCheck){await this.client.ensureCheckpointCachesAreFresh();this.remoteCleaned=!1;this.remoteLocked=!1;this.remoteLockedAndDeviceNotAccepted=!1;this.tweakSettingsMismatched=!1;const ensure=await this.ensureBucketIsCompatible(this.nodeid,currentVersionRange2);if("INCOMPATIBLE"==ensure){Logger("The remote database has no compatibility with the running version. Please upgrade the plugin.",LOG_LEVEL_NOTICE);return!1}if("NODE_LOCKED"==ensure){Logger("The remote database has been rebuilt or corrupted since we have synchronized last time. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;return!1}if("LOCKED"==ensure)this.remoteLocked=!0;else if("NODE_CLEANED"==ensure){if(!ignoreCleanLock){Logger("The remote database has been cleaned up. Fetch rebuilt DB, explicit unlocking or chunk clean-up is required.",LOG_LEVEL_NOTICE);this.remoteLockedAndDeviceNotAccepted=!0;this.remoteLocked=!0;this.remoteCleaned=!0;return!1}this.remoteLocked=!0}else if("OK"==ensure);else if("MISMATCHED"==ensure[0]){Logger("Configuration mismatching between the clients has been detected. This can be harmful or extra capacity consumption. We have to make these value unified. When replication is initiated manually via the command palette or ribbon, a dialogue box will open to address this.",LOG_LEVEL_NOTICE);this.tweakSettingsMismatched=!0;this.preferredTweakValue=ensure[1];return!1}}return!0}async fetchRemoteChunks(missingChunks,showResult){return Promise.resolve([])}closeReplication(){this.client.requestStop();this.syncStatus="CLOSED";Logger("Replication closed");this.updateInfo()}async tryResetRemoteDatabase(setting){this.closeReplication();try{await this.client.resetBucket();clearHandlers();Logger("Remote Bucket Cleared",LOG_LEVEL_NOTICE);await this.tryCreateRemoteDatabase(setting)}catch(ex){Logger("Something happened on Remote Bucket Clear",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE)}}async tryCreateRemoteDatabase(setting){this.closeReplication();Logger("Remote Database Created or Connected",LOG_LEVEL_NOTICE);clearHandlers();await this.ensurePBKDF2Salt(setting,!0,!1);return await Promise.resolve()}async markRemoteLocked(setting,locked,lockByClean){const defInitPoint={_id:MILSTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked,cleaned:lockByClean,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange2},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await this.client.downloadJson(MILSTONE_DOCID)||{}};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=[this.nodeid];remoteMilestone.locked=locked;remoteMilestone.cleaned=remoteMilestone.cleaned||lockByClean;Logger(locked?"Lock remote bucket to prevent data corruption":"Unlock remote bucket to prevent data corruption",LOG_LEVEL_NOTICE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}async markRemoteResolved(setting){const defInitPoint={_id:MILSTONE_DOCID,type:"milestoneinfo",created:new Date/1,locked:!1,accepted_nodes:[this.nodeid],node_chunk_info:{[this.nodeid]:currentVersionRange2},node_info:{},tweak_values:{}},remoteMilestone={...defInitPoint,...await this.client.downloadJson(MILSTONE_DOCID)||{}};remoteMilestone.node_chunk_info={...defInitPoint.node_chunk_info,...remoteMilestone.node_chunk_info};remoteMilestone.accepted_nodes=Array.from(new Set([...remoteMilestone.accepted_nodes,this.nodeid]));Logger("Mark this device as 'resolved'.",LOG_LEVEL_NOTICE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}async tryConnectRemote(setting,showResult=!0){const endpoint=setting.endpoint,testClient=new JournalSyncMinio(setting,this.simpleStore,this.env);try{await testClient.listFiles("",1);Logger(`Connected to ${endpoint} successfully!`,LOG_LEVEL_NOTICE);return!0}catch(ex){Logger(`Error! Could not connected to ${endpoint}\n${ex.message}`,LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_NOTICE);return!1}}async resetRemoteTweakSettings(setting){try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");remoteMilestone.tweak_values={};Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}}async setPreferredRemoteTweakSettings(setting){try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");remoteMilestone.tweak_values[DEVICE_ID_PREFERRED]=extractObject(TweakValuesTemplate,{...setting});Logger("tweak values on the remote database have been cleared",LOG_LEVEL_VERBOSE);await this.client.uploadJson(MILSTONE_DOCID,remoteMilestone)}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);throw ex}}async getRemotePreferredTweakValues(setting){var _a8;try{const remoteMilestone=await this.client.downloadJson(MILSTONE_DOCID);if(!remoteMilestone)throw new Error("Missing remote milestone");return(null==(_a8=null==remoteMilestone?void 0:remoteMilestone.tweak_values)?void 0:_a8[DEVICE_ID_PREFERRED])||!1}catch(ex){Logger("Could not retrieve remote milestone",LOG_LEVEL_NOTICE);Logger(ex,LOG_LEVEL_VERBOSE);return!1}}async getRemoteStatus(setting){const testClient=new JournalSyncMinio(setting,this.simpleStore,this.env);return await testClient.getUsage()}countCompromisedChunks(){Logger("Bucket Sync Replicator cannot count compromised chunks",LOG_LEVEL_VERBOSE);return Promise.resolve(0)}getConnectedDeviceList(setting){return Promise.resolve(!1)}};ModuleReplicatorMinIO=class extends AbstractModule{_anyNewReplicator(settingOverride={}){return{...this.settings,...settingOverride}.remoteType==REMOTE_MINIO?Promise.resolve(new LiveSyncJournalReplicator(this.core)):Promise.resolve(!1)}onBindFunction(core,services){services.replicator.getNewReplicator.addHandler(this._anyNewReplicator.bind(this))}};ModuleConflictChecker=class extends AbstractModule{constructor(){super(...arguments);this.conflictResolveQueue=new QueueProcessor(async filenames=>{const filename=filenames[0];return await this.services.conflict.resolve(filename)},{suspended:!1,batchSize:1,concurrentLimit:10,delay:0,keepResultUntilDownstreamConnected:!1}).replaceEnqueueProcessor((queue2,newEntity)=>{sendValue("cancel-resolve-conflict:"+newEntity,!0);return[...[...queue2].filter(e3=>e3!=newEntity),newEntity]});this.conflictCheckQueue=new QueueProcessor(files=>{const filename=files[0];return Promise.resolve([filename])},{suspended:!1,batchSize:1,concurrentLimit:10,delay:0,keepResultUntilDownstreamConnected:!0,pipeTo:this.conflictResolveQueue,totalRemainingReactiveSource:this.services.conflict.conflictProcessQueueCount})}async _queueConflictCheckIfOpen(file){const path2=file;if(this.settings.checkConflictOnlyOnOpen){const af2=this.services.vault.getActiveFilePath();if(af2&&af2!=path2){this._log(`${file} is conflicted, merging process has been postponed.`,LOG_LEVEL_NOTICE);return}}await this.services.conflict.queueCheckFor(path2)}async _queueConflictCheck(file){const optionalConflictResult=await this.services.conflict.getOptionalConflictCheckMethod(file);1!=optionalConflictResult&&("newer"===optionalConflictResult?await this.services.conflict.resolveByNewest(file):this.conflictCheckQueue.enqueue(file))}_waitForAllConflictProcessed(){return this.conflictResolveQueue.waitForAllProcessed()}onBindFunction(core,services){services.conflict.queueCheckForIfOpen.setHandler(this._queueConflictCheckIfOpen.bind(this));services.conflict.queueCheckFor.setHandler(this._queueConflictCheck.bind(this));services.conflict.ensureAllProcessed.setHandler(this._waitForAllConflictProcessed.bind(this))}};import_diff_match_patch4=__toESM(require_diff_match_patch(),1);ModuleConflictResolver=class extends AbstractModule{async _resolveConflictByDeletingRev(path2,deleteRevision,subTitle=""){const title=`Resolving ${subTitle?`[${subTitle}]`:""}:`;if(!await this.core.fileHandler.deleteRevisionFromDB(path2,deleteRevision)){this._log(`${title} Could not delete conflicted revision ${displayRev(deleteRevision)} of ${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}eventHub.emitEvent("conflict-cancelled",path2);this._log(`${title} Conflicted revision has been deleted ${displayRev(deleteRevision)} ${path2}`,LOG_LEVEL_INFO);if(0!=(await this.core.databaseFileAccess.getConflictedRevs(path2)).length){this._log(`${title} some conflicts are left in ${path2}`,LOG_LEVEL_INFO);return AUTO_MERGED}if(isPluginMetadata(path2)||isCustomisationSyncMetadata(path2)){this._log(`${title} ${path2} is a plugin metadata file, no need to write to storage`,LOG_LEVEL_INFO);return AUTO_MERGED}if(!await this.core.fileHandler.dbToStorage(path2,stripAllPrefixes(path2),!0)){this._log(`Could not write the resolved content to the storage: ${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}const level=-1!==subTitle.indexOf("same")?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE;this._log(`${path2} has been merged automatically`,level);return AUTO_MERGED}async checkConflictAndPerformAutoMerge(path2){const ret=await this.localDatabase.tryAutoMerge(path2,!this.settings.disableMarkdownAutoMerge);if("ok"in ret)return ret.ok;if("result"in ret){const p2=ret.result;if(!await this.core.databaseFileAccess.storeContent(path2,p2)){this._log(`Merged content cannot be stored:${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}return await this.services.conflict.resolveByDeletingRevision(path2,ret.conflictedRev,"Sensible")}const{rightRev,leftLeaf,rightLeaf}=ret;if(0==leftLeaf){this._log(`could not get current revisions:${path2}`,LOG_LEVEL_NOTICE);return MISSING_OR_ERROR}if(0==rightLeaf)return await this.services.conflict.resolveByDeletingRevision(path2,rightRev,"MISSING OLD REV");const isSame=leftLeaf.data==rightLeaf.data&&leftLeaf.deleted==rightLeaf.deleted,isBinary=!isPlainText(path2),alwaysNewer=this.settings.resolveConflictsByNewerFile;if(isSame||isBinary||alwaysNewer){let loser=leftLeaf;compareMTime(leftLeaf.mtime,rightLeaf.mtime)!=TARGET_IS_NEW&&(loser=rightLeaf);const subTitle=[isSame?"same":"",isBinary?"binary":"",alwaysNewer?"alwaysNewer":""].filter(e3=>e3.trim()).join(",");return await this.services.conflict.resolveByDeletingRevision(path2,loser.rev,subTitle)}const dmp=new import_diff_match_patch4.default,diff=dmp.diff_main(leftLeaf.data,rightLeaf.data);dmp.diff_cleanupSemantic(diff);this._log(`conflict(s) found:${path2}`);return{left:leftLeaf,right:rightLeaf,diff}}async _resolveConflict(filename){return await serialized(`conflict-resolve:${filename}`,async()=>{const conflictCheckResult=await this.checkConflictAndPerformAutoMerge(filename);if(conflictCheckResult!==MISSING_OR_ERROR&&conflictCheckResult!==NOT_CONFLICTED&&conflictCheckResult!==CANCELLED)if(conflictCheckResult!==AUTO_MERGED){if(this.settings.showMergeDialogOnlyOnActive){const af2=this.services.vault.getActiveFilePath();if(af2&&af2!=filename){this._log(`[conflict] ${filename} is conflicted. Merging process has been postponed to the file have got opened.`,LOG_LEVEL_NOTICE);return}}this._log("[conflict] Manual merge required!");eventHub.emitEvent("conflict-cancelled",filename);await this.services.conflict.resolveByUserInteraction(filename,conflictCheckResult)}else{this.settings.syncAfterMerge&&!this.services.appLifecycle.isSuspended()&&await this.services.replication.replicateByEvent();this._log("[conflict] Automatically merged, but we have to check it again");await this.services.conflict.queueCheckFor(filename)}else this._log(`[conflict] Not conflicted or cancelled: ${filename}`,LOG_LEVEL_VERBOSE)})}async _anyResolveConflictByNewest(filename){const currentRev=await this.core.databaseFileAccess.fetchEntryMeta(filename,void 0,!0);if(0==currentRev){this._log(`Could not get current revision of ${filename}`);return Promise.resolve(!1)}const revs=await this.core.databaseFileAccess.getConflictedRevs(filename);if(0==revs.length)return Promise.resolve(!0);const mTimeAndRev=[[currentRev.mtime,currentRev._rev],...await Promise.all(revs.map(async rev3=>{const leaf=await this.core.databaseFileAccess.fetchEntryMeta(filename,rev3);return 0==leaf?[0,rev3]:[leaf.mtime,rev3]}))].sort((a2,b3)=>{const diff=b3[0]-a2[0];return 0==diff?a2[1].localeCompare(b3[1],"en",{numeric:!0}):diff});this._log(`Resolving conflict by newest: ${filename} (Newest: ${new Date(mTimeAndRev[0][0]).toLocaleString()}) (${mTimeAndRev.length} revisions exists)`);for(let i2=1;i2<mTimeAndRev.length;i2++){this._log(`conflict: Deleting the older revision ${mTimeAndRev[i2][1]} (${new Date(mTimeAndRev[i2][0]).toLocaleString()}) of ${filename}`);await this.services.conflict.resolveByDeletingRevision(filename,mTimeAndRev[i2][1],"NEWEST")}return!0}async _resolveAllConflictedFilesByNewerOnes(){this._log("Resolving conflicts by newer ones",LOG_LEVEL_NOTICE);const files=await this.core.storageAccess.getFileNames();let i2=0;for(const file of files){i2++%10&&this._log(`Check and Processing ${i2} / ${files.length}`,LOG_LEVEL_NOTICE,"resolveAllConflictedFilesByNewerOnes");await this.services.conflict.resolveByNewest(file)}this._log("Done!",LOG_LEVEL_NOTICE,"resolveAllConflictedFilesByNewerOnes")}onBindFunction(core,services){services.conflict.resolveByDeletingRevision.setHandler(this._resolveConflictByDeletingRev.bind(this));services.conflict.resolve.setHandler(this._resolveConflict.bind(this));services.conflict.resolveByNewest.setHandler(this._anyResolveConflictByNewest.bind(this));services.conflict.resolveAllConflictedFilesByNewerOnes.setHandler(this._resolveAllConflictedFilesByNewerOnes.bind(this))}};ModuleResolvingMismatchedTweaks=class extends AbstractModule{async _anyAfterConnectCheckFailed(){if(!this.core.replicator.tweakSettingsMismatched&&!this.core.replicator.preferredTweakValue)return!1;const preferred=this.core.replicator.preferredTweakValue;if(!preferred)return!1;const ret=await this.services.tweakValue.askResolvingMismatched(preferred);return"OK"!=ret&&("CHECKAGAIN"==ret?"CHECKAGAIN":"IGNORE"==ret||void 0)}async _checkAndAskResolvingMismatchedTweaks(preferred){const mine=extractObject(TweakValuesShouldMatchedTemplate,this.settings),items=Object.entries(TweakValuesShouldMatchedTemplate);let rebuildRequired=!1,rebuildRecommended=!1;const tableRows=[];for(const v2 of items){const key3=v2[0],valueMine=escapeMarkdownValue(mine[key3]),valuePreferred=escapeMarkdownValue(preferred[key3]);if(valueMine!=valuePreferred){-1!==IncompatibleChanges.indexOf(key3)&&(rebuildRequired=!0);for(const pattern of IncompatibleChangesInSpecificPattern){if(pattern.key!==key3)continue;const isFromConditionMet="from"in pattern&&pattern.from===mine[key3],isToConditionMet="to"in pattern&&pattern.to===preferred[key3];(isFromConditionMet||isToConditionMet)&&(pattern.isRecommendation?rebuildRecommended=!0:rebuildRequired=!0)}-1!==CompatibleButLossyChanges.indexOf(key3)&&(rebuildRecommended=!0);tableRows.push($msg("TweakMismatchResolve.Table.Row",{name:confName(key3),self:valueMine,remote:valuePreferred}))}}const additionalMessage=rebuildRequired&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.WarningIncompatibleRebuildRequired"):"",additionalMessage2=rebuildRecommended&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.WarningIncompatibleRebuildRecommended"):"",table2=$msg("TweakMismatchResolve.Table",{rows:tableRows.join("\n")}),message=$msg("TweakMismatchResolve.Message.MainTweakResolving",{table:table2,additionalMessage:[additionalMessage,additionalMessage2].filter(v2=>v2).join("\n")}),CHOICE_USE_REMOTE=$msg("TweakMismatchResolve.Action.UseRemote"),CHOICE_USE_REMOTE_WITH_REBUILD=$msg("TweakMismatchResolve.Action.UseRemoteWithRebuild"),CHOICE_USE_REMOTE_PREVENT_REBUILD=$msg("TweakMismatchResolve.Action.UseRemoteAcceptIncompatible"),CHOICE_USE_MINE=$msg("TweakMismatchResolve.Action.UseMine"),CHOICE_USE_MINE_WITH_REBUILD=$msg("TweakMismatchResolve.Action.UseMineWithRebuild"),CHOICE_USE_MINE_PREVENT_REBUILD=$msg("TweakMismatchResolve.Action.UseMineAcceptIncompatible"),CHOICE_DISMISS=$msg("TweakMismatchResolve.Action.Dismiss"),CHOICE_AND_VALUES=[];if(rebuildRequired){CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_WITH_REBUILD,[preferred,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_WITH_REBUILD,[!0,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_PREVENT_REBUILD,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_PREVENT_REBUILD,[!0,!1]])}else if(rebuildRecommended){CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE,[!0,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE_WITH_REBUILD,[!0,!0]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE_WITH_REBUILD,[!0,!0]])}else{CHOICE_AND_VALUES.push([CHOICE_USE_REMOTE,[preferred,!1]]);CHOICE_AND_VALUES.push([CHOICE_USE_MINE,[!0,!1]])}CHOICE_AND_VALUES.push([CHOICE_DISMISS,[!1,!1]]);const CHOICES=Object.fromEntries(CHOICE_AND_VALUES),retKey=await this.core.confirm.askSelectStringDialogue(message,Object.keys(CHOICES),{title:$msg("TweakMismatchResolve.Title.TweakResolving"),timeout:60,defaultAction:CHOICE_DISMISS});return retKey?CHOICES[retKey]:[!1,!1]}async _askResolvingMismatchedTweaks(){if(!this.core.replicator.tweakSettingsMismatched)return"OK";const tweaks=this.core.replicator.preferredTweakValue;if(!tweaks)return"IGNORE";const preferred=extractObject(TweakValuesShouldMatchedTemplate,tweaks),[conf,rebuildRequired]=await this.services.tweakValue.checkAndAskResolvingMismatched(preferred);if(!conf)return"IGNORE";if(!0===conf){await this.core.replicator.setPreferredRemoteTweakSettings(this.settings);rebuildRequired&&await this.core.rebuilder.$rebuildRemote();Logger("Tweak values on the remote server have been updated. Your other device will see this message.",LOG_LEVEL_NOTICE);return"CHECKAGAIN"}if(conf){this.settings={...this.settings,...conf};await this.core.replicator.setPreferredRemoteTweakSettings(this.settings);await this.services.setting.saveSettingData();rebuildRequired&&await this.core.rebuilder.$fetchLocal();Logger("Configuration has been updated as configured by the other device.",LOG_LEVEL_NOTICE);return"CHECKAGAIN"}return"IGNORE"}async _fetchRemotePreferredTweakValues(trialSetting){const replicator=await this.services.replicator.getNewReplicator(trialSetting);if(!replicator){this._log("The remote type is not supported for fetching preferred tweak values.",LOG_LEVEL_NOTICE);return!1}if(await replicator.tryConnectRemote(trialSetting)){const preferred=await replicator.getRemotePreferredTweakValues(trialSetting);if(preferred)return preferred;this._log("Failed to get the preferred tweak values from the remote server.",LOG_LEVEL_NOTICE);return!1}this._log("Failed to connect to the remote server.",LOG_LEVEL_NOTICE);return!1}async _checkAndAskUseRemoteConfiguration(trialSetting){const preferred=await this.services.tweakValue.fetchRemotePreferred(trialSetting);return preferred?await this.services.tweakValue.askUseRemoteConfiguration(trialSetting,preferred):{result:!1,requireFetch:!1}}async _askUseRemoteConfiguration(trialSetting,preferred){const items=Object.entries(TweakValuesShouldMatchedTemplate);let rebuildRequired=!1,rebuildRecommended=!1,differenceCount=0;const tableRows=[];for(const v2 of items){const key3=v2[0],remoteValueForDisplay=escapeMarkdownValue(preferred[key3]),currentValueForDisplay=`${escapeMarkdownValue(null==trialSetting?void 0:trialSetting[key3])}`;if((null==trialSetting?void 0:trialSetting[key3])!==preferred[key3]){-1!==IncompatibleChanges.indexOf(key3)&&(rebuildRequired=!0);for(const pattern of IncompatibleChangesInSpecificPattern){if(pattern.key!==key3)continue;const isFromConditionMet="from"in pattern&&pattern.from===(null==trialSetting?void 0:trialSetting[key3]),isToConditionMet="to"in pattern&&pattern.to===preferred[key3];(isFromConditionMet||isToConditionMet)&&(pattern.isRecommendation?rebuildRecommended=!0:rebuildRequired=!0)}-1!==CompatibleButLossyChanges.indexOf(key3)&&(rebuildRecommended=!0);tableRows.push($msg("TweakMismatchResolve.Table.Row",{name:confName(key3),self:currentValueForDisplay,remote:remoteValueForDisplay}));differenceCount++}}if(0===differenceCount){this._log("The settings in the remote database are the same as the local database.",LOG_LEVEL_NOTICE);return{result:!1,requireFetch:!1}}const additionalMessage=rebuildRequired&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.UseRemote.WarningRebuildRequired"):"",additionalMessage2=rebuildRecommended&&this.core.settings.isConfigured?$msg("TweakMismatchResolve.Message.UseRemote.WarningRebuildRecommended"):"",table2=$msg("TweakMismatchResolve.Table",{rows:tableRows.join("\n")}),message=$msg("TweakMismatchResolve.Message.Main",{table:table2,additionalMessage:[additionalMessage,additionalMessage2].filter(v2=>v2).join("\n")}),CHOICE_USE_REMOTE=$msg("TweakMismatchResolve.Action.UseConfigured"),CHOICE_DISMISS=$msg("TweakMismatchResolve.Action.Dismiss"),CHOICES=[CHOICE_USE_REMOTE,CHOICE_DISMISS],retKey=await this.core.confirm.askSelectStringDialogue(message,CHOICES,{title:$msg("TweakMismatchResolve.Title.UseRemoteConfig"),timeout:0,defaultAction:CHOICE_DISMISS});return retKey?retKey===CHOICE_DISMISS?{result:!1,requireFetch:!1}:retKey===CHOICE_USE_REMOTE?{result:{...trialSetting,...preferred},requireFetch:rebuildRequired}:{result:!1,requireFetch:!1}:{result:!1,requireFetch:!1}}onBindFunction(core,services){services.tweakValue.fetchRemotePreferred.setHandler(this._fetchRemotePreferredTweakValues.bind(this));services.tweakValue.checkAndAskResolvingMismatched.setHandler(this._checkAndAskResolvingMismatchedTweaks.bind(this));services.tweakValue.askResolvingMismatched.setHandler(this._askResolvingMismatchedTweaks.bind(this));services.tweakValue.checkAndAskUseRemoteConfiguration.setHandler(this._checkAndAskUseRemoteConfiguration.bind(this));services.tweakValue.askUseRemoteConfiguration.setHandler(this._askUseRemoteConfiguration.bind(this));services.replication.checkConnectionFailure.addHandler(this._anyAfterConnectCheckFailed.bind(this))}};ModuleLiveSyncMain=class extends AbstractModule{async _onLiveSyncReady(){if(!await this.core.services.appLifecycle.onLayoutReady())return!1;eventHub.emitEvent(EVENT_LAYOUT_READY);if(this.settings.suspendFileWatching||this.settings.suspendParseReplicationResult){const ANSWER_KEEP=$msg("moduleLiveSyncMain.optionKeepLiveSyncDisabled"),ANSWER_RESUME=$msg("moduleLiveSyncMain.optionResumeAndRestart"),message=$msg("moduleLiveSyncMain.msgScramEnabled",{fileWatchingStatus:this.settings.suspendFileWatching?"suspended":"active",parseReplicationStatus:this.settings.suspendParseReplicationResult?"suspended":"active"});if(await this.core.confirm.askSelectStringDialogue(message,[ANSWER_KEEP,ANSWER_RESUME],{defaultAction:ANSWER_KEEP,title:$msg("moduleLiveSyncMain.titleScramEnabled")})==ANSWER_RESUME){this.settings.suspendFileWatching=!1;this.settings.suspendParseReplicationResult=!1;await this.saveSettings();this.services.appLifecycle.scheduleRestart();return!1}}if(!await this.services.databaseEvents.initialiseDatabase(!1,!1))return!1;if(!await this.core.services.appLifecycle.onFirstInitialise())return!1;await this.services.control.applySettings();fireAndForget(async()=>{this._log($msg("moduleLiveSyncMain.logAdditionalSafetyScan"),LOG_LEVEL_VERBOSE);await this.services.appLifecycle.onScanningStartupIssues()?this._log($msg("moduleLiveSyncMain.logSafetyScanCompleted"),LOG_LEVEL_VERBOSE):this._log($msg("moduleLiveSyncMain.logSafetyScanFailed"),LOG_LEVEL_NOTICE)});return!0}_wireUpEvents(){eventHub.onEvent(EVENT_SETTING_SAVED,settings=>{fireAndForget(async()=>{var _a8,_b5,_c3;try{await this.core.services.control.applySettings();void 0!==(null!=(_b5=null==(_a8=this.core.services.setting.currentSettings())?void 0:_a8.displayLanguage)?_b5:void 0)&&setLang(null==(_c3=this.core.services.setting.currentSettings())?void 0:_c3.displayLanguage);eventHub.emitEvent("reload-setting-tab")}catch(e3){this._log("Error in Setting Save Event",LOG_LEVEL_NOTICE);this._log(e3,LOG_LEVEL_VERBOSE)}})});return Promise.resolve(!0)}async _onLiveSyncLoad(){initialiseWorkerModule();await this.services.appLifecycle.onWireUpEvents();eventHub.emitEvent("plugin-loaded");this._log($msg("moduleLiveSyncMain.logLoadingPlugin"));if(!await this.services.appLifecycle.onInitialise()){this._log($msg("moduleLiveSyncMain.logPluginInitCancelled"),LOG_LEVEL_NOTICE);return!1}this._log($msg("moduleLiveSyncMain.logPluginVersion",{manifestVersion:"0.25.57",packageVersion:"0.25.57"}));await this.services.setting.loadSettings();if(!await this.services.appLifecycle.onSettingLoaded()){this._log($msg("moduleLiveSyncMain.logPluginInitCancelled"),LOG_LEVEL_NOTICE);return!1}const lsKey="obsidian-live-sync-ver"+this.services.vault.getVaultName(),last_version=localStorage.getItem(lsKey);~~(versionNumberString2Number("0.25.57")/1e3)>this.settings.lastReadUpdates&&this.settings.isConfigured&&this._log($msg("moduleLiveSyncMain.logReadChangelog"),LOG_LEVEL_NOTICE);if(last_version&&Number(last_version)<12){this.settings.liveSync=!1;this.settings.syncOnSave=!1;this.settings.syncOnEditorSave=!1;this.settings.syncOnStart=!1;this.settings.syncOnFileOpen=!1;this.settings.syncAfterMerge=!1;this.settings.periodicReplication=!1;this.settings.versionUpFlash=$msg("moduleLiveSyncMain.logVersionUpdate");await this.saveSettings()}localStorage.setItem(lsKey,"12");await this.services.database.openDatabase({databaseEvents:this.services.databaseEvents,replicator:this.services.replicator});await this.core.services.appLifecycle.onLoaded();await Promise.all(this.core.addOns.map(e3=>e3.onload()));return!0}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.onReady.addHandler(this._onLiveSyncReady.bind(this));services.appLifecycle.onWireUpEvents.addHandler(this._wireUpEvents.bind(this));services.appLifecycle.onLoad.addHandler(this._onLiveSyncLoad.bind(this))}};ModuleBasicMenu=class extends AbstractModule{_everyOnloadStart(){this.addCommand({id:"livesync-replicate",name:"Replicate now",callback:async()=>{await this.services.replication.replicate()}});this.addCommand({id:"livesync-dump",name:"Dump information of this doc ",callback:()=>{const file=this.services.vault.getActiveFilePath();file&&fireAndForget(()=>this.localDatabase.getDBEntry(file,{},!0,!1))}});this.addCommand({id:"livesync-toggle",name:"Toggle LiveSync",callback:async()=>{if(this.settings.liveSync){this.settings.liveSync=!1;this._log("LiveSync Disabled.",LOG_LEVEL_NOTICE)}else{this.settings.liveSync=!0;this._log("LiveSync Enabled.",LOG_LEVEL_NOTICE)}await this.services.control.applySettings();await this.services.setting.saveSettingData()}});this.addCommand({id:"livesync-suspendall",name:"Toggle All Sync.",callback:async()=>{if(this.services.appLifecycle.isSuspended()){this.services.appLifecycle.setSuspended(!1);this._log("Self-hosted LiveSync resumed",LOG_LEVEL_NOTICE)}else{this.services.appLifecycle.setSuspended(!0);this._log("Self-hosted LiveSync suspended",LOG_LEVEL_NOTICE)}await this.services.control.applySettings();await this.services.setting.saveSettingData()}});this.addCommand({id:"livesync-scan-files",name:"Scan storage and database again",callback:async()=>{await this.services.vault.scanVault(!0)}});this.addCommand({id:"livesync-runbatch",name:"Run pended batch processes",callback:async()=>{await this.services.fileProcessing.commitPendingFileEvents()}});this.addCommand({id:"livesync-abortsync",name:"Abort synchronization immediately",callback:()=>{this.core.replicator.terminateSync()}});return Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};LiveSyncBaseCore=class{constructor(serviceHub,serviceModuleInitialiser,extraModuleInitialiser,addOnsInitialiser,featuresInitialiser){this.addOns=[];this._services=void 0;this.modules=[];this._services=serviceHub;this._serviceModules=serviceModuleInitialiser(this,serviceHub);const extraModules=extraModuleInitialiser(this);this.registerModules(extraModules);this.initialiseServiceFeatures();featuresInitialiser(this);const addOns=addOnsInitialiser(this);for(const addOn of addOns)this._registerAddOn(addOn);this.bindModuleFunctions()}_registerAddOn(addOn){this.addOns.push(addOn);this.services.appLifecycle.onUnload.addHandler(()=>Promise.resolve(addOn.onunload()).then(()=>!0))}getAddOn(cls){for(const addon of this.addOns)if(addon.constructor.name==cls)return addon}get services(){if(!this._services)throw new Error("Services not initialised yet");return this._services}get serviceModules(){return this._serviceModules}getModule(constructor){for(const module2 of this.modules)if(module2.constructor===constructor)return module2;throw new Error(`Module ${constructor} not found or not loaded.`)}_registerModule(module2){this.modules.push(module2)}registerModules(extraModules=[]){this._registerModule(new ModuleLiveSyncMain(this));this._registerModule(new ModuleConflictChecker(this));this._registerModule(new ModuleReplicatorMinIO(this));this._registerModule(new ModuleReplicatorCouchDB(this));this._registerModule(new ModuleReplicator(this));this._registerModule(new ModuleConflictResolver(this));this._registerModule(new ModulePeriodicProcess(this));this._registerModule(new ModuleResolvingMismatchedTweaks(this));this._registerModule(new ModuleBasicMenu(this));for(const module2 of extraModules)this._registerModule(module2)}bindModuleFunctions(){var _a8,_b5;for(const module2 of this.modules)if(module2 instanceof AbstractModule){module2.onBindFunction(this,this.services);__$checkInstanceBinding(module2)}else this.services.API.addLog(`Module ${null!=(_b5=null==(_a8=null==module2?void 0:module2.constructor)?void 0:_a8.name)?_b5:"unknown"} does not have onBindFunction, skipping binding.`,LOG_LEVEL_INFO)}get confirm(){return this.services.UI.confirm}get settings(){return this.services.setting.settings}set settings(value){this.services.setting.settings=value}getSettings(){return this.settings}get localDatabase(){return this.services.database.localDatabase}getDatabase(){return this.localDatabase.localDatabase}get simpleStore(){return this.services.keyValueDB.simpleStore}get replicator(){return this.services.replicator.getActiveReplicator()}get kvDB(){return this.services.keyValueDB.kvDB}get storageAccess(){return this.serviceModules.storageAccess}get databaseFileAccess(){return this.serviceModules.databaseFileAccess}get fileHandler(){return this.serviceModules.fileHandler}get rebuilder(){return this.serviceModules.rebuilder}initialiseServiceFeatures(){useTargetFilters(this);usePrepareDatabaseForUse(this);useRemoteConfigurationMigration(this)}};ModuleObsidianMenu=class extends AbstractModule{_everyOnloadStart(){(0,import_obsidian.addIcon)("replicate",'<g transform="matrix(1.15 0 0 1.15 -8.31 -9.52)" fill="currentColor" fill-rule="evenodd">\n <path d="m85 22.2c-0.799-4.74-4.99-8.37-9.88-8.37-0.499 0-1.1 0.101-1.6 0.101-2.4-3.03-6.09-4.94-10.3-4.94-6.09 0-11.2 4.14-12.8 9.79-5.59 1.11-9.78 6.05-9.78 12 0 6.76 5.39 12.2 12 12.2h29.9c5.79 0 10.1-4.74 10.1-10.6 0-4.84-3.29-8.88-7.68-10.2zm-2.99 14.7h-29.5c-2.3-0.202-4.29-1.51-5.29-3.53-0.899-2.12-0.699-4.54 0.698-6.46 1.2-1.61 2.99-2.52 4.89-2.52 0.299 0 0.698 0 0.998 0.101l1.8 0.303v-2.02c0-3.63 2.4-6.76 5.89-7.57 0.599-0.101 1.2-0.202 1.8-0.202 2.89 0 5.49 1.62 6.79 4.24l0.598 1.21 1.3-0.504c0.599-0.202 1.3-0.303 2-0.303 1.3 0 2.5 0.404 3.59 1.11 1.6 1.21 2.6 3.13 2.6 5.15v1.61h2c2.6 0 4.69 2.12 4.69 4.74-0.099 2.52-2.2 4.64-4.79 4.64z"/>\n <path d="m53.2 49.2h-41.6c-1.8 0-3.2 1.4-3.2 3.2v28.6c0 1.8 1.4 3.2 3.2 3.2h15.8v4h-7v6h24v-6h-7v-4h15.8c1.8 0 3.2-1.4 3.2-3.2v-28.6c0-1.8-1.4-3.2-3.2-3.2zm-2.8 29h-36v-23h36z"/>\n <path d="m73 49.2c1.02 1.29 1.53 2.97 1.53 4.56 0 2.97-1.74 5.65-4.39 7.04v-4.06l-7.46 7.33 7.46 7.14v-4.06c7.66-1.98 12.2-9.61 10-17-0.102-0.297-0.205-0.595-0.307-0.892z"/>\n <path d="m24.1 43c-0.817-0.991-1.53-2.97-1.53-4.56 0-2.97 1.74-5.65 4.39-7.04v4.06l7.46-7.33-7.46-7.14v4.06c-7.66 1.98-12.2 9.61-10 17 0.102 0.297 0.205 0.595 0.307 0.892z"/>\n </g>');this.addRibbonIcon("replicate",$msg("moduleObsidianMenu.replicate"),async()=>{await this.services.replication.replicate(!0)}).addClass("livesync-ribbon-replicate");this.addCommand({id:"livesync-checkdoc-conflicted",name:"Resolve if conflicted.",editorCallback:(editor,view)=>{const file=view.file;file&&this.services.conflict.queueCheckForIfOpen(file.path)}});return Promise.resolve(!0)}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};SETTING_HEADER="````yaml:livesync-setting\n";ModuleObsidianSettingsAsMarkdown=class extends AbstractModule{_everyOnloadStart(){this.addCommand({id:"livesync-export-config",name:"Write setting markdown manually",checkCallback:checking=>{if(checking)return""!=this.settings.settingSyncFile;fireAndForget(async()=>{await this.services.setting.saveSettingData()})}});this.addCommand({id:"livesync-import-config",name:"Parse setting file",editorCheckCallback:(checking,editor,ctx)=>{if(checking){const doc=editor.getValue();return""!=this.extractSettingFromWholeText(doc).body}if(ctx.file){const file=ctx.file;fireAndForget(async()=>await this.checkAndApplySettingFromMarkdown(file.path,!1))}}});eventHub.onEvent("event-file-changed",info3=>{fireAndForget(()=>this.checkAndApplySettingFromMarkdown(info3.file,info3.automated))});eventHub.onEvent(EVENT_SETTING_SAVED,settings=>{""!=settings.settingSyncFile&&fireAndForget(()=>this.saveSettingToMarkdown(settings.settingSyncFile))});return Promise.resolve(!0)}extractSettingFromWholeText(data){if(-1===data.indexOf(SETTING_HEADER))return{preamble:data,body:"",postscript:""};const startMarkerPos=data.indexOf(SETTING_HEADER),dataStartPos=-1==startMarkerPos?data.length:startMarkerPos,endMarkerPos=-1==startMarkerPos?data.length:data.indexOf("\n````",dataStartPos),dataEndPos=-1==endMarkerPos?data.length:endMarkerPos,body=data.substring(dataStartPos+26,dataEndPos);return{preamble:data.substring(0,dataStartPos),body,postscript:data.substring(dataEndPos+5+1)}}async parseSettingFromMarkdown(filename,data){if(!await this.core.storageAccess.isExists(filename))return{preamble:"",body:"",postscript:""};if(data)return this.extractSettingFromWholeText(data);const parseData=null!=data?data:await this.core.storageAccess.readFileText(filename);return this.extractSettingFromWholeText(parseData)}async checkAndApplySettingFromMarkdown(filename,automated){if(automated&&!this.settings.notifyAllSettingSyncFile&&(!this.settings.settingSyncFile||this.settings.settingSyncFile!=filename)){this._log(`Setting file (${filename}) does not match the current configuration. skipped.`,LOG_LEVEL_DEBUG);return}const{body}=await this.parseSettingFromMarkdown(filename);let newSetting={};try{newSetting=(0,import_obsidian.parseYaml)(body)}catch(ex){this._log("Could not parse YAML",LOG_LEVEL_NOTICE);this._log(ex,LOG_LEVEL_VERBOSE);return}if("settingSyncFile"in newSetting&&newSetting.settingSyncFile!=filename){this._log("This setting file seems to backed up one. Please fix the filename or settingSyncFile value.",automated?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE);return}let settingToApply={...DEFAULT_SETTINGS};settingToApply={...settingToApply,...newSetting};if(!(null==settingToApply?void 0:settingToApply.writeCredentialsForSettingSync)){settingToApply.couchDB_USER=this.settings.couchDB_USER;settingToApply.couchDB_PASSWORD=this.settings.couchDB_PASSWORD;settingToApply.passphrase=this.settings.passphrase}if(!isObjectDifferent(this.generateSettingForMarkdown(this.settings,settingToApply.writeCredentialsForSettingSync),this.generateSettingForMarkdown(settingToApply))){this._log("Setting markdown has been detected, but not changed.",automated?LOG_LEVEL_INFO:LOG_LEVEL_NOTICE);return}const addMsg=this.settings.settingSyncFile!=filename?" (This is not-active file)":"";this.core.confirm.askInPopup("apply-setting-from-md",`Setting markdown ${filename}${addMsg} has been detected. Apply this from {HERE}.`,anchor=>{anchor.text="HERE";anchor.addEventListener("click",()=>{fireAndForget(async()=>{const APPLY_AND_RESTART="Apply settings and restart obsidian",APPLY_AND_REBUILD="Apply settings and restart obsidian with red_flag_rebuild.md",APPLY_AND_FETCH="Apply settings and restart obsidian with red_flag_fetch.md",result=await this.core.confirm.askSelectStringDialogue("Ready for apply the setting.",[APPLY_AND_RESTART,"Apply settings",APPLY_AND_FETCH,APPLY_AND_REBUILD,"Cancel"],{defaultAction:APPLY_AND_RESTART});if("Apply settings"==result||result==APPLY_AND_RESTART||result==APPLY_AND_REBUILD||result==APPLY_AND_FETCH){await this.services.setting.applyExternalSettings(settingToApply,!0);this.services.setting.clearUsedPassphrase();if("Apply settings"==result){this._log("Loaded settings have been applied!",LOG_LEVEL_NOTICE);return}result==APPLY_AND_REBUILD&&await this.core.rebuilder.scheduleRebuild();result==APPLY_AND_FETCH&&await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart()}})})})}generateSettingForMarkdown(settings,keepCredential){const saveData={...settings||this.settings};delete saveData.encryptedCouchDBConnection;delete saveData.encryptedPassphrase;delete saveData.additionalSuffixOfDatabaseName;if(!saveData.writeCredentialsForSettingSync&&!keepCredential){delete saveData.couchDB_USER;delete saveData.couchDB_PASSWORD;delete saveData.passphrase;delete saveData.jwtKey;delete saveData.jwtKid;delete saveData.jwtSub;delete saveData.couchDB_CustomHeaders;delete saveData.bucketCustomHeaders}return saveData}async saveSettingToMarkdown(filename){const saveData=this.generateSettingForMarkdown();if(!await this.core.storageAccess.isExists(filename)){await this.core.storageAccess.ensureDir(filename);const initialContent='This file contains Self-hosted LiveSync settings as YAML.\nExcept for the `livesync-setting` code block, we can add a note for free.\n\nIf the name of this file matches the value of the "settingSyncFile" setting inside the `livesync-setting` block, LiveSync will tell us whenever the settings change. We can decide to accept or decline the remote setting. (In other words, we can back up this file by renaming it to another name).\n\nWe can perform a command in this file.\n- `Parse setting file` : load the setting from the file.\n\n**Note** Please handle it with all of your care if you have configured to write credentials in.\n\n\n';await this.core.storageAccess.writeFileAuto(filename,initialContent+SETTING_HEADER+"\n\n````")}const data=await this.core.storageAccess.readFileText(filename),{preamble,body,postscript}=this.extractSettingFromWholeText(data),newBody=(0,import_obsidian.stringifyYaml)(saveData);if(newBody==body)this._log("Markdown setting: Nothing had been changed",LOG_LEVEL_VERBOSE);else{await this.core.storageAccess.writeFileAuto(filename,preamble+SETTING_HEADER+newBody+"\n````"+postscript);this._log(`Markdown setting: ${filename} has been updated!`,LOG_LEVEL_VERBOSE)}}onBindFunction(core,services){services.appLifecycle.onInitialise.addHandler(this._everyOnloadStart.bind(this))}};ConditionType=(ConditionType2=>{ConditionType2.PLATFORM_CASE_INSENSITIVE="platform-case-insensitive";ConditionType2.PLATFORM_CASE_SENSITIVE="platform-case-sensitive";ConditionType2.REMOTE_CASE_SENSITIVE="remote-case-sensitive";return ConditionType2})(ConditionType||{});RuleLevel=(RuleLevel2=>{RuleLevel2[RuleLevel2.Must=0]="Must";RuleLevel2[RuleLevel2.Necessary=1]="Necessary";RuleLevel2[RuleLevel2.Recommended=2]="Recommended";RuleLevel2[RuleLevel2.Optional=3]="Optional";return RuleLevel2})(RuleLevel||{});DoctorRegulationV0_25_27={version:"0.25.27",rules:{sendChunksBulk:{value:!1,reason:"This is an obsolete setting and we should not enable this no more",level:0},sendChunksBulkMaxSize:{value:1,reason:"This is an obsolete setting and we should not enable this no more",level:0},doNotUseFixedRevisionForChunks:{value:!0,reason:"This value has been reverted at v0.24.16 for garbage collection of chunks.",level:2},handleFilenameCaseSensitive:{value:!1,reason:"If Self-hosted LiveSync is Case-Sensitive, unexpected file operations may occur when synchronising with Windows, Android or other devices. This value should only be enabled if all devices have a Case-Sensitive file system.",requireRebuild:!0,level:2},useIndexedDBAdapter:{value:!0,requireRebuildLocal:!0,level:3,reason:"The old option is active. This is not a performance-appropriate setting."},useEden:{reason:"This option is no longer recommended.",level:3,value:!1},hashAlg:{obsoleteValues:["sha1","xxhash32",""],value:"xxhash64",level:1,reason:"The hash function is set to the old fallback. This should be retried. This may result in a change to the new fallback."},disableCheckingConfigMismatch:{value:!1,level:2,reason:"If you disabled an older version of the dialogue because it was hard to understand, try it once in the latest version."},enableCompression:{value:!1,level:2,requireRebuild:!0,reason:"This option will be sunset soon."},usePluginSyncV2:{value:!0,level:2,reason:"This option is now enabled by default. If you have problems with the new plugin, please report them."},chunkSplitterVersion:{value:"v3-rabin-karp",valueDisplay:ChunkAlgorithmNames["v3-rabin-karp"],level:2,reason:"Chunk splitting has been optimised for more effective de-duplication. This is the new default value."},customChunkSize:{min:55,value:60,valueDisplay:"60 (detected on if less than 55)",level:2,detectionFunc:settings=>"v3-rabin-karp"===(null==settings?void 0:settings.chunkSplitterVersion)&&!isCloudantURI((null==settings?void 0:settings.couchDB_URI)||""),reason:"With the V3 Rabin-Karp chunk splitter and Self-hosted CouchDB, the chunk size is set to 60 (means around 6MB) by default. This is in effect the maximum chunk size, which in practice is divided more finely."},E2EEAlgorithm:{value:E2EEAlgorithms.V2,valueDisplay:E2EEAlgorithmNames[E2EEAlgorithms.V2],level:2,reasonFunc:_=>$msg("Doctor.RULES.E2EE_V02500.REASON")},useIndexedDBAdapter:void 0}};DoctorRegulation=DoctorRegulationV0_25_27;RebuildOptions_AutomaticAcceptable=0,RebuildOptions_ConfirmIfRequired=1,RebuildOptions_SkipEvenIfRequired=2;ModuleMigration=class extends AbstractModule{async migrateUsingDoctor(skipRebuild=!1,activateReason="updated",forceRescan=!1){const{shouldRebuild,shouldRebuildLocal,isModified,settings}=await performDoctorConsultation(this.core,this.settings,{localRebuild:skipRebuild?RebuildOptions_SkipEvenIfRequired:RebuildOptions_AutomaticAcceptable,remoteRebuild:skipRebuild?RebuildOptions_SkipEvenIfRequired:RebuildOptions_AutomaticAcceptable,activateReason,forceRescan});if(isModified){this.settings=settings;await this.saveSettings()}if(!skipRebuild){if(shouldRebuild){await this.core.rebuilder.scheduleRebuild();this.services.appLifecycle.performRestart();return!1}if(shouldRebuildLocal){await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart();return!1}}return!0}async migrateDisableBulkSend(){if(this.settings.sendChunksBulk){this._log($msg("moduleMigration.logBulkSendCorrupted"),LOG_LEVEL_NOTICE);this.settings.sendChunksBulk=!1;this.settings.sendChunksBulkMaxSize=1;await this.saveSettings()}}async initialMessage(){const manager=this.core.getModule(SetupManager);return await manager.startOnBoarding()}async askAgainForSetupURI(){const message=$msg("moduleMigration.msgRecommendSetupUri",{URI_DOC:$msg("moduleMigration.docUri")}),USE_MINIMAL=$msg("moduleMigration.optionSetupWizard"),USE_P2P=$msg("moduleMigration.optionSetupViaP2P"),USE_SETUP=$msg("moduleMigration.optionManualSetup"),NEXT=$msg("moduleMigration.optionRemindNextLaunch"),ret=await this.core.confirm.askSelectStringDialogue(message,[USE_MINIMAL,USE_SETUP,USE_P2P,NEXT],{title:$msg("moduleMigration.titleRecommendSetupUri"),defaultAction:USE_MINIMAL});if(ret===USE_MINIMAL){eventHub.emitEvent("request-open-setting-wizard");return!1}if(ret===USE_P2P){eventHub.emitEvent(EVENT_REQUEST_OPEN_P2P);return!1}if(ret===USE_SETUP){eventHub.emitEvent("request-open-settings");return!1}return!1}async hasIncompleteDocs(force=!1){if(await this.core.kvDB.get("checkIncompleteDocs")&&!force){this._log("Incomplete docs check already done, skipping.",LOG_LEVEL_VERBOSE);return Promise.resolve(!0)}this._log("Checking for incomplete documents...",LOG_LEVEL_NOTICE,"check-incomplete");const errorFiles=[];for await(const metaDoc of this.localDatabase.findAllNormalDocs({conflicts:!0})){const path2=this.getPath(metaDoc);if(!isValidPath(path2))continue;if(!await this.services.vault.isTargetFile(path2))continue;if(!isMetaEntry(metaDoc))continue;const doc=await this.localDatabase.getDBEntryFromMeta(metaDoc);if(!doc||!isLoadedEntry(doc))continue;if(isDeletedEntry(doc))continue;const isConflicted=(null==metaDoc?void 0:metaDoc._conflicts)&&metaDoc._conflicts.length>0;let storageFileContent;try{storageFileContent=await this.core.storageAccess.readHiddenFileBinary(path2)}catch(e3){Logger(`Failed to read file ${path2}: Possibly unprocessed or missing`);Logger(e3,LOG_LEVEL_VERBOSE);continue}const sizeOnStorage=storageFileContent.byteLength,recordedSize=doc.size,actualSize=readAsBlob(doc).size;if(recordedSize!==actualSize||sizeOnStorage!==actualSize||sizeOnStorage!==recordedSize||isConflicted){const contentMatched=await isDocContentSame(doc.data,storageFileContent);errorFiles.push({path:path2,recordedSize,actualSize,storageSize:sizeOnStorage,contentMatched,isConflicted});Logger(`Size mismatch for ${path2}: ${recordedSize} (DB Recorded) , ${actualSize} (DB Stored) , ${sizeOnStorage} (Storage Stored), ${contentMatched?"Content Matched":"Content Mismatched"} ${isConflicted?"Conflicted":"Not Conflicted"}`)}}if(0==errorFiles.length){Logger("No size mismatches found",LOG_LEVEL_NOTICE);await this.core.kvDB.set("checkIncompleteDocs",!0);return Promise.resolve(!0)}Logger(`Found ${errorFiles.length} size mismatches`,LOG_LEVEL_NOTICE);const recoverable=errorFiles.filter(e3=>e3.recordedSize===e3.storageSize&&!e3.isConflicted),unrecoverable=errorFiles.filter(e3=>e3.recordedSize!==e3.storageSize||e3.isConflicted),fileInfo=e3=>`${e3.path} (M: ${e3.recordedSize}, A: ${e3.actualSize}, S: ${e3.storageSize}) ${e3.isConflicted?"(Conflicted)":""}`,messageUnrecoverable=unrecoverable.length>0?$msg("moduleMigration.fix0256.messageUnrecoverable",{filesNotRecoverable:unrecoverable.map(e3=>`- ${fileInfo(e3)}`).join("\n")}):"",message=$msg("moduleMigration.fix0256.message",{files:recoverable.map(e3=>`- ${fileInfo(e3)}`).join("\n"),messageUnrecoverable}),CHECK_IT_LATER=$msg("moduleMigration.fix0256.buttons.checkItLater"),FIX=$msg("moduleMigration.fix0256.buttons.fix"),DISMISS=$msg("moduleMigration.fix0256.buttons.DismissForever"),ret=await this.core.confirm.askSelectStringDialogue(message,[CHECK_IT_LATER,FIX,DISMISS],{title:$msg("moduleMigration.fix0256.title"),defaultAction:CHECK_IT_LATER});if(ret==FIX)for(const file of recoverable){const stubFile=await this.core.storageAccess.getFileStub(file.path);if(null!=stubFile){stubFile.stat.mtime=Date.now();await this.core.fileHandler.storeFileToDB(stubFile,!0,!1)?Logger(`Successfully restored ${file.path} from storage`):Logger(`Failed to restore ${file.path} from storage`,LOG_LEVEL_NOTICE)}else Logger(`Could not find stub file for ${file.path}`,LOG_LEVEL_NOTICE)}else ret===DISMISS&&await this.core.kvDB.set("checkIncompleteDocs",!0);return Promise.resolve(!0)}async hasCompromisedChunks(){Logger("Checking for compromised chunks...",LOG_LEVEL_VERBOSE);if(!this.settings.encrypt)return!0;const localCompromised=await countCompromisedChunks(this.localDatabase.localDatabase),remote=this.services.replicator.getActiveReplicator(),remoteCompromised=this.services.API.isOnline?await(null==remote?void 0:remote.countCompromisedChunks()):0;if(!1===localCompromised){Logger("Failed to count compromised chunks in local database",LOG_LEVEL_NOTICE);return!1}if(!1===remoteCompromised){Logger("Failed to count compromised chunks in remote database",LOG_LEVEL_NOTICE);return!1}if(0===remoteCompromised&&0===localCompromised)return!0;Logger(`Found compromised chunks : ${localCompromised} in local, ${remoteCompromised} in remote`,LOG_LEVEL_NOTICE);const title=$msg("moduleMigration.insecureChunkExist.title"),msg=$msg("moduleMigration.insecureChunkExist.message"),REBUILD=$msg("moduleMigration.insecureChunkExist.buttons.rebuild"),FETCH=$msg("moduleMigration.insecureChunkExist.buttons.fetch"),DISMISS=$msg("moduleMigration.insecureChunkExist.buttons.later"),buttons=[REBUILD,FETCH,DISMISS];0!=remoteCompromised&&buttons.splice(buttons.indexOf(FETCH),1);const result=await this.core.confirm.askSelectStringDialogue(msg,buttons,{title,defaultAction:DISMISS,timeout:0});if(result===REBUILD){await this.core.rebuilder.scheduleRebuild();this.services.appLifecycle.performRestart();return!1}if(result===FETCH){await this.core.rebuilder.scheduleFetch();this.services.appLifecycle.performRestart();return!1}this._log($msg("moduleMigration.insecureChunkExist.laterMessage"),LOG_LEVEL_NOTICE);return!0}async _everyOnFirstInitialize(){if(!this.localDatabase.isReady){this._log($msg("moduleMigration.logLocalDatabaseNotReady"),LOG_LEVEL_NOTICE);return!1}if(this.settings.isConfigured){if(!await this.hasCompromisedChunks())return!1;if(!await this.hasIncompleteDocs())return!1;if(!await this.migrateUsingDoctor(!1))return!1;await this.migrateDisableBulkSend()}if(!this.settings.isConfigured){if(!await this.initialMessage()){this._log($msg("moduleMigration.logSetupCancelled"),LOG_LEVEL_NOTICE);return!1}if(!await this.migrateUsingDoctor(!0))return!1}return!0}_everyOnLayoutReady(){eventHub.onEvent(EVENT_REQUEST_RUN_DOCTOR,async reason=>{await this.migrateUsingDoctor(!1,reason,!0)});eventHub.onEvent(EVENT_REQUEST_RUN_FIX_INCOMPLETE,async()=>{await this.hasIncompleteDocs(!0)});return Promise.resolve(!0)}onBindFunction(core,services){super.onBindFunction(core,services);services.appLifecycle.onLayoutReady.addHandler(this._everyOnLayoutReady.bind(this));services.appLifecycle.onFirstInitialise.addHandler(this._everyOnFirstInitialize.bind(this))}};enableI18nFeature=function createServiceFeature(featureFunction){return featureFunction}(async({services:{setting,API}})=>{let isChanged=!1;const settings=setting.currentSettings();if(""==settings.displayLanguage){const obsidianLanguage=(0,import_obsidian.getLanguage)();if(-1!==SUPPORTED_I18N_LANGS.indexOf(obsidianLanguage)&&obsidianLanguage!=settings.displayLanguage){await setting.applyPartial({displayLanguage:obsidianLanguage});isChanged=!0;setLang(settings.displayLanguage)}else if(""==settings.displayLanguage){await setting.applyPartial({displayLanguage:"def"});setLang(settings.displayLanguage);await setting.saveSettingData()}}if(isChanged){const revert2=$msg("dialog.yourLanguageAvailable.btnRevertToDefault");if(await API.confirm.askSelectStringDialogue($msg("dialog.yourLanguageAvailable"),["OK",revert2],{defaultAction:"OK",title:$msg("dialog.yourLanguageAvailable.Title")})==revert2){await setting.applyPartial({displayLanguage:"def"});setLang(settings.displayLanguage)}await setting.saveSettingData()}return!0});root_219=from_html("<strong>If you have unsynchronised changes in your Vault on this device, they will likely diverge from the server's\n versions after the reset. This may result in a large number of file conflicts.</strong><br/> Furthermore, if conflicts are already present in the server data, they will be synchronised to this device as they are,\n and you will need to resolve them locally.",1);root_413=from_html("<strong>To minimise the creation of new conflicts</strong>, please select the option that best describes the\n current state of your Vault. The application will then check your files in the most appropriate way based on\n your selection.",1);root_810=from_html("(e.g., after editing many files whilst offline) <!>",1);root_55=from_html("<!> <!> <!>",1);root_37=from_html("<!> <!>",1);root_154=from_html("<strong>It is strongly advised to create a backup before proceeding. Continuing without a backup may lead\n to data loss.</strong> <br/> If you understand the risks and still wish to proceed, select so.",1);root_136=from_html("<!> <!> <!>",1);root_105=from_html("<!> <!> <!>",1);root_184=from_html("<!> <!>",1);root36=from_html("<!> <!> <!> <hr/> <!> <hr/> <!> <!> <!>",1);root_129=from_html("This procedure will first delete all existing synchronisation data from the server. Following this, the server data\n will be completely rebuilt, using the current state of your Vault on this device (including its local database) as <strong>the single, authoritative master copy</strong>.",1);root_414=from_html("<!> <!>",1);root_38=from_html("<!> <!> <!>",1);root_144=from_html("<strong>You should create a new synchronisation destination and rebuild your data there. <br/> After that,\n synchronise to a brand new vault on each other device with the new remote one by one.</strong>");root_1210=from_html("<!> <!> <!>",1);root_95=from_html("<!> <!> <!>",1);root_172=from_html("<!> <!>",1);root37=from_html("<!> <!> <!> <!> <hr/> <!> <!> <!>",1);LiveSyncTrysteroReplicator=class extends LiveSyncAbstractReplicator{get rawReplicator(){return this._replicator}get rawHost(){return this._p2pHost}get isChunkSendingSupported(){return!1}getReplicationPBKDF2Salt(_setting,_refresh){return Promise.resolve(new Uint8Array(32))}terminateSync(){}_buildEnv(){const services=this.env.services;return{get settings(){return services.setting.currentSettings()},get db(){return services.database.localDatabase.localDatabase},get simpleStore(){return services.keyValueDB.openSimpleStore("p2p-sync")},get deviceName(){return services.config.getSmallConfig(SETTING_KEY_P2P_DEVICE_NAME)||services.vault.getVaultName()},get platform(){return services.API.getPlatform()},get confirm(){return services.API.confirm},processReplicatedDocs:async docs=>{await services.replication.parseSynchroniseResult(docs)}}}async open(){var _a8;if((!this._replicator||!(null==(_a8=this._p2pHost)?void 0:_a8.isServing))&&this.env.services.setting.currentSettings().P2P_Enabled)try{const env=this._buildEnv(),host=new TrysteroReplicatorP2PServer(env),replicator=new TrysteroReplicator(env,host);this._p2pHost=host;this._replicator=replicator;await replicator.open()}catch(e3){Logger(e3 instanceof Error?e3.message:"Error while opening P2P connection",LOG_LEVEL_NOTICE);Logger(e3,LOG_LEVEL_VERBOSE);this._p2pHost=void 0;this._replicator=void 0}}async close(){if(this._replicator){this._replicator.disableBroadcastChanges();await this._replicator.close();this._replicator=void 0}this._p2pHost=void 0}closeReplication(){var _a8;null==(_a8=this._replicator)||_a8.disconnectFromServer()}get server(){var _a8;return null==(_a8=this._replicator)?void 0:_a8.server}get knownAdvertisements(){var _a8,_b5;return null!=(_b5=null==(_a8=this._replicator)?void 0:_a8.knownAdvertisements)?_b5:[]}enableBroadcastChanges(){var _a8;null==(_a8=this._replicator)||_a8.enableBroadcastChanges()}disableBroadcastChanges(){var _a8;null==(_a8=this._replicator)||_a8.disableBroadcastChanges()}requestStatus(){var _a8;null==(_a8=this._replicator)||_a8.requestStatus()}onNewPeer(peer){var _a8;return null==(_a8=this._replicator)?void 0:_a8.onNewPeer(peer)}onPeerLeaved(peerId){var _a8;null==(_a8=this._replicator)||_a8.onPeerLeaved(peerId)}async replicateFromCommand(showResult=!1){var _a8;await(null==(_a8=this._replicator)?void 0:_a8.replicateFromCommand(showResult))}async replicateFrom(peerId,showNotice=!1){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.replicateFrom(peerId,showNotice)}async requestSynchroniseToPeer(peerId){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.requestSynchroniseToPeer(peerId)}async getRemoteConfig(peerId){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.getRemoteConfig(peerId)}watchPeer(peerId){var _a8;null==(_a8=this._replicator)||_a8.watchPeer(peerId)}unwatchPeer(peerId){var _a8;null==(_a8=this._replicator)||_a8.unwatchPeer(peerId)}async sync(peerId,showNotice=!1){if(!this._replicator)throw new Error("P2P replicator is not open");return await this._replicator.sync(peerId,showNotice)}async makeDecision(decision){var _a8,_b5;await(null==(_b5=null==(_a8=this._replicator)?void 0:_a8.server)?void 0:_b5.makeDecision(decision))}async revokeDecision(decision){var _a8,_b5;await(null==(_b5=null==(_a8=this._replicator)?void 0:_a8.server)?void 0:_b5.revokeDecision(decision))}async makeSureOpened(){var _a8;this._replicator&&(null==(_a8=this._p2pHost)?void 0:_a8.isServing)||await this.open()}async openReplication(_setting,_keepAlive,showResult,_ignoreCleanLock){const logLevel=showResult?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if(!this._replicator){Logger($msg("P2P.ReplicatorInstanceMissing"),logLevel);return!1}await this._replicator.makeSureOpened();await this._replicator.replicateFromCommand(showResult)}tryConnectRemote(_setting,_showResult){return Promise.resolve(!1)}replicateAllToServer(_setting,_showingNotice,_sendChunksInBulkDisabled){return Promise.resolve(!1)}async selectPeer(settingPeerName,r4,logLevel){var _a8,_b5,_c3,_d2,_e2;const knownPeersOrg=null!=(_b5=null==(_a8=r4.server)?void 0:_a8.knownAdvertisements)?_b5:[];let knownPeers;if(0!=knownPeersOrg.length)knownPeers=knownPeersOrg;else{Logger($msg("P2P.NoKnownPeers"),logLevel);await Promise.race([delay(5e3),eventHub.waitFor(EVENT_ADVERTISEMENT_RECEIVED)]);knownPeers=null!=(_d2=null==(_c3=r4.server)?void 0:_c3.knownAdvertisements)?_d2:[]}const message="Rebuild from which peer?"+(settingPeerName?"\n [*] indicates the peer you have selected before.":""),confirm=this.env.services.UI.confirm,options=[...knownPeers.map(e3=>e3.name+""+(e3.name==settingPeerName?"[*]":"")+" ("+e3.peerId+")"),"Refresh List","Cancel"],selected=await confirm.askSelectStringDialogue(message,options,{title:"Select a peer to fetch from",defaultAction:"Refresh List"});if(!selected||"Cancel"==selected)return!1;if("Refresh List"==selected){await Promise.race([delay(1e3),eventHub.waitFor(EVENT_ADVERTISEMENT_RECEIVED)]);return this.selectPeer(settingPeerName,r4,logLevel)}const selectedPeerName=selected.split("")[0],peerId=null==(_e2=knownPeers.find(e3=>e3.name==selectedPeerName))?void 0:_e2.peerId;if(!peerId){Logger("Failed to find peerId for "+selectedPeerName,logLevel);return!1}return peerId}async tryUntilSuccess(func,repeat,logLevel){if(!this.env.services.UI.confirm){Logger("Cannot find confirm instance.",logLevel);return Promise.reject("Cannot find confirm instance.")}let result;for(;!result;)for(let i2=0;i2<repeat;i2++){try{result=await func();if(result)break}catch(e3){Logger("Error: "+e3,logLevel);result=!1}await delay(1e3)}return result}async replicateAllFromServer(setting,showingNotice){var _a8;const logLevel=showingNotice?LOG_LEVEL_NOTICE:LOG_LEVEL_INFO;if(0==setting.P2P_Enabled){const confirm=this.env.services.UI.confirm;"yes"!=await confirm.askYesNoDialog($msg("P2P.DisabledButNeed"),{})&&Logger($msg("P2P.NotEnabled"),logLevel);setting.P2P_Enabled=!0;this.env.services.setting.currentSettings().P2P_Enabled=!0;await this.env.services.setting.saveSettingData();await delay(100);return this.replicateAllFromServer(setting,showingNotice)}await this.open();await eventHub.waitFor("p2p-connected");const peerFrom=setting.P2P_RebuildFrom;if(!this._replicator){Logger("Failed to get replicator instance.",logLevel);return!1}this._replicator.setOnSetup();try{const r4=await this.tryUntilSuccess(async()=>{var _a9;await this.makeSureOpened();return null!=(_a9=this._replicator)&&_a9},10,logLevel);if(!1===r4){Logger("Failed to open P2P connection.",logLevel);return!1}const peerId=await this.selectPeer(peerFrom,r4,logLevel);if(!1===peerId){Logger("Failed to connect peer.",logLevel);return!1}this.env.services.setting.currentSettings().P2P_RebuildFrom="";Logger("Fetching from peer "+peerId+".",logLevel);const rep=await r4.replicateFrom(peerId,showingNotice);if(rep.ok){Logger("P2P Fetching has been succeed from "+peerId+".",logLevel);return!0}Logger("Failed to fetch from peer "+peerId+".",logLevel);Logger(rep.error,LOG_LEVEL_VERBOSE);return!1}finally{null==(_a8=this._replicator)||_a8.clearOnSetup()}}tryResetRemoteDatabase(_setting){throw new Error("P2P replication does not support database reset.")}tryCreateRemoteDatabase(_setting){throw new Error("P2P replication does not support database reset.")}markRemoteLocked(_setting,_locked,_lockByClean){throw new Error("P2P replication does not support database lock.")}markRemoteResolved(_setting){Logger("Trying resolving remote-database-lock but P2P replication does not support database lock. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve()}resetRemoteTweakSettings(_setting){throw new Error("P2P replication does not support resetting tweaks.")}setPreferredRemoteTweakSettings(_setting){Logger("Trying setting tweak values but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve()}fetchRemoteChunks(_missingChunks,_showResult){return Promise.resolve(!1)}getRemoteStatus(_setting){Logger("Trying to get remote status but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}getRemotePreferredTweakValues(_setting){Logger("Trying to get tweak values but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}countCompromisedChunks(){Logger("P2P Replicator cannot count compromised chunks",LOG_LEVEL_VERBOSE);return Promise.resolve(0)}getConnectedDeviceList(_setting){Logger("Trying to get connected device list but P2P replication does not support to do this. This operation has been ignored",LOG_LEVEL_INFO);return Promise.resolve(!1)}constructor(env){super(env);this.env=env}};EVENT_P2P_PEER_SHOW_EXTRA_MENU="p2p-peer-show-extra-menu";AcceptedStatus=(AcceptedStatus2=>{AcceptedStatus2.UNKNOWN="Unknown";AcceptedStatus2.ACCEPTED="Accepted";AcceptedStatus2.DENIED="Denied";AcceptedStatus2.ACCEPTED_IN_SESSION="Accepted in session";AcceptedStatus2.DENIED_IN_SESSION="Denied in session";return AcceptedStatus2})(AcceptedStatus||{});ConnectionStatus=(ConnectionStatus2=>{ConnectionStatus2.CONNECTED="Connected";ConnectionStatus2.CONNECTED_LIVE="Connected(live)";ConnectionStatus2.DISCONNECTED="Disconnected";return ConnectionStatus2})(ConnectionStatus||{});root_220=from_html("<span> </span>");root_130=from_html('<div class="row"></div>');root_39=from_html('<span class="chip attr svelte-8nqxsr"> </span>');on_click5=(__3,makeDecision)=>makeDecision(!0,!0);on_click_12=(__4,makeDecision)=>makeDecision(!0,!1);root_56=from_html('<button class="button svelte-8nqxsr">Accept in session</button> <button class="button mod-cta svelte-8nqxsr">Accept</button>',1);on_click_2=(__5,makeDecision)=>makeDecision(!1,!0);on_click_3=(__6,makeDecision)=>makeDecision(!1,!1);root_68=from_html('<button class="button svelte-8nqxsr">Deny in session</button> <button class="button mod-warning svelte-8nqxsr">Deny</button>',1);root_415=from_html("<!> <!>",1);on_click_4=(__7,revokeDecision)=>revokeDecision();root_710=from_html('<button class="button mod-warning svelte-8nqxsr">Revoke</button>');root_96=from_html('<button class="button svelte-8nqxsr">Stop ⚡</button>');root_106=from_html('<button class="button svelte-8nqxsr" title="live">⚡</button>');root_811=from_html('<div class="buttons svelte-8nqxsr"><div class="row svelte-8nqxsr"><button class="button svelte-8nqxsr">🔄</button> <!> <button class="button svelte-8nqxsr">...</button></div></div>');root38=from_html('<tr class="svelte-8nqxsr"><td><div class="info svelte-8nqxsr"><div class="row name"><span class="peername"> </span></div> <div class="row peer-id svelte-8nqxsr"><span class="peerid"> </span></div></div> <div class="status-chips svelte-8nqxsr"><div class="row"><span> </span></div> <!> <div class="row"></div></div></td><td><div class="buttons svelte-8nqxsr"><div class="row svelte-8nqxsr"><!></div></div></td><td><!></td></tr>');$$css16={hash:"svelte-8nqxsr",code:"tr.svelte-8nqxsr:nth-child(odd) {background-color:var(--background-primary-alt);}.info.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;padding:var(--size-4-1) var(--size-4-1);}.peer-id.svelte-8nqxsr {font-size:0.8em;}.status-chips.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;\n /* min-width: 10em; */}.buttons.svelte-8nqxsr {display:flex;flex-direction:column;justify-content:center;align-items:center;}.buttons.svelte-8nqxsr .row:where(.svelte-8nqxsr) {display:flex;justify-content:center;align-items:center;flex-wrap:wrap;\n /* padding: var(--size-4-1) var(--size-4-1); */}.chip.svelte-8nqxsr {display:inline-block;padding:4px 8px;margin:4px;border-radius:4px;font-size:0.75em;font-weight:bold;background-color:var(--tag-background);border:var(--tag-border-width) solid var(--tag-border-color);}.chip.connected.svelte-8nqxsr {background-color:var(--background-modifier-success);color:var(--text-normal);}.chip.connected-live.svelte-8nqxsr {background-color:var(--background-modifier-success);border-color:var(--background-modifier-success);color:var(--text-normal);}.chip.accepted.svelte-8nqxsr {background-color:var(--background-modifier-success);color:var(--text-normal);}.chip.waiting.svelte-8nqxsr {background-color:var(--background-secondary);}.chip.unknown.svelte-8nqxsr {background-color:var(--background-primary);color:var(--text-warning);}.chip.denied.svelte-8nqxsr {background-color:var(--background-modifier-error);color:var(--text-error);}.chip.attr.svelte-8nqxsr {background-color:var(--background-secondary);}.button.svelte-8nqxsr {margin:var(--size-4-1);}.button.affirmative.svelte-8nqxsr {background-color:var(--interactive-accent);color:var(--text-normal);}.button.affirmative.svelte-8nqxsr:hover {background-color:var(--interactive-accent-hover);}.button.negative.svelte-8nqxsr {background-color:var(--background-modifier-error);color:var(--text-error);}.button.negative.svelte-8nqxsr:hover {background-color:var(--background-modifier-error-hover);}"};delegate(["click"]);root_131=from_html('<p class="svelte-2cmos"> </p>');on_click6=(__5,useDefaultRelay)=>useDefaultRelay();on_click_13=(__6,chooseRandom)=>chooseRandom();root_310=from_html('<details><summary> </summary> <table class="settings svelte-2cmos"><tbody><tr><th class="svelte-2cmos">Enable P2P Replicator</th><td class="svelte-2cmos"><label><input type="checkbox" class="svelte-2cmos"/></label></td></tr><tr><th class="svelte-2cmos">Relay settings</th><td class="svelte-2cmos"><label><input type="text" placeholder="wss://exp-relay.vrtmrz.net, wss://xxxxx" autocomplete="off" class="svelte-2cmos"/> <button class="svelte-2cmos">Use vrtmrz\'s relay</button></label></td></tr><tr><th class="svelte-2cmos">Room ID</th><td class="svelte-2cmos"><label><input type="text" placeholder="anything-you-like" autocomplete="off" spellcheck="false" autocorrect="off" class="svelte-2cmos"/> <button class="svelte-2cmos">Use Random Number</button></label> <span><small>This can isolate your connections between devices. Use the same Room ID for the same\n devices.</small></span></td></tr><tr><th class="svelte-2cmos">Password</th><td class="svelte-2cmos"><label><input type="password" placeholder="password" class="svelte-2cmos"/></label> <span><small>This password is used to encrypt the connection. Use something long enough.</small></span></td></tr><tr><th class="svelte-2cmos">This device name</th><td class="svelte-2cmos"><label><input type="text" placeholder="iphone-16" autocomplete="off" class="svelte-2cmos"/></label> <span><small>Device name to identify the device. Please use shorter one for the stable peer\n detection, i.e., "iphone-16" or "macbook-2021".</small></span></td></tr><tr><th class="svelte-2cmos">Auto Connect</th><td class="svelte-2cmos"><label><input type="checkbox" class="svelte-2cmos"/></label></td></tr><tr><th class="svelte-2cmos">Start change-broadcasting on Connect</th><td class="svelte-2cmos"><label><input type="checkbox" class="svelte-2cmos"/></label></td></tr></tbody></table> <button class="button mod-cta">Save and Apply</button> <button class="button">Revert changes</button></details>');root_416=from_html('<p class="svelte-2cmos">No Connection</p>');root_57=from_html('<p class="svelte-2cmos"> </p>');root_69=from_html("<button>Connect</button>");root_97=from_html("<button>Stop Broadcasting</button>");root_107=from_html("<button>Start Broadcasting</button>");root_711=from_html('<button>Disconnect</button> <!> <details><summary>Broadcasting?</summary> <p class="svelte-2cmos"><small>If you want to use `LiveSync`, you should broadcast changes. All `watching` peers which\n detects this will start the replication for fetching. <br/> However, This should not be enabled if you want to increase your secrecy more.</small></p></details>',1);root39=from_html('<article class="svelte-2cmos"><h1>Peer to Peer Replicator</h1> <details><summary> </summary> <p class="important svelte-2cmos"> </p> <p class="important-sub svelte-2cmos"> </p> <!></details> <h2 class="svelte-2cmos">Connection Settings</h2> <!> <div><h2 class="svelte-2cmos">Signaling Server Connection</h2> <div><!></div> <div><!></div></div> <div><h2 class="svelte-2cmos">Peers</h2> <table class="peers svelte-2cmos"><thead><tr><th class="svelte-2cmos">Name</th><th class="svelte-2cmos">Action</th><th class="svelte-2cmos">Command</th></tr></thead><tbody></tbody></table></div></article>');$$css17={hash:"svelte-2cmos",code:"article.svelte-2cmos {max-width:100%;}article.svelte-2cmos p:where(.svelte-2cmos) {user-select:text;-webkit-user-select:text;}h2.svelte-2cmos {margin-top:var(--size-4-1);margin-bottom:var(--size-4-1);padding-bottom:var(--size-4-1);border-bottom:1px solid var(--background-modifier-border);}label.is-dirty.svelte-2cmos {background-color:var(--background-modifier-error);}input.svelte-2cmos {background-color:transparent;}th.svelte-2cmos {\n /* display: flex;\n justify-content: center;\n align-items: center; */min-height:var(--input-height);}td.svelte-2cmos {min-height:var(--input-height);}td.svelte-2cmos > label:where(.svelte-2cmos) {display:flex;flex-direction:row;align-items:center;justify-content:flex-start;min-height:var(--input-height);}td.svelte-2cmos > label:where(.svelte-2cmos) > :where(.svelte-2cmos) {margin:auto var(--size-4-1);}table.peers.svelte-2cmos {width:100%;}.important.svelte-2cmos {color:var(--text-error);font-size:1.2em;font-weight:bold;}.important-sub.svelte-2cmos {color:var(--text-warning);}.settings.svelte-2cmos label:where(.svelte-2cmos) {display:flex;flex-direction:row;align-items:center;justify-content:flex-start;flex-wrap:wrap;}"};delegate(["click"]);VIEW_TYPE_P2P="p2p-replicator";P2PReplicatorPaneView=class extends SvelteItemView{constructor(leaf,core,p2pResult){super(leaf);this.icon="waypoints";this.title="";this.navigation=!1;this.core=core;this._p2pResult=p2pResult;eventHub.onEvent(EVENT_P2P_PEER_SHOW_EXTRA_MENU,({peer,event:event2})=>{this.m&&this.m.hide();this.m=(new import_obsidian.Menu).addItem(item=>item.setTitle("📥 Only Fetch").onClick(()=>this.replicateFrom(peer))).addItem(item=>item.setTitle("📤 Only Send").onClick(()=>this.replicateTo(peer))).addSeparator().addItem(item=>{item.setTitle("🔧 Get Configuration").onClick(async()=>{await this.getRemoteConfig(peer)})}).addSeparator().addItem(item=>{const mark=peer.syncOnConnect?"checkmark":null;item.setTitle("Toggle Sync on connect").onClick(async()=>{await this.toggleProp(peer,"syncOnConnect")}).setIcon(mark)}).addItem(item=>{const mark=peer.watchOnConnect?"checkmark":null;item.setTitle("Toggle Watch on connect").onClick(async()=>{await this.toggleProp(peer,"watchOnConnect")}).setIcon(mark)}).addItem(item=>{const mark=peer.syncOnReplicationCommand?"checkmark":null;item.setTitle("Toggle Sync on `Replicate now` command").onClick(async()=>{await this.toggleProp(peer,"syncOnReplicationCommand")}).setIcon(mark)});this.m.showAtPosition({x:event2.x,y:event2.y})})}getIcon(){return"waypoints"}get replicator(){return this._p2pResult.replicator}async replicateFrom(peer){await this.replicator.replicateFrom(peer.peerId)}async replicateTo(peer){await this.replicator.requestSynchroniseToPeer(peer.peerId)}async getRemoteConfig(peer){Logger(`Requesting remote config for ${peer.name}. Please input the passphrase on the remote device`,LOG_LEVEL_NOTICE);const remoteConfig=await this.replicator.getRemoteConfig(peer.peerId);if(remoteConfig){Logger(`Remote config for ${peer.name} is retrieved successfully`);const DROP="Yes, and drop local database",KEEP="Yes, but keep local database",CANCEL="No, cancel",yn=await this.core.confirm.askSelectStringDialogue("Do you really want to apply the remote config? This will overwrite your current config immediately and restart.\nAnd you can also drop the local database to rebuild from the remote device.",[DROP,KEEP,CANCEL],{defaultAction:CANCEL,title:"Apply Remote Config "});if(yn===DROP||yn===KEEP){if(yn===DROP&&remoteConfig.remoteType!==REMOTE_P2P&&"yes"===await this.core.confirm.askYesNoDialog('Do you want to set the remote type to "P2P Sync" to rebuild by "P2P replication"?',{title:"Rebuild from remote device"})){remoteConfig.remoteType=REMOTE_P2P;remoteConfig.P2P_RebuildFrom=peer.name}await this.core.services.setting.applyExternalSettings(remoteConfig);yn===DROP?await this.core.rebuilder.scheduleFetch():this.core.services.appLifecycle.scheduleRestart()}else Logger(`Cancelled\nRemote config for ${peer.name} is not applied`,LOG_LEVEL_NOTICE)}else Logger(`Cannot retrieve remote config for ${peer.peerId}`)}async toggleProp(peer,prop2){const targetSetting={syncOnConnect:"P2P_AutoSyncPeers",watchOnConnect:"P2P_AutoWatchPeers",syncOnReplicationCommand:"P2P_SyncOnReplication"}[prop2],currentSettingAll=this.core.services.setting.currentSettings(),currentSetting={[targetSetting]:currentSettingAll?currentSettingAll[targetSetting]:""};peer[prop2]?currentSetting[targetSetting]=removeFromList(peer.name,currentSetting[targetSetting]):currentSetting[targetSetting]=addToList(peer.name,currentSetting[targetSetting]);await this.core.services.setting.applyPartial(currentSetting,!0)}getViewType(){return VIEW_TYPE_P2P}getDisplayText(){return"Peer-to-Peer Replicator"}async onClose(){await super.onClose();this.m&&this.m.hide()}instantiateComponent(target){return mount(P2PReplicatorPane,{target,props:{cmdSync:this._p2pResult.replicator,core:this.core}})}};ObsidianLiveSyncPlugin=class extends import_obsidian.Plugin{initialiseServiceModules(core,services){const storageAccessManager=new StorageAccessManager,vaultAccess=new FileAccessObsidian(this.app,{storageAccessManager,vaultService:services.vault,settingService:services.setting,APIService:services.API,pathService:services.path}),storageEventManager=new StorageEventManagerObsidian(this,core,{fileProcessing:services.fileProcessing,setting:services.setting,vaultService:services.vault,storageAccessManager,APIService:services.API}),storageAccess=new ServiceFileAccessObsidian({API:services.API,setting:services.setting,fileProcessing:services.fileProcessing,vault:services.vault,appLifecycle:services.appLifecycle,storageEventManager,storageAccessManager,vaultAccess}),databaseFileAccess=new ServiceDatabaseFileAccess({API:services.API,database:services.database,path:services.path,storageAccess,vault:services.vault}),fileHandler=new ServiceFileHandler({API:services.API,databaseFileAccess,conflict:services.conflict,setting:services.setting,fileProcessing:services.fileProcessing,vault:services.vault,path:services.path,replication:services.replication,storageAccess});return{rebuilder:new ServiceRebuilder({API:services.API,database:services.database,appLifecycle:services.appLifecycle,setting:services.setting,remote:services.remote,databaseEvents:services.databaseEvents,replication:services.replication,replicator:services.replicator,UI:services.UI,vault:services.vault,fileHandler,storageAccess,control:services.control}),fileHandler,databaseFileAccess,storageAccess}}async saveSettings(){await this.core.services.setting.saveSettingData()}constructor(app,manifest){super(app,manifest);import_obsidian.Notice;const serviceHub=new ObsidianServiceHub(this);this.core=new LiveSyncBaseCore(serviceHub,(core,serviceHub2)=>this.initialiseServiceModules(core,serviceHub2),core=>[new ModuleObsidianEvents(this,core),new ModuleObsidianSettingDialogue(this,core),new ModuleObsidianMenu(core),new ModuleObsidianSettingsAsMarkdown(core),new ModuleLog(this,core),new ModuleObsidianDocumentHistory(this,core),new ModuleInteractiveConflictResolver(this,core),new ModuleObsidianGlobalHistory(this,core),new ModuleDev(this,core),new ModuleReplicateTest(this,core),new ModuleIntegratedTest(this,core),new SetupManager(core),new ModuleMigration(core)],core=>[new ConfigSync(this,core),new HiddenFileSync(this,core),new LocalDatabaseMaintenance(this,core)],core=>{const featuresInitialiser=enableI18nFeature;core.services.appLifecycle.onLayoutReady.addHandler(()=>featuresInitialiser(core));const setupManager=core.getModule(SetupManager);useRemoteConfiguration(core);useSetupProtocolFeature(core,setupManager);useSetupQRCodeFeature(core);useSetupURIFeature(core);useSetupManagerHandlersFeature(core,setupManager);useOfflineScanner(core);useRedFlagFeatures(core);useCheckRemoteSize(core);const replicator=useP2PReplicatorFeature(core);useP2PReplicatorCommands(core,replicator);useP2PReplicatorUI(core,core,replicator)})}async _startUp(){if(!await this.core.services.control.onLoad())return;const onReady=this.core.services.control.onReady.bind(this.core.services.control);this.app.workspace.onLayoutReady(onReady)}onload(){this._startUp()}onunload(){this.core.services.control.onUnload()}};
/* nosourcemap */