(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const c of o)if(c.type==="childList")for(const h of c.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&s(h)}).observe(document,{childList:!0,subtree:!0});function i(o){const c={};return o.integrity&&(c.integrity=o.integrity),o.referrerPolicy&&(c.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?c.credentials="include":o.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function s(o){if(o.ep)return;o.ep=!0;const c=i(o);fetch(o.href,c)}})();const Pe=new Worker(new URL("/assets/db-worker-AHwpujSZ.js",import.meta.url),{type:"module"});let ir=0,Ge=null;const je=new Map;function Tn(){return Ge||(Ge=new Promise((t,n)=>{Pe.onmessage=s=>{const o=s.data;if(o.type==="ready")return;const c=je.get(o.id);c&&(je.delete(o.id),o.type=="success"?c.resolve(o.data):c.reject(new Error(o.error??o.message??"Неизвестная ошибка Worker")))},Pe.onerror=s=>{console.error("[SQLite Worker] Ошибка:",s),n(new Error("Ошибка Worker"))};const i=++ir;je.set(i,{resolve:t,reject:n}),Pe.postMessage({type:"start",id:i})}),Ge)}function Qn(t,n){return new Promise((i,s)=>{if(!Pe){s(new Error("Worker не создан"));return}const o=++ir;je.set(o,{resolve:i,reject:s}),Pe.postMessage({type:t,id:o,...n})})}async function Re(t,n){return await Qn("query",{sql:t,params:n??[]})}function Nn(t){if(t==null)return[];const n=String(t).trim();return n?n.split(/[,\s;]+/).map(i=>i.trim()).filter(i=>i.length>0):[]}function Fn(t){const n=new Map;if(t==null)return n;const i=String(t);if(!i)return n;const s=i.split("");for(let o=0;o+10?`WHERE ${n.join(" AND ")}`:"",params:i}}async function qn(t={}){const{clause:n,params:i}=or(t),o=(await Re(`SELECT COUNT(*) as cnt FROM words ${n}`,i))[0]?.cnt;return typeof o=="number"?o:Number(o??0)}async function At(t={}){const{clause:n,params:i}=or(t),s=Math.max(1,Math.min(t.limit??50,500)),o=Math.max(0,t.offset??0);return(await Re(`SELECT id, key, value, tags, more, group_id FROM words ${n} ORDER BY id LIMIT ? OFFSET ?`,[...i,s,o])).map(Hn)}async function Pn(){return(await Re("SELECT id, name FROM word_groups ORDER BY id")).map(n=>({id:Number(n.id),name:String(n.name??"")}))}async function Ln(){return(await Re("SELECT id, name, forward, backward, filter FROM decks ORDER BY id")).map(n=>({id:Number(n.id),name:String(n.name??""),forward:String(n.forward??""),backward:String(n.backward??""),filter:String(n.filter??"")}))}async function _n(){return(await Re("SELECT id, name, identifier FROM custom_fields ORDER BY id")).map(n=>({id:Number(n.id),name:String(n.name??""),identifier:String(n.identifier??"")}))}const kt="japanese_app.db";async function Et(){return navigator.storage.getDirectory()}async function Rn(t){t[18]=1,t[19]=1;const i=await(await Et()).getFileHandle(kt,{create:!0}),s=i.createSyncAccessHandle;if(typeof s=="function")try{const c=await s.call(i);try{c.truncate(0),c.write(t,{at:0}),c.flush()}finally{c.close()}return}catch{}const o=await i.createWritable();try{await o.truncate(0);const c=new Uint8Array(t.length);c.set(t),await o.write(c)}finally{await o.close()}}async function Sn(){const t=await Et();let n;try{n=await t.getFileHandle(kt)}catch{throw new Error("Локальная база не найдена — сначала скачай сохранение")}const i=await n.getFile();if(i.size===0)throw new Error("Локальная база пуста");return new Uint8Array(await i.arrayBuffer())}async function Le(){try{return(await(await(await Et()).getFileHandle(kt)).getFile()).size>0}catch{return!1}}var In=ArrayBuffer,z=Uint8Array,We=Uint16Array,Jn=Int16Array,tt=Int32Array,ht=function(t,n,i){if(z.prototype.slice)return z.prototype.slice.call(t,n,i);(n==null||n<0)&&(n=0),(i==null||i>t.length)&&(i=t.length);var s=new z(i-n);return s.set(t.subarray(n,i)),s},_e=function(t,n,i,s){if(z.prototype.fill)return z.prototype.fill.call(t,n,i,s);for((i==null||i<0)&&(i=0),(s==null||s>t.length)&&(s=t.length);it.length)&&(s=t.length);i2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],B=function(t,n,i){var s=new Error(n||On[t]);if(s.code=t,Error.captureStackTrace&&Error.captureStackTrace(s,B),!i)throw s;return s},er=function(t,n,i){for(var s=0,o=0;s>>0},zn=function(t,n){var i=t[0]|t[1]<<8|t[2]<<16;if(i==3126568&&t[3]==253){var s=t[4],o=s>>5&1,c=s>>2&1,h=s&3,w=s>>6;s&8&&B(0);var C=6-o,x=h==3?4:h,m=er(t,C,x);C+=x;var U=w?1<>3);y=Q+(Q>>3)*(t[5]&7)}y>2145386496&&B(1);var v=new z((n==1?E||y:n?0:y)+12);return v[0]=1,v[4]=4,v[8]=8,{b:C+U,y:0,l:0,d:m,w:n&&n!=1?n:v.subarray(12),e:y,o:new tt(v.buffer,0,3),u:E,c,m:Math.min(131072,y)}}else if((i>>4|t[3]<<20)==25481893)return Xn(t,4)+8;B(0)},Ce=function(t){for(var n=0;1<i&&B(3);for(var c=1<0;){var O=Ce(h+1),R=s>>3,Y=(1<>(s&7)&Y,M=(1<M&&(K-=X)),E[++w]=--K,K==-1?(h+=K,$[--m]=w):h-=K,!K)do{var ee=s>>3;C=(t[ee]|t[ee+1]<<8)>>(s&7)&3,s+=2,w+=C}while(C==3)}(w>255||h)&&B(0);for(var G=0,re=(c>>1)+(c>>3)+3,V=c-1,j=0;j<=w;++j){var H=E[j];if(H<1){y[j]=-H;continue}for(x=0;x=m)}}for(G&&B(0),x=0;x>3,{b:o,s:$,n:S,t:Q}]},Vn=function(t,n){var i=0,s=-1,o=new z(292),c=t[n],h=o.subarray(0,256),w=o.subarray(256,268),C=new We(o.buffer,268);if(c<128){var x=Se(t,n+1,6),m=x[0],U=x[1];n+=c;var E=m<<3,y=t[n];y||B(0);for(var Q=0,v=0,$=U.b,S=$,O=(++n<<3)-8+Ce(y);O-=$,!(O>3;if(Q+=(t[R]|t[R+1]<<8)>>(O&7)&(1<<$)-1,h[++s]=U.s[Q],O-=S,O>3,v+=(t[R]|t[R+1]<<8)>>(O&7)&(1<255&&B(0)}else{for(s=c-127;i>4,h[i+1]=Y&15}++n}var K=0;for(i=0;i11&&B(0),K+=M&&1<0;--i){var j=C[i];_e(V,i,j,C[i-1]=j+w[i]*(1<w&&U>3,y=(t[E]|t[E+1]<<8|t[E+2]<<16)>>(m&7);C=(C<>2,h=c<<1,w=c+h;qe(t.subarray(s,s+=t[0]|t[1]<<8),n.subarray(0,c),i),qe(t.subarray(s,s+=t[2]|t[3]<<8),n.subarray(c,h),i),qe(t.subarray(s,s+=t[4]|t[5]<<8),n.subarray(h,w),i),qe(t.subarray(s),n.subarray(w),i)},Wn=function(t,n,i){var s,o=n.b,c=t[o],h=c>>1&3;n.l=c&1;var w=c>>3|t[o+1]<<5|t[o+2]<<13,C=(o+=3)+w;if(h==1)return o>=t.length?void 0:(n.b=o+1,i?(_e(i,t[o],n.y,n.y+=w),i):_e(new z(w),t[o]));if(!(C>t.length)){if(h==0)return n.b=C,i?(i.set(t.subarray(o,C),n.y),n.y+=w,i):ht(t,o,C);if(h==2){var x=t[o],m=x&3,U=x>>2&3,E=x>>4,y=0,Q=0;m<2?U&1?E|=t[++o]<<4|(U&2&&t[++o]<<12):E=x>>3:(Q=U,U<2?(E|=(t[++o]&63)<<4,y=t[o]>>6|t[++o]<<2):U==2?(E|=t[++o]<<4|(t[++o]&3)<<12,y=t[o]>>2|t[++o]<<6):(E|=t[++o]<<4|(t[++o]&63)<<12,y=t[o]>>6|t[++o]<<2|t[++o]<<10)),++o;var v=i?i.subarray(n.y,n.y+n.m):new z(n.m),$=v.length-E;if(m==0)v.set(t.subarray(o,o+=E),$);else if(m==1)_e(v,t[o++],$);else{var S=n.h;if(m==2){var O=Vn(t,o);y+=o-(o=O[0]),n.h=S=O[1]}else S||B(0);(Q?jn:qe)(t.subarray(o,o+=y),v.subarray($),S)}var R=t[o++];if(R){R==255?R=(t[o++]|t[o++]<<8)+32512:R>127&&(R=R-128<<8|t[o++]);var Y=t[o++];Y&3&&B(0);for(var K=[Bn,Yn,Zn],M=2;M>-1;--M){var X=Y>>(M<<1)+2&3;if(X==1){var D=new z([0,0,t[o++]]);K[M]={s:D.subarray(2,3),n:D.subarray(0,1),t:new We(D.buffer,0,1),b:0}}else X==2?(s=Se(t,o,9-(M&1)),o=s[0],K[M]=s[1]):X==3&&(n.t||B(0),K[M]=n.t[M])}var ee=n.t=K,G=ee[0],re=ee[1],V=ee[2],j=t[C-1];j||B(0);var H=(C<<3)-8+Ce(j)-V.b,g=H>>3,k=0,T=(t[g]|t[g+1]<<8)>>(H&7)&(1<>3;var q=(t[g]|t[g+1]<<8)>>(H&7)&(1<>3;var P=(t[g]|t[g+1]<<8)>>(H&7)&(1<>3;var we=1<>>(H&7)&we-1);g=(H-=bt[Ee])>>3;var oe=Gn[Ee]+((t[g]|t[g+1]<<8|t[g+2]<<16)>>(H&7)&(1<>3;var he=Dn[fe]+((t[g]|t[g+1]<<8|t[g+2]<<16)>>(H&7)&(1<>3,T=V.t[T]+((t[g]|t[g+1]<<8)>>(H&7)&(1<>3,P=G.t[P]+((t[g]|t[g+1]<<8)>>(H&7)&(1<>3,q=re.t[q]+((t[g]|t[g+1]<<8)>>(H&7)&(1<3)n.o[2]=n.o[1],n.o[1]=n.o[0],n.o[0]=ne-=3;else{var ke=ne-(he!=0);ke?(ne=ke==3?n.o[0]-1:n.o[ke],ke>1&&(n.o[2]=n.o[1]),n.o[1]=n.o[0],n.o[0]=ne):ne=n.o[0]}for(var M=0;Moe&&(ae=oe);for(var M=0;M{throw e},s,o=console.log.bind(console),c=console.error.bind(console),h,w=!1,C,x=r=>r.startsWith("file://"),m=!1;function U(){return Ye.buffer}function E(){if(!D?.buffer?.resizable){var r=U();D=new Int8Array(r),Oe=new Int16Array(r),n.HEAPU8=T=new Uint8Array(r),$e=new Uint16Array(r),Xe=new Int32Array(r),P=new Uint32Array(r),Rt=new Float32Array(r),St=new Float64Array(r),Mt=new BigInt64Array(r),$t=new BigUint64Array(r)}}function y(){m=!0,Ne.A()}function Q(r){r=`Aborted(${r})`,c(r),w=!0,r+=". Build with -sASSERTIONS for more info.",m&&zt();var e=new WebAssembly.RuntimeError(r);throw e}var v;let $=()=>"";function S(r){if(r==v&&h)return new Uint8Array(h);throw"both async and sync fetching of the wasm failed"}async function O(r){if(!h)try{var e=await s(r);return new Uint8Array(e)}catch{}return S(r)}async function R(r,e){try{var a=await O(r),l=await WebAssembly.instantiate(a,e);return l}catch(u){c(`failed to asynchronously prepare wasm: ${u}`),Q(u)}}async function Y(r,e,a){if(!r&&!x(e))try{var l=fetch(e,{credentials:"same-origin"}),u=await WebAssembly.instantiateStreaming(l,a);return u}catch(d){c(`wasm streaming compile failed: ${d}`),c("falling back to ArrayBuffer instantiation")}return R(e,a)}function K(){var r={a:Mn};return r}async function M(){function r(d){return Ne=d.exports,xn(Ne),E(),Ne}function e(d){return r(d.instance)}var a=K();v??=$();var l=await Y(h,v,a),u=e(l);return u}class X{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`,this.status=e}}var D,ee=()=>Gt,G=r=>{var e=r.getArg(ee(),0);return Yt(e)},re=()=>Bt(),V=r=>Vt(r),j=r=>Zt(r),H=globalThis.TextDecoder&&new TextDecoder,g=(r,e,a,l)=>{var u=e+a;if(l)return u;for(;r[e]&&!(e>=u);)++e;return e},k=(r,e=0,a,l)=>{var u=g(r,e,a,l);if(u-e>16&&r.buffer&&H)return H.decode(r.subarray(e,u));for(var d="";e>10,56320|N&1023)}}return d},T,q=(r,e,a)=>r?k(T,r,e,a):"",P,fe=r=>{var e=re(),a=j(4),l=j(4);Dt(r,a,l);var u=P[a>>2],d=P[l>>2],p=q(u);pe(u);var f;return d&&(f=q(d),pe(d)),V(e),[p,f]},ce=r=>{var e=G(r);return fe(e)},Ee=r=>{var e=new WebAssembly.Exception(ee(),[r],{traceStack:!0});throw e.message=ce(e),e},Ke=()=>Q(""),ve={},xe=r=>{for(;r.length;){var e=r.pop(),a=r.pop();a(e)}};function we(r){return this.fromWireType(P[r>>2])}var ne={},oe={},he={};class ke extends Error{constructor(e){super(e),this.name="InternalError"}}var ue=r=>{throw new ke(r)},ae=(r,e,a)=>{r.forEach(f=>he[f]=e);function l(f){var b=a(f);b.length!==r.length&&ue("Mismatched type converter count");for(var N=0;N{u[f]=oe[b],++p,p===d.length&&l(u)}));d.length===0&&l(u)},rt=r=>{var e=ve[r];delete ve[r];var a=e.rawConstructor,l=e.rawDestructor,u=e.fields,d=u.map(p=>p.getterReturnType).concat(u.map(p=>p.setterArgumentType));ae([r],d,p=>{var f={};for(var[b,N]of u.entries()){let F=p[b],I=N.getter,_=N.getterContext,J=p[b+u.length],W=N.setter,ie=N.setterContext;f[N.fieldName]={read:A=>F.fromWireType(I(_,A)),write:(A,Z)=>{var me=[];W(ie,A,J.toWireType(me,Z)),xe(me)},optional:F.optional}}return[{name:e.name,fromWireType:F=>{var I={};for(var _ in f)I[_]=f[_].read(F);return l(F),I},toWireType:(F,I)=>{for(var _ in f)if(!(_ in I)&&!f[_].optional)throw new TypeError(`Missing field: "${_}"`);var J=a();for(_ in f)f[_].write(J,I[_]);return F!==null&&F.push(l,J),J},readValueFromPointer:we,destructorFunction:l}]})},te=r=>{for(var e="";;){var a=T[r++];if(!a)return e;e+=String.fromCharCode(a)}};class Me extends Error{constructor(e){super(e),this.name="BindingError"}}var L=r=>{throw new Me(r)};function wr(r,e,a={}){var l=e.name;if(r||L(`type "${l}" must have a positive integer typeid pointer`),oe.hasOwnProperty(r)){if(a.ignoreDuplicateRegistrations)return;L(`Cannot register type '${l}' twice`)}if(oe[r]=e,delete he[r],ne.hasOwnProperty(r)){var u=ne[r];delete ne[r],u.forEach(d=>d())}}function de(r,e,a={}){return wr(r,e,a)}var Oe,$e,Xe,Mt,$t,Tt=(r,e,a)=>{switch(e){case 1:return a?l=>D[l]:l=>T[l];case 2:return a?l=>Oe[l>>1]:l=>$e[l>>1];case 4:return a?l=>Xe[l>>2]:l=>P[l>>2];case 8:return a?l=>Mt[l>>3]:l=>$t[l>>3];default:throw new TypeError(`invalid integer width (${e}): ${r}`)}},mr=(r,e,a,l,u)=>{e=te(e);let d=l===0n,p=f=>f;if(d){let f=a*8;p=b=>BigInt.asUintN(f,b),u=p(u)}de(r,{name:e,fromWireType:p,toWireType:(f,b)=>(typeof b=="number"&&(b=BigInt(b)),b),readValueFromPointer:Tt(e,a,!d),destructorFunction:null})},vr=(r,e,a,l)=>{e=te(e),de(r,{name:e,fromWireType:function(u){return!!u},toWireType:function(u,d){return d?a:l},readValueFromPointer:function(u){return this.fromWireType(T[u])},destructorFunction:null})},yr=r=>({count:r.count,deleteScheduled:r.deleteScheduled,preservePointerOnDelete:r.preservePointerOnDelete,ptr:r.ptr,ptrType:r.ptrType,smartPtr:r.smartPtr,smartPtrType:r.smartPtrType}),nt=r=>{function e(a){return a.$$.ptrType.registeredClass.name}L(e(r)+" instance already deleted")},at=!1,Qt=r=>{},br=r=>{r.smartPtr?r.smartPtrType.rawDestructor(r.smartPtr):r.ptrType.registeredClass.rawDestructor(r.ptr)},Nt=r=>{r.count.value-=1;var e=r.count.value===0;e&&br(r)},Te=r=>globalThis.FinalizationRegistry?(at=new FinalizationRegistry(e=>{Nt(e.$$)}),Te=e=>{var a=e.$$,l=!!a.smartPtr;if(l){var u={$$:a};at.register(e,u,e)}return e},Qt=e=>at.unregister(e),Te(r)):(Te=e=>e,r),Ur=()=>{let r=ze.prototype;Object.assign(r,{isAliasOf(a){if(!(this instanceof ze)||!(a instanceof ze))return!1;var l=this.$$.ptrType.registeredClass,u=this.$$.ptr;a.$$=a.$$;for(var d=a.$$.ptrType.registeredClass,p=a.$$.ptr;l.baseClass;)u=l.upcast(u),l=l.baseClass;for(;d.baseClass;)p=d.upcast(p),d=d.baseClass;return l===d&&u===p},clone(){if(this.$$.ptr||nt(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var a=Te(Object.create(Object.getPrototypeOf(this),{$$:{value:yr(this.$$)}}));return a.$$.count.value+=1,a.$$.deleteScheduled=!1,a},delete(){this.$$.ptr||nt(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&L("Object already scheduled for deletion"),Qt(this),Nt(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||nt(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&L("Object already scheduled for deletion"),this.$$.deleteScheduled=!0,this}});let e=Symbol.dispose;e&&(r[e]=r.delete)};function ze(){}var Ft=(r,e)=>Object.defineProperty(e,"name",{value:r}),Ht={},it=(r,e,a)=>{if(r[e].overloadTable===void 0){var l=r[e];r[e]=function(...u){return r[e].overloadTable.hasOwnProperty(u.length)||L(`Function '${a}' called with an invalid number of arguments (${u.length}) - expects one of (${r[e].overloadTable})!`),r[e].overloadTable[u.length].apply(this,u)},r[e].overloadTable=[],r[e].overloadTable[l.argCount]=l}},Cr=(r,e,a)=>{n.hasOwnProperty(r)?(L(`Cannot register public name '${r}' twice`),it(n,r,r),n[r].overloadTable.hasOwnProperty(a)&&L(`Cannot register multiple overloads of a function with the same number of arguments (${a})!`),n[r].overloadTable[a]=e):(n[r]=e,n[r].argCount=a)},kr=48,Er=57,xr=r=>{r=r.replace(/[^a-zA-Z0-9_]/g,"$");var e=r.charCodeAt(0);return e>=kr&&e<=Er?`_${r}`:r};function Mr(r,e,a,l,u,d,p,f){this.name=r,this.constructor=e,this.instancePrototype=a,this.rawDestructor=l,this.baseClass=u,this.getActualType=d,this.upcast=p,this.downcast=f,this.pureVirtualFunctions=[]}var ot=(r,e,a)=>{for(;e!==a;)e.upcast||L(`Expected null or instance of ${a.name}, got an instance of ${e.name}`),r=e.upcast(r),e=e.baseClass;return r},st=r=>{if(r===null)return"null";var e=typeof r;return e==="object"||e==="array"||e==="function"?r.toString():""+r};function $r(r,e){if(e===null)return this.isReference&&L(`null is not a valid ${this.name}`),0;e.$$||L(`Cannot pass "${st(e)}" as a ${this.name}`),e.$$.ptr||L(`Cannot pass deleted object as a pointer of type ${this.name}`);var a=e.$$.ptrType.registeredClass,l=ot(e.$$.ptr,a,this.registeredClass);return l}function Tr(r,e){var a;if(e===null)return this.isReference&&L(`null is not a valid ${this.name}`),this.isSmartPointer?(a=this.rawConstructor(),r!==null&&r.push(this.rawDestructor,a),a):0;(!e||!e.$$)&&L(`Cannot pass "${st(e)}" as a ${this.name}`),e.$$.ptr||L(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&e.$$.ptrType.isConst&&L(`Cannot convert argument of type ${e.$$.smartPtrType?e.$$.smartPtrType.name:e.$$.ptrType.name} to parameter type ${this.name}`);var l=e.$$.ptrType.registeredClass;if(a=ot(e.$$.ptr,l,this.registeredClass),this.isSmartPointer)switch(e.$$.smartPtr===void 0&&L("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:e.$$.smartPtrType===this?a=e.$$.smartPtr:L(`Cannot convert argument of type ${e.$$.smartPtrType?e.$$.smartPtrType.name:e.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:a=e.$$.smartPtr;break;case 2:if(e.$$.smartPtrType===this)a=e.$$.smartPtr;else{var u=e.clone();a=this.rawShare(a,ut.toHandle(()=>u.delete())),r!==null&&r.push(this.rawDestructor,a)}break;default:L("Unsupported sharing policy")}return a}function Qr(r,e){if(e===null)return this.isReference&&L(`null is not a valid ${this.name}`),0;e.$$||L(`Cannot pass "${st(e)}" as a ${this.name}`),e.$$.ptr||L(`Cannot pass deleted object as a pointer of type ${this.name}`),e.$$.ptrType.isConst&&L(`Cannot convert argument of type ${e.$$.ptrType.name} to parameter type ${this.name}`);var a=e.$$.ptrType.registeredClass,l=ot(e.$$.ptr,a,this.registeredClass);return l}var qt=(r,e,a)=>{if(e===a)return r;if(a.baseClass===void 0)return null;var l=qt(r,e,a.baseClass);return l===null?null:a.downcast(l)},Nr={},Fr=(r,e)=>{for(e===void 0&&L("ptr should not be undefined");r.baseClass;)e=r.upcast(e),r=r.baseClass;return e},Hr=(r,e)=>(e=Fr(r,e),Nr[e]),Ve=(r,e)=>{(!e.ptrType||!e.ptr)&&ue("makeClassHandle requires ptr and ptrType");var a=!!e.smartPtrType,l=!!e.smartPtr;return a!==l&&ue("Both smartPtrType and smartPtr must be specified"),e.count={value:1},Te(Object.create(r,{$$:{value:e,writable:!0}}))};function qr(r){var e=this.getPointee(r);if(!e)return this.destructor(r),null;var a=Hr(this.registeredClass,e);if(a!==void 0){if(a.$$.count.value===0)return a.$$.ptr=e,a.$$.smartPtr=r,a.clone();var l=a.clone();return this.destructor(r),l}function u(){return this.isSmartPointer?Ve(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:e,smartPtrType:this,smartPtr:r}):Ve(this.registeredClass.instancePrototype,{ptrType:this,ptr:r})}var d=this.registeredClass.getActualType(e),p=Ht[d];if(!p)return u.call(this);var f;this.isConst?f=p.constPointerType:f=p.pointerType;var b=qt(e,this.registeredClass,f.registeredClass);return b===null?u.call(this):this.isSmartPointer?Ve(f.registeredClass.instancePrototype,{ptrType:f,ptr:b,smartPtrType:this,smartPtr:r}):Ve(f.registeredClass.instancePrototype,{ptrType:f,ptr:b})}var Pr=()=>{Object.assign(Ze.prototype,{getPointee(r){return this.rawGetPointee&&(r=this.rawGetPointee(r)),r},destructor(r){this.rawDestructor?.(r)},readValueFromPointer:we,fromWireType:qr})};function Ze(r,e,a,l,u,d,p,f,b,N,F){this.name=r,this.registeredClass=e,this.isReference=a,this.isConst=l,this.isSmartPointer=u,this.pointeeType=d,this.sharingPolicy=p,this.rawGetPointee=f,this.rawConstructor=b,this.rawShare=N,this.rawDestructor=F,!u&&e.baseClass===void 0?l?(this.toWireType=$r,this.destructorFunction=null):(this.toWireType=Qr,this.destructorFunction=null):this.toWireType=Tr}var Lr=(r,e,a)=>{n.hasOwnProperty(r)||ue("Replacing nonexistent public symbol"),n[r].overloadTable!==void 0&&a!==void 0?n[r].overloadTable[a]=e:(n[r]=e,n[r].argCount=a)},_r=r=>jt.get(r),le=(r,e,a=!1)=>{r=te(r);function l(){var d=_r(e);return d}var u=l();return typeof u!="function"&&L(`unknown function pointer with signature ${r}: ${e}`),u};class Rr extends Error{}var Sr=r=>{var e=Ot(r),a=te(e);return pe(e),a},Be=(r,e)=>{var a=[],l={};function u(d){if(!l[d]&&!oe[d]){if(he[d]){he[d].forEach(u);return}a.push(d),l[d]=!0}}throw e.forEach(u),new Rr(`${r}: `+a.map(Sr).join([", "]))},Ir=(r,e,a,l,u,d,p,f,b,N,F,I,_)=>{F=te(F),d=le(u,d),f&&=le(p,f),N&&=le(b,N),_=le(I,_);var J=xr(F);Cr(J,function(){Be(`Cannot construct ${F} due to unbound types`,[l])}),ae([r,e,a],l?[l]:[],W=>{W=W[0];var ie,A;l?(ie=W.registeredClass,A=ie.instancePrototype):A=ze.prototype;var Z=Ft(F,function(...ft){if(Object.getPrototypeOf(this)!==me)throw new Me(`Use 'new' to construct ${F}`);if(se.constructor_body===void 0)throw new Me(`${F} has no accessible constructor`);var Wt=se.constructor_body[ft.length];if(Wt===void 0)throw new Me(`Tried to invoke ctor of ${F} with invalid number of parameters (${ft.length}) - expected (${Object.keys(se.constructor_body).toString()}) parameters instead!`);return Wt.apply(this,ft)}),me=Object.create(A,{constructor:{value:Z}});Z.prototype=me;var se=new Mr(F,Z,me,_,ie,d,f,N);se.baseClass&&(se.baseClass.__derivedClasses??=[],se.baseClass.__derivedClasses.push(se));var pt=new Ze(F,se,!0,!1,!1),ge=new Ze(F+"*",se,!1,!1,!1),De=new Ze(F+" const*",se,!1,!0,!1);return Ht[r]={pointerType:ge,constPointerType:De},Lr(J,Z),[pt,ge,De]})};function Jr(r){for(var e=1;e{for(var a=[],l=0;l>2]);return a},Pt=r=>{r=r.trim();let e=r.indexOf("(");return e===-1?r:r.slice(0,e)},Kr=(r,e,a,l,u,d,p,f,b)=>{var N=ct(a,l);e=te(e),e=Pt(e),d=le(u,d,f),ae([],[r],F=>{F=F[0];var I=`${F.name}.${e}`;function _(){Be(`Cannot call ${I} due to unbound types`,N)}e.startsWith("@@")&&(e=Symbol[e.substring(2)]);var J=F.registeredClass.constructor;return J[e]===void 0?(_.argCount=a-1,J[e]=_):(it(J,e,I),J[e].overloadTable[a-1]=_),ae([],N,W=>{var ie=[W[0],null].concat(W.slice(1)),A=lt(I,ie,null,d,p);if(J[e].overloadTable===void 0?(A.argCount=a-1,J[e]=A):J[e].overloadTable[a-1]=A,F.registeredClass.__derivedClasses)for(let Z of F.registeredClass.__derivedClasses)Z.constructor.hasOwnProperty(e)||(Z.constructor[e]=A);return[]}),[]})},Or=(r,e,a,l,u,d)=>{var p=ct(e,a);u=le(l,u),ae([],[r],f=>{f=f[0];var b=`constructor ${f.name}`;if(f.registeredClass.constructor_body===void 0&&(f.registeredClass.constructor_body=[]),f.registeredClass.constructor_body[e-1]!==void 0)throw new Me(`Cannot register multiple constructors with identical number of parameters (${e-1}) for class '${f.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return f.registeredClass.constructor_body[e-1]=()=>{Be(`Cannot construct ${f.name} due to unbound types`,p)},ae([],p,N=>(N.splice(1,0,null),f.registeredClass.constructor_body[e-1]=lt(b,N,null,u,d),[])),[]})},Xr=(r,e,a,l,u,d,p,f,b,N)=>{var F=ct(a,l);e=te(e),e=Pt(e),d=le(u,d,b),ae([],[r],I=>{I=I[0];var _=`${I.name}.${e}`;e.startsWith("@@")&&(e=Symbol[e.substring(2)]),f&&I.registeredClass.pureVirtualFunctions.push(e);function J(){Be(`Cannot call ${_} due to unbound types`,F)}var W=I.registeredClass.instancePrototype,ie=W[e];return ie===void 0||ie.overloadTable===void 0&&ie.className!==I.name&&ie.argCount===a-2?(J.argCount=a-2,J.className=I.name,W[e]=J):(it(W,e,_),W[e].overloadTable[a-2]=J),ae([],F,A=>{var Z=lt(_,A,I,d,p);return W[e].overloadTable===void 0?(Z.argCount=a-2,W[e]=Z):W[e].overloadTable[a-2]=Z,[]}),[]})},Lt=[],ye=[0,1,,1,null,1,!0,1,!1,1],_t=[],zr=r=>{if(r>9&&--ye[r+1]===0){var e=ye[r];ye[r]=void 0;var a=_t[r];a&&(_t[r]=void 0,a(e)),Lt.push(r)}},ut={toValue:r=>(r||L(`Cannot use deleted val. handle = ${r}`),ye[r]),toHandle:r=>{switch(r){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let e=Lt.pop()||ye.length;return ye[e]=r,ye[e+1]=1,e}}}},Vr={name:"emscripten::val",fromWireType:r=>{var e=ut.toValue(r);return zr(r),e},toWireType:(r,e)=>ut.toHandle(e),readValueFromPointer:we,destructorFunction:null},Zr=r=>de(r,Vr),Rt,St,Br=(r,e)=>{switch(e){case 4:return function(a){return this.fromWireType(Rt[a>>2])};case 8:return function(a){return this.fromWireType(St[a>>3])};default:throw new TypeError(`invalid float width (${e}): ${r}`)}},Yr=(r,e,a)=>{e=te(e),de(r,{name:e,fromWireType:l=>l,toWireType:(l,u)=>u,readValueFromPointer:Br(e,a),destructorFunction:null})},Dr=(r,e,a,l,u)=>{e=te(e);let d=l===0,p=b=>b;if(d){var f=32-8*a;p=b=>b<>>f,u=p(u)}de(r,{name:e,fromWireType:p,toWireType:(b,N)=>N,readValueFromPointer:Tt(e,a,l!==0),destructorFunction:null})},Gr=(r,e,a)=>{var l=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],u=l[e];function d(p){var f=P[p>>2],b=P[p+4>>2];return new u(D.buffer,b,f)}a=te(a),de(r,{name:a,fromWireType:d,readValueFromPointer:d},{ignoreDuplicateRegistrations:!0})},jr=(r,e,a,l)=>{if(!(l>0))return 0;for(var u=a,d=a+l-1,p=0;p=d)break;e[a++]=f}else if(f<=2047){if(a+1>=d)break;e[a++]=192|f>>6,e[a++]=128|f&63}else if(f<=65535){if(a+2>=d)break;e[a++]=224|f>>12,e[a++]=128|f>>6&63,e[a++]=128|f&63}else{if(a+3>=d)break;e[a++]=240|f>>18,e[a++]=128|f>>12&63,e[a++]=128|f>>6&63,e[a++]=128|f&63,p++}}return e[a]=0,a-u},It=(r,e,a)=>jr(r,T,e,a),Jt=r=>{for(var e=0,a=0;a=55296&&l<=57343?(e+=4,++a):e+=3}return e},Wr=(r,e)=>{e=te(e),de(r,{name:e,fromWireType(a){var l=P[a>>2],u=a+4,d;return d=q(u,l,!0),pe(a),d},toWireType(a,l){l instanceof ArrayBuffer&&(l=new Uint8Array(l));var u,d=typeof l=="string";d||ArrayBuffer.isView(l)&&l.BYTES_PER_ELEMENT==1||L("Cannot pass non-string to std::string"),d?u=Jt(l):u=l.length;var p=dt(4+u+1),f=p+4;return P[p>>2]=u,d?It(l,f,u+1):T.set(l,f),a!==null&&a.push(pe,p),p},readValueFromPointer:we,destructorFunction(a){pe(a)}})},Kt=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Ar=(r,e,a)=>{var l=r>>1,u=g($e,l,e/2,a);if(u-l>16&&Kt)return Kt.decode($e.subarray(l,u));for(var d="",p=l;p{if(a<2)return 0;a-=2;for(var l=e,u=a>1]=p,e+=2}return Oe[e>>1]=0,e-l},tn=r=>r.length*2,rn=(r,e,a)=>{for(var l="",u=r>>2,d=0;!(d>=e/4);d++){var p=P[u+d];if(!p&&!a)break;l+=String.fromCodePoint(p)}return l},nn=(r,e,a=2147483647)=>{if(a<4)return 0;for(var l=e,u=l+a-4,d=0;d65535&&d++,Xe[e>>2]=p,e+=4,e+4>u)break}return Xe[e>>2]=0,e-l},an=r=>{for(var e=0,a=0;a65535&&a++,e+=4}return e},on=(r,e,a)=>{a=te(a);var l,u,d;e===2?(l=Ar,u=en,d=tn):(l=rn,u=nn,d=an),de(r,{name:a,fromWireType:p=>{var f=P[p>>2],b=l(p+4,f*e,!0);return pe(p),b},toWireType:(p,f)=>{typeof f!="string"&&L(`Cannot pass non-string to C++ string type ${a}`);var b=d(f),N=dt(4+b+e);return P[N>>2]=b/e,u(f,N+4,b+e),p!==null&&p.push(pe,N),N},readValueFromPointer:we,destructorFunction(p){pe(p)}})},sn=(r,e,a,l,u,d)=>{ve[r]={name:te(e),rawConstructor:le(a,l),rawDestructor:le(u,d),fields:[]}},ln=(r,e,a,l,u,d,p,f,b,N)=>{ve[r].fields.push({fieldName:te(e),getterReturnType:a,getter:le(l,u),getterContext:d,setterArgumentType:p,setter:le(f,b),setterContext:N})},cn=(r,e)=>{e=te(e),de(r,{isVoid:!0,name:e,fromWireType:()=>{},toWireType:(a,l)=>{}})},un=()=>{},Qe={},dn=r=>{if(r instanceof X||r=="unwind")return C;i(1,r)},pn=r=>{C=r,i(r,new X(r))},fn=r=>{if(!w)try{return r()}catch(e){dn(e)}},hn=()=>performance.now(),gn=(r,e)=>{if(Qe[r]&&(clearTimeout(Qe[r].id),delete Qe[r]),!e)return 0;var a=setTimeout(()=>{delete Qe[r],fn(()=>Xt(r,hn()))},e);return Qe[r]={id:a,timeout_ms:e},0},wn=()=>2147483648,mn=(r,e)=>Math.ceil(r/e)*e,vn=r=>{var e=Ye.buffer.byteLength,a=(r-e+65535)/65536|0;try{return Ye.grow(a),E(),1}catch{}},yn=r=>{var e=T.length;r>>>=0;var a=wn();if(r>a)return!1;for(var l=1;l<=4;l*=2){var u=e*(1+.2/l);u=Math.min(u,r+100663296);var d=Math.min(a,mn(Math.max(r,u),65536)),p=vn(d);if(p)return!0}return!1},bn=r=>52;function Un(r,e,a,l){return 70}var Cn=[null,[],[]],kn=(r,e)=>{var a=Cn[r];!e||e===10?((r===1?o:c)(k(a)),a.length=0):a.push(e)},En=(r,e,a,l)=>{for(var u=0,d=0;d>2],f=P[e+4>>2];e+=8;for(var b=0;b>2]=u,0};Ur(),Pr(),n.wasmBinary&&(h=n.wasmBinary),n.UTF8ToString=q,n.stringToUTF8=It,n.lengthBytesUTF8=Jt;var Ot,dt,pe,Xt,zt,Vt,Zt,Bt,Yt,Dt,Gt,Ye,jt;function xn(r){Ot=r.B,dt=n._malloc=r.C,pe=n._free=r.D,Xt=r.F,zt=r.G,Vt=r.H,Zt=r.I,Bt=r.J,Yt=r.K,Dt=r.L,Ye=r.z,jt=r.E,Gt=r.M}var Mn={t:Ee,x:Ke,f:rt,i:mr,l:vr,o:Ir,b:Kr,n:Or,d:Xr,y:Zr,h:Yr,c:Dr,a:Gr,k:Wr,g:on,j:sn,e:ln,m:cn,w:un,p:gn,u:yn,s:bn,q:Un,r:En,v:pn};async function $n(){!w&&y()}var Ne;return Ne=await M(),await $n(),n}var ra=ta,na=new Int8Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,90,63,64,65,66,-1,67,68,69,70,71,-1,72,73,52,53,54,55,56,57,58,59,60,61,74,75,76,77,78,79,80,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,81,-1,82,83,84,85,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,86,87,88,89,-1]);function aa(t){let n=new Uint8Array(170930),i=0,s=0,o=0,c=-1;for(let h=0,w=t.length;h127)continue;let x=na[C];if(!(x<0))if(c<0)c=x;else{c+=x*91,s|=c<88?13:14;do n[i++]=s,s>>>=8,o-=8;while(o>7);c=-1}}return c>=0&&(n[i++]=(s|c<""})}function sa(){Ut=void 0}var la=class{_module;constructor(t){this._module=t}malloc(t){let n=this._module._malloc(t);return{ptr:n,size:t,dispose:()=>this.free({ptr:n,size:t,dispose:()=>{}})}}free(t){this._module._free(t.ptr)}dataToHeap(t){let n=this.malloc(t.byteLength);return this._module.HEAPU8.set(t,n.ptr),n}heapView(t){return this._module.HEAPU8.subarray(t.ptr,t.ptr+t.size)}heapToUint8Array(t){return new Uint8Array([...this.heapView(t)])}lengthBytes(t){return this._module.lengthBytesUTF8(t)}stringToHeap(t){let n=this.lengthBytes(t)+1,i=this._module._malloc(n);return this._module.stringToUTF8(t,i,n),{ptr:i,size:n,dispose:()=>this.free({ptr:i,size:n,dispose:()=>{}})}}heapToString(t){return this._module.UTF8ToString(t.ptr,t.size)}hasFilesystem(){let t=this._module;return t.FS_createPath!==void 0&&t.FS_createDataFile!==void 0&&t.FS_preloadFile!==void 0&&t.FS_unlink!==void 0}createPath(t,n=!0,i=!0){return this._module.FS_createPath("/",t,n,i)}createDataFile(t,n,i=!0,s=!0,o=!0){return this._module.FS_createDataFile("/",t,n,i,s,o)}preloadFile(t,n,i=!0,s=!0,o=!1,c=!0,h=!1){return this._module.FS_preloadFile("/",t,n,i,s,o,c,h)}unlink(t){return this._module.FS_unlink(t)}},Fe,ca=4294967295;function He(t,n){if(!Number.isInteger(t)||t<0||t>ca)throw new Error(`${n} length ${t} is outside the WASM32-safe range`)}function gt(t){if(t.length===0)return new Uint8Array(0);if(t.length===1)return t[0];let n=0;for(let o of t)n+=o.length;let i=new Uint8Array(n),s=0;for(let o of t)i.set(o,s),s+=o.length;return i}var ua=class lr{_mainModule;_zstdClass;_zstd;_compressionLevel;_decompressFrameCompleted=!1;_decompressRemaining=0;_decompressSawInput=!1;constructor(n){this._mainModule=new la(n),this._zstdClass=n.zstd,this._zstd=new this._zstdClass,this._compressionLevel=this._zstdClass.defaultCLevel()}static load(){return Fe||(Fe=oa().then(n=>new lr(n))),Fe}static unload(){sa(),Fe?.then(n=>{n?._zstd?.delete()}),Fe=void 0}copyHeap(n){return this._mainModule.heapView(n).slice()}mallocChecked(n,i){He(n,i);let s=this._mainModule.malloc(n);if(!s.ptr)throw this._mainModule.free(s),new Error(`Failed to allocate ${n} bytes for ${i}`);return s}throwStreamError(n,i){throw new Error(`${n} failed: ${i.errorName||"unknown error"}`)}ensureStreamOk(n,i){i.error&&this.throwStreamError(n,i)}version(){return this._zstdClass.version()}reset(){let n=this._zstd.reset();this.ensureStreamOk("reset",n),this._decompressFrameCompleted=!1,this._decompressRemaining=0,this._decompressSawInput=!1}resetCompression(n){n!==void 0&&(this._compressionLevel=n);let i=this._zstd.resetCompression(this._compressionLevel);this.ensureStreamOk("resetCompression",i)}resetDecompression(){let n=this._zstd.resetDecompression();this.ensureStreamOk("resetDecompression",n),this._decompressFrameCompleted=!1,this._decompressRemaining=0,this._decompressSawInput=!1}setCompressionLevel(n){let i=this._zstd.setCompressionLevel(n);this.ensureStreamOk("setCompressionLevel",i),this._compressionLevel=n}compress(n,i=this.defaultCLevel()){He(n.length,"compress input");let s=this._mainModule.dataToHeap(n);try{if(!s.ptr&&n.length>0)throw new Error("Failed to allocate compress input buffer");let o=this._zstdClass.compressBound(n.length),c=this.mallocChecked(o,"compress output");try{if(c.size=this._zstdClass.compress(c.ptr,o,s.ptr,s.size,i),this._zstdClass.isError(c.size))throw new Error(`compress failed: ${this._zstdClass.getErrorName(c.size)}`);return this.copyHeap(c)}finally{this._mainModule.free(c)}}finally{this._mainModule.free(s)}}compressChunk(n){if(He(n.length,"compressChunk input"),n.length===0)return new Uint8Array(0);let i=this._mainModule.dataToHeap(n);try{if(!i.ptr)throw new Error("Failed to allocate compressChunk input buffer");let s=this._zstdClass.CStreamOutSize(),o=[],c=0;for(;c0&&(h.size=w.produced,o.push(this.copyHeap(h)))}finally{this._mainModule.free(h)}}return gt(o)}finally{this._mainModule.free(i)}}compressEnd(){let n=this._zstdClass.CStreamOutSize(),i=[],s=1;for(;s!==0;){let o=this.mallocChecked(n,"compressEnd output");try{let c=this._zstd.compressEnd(o.ptr,n);if(this.ensureStreamOk("compressEnd",c),c.produced===0&&c.remaining!==0)throw new Error("compressEnd failed: no progress while finishing stream");s=c.remaining,c.produced>0&&(o.size=c.produced,i.push(this.copyHeap(o)))}finally{this._mainModule.free(o)}}return gt(i)}frameContentSize(n){return this._zstdClass.getFrameContentSize(n.ptr,n.size)}decompress(n){He(n.length,"decompress input");let i=this._mainModule.dataToHeap(n);try{if(!i.ptr&&n.length>0)throw new Error("Failed to allocate decompress input buffer");let s=this.frameContentSize(i);if(s.error)throw new Error(`Failed to get frame content size: ${s.errorName}`);let o=s.known;if(o){let c=this._zstdClass.findFrameCompressedSize(i.ptr,i.size);if(this._zstdClass.isError(c))throw new Error(`Failed to find frame compressed size: ${this._zstdClass.getErrorName(c)}`);c0?i.ptr+c:0,m=this._zstd.decompressChunk(w.ptr,s,x,C);if(this.ensureStreamOk("decompressChunk",m),m.consumed===0&&m.produced===0){if(C===0){m.remaining>0&&(this._decompressRemaining=m.remaining);break}throw new Error("decompressChunk failed: no progress while consuming input")}c+=m.consumed,h=m.produced===s&&m.remaining!==0,m.produced>0&&(w.size=m.produced,o.push(this.copyHeap(w))),m.remaining===0?(this._decompressFrameCompleted=!0,this._decompressRemaining=0):this._decompressRemaining=m.remaining}finally{this._mainModule.free(w)}}return gt(o)}finally{this._mainModule.free(i)}}decompressEnd(){if(!this._decompressSawInput)throw new Error("decompressEnd failed: empty compressed input is not a completed frame");if(!this._decompressFrameCompleted||this._decompressRemaining!==0)throw new Error("decompressEnd failed: truncated Zstandard input")}defaultCLevel(){return this._zstdClass.defaultCLevel()}minCLevel(){return this._zstdClass.minCLevel()}maxCLevel(){return this._zstdClass.maxCLevel()}};let wt=null;function da(){return wt||(wt=ua.load()),wt}function pa(t){return t.length>=4&&t[0]===40&&t[1]===181&&t[2]===47&&t[3]===253}function Ct(t){const n="SQLite format 3\0";if(t.length/g,">").replace(/"/g,""").replace(/'/g,"'")}function rr(t,n,i){const s=t.tagsList[0]??"",o=t.tagsList.length>1?` +${t.tagsList.length-1}`:"",c=Ue(t.tagsList.join(", ")),h=s?`${Ue(s)}${o}`:"",w=t.more.size>0?'':"";return`
`+(i?cr(t,n):"")+"
"}function cr(t,n){const i=[...t.more.entries()].map(([s,o])=>{const c=n.get(s);return`
${c?Ue(c.name):`Поле #${s}`}
${Ue(o)}
`}).join("");return i?`
${i}
`:""}function ha(t,n){t.innerHTML=`

📚 Слова

База ещё не проверена.
`;const i=t.querySelector("#home-db-banner"),s=t.querySelector("#home-db-text"),o=t.querySelector("#home-db-go"),c=t.querySelector("#words-search"),h=t.querySelector("#words-group"),w=t.querySelector("#words-count"),C=t.querySelector("#words-status"),x=t.querySelector("#words-list"),m=t.querySelector("#words-more");function U(g,k){i.hidden=!1,s.textContent=g,o.hidden=!1}function E(){i.hidden=!0}o.addEventListener("click",()=>{document.querySelector('.drawer-btn[data-page="sync"]')?.click()});let y=!1,Q=new Map,v=0,$=[],S=null,O=0,R=!1,Y=0,K=0;function M(){const g=h.value;if(g==="")return{search:c.value.trim(),groupId:null};const k=Number(g);return{search:c.value.trim(),groupId:Number.isFinite(k)?k:null}}function X(){m.hidden=!(y&&$.lengthrr(g,Q,g.id===S)).join(""),w.textContent=v>0?`Показано ${$.length} из ${v}`:"",X()}function ee(g){if(S===g){g!=null&&G(g),S=null;return}S!=null&&G(S),S=g,g!=null&&re(g)}function G(g){const k=x.querySelector(`.word-row-wrap[data-word-id="${g}"]`);if(!k)return;const T=k.querySelector(".word-row"),q=k.querySelector(".word-extra");T&&(T.classList.remove("open"),T.setAttribute("aria-expanded","false")),q&&(q.hidden=!0,q.innerHTML="")}function re(g){const k=$.find(fe=>fe.id===g),T=x.querySelector(`.word-row-wrap[data-word-id="${g}"]`);if(!k||!T)return;const q=T.querySelector(".word-row"),P=T.querySelector(".word-extra");q&&(q.classList.add("open"),q.setAttribute("aria-expanded","true")),P&&(P.hidden=!1,P.innerHTML=cr(k,Q))}function V(g){C.textContent=g,C.hidden=g===""}async function j(){if(!y||R)return;R=!0;const g=++Y,k=M();m.disabled=!0,$.length===0&&V("Загрузка слов…");try{const[T,q]=await Promise.all([qn({search:k.search,groupId:k.groupId??void 0}),At({search:k.search,groupId:k.groupId??void 0,limit:tr,offset:0})]);if(g!==Y)return;v=T,$=q,O=q.length,S!=null&&!$.some(P=>P.id===S)&&(S=null),D(),V(q.length===0?"По этому запросу слов нет.":""),q.length===0&&v===0&&(w.textContent="Слов в базе пока нет.")}catch(T){if(g!==Y)return;V(`Не удалось загрузить слова: ${T instanceof Error?T.message:String(T)}`)}finally{g===Y&&(R=!1,m.disabled=!1,X())}}async function H(){if(!y||R||$.length>=v)return;R=!0;const g=++Y,k=M();m.disabled=!0,m.textContent="Загрузка…";try{const T=await At({search:k.search,groupId:k.groupId??void 0,limit:tr,offset:O});if(g!==Y)return;$=$.concat(T),O+=T.length,x.insertAdjacentHTML("beforeend",T.map(q=>rr(q,Q,q.id===S)).join("")),w.textContent=`Показано ${$.length} из ${v}`,X()}catch(T){if(g!==Y)return;V(`Не удалось догрузить: ${T instanceof Error?T.message:String(T)}`)}finally{g===Y&&(R=!1,m.disabled=!1,X())}}c.addEventListener("input",()=>{window.clearTimeout(K),K=window.setTimeout(()=>{j()},300)}),c.addEventListener("keydown",g=>{g.key==="Enter"&&(window.clearTimeout(K),j())}),h.addEventListener("change",()=>{j()}),m.addEventListener("click",()=>{H()}),x.addEventListener("click",g=>{const k=g.target.closest(".word-row");if(!k||k.disabled)return;const T=Number(k.dataset.wordId);Number.isFinite(T)&&ee(S===T?null:T)}),(async()=>{if(!await Le()){U("Локальной базы нет — скачай сохранение."),V("Нет локальной базы — скачай сохранение на странице «Синхронизация»."),w.textContent="";return}try{const k=await Sn();if(!Ct(k)){U("Файл в OPFS не похож на SQLite — перекачай сохранение.",!0),V("Файл в OPFS не похож на SQLite — перекачай сохранение.");return}E();try{const[q,P]=await Promise.all([Pn(),_n()]),fe=q;Q=new Map(P.map(ce=>[ce.id,ce])),h.innerHTML=''+fe.map(ce=>``).join(""),y=!0,await j(),h.options[0].textContent=`Все группы (${v})`}catch(q){V(`БД есть, но слова не прочитались: ${q instanceof Error?q.message:String(q)}`)}}catch(k){U(`Не удалось прочитать базу: ${k instanceof Error?k.message:String(k)}`)}})()}function Ae(t){return t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function ga(t,n){const i=[t.forward,t.backward].filter(s=>s.trim().length>0).join(" → ");return`
`+(n?ur(t):"")+"
"}function ur(t){return`
${[["forward",t.forward],["backward",t.backward],["filter",t.filter]].map(([s,o])=>`
${Ae(s)}
${o?Ae(o):'—'}
`).join("")}
`}function wa(t){t.innerHTML=`

🗂️ Колоды

Проверка локальной базы…
`;const n=t.querySelector("#decks-count"),i=t.querySelector("#decks-status"),s=t.querySelector("#decks-list");let o=[],c=null;function h(m){i.textContent=m,i.hidden=m===""}function w(m){const U=s.querySelector(`.word-row-wrap[data-deck-id="${m}"]`);if(!U)return;const E=U.querySelector(".word-row"),y=U.querySelector(".word-extra");E&&(E.classList.remove("open"),E.setAttribute("aria-expanded","false")),y&&(y.hidden=!0,y.innerHTML="")}function C(m){const U=o.find(v=>v.id===m),E=s.querySelector(`.word-row-wrap[data-deck-id="${m}"]`);if(!U||!E)return;const y=E.querySelector(".word-row"),Q=E.querySelector(".word-extra");y&&(y.classList.add("open"),y.setAttribute("aria-expanded","true")),Q&&(Q.hidden=!1,Q.innerHTML=ur(U))}function x(m){if(c===m){m!=null&&w(m),c=null;return}c!=null&&w(c),c=m,m!=null&&C(m)}s.addEventListener("click",m=>{const U=m.target.closest(".word-row");if(!U)return;const E=Number(U.dataset.deckId);Number.isFinite(E)&&x(c===E?null:E)}),(async()=>{if(!await Le()){h("Нет локальной базы — скачай сохранение на странице «Синхронизация»."),n.textContent="";return}h("Загрузка колод…");try{if(o=await Ln(),o.length===0){n.textContent="Колоды пока отсутствуют.",h(""),s.innerHTML="";return}n.textContent=`Всего: ${o.length}`,h(""),s.innerHTML=o.map(U=>ga(U,U.id===c)).join("")}catch(U){h(`Не удалось загрузить колоды: ${U instanceof Error?U.message:String(U)}`)}})()}const nr=24,ma=/^[A-Za-z0-9]{24}$/,dr="japlearn_sync_token";function ar(t){return t.trim().replace(/\s+/g,"")}function be(t){return ma.test(t)}function va(){try{return localStorage.getItem(dr)??""}catch{return""}}function mt(t){try{localStorage.setItem(dr,t)}catch{}}const pr="https://learning.micialware.ru";function ya(t,n=pr){return`${n.replace(/\/+$/,"")}/download/${encodeURIComponent(t)}`}async function ba(t,n,i=pr){const s=ya(t,i);let o;try{o=await fetch(s,{method:"GET",...n})}catch(h){throw new Error(`Нет связи с сервером: ${h instanceof Error?h.message:String(h)}`)}if(!o.ok)throw o.status===404?new Error("Сохранение не найдено (404). Проверь токен."):new Error(`Сервер ответил ${o.status} ${o.statusText}`);const c=await o.arrayBuffer();if(c.byteLength===0)throw new Error("Сервер вернул пустой файл");return new Uint8Array(c)}function Ua(t){t.innerHTML=`

📡 Синхронизация

Токен сохранения — 24 символа: латинские буквы и цифры.

0 / 24

Введите токен из 24 символов

`;const n=t.querySelector("#token-input"),i=t.querySelector("#token-error"),s=t.querySelector("#token-counter"),o=t.querySelector("#btn-download"),c=t.querySelector("#btn-upload"),h=t.querySelector("#status");function w(y){h.textContent=y,console.log(`[JapLearn] ${y}`)}function C(){return ar(n.value)}function x(y){o.disabled=y||!be(C()),c.disabled=!0,n.disabled=y,y||Le().then(Q=>{!n.disabled&&be(C())&&(c.disabled=!Q)})}function m(){const y=C(),Q=y.length;s.textContent=`${Q} / ${nr}`;const v=be(y),$=Q===0;n.classList.toggle("invalid",!$&&!v),n.setAttribute("aria-invalid",String(!$&&!v)),$?i.textContent="":Q!==nr?i.textContent=`Нужно 24 символа, сейчас ${Q}`:i.textContent=v?"":"Только латинские буквы и цифры",o.disabled=!v,v?Le().then(S=>{n.disabled||(c.disabled=!S)}):c.disabled=!0}async function U(){const y=C();if(be(y)){mt(y),x(!0),w("Скачивание сохранения...");try{const Q=await ba(y);w(`Скачано ${(Q.length/1024).toFixed(1)} КБ, распаковка...`);const v=await fa(Q);w(`Распаковано ${(v.length/1024).toFixed(1)} КБ, сохранение в OPFS...`),await Rn(v),w(`Готово: база ${(v.length/1024).toFixed(1)} КБ сохранена локально (OPFS).`)}catch(Q){w(`Ошибка скачивания: ${Q instanceof Error?Q.message:String(Q)}`)}finally{x(!1),m()}}}n.addEventListener("input",()=>{m()}),n.addEventListener("change",()=>{const y=C();n.value=y,be(y)&&(mt(y),w("Токен сохранён локально. Можно скачивать или выгружать.")),m()}),o.addEventListener("click",()=>{U()}),c.addEventListener("click",()=>{const y=C();be(y)&&(mt(y),w("Выгрузка — следующий шаг (POST /upload/stream/{id})."))});const E=va();E&&(n.value=E),m(),be(ar(E))&&Le().then(y=>{w(y?"Токен восстановлен, локальная база на месте.":"Токен восстановлен. Нажми «Скачать», чтобы получить базу."),m()})}const Ca={home:"Главная",decks:"Колоды",sync:"Синхронизация"};function Ie(t){const n=document.getElementById(t);if(!n)throw new Error(`[JapLearn] Не найден элемент #${t}`);return n}const fr=Ie("burger-btn"),et=Ie("drawer"),hr=Ie("drawer-overlay"),ka=Ie("page-title"),vt=Ie("page");let xt=!1;function Je(t){xt=t,et.classList.toggle("open",t),hr.hidden=!t,fr.setAttribute("aria-expanded",String(t)),et.setAttribute("aria-hidden",String(!t)),document.body.classList.toggle("drawer-open",t)}function Ea(t){et.querySelectorAll(".drawer-btn").forEach(n=>{n.classList.toggle("active",n.dataset.page===t)})}function gr(t){ka.textContent=Ca[t],Ea(t),t==="home"?ha(vt):t==="decks"?wa(vt):Ua(vt)}fr.addEventListener("click",()=>{Je(!xt)});hr.addEventListener("click",()=>{Je(!1)});document.addEventListener("keydown",t=>{t.key==="Escape"&&xt&&Je(!1)});et.querySelectorAll(".drawer-btn").forEach(t=>{t.addEventListener("click",()=>{const n=t.dataset.page;(n==="home"||n==="decks"||n==="sync")&&gr(n),Je(!1)})});await Tn();Je(!1);gr("home");console.log("[JapLearn] crossOriginIsolated =",window.crossOriginIsolated);