`],{type:"text/html;charset=utf-8"}),s=URL.createObjectURL(a);window.open(s,"_blank","noopener"),setTimeout(()=>URL.revokeObjectURL(s),5e3)})({source:n,initViewBox:e.__mermaidInitViewBox})}),t.__mermaidViewerBound=!0)},i=(e,t,n,r)=>{const i=e[2]*t,o=e[3]*t;return[n-(n-e[0])*t,r-(r-e[1])*t,i,o]},o=r=>{r.__mermaidAbortController&&(r.__mermaidAbortController.abort(),r.__mermaidRafId&&cancelAnimationFrame(r.__mermaidRafId));const o=new AbortController;r.__mermaidAbortController=o;const a=r.querySelector("svg");if(!a)return;const s=e(a);r.__mermaidInitViewBox=s,r.__mermaidCurViewBox=s.slice(),t(a,s),a.style.touchAction="none";let l=a.getBoundingClientRect(),d=!1;const c=()=>{d=!0};window.addEventListener("resize",c,{signal:o.signal}),window.addEventListener("scroll",c,{signal:o.signal,capture:!0});const m=()=>(d&&(l=a.getBoundingClientRect(),d=!1),l),u=.1*s[2],p=10*s[2],h=.1*s[3],g=10*s[3];let f=null,w=null;const b=()=>{f&&(r.__mermaidCurViewBox=f,t(a,f),f=null),w=null,r.__mermaidRafId=null},x=e=>{f=(e=>{const t=e.slice();return t[2]=n(t[2],u,p),t[3]=n(t[3],h,g),t})(e),w||(w=requestAnimationFrame(b),r.__mermaidRafId=w)},y={pointers:new Map,startVb:null,startDist:0,lastPointerX:0,lastPointerY:0},_=e=>{if(a.hasPointerCapture&&a.hasPointerCapture(e.pointerId)&&a.releasePointerCapture(e.pointerId),y.pointers.delete(e.pointerId),0===y.pointers.size)y.startVb=null,y.startDist=0;else if(1===y.pointers.size){const e=y.pointers.values().next().value;y.lastPointerX=e.x,y.lastPointerY=e.y}};a.addEventListener("pointerdown",e=>{if("mouse"===e.pointerType&&0!==e.button)return;a.setPointerCapture(e.pointerId);const t=r.__mermaidCurViewBox;if(y.pointers.set(e.pointerId,{x:e.clientX,y:e.clientY}),1===y.pointers.size)y.startVb=t.slice(),y.lastPointerX=e.clientX,y.lastPointerY=e.clientY;else if(2===y.pointers.size){const e=[...y.pointers.values()],n=e[0].x-e[1].x,r=e[0].y-e[1].y;y.startDist=Math.hypot(n,r),y.startVb=t.slice()}},{signal:o.signal}),a.addEventListener("pointermove",e=>{if(!y.pointers.has(e.pointerId))return;y.pointers.set(e.pointerId,{x:e.clientX,y:e.clientY});const t=r.__mermaidCurViewBox,n=m();if(1===y.pointers.size&&y.startVb){const e=y.pointers.values().next().value,r=e.x-y.lastPointerX,i=e.y-y.lastPointerY;y.lastPointerX=e.x,y.lastPointerY=e.y;const o=r*(t[2]/n.width),a=i*(t[3]/n.height);x([t[0]-o,t[1]-a,t[2],t[3]])}else if(2===y.pointers.size&&y.startVb&&y.startDist>0){const e=[...y.pointers.values()],r=e[0].x-e[1].x,o=e[0].y-e[1].y,a=Math.hypot(r,o);if(!a)return;const s=y.startDist/a,l=(e[0].x+e[1].x)/2,d=(e[0].y+e[1].y)/2,c=t[0]+(l-n.left)*(t[2]/n.width),m=t[1]+(d-n.top)*(t[3]/n.height);x(i(y.startVb,s,c,m))}},{signal:o.signal}),a.addEventListener("pointerup",_,{signal:o.signal}),a.addEventListener("pointercancel",_,{signal:o.signal}),a.addEventListener("wheel",e=>{e.preventDefault(),e.stopPropagation();let t=e.deltaY;1===e.deltaMode?t*=16:2===e.deltaMode&&(t*=400);const n=Math.pow(1.001,t),o=r.__mermaidCurViewBox,a=m(),s=o[0]+(e.clientX-a.left)*(o[2]/a.width),l=o[1]+(e.clientY-a.top)*(o[3]/a.height);x(i(o,n,s,l))},{passive:!1,signal:o.signal}),a.addEventListener("dblclick",()=>{const e=r.__mermaidInitViewBox;e&&x(e)},{signal:o.signal})},a=()=>{const e=document.getElementById("article-container");if(!e)return;(e=>{const t=e.querySelectorAll("pre > code.mermaid");0!==t.length&&t.forEach(e=>{const t=document.createElement("pre");t.className="mermaid-src",t.hidden=!0,t.textContent=e.textContent;const n=document.createElement("div");n.className="mermaid-wrap",n.appendChild(t),e.parentNode.replaceWith(n)})})(e);const t=e.querySelectorAll(".mermaid-wrap");if(0===t.length)return;const n=()=>(e=>{window.loadMermaid=!0;const t="dark"===document.documentElement.getAttribute("data-theme")?"dark":"default";e.forEach((e,n)=>{const i=e.firstElementChild;e.__mermaidAbortController&&e.__mermaidAbortController.abort();const a=e.querySelector("svg");a&&a.remove();let s={};try{s=i.dataset.config?JSON.parse(i.dataset.config):{}}catch(e){console.warn("[mermaid] failed to parse dataset.config:",e)}s.theme||(s.theme=t);const l=`%%{init: ${JSON.stringify(s)}}%%\n`,d="mermaid-"+n,c=l+i.textContent,m=t=>{i.insertAdjacentHTML("afterend",t),o(e),e.__mermaidOriginalSvg=t,r(e)},u=e=>{console.error(`[mermaid] render failed for block #${n}:`,e);const t=document.createElement("div");t.className="mermaid-error",t.textContent="Mermaid render error: "+(e.message||e),i.insertAdjacentElement("afterend",t)};try{const e=mermaid.render(d,c);"string"==typeof e?m(e):e.then(({svg:e})=>m(e)).catch(u)}catch(e){u(e)}})})(t);btf.addGlobalFn("themeChange",n,"mermaid"),window.loadMermaid?n():btf.getScript("https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js").then(n)};btf.addGlobalFn("encrypt",a,"mermaid"),window.pjax?a():document.addEventListener("DOMContentLoaded",a)})()