diff --git a/404.html b/404.html index dfe1395..433a2ba 100644 --- a/404.html +++ b/404.html @@ -32,12 +32,12 @@ } </script> <meta property="og:url" content="https://pleshevski.ru/404.html"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":""}</script><title>Дмитрий Плешевский</title><meta name="description" content=" "> - <link rel="preload" href="/assets/style-CAeyyXIN.css" as="style"><link rel="stylesheet" href="/assets/style-CAeyyXIN.css"> - <link rel="modulepreload" href="/assets/app-B-ZDtWHa.js"><link rel="modulepreload" href="/assets/404.html-BEjpQkgy.js"> - <link rel="prefetch" href="/assets/index.html-DH5daCIZ.js" as="script"><link rel="prefetch" href="/assets/works.html-CxTlsMbW.js" as="script"><link rel="prefetch" href="/assets/index.html-gQkWNf7r.js" as="script"><link rel="prefetch" href="/assets/works.html-DEB0fTtn.js" as="script"> + <link rel="preload" href="/assets/style-ZWWWXdHC.css" as="style"><link rel="stylesheet" href="/assets/style-ZWWWXdHC.css"> + <link rel="modulepreload" href="/assets/app-Dje5btuz.js"><link rel="modulepreload" href="/assets/404.html-DQUw13HV.js"> + <link rel="prefetch" href="/assets/index.html-D2w7c-Qe.js" as="script"><link rel="prefetch" href="/assets/works.html-CoXhcHQf.js" as="script"><link rel="prefetch" href="/assets/index.html-KbtCZdft.js" as="script"><link rel="prefetch" href="/assets/works.html-CvAIW4-p.js" as="script"> </head> <body> - <div id="app"><!--[--><div class="vp-theme-container" vp-container data-v-cb436ded><main class="page" data-v-cb436ded><div vp-content data-v-cb436ded><h1 data-v-cb436ded>404</h1><blockquote data-v-cb436ded>Ошиблись в параллельной вселенной.</blockquote><a class="route-link" href="/" data-v-cb436ded>Вернуться на главную</a></div></main></div><!--[--><!----><!--]--><!--]--></div> - <script type="module" src="/assets/app-B-ZDtWHa.js" defer></script> + <div id="app"><!--[--><div class="vp-theme-container" vp-container data-v-2c663dca><main class="page" data-v-2c663dca><div vp-content data-v-2c663dca><h1 data-v-2c663dca>404</h1><blockquote data-v-2c663dca>Вы заблокированы в лабиринте.</blockquote><a class="route-link" href="/" data-v-2c663dca>Вернуться на главную</a></div></main></div><!--[--><!----><!--]--><!--]--></div> + <script type="module" src="/assets/app-Dje5btuz.js" defer></script> </body> </html> diff --git a/assets/404.html-BEjpQkgy.js b/assets/404.html-DQUw13HV.js similarity index 91% rename from assets/404.html-BEjpQkgy.js rename to assets/404.html-DQUw13HV.js index 6d68e3c..8887745 100644 --- a/assets/404.html-BEjpQkgy.js +++ b/assets/404.html-DQUw13HV.js @@ -1 +1 @@ -import{_ as e,c as o,a,o as n}from"./app-B-ZDtWHa.js";const r={};function l(p,t){return n(),o("div",null,t[0]||(t[0]=[a("p",null,"404 Not Found",-1)]))}const c=e(r,[["render",l],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{c as comp,m as data}; +import{_ as e,c as o,a,o as n}from"./app-Dje5btuz.js";const r={};function l(p,t){return n(),o("div",null,t[0]||(t[0]=[a("p",null,"404 Not Found",-1)]))}const c=e(r,[["render",l],["__file","404.html.vue"]]),m=JSON.parse('{"path":"/404.html","title":"","lang":"ru-RU","frontmatter":{"layout":"NotFound","head":[["meta",{"property":"og:url","content":"https://pleshevski.ru/404.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\"}"]]},"headers":[],"git":{},"filePathRelative":null}');export{c as comp,m as data}; diff --git a/assets/app-B-ZDtWHa.js b/assets/app-Dje5btuz.js similarity index 99% rename from assets/app-B-ZDtWHa.js rename to assets/app-Dje5btuz.js index 7525637..e426059 100644 --- a/assets/app-B-ZDtWHa.js +++ b/assets/app-Dje5btuz.js @@ -15,14 +15,14 @@ * @vue/runtime-dom v3.5.13 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Ss;const el=typeof window<"u"&&window.trustedTypes;if(el)try{Ss=el.createPolicy("vue",{createHTML:e=>e})}catch{}const lc=Ss?e=>Ss.createHTML(e):e=>e,Vp="http://www.w3.org/2000/svg",Np="http://www.w3.org/1998/Math/MathML",Mt=typeof document<"u"?document:null,tl=Mt&&Mt.createElement("template"),Mp={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?Mt.createElementNS(Vp,e):t==="mathml"?Mt.createElementNS(Np,e):n?Mt.createElement(e,{is:n}):Mt.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>Mt.createTextNode(e),createComment:e=>Mt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Mt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{tl.innerHTML=lc(r==="svg"?`<svg>${e}</svg>`:r==="mathml"?`<math>${e}</math>`:e);const l=tl.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},qt="transition",er="animation",wr=Symbol("_vtc"),ac={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Fp=Be({},xu,ac),Bp=e=>(e.displayName="Transition",e.props=Fp,e),ni=Bp((e,{slots:t})=>Ee(Od,$p(e),t)),cn=(e,t=[])=>{re(e)?e.forEach(n=>n(...t)):e&&e(...t)},nl=e=>e?re(e)?e.some(t=>t.length>1):e.length>1:!1;function $p(e){const t={};for(const C in e)C in ac||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:u=i,appearToClass:c=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:d=`${n}-leave-to`}=e,m=Hp(o),v=m&&m[0],b=m&&m[1],{onBeforeEnter:y,onEnter:S,onEnterCancelled:g,onLeave:E,onLeaveCancelled:V,onBeforeAppear:U=y,onAppear:D=S,onAppearCancelled:Q=g}=t,I=(C,$,le,he)=>{C._enterCancelled=he,fn(C,$?c:l),fn(C,$?u:i),le&&le()},k=(C,$)=>{C._isLeaving=!1,fn(C,f),fn(C,d),fn(C,p),$&&$()},P=C=>($,le)=>{const he=C?D:S,G=()=>I($,C,le);cn(he,[$,G]),rl(()=>{fn($,C?a:s),It($,C?c:l),nl(he)||ol($,r,v,G)})};return Be(t,{onBeforeEnter(C){cn(y,[C]),It(C,s),It(C,i)},onBeforeAppear(C){cn(U,[C]),It(C,a),It(C,u)},onEnter:P(!1),onAppear:P(!0),onLeave(C,$){C._isLeaving=!0;const le=()=>k(C,$);It(C,f),C._enterCancelled?(It(C,p),ll()):(ll(),It(C,p)),rl(()=>{C._isLeaving&&(fn(C,f),It(C,d),nl(E)||ol(C,r,b,le))}),cn(E,[C,le])},onEnterCancelled(C){I(C,!1,void 0,!0),cn(g,[C])},onAppearCancelled(C){I(C,!0,void 0,!0),cn(Q,[C])},onLeaveCancelled(C){k(C),cn(V,[C])}})}function Hp(e){if(e==null)return null;if(Oe(e))return[Qo(e.enter),Qo(e.leave)];{const t=Qo(e);return[t,t]}}function Qo(e){return Mf(e)}function It(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[wr]||(e[wr]=new Set)).add(t)}function fn(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[wr];n&&(n.delete(t),n.size||(e[wr]=void 0))}function rl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Up=0;function ol(e,t,n,r){const o=e._endId=++Up,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=jp(e,t);if(!i)return r();const u=i+"end";let c=0;const f=()=>{e.removeEventListener(u,p),s()},p=d=>{d.target===e&&++c>=a&&f()};setTimeout(()=>{c<a&&f()},l+1),e.addEventListener(u,p)}function jp(e,t){const n=window.getComputedStyle(e),r=m=>(n[m]||"").split(", "),o=r(`${qt}Delay`),s=r(`${qt}Duration`),i=sl(o,s),l=r(`${er}Delay`),a=r(`${er}Duration`),u=sl(l,a);let c=null,f=0,p=0;t===qt?i>0&&(c=qt,f=i,p=s.length):t===er?u>0&&(c=er,f=u,p=a.length):(f=Math.max(i,u),c=f>0?i>u?qt:er:null,p=c?c===qt?s.length:a.length:0);const d=c===qt&&/\b(transform|all)(,|$)/.test(r(`${qt}Property`).toString());return{type:c,timeout:f,propCount:p,hasTransform:d}}function sl(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,r)=>il(n)+il(e[r])))}function il(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ll(){return document.body.offsetHeight}function Wp(e,t,n){const r=e[wr];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const vo=Symbol("_vod"),uc=Symbol("_vsh"),yo={beforeMount(e,{value:t},{transition:n}){e[vo]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):tr(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),tr(e,!0),r.enter(e)):r.leave(e,()=>{tr(e,!1)}):tr(e,t))},beforeUnmount(e,{value:t}){tr(e,t)}};function tr(e,t){e.style.display=t?e[vo]:"none",e[uc]=!t}const Kp=Symbol(""),zp=/(^|;)\s*display\s*:/;function Gp(e,t,n){const r=e.style,o=Ne(n);let s=!1;if(n&&!o){if(t)if(Ne(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&so(r,l,"")}else for(const i in t)n[i]==null&&so(r,i,"");for(const i in n)i==="display"&&(s=!0),so(r,i,n[i])}else if(o){if(t!==n){const i=r[Kp];i&&(n+=";"+i),r.cssText=n,s=zp.test(n)}}else t&&e.removeAttribute("style");vo in e&&(e[vo]=s?r.display:"",e[uc]&&(r.display="none"))}const al=/\s*!important$/;function so(e,t,n){if(re(n))n.forEach(r=>so(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=qp(e,t);al.test(n)?e.setProperty(on(r),n.replace(al,""),"important"):e[r]=n}}const ul=["Webkit","Moz","ms"],Zo={};function qp(e,t){const n=Zo[t];if(n)return n;let r=st(t);if(r!=="filter"&&r in e)return Zo[t]=r;r=Lr(r);for(let o=0;o<ul.length;o++){const s=ul[o]+r;if(s in e)return Zo[t]=s}return t}const cl="http://www.w3.org/1999/xlink";function fl(e,t,n,r,o,s=jf(t)){r&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(cl,t.slice(6,t.length)):e.setAttributeNS(cl,t,n):n==null||s&&!nu(n)?e.removeAttribute(t):e.setAttribute(t,s?"":jt(n)?String(n):n)}function dl(e,t,n,r,o){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?lc(n):n);return}const s=e.tagName;if(t==="value"&&s!=="PROGRESS"&&!s.includes("-")){const l=s==="OPTION"?e.getAttribute("value")||"":e.value,a=n==null?e.type==="checkbox"?"on":"":String(n);(l!==a||!("_value"in e))&&(e.value=a),n==null&&e.removeAttribute(t),e._value=n;return}let i=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=nu(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{e[t]=n}catch{}i&&e.removeAttribute(o||t)}function Yp(e,t,n,r){e.addEventListener(t,n,r)}function Jp(e,t,n,r){e.removeEventListener(t,n,r)}const pl=Symbol("_vei");function Xp(e,t,n,r,o=null){const s=e[pl]||(e[pl]={}),i=s[t];if(r&&i)i.value=r;else{const[l,a]=Qp(t);if(r){const u=s[t]=th(r,o);Yp(e,l,u,a)}else i&&(Jp(e,l,i,a),s[t]=void 0)}}const hl=/(?:Once|Passive|Capture)$/;function Qp(e){let t;if(hl.test(e)){t={};let r;for(;r=e.match(hl);)e=e.slice(0,e.length-r[0].length),t[r[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):on(e.slice(2)),t]}let es=0;const Zp=Promise.resolve(),eh=()=>es||(Zp.then(()=>es=0),es=Date.now());function th(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;St(nh(r,n.value),t,5,[r])};return n.value=e,n.attached=eh(),n}function nh(e,t){if(re(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const gl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,rh=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Wp(e,r,i):t==="style"?Gp(e,n,r):Ir(t)?Fs(t)||Xp(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):oh(e,t,r,i))?(dl(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&fl(e,t,r,i,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Ne(r))?dl(e,st(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),fl(e,t,r,i))};function oh(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&gl(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return gl(t)&&Ne(n)?!1:t in e}const sh={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},ih=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const s=on(o.key);if(t.some(i=>i===s||sh[i]===s))return e(o)})},lh=Be({patchProp:rh},Mp);let ts,_l=!1;function ah(){return ts=_l?ts:up(lh),_l=!0,ts}const uh=(...e)=>{const t=ah().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=fh(r);if(o)return n(o,!0,ch(o))},t};function ch(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fh(e){return Ne(e)?document.querySelector(e):e}var $r=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),dh=/.md((\?|#).*)?$/,ph=(e,t="/")=>$r(e)||e.startsWith("/")&&!e.startsWith(t)&&!dh.test(e),Do=e=>/^(https?:)?\/\//.test(e),ml=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=`${t.substring(0,t.length-3)}.html`:t.endsWith(".html")||(t=`${t}.html`),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},hh="http://.",gh=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return ml(new URL(`${n}/${e}`,hh).pathname)}return ml(e)},_h=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},mh=/(#|\?)/,cc=e=>{const[t,...n]=e.split(mh);return{pathname:t,hashAndQueries:n.join("")}},vh=["link","meta","script","style","noscript","template"],yh=["title","base"],bh=([e,t,n])=>yh.includes(e)?e:vh.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,Eh=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=bh(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},Sh=e=>e.endsWith("/")||e.endsWith(".html")?e:`${e}/`,fc=e=>e.endsWith("/")?e.slice(0,-1):e,dc=e=>e.startsWith("/")?e.slice(1):e,ri=e=>Object.prototype.toString.call(e)==="[object Object]",Et=e=>typeof e=="string";const Ah="modulepreload",wh=function(e){return"/"+e},vl={},nr=function(t,n,r){let o=Promise.resolve();return n&&n.length>0&&(document.getElementsByTagName("link"),o=Promise.all(n.map(s=>{if(s=wh(s),s in vl)return;vl[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${l}`))return;const a=document.createElement("link");if(a.rel=i?"stylesheet":Ah,i||(a.as="script",a.crossOrigin=""),a.href=s,document.head.appendChild(a),i)return new Promise((u,c)=>{a.addEventListener("load",u),a.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${s}`)))})}))),o.then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})},Ch=JSON.parse("{}"),Th=Object.fromEntries([["/",{loader:()=>nr(()=>import("./index.html-DH5daCIZ.js"),__vite__mapDeps([])),meta:{title:"Резюме"}}],["/works.html",{loader:()=>nr(()=>import("./works.html-CxTlsMbW.js"),__vite__mapDeps([])),meta:{title:"Работы"}}],["/eng/",{loader:()=>nr(()=>import("./index.html-gQkWNf7r.js"),__vite__mapDeps([])),meta:{title:"Resume"}}],["/eng/works.html",{loader:()=>nr(()=>import("./works.html-DEB0fTtn.js"),__vite__mapDeps([])),meta:{title:"Works"}}],["/404.html",{loader:()=>nr(()=>import("./404.html-BEjpQkgy.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*! +**/let Ss;const el=typeof window<"u"&&window.trustedTypes;if(el)try{Ss=el.createPolicy("vue",{createHTML:e=>e})}catch{}const lc=Ss?e=>Ss.createHTML(e):e=>e,Vp="http://www.w3.org/2000/svg",Np="http://www.w3.org/1998/Math/MathML",Mt=typeof document<"u"?document:null,tl=Mt&&Mt.createElement("template"),Mp={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?Mt.createElementNS(Vp,e):t==="mathml"?Mt.createElementNS(Np,e):n?Mt.createElement(e,{is:n}):Mt.createElement(e);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>Mt.createTextNode(e),createComment:e=>Mt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Mt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{tl.innerHTML=lc(r==="svg"?`<svg>${e}</svg>`:r==="mathml"?`<math>${e}</math>`:e);const l=tl.content;if(r==="svg"||r==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},qt="transition",er="animation",wr=Symbol("_vtc"),ac={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Fp=Be({},xu,ac),Bp=e=>(e.displayName="Transition",e.props=Fp,e),ni=Bp((e,{slots:t})=>Ee(Od,$p(e),t)),cn=(e,t=[])=>{re(e)?e.forEach(n=>n(...t)):e&&e(...t)},nl=e=>e?re(e)?e.some(t=>t.length>1):e.length>1:!1;function $p(e){const t={};for(const C in e)C in ac||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:u=i,appearToClass:c=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:d=`${n}-leave-to`}=e,m=Hp(o),v=m&&m[0],b=m&&m[1],{onBeforeEnter:y,onEnter:S,onEnterCancelled:g,onLeave:E,onLeaveCancelled:V,onBeforeAppear:U=y,onAppear:D=S,onAppearCancelled:Q=g}=t,I=(C,$,le,he)=>{C._enterCancelled=he,fn(C,$?c:l),fn(C,$?u:i),le&&le()},k=(C,$)=>{C._isLeaving=!1,fn(C,f),fn(C,d),fn(C,p),$&&$()},P=C=>($,le)=>{const he=C?D:S,G=()=>I($,C,le);cn(he,[$,G]),rl(()=>{fn($,C?a:s),It($,C?c:l),nl(he)||ol($,r,v,G)})};return Be(t,{onBeforeEnter(C){cn(y,[C]),It(C,s),It(C,i)},onBeforeAppear(C){cn(U,[C]),It(C,a),It(C,u)},onEnter:P(!1),onAppear:P(!0),onLeave(C,$){C._isLeaving=!0;const le=()=>k(C,$);It(C,f),C._enterCancelled?(It(C,p),ll()):(ll(),It(C,p)),rl(()=>{C._isLeaving&&(fn(C,f),It(C,d),nl(E)||ol(C,r,b,le))}),cn(E,[C,le])},onEnterCancelled(C){I(C,!1,void 0,!0),cn(g,[C])},onAppearCancelled(C){I(C,!0,void 0,!0),cn(Q,[C])},onLeaveCancelled(C){k(C),cn(V,[C])}})}function Hp(e){if(e==null)return null;if(Oe(e))return[Qo(e.enter),Qo(e.leave)];{const t=Qo(e);return[t,t]}}function Qo(e){return Mf(e)}function It(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[wr]||(e[wr]=new Set)).add(t)}function fn(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[wr];n&&(n.delete(t),n.size||(e[wr]=void 0))}function rl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Up=0;function ol(e,t,n,r){const o=e._endId=++Up,s=()=>{o===e._endId&&r()};if(n!=null)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=jp(e,t);if(!i)return r();const u=i+"end";let c=0;const f=()=>{e.removeEventListener(u,p),s()},p=d=>{d.target===e&&++c>=a&&f()};setTimeout(()=>{c<a&&f()},l+1),e.addEventListener(u,p)}function jp(e,t){const n=window.getComputedStyle(e),r=m=>(n[m]||"").split(", "),o=r(`${qt}Delay`),s=r(`${qt}Duration`),i=sl(o,s),l=r(`${er}Delay`),a=r(`${er}Duration`),u=sl(l,a);let c=null,f=0,p=0;t===qt?i>0&&(c=qt,f=i,p=s.length):t===er?u>0&&(c=er,f=u,p=a.length):(f=Math.max(i,u),c=f>0?i>u?qt:er:null,p=c?c===qt?s.length:a.length:0);const d=c===qt&&/\b(transform|all)(,|$)/.test(r(`${qt}Property`).toString());return{type:c,timeout:f,propCount:p,hasTransform:d}}function sl(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,r)=>il(n)+il(e[r])))}function il(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ll(){return document.body.offsetHeight}function Wp(e,t,n){const r=e[wr];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const vo=Symbol("_vod"),uc=Symbol("_vsh"),yo={beforeMount(e,{value:t},{transition:n}){e[vo]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):tr(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),tr(e,!0),r.enter(e)):r.leave(e,()=>{tr(e,!1)}):tr(e,t))},beforeUnmount(e,{value:t}){tr(e,t)}};function tr(e,t){e.style.display=t?e[vo]:"none",e[uc]=!t}const Kp=Symbol(""),zp=/(^|;)\s*display\s*:/;function Gp(e,t,n){const r=e.style,o=Ne(n);let s=!1;if(n&&!o){if(t)if(Ne(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&so(r,l,"")}else for(const i in t)n[i]==null&&so(r,i,"");for(const i in n)i==="display"&&(s=!0),so(r,i,n[i])}else if(o){if(t!==n){const i=r[Kp];i&&(n+=";"+i),r.cssText=n,s=zp.test(n)}}else t&&e.removeAttribute("style");vo in e&&(e[vo]=s?r.display:"",e[uc]&&(r.display="none"))}const al=/\s*!important$/;function so(e,t,n){if(re(n))n.forEach(r=>so(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=qp(e,t);al.test(n)?e.setProperty(on(r),n.replace(al,""),"important"):e[r]=n}}const ul=["Webkit","Moz","ms"],Zo={};function qp(e,t){const n=Zo[t];if(n)return n;let r=st(t);if(r!=="filter"&&r in e)return Zo[t]=r;r=Lr(r);for(let o=0;o<ul.length;o++){const s=ul[o]+r;if(s in e)return Zo[t]=s}return t}const cl="http://www.w3.org/1999/xlink";function fl(e,t,n,r,o,s=jf(t)){r&&t.startsWith("xlink:")?n==null?e.removeAttributeNS(cl,t.slice(6,t.length)):e.setAttributeNS(cl,t,n):n==null||s&&!nu(n)?e.removeAttribute(t):e.setAttribute(t,s?"":jt(n)?String(n):n)}function dl(e,t,n,r,o){if(t==="innerHTML"||t==="textContent"){n!=null&&(e[t]=t==="innerHTML"?lc(n):n);return}const s=e.tagName;if(t==="value"&&s!=="PROGRESS"&&!s.includes("-")){const l=s==="OPTION"?e.getAttribute("value")||"":e.value,a=n==null?e.type==="checkbox"?"on":"":String(n);(l!==a||!("_value"in e))&&(e.value=a),n==null&&e.removeAttribute(t),e._value=n;return}let i=!1;if(n===""||n==null){const l=typeof e[t];l==="boolean"?n=nu(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{e[t]=n}catch{}i&&e.removeAttribute(o||t)}function Yp(e,t,n,r){e.addEventListener(t,n,r)}function Jp(e,t,n,r){e.removeEventListener(t,n,r)}const pl=Symbol("_vei");function Xp(e,t,n,r,o=null){const s=e[pl]||(e[pl]={}),i=s[t];if(r&&i)i.value=r;else{const[l,a]=Qp(t);if(r){const u=s[t]=th(r,o);Yp(e,l,u,a)}else i&&(Jp(e,l,i,a),s[t]=void 0)}}const hl=/(?:Once|Passive|Capture)$/;function Qp(e){let t;if(hl.test(e)){t={};let r;for(;r=e.match(hl);)e=e.slice(0,e.length-r[0].length),t[r[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):on(e.slice(2)),t]}let es=0;const Zp=Promise.resolve(),eh=()=>es||(Zp.then(()=>es=0),es=Date.now());function th(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;St(nh(r,n.value),t,5,[r])};return n.value=e,n.attached=eh(),n}function nh(e,t){if(re(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const gl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,rh=(e,t,n,r,o,s)=>{const i=o==="svg";t==="class"?Wp(e,r,i):t==="style"?Gp(e,n,r):Ir(t)?Fs(t)||Xp(e,t,n,r,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):oh(e,t,r,i))?(dl(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&fl(e,t,r,i,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Ne(r))?dl(e,st(t),r,s,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),fl(e,t,r,i))};function oh(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&gl(t)&&oe(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return gl(t)&&Ne(n)?!1:t in e}const sh={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},ih=(e,t)=>{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=o=>{if(!("key"in o))return;const s=on(o.key);if(t.some(i=>i===s||sh[i]===s))return e(o)})},lh=Be({patchProp:rh},Mp);let ts,_l=!1;function ah(){return ts=_l?ts:up(lh),_l=!0,ts}const uh=(...e)=>{const t=ah().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=fh(r);if(o)return n(o,!0,ch(o))},t};function ch(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fh(e){return Ne(e)?document.querySelector(e):e}var $r=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),dh=/.md((\?|#).*)?$/,ph=(e,t="/")=>$r(e)||e.startsWith("/")&&!e.startsWith(t)&&!dh.test(e),Do=e=>/^(https?:)?\/\//.test(e),ml=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=`${t.substring(0,t.length-3)}.html`:t.endsWith(".html")||(t=`${t}.html`),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},hh="http://.",gh=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return ml(new URL(`${n}/${e}`,hh).pathname)}return ml(e)},_h=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},mh=/(#|\?)/,cc=e=>{const[t,...n]=e.split(mh);return{pathname:t,hashAndQueries:n.join("")}},vh=["link","meta","script","style","noscript","template"],yh=["title","base"],bh=([e,t,n])=>yh.includes(e)?e:vh.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,Eh=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=bh(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},Sh=e=>e.endsWith("/")||e.endsWith(".html")?e:`${e}/`,fc=e=>e.endsWith("/")?e.slice(0,-1):e,dc=e=>e.startsWith("/")?e.slice(1):e,ri=e=>Object.prototype.toString.call(e)==="[object Object]",Et=e=>typeof e=="string";const Ah="modulepreload",wh=function(e){return"/"+e},vl={},nr=function(t,n,r){let o=Promise.resolve();return n&&n.length>0&&(document.getElementsByTagName("link"),o=Promise.all(n.map(s=>{if(s=wh(s),s in vl)return;vl[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${l}`))return;const a=document.createElement("link");if(a.rel=i?"stylesheet":Ah,i||(a.as="script",a.crossOrigin=""),a.href=s,document.head.appendChild(a),i)return new Promise((u,c)=>{a.addEventListener("load",u),a.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${s}`)))})}))),o.then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})},Ch=JSON.parse("{}"),Th=Object.fromEntries([["/",{loader:()=>nr(()=>import("./index.html-D2w7c-Qe.js"),__vite__mapDeps([])),meta:{title:"Резюме"}}],["/works.html",{loader:()=>nr(()=>import("./works.html-CoXhcHQf.js"),__vite__mapDeps([])),meta:{title:"Работы"}}],["/eng/",{loader:()=>nr(()=>import("./index.html-KbtCZdft.js"),__vite__mapDeps([])),meta:{title:"Resume"}}],["/eng/works.html",{loader:()=>nr(()=>import("./works.html-CvAIW4-p.js"),__vite__mapDeps([])),meta:{title:"Works"}}],["/404.html",{loader:()=>nr(()=>import("./404.html-DQUw13HV.js"),__vite__mapDeps([])),meta:{title:""}}]]);/*! * vue-router v4.5.0 * (c) 2024 Eduardo San Martin Morote * @license MIT */const Pn=typeof document<"u";function pc(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function kh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&pc(e.default)}const me=Object.assign;function ns(e,t){const n={};for(const r in t){const o=t[r];n[r]=At(o)?o.map(e):e(o)}return n}const hr=()=>{},At=Array.isArray,hc=/#/g,Oh=/&/g,Ph=/\//g,xh=/=/g,Dh=/\?/g,gc=/\+/g,Rh=/%5B/g,Ih=/%5D/g,_c=/%5E/g,Lh=/%60/g,mc=/%7B/g,Vh=/%7C/g,vc=/%7D/g,Nh=/%20/g;function oi(e){return encodeURI(""+e).replace(Vh,"|").replace(Rh,"[").replace(Ih,"]")}function Mh(e){return oi(e).replace(mc,"{").replace(vc,"}").replace(_c,"^")}function As(e){return oi(e).replace(gc,"%2B").replace(Nh,"+").replace(hc,"%23").replace(Oh,"%26").replace(Lh,"`").replace(mc,"{").replace(vc,"}").replace(_c,"^")}function Fh(e){return As(e).replace(xh,"%3D")}function Bh(e){return oi(e).replace(hc,"%23").replace(Dh,"%3F")}function $h(e){return e==null?"":Bh(e).replace(Ph,"%2F")}function Cr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const Hh=/\/$/,Uh=e=>e.replace(Hh,"");function rs(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l<a&&l>=0&&(a=-1),a>-1&&(r=t.slice(0,a),s=t.slice(a+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=zh(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:Cr(i)}}function jh(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function yl(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Wh(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&Bn(t.matched[r],n.matched[o])&&yc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Bn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function yc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Kh(e[n],t[n]))return!1;return!0}function Kh(e,t){return At(e)?bl(e,t):At(t)?bl(t,e):e===t}function bl(e,t){return At(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function zh(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,l;for(i=0;i<r.length;i++)if(l=r[i],l!==".")if(l==="..")s>1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i).join("/")}const Nt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Tr;(function(e){e.pop="pop",e.push="push"})(Tr||(Tr={}));var gr;(function(e){e.back="back",e.forward="forward",e.unknown=""})(gr||(gr={}));function Gh(e){if(!e)if(Pn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Uh(e)}const qh=/^[^#]+#/;function Yh(e,t){return e.replace(qh,"#")+t}function Jh(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Ro=()=>({left:window.scrollX,top:window.scrollY});function Xh(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=Jh(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function El(e,t){return(history.state?history.state.position-t:-1)+e}const ws=new Map;function Qh(e,t){ws.set(e,t)}function Zh(e){const t=ws.get(e);return ws.delete(e),t}let eg=()=>location.protocol+"//"+location.host;function bc(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,a=o.slice(l);return a[0]!=="/"&&(a="/"+a),yl(a,"")}return yl(n,e)+r+o}function tg(e,t,n,r){let o=[],s=[],i=null;const l=({state:p})=>{const d=bc(e,location),m=n.value,v=t.value;let b=0;if(p){if(n.value=d,t.value=p,i&&i===m){i=null;return}b=v?p.position-v.position:0}else r(d);o.forEach(y=>{y(n.value,m,{delta:b,type:Tr.pop,direction:b?b>0?gr.forward:gr.back:gr.unknown})})};function a(){i=n.value}function u(p){o.push(p);const d=()=>{const m=o.indexOf(p);m>-1&&o.splice(m,1)};return s.push(d),d}function c(){const{history:p}=window;p.state&&p.replaceState(me({},p.state,{scroll:Ro()}),"")}function f(){for(const p of s)p();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",c)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",c,{passive:!0}),{pauseListeners:a,listen:u,destroy:f}}function Sl(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Ro():null}}function ng(e){const{history:t,location:n}=window,r={value:bc(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(a,u,c){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:eg()+e+a;try{t[c?"replaceState":"pushState"](u,"",p),o.value=u}catch(d){console.error(d),n[c?"replace":"assign"](p)}}function i(a,u){const c=me({},t.state,Sl(o.value.back,a,o.value.forward,!0),u,{position:o.value.position});s(a,c,!0),r.value=a}function l(a,u){const c=me({},o.value,t.state,{forward:a,scroll:Ro()});s(c.current,c,!0);const f=me({},Sl(r.value,a,null),{position:c.position+1},u);s(a,f,!1),r.value=a}return{location:r,state:o,push:l,replace:i}}function rg(e){e=Gh(e);const t=ng(e),n=tg(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=me({location:"",base:e,go:r,createHref:Yh.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function og(e){return typeof e=="string"||e&&typeof e=="object"}function Ec(e){return typeof e=="string"||typeof e=="symbol"}const Sc=Symbol("");var Al;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Al||(Al={}));function $n(e,t){return me(new Error,{type:e,[Sc]:!0},t)}function Lt(e,t){return e instanceof Error&&Sc in e&&(t==null||!!(e.type&t))}const wl="[^/]+?",sg={sensitive:!1,strict:!1,start:!0,end:!0},ig=/[.+*?^${}()[\]/\\]/g;function lg(e,t){const n=me({},sg,t),r=[];let o=n.start?"^":"";const s=[];for(const u of e){const c=u.length?[]:[90];n.strict&&!u.length&&(o+="/");for(let f=0;f<u.length;f++){const p=u[f];let d=40+(n.sensitive?.25:0);if(p.type===0)f||(o+="/"),o+=p.value.replace(ig,"\\$&"),d+=40;else if(p.type===1){const{value:m,repeatable:v,optional:b,regexp:y}=p;s.push({name:m,repeatable:v,optional:b});const S=y||wl;if(S!==wl){d+=10;try{new RegExp(`(${S})`)}catch(E){throw new Error(`Invalid custom RegExp for param "${m}" (${S}): `+E.message)}}let g=v?`((?:${S})(?:/(?:${S}))*)`:`(${S})`;f||(g=b&&u.length<2?`(?:/${g})`:"/"+g),b&&(g+="?"),o+=g,d+=20,b&&(d+=-8),v&&(d+=-20),S===".*"&&(d+=-50)}c.push(d)}r.push(c)}if(n.strict&&n.end){const u=r.length-1;r[u][r[u].length-1]+=.7000000000000001}n.strict||(o+="/?"),n.end?o+="$":n.strict&&!o.endsWith("/")&&(o+="(?:/|$)");const i=new RegExp(o,n.sensitive?"":"i");function l(u){const c=u.match(i),f={};if(!c)return null;for(let p=1;p<c.length;p++){const d=c[p]||"",m=s[p-1];f[m.name]=d&&m.repeatable?d.split("/"):d}return f}function a(u){let c="",f=!1;for(const p of e){(!f||!c.endsWith("/"))&&(c+="/"),f=!1;for(const d of p)if(d.type===0)c+=d.value;else if(d.type===1){const{value:m,repeatable:v,optional:b}=d,y=m in u?u[m]:"";if(At(y)&&!v)throw new Error(`Provided param "${m}" is an array but it is not repeatable (* or + modifiers)`);const S=At(y)?y.join("/"):y;if(!S)if(b)p.length<2&&(c.endsWith("/")?c=c.slice(0,-1):f=!0);else throw new Error(`Missing required param "${m}"`);c+=S}}return c||"/"}return{re:i,score:r,keys:s,parse:l,stringify:a}}function ag(e,t){let n=0;for(;n<e.length&&n<t.length;){const r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function Ac(e,t){let n=0;const r=e.score,o=t.score;for(;n<r.length&&n<o.length;){const s=ag(r[n],o[n]);if(s)return s;n++}if(Math.abs(o.length-r.length)===1){if(Cl(r))return 1;if(Cl(o))return-1}return o.length-r.length}function Cl(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const ug={type:0,value:""},cg=/[a-zA-Z0-9_]/;function fg(e){if(!e)return[[]];if(e==="/")return[[ug]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(d){throw new Error(`ERR (${n})/"${u}": ${d}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,a,u="",c="";function f(){u&&(n===0?s.push({type:0,value:u}):n===1||n===2||n===3?(s.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:u,regexp:c,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),u="")}function p(){u+=a}for(;l<e.length;){if(a=e[l++],a==="\\"&&n!==2){r=n,n=4;continue}switch(n){case 0:a==="/"?(u&&f(),i()):a===":"?(f(),n=1):p();break;case 4:p(),n=r;break;case 1:a==="("?n=2:cg.test(a)?p():(f(),n=0,a!=="*"&&a!=="?"&&a!=="+"&&l--);break;case 2:a===")"?c[c.length-1]=="\\"?c=c.slice(0,-1)+a:n=3:c+=a;break;case 3:f(),n=0,a!=="*"&&a!=="?"&&a!=="+"&&l--,c="";break;default:t("Unknown state");break}}return n===2&&t(`Unfinished custom RegExp for param "${u}"`),f(),i(),o}function dg(e,t,n){const r=lg(fg(e.path),n),o=me(r,{record:e,parent:t,children:[],alias:[]});return t&&!o.record.aliasOf==!t.record.aliasOf&&t.children.push(o),o}function pg(e,t){const n=[],r=new Map;t=Pl({strict:!1,end:!0,sensitive:!1},t);function o(f){return r.get(f)}function s(f,p,d){const m=!d,v=kl(f);v.aliasOf=d&&d.record;const b=Pl(t,f),y=[v];if("alias"in f){const E=typeof f.alias=="string"?[f.alias]:f.alias;for(const V of E)y.push(kl(me({},v,{components:d?d.record.components:v.components,path:V,aliasOf:d?d.record:v})))}let S,g;for(const E of y){const{path:V}=E;if(p&&V[0]!=="/"){const U=p.record.path,D=U[U.length-1]==="/"?"":"/";E.path=p.record.path+(V&&D+V)}if(S=dg(E,p,b),d?d.alias.push(S):(g=g||S,g!==S&&g.alias.push(S),m&&f.name&&!Ol(S)&&i(f.name)),wc(S)&&a(S),v.children){const U=v.children;for(let D=0;D<U.length;D++)s(U[D],S,d&&d.children[D])}d=d||S}return g?()=>{i(g)}:hr}function i(f){if(Ec(f)){const p=r.get(f);p&&(r.delete(f),n.splice(n.indexOf(p),1),p.children.forEach(i),p.alias.forEach(i))}else{const p=n.indexOf(f);p>-1&&(n.splice(p,1),f.record.name&&r.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function a(f){const p=_g(f,n);n.splice(p,0,f),f.record.name&&!Ol(f)&&r.set(f.record.name,f)}function u(f,p){let d,m={},v,b;if("name"in f&&f.name){if(d=r.get(f.name),!d)throw $n(1,{location:f});b=d.record.name,m=me(Tl(p.params,d.keys.filter(g=>!g.optional).concat(d.parent?d.parent.keys.filter(g=>g.optional):[]).map(g=>g.name)),f.params&&Tl(f.params,d.keys.map(g=>g.name))),v=d.stringify(m)}else if(f.path!=null)v=f.path,d=n.find(g=>g.re.test(v)),d&&(m=d.parse(v),b=d.record.name);else{if(d=p.name?r.get(p.name):n.find(g=>g.re.test(p.path)),!d)throw $n(1,{location:f,currentLocation:p});b=d.record.name,m=me({},p.params,f.params),v=d.stringify(m)}const y=[];let S=d;for(;S;)y.unshift(S.record),S=S.parent;return{name:b,path:v,params:m,matched:y,meta:gg(y)}}e.forEach(f=>s(f));function c(){n.length=0,r.clear()}return{addRoute:s,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:l,getRecordMatcher:o}}function Tl(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function kl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:hg(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function hg(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Ol(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function gg(e){return e.reduce((t,n)=>me(t,n.meta),{})}function Pl(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function _g(e,t){let n=0,r=t.length;for(;n!==r;){const s=n+r>>1;Ac(e,t[s])<0?r=s:n=s+1}const o=mg(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function mg(e){let t=e;for(;t=t.parent;)if(wc(t)&&Ac(e,t)===0)return t}function wc({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function vg(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;o<r.length;++o){const s=r[o].replace(gc," "),i=s.indexOf("="),l=Cr(i<0?s:s.slice(0,i)),a=i<0?null:Cr(s.slice(i+1));if(l in t){let u=t[l];At(u)||(u=t[l]=[u]),u.push(a)}else t[l]=a}return t}function xl(e){let t="";for(let n in e){const r=e[n];if(n=Fh(n),r==null){r!==void 0&&(t+=(t.length?"&":"")+n);continue}(At(r)?r.map(s=>s&&As(s)):[r&&As(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function yg(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=At(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const bg=Symbol(""),Dl=Symbol(""),Io=Symbol(""),si=Symbol(""),Cs=Symbol("");function rr(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Qt(e,t,n,r,o,s=i=>i()){const i=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((l,a)=>{const u=p=>{p===!1?a($n(4,{from:n,to:t})):p instanceof Error?a(p):og(p)?a($n(2,{from:t,to:p})):(i&&r.enterCallbacks[o]===i&&typeof p=="function"&&i.push(p),l())},c=s(()=>e.call(r&&r.instances[o],t,n,u));let f=Promise.resolve(c);e.length<3&&(f=f.then(u)),f.catch(p=>a(p))})}function os(e,t,n,r,o=s=>s()){const s=[];for(const i of e)for(const l in i.components){let a=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(pc(a)){const c=(a.__vccOpts||a)[t];c&&s.push(Qt(c,n,r,i,l,o))}else{let u=a();s.push(()=>u.then(c=>{if(!c)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=kh(c)?c.default:c;i.mods[l]=c,i.components[l]=f;const d=(f.__vccOpts||f)[t];return d&&Qt(d,n,r,i,l,o)()}))}}return s}function Rl(e){const t=Je(Io),n=Je(si),r=N(()=>{const a=$t(e.to);return t.resolve(a)}),o=N(()=>{const{matched:a}=r.value,{length:u}=a,c=a[u-1],f=n.matched;if(!c||!f.length)return-1;const p=f.findIndex(Bn.bind(null,c));if(p>-1)return p;const d=Il(a[u-2]);return u>1&&Il(c)===d&&f[f.length-1].path!==d?f.findIndex(Bn.bind(null,a[u-2])):p}),s=N(()=>o.value>-1&&Cg(n.params,r.value.params)),i=N(()=>o.value>-1&&o.value===n.matched.length-1&&yc(n.params,r.value.params));function l(a={}){if(wg(a)){const u=t[$t(e.replace)?"replace":"push"]($t(e.to)).catch(hr);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:r,href:N(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}function Eg(e){return e.length===1?e[0]:e}const Sg=pe({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Rl,setup(e,{slots:t}){const n=Sn(Rl(e)),{options:r}=Je(Io),o=N(()=>({[Ll(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Ll(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&Eg(t.default(n));return e.custom?s:Ee("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),Ag=Sg;function wg(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Cg(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!At(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function Il(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Ll=(e,t,n)=>e??t??n,Tg=pe({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Je(Cs),o=N(()=>e.route||r.value),s=Je(Dl,0),i=N(()=>{let u=$t(s);const{matched:c}=o.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),l=N(()=>o.value.matched[i.value]);bn(Dl,N(()=>i.value+1)),bn(bg,l),bn(Cs,o);const a=ye();return Ke(()=>[a.value,l.value,e.name],([u,c,f],[p,d,m])=>{c&&(c.instances[f]=u,d&&d!==c&&u&&u===p&&(c.leaveGuards.size||(c.leaveGuards=d.leaveGuards),c.updateGuards.size||(c.updateGuards=d.updateGuards))),u&&c&&(!d||!Bn(c,d)||!p)&&(c.enterCallbacks[f]||[]).forEach(v=>v(u))},{flush:"post"}),()=>{const u=o.value,c=e.name,f=l.value,p=f&&f.components[c];if(!p)return Vl(n.default,{Component:p,route:u});const d=f.props[c],m=d?d===!0?u.params:typeof d=="function"?d(u):d:null,b=Ee(p,me({},m,t,{onVnodeUnmounted:y=>{y.component.isUnmounted&&(f.instances[c]=null)},ref:a}));return Vl(n.default,{Component:b,route:u})||b}}});function Vl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const kg=Tg;function Og(e){const t=pg(e.routes,e),n=e.parseQuery||vg,r=e.stringifyQuery||xl,o=e.history,s=rr(),i=rr(),l=rr(),a=dt(Nt);let u=Nt;Pn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=ns.bind(null,T=>""+T),f=ns.bind(null,$h),p=ns.bind(null,Cr);function d(T,Y){let K,Z;return Ec(T)?(K=t.getRecordMatcher(T),Z=Y):Z=T,t.addRoute(Z,K)}function m(T){const Y=t.getRecordMatcher(T);Y&&t.removeRoute(Y)}function v(){return t.getRoutes().map(T=>T.record)}function b(T){return!!t.getRecordMatcher(T)}function y(T,Y){if(Y=me({},Y||a.value),typeof T=="string"){const _=rs(n,T,Y.path),A=t.resolve({path:_.path},Y),x=o.createHref(_.fullPath);return me(_,A,{params:p(A.params),hash:Cr(_.hash),redirectedFrom:void 0,href:x})}let K;if(T.path!=null)K=me({},T,{path:rs(n,T.path,Y.path).path});else{const _=me({},T.params);for(const A in _)_[A]==null&&delete _[A];K=me({},T,{params:f(_)}),Y.params=f(Y.params)}const Z=t.resolve(K,Y),_e=T.hash||"";Z.params=c(p(Z.params));const xe=jh(r,me({},T,{hash:Mh(_e),path:Z.path})),h=o.createHref(xe);return me({fullPath:xe,hash:_e,query:r===xl?yg(T.query):T.query||{}},Z,{redirectedFrom:void 0,href:h})}function S(T){return typeof T=="string"?rs(n,T,a.value.path):me({},T)}function g(T,Y){if(u!==T)return $n(8,{from:Y,to:T})}function E(T){return D(T)}function V(T){return E(me(S(T),{replace:!0}))}function U(T){const Y=T.matched[T.matched.length-1];if(Y&&Y.redirect){const{redirect:K}=Y;let Z=typeof K=="function"?K(T):K;return typeof Z=="string"&&(Z=Z.includes("?")||Z.includes("#")?Z=S(Z):{path:Z},Z.params={}),me({query:T.query,hash:T.hash,params:Z.path!=null?{}:T.params},Z)}}function D(T,Y){const K=u=y(T),Z=a.value,_e=T.state,xe=T.force,h=T.replace===!0,_=U(K);if(_)return D(me(S(_),{state:typeof _=="object"?me({},_e,_.state):_e,force:xe,replace:h}),Y||K);const A=K;A.redirectedFrom=Y;let x;return!xe&&Wh(r,Z,K)&&(x=$n(16,{to:A,from:Z}),$e(Z,Z,!0,!1)),(x?Promise.resolve(x):k(A,Z)).catch(w=>Lt(w)?Lt(w,2)?w:Qe(w):q(w,A,Z)).then(w=>{if(w){if(Lt(w,2))return D(me({replace:h},S(w.to),{state:typeof w.to=="object"?me({},_e,w.to.state):_e,force:xe}),Y||A)}else w=C(A,Z,!0,h,_e);return P(A,Z,w),w})}function Q(T,Y){const K=g(T,Y);return K?Promise.reject(K):Promise.resolve()}function I(T){const Y=Dt.values().next().value;return Y&&typeof Y.runWithContext=="function"?Y.runWithContext(T):T()}function k(T,Y){let K;const[Z,_e,xe]=Pg(T,Y);K=os(Z.reverse(),"beforeRouteLeave",T,Y);for(const _ of Z)_.leaveGuards.forEach(A=>{K.push(Qt(A,T,Y))});const h=Q.bind(null,T,Y);return K.push(h),ht(K).then(()=>{K=[];for(const _ of s.list())K.push(Qt(_,T,Y));return K.push(h),ht(K)}).then(()=>{K=os(_e,"beforeRouteUpdate",T,Y);for(const _ of _e)_.updateGuards.forEach(A=>{K.push(Qt(A,T,Y))});return K.push(h),ht(K)}).then(()=>{K=[];for(const _ of xe)if(_.beforeEnter)if(At(_.beforeEnter))for(const A of _.beforeEnter)K.push(Qt(A,T,Y));else K.push(Qt(_.beforeEnter,T,Y));return K.push(h),ht(K)}).then(()=>(T.matched.forEach(_=>_.enterCallbacks={}),K=os(xe,"beforeRouteEnter",T,Y,I),K.push(h),ht(K))).then(()=>{K=[];for(const _ of i.list())K.push(Qt(_,T,Y));return K.push(h),ht(K)}).catch(_=>Lt(_,8)?_:Promise.reject(_))}function P(T,Y,K){l.list().forEach(Z=>I(()=>Z(T,Y,K)))}function C(T,Y,K,Z,_e){const xe=g(T,Y);if(xe)return xe;const h=Y===Nt,_=Pn?history.state:{};K&&(Z||h?o.replace(T.fullPath,me({scroll:h&&_&&_.scroll},_e)):o.push(T.fullPath,_e)),a.value=T,$e(T,Y,K,h),Qe()}let $;function le(){$||($=o.listen((T,Y,K)=>{if(!Gt.listening)return;const Z=y(T),_e=U(Z);if(_e){D(me(_e,{replace:!0,force:!0}),Z).catch(hr);return}u=Z;const xe=a.value;Pn&&Qh(El(xe.fullPath,K.delta),Ro()),k(Z,xe).catch(h=>Lt(h,12)?h:Lt(h,2)?(D(me(S(h.to),{force:!0}),Z).then(_=>{Lt(_,20)&&!K.delta&&K.type===Tr.pop&&o.go(-1,!1)}).catch(hr),Promise.reject()):(K.delta&&o.go(-K.delta,!1),q(h,Z,xe))).then(h=>{h=h||C(Z,xe,!1),h&&(K.delta&&!Lt(h,8)?o.go(-K.delta,!1):K.type===Tr.pop&&Lt(h,20)&&o.go(-1,!1)),P(Z,xe,h)}).catch(hr)}))}let he=rr(),G=rr(),M;function q(T,Y,K){Qe(T);const Z=G.list();return Z.length?Z.forEach(_e=>_e(T,Y,K)):console.error(T),Promise.reject(T)}function fe(){return M&&a.value!==Nt?Promise.resolve():new Promise((T,Y)=>{he.add([T,Y])})}function Qe(T){return M||(M=!T,le(),he.list().forEach(([Y,K])=>T?K(T):Y()),he.reset()),T}function $e(T,Y,K,Z){const{scrollBehavior:_e}=e;if(!Pn||!_e)return Promise.resolve();const xe=!K&&Zh(El(T.fullPath,0))||(Z||!K)&&history.state&&history.state.scroll||null;return an().then(()=>_e(T,Y,xe)).then(h=>h&&Xh(h)).catch(h=>q(h,T,Y))}const we=T=>o.go(T);let pt;const Dt=new Set,Gt={currentRoute:a,listening:!0,addRoute:d,removeRoute:m,clearRoutes:t.clearRoutes,hasRoute:b,getRoutes:v,resolve:y,options:e,push:E,replace:V,go:we,back:()=>we(-1),forward:()=>we(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:G.add,isReady:fe,install(T){const Y=this;T.component("RouterLink",Ag),T.component("RouterView",kg),T.config.globalProperties.$router=Y,Object.defineProperty(T.config.globalProperties,"$route",{enumerable:!0,get:()=>$t(a)}),Pn&&!pt&&a.value===Nt&&(pt=!0,E(o.location).catch(_e=>{}));const K={};for(const _e in Nt)Object.defineProperty(K,_e,{get:()=>a.value[_e],enumerable:!0});T.provide(Io,Y),T.provide(si,bu(K)),T.provide(Cs,a);const Z=T.unmount;Dt.add(T),T.unmount=function(){Dt.delete(T),Dt.size<1&&(u=Nt,$&&$(),$=null,a.value=Nt,pt=!1,M=!1),Z()}}};function ht(T){return T.reduce((Y,K)=>Y.then(()=>I(K)),Promise.resolve())}return Gt}function Pg(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;i<s;i++){const l=t.matched[i];l&&(e.matched.find(u=>Bn(u,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(u=>Bn(u,a))||o.push(a))}return[n,r,o]}function Gn(){return Je(Io)}function Kt(e){return Je(si)}var ii=Symbol(""),Pt=()=>{const e=Je(ii);if(!e)throw new Error("useClientData() is called without provider.");return e},xg=()=>Pt().pageComponent,qn=()=>Pt().pageData,xt=()=>Pt().pageFrontmatter,Dg=()=>Pt().pageHead,Rg=()=>Pt().pageLang,Ig=()=>Pt().pageLayout,Hr=()=>Pt().routeLocale,Lg=()=>Pt().routes,Cc=()=>Pt().siteData,li=()=>Pt().siteLocaleData,Vg=Symbol(""),Ts=dt(Ch),Nn=dt(Th),Tc=(e,t)=>{const n=gh(e,t);if(Nn.value[n])return n;const r=encodeURI(n);if(Nn.value[r])return r;const o=Ts.value[n]||Ts.value[r];return o||n},kr=(e,t)=>{const{pathname:n,hashAndQueries:r}=cc(e),o=Tc(n,t),s=o+r;return Nn.value[o]?{...Nn.value[o],path:s,notFound:!1}:{...Nn.value["/404.html"],path:s,notFound:!0}},Ng=(e,t)=>{const{pathname:n,hashAndQueries:r}=cc(e);return Tc(n,t)+r},Mg=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},Lo=pe({name:"RouteLink",props:{to:{type:String,required:!0},active:Boolean,activeClass:{type:String,default:"route-link-active"}},slots:Object,setup(e,{slots:t}){const n=Gn(),r=Kt(),o=N(()=>e.to.startsWith("#")||e.to.startsWith("?")?e.to:`/${Ng(e.to,r.path).substring(1)}`);return()=>Ee("a",{class:["route-link",{[e.activeClass]:e.active}],href:o.value,onClick:(s={})=>{Mg(s)&&n.push(e.to).catch()}},t.default())}}),Fg=pe({name:"AutoLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=md(e,"config"),r=Kt(),o=Cc(),s=N(()=>$r(n.value.link)),i=N(()=>n.value.target||(s.value?"_blank":void 0)),l=N(()=>i.value==="_blank"),a=N(()=>!s.value&&!l.value),u=N(()=>n.value.rel||(l.value?"noopener noreferrer":null)),c=N(()=>n.value.ariaLabel??n.value.text),f=N(()=>{if(n.value.exact)return!1;const d=Object.keys(o.value.locales);return d.length?d.every(m=>m!==n.value.link):n.value.link!=="/"}),p=N(()=>a.value?n.value.activeMatch?(n.value.activeMatch instanceof RegExp?n.value.activeMatch:new RegExp(n.value.activeMatch,"u")).test(r.path):f.value?r.path.startsWith(n.value.link):r.path===n.value.link:!1);return()=>{const{before:d,after:m,default:v}=t,b=(v==null?void 0:v(n.value))??[d==null?void 0:d(n.value),n.value.text,m==null?void 0:m(n.value)];return a.value?Ee(Lo,{class:"auto-link",to:n.value.link,active:p.value,"aria-label":c.value},()=>b):Ee("a",{class:"auto-link external-link",href:n.value.link,"aria-label":c.value,rel:u.value,target:i.value},b)}}}),ai=pe({name:"ClientOnly",setup(e,t){const n=ye(!1);return ot(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),ui=pe({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=xg(),n=N(()=>{if(!e.path)return t.value;const r=kr(e.path);return Ld(async()=>r.loader().then(({comp:o})=>o))});return()=>Ee(n.value)}}),Bg="Layout",$g="en-US",dn=Sn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const r=Et(t.description)?t.description:n.description,o=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return Eh(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||$g,resolvePageLayout:(e,t)=>{const n=Et(e.frontmatter.layout)?e.frontmatter.layout:Bg;if(!t[n])throw new Error(`[vuepress] Cannot resolve layout: ${n}`);return t[n]},resolveRouteLocale:(e,t)=>_h(e,decodeURI(t)),resolveSiteLocaleData:({base:e,locales:t,...n},r)=>{var o;return{...n,...t[r],head:[...((o=t[r])==null?void 0:o.head)??[],...n.head]}}}),zt=(e={})=>e,ci=e=>Do(e)?e:`/${dc(e)}`;function fi(e){return Hs()?(su(e),!0):!1}const ss=new WeakMap,Hg=(...e)=>{var t;const n=e[0],r=(t=Cn())==null?void 0:t.proxy;if(r==null&&!Bu())throw new Error("injectLocal must be called in setup");return r&&ss.has(r)&&n in ss.get(r)?ss.get(r)[n]:Je(...e)},di=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Ug=Object.prototype.toString,jg=e=>Ug.call(e)==="[object Object]",Hn=()=>{};function pi(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const kc=e=>e();function Wg(e,t={}){let n,r,o=Hn;const s=a=>{clearTimeout(a),o(),o=Hn};let i;return a=>{const u=Ve(e),c=Ve(t.maxWait);return n&&s(n),u<=0||c!==void 0&&c<=0?(r&&(s(r),r=null),Promise.resolve(a())):new Promise((f,p)=>{o=t.rejectOnCancel?p:f,i=a,c&&!r&&(r=setTimeout(()=>{n&&s(n),r=null,f(i())},c)),n=setTimeout(()=>{r&&s(r),r=null,f(a())},u)})}}function Kg(...e){let t=0,n,r=!0,o=Hn,s,i,l,a,u;!Fe(e[0])&&typeof e[0]=="object"?{delay:i,trailing:l=!0,leading:a=!0,rejectOnCancel:u=!1}=e[0]:[i,l=!0,a=!0,u=!1]=e;const c=()=>{n&&(clearTimeout(n),n=void 0,o(),o=Hn)};return p=>{const d=Ve(i),m=Date.now()-t,v=()=>s=p();return c(),d<=0?(t=Date.now(),v()):(m>d&&(a||!r)?(t=Date.now(),v()):l&&(s=new Promise((b,y)=>{o=u?y:b,n=setTimeout(()=>{t=Date.now(),r=!0,b(v()),c()},Math.max(0,d-m))})),!a&&!n&&(n=setTimeout(()=>r=!0,d)),r=!1,s)}}function zg(e=kc){const t=ye(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...s)=>{t.value&&e(...s)};return{isActive:Vr(t),pause:n,resume:r,eventFilter:o}}function Gg(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const r=t;t=void 0,r&&await r},n}function Nl(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function qg(e){return Cn()}function io(e){return Array.isArray(e)?e:[e]}function Oc(e,t=200,n={}){return pi(Wg(t,n),e)}function Yg(e,t=200,n=!1,r=!0,o=!1){return pi(Kg(t,n,r,o),e)}function Jg(e,t,n={}){const{eventFilter:r=kc,...o}=n;return Ke(e,pi(r,t),o)}function Xg(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:s,pause:i,resume:l,isActive:a}=zg(r);return{stop:Jg(e,t,{...o,eventFilter:s}),pause:i,resume:l,isActive:a}}function Vo(e,t=!0,n){qg()?ot(e,n):t?e():an(e)}function Qg(e,t,n={}){const{immediate:r=!0}=n,o=ye(!1);let s=null;function i(){s&&(clearTimeout(s),s=null)}function l(){o.value=!1,i()}function a(...u){i(),o.value=!0,s=setTimeout(()=>{o.value=!1,s=null,e(...u)},Ve(t))}return r&&(o.value=!0,di&&a()),fi(l),{isPending:Vr(o),start:a,stop:l}}function Pc(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Fe(e),s=ye(e);function i(l){if(arguments.length)return s.value=l,s.value;{const a=Ve(n);return s.value=s.value===a?Ve(r):a,s.value}}return o?i:[s,i]}function hi(e,t,n){return Ke(e,t,{...n,immediate:!0})}const Ut=di?window:void 0,xc=di?window.navigator:void 0;function Zt(e){var t;const n=Ve(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Xe(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},r=(l,a,u,c)=>(l.addEventListener(a,u,c),()=>l.removeEventListener(a,u,c)),o=N(()=>{const l=io(Ve(e[0])).filter(a=>a!=null);return l.every(a=>typeof a!="string")?l:void 0}),s=hi(()=>{var l,a;return[(a=(l=o.value)==null?void 0:l.map(u=>Zt(u)))!=null?a:[Ut].filter(u=>u!=null),io(Ve(o.value?e[1]:e[0])),io($t(o.value?e[2]:e[1])),Ve(o.value?e[3]:e[2])]},([l,a,u,c])=>{if(n(),!(l!=null&&l.length)||!(a!=null&&a.length)||!(u!=null&&u.length))return;const f=jg(c)?{...c}:c;t.push(...l.flatMap(p=>a.flatMap(d=>u.map(m=>r(p,d,m,f)))))},{flush:"post"}),i=()=>{s(),n()};return fi(n),i}function Zg(){const e=ye(!1),t=Cn();return t&&ot(()=>{e.value=!0},t),e}function No(e){const t=Zg();return N(()=>(t.value,!!e()))}const e_=Symbol("vueuse-ssr-width");function t_(){const e=Bu()?Hg(e_,null):null;return typeof e=="number"?e:void 0}function gi(e,t={}){const{window:n=Ut,ssrWidth:r=t_()}=t,o=No(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),s=ye(typeof r=="number"),i=dt(),l=ye(!1),a=u=>{l.value=u.matches};return hp(()=>{if(s.value){s.value=!o.value;const u=Ve(e).split(",");l.value=u.some(c=>{const f=c.includes("not all"),p=c.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),d=c.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let m=!!(p||d);return p&&m&&(m=r>=Nl(p[1])),d&&m&&(m=r<=Nl(d[1])),f?!m:m});return}o.value&&(i.value=n.matchMedia(Ve(e)),l.value=i.value.matches)}),Xe(i,"change",a,{passive:!0}),N(()=>l.value)}function Ml(e,t={}){const{controls:n=!1,navigator:r=xc}=t,o=No(()=>r&&"permissions"in r),s=dt(),i=typeof e=="string"?{name:e}:e,l=dt(),a=()=>{var c,f;l.value=(f=(c=s.value)==null?void 0:c.state)!=null?f:"prompt"};Xe(s,"change",a,{passive:!0});const u=Gg(async()=>{if(o.value){if(!s.value)try{s.value=await r.permissions.query(i)}catch{s.value=void 0}finally{a()}if(n)return de(s.value)}});return u(),n?{state:l,isSupported:o,query:u}:l}function n_(e={}){const{navigator:t=xc,read:n=!1,source:r,copiedDuring:o=1500,legacy:s=!1}=e,i=No(()=>t&&"clipboard"in t),l=Ml("clipboard-read"),a=Ml("clipboard-write"),u=N(()=>i.value||s),c=ye(""),f=ye(!1),p=Qg(()=>f.value=!1,o,{immediate:!1});function d(){let S=!(i.value&&y(l.value));if(!S)try{t.clipboard.readText().then(g=>{c.value=g})}catch{S=!0}S&&(c.value=b())}u.value&&n&&Xe(["copy","cut"],d,{passive:!0});async function m(S=Ve(r)){if(u.value&&S!=null){let g=!(i.value&&y(a.value));if(!g)try{await t.clipboard.writeText(S)}catch{g=!0}g&&v(S),c.value=S,f.value=!0,p.start()}}function v(S){const g=document.createElement("textarea");g.value=S??"",g.style.position="absolute",g.style.opacity="0",document.body.appendChild(g),g.select(),document.execCommand("copy"),g.remove()}function b(){var S,g,E;return(E=(g=(S=document==null?void 0:document.getSelection)==null?void 0:S.call(document))==null?void 0:g.toString())!=null?E:""}function y(S){return S==="granted"||S==="prompt"}return{isSupported:u,text:c,copied:f,copy:m}}const Yr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Jr="__vueuse_ssr_handlers__",r_=o_();function o_(){return Jr in Yr||(Yr[Jr]=Yr[Jr]||{}),Yr[Jr]}function s_(e,t){return r_[e]||t}function i_(e){return gi("(prefers-color-scheme: dark)",e)}function l_(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const a_={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Fl="vueuse-storage";function _i(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:u=!1,shallow:c,window:f=Ut,eventFilter:p,onError:d=P=>{console.error(P)},initOnMounted:m}=r,v=(c?dt:ye)(typeof t=="function"?t():t),b=N(()=>Ve(e));if(!n)try{n=s_("getDefaultStorage",()=>{var P;return(P=Ut)==null?void 0:P.localStorage})()}catch(P){d(P)}if(!n)return v;const y=Ve(t),S=l_(y),g=(o=r.serializer)!=null?o:a_[S],{pause:E,resume:V}=Xg(v,()=>D(v.value),{flush:s,deep:i,eventFilter:p});Ke(b,()=>I(),{flush:s}),f&&l&&Vo(()=>{n instanceof Storage?Xe(f,"storage",I,{passive:!0}):Xe(f,Fl,k),m&&I()}),m||I();function U(P,C){if(f){const $={key:b.value,oldValue:P,newValue:C,storageArea:n};f.dispatchEvent(n instanceof Storage?new StorageEvent("storage",$):new CustomEvent(Fl,{detail:$}))}}function D(P){try{const C=n.getItem(b.value);if(P==null)U(C,null),n.removeItem(b.value);else{const $=g.write(P);C!==$&&(n.setItem(b.value,$),U(C,$))}}catch(C){d(C)}}function Q(P){const C=P?P.newValue:n.getItem(b.value);if(C==null)return a&&y!=null&&n.setItem(b.value,g.write(y)),y;if(!P&&u){const $=g.read(C);return typeof u=="function"?u($,y):S==="object"&&!Array.isArray($)?{...y,...$}:$}else return typeof C!="string"?C:g.read(C)}function I(P){if(!(P&&P.storageArea!==n)){if(P&&P.key==null){v.value=y;return}if(!(P&&P.key!==b.value)){E();try{(P==null?void 0:P.newValue)!==g.write(v.value)&&(v.value=Q(P))}catch(C){d(C)}finally{P?an(V):V()}}}}function k(P){I(P.detail)}return v}function u_(e,t,n={}){const{window:r=Ut,...o}=n;let s;const i=No(()=>r&&"ResizeObserver"in r),l=()=>{s&&(s.disconnect(),s=void 0)},a=N(()=>{const f=Ve(e);return Array.isArray(f)?f.map(p=>Zt(p)):[Zt(f)]}),u=Ke(a,f=>{if(l(),i.value&&r){s=new ResizeObserver(t);for(const p of f)p&&s.observe(p,o)}},{immediate:!0,flush:"post"}),c=()=>{l(),u()};return fi(c),{isSupported:i,stop:c}}function c_(e,t={width:0,height:0},n={}){const{window:r=Ut,box:o="content-box"}=n,s=N(()=>{var f,p;return(p=(f=Zt(e))==null?void 0:f.namespaceURI)==null?void 0:p.includes("svg")}),i=ye(t.width),l=ye(t.height),{stop:a}=u_(e,([f])=>{const p=o==="border-box"?f.borderBoxSize:o==="content-box"?f.contentBoxSize:f.devicePixelContentBoxSize;if(r&&s.value){const d=Zt(e);if(d){const m=d.getBoundingClientRect();i.value=m.width,l.value=m.height}}else if(p){const d=io(p);i.value=d.reduce((m,{inlineSize:v})=>m+v,0),l.value=d.reduce((m,{blockSize:v})=>m+v,0)}else i.value=f.contentRect.width,l.value=f.contentRect.height},n);Vo(()=>{const f=Zt(e);f&&(i.value="offsetWidth"in f?f.offsetWidth:t.width,l.value="offsetHeight"in f?f.offsetHeight:t.height)});const u=Ke(()=>Zt(e),f=>{i.value=f?t.width:0,l.value=f?t.height:0});function c(){a(),u()}return{width:i,height:l,stop:c}}const Bl=1;function f_(e,t={}){const{throttle:n=0,idle:r=200,onStop:o=Hn,onScroll:s=Hn,offset:i={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:a="auto",window:u=Ut,onError:c=D=>{console.error(D)}}=t,f=ye(0),p=ye(0),d=N({get(){return f.value},set(D){v(D,void 0)}}),m=N({get(){return p.value},set(D){v(void 0,D)}});function v(D,Q){var I,k,P,C;if(!u)return;const $=Ve(e);if(!$)return;(P=$ instanceof Document?u.document.body:$)==null||P.scrollTo({top:(I=Ve(Q))!=null?I:m.value,left:(k=Ve(D))!=null?k:d.value,behavior:Ve(a)});const le=((C=$==null?void 0:$.document)==null?void 0:C.documentElement)||($==null?void 0:$.documentElement)||$;d!=null&&(f.value=le.scrollLeft),m!=null&&(p.value=le.scrollTop)}const b=ye(!1),y=Sn({left:!0,right:!1,top:!0,bottom:!1}),S=Sn({left:!1,right:!1,top:!1,bottom:!1}),g=D=>{b.value&&(b.value=!1,S.left=!1,S.right=!1,S.top=!1,S.bottom=!1,o(D))},E=Oc(g,n+r),V=D=>{var Q;if(!u)return;const I=((Q=D==null?void 0:D.document)==null?void 0:Q.documentElement)||(D==null?void 0:D.documentElement)||Zt(D),{display:k,flexDirection:P,direction:C}=getComputedStyle(I),$=C==="rtl"?-1:1,le=I.scrollLeft;S.left=le<f.value,S.right=le>f.value;const he=le*$<=(i.left||0),G=le*$+I.clientWidth>=I.scrollWidth-(i.right||0)-Bl;k==="flex"&&P==="row-reverse"?(y.left=G,y.right=he):(y.left=he,y.right=G),f.value=le;let M=I.scrollTop;D===u.document&&!M&&(M=u.document.body.scrollTop),S.top=M<p.value,S.bottom=M>p.value;const q=M<=(i.top||0),fe=M+I.clientHeight>=I.scrollHeight-(i.bottom||0)-Bl;k==="flex"&&P==="column-reverse"?(y.top=fe,y.bottom=q):(y.top=q,y.bottom=fe),p.value=M},U=D=>{var Q;if(!u)return;const I=(Q=D.target.documentElement)!=null?Q:D.target;V(I),b.value=!0,E(D),s(D)};return Xe(e,"scroll",n?Yg(U,n,!0,!1):U,l),Vo(()=>{try{const D=Ve(e);if(!D)return;V(D)}catch(D){c(D)}}),Xe(e,"scrollend",g,l),{x:d,y:m,isScrolling:b,arrivedState:y,directions:S,measure(){const D=Ve(e);u&&D&&V(D)}}}function d_(e={}){const{window:t=Ut,...n}=e;return f_(t,n)}function p_(e={}){const{window:t=Ut,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:s=!0,type:i="inner"}=e,l=ye(n),a=ye(r),u=()=>{if(t)if(i==="outer")l.value=t.outerWidth,a.value=t.outerHeight;else if(i==="visual"&&t.visualViewport){const{width:f,height:p,scale:d}=t.visualViewport;l.value=Math.round(f*d),a.value=Math.round(p*d)}else s?(l.value=t.innerWidth,a.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,a.value=t.document.documentElement.clientHeight)};u(),Vo(u);const c={passive:!0};if(Xe("resize",u,c),t&&i==="visual"&&t.visualViewport&&Xe(t.visualViewport,"resize",u,c),o){const f=gi("(orientation: portrait)");Ke(f,()=>u())}return{width:l,height:a}}const $l=async(e,t)=>{const{path:n,query:r}=e.currentRoute.value,{scrollBehavior:o}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:r,hash:t}),e.options.scrollBehavior=o},h_=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=Gn();Xe("scroll",Oc(()=>{var m,v;const i=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(i-0)<r){$l(o,"");return}const a=window.innerHeight+i,u=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),c=Math.abs(u-a)<r,f=Array.from(document.querySelectorAll(e)),d=Array.from(document.querySelectorAll(t)).filter(b=>f.some(y=>y.hash===b.hash));for(let b=0;b<d.length;b++){const y=d[b],S=d[b+1],g=i>=(((m=y.parentElement)==null?void 0:m.offsetTop)??0)-r,E=!S||i<(((v=S.parentElement)==null?void 0:v.offsetTop)??0)-r;if(!(g&&E))continue;const U=decodeURIComponent(o.currentRoute.value.hash),D=decodeURIComponent(y.hash);if(U===D)return;if(c){for(let Q=b+1;Q<d.length;Q++)if(U===decodeURIComponent(d[Q].hash))return}$l(o,D);return}},n))},g_="a.vp-sidebar-item",__=".header-anchor",m_=300,v_=5,y_=zt({setup(){h_({headerLinkSelector:g_,headerAnchorSelector:__,delay:m_,offset:v_})}}),b_=Object.freeze(Object.defineProperty({__proto__:null,default:y_},Symbol.toStringTag,{value:"Module"}));[...new Array(6)].map((e,t)=>`[vp-content] h${t+1}`).join(",");const Dc=(e,t)=>{var r;const n=(r=Cn())==null?void 0:r.appContext.components;return n?e in n||st(e)in n||Lr(st(e))in n:!1},E_=e=>new Promise(t=>{setTimeout(t,e)}),Rc=e=>{const t=Hr();return N(()=>e[t.value]??{})},S_=()=>{const e=Lg();return N(()=>Object.keys(e.value))},A_=e=>typeof e<"u",Ic=(e,t)=>Et(e)&&e.startsWith(t),{keys:w_}=Object,Lc=e=>Ic(e,"/")&&e[1]!=="/",Vc=e=>!ph(e)&&!$r(e);var C_={"/":{backToTop:"Вернуться к началу"},"/eng/":{backToTop:"Back to top"}};const T_=pe({name:"BackToTop",setup(){const e=xt(),t=Rc(C_),n=dt(),{height:r}=c_(n),{height:o}=p_(),{y:s}=d_(),i=N(()=>e.value.backToTop!==!1&&s.value>100),l=N(()=>s.value/(r.value-o.value)*100);return ot(()=>{n.value=document.body}),()=>Ee(ni,{name:"back-to-top"},()=>i.value?Ee("button",{type:"button",class:"vp-back-to-top-button","aria-label":t.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[Ee("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":l.value},Ee("svg",Ee("circle",{cx:"26",cy:"26",r:"24",fill:"none",stroke:"currentColor","stroke-width":"4","stroke-dasharray":`${Math.PI*l.value*.48} ${Math.PI*(100-l.value)*.48}`}))),Ee("div",{class:"back-to-top-icon"})]):null)}}),k_=zt({rootComponents:[T_]}),O_=Object.freeze(Object.defineProperty({__proto__:null,default:k_},Symbol.toStringTag,{value:"Module"})),P_=/language-(shellscript|shell|bash|sh|zsh)/,x_=({delay:e=500,duration:t=2e3,locales:n,selector:r,showInMobile:o,ignoreSelector:s=[],transform:i})=>{const l=gi("(max-width: 419px)"),a=N(()=>!l.value||o),u=Rc(n),c=qn(),f=b=>{var S;if(b.hasAttribute("copy-code"))return;const y=document.createElement("button");y.type="button",y.classList.add("vp-copy-code-button"),y.setAttribute("aria-label",u.value.copy),y.setAttribute("data-copied",u.value.copied),(S=b.parentElement)==null||S.insertBefore(y,b),b.setAttribute("copy-code","")};hi(()=>[c.value.path,a.value],async()=>{document.body.classList.toggle("no-copy-code",!a.value),a.value&&(await an(),await E_(e),document.querySelectorAll(r.join(",")).forEach(f))});const{copy:d}=n_({legacy:!0}),m=new WeakMap,v=async(b,y,S)=>{const g=y.cloneNode(!0);s.length&&g.querySelectorAll(s.join(",")).forEach(U=>{U.remove()}),i&&i(g);let E=g.textContent||"";if(P_.test(b.className)&&(E=E.replace(/^ *(\$|>) /gm,"")),await d(E),t<=0)return;S.classList.add("copied"),clearTimeout(m.get(S));const V=setTimeout(()=>{S.classList.remove("copied"),S.blur(),m.delete(S)},t);m.set(S,V)};Xe("click",b=>{const y=b.target;if(a.value&&y.matches('div[class*="language-"] > button.vp-copy-code-button')){const S=y.parentElement,g=y.nextElementSibling;if(!S||!g)return;v(S,g,y)}})};var D_=[],R_={"/":{copy:"Скопировать код",copied:"Скопировано"},"/eng/":{copy:"Copy code",copied:"Copied"}},I_=['[vp-content] div[class*="language-"] pre'];const L_=zt({setup:()=>{x_({selector:I_,ignoreSelector:D_,locales:R_,duration:2e3,delay:500,showInMobile:!1})}}),V_=Object.freeze(Object.defineProperty({__proto__:null,default:L_},Symbol.toStringTag,{value:"Module"})),N_=zt({setup(){Xe("beforeprint",()=>{document.querySelectorAll("details").forEach(e=>{e.open=!0})})}}),M_=Object.freeze(Object.defineProperty({__proto__:null,default:N_},Symbol.toStringTag,{value:"Module"}));/** * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT - */const Hl=(e,t)=>{e.classList.add(t)},Ul=(e,t)=>{e.classList.remove(t)},F_=e=>{var t;(t=e==null?void 0:e.parentNode)==null||t.removeChild(e)},is=(e,t,n)=>e<t?t:e>n?n:e,jl=e=>(-1+e)*100,B_=(()=>{const e=[],t=()=>{const n=e.shift();n&&n(t)};return n=>{e.push(n),e.length===1&&t()}})(),$_=e=>e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(t,n)=>n.toUpperCase()),Xr=(()=>{const e=["Webkit","O","Moz","ms"],t={},n=s=>{const{style:i}=document.body;if(s in i)return s;const l=s.charAt(0).toUpperCase()+s.slice(1);let a=e.length;for(;a--;){const u=`${e[a]}${l}`;if(u in i)return u}return s},r=s=>{const i=$_(s);return t[i]??(t[i]=n(i))},o=(s,i,l)=>{s.style[r(i)]=l};return(s,i)=>{for(const l in i){const a=i[l];Object.hasOwn(i,l)&&A_(a)&&o(s,l,a)}}})(),Vt={minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'<div class="bar" role="bar"></div>'},Le={percent:null,isRendered:()=>!!document.getElementById("nprogress"),set:e=>{const{speed:t,easing:n}=Vt,r=Le.isStarted(),o=is(e,Vt.minimum,1);Le.percent=o===1?null:o;const s=Le.render(!r),i=s.querySelector(Vt.barSelector);return s.offsetWidth,B_(l=>{Xr(i,{transform:`translate3d(${jl(o)}%,0,0)`,transition:`all ${t}ms ${n}`}),o===1?(Xr(s,{transition:"none",opacity:"1"}),s.offsetWidth,setTimeout(()=>{Xr(s,{transition:`all ${t}ms linear`,opacity:"0"}),setTimeout(()=>{Le.remove(),l()},t)},t)):setTimeout(()=>{l()},t)}),Le},isStarted:()=>typeof Le.percent=="number",start:()=>{Le.percent||Le.set(0);const e=()=>{setTimeout(()=>{Le.percent&&(Le.trickle(),e())},Vt.trickleSpeed)};return e(),Le},done:e=>!e&&!Le.percent?Le:Le.increase(.3+.5*Math.random()).set(1),increase:e=>{let{percent:t}=Le;return t?(t=is(t+(typeof e=="number"?e:(1-t)*is(Math.random()*t,.1,.95)),0,.994),Le.set(t)):Le.start()},trickle:()=>Le.increase(Math.random()*Vt.trickleRate),render:e=>{if(Le.isRendered())return document.getElementById("nprogress");Hl(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=Vt.template;const n=t.querySelector(Vt.barSelector),r=document.querySelector(Vt.parent),o=e?"-100":jl(Le.percent??0);return Xr(n,{transition:"all 0 linear",transform:`translate3d(${o}%,0,0)`}),r&&(r!==document.body&&Hl(r,"nprogress-custom-parent"),r.appendChild(t)),t},remove:()=>{Ul(document.documentElement,"nprogress-busy"),Ul(document.querySelector(Vt.parent),"nprogress-custom-parent"),F_(document.getElementById("nprogress"))}},H_=()=>{ot(()=>{const e=Gn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||Le.start()}),e.afterEach(n=>{t.add(n.path),Le.done()})})},U_=zt({setup(){H_()}}),j_=Object.freeze(Object.defineProperty({__proto__:null,default:U_},Symbol.toStringTag,{value:"Module"})),W_=({selector:e='div[class*="language-"].has-collapsed-lines > .collapsed-lines'}={})=>{Xe("click",t=>{const n=t.target;if(n.matches(e)){const r=n.parentElement;r!=null&&r.classList.toggle("collapsed")&&r.scrollIntoView({block:"center",behavior:"instant"})}})},K_={setup(){W_()}},z_=Object.freeze(Object.defineProperty({__proto__:null,default:K_},Symbol.toStringTag,{value:"Module"})),G_="VUEPRESS_CODE_TAB_STORE",Qr=_i(G_,{}),q_=pe({name:"CodeTabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:String},slots:Object,setup(e,{slots:t}){const n=ye(e.active),r=dt([]),o=()=>{e.tabId&&(Qr.value[e.tabId]=e.data[n.value].id)},s=(u=n.value)=>{n.value=u<r.value.length-1?u+1:0,r.value[n.value].focus()},i=(u=n.value)=>{n.value=u>0?u-1:r.value.length-1,r.value[n.value].focus()},l=(u,c)=>{u.key===" "||u.key==="Enter"?(u.preventDefault(),n.value=c):u.key==="ArrowRight"?(u.preventDefault(),s()):u.key==="ArrowLeft"&&(u.preventDefault(),i()),e.tabId&&(Qr.value[e.tabId]=e.data[n.value].id)},a=()=>{if(e.tabId){const u=e.data.findIndex(({id:c})=>Qr.value[e.tabId]===c);if(u!==-1)return u}return e.active};return ot(()=>{n.value=a(),Ke(()=>e.tabId&&Qr.value[e.tabId],(u,c)=>{if(e.tabId&&u!==c){const f=e.data.findIndex(({id:p})=>p===u);f!==-1&&(n.value=f)}})}),()=>e.data.length?Ee("div",{class:"vp-code-tabs"},[Ee("div",{class:"vp-code-tabs-nav",role:"tablist"},e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("button",{type:"button",ref:p=>{p&&(r.value[c]=p)},class:["vp-code-tab-nav",{active:f}],role:"tab","aria-controls":`codetab-${e.id}-${c}`,"aria-selected":f,onClick:()=>{n.value=c,o()},onKeydown:p=>{l(p,c)}},t[`title${c}`]({value:u,isActive:f}))})),e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("div",{class:["vp-code-tab",{active:f}],id:`codetab-${e.id}-${c}`,role:"tabpanel","aria-expanded":f},[Ee("div",{class:"vp-code-tab-title"},t[`title${c}`]({value:u,isActive:f})),t[`tab${c}`]({value:u,isActive:f})])})]):null}}),Y_="VUEPRESS_TAB_STORE",ls=_i(Y_,{}),J_=pe({name:"Tabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:String},slots:Object,setup(e,{slots:t}){const n=ye(e.active),r=dt([]),o=()=>{e.tabId&&(ls.value[e.tabId]=e.data[n.value].id)},s=(u=n.value)=>{n.value=u<r.value.length-1?u+1:0,r.value[n.value].focus()},i=(u=n.value)=>{n.value=u>0?u-1:r.value.length-1,r.value[n.value].focus()},l=(u,c)=>{u.key===" "||u.key==="Enter"?(u.preventDefault(),n.value=c):u.key==="ArrowRight"?(u.preventDefault(),s()):u.key==="ArrowLeft"&&(u.preventDefault(),i()),o()},a=()=>{if(e.tabId){const u=e.data.findIndex(({id:c})=>ls.value[e.tabId]===c);if(u!==-1)return u}return e.active};return ot(()=>{n.value=a(),Ke(()=>e.tabId&&ls.value[e.tabId],(u,c)=>{if(e.tabId&&u!==c){const f=e.data.findIndex(({id:p})=>p===u);f!==-1&&(n.value=f)}})}),()=>e.data.length?Ee("div",{class:"vp-tabs"},[Ee("div",{class:"vp-tabs-nav",role:"tablist"},e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("button",{type:"button",ref:p=>{p&&(r.value[c]=p)},class:["vp-tab-nav",{active:f}],role:"tab","aria-controls":`tab-${e.id}-${c}`,"aria-selected":f,onClick:()=>{n.value=c,o()},onKeydown:p=>{l(p,c)}},t[`title${c}`]({value:u,isActive:f}))})),e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("div",{class:["vp-tab",{active:f}],id:`tab-${e.id}-${c}`,role:"tabpanel","aria-expanded":f},[Ee("div",{class:"vp-tab-title"},t[`title${c}`]({value:u,isActive:f})),t[`tab${c}`]({value:u,isActive:f})])})]):null}}),X_={enhance:({app:e})=>{e.component("CodeTabs",q_),e.component("Tabs",J_)}},Q_=Object.freeze(Object.defineProperty({__proto__:null,default:X_},Symbol.toStringTag,{value:"Module"}));var Z_=Object.create,Nc=Object.defineProperty,em=Object.getOwnPropertyDescriptor,mi=Object.getOwnPropertyNames,tm=Object.getPrototypeOf,nm=Object.prototype.hasOwnProperty,rm=(e,t)=>function(){return e&&(t=(0,e[mi(e)[0]])(e=0)),t},om=(e,t)=>function(){return t||(0,e[mi(e)[0]])((t={exports:{}}).exports,t),t.exports},sm=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of mi(t))!nm.call(e,o)&&o!==n&&Nc(e,o,{get:()=>t[o],enumerable:!(r=em(t,o))||r.enumerable});return e},im=(e,t,n)=>(n=e!=null?Z_(tm(e)):{},sm(Nc(n,"default",{value:e,enumerable:!0}),e)),Ur=rm({"../../node_modules/.pnpm/tsup@8.3.5_@microsoft+api-extractor@7.48.1_@types+node@22.10.5__jiti@2.4.2_postcss@8.4.49_tsx_s7k37zks4wtn7x2grzma6lrsfa/node_modules/tsup/assets/esm_shims.js"(){}}),lm=om({"../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js"(e,t){Ur(),t.exports=r;function n(s){return s instanceof Buffer?Buffer.from(s):new s.constructor(s.buffer.slice(),s.byteOffset,s.length)}function r(s){if(s=s||{},s.circles)return o(s);const i=new Map;if(i.set(Date,f=>new Date(f)),i.set(Map,(f,p)=>new Map(a(Array.from(f),p))),i.set(Set,(f,p)=>new Set(a(Array.from(f),p))),s.constructorHandlers)for(const f of s.constructorHandlers)i.set(f[0],f[1]);let l=null;return s.proto?c:u;function a(f,p){const d=Object.keys(f),m=new Array(d.length);for(let v=0;v<d.length;v++){const b=d[v],y=f[b];typeof y!="object"||y===null?m[b]=y:y.constructor!==Object&&(l=i.get(y.constructor))?m[b]=l(y,p):ArrayBuffer.isView(y)?m[b]=n(y):m[b]=p(y)}return m}function u(f){if(typeof f!="object"||f===null)return f;if(Array.isArray(f))return a(f,u);if(f.constructor!==Object&&(l=i.get(f.constructor)))return l(f,u);const p={};for(const d in f){if(Object.hasOwnProperty.call(f,d)===!1)continue;const m=f[d];typeof m!="object"||m===null?p[d]=m:m.constructor!==Object&&(l=i.get(m.constructor))?p[d]=l(m,u):ArrayBuffer.isView(m)?p[d]=n(m):p[d]=u(m)}return p}function c(f){if(typeof f!="object"||f===null)return f;if(Array.isArray(f))return a(f,c);if(f.constructor!==Object&&(l=i.get(f.constructor)))return l(f,c);const p={};for(const d in f){const m=f[d];typeof m!="object"||m===null?p[d]=m:m.constructor!==Object&&(l=i.get(m.constructor))?p[d]=l(m,c):ArrayBuffer.isView(m)?p[d]=n(m):p[d]=c(m)}return p}}function o(s){const i=[],l=[],a=new Map;if(a.set(Date,d=>new Date(d)),a.set(Map,(d,m)=>new Map(c(Array.from(d),m))),a.set(Set,(d,m)=>new Set(c(Array.from(d),m))),s.constructorHandlers)for(const d of s.constructorHandlers)a.set(d[0],d[1]);let u=null;return s.proto?p:f;function c(d,m){const v=Object.keys(d),b=new Array(v.length);for(let y=0;y<v.length;y++){const S=v[y],g=d[S];if(typeof g!="object"||g===null)b[S]=g;else if(g.constructor!==Object&&(u=a.get(g.constructor)))b[S]=u(g,m);else if(ArrayBuffer.isView(g))b[S]=n(g);else{const E=i.indexOf(g);E!==-1?b[S]=l[E]:b[S]=m(g)}}return b}function f(d){if(typeof d!="object"||d===null)return d;if(Array.isArray(d))return c(d,f);if(d.constructor!==Object&&(u=a.get(d.constructor)))return u(d,f);const m={};i.push(d),l.push(m);for(const v in d){if(Object.hasOwnProperty.call(d,v)===!1)continue;const b=d[v];if(typeof b!="object"||b===null)m[v]=b;else if(b.constructor!==Object&&(u=a.get(b.constructor)))m[v]=u(b,f);else if(ArrayBuffer.isView(b))m[v]=n(b);else{const y=i.indexOf(b);y!==-1?m[v]=l[y]:m[v]=f(b)}}return i.pop(),l.pop(),m}function p(d){if(typeof d!="object"||d===null)return d;if(Array.isArray(d))return c(d,p);if(d.constructor!==Object&&(u=a.get(d.constructor)))return u(d,p);const m={};i.push(d),l.push(m);for(const v in d){const b=d[v];if(typeof b!="object"||b===null)m[v]=b;else if(b.constructor!==Object&&(u=a.get(b.constructor)))m[v]=u(b,p);else if(ArrayBuffer.isView(b))m[v]=n(b);else{const y=i.indexOf(b);y!==-1?m[v]=l[y]:m[v]=p(b)}}return i.pop(),l.pop(),m}}}});Ur();Ur();Ur();var Mc=typeof navigator<"u",J=typeof window<"u"?window:typeof globalThis<"u"?globalThis:typeof global<"u"?global:{};typeof J.chrome<"u"&&J.chrome.devtools;Mc&&(J.self,J.top);var Wl;typeof navigator<"u"&&((Wl=navigator.userAgent)==null||Wl.toLowerCase().includes("electron"));Ur();var am=im(lm()),um=/(?:^|[-_/])(\w)/g;function cm(e,t){return t?t.toUpperCase():""}function fm(e){return e&&`${e}`.replace(um,cm)}function dm(e,t){let n=e.replace(/^[a-z]:/i,"").replace(/\\/g,"/");n.endsWith(`index${t}`)&&(n=n.replace(`/index${t}`,t));const r=n.lastIndexOf("/"),o=n.substring(r+1);{const s=o.lastIndexOf(t);return o.substring(0,s)}}var Kl=(0,am.default)({circles:!0});const pm={trailing:!0};function Un(e,t=25,n={}){if(n={...pm,...n},!Number.isFinite(t))throw new TypeError("Expected `wait` to be a finite number");let r,o,s=[],i,l;const a=(u,c)=>(i=hm(e,u,c),i.finally(()=>{if(i=null,n.trailing&&l&&!o){const f=a(u,l);return l=null,f}}),i);return function(...u){return i?(n.trailing&&(l=u),i):new Promise(c=>{const f=!o&&n.leading;clearTimeout(o),o=setTimeout(()=>{o=null;const p=n.leading?r:a(this,u);for(const d of s)d(p);s=[]},t),f?(r=a(this,u),c(r)):s.push(c)})}}async function hm(e,t,n){return await e.apply(t,n)}function ks(e,t={},n){for(const r in e){const o=e[r],s=n?`${n}:${r}`:r;typeof o=="object"&&o!==null?ks(o,t,s):typeof o=="function"&&(t[s]=o)}return t}const gm={run:e=>e()},_m=()=>gm,Fc=typeof console.createTask<"u"?console.createTask:_m;function mm(e,t){const n=t.shift(),r=Fc(n);return e.reduce((o,s)=>o.then(()=>r.run(()=>s(...t))),Promise.resolve())}function vm(e,t){const n=t.shift(),r=Fc(n);return Promise.all(e.map(o=>r.run(()=>o(...t))))}function as(e,t){for(const n of[...e])n(t)}class ym{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(t,n,r={}){if(!t||typeof n!="function")return()=>{};const o=t;let s;for(;this._deprecatedHooks[t];)s=this._deprecatedHooks[t],t=s.to;if(s&&!r.allowDeprecated){let i=s.message;i||(i=`${o} hook has been deprecated`+(s.to?`, please use ${s.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(i)||(console.warn(i),this._deprecatedMessages.add(i))}if(!n.name)try{Object.defineProperty(n,"name",{get:()=>"_"+t.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[t]=this._hooks[t]||[],this._hooks[t].push(n),()=>{n&&(this.removeHook(t,n),n=void 0)}}hookOnce(t,n){let r,o=(...s)=>(typeof r=="function"&&r(),r=void 0,o=void 0,n(...s));return r=this.hook(t,o),r}removeHook(t,n){if(this._hooks[t]){const r=this._hooks[t].indexOf(n);r!==-1&&this._hooks[t].splice(r,1),this._hooks[t].length===0&&delete this._hooks[t]}}deprecateHook(t,n){this._deprecatedHooks[t]=typeof n=="string"?{to:n}:n;const r=this._hooks[t]||[];delete this._hooks[t];for(const o of r)this.hook(t,o)}deprecateHooks(t){Object.assign(this._deprecatedHooks,t);for(const n in t)this.deprecateHook(n,t[n])}addHooks(t){const n=ks(t),r=Object.keys(n).map(o=>this.hook(o,n[o]));return()=>{for(const o of r.splice(0,r.length))o()}}removeHooks(t){const n=ks(t);for(const r in n)this.removeHook(r,n[r])}removeAllHooks(){for(const t in this._hooks)delete this._hooks[t]}callHook(t,...n){return n.unshift(t),this.callHookWith(mm,t,...n)}callHookParallel(t,...n){return n.unshift(t),this.callHookWith(vm,t,...n)}callHookWith(t,n,...r){const o=this._before||this._after?{name:n,args:r,context:{}}:void 0;this._before&&as(this._before,o);const s=t(n in this._hooks?[...this._hooks[n]]:[],r);return s instanceof Promise?s.finally(()=>{this._after&&o&&as(this._after,o)}):(this._after&&o&&as(this._after,o),s)}beforeEach(t){return this._before=this._before||[],this._before.push(t),()=>{if(this._before!==void 0){const n=this._before.indexOf(t);n!==-1&&this._before.splice(n,1)}}}afterEach(t){return this._after=this._after||[],this._after.push(t),()=>{if(this._after!==void 0){const n=this._after.indexOf(t);n!==-1&&this._after.splice(n,1)}}}}function Bc(){return new ym}var bm=Object.create,$c=Object.defineProperty,Em=Object.getOwnPropertyDescriptor,vi=Object.getOwnPropertyNames,Sm=Object.getPrototypeOf,Am=Object.prototype.hasOwnProperty,wm=(e,t)=>function(){return e&&(t=(0,e[vi(e)[0]])(e=0)),t},Hc=(e,t)=>function(){return t||(0,e[vi(e)[0]])((t={exports:{}}).exports,t),t.exports},Cm=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of vi(t))!Am.call(e,o)&&o!==n&&$c(e,o,{get:()=>t[o],enumerable:!(r=Em(t,o))||r.enumerable});return e},Tm=(e,t,n)=>(n=e!=null?bm(Sm(e)):{},Cm($c(n,"default",{value:e,enumerable:!0}),e)),O=wm({"../../node_modules/.pnpm/tsup@8.3.5_@microsoft+api-extractor@7.48.1_@types+node@22.10.5__jiti@2.4.2_postcss@8.4.49_tsx_s7k37zks4wtn7x2grzma6lrsfa/node_modules/tsup/assets/esm_shims.js"(){}}),km=Hc({"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js"(e,t){O(),function(n){var r={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"Ae",Å:"A",Æ:"AE",Ç:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"Oe",Ő:"O",Ø:"O",Ù:"U",Ú:"U",Û:"U",Ü:"Ue",Ű:"U",Ý:"Y",Þ:"TH",ß:"ss",à:"a",á:"a",â:"a",ã:"a",ä:"ae",å:"a",æ:"ae",ç:"c",è:"e",é:"e",ê:"e",ë:"e",ì:"i",í:"i",î:"i",ï:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"oe",ő:"o",ø:"o",ù:"u",ú:"u",û:"u",ü:"ue",ű:"u",ý:"y",þ:"th",ÿ:"y","ẞ":"SS",ا:"a",أ:"a",إ:"i",آ:"aa",ؤ:"u",ئ:"e",ء:"a",ب:"b",ت:"t",ث:"th",ج:"j",ح:"h",خ:"kh",د:"d",ذ:"th",ر:"r",ز:"z",س:"s",ش:"sh",ص:"s",ض:"dh",ط:"t",ظ:"z",ع:"a",غ:"gh",ف:"f",ق:"q",ك:"k",ل:"l",م:"m",ن:"n",ه:"h",و:"w",ي:"y",ى:"a",ة:"h",ﻻ:"la",ﻷ:"laa",ﻹ:"lai",ﻵ:"laa",گ:"g",چ:"ch",پ:"p",ژ:"zh",ک:"k",ی:"y","َ":"a","ً":"an","ِ":"e","ٍ":"en","ُ":"u","ٌ":"on","ْ":"","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9",က:"k",ခ:"kh",ဂ:"g",ဃ:"ga",င:"ng",စ:"s",ဆ:"sa",ဇ:"z","စျ":"za",ည:"ny",ဋ:"t",ဌ:"ta",ဍ:"d",ဎ:"da",ဏ:"na",တ:"t",ထ:"ta",ဒ:"d",ဓ:"da",န:"n",ပ:"p",ဖ:"pa",ဗ:"b",ဘ:"ba",မ:"m",ယ:"y",ရ:"ya",လ:"l",ဝ:"w",သ:"th",ဟ:"h",ဠ:"la",အ:"a","ြ":"y","ျ":"ya","ွ":"w","ြွ":"yw","ျွ":"ywa","ှ":"h",ဧ:"e","၏":"-e",ဣ:"i",ဤ:"-i",ဉ:"u",ဦ:"-u",ဩ:"aw","သြော":"aw",ဪ:"aw","၀":"0","၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","္":"","့":"","း":"",č:"c",ď:"d",ě:"e",ň:"n",ř:"r",š:"s",ť:"t",ů:"u",ž:"z",Č:"C",Ď:"D",Ě:"E",Ň:"N",Ř:"R",Š:"S",Ť:"T",Ů:"U",Ž:"Z",ހ:"h",ށ:"sh",ނ:"n",ރ:"r",ބ:"b",ޅ:"lh",ކ:"k",އ:"a",ވ:"v",މ:"m",ފ:"f",ދ:"dh",ތ:"th",ލ:"l",ގ:"g",ޏ:"gn",ސ:"s",ޑ:"d",ޒ:"z",ޓ:"t",ޔ:"y",ޕ:"p",ޖ:"j",ޗ:"ch",ޘ:"tt",ޙ:"hh",ޚ:"kh",ޛ:"th",ޜ:"z",ޝ:"sh",ޞ:"s",ޟ:"d",ޠ:"t",ޡ:"z",ޢ:"a",ޣ:"gh",ޤ:"q",ޥ:"w","ަ":"a","ާ":"aa","ި":"i","ީ":"ee","ު":"u","ޫ":"oo","ެ":"e","ޭ":"ey","ޮ":"o","ޯ":"oa","ް":"",ა:"a",ბ:"b",გ:"g",დ:"d",ე:"e",ვ:"v",ზ:"z",თ:"t",ი:"i",კ:"k",ლ:"l",მ:"m",ნ:"n",ო:"o",პ:"p",ჟ:"zh",რ:"r",ს:"s",ტ:"t",უ:"u",ფ:"p",ქ:"k",ღ:"gh",ყ:"q",შ:"sh",ჩ:"ch",ც:"ts",ძ:"dz",წ:"ts",ჭ:"ch",ხ:"kh",ჯ:"j",ჰ:"h",α:"a",β:"v",γ:"g",δ:"d",ε:"e",ζ:"z",η:"i",θ:"th",ι:"i",κ:"k",λ:"l",μ:"m",ν:"n",ξ:"ks",ο:"o",π:"p",ρ:"r",σ:"s",τ:"t",υ:"y",φ:"f",χ:"x",ψ:"ps",ω:"o",ά:"a",έ:"e",ί:"i",ό:"o",ύ:"y",ή:"i",ώ:"o",ς:"s",ϊ:"i",ΰ:"y",ϋ:"y",ΐ:"i",Α:"A",Β:"B",Γ:"G",Δ:"D",Ε:"E",Ζ:"Z",Η:"I",Θ:"TH",Ι:"I",Κ:"K",Λ:"L",Μ:"M",Ν:"N",Ξ:"KS",Ο:"O",Π:"P",Ρ:"R",Σ:"S",Τ:"T",Υ:"Y",Φ:"F",Χ:"X",Ψ:"PS",Ω:"O",Ά:"A",Έ:"E",Ί:"I",Ό:"O",Ύ:"Y",Ή:"I",Ώ:"O",Ϊ:"I",Ϋ:"Y",ā:"a",ē:"e",ģ:"g",ī:"i",ķ:"k",ļ:"l",ņ:"n",ū:"u",Ā:"A",Ē:"E",Ģ:"G",Ī:"I",Ķ:"k",Ļ:"L",Ņ:"N",Ū:"U",Ќ:"Kj",ќ:"kj",Љ:"Lj",љ:"lj",Њ:"Nj",њ:"nj",Тс:"Ts",тс:"ts",ą:"a",ć:"c",ę:"e",ł:"l",ń:"n",ś:"s",ź:"z",ż:"z",Ą:"A",Ć:"C",Ę:"E",Ł:"L",Ń:"N",Ś:"S",Ź:"Z",Ż:"Z",Є:"Ye",І:"I",Ї:"Yi",Ґ:"G",є:"ye",і:"i",ї:"yi",ґ:"g",ă:"a",Ă:"A",ș:"s",Ș:"S",ț:"t",Ț:"T",ţ:"t",Ţ:"T",а:"a",б:"b",в:"v",г:"g",д:"d",е:"e",ё:"yo",ж:"zh",з:"z",и:"i",й:"i",к:"k",л:"l",м:"m",н:"n",о:"o",п:"p",р:"r",с:"s",т:"t",у:"u",ф:"f",х:"kh",ц:"c",ч:"ch",ш:"sh",щ:"sh",ъ:"",ы:"y",ь:"",э:"e",ю:"yu",я:"ya",А:"A",Б:"B",В:"V",Г:"G",Д:"D",Е:"E",Ё:"Yo",Ж:"Zh",З:"Z",И:"I",Й:"I",К:"K",Л:"L",М:"M",Н:"N",О:"O",П:"P",Р:"R",С:"S",Т:"T",У:"U",Ф:"F",Х:"Kh",Ц:"C",Ч:"Ch",Ш:"Sh",Щ:"Sh",Ъ:"",Ы:"Y",Ь:"",Э:"E",Ю:"Yu",Я:"Ya",ђ:"dj",ј:"j",ћ:"c",џ:"dz",Ђ:"Dj",Ј:"j",Ћ:"C",Џ:"Dz",ľ:"l",ĺ:"l",ŕ:"r",Ľ:"L",Ĺ:"L",Ŕ:"R",ş:"s",Ş:"S",ı:"i",İ:"I",ğ:"g",Ğ:"G",ả:"a",Ả:"A",ẳ:"a",Ẳ:"A",ẩ:"a",Ẩ:"A",đ:"d",Đ:"D",ẹ:"e",Ẹ:"E",ẽ:"e",Ẽ:"E",ẻ:"e",Ẻ:"E",ế:"e",Ế:"E",ề:"e",Ề:"E",ệ:"e",Ệ:"E",ễ:"e",Ễ:"E",ể:"e",Ể:"E",ỏ:"o",ọ:"o",Ọ:"o",ố:"o",Ố:"O",ồ:"o",Ồ:"O",ổ:"o",Ổ:"O",ộ:"o",Ộ:"O",ỗ:"o",Ỗ:"O",ơ:"o",Ơ:"O",ớ:"o",Ớ:"O",ờ:"o",Ờ:"O",ợ:"o",Ợ:"O",ỡ:"o",Ỡ:"O",Ở:"o",ở:"o",ị:"i",Ị:"I",ĩ:"i",Ĩ:"I",ỉ:"i",Ỉ:"i",ủ:"u",Ủ:"U",ụ:"u",Ụ:"U",ũ:"u",Ũ:"U",ư:"u",Ư:"U",ứ:"u",Ứ:"U",ừ:"u",Ừ:"U",ự:"u",Ự:"U",ữ:"u",Ữ:"U",ử:"u",Ử:"ư",ỷ:"y",Ỷ:"y",ỳ:"y",Ỳ:"Y",ỵ:"y",Ỵ:"Y",ỹ:"y",Ỹ:"Y",ạ:"a",Ạ:"A",ấ:"a",Ấ:"A",ầ:"a",Ầ:"A",ậ:"a",Ậ:"A",ẫ:"a",Ẫ:"A",ắ:"a",Ắ:"A",ằ:"a",Ằ:"A",ặ:"a",Ặ:"A",ẵ:"a",Ẵ:"A","⓪":"0","①":"1","②":"2","③":"3","④":"4","⑤":"5","⑥":"6","⑦":"7","⑧":"8","⑨":"9","⑩":"10","⑪":"11","⑫":"12","⑬":"13","⑭":"14","⑮":"15","⑯":"16","⑰":"17","⑱":"18","⑲":"18","⑳":"18","⓵":"1","⓶":"2","⓷":"3","⓸":"4","⓹":"5","⓺":"6","⓻":"7","⓼":"8","⓽":"9","⓾":"10","⓿":"0","⓫":"11","⓬":"12","⓭":"13","⓮":"14","⓯":"15","⓰":"16","⓱":"17","⓲":"18","⓳":"19","⓴":"20","Ⓐ":"A","Ⓑ":"B","Ⓒ":"C","Ⓓ":"D","Ⓔ":"E","Ⓕ":"F","Ⓖ":"G","Ⓗ":"H","Ⓘ":"I","Ⓙ":"J","Ⓚ":"K","Ⓛ":"L","Ⓜ":"M","Ⓝ":"N","Ⓞ":"O","Ⓟ":"P","Ⓠ":"Q","Ⓡ":"R","Ⓢ":"S","Ⓣ":"T","Ⓤ":"U","Ⓥ":"V","Ⓦ":"W","Ⓧ":"X","Ⓨ":"Y","Ⓩ":"Z","ⓐ":"a","ⓑ":"b","ⓒ":"c","ⓓ":"d","ⓔ":"e","ⓕ":"f","ⓖ":"g","ⓗ":"h","ⓘ":"i","ⓙ":"j","ⓚ":"k","ⓛ":"l","ⓜ":"m","ⓝ":"n","ⓞ":"o","ⓟ":"p","ⓠ":"q","ⓡ":"r","ⓢ":"s","ⓣ":"t","ⓤ":"u","ⓦ":"v","ⓥ":"w","ⓧ":"x","ⓨ":"y","ⓩ":"z","“":'"',"”":'"',"‘":"'","’":"'","∂":"d",ƒ:"f","™":"(TM)","©":"(C)",œ:"oe",Œ:"OE","®":"(R)","†":"+","℠":"(SM)","…":"...","˚":"o",º:"o",ª:"a","•":"*","၊":",","။":".",$:"USD","€":"EUR","₢":"BRN","₣":"FRF","£":"GBP","₤":"ITL","₦":"NGN","₧":"ESP","₩":"KRW","₪":"ILS","₫":"VND","₭":"LAK","₮":"MNT","₯":"GRD","₱":"ARS","₲":"PYG","₳":"ARA","₴":"UAH","₵":"GHS","¢":"cent","¥":"CNY",元:"CNY",円:"YEN","﷼":"IRR","₠":"EWE","฿":"THB","₨":"INR","₹":"INR","₰":"PF","₺":"TRY","؋":"AFN","₼":"AZN",лв:"BGN","៛":"KHR","₡":"CRC","₸":"KZT",ден:"MKD",zł:"PLN","₽":"RUB","₾":"GEL"},o=["်","ް"],s={"ာ":"a","ါ":"a","ေ":"e","ဲ":"e","ိ":"i","ီ":"i","ို":"o","ု":"u","ူ":"u","ေါင်":"aung","ော":"aw","ော်":"aw","ေါ":"aw","ေါ်":"aw","်":"်","က်":"et","ိုက်":"aik","ောက်":"auk","င်":"in","ိုင်":"aing","ောင်":"aung","စ်":"it","ည်":"i","တ်":"at","ိတ်":"eik","ုတ်":"ok","ွတ်":"ut","ေတ်":"it","ဒ်":"d","ိုဒ်":"ok","ုဒ်":"ait","န်":"an","ာန်":"an","ိန်":"ein","ုန်":"on","ွန်":"un","ပ်":"at","ိပ်":"eik","ုပ်":"ok","ွပ်":"ut","န်ုပ်":"nub","မ်":"an","ိမ်":"ein","ုမ်":"on","ွမ်":"un","ယ်":"e","ိုလ်":"ol","ဉ်":"in","ံ":"an","ိံ":"ein","ုံ":"on","ައް":"ah","ަށް":"ah"},i={en:{},az:{ç:"c",ə:"e",ğ:"g",ı:"i",ö:"o",ş:"s",ü:"u",Ç:"C",Ə:"E",Ğ:"G",İ:"I",Ö:"O",Ş:"S",Ü:"U"},cs:{č:"c",ď:"d",ě:"e",ň:"n",ř:"r",š:"s",ť:"t",ů:"u",ž:"z",Č:"C",Ď:"D",Ě:"E",Ň:"N",Ř:"R",Š:"S",Ť:"T",Ů:"U",Ž:"Z"},fi:{ä:"a",Ä:"A",ö:"o",Ö:"O"},hu:{ä:"a",Ä:"A",ö:"o",Ö:"O",ü:"u",Ü:"U",ű:"u",Ű:"U"},lt:{ą:"a",č:"c",ę:"e",ė:"e",į:"i",š:"s",ų:"u",ū:"u",ž:"z",Ą:"A",Č:"C",Ę:"E",Ė:"E",Į:"I",Š:"S",Ų:"U",Ū:"U"},lv:{ā:"a",č:"c",ē:"e",ģ:"g",ī:"i",ķ:"k",ļ:"l",ņ:"n",š:"s",ū:"u",ž:"z",Ā:"A",Č:"C",Ē:"E",Ģ:"G",Ī:"i",Ķ:"k",Ļ:"L",Ņ:"N",Š:"S",Ū:"u",Ž:"Z"},pl:{ą:"a",ć:"c",ę:"e",ł:"l",ń:"n",ó:"o",ś:"s",ź:"z",ż:"z",Ą:"A",Ć:"C",Ę:"e",Ł:"L",Ń:"N",Ó:"O",Ś:"S",Ź:"Z",Ż:"Z"},sv:{ä:"a",Ä:"A",ö:"o",Ö:"O"},sk:{ä:"a",Ä:"A"},sr:{љ:"lj",њ:"nj",Љ:"Lj",Њ:"Nj",đ:"dj",Đ:"Dj"},tr:{Ü:"U",Ö:"O",ü:"u",ö:"o"}},l={ar:{"∆":"delta","∞":"la-nihaya","♥":"hob","&":"wa","|":"aw","<":"aqal-men",">":"akbar-men","∑":"majmou","¤":"omla"},az:{},ca:{"∆":"delta","∞":"infinit","♥":"amor","&":"i","|":"o","<":"menys que",">":"mes que","∑":"suma dels","¤":"moneda"},cs:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"nebo","<":"mensi nez",">":"vetsi nez","∑":"soucet","¤":"mena"},de:{"∆":"delta","∞":"unendlich","♥":"Liebe","&":"und","|":"oder","<":"kleiner als",">":"groesser als","∑":"Summe von","¤":"Waehrung"},dv:{"∆":"delta","∞":"kolunulaa","♥":"loabi","&":"aai","|":"noonee","<":"ah vure kuda",">":"ah vure bodu","∑":"jumula","¤":"faisaa"},en:{"∆":"delta","∞":"infinity","♥":"love","&":"and","|":"or","<":"less than",">":"greater than","∑":"sum","¤":"currency"},es:{"∆":"delta","∞":"infinito","♥":"amor","&":"y","|":"u","<":"menos que",">":"mas que","∑":"suma de los","¤":"moneda"},fa:{"∆":"delta","∞":"bi-nahayat","♥":"eshgh","&":"va","|":"ya","<":"kamtar-az",">":"bishtar-az","∑":"majmooe","¤":"vahed"},fi:{"∆":"delta","∞":"aarettomyys","♥":"rakkaus","&":"ja","|":"tai","<":"pienempi kuin",">":"suurempi kuin","∑":"summa","¤":"valuutta"},fr:{"∆":"delta","∞":"infiniment","♥":"Amour","&":"et","|":"ou","<":"moins que",">":"superieure a","∑":"somme des","¤":"monnaie"},ge:{"∆":"delta","∞":"usasruloba","♥":"siqvaruli","&":"da","|":"an","<":"naklebi",">":"meti","∑":"jami","¤":"valuta"},gr:{},hu:{"∆":"delta","∞":"vegtelen","♥":"szerelem","&":"es","|":"vagy","<":"kisebb mint",">":"nagyobb mint","∑":"szumma","¤":"penznem"},it:{"∆":"delta","∞":"infinito","♥":"amore","&":"e","|":"o","<":"minore di",">":"maggiore di","∑":"somma","¤":"moneta"},lt:{"∆":"delta","∞":"begalybe","♥":"meile","&":"ir","|":"ar","<":"maziau nei",">":"daugiau nei","∑":"suma","¤":"valiuta"},lv:{"∆":"delta","∞":"bezgaliba","♥":"milestiba","&":"un","|":"vai","<":"mazak neka",">":"lielaks neka","∑":"summa","¤":"valuta"},my:{"∆":"kwahkhyaet","∞":"asaonasme","♥":"akhyait","&":"nhin","|":"tho","<":"ngethaw",">":"kyithaw","∑":"paungld","¤":"ngwekye"},mk:{},nl:{"∆":"delta","∞":"oneindig","♥":"liefde","&":"en","|":"of","<":"kleiner dan",">":"groter dan","∑":"som","¤":"valuta"},pl:{"∆":"delta","∞":"nieskonczonosc","♥":"milosc","&":"i","|":"lub","<":"mniejsze niz",">":"wieksze niz","∑":"suma","¤":"waluta"},pt:{"∆":"delta","∞":"infinito","♥":"amor","&":"e","|":"ou","<":"menor que",">":"maior que","∑":"soma","¤":"moeda"},ro:{"∆":"delta","∞":"infinit","♥":"dragoste","&":"si","|":"sau","<":"mai mic ca",">":"mai mare ca","∑":"suma","¤":"valuta"},ru:{"∆":"delta","∞":"beskonechno","♥":"lubov","&":"i","|":"ili","<":"menshe",">":"bolshe","∑":"summa","¤":"valjuta"},sk:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"alebo","<":"menej ako",">":"viac ako","∑":"sucet","¤":"mena"},sr:{},tr:{"∆":"delta","∞":"sonsuzluk","♥":"ask","&":"ve","|":"veya","<":"kucuktur",">":"buyuktur","∑":"toplam","¤":"para birimi"},uk:{"∆":"delta","∞":"bezkinechnist","♥":"lubov","&":"i","|":"abo","<":"menshe",">":"bilshe","∑":"suma","¤":"valjuta"},vn:{"∆":"delta","∞":"vo cuc","♥":"yeu","&":"va","|":"hoac","<":"nho hon",">":"lon hon","∑":"tong","¤":"tien te"}},a=[";","?",":","@","&","=","+","$",",","/"].join(""),u=[";","?",":","@","&","=","+","$",","].join(""),c=[".","!","~","*","'","(",")"].join(""),f=function(b,y){var S="-",g="",E="",V=!0,U={},D,Q,I,k,P,C,$,le,he,G,M,q,fe,Qe,$e="";if(typeof b!="string")return"";if(typeof y=="string"&&(S=y),$=l.en,le=i.en,typeof y=="object"){D=y.maintainCase||!1,U=y.custom&&typeof y.custom=="object"?y.custom:U,I=+y.truncate>1&&y.truncate||!1,k=y.uric||!1,P=y.uricNoSlash||!1,C=y.mark||!1,V=!(y.symbols===!1||y.lang===!1),S=y.separator||S,k&&($e+=a),P&&($e+=u),C&&($e+=c),$=y.lang&&l[y.lang]&&V?l[y.lang]:V?l.en:{},le=y.lang&&i[y.lang]?i[y.lang]:y.lang===!1||y.lang===!0?{}:i.en,y.titleCase&&typeof y.titleCase.length=="number"&&Array.prototype.toString.call(y.titleCase)?(y.titleCase.forEach(function(we){U[we+""]=we+""}),Q=!0):Q=!!y.titleCase,y.custom&&typeof y.custom.length=="number"&&Array.prototype.toString.call(y.custom)&&y.custom.forEach(function(we){U[we+""]=we+""}),Object.keys(U).forEach(function(we){var pt;we.length>1?pt=new RegExp("\\b"+d(we)+"\\b","gi"):pt=new RegExp(d(we),"gi"),b=b.replace(pt,U[we])});for(M in U)$e+=M}for($e+=S,$e=d($e),b=b.replace(/(^\s+|\s+$)/g,""),fe=!1,Qe=!1,G=0,q=b.length;G<q;G++)M=b[G],m(M,U)?fe=!1:le[M]?(M=fe&&le[M].match(/[A-Za-z0-9]/)?" "+le[M]:le[M],fe=!1):M in r?(G+1<q&&o.indexOf(b[G+1])>=0?(E+=M,M=""):Qe===!0?(M=s[E]+r[M],E=""):M=fe&&r[M].match(/[A-Za-z0-9]/)?" "+r[M]:r[M],fe=!1,Qe=!1):M in s?(E+=M,M="",G===q-1&&(M=s[E]),Qe=!0):$[M]&&!(k&&a.indexOf(M)!==-1)&&!(P&&u.indexOf(M)!==-1)?(M=fe||g.substr(-1).match(/[A-Za-z0-9]/)?S+$[M]:$[M],M+=b[G+1]!==void 0&&b[G+1].match(/[A-Za-z0-9]/)?S:"",fe=!0):(Qe===!0?(M=s[E]+M,E="",Qe=!1):fe&&(/[A-Za-z0-9]/.test(M)||g.substr(-1).match(/A-Za-z0-9]/))&&(M=" "+M),fe=!1),g+=M.replace(new RegExp("[^\\w\\s"+$e+"_-]","g"),S);return Q&&(g=g.replace(/(\w)(\S*)/g,function(we,pt,Dt){var Gt=pt.toUpperCase()+(Dt!==null?Dt:"");return Object.keys(U).indexOf(Gt.toLowerCase())<0?Gt:Gt.toLowerCase()})),g=g.replace(/\s+/g,S).replace(new RegExp("\\"+S+"+","g"),S).replace(new RegExp("(^\\"+S+"+|\\"+S+"+$)","g"),""),I&&g.length>I&&(he=g.charAt(I)===S,g=g.slice(0,I),he||(g=g.slice(0,g.lastIndexOf(S)))),!D&&!Q&&(g=g.toLowerCase()),g},p=function(b){return function(S){return f(S,b)}},d=function(b){return b.replace(/[-\\^$*+?.()|[\]{}\/]/g,"\\$&")},m=function(v,b){for(var y in b)if(b[y]===v)return!0};if(typeof t<"u"&&t.exports)t.exports=f,t.exports.createSlug=p;else if(typeof define<"u"&&define.amd)define([],function(){return f});else try{if(n.getSlug||n.createSlug)throw"speakingurl: globals exists /(getSlug|createSlug)/";n.getSlug=f,n.createSlug=p}catch{}}(e)}}),Om=Hc({"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js"(e,t){O(),t.exports=km()}});O();O();O();O();O();O();O();O();function Pm(e){var t;const n=e.name||e._componentTag||e.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__||e.__name;return n==="index"&&((t=e.__file)!=null&&t.endsWith("index.vue"))?"":n}function xm(e){const t=e.__file;if(t)return fm(dm(t,".vue"))}function zl(e,t){return e.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__=t,t}function yi(e){if(e.__VUE_DEVTOOLS_NEXT_APP_RECORD__)return e.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(e.root)return e.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__}function Uc(e){var t,n;const r=(t=e.subTree)==null?void 0:t.type,o=yi(e);return o?((n=o==null?void 0:o.types)==null?void 0:n.Fragment)===r:!1}function Mo(e){var t,n,r;const o=Pm((e==null?void 0:e.type)||{});if(o)return o;if((e==null?void 0:e.root)===e)return"Root";for(const i in(n=(t=e.parent)==null?void 0:t.type)==null?void 0:n.components)if(e.parent.type.components[i]===(e==null?void 0:e.type))return zl(e,i);for(const i in(r=e.appContext)==null?void 0:r.components)if(e.appContext.components[i]===(e==null?void 0:e.type))return zl(e,i);const s=xm((e==null?void 0:e.type)||{});return s||"Anonymous Component"}function Dm(e){var t,n,r;const o=(r=(n=(t=e==null?void 0:e.appContext)==null?void 0:t.app)==null?void 0:n.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__)!=null?r:0,s=e===(e==null?void 0:e.root)?"root":e.uid;return`${o}:${s}`}function Os(e,t){return t=t||`${e.id}:root`,e.instanceMap.get(t)||e.instanceMap.get(":root")}function Rm(){const e={top:0,bottom:0,left:0,right:0,get width(){return e.right-e.left},get height(){return e.bottom-e.top}};return e}var Zr;function Im(e){return Zr||(Zr=document.createRange()),Zr.selectNode(e),Zr.getBoundingClientRect()}function Lm(e){const t=Rm();if(!e.children)return t;for(let n=0,r=e.children.length;n<r;n++){const o=e.children[n];let s;if(o.component)s=wn(o.component);else if(o.el){const i=o.el;i.nodeType===1||i.getBoundingClientRect?s=i.getBoundingClientRect():i.nodeType===3&&i.data.trim()&&(s=Im(i))}s&&Vm(t,s)}return t}function Vm(e,t){return(!e.top||t.top<e.top)&&(e.top=t.top),(!e.bottom||t.bottom>e.bottom)&&(e.bottom=t.bottom),(!e.left||t.left<e.left)&&(e.left=t.left),(!e.right||t.right>e.right)&&(e.right=t.right),e}var Gl={top:0,left:0,right:0,bottom:0,width:0,height:0};function wn(e){const t=e.subTree.el;return typeof window>"u"?Gl:Uc(e)?Lm(e.subTree):(t==null?void 0:t.nodeType)===1?t==null?void 0:t.getBoundingClientRect():e.subTree.component?wn(e.subTree.component):Gl}O();function bi(e){return Uc(e)?Nm(e.subTree):e.subTree?[e.subTree.el]:[]}function Nm(e){if(!e.children)return[];const t=[];return e.children.forEach(n=>{n.component?t.push(...bi(n.component)):n!=null&&n.el&&t.push(n.el)}),t}var jc="__vue-devtools-component-inspector__",Wc="__vue-devtools-component-inspector__card__",Kc="__vue-devtools-component-inspector__name__",zc="__vue-devtools-component-inspector__indicator__",Gc={display:"block",zIndex:2147483640,position:"fixed",backgroundColor:"#42b88325",border:"1px solid #42b88350",borderRadius:"5px",transition:"all 0.1s ease-in",pointerEvents:"none"},Mm={fontFamily:"Arial, Helvetica, sans-serif",padding:"5px 8px",borderRadius:"4px",textAlign:"left",position:"absolute",left:0,color:"#e9e9e9",fontSize:"14px",fontWeight:600,lineHeight:"24px",backgroundColor:"#42b883",boxShadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)"},Fm={display:"inline-block",fontWeight:400,fontStyle:"normal",fontSize:"12px",opacity:.7};function Yn(){return document.getElementById(jc)}function Bm(){return document.getElementById(Wc)}function $m(){return document.getElementById(zc)}function Hm(){return document.getElementById(Kc)}function Ei(e){return{left:`${Math.round(e.left*100)/100}px`,top:`${Math.round(e.top*100)/100}px`,width:`${Math.round(e.width*100)/100}px`,height:`${Math.round(e.height*100)/100}px`}}function Si(e){var t;const n=document.createElement("div");n.id=(t=e.elementId)!=null?t:jc,Object.assign(n.style,{...Gc,...Ei(e.bounds),...e.style});const r=document.createElement("span");r.id=Wc,Object.assign(r.style,{...Mm,top:e.bounds.top<35?0:"-35px"});const o=document.createElement("span");o.id=Kc,o.innerHTML=`<${e.name}> `;const s=document.createElement("i");return s.id=zc,s.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`,Object.assign(s.style,Fm),r.appendChild(o),r.appendChild(s),n.appendChild(r),document.body.appendChild(n),n}function Ai(e){const t=Yn(),n=Bm(),r=Hm(),o=$m();t&&(Object.assign(t.style,{...Gc,...Ei(e.bounds)}),Object.assign(n.style,{top:e.bounds.top<35?0:"-35px"}),r.innerHTML=`<${e.name}> `,o.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`)}function Um(e){const t=wn(e);if(!t.width&&!t.height)return;const n=Mo(e);Yn()?Ai({bounds:t,name:n}):Si({bounds:t,name:n})}function qc(){const e=Yn();e&&(e.style.display="none")}var Ps=null;function xs(e){const t=e.target;if(t){const n=t.__vueParentComponent;if(n&&(Ps=n,n.vnode.el)){const o=wn(n),s=Mo(n);Yn()?Ai({bounds:o,name:s}):Si({bounds:o,name:s})}}}function jm(e,t){if(e.preventDefault(),e.stopPropagation(),Ps){const n=Dm(Ps);t(n)}}var bo=null;function Wm(){qc(),window.removeEventListener("mouseover",xs),window.removeEventListener("click",bo,!0),bo=null}function Km(){return window.addEventListener("mouseover",xs),new Promise(e=>{function t(n){n.preventDefault(),n.stopPropagation(),jm(n,r=>{window.removeEventListener("click",t,!0),bo=null,window.removeEventListener("mouseover",xs);const o=Yn();o&&(o.style.display="none"),e(JSON.stringify({id:r}))})}bo=t,window.addEventListener("click",t,!0)})}function zm(e){const t=Os(nt.value,e.id);if(t){const[n]=bi(t);if(typeof n.scrollIntoView=="function")n.scrollIntoView({behavior:"smooth"});else{const r=wn(t),o=document.createElement("div"),s={...Ei(r),position:"absolute"};Object.assign(o.style,s),document.body.appendChild(o),o.scrollIntoView({behavior:"smooth"}),setTimeout(()=>{document.body.removeChild(o)},2e3)}setTimeout(()=>{const r=wn(t);if(r.width||r.height){const o=Mo(t),s=Yn();s?Ai({...e,name:o,bounds:r}):Si({...e,name:o,bounds:r}),setTimeout(()=>{s&&(s.style.display="none")},1500)}},1200)}}O();var ql,Yl;(Yl=(ql=J).__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__)!=null||(ql.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__=!0);function Gm(e){let t=0;const n=setInterval(()=>{J.__VUE_INSPECTOR__&&(clearInterval(n),t+=30,e()),t>=5e3&&clearInterval(n)},30)}function qm(){const e=J.__VUE_INSPECTOR__,t=e.openInEditor;e.openInEditor=async(...n)=>{e.disable(),t(...n)}}function Ym(){return new Promise(e=>{function t(){qm(),e(J.__VUE_INSPECTOR__)}J.__VUE_INSPECTOR__?t():Gm(()=>{t()})})}O();O();function Jm(e){return!!(e&&e.__v_isReadonly)}function Yc(e){return Jm(e)?Yc(e.__v_raw):!!(e&&e.__v_isReactive)}function us(e){return!!(e&&e.__v_isRef===!0)}function lr(e){const t=e&&e.__v_raw;return t?lr(t):e}var Xm=class{constructor(){this.refEditor=new Qm}set(e,t,n,r){const o=Array.isArray(t)?t:t.split(".");for(;o.length>1;){const l=o.shift();e instanceof Map&&(e=e.get(l)),e instanceof Set?e=Array.from(e.values())[l]:e=e[l],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}const s=o[0],i=this.refEditor.get(e)[s];r?r(e,s,n):this.refEditor.isRef(i)?this.refEditor.set(i,n):e[s]=n}get(e,t){const n=Array.isArray(t)?t:t.split(".");for(let r=0;r<n.length;r++)if(e instanceof Map?e=e.get(n[r]):e=e[n[r]],this.refEditor.isRef(e)&&(e=this.refEditor.get(e)),!e)return;return e}has(e,t,n=!1){if(typeof e>"u")return!1;const r=Array.isArray(t)?t.slice():t.split("."),o=n?2:1;for(;e&&r.length>o;){const s=r.shift();e=e[s],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}return e!=null&&Object.prototype.hasOwnProperty.call(e,r[0])}createDefaultSetCallback(e){return(t,n,r)=>{if((e.remove||e.newKey)&&(Array.isArray(t)?t.splice(n,1):lr(t)instanceof Map?t.delete(n):lr(t)instanceof Set?t.delete(Array.from(t.values())[n]):Reflect.deleteProperty(t,n)),!e.remove){const o=t[e.newKey||n];this.refEditor.isRef(o)?this.refEditor.set(o,r):lr(t)instanceof Map?t.set(e.newKey||n,r):lr(t)instanceof Set?t.add(r):t[e.newKey||n]=r}}}},Qm=class{set(e,t){if(us(e))e.value=t;else{if(e instanceof Set&&Array.isArray(t)){e.clear(),t.forEach(o=>e.add(o));return}const n=Object.keys(t);if(e instanceof Map){const o=new Set(e.keys());n.forEach(s=>{e.set(s,Reflect.get(t,s)),o.delete(s)}),o.forEach(s=>e.delete(s));return}const r=new Set(Object.keys(e));n.forEach(o=>{Reflect.set(e,o,Reflect.get(t,o)),r.delete(o)}),r.forEach(o=>Reflect.deleteProperty(e,o))}}get(e){return us(e)?e.value:e}isRef(e){return us(e)||Yc(e)}};O();O();O();var Zm="__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__";function e0(){if(!Mc||typeof localStorage>"u"||localStorage===null)return{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:""};const e=localStorage.getItem(Zm);return e?JSON.parse(e):{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:""}}O();O();O();var Jl,Xl;(Xl=(Jl=J).__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS)!=null||(Jl.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS=[]);var t0=new Proxy(J.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS,{get(e,t,n){return Reflect.get(e,t,n)}});function n0(e,t){Ue.timelineLayersState[t.id]=!1,t0.push({...e,descriptorId:t.id,appRecord:yi(t.app)})}var Ql,Zl;(Zl=(Ql=J).__VUE_DEVTOOLS_KIT_INSPECTOR__)!=null||(Ql.__VUE_DEVTOOLS_KIT_INSPECTOR__=[]);var wi=new Proxy(J.__VUE_DEVTOOLS_KIT_INSPECTOR__,{get(e,t,n){return Reflect.get(e,t,n)}}),Jc=Un(()=>{Jn.hooks.callHook("sendInspectorToClient",Xc())});function r0(e,t){var n,r;wi.push({options:e,descriptor:t,treeFilterPlaceholder:(n=e.treeFilterPlaceholder)!=null?n:"Search tree...",stateFilterPlaceholder:(r=e.stateFilterPlaceholder)!=null?r:"Search state...",treeFilter:"",selectedNodeId:"",appRecord:yi(t.app)}),Jc()}function Xc(){return wi.filter(e=>e.descriptor.app===nt.value.app).filter(e=>e.descriptor.id!=="components").map(e=>{var t;const n=e.descriptor,r=e.options;return{id:r.id,label:r.label,logo:n.logo,icon:`custom-ic-baseline-${(t=r==null?void 0:r.icon)==null?void 0:t.replace(/_/g,"-")}`,packageName:n.packageName,homepage:n.homepage,pluginId:n.id}})}function lo(e,t){return wi.find(n=>n.options.id===e&&(t?n.descriptor.app===t:!0))}function o0(){const e=Bc();e.hook("addInspector",({inspector:r,plugin:o})=>{r0(r,o.descriptor)});const t=Un(async({inspectorId:r,plugin:o})=>{var s;if(!r||!((s=o==null?void 0:o.descriptor)!=null&&s.app)||Ue.highPerfModeEnabled)return;const i=lo(r,o.descriptor.app),l={app:o.descriptor.app,inspectorId:r,filter:(i==null?void 0:i.treeFilter)||"",rootNodes:[]};await new Promise(a=>{e.callHookWith(async u=>{await Promise.all(u.map(c=>c(l))),a()},"getInspectorTree")}),e.callHookWith(async a=>{await Promise.all(a.map(u=>u({inspectorId:r,rootNodes:l.rootNodes})))},"sendInspectorTreeToClient")},120);e.hook("sendInspectorTree",t);const n=Un(async({inspectorId:r,plugin:o})=>{var s;if(!r||!((s=o==null?void 0:o.descriptor)!=null&&s.app)||Ue.highPerfModeEnabled)return;const i=lo(r,o.descriptor.app),l={app:o.descriptor.app,inspectorId:r,nodeId:(i==null?void 0:i.selectedNodeId)||"",state:null},a={currentTab:`custom-inspector:${r}`};l.nodeId&&await new Promise(u=>{e.callHookWith(async c=>{await Promise.all(c.map(f=>f(l,a))),u()},"getInspectorState")}),e.callHookWith(async u=>{await Promise.all(u.map(c=>c({inspectorId:r,nodeId:l.nodeId,state:l.state})))},"sendInspectorStateToClient")},120);return e.hook("sendInspectorState",n),e.hook("customInspectorSelectNode",({inspectorId:r,nodeId:o,plugin:s})=>{const i=lo(r,s.descriptor.app);i&&(i.selectedNodeId=o)}),e.hook("timelineLayerAdded",({options:r,plugin:o})=>{n0(r,o.descriptor)}),e.hook("timelineEventAdded",({options:r,plugin:o})=>{var s;const i=["performance","component-event","keyboard","mouse"];Ue.highPerfModeEnabled||!((s=Ue.timelineLayersState)!=null&&s[o.descriptor.id])&&!i.includes(r.layerId)||e.callHookWith(async l=>{await Promise.all(l.map(a=>a(r)))},"sendTimelineEventToClient")}),e.hook("getComponentInstances",async({app:r})=>{const o=r.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(!o)return null;const s=o.id.toString();return[...o.instanceMap].filter(([l])=>l.split(":")[0]===s).map(([,l])=>l)}),e.hook("getComponentBounds",async({instance:r})=>wn(r)),e.hook("getComponentName",({instance:r})=>Mo(r)),e.hook("componentHighlight",({uid:r})=>{const o=nt.value.instanceMap.get(r);o&&Um(o)}),e.hook("componentUnhighlight",()=>{qc()}),e}var ea,ta;(ta=(ea=J).__VUE_DEVTOOLS_KIT_APP_RECORDS__)!=null||(ea.__VUE_DEVTOOLS_KIT_APP_RECORDS__=[]);var na,ra;(ra=(na=J).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__)!=null||(na.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__={});var oa,sa;(sa=(oa=J).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__)!=null||(oa.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__="");var ia,la;(la=(ia=J).__VUE_DEVTOOLS_KIT_CUSTOM_TABS__)!=null||(ia.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__=[]);var aa,ua;(ua=(aa=J).__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__)!=null||(aa.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__=[]);var gn="__VUE_DEVTOOLS_KIT_GLOBAL_STATE__";function s0(){return{connected:!1,clientConnected:!1,vitePluginDetected:!0,appRecords:[],activeAppRecordId:"",tabs:[],commands:[],highPerfModeEnabled:!0,devtoolsClientDetected:{},perfUniqueGroupId:0,timelineLayersState:e0()}}var ca,fa;(fa=(ca=J)[gn])!=null||(ca[gn]=s0());var i0=Un(e=>{Jn.hooks.callHook("devtoolsStateUpdated",{state:e})});Un((e,t)=>{Jn.hooks.callHook("devtoolsConnectedUpdated",{state:e,oldState:t})});var Fo=new Proxy(J.__VUE_DEVTOOLS_KIT_APP_RECORDS__,{get(e,t,n){return t==="value"?J.__VUE_DEVTOOLS_KIT_APP_RECORDS__:J.__VUE_DEVTOOLS_KIT_APP_RECORDS__[t]}}),nt=new Proxy(J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__,{get(e,t,n){return t==="value"?J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__:t==="id"?J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__:J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[t]}});function Qc(){i0({...J[gn],appRecords:Fo.value,activeAppRecordId:nt.id,tabs:J.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__,commands:J.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__})}function l0(e){J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__=e,Qc()}function a0(e){J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__=e,Qc()}var Ue=new Proxy(J[gn],{get(e,t){return t==="appRecords"?Fo:t==="activeAppRecordId"?nt.id:t==="tabs"?J.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__:t==="commands"?J.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__:J[gn][t]},deleteProperty(e,t){return delete e[t],!0},set(e,t,n){return{...J[gn]},e[t]=n,J[gn][t]=n,!0}});function u0(e={}){var t,n,r;const{file:o,host:s,baseUrl:i=window.location.origin,line:l=0,column:a=0}=e;if(o){if(s==="chrome-extension"){const u=o.replace(/\\/g,"\\\\"),c=(n=(t=window.VUE_DEVTOOLS_CONFIG)==null?void 0:t.openInEditorHost)!=null?n:"/";fetch(`${c}__open-in-editor?file=${encodeURI(o)}`).then(f=>{if(!f.ok){const p=`Opening component ${u} failed`;console.log(`%c${p}`,"color:red")}})}else if(Ue.vitePluginDetected){const u=(r=J.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__)!=null?r:i;J.__VUE_INSPECTOR__.openInEditor(u,o,l,a)}}}O();O();O();O();O();var da,pa;(pa=(da=J).__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__)!=null||(da.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__=[]);var Ci=new Proxy(J.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__,{get(e,t,n){return Reflect.get(e,t,n)}});function Ds(e){const t={};return Object.keys(e).forEach(n=>{t[n]=e[n].defaultValue}),t}function Ti(e){return`__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${e}__`}function c0(e){var t,n,r;const o=(n=(t=Ci.find(s=>{var i;return s[0].id===e&&!!((i=s[0])!=null&&i.settings)}))==null?void 0:t[0])!=null?n:null;return(r=o==null?void 0:o.settings)!=null?r:null}function Zc(e,t){var n,r,o;const s=Ti(e);if(s){const i=localStorage.getItem(s);if(i)return JSON.parse(i)}if(e){const i=(r=(n=Ci.find(l=>l[0].id===e))==null?void 0:n[0])!=null?r:null;return Ds((o=i==null?void 0:i.settings)!=null?o:{})}return Ds(t)}function f0(e,t){const n=Ti(e);localStorage.getItem(n)||localStorage.setItem(n,JSON.stringify(Ds(t)))}function d0(e,t,n){const r=Ti(e),o=localStorage.getItem(r),s=JSON.parse(o||"{}"),i={...s,[t]:n};localStorage.setItem(r,JSON.stringify(i)),Jn.hooks.callHookWith(l=>{l.forEach(a=>a({pluginId:e,key:t,oldValue:s[t],newValue:n,settings:i}))},"setPluginSettings")}O();O();O();O();O();O();O();O();O();O();O();var ha,ga,ct=(ga=(ha=J).__VUE_DEVTOOLS_HOOK)!=null?ga:ha.__VUE_DEVTOOLS_HOOK=Bc(),p0={vueAppInit(e){ct.hook("app:init",e)},vueAppUnmount(e){ct.hook("app:unmount",e)},vueAppConnected(e){ct.hook("app:connected",e)},componentAdded(e){return ct.hook("component:added",e)},componentEmit(e){return ct.hook("component:emit",e)},componentUpdated(e){return ct.hook("component:updated",e)},componentRemoved(e){return ct.hook("component:removed",e)},setupDevtoolsPlugin(e){ct.hook("devtools-plugin:setup",e)},perfStart(e){return ct.hook("perf:start",e)},perfEnd(e){return ct.hook("perf:end",e)}},h0={on:p0,setupDevToolsPlugin(e,t){return ct.callHook("devtools-plugin:setup",e,t)}},g0=class{constructor({plugin:e,ctx:t}){this.hooks=t.hooks,this.plugin=e}get on(){return{visitComponentTree:e=>{this.hooks.hook("visitComponentTree",e)},inspectComponent:e=>{this.hooks.hook("inspectComponent",e)},editComponentState:e=>{this.hooks.hook("editComponentState",e)},getInspectorTree:e=>{this.hooks.hook("getInspectorTree",e)},getInspectorState:e=>{this.hooks.hook("getInspectorState",e)},editInspectorState:e=>{this.hooks.hook("editInspectorState",e)},inspectTimelineEvent:e=>{this.hooks.hook("inspectTimelineEvent",e)},timelineCleared:e=>{this.hooks.hook("timelineCleared",e)},setPluginSettings:e=>{this.hooks.hook("setPluginSettings",e)}}}notifyComponentUpdate(e){var t;if(Ue.highPerfModeEnabled)return;const n=Xc().find(r=>r.packageName===this.plugin.descriptor.packageName);if(n!=null&&n.id){if(e){const r=[e.appContext.app,e.uid,(t=e.parent)==null?void 0:t.uid,e];ct.callHook("component:updated",...r)}else ct.callHook("component:updated");this.hooks.callHook("sendInspectorState",{inspectorId:n.id,plugin:this.plugin})}}addInspector(e){this.hooks.callHook("addInspector",{inspector:e,plugin:this.plugin}),this.plugin.descriptor.settings&&f0(e.id,this.plugin.descriptor.settings)}sendInspectorTree(e){Ue.highPerfModeEnabled||this.hooks.callHook("sendInspectorTree",{inspectorId:e,plugin:this.plugin})}sendInspectorState(e){Ue.highPerfModeEnabled||this.hooks.callHook("sendInspectorState",{inspectorId:e,plugin:this.plugin})}selectInspectorNode(e,t){this.hooks.callHook("customInspectorSelectNode",{inspectorId:e,nodeId:t,plugin:this.plugin})}visitComponentTree(e){return this.hooks.callHook("visitComponentTree",e)}now(){return Ue.highPerfModeEnabled?0:Date.now()}addTimelineLayer(e){this.hooks.callHook("timelineLayerAdded",{options:e,plugin:this.plugin})}addTimelineEvent(e){Ue.highPerfModeEnabled||this.hooks.callHook("timelineEventAdded",{options:e,plugin:this.plugin})}getSettings(e){return Zc(e??this.plugin.descriptor.id,this.plugin.descriptor.settings)}getComponentInstances(e){return this.hooks.callHook("getComponentInstances",{app:e})}getComponentBounds(e){return this.hooks.callHook("getComponentBounds",{instance:e})}getComponentName(e){return this.hooks.callHook("getComponentName",{instance:e})}highlightElement(e){const t=e.__VUE_DEVTOOLS_NEXT_UID__;return this.hooks.callHook("componentHighlight",{uid:t})}unhighlightElement(){return this.hooks.callHook("componentUnhighlight")}},_0=g0;O();O();O();O();var m0="__vue_devtool_undefined__",v0="__vue_devtool_infinity__",y0="__vue_devtool_negative_infinity__",b0="__vue_devtool_nan__";O();O();var E0={[m0]:"undefined",[b0]:"NaN",[v0]:"Infinity",[y0]:"-Infinity"};Object.entries(E0).reduce((e,[t,n])=>(e[n]=t,e),{});O();O();O();O();O();var _a,ma;(ma=(_a=J).__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__)!=null||(_a.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__=new Set);function S0(e,t){const[n,r]=e;if(n.app!==t)return;const o=new _0({plugin:{setupFn:r,descriptor:n},ctx:Jn});n.packageName==="vuex"&&o.on.editInspectorState(s=>{o.sendInspectorState(s.inspectorId)}),r(o)}function ef(e,t){J.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(e)||Ue.highPerfModeEnabled&&!(t!=null&&t.inspectingComponent)||(J.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(e),Ci.forEach(n=>{S0(n,e)}))}O();O();var Or="__VUE_DEVTOOLS_ROUTER__",jn="__VUE_DEVTOOLS_ROUTER_INFO__",va,ya;(ya=(va=J)[jn])!=null||(va[jn]={currentRoute:null,routes:[]});var ba,Ea;(Ea=(ba=J)[Or])!=null||(ba[Or]={});new Proxy(J[jn],{get(e,t){return J[jn][t]}});new Proxy(J[Or],{get(e,t){if(t==="value")return J[Or]}});function A0(e){const t=new Map;return((e==null?void 0:e.getRoutes())||[]).filter(n=>!t.has(n.path)&&t.set(n.path,1))}function ki(e){return e.map(t=>{let{path:n,name:r,children:o,meta:s}=t;return o!=null&&o.length&&(o=ki(o)),{path:n,name:r,children:o,meta:s}})}function w0(e){if(e){const{fullPath:t,hash:n,href:r,path:o,name:s,matched:i,params:l,query:a}=e;return{fullPath:t,hash:n,href:r,path:o,name:s,params:l,query:a,matched:ki(i)}}return e}function C0(e,t){function n(){var r;const o=(r=e.app)==null?void 0:r.config.globalProperties.$router,s=w0(o==null?void 0:o.currentRoute.value),i=ki(A0(o)),l=console.warn;console.warn=()=>{},J[jn]={currentRoute:s?Kl(s):{},routes:Kl(i)},J[Or]=o,console.warn=l}n(),h0.on.componentUpdated(Un(()=>{var r;((r=t.value)==null?void 0:r.app)===e.app&&(n(),!Ue.highPerfModeEnabled&&Jn.hooks.callHook("routerInfoUpdated",{state:J[jn]}))},200))}function T0(e){return{async getInspectorTree(t){const n={...t,app:nt.value.app,rootNodes:[]};return await new Promise(r=>{e.callHookWith(async o=>{await Promise.all(o.map(s=>s(n))),r()},"getInspectorTree")}),n.rootNodes},async getInspectorState(t){const n={...t,app:nt.value.app,state:null},r={currentTab:`custom-inspector:${t.inspectorId}`};return await new Promise(o=>{e.callHookWith(async s=>{await Promise.all(s.map(i=>i(n,r))),o()},"getInspectorState")}),n.state},editInspectorState(t){const n=new Xm,r={...t,app:nt.value.app,set:(o,s=t.path,i=t.state.value,l)=>{n.set(o,s,i,l||n.createDefaultSetCallback(t.state))}};e.callHookWith(o=>{o.forEach(s=>s(r))},"editInspectorState")},sendInspectorState(t){const n=lo(t);e.callHook("sendInspectorState",{inspectorId:t,plugin:{descriptor:n.descriptor,setupFn:()=>({})}})},inspectComponentInspector(){return Km()},cancelInspectComponentInspector(){return Wm()},getComponentRenderCode(t){const n=Os(nt.value,t);if(n)return(n==null?void 0:n.type)instanceof Function?n.type.toString():n.render.toString()},scrollToComponent(t){return zm({id:t})},openInEditor:u0,getVueInspector:Ym,toggleApp(t,n){const r=Fo.value.find(o=>o.id===t);r&&(a0(t),l0(r),C0(r,nt),Jc(),ef(r.app,n))},inspectDOM(t){const n=Os(nt.value,t);if(n){const[r]=bi(n);r&&(J.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__=r)}},updatePluginSettings(t,n,r){d0(t,n,r)},getPluginSettings(t){return{options:c0(t),values:Zc(t)}}}}O();var Sa,Aa;(Aa=(Sa=J).__VUE_DEVTOOLS_ENV__)!=null||(Sa.__VUE_DEVTOOLS_ENV__={vitePluginDetected:!1});var wa=o0(),Ca,Ta;(Ta=(Ca=J).__VUE_DEVTOOLS_KIT_CONTEXT__)!=null||(Ca.__VUE_DEVTOOLS_KIT_CONTEXT__={hooks:wa,get state(){return{...Ue,activeAppRecordId:nt.id,activeAppRecord:nt.value,appRecords:Fo.value}},api:T0(wa)});var Jn=J.__VUE_DEVTOOLS_KIT_CONTEXT__;O();Tm(Om());var ka,Oa;(Oa=(ka=J).__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__)!=null||(ka.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__={id:0,appIds:new Set});O();function k0(e){Ue.highPerfModeEnabled=e??!Ue.highPerfModeEnabled,!e&&nt.value&&ef(nt.value.app)}O();O();O();function O0(e){Ue.devtoolsClientDetected={...Ue.devtoolsClientDetected,...e};const t=Object.values(Ue.devtoolsClientDetected).some(Boolean);k0(!t)}var Pa,xa;(xa=(Pa=J).__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__)!=null||(Pa.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__=O0);O();O();O();O();O();O();O();var P0=class{constructor(){this.keyToValue=new Map,this.valueToKey=new Map}set(e,t){this.keyToValue.set(e,t),this.valueToKey.set(t,e)}getByKey(e){return this.keyToValue.get(e)}getByValue(e){return this.valueToKey.get(e)}clear(){this.keyToValue.clear(),this.valueToKey.clear()}},tf=class{constructor(e){this.generateIdentifier=e,this.kv=new P0}register(e,t){this.kv.getByValue(e)||(t||(t=this.generateIdentifier(e)),this.kv.set(t,e))}clear(){this.kv.clear()}getIdentifier(e){return this.kv.getByValue(e)}getValue(e){return this.kv.getByKey(e)}},x0=class extends tf{constructor(){super(e=>e.name),this.classToAllowedProps=new Map}register(e,t){typeof t=="object"?(t.allowProps&&this.classToAllowedProps.set(e,t.allowProps),super.register(e,t.identifier)):super.register(e,t)}getAllowedProps(e){return this.classToAllowedProps.get(e)}};O();O();function D0(e){if("values"in Object)return Object.values(e);const t=[];for(const n in e)e.hasOwnProperty(n)&&t.push(e[n]);return t}function R0(e,t){const n=D0(e);if("find"in n)return n.find(t);const r=n;for(let o=0;o<r.length;o++){const s=r[o];if(t(s))return s}}function Wn(e,t){Object.entries(e).forEach(([n,r])=>t(r,n))}function ao(e,t){return e.indexOf(t)!==-1}function Da(e,t){for(let n=0;n<e.length;n++){const r=e[n];if(t(r))return r}}var I0=class{constructor(){this.transfomers={}}register(e){this.transfomers[e.name]=e}findApplicable(e){return R0(this.transfomers,t=>t.isApplicable(e))}findByName(e){return this.transfomers[e]}};O();O();var L0=e=>Object.prototype.toString.call(e).slice(8,-1),nf=e=>typeof e>"u",V0=e=>e===null,Pr=e=>typeof e!="object"||e===null||e===Object.prototype?!1:Object.getPrototypeOf(e)===null?!0:Object.getPrototypeOf(e)===Object.prototype,Rs=e=>Pr(e)&&Object.keys(e).length===0,rn=e=>Array.isArray(e),N0=e=>typeof e=="string",M0=e=>typeof e=="number"&&!isNaN(e),F0=e=>typeof e=="boolean",B0=e=>e instanceof RegExp,xr=e=>e instanceof Map,Dr=e=>e instanceof Set,rf=e=>L0(e)==="Symbol",$0=e=>e instanceof Date&&!isNaN(e.valueOf()),H0=e=>e instanceof Error,Ra=e=>typeof e=="number"&&isNaN(e),U0=e=>F0(e)||V0(e)||nf(e)||M0(e)||N0(e)||rf(e),j0=e=>typeof e=="bigint",W0=e=>e===1/0||e===-1/0,K0=e=>ArrayBuffer.isView(e)&&!(e instanceof DataView),z0=e=>e instanceof URL;O();var of=e=>e.replace(/\./g,"\\."),cs=e=>e.map(String).map(of).join("."),_r=e=>{const t=[];let n="";for(let o=0;o<e.length;o++){let s=e.charAt(o);if(s==="\\"&&e.charAt(o+1)==="."){n+=".",o++;continue}if(s==="."){t.push(n),n="";continue}n+=s}const r=n;return t.push(r),t};O();function Ct(e,t,n,r){return{isApplicable:e,annotation:t,transform:n,untransform:r}}var sf=[Ct(nf,"undefined",()=>null,()=>{}),Ct(j0,"bigint",e=>e.toString(),e=>typeof BigInt<"u"?BigInt(e):(console.error("Please add a BigInt polyfill."),e)),Ct($0,"Date",e=>e.toISOString(),e=>new Date(e)),Ct(H0,"Error",(e,t)=>{const n={name:e.name,message:e.message};return t.allowedErrorProps.forEach(r=>{n[r]=e[r]}),n},(e,t)=>{const n=new Error(e.message);return n.name=e.name,n.stack=e.stack,t.allowedErrorProps.forEach(r=>{n[r]=e[r]}),n}),Ct(B0,"regexp",e=>""+e,e=>{const t=e.slice(1,e.lastIndexOf("/")),n=e.slice(e.lastIndexOf("/")+1);return new RegExp(t,n)}),Ct(Dr,"set",e=>[...e.values()],e=>new Set(e)),Ct(xr,"map",e=>[...e.entries()],e=>new Map(e)),Ct(e=>Ra(e)||W0(e),"number",e=>Ra(e)?"NaN":e>0?"Infinity":"-Infinity",Number),Ct(e=>e===0&&1/e===-1/0,"number",()=>"-0",Number),Ct(z0,"URL",e=>e.toString(),e=>new URL(e))];function Bo(e,t,n,r){return{isApplicable:e,annotation:t,transform:n,untransform:r}}var lf=Bo((e,t)=>rf(e)?!!t.symbolRegistry.getIdentifier(e):!1,(e,t)=>["symbol",t.symbolRegistry.getIdentifier(e)],e=>e.description,(e,t,n)=>{const r=n.symbolRegistry.getValue(t[1]);if(!r)throw new Error("Trying to deserialize unknown symbol");return r}),G0=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,Uint8ClampedArray].reduce((e,t)=>(e[t.name]=t,e),{}),af=Bo(K0,e=>["typed-array",e.constructor.name],e=>[...e],(e,t)=>{const n=G0[t[1]];if(!n)throw new Error("Trying to deserialize unknown typed array");return new n(e)});function uf(e,t){return e!=null&&e.constructor?!!t.classRegistry.getIdentifier(e.constructor):!1}var cf=Bo(uf,(e,t)=>["class",t.classRegistry.getIdentifier(e.constructor)],(e,t)=>{const n=t.classRegistry.getAllowedProps(e.constructor);if(!n)return{...e};const r={};return n.forEach(o=>{r[o]=e[o]}),r},(e,t,n)=>{const r=n.classRegistry.getValue(t[1]);if(!r)throw new Error(`Trying to deserialize unknown class '${t[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);return Object.assign(Object.create(r.prototype),e)}),ff=Bo((e,t)=>!!t.customTransformerRegistry.findApplicable(e),(e,t)=>["custom",t.customTransformerRegistry.findApplicable(e).name],(e,t)=>t.customTransformerRegistry.findApplicable(e).serialize(e),(e,t,n)=>{const r=n.customTransformerRegistry.findByName(t[1]);if(!r)throw new Error("Trying to deserialize unknown custom value");return r.deserialize(e)}),q0=[cf,lf,ff,af],Ia=(e,t)=>{const n=Da(q0,o=>o.isApplicable(e,t));if(n)return{value:n.transform(e,t),type:n.annotation(e,t)};const r=Da(sf,o=>o.isApplicable(e,t));if(r)return{value:r.transform(e,t),type:r.annotation}},df={};sf.forEach(e=>{df[e.annotation]=e});var Y0=(e,t,n)=>{if(rn(t))switch(t[0]){case"symbol":return lf.untransform(e,t,n);case"class":return cf.untransform(e,t,n);case"custom":return ff.untransform(e,t,n);case"typed-array":return af.untransform(e,t,n);default:throw new Error("Unknown transformation: "+t)}else{const r=df[t];if(!r)throw new Error("Unknown transformation: "+t);return r.untransform(e,n)}};O();var Dn=(e,t)=>{if(t>e.size)throw new Error("index out of bounds");const n=e.keys();for(;t>0;)n.next(),t--;return n.next().value};function pf(e){if(ao(e,"__proto__"))throw new Error("__proto__ is not allowed as a property");if(ao(e,"prototype"))throw new Error("prototype is not allowed as a property");if(ao(e,"constructor"))throw new Error("constructor is not allowed as a property")}var J0=(e,t)=>{pf(t);for(let n=0;n<t.length;n++){const r=t[n];if(Dr(e))e=Dn(e,+r);else if(xr(e)){const o=+r,s=+t[++n]==0?"key":"value",i=Dn(e,o);switch(s){case"key":e=i;break;case"value":e=e.get(i);break}}else e=e[r]}return e},Is=(e,t,n)=>{if(pf(t),t.length===0)return n(e);let r=e;for(let s=0;s<t.length-1;s++){const i=t[s];if(rn(r)){const l=+i;r=r[l]}else if(Pr(r))r=r[i];else if(Dr(r)){const l=+i;r=Dn(r,l)}else if(xr(r)){if(s===t.length-2)break;const a=+i,u=+t[++s]==0?"key":"value",c=Dn(r,a);switch(u){case"key":r=c;break;case"value":r=r.get(c);break}}}const o=t[t.length-1];if(rn(r)?r[+o]=n(r[+o]):Pr(r)&&(r[o]=n(r[o])),Dr(r)){const s=Dn(r,+o),i=n(s);s!==i&&(r.delete(s),r.add(i))}if(xr(r)){const s=+t[t.length-2],i=Dn(r,s);switch(+o==0?"key":"value"){case"key":{const a=n(i);r.set(a,r.get(i)),a!==i&&r.delete(i);break}case"value":{r.set(i,n(r.get(i)));break}}}return e};function Ls(e,t,n=[]){if(!e)return;if(!rn(e)){Wn(e,(s,i)=>Ls(s,t,[...n,..._r(i)]));return}const[r,o]=e;o&&Wn(o,(s,i)=>{Ls(s,t,[...n,..._r(i)])}),t(r,n)}function X0(e,t,n){return Ls(t,(r,o)=>{e=Is(e,o,s=>Y0(s,r,n))}),e}function Q0(e,t){function n(r,o){const s=J0(e,_r(o));r.map(_r).forEach(i=>{e=Is(e,i,()=>s)})}if(rn(t)){const[r,o]=t;r.forEach(s=>{e=Is(e,_r(s),()=>e)}),o&&Wn(o,n)}else Wn(t,n);return e}var Z0=(e,t)=>Pr(e)||rn(e)||xr(e)||Dr(e)||uf(e,t);function ev(e,t,n){const r=n.get(e);r?r.push(t):n.set(e,[t])}function tv(e,t){const n={};let r;return e.forEach(o=>{if(o.length<=1)return;t||(o=o.map(l=>l.map(String)).sort((l,a)=>l.length-a.length));const[s,...i]=o;s.length===0?r=i.map(cs):n[cs(s)]=i.map(cs)}),r?Rs(n)?[r]:[r,n]:Rs(n)?void 0:n}var hf=(e,t,n,r,o=[],s=[],i=new Map)=>{var l;const a=U0(e);if(!a){ev(e,o,t);const m=i.get(e);if(m)return r?{transformedValue:null}:m}if(!Z0(e,n)){const m=Ia(e,n),v=m?{transformedValue:m.value,annotations:[m.type]}:{transformedValue:e};return a||i.set(e,v),v}if(ao(s,e))return{transformedValue:null};const u=Ia(e,n),c=(l=u==null?void 0:u.value)!=null?l:e,f=rn(c)?[]:{},p={};Wn(c,(m,v)=>{if(v==="__proto__"||v==="constructor"||v==="prototype")throw new Error(`Detected property ${v}. This is a prototype pollution risk, please remove it from your object.`);const b=hf(m,t,n,r,[...o,v],[...s,e],i);f[v]=b.transformedValue,rn(b.annotations)?p[v]=b.annotations:Pr(b.annotations)&&Wn(b.annotations,(y,S)=>{p[of(v)+"."+S]=y})});const d=Rs(p)?{transformedValue:f,annotations:u?[u.type]:void 0}:{transformedValue:f,annotations:u?[u.type,p]:p};return a||i.set(e,d),d};O();O();function gf(e){return Object.prototype.toString.call(e).slice(8,-1)}function La(e){return gf(e)==="Array"}function nv(e){if(gf(e)!=="Object")return!1;const t=Object.getPrototypeOf(e);return!!t&&t.constructor===Object&&t===Object.prototype}function rv(e,t,n,r,o){const s={}.propertyIsEnumerable.call(r,t)?"enumerable":"nonenumerable";s==="enumerable"&&(e[t]=n),o&&s==="nonenumerable"&&Object.defineProperty(e,t,{value:n,enumerable:!1,writable:!0,configurable:!0})}function Vs(e,t={}){if(La(e))return e.map(o=>Vs(o,t));if(!nv(e))return e;const n=Object.getOwnPropertyNames(e),r=Object.getOwnPropertySymbols(e);return[...n,...r].reduce((o,s)=>{if(La(t.props)&&!t.props.includes(s))return o;const i=e[s],l=Vs(i,t);return rv(o,s,l,e,t.nonenumerable),o},{})}var ke=class{constructor({dedupe:e=!1}={}){this.classRegistry=new x0,this.symbolRegistry=new tf(t=>{var n;return(n=t.description)!=null?n:""}),this.customTransformerRegistry=new I0,this.allowedErrorProps=[],this.dedupe=e}serialize(e){const t=new Map,n=hf(e,t,this,this.dedupe),r={json:n.transformedValue};n.annotations&&(r.meta={...r.meta,values:n.annotations});const o=tv(t,this.dedupe);return o&&(r.meta={...r.meta,referentialEqualities:o}),r}deserialize(e){const{json:t,meta:n}=e;let r=Vs(t);return n!=null&&n.values&&(r=X0(r,n.values,this)),n!=null&&n.referentialEqualities&&(r=Q0(r,n.referentialEqualities)),r}stringify(e){return JSON.stringify(this.serialize(e))}parse(e){return this.deserialize(JSON.parse(e))}registerClass(e,t){this.classRegistry.register(e,t)}registerSymbol(e,t){this.symbolRegistry.register(e,t)}registerCustom(e,t){this.customTransformerRegistry.register({name:t,...e})}allowErrorProps(...e){this.allowedErrorProps.push(...e)}};ke.defaultInstance=new ke;ke.serialize=ke.defaultInstance.serialize.bind(ke.defaultInstance);ke.deserialize=ke.defaultInstance.deserialize.bind(ke.defaultInstance);ke.stringify=ke.defaultInstance.stringify.bind(ke.defaultInstance);ke.parse=ke.defaultInstance.parse.bind(ke.defaultInstance);ke.registerClass=ke.defaultInstance.registerClass.bind(ke.defaultInstance);ke.registerSymbol=ke.defaultInstance.registerSymbol.bind(ke.defaultInstance);ke.registerCustom=ke.defaultInstance.registerCustom.bind(ke.defaultInstance);ke.allowErrorProps=ke.defaultInstance.allowErrorProps.bind(ke.defaultInstance);O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();var Va,Na;(Na=(Va=J).__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__)!=null||(Va.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__=[]);var Ma,Fa;(Fa=(Ma=J).__VUE_DEVTOOLS_KIT_RPC_CLIENT__)!=null||(Ma.__VUE_DEVTOOLS_KIT_RPC_CLIENT__=null);var Ba,$a;($a=(Ba=J).__VUE_DEVTOOLS_KIT_RPC_SERVER__)!=null||(Ba.__VUE_DEVTOOLS_KIT_RPC_SERVER__=null);var Ha,Ua;(Ua=(Ha=J).__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__)!=null||(Ha.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__=null);var ja,Wa;(Wa=(ja=J).__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__)!=null||(ja.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__=null);var Ka,za;(za=(Ka=J).__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__)!=null||(Ka.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__=null);O();O();O();O();O();O();O();const ov=JSON.parse(`{"repo":"https://git.pleshevski.ru/pleshevskiy/pleshevski.ru","locales":{"/":{"selectLanguageName":"Русский","navbar":["/","/works"],"notFound":["Верните страницу!","Мы потеряли страницу...","Вы заблокированы в лабиринте.","Искали кота?","Страница украдена.","Ошиблись в параллельной вселенной."],"backToHome":"Вернуться на главную","worksTable":{"name":"Название","description":"Описание","role":"Роль","technologies":"Технологии","status":"Статус","dates":"Даты"}},"/eng/":{"selectLanguageName":"English","navbar":["/eng/","/eng/works"],"notFound":["Return the page!","We lost a page...","You're blocked in a labyrinth.","Looking for a cat?","The page has been stolen.","Wrong turn in parallel universe."],"backToHome":"Back to home","worksTable":{"name":"Name","description":"Description","role":"Role","technologies":"Technologies","status":"Status","dates":"Dates"}}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"logo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"heading","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),sv=ye(ov),_f=()=>sv,mf=Symbol(""),iv=()=>{const e=Je(mf);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},lv=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},av=zt({enhance({app:e}){const t=_f(),n=e._context.provides[ii],r=N(()=>lv(t.value,n.routeLocale.value));e.provide(mf,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),uv=Object.freeze(Object.defineProperty({__proto__:null,default:av},Symbol.toStringTag,{value:"Module"})),cv=()=>_f(),We=()=>iv(),vf=Symbol(""),fv=e=>{const t=(n=e.value)=>{const r=window.document.documentElement;r.dataset.theme=n?"dark":"light"};ot(()=>{hi(e,t)}),Oo(()=>{t()})},Oi=()=>{const e=Je(vf);if(!e)throw new Error("useDarkMode() is called without provider.");return e},dv=()=>{const e=We(),t=i_(),n=_i("vuepress-color-scheme",e.value.colorMode),r=N({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});bn(vf,r),fv(r)};let fs=null,or=null;const pv={wait:()=>fs,pending:()=>{fs=new Promise(e=>{or=e})},resolve:()=>{or==null||or(),fs=null,or=null}},yf=()=>pv,Kn=(e,t)=>{const{notFound:n,meta:r,path:o}=kr(e,t);return n?{text:o,link:o}:{text:r.title||o,link:o}},Mn=(e="",t="")=>Lc(t)||$r(t)?t:`${Sh(e)}${t}`,hv=e=>({text:e.title,link:e.link,children:Pi(e.children)}),Pi=e=>e?e.map(t=>hv(t)):[],bf=(e,t)=>[{text:e.title,children:Pi(t)}],Ef=(e,t,n,r="")=>{const o=(s,i)=>{var a;const l=Et(s)?Kn(Mn(i,s)):Et(s.link)?{...s,link:Vc(s.link)?Kn(Mn(i,s.link)).link:s.link}:s;if("children"in l)return{...l,children:l.children.map(u=>o(u,Mn(i,l.prefix)))};if(l.link===n){const u=((a=t[0])==null?void 0:a.level)===1?t[0].children:t;return{...l,children:Pi(u)}}return l};return e.map(s=>o(s,r))},gv=(e,t,n,r)=>{const o=w_(e).sort((s,i)=>i.length-s.length);for(const s of o)if(Ic(decodeURI(r),s)){const i=e[s];return i?i==="heading"?bf(t,n):Ef(i,n,r,s):[]}return console.warn(`${decodeURI(r)} is missing sidebar config.`),[]},Sf=Symbol("sidebarItems"),xi=()=>{const e=Je(Sf);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},_v=(e,t,n,r,o)=>e===!1?[]:e==="heading"?bf(t,o):Array.isArray(e)?Ef(e,o,n,r):ri(e)?gv(e,t,o,n):[],mv=()=>{const e=We(),t=xt(),n=qn(),r=Kt(),o=Hr(),s=N(()=>t.value.home?!1:t.value.sidebar??e.value.sidebar??"heading"),i=N(()=>_v(s.value,n.value,r.path,o.value,n.value.headers));bn(Sf,i)},vv=pe({__name:"Badge",props:{type:{default:"tip"},text:{default:""},vertical:{default:void 0}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Pe=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n};function yv(e,t,n,r,o,s){return j(),te("span",{class:rt(["vp-badge",n.type]),style:zn({verticalAlign:n.vertical})},[De(e.$slots,"default",{},()=>[nn(ce(n.text),1)])],6)}const bv=Pe(vv,[["render",yv],["__file","Badge.vue"]]),Ev=pe({__name:"VPHomeFeatures",setup(e,{expose:t}){t();const n=xt(),r=N(()=>n.value.features??[]),o={frontmatter:n,features:r};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),Sv={key:0,class:"vp-features"};function Av(e,t,n,r,o,s){return r.features.length?(j(),te("div",Sv,[(j(!0),te(Ae,null,Ht(r.features,i=>(j(),te("div",{key:i.title,class:"vp-feature"},[X("h2",null,ce(i.title),1),X("p",null,ce(i.details),1)]))),128))])):Me("",!0)}const wv=Pe(Ev,[["render",Av],["__file","VPHomeFeatures.vue"]]),Cv=pe({__name:"VPHomeFooter",setup(e,{expose:t}){t();const n=xt(),r=N(()=>n.value.footer),o=N(()=>n.value.footerHtml),s={frontmatter:n,footer:r,footerHtml:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),Tv=["innerHTML"],kv=["textContent"];function Ov(e,t,n,r,o,s){return r.footer?(j(),te(Ae,{key:0},[r.footerHtml?(j(),te("div",{key:0,class:"vp-footer","vp-footer":"",innerHTML:r.footer},null,8,Tv)):(j(),te("div",{key:1,class:"vp-footer","vp-footer":"",textContent:ce(r.footer)},null,8,kv))],64)):Me("",!0)}const Pv=Pe(Cv,[["render",Ov],["__file","VPHomeFooter.vue"]]),xv=pe({__name:"VPAutoLink",props:{config:{}},setup(e,{expose:t}){t();const n={get AutoLink(){return Fg}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Dv(e,t,n,r,o,s){return j(),Ie(r.AutoLink,{config:n.config},qd({before:Re(()=>[De(e.$slots,"before",Uo(oo(n.config)))]),after:Re(()=>[De(e.$slots,"after",Uo(oo(n.config)))]),_:2},[e.$slots.default?{name:"default",fn:Re(()=>[De(e.$slots,"default",Uo(oo(n.config)))]),key:"0"}:void 0]),1032,["config"])}const Xn=Pe(xv,[["render",Dv],["__file","VPAutoLink.vue"]]),Rv=pe({__name:"VPHomeHero",setup(e,{expose:t}){t();const n=xt(),r=li(),o=Oi(),s=N(()=>n.value.heroText===null?null:n.value.heroText||r.value.title||"Hello"),i=N(()=>n.value.tagline===null?null:n.value.tagline||r.value.description||"Welcome to your VuePress site"),l=N(()=>o.value&&n.value.heroImageDark!==void 0?n.value.heroImageDark:n.value.heroImage),a=N(()=>n.value.heroAlt||s.value||"hero"),u=N(()=>n.value.heroHeight??280),c=N(()=>Array.isArray(n.value.actions)?n.value.actions.map(({type:d="primary",...m})=>({type:d,...m})):[]),p={frontmatter:n,siteLocale:r,isDarkMode:o,heroText:s,tagline:i,heroImage:l,heroAlt:a,heroHeight:u,actions:c,HomeHeroImage:()=>{if(!l.value)return null;const d=Ee("img",{class:"vp-hero-image",src:ci(l.value),alt:a.value,height:u.value});return n.value.heroImageDark===void 0?d:Ee(ai,()=>d)},VPAutoLink:Xn};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Iv={class:"vp-hero"},Lv={key:0,id:"main-title"},Vv={key:1,class:"vp-hero-description"},Nv={key:2,class:"vp-hero-actions"};function Mv(e,t,n,r,o,s){return j(),te("header",Iv,[se(r.HomeHeroImage),r.heroText?(j(),te("h1",Lv,ce(r.heroText),1)):Me("",!0),r.tagline?(j(),te("p",Vv,ce(r.tagline),1)):Me("",!0),r.actions.length?(j(),te("p",Nv,[(j(!0),te(Ae,null,Ht(r.actions,i=>(j(),Ie(r.VPAutoLink,{key:i.text,class:rt(["vp-hero-action-button",[i.type]]),config:i},null,8,["class","config"]))),128))])):Me("",!0)])}const Fv=Pe(Rv,[["render",Mv],["__file","VPHomeHero.vue"]]),Bv=pe({__name:"VPHome",setup(e,{expose:t}){t();const n={VPHomeFeatures:wv,VPHomeFooter:Pv,VPHomeHero:Fv,get Content(){return ui}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),$v={class:"vp-home"},Hv={"vp-content":""};function Uv(e,t,n,r,o,s){return j(),te("main",$v,[se(r.VPHomeHero),se(r.VPHomeFeatures),X("div",Hv,[se(r.Content)]),se(r.VPHomeFooter)])}const jv=Pe(Bv,[["render",Uv],["__file","VPHome.vue"]]),Wv=pe({__name:"VPNavbarBrand",setup(e,{expose:t}){t();const n=Hr(),r=li(),o=We(),s=Oi(),i=N(()=>o.value.home||n.value),l=N(()=>r.value.title),a=N(()=>s.value&&o.value.logoDark!==void 0?o.value.logoDark:o.value.logo),u=N(()=>o.value.logoAlt??l.value),c=N(()=>l.value.toLocaleUpperCase().trim()===u.value.toLocaleUpperCase().trim()),p={routeLocale:n,siteLocale:r,themeLocale:o,isDarkMode:s,navbarBrandLink:i,navbarBrandTitle:l,navbarBrandLogo:a,navbarBrandLogoAlt:u,navBarLogoAltMatchesTitle:c,NavbarBrandLogo:()=>{if(!a.value)return null;const d=Ee("img",{class:"vp-site-logo",src:ci(a.value),alt:u.value});return o.value.logoDark===void 0?d:Ee(ai,()=>d)},get RouteLink(){return Lo}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Kv=["aria-hidden"];function zv(e,t,n,r,o,s){return j(),Ie(r.RouteLink,{to:r.navbarBrandLink},{default:Re(()=>[se(r.NavbarBrandLogo),r.navbarBrandTitle?(j(),te("span",{key:0,class:rt(["vp-site-name",{"vp-hide-mobile":r.navbarBrandLogo}]),"aria-hidden":r.navBarLogoAltMatchesTitle},ce(r.navbarBrandTitle),11,Kv)):Me("",!0)]),_:1},8,["to"])}const Gv=Pe(Wv,[["render",zv],["__file","VPNavbarBrand.vue"]]),qv=pe({__name:"VPDropdownTransition",setup(e,{expose:t}){t();const o={setHeight:s=>{s.style.height=`${s.scrollHeight}px`},unsetHeight:s=>{s.style.height=""}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function Yv(e,t,n,r,o,s){return j(),Ie(ni,{name:"vp-dropdown",onEnter:r.setHeight,onAfterEnter:r.unsetHeight,onBeforeLeave:r.setHeight},{default:Re(()=>[De(e.$slots,"default")]),_:3})}const Af=Pe(qv,[["render",Yv],["__file","VPDropdownTransition.vue"]]),Jv=pe({__name:"VPNavbarDropdown",props:{config:{}},setup(e,{expose:t}){t();const n=e,{config:r}=Au(n),o=Kt(),[s,i]=Pc(!1),l=N(()=>r.value.ariaLabel||r.value.text),a=(f,p)=>p[p.length-1]===f,u=f=>{f.detail===0?i():i(!1)};Ke(()=>o.path,()=>{i(!1)});const c={props:n,config:r,route:o,open:s,toggleOpen:i,dropdownAriaLabel:l,isLastItemOfArray:a,handleDropdown:u,VPAutoLink:Xn,VPDropdownTransition:Af};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),Xv=["aria-label"],Qv={class:"title"},Zv=["aria-label"],e1={class:"title"},t1={class:"vp-navbar-dropdown"},n1={class:"vp-navbar-dropdown-subtitle"},r1={key:1},o1={class:"vp-navbar-dropdown-subitem-wrapper"};function s1(e,t,n,r,o,s){return j(),te("div",{class:rt(["vp-navbar-dropdown-wrapper",{open:r.open}])},[X("button",{class:"vp-navbar-dropdown-title",type:"button","aria-label":r.dropdownAriaLabel,onClick:r.handleDropdown},[X("span",Qv,ce(r.config.text),1),t[1]||(t[1]=X("span",{class:"arrow down"},null,-1))],8,Xv),X("button",{class:"vp-navbar-dropdown-title-mobile",type:"button","aria-label":r.dropdownAriaLabel,onClick:t[0]||(t[0]=()=>r.toggleOpen())},[X("span",e1,ce(r.config.text),1),X("span",{class:rt(["arrow",r.open?"down":"right"])},null,2)],8,Zv),se(r.VPDropdownTransition,null,{default:Re(()=>[go(X("ul",t1,[(j(!0),te(Ae,null,Ht(r.config.children,i=>(j(),te("li",{key:i.text,class:"vp-navbar-dropdown-item"},["children"in i?(j(),te(Ae,{key:0},[X("h4",n1,[i.link?(j(),Ie(r.VPAutoLink,{key:0,config:i,onFocusout:()=>{r.isLastItemOfArray(i,r.config.children)&&i.children.length===0&&(r.open=!1)}},null,8,["config","onFocusout"])):(j(),te("span",r1,ce(i.text),1))]),X("ul",o1,[(j(!0),te(Ae,null,Ht(i.children,l=>(j(),te("li",{key:l.link,class:"vp-navbar-dropdown-subitem"},[se(r.VPAutoLink,{config:l,onFocusout:()=>{r.isLastItemOfArray(l,i.children)&&r.isLastItemOfArray(i,r.config.children)&&r.toggleOpen(!1)}},null,8,["config","onFocusout"])]))),128))])],64)):(j(),Ie(r.VPAutoLink,{key:1,config:i,onFocusout:()=>{r.isLastItemOfArray(i,r.config.children)&&r.toggleOpen(!1)}},null,8,["config","onFocusout"]))]))),128))],512),[[yo,r.open]])]),_:1})],2)}const i1=Pe(Jv,[["render",s1],["__file","VPNavbarDropdown.vue"]]),wf=(e,t="")=>Et(e)?Kn(Mn(t,e)):"children"in e?{...e,children:e.children.map(n=>wf(n,Mn(t,e.prefix)))}:{...e,link:Vc(e.link)?Kn(Mn(t,e.link)).link:e.link},l1=()=>{const e=We();return N(()=>(e.value.navbar||[]).map(t=>wf(t)))},Cf=e=>!Do(e)||e.includes("github.com")?"GitHub":e.includes("bitbucket.org")?"Bitbucket":e.includes("gitlab.com")?"GitLab":e.includes("gitee.com")?"Gitee":null,a1=()=>{const e=We(),t=N(()=>e.value.repo),n=N(()=>t.value?Cf(t.value):null),r=N(()=>t.value&&!Do(t.value)?`https://github.com/${t.value}`:t.value),o=N(()=>r.value?e.value.repoLabel?e.value.repoLabel:n.value===null?"Source":n.value:null);return N(()=>!r.value||!o.value?[]:[{text:o.value,link:r.value}])},u1=()=>{const e=Kt(),t=S_(),n=Hr(),r=Cc(),o=li(),s=cv(),i=We();return N(()=>{const l=Object.keys(r.value.locales);if(l.length<2)return[];const a=e.path,u=e.fullPath;return[{text:`${i.value.selectLanguageText}`,ariaLabel:`${i.value.selectLanguageAriaLabel??i.value.selectLanguageText}`,children:l.map(f=>{var y,S;const p=((y=r.value.locales)==null?void 0:y[f])??{},d=((S=s.value.locales)==null?void 0:S[f])??{},m=`${p.lang}`,v=d.selectLanguageName??m;if(m===o.value.lang)return{text:v,activeMatch:".",link:e.fullPath};const b=a.replace(n.value,f);return{text:v,link:t.value.some(g=>g===b)?u.replace(a,b):d.home??f}})}]})},c1="719px",f1={mobile:c1};var Rr;(function(e){e.Mobile="mobile"})(Rr||(Rr={}));const d1={[Rr.Mobile]:Number.parseInt(f1.mobile.replace("px",""),10)},Tf=(e,t)=>{const n=d1[e];Number.isInteger(n)&&(Xe("orientationchange",()=>{t(n)},!1),Xe("resize",()=>{t(n)},!1),ot(()=>{t(n)}))},p1=pe({__name:"VPNavbarItems",setup(e,{expose:t}){t();const n=l1(),r=u1(),o=a1(),s=ye(!1),i=N(()=>We().value.navbarLabel??"site navigation"),l=N(()=>[...n.value,...r.value,...o.value]);Tf(Rr.Mobile,u=>{s.value=window.innerWidth<u});const a={navbarConfig:n,navbarSelectLanguage:r,navbarRepo:o,isMobile:s,navbarLabel:i,navbarLinks:l,VPAutoLink:Xn,VPNavbarDropdown:i1};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),h1=["aria-label"];function g1(e,t,n,r,o,s){return r.navbarLinks.length?(j(),te("nav",{key:0,class:"vp-navbar-items","aria-label":r.navbarLabel},[(j(!0),te(Ae,null,Ht(r.navbarLinks,i=>(j(),te("div",{key:i.text,class:"vp-navbar-item"},["children"in i?(j(),Ie(r.VPNavbarDropdown,{key:0,class:rt({mobile:r.isMobile}),config:i},null,8,["class","config"])):(j(),Ie(r.VPAutoLink,{key:1,config:i},null,8,["config"]))]))),128))],8,h1)):Me("",!0)}const kf=Pe(p1,[["render",g1],["__file","VPNavbarItems.vue"]]),_1={},m1={class:"dark-icon",viewBox:"0 0 32 32"};function v1(e,t){return j(),te("svg",m1,t[0]||(t[0]=[X("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1)]))}const y1=Pe(_1,[["render",v1],["__file","VPDarkIcon.vue"]]),b1={},E1={class:"light-icon",viewBox:"0 0 32 32"};function S1(e,t){return j(),te("svg",E1,t[0]||(t[0]=[Ap('<path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path>',9)]))}const A1=Pe(b1,[["render",S1],["__file","VPLightIcon.vue"]]),w1=pe({__name:"VPToggleColorModeButton",setup(e,{expose:t}){t();const n=We(),r=Oi(),s={themeLocale:n,isDarkMode:r,toggleColorMode:()=>{r.value=!r.value},VPDarkIcon:y1,VPLightIcon:A1};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),C1=["title"];function T1(e,t,n,r,o,s){return j(),te("button",{type:"button",class:"vp-toggle-color-mode-button",title:r.themeLocale.toggleColorMode,onClick:r.toggleColorMode},[go(se(r.VPLightIcon,null,null,512),[[yo,!r.isDarkMode]]),go(se(r.VPDarkIcon,null,null,512),[[yo,r.isDarkMode]])],8,C1)}const k1=Pe(w1,[["render",T1],["__file","VPToggleColorModeButton.vue"]]),O1=pe({__name:"VPToggleSidebarButton",emits:["toggle"],setup(e,{expose:t}){t();const r={themeLocale:We()};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),P1=["title"];function x1(e,t,n,r,o,s){return j(),te("div",{class:"vp-toggle-sidebar-button",title:r.themeLocale.toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:t[0]||(t[0]=i=>e.$emit("toggle"))},t[1]||(t[1]=[X("div",{class:"icon","aria-hidden":"true"},[X("span"),X("span"),X("span")],-1)]),8,P1)}const D1=Pe(O1,[["render",x1],["__file","VPToggleSidebarButton.vue"]]),R1=pe({__name:"VPNavbar",emits:["toggleSidebar"],setup(e,{expose:t}){t();const n=Dc("SearchBox")?Xs("SearchBox"):()=>null,r=We(),o=Bi("navbar"),s=Bi("navbar-brand"),i=ye(0),l=N(()=>i.value?{maxWidth:`${i.value}px`}:{}),a=(c,f)=>{var m;const p=(m=c==null?void 0:c.ownerDocument.defaultView)==null?void 0:m.getComputedStyle(c,null)[f],d=Number.parseInt(p,10);return Number.isNaN(d)?0:d};Tf(Rr.Mobile,c=>{var p;const f=a(o.value,"paddingLeft")+a(o.value,"paddingRight");window.innerWidth<c?i.value=0:i.value=o.value.offsetWidth-f-(((p=s.value)==null?void 0:p.offsetWidth)??0)});const u={SearchBox:n,themeLocale:r,navbar:o,navbarBrand:s,linksWrapperMaxWidth:i,linksWrapperStyle:l,getCssValue:a,VPNavbarBrand:Gv,VPNavbarItems:kf,VPToggleColorModeButton:k1,VPToggleSidebarButton:D1};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),I1={ref:"navbar",class:"vp-navbar","vp-navbar":""},L1={ref:"navbar-brand"};function V1(e,t,n,r,o,s){return j(),te("header",I1,[se(r.VPToggleSidebarButton,{onToggle:t[0]||(t[0]=i=>e.$emit("toggleSidebar"))}),X("span",L1,[se(r.VPNavbarBrand)],512),X("div",{class:"vp-navbar-items-wrapper",style:zn(r.linksWrapperStyle)},[De(e.$slots,"before"),se(r.VPNavbarItems,{class:"vp-hide-mobile"}),De(e.$slots,"after"),r.themeLocale.colorModeSwitch?(j(),Ie(r.VPToggleColorModeButton,{key:0})):Me("",!0),se(r.SearchBox)],4)],512)}const N1=Pe(R1,[["render",V1],["__file","VPNavbar.vue"]]),M1={},F1={class:"edit-icon",viewBox:"0 0 1024 1024"};function B1(e,t){return j(),te("svg",F1,t[0]||(t[0]=[X("g",{fill:"currentColor"},[X("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),X("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})],-1)]))}const $1=Pe(M1,[["render",B1],["__file","VPEditIcon.vue"]]),H1=()=>{const e=We(),t=qn(),n=xt();return N(()=>{var o;return n.value.contributors??e.value.contributors??!0?((o=t.value.git)==null?void 0:o.contributors)??null:null})},U1={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},j1=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Cf(e);return n!==null?U1[n]:null},W1=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const s=j1({docsRepo:e,editLinkPattern:o});return s?s.replace(/:repo/,Do(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,dc(`${fc(n)}/${r}`)):null},K1=()=>{const e=We(),t=qn(),n=xt();return N(()=>{if(!(n.value.editLink??e.value.editLink??!0))return null;const{repo:o,docsRepo:s=o,docsBranch:i="main",docsDir:l="",editLinkText:a}=e.value;if(!s)return null;const u=W1({docsRepo:s,docsBranch:i,docsDir:l,filePathRelative:t.value.filePathRelative,editLinkPattern:n.value.editLinkPattern??e.value.editLinkPattern});return u?{text:a??"Edit this page",link:u}:null})},z1=()=>{const e=We(),t=qn(),n=xt();return N(()=>{var s;return!(n.value.lastUpdated??e.value.lastUpdated??!0)||!((s=t.value.git)!=null&&s.updatedTime)?null:new Date(t.value.git.updatedTime).toLocaleString()})},G1=pe({__name:"VPPageMeta",setup(e,{expose:t}){t();const n=We(),r=K1(),o=z1(),s=H1(),i={themeLocale:n,editLink:r,lastUpdated:o,contributors:s,VPAutoLink:Xn,VPEditIcon:$1};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),q1={class:"vp-page-meta"},Y1={key:0,class:"vp-meta-item edit-link"},J1={class:"vp-meta-item git-info"},X1={key:0,class:"vp-meta-item last-updated"},Q1={class:"meta-item-label"},Z1={class:"meta-item-info"},ey={key:1,class:"vp-meta-item contributors"},ty={class:"meta-item-label"},ny={class:"meta-item-info"},ry=["title"];function oy(e,t,n,r,o,s){const i=Xs("ClientOnly");return j(),te("footer",q1,[r.editLink?(j(),te("div",Y1,[se(r.VPAutoLink,{class:"label",config:r.editLink},{before:Re(()=>[se(r.VPEditIcon)]),_:1},8,["config"])])):Me("",!0),X("div",J1,[r.lastUpdated?(j(),te("div",X1,[X("span",Q1,ce(r.themeLocale.lastUpdatedText)+": ",1),se(i,null,{default:Re(()=>[X("span",Z1,ce(r.lastUpdated),1)]),_:1})])):Me("",!0),r.contributors&&r.contributors.length?(j(),te("div",ey,[X("span",ty,ce(r.themeLocale.contributorsText)+": ",1),X("span",ny,[(j(!0),te(Ae,null,Ht(r.contributors,(l,a)=>(j(),te(Ae,{key:a},[X("span",{class:"contributor",title:`email: ${l.email}`},ce(l.name),9,ry),a!==r.contributors.length-1?(j(),te(Ae,{key:0},[nn(", ")],64)):Me("",!0)],64))),128))])])):Me("",!0)])])}const sy=Pe(G1,[["render",oy],["__file","VPPageMeta.vue"]]),iy=()=>{const e=Gn(),t=Kt();return n=>{n&&(Lc(n)?t.path!==n&&e.push(n):$r(n)?window.open(n):e.push(encodeURI(n)))}},Ga=(e,t)=>e===!1?!1:Et(e)?Kn(e,t):ri(e)?{...e,link:Kn(e.link,t).link}:null,Ns=(e,t,n)=>{const r=e.findIndex(s=>s.link===t);if(r!==-1){const s=e[r+n];return s?s.link?s:"prefix"in s&&!kr(s.prefix).notFound?{...s,link:s.prefix}:null:null}for(const s of e)if("children"in s){const i=Ns(s.children,t,n);if(i)return i}const o=e.findIndex(s=>"prefix"in s&&s.prefix===t);if(o!==-1){const s=e[o+n];return s?s.link?s:"prefix"in s&&!kr(s.prefix).notFound?{...s,link:s.prefix}:null:null}return null},ly=()=>{const e=xt(),t=We(),n=xi(),r=Kt(),o=N(()=>{const i=Ga(e.value.prev,r.path);return i===!1?null:i??(t.value.prev===!1?null:Ns(n.value,r.path,-1))}),s=N(()=>{const i=Ga(e.value.next,r.path);return i===!1?null:i??(t.value.next===!1?null:Ns(n.value,r.path,1))});return{prevLink:o,nextLink:s}},ay=pe({__name:"VPPageNav",setup(e,{expose:t}){t();const n=We(),r=iy(),{prevLink:o,nextLink:s}=ly(),i=N(()=>n.value.pageNavbarLabel??"page navigation");Xe("keydown",a=>{a.altKey&&(a.key==="ArrowRight"?s.value&&(r(s.value.link),a.preventDefault()):a.key==="ArrowLeft"&&o.value&&(r(o.value.link),a.preventDefault()))});const l={themeLocale:n,navigate:r,prevLink:o,nextLink:s,navbarLabel:i,VPAutoLink:Xn};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),uy=["aria-label"],cy={class:"hint"},fy={class:"link"},dy={class:"hint"},py={class:"link"};function hy(e,t,n,r,o,s){return r.prevLink||r.nextLink?(j(),te("nav",{key:0,class:"vp-page-nav","aria-label":r.navbarLabel},[r.prevLink?(j(),Ie(r.VPAutoLink,{key:0,class:"prev",config:r.prevLink},{default:Re(()=>[X("div",cy,[t[0]||(t[0]=X("span",{class:"arrow left"},null,-1)),nn(" "+ce(r.themeLocale.prev??"Prev"),1)]),X("div",fy,[X("span",null,ce(r.prevLink.text),1)])]),_:1},8,["config"])):Me("",!0),r.nextLink?(j(),Ie(r.VPAutoLink,{key:1,class:"next",config:r.nextLink},{default:Re(()=>[X("div",dy,[nn(ce(r.themeLocale.next??"Next")+" ",1),t[1]||(t[1]=X("span",{class:"arrow right"},null,-1))]),X("div",py,[X("span",null,ce(r.nextLink.text),1)])]),_:1},8,["config"])):Me("",!0)],8,uy)):Me("",!0)}const gy=Pe(ay,[["render",hy],["__file","VPPageNav.vue"]]),_y=pe({__name:"VPPage",setup(e,{expose:t}){t();const n={VPPageMeta:sy,VPPageNav:gy,get Content(){return ui}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),my={class:"vp-page"},vy={"vp-content":""};function yy(e,t,n,r,o,s){return j(),te("main",my,[De(e.$slots,"top"),X("div",vy,[De(e.$slots,"content-top"),se(r.Content),De(e.$slots,"content-bottom")]),se(r.VPPageMeta),se(r.VPPageNav),De(e.$slots,"bottom")])}const by=Pe(_y,[["render",yy],["__file","VPPage.vue"]]),qa=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Ey=(e,t)=>{if(t.hash===e)return!0;const n=qa(t.path),r=qa(e);return n===r},Of=(e,t)=>e.link&&Ey(e.link,t)?!0:"children"in e?e.children.some(n=>Of(n,t)):!1,Sy=pe({__name:"VPSidebarItem",props:{item:{},depth:{default:0}},setup(e,{expose:t}){t();const n=e,{item:r,depth:o}=Au(n),s=Kt(),i=Gn(),l=N(()=>"collapsible"in r.value&&r.value.collapsible),a=N(()=>Of(r.value,s)),u=N(()=>({"vp-sidebar-item":!0,"vp-sidebar-heading":o.value===0,active:a.value,collapsible:l.value})),c=N(()=>l.value?a.value:!0),[f,p]=Pc(c.value),d=b=>{l.value&&(b.preventDefault(),p())},m=i.afterEach(()=>{an(()=>{f.value=c.value})});Js(()=>{m()});const v={props:n,item:r,depth:o,route:s,router:i,collapsible:l,isActive:a,itemClass:u,isOpenDefault:c,isOpen:f,toggleIsOpen:p,onClick:d,unregisterRouterHook:m,VPAutoLink:Xn,VPDropdownTransition:Af};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),Ay={class:"vp-sidebar-children"};function wy(e,t,n,r,o,s){const i=Xs("VPSidebarItem",!0);return j(),te("li",null,[r.item.link?(j(),Ie(r.VPAutoLink,{key:0,class:rt(r.itemClass),config:r.item},null,8,["class","config"])):(j(),te("p",{key:1,tabindex:"0",class:rt(r.itemClass),onClick:r.onClick,onKeydown:ih(r.onClick,["enter"])},[nn(ce(r.item.text)+" ",1),r.collapsible?(j(),te("span",{key:0,class:rt(["arrow",r.isOpen?"down":"right"])},null,2)):Me("",!0)],34)),"children"in r.item&&r.item.children.length?(j(),Ie(r.VPDropdownTransition,{key:2},{default:Re(()=>[go(X("ul",Ay,[(j(!0),te(Ae,null,Ht(r.item.children,l=>(j(),Ie(i,{key:`${r.depth}${l.text}${l.link}`,item:l,depth:r.depth+1},null,8,["item","depth"]))),128))],512),[[yo,r.isOpen]])]),_:1})):Me("",!0)])}const Cy=Pe(Sy,[["render",wy],["__file","VPSidebarItem.vue"]]),Ty=pe({__name:"VPSidebarItems",setup(e,{expose:t}){t();const n=Kt(),r=xi();ot(()=>{Ke(()=>n.hash,s=>{const i=document.querySelector(".vp-sidebar");if(!i)return;const l=document.querySelector(`.vp-sidebar .vp-sidebar-item.auto-link[href="${n.path}${s}"]`);if(!l)return;const{top:a,height:u}=i.getBoundingClientRect(),{top:c,height:f}=l.getBoundingClientRect();c<a?l.scrollIntoView(!0):c+f>a+u&&l.scrollIntoView(!1)})});const o={route:n,sidebarItems:r,VPSidebarItem:Cy};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),ky={key:0,class:"vp-sidebar-items"};function Oy(e,t,n,r,o,s){return r.sidebarItems.length?(j(),te("ul",ky,[(j(!0),te(Ae,null,Ht(r.sidebarItems,i=>(j(),Ie(r.VPSidebarItem,{key:`${i.text}${i.link}`,item:i},null,8,["item"]))),128))])):Me("",!0)}const Py=Pe(Ty,[["render",Oy],["__file","VPSidebarItems.vue"]]),xy=pe({__name:"VPSidebar",setup(e,{expose:t}){t();const n={VPNavbarItems:kf,VPSidebarItems:Py};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Dy={class:"vp-sidebar","vp-sidebar":""};function Ry(e,t,n,r,o,s){return j(),te("aside",Dy,[se(r.VPNavbarItems),De(e.$slots,"top"),se(r.VPSidebarItems),De(e.$slots,"bottom")])}const Iy=Pe(xy,[["render",Ry],["__file","VPSidebar.vue"]]),Ly=pe({__name:"Layout",setup(e,{expose:t}){t();const n=qn(),r=xt(),o=We(),s=N(()=>r.value.navbar!==!1&&o.value.navbar!==!1),i=xi(),l=ye(!1),a=g=>{l.value=typeof g=="boolean"?g:!l.value},u={x:0,y:0},c=g=>{u.x=g.changedTouches[0].clientX,u.y=g.changedTouches[0].clientY},f=g=>{const E=g.changedTouches[0].clientX-u.x,V=g.changedTouches[0].clientY-u.y;Math.abs(E)>Math.abs(V)&&Math.abs(E)>40&&(E>0&&u.x<=80?a(!0):a(!1))},p=N(()=>r.value.externalLinkIcon??o.value.externalLinkIcon??!0),d=N(()=>[{"no-navbar":!s.value,"no-sidebar":!i.value.length,"sidebar-open":l.value,"external-link-icon":p.value},r.value.pageClass]);let m;ot(()=>{m=Gn().afterEach(()=>{a(!1)})}),Oo(()=>{m()});const v=yf(),b=v.resolve,y=v.pending,S={page:n,frontmatter:r,themeLocale:o,shouldShowNavbar:s,sidebarItems:i,isSidebarOpen:l,toggleSidebar:a,touchStart:u,onTouchStart:c,onTouchEnd:f,enableExternalLinkIcon:p,containerClass:d,get unregisterRouterHook(){return m},set unregisterRouterHook(g){m=g},scrollPromise:v,onBeforeEnter:b,onBeforeLeave:y,VPHome:jv,VPNavbar:N1,VPPage:by,VPSidebar:Iy};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}});function Vy(e,t,n,r,o,s){return j(),te("div",{class:rt(["vp-theme-container",r.containerClass]),"vp-container":"",onTouchstart:r.onTouchStart,onTouchend:r.onTouchEnd},[De(e.$slots,"navbar",{},()=>[r.shouldShowNavbar?(j(),Ie(r.VPNavbar,{key:0,onToggleSidebar:r.toggleSidebar},{before:Re(()=>[De(e.$slots,"navbar-before")]),after:Re(()=>[De(e.$slots,"navbar-after")]),_:3})):Me("",!0)]),X("div",{class:"vp-sidebar-mask",onClick:t[0]||(t[0]=i=>r.toggleSidebar(!1))}),De(e.$slots,"sidebar",{},()=>[se(r.VPSidebar,null,{top:Re(()=>[De(e.$slots,"sidebar-top")]),bottom:Re(()=>[De(e.$slots,"sidebar-bottom")]),_:3})]),De(e.$slots,"page",{},()=>[r.frontmatter.home?(j(),Ie(r.VPHome,{key:0})):(j(),Ie(ni,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:r.onBeforeEnter,onBeforeLeave:r.onBeforeLeave},{default:Re(()=>[(j(),Ie(r.VPPage,{key:r.page.path},{top:Re(()=>[De(e.$slots,"page-top")]),"content-top":Re(()=>[De(e.$slots,"page-content-top")]),"content-bottom":Re(()=>[De(e.$slots,"page-content-bottom")]),bottom:Re(()=>[De(e.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34)}const Pf=Pe(Ly,[["render",Vy],["__file","Layout.vue"]]),Ny=pe({__name:"NotFound",setup(e,{expose:t}){t();const n=Hr(),r=We(),o=r.value.notFound??["Not Found"],s=()=>o[Math.floor(Math.random()*o.length)],i=r.value.home??n.value,l=r.value.backToHome??"Back to home",a={routeLocale:n,themeLocale:r,messages:o,getMsg:s,homeLink:i,homeText:l,get RouteLink(){return Lo}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),My={class:"vp-theme-container","vp-container":""},Fy={class:"page"},By={"vp-content":""};function $y(e,t,n,r,o,s){return j(),te("div",My,[X("main",Fy,[X("div",By,[t[0]||(t[0]=X("h1",null,"404",-1)),X("blockquote",null,ce(r.getMsg()),1),se(r.RouteLink,{to:r.homeLink},{default:Re(()=>[nn(ce(r.homeText),1)]),_:1},8,["to"])])])])}const Hy=Pe(Ny,[["render",$y],["__scopeId","data-v-cb436ded"],["__file","NotFound.vue"]]),Uy=zt({enhance({app:e,router:t}){Dc("Badge")||e.component("Badge",bv);const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await yf().wait(),n(...r))},setup(){dv(),mv()},layouts:{Layout:Pf,NotFound:Hy}}),jy=Object.freeze(Object.defineProperty({__proto__:null,default:Uy},Symbol.toStringTag,{value:"Module"}));function Wy(e){return Hs()?(su(e),!0):!1}function Di(e){return typeof e=="function"?e():$t(e)}const Ky=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const zy=Object.prototype.toString,Gy=e=>zy.call(e)==="[object Object]",qy=()=>{};function Yy(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const xf=e=>e();function Jy(e=xf){const t=ye(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...s)=>{t.value&&e(...s)};return{isActive:Vr(t),pause:n,resume:r,eventFilter:o}}function Xy(e){return Cn()}function Qy(e,t,n={}){const{eventFilter:r=xf,...o}=n;return Ke(e,Yy(r,t),o)}function Zy(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:s,pause:i,resume:l,isActive:a}=Jy(r);return{stop:Qy(e,t,{...o,eventFilter:s}),pause:i,resume:l,isActive:a}}function eb(e,t=!0,n){Xy()?ot(e,n):t?e():an(e)}function tb(e){var t;const n=Di(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Eo=Ky?window:void 0;function Ya(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=Eo):[t,n,r,o]=e,!t)return qy;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const s=[],i=()=>{s.forEach(c=>c()),s.length=0},l=(c,f,p,d)=>(c.addEventListener(f,p,d),()=>c.removeEventListener(f,p,d)),a=Ke(()=>[tb(t),Di(o)],([c,f])=>{if(i(),!c)return;const p=Gy(f)?{...f}:f;s.push(...n.flatMap(d=>r.map(m=>l(c,d,m,p))))},{immediate:!0,flush:"post"}),u=()=>{a(),i()};return Wy(u),u}const eo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},to="__vueuse_ssr_handlers__",nb=rb();function rb(){return to in eo||(eo[to]=eo[to]||{}),eo[to]}function ob(e,t){return nb[e]||t}function sb(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ib={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ja="vueuse-storage";function lb(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:u=!1,shallow:c,window:f=Eo,eventFilter:p,onError:d=k=>{console.error(k)},initOnMounted:m}=r,v=(c?dt:ye)(typeof t=="function"?t():t);if(!n)try{n=ob("getDefaultStorage",()=>{var k;return(k=Eo)==null?void 0:k.localStorage})()}catch(k){d(k)}if(!n)return v;const b=Di(t),y=sb(b),S=(o=r.serializer)!=null?o:ib[y],{pause:g,resume:E}=Zy(v,()=>U(v.value),{flush:s,deep:i,eventFilter:p});f&&l&&eb(()=>{Ya(f,"storage",Q),Ya(f,Ja,I),m&&Q()}),m||Q();function V(k,P){f&&f.dispatchEvent(new CustomEvent(Ja,{detail:{key:e,oldValue:k,newValue:P,storageArea:n}}))}function U(k){try{const P=n.getItem(e);if(k==null)V(P,null),n.removeItem(e);else{const C=S.write(k);P!==C&&(n.setItem(e,C),V(P,C))}}catch(P){d(P)}}function D(k){const P=k?k.newValue:n.getItem(e);if(P==null)return a&&b!=null&&n.setItem(e,S.write(b)),b;if(!k&&u){const C=S.read(P);return typeof u=="function"?u(C,b):y==="object"&&!Array.isArray(C)?{...b,...C}:C}else return typeof P!="string"?P:S.read(P)}function Q(k){if(!(k&&k.storageArea!==n)){if(k&&k.key==null){v.value=b;return}if(!(k&&k.key!==e)){g();try{(k==null?void 0:k.newValue)!==S.write(v.value)&&(v.value=D(k))}catch(P){d(P)}finally{k?an(E):E()}}}}function I(k){Q(k.detail)}return v}function ab(e,t,n={}){const{window:r=Eo}=n;return lb(e,t,r==null?void 0:r.sessionStorage,n)}const ub=Object.entries;var cb={autoLocale:!1,switchLocale:!1,localeConfig:{"/eng/":["en-US"]},defaultLocale:"/eng/",localeFallback:!0,defaultBehavior:"defaultLocale"};const fb=cb;ub(fb.localeConfig);ab("VUEPRESS_REDIRECT_LOCALES",{});const db=zt({setup(){},rootComponents:[]}),pb=Object.freeze(Object.defineProperty({__proto__:null,default:db},Symbol.toStringTag,{value:"Module"}));var ae=(e=>(e.Collaborator="collaborator",e.Author="author",e.TechLead="tech lead",e.TeamLead="team lead",e.Developer="developer",e))(ae||{}),ge=(e=>(e.ActiveDeveloped="actively-developed",e.PassivelyMaintained="passively-maintained",e.AsIs="as-is",e.Experimental="experimental",e.LookingForMaintainer="looking-for-maintainer",e.Deprecated="deprecated",e))(ge||{}),F=(e=>(e.C="C",e.Go="Go",e.JavaScript="JS",e.TypeScript="TS",e.Rust="Rust",e.Python="Python",e.Php="PHP",e.Deno="Deno",e.NodeJS="NodeJS",e.Flask="Flask",e.React="React",e.Antd="Antd",e.Postgresql="PostgreSQL",e.Docker="Docker",e.Drone="Drone CI",e.Woodpecker="Woodpecker CI",e.Bash="Bash",e.TreeSitter="TreeSitter",e.Nix="Nix",e.Lua="Lua",e.Sqlite="Sqlite",e.Vue="Vue",e.Vuepress="Vuepress",e.Godot="Godot",e.Haskell="Haskell",e))(F||{});const hb=[{name:"nixeovim",url:"/pleshevskiy/nixeovim",description:"Configure and build neovim editor using nix",roles:[ae.Author],technologies:[F.Nix],startDate:new Date("2024-04-24"),status:ge.ActiveDeveloped},{name:"picsg",url:"/pleshevskiy/picsg",description:"A tool for steganographing information in a picture encoded using the Vernam cipher.",roles:[ae.Author],technologies:[F.Haskell],startDate:new Date("2024-04-13"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"Mindustry tools",url:"/pleshevskiy/mindustry-tools",description:"Tools for the Mindustry game",roles:[ae.Author],technologies:[F.Nix,F.Godot],startDate:new Date("2024-01-07"),status:ge.PassivelyMaintained},{name:"Master Progress Rosmintrud tools",url:"https://rosmintrud.masterprogress.ru",description:"Internal service to prepare documents for the rosmintrud (SPA)",roles:[ae.TechLead],technologies:[F.Deno,F.Sqlite,F.TypeScript,F.Vue,F.Docker,F.Woodpecker,F.Nix],startDate:new Date("2023-07-03"),status:ge.PassivelyMaintained},{name:"yandexgpt_tg_bot",url:"/pleshevskiy/yandexgpt_tg_bot",description:"The Telegram bot to describe article with link by YandexGPT.",roles:[ae.Author],technologies:[F.JavaScript,F.NodeJS,F.Nix],startDate:new Date("2023-06-27"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"tree-sitter-plpgsql",url:"/pleshevskiy/tree-sitter-plpgsql",description:"plpgsql grammar for tree-sitter",roles:[ae.Author],technologies:[F.C,F.JavaScript,F.TreeSitter,F.Nix],startDate:new Date("2023-01-05"),status:ge.PassivelyMaintained},{name:"wd2",url:"/pleshevskiy/wd2",description:"A wrapper over d2 which allows to use additional configs from d2 file",roles:[ae.Author],technologies:[F.Bash,F.Nix],startDate:new Date("2022-12-12"),endDate:new Date("2023-07-31"),status:ge.AsIs},{name:"tree-sitter-d2",url:"/pleshevskiy/tree-sitter-d2",description:"d2 grammar for tree-sitter",roles:[ae.Author],technologies:[F.C,F.JavaScript,F.TreeSitter,F.Nix],startDate:new Date("2022-12-04"),status:ge.ActiveDeveloped},{name:"nix2lua",url:"/mynix/nix2lua",description:"This is a small but functional library that converts your nix configurations into lua format.",roles:[ae.Author],technologies:[F.Nix,F.Lua],startDate:new Date("2022-11-22"),status:ge.PassivelyMaintained},{name:"vnetod",url:"/pleshevskiy/vnetod",description:"Dotenv section switcher",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-07-29"),status:ge.PassivelyMaintained},{name:"estring",url:"/pleshevskiy/estring",description:"A simple way to parse a string using type annotations.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-07-23"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"enve",url:"/pleshevskiy/enve",description:"It helps you work with environment variables and convert it to any type using only type annotations",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-07-18"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"docker stack drone plugin",url:"/pleshevskiy/docker_stack",description:"Deploy to production using `docker stack deploy`",roles:[ae.Author],technologies:[F.Docker,F.Drone,F.Woodpecker],startDate:new Date("2022-06-06"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"dexios",url:"/github/dexios",description:"Dexios is a fast, secure, and open source command-line encryption tool.",roles:[ae.Collaborator],technologies:[F.Rust],startDate:new Date("2022-06-01"),endDate:new Date("2023-02-28")},{name:"recipes",url:"/pleshevskiy/recipes",description:"Site with recipes which cares about privacy",roles:[ae.Author],technologies:[F.TypeScript,F.Deno,F.Rust],startDate:new Date("2022-05-04"),status:ge.PassivelyMaintained},{name:"pleshevski.ru",url:"/pleshevskiy/pleshevski.ru",description:"Source code of my personal site",roles:[ae.Author],technologies:[F.TypeScript,F.Vue,F.Vuepress,F.Nix],startDate:new Date("2022-03-16"),status:ge.PassivelyMaintained},{name:"paren",url:"/pleshevskiy/paren",description:"Library for parsing and rendering information.",roles:[ae.Author],technologies:[F.TypeScript,F.Deno],startDate:new Date("2022-03-14"),endDate:new Date("2024-07-25"),status:ge.Experimental},{name:"hwt",url:"/pleshevskiy/hwt",description:"healthy workaholic timer – A tool that keeps you from breaking your health by working all day.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-02-04"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"ood_persistence",url:"/pleshevskiy/ood_persistence",description:"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2021-10-12"),endDate:new Date("2021-10-21"),status:ge.Deprecated},{name:"migra",url:"/pleshevskiy/migra",description:"Simple SQL migration manager for your project.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2021-01-31"),endDate:new Date("2022-03-17"),status:ge.AsIs},{name:"espruino-starter",url:"/pleshevskiy/espruino-starter",description:"Quickly start creating your new project on the espruino board or a board based on it.",roles:[ae.Author],technologies:[F.JavaScript],startDate:new Date("2021-08-23"),status:ge.AsIs},{name:"react-rest-request",url:"/pleshevskiy/react-rest-request",description:"Minimalistic REST API client for React inspired by Apollo.",roles:[ae.Author],technologies:[F.TypeScript,F.React],startDate:new Date("2020-10-04"),endDate:new Date("2023-03-02"),status:ge.Deprecated},{name:"sonic-channel",url:"/pleshevskiy/sonic-channel",description:"Rust client for sonic search backend.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2020-07-18"),status:ge.PassivelyMaintained},{name:"itconfig",url:"/pleshevskiy/itconfig",description:"Easy build a configs from environment variables and use it in globally.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2019-12-22"),endDate:new Date("2022-07-24"),status:ge.Deprecated},{name:"it-fsm",url:"/pleshevskiy/it-fsm",description:"Simple full-featured finite state machine for your project",roles:[ae.Author],technologies:[F.TypeScript,F.NodeJS,F.Deno],startDate:new Date("2019-10-11"),status:ge.PassivelyMaintained},{name:"Cabinet Master Progress",url:"https://cabinet.masterprogress.ru",description:"Student's cabinet of the educational center Master Progress (SSR + SPA)",roles:[ae.TechLead],technologies:[F.Python,F.Flask,F.Postgresql,F.TypeScript,F.React,F.Docker,F.Woodpecker,F.Nix],startDate:new Date("2019-09-22"),status:ge.PassivelyMaintained},{name:"genrss",url:"/pleshevskiy/genrss",description:"RSS generator for python",roles:[ae.Author],technologies:[F.Python],startDate:new Date("2019-07-23"),status:ge.AsIs},{name:"marshmallow_pageinfo",url:"/pleshevskiy/marshmallow_pageinfo",description:"Page info marshmallow schema for api",roles:[ae.Author],technologies:[F.Python],startDate:new Date("2019-10-05"),endDate:new Date("2023-03-02"),status:ge.AsIs},{name:"Binary Management",url:"https://www.binarymanagement.com",description:"Project management tool for interior designers",roles:[ae.Developer,ae.TechLead,ae.TeamLead],technologies:[F.TypeScript,F.NodeJS,F.React,F.Antd,F.Docker,F.Drone,F.Rust,F.Nix],startDate:new Date("2018-09-15"),status:ge.ActiveDeveloped},{name:"Core Spirit",url:"https://corespirit.com",description:"Social platform focusing on human and planetary enhancement",roles:[ae.Developer],technologies:[F.TypeScript,F.NodeJS,F.Go,F.Python,F.React,F.Docker,F.Drone],startDate:new Date("2018-09-05"),endDate:new Date("2019-12-31")},{name:"Master Progress",url:"https://masterprogress.ru",description:"Main website of the educational center Master Progress (SSR + Forms)",roles:[ae.TechLead],technologies:[F.Python,F.Flask,F.JavaScript,F.Nix],startDate:new Date("2018-04-10"),status:ge.PassivelyMaintained},{name:"ictmpl",url:"/pleshevskiy/ictmpl",description:"Generate projects from templates",roles:[ae.Author],technologies:[F.Python],startDate:new Date("2018-06-30"),endDate:new Date("2023-03-02"),status:ge.AsIs}];function gb(e){return e.toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"})}const _b=e=>e.url.startsWith("https://")?e.url:new URL(e.url,"https://git.pleshevski.ru").toString(),mb=Object.freeze(Object.defineProperty({__proto__:null,getExternalLink:_b},Symbol.toStringTag,{value:"Module"}));function sr(e){return(e==null?void 0:e.valueOf())??1/0}const vb={name:"WorksPage",computed:{tableTheme(){return this.$themeLocale.worksTable??{}}}},yb=pe({...vb,setup(e,{expose:t}){t();const n=N(()=>hb.concat().sort((o,s)=>sr(s.endDate)-sr(o.endDate)||sr(s.startDate)-sr(o.startDate))),r={date2num:sr,works:n,get renderDate(){return gb},get w(){return mb}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),bb=["href"],Eb=["innerHTML"],Sb={key:0};function Ab(e,t,n,r,o,s){return j(),te("table",null,[X("thead",null,[X("tr",null,[X("th",null,ce(s.tableTheme.name),1),X("th",null,ce(s.tableTheme.description),1),X("th",null,ce(s.tableTheme.role),1),X("th",null,ce(s.tableTheme.technologies),1),X("th",null,ce(s.tableTheme.status),1),X("th",null,ce(s.tableTheme.dates),1)])]),X("tbody",null,[(j(!0),te(Ae,null,Ht(r.works,i=>(j(),te("tr",null,[X("td",null,[X("a",{rel:"nofollow noopener",href:r.w.getExternalLink(i)},ce(i.name),9,bb)]),X("td",null,ce(i.description),1),X("td",{innerHTML:i.roles.join(", ")},null,8,Eb),X("td",null,ce(i.technologies.join(", ")),1),X("td",null,ce(i.status),1),X("td",null,[X("div",null,[X("small",{class:rt({grey:i.endDate})},ce(r.renderDate(i.startDate)),3)]),i.endDate?(j(),te("div",Sb,[X("small",null,ce(r.renderDate(i.endDate)),1)])):Me("",!0)])]))),256))])])}const wb=Pe(yb,[["render",Ab],["__file","ChronologicalWorksTable.vue"]]),Cb={__name:"WorksPage",setup(e,{expose:t}){t();const n={ParentLayout:Pf,get ChronologicalWorksTable(){return wb}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},Tb={class:"works-table-wrapper"};function kb(e,t,n,r,o,s){return j(),Ie(r.ParentLayout,null,{"page-bottom":Re(()=>[X("div",Tb,[se(r.ChronologicalWorksTable)])]),_:1})}const Ob=Pe(Cb,[["render",kb],["__scopeId","data-v-765855fb"],["__file","WorksPage.vue"]]),Pb=zt({layouts:{WorksPage:Ob}}),xb=Object.freeze(Object.defineProperty({__proto__:null,default:Pb},Symbol.toStringTag,{value:"Module"})),no=[b_,O_,V_,M_,j_,z_,Q_,uv,jy,pb,xb].map(e=>e.default).filter(Boolean),Db=JSON.parse('{"base":"/","lang":"ru-RU","title":"Дмитрий Плешевский","description":" ","head":[],"locales":{"/":{"lang":"ru-RU","title":"Дмитрий Плешевский"},"/eng/":{"lang":"en-US","title":"Dmitriy Pleshevskiy"}}}');var ar=dt(Db),Rb=rg,Ib=()=>{const e=Og({history:Rb(fc("/")),routes:[{name:"vuepress-route",path:"/:catchAll(.*)",components:{}}],scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{if(t.path!==n.path||n===Nt){const r=kr(t.fullPath);if(r.path!==t.fullPath)return r.path;const o=await r.loader();t.meta={...r.meta,_pageChunk:o}}else t.path===n.path&&(t.meta=n.meta)}),e},Lb=e=>{e.component("ClientOnly",ai),e.component("Content",ui),e.component("RouteLink",Lo)},Vb=(e,t,n)=>{const r=N(()=>t.currentRoute.value.path),o=hd((b,y)=>({get(){return b(),t.currentRoute.value.meta._pageChunk},set(S){t.currentRoute.value.meta._pageChunk=S,y()}})),s=N(()=>dn.resolveLayouts(n)),i=N(()=>dn.resolveRouteLocale(ar.value.locales,r.value)),l=N(()=>dn.resolveSiteLocaleData(ar.value,i.value)),a=N(()=>o.value.comp),u=N(()=>o.value.data),c=N(()=>u.value.frontmatter),f=N(()=>dn.resolvePageHeadTitle(u.value,l.value)),p=N(()=>dn.resolvePageHead(f.value,c.value,l.value)),d=N(()=>dn.resolvePageLang(u.value,l.value)),m=N(()=>dn.resolvePageLayout(u.value,s.value)),v={layouts:s,pageData:u,pageComponent:a,pageFrontmatter:c,pageHead:p,pageHeadTitle:f,pageLang:d,pageLayout:m,redirects:Ts,routeLocale:i,routePath:r,routes:Nn,siteData:ar,siteLocaleData:l};return e.provide(ii,v),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>c.value},$head:{get:()=>p.value},$headTitle:{get:()=>f.value},$lang:{get:()=>d.value},$page:{get:()=>u.value},$routeLocale:{get:()=>i.value},$site:{get:()=>ar.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>ci}}),v},Nb=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>Et(a)?`[${l}=${JSON.stringify(a)}]`:a?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)??null},Mb=([e,t,n])=>{if(!Et(e))return null;const r=document.createElement(e);return ri(t)&&Object.entries(t).forEach(([o,s])=>{Et(s)?r.setAttribute(o,s):s&&r.setAttribute(o,"")}),Et(n)&&r.appendChild(document.createTextNode(n)),r},Fb=()=>{const e=Dg(),t=Rg();let n=[];const r=()=>{e.value.forEach(i=>{const l=Nb(i);l&&n.push(l)})},o=()=>{const i=[];return e.value.forEach(l=>{const a=Mb(l);a&&i.push(a)}),i},s=()=>{document.documentElement.lang=t.value;const i=o();n.forEach((l,a)=>{const u=i.findIndex(c=>l.isEqualNode(c));u===-1?(l.remove(),delete n[a]):i.splice(u,1)}),i.forEach(l=>document.head.appendChild(l)),n=[...n.filter(l=>!!l),...i]};bn(Vg,s),ot(()=>{r(),Ke(e,s,{immediate:!1})})},Bb=uh,$b=async()=>{var n;const e=Bb({name:"Vuepress",setup(){var s;Fb();for(const i of no)(s=i.setup)==null||s.call(i);const r=no.flatMap(({rootComponents:i=[]})=>i.map(l=>Ee(l))),o=Ig();return()=>[Ee(o.value),r]}}),t=Ib();Lb(e),Vb(e,t,no);for(const r of no)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:ar}));return e.use(t),{app:e,router:t}};$b().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Pe as _,X as a,nn as b,te as c,$b as createVueApp,se as d,Ap as e,j as o,Xs as r,Re as w}; + */const Hl=(e,t)=>{e.classList.add(t)},Ul=(e,t)=>{e.classList.remove(t)},F_=e=>{var t;(t=e==null?void 0:e.parentNode)==null||t.removeChild(e)},is=(e,t,n)=>e<t?t:e>n?n:e,jl=e=>(-1+e)*100,B_=(()=>{const e=[],t=()=>{const n=e.shift();n&&n(t)};return n=>{e.push(n),e.length===1&&t()}})(),$_=e=>e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(t,n)=>n.toUpperCase()),Xr=(()=>{const e=["Webkit","O","Moz","ms"],t={},n=s=>{const{style:i}=document.body;if(s in i)return s;const l=s.charAt(0).toUpperCase()+s.slice(1);let a=e.length;for(;a--;){const u=`${e[a]}${l}`;if(u in i)return u}return s},r=s=>{const i=$_(s);return t[i]??(t[i]=n(i))},o=(s,i,l)=>{s.style[r(i)]=l};return(s,i)=>{for(const l in i){const a=i[l];Object.hasOwn(i,l)&&A_(a)&&o(s,l,a)}}})(),Vt={minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'<div class="bar" role="bar"></div>'},Le={percent:null,isRendered:()=>!!document.getElementById("nprogress"),set:e=>{const{speed:t,easing:n}=Vt,r=Le.isStarted(),o=is(e,Vt.minimum,1);Le.percent=o===1?null:o;const s=Le.render(!r),i=s.querySelector(Vt.barSelector);return s.offsetWidth,B_(l=>{Xr(i,{transform:`translate3d(${jl(o)}%,0,0)`,transition:`all ${t}ms ${n}`}),o===1?(Xr(s,{transition:"none",opacity:"1"}),s.offsetWidth,setTimeout(()=>{Xr(s,{transition:`all ${t}ms linear`,opacity:"0"}),setTimeout(()=>{Le.remove(),l()},t)},t)):setTimeout(()=>{l()},t)}),Le},isStarted:()=>typeof Le.percent=="number",start:()=>{Le.percent||Le.set(0);const e=()=>{setTimeout(()=>{Le.percent&&(Le.trickle(),e())},Vt.trickleSpeed)};return e(),Le},done:e=>!e&&!Le.percent?Le:Le.increase(.3+.5*Math.random()).set(1),increase:e=>{let{percent:t}=Le;return t?(t=is(t+(typeof e=="number"?e:(1-t)*is(Math.random()*t,.1,.95)),0,.994),Le.set(t)):Le.start()},trickle:()=>Le.increase(Math.random()*Vt.trickleRate),render:e=>{if(Le.isRendered())return document.getElementById("nprogress");Hl(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=Vt.template;const n=t.querySelector(Vt.barSelector),r=document.querySelector(Vt.parent),o=e?"-100":jl(Le.percent??0);return Xr(n,{transition:"all 0 linear",transform:`translate3d(${o}%,0,0)`}),r&&(r!==document.body&&Hl(r,"nprogress-custom-parent"),r.appendChild(t)),t},remove:()=>{Ul(document.documentElement,"nprogress-busy"),Ul(document.querySelector(Vt.parent),"nprogress-custom-parent"),F_(document.getElementById("nprogress"))}},H_=()=>{ot(()=>{const e=Gn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||Le.start()}),e.afterEach(n=>{t.add(n.path),Le.done()})})},U_=zt({setup(){H_()}}),j_=Object.freeze(Object.defineProperty({__proto__:null,default:U_},Symbol.toStringTag,{value:"Module"})),W_=({selector:e='div[class*="language-"].has-collapsed-lines > .collapsed-lines'}={})=>{Xe("click",t=>{const n=t.target;if(n.matches(e)){const r=n.parentElement;r!=null&&r.classList.toggle("collapsed")&&r.scrollIntoView({block:"center",behavior:"instant"})}})},K_={setup(){W_()}},z_=Object.freeze(Object.defineProperty({__proto__:null,default:K_},Symbol.toStringTag,{value:"Module"})),G_="VUEPRESS_CODE_TAB_STORE",Qr=_i(G_,{}),q_=pe({name:"CodeTabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:String},slots:Object,setup(e,{slots:t}){const n=ye(e.active),r=dt([]),o=()=>{e.tabId&&(Qr.value[e.tabId]=e.data[n.value].id)},s=(u=n.value)=>{n.value=u<r.value.length-1?u+1:0,r.value[n.value].focus()},i=(u=n.value)=>{n.value=u>0?u-1:r.value.length-1,r.value[n.value].focus()},l=(u,c)=>{u.key===" "||u.key==="Enter"?(u.preventDefault(),n.value=c):u.key==="ArrowRight"?(u.preventDefault(),s()):u.key==="ArrowLeft"&&(u.preventDefault(),i()),e.tabId&&(Qr.value[e.tabId]=e.data[n.value].id)},a=()=>{if(e.tabId){const u=e.data.findIndex(({id:c})=>Qr.value[e.tabId]===c);if(u!==-1)return u}return e.active};return ot(()=>{n.value=a(),Ke(()=>e.tabId&&Qr.value[e.tabId],(u,c)=>{if(e.tabId&&u!==c){const f=e.data.findIndex(({id:p})=>p===u);f!==-1&&(n.value=f)}})}),()=>e.data.length?Ee("div",{class:"vp-code-tabs"},[Ee("div",{class:"vp-code-tabs-nav",role:"tablist"},e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("button",{type:"button",ref:p=>{p&&(r.value[c]=p)},class:["vp-code-tab-nav",{active:f}],role:"tab","aria-controls":`codetab-${e.id}-${c}`,"aria-selected":f,onClick:()=>{n.value=c,o()},onKeydown:p=>{l(p,c)}},t[`title${c}`]({value:u,isActive:f}))})),e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("div",{class:["vp-code-tab",{active:f}],id:`codetab-${e.id}-${c}`,role:"tabpanel","aria-expanded":f},[Ee("div",{class:"vp-code-tab-title"},t[`title${c}`]({value:u,isActive:f})),t[`tab${c}`]({value:u,isActive:f})])})]):null}}),Y_="VUEPRESS_TAB_STORE",ls=_i(Y_,{}),J_=pe({name:"Tabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:String},slots:Object,setup(e,{slots:t}){const n=ye(e.active),r=dt([]),o=()=>{e.tabId&&(ls.value[e.tabId]=e.data[n.value].id)},s=(u=n.value)=>{n.value=u<r.value.length-1?u+1:0,r.value[n.value].focus()},i=(u=n.value)=>{n.value=u>0?u-1:r.value.length-1,r.value[n.value].focus()},l=(u,c)=>{u.key===" "||u.key==="Enter"?(u.preventDefault(),n.value=c):u.key==="ArrowRight"?(u.preventDefault(),s()):u.key==="ArrowLeft"&&(u.preventDefault(),i()),o()},a=()=>{if(e.tabId){const u=e.data.findIndex(({id:c})=>ls.value[e.tabId]===c);if(u!==-1)return u}return e.active};return ot(()=>{n.value=a(),Ke(()=>e.tabId&&ls.value[e.tabId],(u,c)=>{if(e.tabId&&u!==c){const f=e.data.findIndex(({id:p})=>p===u);f!==-1&&(n.value=f)}})}),()=>e.data.length?Ee("div",{class:"vp-tabs"},[Ee("div",{class:"vp-tabs-nav",role:"tablist"},e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("button",{type:"button",ref:p=>{p&&(r.value[c]=p)},class:["vp-tab-nav",{active:f}],role:"tab","aria-controls":`tab-${e.id}-${c}`,"aria-selected":f,onClick:()=>{n.value=c,o()},onKeydown:p=>{l(p,c)}},t[`title${c}`]({value:u,isActive:f}))})),e.data.map(({id:u},c)=>{const f=c===n.value;return Ee("div",{class:["vp-tab",{active:f}],id:`tab-${e.id}-${c}`,role:"tabpanel","aria-expanded":f},[Ee("div",{class:"vp-tab-title"},t[`title${c}`]({value:u,isActive:f})),t[`tab${c}`]({value:u,isActive:f})])})]):null}}),X_={enhance:({app:e})=>{e.component("CodeTabs",q_),e.component("Tabs",J_)}},Q_=Object.freeze(Object.defineProperty({__proto__:null,default:X_},Symbol.toStringTag,{value:"Module"}));var Z_=Object.create,Nc=Object.defineProperty,em=Object.getOwnPropertyDescriptor,mi=Object.getOwnPropertyNames,tm=Object.getPrototypeOf,nm=Object.prototype.hasOwnProperty,rm=(e,t)=>function(){return e&&(t=(0,e[mi(e)[0]])(e=0)),t},om=(e,t)=>function(){return t||(0,e[mi(e)[0]])((t={exports:{}}).exports,t),t.exports},sm=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of mi(t))!nm.call(e,o)&&o!==n&&Nc(e,o,{get:()=>t[o],enumerable:!(r=em(t,o))||r.enumerable});return e},im=(e,t,n)=>(n=e!=null?Z_(tm(e)):{},sm(Nc(n,"default",{value:e,enumerable:!0}),e)),Ur=rm({"../../node_modules/.pnpm/tsup@8.3.5_@microsoft+api-extractor@7.48.1_@types+node@22.10.5__jiti@2.4.2_postcss@8.4.49_tsx_s7k37zks4wtn7x2grzma6lrsfa/node_modules/tsup/assets/esm_shims.js"(){}}),lm=om({"../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js"(e,t){Ur(),t.exports=r;function n(s){return s instanceof Buffer?Buffer.from(s):new s.constructor(s.buffer.slice(),s.byteOffset,s.length)}function r(s){if(s=s||{},s.circles)return o(s);const i=new Map;if(i.set(Date,f=>new Date(f)),i.set(Map,(f,p)=>new Map(a(Array.from(f),p))),i.set(Set,(f,p)=>new Set(a(Array.from(f),p))),s.constructorHandlers)for(const f of s.constructorHandlers)i.set(f[0],f[1]);let l=null;return s.proto?c:u;function a(f,p){const d=Object.keys(f),m=new Array(d.length);for(let v=0;v<d.length;v++){const b=d[v],y=f[b];typeof y!="object"||y===null?m[b]=y:y.constructor!==Object&&(l=i.get(y.constructor))?m[b]=l(y,p):ArrayBuffer.isView(y)?m[b]=n(y):m[b]=p(y)}return m}function u(f){if(typeof f!="object"||f===null)return f;if(Array.isArray(f))return a(f,u);if(f.constructor!==Object&&(l=i.get(f.constructor)))return l(f,u);const p={};for(const d in f){if(Object.hasOwnProperty.call(f,d)===!1)continue;const m=f[d];typeof m!="object"||m===null?p[d]=m:m.constructor!==Object&&(l=i.get(m.constructor))?p[d]=l(m,u):ArrayBuffer.isView(m)?p[d]=n(m):p[d]=u(m)}return p}function c(f){if(typeof f!="object"||f===null)return f;if(Array.isArray(f))return a(f,c);if(f.constructor!==Object&&(l=i.get(f.constructor)))return l(f,c);const p={};for(const d in f){const m=f[d];typeof m!="object"||m===null?p[d]=m:m.constructor!==Object&&(l=i.get(m.constructor))?p[d]=l(m,c):ArrayBuffer.isView(m)?p[d]=n(m):p[d]=c(m)}return p}}function o(s){const i=[],l=[],a=new Map;if(a.set(Date,d=>new Date(d)),a.set(Map,(d,m)=>new Map(c(Array.from(d),m))),a.set(Set,(d,m)=>new Set(c(Array.from(d),m))),s.constructorHandlers)for(const d of s.constructorHandlers)a.set(d[0],d[1]);let u=null;return s.proto?p:f;function c(d,m){const v=Object.keys(d),b=new Array(v.length);for(let y=0;y<v.length;y++){const S=v[y],g=d[S];if(typeof g!="object"||g===null)b[S]=g;else if(g.constructor!==Object&&(u=a.get(g.constructor)))b[S]=u(g,m);else if(ArrayBuffer.isView(g))b[S]=n(g);else{const E=i.indexOf(g);E!==-1?b[S]=l[E]:b[S]=m(g)}}return b}function f(d){if(typeof d!="object"||d===null)return d;if(Array.isArray(d))return c(d,f);if(d.constructor!==Object&&(u=a.get(d.constructor)))return u(d,f);const m={};i.push(d),l.push(m);for(const v in d){if(Object.hasOwnProperty.call(d,v)===!1)continue;const b=d[v];if(typeof b!="object"||b===null)m[v]=b;else if(b.constructor!==Object&&(u=a.get(b.constructor)))m[v]=u(b,f);else if(ArrayBuffer.isView(b))m[v]=n(b);else{const y=i.indexOf(b);y!==-1?m[v]=l[y]:m[v]=f(b)}}return i.pop(),l.pop(),m}function p(d){if(typeof d!="object"||d===null)return d;if(Array.isArray(d))return c(d,p);if(d.constructor!==Object&&(u=a.get(d.constructor)))return u(d,p);const m={};i.push(d),l.push(m);for(const v in d){const b=d[v];if(typeof b!="object"||b===null)m[v]=b;else if(b.constructor!==Object&&(u=a.get(b.constructor)))m[v]=u(b,p);else if(ArrayBuffer.isView(b))m[v]=n(b);else{const y=i.indexOf(b);y!==-1?m[v]=l[y]:m[v]=p(b)}}return i.pop(),l.pop(),m}}}});Ur();Ur();Ur();var Mc=typeof navigator<"u",J=typeof window<"u"?window:typeof globalThis<"u"?globalThis:typeof global<"u"?global:{};typeof J.chrome<"u"&&J.chrome.devtools;Mc&&(J.self,J.top);var Wl;typeof navigator<"u"&&((Wl=navigator.userAgent)==null||Wl.toLowerCase().includes("electron"));Ur();var am=im(lm()),um=/(?:^|[-_/])(\w)/g;function cm(e,t){return t?t.toUpperCase():""}function fm(e){return e&&`${e}`.replace(um,cm)}function dm(e,t){let n=e.replace(/^[a-z]:/i,"").replace(/\\/g,"/");n.endsWith(`index${t}`)&&(n=n.replace(`/index${t}`,t));const r=n.lastIndexOf("/"),o=n.substring(r+1);{const s=o.lastIndexOf(t);return o.substring(0,s)}}var Kl=(0,am.default)({circles:!0});const pm={trailing:!0};function Un(e,t=25,n={}){if(n={...pm,...n},!Number.isFinite(t))throw new TypeError("Expected `wait` to be a finite number");let r,o,s=[],i,l;const a=(u,c)=>(i=hm(e,u,c),i.finally(()=>{if(i=null,n.trailing&&l&&!o){const f=a(u,l);return l=null,f}}),i);return function(...u){return i?(n.trailing&&(l=u),i):new Promise(c=>{const f=!o&&n.leading;clearTimeout(o),o=setTimeout(()=>{o=null;const p=n.leading?r:a(this,u);for(const d of s)d(p);s=[]},t),f?(r=a(this,u),c(r)):s.push(c)})}}async function hm(e,t,n){return await e.apply(t,n)}function ks(e,t={},n){for(const r in e){const o=e[r],s=n?`${n}:${r}`:r;typeof o=="object"&&o!==null?ks(o,t,s):typeof o=="function"&&(t[s]=o)}return t}const gm={run:e=>e()},_m=()=>gm,Fc=typeof console.createTask<"u"?console.createTask:_m;function mm(e,t){const n=t.shift(),r=Fc(n);return e.reduce((o,s)=>o.then(()=>r.run(()=>s(...t))),Promise.resolve())}function vm(e,t){const n=t.shift(),r=Fc(n);return Promise.all(e.map(o=>r.run(()=>o(...t))))}function as(e,t){for(const n of[...e])n(t)}class ym{constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(t,n,r={}){if(!t||typeof n!="function")return()=>{};const o=t;let s;for(;this._deprecatedHooks[t];)s=this._deprecatedHooks[t],t=s.to;if(s&&!r.allowDeprecated){let i=s.message;i||(i=`${o} hook has been deprecated`+(s.to?`, please use ${s.to}`:"")),this._deprecatedMessages||(this._deprecatedMessages=new Set),this._deprecatedMessages.has(i)||(console.warn(i),this._deprecatedMessages.add(i))}if(!n.name)try{Object.defineProperty(n,"name",{get:()=>"_"+t.replace(/\W+/g,"_")+"_hook_cb",configurable:!0})}catch{}return this._hooks[t]=this._hooks[t]||[],this._hooks[t].push(n),()=>{n&&(this.removeHook(t,n),n=void 0)}}hookOnce(t,n){let r,o=(...s)=>(typeof r=="function"&&r(),r=void 0,o=void 0,n(...s));return r=this.hook(t,o),r}removeHook(t,n){if(this._hooks[t]){const r=this._hooks[t].indexOf(n);r!==-1&&this._hooks[t].splice(r,1),this._hooks[t].length===0&&delete this._hooks[t]}}deprecateHook(t,n){this._deprecatedHooks[t]=typeof n=="string"?{to:n}:n;const r=this._hooks[t]||[];delete this._hooks[t];for(const o of r)this.hook(t,o)}deprecateHooks(t){Object.assign(this._deprecatedHooks,t);for(const n in t)this.deprecateHook(n,t[n])}addHooks(t){const n=ks(t),r=Object.keys(n).map(o=>this.hook(o,n[o]));return()=>{for(const o of r.splice(0,r.length))o()}}removeHooks(t){const n=ks(t);for(const r in n)this.removeHook(r,n[r])}removeAllHooks(){for(const t in this._hooks)delete this._hooks[t]}callHook(t,...n){return n.unshift(t),this.callHookWith(mm,t,...n)}callHookParallel(t,...n){return n.unshift(t),this.callHookWith(vm,t,...n)}callHookWith(t,n,...r){const o=this._before||this._after?{name:n,args:r,context:{}}:void 0;this._before&&as(this._before,o);const s=t(n in this._hooks?[...this._hooks[n]]:[],r);return s instanceof Promise?s.finally(()=>{this._after&&o&&as(this._after,o)}):(this._after&&o&&as(this._after,o),s)}beforeEach(t){return this._before=this._before||[],this._before.push(t),()=>{if(this._before!==void 0){const n=this._before.indexOf(t);n!==-1&&this._before.splice(n,1)}}}afterEach(t){return this._after=this._after||[],this._after.push(t),()=>{if(this._after!==void 0){const n=this._after.indexOf(t);n!==-1&&this._after.splice(n,1)}}}}function Bc(){return new ym}var bm=Object.create,$c=Object.defineProperty,Em=Object.getOwnPropertyDescriptor,vi=Object.getOwnPropertyNames,Sm=Object.getPrototypeOf,Am=Object.prototype.hasOwnProperty,wm=(e,t)=>function(){return e&&(t=(0,e[vi(e)[0]])(e=0)),t},Hc=(e,t)=>function(){return t||(0,e[vi(e)[0]])((t={exports:{}}).exports,t),t.exports},Cm=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of vi(t))!Am.call(e,o)&&o!==n&&$c(e,o,{get:()=>t[o],enumerable:!(r=Em(t,o))||r.enumerable});return e},Tm=(e,t,n)=>(n=e!=null?bm(Sm(e)):{},Cm($c(n,"default",{value:e,enumerable:!0}),e)),O=wm({"../../node_modules/.pnpm/tsup@8.3.5_@microsoft+api-extractor@7.48.1_@types+node@22.10.5__jiti@2.4.2_postcss@8.4.49_tsx_s7k37zks4wtn7x2grzma6lrsfa/node_modules/tsup/assets/esm_shims.js"(){}}),km=Hc({"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js"(e,t){O(),function(n){var r={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"Ae",Å:"A",Æ:"AE",Ç:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"Oe",Ő:"O",Ø:"O",Ù:"U",Ú:"U",Û:"U",Ü:"Ue",Ű:"U",Ý:"Y",Þ:"TH",ß:"ss",à:"a",á:"a",â:"a",ã:"a",ä:"ae",å:"a",æ:"ae",ç:"c",è:"e",é:"e",ê:"e",ë:"e",ì:"i",í:"i",î:"i",ï:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"oe",ő:"o",ø:"o",ù:"u",ú:"u",û:"u",ü:"ue",ű:"u",ý:"y",þ:"th",ÿ:"y","ẞ":"SS",ا:"a",أ:"a",إ:"i",آ:"aa",ؤ:"u",ئ:"e",ء:"a",ب:"b",ت:"t",ث:"th",ج:"j",ح:"h",خ:"kh",د:"d",ذ:"th",ر:"r",ز:"z",س:"s",ش:"sh",ص:"s",ض:"dh",ط:"t",ظ:"z",ع:"a",غ:"gh",ف:"f",ق:"q",ك:"k",ل:"l",م:"m",ن:"n",ه:"h",و:"w",ي:"y",ى:"a",ة:"h",ﻻ:"la",ﻷ:"laa",ﻹ:"lai",ﻵ:"laa",گ:"g",چ:"ch",پ:"p",ژ:"zh",ک:"k",ی:"y","َ":"a","ً":"an","ِ":"e","ٍ":"en","ُ":"u","ٌ":"on","ْ":"","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9",က:"k",ခ:"kh",ဂ:"g",ဃ:"ga",င:"ng",စ:"s",ဆ:"sa",ဇ:"z","စျ":"za",ည:"ny",ဋ:"t",ဌ:"ta",ဍ:"d",ဎ:"da",ဏ:"na",တ:"t",ထ:"ta",ဒ:"d",ဓ:"da",န:"n",ပ:"p",ဖ:"pa",ဗ:"b",ဘ:"ba",မ:"m",ယ:"y",ရ:"ya",လ:"l",ဝ:"w",သ:"th",ဟ:"h",ဠ:"la",အ:"a","ြ":"y","ျ":"ya","ွ":"w","ြွ":"yw","ျွ":"ywa","ှ":"h",ဧ:"e","၏":"-e",ဣ:"i",ဤ:"-i",ဉ:"u",ဦ:"-u",ဩ:"aw","သြော":"aw",ဪ:"aw","၀":"0","၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","္":"","့":"","း":"",č:"c",ď:"d",ě:"e",ň:"n",ř:"r",š:"s",ť:"t",ů:"u",ž:"z",Č:"C",Ď:"D",Ě:"E",Ň:"N",Ř:"R",Š:"S",Ť:"T",Ů:"U",Ž:"Z",ހ:"h",ށ:"sh",ނ:"n",ރ:"r",ބ:"b",ޅ:"lh",ކ:"k",އ:"a",ވ:"v",މ:"m",ފ:"f",ދ:"dh",ތ:"th",ލ:"l",ގ:"g",ޏ:"gn",ސ:"s",ޑ:"d",ޒ:"z",ޓ:"t",ޔ:"y",ޕ:"p",ޖ:"j",ޗ:"ch",ޘ:"tt",ޙ:"hh",ޚ:"kh",ޛ:"th",ޜ:"z",ޝ:"sh",ޞ:"s",ޟ:"d",ޠ:"t",ޡ:"z",ޢ:"a",ޣ:"gh",ޤ:"q",ޥ:"w","ަ":"a","ާ":"aa","ި":"i","ީ":"ee","ު":"u","ޫ":"oo","ެ":"e","ޭ":"ey","ޮ":"o","ޯ":"oa","ް":"",ა:"a",ბ:"b",გ:"g",დ:"d",ე:"e",ვ:"v",ზ:"z",თ:"t",ი:"i",კ:"k",ლ:"l",მ:"m",ნ:"n",ო:"o",პ:"p",ჟ:"zh",რ:"r",ს:"s",ტ:"t",უ:"u",ფ:"p",ქ:"k",ღ:"gh",ყ:"q",შ:"sh",ჩ:"ch",ც:"ts",ძ:"dz",წ:"ts",ჭ:"ch",ხ:"kh",ჯ:"j",ჰ:"h",α:"a",β:"v",γ:"g",δ:"d",ε:"e",ζ:"z",η:"i",θ:"th",ι:"i",κ:"k",λ:"l",μ:"m",ν:"n",ξ:"ks",ο:"o",π:"p",ρ:"r",σ:"s",τ:"t",υ:"y",φ:"f",χ:"x",ψ:"ps",ω:"o",ά:"a",έ:"e",ί:"i",ό:"o",ύ:"y",ή:"i",ώ:"o",ς:"s",ϊ:"i",ΰ:"y",ϋ:"y",ΐ:"i",Α:"A",Β:"B",Γ:"G",Δ:"D",Ε:"E",Ζ:"Z",Η:"I",Θ:"TH",Ι:"I",Κ:"K",Λ:"L",Μ:"M",Ν:"N",Ξ:"KS",Ο:"O",Π:"P",Ρ:"R",Σ:"S",Τ:"T",Υ:"Y",Φ:"F",Χ:"X",Ψ:"PS",Ω:"O",Ά:"A",Έ:"E",Ί:"I",Ό:"O",Ύ:"Y",Ή:"I",Ώ:"O",Ϊ:"I",Ϋ:"Y",ā:"a",ē:"e",ģ:"g",ī:"i",ķ:"k",ļ:"l",ņ:"n",ū:"u",Ā:"A",Ē:"E",Ģ:"G",Ī:"I",Ķ:"k",Ļ:"L",Ņ:"N",Ū:"U",Ќ:"Kj",ќ:"kj",Љ:"Lj",љ:"lj",Њ:"Nj",њ:"nj",Тс:"Ts",тс:"ts",ą:"a",ć:"c",ę:"e",ł:"l",ń:"n",ś:"s",ź:"z",ż:"z",Ą:"A",Ć:"C",Ę:"E",Ł:"L",Ń:"N",Ś:"S",Ź:"Z",Ż:"Z",Є:"Ye",І:"I",Ї:"Yi",Ґ:"G",є:"ye",і:"i",ї:"yi",ґ:"g",ă:"a",Ă:"A",ș:"s",Ș:"S",ț:"t",Ț:"T",ţ:"t",Ţ:"T",а:"a",б:"b",в:"v",г:"g",д:"d",е:"e",ё:"yo",ж:"zh",з:"z",и:"i",й:"i",к:"k",л:"l",м:"m",н:"n",о:"o",п:"p",р:"r",с:"s",т:"t",у:"u",ф:"f",х:"kh",ц:"c",ч:"ch",ш:"sh",щ:"sh",ъ:"",ы:"y",ь:"",э:"e",ю:"yu",я:"ya",А:"A",Б:"B",В:"V",Г:"G",Д:"D",Е:"E",Ё:"Yo",Ж:"Zh",З:"Z",И:"I",Й:"I",К:"K",Л:"L",М:"M",Н:"N",О:"O",П:"P",Р:"R",С:"S",Т:"T",У:"U",Ф:"F",Х:"Kh",Ц:"C",Ч:"Ch",Ш:"Sh",Щ:"Sh",Ъ:"",Ы:"Y",Ь:"",Э:"E",Ю:"Yu",Я:"Ya",ђ:"dj",ј:"j",ћ:"c",џ:"dz",Ђ:"Dj",Ј:"j",Ћ:"C",Џ:"Dz",ľ:"l",ĺ:"l",ŕ:"r",Ľ:"L",Ĺ:"L",Ŕ:"R",ş:"s",Ş:"S",ı:"i",İ:"I",ğ:"g",Ğ:"G",ả:"a",Ả:"A",ẳ:"a",Ẳ:"A",ẩ:"a",Ẩ:"A",đ:"d",Đ:"D",ẹ:"e",Ẹ:"E",ẽ:"e",Ẽ:"E",ẻ:"e",Ẻ:"E",ế:"e",Ế:"E",ề:"e",Ề:"E",ệ:"e",Ệ:"E",ễ:"e",Ễ:"E",ể:"e",Ể:"E",ỏ:"o",ọ:"o",Ọ:"o",ố:"o",Ố:"O",ồ:"o",Ồ:"O",ổ:"o",Ổ:"O",ộ:"o",Ộ:"O",ỗ:"o",Ỗ:"O",ơ:"o",Ơ:"O",ớ:"o",Ớ:"O",ờ:"o",Ờ:"O",ợ:"o",Ợ:"O",ỡ:"o",Ỡ:"O",Ở:"o",ở:"o",ị:"i",Ị:"I",ĩ:"i",Ĩ:"I",ỉ:"i",Ỉ:"i",ủ:"u",Ủ:"U",ụ:"u",Ụ:"U",ũ:"u",Ũ:"U",ư:"u",Ư:"U",ứ:"u",Ứ:"U",ừ:"u",Ừ:"U",ự:"u",Ự:"U",ữ:"u",Ữ:"U",ử:"u",Ử:"ư",ỷ:"y",Ỷ:"y",ỳ:"y",Ỳ:"Y",ỵ:"y",Ỵ:"Y",ỹ:"y",Ỹ:"Y",ạ:"a",Ạ:"A",ấ:"a",Ấ:"A",ầ:"a",Ầ:"A",ậ:"a",Ậ:"A",ẫ:"a",Ẫ:"A",ắ:"a",Ắ:"A",ằ:"a",Ằ:"A",ặ:"a",Ặ:"A",ẵ:"a",Ẵ:"A","⓪":"0","①":"1","②":"2","③":"3","④":"4","⑤":"5","⑥":"6","⑦":"7","⑧":"8","⑨":"9","⑩":"10","⑪":"11","⑫":"12","⑬":"13","⑭":"14","⑮":"15","⑯":"16","⑰":"17","⑱":"18","⑲":"18","⑳":"18","⓵":"1","⓶":"2","⓷":"3","⓸":"4","⓹":"5","⓺":"6","⓻":"7","⓼":"8","⓽":"9","⓾":"10","⓿":"0","⓫":"11","⓬":"12","⓭":"13","⓮":"14","⓯":"15","⓰":"16","⓱":"17","⓲":"18","⓳":"19","⓴":"20","Ⓐ":"A","Ⓑ":"B","Ⓒ":"C","Ⓓ":"D","Ⓔ":"E","Ⓕ":"F","Ⓖ":"G","Ⓗ":"H","Ⓘ":"I","Ⓙ":"J","Ⓚ":"K","Ⓛ":"L","Ⓜ":"M","Ⓝ":"N","Ⓞ":"O","Ⓟ":"P","Ⓠ":"Q","Ⓡ":"R","Ⓢ":"S","Ⓣ":"T","Ⓤ":"U","Ⓥ":"V","Ⓦ":"W","Ⓧ":"X","Ⓨ":"Y","Ⓩ":"Z","ⓐ":"a","ⓑ":"b","ⓒ":"c","ⓓ":"d","ⓔ":"e","ⓕ":"f","ⓖ":"g","ⓗ":"h","ⓘ":"i","ⓙ":"j","ⓚ":"k","ⓛ":"l","ⓜ":"m","ⓝ":"n","ⓞ":"o","ⓟ":"p","ⓠ":"q","ⓡ":"r","ⓢ":"s","ⓣ":"t","ⓤ":"u","ⓦ":"v","ⓥ":"w","ⓧ":"x","ⓨ":"y","ⓩ":"z","“":'"',"”":'"',"‘":"'","’":"'","∂":"d",ƒ:"f","™":"(TM)","©":"(C)",œ:"oe",Œ:"OE","®":"(R)","†":"+","℠":"(SM)","…":"...","˚":"o",º:"o",ª:"a","•":"*","၊":",","။":".",$:"USD","€":"EUR","₢":"BRN","₣":"FRF","£":"GBP","₤":"ITL","₦":"NGN","₧":"ESP","₩":"KRW","₪":"ILS","₫":"VND","₭":"LAK","₮":"MNT","₯":"GRD","₱":"ARS","₲":"PYG","₳":"ARA","₴":"UAH","₵":"GHS","¢":"cent","¥":"CNY",元:"CNY",円:"YEN","﷼":"IRR","₠":"EWE","฿":"THB","₨":"INR","₹":"INR","₰":"PF","₺":"TRY","؋":"AFN","₼":"AZN",лв:"BGN","៛":"KHR","₡":"CRC","₸":"KZT",ден:"MKD",zł:"PLN","₽":"RUB","₾":"GEL"},o=["်","ް"],s={"ာ":"a","ါ":"a","ေ":"e","ဲ":"e","ိ":"i","ီ":"i","ို":"o","ု":"u","ူ":"u","ေါင်":"aung","ော":"aw","ော်":"aw","ေါ":"aw","ေါ်":"aw","်":"်","က်":"et","ိုက်":"aik","ောက်":"auk","င်":"in","ိုင်":"aing","ောင်":"aung","စ်":"it","ည်":"i","တ်":"at","ိတ်":"eik","ုတ်":"ok","ွတ်":"ut","ေတ်":"it","ဒ်":"d","ိုဒ်":"ok","ုဒ်":"ait","န်":"an","ာန်":"an","ိန်":"ein","ုန်":"on","ွန်":"un","ပ်":"at","ိပ်":"eik","ုပ်":"ok","ွပ်":"ut","န်ုပ်":"nub","မ်":"an","ိမ်":"ein","ုမ်":"on","ွမ်":"un","ယ်":"e","ိုလ်":"ol","ဉ်":"in","ံ":"an","ိံ":"ein","ုံ":"on","ައް":"ah","ަށް":"ah"},i={en:{},az:{ç:"c",ə:"e",ğ:"g",ı:"i",ö:"o",ş:"s",ü:"u",Ç:"C",Ə:"E",Ğ:"G",İ:"I",Ö:"O",Ş:"S",Ü:"U"},cs:{č:"c",ď:"d",ě:"e",ň:"n",ř:"r",š:"s",ť:"t",ů:"u",ž:"z",Č:"C",Ď:"D",Ě:"E",Ň:"N",Ř:"R",Š:"S",Ť:"T",Ů:"U",Ž:"Z"},fi:{ä:"a",Ä:"A",ö:"o",Ö:"O"},hu:{ä:"a",Ä:"A",ö:"o",Ö:"O",ü:"u",Ü:"U",ű:"u",Ű:"U"},lt:{ą:"a",č:"c",ę:"e",ė:"e",į:"i",š:"s",ų:"u",ū:"u",ž:"z",Ą:"A",Č:"C",Ę:"E",Ė:"E",Į:"I",Š:"S",Ų:"U",Ū:"U"},lv:{ā:"a",č:"c",ē:"e",ģ:"g",ī:"i",ķ:"k",ļ:"l",ņ:"n",š:"s",ū:"u",ž:"z",Ā:"A",Č:"C",Ē:"E",Ģ:"G",Ī:"i",Ķ:"k",Ļ:"L",Ņ:"N",Š:"S",Ū:"u",Ž:"Z"},pl:{ą:"a",ć:"c",ę:"e",ł:"l",ń:"n",ó:"o",ś:"s",ź:"z",ż:"z",Ą:"A",Ć:"C",Ę:"e",Ł:"L",Ń:"N",Ó:"O",Ś:"S",Ź:"Z",Ż:"Z"},sv:{ä:"a",Ä:"A",ö:"o",Ö:"O"},sk:{ä:"a",Ä:"A"},sr:{љ:"lj",њ:"nj",Љ:"Lj",Њ:"Nj",đ:"dj",Đ:"Dj"},tr:{Ü:"U",Ö:"O",ü:"u",ö:"o"}},l={ar:{"∆":"delta","∞":"la-nihaya","♥":"hob","&":"wa","|":"aw","<":"aqal-men",">":"akbar-men","∑":"majmou","¤":"omla"},az:{},ca:{"∆":"delta","∞":"infinit","♥":"amor","&":"i","|":"o","<":"menys que",">":"mes que","∑":"suma dels","¤":"moneda"},cs:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"nebo","<":"mensi nez",">":"vetsi nez","∑":"soucet","¤":"mena"},de:{"∆":"delta","∞":"unendlich","♥":"Liebe","&":"und","|":"oder","<":"kleiner als",">":"groesser als","∑":"Summe von","¤":"Waehrung"},dv:{"∆":"delta","∞":"kolunulaa","♥":"loabi","&":"aai","|":"noonee","<":"ah vure kuda",">":"ah vure bodu","∑":"jumula","¤":"faisaa"},en:{"∆":"delta","∞":"infinity","♥":"love","&":"and","|":"or","<":"less than",">":"greater than","∑":"sum","¤":"currency"},es:{"∆":"delta","∞":"infinito","♥":"amor","&":"y","|":"u","<":"menos que",">":"mas que","∑":"suma de los","¤":"moneda"},fa:{"∆":"delta","∞":"bi-nahayat","♥":"eshgh","&":"va","|":"ya","<":"kamtar-az",">":"bishtar-az","∑":"majmooe","¤":"vahed"},fi:{"∆":"delta","∞":"aarettomyys","♥":"rakkaus","&":"ja","|":"tai","<":"pienempi kuin",">":"suurempi kuin","∑":"summa","¤":"valuutta"},fr:{"∆":"delta","∞":"infiniment","♥":"Amour","&":"et","|":"ou","<":"moins que",">":"superieure a","∑":"somme des","¤":"monnaie"},ge:{"∆":"delta","∞":"usasruloba","♥":"siqvaruli","&":"da","|":"an","<":"naklebi",">":"meti","∑":"jami","¤":"valuta"},gr:{},hu:{"∆":"delta","∞":"vegtelen","♥":"szerelem","&":"es","|":"vagy","<":"kisebb mint",">":"nagyobb mint","∑":"szumma","¤":"penznem"},it:{"∆":"delta","∞":"infinito","♥":"amore","&":"e","|":"o","<":"minore di",">":"maggiore di","∑":"somma","¤":"moneta"},lt:{"∆":"delta","∞":"begalybe","♥":"meile","&":"ir","|":"ar","<":"maziau nei",">":"daugiau nei","∑":"suma","¤":"valiuta"},lv:{"∆":"delta","∞":"bezgaliba","♥":"milestiba","&":"un","|":"vai","<":"mazak neka",">":"lielaks neka","∑":"summa","¤":"valuta"},my:{"∆":"kwahkhyaet","∞":"asaonasme","♥":"akhyait","&":"nhin","|":"tho","<":"ngethaw",">":"kyithaw","∑":"paungld","¤":"ngwekye"},mk:{},nl:{"∆":"delta","∞":"oneindig","♥":"liefde","&":"en","|":"of","<":"kleiner dan",">":"groter dan","∑":"som","¤":"valuta"},pl:{"∆":"delta","∞":"nieskonczonosc","♥":"milosc","&":"i","|":"lub","<":"mniejsze niz",">":"wieksze niz","∑":"suma","¤":"waluta"},pt:{"∆":"delta","∞":"infinito","♥":"amor","&":"e","|":"ou","<":"menor que",">":"maior que","∑":"soma","¤":"moeda"},ro:{"∆":"delta","∞":"infinit","♥":"dragoste","&":"si","|":"sau","<":"mai mic ca",">":"mai mare ca","∑":"suma","¤":"valuta"},ru:{"∆":"delta","∞":"beskonechno","♥":"lubov","&":"i","|":"ili","<":"menshe",">":"bolshe","∑":"summa","¤":"valjuta"},sk:{"∆":"delta","∞":"nekonecno","♥":"laska","&":"a","|":"alebo","<":"menej ako",">":"viac ako","∑":"sucet","¤":"mena"},sr:{},tr:{"∆":"delta","∞":"sonsuzluk","♥":"ask","&":"ve","|":"veya","<":"kucuktur",">":"buyuktur","∑":"toplam","¤":"para birimi"},uk:{"∆":"delta","∞":"bezkinechnist","♥":"lubov","&":"i","|":"abo","<":"menshe",">":"bilshe","∑":"suma","¤":"valjuta"},vn:{"∆":"delta","∞":"vo cuc","♥":"yeu","&":"va","|":"hoac","<":"nho hon",">":"lon hon","∑":"tong","¤":"tien te"}},a=[";","?",":","@","&","=","+","$",",","/"].join(""),u=[";","?",":","@","&","=","+","$",","].join(""),c=[".","!","~","*","'","(",")"].join(""),f=function(b,y){var S="-",g="",E="",V=!0,U={},D,Q,I,k,P,C,$,le,he,G,M,q,fe,Qe,$e="";if(typeof b!="string")return"";if(typeof y=="string"&&(S=y),$=l.en,le=i.en,typeof y=="object"){D=y.maintainCase||!1,U=y.custom&&typeof y.custom=="object"?y.custom:U,I=+y.truncate>1&&y.truncate||!1,k=y.uric||!1,P=y.uricNoSlash||!1,C=y.mark||!1,V=!(y.symbols===!1||y.lang===!1),S=y.separator||S,k&&($e+=a),P&&($e+=u),C&&($e+=c),$=y.lang&&l[y.lang]&&V?l[y.lang]:V?l.en:{},le=y.lang&&i[y.lang]?i[y.lang]:y.lang===!1||y.lang===!0?{}:i.en,y.titleCase&&typeof y.titleCase.length=="number"&&Array.prototype.toString.call(y.titleCase)?(y.titleCase.forEach(function(we){U[we+""]=we+""}),Q=!0):Q=!!y.titleCase,y.custom&&typeof y.custom.length=="number"&&Array.prototype.toString.call(y.custom)&&y.custom.forEach(function(we){U[we+""]=we+""}),Object.keys(U).forEach(function(we){var pt;we.length>1?pt=new RegExp("\\b"+d(we)+"\\b","gi"):pt=new RegExp(d(we),"gi"),b=b.replace(pt,U[we])});for(M in U)$e+=M}for($e+=S,$e=d($e),b=b.replace(/(^\s+|\s+$)/g,""),fe=!1,Qe=!1,G=0,q=b.length;G<q;G++)M=b[G],m(M,U)?fe=!1:le[M]?(M=fe&&le[M].match(/[A-Za-z0-9]/)?" "+le[M]:le[M],fe=!1):M in r?(G+1<q&&o.indexOf(b[G+1])>=0?(E+=M,M=""):Qe===!0?(M=s[E]+r[M],E=""):M=fe&&r[M].match(/[A-Za-z0-9]/)?" "+r[M]:r[M],fe=!1,Qe=!1):M in s?(E+=M,M="",G===q-1&&(M=s[E]),Qe=!0):$[M]&&!(k&&a.indexOf(M)!==-1)&&!(P&&u.indexOf(M)!==-1)?(M=fe||g.substr(-1).match(/[A-Za-z0-9]/)?S+$[M]:$[M],M+=b[G+1]!==void 0&&b[G+1].match(/[A-Za-z0-9]/)?S:"",fe=!0):(Qe===!0?(M=s[E]+M,E="",Qe=!1):fe&&(/[A-Za-z0-9]/.test(M)||g.substr(-1).match(/A-Za-z0-9]/))&&(M=" "+M),fe=!1),g+=M.replace(new RegExp("[^\\w\\s"+$e+"_-]","g"),S);return Q&&(g=g.replace(/(\w)(\S*)/g,function(we,pt,Dt){var Gt=pt.toUpperCase()+(Dt!==null?Dt:"");return Object.keys(U).indexOf(Gt.toLowerCase())<0?Gt:Gt.toLowerCase()})),g=g.replace(/\s+/g,S).replace(new RegExp("\\"+S+"+","g"),S).replace(new RegExp("(^\\"+S+"+|\\"+S+"+$)","g"),""),I&&g.length>I&&(he=g.charAt(I)===S,g=g.slice(0,I),he||(g=g.slice(0,g.lastIndexOf(S)))),!D&&!Q&&(g=g.toLowerCase()),g},p=function(b){return function(S){return f(S,b)}},d=function(b){return b.replace(/[-\\^$*+?.()|[\]{}\/]/g,"\\$&")},m=function(v,b){for(var y in b)if(b[y]===v)return!0};if(typeof t<"u"&&t.exports)t.exports=f,t.exports.createSlug=p;else if(typeof define<"u"&&define.amd)define([],function(){return f});else try{if(n.getSlug||n.createSlug)throw"speakingurl: globals exists /(getSlug|createSlug)/";n.getSlug=f,n.createSlug=p}catch{}}(e)}}),Om=Hc({"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js"(e,t){O(),t.exports=km()}});O();O();O();O();O();O();O();O();function Pm(e){var t;const n=e.name||e._componentTag||e.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__||e.__name;return n==="index"&&((t=e.__file)!=null&&t.endsWith("index.vue"))?"":n}function xm(e){const t=e.__file;if(t)return fm(dm(t,".vue"))}function zl(e,t){return e.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__=t,t}function yi(e){if(e.__VUE_DEVTOOLS_NEXT_APP_RECORD__)return e.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(e.root)return e.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__}function Uc(e){var t,n;const r=(t=e.subTree)==null?void 0:t.type,o=yi(e);return o?((n=o==null?void 0:o.types)==null?void 0:n.Fragment)===r:!1}function Mo(e){var t,n,r;const o=Pm((e==null?void 0:e.type)||{});if(o)return o;if((e==null?void 0:e.root)===e)return"Root";for(const i in(n=(t=e.parent)==null?void 0:t.type)==null?void 0:n.components)if(e.parent.type.components[i]===(e==null?void 0:e.type))return zl(e,i);for(const i in(r=e.appContext)==null?void 0:r.components)if(e.appContext.components[i]===(e==null?void 0:e.type))return zl(e,i);const s=xm((e==null?void 0:e.type)||{});return s||"Anonymous Component"}function Dm(e){var t,n,r;const o=(r=(n=(t=e==null?void 0:e.appContext)==null?void 0:t.app)==null?void 0:n.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__)!=null?r:0,s=e===(e==null?void 0:e.root)?"root":e.uid;return`${o}:${s}`}function Os(e,t){return t=t||`${e.id}:root`,e.instanceMap.get(t)||e.instanceMap.get(":root")}function Rm(){const e={top:0,bottom:0,left:0,right:0,get width(){return e.right-e.left},get height(){return e.bottom-e.top}};return e}var Zr;function Im(e){return Zr||(Zr=document.createRange()),Zr.selectNode(e),Zr.getBoundingClientRect()}function Lm(e){const t=Rm();if(!e.children)return t;for(let n=0,r=e.children.length;n<r;n++){const o=e.children[n];let s;if(o.component)s=wn(o.component);else if(o.el){const i=o.el;i.nodeType===1||i.getBoundingClientRect?s=i.getBoundingClientRect():i.nodeType===3&&i.data.trim()&&(s=Im(i))}s&&Vm(t,s)}return t}function Vm(e,t){return(!e.top||t.top<e.top)&&(e.top=t.top),(!e.bottom||t.bottom>e.bottom)&&(e.bottom=t.bottom),(!e.left||t.left<e.left)&&(e.left=t.left),(!e.right||t.right>e.right)&&(e.right=t.right),e}var Gl={top:0,left:0,right:0,bottom:0,width:0,height:0};function wn(e){const t=e.subTree.el;return typeof window>"u"?Gl:Uc(e)?Lm(e.subTree):(t==null?void 0:t.nodeType)===1?t==null?void 0:t.getBoundingClientRect():e.subTree.component?wn(e.subTree.component):Gl}O();function bi(e){return Uc(e)?Nm(e.subTree):e.subTree?[e.subTree.el]:[]}function Nm(e){if(!e.children)return[];const t=[];return e.children.forEach(n=>{n.component?t.push(...bi(n.component)):n!=null&&n.el&&t.push(n.el)}),t}var jc="__vue-devtools-component-inspector__",Wc="__vue-devtools-component-inspector__card__",Kc="__vue-devtools-component-inspector__name__",zc="__vue-devtools-component-inspector__indicator__",Gc={display:"block",zIndex:2147483640,position:"fixed",backgroundColor:"#42b88325",border:"1px solid #42b88350",borderRadius:"5px",transition:"all 0.1s ease-in",pointerEvents:"none"},Mm={fontFamily:"Arial, Helvetica, sans-serif",padding:"5px 8px",borderRadius:"4px",textAlign:"left",position:"absolute",left:0,color:"#e9e9e9",fontSize:"14px",fontWeight:600,lineHeight:"24px",backgroundColor:"#42b883",boxShadow:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)"},Fm={display:"inline-block",fontWeight:400,fontStyle:"normal",fontSize:"12px",opacity:.7};function Yn(){return document.getElementById(jc)}function Bm(){return document.getElementById(Wc)}function $m(){return document.getElementById(zc)}function Hm(){return document.getElementById(Kc)}function Ei(e){return{left:`${Math.round(e.left*100)/100}px`,top:`${Math.round(e.top*100)/100}px`,width:`${Math.round(e.width*100)/100}px`,height:`${Math.round(e.height*100)/100}px`}}function Si(e){var t;const n=document.createElement("div");n.id=(t=e.elementId)!=null?t:jc,Object.assign(n.style,{...Gc,...Ei(e.bounds),...e.style});const r=document.createElement("span");r.id=Wc,Object.assign(r.style,{...Mm,top:e.bounds.top<35?0:"-35px"});const o=document.createElement("span");o.id=Kc,o.innerHTML=`<${e.name}> `;const s=document.createElement("i");return s.id=zc,s.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`,Object.assign(s.style,Fm),r.appendChild(o),r.appendChild(s),n.appendChild(r),document.body.appendChild(n),n}function Ai(e){const t=Yn(),n=Bm(),r=Hm(),o=$m();t&&(Object.assign(t.style,{...Gc,...Ei(e.bounds)}),Object.assign(n.style,{top:e.bounds.top<35?0:"-35px"}),r.innerHTML=`<${e.name}> `,o.innerHTML=`${Math.round(e.bounds.width*100)/100} x ${Math.round(e.bounds.height*100)/100}`)}function Um(e){const t=wn(e);if(!t.width&&!t.height)return;const n=Mo(e);Yn()?Ai({bounds:t,name:n}):Si({bounds:t,name:n})}function qc(){const e=Yn();e&&(e.style.display="none")}var Ps=null;function xs(e){const t=e.target;if(t){const n=t.__vueParentComponent;if(n&&(Ps=n,n.vnode.el)){const o=wn(n),s=Mo(n);Yn()?Ai({bounds:o,name:s}):Si({bounds:o,name:s})}}}function jm(e,t){if(e.preventDefault(),e.stopPropagation(),Ps){const n=Dm(Ps);t(n)}}var bo=null;function Wm(){qc(),window.removeEventListener("mouseover",xs),window.removeEventListener("click",bo,!0),bo=null}function Km(){return window.addEventListener("mouseover",xs),new Promise(e=>{function t(n){n.preventDefault(),n.stopPropagation(),jm(n,r=>{window.removeEventListener("click",t,!0),bo=null,window.removeEventListener("mouseover",xs);const o=Yn();o&&(o.style.display="none"),e(JSON.stringify({id:r}))})}bo=t,window.addEventListener("click",t,!0)})}function zm(e){const t=Os(nt.value,e.id);if(t){const[n]=bi(t);if(typeof n.scrollIntoView=="function")n.scrollIntoView({behavior:"smooth"});else{const r=wn(t),o=document.createElement("div"),s={...Ei(r),position:"absolute"};Object.assign(o.style,s),document.body.appendChild(o),o.scrollIntoView({behavior:"smooth"}),setTimeout(()=>{document.body.removeChild(o)},2e3)}setTimeout(()=>{const r=wn(t);if(r.width||r.height){const o=Mo(t),s=Yn();s?Ai({...e,name:o,bounds:r}):Si({...e,name:o,bounds:r}),setTimeout(()=>{s&&(s.style.display="none")},1500)}},1200)}}O();var ql,Yl;(Yl=(ql=J).__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__)!=null||(ql.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__=!0);function Gm(e){let t=0;const n=setInterval(()=>{J.__VUE_INSPECTOR__&&(clearInterval(n),t+=30,e()),t>=5e3&&clearInterval(n)},30)}function qm(){const e=J.__VUE_INSPECTOR__,t=e.openInEditor;e.openInEditor=async(...n)=>{e.disable(),t(...n)}}function Ym(){return new Promise(e=>{function t(){qm(),e(J.__VUE_INSPECTOR__)}J.__VUE_INSPECTOR__?t():Gm(()=>{t()})})}O();O();function Jm(e){return!!(e&&e.__v_isReadonly)}function Yc(e){return Jm(e)?Yc(e.__v_raw):!!(e&&e.__v_isReactive)}function us(e){return!!(e&&e.__v_isRef===!0)}function lr(e){const t=e&&e.__v_raw;return t?lr(t):e}var Xm=class{constructor(){this.refEditor=new Qm}set(e,t,n,r){const o=Array.isArray(t)?t:t.split(".");for(;o.length>1;){const l=o.shift();e instanceof Map&&(e=e.get(l)),e instanceof Set?e=Array.from(e.values())[l]:e=e[l],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}const s=o[0],i=this.refEditor.get(e)[s];r?r(e,s,n):this.refEditor.isRef(i)?this.refEditor.set(i,n):e[s]=n}get(e,t){const n=Array.isArray(t)?t:t.split(".");for(let r=0;r<n.length;r++)if(e instanceof Map?e=e.get(n[r]):e=e[n[r]],this.refEditor.isRef(e)&&(e=this.refEditor.get(e)),!e)return;return e}has(e,t,n=!1){if(typeof e>"u")return!1;const r=Array.isArray(t)?t.slice():t.split("."),o=n?2:1;for(;e&&r.length>o;){const s=r.shift();e=e[s],this.refEditor.isRef(e)&&(e=this.refEditor.get(e))}return e!=null&&Object.prototype.hasOwnProperty.call(e,r[0])}createDefaultSetCallback(e){return(t,n,r)=>{if((e.remove||e.newKey)&&(Array.isArray(t)?t.splice(n,1):lr(t)instanceof Map?t.delete(n):lr(t)instanceof Set?t.delete(Array.from(t.values())[n]):Reflect.deleteProperty(t,n)),!e.remove){const o=t[e.newKey||n];this.refEditor.isRef(o)?this.refEditor.set(o,r):lr(t)instanceof Map?t.set(e.newKey||n,r):lr(t)instanceof Set?t.add(r):t[e.newKey||n]=r}}}},Qm=class{set(e,t){if(us(e))e.value=t;else{if(e instanceof Set&&Array.isArray(t)){e.clear(),t.forEach(o=>e.add(o));return}const n=Object.keys(t);if(e instanceof Map){const o=new Set(e.keys());n.forEach(s=>{e.set(s,Reflect.get(t,s)),o.delete(s)}),o.forEach(s=>e.delete(s));return}const r=new Set(Object.keys(e));n.forEach(o=>{Reflect.set(e,o,Reflect.get(t,o)),r.delete(o)}),r.forEach(o=>Reflect.deleteProperty(e,o))}}get(e){return us(e)?e.value:e}isRef(e){return us(e)||Yc(e)}};O();O();O();var Zm="__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__";function e0(){if(!Mc||typeof localStorage>"u"||localStorage===null)return{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:""};const e=localStorage.getItem(Zm);return e?JSON.parse(e):{recordingState:!1,mouseEventEnabled:!1,keyboardEventEnabled:!1,componentEventEnabled:!1,performanceEventEnabled:!1,selected:""}}O();O();O();var Jl,Xl;(Xl=(Jl=J).__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS)!=null||(Jl.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS=[]);var t0=new Proxy(J.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS,{get(e,t,n){return Reflect.get(e,t,n)}});function n0(e,t){Ue.timelineLayersState[t.id]=!1,t0.push({...e,descriptorId:t.id,appRecord:yi(t.app)})}var Ql,Zl;(Zl=(Ql=J).__VUE_DEVTOOLS_KIT_INSPECTOR__)!=null||(Ql.__VUE_DEVTOOLS_KIT_INSPECTOR__=[]);var wi=new Proxy(J.__VUE_DEVTOOLS_KIT_INSPECTOR__,{get(e,t,n){return Reflect.get(e,t,n)}}),Jc=Un(()=>{Jn.hooks.callHook("sendInspectorToClient",Xc())});function r0(e,t){var n,r;wi.push({options:e,descriptor:t,treeFilterPlaceholder:(n=e.treeFilterPlaceholder)!=null?n:"Search tree...",stateFilterPlaceholder:(r=e.stateFilterPlaceholder)!=null?r:"Search state...",treeFilter:"",selectedNodeId:"",appRecord:yi(t.app)}),Jc()}function Xc(){return wi.filter(e=>e.descriptor.app===nt.value.app).filter(e=>e.descriptor.id!=="components").map(e=>{var t;const n=e.descriptor,r=e.options;return{id:r.id,label:r.label,logo:n.logo,icon:`custom-ic-baseline-${(t=r==null?void 0:r.icon)==null?void 0:t.replace(/_/g,"-")}`,packageName:n.packageName,homepage:n.homepage,pluginId:n.id}})}function lo(e,t){return wi.find(n=>n.options.id===e&&(t?n.descriptor.app===t:!0))}function o0(){const e=Bc();e.hook("addInspector",({inspector:r,plugin:o})=>{r0(r,o.descriptor)});const t=Un(async({inspectorId:r,plugin:o})=>{var s;if(!r||!((s=o==null?void 0:o.descriptor)!=null&&s.app)||Ue.highPerfModeEnabled)return;const i=lo(r,o.descriptor.app),l={app:o.descriptor.app,inspectorId:r,filter:(i==null?void 0:i.treeFilter)||"",rootNodes:[]};await new Promise(a=>{e.callHookWith(async u=>{await Promise.all(u.map(c=>c(l))),a()},"getInspectorTree")}),e.callHookWith(async a=>{await Promise.all(a.map(u=>u({inspectorId:r,rootNodes:l.rootNodes})))},"sendInspectorTreeToClient")},120);e.hook("sendInspectorTree",t);const n=Un(async({inspectorId:r,plugin:o})=>{var s;if(!r||!((s=o==null?void 0:o.descriptor)!=null&&s.app)||Ue.highPerfModeEnabled)return;const i=lo(r,o.descriptor.app),l={app:o.descriptor.app,inspectorId:r,nodeId:(i==null?void 0:i.selectedNodeId)||"",state:null},a={currentTab:`custom-inspector:${r}`};l.nodeId&&await new Promise(u=>{e.callHookWith(async c=>{await Promise.all(c.map(f=>f(l,a))),u()},"getInspectorState")}),e.callHookWith(async u=>{await Promise.all(u.map(c=>c({inspectorId:r,nodeId:l.nodeId,state:l.state})))},"sendInspectorStateToClient")},120);return e.hook("sendInspectorState",n),e.hook("customInspectorSelectNode",({inspectorId:r,nodeId:o,plugin:s})=>{const i=lo(r,s.descriptor.app);i&&(i.selectedNodeId=o)}),e.hook("timelineLayerAdded",({options:r,plugin:o})=>{n0(r,o.descriptor)}),e.hook("timelineEventAdded",({options:r,plugin:o})=>{var s;const i=["performance","component-event","keyboard","mouse"];Ue.highPerfModeEnabled||!((s=Ue.timelineLayersState)!=null&&s[o.descriptor.id])&&!i.includes(r.layerId)||e.callHookWith(async l=>{await Promise.all(l.map(a=>a(r)))},"sendTimelineEventToClient")}),e.hook("getComponentInstances",async({app:r})=>{const o=r.__VUE_DEVTOOLS_NEXT_APP_RECORD__;if(!o)return null;const s=o.id.toString();return[...o.instanceMap].filter(([l])=>l.split(":")[0]===s).map(([,l])=>l)}),e.hook("getComponentBounds",async({instance:r})=>wn(r)),e.hook("getComponentName",({instance:r})=>Mo(r)),e.hook("componentHighlight",({uid:r})=>{const o=nt.value.instanceMap.get(r);o&&Um(o)}),e.hook("componentUnhighlight",()=>{qc()}),e}var ea,ta;(ta=(ea=J).__VUE_DEVTOOLS_KIT_APP_RECORDS__)!=null||(ea.__VUE_DEVTOOLS_KIT_APP_RECORDS__=[]);var na,ra;(ra=(na=J).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__)!=null||(na.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__={});var oa,sa;(sa=(oa=J).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__)!=null||(oa.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__="");var ia,la;(la=(ia=J).__VUE_DEVTOOLS_KIT_CUSTOM_TABS__)!=null||(ia.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__=[]);var aa,ua;(ua=(aa=J).__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__)!=null||(aa.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__=[]);var gn="__VUE_DEVTOOLS_KIT_GLOBAL_STATE__";function s0(){return{connected:!1,clientConnected:!1,vitePluginDetected:!0,appRecords:[],activeAppRecordId:"",tabs:[],commands:[],highPerfModeEnabled:!0,devtoolsClientDetected:{},perfUniqueGroupId:0,timelineLayersState:e0()}}var ca,fa;(fa=(ca=J)[gn])!=null||(ca[gn]=s0());var i0=Un(e=>{Jn.hooks.callHook("devtoolsStateUpdated",{state:e})});Un((e,t)=>{Jn.hooks.callHook("devtoolsConnectedUpdated",{state:e,oldState:t})});var Fo=new Proxy(J.__VUE_DEVTOOLS_KIT_APP_RECORDS__,{get(e,t,n){return t==="value"?J.__VUE_DEVTOOLS_KIT_APP_RECORDS__:J.__VUE_DEVTOOLS_KIT_APP_RECORDS__[t]}}),nt=new Proxy(J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__,{get(e,t,n){return t==="value"?J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__:t==="id"?J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__:J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[t]}});function Qc(){i0({...J[gn],appRecords:Fo.value,activeAppRecordId:nt.id,tabs:J.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__,commands:J.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__})}function l0(e){J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__=e,Qc()}function a0(e){J.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__=e,Qc()}var Ue=new Proxy(J[gn],{get(e,t){return t==="appRecords"?Fo:t==="activeAppRecordId"?nt.id:t==="tabs"?J.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__:t==="commands"?J.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__:J[gn][t]},deleteProperty(e,t){return delete e[t],!0},set(e,t,n){return{...J[gn]},e[t]=n,J[gn][t]=n,!0}});function u0(e={}){var t,n,r;const{file:o,host:s,baseUrl:i=window.location.origin,line:l=0,column:a=0}=e;if(o){if(s==="chrome-extension"){const u=o.replace(/\\/g,"\\\\"),c=(n=(t=window.VUE_DEVTOOLS_CONFIG)==null?void 0:t.openInEditorHost)!=null?n:"/";fetch(`${c}__open-in-editor?file=${encodeURI(o)}`).then(f=>{if(!f.ok){const p=`Opening component ${u} failed`;console.log(`%c${p}`,"color:red")}})}else if(Ue.vitePluginDetected){const u=(r=J.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__)!=null?r:i;J.__VUE_INSPECTOR__.openInEditor(u,o,l,a)}}}O();O();O();O();O();var da,pa;(pa=(da=J).__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__)!=null||(da.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__=[]);var Ci=new Proxy(J.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__,{get(e,t,n){return Reflect.get(e,t,n)}});function Ds(e){const t={};return Object.keys(e).forEach(n=>{t[n]=e[n].defaultValue}),t}function Ti(e){return`__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${e}__`}function c0(e){var t,n,r;const o=(n=(t=Ci.find(s=>{var i;return s[0].id===e&&!!((i=s[0])!=null&&i.settings)}))==null?void 0:t[0])!=null?n:null;return(r=o==null?void 0:o.settings)!=null?r:null}function Zc(e,t){var n,r,o;const s=Ti(e);if(s){const i=localStorage.getItem(s);if(i)return JSON.parse(i)}if(e){const i=(r=(n=Ci.find(l=>l[0].id===e))==null?void 0:n[0])!=null?r:null;return Ds((o=i==null?void 0:i.settings)!=null?o:{})}return Ds(t)}function f0(e,t){const n=Ti(e);localStorage.getItem(n)||localStorage.setItem(n,JSON.stringify(Ds(t)))}function d0(e,t,n){const r=Ti(e),o=localStorage.getItem(r),s=JSON.parse(o||"{}"),i={...s,[t]:n};localStorage.setItem(r,JSON.stringify(i)),Jn.hooks.callHookWith(l=>{l.forEach(a=>a({pluginId:e,key:t,oldValue:s[t],newValue:n,settings:i}))},"setPluginSettings")}O();O();O();O();O();O();O();O();O();O();O();var ha,ga,ct=(ga=(ha=J).__VUE_DEVTOOLS_HOOK)!=null?ga:ha.__VUE_DEVTOOLS_HOOK=Bc(),p0={vueAppInit(e){ct.hook("app:init",e)},vueAppUnmount(e){ct.hook("app:unmount",e)},vueAppConnected(e){ct.hook("app:connected",e)},componentAdded(e){return ct.hook("component:added",e)},componentEmit(e){return ct.hook("component:emit",e)},componentUpdated(e){return ct.hook("component:updated",e)},componentRemoved(e){return ct.hook("component:removed",e)},setupDevtoolsPlugin(e){ct.hook("devtools-plugin:setup",e)},perfStart(e){return ct.hook("perf:start",e)},perfEnd(e){return ct.hook("perf:end",e)}},h0={on:p0,setupDevToolsPlugin(e,t){return ct.callHook("devtools-plugin:setup",e,t)}},g0=class{constructor({plugin:e,ctx:t}){this.hooks=t.hooks,this.plugin=e}get on(){return{visitComponentTree:e=>{this.hooks.hook("visitComponentTree",e)},inspectComponent:e=>{this.hooks.hook("inspectComponent",e)},editComponentState:e=>{this.hooks.hook("editComponentState",e)},getInspectorTree:e=>{this.hooks.hook("getInspectorTree",e)},getInspectorState:e=>{this.hooks.hook("getInspectorState",e)},editInspectorState:e=>{this.hooks.hook("editInspectorState",e)},inspectTimelineEvent:e=>{this.hooks.hook("inspectTimelineEvent",e)},timelineCleared:e=>{this.hooks.hook("timelineCleared",e)},setPluginSettings:e=>{this.hooks.hook("setPluginSettings",e)}}}notifyComponentUpdate(e){var t;if(Ue.highPerfModeEnabled)return;const n=Xc().find(r=>r.packageName===this.plugin.descriptor.packageName);if(n!=null&&n.id){if(e){const r=[e.appContext.app,e.uid,(t=e.parent)==null?void 0:t.uid,e];ct.callHook("component:updated",...r)}else ct.callHook("component:updated");this.hooks.callHook("sendInspectorState",{inspectorId:n.id,plugin:this.plugin})}}addInspector(e){this.hooks.callHook("addInspector",{inspector:e,plugin:this.plugin}),this.plugin.descriptor.settings&&f0(e.id,this.plugin.descriptor.settings)}sendInspectorTree(e){Ue.highPerfModeEnabled||this.hooks.callHook("sendInspectorTree",{inspectorId:e,plugin:this.plugin})}sendInspectorState(e){Ue.highPerfModeEnabled||this.hooks.callHook("sendInspectorState",{inspectorId:e,plugin:this.plugin})}selectInspectorNode(e,t){this.hooks.callHook("customInspectorSelectNode",{inspectorId:e,nodeId:t,plugin:this.plugin})}visitComponentTree(e){return this.hooks.callHook("visitComponentTree",e)}now(){return Ue.highPerfModeEnabled?0:Date.now()}addTimelineLayer(e){this.hooks.callHook("timelineLayerAdded",{options:e,plugin:this.plugin})}addTimelineEvent(e){Ue.highPerfModeEnabled||this.hooks.callHook("timelineEventAdded",{options:e,plugin:this.plugin})}getSettings(e){return Zc(e??this.plugin.descriptor.id,this.plugin.descriptor.settings)}getComponentInstances(e){return this.hooks.callHook("getComponentInstances",{app:e})}getComponentBounds(e){return this.hooks.callHook("getComponentBounds",{instance:e})}getComponentName(e){return this.hooks.callHook("getComponentName",{instance:e})}highlightElement(e){const t=e.__VUE_DEVTOOLS_NEXT_UID__;return this.hooks.callHook("componentHighlight",{uid:t})}unhighlightElement(){return this.hooks.callHook("componentUnhighlight")}},_0=g0;O();O();O();O();var m0="__vue_devtool_undefined__",v0="__vue_devtool_infinity__",y0="__vue_devtool_negative_infinity__",b0="__vue_devtool_nan__";O();O();var E0={[m0]:"undefined",[b0]:"NaN",[v0]:"Infinity",[y0]:"-Infinity"};Object.entries(E0).reduce((e,[t,n])=>(e[n]=t,e),{});O();O();O();O();O();var _a,ma;(ma=(_a=J).__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__)!=null||(_a.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__=new Set);function S0(e,t){const[n,r]=e;if(n.app!==t)return;const o=new _0({plugin:{setupFn:r,descriptor:n},ctx:Jn});n.packageName==="vuex"&&o.on.editInspectorState(s=>{o.sendInspectorState(s.inspectorId)}),r(o)}function ef(e,t){J.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(e)||Ue.highPerfModeEnabled&&!(t!=null&&t.inspectingComponent)||(J.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(e),Ci.forEach(n=>{S0(n,e)}))}O();O();var Or="__VUE_DEVTOOLS_ROUTER__",jn="__VUE_DEVTOOLS_ROUTER_INFO__",va,ya;(ya=(va=J)[jn])!=null||(va[jn]={currentRoute:null,routes:[]});var ba,Ea;(Ea=(ba=J)[Or])!=null||(ba[Or]={});new Proxy(J[jn],{get(e,t){return J[jn][t]}});new Proxy(J[Or],{get(e,t){if(t==="value")return J[Or]}});function A0(e){const t=new Map;return((e==null?void 0:e.getRoutes())||[]).filter(n=>!t.has(n.path)&&t.set(n.path,1))}function ki(e){return e.map(t=>{let{path:n,name:r,children:o,meta:s}=t;return o!=null&&o.length&&(o=ki(o)),{path:n,name:r,children:o,meta:s}})}function w0(e){if(e){const{fullPath:t,hash:n,href:r,path:o,name:s,matched:i,params:l,query:a}=e;return{fullPath:t,hash:n,href:r,path:o,name:s,params:l,query:a,matched:ki(i)}}return e}function C0(e,t){function n(){var r;const o=(r=e.app)==null?void 0:r.config.globalProperties.$router,s=w0(o==null?void 0:o.currentRoute.value),i=ki(A0(o)),l=console.warn;console.warn=()=>{},J[jn]={currentRoute:s?Kl(s):{},routes:Kl(i)},J[Or]=o,console.warn=l}n(),h0.on.componentUpdated(Un(()=>{var r;((r=t.value)==null?void 0:r.app)===e.app&&(n(),!Ue.highPerfModeEnabled&&Jn.hooks.callHook("routerInfoUpdated",{state:J[jn]}))},200))}function T0(e){return{async getInspectorTree(t){const n={...t,app:nt.value.app,rootNodes:[]};return await new Promise(r=>{e.callHookWith(async o=>{await Promise.all(o.map(s=>s(n))),r()},"getInspectorTree")}),n.rootNodes},async getInspectorState(t){const n={...t,app:nt.value.app,state:null},r={currentTab:`custom-inspector:${t.inspectorId}`};return await new Promise(o=>{e.callHookWith(async s=>{await Promise.all(s.map(i=>i(n,r))),o()},"getInspectorState")}),n.state},editInspectorState(t){const n=new Xm,r={...t,app:nt.value.app,set:(o,s=t.path,i=t.state.value,l)=>{n.set(o,s,i,l||n.createDefaultSetCallback(t.state))}};e.callHookWith(o=>{o.forEach(s=>s(r))},"editInspectorState")},sendInspectorState(t){const n=lo(t);e.callHook("sendInspectorState",{inspectorId:t,plugin:{descriptor:n.descriptor,setupFn:()=>({})}})},inspectComponentInspector(){return Km()},cancelInspectComponentInspector(){return Wm()},getComponentRenderCode(t){const n=Os(nt.value,t);if(n)return(n==null?void 0:n.type)instanceof Function?n.type.toString():n.render.toString()},scrollToComponent(t){return zm({id:t})},openInEditor:u0,getVueInspector:Ym,toggleApp(t,n){const r=Fo.value.find(o=>o.id===t);r&&(a0(t),l0(r),C0(r,nt),Jc(),ef(r.app,n))},inspectDOM(t){const n=Os(nt.value,t);if(n){const[r]=bi(n);r&&(J.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__=r)}},updatePluginSettings(t,n,r){d0(t,n,r)},getPluginSettings(t){return{options:c0(t),values:Zc(t)}}}}O();var Sa,Aa;(Aa=(Sa=J).__VUE_DEVTOOLS_ENV__)!=null||(Sa.__VUE_DEVTOOLS_ENV__={vitePluginDetected:!1});var wa=o0(),Ca,Ta;(Ta=(Ca=J).__VUE_DEVTOOLS_KIT_CONTEXT__)!=null||(Ca.__VUE_DEVTOOLS_KIT_CONTEXT__={hooks:wa,get state(){return{...Ue,activeAppRecordId:nt.id,activeAppRecord:nt.value,appRecords:Fo.value}},api:T0(wa)});var Jn=J.__VUE_DEVTOOLS_KIT_CONTEXT__;O();Tm(Om());var ka,Oa;(Oa=(ka=J).__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__)!=null||(ka.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__={id:0,appIds:new Set});O();function k0(e){Ue.highPerfModeEnabled=e??!Ue.highPerfModeEnabled,!e&&nt.value&&ef(nt.value.app)}O();O();O();function O0(e){Ue.devtoolsClientDetected={...Ue.devtoolsClientDetected,...e};const t=Object.values(Ue.devtoolsClientDetected).some(Boolean);k0(!t)}var Pa,xa;(xa=(Pa=J).__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__)!=null||(Pa.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__=O0);O();O();O();O();O();O();O();var P0=class{constructor(){this.keyToValue=new Map,this.valueToKey=new Map}set(e,t){this.keyToValue.set(e,t),this.valueToKey.set(t,e)}getByKey(e){return this.keyToValue.get(e)}getByValue(e){return this.valueToKey.get(e)}clear(){this.keyToValue.clear(),this.valueToKey.clear()}},tf=class{constructor(e){this.generateIdentifier=e,this.kv=new P0}register(e,t){this.kv.getByValue(e)||(t||(t=this.generateIdentifier(e)),this.kv.set(t,e))}clear(){this.kv.clear()}getIdentifier(e){return this.kv.getByValue(e)}getValue(e){return this.kv.getByKey(e)}},x0=class extends tf{constructor(){super(e=>e.name),this.classToAllowedProps=new Map}register(e,t){typeof t=="object"?(t.allowProps&&this.classToAllowedProps.set(e,t.allowProps),super.register(e,t.identifier)):super.register(e,t)}getAllowedProps(e){return this.classToAllowedProps.get(e)}};O();O();function D0(e){if("values"in Object)return Object.values(e);const t=[];for(const n in e)e.hasOwnProperty(n)&&t.push(e[n]);return t}function R0(e,t){const n=D0(e);if("find"in n)return n.find(t);const r=n;for(let o=0;o<r.length;o++){const s=r[o];if(t(s))return s}}function Wn(e,t){Object.entries(e).forEach(([n,r])=>t(r,n))}function ao(e,t){return e.indexOf(t)!==-1}function Da(e,t){for(let n=0;n<e.length;n++){const r=e[n];if(t(r))return r}}var I0=class{constructor(){this.transfomers={}}register(e){this.transfomers[e.name]=e}findApplicable(e){return R0(this.transfomers,t=>t.isApplicable(e))}findByName(e){return this.transfomers[e]}};O();O();var L0=e=>Object.prototype.toString.call(e).slice(8,-1),nf=e=>typeof e>"u",V0=e=>e===null,Pr=e=>typeof e!="object"||e===null||e===Object.prototype?!1:Object.getPrototypeOf(e)===null?!0:Object.getPrototypeOf(e)===Object.prototype,Rs=e=>Pr(e)&&Object.keys(e).length===0,rn=e=>Array.isArray(e),N0=e=>typeof e=="string",M0=e=>typeof e=="number"&&!isNaN(e),F0=e=>typeof e=="boolean",B0=e=>e instanceof RegExp,xr=e=>e instanceof Map,Dr=e=>e instanceof Set,rf=e=>L0(e)==="Symbol",$0=e=>e instanceof Date&&!isNaN(e.valueOf()),H0=e=>e instanceof Error,Ra=e=>typeof e=="number"&&isNaN(e),U0=e=>F0(e)||V0(e)||nf(e)||M0(e)||N0(e)||rf(e),j0=e=>typeof e=="bigint",W0=e=>e===1/0||e===-1/0,K0=e=>ArrayBuffer.isView(e)&&!(e instanceof DataView),z0=e=>e instanceof URL;O();var of=e=>e.replace(/\./g,"\\."),cs=e=>e.map(String).map(of).join("."),_r=e=>{const t=[];let n="";for(let o=0;o<e.length;o++){let s=e.charAt(o);if(s==="\\"&&e.charAt(o+1)==="."){n+=".",o++;continue}if(s==="."){t.push(n),n="";continue}n+=s}const r=n;return t.push(r),t};O();function Ct(e,t,n,r){return{isApplicable:e,annotation:t,transform:n,untransform:r}}var sf=[Ct(nf,"undefined",()=>null,()=>{}),Ct(j0,"bigint",e=>e.toString(),e=>typeof BigInt<"u"?BigInt(e):(console.error("Please add a BigInt polyfill."),e)),Ct($0,"Date",e=>e.toISOString(),e=>new Date(e)),Ct(H0,"Error",(e,t)=>{const n={name:e.name,message:e.message};return t.allowedErrorProps.forEach(r=>{n[r]=e[r]}),n},(e,t)=>{const n=new Error(e.message);return n.name=e.name,n.stack=e.stack,t.allowedErrorProps.forEach(r=>{n[r]=e[r]}),n}),Ct(B0,"regexp",e=>""+e,e=>{const t=e.slice(1,e.lastIndexOf("/")),n=e.slice(e.lastIndexOf("/")+1);return new RegExp(t,n)}),Ct(Dr,"set",e=>[...e.values()],e=>new Set(e)),Ct(xr,"map",e=>[...e.entries()],e=>new Map(e)),Ct(e=>Ra(e)||W0(e),"number",e=>Ra(e)?"NaN":e>0?"Infinity":"-Infinity",Number),Ct(e=>e===0&&1/e===-1/0,"number",()=>"-0",Number),Ct(z0,"URL",e=>e.toString(),e=>new URL(e))];function Bo(e,t,n,r){return{isApplicable:e,annotation:t,transform:n,untransform:r}}var lf=Bo((e,t)=>rf(e)?!!t.symbolRegistry.getIdentifier(e):!1,(e,t)=>["symbol",t.symbolRegistry.getIdentifier(e)],e=>e.description,(e,t,n)=>{const r=n.symbolRegistry.getValue(t[1]);if(!r)throw new Error("Trying to deserialize unknown symbol");return r}),G0=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,Uint8ClampedArray].reduce((e,t)=>(e[t.name]=t,e),{}),af=Bo(K0,e=>["typed-array",e.constructor.name],e=>[...e],(e,t)=>{const n=G0[t[1]];if(!n)throw new Error("Trying to deserialize unknown typed array");return new n(e)});function uf(e,t){return e!=null&&e.constructor?!!t.classRegistry.getIdentifier(e.constructor):!1}var cf=Bo(uf,(e,t)=>["class",t.classRegistry.getIdentifier(e.constructor)],(e,t)=>{const n=t.classRegistry.getAllowedProps(e.constructor);if(!n)return{...e};const r={};return n.forEach(o=>{r[o]=e[o]}),r},(e,t,n)=>{const r=n.classRegistry.getValue(t[1]);if(!r)throw new Error(`Trying to deserialize unknown class '${t[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);return Object.assign(Object.create(r.prototype),e)}),ff=Bo((e,t)=>!!t.customTransformerRegistry.findApplicable(e),(e,t)=>["custom",t.customTransformerRegistry.findApplicable(e).name],(e,t)=>t.customTransformerRegistry.findApplicable(e).serialize(e),(e,t,n)=>{const r=n.customTransformerRegistry.findByName(t[1]);if(!r)throw new Error("Trying to deserialize unknown custom value");return r.deserialize(e)}),q0=[cf,lf,ff,af],Ia=(e,t)=>{const n=Da(q0,o=>o.isApplicable(e,t));if(n)return{value:n.transform(e,t),type:n.annotation(e,t)};const r=Da(sf,o=>o.isApplicable(e,t));if(r)return{value:r.transform(e,t),type:r.annotation}},df={};sf.forEach(e=>{df[e.annotation]=e});var Y0=(e,t,n)=>{if(rn(t))switch(t[0]){case"symbol":return lf.untransform(e,t,n);case"class":return cf.untransform(e,t,n);case"custom":return ff.untransform(e,t,n);case"typed-array":return af.untransform(e,t,n);default:throw new Error("Unknown transformation: "+t)}else{const r=df[t];if(!r)throw new Error("Unknown transformation: "+t);return r.untransform(e,n)}};O();var Dn=(e,t)=>{if(t>e.size)throw new Error("index out of bounds");const n=e.keys();for(;t>0;)n.next(),t--;return n.next().value};function pf(e){if(ao(e,"__proto__"))throw new Error("__proto__ is not allowed as a property");if(ao(e,"prototype"))throw new Error("prototype is not allowed as a property");if(ao(e,"constructor"))throw new Error("constructor is not allowed as a property")}var J0=(e,t)=>{pf(t);for(let n=0;n<t.length;n++){const r=t[n];if(Dr(e))e=Dn(e,+r);else if(xr(e)){const o=+r,s=+t[++n]==0?"key":"value",i=Dn(e,o);switch(s){case"key":e=i;break;case"value":e=e.get(i);break}}else e=e[r]}return e},Is=(e,t,n)=>{if(pf(t),t.length===0)return n(e);let r=e;for(let s=0;s<t.length-1;s++){const i=t[s];if(rn(r)){const l=+i;r=r[l]}else if(Pr(r))r=r[i];else if(Dr(r)){const l=+i;r=Dn(r,l)}else if(xr(r)){if(s===t.length-2)break;const a=+i,u=+t[++s]==0?"key":"value",c=Dn(r,a);switch(u){case"key":r=c;break;case"value":r=r.get(c);break}}}const o=t[t.length-1];if(rn(r)?r[+o]=n(r[+o]):Pr(r)&&(r[o]=n(r[o])),Dr(r)){const s=Dn(r,+o),i=n(s);s!==i&&(r.delete(s),r.add(i))}if(xr(r)){const s=+t[t.length-2],i=Dn(r,s);switch(+o==0?"key":"value"){case"key":{const a=n(i);r.set(a,r.get(i)),a!==i&&r.delete(i);break}case"value":{r.set(i,n(r.get(i)));break}}}return e};function Ls(e,t,n=[]){if(!e)return;if(!rn(e)){Wn(e,(s,i)=>Ls(s,t,[...n,..._r(i)]));return}const[r,o]=e;o&&Wn(o,(s,i)=>{Ls(s,t,[...n,..._r(i)])}),t(r,n)}function X0(e,t,n){return Ls(t,(r,o)=>{e=Is(e,o,s=>Y0(s,r,n))}),e}function Q0(e,t){function n(r,o){const s=J0(e,_r(o));r.map(_r).forEach(i=>{e=Is(e,i,()=>s)})}if(rn(t)){const[r,o]=t;r.forEach(s=>{e=Is(e,_r(s),()=>e)}),o&&Wn(o,n)}else Wn(t,n);return e}var Z0=(e,t)=>Pr(e)||rn(e)||xr(e)||Dr(e)||uf(e,t);function ev(e,t,n){const r=n.get(e);r?r.push(t):n.set(e,[t])}function tv(e,t){const n={};let r;return e.forEach(o=>{if(o.length<=1)return;t||(o=o.map(l=>l.map(String)).sort((l,a)=>l.length-a.length));const[s,...i]=o;s.length===0?r=i.map(cs):n[cs(s)]=i.map(cs)}),r?Rs(n)?[r]:[r,n]:Rs(n)?void 0:n}var hf=(e,t,n,r,o=[],s=[],i=new Map)=>{var l;const a=U0(e);if(!a){ev(e,o,t);const m=i.get(e);if(m)return r?{transformedValue:null}:m}if(!Z0(e,n)){const m=Ia(e,n),v=m?{transformedValue:m.value,annotations:[m.type]}:{transformedValue:e};return a||i.set(e,v),v}if(ao(s,e))return{transformedValue:null};const u=Ia(e,n),c=(l=u==null?void 0:u.value)!=null?l:e,f=rn(c)?[]:{},p={};Wn(c,(m,v)=>{if(v==="__proto__"||v==="constructor"||v==="prototype")throw new Error(`Detected property ${v}. This is a prototype pollution risk, please remove it from your object.`);const b=hf(m,t,n,r,[...o,v],[...s,e],i);f[v]=b.transformedValue,rn(b.annotations)?p[v]=b.annotations:Pr(b.annotations)&&Wn(b.annotations,(y,S)=>{p[of(v)+"."+S]=y})});const d=Rs(p)?{transformedValue:f,annotations:u?[u.type]:void 0}:{transformedValue:f,annotations:u?[u.type,p]:p};return a||i.set(e,d),d};O();O();function gf(e){return Object.prototype.toString.call(e).slice(8,-1)}function La(e){return gf(e)==="Array"}function nv(e){if(gf(e)!=="Object")return!1;const t=Object.getPrototypeOf(e);return!!t&&t.constructor===Object&&t===Object.prototype}function rv(e,t,n,r,o){const s={}.propertyIsEnumerable.call(r,t)?"enumerable":"nonenumerable";s==="enumerable"&&(e[t]=n),o&&s==="nonenumerable"&&Object.defineProperty(e,t,{value:n,enumerable:!1,writable:!0,configurable:!0})}function Vs(e,t={}){if(La(e))return e.map(o=>Vs(o,t));if(!nv(e))return e;const n=Object.getOwnPropertyNames(e),r=Object.getOwnPropertySymbols(e);return[...n,...r].reduce((o,s)=>{if(La(t.props)&&!t.props.includes(s))return o;const i=e[s],l=Vs(i,t);return rv(o,s,l,e,t.nonenumerable),o},{})}var ke=class{constructor({dedupe:e=!1}={}){this.classRegistry=new x0,this.symbolRegistry=new tf(t=>{var n;return(n=t.description)!=null?n:""}),this.customTransformerRegistry=new I0,this.allowedErrorProps=[],this.dedupe=e}serialize(e){const t=new Map,n=hf(e,t,this,this.dedupe),r={json:n.transformedValue};n.annotations&&(r.meta={...r.meta,values:n.annotations});const o=tv(t,this.dedupe);return o&&(r.meta={...r.meta,referentialEqualities:o}),r}deserialize(e){const{json:t,meta:n}=e;let r=Vs(t);return n!=null&&n.values&&(r=X0(r,n.values,this)),n!=null&&n.referentialEqualities&&(r=Q0(r,n.referentialEqualities)),r}stringify(e){return JSON.stringify(this.serialize(e))}parse(e){return this.deserialize(JSON.parse(e))}registerClass(e,t){this.classRegistry.register(e,t)}registerSymbol(e,t){this.symbolRegistry.register(e,t)}registerCustom(e,t){this.customTransformerRegistry.register({name:t,...e})}allowErrorProps(...e){this.allowedErrorProps.push(...e)}};ke.defaultInstance=new ke;ke.serialize=ke.defaultInstance.serialize.bind(ke.defaultInstance);ke.deserialize=ke.defaultInstance.deserialize.bind(ke.defaultInstance);ke.stringify=ke.defaultInstance.stringify.bind(ke.defaultInstance);ke.parse=ke.defaultInstance.parse.bind(ke.defaultInstance);ke.registerClass=ke.defaultInstance.registerClass.bind(ke.defaultInstance);ke.registerSymbol=ke.defaultInstance.registerSymbol.bind(ke.defaultInstance);ke.registerCustom=ke.defaultInstance.registerCustom.bind(ke.defaultInstance);ke.allowErrorProps=ke.defaultInstance.allowErrorProps.bind(ke.defaultInstance);O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();O();var Va,Na;(Na=(Va=J).__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__)!=null||(Va.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__=[]);var Ma,Fa;(Fa=(Ma=J).__VUE_DEVTOOLS_KIT_RPC_CLIENT__)!=null||(Ma.__VUE_DEVTOOLS_KIT_RPC_CLIENT__=null);var Ba,$a;($a=(Ba=J).__VUE_DEVTOOLS_KIT_RPC_SERVER__)!=null||(Ba.__VUE_DEVTOOLS_KIT_RPC_SERVER__=null);var Ha,Ua;(Ua=(Ha=J).__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__)!=null||(Ha.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__=null);var ja,Wa;(Wa=(ja=J).__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__)!=null||(ja.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__=null);var Ka,za;(za=(Ka=J).__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__)!=null||(Ka.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__=null);O();O();O();O();O();O();O();const ov=JSON.parse(`{"repo":"https://git.pleshevski.ru/pleshevskiy/pleshevski.ru","locales":{"/":{"selectLanguageName":"Русский","navbar":["/","/works"],"notFound":["Верните страницу!","Мы потеряли страницу...","Вы заблокированы в лабиринте.","Искали кота?","Страница украдена.","Ошиблись в параллельной вселенной."],"backToHome":"Вернуться на главную","worksTable":{"name":"Название","description":"Описание","role":"Роль","technologies":"Технологии","status":"Статус","dates":"Даты"}},"/eng/":{"selectLanguageName":"English","navbar":["/eng/","/eng/works"],"notFound":["Return the page!","We lost a page...","You're blocked in a labyrinth.","Looking for a cat?","The page has been stolen.","Wrong turn in parallel universe."],"backToHome":"Back to home","worksTable":{"name":"Name","description":"Description","role":"Role","technologies":"Technologies","status":"Status","dates":"Dates"}}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"logo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","sidebar":"heading","sidebarDepth":2,"editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),sv=ye(ov),_f=()=>sv,mf=Symbol(""),iv=()=>{const e=Je(mf);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},lv=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},av=zt({enhance({app:e}){const t=_f(),n=e._context.provides[ii],r=N(()=>lv(t.value,n.routeLocale.value));e.provide(mf,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),uv=Object.freeze(Object.defineProperty({__proto__:null,default:av},Symbol.toStringTag,{value:"Module"})),cv=()=>_f(),We=()=>iv(),vf=Symbol(""),fv=e=>{const t=(n=e.value)=>{const r=window.document.documentElement;r.dataset.theme=n?"dark":"light"};ot(()=>{hi(e,t)}),Oo(()=>{t()})},Oi=()=>{const e=Je(vf);if(!e)throw new Error("useDarkMode() is called without provider.");return e},dv=()=>{const e=We(),t=i_(),n=_i("vuepress-color-scheme",e.value.colorMode),r=N({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});bn(vf,r),fv(r)};let fs=null,or=null;const pv={wait:()=>fs,pending:()=>{fs=new Promise(e=>{or=e})},resolve:()=>{or==null||or(),fs=null,or=null}},yf=()=>pv,Kn=(e,t)=>{const{notFound:n,meta:r,path:o}=kr(e,t);return n?{text:o,link:o}:{text:r.title||o,link:o}},Mn=(e="",t="")=>Lc(t)||$r(t)?t:`${Sh(e)}${t}`,hv=e=>({text:e.title,link:e.link,children:Pi(e.children)}),Pi=e=>e?e.map(t=>hv(t)):[],bf=(e,t)=>[{text:e.title,children:Pi(t)}],Ef=(e,t,n,r="")=>{const o=(s,i)=>{var a;const l=Et(s)?Kn(Mn(i,s)):Et(s.link)?{...s,link:Vc(s.link)?Kn(Mn(i,s.link)).link:s.link}:s;if("children"in l)return{...l,children:l.children.map(u=>o(u,Mn(i,l.prefix)))};if(l.link===n){const u=((a=t[0])==null?void 0:a.level)===1?t[0].children:t;return{...l,children:Pi(u)}}return l};return e.map(s=>o(s,r))},gv=(e,t,n,r)=>{const o=w_(e).sort((s,i)=>i.length-s.length);for(const s of o)if(Ic(decodeURI(r),s)){const i=e[s];return i?i==="heading"?bf(t,n):Ef(i,n,r,s):[]}return console.warn(`${decodeURI(r)} is missing sidebar config.`),[]},Sf=Symbol("sidebarItems"),xi=()=>{const e=Je(Sf);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},_v=(e,t,n,r,o)=>e===!1?[]:e==="heading"?bf(t,o):Array.isArray(e)?Ef(e,o,n,r):ri(e)?gv(e,t,o,n):[],mv=()=>{const e=We(),t=xt(),n=qn(),r=Kt(),o=Hr(),s=N(()=>t.value.home?!1:t.value.sidebar??e.value.sidebar??"heading"),i=N(()=>_v(s.value,n.value,r.path,o.value,n.value.headers));bn(Sf,i)},vv=pe({__name:"Badge",props:{type:{default:"tip"},text:{default:""},vertical:{default:void 0}},setup(e,{expose:t}){t();const n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Pe=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n};function yv(e,t,n,r,o,s){return j(),te("span",{class:rt(["vp-badge",n.type]),style:zn({verticalAlign:n.vertical})},[De(e.$slots,"default",{},()=>[nn(ce(n.text),1)])],6)}const bv=Pe(vv,[["render",yv],["__file","Badge.vue"]]),Ev=pe({__name:"VPHomeFeatures",setup(e,{expose:t}){t();const n=xt(),r=N(()=>n.value.features??[]),o={frontmatter:n,features:r};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),Sv={key:0,class:"vp-features"};function Av(e,t,n,r,o,s){return r.features.length?(j(),te("div",Sv,[(j(!0),te(Ae,null,Ht(r.features,i=>(j(),te("div",{key:i.title,class:"vp-feature"},[X("h2",null,ce(i.title),1),X("p",null,ce(i.details),1)]))),128))])):Me("",!0)}const wv=Pe(Ev,[["render",Av],["__file","VPHomeFeatures.vue"]]),Cv=pe({__name:"VPHomeFooter",setup(e,{expose:t}){t();const n=xt(),r=N(()=>n.value.footer),o=N(()=>n.value.footerHtml),s={frontmatter:n,footer:r,footerHtml:o};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),Tv=["innerHTML"],kv=["textContent"];function Ov(e,t,n,r,o,s){return r.footer?(j(),te(Ae,{key:0},[r.footerHtml?(j(),te("div",{key:0,class:"vp-footer","vp-footer":"",innerHTML:r.footer},null,8,Tv)):(j(),te("div",{key:1,class:"vp-footer","vp-footer":"",textContent:ce(r.footer)},null,8,kv))],64)):Me("",!0)}const Pv=Pe(Cv,[["render",Ov],["__file","VPHomeFooter.vue"]]),xv=pe({__name:"VPAutoLink",props:{config:{}},setup(e,{expose:t}){t();const n={get AutoLink(){return Fg}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function Dv(e,t,n,r,o,s){return j(),Ie(r.AutoLink,{config:n.config},qd({before:Re(()=>[De(e.$slots,"before",Uo(oo(n.config)))]),after:Re(()=>[De(e.$slots,"after",Uo(oo(n.config)))]),_:2},[e.$slots.default?{name:"default",fn:Re(()=>[De(e.$slots,"default",Uo(oo(n.config)))]),key:"0"}:void 0]),1032,["config"])}const Xn=Pe(xv,[["render",Dv],["__file","VPAutoLink.vue"]]),Rv=pe({__name:"VPHomeHero",setup(e,{expose:t}){t();const n=xt(),r=li(),o=Oi(),s=N(()=>n.value.heroText===null?null:n.value.heroText||r.value.title||"Hello"),i=N(()=>n.value.tagline===null?null:n.value.tagline||r.value.description||"Welcome to your VuePress site"),l=N(()=>o.value&&n.value.heroImageDark!==void 0?n.value.heroImageDark:n.value.heroImage),a=N(()=>n.value.heroAlt||s.value||"hero"),u=N(()=>n.value.heroHeight??280),c=N(()=>Array.isArray(n.value.actions)?n.value.actions.map(({type:d="primary",...m})=>({type:d,...m})):[]),p={frontmatter:n,siteLocale:r,isDarkMode:o,heroText:s,tagline:i,heroImage:l,heroAlt:a,heroHeight:u,actions:c,HomeHeroImage:()=>{if(!l.value)return null;const d=Ee("img",{class:"vp-hero-image",src:ci(l.value),alt:a.value,height:u.value});return n.value.heroImageDark===void 0?d:Ee(ai,()=>d)},VPAutoLink:Xn};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Iv={class:"vp-hero"},Lv={key:0,id:"main-title"},Vv={key:1,class:"vp-hero-description"},Nv={key:2,class:"vp-hero-actions"};function Mv(e,t,n,r,o,s){return j(),te("header",Iv,[se(r.HomeHeroImage),r.heroText?(j(),te("h1",Lv,ce(r.heroText),1)):Me("",!0),r.tagline?(j(),te("p",Vv,ce(r.tagline),1)):Me("",!0),r.actions.length?(j(),te("p",Nv,[(j(!0),te(Ae,null,Ht(r.actions,i=>(j(),Ie(r.VPAutoLink,{key:i.text,class:rt(["vp-hero-action-button",[i.type]]),config:i},null,8,["class","config"]))),128))])):Me("",!0)])}const Fv=Pe(Rv,[["render",Mv],["__file","VPHomeHero.vue"]]),Bv=pe({__name:"VPHome",setup(e,{expose:t}){t();const n={VPHomeFeatures:wv,VPHomeFooter:Pv,VPHomeHero:Fv,get Content(){return ui}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),$v={class:"vp-home"},Hv={"vp-content":""};function Uv(e,t,n,r,o,s){return j(),te("main",$v,[se(r.VPHomeHero),se(r.VPHomeFeatures),X("div",Hv,[se(r.Content)]),se(r.VPHomeFooter)])}const jv=Pe(Bv,[["render",Uv],["__file","VPHome.vue"]]),Wv=pe({__name:"VPNavbarBrand",setup(e,{expose:t}){t();const n=Hr(),r=li(),o=We(),s=Oi(),i=N(()=>o.value.home||n.value),l=N(()=>r.value.title),a=N(()=>s.value&&o.value.logoDark!==void 0?o.value.logoDark:o.value.logo),u=N(()=>o.value.logoAlt??l.value),c=N(()=>l.value.toLocaleUpperCase().trim()===u.value.toLocaleUpperCase().trim()),p={routeLocale:n,siteLocale:r,themeLocale:o,isDarkMode:s,navbarBrandLink:i,navbarBrandTitle:l,navbarBrandLogo:a,navbarBrandLogoAlt:u,navBarLogoAltMatchesTitle:c,NavbarBrandLogo:()=>{if(!a.value)return null;const d=Ee("img",{class:"vp-site-logo",src:ci(a.value),alt:u.value});return o.value.logoDark===void 0?d:Ee(ai,()=>d)},get RouteLink(){return Lo}};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),Kv=["aria-hidden"];function zv(e,t,n,r,o,s){return j(),Ie(r.RouteLink,{to:r.navbarBrandLink},{default:Re(()=>[se(r.NavbarBrandLogo),r.navbarBrandTitle?(j(),te("span",{key:0,class:rt(["vp-site-name",{"vp-hide-mobile":r.navbarBrandLogo}]),"aria-hidden":r.navBarLogoAltMatchesTitle},ce(r.navbarBrandTitle),11,Kv)):Me("",!0)]),_:1},8,["to"])}const Gv=Pe(Wv,[["render",zv],["__file","VPNavbarBrand.vue"]]),qv=pe({__name:"VPDropdownTransition",setup(e,{expose:t}){t();const o={setHeight:s=>{s.style.height=`${s.scrollHeight}px`},unsetHeight:s=>{s.style.height=""}};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}});function Yv(e,t,n,r,o,s){return j(),Ie(ni,{name:"vp-dropdown",onEnter:r.setHeight,onAfterEnter:r.unsetHeight,onBeforeLeave:r.setHeight},{default:Re(()=>[De(e.$slots,"default")]),_:3})}const Af=Pe(qv,[["render",Yv],["__file","VPDropdownTransition.vue"]]),Jv=pe({__name:"VPNavbarDropdown",props:{config:{}},setup(e,{expose:t}){t();const n=e,{config:r}=Au(n),o=Kt(),[s,i]=Pc(!1),l=N(()=>r.value.ariaLabel||r.value.text),a=(f,p)=>p[p.length-1]===f,u=f=>{f.detail===0?i():i(!1)};Ke(()=>o.path,()=>{i(!1)});const c={props:n,config:r,route:o,open:s,toggleOpen:i,dropdownAriaLabel:l,isLastItemOfArray:a,handleDropdown:u,VPAutoLink:Xn,VPDropdownTransition:Af};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}}),Xv=["aria-label"],Qv={class:"title"},Zv=["aria-label"],e1={class:"title"},t1={class:"vp-navbar-dropdown"},n1={class:"vp-navbar-dropdown-subtitle"},r1={key:1},o1={class:"vp-navbar-dropdown-subitem-wrapper"};function s1(e,t,n,r,o,s){return j(),te("div",{class:rt(["vp-navbar-dropdown-wrapper",{open:r.open}])},[X("button",{class:"vp-navbar-dropdown-title",type:"button","aria-label":r.dropdownAriaLabel,onClick:r.handleDropdown},[X("span",Qv,ce(r.config.text),1),t[1]||(t[1]=X("span",{class:"arrow down"},null,-1))],8,Xv),X("button",{class:"vp-navbar-dropdown-title-mobile",type:"button","aria-label":r.dropdownAriaLabel,onClick:t[0]||(t[0]=()=>r.toggleOpen())},[X("span",e1,ce(r.config.text),1),X("span",{class:rt(["arrow",r.open?"down":"right"])},null,2)],8,Zv),se(r.VPDropdownTransition,null,{default:Re(()=>[go(X("ul",t1,[(j(!0),te(Ae,null,Ht(r.config.children,i=>(j(),te("li",{key:i.text,class:"vp-navbar-dropdown-item"},["children"in i?(j(),te(Ae,{key:0},[X("h4",n1,[i.link?(j(),Ie(r.VPAutoLink,{key:0,config:i,onFocusout:()=>{r.isLastItemOfArray(i,r.config.children)&&i.children.length===0&&(r.open=!1)}},null,8,["config","onFocusout"])):(j(),te("span",r1,ce(i.text),1))]),X("ul",o1,[(j(!0),te(Ae,null,Ht(i.children,l=>(j(),te("li",{key:l.link,class:"vp-navbar-dropdown-subitem"},[se(r.VPAutoLink,{config:l,onFocusout:()=>{r.isLastItemOfArray(l,i.children)&&r.isLastItemOfArray(i,r.config.children)&&r.toggleOpen(!1)}},null,8,["config","onFocusout"])]))),128))])],64)):(j(),Ie(r.VPAutoLink,{key:1,config:i,onFocusout:()=>{r.isLastItemOfArray(i,r.config.children)&&r.toggleOpen(!1)}},null,8,["config","onFocusout"]))]))),128))],512),[[yo,r.open]])]),_:1})],2)}const i1=Pe(Jv,[["render",s1],["__file","VPNavbarDropdown.vue"]]),wf=(e,t="")=>Et(e)?Kn(Mn(t,e)):"children"in e?{...e,children:e.children.map(n=>wf(n,Mn(t,e.prefix)))}:{...e,link:Vc(e.link)?Kn(Mn(t,e.link)).link:e.link},l1=()=>{const e=We();return N(()=>(e.value.navbar||[]).map(t=>wf(t)))},Cf=e=>!Do(e)||e.includes("github.com")?"GitHub":e.includes("bitbucket.org")?"Bitbucket":e.includes("gitlab.com")?"GitLab":e.includes("gitee.com")?"Gitee":null,a1=()=>{const e=We(),t=N(()=>e.value.repo),n=N(()=>t.value?Cf(t.value):null),r=N(()=>t.value&&!Do(t.value)?`https://github.com/${t.value}`:t.value),o=N(()=>r.value?e.value.repoLabel?e.value.repoLabel:n.value===null?"Source":n.value:null);return N(()=>!r.value||!o.value?[]:[{text:o.value,link:r.value}])},u1=()=>{const e=Kt(),t=S_(),n=Hr(),r=Cc(),o=li(),s=cv(),i=We();return N(()=>{const l=Object.keys(r.value.locales);if(l.length<2)return[];const a=e.path,u=e.fullPath;return[{text:`${i.value.selectLanguageText}`,ariaLabel:`${i.value.selectLanguageAriaLabel??i.value.selectLanguageText}`,children:l.map(f=>{var y,S;const p=((y=r.value.locales)==null?void 0:y[f])??{},d=((S=s.value.locales)==null?void 0:S[f])??{},m=`${p.lang}`,v=d.selectLanguageName??m;if(m===o.value.lang)return{text:v,activeMatch:".",link:e.fullPath};const b=a.replace(n.value,f);return{text:v,link:t.value.some(g=>g===b)?u.replace(a,b):d.home??f}})}]})},c1="719px",f1={mobile:c1};var Rr;(function(e){e.Mobile="mobile"})(Rr||(Rr={}));const d1={[Rr.Mobile]:Number.parseInt(f1.mobile.replace("px",""),10)},Tf=(e,t)=>{const n=d1[e];Number.isInteger(n)&&(Xe("orientationchange",()=>{t(n)},!1),Xe("resize",()=>{t(n)},!1),ot(()=>{t(n)}))},p1=pe({__name:"VPNavbarItems",setup(e,{expose:t}){t();const n=l1(),r=u1(),o=a1(),s=ye(!1),i=N(()=>We().value.navbarLabel??"site navigation"),l=N(()=>[...n.value,...r.value,...o.value]);Tf(Rr.Mobile,u=>{s.value=window.innerWidth<u});const a={navbarConfig:n,navbarSelectLanguage:r,navbarRepo:o,isMobile:s,navbarLabel:i,navbarLinks:l,VPAutoLink:Xn,VPNavbarDropdown:i1};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),h1=["aria-label"];function g1(e,t,n,r,o,s){return r.navbarLinks.length?(j(),te("nav",{key:0,class:"vp-navbar-items","aria-label":r.navbarLabel},[(j(!0),te(Ae,null,Ht(r.navbarLinks,i=>(j(),te("div",{key:i.text,class:"vp-navbar-item"},["children"in i?(j(),Ie(r.VPNavbarDropdown,{key:0,class:rt({mobile:r.isMobile}),config:i},null,8,["class","config"])):(j(),Ie(r.VPAutoLink,{key:1,config:i},null,8,["config"]))]))),128))],8,h1)):Me("",!0)}const kf=Pe(p1,[["render",g1],["__file","VPNavbarItems.vue"]]),_1={},m1={class:"dark-icon",viewBox:"0 0 32 32"};function v1(e,t){return j(),te("svg",m1,t[0]||(t[0]=[X("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1)]))}const y1=Pe(_1,[["render",v1],["__file","VPDarkIcon.vue"]]),b1={},E1={class:"light-icon",viewBox:"0 0 32 32"};function S1(e,t){return j(),te("svg",E1,t[0]||(t[0]=[Ap('<path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path>',9)]))}const A1=Pe(b1,[["render",S1],["__file","VPLightIcon.vue"]]),w1=pe({__name:"VPToggleColorModeButton",setup(e,{expose:t}){t();const n=We(),r=Oi(),s={themeLocale:n,isDarkMode:r,toggleColorMode:()=>{r.value=!r.value},VPDarkIcon:y1,VPLightIcon:A1};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),C1=["title"];function T1(e,t,n,r,o,s){return j(),te("button",{type:"button",class:"vp-toggle-color-mode-button",title:r.themeLocale.toggleColorMode,onClick:r.toggleColorMode},[go(se(r.VPLightIcon,null,null,512),[[yo,!r.isDarkMode]]),go(se(r.VPDarkIcon,null,null,512),[[yo,r.isDarkMode]])],8,C1)}const k1=Pe(w1,[["render",T1],["__file","VPToggleColorModeButton.vue"]]),O1=pe({__name:"VPToggleSidebarButton",emits:["toggle"],setup(e,{expose:t}){t();const r={themeLocale:We()};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),P1=["title"];function x1(e,t,n,r,o,s){return j(),te("div",{class:"vp-toggle-sidebar-button",title:r.themeLocale.toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:t[0]||(t[0]=i=>e.$emit("toggle"))},t[1]||(t[1]=[X("div",{class:"icon","aria-hidden":"true"},[X("span"),X("span"),X("span")],-1)]),8,P1)}const D1=Pe(O1,[["render",x1],["__file","VPToggleSidebarButton.vue"]]),R1=pe({__name:"VPNavbar",emits:["toggleSidebar"],setup(e,{expose:t}){t();const n=Dc("SearchBox")?Xs("SearchBox"):()=>null,r=We(),o=Bi("navbar"),s=Bi("navbar-brand"),i=ye(0),l=N(()=>i.value?{maxWidth:`${i.value}px`}:{}),a=(c,f)=>{var m;const p=(m=c==null?void 0:c.ownerDocument.defaultView)==null?void 0:m.getComputedStyle(c,null)[f],d=Number.parseInt(p,10);return Number.isNaN(d)?0:d};Tf(Rr.Mobile,c=>{var p;const f=a(o.value,"paddingLeft")+a(o.value,"paddingRight");window.innerWidth<c?i.value=0:i.value=o.value.offsetWidth-f-(((p=s.value)==null?void 0:p.offsetWidth)??0)});const u={SearchBox:n,themeLocale:r,navbar:o,navbarBrand:s,linksWrapperMaxWidth:i,linksWrapperStyle:l,getCssValue:a,VPNavbarBrand:Gv,VPNavbarItems:kf,VPToggleColorModeButton:k1,VPToggleSidebarButton:D1};return Object.defineProperty(u,"__isScriptSetup",{enumerable:!1,value:!0}),u}}),I1={ref:"navbar",class:"vp-navbar","vp-navbar":""},L1={ref:"navbar-brand"};function V1(e,t,n,r,o,s){return j(),te("header",I1,[se(r.VPToggleSidebarButton,{onToggle:t[0]||(t[0]=i=>e.$emit("toggleSidebar"))}),X("span",L1,[se(r.VPNavbarBrand)],512),X("div",{class:"vp-navbar-items-wrapper",style:zn(r.linksWrapperStyle)},[De(e.$slots,"before"),se(r.VPNavbarItems,{class:"vp-hide-mobile"}),De(e.$slots,"after"),r.themeLocale.colorModeSwitch?(j(),Ie(r.VPToggleColorModeButton,{key:0})):Me("",!0),se(r.SearchBox)],4)],512)}const N1=Pe(R1,[["render",V1],["__file","VPNavbar.vue"]]),M1={},F1={class:"edit-icon",viewBox:"0 0 1024 1024"};function B1(e,t){return j(),te("svg",F1,t[0]||(t[0]=[X("g",{fill:"currentColor"},[X("path",{d:"M430.818 653.65a60.46 60.46 0 0 1-50.96-93.281l71.69-114.012 7.773-10.365L816.038 80.138A60.46 60.46 0 0 1 859.225 62a60.46 60.46 0 0 1 43.186 18.138l43.186 43.186a60.46 60.46 0 0 1 0 86.373L588.879 565.55l-8.637 8.637-117.466 68.234a60.46 60.46 0 0 1-31.958 11.229z"}),X("path",{d:"M728.802 962H252.891A190.883 190.883 0 0 1 62.008 771.98V296.934a190.883 190.883 0 0 1 190.883-192.61h267.754a60.46 60.46 0 0 1 0 120.92H252.891a69.962 69.962 0 0 0-69.098 69.099V771.98a69.962 69.962 0 0 0 69.098 69.098h475.911A69.962 69.962 0 0 0 797.9 771.98V503.363a60.46 60.46 0 1 1 120.922 0V771.98A190.883 190.883 0 0 1 728.802 962z"})],-1)]))}const $1=Pe(M1,[["render",B1],["__file","VPEditIcon.vue"]]),H1=()=>{const e=We(),t=qn(),n=xt();return N(()=>{var o;return n.value.contributors??e.value.contributors??!0?((o=t.value.git)==null?void 0:o.contributors)??null:null})},U1={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},j1=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Cf(e);return n!==null?U1[n]:null},W1=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const s=j1({docsRepo:e,editLinkPattern:o});return s?s.replace(/:repo/,Do(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,dc(`${fc(n)}/${r}`)):null},K1=()=>{const e=We(),t=qn(),n=xt();return N(()=>{if(!(n.value.editLink??e.value.editLink??!0))return null;const{repo:o,docsRepo:s=o,docsBranch:i="main",docsDir:l="",editLinkText:a}=e.value;if(!s)return null;const u=W1({docsRepo:s,docsBranch:i,docsDir:l,filePathRelative:t.value.filePathRelative,editLinkPattern:n.value.editLinkPattern??e.value.editLinkPattern});return u?{text:a??"Edit this page",link:u}:null})},z1=()=>{const e=We(),t=qn(),n=xt();return N(()=>{var s;return!(n.value.lastUpdated??e.value.lastUpdated??!0)||!((s=t.value.git)!=null&&s.updatedTime)?null:new Date(t.value.git.updatedTime).toLocaleString()})},G1=pe({__name:"VPPageMeta",setup(e,{expose:t}){t();const n=We(),r=K1(),o=z1(),s=H1(),i={themeLocale:n,editLink:r,lastUpdated:o,contributors:s,VPAutoLink:Xn,VPEditIcon:$1};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),q1={class:"vp-page-meta"},Y1={key:0,class:"vp-meta-item edit-link"},J1={class:"vp-meta-item git-info"},X1={key:0,class:"vp-meta-item last-updated"},Q1={class:"meta-item-label"},Z1={class:"meta-item-info"},ey={key:1,class:"vp-meta-item contributors"},ty={class:"meta-item-label"},ny={class:"meta-item-info"},ry=["title"];function oy(e,t,n,r,o,s){const i=Xs("ClientOnly");return j(),te("footer",q1,[r.editLink?(j(),te("div",Y1,[se(r.VPAutoLink,{class:"label",config:r.editLink},{before:Re(()=>[se(r.VPEditIcon)]),_:1},8,["config"])])):Me("",!0),X("div",J1,[r.lastUpdated?(j(),te("div",X1,[X("span",Q1,ce(r.themeLocale.lastUpdatedText)+": ",1),se(i,null,{default:Re(()=>[X("span",Z1,ce(r.lastUpdated),1)]),_:1})])):Me("",!0),r.contributors&&r.contributors.length?(j(),te("div",ey,[X("span",ty,ce(r.themeLocale.contributorsText)+": ",1),X("span",ny,[(j(!0),te(Ae,null,Ht(r.contributors,(l,a)=>(j(),te(Ae,{key:a},[X("span",{class:"contributor",title:`email: ${l.email}`},ce(l.name),9,ry),a!==r.contributors.length-1?(j(),te(Ae,{key:0},[nn(", ")],64)):Me("",!0)],64))),128))])])):Me("",!0)])])}const sy=Pe(G1,[["render",oy],["__file","VPPageMeta.vue"]]),iy=()=>{const e=Gn(),t=Kt();return n=>{n&&(Lc(n)?t.path!==n&&e.push(n):$r(n)?window.open(n):e.push(encodeURI(n)))}},Ga=(e,t)=>e===!1?!1:Et(e)?Kn(e,t):ri(e)?{...e,link:Kn(e.link,t).link}:null,Ns=(e,t,n)=>{const r=e.findIndex(s=>s.link===t);if(r!==-1){const s=e[r+n];return s?s.link?s:"prefix"in s&&!kr(s.prefix).notFound?{...s,link:s.prefix}:null:null}for(const s of e)if("children"in s){const i=Ns(s.children,t,n);if(i)return i}const o=e.findIndex(s=>"prefix"in s&&s.prefix===t);if(o!==-1){const s=e[o+n];return s?s.link?s:"prefix"in s&&!kr(s.prefix).notFound?{...s,link:s.prefix}:null:null}return null},ly=()=>{const e=xt(),t=We(),n=xi(),r=Kt(),o=N(()=>{const i=Ga(e.value.prev,r.path);return i===!1?null:i??(t.value.prev===!1?null:Ns(n.value,r.path,-1))}),s=N(()=>{const i=Ga(e.value.next,r.path);return i===!1?null:i??(t.value.next===!1?null:Ns(n.value,r.path,1))});return{prevLink:o,nextLink:s}},ay=pe({__name:"VPPageNav",setup(e,{expose:t}){t();const n=We(),r=iy(),{prevLink:o,nextLink:s}=ly(),i=N(()=>n.value.pageNavbarLabel??"page navigation");Xe("keydown",a=>{a.altKey&&(a.key==="ArrowRight"?s.value&&(r(s.value.link),a.preventDefault()):a.key==="ArrowLeft"&&o.value&&(r(o.value.link),a.preventDefault()))});const l={themeLocale:n,navigate:r,prevLink:o,nextLink:s,navbarLabel:i,VPAutoLink:Xn};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}}),uy=["aria-label"],cy={class:"hint"},fy={class:"link"},dy={class:"hint"},py={class:"link"};function hy(e,t,n,r,o,s){return r.prevLink||r.nextLink?(j(),te("nav",{key:0,class:"vp-page-nav","aria-label":r.navbarLabel},[r.prevLink?(j(),Ie(r.VPAutoLink,{key:0,class:"prev",config:r.prevLink},{default:Re(()=>[X("div",cy,[t[0]||(t[0]=X("span",{class:"arrow left"},null,-1)),nn(" "+ce(r.themeLocale.prev??"Prev"),1)]),X("div",fy,[X("span",null,ce(r.prevLink.text),1)])]),_:1},8,["config"])):Me("",!0),r.nextLink?(j(),Ie(r.VPAutoLink,{key:1,class:"next",config:r.nextLink},{default:Re(()=>[X("div",dy,[nn(ce(r.themeLocale.next??"Next")+" ",1),t[1]||(t[1]=X("span",{class:"arrow right"},null,-1))]),X("div",py,[X("span",null,ce(r.nextLink.text),1)])]),_:1},8,["config"])):Me("",!0)],8,uy)):Me("",!0)}const gy=Pe(ay,[["render",hy],["__file","VPPageNav.vue"]]),_y=pe({__name:"VPPage",setup(e,{expose:t}){t();const n={VPPageMeta:sy,VPPageNav:gy,get Content(){return ui}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),my={class:"vp-page"},vy={"vp-content":""};function yy(e,t,n,r,o,s){return j(),te("main",my,[De(e.$slots,"top"),X("div",vy,[De(e.$slots,"content-top"),se(r.Content),De(e.$slots,"content-bottom")]),se(r.VPPageMeta),se(r.VPPageNav),De(e.$slots,"bottom")])}const by=Pe(_y,[["render",yy],["__file","VPPage.vue"]]),qa=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Ey=(e,t)=>{if(t.hash===e)return!0;const n=qa(t.path),r=qa(e);return n===r},Of=(e,t)=>e.link&&Ey(e.link,t)?!0:"children"in e?e.children.some(n=>Of(n,t)):!1,Sy=pe({__name:"VPSidebarItem",props:{item:{},depth:{default:0}},setup(e,{expose:t}){t();const n=e,{item:r,depth:o}=Au(n),s=Kt(),i=Gn(),l=N(()=>"collapsible"in r.value&&r.value.collapsible),a=N(()=>Of(r.value,s)),u=N(()=>({"vp-sidebar-item":!0,"vp-sidebar-heading":o.value===0,active:a.value,collapsible:l.value})),c=N(()=>l.value?a.value:!0),[f,p]=Pc(c.value),d=b=>{l.value&&(b.preventDefault(),p())},m=i.afterEach(()=>{an(()=>{f.value=c.value})});Js(()=>{m()});const v={props:n,item:r,depth:o,route:s,router:i,collapsible:l,isActive:a,itemClass:u,isOpenDefault:c,isOpen:f,toggleIsOpen:p,onClick:d,unregisterRouterHook:m,VPAutoLink:Xn,VPDropdownTransition:Af};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),Ay={class:"vp-sidebar-children"};function wy(e,t,n,r,o,s){const i=Xs("VPSidebarItem",!0);return j(),te("li",null,[r.item.link?(j(),Ie(r.VPAutoLink,{key:0,class:rt(r.itemClass),config:r.item},null,8,["class","config"])):(j(),te("p",{key:1,tabindex:"0",class:rt(r.itemClass),onClick:r.onClick,onKeydown:ih(r.onClick,["enter"])},[nn(ce(r.item.text)+" ",1),r.collapsible?(j(),te("span",{key:0,class:rt(["arrow",r.isOpen?"down":"right"])},null,2)):Me("",!0)],34)),"children"in r.item&&r.item.children.length?(j(),Ie(r.VPDropdownTransition,{key:2},{default:Re(()=>[go(X("ul",Ay,[(j(!0),te(Ae,null,Ht(r.item.children,l=>(j(),Ie(i,{key:`${r.depth}${l.text}${l.link}`,item:l,depth:r.depth+1},null,8,["item","depth"]))),128))],512),[[yo,r.isOpen]])]),_:1})):Me("",!0)])}const Cy=Pe(Sy,[["render",wy],["__file","VPSidebarItem.vue"]]),Ty=pe({__name:"VPSidebarItems",setup(e,{expose:t}){t();const n=Kt(),r=xi();ot(()=>{Ke(()=>n.hash,s=>{const i=document.querySelector(".vp-sidebar");if(!i)return;const l=document.querySelector(`.vp-sidebar .vp-sidebar-item.auto-link[href="${n.path}${s}"]`);if(!l)return;const{top:a,height:u}=i.getBoundingClientRect(),{top:c,height:f}=l.getBoundingClientRect();c<a?l.scrollIntoView(!0):c+f>a+u&&l.scrollIntoView(!1)})});const o={route:n,sidebarItems:r,VPSidebarItem:Cy};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),ky={key:0,class:"vp-sidebar-items"};function Oy(e,t,n,r,o,s){return r.sidebarItems.length?(j(),te("ul",ky,[(j(!0),te(Ae,null,Ht(r.sidebarItems,i=>(j(),Ie(r.VPSidebarItem,{key:`${i.text}${i.link}`,item:i},null,8,["item"]))),128))])):Me("",!0)}const Py=Pe(Ty,[["render",Oy],["__file","VPSidebarItems.vue"]]),xy=pe({__name:"VPSidebar",setup(e,{expose:t}){t();const n={VPNavbarItems:kf,VPSidebarItems:Py};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Dy={class:"vp-sidebar","vp-sidebar":""};function Ry(e,t,n,r,o,s){return j(),te("aside",Dy,[se(r.VPNavbarItems),De(e.$slots,"top"),se(r.VPSidebarItems),De(e.$slots,"bottom")])}const Iy=Pe(xy,[["render",Ry],["__file","VPSidebar.vue"]]),Ly=pe({__name:"Layout",setup(e,{expose:t}){t();const n=qn(),r=xt(),o=We(),s=N(()=>r.value.navbar!==!1&&o.value.navbar!==!1),i=xi(),l=ye(!1),a=g=>{l.value=typeof g=="boolean"?g:!l.value},u={x:0,y:0},c=g=>{u.x=g.changedTouches[0].clientX,u.y=g.changedTouches[0].clientY},f=g=>{const E=g.changedTouches[0].clientX-u.x,V=g.changedTouches[0].clientY-u.y;Math.abs(E)>Math.abs(V)&&Math.abs(E)>40&&(E>0&&u.x<=80?a(!0):a(!1))},p=N(()=>r.value.externalLinkIcon??o.value.externalLinkIcon??!0),d=N(()=>[{"no-navbar":!s.value,"no-sidebar":!i.value.length,"sidebar-open":l.value,"external-link-icon":p.value},r.value.pageClass]);let m;ot(()=>{m=Gn().afterEach(()=>{a(!1)})}),Oo(()=>{m()});const v=yf(),b=v.resolve,y=v.pending,S={page:n,frontmatter:r,themeLocale:o,shouldShowNavbar:s,sidebarItems:i,isSidebarOpen:l,toggleSidebar:a,touchStart:u,onTouchStart:c,onTouchEnd:f,enableExternalLinkIcon:p,containerClass:d,get unregisterRouterHook(){return m},set unregisterRouterHook(g){m=g},scrollPromise:v,onBeforeEnter:b,onBeforeLeave:y,VPHome:jv,VPNavbar:N1,VPPage:by,VPSidebar:Iy};return Object.defineProperty(S,"__isScriptSetup",{enumerable:!1,value:!0}),S}});function Vy(e,t,n,r,o,s){return j(),te("div",{class:rt(["vp-theme-container",r.containerClass]),"vp-container":"",onTouchstart:r.onTouchStart,onTouchend:r.onTouchEnd},[De(e.$slots,"navbar",{},()=>[r.shouldShowNavbar?(j(),Ie(r.VPNavbar,{key:0,onToggleSidebar:r.toggleSidebar},{before:Re(()=>[De(e.$slots,"navbar-before")]),after:Re(()=>[De(e.$slots,"navbar-after")]),_:3})):Me("",!0)]),X("div",{class:"vp-sidebar-mask",onClick:t[0]||(t[0]=i=>r.toggleSidebar(!1))}),De(e.$slots,"sidebar",{},()=>[se(r.VPSidebar,null,{top:Re(()=>[De(e.$slots,"sidebar-top")]),bottom:Re(()=>[De(e.$slots,"sidebar-bottom")]),_:3})]),De(e.$slots,"page",{},()=>[r.frontmatter.home?(j(),Ie(r.VPHome,{key:0})):(j(),Ie(ni,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:r.onBeforeEnter,onBeforeLeave:r.onBeforeLeave},{default:Re(()=>[(j(),Ie(r.VPPage,{key:r.page.path},{top:Re(()=>[De(e.$slots,"page-top")]),"content-top":Re(()=>[De(e.$slots,"page-content-top")]),"content-bottom":Re(()=>[De(e.$slots,"page-content-bottom")]),bottom:Re(()=>[De(e.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34)}const Pf=Pe(Ly,[["render",Vy],["__file","Layout.vue"]]),Ny=pe({__name:"NotFound",setup(e,{expose:t}){t();const n=Hr(),r=We(),o=r.value.notFound??["Not Found"],s=()=>o[Math.floor(Math.random()*o.length)],i=r.value.home??n.value,l=r.value.backToHome??"Back to home",a={routeLocale:n,themeLocale:r,messages:o,getMsg:s,homeLink:i,homeText:l,get RouteLink(){return Lo}};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),My={class:"vp-theme-container","vp-container":""},Fy={class:"page"},By={"vp-content":""};function $y(e,t,n,r,o,s){return j(),te("div",My,[X("main",Fy,[X("div",By,[t[0]||(t[0]=X("h1",null,"404",-1)),X("blockquote",null,ce(r.getMsg()),1),se(r.RouteLink,{to:r.homeLink},{default:Re(()=>[nn(ce(r.homeText),1)]),_:1},8,["to"])])])])}const Hy=Pe(Ny,[["render",$y],["__scopeId","data-v-2c663dca"],["__file","NotFound.vue"]]),Uy=zt({enhance({app:e,router:t}){Dc("Badge")||e.component("Badge",bv);const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await yf().wait(),n(...r))},setup(){dv(),mv()},layouts:{Layout:Pf,NotFound:Hy}}),jy=Object.freeze(Object.defineProperty({__proto__:null,default:Uy},Symbol.toStringTag,{value:"Module"}));function Wy(e){return Hs()?(su(e),!0):!1}function Di(e){return typeof e=="function"?e():$t(e)}const Ky=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const zy=Object.prototype.toString,Gy=e=>zy.call(e)==="[object Object]",qy=()=>{};function Yy(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const xf=e=>e();function Jy(e=xf){const t=ye(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...s)=>{t.value&&e(...s)};return{isActive:Vr(t),pause:n,resume:r,eventFilter:o}}function Xy(e){return Cn()}function Qy(e,t,n={}){const{eventFilter:r=xf,...o}=n;return Ke(e,Yy(r,t),o)}function Zy(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:s,pause:i,resume:l,isActive:a}=Jy(r);return{stop:Qy(e,t,{...o,eventFilter:s}),pause:i,resume:l,isActive:a}}function eb(e,t=!0,n){Xy()?ot(e,n):t?e():an(e)}function tb(e){var t;const n=Di(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Eo=Ky?window:void 0;function Ya(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=Eo):[t,n,r,o]=e,!t)return qy;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const s=[],i=()=>{s.forEach(c=>c()),s.length=0},l=(c,f,p,d)=>(c.addEventListener(f,p,d),()=>c.removeEventListener(f,p,d)),a=Ke(()=>[tb(t),Di(o)],([c,f])=>{if(i(),!c)return;const p=Gy(f)?{...f}:f;s.push(...n.flatMap(d=>r.map(m=>l(c,d,m,p))))},{immediate:!0,flush:"post"}),u=()=>{a(),i()};return Wy(u),u}const eo=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},to="__vueuse_ssr_handlers__",nb=rb();function rb(){return to in eo||(eo[to]=eo[to]||{}),eo[to]}function ob(e,t){return nb[e]||t}function sb(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ib={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ja="vueuse-storage";function lb(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:u=!1,shallow:c,window:f=Eo,eventFilter:p,onError:d=k=>{console.error(k)},initOnMounted:m}=r,v=(c?dt:ye)(typeof t=="function"?t():t);if(!n)try{n=ob("getDefaultStorage",()=>{var k;return(k=Eo)==null?void 0:k.localStorage})()}catch(k){d(k)}if(!n)return v;const b=Di(t),y=sb(b),S=(o=r.serializer)!=null?o:ib[y],{pause:g,resume:E}=Zy(v,()=>U(v.value),{flush:s,deep:i,eventFilter:p});f&&l&&eb(()=>{Ya(f,"storage",Q),Ya(f,Ja,I),m&&Q()}),m||Q();function V(k,P){f&&f.dispatchEvent(new CustomEvent(Ja,{detail:{key:e,oldValue:k,newValue:P,storageArea:n}}))}function U(k){try{const P=n.getItem(e);if(k==null)V(P,null),n.removeItem(e);else{const C=S.write(k);P!==C&&(n.setItem(e,C),V(P,C))}}catch(P){d(P)}}function D(k){const P=k?k.newValue:n.getItem(e);if(P==null)return a&&b!=null&&n.setItem(e,S.write(b)),b;if(!k&&u){const C=S.read(P);return typeof u=="function"?u(C,b):y==="object"&&!Array.isArray(C)?{...b,...C}:C}else return typeof P!="string"?P:S.read(P)}function Q(k){if(!(k&&k.storageArea!==n)){if(k&&k.key==null){v.value=b;return}if(!(k&&k.key!==e)){g();try{(k==null?void 0:k.newValue)!==S.write(v.value)&&(v.value=D(k))}catch(P){d(P)}finally{k?an(E):E()}}}}function I(k){Q(k.detail)}return v}function ab(e,t,n={}){const{window:r=Eo}=n;return lb(e,t,r==null?void 0:r.sessionStorage,n)}const ub=Object.entries;var cb={autoLocale:!1,switchLocale:!1,localeConfig:{"/eng/":["en-US"]},defaultLocale:"/eng/",localeFallback:!0,defaultBehavior:"defaultLocale"};const fb=cb;ub(fb.localeConfig);ab("VUEPRESS_REDIRECT_LOCALES",{});const db=zt({setup(){},rootComponents:[]}),pb=Object.freeze(Object.defineProperty({__proto__:null,default:db},Symbol.toStringTag,{value:"Module"}));var ae=(e=>(e.Collaborator="collaborator",e.Author="author",e.TechLead="tech lead",e.TeamLead="team lead",e.Developer="developer",e))(ae||{}),ge=(e=>(e.ActiveDeveloped="actively-developed",e.PassivelyMaintained="passively-maintained",e.AsIs="as-is",e.Experimental="experimental",e.LookingForMaintainer="looking-for-maintainer",e.Deprecated="deprecated",e))(ge||{}),F=(e=>(e.C="C",e.Go="Go",e.JavaScript="JS",e.TypeScript="TS",e.Rust="Rust",e.Python="Python",e.Php="PHP",e.Deno="Deno",e.NodeJS="NodeJS",e.Flask="Flask",e.React="React",e.Antd="Antd",e.Postgresql="PostgreSQL",e.Docker="Docker",e.Drone="Drone CI",e.Woodpecker="Woodpecker CI",e.Bash="Bash",e.TreeSitter="TreeSitter",e.Nix="Nix",e.Lua="Lua",e.Sqlite="Sqlite",e.Vue="Vue",e.Vuepress="Vuepress",e.Godot="Godot",e.Haskell="Haskell",e))(F||{});const hb=[{name:"nixeovim",url:"/pleshevskiy/nixeovim",description:"Configure and build neovim editor using nix",roles:[ae.Author],technologies:[F.Nix],startDate:new Date("2024-04-24"),status:ge.ActiveDeveloped},{name:"picsg",url:"/pleshevskiy/picsg",description:"A tool for steganographing information in a picture encoded using the Vernam cipher.",roles:[ae.Author],technologies:[F.Haskell],startDate:new Date("2024-04-13"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"Mindustry tools",url:"/pleshevskiy/mindustry-tools",description:"Tools for the Mindustry game",roles:[ae.Author],technologies:[F.Nix,F.Godot],startDate:new Date("2024-01-07"),status:ge.PassivelyMaintained},{name:"Master Progress Rosmintrud tools",url:"https://rosmintrud.masterprogress.ru",description:"Internal service to prepare documents for the rosmintrud (SPA)",roles:[ae.TechLead],technologies:[F.Deno,F.Sqlite,F.TypeScript,F.Vue,F.Docker,F.Woodpecker,F.Nix],startDate:new Date("2023-07-03"),status:ge.PassivelyMaintained},{name:"yandexgpt_tg_bot",url:"/pleshevskiy/yandexgpt_tg_bot",description:"The Telegram bot to describe article with link by YandexGPT.",roles:[ae.Author],technologies:[F.JavaScript,F.NodeJS,F.Nix],startDate:new Date("2023-06-27"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"tree-sitter-plpgsql",url:"/pleshevskiy/tree-sitter-plpgsql",description:"plpgsql grammar for tree-sitter",roles:[ae.Author],technologies:[F.C,F.JavaScript,F.TreeSitter,F.Nix],startDate:new Date("2023-01-05"),status:ge.PassivelyMaintained},{name:"wd2",url:"/pleshevskiy/wd2",description:"A wrapper over d2 which allows to use additional configs from d2 file",roles:[ae.Author],technologies:[F.Bash,F.Nix],startDate:new Date("2022-12-12"),endDate:new Date("2023-07-31"),status:ge.AsIs},{name:"tree-sitter-d2",url:"/pleshevskiy/tree-sitter-d2",description:"d2 grammar for tree-sitter",roles:[ae.Author],technologies:[F.C,F.JavaScript,F.TreeSitter,F.Nix],startDate:new Date("2022-12-04"),status:ge.ActiveDeveloped},{name:"nix2lua",url:"/mynix/nix2lua",description:"This is a small but functional library that converts your nix configurations into lua format.",roles:[ae.Author],technologies:[F.Nix,F.Lua],startDate:new Date("2022-11-22"),status:ge.PassivelyMaintained},{name:"vnetod",url:"/pleshevskiy/vnetod",description:"Dotenv section switcher",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-07-29"),status:ge.PassivelyMaintained},{name:"estring",url:"/pleshevskiy/estring",description:"A simple way to parse a string using type annotations.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-07-23"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"enve",url:"/pleshevskiy/enve",description:"It helps you work with environment variables and convert it to any type using only type annotations",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-07-18"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"docker stack drone plugin",url:"/pleshevskiy/docker_stack",description:"Deploy to production using `docker stack deploy`",roles:[ae.Author],technologies:[F.Docker,F.Drone,F.Woodpecker],startDate:new Date("2022-06-06"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"dexios",url:"/github/dexios",description:"Dexios is a fast, secure, and open source command-line encryption tool.",roles:[ae.Collaborator],technologies:[F.Rust],startDate:new Date("2022-06-01"),endDate:new Date("2023-02-28")},{name:"recipes",url:"/pleshevskiy/recipes",description:"Site with recipes which cares about privacy",roles:[ae.Author],technologies:[F.TypeScript,F.Deno,F.Rust],startDate:new Date("2022-05-04"),status:ge.PassivelyMaintained},{name:"pleshevski.ru",url:"/pleshevskiy/pleshevski.ru",description:"Source code of my personal site",roles:[ae.Author],technologies:[F.TypeScript,F.Vue,F.Vuepress,F.Nix],startDate:new Date("2022-03-16"),status:ge.PassivelyMaintained},{name:"paren",url:"/pleshevskiy/paren",description:"Library for parsing and rendering information.",roles:[ae.Author],technologies:[F.TypeScript,F.Deno],startDate:new Date("2022-03-14"),endDate:new Date("2024-07-25"),status:ge.Experimental},{name:"hwt",url:"/pleshevskiy/hwt",description:"healthy workaholic timer – A tool that keeps you from breaking your health by working all day.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2022-02-04"),endDate:new Date("2024-07-25"),status:ge.AsIs},{name:"ood_persistence",url:"/pleshevskiy/ood_persistence",description:"Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture ",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2021-10-12"),endDate:new Date("2021-10-21"),status:ge.Deprecated},{name:"migra",url:"/pleshevskiy/migra",description:"Simple SQL migration manager for your project.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2021-01-31"),endDate:new Date("2022-03-17"),status:ge.AsIs},{name:"espruino-starter",url:"/pleshevskiy/espruino-starter",description:"Quickly start creating your new project on the espruino board or a board based on it.",roles:[ae.Author],technologies:[F.JavaScript],startDate:new Date("2021-08-23"),status:ge.AsIs},{name:"react-rest-request",url:"/pleshevskiy/react-rest-request",description:"Minimalistic REST API client for React inspired by Apollo.",roles:[ae.Author],technologies:[F.TypeScript,F.React],startDate:new Date("2020-10-04"),endDate:new Date("2023-03-02"),status:ge.Deprecated},{name:"sonic-channel",url:"/pleshevskiy/sonic-channel",description:"Rust client for sonic search backend.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2020-07-18"),status:ge.PassivelyMaintained},{name:"itconfig",url:"/pleshevskiy/itconfig",description:"Easy build a configs from environment variables and use it in globally.",roles:[ae.Author],technologies:[F.Rust],startDate:new Date("2019-12-22"),endDate:new Date("2022-07-24"),status:ge.Deprecated},{name:"it-fsm",url:"/pleshevskiy/it-fsm",description:"Simple full-featured finite state machine for your project",roles:[ae.Author],technologies:[F.TypeScript,F.NodeJS,F.Deno],startDate:new Date("2019-10-11"),status:ge.PassivelyMaintained},{name:"Cabinet Master Progress",url:"https://cabinet.masterprogress.ru",description:"Student's cabinet of the educational center Master Progress (SSR + SPA)",roles:[ae.TechLead],technologies:[F.Python,F.Flask,F.Postgresql,F.TypeScript,F.React,F.Docker,F.Woodpecker,F.Nix],startDate:new Date("2019-09-22"),status:ge.PassivelyMaintained},{name:"genrss",url:"/pleshevskiy/genrss",description:"RSS generator for python",roles:[ae.Author],technologies:[F.Python],startDate:new Date("2019-07-23"),status:ge.AsIs},{name:"marshmallow_pageinfo",url:"/pleshevskiy/marshmallow_pageinfo",description:"Page info marshmallow schema for api",roles:[ae.Author],technologies:[F.Python],startDate:new Date("2019-10-05"),endDate:new Date("2023-03-02"),status:ge.AsIs},{name:"Binary Management",url:"https://www.binarymanagement.com",description:"Project management tool for interior designers",roles:[ae.Developer,ae.TechLead,ae.TeamLead],technologies:[F.TypeScript,F.NodeJS,F.React,F.Antd,F.Docker,F.Drone,F.Rust,F.Nix],startDate:new Date("2018-09-15"),status:ge.ActiveDeveloped},{name:"Core Spirit",url:"https://corespirit.com",description:"Social platform focusing on human and planetary enhancement",roles:[ae.Developer],technologies:[F.TypeScript,F.NodeJS,F.Go,F.Python,F.React,F.Docker,F.Drone],startDate:new Date("2018-09-05"),endDate:new Date("2019-12-31")},{name:"Master Progress",url:"https://masterprogress.ru",description:"Main website of the educational center Master Progress (SSR + Forms)",roles:[ae.TechLead],technologies:[F.Python,F.Flask,F.JavaScript,F.Nix],startDate:new Date("2018-04-10"),status:ge.PassivelyMaintained},{name:"ictmpl",url:"/pleshevskiy/ictmpl",description:"Generate projects from templates",roles:[ae.Author],technologies:[F.Python],startDate:new Date("2018-06-30"),endDate:new Date("2023-03-02"),status:ge.AsIs}];function gb(e){return e.toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"})}const _b=e=>e.url.startsWith("https://")?e.url:new URL(e.url,"https://git.pleshevski.ru").toString(),mb=Object.freeze(Object.defineProperty({__proto__:null,getExternalLink:_b},Symbol.toStringTag,{value:"Module"}));function sr(e){return(e==null?void 0:e.valueOf())??1/0}const vb={name:"WorksPage",computed:{tableTheme(){return this.$themeLocale.worksTable??{}}}},yb=pe({...vb,setup(e,{expose:t}){t();const n=N(()=>hb.concat().sort((o,s)=>sr(s.endDate)-sr(o.endDate)||sr(s.startDate)-sr(o.startDate))),r={date2num:sr,works:n,get renderDate(){return gb},get w(){return mb}};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),bb=["href"],Eb=["innerHTML"],Sb={key:0};function Ab(e,t,n,r,o,s){return j(),te("table",null,[X("thead",null,[X("tr",null,[X("th",null,ce(s.tableTheme.name),1),X("th",null,ce(s.tableTheme.description),1),X("th",null,ce(s.tableTheme.role),1),X("th",null,ce(s.tableTheme.technologies),1),X("th",null,ce(s.tableTheme.status),1),X("th",null,ce(s.tableTheme.dates),1)])]),X("tbody",null,[(j(!0),te(Ae,null,Ht(r.works,i=>(j(),te("tr",null,[X("td",null,[X("a",{rel:"nofollow noopener",href:r.w.getExternalLink(i)},ce(i.name),9,bb)]),X("td",null,ce(i.description),1),X("td",{innerHTML:i.roles.join(", ")},null,8,Eb),X("td",null,ce(i.technologies.join(", ")),1),X("td",null,ce(i.status),1),X("td",null,[X("div",null,[X("small",{class:rt({grey:i.endDate})},ce(r.renderDate(i.startDate)),3)]),i.endDate?(j(),te("div",Sb,[X("small",null,ce(r.renderDate(i.endDate)),1)])):Me("",!0)])]))),256))])])}const wb=Pe(yb,[["render",Ab],["__file","ChronologicalWorksTable.vue"]]),Cb={__name:"WorksPage",setup(e,{expose:t}){t();const n={ParentLayout:Pf,get ChronologicalWorksTable(){return wb}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},Tb={class:"works-table-wrapper"};function kb(e,t,n,r,o,s){return j(),Ie(r.ParentLayout,null,{"page-bottom":Re(()=>[X("div",Tb,[se(r.ChronologicalWorksTable)])]),_:1})}const Ob=Pe(Cb,[["render",kb],["__scopeId","data-v-765855fb"],["__file","WorksPage.vue"]]),Pb=zt({layouts:{WorksPage:Ob}}),xb=Object.freeze(Object.defineProperty({__proto__:null,default:Pb},Symbol.toStringTag,{value:"Module"})),no=[b_,O_,V_,M_,j_,z_,Q_,uv,jy,pb,xb].map(e=>e.default).filter(Boolean),Db=JSON.parse('{"base":"/","lang":"ru-RU","title":"Дмитрий Плешевский","description":" ","head":[],"locales":{"/":{"lang":"ru-RU","title":"Дмитрий Плешевский"},"/eng/":{"lang":"en-US","title":"Dmitriy Pleshevskiy"}}}');var ar=dt(Db),Rb=rg,Ib=()=>{const e=Og({history:Rb(fc("/")),routes:[{name:"vuepress-route",path:"/:catchAll(.*)",components:{}}],scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{if(t.path!==n.path||n===Nt){const r=kr(t.fullPath);if(r.path!==t.fullPath)return r.path;const o=await r.loader();t.meta={...r.meta,_pageChunk:o}}else t.path===n.path&&(t.meta=n.meta)}),e},Lb=e=>{e.component("ClientOnly",ai),e.component("Content",ui),e.component("RouteLink",Lo)},Vb=(e,t,n)=>{const r=N(()=>t.currentRoute.value.path),o=hd((b,y)=>({get(){return b(),t.currentRoute.value.meta._pageChunk},set(S){t.currentRoute.value.meta._pageChunk=S,y()}})),s=N(()=>dn.resolveLayouts(n)),i=N(()=>dn.resolveRouteLocale(ar.value.locales,r.value)),l=N(()=>dn.resolveSiteLocaleData(ar.value,i.value)),a=N(()=>o.value.comp),u=N(()=>o.value.data),c=N(()=>u.value.frontmatter),f=N(()=>dn.resolvePageHeadTitle(u.value,l.value)),p=N(()=>dn.resolvePageHead(f.value,c.value,l.value)),d=N(()=>dn.resolvePageLang(u.value,l.value)),m=N(()=>dn.resolvePageLayout(u.value,s.value)),v={layouts:s,pageData:u,pageComponent:a,pageFrontmatter:c,pageHead:p,pageHeadTitle:f,pageLang:d,pageLayout:m,redirects:Ts,routeLocale:i,routePath:r,routes:Nn,siteData:ar,siteLocaleData:l};return e.provide(ii,v),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>c.value},$head:{get:()=>p.value},$headTitle:{get:()=>f.value},$lang:{get:()=>d.value},$page:{get:()=>u.value},$routeLocale:{get:()=>i.value},$site:{get:()=>ar.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>ci}}),v},Nb=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>Et(a)?`[${l}=${JSON.stringify(a)}]`:a?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)??null},Mb=([e,t,n])=>{if(!Et(e))return null;const r=document.createElement(e);return ri(t)&&Object.entries(t).forEach(([o,s])=>{Et(s)?r.setAttribute(o,s):s&&r.setAttribute(o,"")}),Et(n)&&r.appendChild(document.createTextNode(n)),r},Fb=()=>{const e=Dg(),t=Rg();let n=[];const r=()=>{e.value.forEach(i=>{const l=Nb(i);l&&n.push(l)})},o=()=>{const i=[];return e.value.forEach(l=>{const a=Mb(l);a&&i.push(a)}),i},s=()=>{document.documentElement.lang=t.value;const i=o();n.forEach((l,a)=>{const u=i.findIndex(c=>l.isEqualNode(c));u===-1?(l.remove(),delete n[a]):i.splice(u,1)}),i.forEach(l=>document.head.appendChild(l)),n=[...n.filter(l=>!!l),...i]};bn(Vg,s),ot(()=>{r(),Ke(e,s,{immediate:!1})})},Bb=uh,$b=async()=>{var n;const e=Bb({name:"Vuepress",setup(){var s;Fb();for(const i of no)(s=i.setup)==null||s.call(i);const r=no.flatMap(({rootComponents:i=[]})=>i.map(l=>Ee(l))),o=Ig();return()=>[Ee(o.value),r]}}),t=Ib();Lb(e),Vb(e,t,no);for(const r of no)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:ar}));return e.use(t),{app:e,router:t}};$b().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Pe as _,X as a,nn as b,te as c,$b as createVueApp,se as d,Ap as e,j as o,Xs as r,Re as w}; function __vite__mapDeps(indexes) { if (!__vite__mapDeps.viteFileDeps) { __vite__mapDeps.viteFileDeps = [] diff --git a/assets/index.html-DH5daCIZ.js b/assets/index.html-D2w7c-Qe.js similarity index 99% rename from assets/index.html-DH5daCIZ.js rename to assets/index.html-D2w7c-Qe.js index 05632ed..0060b44 100644 --- a/assets/index.html-DH5daCIZ.js +++ b/assets/index.html-D2w7c-Qe.js @@ -1 +1 @@ -import{_ as a,c as t,a as o,b as i,d as r,w as s,e as n,r as d,o as c}from"./app-B-ZDtWHa.js";const p={};function h(m,e){const l=d("RouteLink");return c(),t("div",null,[o("p",null,[e[1]||(e[1]=i("Всегда актуальная ссылка на ")),r(l,{to:"/"},{default:s(()=>e[0]||(e[0]=[i("резюме")])),_:1}),e[2]||(e[2]=i("."))]),e[3]||(e[3]=n('<h2 id="общие-сведения" tabindex="-1"><a class="header-anchor" href="#общие-сведения"><span>Общие сведения</span></a></h2><p>Меня зовут Дмитрий Плешевский.</p><p>Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий разработчик програмного обеспечения, архитектор, руководитель команды, а так же ментор.</p><h2 id="умения" tabindex="-1"><a class="header-anchor" href="#умения"><span>Умения</span></a></h2><h4 id="языки-программирования" tabindex="-1"><a class="header-anchor" href="#языки-программирования"><span>Языки программирования:</span></a></h4><ul><li>TypeScript (предпочитаю, твёрдый 9-летний опыт)</li><li>SQL (предпочитаю, твёрдый 8-летний опыт)</li><li>Rust (предпочитаю, 5-летний опыт)</li><li>Python (твёрдый 9-летний опыт)</li><li>Haskell</li><li>Bash (8-летний опыт)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="хранилища-данных" tabindex="-1"><a class="header-anchor" href="#хранилища-данных"><span>Хранилища данных:</span></a></h4><ul><li>PostgreSQL (предпочитаю, твёрдый 8-летний опыт)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (предпочитаю, твердый 5-летний опыт)</li></ul><hr><p>Я так же имею большой опыт в создании следующих типов приложений:</p><ul><li>Традиционные (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Динамическое (SPA)</li><li>Гибридное (SSR + SPA)</li><li>Консольные</li><li>Кроссплатформенные</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>async-graphql</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>shaku</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>bb8</code> + <code>postgres-types</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>diesel</code> (2-летний опыт)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (твёрдый 5-летний опыт)</li><li><code>Express</code> (твёрдый 9-летний опыт)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (твёрдый 5-летний опыт)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (твёрдый 8-летний опыт)</li><li><code>VueJS</code> (предпочитаю, твёрдый 4-летний опыт)</li><li><code>Cypress</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>Sass</code> (предпочитаю, твёрдый 8-летний опыт)</li><li><code>Less</code> (слабый 4-летний опыт)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>Docker Swarm</code> (твёрдый 6-летний опыт)</li><li><code>Kubernetes</code> (слабый 5-летний опыт)</li><li><code>Woodpecker CI</code> (твёрдый 4-летний опыт)</li><li><code>Drone CI</code> (твёрдый 3-летний опыт)</li><li><code>Gitlab CI</code> (твёрдый 7-летний опыт)</li><li><code>GitHub Actions</code> (4-летний опыт)</li></ul><h2 id="интересы" tabindex="-1"><a class="header-anchor" href="#интересы"><span>Интересы</span></a></h2><p>Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.</p><p>Помимо программирования я люблю готовить и проводить время со своей любимой семьей!</p><h2 id="контакты" tabindex="-1"><a class="header-anchor" href="#контакты"><span>Контакты</span></a></h2><p>Simplex (Предпочтительно): <a href="https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="ссылки" tabindex="-1"><a class="header-anchor" href="#ссылки"><span>Ссылки</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Приостановлен)</a></li></ul>',30))])}const k=a(p,[["render",h],["__file","index.html.vue"]]),y=JSON.parse('{"path":"/","title":"Резюме","lang":"ru-RU","frontmatter":{"home":true,"title":"Резюме","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Резюме"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-09-05T22:11:51.000Z"}],["meta",{"property":"article:modified_time","content":"2024-09-05T22:11:51.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Резюме\\"}"]]},"headers":[{"level":2,"title":"Общие сведения","slug":"общие-сведения","link":"#общие-сведения","children":[]},{"level":2,"title":"Умения","slug":"умения","link":"#умения","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Интересы","slug":"интересы","link":"#интересы","children":[]},{"level":2,"title":"Контакты","slug":"контакты","link":"#контакты","children":[]},{"level":2,"title":"Ссылки","slug":"ссылки","link":"#ссылки","children":[]}],"git":{"updatedTime":1725574311000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":13}]},"filePathRelative":"index.md"}');export{k as comp,y as data}; +import{_ as a,c as t,a as o,b as i,d as r,w as s,e as n,r as d,o as c}from"./app-Dje5btuz.js";const p={};function h(m,e){const l=d("RouteLink");return c(),t("div",null,[o("p",null,[e[1]||(e[1]=i("Всегда актуальная ссылка на ")),r(l,{to:"/"},{default:s(()=>e[0]||(e[0]=[i("резюме")])),_:1}),e[2]||(e[2]=i("."))]),e[3]||(e[3]=n('<h2 id="общие-сведения" tabindex="-1"><a class="header-anchor" href="#общие-сведения"><span>Общие сведения</span></a></h2><p>Меня зовут Дмитрий Плешевский.</p><p>Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий разработчик програмного обеспечения, архитектор, руководитель команды, а так же ментор.</p><h2 id="умения" tabindex="-1"><a class="header-anchor" href="#умения"><span>Умения</span></a></h2><h4 id="языки-программирования" tabindex="-1"><a class="header-anchor" href="#языки-программирования"><span>Языки программирования:</span></a></h4><ul><li>TypeScript (предпочитаю, твёрдый 9-летний опыт)</li><li>SQL (предпочитаю, твёрдый 8-летний опыт)</li><li>Rust (предпочитаю, 5-летний опыт)</li><li>Python (твёрдый 9-летний опыт)</li><li>Haskell</li><li>Bash (8-летний опыт)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="хранилища-данных" tabindex="-1"><a class="header-anchor" href="#хранилища-данных"><span>Хранилища данных:</span></a></h4><ul><li>PostgreSQL (предпочитаю, твёрдый 8-летний опыт)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (предпочитаю, твердый 5-летний опыт)</li></ul><hr><p>Я так же имею большой опыт в создании следующих типов приложений:</p><ul><li>Традиционные (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Динамическое (SPA)</li><li>Гибридное (SSR + SPA)</li><li>Консольные</li><li>Кроссплатформенные</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>async-graphql</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>shaku</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>bb8</code> + <code>postgres-types</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>diesel</code> (2-летний опыт)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (твёрдый 5-летний опыт)</li><li><code>Express</code> (твёрдый 9-летний опыт)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (твёрдый 5-летний опыт)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (твёрдый 8-летний опыт)</li><li><code>VueJS</code> (предпочитаю, твёрдый 4-летний опыт)</li><li><code>Cypress</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>Sass</code> (предпочитаю, твёрдый 8-летний опыт)</li><li><code>Less</code> (слабый 4-летний опыт)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>Docker Swarm</code> (твёрдый 6-летний опыт)</li><li><code>Kubernetes</code> (слабый 5-летний опыт)</li><li><code>Woodpecker CI</code> (твёрдый 4-летний опыт)</li><li><code>Drone CI</code> (твёрдый 3-летний опыт)</li><li><code>Gitlab CI</code> (твёрдый 7-летний опыт)</li><li><code>GitHub Actions</code> (4-летний опыт)</li></ul><h2 id="интересы" tabindex="-1"><a class="header-anchor" href="#интересы"><span>Интересы</span></a></h2><p>Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.</p><p>Помимо программирования я люблю готовить и проводить время со своей любимой семьей!</p><h2 id="контакты" tabindex="-1"><a class="header-anchor" href="#контакты"><span>Контакты</span></a></h2><p>Simplex (Предпочтительно): <a href="https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="ссылки" tabindex="-1"><a class="header-anchor" href="#ссылки"><span>Ссылки</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Приостановлен)</a></li></ul>',30))])}const k=a(p,[["render",h],["__file","index.html.vue"]]),y=JSON.parse('{"path":"/","title":"Резюме","lang":"ru-RU","frontmatter":{"home":true,"title":"Резюме","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Резюме"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-09-05T22:11:51.000Z"}],["meta",{"property":"article:modified_time","content":"2024-09-05T22:11:51.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Резюме\\"}"]]},"headers":[{"level":2,"title":"Общие сведения","slug":"общие-сведения","link":"#общие-сведения","children":[]},{"level":2,"title":"Умения","slug":"умения","link":"#умения","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Интересы","slug":"интересы","link":"#интересы","children":[]},{"level":2,"title":"Контакты","slug":"контакты","link":"#контакты","children":[]},{"level":2,"title":"Ссылки","slug":"ссылки","link":"#ссылки","children":[]}],"git":{"updatedTime":1725574311000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":13}]},"filePathRelative":"index.md"}');export{k as comp,y as data}; diff --git a/assets/index.html-gQkWNf7r.js b/assets/index.html-KbtCZdft.js similarity index 99% rename from assets/index.html-gQkWNf7r.js rename to assets/index.html-KbtCZdft.js index 34ad6ba..5354d3e 100644 --- a/assets/index.html-gQkWNf7r.js +++ b/assets/index.html-KbtCZdft.js @@ -1 +1 @@ -import{_ as a,c as r,a as s,b as i,d as o,w as t,e as n,r as d,o as p}from"./app-B-ZDtWHa.js";const c={};function h(m,e){const l=d("RouteLink");return p(),r("div",null,[s("p",null,[e[1]||(e[1]=i("Always up-to-date link to ")),o(l,{to:"/eng/"},{default:t(()=>e[0]||(e[0]=[i("resume")])),_:1}),e[2]||(e[2]=i("."))]),e[3]||(e[3]=n('<h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>My name is Dmitriy Pleshevskiy.</p><p>I'm an open source software enthusiast, a lead software developer, architect, team leader and also mentor.</p><h2 id="skills" tabindex="-1"><a class="header-anchor" href="#skills"><span>Skills</span></a></h2><h4 id="programming-languages" tabindex="-1"><a class="header-anchor" href="#programming-languages"><span>Programming Languages:</span></a></h4><ul><li>TypeScript (prefer, solid 9-year exp)</li><li>SQL (prefer, solid 8-year exp)</li><li>Rust (prefer, solid 5-year exp)</li><li>Python (solid 9-year exp)</li><li>Haskell</li><li>Bash (8-year exp)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="repositories" tabindex="-1"><a class="header-anchor" href="#repositories"><span>Repositories:</span></a></h4><ul><li>PostgreSQL (prefer, solid 8-year exp)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (prefer, solid 5-year exp)</li></ul><hr><p>I also have extensive experience in creating the following applications:</p><ul><li>Traditional (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Dynamic (SPA)</li><li>Hybrid (SSR + SPA)</li><li>Console</li><li>Cross-platform</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (prefer, solid 2-year exp)</li><li><code>async-graphql</code> (prefer, solid 2-year exp)</li><li><code>shaku</code> (prefer, solid 2-year exp)</li><li><code>bb8</code> + <code>postgres-types</code> (prefer, solid 5-year exp)</li><li><code>diesel</code> (2-year exp)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (solid 5-year exp)</li><li><code>Express</code> (solid 9-year exp)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (solid 5-year exp)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (solid 8-year exp)</li><li><code>VueJS</code> (prefer, solid 3-year exp)</li><li><code>Cypress</code> (prefer, solid 3-year exp)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (prefer, solid 5-year exp)</li><li><code>Sass</code> (prefer, solid 8-year exp)</li><li><code>Less</code> (weak 4-year exp)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (prefer, solid 3-year exp)</li><li><code>Docker Swarm</code> (solid 6-year exp)</li><li><code>Kubernetes</code> (weak 5-year exp)</li><li><code>Woodpecker CI</code> (prefer, solid 4-year exp)</li><li><code>Drone CI</code> (solid 3-year exp)</li><li><code>Gitlab CI</code> (solid 7-year exp)</li><li><code>GitHub Actions</code> (4-year exp)</li></ul><h2 id="interests" tabindex="-1"><a class="header-anchor" href="#interests"><span>Interests</span></a></h2><p>Open-source projects are my passion! I develop, maintain and improve projects in my spare time.</p><p>Besides programming, I love to cook and spend time with my beloved family!</p><h2 id="contacts" tabindex="-1"><a class="header-anchor" href="#contacts"><span>Contacts</span></a></h2><p>Simplex (Prefer): <a href="https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="links" tabindex="-1"><a class="header-anchor" href="#links"><span>Links</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Suspended)</a></li></ul>',30))])}const y=a(c,[["render",h],["__file","index.html.vue"]]),x=JSON.parse('{"path":"/eng/","title":"Resume","lang":"en-US","frontmatter":{"home":true,"title":"Resume","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Resume"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-09-05T22:11:51.000Z"}],["meta",{"property":"article:modified_time","content":"2024-09-05T22:11:51.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Resume\\"}"]]},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Skills","slug":"skills","link":"#skills","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Interests","slug":"interests","link":"#interests","children":[]},{"level":2,"title":"Contacts","slug":"contacts","link":"#contacts","children":[]},{"level":2,"title":"Links","slug":"links","link":"#links","children":[]}],"git":{"updatedTime":1725574311000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":13}]},"filePathRelative":"eng/index.md"}');export{y as comp,x as data}; +import{_ as a,c as r,a as s,b as i,d as o,w as t,e as n,r as d,o as p}from"./app-Dje5btuz.js";const c={};function h(m,e){const l=d("RouteLink");return p(),r("div",null,[s("p",null,[e[1]||(e[1]=i("Always up-to-date link to ")),o(l,{to:"/eng/"},{default:t(()=>e[0]||(e[0]=[i("resume")])),_:1}),e[2]||(e[2]=i("."))]),e[3]||(e[3]=n('<h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>My name is Dmitriy Pleshevskiy.</p><p>I'm an open source software enthusiast, a lead software developer, architect, team leader and also mentor.</p><h2 id="skills" tabindex="-1"><a class="header-anchor" href="#skills"><span>Skills</span></a></h2><h4 id="programming-languages" tabindex="-1"><a class="header-anchor" href="#programming-languages"><span>Programming Languages:</span></a></h4><ul><li>TypeScript (prefer, solid 9-year exp)</li><li>SQL (prefer, solid 8-year exp)</li><li>Rust (prefer, solid 5-year exp)</li><li>Python (solid 9-year exp)</li><li>Haskell</li><li>Bash (8-year exp)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="repositories" tabindex="-1"><a class="header-anchor" href="#repositories"><span>Repositories:</span></a></h4><ul><li>PostgreSQL (prefer, solid 8-year exp)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (prefer, solid 5-year exp)</li></ul><hr><p>I also have extensive experience in creating the following applications:</p><ul><li>Traditional (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Dynamic (SPA)</li><li>Hybrid (SSR + SPA)</li><li>Console</li><li>Cross-platform</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (prefer, solid 2-year exp)</li><li><code>async-graphql</code> (prefer, solid 2-year exp)</li><li><code>shaku</code> (prefer, solid 2-year exp)</li><li><code>bb8</code> + <code>postgres-types</code> (prefer, solid 5-year exp)</li><li><code>diesel</code> (2-year exp)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (solid 5-year exp)</li><li><code>Express</code> (solid 9-year exp)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (solid 5-year exp)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (solid 8-year exp)</li><li><code>VueJS</code> (prefer, solid 3-year exp)</li><li><code>Cypress</code> (prefer, solid 3-year exp)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (prefer, solid 5-year exp)</li><li><code>Sass</code> (prefer, solid 8-year exp)</li><li><code>Less</code> (weak 4-year exp)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (prefer, solid 3-year exp)</li><li><code>Docker Swarm</code> (solid 6-year exp)</li><li><code>Kubernetes</code> (weak 5-year exp)</li><li><code>Woodpecker CI</code> (prefer, solid 4-year exp)</li><li><code>Drone CI</code> (solid 3-year exp)</li><li><code>Gitlab CI</code> (solid 7-year exp)</li><li><code>GitHub Actions</code> (4-year exp)</li></ul><h2 id="interests" tabindex="-1"><a class="header-anchor" href="#interests"><span>Interests</span></a></h2><p>Open-source projects are my passion! I develop, maintain and improve projects in my spare time.</p><p>Besides programming, I love to cook and spend time with my beloved family!</p><h2 id="contacts" tabindex="-1"><a class="header-anchor" href="#contacts"><span>Contacts</span></a></h2><p>Simplex (Prefer): <a href="https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="links" tabindex="-1"><a class="header-anchor" href="#links"><span>Links</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Suspended)</a></li></ul>',30))])}const y=a(c,[["render",h],["__file","index.html.vue"]]),x=JSON.parse('{"path":"/eng/","title":"Resume","lang":"en-US","frontmatter":{"home":true,"title":"Resume","heroText":null,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Resume"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-09-05T22:11:51.000Z"}],["meta",{"property":"article:modified_time","content":"2024-09-05T22:11:51.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Resume\\"}"]]},"headers":[{"level":2,"title":"Overview","slug":"overview","link":"#overview","children":[]},{"level":2,"title":"Skills","slug":"skills","link":"#skills","children":[]},{"level":2,"title":"Stack","slug":"stack","link":"#stack","children":[]},{"level":2,"title":"Interests","slug":"interests","link":"#interests","children":[]},{"level":2,"title":"Contacts","slug":"contacts","link":"#contacts","children":[]},{"level":2,"title":"Links","slug":"links","link":"#links","children":[]}],"git":{"updatedTime":1725574311000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":8},{"name":"janabhumi","username":"janabhumi","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":13}]},"filePathRelative":"eng/index.md"}');export{y as comp,x as data}; diff --git a/assets/style-CAeyyXIN.css b/assets/style-ZWWWXdHC.css similarity index 99% rename from assets/style-CAeyyXIN.css rename to assets/style-ZWWWXdHC.css index 665732c..d54039f 100644 --- a/assets/style-CAeyyXIN.css +++ b/assets/style-ZWWWXdHC.css @@ -1 +1 @@ -.vp-back-to-top-button{position:fixed!important;inset-inline-end:1rem;bottom:4rem;z-index:100;width:48px;height:48px;padding:12px;border-width:0;border-radius:50%;background:var(--back-to-top-c-bg);color:var(--back-to-top-c-accent-bg);box-shadow:2px 2px 10px 4px var(--back-to-top-c-shadow);cursor:pointer}@media (max-width: 959px){.vp-back-to-top-button{transform:scale(.8);transform-origin:100% 100%}}@media print{.vp-back-to-top-button{display:none}}.vp-back-to-top-button:hover{color:var(--back-to-top-c-accent-hover)}.vp-back-to-top-button .back-to-top-icon{overflow:hidden;width:24px;height:24px;margin:0 auto;background:var(--back-to-top-c-icon);-webkit-mask-image:var(--back-to-top-icon);mask-image:var(--back-to-top-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:cover;mask-size:cover}.vp-scroll-progress{position:absolute;right:-2px;bottom:-2px;width:52px;height:52px}.vp-scroll-progress svg{width:100%;height:100%}.vp-scroll-progress circle{opacity:.9;transform:rotate(-90deg);transform-origin:50% 50%}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--back-to-top-z-index: 5;--back-to-top-icon: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cpath%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='4'%20d='M24.008%2014.1V42M12%2026l12-12l12%2012M12%206h24'%20/%3e%3c/svg%3e");--back-to-top-c-bg: var(--vp-c-bg);--back-to-top-c-accent-bg: var(--vp-c-accent-bg);--back-to-top-c-accent-hover: var(--vp-c-accent-hover);--back-to-top-c-shadow: var(--vp-c-shadow);--back-to-top-c-icon: currentcolor}.vp-copy-code-button{position:absolute;top:.5em;right:.5em;z-index:5;width:2.5rem;height:2.5rem;padding:0;border-width:0;border-radius:.5rem;background:#0000;outline:none;opacity:0;cursor:pointer;transition:opacity .4s}@media print{.vp-copy-code-button{display:none}}.vp-copy-code-button:before{content:"";display:inline-block;width:1.25rem;height:1.25rem;padding:.625rem;background:currentcolor;color:var(--copy-code-c-text);font-size:1.25rem;-webkit-mask-image:var(--code-copy-icon);mask-image:var(--code-copy-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.vp-copy-code-button:focus,.vp-copy-code-button.copied{opacity:1}.vp-copy-code-button:hover,.vp-copy-code-button.copied{background:var(--copy-code-c-hover)}.vp-copy-code-button.copied:before{-webkit-mask-image:var(--code-copied-icon);mask-image:var(--code-copied-icon)}.vp-copy-code-button.copied:after{content:attr(data-copied);position:absolute;top:0;right:calc(100% + .25rem);display:block;height:1.25rem;padding:.625rem;border-radius:.5rem;background:var(--copy-code-c-hover);color:var(--copy-code-c-text);font-weight:500;line-height:1.25rem;white-space:nowrap}.no-copy-code .vp-copy-code-button{display:none}body:not(.no-copy-code) div[class*=language-]:hover:before{display:none}body:not(.no-copy-code) div[class*=language-]:hover .vp-copy-code-button{opacity:1}:root{--code-copy-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23808080' stroke-width='2'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2' /%3e%3c/svg%3e");--code-copied-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23808080' stroke-width='2'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4' /%3e%3c/svg%3e");--copy-code-c-text: var(--code-c-line-number);--copy-code-c-hover: var(--code-c-highlight-bg)}.hint-container{position:relative;background:var(--hint-c-soft);transition:background var(--vp-t-color),color var(--vp-t-color)}@media print{.hint-container{page-break-inside:avoid}}.hint-container>.hint-container-title{color:var(--hint-c-title)}.hint-container :not(pre)>code{background:var(--hint-c-soft)}.hint-container .hint-container-title{position:relative;margin-block:.75em;font-weight:600;line-height:1.25}.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin-block:.75rem;padding:.25em 1em;border-radius:.5em;color:inherit;font-size:var(--hint-font-size)}@media print{.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{border-inline-start-width:.25em;border-inline-start-style:solid}}.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:1.75em}@media print{.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:0}}.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{content:" ";position:absolute;inset-inline-start:0;top:calc(50% - .6125em);width:1.25em;height:1.25em;font-size:1.25em}@media print{.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{display:none}}.hint-container.important p,.hint-container.info p,.hint-container.note p,.hint-container.tip p,.hint-container.warning p,.hint-container.caution p{line-height:1.5}.hint-container.important a,.hint-container.info a,.hint-container.note a,.hint-container.tip a,.hint-container.warning a,.hint-container.caution a{color:var(--vp-c-accent)}.hint-container.important{--hint-c-accent: var(--important-c-accent);--hint-c-title: var(--important-c-text);--hint-c-soft: var(--important-c-soft)}.hint-container.important>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.info{--hint-c-accent: var(--info-c-accent);--hint-c-title: var(--info-c-text);--hint-c-soft: var(--info-c-soft)}.hint-container.info>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.note{--hint-c-accent: var(--note-c-accent);--hint-c-title: var(--note-c-text);--hint-c-soft: var(--note-c-soft)}.hint-container.note>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.tip{--hint-c-accent: var(--tip-c-accent);--hint-c-title: var(--tip-c-text);--hint-c-soft: var(--tip-c-soft)}.hint-container.tip>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.warning{--hint-c-accent: var(--warning-c-accent);--hint-c-title: var(--warning-c-text);--hint-c-soft: var(--warning-c-soft)}.hint-container.warning>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.caution{--hint-c-accent: var(--caution-c-accent);--hint-c-title: var(--caution-c-text);--hint-c-soft: var(--caution-c-soft)}.hint-container.caution>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.details{position:relative;display:block;margin-block:.75rem;padding:1.25rem 1rem;border-radius:.5rem;background:var(--detail-c-bg);transition:background var(--vp-t-transform),color var(--vp-t-transform)}.hint-container.details h4{margin-top:0}.hint-container.details figure:last-child,.hint-container.details p:last-child{margin-bottom:0;padding-bottom:0}.hint-container.details a{color:var(--vp-c-accent)}.hint-container.details :not(pre)>code{background:var(--detail-c-soft)}.hint-container.details summary{position:relative;margin:-1rem;padding-block:1em;padding-inline:3em 1.5em;list-style:none;font-size:var(--hint-font-size);cursor:pointer}.hint-container.details summary::-webkit-details-marker{display:none}.hint-container.details summary::marker{color:#0000;font-size:0}.hint-container.details summary:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;content:" ";position:absolute;inset-inline-start:.8em;top:calc(50% - .5em);width:1em;height:1em;font-size:1.25rem;line-height:normal;transition:color,var(--vp-t-color),transform var(--vp-t-transform);transform:rotate(90deg)}.hint-container.details[open]>summary{margin-bottom:.5em}.hint-container.details[open]>summary:before{transform:rotate(180deg)}:root{--hint-font-size: .92rem;--important-c-accent: var(--vp-c-purple-bg);--important-c-text: var(--vp-c-purple-text);--important-c-soft: var(--vp-c-purple-soft);--info-c-accent: var(--vp-c-blue-bg);--info-c-text: var(--vp-c-blue-text);--info-c-soft: var(--vp-c-blue-soft);--note-c-accent: var(--vp-c-grey-bg);--note-c-text: var(--vp-c-grey-text);--note-c-soft: var(--vp-c-grey-soft);--tip-c-accent: var(--vp-c-green-bg);--tip-c-text: var(--vp-c-green-text);--tip-c-soft: var(--vp-c-green-soft);--warning-c-accent: var(--vp-c-yellow-bg);--warning-c-text: var(--vp-c-yellow-text);--warning-c-soft: var(--vp-c-yellow-soft);--caution-c-accent: var(--vp-c-red-bg);--caution-c-text: var(--vp-c-red-text);--caution-c-soft: var(--vp-c-red-soft);--detail-c-bg: var(--vp-c-control);--detail-c-icon: var(--vp-c-border);--detail-c-soft: var(--vp-c-grey-soft)}:root{--nprogress-c: var(--vp-c-accent);--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{position:fixed;top:0;left:0;z-index:var(--nprogress-z-index);width:100%;height:2px;background:var(--nprogress-c)}:root{--code-padding-x: 1.25rem;--code-padding-y: 1rem;--code-border-radius: 6px;--code-line-height: 1.6;--code-font-size: 14px;--code-font-family: consolas, monaco, "Andale Mono", "Ubuntu Mono", monospace}div[class*=language-]{position:relative;border-radius:var(--code-border-radius);background-color:var(--code-c-bg)}div[class*=language-]:before{content:attr(data-title);position:absolute;top:.8em;right:1em;z-index:3;color:var(--code-c-text);font-size:.75rem}div[class*=language-] pre{position:relative;z-index:1;overflow-x:auto;margin:0;border-radius:var(--code-border-radius);font-size:var(--code-font-size);font-family:var(--code-font-family);line-height:var(--code-line-height)}div[class*=language-] pre code{display:block;box-sizing:border-box;width:-moz-fit-content;width:fit-content;min-width:100%;padding:var(--code-padding-y) var(--code-padding-x);background-color:#0000!important;color:var(--code-c-text);overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}:root{--code-c-text: #f8f8f2;--code-c-bg: #2e3440;--code-c-highlight-bg: rgb(51.6454545455, 60.5484848485, 78.3545454545);--code-c-line-number: rgba(248, 248, 242, .67)}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#636f88}.token.punctuation{color:#81a1c1}.namespace{opacity:.7}.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted{color:#81a1c1}.token.number{color:#b48ead}.token.boolean{color:#81a1c1}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#a3be8c}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:#81a1c1}.token.atrule,.token.attr-value,.token.function,.token.class-name{color:#88c0d0}.token.keyword{color:#81a1c1}.token.regex,.token.important{color:#ebcb8b}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}:root{--code-line-number-width: 3rem}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-line-number-width);height:100%;border-right:1px solid var(--code-c-highlight-bg, var(--code-c-text));border-radius:var(--code-border-radius) 0 0 var(--code-border-radius);transition:border var(--vp-t-color)}div[class*=language-].line-numbers-mode pre{vertical-align:middle;margin-left:var(--code-line-number-width)}div[class*=language-].line-numbers-mode code{padding-left:1rem}div[class*=language-].line-numbers-mode .line-numbers{counter-reset:line-number;position:absolute;top:0;width:var(--code-line-number-width);padding-top:var(--code-padding-y);color:var(--code-c-line-number, var(--code-c-text));font-size:var(--code-font-size);line-height:var(--code-line-height);text-align:center}div[class*=language-].line-numbers-mode .line-number{position:relative;z-index:3;font-family:var(--code-font-family);-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-number:before{content:counter(line-number);counter-increment:line-number}div[class*=language-] .line.highlighted{display:inline-block;width:100%;margin:0 calc(-1*var(--code-padding-x));padding:0 var(--code-padding-x);background-color:var(--code-c-highlight-bg)}@property --vp-collapsed-lines-bg{inherits:false;initial-value:#fff;syntax:"<color>"}@keyframes code-collapsed-lines{0%{opacity:.3;transform:translateY(-2px) rotate(var(--vp-collapsed-lines-rotate))}to{opacity:1;transform:translateY(2px) rotate(var(--vp-collapsed-lines-rotate))}}div[class*=language-].has-collapsed-lines .collapsed-lines{--vp-collapsed-lines-bg: var(--code-c-bg);--vp-collapsed-lines-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='m18 12l-6 6l-6-6m12-6l-6 6l-6-6'/%3E%3C/svg%3E");--vp-collapsed-lines-rotate: 0deg;position:absolute;right:0;bottom:0;left:0;z-index:4;display:flex;align-items:center;justify-content:center;height:28px;background:linear-gradient(to bottom,transparent 0%,var(--vp-collapsed-lines-bg) 55%,var(--vp-collapsed-lines-bg) 100%);cursor:pointer;transition:--vp-collapsed-lines-bg var(--vp-t-color)}div[class*=language-].has-collapsed-lines .collapsed-lines:hover{--vp-collapsed-lines-bg: var(--code-c-highlight-bg)}div[class*=language-].has-collapsed-lines .collapsed-lines:before{content:"";display:inline-block;width:24px;height:24px;background-color:var(--code-c-text);-webkit-mask-image:var(--vp-collapsed-lines-icon);mask-image:var(--vp-collapsed-lines-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:20px;mask-size:20px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;pointer-events:none;animation:code-collapsed-lines 1.2s infinite alternate-reverse ease-in-out}div[class*=language-].has-collapsed-lines[data-highlighter=shiki] .collapsed-lines{--vp-collapsed-lines-bg: var(--code-c-bg, var(--shiki-light-bg))}[data-theme=dark] div[class*=language-].has-collapsed-lines[data-highlighter=shiki] .collapsed-lines{--vp-collapsed-lines-bg: var(--code-c-bg, var(--shiki-dark-bg))}div[class*=language-].has-collapsed-lines.collapsed{overflow-y:hidden;height:calc(var(--vp-collapsed-lines)*var(--code-line-height)*var(--code-font-size) + var(--code-padding-y) + 28px)}div[class*=language-].has-collapsed-lines:not(.collapsed) code{padding-bottom:max(var(--code-padding-y),28px)}div[class*=language-].has-collapsed-lines:not(.collapsed) .collapsed-lines{--vp-collapsed-lines-rotate: 180deg}.vp-code-tabs-nav{overflow-x:auto;margin:.75rem 0 -.75rem;padding:0;border-radius:6px 6px 0 0;background:var(--code-tabs-c-bg);list-style:none;white-space:nowrap;transition:background var(--vp-t-color)}@media print{.vp-code-tabs-nav{display:none}}@media (max-width: 419px){.vp-code-tabs-nav{margin-inline:-1.5rem;border-radius:0}}.vp-code-tab-nav{position:relative;min-width:3rem;margin:0;padding:6px 12px;border-width:0;border-radius:6px 6px 0 0;background:#0000;color:var(--code-tabs-c-text);font-weight:600;font-size:.875em;line-height:1.4;cursor:pointer;transition:background var(--vp-t-color),color var(--vp-t-color)}.vp-code-tab-nav:hover{background:var(--code-tabs-c-hover)}.vp-code-tab-nav:before,.vp-code-tab-nav:after{content:" ";position:absolute;bottom:0;z-index:1;width:6px;height:6px}.vp-code-tab-nav:before{right:100%}.vp-code-tab-nav:after{left:100%}.vp-code-tab-nav.active{background:var(--code-c-bg, var(--vp-c-bg-alt))}.vp-code-tab-nav.active:before{background:radial-gradient(12px at left top,transparent 50%,var(--code-c-bg) 50%)}.vp-code-tab-nav.active:after{background:radial-gradient(12px at right top,transparent 50%,var(--code-c-bg) 50%)}.vp-code-tab-nav:first-child:before{display:none}[dir=rtl] .vp-code-tab-nav:first-child:before{display:block}[dir=rtl] .vp-code-tab-nav:first-child:after{display:none}.vp-code-tab{display:none}@media print{.vp-code-tab{display:block}}.vp-code-tab.active{display:block}.vp-code-tab div[class*=language-]{border-top-left-radius:0;border-top-right-radius:0}@media (max-width: 419px){.vp-code-tab div[class*=language-]{margin:.75rem -1.5rem;border-radius:0}}.vp-code-tab div[class*=language-].line-numbers-mode:after{border-top-left-radius:0}.vp-code-tab div[class*=language-] pre{border-top-left-radius:0;border-top-right-radius:0}@media (max-width: 419px){.vp-code-tab div[class*=language-] pre{border-radius:0}}@media print{.vp-code-tab div[class*=language-] code{white-space:pre-wrap}}.vp-code-tab-title{display:none;font-weight:500}@media print{.vp-code-tab-title{display:block}}.vp-tabs{margin:1.5rem 0;border:1px solid var(--vp-c-border);border-radius:8px}@media (max-width: 419px){[vp-content]>.vp-tabs{margin-inline:-1.5rem;border:none;border-bottom:1px solid var(--vp-c-border);border-radius:0}}.vp-tabs-nav{overflow-x:auto;margin:0;padding:0;border-radius:.5rem .5rem 0 0;background:var(--tab-c-bg-nav);list-style:none;white-space:nowrap;transition:background var(--vp-t-color)}@media print{.vp-tabs-nav{display:none}}@media (max-width: 419px){.vp-tabs-nav{border-radius:0}}.vp-tab-nav{position:relative;min-width:4rem;margin:0;padding:.5em 1em;border:none;border-radius:.5rem .5rem 0 0;background:#0000;color:var(--tab-c-nav);font-weight:600;font-size:.875em;line-height:1.75;cursor:pointer;transition:background var(--vp-t-color),color var(--vp-t-color)}.vp-tab-nav:hover{background:var(--tab-c-bg-nav-hover)}.vp-tab-nav:before,.vp-tab-nav:after{content:" ";position:absolute;bottom:0;z-index:1;width:8px;height:8px}.vp-tab-nav:before{right:100%}.vp-tab-nav:after{left:100%}.vp-tab-nav.active{background:var(--tab-c-bg)}.vp-tab-nav.active:before{background:radial-gradient(16px at left top,transparent 50%,var(--tab-c-bg) 50%)}.vp-tab-nav.active:after{background:radial-gradient(16px at right top,transparent 50%,var(--tab-c-bg) 50%)}.vp-tab-nav:first-child:before{display:none}.vp-tab{display:none;padding:1rem .75rem;border-radius:0 0 .5rem .5rem;background:var(--tab-c-bg);transition:background var(--vp-t-color)}@media print{.vp-tab{display:block;padding:.5rem}}.vp-tab.active{display:block}.vp-tab:nth-child(n+2) .vp-tab-title{border-top:none}.vp-tab-title{display:none;padding:.25rem 0;border-top:1px solid var(--vp-c-border);font-weight:500}@media print{.vp-tab-title{display:block}}:root{--code-tabs-c-text: var(--code-c-text);--code-tabs-c-bg: var(--code-c-highlight-bg);--code-tabs-c-hover: var(--code-c-bg, var(--vp-c-bg-alt));--tab-c-bg: var(--vp-c-bg);--tab-c-nav: var(--vp-c-text);--tab-c-bg-nav: var(--vp-c-grey-bg);--tab-c-bg-nav-hover: var(--vp-c-control-hover)}.vp-badge{display:inline-block;vertical-align:top;height:18px;padding:0 6px;border-radius:3px;background:var(--vp-c-accent-soft);color:var(--vp-c-accent);font-size:14px;line-height:18px;transition:background var(--vp-t-color),color var(--vp-t-color)}.vp-badge+.vp-badge{margin-inline-start:5px}.vp-badge.tip{background:var(--badge-c-tip-bg);color:var(--badge-c-tip-text)}.vp-badge.warning{background:var(--badge-c-warning-bg);color:var(--badge-c-warning-text)}.vp-badge.danger{background:var(--badge-c-danger-bg);color:var(--badge-c-danger-text)}.vp-badge.important{background:var(--badge-c-important-bg);color:var(--badge-c-important-text)}.vp-badge.info{background:var(--badge-c-info-bg);color:var(--badge-c-info-text)}.vp-badge.note{background:var(--badge-c-note-bg);color:var(--badge-c-note-text)}.vp-features{display:flex;flex-wrap:wrap;place-content:stretch space-between;align-items:flex-start;margin-top:2.5rem;padding:1.2rem 0;border-top:1px solid var(--vp-c-gutter);transition:border-color var(--vp-t-color)}@media (max-width: 719px){.vp-features{flex-direction:column}}.vp-feature{flex-grow:1;flex-basis:30%;max-width:30%}@media (max-width: 719px){.vp-feature{max-width:100%;padding:0 2.5rem}}.vp-feature h2{padding-bottom:0;border-bottom:none;font-weight:500;font-size:1.4rem}@media (max-width: 419px){.vp-feature h2{font-size:1.25rem}}.vp-feature p{color:var(--vp-c-text-mute)}.vp-footer{padding:2.5rem;border-top:1px solid var(--vp-c-border);color:var(--vp-c-text-mute);text-align:center;transition:border-color var(--vp-t-color)}.vp-hero{text-align:center}.vp-hero-image{display:block;max-width:100%;max-height:280px;margin:3rem auto 1.5rem}@media (max-width: 419px){.vp-hero-image{max-height:210px;margin:2rem auto 1.2rem}}#main-title{font-size:3rem}@media (max-width: 419px){#main-title{font-size:2rem}}#main-title,.vp-hero-description,.vp-hero-actions{margin:1.8rem auto}@media (max-width: 419px){#main-title,.vp-hero-description,.vp-hero-actions{margin:1.2rem auto}}.vp-hero-actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.vp-hero-description{max-width:35rem;color:var(--vp-c-text-mute);font-size:1.6rem;line-height:1.3}@media (max-width: 419px){.vp-hero-description{font-size:1.2rem}}.vp-hero-action-button{display:inline-block;box-sizing:border-box;padding:.8rem 1.6rem;border:2px solid var(--vp-c-accent-bg);border-radius:4px;background-color:var(--vp-c-bg);color:var(--vp-c-accent);font-size:1.2rem;transition:background-color border-color color var(--vp-t-color)}@media (max-width: 419px){.vp-hero-action-button{padding:.6rem 1.2rem;font-size:1rem}}.vp-hero-action-button:hover{color:var(--vp-c-accent-text)}.vp-hero-action-button.primary{background-color:var(--vp-c-accent-bg);color:var(--vp-c-accent-text)}.vp-hero-action-button.primary:hover{border-color:var(--vp-c-accent-hover);background-color:var(--vp-c-accent-hover)}.vp-home{display:block;max-width:var(--homepage-width);margin:0 auto;padding:var(--navbar-height) 2rem 0}@media (max-width: 419px){.vp-home{padding-right:1.5rem;padding-left:1.5rem}}.vp-home [vp-content]{margin:0;padding:0}.vp-site-logo{vertical-align:top;height:var(--navbar-line-height);margin-right:var(--navbar-padding-v)}.vp-site-name{position:relative;color:var(--vp-c-text);font-weight:600;font-size:1.3rem}@media screen and (max-width: 719px){.vp-site-name{display:block;overflow:hidden;width:calc(100vw - 11rem);text-overflow:ellipsis;white-space:nowrap}}.vp-dropdown-enter-from,.vp-dropdown-leave-to{height:0!important}.vp-navbar-dropdown-wrapper{cursor:pointer}.vp-navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.vp-navbar-dropdown-wrapper:not(.mobile):hover .vp-navbar-dropdown,.vp-navbar-dropdown-wrapper:not(.mobile).open .vp-navbar-dropdown{display:block!important}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown{overflow:hidden;transition:height .1s ease-out;padding-top:.5rem}.vp-navbar-dropdown-wrapper:not(.mobile) .vp-navbar-dropdown{position:absolute;top:100%;right:0;display:none;overflow-y:auto;box-sizing:border-box;height:auto!important;max-height:calc(100vh - 2.7rem);margin:0;padding:.6rem 0;border:1px solid var(--vp-c-gutter);border-radius:.5rem;background-color:var(--vp-c-bg-elv);text-align:left;white-space:nowrap}.vp-navbar-dropdown-title{display:block;padding:inherit;border:none;background:transparent;color:var(--vp-c-text);font-weight:500;font-size:.9rem;font-family:inherit;line-height:1.4rem;cursor:inherit}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-title{display:none}.vp-navbar-dropdown-title:hover{border-color:transparent}.vp-navbar-dropdown-title-mobile{display:none;padding:inherit;border:none;background:transparent;color:var(--vp-c-text);font-weight:600;font-size:inherit;font-family:inherit;line-height:1.4rem;cursor:inherit}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-title-mobile{display:block}.vp-navbar-dropdown-title-mobile:hover{color:var(--vp-c-accent)}.vp-navbar-dropdown-item{color:inherit;line-height:1.7rem}.vp-navbar-dropdown-item .auto-link{position:relative;display:block;margin-bottom:0;padding:0 1.25rem;border-bottom:none;font-weight:400;line-height:1.7rem}.vp-navbar-dropdown-item .auto-link:hover,.vp-navbar-dropdown-item .auto-link.auto-link-active{color:var(--vp-c-accent)}.vp-navbar-dropdown-item .auto-link.auto-link-active:after{content:"";position:absolute;top:calc(50% - 2px);left:9px;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:5px solid var(--vp-c-accent)}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-item>a{font-size:15px;line-height:2rem}.vp-navbar-dropdown-subtitle{margin:.45rem 0 0;padding:1rem 0 .45rem;border-top:1px solid var(--vp-c-gutter);font-size:.9rem}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-subtitle{margin-top:0;padding-top:0;padding-bottom:0;border-top:0;font-size:15px;line-height:2rem}.vp-navbar-dropdown-item:first-child .vp-navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.vp-navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.vp-navbar-dropdown-subtitle>.auto-link{font-weight:inherit}.vp-navbar-dropdown-subtitle>.auto-link.auto-link-active:after{display:none}.vp-navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.vp-navbar-dropdown-subitem{font-size:.9em}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-subitem{padding-left:1rem;font-size:14px}.vp-navbar-items{display:inline-block}@media print{.vp-navbar-items{display:none}}.vp-navbar-items .auto-link{color:inherit;line-height:1.4rem}.vp-navbar-items .auto-link:hover,.vp-navbar-items .auto-link.auto-link-active{color:var(--vp-c-text)}.vp-navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}@media (max-width: 719px){.vp-navbar-item{margin-left:0}}.vp-navbar-item:first-child{margin-left:0}.vp-navbar-item .auto-link:hover,.vp-navbar-item .auto-link.auto-link-active{color:var(--vp-c-accent)}.vp-navbar-item>.auto-link{display:inline-block}.vp-navbar-item>.auto-link:hover,.vp-navbar-item>.auto-link.auto-link-active{margin-bottom:-2px;border-bottom:2px solid var(--vp-c-accent)}@media (max-width: 719px){.vp-navbar-item>.auto-link:hover,.vp-navbar-item>.auto-link.auto-link-active{margin-bottom:0;border-bottom:none}}.vp-toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--vp-c-text);opacity:.8;cursor:pointer}@media print{.vp-toggle-color-mode-button{display:none}}.vp-toggle-color-mode-button:hover{opacity:1}.vp-toggle-color-mode-button .light-icon,.vp-toggle-color-mode-button .dark-icon{width:1.25rem;height:1.25rem}.vp-toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}@media screen and (max-width: 719px){.vp-toggle-sidebar-button{display:block}}.vp-toggle-sidebar-button .icon{display:flex;flex-direction:column;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;cursor:inherit}.vp-toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--vp-c-text);transition:transform var(--vp-t-transform)}.vp-toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(1),.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.vp-navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );position:fixed;top:0;right:0;left:0;z-index:20;box-sizing:border-box;height:var(--navbar-height);padding:var(--navbar-padding-v) var(--navbar-padding-h);border-bottom:1px solid var(--vp-c-border);background-color:var(--vp-navbar-c-bg);line-height:var(--navbar-line-height);transition:background-color var(--vp-t-color),border-color var(--vp-t-color)}@media screen and (max-width: 719px){.vp-navbar{padding-left:4rem}}.vp-navbar-items-wrapper{position:absolute;top:var(--navbar-padding-v);right:var(--navbar-padding-h);display:flex;box-sizing:border-box;height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);font-size:.9rem;white-space:nowrap}.vp-page-meta{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-page-meta{padding:2rem}}@media (max-width: 419px){.vp-page-meta{padding:1.5rem}}.vp-page-meta{display:flex;flex-wrap:wrap;justify-content:space-between;overflow:auto;padding-top:.75rem;padding-bottom:.75rem}@media print{.vp-page-meta{margin:0!important;padding-right:0!important;padding-left:0!important}}@media (max-width: 719px){.vp-page-meta{display:block}}.vp-page-meta .vp-meta-item{flex-grow:1}.vp-page-meta .vp-meta-item .vp-meta-label{font-weight:500}.vp-page-meta .vp-meta-item .vp-meta-label:not(a){color:var(--vp-c-text-mute)}.vp-page-meta .vp-meta-item .vp-meta-info{color:var(--vp-c-text-mute);font-weight:400}.vp-page-meta .git-info{text-align:end}.vp-page-meta .edit-link{margin-top:.25rem;margin-right:.5rem;margin-bottom:.25rem;font-size:14px}@media print{.vp-page-meta .edit-link{display:none}}.vp-page-meta .edit-link .edit-icon{position:relative;bottom:-.125em;width:1em;height:1em;margin-right:.25em}.vp-page-meta .last-updated,.vp-page-meta .contributors{margin-top:.25rem;margin-bottom:.25rem;font-size:14px}@media (max-width: 719px){.vp-page-meta .last-updated,.vp-page-meta .contributors{font-size:13px;text-align:start}}.vp-page-nav{display:flex;flex-wrap:wrap;max-width:var(--content-width, 740px);min-height:2rem;margin-top:0;margin-right:auto;margin-left:auto;padding:1rem 2rem 0;border-top:1px solid var(--vp-c-gutter);transition:border-top var(--vp-t-color)}@media (max-width: 959px){.vp-page-nav{padding-right:1rem;padding-left:1rem}}@media print{.vp-page-nav{display:none}}.vp-page-nav .auto-link{display:inline-block;flex-grow:1;margin:.25rem;padding:.25rem .5rem;border:1px solid var(--vp-c-gutter);border-radius:.25rem}.vp-page-nav .auto-link:hover{background:var(--vp-c-control)}.vp-page-nav .auto-link .hint{color:var(--vp-c-text-mute);font-size:.875rem;line-height:2}.vp-page-nav .prev{text-align:start}.vp-page-nav .next{text-align:end}.vp-page{display:block;padding-top:var(--navbar-height);padding-bottom:2rem;padding-left:var(--sidebar-width)}@media (max-width: 959px){.vp-page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.vp-page{padding-left:0}}.vp-page [vp-content]{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-page [vp-content]{padding:2rem}}@media (max-width: 419px){.vp-page [vp-content]{padding:1.5rem}}.vp-page [vp-content]{padding-top:0}.vp-sidebar-item{border-left:.25rem solid transparent;color:var(--vp-c-text);cursor:default}.vp-sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.vp-sidebar-item.vp-sidebar-heading{box-sizing:border-box;width:100%;margin:0;padding:.35rem 1.5rem .35rem 1.25rem;font-weight:700;font-size:1.1em;transition:color .15s ease}.vp-sidebar-item.vp-sidebar-heading+.vp-sidebar-children{overflow:hidden;transition:height .1s ease-out;margin-bottom:.75rem}.vp-sidebar-item.collapsible{cursor:pointer}.vp-sidebar-item:not(.vp-sidebar-heading){display:inline-block;box-sizing:border-box;width:100%;margin:0;padding:.35rem 1rem .35rem 2rem;font-weight:400;font-size:1em;line-height:1.4}.vp-sidebar-item:not(.vp-sidebar-heading)+.vp-sidebar-children{padding-left:1rem;font-size:.95em}.vp-sidebar-children .vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.vp-sidebar-children .vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading).active{border-left-color:transparent;font-weight:500}a.vp-sidebar-heading+.vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading).active{border-left-color:transparent}.vp-sidebar-item.active:not(p.vp-sidebar-heading){border-left-color:var(--vp-c-accent);color:var(--vp-c-accent);font-weight:600}.vp-sidebar-item .auto-link{display:block}.vp-sidebar-item.auto-link{display:block;cursor:pointer}.vp-sidebar-item.auto-link:hover{color:var(--vp-c-accent)}.vp-sidebar-items{margin:0;padding:1.5rem 0;list-style-type:none}@media (max-width: 719px){.vp-sidebar-items{padding:1rem 0}}.vp-sidebar-items ul{margin:0;padding:0;list-style-type:none}.vp-sidebar{position:fixed;top:var(--navbar-height);bottom:0;left:0;z-index:10;overflow-y:auto;box-sizing:border-box;width:var(--sidebar-width);margin:0;border-right:1px solid var(--vp-c-border);background-color:var(--vp-sidebar-c-bg);font-size:16px;transition:transform var(--vp-t-transform),background-color var(--vp-t-color),border-color var(--vp-t-color);scrollbar-color:var(--vp-c-accent-bg) var(--vp-c-gutter);scrollbar-width:thin}@media (max-width: 959px){.vp-sidebar{width:var(--sidebar-width-mobile);font-size:15px}}@media (max-width: 719px){.vp-sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}}.vp-sidebar::-webkit-scrollbar{width:7px}.vp-sidebar::-webkit-scrollbar-track{background-color:var(--vp-c-gutter)}.vp-sidebar::-webkit-scrollbar-thumb{background-color:var(--vp-c-accent-bg)}.vp-sidebar .vp-navbar-items{display:none;padding:.5rem 0 .75rem;border-bottom:1px solid var(--vp-c-gutter);transition:border-color var(--vp-t-color)}@media (max-width: 719px){.vp-sidebar .vp-navbar-items{display:block}.vp-sidebar .vp-navbar-items .vp-navbar-dropdown-item .route-link-active:after{top:calc(1rem - 2px)}}.vp-sidebar .vp-navbar-items ul{margin:0;padding:0;list-style-type:none}.vp-sidebar .vp-navbar-items .auto-link{font-weight:600}.vp-sidebar .vp-navbar-item{display:block;padding:.5rem 0 .5rem 1.5rem;font-size:1.1em;line-height:1.25rem}.vp-sidebar-mask{position:fixed;top:0;left:0;z-index:9;display:none;width:100vw;height:100vh}.vp-theme-container.no-navbar .vp-sidebar{top:0}@media (max-width: 719px){.vp-theme-container.no-navbar .vp-sidebar{padding-top:0}}.vp-theme-container.no-navbar .vp-page{padding-top:0}.vp-theme-container.no-navbar [vp-content] h1,.vp-theme-container.no-navbar [vp-content] h2,.vp-theme-container.no-navbar [vp-content] h3,.vp-theme-container.no-navbar [vp-content] h4,.vp-theme-container.no-navbar [vp-content] h5,.vp-theme-container.no-navbar [vp-content] h6{margin-top:1.5rem;padding-top:0}.vp-theme-container.no-sidebar .vp-sidebar{display:none}@media (max-width: 719px){.vp-theme-container.no-sidebar .vp-sidebar{display:block}}.vp-theme-container.no-sidebar .vp-page{padding-left:0}@media (max-width: 719px){.vp-theme-container.sidebar-open .vp-sidebar{transform:translate(0)}.vp-theme-container.sidebar-open .vp-sidebar-mask{display:block}}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{opacity:0;transform:translateY(10px)}.vp-theme-container[data-v-cb436ded]{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-theme-container[data-v-cb436ded]{padding:2rem}}:root{--vp-c-white: #fff;--vp-c-black: #000;--vp-c-grey-text: #656869;--vp-c-grey-hover: #e4e4e9;--vp-c-grey-bg: #ebebef;--vp-c-grey-soft: rgb(142 150 170 / 14%);--vp-c-indigo-text: #3451b2;--vp-c-indigo-hover: #3a5ccc;--vp-c-indigo-bg: #5672cd;--vp-c-indigo-soft: rgb(100 108 255 / 14%);--vp-c-purple-text: #6f42c1;--vp-c-purple-hover: #7e4cc9;--vp-c-purple-bg: #8e5cd9;--vp-c-purple-soft: rgb(159 122 234 / 14%);--vp-c-blue-text: #2888a7;--vp-c-blue-hover: #2d98ba;--vp-c-blue-bg: #2fa1c5;--vp-c-blue-soft: rgb(27 178 229 / 14%);--vp-c-green-text: #18794e;--vp-c-green-hover: #299764;--vp-c-green-bg: #30a46c;--vp-c-green-soft: rgb(16 185 129 / 14%);--vp-c-yellow-text: #915930;--vp-c-yellow-hover: #946300;--vp-c-yellow-bg: #c28100;--vp-c-yellow-soft: rgb(234 179 8 / 14%);--vp-c-red-text: #b8272c;--vp-c-red-hover: #d5393e;--vp-c-red-bg: #e0575b;--vp-c-red-soft: rgb(244 63 94 / 14%)}[data-theme=dark]{--vp-c-white: #000;--vp-c-black: #fff;--vp-c-grey-text: #939499;--vp-c-grey-hover: #414853;--vp-c-grey-bg: #32363f;--vp-c-grey-soft: rgb(101 117 133 / 16%);--vp-c-indigo-text: #a8b1ff;--vp-c-indigo-hover: #5c73e7;--vp-c-indigo-bg: #3e63dd;--vp-c-indigo-soft: rgb(100 108 255 / 16%);--vp-c-blue-text: #c9e8f2;--vp-c-blue-hover: #a6d9ea;--vp-c-blue-bg: #2785a3;--vp-c-blue-soft: rgb(27 178 229 / 16%);--vp-c-purple-text: #c8abfa;--vp-c-purple-hover: #a879e6;--vp-c-purple-bg: #8e5cd9;--vp-c-purple-soft: rgb(159 122 234 / 16%);--vp-c-green-text: #3dd68c;--vp-c-green-hover: #30a46c;--vp-c-green-bg: #298459;--vp-c-green-soft: rgb(16 185 129 / 16%);--vp-c-yellow-text: #f9b44e;--vp-c-yellow-hover: #da8b17;--vp-c-yellow-bg: #a46a0a;--vp-c-yellow-soft: rgb(234 179 8 / 16%);--vp-c-red-text: #f66f81;--vp-c-red-hover: #f14158;--vp-c-red-bg: #b62a3c;--vp-c-red-soft: rgb(244 63 94 / 16%)}:root{color-scheme:light}[data-theme=dark]{color-scheme:dark}html,body{background:var(--vp-c-bg, #fff);accent-color:var(--vp-c-accent, #299764);transition:background-color var(--vp-t-color)}html{font-size:16px;font-display:optional;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none}@media print{html{font-size:12pt}}html[data-theme=dark]{color-scheme:dark}body{min-height:100vh;margin:0;padding:0;color:var(--vp-c-text, rgb(60, 60, 67));font-size:1rem;font-synthesis:style}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1{font-size:2rem}h2{padding-bottom:.3rem;border-bottom:1px solid var(--vp-c-gutter, #e2e2e3);font-size:1.65rem;transition:border-color var(--vp-t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}p,ul,ol{line-height:1.6;overflow-wrap:break-word}@media print{p,ul,ol{line-height:1.5}}ul,ol{padding-inline-start:1.2em}a{color:var(--vp-c-accent, #299764);font-weight:500;text-decoration:none;overflow-wrap:break-word}a.header-anchor{position:relative;color:inherit;text-decoration:none}a.header-anchor:before{content:"¶";position:absolute;top:.4167em;left:-.75em;display:none;color:var(--vp-c-accent, #299764);font-size:.75em}[dir=rtl] a.header-anchor:before{right:-.75em}a.header-anchor:hover:before{display:block}a.header-anchor:focus-visible{outline:none}a.header-anchor:focus-visible:before{display:block;outline:auto}strong{font-weight:600}blockquote{margin:1rem 0;padding:.25rem 0 .25rem 1rem;border-inline-start:.2rem solid var(--vp-c-border-hard, #b8b8ba);color:var(--vp-c-text-mute, rgba(60, 60, 67, .78));font-size:1rem;overflow-wrap:break-word;transition:border-color var(--vp-t-color),color var(--vp-t-color)}blockquote>p{margin:0}hr{border:0;border-bottom:1px solid var(--vp-c-gutter, #e2e2e3);transition:border-color var(--vp-t-color)}:not(pre)>code{margin:0;padding:3px 6px;border-radius:4px;background:var(--vp-c-grey-soft, rgba(142, 150, 170, .14));font-size:.875em;overflow-wrap:break-word;transition:background-color var(--vp-t-color),color var(--vp-t-color)}p a code{color:var(--vp-c-accent, #299764);font-weight:400}table code{padding:.1rem .4rem}kbd{display:inline-block;min-width:1em;margin-inline:.125rem;padding:.25em;border:1px solid var(--vp-c-border, #c2c2c4);border-radius:.25em;box-shadow:1px 1px 4px 0 var(--vp-c-shadow, rgba(0, 0, 0, .15));line-height:1;letter-spacing:-.1em;text-align:center}table{display:block;overflow-x:auto;margin:1rem 0;border-collapse:collapse}tbody tr:nth-child(odd){background:var(--vp-c-bg-alt, #f6f8fa);transition:background-color var(--vp-t-color)}th,td{padding:.6em 1em;border:1px solid var(--vp-c-border-hard, #d1d4d7);transition:border-color var(--vp-t-color)}pre{text-align:left;direction:ltr;white-space:pre;word-spacing:normal;word-wrap:normal;word-break:normal;overflow-wrap:unset;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}@media print{pre{white-space:pre-wrap}}pre code{padding:0;border-radius:0}@page{margin:2cm;font-size:12pt;size:a4}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}a{color:inherit;font-weight:inherit!important;font-size:inherit!important;text-decoration:underline}a.header-anchor{text-decoration:none}abbr[title]:after{content:" (" attr(title) ")"}pre{border:1px solid #eee;white-space:pre-wrap!important}pre>code{white-space:pre-wrap!important}blockquote{border-inline-start:.2rem solid #ddd;color:inherit}blockquote,pre{orphans:5;widows:5}img,tr,canvas{page-break-inside:avoid}}@media (prefers-reduced-motion: reduce){*,:before,:after{background-attachment:initial!important;scroll-behavior:auto!important;transition-delay:0s!important;transition-duration:0s!important;animation-duration:1ms!important;animation-delay:-1ms!important;animation-iteration-count:1!important}}:root{--vp-c-accent: #299764;--vp-c-accent-bg: #3eaf7c;--vp-c-accent-hover: #4abf8a;--vp-c-accent-text: var(--vp-c-white);--vp-c-accent-soft: rgb(16 185 129 / 14%);--vp-c-bg: #fff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #fff;--vp-c-text: rgb(60 60 67);--vp-c-text-mute: rgb(60 60 67 / 78%);--vp-c-text-subtle: rgb(60 60 67 / 56%);--vp-c-gutter: #e2e2e3;--vp-c-border: #c2c2c4;--vp-c-border-hard: #b8b8ba;--vp-c-shadow: rgb(0 0 0 / 15%);--vp-c-control: rgb(142 150 170 / 10%);--vp-c-control-hover: rgb(142 150 170 / 16%);--vp-c-control-disabled: #eaeaea;--vp-navbar-c-bg: var(--vp-c-bg);--vp-sidebar-c-bg: var(--vp-c-bg);--vp-c-code-tab-title: var(--code-c-text, rgb(255 255 255 / 90%));--vp-c-code-tab-bg: var(--code-bg-color, var(--code-c-bg));--vp-c-code-tab-active: var(--vp-c-accent);--badge-c-tip-text: var(--vp-c-green-text);--badge-c-tip-bg: var(--vp-c-green-soft);--badge-c-warning-text: var(--vp-c-yellow-text);--badge-c-warning-bg: var(--vp-c-yellow-soft);--badge-c-danger-text: var(--vp-c-red-text);--badge-c-danger-bg: var(--vp-c-red-soft);--badge-c-important-text: var(--vp-c-purple-text);--badge-c-important-bg: var(--vp-c-purple-soft);--badge-c-info-text: var(--vp-c-indigo-text);--badge-c-info-bg: var(--vp-c-indigo-soft);--badge-c-note-text: var(--vp-c-grey-text);--badge-c-note-bg: var(--vp-c-grey-soft);--font-family: -apple-system, "BlinkMacSystemFont", "Segoe UI", roboto, oxygen, ubuntu, cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px;--header-offset: var(--navbar-height);--vp-t-color: .3s ease;--vp-t-transform: .3s ease;--external-link-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0V0z' fill='none'/%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z'/%3E%3C/svg%3E");--external-link-c-icon: var(--vp-c-text-mute)}[data-theme=dark]{--vp-c-accent: #3dd68c;--vp-c-accent-bg: #3aa675;--vp-c-accent-hover: #349469;--vp-c-accent-soft: rgb(16 185 129 / 16%);--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-text: rgb(235 235 245 / 86%);--vp-c-text-mute: rgb(235 235 245 / 60%);--vp-c-text-subtle: rgb(235 235 245 / 38%);--vp-c-gutter: #000;--vp-c-border: #3c3f44;--vp-c-border-hard: #45484e;--vp-c-shadow: rgb(0 0 0 / 30%);--vp-c-control: rgb(101 117 133 / 12%);--vp-c-control-hover: rgb(101 117 133 / 18%);--vp-c-control-disabled: #363636}body{font-family:var(--font-family)}code{font-family:var(--code-font-family)}[vp-content] h1,[vp-content] h2,[vp-content] h3,[vp-content] h4,[vp-content] h5,[vp-content] h6{margin-top:calc(.5rem - var(--header-offset));margin-bottom:0;padding-top:calc(1rem + var(--header-offset))}[vp-content] h1:first-child,[vp-content] h2:first-child,[vp-content] h3:first-child,[vp-content] h4:first-child,[vp-content] h5:first-child,[vp-content] h6:first-child{margin-bottom:1rem}[vp-content] h1:first-child+p,[vp-content] h1:first-child+pre,[vp-content] h1:first-child+.custom-container,[vp-content] h2:first-child+p,[vp-content] h2:first-child+pre,[vp-content] h2:first-child+.custom-container,[vp-content] h3:first-child+p,[vp-content] h3:first-child+pre,[vp-content] h3:first-child+.custom-container,[vp-content] h4:first-child+p,[vp-content] h4:first-child+pre,[vp-content] h4:first-child+.custom-container,[vp-content] h5:first-child+p,[vp-content] h5:first-child+pre,[vp-content] h5:first-child+.custom-container,[vp-content] h6:first-child+p,[vp-content] h6:first-child+pre,[vp-content] h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 419px){[vp-content] h1{font-size:1.9rem}}[vp-content] a:not(.header-anchor){text-decoration:underline}[vp-content] img{max-width:100%}div[class*=language-]{margin:.75rem 0;transition:background-color var(--vp-t-color),color var(--vp-t-color)}@media (max-width: 419px){div[class*=language-]{--code-border-radius: 0;margin:.75rem -1.5rem}}div[class*=language-] .line.diff,div[class*=language-] .line.highlighted{transition:background-color var(--vp-t-color)}.table-of-contents .vp-badge{vertical-align:middle}.arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}[data-theme=dark] .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.arrow.down{transform:rotate(180deg)}.arrow.right{transform:rotate(90deg)}.arrow.left{transform:rotate(-90deg)}.vp-external-link-icon:after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-c-icon);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}.external-link-icon .external-link:after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-c-icon);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}.external-link-icon [vp-content] a[href*="://"]:not(.no-external-link-icon):after,.external-link-icon [vp-content] a[target=_blank]:not(.no-external-link-icon):after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-c-icon);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}@media screen and (max-width: 719px){.vp-hide-mobile{display:none}}.vp-comment{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-comment{padding:2rem}}@media (max-width: 419px){.vp-comment{padding:1.5rem}}.vp-navbar .DocSearch{transition:background-color var(--vp-t-color)}.vp-navbar .search-box{vertical-align:top;flex:0 0 auto}@media screen and (max-width: 719px){.hint-container{margin-inline:-.75rem}}.lang-modal-fade-enter-active,.lang-modal-fade-leave-active{transition:opacity .5s}.lang-modal-fade-enter,.lang-modal-fade-leave-to{opacity:0}.lang-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1499;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}@media print{.lang-modal-mask{display:none}}.lang-modal-wrapper{position:relative;z-index:1500;overflow:hidden;max-width:80vw;padding:1rem 2rem;border-radius:8px;background:var(--vp-bg);box-shadow:0 2px 6px 0 var(--card-shadow)}.lang-modal-action{display:block;width:100%;margin:1rem 0;padding:.5rem .75rem;border:none;border-radius:8px;background-color:var(--vp-bglt);color:var(--vp-c);cursor:pointer}.lang-modal-action:hover{background-color:var(--vp-bgl)}.lang-modal-action.primary{background-color:var(--vp-tc);color:var(--white)}.lang-modal-action.primary:hover{background-color:var(--vp-tcl)}.grey{color:#0006}.works-table-wrapper[data-v-765855fb]{margin:0 auto;padding:0 2rem;max-width:1224px;box-sizing:border-box}.works-table-wrapper[data-v-765855fb] table{width:100%}:root{--content-width: 960px}.vp-page .theme-default-content{padding-bottom:0!important}.vp-page-meta{display:none} +.vp-back-to-top-button{position:fixed!important;inset-inline-end:1rem;bottom:4rem;z-index:100;width:48px;height:48px;padding:12px;border-width:0;border-radius:50%;background:var(--back-to-top-c-bg);color:var(--back-to-top-c-accent-bg);box-shadow:2px 2px 10px 4px var(--back-to-top-c-shadow);cursor:pointer}@media (max-width: 959px){.vp-back-to-top-button{transform:scale(.8);transform-origin:100% 100%}}@media print{.vp-back-to-top-button{display:none}}.vp-back-to-top-button:hover{color:var(--back-to-top-c-accent-hover)}.vp-back-to-top-button .back-to-top-icon{overflow:hidden;width:24px;height:24px;margin:0 auto;background:var(--back-to-top-c-icon);-webkit-mask-image:var(--back-to-top-icon);mask-image:var(--back-to-top-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:cover;mask-size:cover}.vp-scroll-progress{position:absolute;right:-2px;bottom:-2px;width:52px;height:52px}.vp-scroll-progress svg{width:100%;height:100%}.vp-scroll-progress circle{opacity:.9;transform:rotate(-90deg);transform-origin:50% 50%}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--back-to-top-z-index: 5;--back-to-top-icon: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2048%2048'%3e%3cpath%20fill='none'%20stroke='currentColor'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='4'%20d='M24.008%2014.1V42M12%2026l12-12l12%2012M12%206h24'%20/%3e%3c/svg%3e");--back-to-top-c-bg: var(--vp-c-bg);--back-to-top-c-accent-bg: var(--vp-c-accent-bg);--back-to-top-c-accent-hover: var(--vp-c-accent-hover);--back-to-top-c-shadow: var(--vp-c-shadow);--back-to-top-c-icon: currentcolor}.vp-copy-code-button{position:absolute;top:.5em;right:.5em;z-index:5;width:2.5rem;height:2.5rem;padding:0;border-width:0;border-radius:.5rem;background:#0000;outline:none;opacity:0;cursor:pointer;transition:opacity .4s}@media print{.vp-copy-code-button{display:none}}.vp-copy-code-button:before{content:"";display:inline-block;width:1.25rem;height:1.25rem;padding:.625rem;background:currentcolor;color:var(--copy-code-c-text);font-size:1.25rem;-webkit-mask-image:var(--code-copy-icon);mask-image:var(--code-copy-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.vp-copy-code-button:focus,.vp-copy-code-button.copied{opacity:1}.vp-copy-code-button:hover,.vp-copy-code-button.copied{background:var(--copy-code-c-hover)}.vp-copy-code-button.copied:before{-webkit-mask-image:var(--code-copied-icon);mask-image:var(--code-copied-icon)}.vp-copy-code-button.copied:after{content:attr(data-copied);position:absolute;top:0;right:calc(100% + .25rem);display:block;height:1.25rem;padding:.625rem;border-radius:.5rem;background:var(--copy-code-c-hover);color:var(--copy-code-c-text);font-weight:500;line-height:1.25rem;white-space:nowrap}.no-copy-code .vp-copy-code-button{display:none}body:not(.no-copy-code) div[class*=language-]:hover:before{display:none}body:not(.no-copy-code) div[class*=language-]:hover .vp-copy-code-button{opacity:1}:root{--code-copy-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23808080' stroke-width='2'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2' /%3e%3c/svg%3e");--code-copied-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23808080' stroke-width='2'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4' /%3e%3c/svg%3e");--copy-code-c-text: var(--code-c-line-number);--copy-code-c-hover: var(--code-c-highlight-bg)}.hint-container{position:relative;background:var(--hint-c-soft);transition:background var(--vp-t-color),color var(--vp-t-color)}@media print{.hint-container{page-break-inside:avoid}}.hint-container>.hint-container-title{color:var(--hint-c-title)}.hint-container :not(pre)>code{background:var(--hint-c-soft)}.hint-container .hint-container-title{position:relative;margin-block:.75em;font-weight:600;line-height:1.25}.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{margin-block:.75rem;padding:.25em 1em;border-radius:.5em;color:inherit;font-size:var(--hint-font-size)}@media print{.hint-container.important,.hint-container.info,.hint-container.note,.hint-container.tip,.hint-container.warning,.hint-container.caution{border-inline-start-width:.25em;border-inline-start-style:solid}}.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:1.75em}@media print{.hint-container.important .hint-container-title,.hint-container.info .hint-container-title,.hint-container.note .hint-container-title,.hint-container.tip .hint-container-title,.hint-container.warning .hint-container-title,.hint-container.caution .hint-container-title{padding-inline-start:0}}.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{content:" ";position:absolute;inset-inline-start:0;top:calc(50% - .6125em);width:1.25em;height:1.25em;font-size:1.25em}@media print{.hint-container.important .hint-container-title:before,.hint-container.info .hint-container-title:before,.hint-container.note .hint-container-title:before,.hint-container.tip .hint-container-title:before,.hint-container.warning .hint-container-title:before,.hint-container.caution .hint-container-title:before{display:none}}.hint-container.important p,.hint-container.info p,.hint-container.note p,.hint-container.tip p,.hint-container.warning p,.hint-container.caution p{line-height:1.5}.hint-container.important a,.hint-container.info a,.hint-container.note a,.hint-container.tip a,.hint-container.warning a,.hint-container.caution a{color:var(--vp-c-accent)}.hint-container.important{--hint-c-accent: var(--important-c-accent);--hint-c-title: var(--important-c-text);--hint-c-soft: var(--important-c-soft)}.hint-container.important>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M512 981.333a84.992 84.992 0 0 1-84.907-84.906h169.814A84.992 84.992 0 0 1 512 981.333zm384-128H128v-42.666l85.333-85.334v-256A298.325 298.325 0 0 1 448 177.92V128a64 64 0 0 1 128 0v49.92a298.325 298.325 0 0 1 234.667 291.413v256L896 810.667v42.666zm-426.667-256v85.334h85.334v-85.334h-85.334zm0-256V512h85.334V341.333h-85.334z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.info{--hint-c-accent: var(--info-c-accent);--hint-c-title: var(--info-c-text);--hint-c-soft: var(--info-c-soft)}.hint-container.info>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.note{--hint-c-accent: var(--note-c-accent);--hint-c-title: var(--note-c-text);--hint-c-soft: var(--note-c-soft)}.hint-container.note>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm-1-11v6h2v-6h-2zm0-4v2h2V7h-2z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.tip{--hint-c-accent: var(--tip-c-accent);--hint-c-title: var(--tip-c-text);--hint-c-soft: var(--tip-c-soft)}.hint-container.tip>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.941 18c-.297-1.273-1.637-2.314-2.187-3a8 8 0 1 1 12.49.002c-.55.685-1.888 1.726-2.185 2.998H7.94zM16 20v1a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2v-1h8zm-3-9.995V6l-4.5 6.005H11v4l4.5-6H13z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.warning{--hint-c-accent: var(--warning-c-accent);--hint-c-title: var(--warning-c-text);--hint-c-soft: var(--warning-c-soft)}.hint-container.warning>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024'%3E%3Cpath d='M576.286 752.57v-95.425q0-7.031-4.771-11.802t-11.3-4.772h-96.43q-6.528 0-11.3 4.772t-4.77 11.802v95.424q0 7.031 4.77 11.803t11.3 4.77h96.43q6.528 0 11.3-4.77t4.77-11.803zm-1.005-187.836 9.04-230.524q0-6.027-5.022-9.543-6.529-5.524-12.053-5.524H456.754q-5.524 0-12.053 5.524-5.022 3.516-5.022 10.547l8.538 229.52q0 5.023 5.022 8.287t12.053 3.265h92.913q7.032 0 11.803-3.265t5.273-8.287zM568.25 95.65l385.714 707.142q17.578 31.641-1.004 63.282-8.538 14.564-23.354 23.102t-31.892 8.538H126.286q-17.076 0-31.892-8.538T71.04 866.074q-18.582-31.641-1.004-63.282L455.75 95.65q8.538-15.57 23.605-24.61T512 62t32.645 9.04 23.605 24.61z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.caution{--hint-c-accent: var(--caution-c-accent);--hint-c-title: var(--caution-c-text);--hint-c-soft: var(--caution-c-soft)}.hint-container.caution>.hint-container-title:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2c5.523 0 10 4.477 10 10v3.764a2 2 0 0 1-1.106 1.789L18 19v1a3 3 0 0 1-2.824 2.995L14.95 23a2.5 2.5 0 0 0 .044-.33L15 22.5V22a2 2 0 0 0-1.85-1.995L13 20h-2a2 2 0 0 0-1.995 1.85L9 22v.5c0 .171.017.339.05.5H9a3 3 0 0 1-3-3v-1l-2.894-1.447A2 2 0 0 1 2 15.763V12C2 6.477 6.477 2 12 2zm-4 9a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.hint-container.details{position:relative;display:block;margin-block:.75rem;padding:1.25rem 1rem;border-radius:.5rem;background:var(--detail-c-bg);transition:background var(--vp-t-transform),color var(--vp-t-transform)}.hint-container.details h4{margin-top:0}.hint-container.details figure:last-child,.hint-container.details p:last-child{margin-bottom:0;padding-bottom:0}.hint-container.details a{color:var(--vp-c-accent)}.hint-container.details :not(pre)>code{background:var(--detail-c-soft)}.hint-container.details summary{position:relative;margin:-1rem;padding-block:1em;padding-inline:3em 1.5em;list-style:none;font-size:var(--hint-font-size);cursor:pointer}.hint-container.details summary::-webkit-details-marker{display:none}.hint-container.details summary::marker{color:#0000;font-size:0}.hint-container.details summary:before{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;content:" ";position:absolute;inset-inline-start:.8em;top:calc(50% - .5em);width:1em;height:1em;font-size:1.25rem;line-height:normal;transition:color,var(--vp-t-color),transform var(--vp-t-transform);transform:rotate(90deg)}.hint-container.details[open]>summary{margin-bottom:.5em}.hint-container.details[open]>summary:before{transform:rotate(180deg)}:root{--hint-font-size: .92rem;--important-c-accent: var(--vp-c-purple-bg);--important-c-text: var(--vp-c-purple-text);--important-c-soft: var(--vp-c-purple-soft);--info-c-accent: var(--vp-c-blue-bg);--info-c-text: var(--vp-c-blue-text);--info-c-soft: var(--vp-c-blue-soft);--note-c-accent: var(--vp-c-grey-bg);--note-c-text: var(--vp-c-grey-text);--note-c-soft: var(--vp-c-grey-soft);--tip-c-accent: var(--vp-c-green-bg);--tip-c-text: var(--vp-c-green-text);--tip-c-soft: var(--vp-c-green-soft);--warning-c-accent: var(--vp-c-yellow-bg);--warning-c-text: var(--vp-c-yellow-text);--warning-c-soft: var(--vp-c-yellow-soft);--caution-c-accent: var(--vp-c-red-bg);--caution-c-text: var(--vp-c-red-text);--caution-c-soft: var(--vp-c-red-soft);--detail-c-bg: var(--vp-c-control);--detail-c-icon: var(--vp-c-border);--detail-c-soft: var(--vp-c-grey-soft)}:root{--nprogress-c: var(--vp-c-accent);--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{position:fixed;top:0;left:0;z-index:var(--nprogress-z-index);width:100%;height:2px;background:var(--nprogress-c)}:root{--code-padding-x: 1.25rem;--code-padding-y: 1rem;--code-border-radius: 6px;--code-line-height: 1.6;--code-font-size: 14px;--code-font-family: consolas, monaco, "Andale Mono", "Ubuntu Mono", monospace}div[class*=language-]{position:relative;border-radius:var(--code-border-radius);background-color:var(--code-c-bg)}div[class*=language-]:before{content:attr(data-title);position:absolute;top:.8em;right:1em;z-index:3;color:var(--code-c-text);font-size:.75rem}div[class*=language-] pre{position:relative;z-index:1;overflow-x:auto;margin:0;border-radius:var(--code-border-radius);font-size:var(--code-font-size);font-family:var(--code-font-family);line-height:var(--code-line-height)}div[class*=language-] pre code{display:block;box-sizing:border-box;width:-moz-fit-content;width:fit-content;min-width:100%;padding:var(--code-padding-y) var(--code-padding-x);background-color:#0000!important;color:var(--code-c-text);overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}:root{--code-c-text: #f8f8f2;--code-c-bg: #2e3440;--code-c-highlight-bg: rgb(51.6454545455, 60.5484848485, 78.3545454545);--code-c-line-number: rgba(248, 248, 242, .67)}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#636f88}.token.punctuation{color:#81a1c1}.namespace{opacity:.7}.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted{color:#81a1c1}.token.number{color:#b48ead}.token.boolean{color:#81a1c1}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#a3be8c}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:#81a1c1}.token.atrule,.token.attr-value,.token.function,.token.class-name{color:#88c0d0}.token.keyword{color:#81a1c1}.token.regex,.token.important{color:#ebcb8b}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}:root{--code-line-number-width: 3rem}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-line-number-width);height:100%;border-right:1px solid var(--code-c-highlight-bg, var(--code-c-text));border-radius:var(--code-border-radius) 0 0 var(--code-border-radius);transition:border var(--vp-t-color)}div[class*=language-].line-numbers-mode pre{vertical-align:middle;margin-left:var(--code-line-number-width)}div[class*=language-].line-numbers-mode code{padding-left:1rem}div[class*=language-].line-numbers-mode .line-numbers{counter-reset:line-number;position:absolute;top:0;width:var(--code-line-number-width);padding-top:var(--code-padding-y);color:var(--code-c-line-number, var(--code-c-text));font-size:var(--code-font-size);line-height:var(--code-line-height);text-align:center}div[class*=language-].line-numbers-mode .line-number{position:relative;z-index:3;font-family:var(--code-font-family);-webkit-user-select:none;-moz-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-number:before{content:counter(line-number);counter-increment:line-number}div[class*=language-] .line.highlighted{display:inline-block;width:100%;margin:0 calc(-1*var(--code-padding-x));padding:0 var(--code-padding-x);background-color:var(--code-c-highlight-bg)}@property --vp-collapsed-lines-bg{inherits:false;initial-value:#fff;syntax:"<color>"}@keyframes code-collapsed-lines{0%{opacity:.3;transform:translateY(-2px) rotate(var(--vp-collapsed-lines-rotate))}to{opacity:1;transform:translateY(2px) rotate(var(--vp-collapsed-lines-rotate))}}div[class*=language-].has-collapsed-lines .collapsed-lines{--vp-collapsed-lines-bg: var(--code-c-bg);--vp-collapsed-lines-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='m18 12l-6 6l-6-6m12-6l-6 6l-6-6'/%3E%3C/svg%3E");--vp-collapsed-lines-rotate: 0deg;position:absolute;right:0;bottom:0;left:0;z-index:4;display:flex;align-items:center;justify-content:center;height:28px;background:linear-gradient(to bottom,transparent 0%,var(--vp-collapsed-lines-bg) 55%,var(--vp-collapsed-lines-bg) 100%);cursor:pointer;transition:--vp-collapsed-lines-bg var(--vp-t-color)}div[class*=language-].has-collapsed-lines .collapsed-lines:hover{--vp-collapsed-lines-bg: var(--code-c-highlight-bg)}div[class*=language-].has-collapsed-lines .collapsed-lines:before{content:"";display:inline-block;width:24px;height:24px;background-color:var(--code-c-text);-webkit-mask-image:var(--vp-collapsed-lines-icon);mask-image:var(--vp-collapsed-lines-icon);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:20px;mask-size:20px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;pointer-events:none;animation:code-collapsed-lines 1.2s infinite alternate-reverse ease-in-out}div[class*=language-].has-collapsed-lines[data-highlighter=shiki] .collapsed-lines{--vp-collapsed-lines-bg: var(--code-c-bg, var(--shiki-light-bg))}[data-theme=dark] div[class*=language-].has-collapsed-lines[data-highlighter=shiki] .collapsed-lines{--vp-collapsed-lines-bg: var(--code-c-bg, var(--shiki-dark-bg))}div[class*=language-].has-collapsed-lines.collapsed{overflow-y:hidden;height:calc(var(--vp-collapsed-lines)*var(--code-line-height)*var(--code-font-size) + var(--code-padding-y) + 28px)}div[class*=language-].has-collapsed-lines:not(.collapsed) code{padding-bottom:max(var(--code-padding-y),28px)}div[class*=language-].has-collapsed-lines:not(.collapsed) .collapsed-lines{--vp-collapsed-lines-rotate: 180deg}.vp-code-tabs-nav{overflow-x:auto;margin:.75rem 0 -.75rem;padding:0;border-radius:6px 6px 0 0;background:var(--code-tabs-c-bg);list-style:none;white-space:nowrap;transition:background var(--vp-t-color)}@media print{.vp-code-tabs-nav{display:none}}@media (max-width: 419px){.vp-code-tabs-nav{margin-inline:-1.5rem;border-radius:0}}.vp-code-tab-nav{position:relative;min-width:3rem;margin:0;padding:6px 12px;border-width:0;border-radius:6px 6px 0 0;background:#0000;color:var(--code-tabs-c-text);font-weight:600;font-size:.875em;line-height:1.4;cursor:pointer;transition:background var(--vp-t-color),color var(--vp-t-color)}.vp-code-tab-nav:hover{background:var(--code-tabs-c-hover)}.vp-code-tab-nav:before,.vp-code-tab-nav:after{content:" ";position:absolute;bottom:0;z-index:1;width:6px;height:6px}.vp-code-tab-nav:before{right:100%}.vp-code-tab-nav:after{left:100%}.vp-code-tab-nav.active{background:var(--code-c-bg, var(--vp-c-bg-alt))}.vp-code-tab-nav.active:before{background:radial-gradient(12px at left top,transparent 50%,var(--code-c-bg) 50%)}.vp-code-tab-nav.active:after{background:radial-gradient(12px at right top,transparent 50%,var(--code-c-bg) 50%)}.vp-code-tab-nav:first-child:before{display:none}[dir=rtl] .vp-code-tab-nav:first-child:before{display:block}[dir=rtl] .vp-code-tab-nav:first-child:after{display:none}.vp-code-tab{display:none}@media print{.vp-code-tab{display:block}}.vp-code-tab.active{display:block}.vp-code-tab div[class*=language-]{border-top-left-radius:0;border-top-right-radius:0}@media (max-width: 419px){.vp-code-tab div[class*=language-]{margin:.75rem -1.5rem;border-radius:0}}.vp-code-tab div[class*=language-].line-numbers-mode:after{border-top-left-radius:0}.vp-code-tab div[class*=language-] pre{border-top-left-radius:0;border-top-right-radius:0}@media (max-width: 419px){.vp-code-tab div[class*=language-] pre{border-radius:0}}@media print{.vp-code-tab div[class*=language-] code{white-space:pre-wrap}}.vp-code-tab-title{display:none;font-weight:500}@media print{.vp-code-tab-title{display:block}}.vp-tabs{margin:1.5rem 0;border:1px solid var(--vp-c-border);border-radius:8px}@media (max-width: 419px){[vp-content]>.vp-tabs{margin-inline:-1.5rem;border:none;border-bottom:1px solid var(--vp-c-border);border-radius:0}}.vp-tabs-nav{overflow-x:auto;margin:0;padding:0;border-radius:.5rem .5rem 0 0;background:var(--tab-c-bg-nav);list-style:none;white-space:nowrap;transition:background var(--vp-t-color)}@media print{.vp-tabs-nav{display:none}}@media (max-width: 419px){.vp-tabs-nav{border-radius:0}}.vp-tab-nav{position:relative;min-width:4rem;margin:0;padding:.5em 1em;border:none;border-radius:.5rem .5rem 0 0;background:#0000;color:var(--tab-c-nav);font-weight:600;font-size:.875em;line-height:1.75;cursor:pointer;transition:background var(--vp-t-color),color var(--vp-t-color)}.vp-tab-nav:hover{background:var(--tab-c-bg-nav-hover)}.vp-tab-nav:before,.vp-tab-nav:after{content:" ";position:absolute;bottom:0;z-index:1;width:8px;height:8px}.vp-tab-nav:before{right:100%}.vp-tab-nav:after{left:100%}.vp-tab-nav.active{background:var(--tab-c-bg)}.vp-tab-nav.active:before{background:radial-gradient(16px at left top,transparent 50%,var(--tab-c-bg) 50%)}.vp-tab-nav.active:after{background:radial-gradient(16px at right top,transparent 50%,var(--tab-c-bg) 50%)}.vp-tab-nav:first-child:before{display:none}.vp-tab{display:none;padding:1rem .75rem;border-radius:0 0 .5rem .5rem;background:var(--tab-c-bg);transition:background var(--vp-t-color)}@media print{.vp-tab{display:block;padding:.5rem}}.vp-tab.active{display:block}.vp-tab:nth-child(n+2) .vp-tab-title{border-top:none}.vp-tab-title{display:none;padding:.25rem 0;border-top:1px solid var(--vp-c-border);font-weight:500}@media print{.vp-tab-title{display:block}}:root{--code-tabs-c-text: var(--code-c-text);--code-tabs-c-bg: var(--code-c-highlight-bg);--code-tabs-c-hover: var(--code-c-bg, var(--vp-c-bg-alt));--tab-c-bg: var(--vp-c-bg);--tab-c-nav: var(--vp-c-text);--tab-c-bg-nav: var(--vp-c-grey-bg);--tab-c-bg-nav-hover: var(--vp-c-control-hover)}.vp-badge{display:inline-block;vertical-align:top;height:18px;padding:0 6px;border-radius:3px;background:var(--vp-c-accent-soft);color:var(--vp-c-accent);font-size:14px;line-height:18px;transition:background var(--vp-t-color),color var(--vp-t-color)}.vp-badge+.vp-badge{margin-inline-start:5px}.vp-badge.tip{background:var(--badge-c-tip-bg);color:var(--badge-c-tip-text)}.vp-badge.warning{background:var(--badge-c-warning-bg);color:var(--badge-c-warning-text)}.vp-badge.danger{background:var(--badge-c-danger-bg);color:var(--badge-c-danger-text)}.vp-badge.important{background:var(--badge-c-important-bg);color:var(--badge-c-important-text)}.vp-badge.info{background:var(--badge-c-info-bg);color:var(--badge-c-info-text)}.vp-badge.note{background:var(--badge-c-note-bg);color:var(--badge-c-note-text)}.vp-features{display:flex;flex-wrap:wrap;place-content:stretch space-between;align-items:flex-start;margin-top:2.5rem;padding:1.2rem 0;border-top:1px solid var(--vp-c-gutter);transition:border-color var(--vp-t-color)}@media (max-width: 719px){.vp-features{flex-direction:column}}.vp-feature{flex-grow:1;flex-basis:30%;max-width:30%}@media (max-width: 719px){.vp-feature{max-width:100%;padding:0 2.5rem}}.vp-feature h2{padding-bottom:0;border-bottom:none;font-weight:500;font-size:1.4rem}@media (max-width: 419px){.vp-feature h2{font-size:1.25rem}}.vp-feature p{color:var(--vp-c-text-mute)}.vp-footer{padding:2.5rem;border-top:1px solid var(--vp-c-border);color:var(--vp-c-text-mute);text-align:center;transition:border-color var(--vp-t-color)}.vp-hero{text-align:center}.vp-hero-image{display:block;max-width:100%;max-height:280px;margin:3rem auto 1.5rem}@media (max-width: 419px){.vp-hero-image{max-height:210px;margin:2rem auto 1.2rem}}#main-title{font-size:3rem}@media (max-width: 419px){#main-title{font-size:2rem}}#main-title,.vp-hero-description,.vp-hero-actions{margin:1.8rem auto}@media (max-width: 419px){#main-title,.vp-hero-description,.vp-hero-actions{margin:1.2rem auto}}.vp-hero-actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.vp-hero-description{max-width:35rem;color:var(--vp-c-text-mute);font-size:1.6rem;line-height:1.3}@media (max-width: 419px){.vp-hero-description{font-size:1.2rem}}.vp-hero-action-button{display:inline-block;box-sizing:border-box;padding:.8rem 1.6rem;border:2px solid var(--vp-c-accent-bg);border-radius:4px;background-color:var(--vp-c-bg);color:var(--vp-c-accent);font-size:1.2rem;transition:background-color border-color color var(--vp-t-color)}@media (max-width: 419px){.vp-hero-action-button{padding:.6rem 1.2rem;font-size:1rem}}.vp-hero-action-button:hover{color:var(--vp-c-accent-text)}.vp-hero-action-button.primary{background-color:var(--vp-c-accent-bg);color:var(--vp-c-accent-text)}.vp-hero-action-button.primary:hover{border-color:var(--vp-c-accent-hover);background-color:var(--vp-c-accent-hover)}.vp-home{display:block;max-width:var(--homepage-width);margin:0 auto;padding:var(--navbar-height) 2rem 0}@media (max-width: 419px){.vp-home{padding-right:1.5rem;padding-left:1.5rem}}.vp-home [vp-content]{margin:0;padding:0}.vp-site-logo{vertical-align:top;height:var(--navbar-line-height);margin-right:var(--navbar-padding-v)}.vp-site-name{position:relative;color:var(--vp-c-text);font-weight:600;font-size:1.3rem}@media screen and (max-width: 719px){.vp-site-name{display:block;overflow:hidden;width:calc(100vw - 11rem);text-overflow:ellipsis;white-space:nowrap}}.vp-dropdown-enter-from,.vp-dropdown-leave-to{height:0!important}.vp-navbar-dropdown-wrapper{cursor:pointer}.vp-navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.vp-navbar-dropdown-wrapper:not(.mobile):hover .vp-navbar-dropdown,.vp-navbar-dropdown-wrapper:not(.mobile).open .vp-navbar-dropdown{display:block!important}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown{overflow:hidden;transition:height .1s ease-out;padding-top:.5rem}.vp-navbar-dropdown-wrapper:not(.mobile) .vp-navbar-dropdown{position:absolute;top:100%;right:0;display:none;overflow-y:auto;box-sizing:border-box;height:auto!important;max-height:calc(100vh - 2.7rem);margin:0;padding:.6rem 0;border:1px solid var(--vp-c-gutter);border-radius:.5rem;background-color:var(--vp-c-bg-elv);text-align:left;white-space:nowrap}.vp-navbar-dropdown-title{display:block;padding:inherit;border:none;background:transparent;color:var(--vp-c-text);font-weight:500;font-size:.9rem;font-family:inherit;line-height:1.4rem;cursor:inherit}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-title{display:none}.vp-navbar-dropdown-title:hover{border-color:transparent}.vp-navbar-dropdown-title-mobile{display:none;padding:inherit;border:none;background:transparent;color:var(--vp-c-text);font-weight:600;font-size:inherit;font-family:inherit;line-height:1.4rem;cursor:inherit}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-title-mobile{display:block}.vp-navbar-dropdown-title-mobile:hover{color:var(--vp-c-accent)}.vp-navbar-dropdown-item{color:inherit;line-height:1.7rem}.vp-navbar-dropdown-item .auto-link{position:relative;display:block;margin-bottom:0;padding:0 1.25rem;border-bottom:none;font-weight:400;line-height:1.7rem}.vp-navbar-dropdown-item .auto-link:hover,.vp-navbar-dropdown-item .auto-link.auto-link-active{color:var(--vp-c-accent)}.vp-navbar-dropdown-item .auto-link.auto-link-active:after{content:"";position:absolute;top:calc(50% - 2px);left:9px;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:5px solid var(--vp-c-accent)}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-item>a{font-size:15px;line-height:2rem}.vp-navbar-dropdown-subtitle{margin:.45rem 0 0;padding:1rem 0 .45rem;border-top:1px solid var(--vp-c-gutter);font-size:.9rem}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-subtitle{margin-top:0;padding-top:0;padding-bottom:0;border-top:0;font-size:15px;line-height:2rem}.vp-navbar-dropdown-item:first-child .vp-navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.vp-navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.vp-navbar-dropdown-subtitle>.auto-link{font-weight:inherit}.vp-navbar-dropdown-subtitle>.auto-link.auto-link-active:after{display:none}.vp-navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.vp-navbar-dropdown-subitem{font-size:.9em}.vp-navbar-dropdown-wrapper.mobile .vp-navbar-dropdown-subitem{padding-left:1rem;font-size:14px}.vp-navbar-items{display:inline-block}@media print{.vp-navbar-items{display:none}}.vp-navbar-items .auto-link{color:inherit;line-height:1.4rem}.vp-navbar-items .auto-link:hover,.vp-navbar-items .auto-link.auto-link-active{color:var(--vp-c-text)}.vp-navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}@media (max-width: 719px){.vp-navbar-item{margin-left:0}}.vp-navbar-item:first-child{margin-left:0}.vp-navbar-item .auto-link:hover,.vp-navbar-item .auto-link.auto-link-active{color:var(--vp-c-accent)}.vp-navbar-item>.auto-link{display:inline-block}.vp-navbar-item>.auto-link:hover,.vp-navbar-item>.auto-link.auto-link-active{margin-bottom:-2px;border-bottom:2px solid var(--vp-c-accent)}@media (max-width: 719px){.vp-navbar-item>.auto-link:hover,.vp-navbar-item>.auto-link.auto-link-active{margin-bottom:0;border-bottom:none}}.vp-toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--vp-c-text);opacity:.8;cursor:pointer}@media print{.vp-toggle-color-mode-button{display:none}}.vp-toggle-color-mode-button:hover{opacity:1}.vp-toggle-color-mode-button .light-icon,.vp-toggle-color-mode-button .dark-icon{width:1.25rem;height:1.25rem}.vp-toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}@media screen and (max-width: 719px){.vp-toggle-sidebar-button{display:block}}.vp-toggle-sidebar-button .icon{display:flex;flex-direction:column;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;cursor:inherit}.vp-toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--vp-c-text);transition:transform var(--vp-t-transform)}.vp-toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(1),.vp-theme-container.sidebar-open .vp-toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.vp-navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );position:fixed;top:0;right:0;left:0;z-index:20;box-sizing:border-box;height:var(--navbar-height);padding:var(--navbar-padding-v) var(--navbar-padding-h);border-bottom:1px solid var(--vp-c-border);background-color:var(--vp-navbar-c-bg);line-height:var(--navbar-line-height);transition:background-color var(--vp-t-color),border-color var(--vp-t-color)}@media screen and (max-width: 719px){.vp-navbar{padding-left:4rem}}.vp-navbar-items-wrapper{position:absolute;top:var(--navbar-padding-v);right:var(--navbar-padding-h);display:flex;box-sizing:border-box;height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);font-size:.9rem;white-space:nowrap}.vp-page-meta{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-page-meta{padding:2rem}}@media (max-width: 419px){.vp-page-meta{padding:1.5rem}}.vp-page-meta{display:flex;flex-wrap:wrap;justify-content:space-between;overflow:auto;padding-top:.75rem;padding-bottom:.75rem}@media print{.vp-page-meta{margin:0!important;padding-right:0!important;padding-left:0!important}}@media (max-width: 719px){.vp-page-meta{display:block}}.vp-page-meta .vp-meta-item{flex-grow:1}.vp-page-meta .vp-meta-item .vp-meta-label{font-weight:500}.vp-page-meta .vp-meta-item .vp-meta-label:not(a){color:var(--vp-c-text-mute)}.vp-page-meta .vp-meta-item .vp-meta-info{color:var(--vp-c-text-mute);font-weight:400}.vp-page-meta .git-info{text-align:end}.vp-page-meta .edit-link{margin-top:.25rem;margin-right:.5rem;margin-bottom:.25rem;font-size:14px}@media print{.vp-page-meta .edit-link{display:none}}.vp-page-meta .edit-link .edit-icon{position:relative;bottom:-.125em;width:1em;height:1em;margin-right:.25em}.vp-page-meta .last-updated,.vp-page-meta .contributors{margin-top:.25rem;margin-bottom:.25rem;font-size:14px}@media (max-width: 719px){.vp-page-meta .last-updated,.vp-page-meta .contributors{font-size:13px;text-align:start}}.vp-page-nav{display:flex;flex-wrap:wrap;max-width:var(--content-width, 740px);min-height:2rem;margin-top:0;margin-right:auto;margin-left:auto;padding:1rem 2rem 0;border-top:1px solid var(--vp-c-gutter);transition:border-top var(--vp-t-color)}@media (max-width: 959px){.vp-page-nav{padding-right:1rem;padding-left:1rem}}@media print{.vp-page-nav{display:none}}.vp-page-nav .auto-link{display:inline-block;flex-grow:1;margin:.25rem;padding:.25rem .5rem;border:1px solid var(--vp-c-gutter);border-radius:.25rem}.vp-page-nav .auto-link:hover{background:var(--vp-c-control)}.vp-page-nav .auto-link .hint{color:var(--vp-c-text-mute);font-size:.875rem;line-height:2}.vp-page-nav .prev{text-align:start}.vp-page-nav .next{text-align:end}.vp-page{display:block;padding-top:var(--navbar-height);padding-bottom:2rem;padding-left:var(--sidebar-width)}@media (max-width: 959px){.vp-page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.vp-page{padding-left:0}}.vp-page [vp-content]{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-page [vp-content]{padding:2rem}}@media (max-width: 419px){.vp-page [vp-content]{padding:1.5rem}}.vp-page [vp-content]{padding-top:0}.vp-sidebar-item{border-left:.25rem solid transparent;color:var(--vp-c-text);cursor:default}.vp-sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.vp-sidebar-item.vp-sidebar-heading{box-sizing:border-box;width:100%;margin:0;padding:.35rem 1.5rem .35rem 1.25rem;font-weight:700;font-size:1.1em;transition:color .15s ease}.vp-sidebar-item.vp-sidebar-heading+.vp-sidebar-children{overflow:hidden;transition:height .1s ease-out;margin-bottom:.75rem}.vp-sidebar-item.collapsible{cursor:pointer}.vp-sidebar-item:not(.vp-sidebar-heading){display:inline-block;box-sizing:border-box;width:100%;margin:0;padding:.35rem 1rem .35rem 2rem;font-weight:400;font-size:1em;line-height:1.4}.vp-sidebar-item:not(.vp-sidebar-heading)+.vp-sidebar-children{padding-left:1rem;font-size:.95em}.vp-sidebar-children .vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.vp-sidebar-children .vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading).active{border-left-color:transparent;font-weight:500}a.vp-sidebar-heading+.vp-sidebar-children .vp-sidebar-item:not(.vp-sidebar-heading).active{border-left-color:transparent}.vp-sidebar-item.active:not(p.vp-sidebar-heading){border-left-color:var(--vp-c-accent);color:var(--vp-c-accent);font-weight:600}.vp-sidebar-item .auto-link{display:block}.vp-sidebar-item.auto-link{display:block;cursor:pointer}.vp-sidebar-item.auto-link:hover{color:var(--vp-c-accent)}.vp-sidebar-items{margin:0;padding:1.5rem 0;list-style-type:none}@media (max-width: 719px){.vp-sidebar-items{padding:1rem 0}}.vp-sidebar-items ul{margin:0;padding:0;list-style-type:none}.vp-sidebar{position:fixed;top:var(--navbar-height);bottom:0;left:0;z-index:10;overflow-y:auto;box-sizing:border-box;width:var(--sidebar-width);margin:0;border-right:1px solid var(--vp-c-border);background-color:var(--vp-sidebar-c-bg);font-size:16px;transition:transform var(--vp-t-transform),background-color var(--vp-t-color),border-color var(--vp-t-color);scrollbar-color:var(--vp-c-accent-bg) var(--vp-c-gutter);scrollbar-width:thin}@media (max-width: 959px){.vp-sidebar{width:var(--sidebar-width-mobile);font-size:15px}}@media (max-width: 719px){.vp-sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}}.vp-sidebar::-webkit-scrollbar{width:7px}.vp-sidebar::-webkit-scrollbar-track{background-color:var(--vp-c-gutter)}.vp-sidebar::-webkit-scrollbar-thumb{background-color:var(--vp-c-accent-bg)}.vp-sidebar .vp-navbar-items{display:none;padding:.5rem 0 .75rem;border-bottom:1px solid var(--vp-c-gutter);transition:border-color var(--vp-t-color)}@media (max-width: 719px){.vp-sidebar .vp-navbar-items{display:block}.vp-sidebar .vp-navbar-items .vp-navbar-dropdown-item .route-link-active:after{top:calc(1rem - 2px)}}.vp-sidebar .vp-navbar-items ul{margin:0;padding:0;list-style-type:none}.vp-sidebar .vp-navbar-items .auto-link{font-weight:600}.vp-sidebar .vp-navbar-item{display:block;padding:.5rem 0 .5rem 1.5rem;font-size:1.1em;line-height:1.25rem}.vp-sidebar-mask{position:fixed;top:0;left:0;z-index:9;display:none;width:100vw;height:100vh}.vp-theme-container.no-navbar .vp-sidebar{top:0}@media (max-width: 719px){.vp-theme-container.no-navbar .vp-sidebar{padding-top:0}}.vp-theme-container.no-navbar .vp-page{padding-top:0}.vp-theme-container.no-navbar [vp-content] h1,.vp-theme-container.no-navbar [vp-content] h2,.vp-theme-container.no-navbar [vp-content] h3,.vp-theme-container.no-navbar [vp-content] h4,.vp-theme-container.no-navbar [vp-content] h5,.vp-theme-container.no-navbar [vp-content] h6{margin-top:1.5rem;padding-top:0}.vp-theme-container.no-sidebar .vp-sidebar{display:none}@media (max-width: 719px){.vp-theme-container.no-sidebar .vp-sidebar{display:block}}.vp-theme-container.no-sidebar .vp-page{padding-left:0}@media (max-width: 719px){.vp-theme-container.sidebar-open .vp-sidebar{transform:translate(0)}.vp-theme-container.sidebar-open .vp-sidebar-mask{display:block}}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{opacity:0;transform:translateY(10px)}.vp-theme-container[data-v-2c663dca]{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-theme-container[data-v-2c663dca]{padding:2rem}}:root{--vp-c-white: #fff;--vp-c-black: #000;--vp-c-grey-text: #656869;--vp-c-grey-hover: #e4e4e9;--vp-c-grey-bg: #ebebef;--vp-c-grey-soft: rgb(142 150 170 / 14%);--vp-c-indigo-text: #3451b2;--vp-c-indigo-hover: #3a5ccc;--vp-c-indigo-bg: #5672cd;--vp-c-indigo-soft: rgb(100 108 255 / 14%);--vp-c-purple-text: #6f42c1;--vp-c-purple-hover: #7e4cc9;--vp-c-purple-bg: #8e5cd9;--vp-c-purple-soft: rgb(159 122 234 / 14%);--vp-c-blue-text: #2888a7;--vp-c-blue-hover: #2d98ba;--vp-c-blue-bg: #2fa1c5;--vp-c-blue-soft: rgb(27 178 229 / 14%);--vp-c-green-text: #18794e;--vp-c-green-hover: #299764;--vp-c-green-bg: #30a46c;--vp-c-green-soft: rgb(16 185 129 / 14%);--vp-c-yellow-text: #915930;--vp-c-yellow-hover: #946300;--vp-c-yellow-bg: #c28100;--vp-c-yellow-soft: rgb(234 179 8 / 14%);--vp-c-red-text: #b8272c;--vp-c-red-hover: #d5393e;--vp-c-red-bg: #e0575b;--vp-c-red-soft: rgb(244 63 94 / 14%)}[data-theme=dark]{--vp-c-white: #000;--vp-c-black: #fff;--vp-c-grey-text: #939499;--vp-c-grey-hover: #414853;--vp-c-grey-bg: #32363f;--vp-c-grey-soft: rgb(101 117 133 / 16%);--vp-c-indigo-text: #a8b1ff;--vp-c-indigo-hover: #5c73e7;--vp-c-indigo-bg: #3e63dd;--vp-c-indigo-soft: rgb(100 108 255 / 16%);--vp-c-blue-text: #c9e8f2;--vp-c-blue-hover: #a6d9ea;--vp-c-blue-bg: #2785a3;--vp-c-blue-soft: rgb(27 178 229 / 16%);--vp-c-purple-text: #c8abfa;--vp-c-purple-hover: #a879e6;--vp-c-purple-bg: #8e5cd9;--vp-c-purple-soft: rgb(159 122 234 / 16%);--vp-c-green-text: #3dd68c;--vp-c-green-hover: #30a46c;--vp-c-green-bg: #298459;--vp-c-green-soft: rgb(16 185 129 / 16%);--vp-c-yellow-text: #f9b44e;--vp-c-yellow-hover: #da8b17;--vp-c-yellow-bg: #a46a0a;--vp-c-yellow-soft: rgb(234 179 8 / 16%);--vp-c-red-text: #f66f81;--vp-c-red-hover: #f14158;--vp-c-red-bg: #b62a3c;--vp-c-red-soft: rgb(244 63 94 / 16%)}:root{color-scheme:light}[data-theme=dark]{color-scheme:dark}html,body{background:var(--vp-c-bg, #fff);accent-color:var(--vp-c-accent, #299764);transition:background-color var(--vp-t-color)}html{font-size:16px;font-display:optional;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none}@media print{html{font-size:12pt}}html[data-theme=dark]{color-scheme:dark}body{min-height:100vh;margin:0;padding:0;color:var(--vp-c-text, rgb(60, 60, 67));font-size:1rem;font-synthesis:style}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1{font-size:2rem}h2{padding-bottom:.3rem;border-bottom:1px solid var(--vp-c-gutter, #e2e2e3);font-size:1.65rem;transition:border-color var(--vp-t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}p,ul,ol{line-height:1.6;overflow-wrap:break-word}@media print{p,ul,ol{line-height:1.5}}ul,ol{padding-inline-start:1.2em}a{color:var(--vp-c-accent, #299764);font-weight:500;text-decoration:none;overflow-wrap:break-word}a.header-anchor{position:relative;color:inherit;text-decoration:none}a.header-anchor:before{content:"¶";position:absolute;top:.4167em;left:-.75em;display:none;color:var(--vp-c-accent, #299764);font-size:.75em}[dir=rtl] a.header-anchor:before{right:-.75em}a.header-anchor:hover:before{display:block}a.header-anchor:focus-visible{outline:none}a.header-anchor:focus-visible:before{display:block;outline:auto}strong{font-weight:600}blockquote{margin:1rem 0;padding:.25rem 0 .25rem 1rem;border-inline-start:.2rem solid var(--vp-c-border-hard, #b8b8ba);color:var(--vp-c-text-mute, rgba(60, 60, 67, .78));font-size:1rem;overflow-wrap:break-word;transition:border-color var(--vp-t-color),color var(--vp-t-color)}blockquote>p{margin:0}hr{border:0;border-bottom:1px solid var(--vp-c-gutter, #e2e2e3);transition:border-color var(--vp-t-color)}:not(pre)>code{margin:0;padding:3px 6px;border-radius:4px;background:var(--vp-c-grey-soft, rgba(142, 150, 170, .14));font-size:.875em;overflow-wrap:break-word;transition:background-color var(--vp-t-color),color var(--vp-t-color)}p a code{color:var(--vp-c-accent, #299764);font-weight:400}table code{padding:.1rem .4rem}kbd{display:inline-block;min-width:1em;margin-inline:.125rem;padding:.25em;border:1px solid var(--vp-c-border, #c2c2c4);border-radius:.25em;box-shadow:1px 1px 4px 0 var(--vp-c-shadow, rgba(0, 0, 0, .15));line-height:1;letter-spacing:-.1em;text-align:center}table{display:block;overflow-x:auto;margin:1rem 0;border-collapse:collapse}tbody tr:nth-child(odd){background:var(--vp-c-bg-alt, #f6f8fa);transition:background-color var(--vp-t-color)}th,td{padding:.6em 1em;border:1px solid var(--vp-c-border-hard, #d1d4d7);transition:border-color var(--vp-t-color)}pre{text-align:left;direction:ltr;white-space:pre;word-spacing:normal;word-wrap:normal;word-break:normal;overflow-wrap:unset;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}@media print{pre{white-space:pre-wrap}}pre code{padding:0;border-radius:0}@page{margin:2cm;font-size:12pt;size:a4}@media print{*,:after,:before{box-shadow:none!important;text-shadow:none!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}a{color:inherit;font-weight:inherit!important;font-size:inherit!important;text-decoration:underline}a.header-anchor{text-decoration:none}abbr[title]:after{content:" (" attr(title) ")"}pre{border:1px solid #eee;white-space:pre-wrap!important}pre>code{white-space:pre-wrap!important}blockquote{border-inline-start:.2rem solid #ddd;color:inherit}blockquote,pre{orphans:5;widows:5}img,tr,canvas{page-break-inside:avoid}}@media (prefers-reduced-motion: reduce){*,:before,:after{background-attachment:initial!important;scroll-behavior:auto!important;transition-delay:0s!important;transition-duration:0s!important;animation-duration:1ms!important;animation-delay:-1ms!important;animation-iteration-count:1!important}}:root{--vp-c-accent: #299764;--vp-c-accent-bg: #3eaf7c;--vp-c-accent-hover: #4abf8a;--vp-c-accent-text: var(--vp-c-white);--vp-c-accent-soft: rgb(16 185 129 / 14%);--vp-c-bg: #fff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #fff;--vp-c-text: rgb(60 60 67);--vp-c-text-mute: rgb(60 60 67 / 78%);--vp-c-text-subtle: rgb(60 60 67 / 56%);--vp-c-gutter: #e2e2e3;--vp-c-border: #c2c2c4;--vp-c-border-hard: #b8b8ba;--vp-c-shadow: rgb(0 0 0 / 15%);--vp-c-control: rgb(142 150 170 / 10%);--vp-c-control-hover: rgb(142 150 170 / 16%);--vp-c-control-disabled: #eaeaea;--vp-navbar-c-bg: var(--vp-c-bg);--vp-sidebar-c-bg: var(--vp-c-bg);--vp-c-code-tab-title: var(--code-c-text, rgb(255 255 255 / 90%));--vp-c-code-tab-bg: var(--code-bg-color, var(--code-c-bg));--vp-c-code-tab-active: var(--vp-c-accent);--badge-c-tip-text: var(--vp-c-green-text);--badge-c-tip-bg: var(--vp-c-green-soft);--badge-c-warning-text: var(--vp-c-yellow-text);--badge-c-warning-bg: var(--vp-c-yellow-soft);--badge-c-danger-text: var(--vp-c-red-text);--badge-c-danger-bg: var(--vp-c-red-soft);--badge-c-important-text: var(--vp-c-purple-text);--badge-c-important-bg: var(--vp-c-purple-soft);--badge-c-info-text: var(--vp-c-indigo-text);--badge-c-info-bg: var(--vp-c-indigo-soft);--badge-c-note-text: var(--vp-c-grey-text);--badge-c-note-bg: var(--vp-c-grey-soft);--font-family: -apple-system, "BlinkMacSystemFont", "Segoe UI", roboto, oxygen, ubuntu, cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px;--header-offset: var(--navbar-height);--vp-t-color: .3s ease;--vp-t-transform: .3s ease;--external-link-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0V0z' fill='none'/%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z'/%3E%3C/svg%3E");--external-link-c-icon: var(--vp-c-text-mute)}[data-theme=dark]{--vp-c-accent: #3dd68c;--vp-c-accent-bg: #3aa675;--vp-c-accent-hover: #349469;--vp-c-accent-soft: rgb(16 185 129 / 16%);--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-text: rgb(235 235 245 / 86%);--vp-c-text-mute: rgb(235 235 245 / 60%);--vp-c-text-subtle: rgb(235 235 245 / 38%);--vp-c-gutter: #000;--vp-c-border: #3c3f44;--vp-c-border-hard: #45484e;--vp-c-shadow: rgb(0 0 0 / 30%);--vp-c-control: rgb(101 117 133 / 12%);--vp-c-control-hover: rgb(101 117 133 / 18%);--vp-c-control-disabled: #363636}body{font-family:var(--font-family)}code{font-family:var(--code-font-family)}[vp-content] h1,[vp-content] h2,[vp-content] h3,[vp-content] h4,[vp-content] h5,[vp-content] h6{margin-top:calc(.5rem - var(--header-offset));margin-bottom:0;padding-top:calc(1rem + var(--header-offset))}[vp-content] h1:first-child,[vp-content] h2:first-child,[vp-content] h3:first-child,[vp-content] h4:first-child,[vp-content] h5:first-child,[vp-content] h6:first-child{margin-bottom:1rem}[vp-content] h1:first-child+p,[vp-content] h1:first-child+pre,[vp-content] h1:first-child+.custom-container,[vp-content] h2:first-child+p,[vp-content] h2:first-child+pre,[vp-content] h2:first-child+.custom-container,[vp-content] h3:first-child+p,[vp-content] h3:first-child+pre,[vp-content] h3:first-child+.custom-container,[vp-content] h4:first-child+p,[vp-content] h4:first-child+pre,[vp-content] h4:first-child+.custom-container,[vp-content] h5:first-child+p,[vp-content] h5:first-child+pre,[vp-content] h5:first-child+.custom-container,[vp-content] h6:first-child+p,[vp-content] h6:first-child+pre,[vp-content] h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 419px){[vp-content] h1{font-size:1.9rem}}[vp-content] a:not(.header-anchor){text-decoration:underline}[vp-content] img{max-width:100%}div[class*=language-]{margin:.75rem 0;transition:background-color var(--vp-t-color),color var(--vp-t-color)}@media (max-width: 419px){div[class*=language-]{--code-border-radius: 0;margin:.75rem -1.5rem}}div[class*=language-] .line.diff,div[class*=language-] .line.highlighted{transition:background-color var(--vp-t-color)}.table-of-contents .vp-badge{vertical-align:middle}.arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;line-height:normal;transition:all .3s}[data-theme=dark] .arrow{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(255,255,255,0.5)' d='M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z'/%3E%3C/svg%3E")}.arrow.down{transform:rotate(180deg)}.arrow.right{transform:rotate(90deg)}.arrow.left{transform:rotate(-90deg)}.vp-external-link-icon:after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-c-icon);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}.external-link-icon .external-link:after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-c-icon);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}.external-link-icon [vp-content] a[href*="://"]:not(.no-external-link-icon):after,.external-link-icon [vp-content] a[target=_blank]:not(.no-external-link-icon):after{content:"";display:inline-block;flex-shrink:0;width:11px;height:11px;margin-top:-1px;margin-left:4px;background:var(--external-link-c-icon);-webkit-mask-image:var(--external-link-icon);mask-image:var(--external-link-icon)}@media screen and (max-width: 719px){.vp-hide-mobile{display:none}}.vp-comment{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.vp-comment{padding:2rem}}@media (max-width: 419px){.vp-comment{padding:1.5rem}}.vp-navbar .DocSearch{transition:background-color var(--vp-t-color)}.vp-navbar .search-box{vertical-align:top;flex:0 0 auto}@media screen and (max-width: 719px){.hint-container{margin-inline:-.75rem}}.lang-modal-fade-enter-active,.lang-modal-fade-leave-active{transition:opacity .5s}.lang-modal-fade-enter,.lang-modal-fade-leave-to{opacity:0}.lang-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1499;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}@media print{.lang-modal-mask{display:none}}.lang-modal-wrapper{position:relative;z-index:1500;overflow:hidden;max-width:80vw;padding:1rem 2rem;border-radius:8px;background:var(--vp-bg);box-shadow:0 2px 6px 0 var(--card-shadow)}.lang-modal-action{display:block;width:100%;margin:1rem 0;padding:.5rem .75rem;border:none;border-radius:8px;background-color:var(--vp-bglt);color:var(--vp-c);cursor:pointer}.lang-modal-action:hover{background-color:var(--vp-bgl)}.lang-modal-action.primary{background-color:var(--vp-tc);color:var(--white)}.lang-modal-action.primary:hover{background-color:var(--vp-tcl)}.grey{color:#0006}.works-table-wrapper[data-v-765855fb]{margin:0 auto;padding:0 2rem;max-width:1224px;box-sizing:border-box}.works-table-wrapper[data-v-765855fb] table{width:100%}:root{--content-width: 960px}.vp-page .theme-default-content{padding-bottom:0!important}.vp-page-meta{display:none} diff --git a/assets/works.html-CxTlsMbW.js b/assets/works.html-CoXhcHQf.js similarity index 99% rename from assets/works.html-CxTlsMbW.js rename to assets/works.html-CoXhcHQf.js index ade8581..3b84288 100644 --- a/assets/works.html-CxTlsMbW.js +++ b/assets/works.html-CoXhcHQf.js @@ -1 +1 @@ -import{_ as r,c as i,e as l,o as a}from"./app-B-ZDtWHa.js";const t={};function o(n,e){return a(),i("div",null,e[0]||(e[0]=[l('<h2 id="выделенныи-опыт-работы" tabindex="-1"><a class="header-anchor" href="#выделенныи-опыт-работы"><span>Выделенный опыт работы</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Даты: Август 2018 – по настоящее время</li><li>Роли: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Разработка инструмента управления проектами для дизайнеров интерьера.</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Стек: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Перенес триггеры базы данных в бизнес-логику. Проще стало читать код, вносить изменение и система стала надежнее.</li><li>Ввёл практику написания unit тестов и интеграционных тестов. Самолично написал более 70% всех тестов.</li><li>Добавил GraphQL подписки для динамичного обновления.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Стек: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Сформировал UIKit и общие компоненты, оптимизировал сложные и нагруженные компоненты.</li><li>Изменил работу с API на фронтенде.</li><li>Внедрил практику написания интеграционных тестов с помощью cypress.</li><li>Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.</li></ul><h5 id="руководство-командои" tabindex="-1"><a class="header-anchor" href="#руководство-командои"><span>Руководство командой</span></a></h5><ul><li>Ввёл практику TDD (Test-Driven Development).</li><li>Я привнес в проект "метод критической цепи", "метод буфера" и "метод планирования с конца". Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями.</li><li>Составлял индивидуальный план развития для членов команды.</li></ul><h5 id="архитектура" tabindex="-1"><a class="header-anchor" href="#архитектура"><span>Архитектура</span></a></h5><ul><li>Разбил всю кодовую базу на модули по фичам.</li><li>Ускорил базу данных <code>PostgreSQL</code>, разбив данные компаний по отдельным схемам и применив партиципирование таблиц.</li><li>Добавил кеширование запросов с <code>Redis</code>.</li><li>Уменьшил затраты на инфраструткуру в 5 раз, перенес весь проект с kubernetes на <code>NixOS</code>.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка бэк-офиса для социальной платформы Core Spirit.</p><ul><li>Интегрировал Dependabot, который помог обновить все устаревшие зависимости. Заменил webpack на vite.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Даты: Май 2018 - по настоящее время (Пассивная поддержка)</li><li>Роль: Tech Lead</li></ul><p>Разработка веб-инфраструктуры образовательного центра Мастер Прогресс.</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">Главного сайта</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Кабинета студента</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">Инструмента для работы с rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>Создана полная инфраструктура на <code>NixOS</code>. До этого создал инфраструктуру используя <code>Drone CI</code> / <code>Woodpecker CI</code> и <code>Docker swarm</code>, которая проработала более 5 лет.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Даты: Август 2018 - May 2020, Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка социальной платформы, сфокусированной на улучшении человека и планеты.</p><ul><li>REST API (<code>Node.JS</code>, <code>Express</code>, <code>PostgreSQL</code>) для основного сайта и бэк-офиса. Успел поработать с новой версией REST API на <code>Go</code>, <code>PostgreSQL</code></li><li>Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).</li><li>Создал нейронную сеть для автоматической категоризации статей.</li></ul><hr><h3 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h3><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>В этой компании было 6 значительных проектов, которые я успешно завершил:</p><ul><li>Оптимизация создания рекламных страниц (PHP, JavaScript)</li><li>Поддержка основного традиционного сайта <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)</li><li>Работа с нейронными сетями для подбора товаров</li><li>Разработка приложений для распознавания лиц для Android (Java)</li></ul><hr><h2 id="хронология" tabindex="-1"><a class="header-anchor" href="#хронология"><span>Хронология</span></a></h2><p>В списке перечислены только публичные проекты.</p>',37)]))}const c=r(t,[["render",o],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/works.html","title":"Работы","lang":"ru-RU","frontmatter":{"title":"Работы","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Работы"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-10-15T14:10:49.000Z"}],["meta",{"property":"article:modified_time","content":"2024-10-15T14:10:49.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Работы\\"}"]]},"headers":[{"level":2,"title":"Выделенный опыт работы","slug":"выделенныи-опыт-работы","link":"#выделенныи-опыт-работы","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]},{"level":3,"title":"MERLION","slug":"merlion","link":"#merlion","children":[]}]},{"level":2,"title":"Хронология","slug":"хронология","link":"#хронология","children":[]}],"git":{"updatedTime":1729001449000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":8}]},"filePathRelative":"works.md"}');export{c as comp,d as data}; +import{_ as r,c as i,e as l,o as a}from"./app-Dje5btuz.js";const t={};function o(n,e){return a(),i("div",null,e[0]||(e[0]=[l('<h2 id="выделенныи-опыт-работы" tabindex="-1"><a class="header-anchor" href="#выделенныи-опыт-работы"><span>Выделенный опыт работы</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Даты: Август 2018 – по настоящее время</li><li>Роли: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Разработка инструмента управления проектами для дизайнеров интерьера.</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Стек: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Перенес триггеры базы данных в бизнес-логику. Проще стало читать код, вносить изменение и система стала надежнее.</li><li>Ввёл практику написания unit тестов и интеграционных тестов. Самолично написал более 70% всех тестов.</li><li>Добавил GraphQL подписки для динамичного обновления.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Стек: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Сформировал UIKit и общие компоненты, оптимизировал сложные и нагруженные компоненты.</li><li>Изменил работу с API на фронтенде.</li><li>Внедрил практику написания интеграционных тестов с помощью cypress.</li><li>Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.</li></ul><h5 id="руководство-командои" tabindex="-1"><a class="header-anchor" href="#руководство-командои"><span>Руководство командой</span></a></h5><ul><li>Ввёл практику TDD (Test-Driven Development).</li><li>Я привнес в проект "метод критической цепи", "метод буфера" и "метод планирования с конца". Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями.</li><li>Составлял индивидуальный план развития для членов команды.</li></ul><h5 id="архитектура" tabindex="-1"><a class="header-anchor" href="#архитектура"><span>Архитектура</span></a></h5><ul><li>Разбил всю кодовую базу на модули по фичам.</li><li>Ускорил базу данных <code>PostgreSQL</code>, разбив данные компаний по отдельным схемам и применив партиципирование таблиц.</li><li>Добавил кеширование запросов с <code>Redis</code>.</li><li>Уменьшил затраты на инфраструткуру в 5 раз, перенес весь проект с kubernetes на <code>NixOS</code>.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка бэк-офиса для социальной платформы Core Spirit.</p><ul><li>Интегрировал Dependabot, который помог обновить все устаревшие зависимости. Заменил webpack на vite.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Даты: Май 2018 - по настоящее время (Пассивная поддержка)</li><li>Роль: Tech Lead</li></ul><p>Разработка веб-инфраструктуры образовательного центра Мастер Прогресс.</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">Главного сайта</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Кабинета студента</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">Инструмента для работы с rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>Создана полная инфраструктура на <code>NixOS</code>. До этого создал инфраструктуру используя <code>Drone CI</code> / <code>Woodpecker CI</code> и <code>Docker swarm</code>, которая проработала более 5 лет.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Даты: Август 2018 - May 2020, Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка социальной платформы, сфокусированной на улучшении человека и планеты.</p><ul><li>REST API (<code>Node.JS</code>, <code>Express</code>, <code>PostgreSQL</code>) для основного сайта и бэк-офиса. Успел поработать с новой версией REST API на <code>Go</code>, <code>PostgreSQL</code></li><li>Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).</li><li>Создал нейронную сеть для автоматической категоризации статей.</li></ul><hr><h3 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h3><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>В этой компании было 6 значительных проектов, которые я успешно завершил:</p><ul><li>Оптимизация создания рекламных страниц (PHP, JavaScript)</li><li>Поддержка основного традиционного сайта <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)</li><li>Работа с нейронными сетями для подбора товаров</li><li>Разработка приложений для распознавания лиц для Android (Java)</li></ul><hr><h2 id="хронология" tabindex="-1"><a class="header-anchor" href="#хронология"><span>Хронология</span></a></h2><p>В списке перечислены только публичные проекты.</p>',37)]))}const c=r(t,[["render",o],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/works.html","title":"Работы","lang":"ru-RU","frontmatter":{"title":"Работы","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:site_name","content":"Дмитрий Плешевский"}],["meta",{"property":"og:title","content":"Работы"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"ru-RU"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["meta",{"property":"og:updated_time","content":"2024-10-15T14:10:49.000Z"}],["meta",{"property":"article:modified_time","content":"2024-10-15T14:10:49.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Работы\\"}"]]},"headers":[{"level":2,"title":"Выделенный опыт работы","slug":"выделенныи-опыт-работы","link":"#выделенныи-опыт-работы","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]},{"level":3,"title":"MERLION","slug":"merlion","link":"#merlion","children":[]}]},{"level":2,"title":"Хронология","slug":"хронология","link":"#хронология","children":[]}],"git":{"updatedTime":1729001449000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":8}]},"filePathRelative":"works.md"}');export{c as comp,d as data}; diff --git a/assets/works.html-DEB0fTtn.js b/assets/works.html-CvAIW4-p.js similarity index 99% rename from assets/works.html-DEB0fTtn.js rename to assets/works.html-CvAIW4-p.js index 3882757..3be5678 100644 --- a/assets/works.html-DEB0fTtn.js +++ b/assets/works.html-CvAIW4-p.js @@ -1 +1 @@ -import{_ as t,c as r,e as a,o as i}from"./app-B-ZDtWHa.js";const o={};function n(l,e){return i(),r("div",null,e[0]||(e[0]=[a('<h2 id="highlighted-working-experience" tabindex="-1"><a class="header-anchor" href="#highlighted-working-experience"><span>Highlighted working experience</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Dates: August 2018 – currently</li><li>Roles: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Development of a Project Management Tool for Interior Designers</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Stack: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Migrated database triggers into business logic. Code became easier to read and maintain, and the system became more reliable.</li><li>Introduced unit testing and integration testing practices. I wrote over 70% of all tests myself.</li><li>Added GraphQL subscriptions for dynamic updates.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Stack: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Formed a UIKit and general components, optimized complex and loaded components.</li><li>Changed API work on the frontend.</li><li>Introduced integration testing practice using Cypress.</li><li>Migrated the entire project to TypeScript. Created isolated system modules.</li></ul><h5 id="leadership-of-the-team" tabindex="-1"><a class="header-anchor" href="#leadership-of-the-team"><span>Leadership of the Team</span></a></h5><ul><li>Introduced TDD (Test-Driven Development) practices.</li><li>Brought the "Critical Chain Method", the "Buffer Method", and the "Backward Planning" method into the project. Helped the team get in sync, releasing small batches every week.</li><li>Created individual development plans for team members.</li></ul><h5 id="architecture" tabindex="-1"><a class="header-anchor" href="#architecture"><span>Architecture</span></a></h5><ul><li>Broke down the entire codebase into modules by feature.</li><li>Optimized <code>PostgreSQL</code> database, splitting company data into separate schemas and applying partitioning tables.</li><li>Added query caching with Redis.</li><li>Reduced infrastructure costs by 5 times, migrating the project from Kubernetes to NixOS.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - currently</li><li>Роль: Lead Fullstack Developer</li></ul><p>Development of the Back Office for Core Spirit social platform.</p><ul><li>Integrated <code>Dependabot</code>, which helped update all outdated dependencies. Replaced webpack with <code>vite</code>.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Dates: May 2018 - currently (Passively maintained)</li><li>Role: Tech Lead</li></ul><p>Development web infrastructure of the educational center Master Progress</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">The main site</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Student's cabinet</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">A tool for rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>A complete infrastructure was created on <code>NixOS</code>. Before that, I had created an infrastructure using <code>Drone CI</code> / <code>Woodpecker CI</code> and <code>Docker swarm</code>, which has been running for over 5 years.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Dates: August 2018 - May 2020, August 2024 - currently</li><li>Role: Lead Fullstack Developer</li></ul><p>Development of Social platform focusing on human and planetary enhancement.</p><ul><li>A REST API (using <code>Node.JS</code>, <code>Express</code>, and <code>PostgreSQL</code>) for the main website and back office. I also got to work with a new version of the REST API using <code>Go</code> and <code>PostgreSQL</code>.</li><li>Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).</li><li>Neural network for automatic categorization of articles.</li></ul><hr><h4 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h4><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>In this company there were 6 considerable projects I have successfully completed:</p><ul><li>optimize the creation of promotional pages (PHP, JavaScript)</li><li>support main traditional site <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)</li><li>work with neural networks for matching of goods</li><li>development face recognition apps for Android (Java)</li></ul><hr><h2 id="chronology" tabindex="-1"><a class="header-anchor" href="#chronology"><span>Chronology</span></a></h2><p>Public projects only.</p>',37)]))}const c=t(o,[["render",n],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/eng/works.html","title":"Works","lang":"en-US","frontmatter":{"title":"Works","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Works"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-08-07T08:48:54.000Z"}],["meta",{"property":"article:modified_time","content":"2024-08-07T08:48:54.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Works\\"}"]]},"headers":[{"level":2,"title":"Highlighted working experience","slug":"highlighted-working-experience","link":"#highlighted-working-experience","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]}]},{"level":2,"title":"Chronology","slug":"chronology","link":"#chronology","children":[]}],"git":{"updatedTime":1723020534000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":6}]},"filePathRelative":"eng/works.md"}');export{c as comp,d as data}; +import{_ as t,c as r,e as a,o as i}from"./app-Dje5btuz.js";const o={};function n(l,e){return i(),r("div",null,e[0]||(e[0]=[a('<h2 id="highlighted-working-experience" tabindex="-1"><a class="header-anchor" href="#highlighted-working-experience"><span>Highlighted working experience</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Dates: August 2018 – currently</li><li>Roles: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Development of a Project Management Tool for Interior Designers</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Stack: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Migrated database triggers into business logic. Code became easier to read and maintain, and the system became more reliable.</li><li>Introduced unit testing and integration testing practices. I wrote over 70% of all tests myself.</li><li>Added GraphQL subscriptions for dynamic updates.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Stack: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Formed a UIKit and general components, optimized complex and loaded components.</li><li>Changed API work on the frontend.</li><li>Introduced integration testing practice using Cypress.</li><li>Migrated the entire project to TypeScript. Created isolated system modules.</li></ul><h5 id="leadership-of-the-team" tabindex="-1"><a class="header-anchor" href="#leadership-of-the-team"><span>Leadership of the Team</span></a></h5><ul><li>Introduced TDD (Test-Driven Development) practices.</li><li>Brought the "Critical Chain Method", the "Buffer Method", and the "Backward Planning" method into the project. Helped the team get in sync, releasing small batches every week.</li><li>Created individual development plans for team members.</li></ul><h5 id="architecture" tabindex="-1"><a class="header-anchor" href="#architecture"><span>Architecture</span></a></h5><ul><li>Broke down the entire codebase into modules by feature.</li><li>Optimized <code>PostgreSQL</code> database, splitting company data into separate schemas and applying partitioning tables.</li><li>Added query caching with Redis.</li><li>Reduced infrastructure costs by 5 times, migrating the project from Kubernetes to NixOS.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - currently</li><li>Роль: Lead Fullstack Developer</li></ul><p>Development of the Back Office for Core Spirit social platform.</p><ul><li>Integrated <code>Dependabot</code>, which helped update all outdated dependencies. Replaced webpack with <code>vite</code>.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Dates: May 2018 - currently (Passively maintained)</li><li>Role: Tech Lead</li></ul><p>Development web infrastructure of the educational center Master Progress</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">The main site</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Student's cabinet</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">A tool for rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>A complete infrastructure was created on <code>NixOS</code>. Before that, I had created an infrastructure using <code>Drone CI</code> / <code>Woodpecker CI</code> and <code>Docker swarm</code>, which has been running for over 5 years.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Dates: August 2018 - May 2020, August 2024 - currently</li><li>Role: Lead Fullstack Developer</li></ul><p>Development of Social platform focusing on human and planetary enhancement.</p><ul><li>A REST API (using <code>Node.JS</code>, <code>Express</code>, and <code>PostgreSQL</code>) for the main website and back office. I also got to work with a new version of the REST API using <code>Go</code> and <code>PostgreSQL</code>.</li><li>Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).</li><li>Neural network for automatic categorization of articles.</li></ul><hr><h4 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h4><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>In this company there were 6 considerable projects I have successfully completed:</p><ul><li>optimize the creation of promotional pages (PHP, JavaScript)</li><li>support main traditional site <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)</li><li>work with neural networks for matching of goods</li><li>development face recognition apps for Android (Java)</li></ul><hr><h2 id="chronology" tabindex="-1"><a class="header-anchor" href="#chronology"><span>Chronology</span></a></h2><p>Public projects only.</p>',37)]))}const c=t(o,[["render",n],["__file","works.html.vue"]]),d=JSON.parse('{"path":"/eng/works.html","title":"Works","lang":"en-US","frontmatter":{"title":"Works","layout":"WorksPage","sidebar":false,"head":[["link",{"rel":"alternate","hreflang":"ru-ru","href":"https://pleshevski.ru/works.html"}],["meta",{"property":"og:url","content":"https://pleshevski.ru/eng/works.html"}],["meta",{"property":"og:site_name","content":"Dmitriy Pleshevskiy"}],["meta",{"property":"og:title","content":"Works"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"ru-RU"}],["meta",{"property":"og:updated_time","content":"2024-08-07T08:48:54.000Z"}],["meta",{"property":"article:modified_time","content":"2024-08-07T08:48:54.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"Works\\"}"]]},"headers":[{"level":2,"title":"Highlighted working experience","slug":"highlighted-working-experience","link":"#highlighted-working-experience","children":[{"level":3,"title":"Binary Management","slug":"binary-management","link":"#binary-management","children":[]},{"level":3,"title":"Core Spirit (Back Office)","slug":"core-spirit-back-office","link":"#core-spirit-back-office","children":[]},{"level":3,"title":"Master Progress","slug":"master-progress","link":"#master-progress","children":[]},{"level":3,"title":"Core Spirit","slug":"core-spirit","link":"#core-spirit","children":[]}]},{"level":2,"title":"Chronology","slug":"chronology","link":"#chronology","children":[]}],"git":{"updatedTime":1723020534000,"contributors":[{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@ideascup.me","commits":1},{"name":"Dmitriy Pleshevskiy","username":"Dmitriy Pleshevskiy","email":"dmitriy@pleshevski.ru","commits":6}]},"filePathRelative":"eng/works.md"}');export{c as comp,d as data}; diff --git a/eng/index.html b/eng/index.html index e6339a1..4937d4a 100644 --- a/eng/index.html +++ b/eng/index.html @@ -32,12 +32,12 @@ } </script> <link rel="alternate" hreflang="ru-ru" href="https://pleshevski.ru/"><meta property="og:url" content="https://pleshevski.ru/eng/"><meta property="og:site_name" content="Dmitriy Pleshevskiy"><meta property="og:title" content="Resume"><meta property="og:type" content="website"><meta property="og:locale" content="en-US"><meta property="og:locale:alternate" content="ru-RU"><meta property="og:updated_time" content="2024-09-05T22:11:51.000Z"><meta property="article:modified_time" content="2024-09-05T22:11:51.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Resume"}</script><title>Resume | Dmitriy Pleshevskiy</title><meta name="description" content=" "> - <link rel="preload" href="/assets/style-CAeyyXIN.css" as="style"><link rel="stylesheet" href="/assets/style-CAeyyXIN.css"> - <link rel="modulepreload" href="/assets/app-B-ZDtWHa.js"><link rel="modulepreload" href="/assets/index.html-gQkWNf7r.js"> - <link rel="prefetch" href="/assets/index.html-DH5daCIZ.js" as="script"><link rel="prefetch" href="/assets/works.html-CxTlsMbW.js" as="script"><link rel="prefetch" href="/assets/works.html-DEB0fTtn.js" as="script"><link rel="prefetch" href="/assets/404.html-BEjpQkgy.js" as="script"> + <link rel="preload" href="/assets/style-ZWWWXdHC.css" as="style"><link rel="stylesheet" href="/assets/style-ZWWWXdHC.css"> + <link rel="modulepreload" href="/assets/app-Dje5btuz.js"><link rel="modulepreload" href="/assets/index.html-KbtCZdft.js"> + <link rel="prefetch" href="/assets/index.html-D2w7c-Qe.js" as="script"><link rel="prefetch" href="/assets/works.html-CoXhcHQf.js" as="script"><link rel="prefetch" href="/assets/works.html-CvAIW4-p.js" as="script"><link rel="prefetch" href="/assets/404.html-DQUw13HV.js" as="script"> </head> <body> <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/eng/"><!----><span class="vp-site-name" aria-hidden="true">Dmitriy Pleshevskiy</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-home"><header class="vp-hero"><!----><!----><p class="vp-hero-description"> </p><!----></header><!----><div vp-content><div><p>Always up-to-date link to <a class="route-link" href="/eng/">resume</a>.</p><h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview"><span>Overview</span></a></h2><p>My name is Dmitriy Pleshevskiy.</p><p>I'm an open source software enthusiast, a lead software developer, architect, team leader and also mentor.</p><h2 id="skills" tabindex="-1"><a class="header-anchor" href="#skills"><span>Skills</span></a></h2><h4 id="programming-languages" tabindex="-1"><a class="header-anchor" href="#programming-languages"><span>Programming Languages:</span></a></h4><ul><li>TypeScript (prefer, solid 9-year exp)</li><li>SQL (prefer, solid 8-year exp)</li><li>Rust (prefer, solid 5-year exp)</li><li>Python (solid 9-year exp)</li><li>Haskell</li><li>Bash (8-year exp)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="repositories" tabindex="-1"><a class="header-anchor" href="#repositories"><span>Repositories:</span></a></h4><ul><li>PostgreSQL (prefer, solid 8-year exp)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (prefer, solid 5-year exp)</li></ul><hr><p>I also have extensive experience in creating the following applications:</p><ul><li>Traditional (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Dynamic (SPA)</li><li>Hybrid (SSR + SPA)</li><li>Console</li><li>Cross-platform</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (prefer, solid 2-year exp)</li><li><code>async-graphql</code> (prefer, solid 2-year exp)</li><li><code>shaku</code> (prefer, solid 2-year exp)</li><li><code>bb8</code> + <code>postgres-types</code> (prefer, solid 5-year exp)</li><li><code>diesel</code> (2-year exp)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (solid 5-year exp)</li><li><code>Express</code> (solid 9-year exp)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (solid 5-year exp)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (solid 8-year exp)</li><li><code>VueJS</code> (prefer, solid 3-year exp)</li><li><code>Cypress</code> (prefer, solid 3-year exp)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (prefer, solid 5-year exp)</li><li><code>Sass</code> (prefer, solid 8-year exp)</li><li><code>Less</code> (weak 4-year exp)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (prefer, solid 3-year exp)</li><li><code>Docker Swarm</code> (solid 6-year exp)</li><li><code>Kubernetes</code> (weak 5-year exp)</li><li><code>Woodpecker CI</code> (prefer, solid 4-year exp)</li><li><code>Drone CI</code> (solid 3-year exp)</li><li><code>Gitlab CI</code> (solid 7-year exp)</li><li><code>GitHub Actions</code> (4-year exp)</li></ul><h2 id="interests" tabindex="-1"><a class="header-anchor" href="#interests"><span>Interests</span></a></h2><p>Open-source projects are my passion! I develop, maintain and improve projects in my spare time.</p><p>Besides programming, I love to cook and spend time with my beloved family!</p><h2 id="contacts" tabindex="-1"><a class="header-anchor" href="#contacts"><span>Contacts</span></a></h2><p>Simplex (Prefer): <a href="https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="links" tabindex="-1"><a class="header-anchor" href="#links"><span>Links</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Suspended)</a></li></ul></div></div><!----></main><!--]--></div><!--[--><!----><!--]--><!--]--></div> - <script type="module" src="/assets/app-B-ZDtWHa.js" defer></script> + <script type="module" src="/assets/app-Dje5btuz.js" defer></script> </body> </html> diff --git a/eng/works.html b/eng/works.html index 3bb8ab9..3abe8e8 100644 --- a/eng/works.html +++ b/eng/works.html @@ -32,12 +32,12 @@ } </script> <link rel="alternate" hreflang="ru-ru" href="https://pleshevski.ru/works.html"><meta property="og:url" content="https://pleshevski.ru/eng/works.html"><meta property="og:site_name" content="Dmitriy Pleshevskiy"><meta property="og:title" content="Works"><meta property="og:type" content="website"><meta property="og:locale" content="en-US"><meta property="og:locale:alternate" content="ru-RU"><meta property="og:updated_time" content="2024-08-07T08:48:54.000Z"><meta property="article:modified_time" content="2024-08-07T08:48:54.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Works"}</script><title>Works | Dmitriy Pleshevskiy</title><meta name="description" content=" "> - <link rel="preload" href="/assets/style-CAeyyXIN.css" as="style"><link rel="stylesheet" href="/assets/style-CAeyyXIN.css"> - <link rel="modulepreload" href="/assets/app-B-ZDtWHa.js"><link rel="modulepreload" href="/assets/works.html-DEB0fTtn.js"> - <link rel="prefetch" href="/assets/index.html-DH5daCIZ.js" as="script"><link rel="prefetch" href="/assets/works.html-CxTlsMbW.js" as="script"><link rel="prefetch" href="/assets/index.html-gQkWNf7r.js" as="script"><link rel="prefetch" href="/assets/404.html-BEjpQkgy.js" as="script"> + <link rel="preload" href="/assets/style-ZWWWXdHC.css" as="style"><link rel="stylesheet" href="/assets/style-ZWWWXdHC.css"> + <link rel="modulepreload" href="/assets/app-Dje5btuz.js"><link rel="modulepreload" href="/assets/works.html-CvAIW4-p.js"> + <link rel="prefetch" href="/assets/index.html-D2w7c-Qe.js" as="script"><link rel="prefetch" href="/assets/works.html-CoXhcHQf.js" as="script"><link rel="prefetch" href="/assets/index.html-KbtCZdft.js" as="script"><link rel="prefetch" href="/assets/404.html-DQUw13HV.js" as="script"> </head> <body> <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container data-v-765855fb><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/eng/"><!----><span class="vp-site-name" aria-hidden="true">Dmitriy Pleshevskiy</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/eng/" aria-label="Resume"><!--[--><!--[--><!--]--><!--]-->Resume<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="Works"><!--[--><!--[--><!--]--><!--]-->Works<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div vp-content><!--[--><!--]--><div><h2 id="highlighted-working-experience" tabindex="-1"><a class="header-anchor" href="#highlighted-working-experience"><span>Highlighted working experience</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Dates: August 2018 – currently</li><li>Roles: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Development of a Project Management Tool for Interior Designers</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Stack: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Migrated database triggers into business logic. Code became easier to read and maintain, and the system became more reliable.</li><li>Introduced unit testing and integration testing practices. I wrote over 70% of all tests myself.</li><li>Added GraphQL subscriptions for dynamic updates.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Stack: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Formed a UIKit and general components, optimized complex and loaded components.</li><li>Changed API work on the frontend.</li><li>Introduced integration testing practice using Cypress.</li><li>Migrated the entire project to TypeScript. Created isolated system modules.</li></ul><h5 id="leadership-of-the-team" tabindex="-1"><a class="header-anchor" href="#leadership-of-the-team"><span>Leadership of the Team</span></a></h5><ul><li>Introduced TDD (Test-Driven Development) practices.</li><li>Brought the "Critical Chain Method", the "Buffer Method", and the "Backward Planning" method into the project. Helped the team get in sync, releasing small batches every week.</li><li>Created individual development plans for team members.</li></ul><h5 id="architecture" tabindex="-1"><a class="header-anchor" href="#architecture"><span>Architecture</span></a></h5><ul><li>Broke down the entire codebase into modules by feature.</li><li>Optimized <code>PostgreSQL</code> database, splitting company data into separate schemas and applying partitioning tables.</li><li>Added query caching with Redis.</li><li>Reduced infrastructure costs by 5 times, migrating the project from Kubernetes to NixOS.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - currently</li><li>Роль: Lead Fullstack Developer</li></ul><p>Development of the Back Office for Core Spirit social platform.</p><ul><li>Integrated <code>Dependabot</code>, which helped update all outdated dependencies. Replaced webpack with <code>vite</code>.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Dates: May 2018 - currently (Passively maintained)</li><li>Role: Tech Lead</li></ul><p>Development web infrastructure of the educational center Master Progress</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">The main site</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Student's cabinet</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">A tool for rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>A complete infrastructure was created on <code>NixOS</code>. Before that, I had created an infrastructure using <code>Drone CI</code> / <code>Woodpecker CI</code> and <code>Docker swarm</code>, which has been running for over 5 years.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Dates: August 2018 - May 2020, August 2024 - currently</li><li>Role: Lead Fullstack Developer</li></ul><p>Development of Social platform focusing on human and planetary enhancement.</p><ul><li>A REST API (using <code>Node.JS</code>, <code>Express</code>, and <code>PostgreSQL</code>) for the main website and back office. I also got to work with a new version of the REST API using <code>Go</code> and <code>PostgreSQL</code>.</li><li>Auto poster to various social networks and messengers (Facebook, LinkedIn, Twitter, Telegram).</li><li>Neural network for automatic categorization of articles.</li></ul><hr><h4 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h4><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>In this company there were 6 considerable projects I have successfully completed:</p><ul><li>optimize the creation of promotional pages (PHP, JavaScript)</li><li>support main traditional site <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>development of parsing to monitor products for changes in price, quantity/availability in stock, rating and other fields based on data from 55 websites (Node.JS, Express)</li><li>work with neural networks for matching of goods</li><li>development face recognition apps for Android (Java)</li></ul><hr><h2 id="chronology" tabindex="-1"><a class="header-anchor" href="#chronology"><span>Chronology</span></a></h2><p>Public projects only.</p></div><!--[--><!--]--></div><footer class="vp-page-meta"><!----><div class="vp-meta-item git-info"><div class="vp-meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="vp-meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: dmitriy@ideascup.me">Dmitriy Pleshevskiy</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: dmitriy@pleshevski.ru">Dmitriy Pleshevskiy</span><!----><!--]--><!--]--></span></div></div></footer><!----><!--[--><!--[--><div class="works-table-wrapper" data-v-765855fb><table data-v-765855fb><thead><tr><th>Name</th><th>Description</th><th>Role</th><th>Technologies</th><th>Status</th><th>Dates</th></tr></thead><tbody><!--[--><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/nixeovim">nixeovim</a></td><td>Configure and build neovim editor using nix</td><td>author</td><td>Nix</td><td>actively-developed</td><td><div><small class="">04/24/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/mindustry-tools">Mindustry tools</a></td><td>Tools for the Mindustry game</td><td>author</td><td>Nix, Godot</td><td>passively-maintained</td><td><div><small class="">01/07/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://rosmintrud.masterprogress.ru">Master Progress Rosmintrud tools</a></td><td>Internal service to prepare documents for the rosmintrud (SPA)</td><td>tech lead</td><td>Deno, Sqlite, TS, Vue, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">07/03/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-plpgsql">tree-sitter-plpgsql</a></td><td>plpgsql grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>passively-maintained</td><td><div><small class="">01/05/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-d2">tree-sitter-d2</a></td><td>d2 grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>actively-developed</td><td><div><small class="">12/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/mynix/nix2lua">nix2lua</a></td><td>This is a small but functional library that converts your nix configurations into lua format.</td><td>author</td><td>Nix, Lua</td><td>passively-maintained</td><td><div><small class="">11/22/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/vnetod">vnetod</a></td><td>Dotenv section switcher</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/29/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/recipes">recipes</a></td><td>Site with recipes which cares about privacy</td><td>author</td><td>TS, Deno, Rust</td><td>passively-maintained</td><td><div><small class="">05/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru">pleshevski.ru</a></td><td>Source code of my personal site</td><td>author</td><td>TS, Vue, Vuepress, Nix</td><td>passively-maintained</td><td><div><small class="">03/16/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/espruino-starter">espruino-starter</a></td><td>Quickly start creating your new project on the espruino board or a board based on it.</td><td>author</td><td>JS</td><td>as-is</td><td><div><small class="">08/23/2021</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/sonic-channel">sonic-channel</a></td><td>Rust client for sonic search backend.</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/18/2020</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/it-fsm">it-fsm</a></td><td>Simple full-featured finite state machine for your project</td><td>author</td><td>TS, NodeJS, Deno</td><td>passively-maintained</td><td><div><small class="">10/11/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://cabinet.masterprogress.ru">Cabinet Master Progress</a></td><td>Student's cabinet of the educational center Master Progress (SSR + SPA)</td><td>tech lead</td><td>Python, Flask, PostgreSQL, TS, React, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">09/22/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/genrss">genrss</a></td><td>RSS generator for python</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="">07/23/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://www.binarymanagement.com">Binary Management</a></td><td>Project management tool for interior designers</td><td>developer, tech lead, team lead</td><td>TS, NodeJS, React, Antd, Docker, Drone CI, Rust, Nix</td><td>actively-developed</td><td><div><small class="">09/15/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://masterprogress.ru">Master Progress</a></td><td>Main website of the educational center Master Progress (SSR + Forms)</td><td>tech lead</td><td>Python, Flask, JS, Nix</td><td>passively-maintained</td><td><div><small class="">04/10/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/picsg">picsg</a></td><td>A tool for steganographing information in a picture encoded using the Vernam cipher.</td><td>author</td><td>Haskell</td><td>as-is</td><td><div><small class="grey">04/13/2024</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/yandexgpt_tg_bot">yandexgpt_tg_bot</a></td><td>The Telegram bot to describe article with link by YandexGPT.</td><td>author</td><td>JS, NodeJS, Nix</td><td>as-is</td><td><div><small class="grey">06/27/2023</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/estring">estring</a></td><td>A simple way to parse a string using type annotations.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/23/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/enve">enve</a></td><td>It helps you work with environment variables and convert it to any type using only type annotations</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/18/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/docker_stack">docker stack drone plugin</a></td><td>Deploy to production using `docker stack deploy`</td><td>author</td><td>Docker, Drone CI, Woodpecker CI</td><td>as-is</td><td><div><small class="grey">06/06/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/paren">paren</a></td><td>Library for parsing and rendering information.</td><td>author</td><td>TS, Deno</td><td>experimental</td><td><div><small class="grey">03/14/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/hwt">hwt</a></td><td>healthy workaholic timer – A tool that keeps you from breaking your health by working all day.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">02/04/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/wd2">wd2</a></td><td>A wrapper over d2 which allows to use additional configs from d2 file</td><td>author</td><td>Bash, Nix</td><td>as-is</td><td><div><small class="grey">12/12/2022</small></div><div><small>07/31/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/react-rest-request">react-rest-request</a></td><td>Minimalistic REST API client for React inspired by Apollo.</td><td>author</td><td>TS, React</td><td>deprecated</td><td><div><small class="grey">10/04/2020</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/marshmallow_pageinfo">marshmallow_pageinfo</a></td><td>Page info marshmallow schema for api</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">10/05/2019</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ictmpl">ictmpl</a></td><td>Generate projects from templates</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">06/30/2018</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/github/dexios">dexios</a></td><td>Dexios is a fast, secure, and open source command-line encryption tool.</td><td>collaborator</td><td>Rust</td><td></td><td><div><small class="grey">06/01/2022</small></div><div><small>02/28/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/itconfig">itconfig</a></td><td>Easy build a configs from environment variables and use it in globally.</td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">12/22/2019</small></div><div><small>07/24/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/migra">migra</a></td><td>Simple SQL migration manager for your project.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">01/31/2021</small></div><div><small>03/17/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ood_persistence">ood_persistence</a></td><td>Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture </td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">10/12/2021</small></div><div><small>10/21/2021</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://corespirit.com">Core Spirit</a></td><td>Social platform focusing on human and planetary enhancement</td><td>developer</td><td>TS, NodeJS, Go, Python, React, Docker, Drone CI</td><td></td><td><div><small class="grey">09/05/2018</small></div><div><small>12/31/2019</small></div></td></tr><!--]--></tbody></table></div><!--]--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div> - <script type="module" src="/assets/app-B-ZDtWHa.js" defer></script> + <script type="module" src="/assets/app-Dje5btuz.js" defer></script> </body> </html> diff --git a/index.html b/index.html index 4afd815..c4ece84 100644 --- a/index.html +++ b/index.html @@ -32,12 +32,12 @@ } </script> <link rel="alternate" hreflang="en-us" href="https://pleshevski.ru/eng/"><meta property="og:url" content="https://pleshevski.ru/"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:title" content="Резюме"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><meta property="og:locale:alternate" content="en-US"><meta property="og:updated_time" content="2024-09-05T22:11:51.000Z"><meta property="article:modified_time" content="2024-09-05T22:11:51.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Резюме"}</script><title>Резюме | Дмитрий Плешевский</title><meta name="description" content=" "> - <link rel="preload" href="/assets/style-CAeyyXIN.css" as="style"><link rel="stylesheet" href="/assets/style-CAeyyXIN.css"> - <link rel="modulepreload" href="/assets/app-B-ZDtWHa.js"><link rel="modulepreload" href="/assets/index.html-DH5daCIZ.js"> - <link rel="prefetch" href="/assets/works.html-CxTlsMbW.js" as="script"><link rel="prefetch" href="/assets/index.html-gQkWNf7r.js" as="script"><link rel="prefetch" href="/assets/works.html-DEB0fTtn.js" as="script"><link rel="prefetch" href="/assets/404.html-BEjpQkgy.js" as="script"> + <link rel="preload" href="/assets/style-ZWWWXdHC.css" as="style"><link rel="stylesheet" href="/assets/style-ZWWWXdHC.css"> + <link rel="modulepreload" href="/assets/app-Dje5btuz.js"><link rel="modulepreload" href="/assets/index.html-D2w7c-Qe.js"> + <link rel="prefetch" href="/assets/works.html-CoXhcHQf.js" as="script"><link rel="prefetch" href="/assets/index.html-KbtCZdft.js" as="script"><link rel="prefetch" href="/assets/works.html-CvAIW4-p.js" as="script"><link rel="prefetch" href="/assets/404.html-DQUw13HV.js" as="script"> </head> <body> <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/"><!----><span class="vp-site-name" aria-hidden="true">Дмитрий Плешевский</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-home"><header class="vp-hero"><!----><!----><p class="vp-hero-description"> </p><!----></header><!----><div vp-content><div><p>Всегда актуальная ссылка на <a class="route-link" href="/">резюме</a>.</p><h2 id="общие-сведения" tabindex="-1"><a class="header-anchor" href="#общие-сведения"><span>Общие сведения</span></a></h2><p>Меня зовут Дмитрий Плешевский.</p><p>Я энтузиаст программного обеспечения с открытым исходным кодом, ведущий разработчик програмного обеспечения, архитектор, руководитель команды, а так же ментор.</p><h2 id="умения" tabindex="-1"><a class="header-anchor" href="#умения"><span>Умения</span></a></h2><h4 id="языки-программирования" tabindex="-1"><a class="header-anchor" href="#языки-программирования"><span>Языки программирования:</span></a></h4><ul><li>TypeScript (предпочитаю, твёрдый 9-летний опыт)</li><li>SQL (предпочитаю, твёрдый 8-летний опыт)</li><li>Rust (предпочитаю, 5-летний опыт)</li><li>Python (твёрдый 9-летний опыт)</li><li>Haskell</li><li>Bash (8-летний опыт)</li><li>Java</li><li>C#</li><li>C++</li></ul><h4 id="хранилища-данных" tabindex="-1"><a class="header-anchor" href="#хранилища-данных"><span>Хранилища данных:</span></a></h4><ul><li>PostgreSQL (предпочитаю, твёрдый 8-летний опыт)</li><li>MySQL</li><li>Sqlite</li><li>MsSQL</li><li>MongoDB</li><li>Reddis</li><li>Minio (предпочитаю, твердый 5-летний опыт)</li></ul><hr><p>Я так же имею большой опыт в создании следующих типов приложений:</p><ul><li>Традиционные (SSR + Forms)</li><li>API (REST/GraphQL/WebSocket/EventSource)</li><li>Динамическое (SPA)</li><li>Гибридное (SSR + SPA)</li><li>Консольные</li><li>Кроссплатформенные</li></ul><h2 id="stack" tabindex="-1"><a class="header-anchor" href="#stack"><span>Stack</span></a></h2><h4 id="backend-rust" tabindex="-1"><a class="header-anchor" href="#backend-rust"><span>Backend (Rust)</span></a></h4><ul><li><code>axum</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>async-graphql</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>shaku</code> (предпочитаю, твёрдый 2-летний опыт)</li><li><code>bb8</code> + <code>postgres-types</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>diesel</code> (2-летний опыт)</li></ul><h4 id="backend-node-js" tabindex="-1"><a class="header-anchor" href="#backend-node-js"><span>Backend (Node.JS)</span></a></h4><ul><li><code>Apollo</code> (твёрдый 5-летний опыт)</li><li><code>Express</code> (твёрдый 9-летний опыт)</li><li><code>Nest.JS</code></li><li><code>Knex.js</code> / <code>Objection.js</code> (твёрдый 5-летний опыт)</li><li><code>Sequelize</code></li></ul><h4 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h4><ul><li><code>React</code> (твёрдый 8-летний опыт)</li><li><code>VueJS</code> (предпочитаю, твёрдый 4-летний опыт)</li><li><code>Cypress</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>JQuery</code></li><li><code>Antd</code> / <code>Antdv</code></li><li><code>PostCSS</code> (предпочитаю, твёрдый 5-летний опыт)</li><li><code>Sass</code> (предпочитаю, твёрдый 8-летний опыт)</li><li><code>Less</code> (слабый 4-летний опыт)</li></ul><h4 id="devops" tabindex="-1"><a class="header-anchor" href="#devops"><span>DevOps</span></a></h4><ul><li><code>NixOS</code> / <code>NixOps</code> / <code>Nix dev shell</code> (предпочитаю, твёрдый 3-летний опыт)</li><li><code>Docker Swarm</code> (твёрдый 6-летний опыт)</li><li><code>Kubernetes</code> (слабый 5-летний опыт)</li><li><code>Woodpecker CI</code> (твёрдый 4-летний опыт)</li><li><code>Drone CI</code> (твёрдый 3-летний опыт)</li><li><code>Gitlab CI</code> (твёрдый 7-летний опыт)</li><li><code>GitHub Actions</code> (4-летний опыт)</li></ul><h2 id="интересы" tabindex="-1"><a class="header-anchor" href="#интересы"><span>Интересы</span></a></h2><p>Open-source проекты - моя страсть! Разрабатываю, поддерживаю и улучшаю проекты в своё свободное время.</p><p>Помимо программирования я люблю готовить и проводить время со своей любимой семьей!</p><h2 id="контакты" tabindex="-1"><a class="header-anchor" href="#контакты"><span>Контакты</span></a></h2><p>Simplex (Предпочтительно): <a href="https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2F8JE7lkP68DZG-1DP8U8_njTlIz9fzRzf%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAxdWiN9so1FqPVTsKhS4Y2OK80zzUvsIZ1Yo77kYV6Co%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Telegram: <a href="https://telegram.me/da_pranaya" target="_blank" rel="noopener noreferrer">Dmitriy Pleshevskiy</a></p><p>Matrix: <code>@pleshevskiy:matrix.org</code></p><p>Email: <code>dmitriy[at]pleshevski[dot]ru</code></p><h2 id="ссылки" tabindex="-1"><a class="header-anchor" href="#ссылки"><span>Ссылки</span></a></h2><ul><li><a href="https://git.pleshevski.ru/" target="_blank" rel="noopener noreferrer">Forgejo</a></li><li><a href="https://github.com/pleshevskiy" target="_blank" rel="noopener noreferrer">Github (Приостановлен)</a></li></ul></div></div><!----></main><!--]--></div><!--[--><!----><!--]--><!--]--></div> - <script type="module" src="/assets/app-B-ZDtWHa.js" defer></script> + <script type="module" src="/assets/app-Dje5btuz.js" defer></script> </body> </html> diff --git a/works.html b/works.html index da1ea90..085d6ad 100644 --- a/works.html +++ b/works.html @@ -32,12 +32,12 @@ } </script> <link rel="alternate" hreflang="en-us" href="https://pleshevski.ru/eng/works.html"><meta property="og:url" content="https://pleshevski.ru/works.html"><meta property="og:site_name" content="Дмитрий Плешевский"><meta property="og:title" content="Работы"><meta property="og:type" content="website"><meta property="og:locale" content="ru-RU"><meta property="og:locale:alternate" content="en-US"><meta property="og:updated_time" content="2024-10-15T14:10:49.000Z"><meta property="article:modified_time" content="2024-10-15T14:10:49.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Работы"}</script><title>Работы | Дмитрий Плешевский</title><meta name="description" content=" "> - <link rel="preload" href="/assets/style-CAeyyXIN.css" as="style"><link rel="stylesheet" href="/assets/style-CAeyyXIN.css"> - <link rel="modulepreload" href="/assets/app-B-ZDtWHa.js"><link rel="modulepreload" href="/assets/works.html-CxTlsMbW.js"> - <link rel="prefetch" href="/assets/index.html-DH5daCIZ.js" as="script"><link rel="prefetch" href="/assets/index.html-gQkWNf7r.js" as="script"><link rel="prefetch" href="/assets/works.html-DEB0fTtn.js" as="script"><link rel="prefetch" href="/assets/404.html-BEjpQkgy.js" as="script"> + <link rel="preload" href="/assets/style-ZWWWXdHC.css" as="style"><link rel="stylesheet" href="/assets/style-ZWWWXdHC.css"> + <link rel="modulepreload" href="/assets/app-Dje5btuz.js"><link rel="modulepreload" href="/assets/works.html-CoXhcHQf.js"> + <link rel="prefetch" href="/assets/index.html-D2w7c-Qe.js" as="script"><link rel="prefetch" href="/assets/index.html-KbtCZdft.js" as="script"><link rel="prefetch" href="/assets/works.html-CvAIW4-p.js" as="script"><link rel="prefetch" href="/assets/404.html-DQUw13HV.js" as="script"> </head> <body> <div id="app"><!--[--><div class="vp-theme-container no-sidebar external-link-icon" vp-container data-v-765855fb><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/"><!----><span class="vp-site-name" aria-hidden="true">Дмитрий Плешевский</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="Резюме"><!--[--><!--[--><!--]--><!--]-->Резюме<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Работы"><!--[--><!--[--><!--]--><!--]-->Работы<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><div class="vp-navbar-dropdown-wrapper"><button class="vp-navbar-dropdown-title" type="button" aria-label="Select language"><span class="title">Languages</span><span class="arrow down"></span></button><button class="vp-navbar-dropdown-title-mobile" type="button" aria-label="Select language"><span class="title">Languages</span><span class="right arrow"></span></button><ul style="display:none;" class="vp-navbar-dropdown"><!--[--><li class="vp-navbar-dropdown-item"><a class="route-link route-link-active auto-link" href="/works.html" aria-label="Русский"><!--[--><!--[--><!--]--><!--]-->Русский<!--[--><!--[--><!--]--><!--]--></a></li><li class="vp-navbar-dropdown-item"><a class="route-link auto-link" href="/eng/works.html" aria-label="English"><!--[--><!--[--><!--]--><!--]-->English<!--[--><!--[--><!--]--><!--]--></a></li><!--]--></ul></div></div><div class="vp-navbar-item"><a class="auto-link external-link" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru" aria-label="Source" rel="noopener noreferrer" target="_blank"><!--[--><!--[--><!--]--><!--]-->Source<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><!----><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div vp-content><!--[--><!--]--><div><h2 id="выделенныи-опыт-работы" tabindex="-1"><a class="header-anchor" href="#выделенныи-опыт-работы"><span>Выделенный опыт работы</span></a></h2><h3 id="binary-management" tabindex="-1"><a class="header-anchor" href="#binary-management"><span>Binary Management</span></a></h3><ul><li>Даты: Август 2018 – по настоящее время</li><li>Роли: Lead Fullstack Developer, Team Lead, Architect</li></ul><p>Разработка инструмента управления проектами для дизайнеров интерьера.</p><h5 id="backend-graphql-api" tabindex="-1"><a class="header-anchor" href="#backend-graphql-api"><span>Backend GraphQL API</span></a></h5><p>Стек: <code>Node.JS</code>, <code>Apollo</code>, <code>PostgreSQL</code>, <code>Redis</code>, <code>BullMQ</code></p><ul><li>Перенес триггеры базы данных в бизнес-логику. Проще стало читать код, вносить изменение и система стала надежнее.</li><li>Ввёл практику написания unit тестов и интеграционных тестов. Самолично написал более 70% всех тестов.</li><li>Добавил GraphQL подписки для динамичного обновления.</li></ul><h5 id="frontend" tabindex="-1"><a class="header-anchor" href="#frontend"><span>Frontend</span></a></h5><p>Стек: <code>React</code>, <code>Apollo</code>, <code>Antd</code></p><ul><li>Сформировал UIKit и общие компоненты, оптимизировал сложные и нагруженные компоненты.</li><li>Изменил работу с API на фронтенде.</li><li>Внедрил практику написания интеграционных тестов с помощью cypress.</li><li>Полностью перенес проект на TypeScript. Сформировал изолированные модули системы.</li></ul><h5 id="руководство-командои" tabindex="-1"><a class="header-anchor" href="#руководство-командои"><span>Руководство командой</span></a></h5><ul><li>Ввёл практику TDD (Test-Driven Development).</li><li>Я привнес в проект "метод критической цепи", "метод буфера" и "метод планирования с конца". Помог команде войти в ритм, чтобы выпускать релизы каждую неделю небольшими партиями.</li><li>Составлял индивидуальный план развития для членов команды.</li></ul><h5 id="архитектура" tabindex="-1"><a class="header-anchor" href="#архитектура"><span>Архитектура</span></a></h5><ul><li>Разбил всю кодовую базу на модули по фичам.</li><li>Ускорил базу данных <code>PostgreSQL</code>, разбив данные компаний по отдельным схемам и применив партиципирование таблиц.</li><li>Добавил кеширование запросов с <code>Redis</code>.</li><li>Уменьшил затраты на инфраструткуру в 5 раз, перенес весь проект с kubernetes на <code>NixOS</code>.</li></ul><hr><h3 id="core-spirit-back-office" tabindex="-1"><a class="header-anchor" href="#core-spirit-back-office"><span>Core Spirit (Back Office)</span></a></h3><ul><li>Даты: Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка бэк-офиса для социальной платформы Core Spirit.</p><ul><li>Интегрировал Dependabot, который помог обновить все устаревшие зависимости. Заменил webpack на vite.</li></ul><hr><h3 id="master-progress" tabindex="-1"><a class="header-anchor" href="#master-progress"><span>Master Progress</span></a></h3><ul><li>Даты: Май 2018 - по настоящее время (Пассивная поддержка)</li><li>Роль: Tech Lead</li></ul><p>Разработка веб-инфраструктуры образовательного центра Мастер Прогресс.</p><ul><li><a href="https://masterprogress.ru" target="_blank" rel="noopener noreferrer">Главного сайта</a> (<code>Python</code>, <code>Flask</code>).</li><li><a href="https://cabinet.masterprogress.ru" target="_blank" rel="noopener noreferrer">Кабинета студента</a> (<code>Python</code>, <code>Flask</code>, <code>TypeScript</code>, <code>React</code>, <code>PostgreSQL</code>).</li><li><a href="https://rosmintrud.masterprogress.ru" target="_blank" rel="noopener noreferrer">Инструмента для работы с rosmintrud</a> (<code>Deno</code>, <code>Vue</code>, <code>Typescript</code>)</li><li>Создана полная инфраструктура на <code>NixOS</code>. До этого создал инфраструктуру используя <code>Drone CI</code> / <code>Woodpecker CI</code> и <code>Docker swarm</code>, которая проработала более 5 лет.</li></ul><hr><h3 id="core-spirit" tabindex="-1"><a class="header-anchor" href="#core-spirit"><span>Core Spirit</span></a></h3><ul><li>Даты: Август 2018 - May 2020, Август 2024 - по настоящее время</li><li>Роль: Lead Fullstack Developer</li></ul><p>Разработка социальной платформы, сфокусированной на улучшении человека и планеты.</p><ul><li>REST API (<code>Node.JS</code>, <code>Express</code>, <code>PostgreSQL</code>) для основного сайта и бэк-офиса. Успел поработать с новой версией REST API на <code>Go</code>, <code>PostgreSQL</code></li><li>Автопостер в различные социальные сети и мессенджеры (Facebook, LinkedIn, Twitter, Telegram).</li><li>Создал нейронную сеть для автоматической категоризации статей.</li></ul><hr><h3 id="merlion" tabindex="-1"><a class="header-anchor" href="#merlion"><span>MERLION</span></a></h3><ul><li>Dates: March 2016 – May 2018</li><li>Role: Senior Fullstack developer</li></ul><p>В этой компании было 6 значительных проектов, которые я успешно завершил:</p><ul><li>Оптимизация создания рекламных страниц (PHP, JavaScript)</li><li>Поддержка основного традиционного сайта <a href="https://citilink.ru" target="_blank" rel="noopener noreferrer">https://citilink.ru</a> (PHP, JavaScript)</li><li>Разработка парсинга для мониторинга товаров на предмет изменения цены, количества/наличия на складе, рейтинга и других полей на основе данных с 55+ сайтов (Node.js, Express)</li><li>Работа с нейронными сетями для подбора товаров</li><li>Разработка приложений для распознавания лиц для Android (Java)</li></ul><hr><h2 id="хронология" tabindex="-1"><a class="header-anchor" href="#хронология"><span>Хронология</span></a></h2><p>В списке перечислены только публичные проекты.</p></div><!--[--><!--]--></div><footer class="vp-page-meta"><!----><div class="vp-meta-item git-info"><div class="vp-meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="vp-meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: dmitriy@ideascup.me">Dmitriy Pleshevskiy</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: dmitriy@pleshevski.ru">Dmitriy Pleshevskiy</span><!----><!--]--><!--]--></span></div></div></footer><!----><!--[--><!--[--><div class="works-table-wrapper" data-v-765855fb><table data-v-765855fb><thead><tr><th>Название</th><th>Описание</th><th>Роль</th><th>Технологии</th><th>Статус</th><th>Даты</th></tr></thead><tbody><!--[--><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/nixeovim">nixeovim</a></td><td>Configure and build neovim editor using nix</td><td>author</td><td>Nix</td><td>actively-developed</td><td><div><small class="">04/24/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/mindustry-tools">Mindustry tools</a></td><td>Tools for the Mindustry game</td><td>author</td><td>Nix, Godot</td><td>passively-maintained</td><td><div><small class="">01/07/2024</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://rosmintrud.masterprogress.ru">Master Progress Rosmintrud tools</a></td><td>Internal service to prepare documents for the rosmintrud (SPA)</td><td>tech lead</td><td>Deno, Sqlite, TS, Vue, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">07/03/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-plpgsql">tree-sitter-plpgsql</a></td><td>plpgsql grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>passively-maintained</td><td><div><small class="">01/05/2023</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/tree-sitter-d2">tree-sitter-d2</a></td><td>d2 grammar for tree-sitter</td><td>author</td><td>C, JS, TreeSitter, Nix</td><td>actively-developed</td><td><div><small class="">12/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/mynix/nix2lua">nix2lua</a></td><td>This is a small but functional library that converts your nix configurations into lua format.</td><td>author</td><td>Nix, Lua</td><td>passively-maintained</td><td><div><small class="">11/22/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/vnetod">vnetod</a></td><td>Dotenv section switcher</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/29/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/recipes">recipes</a></td><td>Site with recipes which cares about privacy</td><td>author</td><td>TS, Deno, Rust</td><td>passively-maintained</td><td><div><small class="">05/04/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/pleshevski.ru">pleshevski.ru</a></td><td>Source code of my personal site</td><td>author</td><td>TS, Vue, Vuepress, Nix</td><td>passively-maintained</td><td><div><small class="">03/16/2022</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/espruino-starter">espruino-starter</a></td><td>Quickly start creating your new project on the espruino board or a board based on it.</td><td>author</td><td>JS</td><td>as-is</td><td><div><small class="">08/23/2021</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/sonic-channel">sonic-channel</a></td><td>Rust client for sonic search backend.</td><td>author</td><td>Rust</td><td>passively-maintained</td><td><div><small class="">07/18/2020</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/it-fsm">it-fsm</a></td><td>Simple full-featured finite state machine for your project</td><td>author</td><td>TS, NodeJS, Deno</td><td>passively-maintained</td><td><div><small class="">10/11/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://cabinet.masterprogress.ru">Cabinet Master Progress</a></td><td>Student's cabinet of the educational center Master Progress (SSR + SPA)</td><td>tech lead</td><td>Python, Flask, PostgreSQL, TS, React, Docker, Woodpecker CI, Nix</td><td>passively-maintained</td><td><div><small class="">09/22/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/genrss">genrss</a></td><td>RSS generator for python</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="">07/23/2019</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://www.binarymanagement.com">Binary Management</a></td><td>Project management tool for interior designers</td><td>developer, tech lead, team lead</td><td>TS, NodeJS, React, Antd, Docker, Drone CI, Rust, Nix</td><td>actively-developed</td><td><div><small class="">09/15/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://masterprogress.ru">Master Progress</a></td><td>Main website of the educational center Master Progress (SSR + Forms)</td><td>tech lead</td><td>Python, Flask, JS, Nix</td><td>passively-maintained</td><td><div><small class="">04/10/2018</small></div><!----></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/picsg">picsg</a></td><td>A tool for steganographing information in a picture encoded using the Vernam cipher.</td><td>author</td><td>Haskell</td><td>as-is</td><td><div><small class="grey">04/13/2024</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/yandexgpt_tg_bot">yandexgpt_tg_bot</a></td><td>The Telegram bot to describe article with link by YandexGPT.</td><td>author</td><td>JS, NodeJS, Nix</td><td>as-is</td><td><div><small class="grey">06/27/2023</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/estring">estring</a></td><td>A simple way to parse a string using type annotations.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/23/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/enve">enve</a></td><td>It helps you work with environment variables and convert it to any type using only type annotations</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">07/18/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/docker_stack">docker stack drone plugin</a></td><td>Deploy to production using `docker stack deploy`</td><td>author</td><td>Docker, Drone CI, Woodpecker CI</td><td>as-is</td><td><div><small class="grey">06/06/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/paren">paren</a></td><td>Library for parsing and rendering information.</td><td>author</td><td>TS, Deno</td><td>experimental</td><td><div><small class="grey">03/14/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/hwt">hwt</a></td><td>healthy workaholic timer – A tool that keeps you from breaking your health by working all day.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">02/04/2022</small></div><div><small>07/25/2024</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/wd2">wd2</a></td><td>A wrapper over d2 which allows to use additional configs from d2 file</td><td>author</td><td>Bash, Nix</td><td>as-is</td><td><div><small class="grey">12/12/2022</small></div><div><small>07/31/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/react-rest-request">react-rest-request</a></td><td>Minimalistic REST API client for React inspired by Apollo.</td><td>author</td><td>TS, React</td><td>deprecated</td><td><div><small class="grey">10/04/2020</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/marshmallow_pageinfo">marshmallow_pageinfo</a></td><td>Page info marshmallow schema for api</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">10/05/2019</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ictmpl">ictmpl</a></td><td>Generate projects from templates</td><td>author</td><td>Python</td><td>as-is</td><td><div><small class="grey">06/30/2018</small></div><div><small>03/02/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/github/dexios">dexios</a></td><td>Dexios is a fast, secure, and open source command-line encryption tool.</td><td>collaborator</td><td>Rust</td><td></td><td><div><small class="grey">06/01/2022</small></div><div><small>02/28/2023</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/itconfig">itconfig</a></td><td>Easy build a configs from environment variables and use it in globally.</td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">12/22/2019</small></div><div><small>07/24/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/migra">migra</a></td><td>Simple SQL migration manager for your project.</td><td>author</td><td>Rust</td><td>as-is</td><td><div><small class="grey">01/31/2021</small></div><div><small>03/17/2022</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://git.pleshevski.ru/pleshevskiy/ood_persistence">ood_persistence</a></td><td>Asynchronous and synchronous interfaces and persistence implementations for your OOD architecture </td><td>author</td><td>Rust</td><td>deprecated</td><td><div><small class="grey">10/12/2021</small></div><div><small>10/21/2021</small></div></td></tr><tr><td><a rel="nofollow noopener" href="https://corespirit.com">Core Spirit</a></td><td>Social platform focusing on human and planetary enhancement</td><td>developer</td><td>TS, NodeJS, Go, Python, React, Docker, Drone CI</td><td></td><td><div><small class="grey">09/05/2018</small></div><div><small>12/31/2019</small></div></td></tr><!--]--></tbody></table></div><!--]--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div> - <script type="module" src="/assets/app-B-ZDtWHa.js" defer></script> + <script type="module" src="/assets/app-Dje5btuz.js" defer></script> </body> </html>