diff --git a/404.html b/404.html new file mode 100644 index 0000000..7cb4c84 --- /dev/null +++ b/404.html @@ -0,0 +1,24 @@ + + + + + + 404 | Wren Security + + + + + + + + + + + + + +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
+ + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..34fbad0 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +wrensecurity.org diff --git a/assets/app.Yni5HksL.js b/assets/app.Yni5HksL.js new file mode 100644 index 0000000..6fec10f --- /dev/null +++ b/assets/app.Yni5HksL.js @@ -0,0 +1,7 @@ +import{j as o,a2 as p,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as A,ab as g,ac as v,d as P,u as w,l as y,z as C,ad as R,ae as _,af as b,ag as E}from"./chunks/framework.kuHzA11c.js";import{R as D}from"./chunks/theme.Yg7E2Yxt.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(D),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=w();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),_(),b(),s.setup&&s.setup(),()=>E(s.Layout)}});async function j(){const e=O(),a=L();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function L(){return h(T)}function O(){let e=o,a;return A(t=>{let n=g(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=v(()=>import(n),__vite__mapDeps([]))),o&&(e=!1),r},s.NotFound)}o&&j().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{j as createApp}; +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = [] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} diff --git a/assets/blog_2021_10_wrenidm-6-0-0-released.md.pvD43zGb.js b/assets/blog_2021_10_wrenidm-6-0-0-released.md.pvD43zGb.js new file mode 100644 index 0000000..0bcddbf --- /dev/null +++ b/assets/blog_2021_10_wrenidm-6-0-0-released.md.pvD43zGb.js @@ -0,0 +1 @@ +import{_ as a,c as s,J as n,w as r,G as l,o,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const B=JSON.parse('{"title":"Wren:IDM 6.0.0 Released","description":"","frontmatter":{"title":"Wren:IDM 6.0.0 Released","date":"2021-10-08T00:00:00.000Z","excerpt":"We are excited to announce the release of Wren:IDM 6.0.0. This release is the first official\\nWren Security release compatible with JDK 11 and zero dependencies on legacy infrastructure.\\n","sidebar":false},"headers":[],"relativePath":"blog/2021/10/wrenidm-6-0-0-released.md","filePath":"blog/2021/10/wrenidm-6-0-0-released.md"}'),d={name:"blog/2021/10/wrenidm-6-0-0-released.md"},h=e("p",null,"We are excited to announce the release of Wren:IDM 6.0.0. Wren Security release compatible with JDK 11 and zero dependencies on legacy infrastructure (everything you need to build the project is hosted in JFrog Artifactory).",-1),c=e("h2",{id:"changes",tabindex:"-1"},[t("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),p=e("p",null,"List of significant changes:",-1),u=e("ul",null,[e("li",null,"Change Maven parent to wrensec-parent (new Maven plugin versions, dedicated JFrog repository)"),e("li",null,"Upgrade core dependencies (Apache Felix, Activiti, RhinoJS, ...)"),e("li",null,"Support Java 11 as the default build and runtime environment"),e("li",null,"Add Dockerfile and publish official image to Docker Hub"),e("li",null,"Add GitHub Actions pipeline (switch from Semaphore CI)"),e("li",null,"Replace OrientDB with H2 as the default playground database")],-1),g=e("h2",{id:"how-to-get",tabindex:"-1"},[t("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),k=e("p",null,[t("You can build your own binary as described by "),e("a",{href:"https://github.com/WrenSecurity/wrenidm/blob/master/README.md#build-the-source-code",target:"_blank",rel:"noreferrer"},"README"),t(".")],-1),m=e("p",null,[t("Alternatively you can use the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Docker Hub"),t(":")],-1),f=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrenidm-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrenidm:6.0.0")])])])],-1);function b(_,y,F,w,C,v){const i=l("Post");return o(),s("div",null,[n(i,null,{default:r(()=>[h,c,p,u,g,k,m,f]),_:1})])}const x=a(d,[["render",b]]);export{B as __pageData,x as default}; diff --git a/assets/blog_2021_10_wrenidm-6-0-0-released.md.pvD43zGb.lean.js b/assets/blog_2021_10_wrenidm-6-0-0-released.md.pvD43zGb.lean.js new file mode 100644 index 0000000..0bcddbf --- /dev/null +++ b/assets/blog_2021_10_wrenidm-6-0-0-released.md.pvD43zGb.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,J as n,w as r,G as l,o,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const B=JSON.parse('{"title":"Wren:IDM 6.0.0 Released","description":"","frontmatter":{"title":"Wren:IDM 6.0.0 Released","date":"2021-10-08T00:00:00.000Z","excerpt":"We are excited to announce the release of Wren:IDM 6.0.0. This release is the first official\\nWren Security release compatible with JDK 11 and zero dependencies on legacy infrastructure.\\n","sidebar":false},"headers":[],"relativePath":"blog/2021/10/wrenidm-6-0-0-released.md","filePath":"blog/2021/10/wrenidm-6-0-0-released.md"}'),d={name:"blog/2021/10/wrenidm-6-0-0-released.md"},h=e("p",null,"We are excited to announce the release of Wren:IDM 6.0.0. Wren Security release compatible with JDK 11 and zero dependencies on legacy infrastructure (everything you need to build the project is hosted in JFrog Artifactory).",-1),c=e("h2",{id:"changes",tabindex:"-1"},[t("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),p=e("p",null,"List of significant changes:",-1),u=e("ul",null,[e("li",null,"Change Maven parent to wrensec-parent (new Maven plugin versions, dedicated JFrog repository)"),e("li",null,"Upgrade core dependencies (Apache Felix, Activiti, RhinoJS, ...)"),e("li",null,"Support Java 11 as the default build and runtime environment"),e("li",null,"Add Dockerfile and publish official image to Docker Hub"),e("li",null,"Add GitHub Actions pipeline (switch from Semaphore CI)"),e("li",null,"Replace OrientDB with H2 as the default playground database")],-1),g=e("h2",{id:"how-to-get",tabindex:"-1"},[t("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),k=e("p",null,[t("You can build your own binary as described by "),e("a",{href:"https://github.com/WrenSecurity/wrenidm/blob/master/README.md#build-the-source-code",target:"_blank",rel:"noreferrer"},"README"),t(".")],-1),m=e("p",null,[t("Alternatively you can use the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Docker Hub"),t(":")],-1),f=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrenidm-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrenidm:6.0.0")])])])],-1);function b(_,y,F,w,C,v){const i=l("Post");return o(),s("div",null,[n(i,null,{default:r(()=>[h,c,p,u,g,k,m,f]),_:1})])}const x=a(d,[["render",b]]);export{B as __pageData,x as default}; diff --git a/assets/blog_2022_04_brand-new-website.md.EL5e8Ctb.js b/assets/blog_2022_04_brand-new-website.md.EL5e8Ctb.js new file mode 100644 index 0000000..9d9a1c5 --- /dev/null +++ b/assets/blog_2022_04_brand-new-website.md.EL5e8Ctb.js @@ -0,0 +1 @@ +import{_ as s,c as n,J as o,w as a,G as i,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const P=JSON.parse('{"title":"Brand New Website","description":"","frontmatter":{"title":"Brand New Website","date":"2022-04-27T00:00:00.000Z","excerpt":"We have created a brand new website for Wren Security. :tada:\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/04/brand-new-website.md","filePath":"blog/2022/04/brand-new-website.md"}'),d={name:"blog/2022/04/brand-new-website.md"},c=e("p",null,"We have created a brand new website for Wren Security security suite.",-1),u=e("p",null,"Our former website (built using WordPress) was not easy to update and expand. It was created as more of a leaflet to define our presence and look and feel for the Wren Security brand. It served its purpose, but it was time to move on.",-1),b=e("p",null,"The new website has dedicated sections for top-level projects (Wren:IDM, Wren:AM, Wren:DS and Wren:ICF), instructions on community involvement and dedicated section for blog posts (various project related news).",-1),p=e("p",null,"New website is built and run using the following technologies:",-1),w=e("ul",null,[e("li",null,[e("a",{href:"https://vitepress.vuejs.org/",target:"_blank",rel:"noreferrer"},"VitePress")]),e("li",null,[e("a",{href:"https://pages.github.com/",target:"_blank",rel:"noreferrer"},"GitHub Pages")])],-1),_=e("p",null,[t("Source code of the website is hosted in "),e("a",{href:"https://github.com/WrenSecurity/wrensec-website",target:"_blank",rel:"noreferrer"},"wrensec-website"),t(" GitHub repository. Pull requests are welcome. 💯")],-1);function f(h,m,g,W,v,y){const r=i("Post");return l(),n("div",null,[o(r,null,{default:a(()=>[c,u,b,p,w,_]),_:1})])}const x=s(d,[["render",f]]);export{P as __pageData,x as default}; diff --git a/assets/blog_2022_04_brand-new-website.md.EL5e8Ctb.lean.js b/assets/blog_2022_04_brand-new-website.md.EL5e8Ctb.lean.js new file mode 100644 index 0000000..9d9a1c5 --- /dev/null +++ b/assets/blog_2022_04_brand-new-website.md.EL5e8Ctb.lean.js @@ -0,0 +1 @@ +import{_ as s,c as n,J as o,w as a,G as i,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const P=JSON.parse('{"title":"Brand New Website","description":"","frontmatter":{"title":"Brand New Website","date":"2022-04-27T00:00:00.000Z","excerpt":"We have created a brand new website for Wren Security. :tada:\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/04/brand-new-website.md","filePath":"blog/2022/04/brand-new-website.md"}'),d={name:"blog/2022/04/brand-new-website.md"},c=e("p",null,"We have created a brand new website for Wren Security security suite.",-1),u=e("p",null,"Our former website (built using WordPress) was not easy to update and expand. It was created as more of a leaflet to define our presence and look and feel for the Wren Security brand. It served its purpose, but it was time to move on.",-1),b=e("p",null,"The new website has dedicated sections for top-level projects (Wren:IDM, Wren:AM, Wren:DS and Wren:ICF), instructions on community involvement and dedicated section for blog posts (various project related news).",-1),p=e("p",null,"New website is built and run using the following technologies:",-1),w=e("ul",null,[e("li",null,[e("a",{href:"https://vitepress.vuejs.org/",target:"_blank",rel:"noreferrer"},"VitePress")]),e("li",null,[e("a",{href:"https://pages.github.com/",target:"_blank",rel:"noreferrer"},"GitHub Pages")])],-1),_=e("p",null,[t("Source code of the website is hosted in "),e("a",{href:"https://github.com/WrenSecurity/wrensec-website",target:"_blank",rel:"noreferrer"},"wrensec-website"),t(" GitHub repository. Pull requests are welcome. 💯")],-1);function f(h,m,g,W,v,y){const r=i("Post");return l(),n("div",null,[o(r,null,{default:a(()=>[c,u,b,p,w,_]),_:1})])}const x=s(d,[["render",f]]);export{P as __pageData,x as default}; diff --git a/assets/blog_2022_06_wrenidm-cookbook-created.md.FIdaoIn3.js b/assets/blog_2022_06_wrenidm-cookbook-created.md.FIdaoIn3.js new file mode 100644 index 0000000..8beec13 --- /dev/null +++ b/assets/blog_2022_06_wrenidm-cookbook-created.md.FIdaoIn3.js @@ -0,0 +1 @@ +import{_ as n,c as r,J as a,w as s,G as l,o as i,m as e,a as o}from"./chunks/framework.kuHzA11c.js";const v=JSON.parse('{"title":"Wren:IDM Cookbook Created","description":"","frontmatter":{"title":"Wren:IDM Cookbook Created","date":"2022-06-09T00:00:00.000Z","excerpt":"We have prepared recipes (samples) demonstrating key Wren:IDM features.\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/06/wrenidm-cookbook-created.md","filePath":"blog/2022/06/wrenidm-cookbook-created.md"}'),c={name:"blog/2022/06/wrenidm-cookbook-created.md"},d=e("p",null,"We have prepared recipes (samples) demonstrating key Wren:IDM features. From now it is possible to try Wren:IDM easily.",-1),m=e("p",null,"We have prepared following samples:",-1),p=e("ul",null,[e("li",null,"sync ⚙️ – synchronize data between Wren:IDM and source / target systems"),e("li",null,"workflow 📝 – create workflow with approval in Wren:IDM"),e("li",null,"roles 🔐 – manage roles and assignment values"),e("li",null,"endpoint 🗳️ – create custom REST API endpoint to execute custom business logic"),e("li",null,"scheduler ⏱️ – schedule synchronization or script to be automatically triggered"),e("li",null,"email 📧 – send email notification")],-1),u=e("p",null,[o("Environment for each sample is defined through "),e("em",null,"Docker Compose"),o(" file. You need just one command to start relevant "),e("em",null,"Docker"),o(" containers, zero configuration needed.")],-1),h=e("p",null,[o("Samples are hosted in "),e("a",{href:"https://github.com/WrenSecurity/wrenidm-cookbook",target:"_blank",rel:"noreferrer"},"wrenidm-cookbook"),o(" GitHub repository.")],-1);function k(_,f,b,g,w,y){const t=l("Post");return i(),r("div",null,[a(t,null,{default:s(()=>[d,m,p,u,h]),_:1})])}const D=n(c,[["render",k]]);export{v as __pageData,D as default}; diff --git a/assets/blog_2022_06_wrenidm-cookbook-created.md.FIdaoIn3.lean.js b/assets/blog_2022_06_wrenidm-cookbook-created.md.FIdaoIn3.lean.js new file mode 100644 index 0000000..8beec13 --- /dev/null +++ b/assets/blog_2022_06_wrenidm-cookbook-created.md.FIdaoIn3.lean.js @@ -0,0 +1 @@ +import{_ as n,c as r,J as a,w as s,G as l,o as i,m as e,a as o}from"./chunks/framework.kuHzA11c.js";const v=JSON.parse('{"title":"Wren:IDM Cookbook Created","description":"","frontmatter":{"title":"Wren:IDM Cookbook Created","date":"2022-06-09T00:00:00.000Z","excerpt":"We have prepared recipes (samples) demonstrating key Wren:IDM features.\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/06/wrenidm-cookbook-created.md","filePath":"blog/2022/06/wrenidm-cookbook-created.md"}'),c={name:"blog/2022/06/wrenidm-cookbook-created.md"},d=e("p",null,"We have prepared recipes (samples) demonstrating key Wren:IDM features. From now it is possible to try Wren:IDM easily.",-1),m=e("p",null,"We have prepared following samples:",-1),p=e("ul",null,[e("li",null,"sync ⚙️ – synchronize data between Wren:IDM and source / target systems"),e("li",null,"workflow 📝 – create workflow with approval in Wren:IDM"),e("li",null,"roles 🔐 – manage roles and assignment values"),e("li",null,"endpoint 🗳️ – create custom REST API endpoint to execute custom business logic"),e("li",null,"scheduler ⏱️ – schedule synchronization or script to be automatically triggered"),e("li",null,"email 📧 – send email notification")],-1),u=e("p",null,[o("Environment for each sample is defined through "),e("em",null,"Docker Compose"),o(" file. You need just one command to start relevant "),e("em",null,"Docker"),o(" containers, zero configuration needed.")],-1),h=e("p",null,[o("Samples are hosted in "),e("a",{href:"https://github.com/WrenSecurity/wrenidm-cookbook",target:"_blank",rel:"noreferrer"},"wrenidm-cookbook"),o(" GitHub repository.")],-1);function k(_,f,b,g,w,y){const t=l("Post");return i(),r("div",null,[a(t,null,{default:s(()=>[d,m,p,u,h]),_:1})])}const D=n(c,[["render",k]]);export{v as __pageData,D as default}; diff --git a/assets/blog_2022_08_commons-22-2-0-released.md.Sfonx2ON.js b/assets/blog_2022_08_commons-22-2-0-released.md.Sfonx2ON.js new file mode 100644 index 0000000..ba84702 --- /dev/null +++ b/assets/blog_2022_08_commons-22-2-0-released.md.Sfonx2ON.js @@ -0,0 +1 @@ +import{_ as t,c as n,J as a,w as l,G as r,o as c,m as e,a as o}from"./chunks/framework.kuHzA11c.js";const S=JSON.parse('{"title":"Commons 22.2.0 Released","description":"","frontmatter":{"title":"Commons 22.2.0 Released","date":"2022-08-11T00:00:00.000Z","excerpt":"We are excited to announce the release of Wren Security Commons 22.2.0. This release is\\ncompatible with JDK 17.\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/08/commons-22-2-0-released.md","filePath":"blog/2022/08/commons-22-2-0-released.md"}'),i={name:"blog/2022/08/commons-22-2-0-released.md"},d=e("p",null,[o("We are excited to announce the release of "),e("a",{href:"https://github.com/WrenSecurity/wrensec-commons/releases/tag/22.2.0",target:"_blank",rel:"noreferrer"},"Wren Security Commons 22.2.0"),o(". This release is compatible with JDK 17.")],-1),m=e("p",null,[o("Maven groupId of all modules was switched to our package "),e("code",null,"org.wrensecurity.commons"),o(".")],-1),u=e("h2",{id:"changes",tabindex:"-1"},[o("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),h=e("p",null,"List of significant changes:",-1),p=e("ul",null,[e("li",null,[o("Switched Maven groupId to "),e("code",null,"org.wrensecurity.commons")]),e("li",null,"Support for Java 17"),e("li",null,[o("Merged "),e("em",null,"wrensec-guice"),o(" project as its own module")]),e("li",null,"Fixed Maven site generation where possible")],-1);function _(g,f,w,b,x,C){const s=r("Post");return c(),n("div",null,[a(s,null,{default:l(()=>[d,m,u,h,p]),_:1})])}const k=t(i,[["render",_]]);export{S as __pageData,k as default}; diff --git a/assets/blog_2022_08_commons-22-2-0-released.md.Sfonx2ON.lean.js b/assets/blog_2022_08_commons-22-2-0-released.md.Sfonx2ON.lean.js new file mode 100644 index 0000000..ba84702 --- /dev/null +++ b/assets/blog_2022_08_commons-22-2-0-released.md.Sfonx2ON.lean.js @@ -0,0 +1 @@ +import{_ as t,c as n,J as a,w as l,G as r,o as c,m as e,a as o}from"./chunks/framework.kuHzA11c.js";const S=JSON.parse('{"title":"Commons 22.2.0 Released","description":"","frontmatter":{"title":"Commons 22.2.0 Released","date":"2022-08-11T00:00:00.000Z","excerpt":"We are excited to announce the release of Wren Security Commons 22.2.0. This release is\\ncompatible with JDK 17.\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/08/commons-22-2-0-released.md","filePath":"blog/2022/08/commons-22-2-0-released.md"}'),i={name:"blog/2022/08/commons-22-2-0-released.md"},d=e("p",null,[o("We are excited to announce the release of "),e("a",{href:"https://github.com/WrenSecurity/wrensec-commons/releases/tag/22.2.0",target:"_blank",rel:"noreferrer"},"Wren Security Commons 22.2.0"),o(". This release is compatible with JDK 17.")],-1),m=e("p",null,[o("Maven groupId of all modules was switched to our package "),e("code",null,"org.wrensecurity.commons"),o(".")],-1),u=e("h2",{id:"changes",tabindex:"-1"},[o("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),h=e("p",null,"List of significant changes:",-1),p=e("ul",null,[e("li",null,[o("Switched Maven groupId to "),e("code",null,"org.wrensecurity.commons")]),e("li",null,"Support for Java 17"),e("li",null,[o("Merged "),e("em",null,"wrensec-guice"),o(" project as its own module")]),e("li",null,"Fixed Maven site generation where possible")],-1);function _(g,f,w,b,x,C){const s=r("Post");return c(),n("div",null,[a(s,null,{default:l(()=>[d,m,u,h,p]),_:1})])}const k=t(i,[["render",_]]);export{S as __pageData,k as default}; diff --git a/assets/blog_2022_12_wrenidm-6-1-0-released.md.9_1v0LX0.js b/assets/blog_2022_12_wrenidm-6-1-0-released.md.9_1v0LX0.js new file mode 100644 index 0000000..32e7161 --- /dev/null +++ b/assets/blog_2022_12_wrenidm-6-1-0-released.md.9_1v0LX0.js @@ -0,0 +1 @@ +import{_ as t,c as s,J as i,w as n,G as a,o,m as e,a as l}from"./chunks/framework.kuHzA11c.js";const E=JSON.parse('{"title":"Wren:IDM 6.1.0 Released","description":"","frontmatter":{"title":"Wren:IDM 6.1.0 Released","date":"2022-12-30T00:00:00.000Z","excerpt":"Brand new release Wren:IDM 6.1.0 has been published. This release is fully compatible with JDK 17.\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/12/wrenidm-6-1-0-released.md","filePath":"blog/2022/12/wrenidm-6-1-0-released.md"}'),d={name:"blog/2022/12/wrenidm-6-1-0-released.md"},c=e("p",null,[l("Brand new release "),e("a",{href:"https://github.com/WrenSecurity/wrenidm/releases/tag/6.1.0",target:"_blank",rel:"noreferrer"},"Wren:IDM 6.1.0"),l(" has been published. This release is fully compatible with JDK 17 and Maven "),e("code",null,"groupId"),l(" of all modules was switched to our package "),e("code",null,"org.wrensecurity.wrenidm"),l(".")],-1),h=e("h2",{id:"changes",tabindex:"-1"},[l("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),u=e("p",null,"List of significant changes:",-1),p=e("ul",null,[e("li",null,"Add Java 17 support and drop Java 8 support"),e("li",null,[l("Change Maven "),e("code",null,"groupId"),l(" to "),e("code",null,"org.wrensecurity.wrenidm")])],-1),g=e("p",null,"Other changes:",-1),m=e("ul",null,[e("li",null,[l("Change Maven packaging from "),e("code",null,"bundle"),l(" to "),e("code",null,"jar"),l(" ("),e("a",{href:"https://github.com/WrenSecurity/wrenidm/issues/112",target:"_blank",rel:"noreferrer"},"#112"),l(")")]),e("li",null,[l("Support for custom operation-specific options in provisioner ("),e("a",{href:"https://github.com/WrenSecurity/wrenidm/issues/124",target:"_blank",rel:"noreferrer"},"#124"),l(")")]),e("li",null,[l("Workaround Rhino JS file encoding issue ("),e("a",{href:"https://github.com/WrenSecurity/wrenidm/issues/130",target:"_blank",rel:"noreferrer"},"#130"),l(")")]),e("li",null,"Improve docker build (multistage with buildkit cache)"),e("li",null,[l("Upgrade "),e("code",null,"wrensec-parent"),l(" to the latest release ("),e("code",null,"4.0.0"),l(")")]),e("li",null,[l("Upgrade "),e("code",null,"wrensec-commons"),l(" to "),e("code",null,"22.4.0")]),e("li",null,[l("Upgrade "),e("code",null,"wrensec-ui"),l(" to "),e("code",null,"22.1.1")]),e("li",null,[l("Upgrade "),e("code",null,"wrenicf-java-framework"),l(" to "),e("code",null,"1.5.3.0")]),e("li",null,[l("Upgrade Rhino JS to "),e("code",null,"1.7.14")])],-1),k=e("h2",{id:"how-to-get",tabindex:"-1"},[l("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),b=e("p",null,[l("You can build your own binary as described by "),e("a",{href:"https://github.com/WrenSecurity/wrenidm/blob/main/README.md#build-the-source-code",target:"_blank",rel:"noreferrer"},"README"),l(".")],-1),_=e("p",null,[l("Alternatively you can use the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Docker Hub"),l(":")],-1),f=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrenidm-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrenidm:6.1.0")])])])],-1);function w(y,F,C,v,B,D){const r=a("Post");return o(),s("div",null,[i(r,null,{default:n(()=>[c,h,u,p,g,m,k,b,_,f]),_:1})])}const M=t(d,[["render",w]]);export{E as __pageData,M as default}; diff --git a/assets/blog_2022_12_wrenidm-6-1-0-released.md.9_1v0LX0.lean.js b/assets/blog_2022_12_wrenidm-6-1-0-released.md.9_1v0LX0.lean.js new file mode 100644 index 0000000..32e7161 --- /dev/null +++ b/assets/blog_2022_12_wrenidm-6-1-0-released.md.9_1v0LX0.lean.js @@ -0,0 +1 @@ +import{_ as t,c as s,J as i,w as n,G as a,o,m as e,a as l}from"./chunks/framework.kuHzA11c.js";const E=JSON.parse('{"title":"Wren:IDM 6.1.0 Released","description":"","frontmatter":{"title":"Wren:IDM 6.1.0 Released","date":"2022-12-30T00:00:00.000Z","excerpt":"Brand new release Wren:IDM 6.1.0 has been published. This release is fully compatible with JDK 17.\\n","sidebar":false},"headers":[],"relativePath":"blog/2022/12/wrenidm-6-1-0-released.md","filePath":"blog/2022/12/wrenidm-6-1-0-released.md"}'),d={name:"blog/2022/12/wrenidm-6-1-0-released.md"},c=e("p",null,[l("Brand new release "),e("a",{href:"https://github.com/WrenSecurity/wrenidm/releases/tag/6.1.0",target:"_blank",rel:"noreferrer"},"Wren:IDM 6.1.0"),l(" has been published. This release is fully compatible with JDK 17 and Maven "),e("code",null,"groupId"),l(" of all modules was switched to our package "),e("code",null,"org.wrensecurity.wrenidm"),l(".")],-1),h=e("h2",{id:"changes",tabindex:"-1"},[l("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),u=e("p",null,"List of significant changes:",-1),p=e("ul",null,[e("li",null,"Add Java 17 support and drop Java 8 support"),e("li",null,[l("Change Maven "),e("code",null,"groupId"),l(" to "),e("code",null,"org.wrensecurity.wrenidm")])],-1),g=e("p",null,"Other changes:",-1),m=e("ul",null,[e("li",null,[l("Change Maven packaging from "),e("code",null,"bundle"),l(" to "),e("code",null,"jar"),l(" ("),e("a",{href:"https://github.com/WrenSecurity/wrenidm/issues/112",target:"_blank",rel:"noreferrer"},"#112"),l(")")]),e("li",null,[l("Support for custom operation-specific options in provisioner ("),e("a",{href:"https://github.com/WrenSecurity/wrenidm/issues/124",target:"_blank",rel:"noreferrer"},"#124"),l(")")]),e("li",null,[l("Workaround Rhino JS file encoding issue ("),e("a",{href:"https://github.com/WrenSecurity/wrenidm/issues/130",target:"_blank",rel:"noreferrer"},"#130"),l(")")]),e("li",null,"Improve docker build (multistage with buildkit cache)"),e("li",null,[l("Upgrade "),e("code",null,"wrensec-parent"),l(" to the latest release ("),e("code",null,"4.0.0"),l(")")]),e("li",null,[l("Upgrade "),e("code",null,"wrensec-commons"),l(" to "),e("code",null,"22.4.0")]),e("li",null,[l("Upgrade "),e("code",null,"wrensec-ui"),l(" to "),e("code",null,"22.1.1")]),e("li",null,[l("Upgrade "),e("code",null,"wrenicf-java-framework"),l(" to "),e("code",null,"1.5.3.0")]),e("li",null,[l("Upgrade Rhino JS to "),e("code",null,"1.7.14")])],-1),k=e("h2",{id:"how-to-get",tabindex:"-1"},[l("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),b=e("p",null,[l("You can build your own binary as described by "),e("a",{href:"https://github.com/WrenSecurity/wrenidm/blob/main/README.md#build-the-source-code",target:"_blank",rel:"noreferrer"},"README"),l(".")],-1),_=e("p",null,[l("Alternatively you can use the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Docker Hub"),l(":")],-1),f=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrenidm-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrenidm:6.1.0")])])])],-1);function w(y,F,C,v,B,D){const r=a("Post");return o(),s("div",null,[i(r,null,{default:n(()=>[c,h,u,p,g,m,k,b,_,f]),_:1})])}const M=t(d,[["render",w]]);export{E as __pageData,M as default}; diff --git a/assets/blog_2023_01_happy-2023.md.pqXSXs90.js b/assets/blog_2023_01_happy-2023.md.pqXSXs90.js new file mode 100644 index 0000000..c822eaf --- /dev/null +++ b/assets/blog_2023_01_happy-2023.md.pqXSXs90.js @@ -0,0 +1 @@ +import{_ as n,c as o,J as a,w as s,G as i,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const x=JSON.parse('{"title":"Happy 2023!","description":"","frontmatter":{"title":"Happy 2023!","date":"2023-01-06T00:00:00.000Z","excerpt":"With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up!\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/01/happy-2023.md","filePath":"blog/2023/01/happy-2023.md"}'),c={name:"blog/2023/01/happy-2023.md"},u=e("p",null,"With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up!",-1),h=e("p",null,"Some 6 years ago, when ForgeRock abandoned their community edition, our journey to save the future of open-source IAM platform began. Since then, we’ve spent countless hours crafting an independent fork. Just over the course of 2022, we’ve put a lot of effort into modernization of the stack and introduced full Java 17 support, Docker images as official artifacts and many other fixes and improvements. The numbers speak for themselves:",-1),d=e("ul",null,[e("li",null,"283 commits;"),e("li",null,"52 000+ insertions and 28 000+ deletions in 3100+ files;"),e("li",null,"92 merged pull requests;"),e("li",null,"29 closed issues;"),e("li",null,"19 new releases and 26 tags.")],-1),p=e("p",null,[t("On top of that, we fully migrated from Semaphore CI to GitHub CI for automated builds, and we drafted system tests for "),e("a",{href:"https://github.com/WrenSecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Wren:IDM"),t(", "),e("a",{href:"https://github.com/WrenSecurity/wrenam",target:"_blank",rel:"noreferrer"},"Wren:AM"),t(" and "),e("a",{href:"https://github.com/WrenSecurity/wrends",target:"_blank",rel:"noreferrer"},"Wren:DS"),t(" that verify project’s release stability.")],-1),f=e("p",null,"In addition to the purely technical advances, we’ve significantly improved the documentation infrastructure to start rebuilding what we had lost during the fork process, namely:",-1),m=e("ul",null,[e("li",null,"new wrensecurity.org website based on Vitepress;"),e("li",null,"new documentation platform (docs.wrensecurity.org) based on Antora;"),e("li",null,[t("skeleton of "),e("a",{href:"https://github.com/WrenSecurity/wrenidm-docs",target:"_blank",rel:"noreferrer"},"wrenidm-docs"),t(", "),e("a",{href:"https://github.com/WrenSecurity/wrends-docs",target:"_blank",rel:"noreferrer"},"wrends-docs"),t(" and "),e("a",{href:"https://github.com/WrenSecurity/wrenam-docs",target:"_blank",rel:"noreferrer"},"wrenam-docs"),t(" with WIP content;")]),e("li",null,[e("a",{href:"https://github.com/WrenSecurity/wrenidm-cookbook",target:"_blank",rel:"noreferrer"},"wrenidm-cookbook"),t(" with various IdM samples.")])],-1),g=e("p",null,[t("You might have noticed that our focus was shaped mainly by our passion for Identity Management. This led us to the point where "),e("a",{href:"https://github.com/WrenSecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Wren:IDM"),t(" became a reliable foundation for IDM implementations of any scale. But the Wren Security Suite wouldn't be complete without its Access Management essentials, and we’re very aware that it has not received the care it deserves. That's why we are thrilled to announce that we will kickstart 2023 with a completely upgraded "),e("a",{href:"https://github.com/WrenSecurity/wrends",target:"_blank",rel:"noreferrer"},"Wren:DS"),t(" (former OpenDJ), shortly followed by "),e("a",{href:"https://github.com/WrenSecurity/wrenam",target:"_blank",rel:"noreferrer"},"Wren:AM"),t(", the successor of OpenAM.")],-1),w=e("p",null,"Upgraded technological stack, carefully curated changes, Docker images and seamless migration will provide a reliable replacement for those who still run their aging OpenAM and OpenDS installations.",-1),b=e("p",null,[t("Follow us on "),e("a",{href:"https://gitter.im/WrenSecurity/Lobby",target:"_blank",rel:"noreferrer"},"Gitter"),t(", star our "),e("a",{href:"https://github.com/WrenSecurity",target:"_blank",rel:"noreferrer"},"GitHub"),t(" and stay tuned.")],-1),_=e("p",null,"Happy New Year!",-1);function y(k,v,W,S,M,D){const r=i("Post");return l(),o("div",null,[a(r,null,{default:s(()=>[u,h,d,p,f,m,g,w,b,_]),_:1})])}const A=n(c,[["render",y]]);export{x as __pageData,A as default}; diff --git a/assets/blog_2023_01_happy-2023.md.pqXSXs90.lean.js b/assets/blog_2023_01_happy-2023.md.pqXSXs90.lean.js new file mode 100644 index 0000000..c822eaf --- /dev/null +++ b/assets/blog_2023_01_happy-2023.md.pqXSXs90.lean.js @@ -0,0 +1 @@ +import{_ as n,c as o,J as a,w as s,G as i,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const x=JSON.parse('{"title":"Happy 2023!","description":"","frontmatter":{"title":"Happy 2023!","date":"2023-01-06T00:00:00.000Z","excerpt":"With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up!\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/01/happy-2023.md","filePath":"blog/2023/01/happy-2023.md"}'),c={name:"blog/2023/01/happy-2023.md"},u=e("p",null,"With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up!",-1),h=e("p",null,"Some 6 years ago, when ForgeRock abandoned their community edition, our journey to save the future of open-source IAM platform began. Since then, we’ve spent countless hours crafting an independent fork. Just over the course of 2022, we’ve put a lot of effort into modernization of the stack and introduced full Java 17 support, Docker images as official artifacts and many other fixes and improvements. The numbers speak for themselves:",-1),d=e("ul",null,[e("li",null,"283 commits;"),e("li",null,"52 000+ insertions and 28 000+ deletions in 3100+ files;"),e("li",null,"92 merged pull requests;"),e("li",null,"29 closed issues;"),e("li",null,"19 new releases and 26 tags.")],-1),p=e("p",null,[t("On top of that, we fully migrated from Semaphore CI to GitHub CI for automated builds, and we drafted system tests for "),e("a",{href:"https://github.com/WrenSecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Wren:IDM"),t(", "),e("a",{href:"https://github.com/WrenSecurity/wrenam",target:"_blank",rel:"noreferrer"},"Wren:AM"),t(" and "),e("a",{href:"https://github.com/WrenSecurity/wrends",target:"_blank",rel:"noreferrer"},"Wren:DS"),t(" that verify project’s release stability.")],-1),f=e("p",null,"In addition to the purely technical advances, we’ve significantly improved the documentation infrastructure to start rebuilding what we had lost during the fork process, namely:",-1),m=e("ul",null,[e("li",null,"new wrensecurity.org website based on Vitepress;"),e("li",null,"new documentation platform (docs.wrensecurity.org) based on Antora;"),e("li",null,[t("skeleton of "),e("a",{href:"https://github.com/WrenSecurity/wrenidm-docs",target:"_blank",rel:"noreferrer"},"wrenidm-docs"),t(", "),e("a",{href:"https://github.com/WrenSecurity/wrends-docs",target:"_blank",rel:"noreferrer"},"wrends-docs"),t(" and "),e("a",{href:"https://github.com/WrenSecurity/wrenam-docs",target:"_blank",rel:"noreferrer"},"wrenam-docs"),t(" with WIP content;")]),e("li",null,[e("a",{href:"https://github.com/WrenSecurity/wrenidm-cookbook",target:"_blank",rel:"noreferrer"},"wrenidm-cookbook"),t(" with various IdM samples.")])],-1),g=e("p",null,[t("You might have noticed that our focus was shaped mainly by our passion for Identity Management. This led us to the point where "),e("a",{href:"https://github.com/WrenSecurity/wrenidm",target:"_blank",rel:"noreferrer"},"Wren:IDM"),t(" became a reliable foundation for IDM implementations of any scale. But the Wren Security Suite wouldn't be complete without its Access Management essentials, and we’re very aware that it has not received the care it deserves. That's why we are thrilled to announce that we will kickstart 2023 with a completely upgraded "),e("a",{href:"https://github.com/WrenSecurity/wrends",target:"_blank",rel:"noreferrer"},"Wren:DS"),t(" (former OpenDJ), shortly followed by "),e("a",{href:"https://github.com/WrenSecurity/wrenam",target:"_blank",rel:"noreferrer"},"Wren:AM"),t(", the successor of OpenAM.")],-1),w=e("p",null,"Upgraded technological stack, carefully curated changes, Docker images and seamless migration will provide a reliable replacement for those who still run their aging OpenAM and OpenDS installations.",-1),b=e("p",null,[t("Follow us on "),e("a",{href:"https://gitter.im/WrenSecurity/Lobby",target:"_blank",rel:"noreferrer"},"Gitter"),t(", star our "),e("a",{href:"https://github.com/WrenSecurity",target:"_blank",rel:"noreferrer"},"GitHub"),t(" and stay tuned.")],-1),_=e("p",null,"Happy New Year!",-1);function y(k,v,W,S,M,D){const r=i("Post");return l(),o("div",null,[a(r,null,{default:s(()=>[u,h,d,p,f,m,g,w,b,_]),_:1})])}const A=n(c,[["render",y]]);export{x as __pageData,A as default}; diff --git a/assets/blog_2023_05_wrends-5-0-0-released.md.DfrlO2MO.js b/assets/blog_2023_05_wrends-5-0-0-released.md.DfrlO2MO.js new file mode 100644 index 0000000..c1950cc --- /dev/null +++ b/assets/blog_2023_05_wrends-5-0-0-released.md.DfrlO2MO.js @@ -0,0 +1 @@ +import{_ as a,c as n,J as i,w as r,G as l,o,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const W=JSON.parse('{"title":"Wren:DS 5.0.0 Released","description":"","frontmatter":{"title":"Wren:DS 5.0.0 Released","date":"2023-05-16T00:00:00.000Z","excerpt":"We are excited to announce the release of Wren:DS 5.0.0. This release is the first official\\nWren Security release compatible with JDK 17 and zero dependencies on legacy infrastructure.\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/05/wrends-5-0-0-released.md","filePath":"blog/2023/05/wrends-5-0-0-released.md"}'),h={name:"blog/2023/05/wrends-5-0-0-released.md"},d=e("p",null,[t("We are excited to announce that the brand new release of "),e("a",{href:"https://github.com/WrenSecurity/wrends/releases/5.0.0",target:"_blank",rel:"noreferrer"},"Wren:DS 5.0.0"),t(" is finally out! This is the first release of Wren:DS that is fully independent of the legacy infrastructure. Its technological stack has been updated to be compatible with JDK 17, and all changes have been carefully curated to provide a high level of security while still offering a reliable migration path from legacy OpenDJ installations.")],-1),c=e("p",null,"If you are already running Wren:DS or an unsupported version of OpenDJ, we strongly recommend that you upgrade, as only the new versions will receive the support they deserve.",-1),p=e("p",null,"What's next? Wren:AM. Stay tuned!",-1),u=e("h2",{id:"changes",tabindex:"-1"},[t("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),g=e("p",null,"List of significant changes:",-1),k=e("ul",null,[e("li",null,"Add Java 17 support and drop Java 8 support"),e("li",null,[t("Change Maven "),e("code",null,"groupId"),t(" to "),e("code",null,"org.wrensecurity.wrends")]),e("li",null,[t("Upgrade to the newest "),e("code",null,"wrensec-parent"),t(" and "),e("code",null,"wrensec-commons")]),e("li",null,"Upgrade Berkley DB JE dependency and remove PDB backend"),e("li",null,"Update visible project title and logo to Wren:DS"),e("li",null,"Switch to GitHub Actions for CI, create new project for system testing"),e("li",null,"Add docker build with amd64 and aarch64 support and Docker Hub publishing pipeline"),e("li",null,"Remove or replace files with non-CDDL license")],-1),f=e("h2",{id:"how-to-get",tabindex:"-1"},[t("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),y=e("p",null,[t("Refer to the "),e("a",{href:"https://docs.wrensecurity.org/wrends/latest/getting-started.html",target:"_blank",rel:"noreferrer"},"Getting Started"),t(" page to learn how to get and run Wren:DS.")],-1),_=e("p",null,[t("Alternatively you can run the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrends",target:"_blank",rel:"noreferrer"},"Docker Hub"),t(":")],-1),m=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrends-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 1389"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":1389"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 1636"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":1636"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrends:5.0.0")])])])],-1);function w(b,F,C,v,D,B){const s=l("Post");return o(),n("div",null,[i(s,null,{default:r(()=>[d,c,p,u,g,k,f,y,_,m]),_:1})])}const x=a(h,[["render",w]]);export{W as __pageData,x as default}; diff --git a/assets/blog_2023_05_wrends-5-0-0-released.md.DfrlO2MO.lean.js b/assets/blog_2023_05_wrends-5-0-0-released.md.DfrlO2MO.lean.js new file mode 100644 index 0000000..c1950cc --- /dev/null +++ b/assets/blog_2023_05_wrends-5-0-0-released.md.DfrlO2MO.lean.js @@ -0,0 +1 @@ +import{_ as a,c as n,J as i,w as r,G as l,o,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const W=JSON.parse('{"title":"Wren:DS 5.0.0 Released","description":"","frontmatter":{"title":"Wren:DS 5.0.0 Released","date":"2023-05-16T00:00:00.000Z","excerpt":"We are excited to announce the release of Wren:DS 5.0.0. This release is the first official\\nWren Security release compatible with JDK 17 and zero dependencies on legacy infrastructure.\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/05/wrends-5-0-0-released.md","filePath":"blog/2023/05/wrends-5-0-0-released.md"}'),h={name:"blog/2023/05/wrends-5-0-0-released.md"},d=e("p",null,[t("We are excited to announce that the brand new release of "),e("a",{href:"https://github.com/WrenSecurity/wrends/releases/5.0.0",target:"_blank",rel:"noreferrer"},"Wren:DS 5.0.0"),t(" is finally out! This is the first release of Wren:DS that is fully independent of the legacy infrastructure. Its technological stack has been updated to be compatible with JDK 17, and all changes have been carefully curated to provide a high level of security while still offering a reliable migration path from legacy OpenDJ installations.")],-1),c=e("p",null,"If you are already running Wren:DS or an unsupported version of OpenDJ, we strongly recommend that you upgrade, as only the new versions will receive the support they deserve.",-1),p=e("p",null,"What's next? Wren:AM. Stay tuned!",-1),u=e("h2",{id:"changes",tabindex:"-1"},[t("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),g=e("p",null,"List of significant changes:",-1),k=e("ul",null,[e("li",null,"Add Java 17 support and drop Java 8 support"),e("li",null,[t("Change Maven "),e("code",null,"groupId"),t(" to "),e("code",null,"org.wrensecurity.wrends")]),e("li",null,[t("Upgrade to the newest "),e("code",null,"wrensec-parent"),t(" and "),e("code",null,"wrensec-commons")]),e("li",null,"Upgrade Berkley DB JE dependency and remove PDB backend"),e("li",null,"Update visible project title and logo to Wren:DS"),e("li",null,"Switch to GitHub Actions for CI, create new project for system testing"),e("li",null,"Add docker build with amd64 and aarch64 support and Docker Hub publishing pipeline"),e("li",null,"Remove or replace files with non-CDDL license")],-1),f=e("h2",{id:"how-to-get",tabindex:"-1"},[t("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),y=e("p",null,[t("Refer to the "),e("a",{href:"https://docs.wrensecurity.org/wrends/latest/getting-started.html",target:"_blank",rel:"noreferrer"},"Getting Started"),t(" page to learn how to get and run Wren:DS.")],-1),_=e("p",null,[t("Alternatively you can run the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrends",target:"_blank",rel:"noreferrer"},"Docker Hub"),t(":")],-1),m=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrends-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 1389"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":1389"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 1636"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":1636"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrends:5.0.0")])])])],-1);function w(b,F,C,v,D,B){const s=l("Post");return o(),n("div",null,[i(s,null,{default:r(()=>[d,c,p,u,g,k,f,y,_,m]),_:1})])}const x=a(h,[["render",w]]);export{W as __pageData,x as default}; diff --git a/assets/blog_2023_10_cve-numbering-authority.md.9xZH9qbP.js b/assets/blog_2023_10_cve-numbering-authority.md.9xZH9qbP.js new file mode 100644 index 0000000..72910a4 --- /dev/null +++ b/assets/blog_2023_10_cve-numbering-authority.md.9xZH9qbP.js @@ -0,0 +1 @@ +import{_ as i,c as a,J as s,w as o,G as n,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const P=JSON.parse(`{"title":"We've been authorized as CVE Numbering Authority","description":"","frontmatter":{"title":"We've been authorized as CVE Numbering Authority","date":"2023-10-17T00:00:00.000Z","excerpt":"It's our pleasure to announce, that Wren Security has been authorized by the Common Vulnerabilities and Exposures (CVE) Program as a CVE Numbering Authority (CNA).\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/10/cve-numbering-authority.md","filePath":"blog/2023/10/cve-numbering-authority.md"}`),c={name:"blog/2023/10/cve-numbering-authority.md"},u=e("p",null,[t("It's our pleasure to announce, that Wren Security has been authorized by the Common Vulnerabilities and Exposures "),e("a",{href:"https://www.cve.org",target:"_blank",rel:"noreferrer"},"CVE"),t(" Program as a CVE Numbering Authority "),e("a",{href:"https://www.cve.org/ResourcesSupport/Glossary?activeTerm=glossaryCNA#",target:"_blank",rel:"noreferrer"},"CNA"),t(". As a CNA, we have the ability to directly assign CVE IDs and publish CVE records for vulnerabilities discovered in our projects.")],-1),h=e("p",null,"Security is a fundamental aspect of our efforts, which is even reflected in our name. Therefore, we have recently made several releases that include significant security improvements and have clarified our disclosure processes. And since the principles of open source dictate that we respect transparency, it was a natural step to contribute to the global initiative of identifying, defining, and cataloging publicly-disclosed cybersecurity vulnerabilities.",-1),d=e("p",null,"It's a commitment, but we believe that it will help to build trust with our users.",-1),b=e("h2",{id:"what-is-cve-program",tabindex:"-1"},[t("What is CVE Program? "),e("a",{class:"header-anchor",href:"#what-is-cve-program","aria-label":'Permalink to "What is CVE Program?"'},"​")],-1),p=e("p",null,"The mission of the Common Vulnerabilities and Exposures (CVE®) program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities. There is one CVE Record for each vulnerability in the catalog. The vulnerabilities are discovered then assigned and published by organizations from around the world that have partnered with the CVE Program. Partners publish CVE Records to communicate consistent descriptions of vulnerabilities. Information technology and cybersecurity professionals use CVE Records to ensure they are discussing the same issue, and to coordinate their efforts to prioritize and address the vulnerabilities.",-1),m=e("h2",{id:"what-are-cnas",tabindex:"-1"},[t("What are CNAs? "),e("a",{class:"header-anchor",href:"#what-are-cnas","aria-label":'Permalink to "What are CNAs?"'},"​")],-1),f=e("p",null,"CNAs are organizations responsible for the regular assignment of CVE IDs to vulnerabilities, and for creating and publishing information about the Vulnerability in the associated CVE Record. Each CNA has a specific Scope of responsibility for vulnerability identification and publishing.",-1),g=e("h2",{id:"disclosure",tabindex:"-1"},[t("Disclosure "),e("a",{class:"header-anchor",href:"#disclosure","aria-label":'Permalink to "Disclosure"'},"​")],-1),y=e("p",null,[t("If you think you've found a vulnerability, please don't disclose it publicly until you've checked with us. Please, refer to the "),e("a",{href:"https://wrensecurity.org/community/disclosure.html",target:"_blank",rel:"noreferrer"},"disclosure policy"),t(".")],-1);function v(_,C,w,V,E,N){const r=n("Post");return l(),a("div",null,[s(r,null,{default:o(()=>[u,h,d,b,p,m,f,g,y]),_:1})])}const x=i(c,[["render",v]]);export{P as __pageData,x as default}; diff --git a/assets/blog_2023_10_cve-numbering-authority.md.9xZH9qbP.lean.js b/assets/blog_2023_10_cve-numbering-authority.md.9xZH9qbP.lean.js new file mode 100644 index 0000000..72910a4 --- /dev/null +++ b/assets/blog_2023_10_cve-numbering-authority.md.9xZH9qbP.lean.js @@ -0,0 +1 @@ +import{_ as i,c as a,J as s,w as o,G as n,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const P=JSON.parse(`{"title":"We've been authorized as CVE Numbering Authority","description":"","frontmatter":{"title":"We've been authorized as CVE Numbering Authority","date":"2023-10-17T00:00:00.000Z","excerpt":"It's our pleasure to announce, that Wren Security has been authorized by the Common Vulnerabilities and Exposures (CVE) Program as a CVE Numbering Authority (CNA).\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/10/cve-numbering-authority.md","filePath":"blog/2023/10/cve-numbering-authority.md"}`),c={name:"blog/2023/10/cve-numbering-authority.md"},u=e("p",null,[t("It's our pleasure to announce, that Wren Security has been authorized by the Common Vulnerabilities and Exposures "),e("a",{href:"https://www.cve.org",target:"_blank",rel:"noreferrer"},"CVE"),t(" Program as a CVE Numbering Authority "),e("a",{href:"https://www.cve.org/ResourcesSupport/Glossary?activeTerm=glossaryCNA#",target:"_blank",rel:"noreferrer"},"CNA"),t(". As a CNA, we have the ability to directly assign CVE IDs and publish CVE records for vulnerabilities discovered in our projects.")],-1),h=e("p",null,"Security is a fundamental aspect of our efforts, which is even reflected in our name. Therefore, we have recently made several releases that include significant security improvements and have clarified our disclosure processes. And since the principles of open source dictate that we respect transparency, it was a natural step to contribute to the global initiative of identifying, defining, and cataloging publicly-disclosed cybersecurity vulnerabilities.",-1),d=e("p",null,"It's a commitment, but we believe that it will help to build trust with our users.",-1),b=e("h2",{id:"what-is-cve-program",tabindex:"-1"},[t("What is CVE Program? "),e("a",{class:"header-anchor",href:"#what-is-cve-program","aria-label":'Permalink to "What is CVE Program?"'},"​")],-1),p=e("p",null,"The mission of the Common Vulnerabilities and Exposures (CVE®) program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities. There is one CVE Record for each vulnerability in the catalog. The vulnerabilities are discovered then assigned and published by organizations from around the world that have partnered with the CVE Program. Partners publish CVE Records to communicate consistent descriptions of vulnerabilities. Information technology and cybersecurity professionals use CVE Records to ensure they are discussing the same issue, and to coordinate their efforts to prioritize and address the vulnerabilities.",-1),m=e("h2",{id:"what-are-cnas",tabindex:"-1"},[t("What are CNAs? "),e("a",{class:"header-anchor",href:"#what-are-cnas","aria-label":'Permalink to "What are CNAs?"'},"​")],-1),f=e("p",null,"CNAs are organizations responsible for the regular assignment of CVE IDs to vulnerabilities, and for creating and publishing information about the Vulnerability in the associated CVE Record. Each CNA has a specific Scope of responsibility for vulnerability identification and publishing.",-1),g=e("h2",{id:"disclosure",tabindex:"-1"},[t("Disclosure "),e("a",{class:"header-anchor",href:"#disclosure","aria-label":'Permalink to "Disclosure"'},"​")],-1),y=e("p",null,[t("If you think you've found a vulnerability, please don't disclose it publicly until you've checked with us. Please, refer to the "),e("a",{href:"https://wrensecurity.org/community/disclosure.html",target:"_blank",rel:"noreferrer"},"disclosure policy"),t(".")],-1);function v(_,C,w,V,E,N){const r=n("Post");return l(),a("div",null,[s(r,null,{default:o(()=>[u,h,d,b,p,m,f,g,y]),_:1})])}const x=i(c,[["render",v]]);export{P as __pageData,x as default}; diff --git a/assets/blog_2023_10_wrenam-15-0-0-released.md.8P3vg18x.js b/assets/blog_2023_10_wrenam-15-0-0-released.md.8P3vg18x.js new file mode 100644 index 0000000..5ad93ac --- /dev/null +++ b/assets/blog_2023_10_wrenam-15-0-0-released.md.8P3vg18x.js @@ -0,0 +1 @@ +import{_ as a,c as s,J as i,w as r,G as o,o as l,a as t,m as e}from"./chunks/framework.kuHzA11c.js";const D=JSON.parse(`{"title":"Wren:AM 15.0.0 Released","description":"","frontmatter":{"title":"Wren:AM 15.0.0 Released","date":"2023-10-10T00:00:00.000Z","excerpt":"We're thrilled to announce the release of the anticipated new version of Wren:AM.\\nTake a closer look at the carefully curated changes that we have worked on.\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/10/wrenam-15-0-0-released.md","filePath":"blog/2023/10/wrenam-15-0-0-released.md"}`),d={name:"blog/2023/10/wrenam-15-0-0-released.md"},h=e("p",null,"Numbers worth mentioning include:",-1),c=e("ul",null,[e("li",null,"89 pull requests merged;"),e("li",null,"136 new commits;"),e("li",null,"22 issues closed;"),e("li",null,"27 known AM security vulnerabilities fixed;"),e("li",null,"35 Dependabot alerts fixed;"),e("li",null,"93 security issues (reported by Trivy) fixed.")],-1),u=e("p",null,"If you're already running Wren:AM or an unsupported version of OpenAM, we strongly recommend upgrading to get the best out of your access management solution.",-1),p=e("h2",{id:"changes",tabindex:"-1"},[t("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),g=e("p",null,"List of significant changes:",-1),m=e("ul",null,[e("li",null,"Upgraded build pipeline (wrensec-parent, JFrog repository, GitHub Actions)"),e("li",null,"Upgraded dependencies (including switch to Jakarta compatible coordinates)"),e("li",null,"Added support for Java 17 as the default build and runtime environment"),e("li",null,"Added Dockerfile and official images published to Docker Hub"),e("li",null,"Fixed ton of security, build and runtime issues")],-1),f=e("p",null,[t("Review all the changes on "),e("a",{href:"https://github.com/WrenSecurity/wrenam/releases/15.0.0",target:"_blank",rel:"noreferrer"},"GitHub"),t(".")],-1),k=e("h2",{id:"how-to-get",tabindex:"-1"},[t("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),_=e("p",null,[t("Refer to the "),e("a",{href:"https://docs.wrensecurity.org/wrenam/latest/getting-started.html",target:"_blank",rel:"noreferrer"},"Getting Started"),t(" page to learn how to get and run Wren:AM.")],-1),w=e("p",null,[t("Alternatively you can run the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrenam",target:"_blank",rel:"noreferrer"},"Docker Hub"),t(":")],-1),b=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrenam-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrenam:15.0.0")])])])],-1);function y(F,v,C,A,x,B){const n=o("Post");return l(),s("div",null,[i(n,null,{default:r(()=>[t(" We're thrilled to announce the release of the anticipated new version of Wren:AM. Following Wren:IDM and Wren:DS, it's now completely independent of the legacy infrastructure, features an upgraded technology stack, and is compatible with JDK 17 (with preparations for Jakarta EE). Additionally, we've addressed a significant number of issues from previous versions, predominantly the security ones. The project remains highly compatible with abandoned community versions of OpenAM, allowing for a seamless migration process, with the added option to leverage Docker images for added convenience. "),h,c,u,p,g,m,f,k,_,w,b]),_:1})])}const M=a(d,[["render",y]]);export{D as __pageData,M as default}; diff --git a/assets/blog_2023_10_wrenam-15-0-0-released.md.8P3vg18x.lean.js b/assets/blog_2023_10_wrenam-15-0-0-released.md.8P3vg18x.lean.js new file mode 100644 index 0000000..5ad93ac --- /dev/null +++ b/assets/blog_2023_10_wrenam-15-0-0-released.md.8P3vg18x.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,J as i,w as r,G as o,o as l,a as t,m as e}from"./chunks/framework.kuHzA11c.js";const D=JSON.parse(`{"title":"Wren:AM 15.0.0 Released","description":"","frontmatter":{"title":"Wren:AM 15.0.0 Released","date":"2023-10-10T00:00:00.000Z","excerpt":"We're thrilled to announce the release of the anticipated new version of Wren:AM.\\nTake a closer look at the carefully curated changes that we have worked on.\\n","sidebar":false},"headers":[],"relativePath":"blog/2023/10/wrenam-15-0-0-released.md","filePath":"blog/2023/10/wrenam-15-0-0-released.md"}`),d={name:"blog/2023/10/wrenam-15-0-0-released.md"},h=e("p",null,"Numbers worth mentioning include:",-1),c=e("ul",null,[e("li",null,"89 pull requests merged;"),e("li",null,"136 new commits;"),e("li",null,"22 issues closed;"),e("li",null,"27 known AM security vulnerabilities fixed;"),e("li",null,"35 Dependabot alerts fixed;"),e("li",null,"93 security issues (reported by Trivy) fixed.")],-1),u=e("p",null,"If you're already running Wren:AM or an unsupported version of OpenAM, we strongly recommend upgrading to get the best out of your access management solution.",-1),p=e("h2",{id:"changes",tabindex:"-1"},[t("Changes "),e("a",{class:"header-anchor",href:"#changes","aria-label":'Permalink to "Changes"'},"​")],-1),g=e("p",null,"List of significant changes:",-1),m=e("ul",null,[e("li",null,"Upgraded build pipeline (wrensec-parent, JFrog repository, GitHub Actions)"),e("li",null,"Upgraded dependencies (including switch to Jakarta compatible coordinates)"),e("li",null,"Added support for Java 17 as the default build and runtime environment"),e("li",null,"Added Dockerfile and official images published to Docker Hub"),e("li",null,"Fixed ton of security, build and runtime issues")],-1),f=e("p",null,[t("Review all the changes on "),e("a",{href:"https://github.com/WrenSecurity/wrenam/releases/15.0.0",target:"_blank",rel:"noreferrer"},"GitHub"),t(".")],-1),k=e("h2",{id:"how-to-get",tabindex:"-1"},[t("How to get "),e("a",{class:"header-anchor",href:"#how-to-get","aria-label":'Permalink to "How to get"'},"​")],-1),_=e("p",null,[t("Refer to the "),e("a",{href:"https://docs.wrensecurity.org/wrenam/latest/getting-started.html",target:"_blank",rel:"noreferrer"},"Getting Started"),t(" page to learn how to get and run Wren:AM.")],-1),w=e("p",null,[t("Alternatively you can run the official Docker image from "),e("a",{href:"https://hub.docker.com/r/wrensecurity/wrenam",target:"_blank",rel:"noreferrer"},"Docker Hub"),t(":")],-1),b=e("div",{class:"language-bash vp-adaptive-theme"},[e("button",{title:"Copy Code",class:"copy"}),e("span",{class:"lang"},"bash"),e("pre",{class:"shiki shiki-themes github-light github-dark vp-code"},[e("code",null,[e("span",{class:"line"},[e("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"docker"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," run"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --rm"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," --name"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrenam-test"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -p"),e("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," 8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},":8080"),e("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," wrensecurity/wrenam:15.0.0")])])])],-1);function y(F,v,C,A,x,B){const n=o("Post");return l(),s("div",null,[i(n,null,{default:r(()=>[t(" We're thrilled to announce the release of the anticipated new version of Wren:AM. Following Wren:IDM and Wren:DS, it's now completely independent of the legacy infrastructure, features an upgraded technology stack, and is compatible with JDK 17 (with preparations for Jakarta EE). Additionally, we've addressed a significant number of issues from previous versions, predominantly the security ones. The project remains highly compatible with abandoned community versions of OpenAM, allowing for a seamless migration process, with the added option to leverage Docker images for added convenience. "),h,c,u,p,g,m,f,k,_,w,b]),_:1})])}const M=a(d,[["render",y]]);export{D as __pageData,M as default}; diff --git a/assets/blog_2024_01_happy-2024.md.CEGfrAqS.js b/assets/blog_2024_01_happy-2024.md.CEGfrAqS.js new file mode 100644 index 0000000..2236aa6 --- /dev/null +++ b/assets/blog_2024_01_happy-2024.md.CEGfrAqS.js @@ -0,0 +1 @@ +import{_ as r,c as a,J as o,w as s,G as i,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const V=JSON.parse(`{"title":"2023 in Review and 2024 Plans and Wishes","description":"","frontmatter":{"title":"2023 in Review and 2024 Plans and Wishes","date":"2024-01-17T00:00:00.000Z","excerpt":"Last year passed by quickly, and now it's time to reflect on the highlights of 2023 and outline plans for 2024.\\n","sidebar":false},"headers":[],"relativePath":"blog/2024/01/happy-2024.md","filePath":"blog/2024/01/happy-2024.md"}`),h={name:"blog/2024/01/happy-2024.md"},d=e("p",null,[t("The past year's efforts were mainly focused on the Access Management tools. Both "),e("a",{href:"https://wrensecurity.org/projects/wrends/",target:"_blank",rel:"noreferrer"},"Wren:DS"),t(" and "),e("a",{href:"https://wrensecurity.org/projects/wrenam/",target:"_blank",rel:"noreferrer"},"Wren:AM"),t(" have undergone significant upgrades and security hardening to meet the standards earlier set by "),e("a",{href:"https://wrensecurity.org/projects/wrenidm/",target:"_blank",rel:"noreferrer"},"Wren:IDM"),t(". This means that the key components are now independent of the legacy infrastructure and have also been polished to ensure the high level of security and robustness. This progress paved the way for the introduction of new features, such as Cisco Duo authentication module.")],-1),c=e("p",null,[t("On top of that there was regular maintenance and improvements in the development infrastructure, e.g. cleanup of the UI libraries. To highlight our dedication to delivering dependable software, we have become a CVE numbering authority in the "),e("a",{href:"http://cve.org/",target:"_blank",rel:"noreferrer"},"CVE.org"),t(" Program, allowing us to transparently manage and share potential security vulnerabilities (see "),e("a",{href:"https://wrensecurity.org/community/disclosure.html",target:"_blank",rel:"noreferrer"},"Disclosure Policy"),t("). The importance of maintaining an active online presence led us to create an X (Twitter) account providing a more convenient way to share updates. "),e("a",{href:"https://twitter.com/WrenSecurity",target:"_blank",rel:"noreferrer"},"Follow us"),t(" to keep up with the latest news.")],-1),p=e("h2",{id:"plans-and-wishes-for-2024",tabindex:"-1"},[t("Plans and Wishes for 2024 "),e("a",{class:"header-anchor",href:"#plans-and-wishes-for-2024","aria-label":'Permalink to "Plans and Wishes for 2024"'},"​")],-1),u=e("p",null,[t("Looking ahead to 2024, our goal remains to get rid of the legacy heritage. We will soon release an upgraded and independent version of Wren:IG. After that, we will continue with the "),e("a",{href:"https://wrensecurity.org/projects/wrenicf/",target:"_blank",rel:"noreferrer"},"Wren:ICF"),t(" framework components to ensure a seamless interplay with the rest of the platform.")],-1),f=e("p",null,"Addressing the unfinished redesign of the Wren:AM administration interface is a priority, as it contributes significantly to our credibility. We'll focus on rewriting the remaining pages to enhance user experience.",-1),g=e("p",null,"For the same reasons, we will continue to fill the gaps in the documentation and create basic guides to help users get started.",-1),m=e("p",null,[t("What else? We'd like to keep up with the trends and go passwordless. So, we will start digging into the integration of "),e("a",{href:"https://fidoalliance.org/what-is-fido/",target:"_blank",rel:"noreferrer"},"FIDO standards"),t(".")],-1),w=e("p",null,"We aspire to improve the clarity of our development roadmap. This involves open planning of releases on GitHub allowing our community to easily track progress through our backlog.",-1),_=e("h2",{id:"conclusion",tabindex:"-1"},[t("Conclusion "),e("a",{class:"header-anchor",href:"#conclusion","aria-label":'Permalink to "Conclusion"'},"​")],-1),y=e("p",null,"As we wrap up 2023, let's look at the year in numbers:",-1),b=e("ul",null,[e("li",null,"267 commits;"),e("li",null,"130 000+ insertions and 120 000+ deletions in 4200+ files;"),e("li",null,"112 merged pull requests;"),e("li",null,"36 closed issues;"),e("li",null,"28 new releases and 35 tags;"),e("li",null,"285 dependabot issues fixed.")],-1),v=e("p",null,"We are determined to maintain the same pace in 2024 and deepen our footprint in the open-source identity and access management field.",-1),k=e("p",null,"Happy new year!",-1);function W(P,x,T,C,A,D){const n=i("Post");return l(),a("div",null,[o(n,null,{default:s(()=>[d,c,p,u,f,g,m,w,_,y,b,v,k]),_:1})])}const j=r(h,[["render",W]]);export{V as __pageData,j as default}; diff --git a/assets/blog_2024_01_happy-2024.md.CEGfrAqS.lean.js b/assets/blog_2024_01_happy-2024.md.CEGfrAqS.lean.js new file mode 100644 index 0000000..2236aa6 --- /dev/null +++ b/assets/blog_2024_01_happy-2024.md.CEGfrAqS.lean.js @@ -0,0 +1 @@ +import{_ as r,c as a,J as o,w as s,G as i,o as l,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const V=JSON.parse(`{"title":"2023 in Review and 2024 Plans and Wishes","description":"","frontmatter":{"title":"2023 in Review and 2024 Plans and Wishes","date":"2024-01-17T00:00:00.000Z","excerpt":"Last year passed by quickly, and now it's time to reflect on the highlights of 2023 and outline plans for 2024.\\n","sidebar":false},"headers":[],"relativePath":"blog/2024/01/happy-2024.md","filePath":"blog/2024/01/happy-2024.md"}`),h={name:"blog/2024/01/happy-2024.md"},d=e("p",null,[t("The past year's efforts were mainly focused on the Access Management tools. Both "),e("a",{href:"https://wrensecurity.org/projects/wrends/",target:"_blank",rel:"noreferrer"},"Wren:DS"),t(" and "),e("a",{href:"https://wrensecurity.org/projects/wrenam/",target:"_blank",rel:"noreferrer"},"Wren:AM"),t(" have undergone significant upgrades and security hardening to meet the standards earlier set by "),e("a",{href:"https://wrensecurity.org/projects/wrenidm/",target:"_blank",rel:"noreferrer"},"Wren:IDM"),t(". This means that the key components are now independent of the legacy infrastructure and have also been polished to ensure the high level of security and robustness. This progress paved the way for the introduction of new features, such as Cisco Duo authentication module.")],-1),c=e("p",null,[t("On top of that there was regular maintenance and improvements in the development infrastructure, e.g. cleanup of the UI libraries. To highlight our dedication to delivering dependable software, we have become a CVE numbering authority in the "),e("a",{href:"http://cve.org/",target:"_blank",rel:"noreferrer"},"CVE.org"),t(" Program, allowing us to transparently manage and share potential security vulnerabilities (see "),e("a",{href:"https://wrensecurity.org/community/disclosure.html",target:"_blank",rel:"noreferrer"},"Disclosure Policy"),t("). The importance of maintaining an active online presence led us to create an X (Twitter) account providing a more convenient way to share updates. "),e("a",{href:"https://twitter.com/WrenSecurity",target:"_blank",rel:"noreferrer"},"Follow us"),t(" to keep up with the latest news.")],-1),p=e("h2",{id:"plans-and-wishes-for-2024",tabindex:"-1"},[t("Plans and Wishes for 2024 "),e("a",{class:"header-anchor",href:"#plans-and-wishes-for-2024","aria-label":'Permalink to "Plans and Wishes for 2024"'},"​")],-1),u=e("p",null,[t("Looking ahead to 2024, our goal remains to get rid of the legacy heritage. We will soon release an upgraded and independent version of Wren:IG. After that, we will continue with the "),e("a",{href:"https://wrensecurity.org/projects/wrenicf/",target:"_blank",rel:"noreferrer"},"Wren:ICF"),t(" framework components to ensure a seamless interplay with the rest of the platform.")],-1),f=e("p",null,"Addressing the unfinished redesign of the Wren:AM administration interface is a priority, as it contributes significantly to our credibility. We'll focus on rewriting the remaining pages to enhance user experience.",-1),g=e("p",null,"For the same reasons, we will continue to fill the gaps in the documentation and create basic guides to help users get started.",-1),m=e("p",null,[t("What else? We'd like to keep up with the trends and go passwordless. So, we will start digging into the integration of "),e("a",{href:"https://fidoalliance.org/what-is-fido/",target:"_blank",rel:"noreferrer"},"FIDO standards"),t(".")],-1),w=e("p",null,"We aspire to improve the clarity of our development roadmap. This involves open planning of releases on GitHub allowing our community to easily track progress through our backlog.",-1),_=e("h2",{id:"conclusion",tabindex:"-1"},[t("Conclusion "),e("a",{class:"header-anchor",href:"#conclusion","aria-label":'Permalink to "Conclusion"'},"​")],-1),y=e("p",null,"As we wrap up 2023, let's look at the year in numbers:",-1),b=e("ul",null,[e("li",null,"267 commits;"),e("li",null,"130 000+ insertions and 120 000+ deletions in 4200+ files;"),e("li",null,"112 merged pull requests;"),e("li",null,"36 closed issues;"),e("li",null,"28 new releases and 35 tags;"),e("li",null,"285 dependabot issues fixed.")],-1),v=e("p",null,"We are determined to maintain the same pace in 2024 and deepen our footprint in the open-source identity and access management field.",-1),k=e("p",null,"Happy new year!",-1);function W(P,x,T,C,A,D){const n=i("Post");return l(),a("div",null,[o(n,null,{default:s(()=>[d,c,p,u,f,g,m,w,_,y,b,v,k]),_:1})])}const j=r(h,[["render",W]]);export{V as __pageData,j as default}; diff --git a/assets/blog_index.md.84NojqWy.js b/assets/blog_index.md.84NojqWy.js new file mode 100644 index 0000000..c8739e6 --- /dev/null +++ b/assets/blog_index.md.84NojqWy.js @@ -0,0 +1 @@ +import{_ as o,c as t,J as a,o as n,G as s}from"./chunks/framework.kuHzA11c.js";const g=JSON.parse('{"title":"Blog","description":"","frontmatter":{"title":"Blog","sidebar":false},"headers":[],"relativePath":"blog/index.md","filePath":"blog/index.md"}'),r={name:"blog/index.md"};function l(c,d,i,p,_,m){const e=s("Blog");return n(),t("div",null,[a(e)])}const x=o(r,[["render",l]]);export{g as __pageData,x as default}; diff --git a/assets/blog_index.md.84NojqWy.lean.js b/assets/blog_index.md.84NojqWy.lean.js new file mode 100644 index 0000000..c8739e6 --- /dev/null +++ b/assets/blog_index.md.84NojqWy.lean.js @@ -0,0 +1 @@ +import{_ as o,c as t,J as a,o as n,G as s}from"./chunks/framework.kuHzA11c.js";const g=JSON.parse('{"title":"Blog","description":"","frontmatter":{"title":"Blog","sidebar":false},"headers":[],"relativePath":"blog/index.md","filePath":"blog/index.md"}'),r={name:"blog/index.md"};function l(c,d,i,p,_,m){const e=s("Blog");return n(),t("div",null,[a(e)])}const x=o(r,[["render",l]]);export{g as __pageData,x as default}; diff --git a/assets/chunks/framework.kuHzA11c.js b/assets/chunks/framework.kuHzA11c.js new file mode 100644 index 0000000..94b7cf5 --- /dev/null +++ b/assets/chunks/framework.kuHzA11c.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.14 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function ds(e,t){const n=new Set(e.split(","));return t?s=>n.has(s.toLowerCase()):s=>n.has(s)}const te={},mt=[],Ee=()=>{},so=()=>!1,Dt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),hs=e=>e.startsWith("onUpdate:"),ie=Object.assign,ps=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ro=Object.prototype.hasOwnProperty,Y=(e,t)=>ro.call(e,t),B=Array.isArray,yt=e=>bn(e)==="[object Map]",Ir=e=>bn(e)==="[object Set]",U=e=>typeof e=="function",ne=e=>typeof e=="string",Et=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Mr=e=>(Z(e)||U(e))&&U(e.then)&&U(e.catch),Nr=Object.prototype.toString,bn=e=>Nr.call(e),io=e=>bn(e).slice(8,-1),Fr=e=>bn(e)==="[object Object]",gs=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ot=ds(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),vn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},oo=/-(\w)/g,Me=vn(e=>e.replace(oo,(t,n)=>n?n.toUpperCase():"")),lo=/\B([A-Z])/g,at=vn(e=>e.replace(lo,"-$1").toLowerCase()),wn=vn(e=>e.charAt(0).toUpperCase()+e.slice(1)),sn=vn(e=>e?`on${wn(e)}`:""),Qe=(e,t)=>!Object.is(e,t),Vn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},co=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ao=e=>{const t=ne(e)?Number(e):NaN;return isNaN(t)?e:t};let Vs;const $r=()=>Vs||(Vs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ms(e){if(B(e)){const t={};for(let n=0;n{if(n){const s=n.split(fo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ys(e){let t="";if(ne(e))t=e;else if(B(e))for(let n=0;nne(e)?e:e==null?"":B(e)||Z(e)&&(e.toString===Nr||!U(e.toString))?JSON.stringify(e,jr,2):String(e),jr=(e,t)=>t&&t.__v_isRef?jr(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Dn(s,i)+" =>"]=r,n),{})}:Ir(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Dn(n))}:Et(t)?Dn(t):Z(t)&&!B(t)&&!Fr(t)?String(t):t,Dn=(e,t="")=>{var n;return Et(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.14 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let be;class yo{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=be,!t&&be&&(this.index=(be.scopes||(be.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=be;try{return be=this,t()}finally{be=n}}}on(){be=this}off(){be=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=2))break}this._dirtyLevel<2&&(this._dirtyLevel=0),ft()}return this._dirtyLevel>=2}set dirty(t){this._dirtyLevel=t?2:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=ze,n=ot;try{return ze=!0,ot=this,this._runnings++,Ds(this),this.fn()}finally{Bs(this),this._runnings--,ot=n,ze=t}}stop(){var t;this.active&&(Ds(this),Bs(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function vo(e){return e.value}function Ds(e){e._trackId++,e._depsLength=0}function Bs(e){if(e.deps&&e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},cn=new WeakMap,lt=Symbol(""),es=Symbol("");function ye(e,t,n){if(ze&&ot){let s=cn.get(e);s||cn.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=Kr(()=>s.delete(n))),kr(ot,r)}}function $e(e,t,n,s,r,i){const o=cn.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&B(e)){const c=Number(s);o.forEach((u,d)=>{(d==="length"||!Et(d)&&d>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":B(e)?gs(n)&&l.push(o.get("length")):(l.push(o.get(lt)),yt(e)&&l.push(o.get(es)));break;case"delete":B(e)||(l.push(o.get(lt)),yt(e)&&l.push(o.get(es)));break;case"set":yt(e)&&l.push(o.get(lt));break}bs();for(const c of l)c&&Ur(c,2);vs()}function wo(e,t){var n;return(n=cn.get(e))==null?void 0:n.get(t)}const xo=ds("__proto__,__v_isRef,__isVue"),Wr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Et)),ks=Co();function Co(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=J(this);for(let i=0,o=this.length;i{e[t]=function(...n){ut(),bs();const s=J(this)[t].apply(this,n);return vs(),ft(),s}}),e}function Eo(e){const t=J(this);return ye(t,"has",e),t.hasOwnProperty(e)}class qr{constructor(t=!1,n=!1){this._isReadonly=t,this._shallow=n}get(t,n,s){const r=this._isReadonly,i=this._shallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ho:Jr:i?Yr:Gr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=B(t);if(!r){if(o&&Y(ks,n))return Reflect.get(ks,n,s);if(n==="hasOwnProperty")return Eo}const l=Reflect.get(t,n,s);return(Et(n)?Wr.has(n):xo(n))||(r||ye(t,"get",n),i)?l:de(l)?o&&gs(n)?l:l.value:Z(l)?r?En(l):Cn(l):l}}class zr extends qr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._shallow){const c=xt(i);if(!an(s)&&!xt(s)&&(i=J(i),s=J(s)),!B(t)&&de(i)&&!de(s))return c?!1:(i.value=s,!0)}const o=B(t)&&gs(n)?Number(n)e,xn=e=>Reflect.getPrototypeOf(e);function Kt(e,t,n=!1,s=!1){e=e.__v_raw;const r=J(e),i=J(t);n||(Qe(t,i)&&ye(r,"get",t),ye(r,"get",i));const{has:o}=xn(r),l=s?ws:n?Es:Ft;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function Wt(e,t=!1){const n=this.__v_raw,s=J(n),r=J(e);return t||(Qe(e,r)&&ye(s,"has",e),ye(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function qt(e,t=!1){return e=e.__v_raw,!t&&ye(J(e),"iterate",lt),Reflect.get(e,"size",e)}function Us(e){e=J(e);const t=J(this);return xn(t).has.call(t,e)||(t.add(e),$e(t,"add",e,e)),this}function Ks(e,t){t=J(t);const n=J(this),{has:s,get:r}=xn(n);let i=s.call(n,e);i||(e=J(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?Qe(t,o)&&$e(n,"set",e,t):$e(n,"add",e,t),this}function Ws(e){const t=J(this),{has:n,get:s}=xn(t);let r=n.call(t,e);r||(e=J(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&$e(t,"delete",e,void 0),i}function qs(){const e=J(this),t=e.size!==0,n=e.clear();return t&&$e(e,"clear",void 0,void 0),n}function zt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=J(o),c=t?ws:e?Es:Ft;return!e&&ye(l,"iterate",lt),o.forEach((u,d)=>s.call(r,c(u),c(d),i))}}function Gt(e,t,n){return function(...s){const r=this.__v_raw,i=J(r),o=yt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),d=n?ws:t?Es:Ft;return!t&&ye(i,"iterate",c?es:lt),{next(){const{value:h,done:m}=u.next();return m?{value:h,done:m}:{value:l?[d(h[0]),d(h[1])]:d(h),done:m}},[Symbol.iterator](){return this}}}}function Ve(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Oo(){const e={get(i){return Kt(this,i)},get size(){return qt(this)},has:Wt,add:Us,set:Ks,delete:Ws,clear:qs,forEach:zt(!1,!1)},t={get(i){return Kt(this,i,!1,!0)},get size(){return qt(this)},has:Wt,add:Us,set:Ks,delete:Ws,clear:qs,forEach:zt(!1,!0)},n={get(i){return Kt(this,i,!0)},get size(){return qt(this,!0)},has(i){return Wt.call(this,i,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:zt(!0,!1)},s={get(i){return Kt(this,i,!0,!0)},get size(){return qt(this,!0)},has(i){return Wt.call(this,i,!0)},add:Ve("add"),set:Ve("set"),delete:Ve("delete"),clear:Ve("clear"),forEach:zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Gt(i,!1,!1),n[i]=Gt(i,!0,!1),t[i]=Gt(i,!1,!0),s[i]=Gt(i,!0,!0)}),[e,n,t,s]}const[Lo,Po,Io,Mo]=Oo();function xs(e,t){const n=t?e?Mo:Io:e?Po:Lo;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Y(n,r)&&r in s?n:s,r,i)}const No={get:xs(!1,!1)},Fo={get:xs(!1,!0)},$o={get:xs(!0,!1)},Gr=new WeakMap,Yr=new WeakMap,Jr=new WeakMap,Ho=new WeakMap;function jo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Vo(e){return e.__v_skip||!Object.isExtensible(e)?0:jo(io(e))}function Cn(e){return xt(e)?e:Cs(e,!1,To,No,Gr)}function Do(e){return Cs(e,!1,Ro,Fo,Yr)}function En(e){return Cs(e,!0,Ao,$o,Jr)}function Cs(e,t,n,s,r){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Vo(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function _t(e){return xt(e)?_t(e.__v_raw):!!(e&&e.__v_isReactive)}function xt(e){return!!(e&&e.__v_isReadonly)}function an(e){return!!(e&&e.__v_isShallow)}function Xr(e){return _t(e)||xt(e)}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function Lt(e){return ln(e,"__v_skip",!0),e}const Ft=e=>Z(e)?Cn(e):e,Es=e=>Z(e)?En(e):e;class Qr{constructor(t,n,s,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new _s(()=>t(this._value),()=>un(this,1)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Qe(t._value,t._value=t.effect.run())&&un(t,2),Ss(t),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Bo(e,t,n=!1){let s,r;const i=U(e);return i?(s=e,r=Ee):(s=e.get,r=e.set),new Qr(s,r,i||!r,n)}function Ss(e){ze&&ot&&(e=J(e),kr(ot,e.dep||(e.dep=Kr(()=>e.dep=void 0,e instanceof Qr?e:void 0))))}function un(e,t=2,n){e=J(e);const s=e.dep;s&&Ur(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function me(e){return ei(e,!1)}function Zr(e){return ei(e,!0)}function ei(e,t){return de(e)?e:new ko(e,t)}class ko{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Ft(t)}get value(){return Ss(this),this._value}set value(t){const n=this.__v_isShallow||an(t)||xt(t);t=n?t:J(t),Qe(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Ft(t),un(this,2))}}function ti(e){return de(e)?e.value:e}const Uo={get:(e,t,n)=>ti(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return de(r)&&!de(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ni(e){return _t(e)?e:new Proxy(e,Uo)}class Ko{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Ss(this),()=>un(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Wo(e){return new Ko(e)}class qo{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return wo(J(this._object),this._key)}}class zo{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Go(e,t,n){return de(e)?e:U(e)?new zo(e):Z(e)&&arguments.length>1?Yo(e,t,n):me(e)}function Yo(e,t,n){const s=e[t];return de(s)?s:new qo(e,t,n)}/** +* @vue/runtime-core v3.4.14 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ge(e,t,n,s){let r;try{r=s?e(...s):e()}catch(i){Sn(i,t,n)}return r}function Se(e,t,n,s){if(U(e)){const i=Ge(e,t,n,s);return i&&Mr(i)&&i.catch(o=>{Sn(o,t,n)}),i}const r=[];for(let i=0;i>>1,r=ue[s],i=Ht(r);iIe&&ue.splice(t,1)}function Zo(e){B(e)?bt.push(...e):(!Ue||!Ue.includes(e,e.allowRecurse?rt+1:rt))&&bt.push(e),ri()}function zs(e,t,n=$t?Ie+1:0){for(;nHt(n)-Ht(s));if(bt.length=0,Ue){Ue.push(...t);return}for(Ue=t,rt=0;rte.id==null?1/0:e.id,el=(e,t)=>{const n=Ht(e)-Ht(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ii(e){ts=!1,$t=!0,ue.sort(el);try{for(Ie=0;Iene(w)?w.trim():w)),h&&(r=n.map(co))}let l,c=s[l=sn(t)]||s[l=sn(Me(t))];!c&&i&&(c=s[l=sn(at(t))]),c&&Se(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(u,e,6,r)}}function oi(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!U(e)){const c=u=>{const d=oi(u,t,!0);d&&(l=!0,ie(o,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Z(e)&&s.set(e,null),null):(B(i)?i.forEach(c=>o[c]=null):ie(o,i),Z(e)&&s.set(e,o),o)}function An(e,t){return!e||!Dt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,at(t))||Y(e,t))}let fe=null,Rn=null;function dn(e){const t=fe;return fe=e,Rn=e&&e.type.__scopeId||null,t}function Ia(e){Rn=e}function Ma(){Rn=null}function nl(e,t=fe,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&ir(-1);const i=dn(t);let o;try{o=e(...r)}finally{dn(i),s._d&&ir(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Bn(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:i,propsOptions:[o],slots:l,attrs:c,emit:u,render:d,renderCache:h,data:m,setupState:w,ctx:L,inheritAttrs:M}=e;let V,W;const X=dn(e);try{if(n.shapeFlag&4){const y=r||s,N=y;V=Ae(d.call(N,y,h,i,w,m,L)),W=c}else{const y=t;V=Ae(y.length>1?y(i,{attrs:c,slots:l,emit:u}):y(i,null)),W=t.props?c:sl(c)}}catch(y){Mt.length=0,Sn(y,e,1),V=ae(ve)}let p=V;if(W&&M!==!1){const y=Object.keys(W),{shapeFlag:N}=p;y.length&&N&7&&(o&&y.some(hs)&&(W=rl(W,o)),p=Ze(p,W))}return n.dirs&&(p=Ze(p),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),V=p,dn(X),V}const sl=e=>{let t;for(const n in e)(n==="class"||n==="style"||Dt(n))&&((t||(t={}))[n]=e[n]);return t},rl=(e,t)=>{const n={};for(const s in e)(!hs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function il(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Gs(s,o,u):!!o;if(c&8){const d=t.dynamicProps;for(let h=0;he.__isSuspense;function ai(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):Zo(e)}const cl=Symbol.for("v-scx"),al=()=>wt(cl);function ui(e,t){return On(e,null,t)}function $a(e,t){return On(e,null,{flush:"post"})}const Yt={};function Ye(e,t,n){return On(e,t,n)}function On(e,t,{immediate:n,deep:s,flush:r,once:i,onTrack:o,onTrigger:l}=te){if(t&&i){const P=t;t=(...D)=>{P(...D),N()}}const c=ce,u=P=>s===!0?P:pt(P,s===!1?1:void 0);let d,h=!1,m=!1;if(de(e)?(d=()=>e.value,h=an(e)):_t(e)?(d=()=>u(e),h=!0):B(e)?(m=!0,h=e.some(P=>_t(P)||an(P)),d=()=>e.map(P=>{if(de(P))return P.value;if(_t(P))return u(P);if(U(P))return Ge(P,c,2)})):U(e)?t?d=()=>Ge(e,c,2):d=()=>(w&&w(),Se(e,c,3,[L])):d=Ee,t&&s){const P=d;d=()=>pt(P())}let w,L=P=>{w=p.onStop=()=>{Ge(P,c,4),w=p.onStop=void 0}},M;if(Fn)if(L=Ee,t?n&&Se(t,c,3,[d(),m?[]:void 0,L]):d(),r==="sync"){const P=al();M=P.__watcherHandles||(P.__watcherHandles=[])}else return Ee;let V=m?new Array(e.length).fill(Yt):Yt;const W=()=>{if(!(!p.active||!p.dirty))if(t){const P=p.run();(s||h||(m?P.some((D,R)=>Qe(D,V[R])):Qe(P,V)))&&(w&&w(),Se(t,c,3,[P,V===Yt?void 0:m&&V[0]===Yt?[]:V,L]),V=P)}else p.run()};W.allowRecurse=!!t;let X;r==="sync"?X=W:r==="post"?X=()=>pe(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),X=()=>As(W));const p=new _s(d,Ee,X),y=Vr(),N=()=>{p.stop(),y&&ps(y.effects,p)};return t?n?W():V=p.run():r==="post"?pe(p.run.bind(p),c&&c.suspense):p.run(),M&&M.push(N),N}function ul(e,t,n){const s=this.proxy,r=ne(e)?e.includes(".")?fi(s,e):()=>s[e]:e.bind(s,s);let i;U(t)?i=t:(i=t.handler,n=t);const o=Bt(this),l=On(r,i.bind(s),n);return o(),l}function fi(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r0){if(n>=t)return e;n++}if(s=s||new Set,s.has(e))return e;if(s.add(e),de(e))pt(e.value,t,n,s);else if(B(e))for(let r=0;r{pt(r,t,n,s)});else if(Fr(e))for(const r in e)pt(e[r],t,n,s);return e}function Pe(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),yi(()=>{e.isUnmounting=!0}),e}const we=[Function,Array],di={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:we,onEnter:we,onAfterEnter:we,onEnterCancelled:we,onBeforeLeave:we,onLeave:we,onAfterLeave:we,onLeaveCancelled:we,onBeforeAppear:we,onAppear:we,onAfterAppear:we,onAppearCancelled:we},dl={name:"BaseTransition",props:di,setup(e,{slots:t}){const n=Nn(),s=fl();let r;return()=>{const i=t.default&&pi(t.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const M of i)if(M.type!==ve){o=M;break}}const l=J(e),{mode:c}=l;if(s.isLeaving)return kn(o);const u=Js(o);if(!u)return kn(o);const d=ns(u,l,s,n);ss(u,d);const h=n.subTree,m=h&&Js(h);let w=!1;const{getTransitionKey:L}=u.type;if(L){const M=L();r===void 0?r=M:M!==r&&(r=M,w=!0)}if(m&&m.type!==ve&&(!it(u,m)||w)){const M=ns(m,l,s,n);if(ss(m,M),c==="out-in")return s.isLeaving=!0,M.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},kn(o);c==="in-out"&&u.type!==ve&&(M.delayLeave=(V,W,X)=>{const p=hi(s,m);p[String(m.key)]=m,V[Ke]=()=>{W(),V[Ke]=void 0,delete d.delayedLeave},d.delayedLeave=X})}return o}}},hl=dl;function hi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function ns(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:h,onLeave:m,onAfterLeave:w,onLeaveCancelled:L,onBeforeAppear:M,onAppear:V,onAfterAppear:W,onAppearCancelled:X}=t,p=String(e.key),y=hi(n,e),N=(R,T)=>{R&&Se(R,s,9,T)},P=(R,T)=>{const S=T[1];N(R,T),B(R)?R.every(K=>K.length<=1)&&S():R.length<=1&&S()},D={mode:i,persisted:o,beforeEnter(R){let T=l;if(!n.isMounted)if(r)T=M||l;else return;R[Ke]&&R[Ke](!0);const S=y[p];S&&it(e,S)&&S.el[Ke]&&S.el[Ke](),N(T,[R])},enter(R){let T=c,S=u,K=d;if(!n.isMounted)if(r)T=V||c,S=W||u,K=X||d;else return;let O=!1;const q=R[Jt]=re=>{O||(O=!0,re?N(K,[R]):N(S,[R]),D.delayedLeave&&D.delayedLeave(),R[Jt]=void 0)};T?P(T,[R,q]):q()},leave(R,T){const S=String(e.key);if(R[Jt]&&R[Jt](!0),n.isUnmounting)return T();N(h,[R]);let K=!1;const O=R[Ke]=q=>{K||(K=!0,T(),q?N(L,[R]):N(w,[R]),R[Ke]=void 0,y[S]===e&&delete y[S])};y[S]=e,m?P(m,[R,O]):O()},clone(R){return ns(R,t,n,s)}};return D}function kn(e){if(Ln(e))return e=Ze(e),e.children=null,e}function Js(e){return Ln(e)?e.children?e.children[0]:void 0:e}function ss(e,t){e.shapeFlag&6&&e.component?ss(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function pi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,Ln=e=>e.type.__isKeepAlive;function pl(e,t){mi(e,"a",t)}function gl(e,t){mi(e,"da",t)}function mi(e,t,n=ce){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Pn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Ln(r.parent.vnode)&&ml(s,t,n,r),r=r.parent}}function ml(e,t,n,s){const r=Pn(t,e,s,!0);In(()=>{ps(s[t],r)},n)}function Pn(e,t,n=ce,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;ut();const l=Bt(n),c=Se(t,n,e,o);return l(),ft(),c});return s?r.unshift(i):r.push(i),i}}const je=e=>(t,n=ce)=>(!Fn||e==="sp")&&Pn(e,(...s)=>t(...s),n),yl=je("bm"),St=je("m"),_l=je("bu"),bl=je("u"),yi=je("bum"),In=je("um"),vl=je("sp"),wl=je("rtg"),xl=je("rtc");function Cl(e,t=ce){Pn("ec",e,t)}function Ha(e,t,n,s){let r;const i=n&&n[s];if(B(e)||ne(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i&&i[l]));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;lmn(t)?!(t.type===ve||t.type===ge&&!_i(t.children)):!0)?e:null}function Va(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:sn(s)]=e[s];return n}const rs=e=>e?Fi(e)?Is(e)||e.proxy:rs(e.parent):null,Pt=ie(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>rs(e.parent),$root:e=>rs(e.root),$emit:e=>e.emit,$options:e=>Os(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,As(e.update)}),$nextTick:e=>e.n||(e.n=Tn.bind(e.proxy)),$watch:e=>ul.bind(e)}),Un=(e,t)=>e!==te&&!e.__isScriptSetup&&Y(e,t),El={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const w=o[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Un(s,t))return o[t]=1,s[t];if(r!==te&&Y(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&Y(u,t))return o[t]=3,i[t];if(n!==te&&Y(n,t))return o[t]=4,n[t];is&&(o[t]=0)}}const d=Pt[t];let h,m;if(d)return t==="$attrs"&&ye(e,"get",t),d(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&Y(n,t))return o[t]=4,n[t];if(m=c.config.globalProperties,Y(m,t))return m[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Un(r,t)?(r[t]=n,!0):s!==te&&Y(s,t)?(s[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==te&&Y(e,o)||Un(t,o)||(l=i[0])&&Y(l,o)||Y(s,o)||Y(Pt,o)||Y(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Da(){return Sl().slots}function Sl(){const e=Nn();return e.setupContext||(e.setupContext=Hi(e))}function Xs(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let is=!0;function Tl(e){const t=Os(e),n=e.proxy,s=e.ctx;is=!1,t.beforeCreate&&Qs(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:d,beforeMount:h,mounted:m,beforeUpdate:w,updated:L,activated:M,deactivated:V,beforeDestroy:W,beforeUnmount:X,destroyed:p,unmounted:y,render:N,renderTracked:P,renderTriggered:D,errorCaptured:R,serverPrefetch:T,expose:S,inheritAttrs:K,components:O,directives:q,filters:re}=t;if(u&&Al(u,s,null),o)for(const G in o){const $=o[G];U($)&&(s[G]=$.bind(n))}if(r){const G=r.call(n,n);Z(G)&&(e.data=Cn(G))}if(is=!0,i)for(const G in i){const $=i[G],Ne=U($)?$.bind(n,n):U($.get)?$.get.bind(n,n):Ee,kt=!U($)&&U($.set)?$.set.bind(n):Ee,et=se({get:Ne,set:kt});Object.defineProperty(s,G,{enumerable:!0,configurable:!0,get:()=>et.value,set:Oe=>et.value=Oe})}if(l)for(const G in l)bi(l[G],s,n,G);if(c){const G=U(c)?c.call(n):c;Reflect.ownKeys(G).forEach($=>{Ml($,G[$])})}d&&Qs(d,e,"c");function H(G,$){B($)?$.forEach(Ne=>G(Ne.bind(n))):$&&G($.bind(n))}if(H(yl,h),H(St,m),H(_l,w),H(bl,L),H(pl,M),H(gl,V),H(Cl,R),H(xl,P),H(wl,D),H(yi,X),H(In,y),H(vl,T),B(S))if(S.length){const G=e.exposed||(e.exposed={});S.forEach($=>{Object.defineProperty(G,$,{get:()=>n[$],set:Ne=>n[$]=Ne})})}else e.exposed||(e.exposed={});N&&e.render===Ee&&(e.render=N),K!=null&&(e.inheritAttrs=K),O&&(e.components=O),q&&(e.directives=q)}function Al(e,t,n=Ee){B(e)&&(e=os(e));for(const s in e){const r=e[s];let i;Z(r)?"default"in r?i=wt(r.from||s,r.default,!0):i=wt(r.from||s):i=wt(r),de(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Qs(e,t,n){Se(B(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function bi(e,t,n,s){const r=s.includes(".")?fi(n,s):()=>n[s];if(ne(e)){const i=t[e];U(i)&&Ye(r,i)}else if(U(e))Ye(r,e.bind(n));else if(Z(e))if(B(e))e.forEach(i=>bi(i,t,n,s));else{const i=U(e.handler)?e.handler.bind(n):t[e.handler];U(i)&&Ye(r,i,e)}}function Os(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>hn(c,u,o,!0)),hn(c,t,o)),Z(t)&&i.set(t,c),c}function hn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&hn(e,i,n,!0),r&&r.forEach(o=>hn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Rl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Rl={data:Zs,props:er,emits:er,methods:Rt,computed:Rt,beforeCreate:he,created:he,beforeMount:he,mounted:he,beforeUpdate:he,updated:he,beforeDestroy:he,beforeUnmount:he,destroyed:he,unmounted:he,activated:he,deactivated:he,errorCaptured:he,serverPrefetch:he,components:Rt,directives:Rt,watch:Ll,provide:Zs,inject:Ol};function Zs(e,t){return t?e?function(){return ie(U(e)?e.call(this,this):e,U(t)?t.call(this,this):t)}:t:e}function Ol(e,t){return Rt(os(e),os(t))}function os(e){if(B(e)){const t={};for(let n=0;n1)return n&&U(t)?t.call(s&&s.proxy):t}}function Nl(e,t,n,s=!1){const r={},i={};ln(i,Mn,1),e.propsDefaults=Object.create(null),wi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Do(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Fl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=J(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,w]=xi(h,t,!0);ie(o,m),w&&l.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!c)return Z(e)&&s.set(e,mt),mt;if(B(i))for(let d=0;d-1,w[1]=M<0||L-1||Y(w,"default"))&&l.push(h)}}}const u=[o,l];return Z(e)&&s.set(e,u),u}function tr(e){return e[0]!=="$"}function nr(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function sr(e,t){return nr(e)===nr(t)}function rr(e,t){return B(t)?t.findIndex(n=>sr(n,e)):U(t)&&sr(t,e)?0:-1}const Ci=e=>e[0]==="_"||e==="$stable",Ls=e=>B(e)?e.map(Ae):[Ae(e)],$l=(e,t,n)=>{if(t._n)return t;const s=nl((...r)=>Ls(t(...r)),n);return s._c=!1,s},Ei=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Ci(r))continue;const i=e[r];if(U(i))t[r]=$l(r,i,s);else if(i!=null){const o=Ls(i);t[r]=()=>o}}},Si=(e,t)=>{const n=Ls(t);e.slots.default=()=>n},Hl=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=J(t),ln(t,"_",n)):Ei(t,e.slots={})}else e.slots={},t&&Si(e,t);ln(e.slots,Mn,1)},jl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(ie(r,t),!n&&l===1&&delete r._):(i=!t.$stable,Ei(t,r)),o=t}else t&&(Si(e,t),o={default:1});if(i)for(const l in r)!Ci(l)&&o[l]==null&&delete r[l]};function gn(e,t,n,s,r=!1){if(B(e)){e.forEach((m,w)=>gn(m,t&&(B(t)?t[w]:t),n,s,r));return}if(vt(s)&&!r)return;const i=s.shapeFlag&4?Is(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,d=l.refs===te?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ne(u)?(d[u]=null,Y(h,u)&&(h[u]=null)):de(u)&&(u.value=null)),U(c))Ge(c,l,12,[o,d]);else{const m=ne(c),w=de(c);if(m||w){const L=()=>{if(e.f){const M=m?Y(h,c)?h[c]:d[c]:c.value;r?B(M)&&ps(M,i):B(M)?M.includes(i)||M.push(i):m?(d[c]=[i],Y(h,c)&&(h[c]=d[c])):(c.value=[i],e.k&&(d[e.k]=c.value))}else m?(d[c]=o,Y(h,c)&&(h[c]=o)):w&&(c.value=o,e.k&&(d[e.k]=o))};o?(L.id=-1,pe(L,n)):L()}}}let De=!1;const Vl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Dl=e=>e.namespaceURI.includes("MathML"),Xt=e=>{if(Vl(e))return"svg";if(Dl(e))return"mathml"},Qt=e=>e.nodeType===8;function Bl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,d=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),fn(),y._vnode=p;return}De=!1,h(y.firstChild,p,null,null,null),fn(),y._vnode=p,De&&console.error("Hydration completed but contains mismatches.")},h=(p,y,N,P,D,R=!1)=>{const T=Qt(p)&&p.data==="[",S=()=>M(p,y,N,P,D,T),{type:K,ref:O,shapeFlag:q,patchFlag:re}=y;let le=p.nodeType;y.el=p,re===-2&&(R=!1,y.dynamicChildren=null);let H=null;switch(K){case Ct:le!==3?y.children===""?(c(y.el=r(""),o(p),p),H=p):H=S():(p.data!==y.children&&(De=!0,p.data=y.children),H=i(p));break;case ve:X(p)?(H=i(p),W(y.el=p.content.firstChild,p,N)):le!==8||T?H=S():H=i(p);break;case It:if(T&&(p=i(p),le=p.nodeType),le===1||le===3){H=p;const G=!y.children.length;for(let $=0;${R=R||!!y.dynamicChildren;const{type:T,props:S,patchFlag:K,shapeFlag:O,dirs:q,transition:re}=y,le=T==="input"||T==="option";if(le||K!==-1){q&&Pe(y,null,N,"created");let H=!1;if(X(p)){H=Ti(P,re)&&N&&N.vnode.props&&N.vnode.props.appear;const $=p.content.firstChild;H&&re.beforeEnter($),W($,p,N),y.el=p=$}if(O&16&&!(S&&(S.innerHTML||S.textContent))){let $=w(p.firstChild,y,p,N,P,D,R);for(;$;){De=!0;const Ne=$;$=$.nextSibling,l(Ne)}}else O&8&&p.textContent!==y.children&&(De=!0,p.textContent=y.children);if(S)if(le||!R||K&48)for(const $ in S)(le&&($.endsWith("value")||$==="indeterminate")||Dt($)&&!Ot($)||$[0]===".")&&s(p,$,null,S[$],void 0,void 0,N);else S.onClick&&s(p,"onClick",null,S.onClick,void 0,void 0,N);let G;(G=S&&S.onVnodeBeforeMount)&&xe(G,N,y),q&&Pe(y,null,N,"beforeMount"),((G=S&&S.onVnodeMounted)||q||H)&&ai(()=>{G&&xe(G,N,y),H&&re.enter(p),q&&Pe(y,null,N,"mounted")},P)}return p.nextSibling},w=(p,y,N,P,D,R,T)=>{T=T||!!y.dynamicChildren;const S=y.children,K=S.length;for(let O=0;O{const{slotScopeIds:T}=y;T&&(D=D?D.concat(T):T);const S=o(p),K=w(i(p),y,S,N,P,D,R);return K&&Qt(K)&&K.data==="]"?i(y.anchor=K):(De=!0,c(y.anchor=u("]"),S,K),K)},M=(p,y,N,P,D,R)=>{if(De=!0,y.el=null,R){const K=V(p);for(;;){const O=i(p);if(O&&O!==K)l(O);else break}}const T=i(p),S=o(p);return l(p),n(null,y,S,T,N,P,Xt(S),D),T},V=(p,y="[",N="]")=>{let P=0;for(;p;)if(p=i(p),p&&Qt(p)&&(p.data===y&&P++,p.data===N)){if(P===0)return i(p);P--}return p},W=(p,y,N)=>{const P=y.parentNode;P&&P.replaceChild(p,y);let D=N;for(;D;)D.vnode.el===y&&(D.vnode.el=D.subTree.el=p),D=D.parent},X=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[d,h]}const pe=ai;function kl(e){return Ul(e,Bl)}function Ul(e,t){const n=$r();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:m,setScopeId:w=Ee,insertStaticContent:L}=e,M=(a,f,g,_=null,b=null,C=null,A=void 0,x=null,E=!!f.dynamicChildren)=>{if(a===f)return;a&&!it(a,f)&&(_=Ut(a),Oe(a,b,C,!0),a=null),f.patchFlag===-2&&(E=!1,f.dynamicChildren=null);const{type:v,ref:I,shapeFlag:j}=f;switch(v){case Ct:V(a,f,g,_);break;case ve:W(a,f,g,_);break;case It:a==null&&X(f,g,_,A);break;case ge:O(a,f,g,_,b,C,A,x,E);break;default:j&1?N(a,f,g,_,b,C,A,x,E):j&6?q(a,f,g,_,b,C,A,x,E):(j&64||j&128)&&v.process(a,f,g,_,b,C,A,x,E,dt)}I!=null&&b&&gn(I,a&&a.ref,C,f||a,!f)},V=(a,f,g,_)=>{if(a==null)s(f.el=l(f.children),g,_);else{const b=f.el=a.el;f.children!==a.children&&u(b,f.children)}},W=(a,f,g,_)=>{a==null?s(f.el=c(f.children||""),g,_):f.el=a.el},X=(a,f,g,_)=>{[a.el,a.anchor]=L(a.children,f,g,_,a.el,a.anchor)},p=({el:a,anchor:f},g,_)=>{let b;for(;a&&a!==f;)b=m(a),s(a,g,_),a=b;s(f,g,_)},y=({el:a,anchor:f})=>{let g;for(;a&&a!==f;)g=m(a),r(a),a=g;r(f)},N=(a,f,g,_,b,C,A,x,E)=>{f.type==="svg"?A="svg":f.type==="math"&&(A="mathml"),a==null?P(f,g,_,b,C,A,x,E):T(a,f,b,C,A,x,E)},P=(a,f,g,_,b,C,A,x)=>{let E,v;const{props:I,shapeFlag:j,transition:F,dirs:k}=a;if(E=a.el=o(a.type,C,I&&I.is,I),j&8?d(E,a.children):j&16&&R(a.children,E,null,_,b,Kn(a,C),A,x),k&&Pe(a,null,_,"created"),D(E,a,a.scopeId,A,_),I){for(const Q in I)Q!=="value"&&!Ot(Q)&&i(E,Q,null,I[Q],C,a.children,_,b,Fe);"value"in I&&i(E,"value",null,I.value,C),(v=I.onVnodeBeforeMount)&&xe(v,_,a)}k&&Pe(a,null,_,"beforeMount");const z=Ti(b,F);z&&F.beforeEnter(E),s(E,f,g),((v=I&&I.onVnodeMounted)||z||k)&&pe(()=>{v&&xe(v,_,a),z&&F.enter(E),k&&Pe(a,null,_,"mounted")},b)},D=(a,f,g,_,b)=>{if(g&&w(a,g),_)for(let C=0;C<_.length;C++)w(a,_[C]);if(b){let C=b.subTree;if(f===C){const A=b.vnode;D(a,A,A.scopeId,A.slotScopeIds,b.parent)}}},R=(a,f,g,_,b,C,A,x,E=0)=>{for(let v=E;v{const x=f.el=a.el;let{patchFlag:E,dynamicChildren:v,dirs:I}=f;E|=a.patchFlag&16;const j=a.props||te,F=f.props||te;let k;if(g&&tt(g,!1),(k=F.onVnodeBeforeUpdate)&&xe(k,g,f,a),I&&Pe(f,a,g,"beforeUpdate"),g&&tt(g,!0),v?S(a.dynamicChildren,v,x,g,_,Kn(f,b),C):A||$(a,f,x,null,g,_,Kn(f,b),C,!1),E>0){if(E&16)K(x,f,j,F,g,_,b);else if(E&2&&j.class!==F.class&&i(x,"class",null,F.class,b),E&4&&i(x,"style",j.style,F.style,b),E&8){const z=f.dynamicProps;for(let Q=0;Q{k&&xe(k,g,f,a),I&&Pe(f,a,g,"updated")},_)},S=(a,f,g,_,b,C,A)=>{for(let x=0;x{if(g!==_){if(g!==te)for(const x in g)!Ot(x)&&!(x in _)&&i(a,x,g[x],null,A,f.children,b,C,Fe);for(const x in _){if(Ot(x))continue;const E=_[x],v=g[x];E!==v&&x!=="value"&&i(a,x,v,E,A,f.children,b,C,Fe)}"value"in _&&i(a,"value",g.value,_.value,A)}},O=(a,f,g,_,b,C,A,x,E)=>{const v=f.el=a?a.el:l(""),I=f.anchor=a?a.anchor:l("");let{patchFlag:j,dynamicChildren:F,slotScopeIds:k}=f;k&&(x=x?x.concat(k):k),a==null?(s(v,g,_),s(I,g,_),R(f.children||[],g,I,b,C,A,x,E)):j>0&&j&64&&F&&a.dynamicChildren?(S(a.dynamicChildren,F,g,b,C,A,x),(f.key!=null||b&&f===b.subTree)&&Ai(a,f,!0)):$(a,f,g,I,b,C,A,x,E)},q=(a,f,g,_,b,C,A,x,E)=>{f.slotScopeIds=x,a==null?f.shapeFlag&512?b.ctx.activate(f,g,_,A,E):re(f,g,_,b,C,A,E):le(a,f,E)},re=(a,f,g,_,b,C,A)=>{const x=a.component=Ql(a,_,b);if(Ln(a)&&(x.ctx.renderer=dt),Zl(x),x.asyncDep){if(b&&b.registerDep(x,H),!a.el){const E=x.subTree=ae(ve);W(null,E,f,g)}}else H(x,a,f,g,b,C,A)},le=(a,f,g)=>{const _=f.component=a.component;if(il(a,f,g))if(_.asyncDep&&!_.asyncResolved){G(_,f,g);return}else _.next=f,Qo(_.update),_.effect.dirty=!0,_.update();else f.el=a.el,_.vnode=f},H=(a,f,g,_,b,C,A)=>{const x=()=>{if(a.isMounted){let{next:I,bu:j,u:F,parent:k,vnode:z}=a;{const ht=Ri(a);if(ht){I&&(I.el=z.el,G(a,I,A)),ht.asyncDep.then(()=>{a.isUnmounted||x()});return}}let Q=I,ee;tt(a,!1),I?(I.el=z.el,G(a,I,A)):I=z,j&&Vn(j),(ee=I.props&&I.props.onVnodeBeforeUpdate)&&xe(ee,k,I,z),tt(a,!0);const oe=Bn(a),Te=a.subTree;a.subTree=oe,M(Te,oe,h(Te.el),Ut(Te),a,b,C),I.el=oe.el,Q===null&&ol(a,oe.el),F&&pe(F,b),(ee=I.props&&I.props.onVnodeUpdated)&&pe(()=>xe(ee,k,I,z),b)}else{let I;const{el:j,props:F}=f,{bm:k,m:z,parent:Q}=a,ee=vt(f);if(tt(a,!1),k&&Vn(k),!ee&&(I=F&&F.onVnodeBeforeMount)&&xe(I,Q,f),tt(a,!0),j&&jn){const oe=()=>{a.subTree=Bn(a),jn(j,a.subTree,a,b,null)};ee?f.type.__asyncLoader().then(()=>!a.isUnmounted&&oe()):oe()}else{const oe=a.subTree=Bn(a);M(null,oe,g,_,a,b,C),f.el=oe.el}if(z&&pe(z,b),!ee&&(I=F&&F.onVnodeMounted)){const oe=f;pe(()=>xe(I,Q,oe),b)}(f.shapeFlag&256||Q&&vt(Q.vnode)&&Q.vnode.shapeFlag&256)&&a.a&&pe(a.a,b),a.isMounted=!0,f=g=_=null}},E=a.effect=new _s(x,Ee,()=>As(v),a.scope),v=a.update=()=>{E.dirty&&E.run()};v.id=a.uid,tt(a,!0),v()},G=(a,f,g)=>{f.component=a;const _=a.vnode.props;a.vnode=f,a.next=null,Fl(a,f.props,_,g),jl(a,f.children,g),ut(),zs(a),ft()},$=(a,f,g,_,b,C,A,x,E=!1)=>{const v=a&&a.children,I=a?a.shapeFlag:0,j=f.children,{patchFlag:F,shapeFlag:k}=f;if(F>0){if(F&128){kt(v,j,g,_,b,C,A,x,E);return}else if(F&256){Ne(v,j,g,_,b,C,A,x,E);return}}k&8?(I&16&&Fe(v,b,C),j!==v&&d(g,j)):I&16?k&16?kt(v,j,g,_,b,C,A,x,E):Fe(v,b,C,!0):(I&8&&d(g,""),k&16&&R(j,g,_,b,C,A,x,E))},Ne=(a,f,g,_,b,C,A,x,E)=>{a=a||mt,f=f||mt;const v=a.length,I=f.length,j=Math.min(v,I);let F;for(F=0;FI?Fe(a,b,C,!0,!1,j):R(f,g,_,b,C,A,x,E,j)},kt=(a,f,g,_,b,C,A,x,E)=>{let v=0;const I=f.length;let j=a.length-1,F=I-1;for(;v<=j&&v<=F;){const k=a[v],z=f[v]=E?We(f[v]):Ae(f[v]);if(it(k,z))M(k,z,g,null,b,C,A,x,E);else break;v++}for(;v<=j&&v<=F;){const k=a[j],z=f[F]=E?We(f[F]):Ae(f[F]);if(it(k,z))M(k,z,g,null,b,C,A,x,E);else break;j--,F--}if(v>j){if(v<=F){const k=F+1,z=kF)for(;v<=j;)Oe(a[v],b,C,!0),v++;else{const k=v,z=v,Q=new Map;for(v=z;v<=F;v++){const _e=f[v]=E?We(f[v]):Ae(f[v]);_e.key!=null&&Q.set(_e.key,v)}let ee,oe=0;const Te=F-z+1;let ht=!1,$s=0;const Tt=new Array(Te);for(v=0;v=Te){Oe(_e,b,C,!0);continue}let Le;if(_e.key!=null)Le=Q.get(_e.key);else for(ee=z;ee<=F;ee++)if(Tt[ee-z]===0&&it(_e,f[ee])){Le=ee;break}Le===void 0?Oe(_e,b,C,!0):(Tt[Le-z]=v+1,Le>=$s?$s=Le:ht=!0,M(_e,f[Le],g,null,b,C,A,x,E),oe++)}const Hs=ht?Kl(Tt):mt;for(ee=Hs.length-1,v=Te-1;v>=0;v--){const _e=z+v,Le=f[_e],js=_e+1{const{el:C,type:A,transition:x,children:E,shapeFlag:v}=a;if(v&6){et(a.component.subTree,f,g,_);return}if(v&128){a.suspense.move(f,g,_);return}if(v&64){A.move(a,f,g,dt);return}if(A===ge){s(C,f,g);for(let j=0;jx.enter(C),b);else{const{leave:j,delayLeave:F,afterLeave:k}=x,z=()=>s(C,f,g),Q=()=>{j(C,()=>{z(),k&&k()})};F?F(C,z,Q):Q()}else s(C,f,g)},Oe=(a,f,g,_=!1,b=!1)=>{const{type:C,props:A,ref:x,children:E,dynamicChildren:v,shapeFlag:I,patchFlag:j,dirs:F}=a;if(x!=null&&gn(x,null,g,a,!0),I&256){f.ctx.deactivate(a);return}const k=I&1&&F,z=!vt(a);let Q;if(z&&(Q=A&&A.onVnodeBeforeUnmount)&&xe(Q,f,a),I&6)no(a.component,g,_);else{if(I&128){a.suspense.unmount(g,_);return}k&&Pe(a,null,f,"beforeUnmount"),I&64?a.type.remove(a,f,g,b,dt,_):v&&(C!==ge||j>0&&j&64)?Fe(v,f,g,!1,!0):(C===ge&&j&384||!b&&I&16)&&Fe(E,f,g),_&&Ns(a)}(z&&(Q=A&&A.onVnodeUnmounted)||k)&&pe(()=>{Q&&xe(Q,f,a),k&&Pe(a,null,f,"unmounted")},g)},Ns=a=>{const{type:f,el:g,anchor:_,transition:b}=a;if(f===ge){to(g,_);return}if(f===It){y(a);return}const C=()=>{r(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(a.shapeFlag&1&&b&&!b.persisted){const{leave:A,delayLeave:x}=b,E=()=>A(g,C);x?x(a.el,C,E):E()}else C()},to=(a,f)=>{let g;for(;a!==f;)g=m(a),r(a),a=g;r(f)},no=(a,f,g)=>{const{bum:_,scope:b,update:C,subTree:A,um:x}=a;_&&Vn(_),b.stop(),C&&(C.active=!1,Oe(A,a,f,g)),x&&pe(x,f),pe(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},Fe=(a,f,g,_=!1,b=!1,C=0)=>{for(let A=C;Aa.shapeFlag&6?Ut(a.component.subTree):a.shapeFlag&128?a.suspense.next():m(a.anchor||a.el);let $n=!1;const Fs=(a,f,g)=>{a==null?f._vnode&&Oe(f._vnode,null,null,!0):M(f._vnode||null,a,f,null,null,null,g),$n||($n=!0,zs(),fn(),$n=!1),f._vnode=a},dt={p:M,um:Oe,m:et,r:Ns,mt:re,mc:R,pc:$,pbc:S,n:Ut,o:e};let Hn,jn;return t&&([Hn,jn]=t(dt)),{render:Fs,hydrate:Hn,createApp:Il(Fs,Hn)}}function Kn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function tt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ti(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ai(e,t,n=!1){const s=e.children,r=t.children;if(B(s)&&B(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Ri(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ri(t)}const Wl=e=>e.__isTeleport,ge=Symbol.for("v-fgt"),Ct=Symbol.for("v-txt"),ve=Symbol.for("v-cmt"),It=Symbol.for("v-stc"),Mt=[];let Re=null;function Oi(e=!1){Mt.push(Re=e?null:[])}function ql(){Mt.pop(),Re=Mt[Mt.length-1]||null}let jt=1;function ir(e){jt+=e}function Li(e){return e.dynamicChildren=jt>0?Re||mt:null,ql(),jt>0&&Re&&Re.push(e),e}function Ba(e,t,n,s,r,i){return Li(Mi(e,t,n,s,r,i,!0))}function Pi(e,t,n,s,r){return Li(ae(e,t,n,s,r,!0))}function mn(e){return e?e.__v_isVNode===!0:!1}function it(e,t){return e.type===t.type&&e.key===t.key}const Mn="__vInternal",Ii=({key:e})=>e??null,rn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||de(e)||U(e)?{i:fe,r:e,k:t,f:!!n}:e:null);function Mi(e,t=null,n=null,s=0,r=null,i=e===ge?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ii(t),ref:t&&rn(t),scopeId:Rn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:fe};return l?(Ps(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),jt>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ae=zl;function zl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===li)&&(e=ve),mn(e)){const l=Ze(e,t,!0);return n&&Ps(l,n),jt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(sc(e)&&(e=e.__vccOpts),t){t=Gl(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=ys(l)),Z(c)&&(Xr(c)&&!B(c)&&(c=ie({},c)),t.style=ms(c))}const o=ne(e)?1:ll(e)?128:Wl(e)?64:Z(e)?4:U(e)?2:0;return Mi(e,t,n,s,r,o,i,!0)}function Gl(e){return e?Xr(e)||Mn in e?ie({},e):e:null}function Ze(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?Yl(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Ii(l),ref:t&&t.ref?n&&r?B(r)?r.concat(rn(t)):[r,rn(t)]:rn(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ge?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ze(e.ssContent),ssFallback:e.ssFallback&&Ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ni(e=" ",t=0){return ae(Ct,null,e,t)}function ka(e,t){const n=ae(It,null,e);return n.staticCount=t,n}function Ua(e="",t=!1){return t?(Oi(),Pi(ve,null,e)):ae(ve,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ae(ve):B(e)?ae(ge,null,e.slice()):typeof e=="object"?We(e):ae(Ct,null,String(e))}function We(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ze(e)}function Ps(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ps(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Mn in t)?t._ctx=fe:r===3&&fe&&(fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else U(t)?(t={default:t,_ctx:fe},n=32):(t=String(t),s&64?(n=16,t=[Ni(t)]):n=8);e.children=t,e.shapeFlag|=n}function Yl(...e){const t={};for(let n=0;nce||fe;let yn,cs;{const e=$r(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};yn=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),cs=t("__VUE_SSR_SETTERS__",n=>Fn=n)}const Bt=e=>{const t=ce;return yn(e),e.scope.on(),()=>{e.scope.off(),yn(t)}},or=()=>{ce&&ce.scope.off(),yn(null)};function Fi(e){return e.vnode.shapeFlag&4}let Fn=!1;function Zl(e,t=!1){t&&cs(t);const{props:n,children:s}=e.vnode,r=Fi(e);Nl(e,n,r,t),Hl(e,s);const i=r?ec(e,t):void 0;return t&&cs(!1),i}function ec(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Lt(new Proxy(e.ctx,El));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Hi(e):null,i=Bt(e);ut();const o=Ge(s,e,0,[e.props,r]);if(ft(),i(),Mr(o)){if(o.then(or,or),t)return o.then(l=>{lr(e,l,t)}).catch(l=>{Sn(l,e,0)});e.asyncDep=o}else lr(e,o,t)}else $i(e,t)}function lr(e,t,n){U(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=ni(t)),$i(e,n)}let cr;function $i(e,t,n){const s=e.type;if(!e.render){if(!t&&cr&&!s.render){const r=s.template||Os(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=ie(ie({isCustomElement:i,delimiters:l},o),c);s.render=cr(r,u)}}e.render=s.render||Ee}{const r=Bt(e);ut();try{Tl(e)}finally{ft(),r()}}}function tc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return ye(e,"get","$attrs"),t[n]}}))}function Hi(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return tc(e)},slots:e.slots,emit:e.emit,expose:t}}function Is(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ni(Lt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Pt)return Pt[n](e)},has(t,n){return n in t||n in Pt}}))}function nc(e,t=!0){return U(e)?e.displayName||e.name:e.name||t&&e.__name}function sc(e){return U(e)&&"__vccOpts"in e}const se=(e,t)=>Bo(e,t,Fn);function as(e,t,n){const s=arguments.length;return s===2?Z(t)&&!B(t)?mn(t)?ae(e,null,[t]):ae(e,t):ae(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&mn(n)&&(n=[n]),ae(e,t,n))}const rc="3.4.14";/** +* @vue/runtime-dom v3.4.14 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const ic="http://www.w3.org/2000/svg",oc="http://www.w3.org/1998/Math/MathML",qe=typeof document<"u"?document:null,ar=qe&&qe.createElement("template"),lc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?qe.createElementNS(ic,e):t==="mathml"?qe.createElementNS(oc,e):qe.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>qe.createTextNode(e),createComment:e=>qe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{ar.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=ar.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Be="transition",At="animation",Vt=Symbol("_vtc"),ji=(e,{slots:t})=>as(hl,cc(e),t);ji.displayName="Transition";const Vi={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};ji.props=ie({},di,Vi);const nt=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},ur=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function cc(e){const t={};for(const O in e)O in Vi||(t[O]=e[O]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,L=ac(r),M=L&&L[0],V=L&&L[1],{onBeforeEnter:W,onEnter:X,onEnterCancelled:p,onLeave:y,onLeaveCancelled:N,onBeforeAppear:P=W,onAppear:D=X,onAppearCancelled:R=p}=t,T=(O,q,re)=>{st(O,q?d:l),st(O,q?u:o),re&&re()},S=(O,q)=>{O._isLeaving=!1,st(O,h),st(O,w),st(O,m),q&&q()},K=O=>(q,re)=>{const le=O?D:X,H=()=>T(q,O,re);nt(le,[q,H]),fr(()=>{st(q,O?c:i),ke(q,O?d:l),ur(le)||dr(q,s,M,H)})};return ie(t,{onBeforeEnter(O){nt(W,[O]),ke(O,i),ke(O,o)},onBeforeAppear(O){nt(P,[O]),ke(O,c),ke(O,u)},onEnter:K(!1),onAppear:K(!0),onLeave(O,q){O._isLeaving=!0;const re=()=>S(O,q);ke(O,h),dc(),ke(O,m),fr(()=>{O._isLeaving&&(st(O,h),ke(O,w),ur(y)||dr(O,s,V,re))}),nt(y,[O,re])},onEnterCancelled(O){T(O,!1),nt(p,[O])},onAppearCancelled(O){T(O,!0),nt(R,[O])},onLeaveCancelled(O){S(O),nt(N,[O])}})}function ac(e){if(e==null)return null;if(Z(e))return[Wn(e.enter),Wn(e.leave)];{const t=Wn(e);return[t,t]}}function Wn(e){return ao(e)}function ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Vt]||(e[Vt]=new Set)).add(t)}function st(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Vt];n&&(n.delete(t),n.size||(e[Vt]=void 0))}function fr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let uc=0;function dr(e,t,n,s){const r=e._endId=++uc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=fc(e,t);if(!o)return s();const u=o+"end";let d=0;const h=()=>{e.removeEventListener(u,m),i()},m=w=>{w.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[L]||"").split(", "),r=s(`${Be}Delay`),i=s(`${Be}Duration`),o=hr(r,i),l=s(`${At}Delay`),c=s(`${At}Duration`),u=hr(l,c);let d=null,h=0,m=0;t===Be?o>0&&(d=Be,h=o,m=i.length):t===At?u>0&&(d=At,h=u,m=c.length):(h=Math.max(o,u),d=h>0?o>u?Be:At:null,m=d?d===Be?i.length:c.length:0);const w=d===Be&&/\b(transform|all)(,|$)/.test(s(`${Be}Property`).toString());return{type:d,timeout:h,propCount:m,hasTransform:w}}function hr(e,t){for(;e.lengthpr(n)+pr(e[s])))}function pr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function dc(){return document.body.offsetHeight}function hc(e,t,n){const s=e[Vt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const pc=Symbol("_vod"),gc=Symbol("");function mc(e,t,n){const s=e.style,r=s.display,i=ne(n);if(n&&!i){if(t&&!ne(t))for(const o in t)n[o]==null&&us(s,o,"");for(const o in n)us(s,o,n[o])}else if(i){if(t!==n){const o=s[gc];o&&(n+=";"+o),s.cssText=n}}else t&&e.removeAttribute("style");pc in e&&(s.display=r)}const gr=/\s*!important$/;function us(e,t,n){if(B(n))n.forEach(s=>us(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=yc(e,t);gr.test(n)?e.setProperty(at(s),n.replace(gr,""),"important"):e[s]=n}}const mr=["Webkit","Moz","ms"],qn={};function yc(e,t){const n=qn[t];if(n)return n;let s=Me(t);if(s!=="filter"&&s in e)return qn[t]=s;s=wn(s);for(let r=0;rzn||(Ec.then(()=>zn=0),zn=Date.now());function Tc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Se(Ac(s,n.value),t,5,[s])};return n.value=e,n.attached=Sc(),n}function Ac(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const vr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Rc=(e,t,n,s,r,i,o,l,c)=>{const u=r==="svg";t==="class"?hc(e,s,u):t==="style"?mc(e,n,s):Dt(t)?hs(t)||xc(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Oc(e,t,s,u))?bc(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),_c(e,t,s,u))};function Oc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&vr(t)&&U(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 r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return vr(t)&&ne(n)?!1:t in e}const Lc=["ctrl","shift","alt","meta"],Pc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Lc.some(n=>e[`${n}Key`]&&!t.includes(n))},Ka=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=at(r.key);if(t.some(o=>o===i||Ic[o]===i))return e(r)})},Mc=ie({patchProp:Rc},lc);let Gn,wr=!1;function Nc(){return Gn=wr?Gn:kl(Mc),wr=!0,Gn}const qa=(...e)=>{const t=Nc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=$c(s);if(r)return n(r,!0,Fc(r))},t};function Fc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function $c(e){return ne(e)?document.querySelector(e):e}const za=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Hc="modulepreload",jc=function(e){return"/"+e},xr={},Ga=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){const i=document.getElementsByTagName("link");r=Promise.all(n.map(o=>{if(o=jc(o),o in xr)return;xr[o]=!0;const l=o.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(!!s)for(let h=i.length-1;h>=0;h--){const m=i[h];if(m.href===o&&(!l||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${c}`))return;const d=document.createElement("link");if(d.rel=l?"stylesheet":Hc,l||(d.as="script",d.crossOrigin=""),d.href=o,document.head.appendChild(d),l)return new Promise((h,m)=>{d.addEventListener("load",h),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${o}`)))})}))}return r.then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},Vc=window.__VP_SITE_DATA__;function Ms(e){return Vr()?(bo(e),!0):!1}function Je(e){return typeof e=="function"?e():ti(e)}const Di=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Dc=Object.prototype.toString,Bc=e=>Dc.call(e)==="[object Object]",Nt=()=>{},fs=kc();function kc(){var e,t;return Di&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Uc(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Bi=e=>e();function Kc(e=Bi){const t=me(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:En(t),pause:n,resume:s,eventFilter:r}}function Wc(e){return e||Nn()}function ki(...e){if(e.length!==1)return Go(...e);const t=e[0];return typeof t=="function"?En(Wo(()=>({get:t,set:Nt}))):me(t)}function qc(e,t,n={}){const{eventFilter:s=Bi,...r}=n;return Ye(e,Uc(s,t),r)}function zc(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Kc(s);return{stop:qc(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function Ui(e,t=!0,n){Wc()?St(e,n):t?e():Tn(e)}function gt(e){var t;const n=Je(e);return(t=n==null?void 0:n.$el)!=null?t:n}const He=Di?window:void 0;function Xe(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Nt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(d=>d()),i.length=0},l=(d,h,m,w)=>(d.addEventListener(h,m,w),()=>d.removeEventListener(h,m,w)),c=Ye(()=>[gt(t),Je(r)],([d,h])=>{if(o(),!d)return;const m=Bc(h)?{...h}:h;i.push(...n.flatMap(w=>s.map(L=>l(d,w,L,m))))},{immediate:!0,flush:"post"}),u=()=>{c(),o()};return Ms(u),u}let Cr=!1;function Ya(e,t,n={}){const{window:s=He,ignore:r=[],capture:i=!0,detectIframe:o=!1}=n;if(!s)return Nt;fs&&!Cr&&(Cr=!0,Array.from(s.document.body.children).forEach(m=>m.addEventListener("click",Nt)),s.document.documentElement.addEventListener("click",Nt));let l=!0;const c=m=>r.some(w=>{if(typeof w=="string")return Array.from(s.document.querySelectorAll(w)).some(L=>L===m.target||m.composedPath().includes(L));{const L=gt(w);return L&&(m.target===L||m.composedPath().includes(L))}}),d=[Xe(s,"click",m=>{const w=gt(e);if(!(!w||w===m.target||m.composedPath().includes(w))){if(m.detail===0&&(l=!c(m)),!l){l=!0;return}t(m)}},{passive:!0,capture:i}),Xe(s,"pointerdown",m=>{const w=gt(e);l=!c(m)&&!!(w&&!m.composedPath().includes(w))},{passive:!0}),o&&Xe(s,"blur",m=>{setTimeout(()=>{var w;const L=gt(e);((w=s.document.activeElement)==null?void 0:w.tagName)==="IFRAME"&&!(L!=null&&L.contains(s.document.activeElement))&&t(m)},0)})].filter(Boolean);return()=>d.forEach(m=>m())}function Gc(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Ja(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Gc(t);return Xe(r,i,d=>{d.repeat&&Je(l)||c(d)&&n(d)},o)}function Yc(){const e=me(!1);return Nn()&&St(()=>{e.value=!0}),e}function Jc(e){const t=Yc();return se(()=>(t.value,!!e()))}function Xc(e,t={}){const{window:n=He}=t,s=Jc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=me(!1),o=u=>{i.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=ui(()=>{s.value&&(l(),r=n.matchMedia(Je(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return Ms(()=>{c(),l(),r=void 0}),i}const Zt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},en="__vueuse_ssr_handlers__",Qc=Zc();function Zc(){return en in Zt||(Zt[en]=Zt[en]||{}),Zt[en]}function Ki(e,t){return Qc[e]||t}function ea(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 ta={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()}},Er="vueuse-storage";function na(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:h=He,eventFilter:m,onError:w=T=>{console.error(T)},initOnMounted:L}=s,M=(d?Zr:me)(typeof t=="function"?t():t);if(!n)try{n=Ki("getDefaultStorage",()=>{var T;return(T=He)==null?void 0:T.localStorage})()}catch(T){w(T)}if(!n)return M;const V=Je(t),W=ea(V),X=(r=s.serializer)!=null?r:ta[W],{pause:p,resume:y}=zc(M,()=>N(M.value),{flush:i,deep:o,eventFilter:m});return h&&l&&Ui(()=>{Xe(h,"storage",R),Xe(h,Er,D),L&&R()}),L||R(),M;function N(T){try{if(T==null)n.removeItem(e);else{const S=X.write(T),K=n.getItem(e);K!==S&&(n.setItem(e,S),h&&h.dispatchEvent(new CustomEvent(Er,{detail:{key:e,oldValue:K,newValue:S,storageArea:n}})))}}catch(S){w(S)}}function P(T){const S=T?T.newValue:n.getItem(e);if(S==null)return c&&V!=null&&n.setItem(e,X.write(V)),V;if(!T&&u){const K=X.read(S);return typeof u=="function"?u(K,V):W==="object"&&!Array.isArray(K)?{...V,...K}:K}else return typeof S!="string"?S:X.read(S)}function D(T){R(T.detail)}function R(T){if(!(T&&T.storageArea!==n)){if(T&&T.key==null){M.value=V;return}if(!(T&&T.key!==e)){p();try{(T==null?void 0:T.newValue)!==X.write(M.value)&&(M.value=P(T))}catch(S){w(S)}finally{T?Tn(y):y()}}}}}function Wi(e){return Xc("(prefers-color-scheme: dark)",e)}function sa(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=Wi({window:r}),w=se(()=>m.value?"dark":"light"),L=c||(o==null?ki(s):na(o,s,i,{window:r,listenToStorageChanges:l})),M=se(()=>L.value==="auto"?w.value:L.value),V=Ki("updateHTMLAttrs",(y,N,P)=>{const D=typeof y=="string"?r==null?void 0:r.document.querySelector(y):gt(y);if(!D)return;let R;if(d&&(R=r.document.createElement("style"),R.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),r.document.head.appendChild(R)),N==="class"){const T=P.split(/\s/g);Object.values(h).flatMap(S=>(S||"").split(/\s/g)).filter(Boolean).forEach(S=>{T.includes(S)?D.classList.add(S):D.classList.remove(S)})}else D.setAttribute(N,P);d&&(r.getComputedStyle(R).opacity,document.head.removeChild(R))});function W(y){var N;V(t,n,(N=h[y])!=null?N:y)}function X(y){e.onChanged?e.onChanged(y,W):W(y)}Ye(M,X,{flush:"post",immediate:!0}),Ui(()=>X(M.value));const p=se({get(){return u?L.value:M.value},set(y){L.value=y}});try{return Object.assign(p,{store:L,system:w,state:M})}catch{return p}}function ra(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=sa({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=se(()=>r.system?r.system.value:Wi({window:s}).value?"dark":"light");return se({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Yn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function qi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const tn=new WeakMap;function Xa(e,t=!1){const n=me(t);let s=null,r;Ye(ki(e),l=>{const c=Yn(Je(l));if(c){const u=c;tn.get(u)||tn.set(u,r),n.value&&(u.style.overflow="hidden")}},{immediate:!0});const i=()=>{const l=Yn(Je(e));!l||n.value||(fs&&(s=Xe(l,"touchmove",c=>{ia(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{var l;const c=Yn(Je(e));!c||!n.value||(fs&&(s==null||s()),c.style.overflow=(l=tn.get(c))!=null?l:"",tn.delete(c),n.value=!1)};return Ms(o),se({get(){return n.value},set(l){l?i():o()}})}function Qa(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:me(0),y:me(0)};const s=me(t.scrollX),r=me(t.scrollY),i=se({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=se({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Xe(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}const zi=/^(?:[a-z]+:|\/\/)/i,oa="vitepress-theme-appearance",Gi=/#.*$/,la=/(index)?\.(md|html)$/,Ce=typeof document<"u",Yi={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ca(e,t,n=!1){if(t===void 0)return!1;if(e=Sr(`/${e}`),n)return new RegExp(t).test(e);if(Sr(t)!==e)return!1;const s=t.match(Gi);return s?(Ce?location.hash:"")===s[0]:!0}function Sr(e){return decodeURI(e).replace(Gi,"").replace(la,"")}function aa(e){return zi.test(e)}function ua(e,t){var s,r,i,o,l,c,u;const n=Object.keys(e.locales).find(d=>d!=="root"&&!aa(d)&&ca(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Xi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function Ji(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=fa(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function fa(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function da(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Xi(e,t){return[...e.filter(n=>!da(t,n)),...t]}const ha=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,pa=/^[a-z]:/i;function Tr(e){const t=pa.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(ha,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ga=new Set("3g2,3gp,7z,aac,abw,ai,aif,aifc,aiff,apng,arc,asf,asr,asx,au,avi,avif,axs,azw,bin,bmp,bz,bz2,c,cda,cer,class,crl,crt,csh,css,csv,dcr,der,dll,doc,docx,eot,eps,epub,exe,flac,gif,gtar,gz,gzip,ico,ics,ief,jar,jfif,jpe,jpeg,jpg,js,json,jsonld,latex,m3u,m4a,man,mdb,mht,mhtml,mid,midi,mjs,mov,mp2,mp3,mp4,mpa,mpe,mpeg,mpg,mpkg,mpp,odp,ods,odt,oga,ogg,ogv,ogx,opus,otf,p10,p12,p7b,p7c,p7m,p7r,p7s,pbm,pdf,pfx,php,pjp,pjpeg,png,ppt,pptx,ps,pub,qt,rar,roff,rtf,rtx,ser,sh,spc,svg,swf,t,tar,tcl,tex,texi,texinfo,tgz,tif,tiff,tr,ts,tsv,ttf,txt,ua,viv,vivo,vsd,vtt,wav,weba,webm,webp,woff,woff2,xbm,xhtml,xls,xlsx,xml,xul,yaml,yml,zip,conf".split(","));function ma(e){const t=e.split(".").pop();return t==null||!ga.has(t.toLowerCase())}const ya=Symbol(),ct=Zr(Vc);function Za(e){const t=se(()=>ua(ct.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?me(!0):n?ra({storageKey:oa,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):me(!1);return{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>Ji(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:s}}function _a(){const e=wt(ya);if(!e)throw new Error("vitepress data not properly injected in app");return e}function ba(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ar(e){return zi.test(e)||!e.startsWith("/")?e:ba(ct.value.base,e)}function va(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){const n="/";t=Tr(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${Tr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let on=[];function eu(e){on.push(e),In(()=>{on=on.filter(t=>t!==e)})}function wa(){let e=ct.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Rr(e,n);else if(Array.isArray(e))for(const s of e){const r=Rr(s,n);if(r){t=r;break}}return t}function Rr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const xa=Symbol(),Qi="http://a.com",Ca=()=>({path:"/",component:null,data:Yi});function tu(e,t){const n=Cn(Ca()),s={route:n,go:r};async function r(l=Ce?location.href:"/"){var c,u;l=_n(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(Lr(l),await o(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l)))}let i=null;async function o(l,c=0,u=!1){var m;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const d=new URL(l,Qi),h=i=d.pathname;try{let w=await e(h);if(!w)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:L,__pageData:M}=w;if(!L)throw new Error(`Invalid route component: ${L}`);n.path=Ce?h:Ar(h),n.component=Lt(L),n.data=Lt(M),Ce&&Tn(()=>{let V=ct.value.base+M.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ct.value.cleanUrls&&!V.endsWith("/")&&(V+=".html"),V!==d.pathname&&(d.pathname=V,l=V+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(X){console.warn(X)}if(W){Or(W,d.hash);return}}window.scrollTo(0,c)})}}catch(w){if(!/fetch|Page not found/.test(w.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(w),!u)try{const L=await fetch(ct.value.base+"hashmap.json");window.__VP_HASH_MAP__=await L.json(),await o(l,c,!0);return}catch{}i===h&&(i=null,n.path=Ce?h:Ar(h),n.component=t?Lt(t):null,n.data=Yi)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const u=l.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:d}=u,{href:h,origin:m,pathname:w,hash:L,search:M}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),V=window.location;!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&m===V.origin&&ma(w)&&(l.preventDefault(),w===V.pathname&&M===V.search?(L!==V.hash&&(history.pushState(null,"",L),window.dispatchEvent(new Event("hashchange"))),L?Or(u,L,u.classList.contains("header-anchor")):(Lr(h),window.scrollTo(0,0))):r(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await o(_n(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ea(){const e=wt(xa);if(!e)throw new Error("useRouter() is called without provider.");return e}function Zi(){return Ea().route}function Or(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-wa()+i;requestAnimationFrame(r)}}function Lr(e){Ce&&_n(e)!==_n(location.href)&&(history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",e))}function _n(e){const t=new URL(e,Qi);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ct.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Jn=()=>on.forEach(e=>e()),nu=gi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Zi(),{site:n}=_a();return()=>as(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?as(t.component,{onVnodeMounted:Jn,onVnodeUpdated:Jn,onVnodeUnmounted:Jn}):"404 Page Not Found"])}}),su=gi({setup(e,{slots:t}){const n=me(!1);return St(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function ru(){Ce&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function iu(){if(Ce){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(d=>d.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),Sa(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const d=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,d)})}})}}async function Sa(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function ou(e,t){let n=[],s=!0;const r=i=>{if(s){s=!1;return}const o=i.map(Pr);n.forEach((l,c)=>{const u=o.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete n[c])}),o.forEach(l=>l&&document.head.appendChild(l)),n=[...n,...o].filter(Boolean)};ui(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=Ji(o,i);u!==document.title&&(document.title=u);const d=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):Pr(["meta",{name:"description",content:d}]),r(Xi(o.head,Aa(c)))})}function Pr([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Ta(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Aa(e){return e.filter(t=>!Ta(t))}const Xn=new Set,eo=()=>document.createElement("link"),Ra=e=>{const t=eo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Oa=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let nn;const La=Ce&&(nn=eo())&&nn.relList&&nn.relList.supports&&nn.relList.supports("prefetch")?Ra:Oa;function lu(){if(!Ce||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Xn.has(c)){Xn.add(c);const u=va(c);u&&La(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Xn.add(l))})})};St(s);const r=Zi();Ye(()=>r.path,s),In(()=>{n&&n.disconnect()})}export{Wa as $,In as A,$a as B,bl as C,wa as D,Ha as E,ge as F,Na as G,Zr as H,eu as I,ae as J,Fa as K,zi as L,Zi as M,Yl as N,wt as O,Ya as P,Ja as Q,ms as R,Tn as S,ji as T,Qa as U,ka as V,En as W,Xa as X,Ml as Y,Va as Z,za as _,Ni as a,Ka as a0,Da as a1,ou as a2,xa as a3,Za as a4,ya as a5,nu as a6,su as a7,ct as a8,qa as a9,tu as aa,va as ab,Ga as ac,lu as ad,iu as ae,ru as af,as as ag,Pi as b,Ba as c,gi as d,Ua as e,ma as f,Ar as g,me as h,aa as i,Ce as j,se as k,St as l,Mi as m,ys as n,Oi as o,ti as p,Ia as q,ja as r,Ma as s,Pa as t,_a as u,ca as v,nl as w,Xc as x,Ye as y,ui as z}; diff --git a/assets/chunks/theme.Yg7E2Yxt.js b/assets/chunks/theme.Yg7E2Yxt.js new file mode 100644 index 0000000..b40df5e --- /dev/null +++ b/assets/chunks/theme.Yg7E2Yxt.js @@ -0,0 +1 @@ +import{d as g,o as a,c as i,r as d,n as C,a as A,t as V,b,w as p,e as f,T as ve,_ as m,u as ye,i as Fe,f as Oe,g as G,h as S,j as K,k,l as j,m as c,p as r,q as D,s as E,v as U,x as ie,y as R,z as ee,A as he,B as we,C as We,D as Ue,F as L,E as H,G as x,H as Pe,I as te,J as _,K as W,L as Ve,M as se,N as Y,O as ne,P as Ge,Q as je,R as Re,S as qe,U as Le,V as Ke,W as Ze,X as Se,Y as Me,Z as Je,$ as Ye,a0 as Qe,a1 as Xe}from"./framework.kuHzA11c.js";const et=g({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),i("span",{class:C(["VPBadge",e.type])},[d(e.$slots,"default",{},()=>[A(V(e.text),1)])],2))}}),tt={key:0,class:"VPBackdrop"},st=g({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),b(ve,{name:"fade"},{default:p(()=>[e.show?(a(),i("div",tt)):f("",!0)]),_:1}))}}),nt=m(st,[["__scopeId","data-v-c79a1216"]]),P=ye;function ot(s,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(s,e):(s(),(o=!0)&&setTimeout(()=>o=!1,e))}}function ce(s){return/^\//.test(s)?s:`/${s}`}function pe(s){const{pathname:e,search:t,hash:o,protocol:n}=new URL(s,"http://a.com");if(Fe(s)||s.startsWith("#")||!n.startsWith("http")||!Oe(e))return s;const{site:l}=P(),u=e.endsWith("/")||e.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,l.value.cleanUrls?"":".html")}${t}${o}`);return G(u)}const _e=S(K?location.hash:"");K&&window.addEventListener("hashchange",()=>{_e.value=location.hash});function Z({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:o,page:n,theme:l}=P(),u=k(()=>{var v,$;return{label:(v=t.value.locales[o.value])==null?void 0:v.label,link:(($=t.value.locales[o.value])==null?void 0:$.link)||(o.value==="root"?"/":`/${o.value}/`)}});return{localeLinks:k(()=>Object.entries(t.value.locales).flatMap(([v,$])=>s&&u.value.label===$.label?[]:{text:$.label,link:at($.link||(v==="root"?"/":`/${v}/`),l.value.i18nRouting!==!1&&e,n.value.relativePath.slice(u.value.link.length-1),!t.value.cleanUrls)+_e.value})),currentLang:u}}function at(s,e,t,o){return e?s.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,o?".html":"")):s}const rt=s=>(D("data-v-f87ff6e4"),s=s(),E(),s),lt={class:"NotFound"},it={class:"code"},ct={class:"title"},ut=rt(()=>c("div",{class:"divider"},null,-1)),dt={class:"quote"},vt={class:"action"},ht=["href","aria-label"],pt=g({__name:"NotFound",setup(s){const{site:e,theme:t}=P(),{localeLinks:o}=Z({removeCurrent:!1}),n=S("/");return j(()=>{var u;const l=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");o.value.length&&(n.value=((u=o.value.find(({link:h})=>h.startsWith(l)))==null?void 0:u.link)||o.value[0].link)}),(l,u)=>{var h,v,$,y,w;return a(),i("div",lt,[c("p",it,V(((h=r(t).notFound)==null?void 0:h.code)??"404"),1),c("h1",ct,V(((v=r(t).notFound)==null?void 0:v.title)??"PAGE NOT FOUND"),1),ut,c("blockquote",dt,V((($=r(t).notFound)==null?void 0:$.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),c("div",vt,[c("a",{class:"link",href:r(G)(n.value),"aria-label":((y=r(t).notFound)==null?void 0:y.linkLabel)??"go to home"},V(((w=r(t).notFound)==null?void 0:w.linkText)??"Take me home"),9,ht)])])}}}),_t=m(pt,[["__scopeId","data-v-f87ff6e4"]]);function Te(s,e){if(Array.isArray(s))return Q(s);if(s==null)return[];e=ce(e);const t=Object.keys(s).sort((n,l)=>l.split("/").length-n.split("/").length).find(n=>e.startsWith(ce(n))),o=t?s[t]:[];return Array.isArray(o)?Q(o):Q(o.items,o.base)}function ft(s){const e=[];let t=0;for(const o in s){const n=s[o];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function mt(s){const e=[];function t(o){for(const n of o)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(s),e}function ue(s,e){return Array.isArray(e)?e.some(t=>ue(s,t)):U(s,e.link)?!0:e.items?ue(s,e.items):!1}function Q(s,e){return[...s].map(t=>{const o={...t},n=o.base||e;return n&&o.link&&(o.link=n+o.link),o.items&&(o.items=Q(o.items,n)),o})}function F(){const{frontmatter:s,page:e,theme:t}=P(),o=ie("(min-width: 960px)"),n=S(!1),l=k(()=>{const B=t.value.sidebar,M=e.value.relativePath;return B?Te(B,M):[]}),u=S(l.value);R(l,(B,M)=>{JSON.stringify(B)!==JSON.stringify(M)&&(u.value=l.value)});const h=k(()=>s.value.sidebar!==!1&&u.value.length>0&&s.value.layout!=="home"),v=k(()=>$?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),$=k(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),y=k(()=>h.value&&o.value),w=k(()=>h.value?ft(u.value):[]);function T(){n.value=!0}function I(){n.value=!1}function N(){n.value?I():T()}return{isOpen:n,sidebar:u,sidebarGroups:w,hasSidebar:h,hasAside:$,leftAside:v,isSidebarEnabled:y,open:T,close:I,toggle:N}}function gt(s,e){let t;ee(()=>{t=s.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",o)}),he(()=>{window.removeEventListener("keyup",o)});function o(n){n.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}function bt(s){const{page:e}=P(),t=S(!1),o=k(()=>s.value.collapsed!=null),n=k(()=>!!s.value.link),l=S(!1),u=()=>{l.value=U(e.value.relativePath,s.value.link)};R([e,s,_e],u),j(u);const h=k(()=>l.value?!0:s.value.items?ue(e.value.relativePath,s.value.items):!1),v=k(()=>!!(s.value.items&&s.value.items.length));ee(()=>{t.value=!!(o.value&&s.value.collapsed)}),we(()=>{(l.value||h.value)&&(t.value=!1)});function $(){o.value&&(t.value=!t.value)}return{collapsed:t,collapsible:o,isLink:n,isActiveLink:l,hasActiveLink:h,hasChildren:v,toggle:$}}function kt(){const{hasSidebar:s}=F(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:k(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const de=[];function Ie(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function fe(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const o=Number(t.tagName[1]);return{element:t,title:$t(t),link:"#"+t.id,level:o}});return yt(e,s)}function $t(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function yt(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[o,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(u=>u.level>=o&&u.level<=n),de.length=0;for(const{element:u,link:h}of s)de.push({element:u,link:h});const l=[];e:for(let u=0;u=0;v--){const $=s[v];if($.level{requestAnimationFrame(l),window.addEventListener("scroll",o)}),We(()=>{u(location.hash)}),he(()=>{window.removeEventListener("scroll",o)});function l(){if(!t.value)return;const h=window.scrollY,v=window.innerHeight,$=document.body.offsetHeight,y=Math.abs(h+v-$)<1,w=de.map(({element:I,link:N})=>({link:N,top:Pt(I)})).filter(({top:I})=>!Number.isNaN(I)).sort((I,N)=>I.top-N.top);if(!w.length){u(null);return}if(h<1){u(null);return}if(y){u(w[w.length-1].link);return}let T=null;for(const{link:I,top:N}of w){if(N>h+Ue()+4)break;T=I}u(T)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=s.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const v=n;v?(v.classList.add("active"),e.value.style.top=v.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Pt(s){let e=0;for(;s!==document.body;){if(s===null)return NaN;e+=s.offsetTop,s=s.offsetParent}return e}const Vt=["href","title"],Lt=g({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(s){function e({target:t}){const o=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(o));n==null||n.focus({preventScroll:!0})}return(t,o)=>{const n=x("VPDocOutlineItem",!0);return a(),i("ul",{class:C(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),i(L,null,H(t.headers,({children:l,link:u,title:h})=>(a(),i("li",null,[c("a",{class:"outline-link",href:u,onClick:e,title:h},V(h),9,Vt),l!=null&&l.length?(a(),b(n,{key:0,headers:l},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Ce=m(Lt,[["__scopeId","data-v-b933a997"]]),St=s=>(D("data-v-935f8a84"),s=s(),E(),s),Mt={class:"content"},Tt={class:"outline-title",role:"heading","aria-level":"2"},It={"aria-labelledby":"doc-outline-aria-label"},Ct=St(()=>c("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Nt=g({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=P(),o=Pe([]);te(()=>{o.value=fe(e.value.outline??t.value.outline)});const n=S(),l=S();return wt(n,l),(u,h)=>(a(),i("div",{class:C(["VPDocAsideOutline",{"has-outline":o.value.length>0}]),ref_key:"container",ref:n,role:"navigation"},[c("div",Mt,[c("div",{class:"outline-marker",ref_key:"marker",ref:l},null,512),c("div",Tt,V(r(Ie)(r(t))),1),c("nav",It,[Ct,_(Ce,{headers:o.value,root:!0},null,8,["headers"])])])],2))}}),Bt=m(Nt,[["__scopeId","data-v-935f8a84"]]),Ht={class:"VPDocAsideCarbonAds"},At=g({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,o)=>(a(),i("div",Ht,[_(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),zt=s=>(D("data-v-3f215769"),s=s(),E(),s),Dt={class:"VPDocAside"},Et=zt(()=>c("div",{class:"spacer"},null,-1)),xt=g({__name:"VPDocAside",setup(s){const{theme:e}=P();return(t,o)=>(a(),i("div",Dt,[d(t.$slots,"aside-top",{},void 0,!0),d(t.$slots,"aside-outline-before",{},void 0,!0),_(Bt),d(t.$slots,"aside-outline-after",{},void 0,!0),Et,d(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),b(At,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),d(t.$slots,"aside-ads-after",{},void 0,!0),d(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ft=m(xt,[["__scopeId","data-v-3f215769"]]);function Ot(){const{theme:s,page:e}=P();return k(()=>{const{text:t="Edit this page",pattern:o=""}=s.value.editLink||{};let n;return typeof o=="function"?n=o(e.value):n=o.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Wt(){const{page:s,theme:e,frontmatter:t}=P();return k(()=>{var v,$,y,w,T,I,N,B;const o=Te(e.value.sidebar,s.value.relativePath),n=mt(o),l=n.findIndex(M=>U(s.value.relativePath,M.link)),u=((v=e.value.docFooter)==null?void 0:v.prev)===!1&&!t.value.prev||t.value.prev===!1,h=(($=e.value.docFooter)==null?void 0:$.next)===!1&&!t.value.next||t.value.next===!1;return{prev:u?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=n[l-1])==null?void 0:y.docFooterText)??((w=n[l-1])==null?void 0:w.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=n[l-1])==null?void 0:T.link)},next:h?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((I=n[l+1])==null?void 0:I.docFooterText)??((N=n[l+1])==null?void 0:N.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((B=n[l+1])==null?void 0:B.link)}}})}const Ut={},Gt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},jt=c("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),Rt=c("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),qt=[jt,Rt];function Kt(s,e){return a(),i("svg",Gt,qt)}const Zt=m(Ut,[["render",Kt]]),z=g({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=k(()=>e.tag??(e.href?"a":"span")),o=k(()=>e.href&&Ve.test(e.href));return(n,l)=>(a(),b(W(t.value),{class:C(["VPLink",{link:n.href,"vp-external-link-icon":o.value,"no-icon":n.noIcon}]),href:n.href?r(pe)(n.href):void 0,target:n.target??(o.value?"_blank":void 0),rel:n.rel??(o.value?"noreferrer":void 0)},{default:p(()=>[d(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Jt={class:"VPLastUpdated"},Yt=["datetime"],Qt=g({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:o,lang:n}=P(),l=k(()=>new Date(o.value.lastUpdated??t.value.lastUpdated)),u=k(()=>l.value.toISOString()),h=S("");return j(()=>{ee(()=>{var v,$,y;h.value=new Intl.DateTimeFormat(($=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&$.forceLocale?n.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(l.value)})}),(v,$)=>{var y;return a(),i("p",Jt,[A(V(((y=r(e).lastUpdated)==null?void 0:y.text)||r(e).lastUpdatedText||"Last updated")+": ",1),c("time",{datetime:u.value},V(h.value),9,Yt)])}}}),Xt=m(Qt,[["__scopeId","data-v-7e05ebdb"]]),es={key:0,class:"VPDocFooter"},ts={key:0,class:"edit-info"},ss={key:0,class:"edit-link"},ns={key:1,class:"last-updated"},os={key:1,class:"prev-next"},as={class:"pager"},rs=["innerHTML"],ls=["innerHTML"],is={class:"pager"},cs=["innerHTML"],us=["innerHTML"],ds=g({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:o}=P(),n=Ot(),l=Wt(),u=k(()=>e.value.editLink&&o.value.editLink!==!1),h=k(()=>t.value.lastUpdated&&o.value.lastUpdated!==!1),v=k(()=>u.value||h.value||l.value.prev||l.value.next);return($,y)=>{var w,T,I,N;return v.value?(a(),i("footer",es,[d($.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),i("div",ts,[u.value?(a(),i("div",ss,[_(z,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:p(()=>[_(Zt,{class:"edit-link-icon","aria-label":"edit icon"}),A(" "+V(r(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),i("div",ns,[_(Xt)])):f("",!0)])):f("",!0),(w=r(l).prev)!=null&&w.link||(T=r(l).next)!=null&&T.link?(a(),i("nav",os,[c("div",as,[(I=r(l).prev)!=null&&I.link?(a(),b(z,{key:0,class:"pager-link prev",href:r(l).prev.link},{default:p(()=>{var B;return[c("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,rs),c("span",{class:"title",innerHTML:r(l).prev.text},null,8,ls)]}),_:1},8,["href"])):f("",!0)]),c("div",is,[(N=r(l).next)!=null&&N.link?(a(),b(z,{key:0,class:"pager-link next",href:r(l).next.link},{default:p(()=>{var B;return[c("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,cs),c("span",{class:"title",innerHTML:r(l).next.text},null,8,us)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),vs=m(ds,[["__scopeId","data-v-48f9bb55"]]),hs=s=>(D("data-v-39a288b8"),s=s(),E(),s),ps={class:"container"},_s=hs(()=>c("div",{class:"aside-curtain"},null,-1)),fs={class:"aside-container"},ms={class:"aside-content"},gs={class:"content"},bs={class:"content-container"},ks={class:"main"},$s=g({__name:"VPDoc",setup(s){const{theme:e}=P(),t=se(),{hasSidebar:o,hasAside:n,leftAside:l}=F(),u=k(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,v)=>{const $=x("Content");return a(),i("div",{class:C(["VPDoc",{"has-sidebar":r(o),"has-aside":r(n)}])},[d(h.$slots,"doc-top",{},void 0,!0),c("div",ps,[r(n)?(a(),i("div",{key:0,class:C(["aside",{"left-aside":r(l)}])},[_s,c("div",fs,[c("div",ms,[_(Ft,null,{"aside-top":p(()=>[d(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[d(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[d(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[d(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[d(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[d(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),c("div",gs,[c("div",bs,[d(h.$slots,"doc-before",{},void 0,!0),c("main",ks,[_($,{class:C(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(vs,null,{"doc-footer-before":p(()=>[d(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),d(h.$slots,"doc-after",{},void 0,!0)])])]),d(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),ys=m($s,[["__scopeId","data-v-39a288b8"]]),ws=g({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(s){const e=s,t=k(()=>e.href&&Ve.test(e.href)),o=k(()=>e.tag||e.href?"a":"button");return(n,l)=>(a(),b(W(o.value),{class:C(["VPButton",[n.size,n.theme]]),href:n.href?r(pe)(n.href):void 0,target:t.value?"_blank":void 0,rel:t.value?"noreferrer":void 0},{default:p(()=>[A(V(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),Ps=m(ws,[["__scopeId","data-v-c1c5efc1"]]),Vs=["src","alt"],Ls=g({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const o=x("VPImage",!0);return e.image?(a(),i(L,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),i("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(G)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Vs)):(a(),i(L,{key:1},[_(o,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(o,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),X=m(Ls,[["__scopeId","data-v-8426fc1a"]]),Ss=s=>(D("data-v-da5d1713"),s=s(),E(),s),Ms={class:"container"},Ts={class:"main"},Is={key:0,class:"name"},Cs=["innerHTML"],Ns=["innerHTML"],Bs=["innerHTML"],Hs={key:0,class:"actions"},As={key:0,class:"image"},zs={class:"image-container"},Ds=Ss(()=>c("div",{class:"image-bg"},null,-1)),Es=g({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=ne("hero-image-slot-exists");return(t,o)=>(a(),i("div",{class:C(["VPHero",{"has-image":t.image||r(e)}])},[c("div",Ms,[c("div",Ts,[d(t.$slots,"home-hero-info",{},()=>[t.name?(a(),i("h1",Is,[c("span",{innerHTML:t.name,class:"clip"},null,8,Cs)])):f("",!0),t.text?(a(),i("p",{key:1,innerHTML:t.text,class:"text"},null,8,Ns)):f("",!0),t.tagline?(a(),i("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Bs)):f("",!0)],!0),t.actions?(a(),i("div",Hs,[(a(!0),i(L,null,H(t.actions,n=>(a(),i("div",{key:n.link,class:"action"},[_(Ps,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link},null,8,["theme","text","href"])]))),128))])):f("",!0)]),t.image||r(e)?(a(),i("div",As,[c("div",zs,[Ds,d(t.$slots,"home-hero-image",{},()=>[t.image?(a(),b(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),xs=m(Es,[["__scopeId","data-v-da5d1713"]]),Fs=g({__name:"VPHomeHero",setup(s){const{frontmatter:e}=P();return(t,o)=>r(e).hero?(a(),b(xs,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info":p(()=>[d(t.$slots,"home-hero-info")]),"home-hero-image":p(()=>[d(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Os={},Ws={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Us=c("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Gs=[Us];function js(s,e){return a(),i("svg",Ws,Gs)}const Rs=m(Os,[["render",js]]),qs={class:"box"},Ks={key:0,class:"icon"},Zs=["innerHTML"],Js=["innerHTML"],Ys=["innerHTML"],Qs={key:4,class:"link-text"},Xs={class:"link-text-value"},en=g({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),b(z,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:p(()=>[c("article",qs,[typeof e.icon=="object"&&e.icon.wrap?(a(),i("div",Ks,[_(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),b(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),i("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Zs)):f("",!0),c("h2",{class:"title",innerHTML:e.title},null,8,Js),e.details?(a(),i("p",{key:3,class:"details",innerHTML:e.details},null,8,Ys)):f("",!0),e.linkText?(a(),i("div",Qs,[c("p",Xs,[A(V(e.linkText)+" ",1),_(Rs,{class:"link-text-icon"})])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),tn=m(en,[["__scopeId","data-v-33204567"]]),sn={key:0,class:"VPFeatures"},nn={class:"container"},on={class:"items"},an=g({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=k(()=>{const o=e.features.length;if(o){if(o===2)return"grid-2";if(o===3)return"grid-3";if(o%3===0)return"grid-6";if(o>3)return"grid-4"}else return});return(o,n)=>o.features?(a(),i("div",sn,[c("div",nn,[c("div",on,[(a(!0),i(L,null,H(o.features,l=>(a(),i("div",{key:l.title,class:C(["item",[t.value]])},[_(tn,{icon:l.icon,title:l.title,details:l.details,link:l.link,"link-text":l.linkText,rel:l.rel,target:l.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),rn=m(an,[["__scopeId","data-v-a6181336"]]),ln=g({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=P();return(t,o)=>r(e).features?(a(),b(rn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),cn={class:"VPHome"},un=g({__name:"VPHome",setup(s){return(e,t)=>{const o=x("Content");return a(),i("div",cn,[d(e.$slots,"home-hero-before",{},void 0,!0),_(Fs,null,{"home-hero-info":p(()=>[d(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[d(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),d(e.$slots,"home-hero-after",{},void 0,!0),d(e.$slots,"home-features-before",{},void 0,!0),_(ln),d(e.$slots,"home-features-after",{},void 0,!0),_(o)])}}}),dn=m(un,[["__scopeId","data-v-d82743a8"]]),vn={},hn={class:"VPPage"};function pn(s,e){const t=x("Content");return a(),i("div",hn,[d(s.$slots,"page-top"),_(t),d(s.$slots,"page-bottom")])}const _n=m(vn,[["render",pn]]),fn=g({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=P(),{hasSidebar:o}=F();return(n,l)=>(a(),i("div",{class:C(["VPContent",{"has-sidebar":r(o),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?d(n.$slots,"not-found",{key:0},()=>[_(_t)],!0):r(t).layout==="page"?(a(),b(_n,{key:1},{"page-top":p(()=>[d(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[d(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),b(dn,{key:2},{"home-hero-before":p(()=>[d(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[d(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[d(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[d(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[d(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[d(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),b(W(r(t).layout),{key:3})):(a(),b(ys,{key:4},{"doc-top":p(()=>[d(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[d(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":p(()=>[d(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[d(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[d(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":p(()=>[d(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":p(()=>[d(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[d(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[d(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[d(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":p(()=>[d(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),mn=m(fn,[["__scopeId","data-v-669faec9"]]),gn={class:"container"},bn=["innerHTML"],kn=["innerHTML"],$n=g({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=P(),{hasSidebar:o}=F();return(n,l)=>r(e).footer&&r(t).footer!==!1?(a(),i("footer",{key:0,class:C(["VPFooter",{"has-sidebar":r(o)}])},[c("div",gn,[r(e).footer.message?(a(),i("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,bn)):f("",!0),r(e).footer.copyright?(a(),i("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,kn)):f("",!0)])],2)):f("",!0)}}),yn=m($n,[["__scopeId","data-v-e315a0ad"]]);function Ne(){const{theme:s,frontmatter:e}=P(),t=Pe([]),o=k(()=>t.value.length>0);return te(()=>{t.value=fe(e.value.outline??s.value.outline)}),{headers:t,hasLocalNav:o}}const wn={},Pn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Vn=c("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),Ln=[Vn];function Sn(s,e){return a(),i("svg",Pn,Ln)}const Be=m(wn,[["render",Sn]]),Mn={class:"header"},Tn={class:"outline"},In=g({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=P(),o=S(!1),n=S(0),l=S(),u=S();Ge(l,()=>{o.value=!1}),je("Escape",()=>{o.value=!1}),te(()=>{o.value=!1});function h(){o.value=!o.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function v(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),qe(()=>{o.value=!1}))}function $(){o.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,w)=>(a(),i("div",{class:"VPLocalNavOutlineDropdown",style:Re({"--vp-vh":n.value+"px"}),ref_key:"main",ref:l},[y.headers.length>0?(a(),i("button",{key:0,onClick:h,class:C({open:o.value})},[A(V(r(Ie)(r(t)))+" ",1),_(Be,{class:"icon"})],2)):(a(),i("button",{key:1,onClick:$},V(r(t).returnToTopLabel||"Return to top"),1)),_(ve,{name:"flyout"},{default:p(()=>[o.value?(a(),i("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:v},[c("div",Mn,[c("a",{class:"top-link",href:"#",onClick:$},V(r(t).returnToTopLabel||"Return to top"),1)]),c("div",Tn,[_(Ce,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Cn=m(In,[["__scopeId","data-v-af18c0d5"]]),Nn={},Bn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Hn=c("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),An=c("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),zn=c("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),Dn=c("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),En=[Hn,An,zn,Dn];function xn(s,e){return a(),i("svg",Bn,En)}const Fn=m(Nn,[["render",xn]]),On={class:"container"},Wn=["aria-expanded"],Un={class:"menu-text"},Gn=g({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=P(),{hasSidebar:o}=F(),{headers:n}=Ne(),{y:l}=Le(),u=S(0);j(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),te(()=>{n.value=fe(t.value.outline??e.value.outline)});const h=k(()=>n.value.length===0),v=k(()=>h.value&&!o.value),$=k(()=>({VPLocalNav:!0,"has-sidebar":o.value,empty:h.value,fixed:v.value}));return(y,w)=>r(t).layout!=="home"&&(!v.value||r(l)>=u.value)?(a(),i("div",{key:0,class:C($.value)},[c("div",On,[r(o)?(a(),i("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:w[0]||(w[0]=T=>y.$emit("open-menu"))},[_(Fn,{class:"menu-icon"}),c("span",Un,V(r(e).sidebarMenuLabel||"Menu"),1)],8,Wn)):f("",!0),_(Cn,{headers:r(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),jn=m(Gn,[["__scopeId","data-v-0282ae07"]]);function Rn(){const s=S(!1);function e(){s.value=!0,window.addEventListener("resize",n)}function t(){s.value=!1,window.removeEventListener("resize",n)}function o(){s.value?t():e()}function n(){window.outerWidth>=768&&t()}const l=se();return R(()=>l.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:o}}const qn={},Kn={class:"VPSwitch",type:"button",role:"switch"},Zn={class:"check"},Jn={key:0,class:"icon"};function Yn(s,e){return a(),i("button",Kn,[c("span",Zn,[s.$slots.default?(a(),i("span",Jn,[d(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Qn=m(qn,[["render",Yn],["__scopeId","data-v-b1685198"]]),Xn={},eo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},to=c("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),so=[to];function no(s,e){return a(),i("svg",eo,so)}const oo=m(Xn,[["render",no]]),ao={},ro={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},lo=Ke('',9),io=[lo];function co(s,e){return a(),i("svg",ro,io)}const uo=m(ao,[["render",co]]),vo=g({__name:"VPSwitchAppearance",setup(s){const{isDark:e,theme:t}=P(),o=ne("toggle-appearance",()=>{e.value=!e.value}),n=k(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(l,u)=>(a(),b(Qn,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(o)},{default:p(()=>[_(uo,{class:"sun"}),_(oo,{class:"moon"})]),_:1},8,["title","aria-checked","onClick"]))}}),me=m(vo,[["__scopeId","data-v-1736f215"]]),ho={key:0,class:"VPNavBarAppearance"},po=g({__name:"VPNavBarAppearance",setup(s){const{site:e}=P();return(t,o)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),i("div",ho,[_(me)])):f("",!0)}}),_o=m(po,[["__scopeId","data-v-e6aabb21"]]),ge=S();let He=!1,le=0;function fo(s){const e=S(!1);if(K){!He&&mo(),le++;const t=R(ge,o=>{var n,l,u;o===s.el.value||(n=s.el.value)!=null&&n.contains(o)?(e.value=!0,(l=s.onFocus)==null||l.call(s)):(e.value=!1,(u=s.onBlur)==null||u.call(s))});he(()=>{t(),le--,le||go()})}return Ze(e)}function mo(){document.addEventListener("focusin",Ae),He=!0,ge.value=document.activeElement}function go(){document.removeEventListener("focusin",Ae)}function Ae(){ge.value=document.activeElement}const bo={},ko={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},$o=c("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),yo=[$o];function wo(s,e){return a(),i("svg",ko,yo)}const ze=m(bo,[["render",wo]]),Po={},Vo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Lo=c("circle",{cx:"12",cy:"12",r:"2"},null,-1),So=c("circle",{cx:"19",cy:"12",r:"2"},null,-1),Mo=c("circle",{cx:"5",cy:"12",r:"2"},null,-1),To=[Lo,So,Mo];function Io(s,e){return a(),i("svg",Vo,To)}const Co=m(Po,[["render",Io]]),No={class:"VPMenuLink"},Bo=g({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=P();return(t,o)=>(a(),i("div",No,[_(z,{class:C({active:r(U)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:p(()=>[A(V(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),oe=m(Bo,[["__scopeId","data-v-43f1e123"]]),Ho={class:"VPMenuGroup"},Ao={key:0,class:"title"},zo=g({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",Ho,[e.text?(a(),i("p",Ao,V(e.text),1)):f("",!0),(a(!0),i(L,null,H(e.items,o=>(a(),i(L,null,["link"in o?(a(),b(oe,{key:0,item:o},null,8,["item"])):f("",!0)],64))),256))]))}}),Do=m(zo,[["__scopeId","data-v-69e747b5"]]),Eo={class:"VPMenu"},xo={key:0,class:"items"},Fo=g({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),i("div",Eo,[e.items?(a(),i("div",xo,[(a(!0),i(L,null,H(e.items,o=>(a(),i(L,{key:o.text},["link"in o?(a(),b(oe,{key:0,item:o},null,8,["item"])):(a(),b(Do,{key:1,text:o.text,items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0),d(e.$slots,"default",{},void 0,!0)]))}}),Oo=m(Fo,[["__scopeId","data-v-e7ea1737"]]),Wo=["aria-expanded","aria-label"],Uo={key:0,class:"text"},Go=["innerHTML"],jo={class:"menu"},Ro=g({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=S(!1),t=S();fo({el:t,onBlur:o});function o(){e.value=!1}return(n,l)=>(a(),i("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:l[1]||(l[1]=u=>e.value=!0),onMouseleave:l[2]||(l[2]=u=>e.value=!1)},[c("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:l[0]||(l[0]=u=>e.value=!e.value)},[n.button||n.icon?(a(),i("span",Uo,[n.icon?(a(),b(W(n.icon),{key:0,class:"option-icon"})):f("",!0),n.button?(a(),i("span",{key:1,innerHTML:n.button},null,8,Go)):f("",!0),_(ze,{class:"text-icon"})])):(a(),b(Co,{key:1,class:"icon"}))],8,Wo),c("div",jo,[_(Oo,{items:n.items},{default:p(()=>[d(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=m(Ro,[["__scopeId","data-v-9c007e85"]]),qo={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',x:'X',youtube:'YouTube'},Ko=["href","aria-label","innerHTML"],Zo=g({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=k(()=>typeof e.icon=="object"?e.icon.svg:qo[e.icon]);return(o,n)=>(a(),i("a",{class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ko))}}),Jo=m(Zo,[["__scopeId","data-v-f80f8133"]]),Yo={class:"VPSocialLinks"},Qo=g({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),i("div",Yo,[(a(!0),i(L,null,H(e.links,({link:o,icon:n,ariaLabel:l})=>(a(),b(Jo,{key:o,icon:n,link:o,ariaLabel:l},null,8,["icon","link","ariaLabel"]))),128))]))}}),ke=m(Qo,[["__scopeId","data-v-7bc22406"]]),Xo={key:0,class:"group translations"},ea={class:"trans-title"},ta={key:1,class:"group"},sa={class:"item appearance"},na={class:"label"},oa={class:"appearance-action"},aa={key:2,class:"group"},ra={class:"item social-links"},la=g({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=P(),{localeLinks:o,currentLang:n}=Z({correspondingLink:!0}),l=k(()=>o.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>l.value?(a(),b(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:p(()=>[r(o).length&&r(n).label?(a(),i("div",Xo,[c("p",ea,V(r(n).label),1),(a(!0),i(L,null,H(r(o),v=>(a(),b(oe,{key:v.link,item:v},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"?(a(),i("div",ta,[c("div",sa,[c("p",na,V(r(t).darkModeSwitchLabel||"Appearance"),1),c("div",oa,[_(me)])])])):f("",!0),r(t).socialLinks?(a(),i("div",aa,[c("div",ra,[_(ke,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),ia=m(la,[["__scopeId","data-v-d0bd9dde"]]),ca=s=>(D("data-v-e5dd9c1c"),s=s(),E(),s),ua=["aria-expanded"],da=ca(()=>c("span",{class:"container"},[c("span",{class:"top"}),c("span",{class:"middle"}),c("span",{class:"bottom"})],-1)),va=[da],ha=g({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),i("button",{type:"button",class:C(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=o=>e.$emit("click"))},va,10,ua))}}),pa=m(ha,[["__scopeId","data-v-e5dd9c1c"]]),_a=["innerHTML"],fa=g({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=P();return(t,o)=>(a(),b(z,{class:C({VPNavBarMenuLink:!0,active:r(U)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:p(()=>[c("span",{innerHTML:t.item.text},null,8,_a)]),_:1},8,["class","href","target","rel"]))}}),ma=m(fa,[["__scopeId","data-v-42ef59de"]]),ga=g({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=P(),o=l=>"link"in l?U(t.value.relativePath,l.link,!!e.item.activeMatch):l.items.some(o),n=k(()=>o(e.item));return(l,u)=>(a(),b(be,{class:C({VPNavBarMenuGroup:!0,active:r(U)(r(t).relativePath,l.item.activeMatch,!!l.item.activeMatch)||n.value}),button:l.item.text,items:l.item.items},null,8,["class","button","items"]))}}),ba=s=>(D("data-v-7f418b0f"),s=s(),E(),s),ka={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},$a=ba(()=>c("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),ya=g({__name:"VPNavBarMenu",setup(s){const{theme:e}=P();return(t,o)=>r(e).nav?(a(),i("nav",ka,[$a,(a(!0),i(L,null,H(r(e).nav,n=>(a(),i(L,{key:n.text},["link"in n?(a(),b(ma,{key:0,item:n},null,8,["item"])):(a(),b(ga,{key:1,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),wa=m(ya,[["__scopeId","data-v-7f418b0f"]]);function Pa(s){const{localeIndex:e,theme:t}=P();function o(n){var N,B,M;const l=n.split("."),u=(N=t.value.search)==null?void 0:N.options,h=u&&typeof u=="object",v=h&&((M=(B=u.locales)==null?void 0:B[e.value])==null?void 0:M.translations)||null,$=h&&u.translations||null;let y=v,w=$,T=s;const I=l.pop();for(const J of l){let O=null;const q=T==null?void 0:T[J];q&&(O=T=q);const ae=w==null?void 0:w[J];ae&&(O=w=ae);const re=y==null?void 0:y[J];re&&(O=y=re),q||(T=O),ae||(w=O),re||(y=O)}return(y==null?void 0:y[I])??(w==null?void 0:w[I])??(T==null?void 0:T[I])??""}return o}const Va=["aria-label"],La={class:"DocSearch-Button-Container"},Sa=c("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[c("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),Ma={class:"DocSearch-Button-Placeholder"},Ta=c("span",{class:"DocSearch-Button-Keys"},[c("kbd",{class:"DocSearch-Button-Key"}),c("kbd",{class:"DocSearch-Button-Key"},"K")],-1),$e=g({__name:"VPNavBarSearchButton",setup(s){const t=Pa({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(o,n)=>(a(),i("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[c("span",La,[Sa,c("span",Ma,V(r(t)("button.buttonText")),1)]),Ta],8,Va))}}),Ia={class:"VPNavBarSearch"},Ca={id:"local-search"},Na={key:1,id:"docsearch"},Ba=g({__name:"VPNavBarSearch",setup(s){const e=()=>null,t=()=>null,{theme:o}=P(),n=S(!1),l=S(!1);j(()=>{});function u(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const y=new Event("keydown");y.key="k",y.metaKey=!0,window.dispatchEvent(y),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const v=S(!1),$="";return(y,w)=>{var T;return a(),i("div",Ia,[r($)==="local"?(a(),i(L,{key:0},[v.value?(a(),b(r(e),{key:0,onClose:w[0]||(w[0]=I=>v.value=!1)})):f("",!0),c("div",Ca,[_($e,{onClick:w[1]||(w[1]=I=>v.value=!0)})])],64)):r($)==="algolia"?(a(),i(L,{key:1},[n.value?(a(),b(r(t),{key:0,algolia:((T=r(o).search)==null?void 0:T.options)??r(o).algolia,onVnodeBeforeMount:w[2]||(w[2]=I=>l.value=!0)},null,8,["algolia"])):f("",!0),l.value?f("",!0):(a(),i("div",Na,[_($e,{onClick:u})]))],64)):f("",!0)])}}}),Ha=g({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=P();return(t,o)=>r(e).socialLinks?(a(),b(ke,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Aa=m(Ha,[["__scopeId","data-v-0394ad82"]]),za=["href","rel","target"],Da=g({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=P(),{hasSidebar:o}=F(),{currentLang:n}=Z(),l=k(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),u=k(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),h=k(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,$)=>(a(),i("div",{class:C(["VPNavBarTitle",{"has-sidebar":r(o)}])},[c("a",{class:"title",href:l.value??r(pe)(r(n).link),rel:u.value,target:h.value},[d(v.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),b(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),i(L,{key:1},[A(V(r(t).siteTitle),1)],64)):r(t).siteTitle===void 0?(a(),i(L,{key:2},[A(V(r(e).title),1)],64)):f("",!0),d(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,za)],2))}}),Ea=m(Da,[["__scopeId","data-v-8460f0a8"]]),xa={},Fa={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Oa=c("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Wa=c("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),Ua=[Oa,Wa];function Ga(s,e){return a(),i("svg",Fa,Ua)}const De=m(xa,[["render",Ga]]),ja={class:"items"},Ra={class:"title"},qa=g({__name:"VPNavBarTranslations",setup(s){const{theme:e}=P(),{localeLinks:t,currentLang:o}=Z({correspondingLink:!0});return(n,l)=>r(t).length&&r(o).label?(a(),b(be,{key:0,class:"VPNavBarTranslations",icon:De,label:r(e).langMenuLabel||"Change language"},{default:p(()=>[c("div",ja,[c("p",Ra,V(r(o).label),1),(a(!0),i(L,null,H(r(t),u=>(a(),b(oe,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),Ka=m(qa,[["__scopeId","data-v-74abcbb9"]]),Za=s=>(D("data-v-19c990f1"),s=s(),E(),s),Ja={class:"wrapper"},Ya={class:"container"},Qa={class:"title"},Xa={class:"content"},er={class:"content-body"},tr=Za(()=>c("div",{class:"divider"},[c("div",{class:"divider-line"})],-1)),sr=g({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Le(),{hasSidebar:t}=F(),{hasLocalNav:o}=Ne(),{frontmatter:n}=P(),l=S({});return we(()=>{l.value={"has-sidebar":t.value,"has-local-nav":o.value,top:n.value.layout==="home"&&e.value===0}}),(u,h)=>(a(),i("div",{class:C(["VPNavBar",l.value])},[c("div",Ja,[c("div",Ya,[c("div",Qa,[_(Ea,null,{"nav-bar-title-before":p(()=>[d(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[d(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),c("div",Xa,[c("div",er,[d(u.$slots,"nav-bar-content-before",{},void 0,!0),_(Ba,{class:"search"}),_(wa,{class:"menu"}),_(Ka,{class:"translations"}),_(_o,{class:"appearance"}),_(Aa,{class:"social-links"}),_(ia,{class:"extra"}),d(u.$slots,"nav-bar-content-after",{},void 0,!0),_(pa,{class:"hamburger",active:u.isScreenOpen,onClick:h[0]||(h[0]=v=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),tr],2))}}),nr=m(sr,[["__scopeId","data-v-19c990f1"]]),or={key:0,class:"VPNavScreenAppearance"},ar={class:"text"},rr=g({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=P();return(o,n)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),i("div",or,[c("p",ar,V(r(t).darkModeSwitchLabel||"Appearance"),1),_(me)])):f("",!0)}}),lr=m(rr,[["__scopeId","data-v-2d7af913"]]),ir=g({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=ne("close-screen");return(t,o)=>(a(),b(z,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:p(()=>[A(V(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),cr=m(ir,[["__scopeId","data-v-05f27b2a"]]),ur={},dr={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},vr=c("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),hr=[vr];function pr(s,e){return a(),i("svg",dr,hr)}const _r=m(ur,[["render",pr]]),fr=g({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=ne("close-screen");return(t,o)=>(a(),b(z,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:p(()=>[A(V(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ee=m(fr,[["__scopeId","data-v-19976ae1"]]),mr={class:"VPNavScreenMenuGroupSection"},gr={key:0,class:"title"},br=g({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",mr,[e.text?(a(),i("p",gr,V(e.text),1)):f("",!0),(a(!0),i(L,null,H(e.items,o=>(a(),b(Ee,{key:o.text,item:o},null,8,["item"]))),128))]))}}),kr=m(br,[["__scopeId","data-v-8133b170"]]),$r=["aria-controls","aria-expanded"],yr=["innerHTML"],wr=["id"],Pr={key:1,class:"group"},Vr=g({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=S(!1),o=k(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(l,u)=>(a(),i("div",{class:C(["VPNavScreenMenuGroup",{open:t.value}])},[c("button",{class:"button","aria-controls":o.value,"aria-expanded":t.value,onClick:n},[c("span",{class:"button-text",innerHTML:l.text},null,8,yr),_(_r,{class:"button-icon"})],8,$r),c("div",{id:o.value,class:"items"},[(a(!0),i(L,null,H(l.items,h=>(a(),i(L,{key:h.text},["link"in h?(a(),i("div",{key:h.text,class:"item"},[_(Ee,{item:h},null,8,["item"])])):(a(),i("div",Pr,[_(kr,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,wr)],2))}}),Lr=m(Vr,[["__scopeId","data-v-65ef89ca"]]),Sr={key:0,class:"VPNavScreenMenu"},Mr=g({__name:"VPNavScreenMenu",setup(s){const{theme:e}=P();return(t,o)=>r(e).nav?(a(),i("nav",Sr,[(a(!0),i(L,null,H(r(e).nav,n=>(a(),i(L,{key:n.text},["link"in n?(a(),b(cr,{key:0,item:n},null,8,["item"])):(a(),b(Lr,{key:1,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Tr=g({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=P();return(t,o)=>r(e).socialLinks?(a(),b(ke,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Ir={class:"list"},Cr=g({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=Z({correspondingLink:!0}),o=S(!1);function n(){o.value=!o.value}return(l,u)=>r(e).length&&r(t).label?(a(),i("div",{key:0,class:C(["VPNavScreenTranslations",{open:o.value}])},[c("button",{class:"title",onClick:n},[_(De,{class:"icon lang"}),A(" "+V(r(t).label)+" ",1),_(ze,{class:"icon chevron"})]),c("ul",Ir,[(a(!0),i(L,null,H(r(e),h=>(a(),i("li",{key:h.link,class:"item"},[_(z,{class:"link",href:h.link},{default:p(()=>[A(V(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Nr=m(Cr,[["__scopeId","data-v-d72aa483"]]),Br={class:"container"},Hr=g({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=S(null),t=Se(K?document.body:null);return(o,n)=>(a(),b(ve,{name:"fade",onEnter:n[0]||(n[0]=l=>t.value=!0),onAfterLeave:n[1]||(n[1]=l=>t.value=!1)},{default:p(()=>[o.open?(a(),i("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[c("div",Br,[d(o.$slots,"nav-screen-content-before",{},void 0,!0),_(Mr,{class:"menu"}),_(Nr,{class:"translations"}),_(lr,{class:"appearance"}),_(Tr,{class:"social-links"}),d(o.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ar=m(Hr,[["__scopeId","data-v-cc5739dd"]]),zr={key:0,class:"VPNav"},Dr=g({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:o}=Rn(),{frontmatter:n}=P(),l=k(()=>n.value.navbar!==!1);return Me("close-screen",t),ee(()=>{K&&document.documentElement.classList.toggle("hide-nav",!l.value)}),(u,h)=>l.value?(a(),i("header",zr,[_(nr,{"is-screen-open":r(e),onToggleScreen:r(o)},{"nav-bar-title-before":p(()=>[d(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[d(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[d(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[d(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(Ar,{open:r(e)},{"nav-screen-content-before":p(()=>[d(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[d(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Er=m(Dr,[["__scopeId","data-v-ae24b3ad"]]),xr=s=>(D("data-v-e31bd47b"),s=s(),E(),s),Fr=["role","tabindex"],Or=xr(()=>c("div",{class:"indicator"},null,-1)),Wr={key:1,class:"items"},Ur=g({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:o,isLink:n,isActiveLink:l,hasActiveLink:u,hasChildren:h,toggle:v}=bt(k(()=>e.item)),$=k(()=>h.value?"section":"div"),y=k(()=>n.value?"a":"div"),w=k(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),T=k(()=>n.value?void 0:"button"),I=k(()=>[[`level-${e.depth}`],{collapsible:o.value},{collapsed:t.value},{"is-link":n.value},{"is-active":l.value},{"has-active":u.value}]);function N(M){"key"in M&&M.key!=="Enter"||!e.item.link&&v()}function B(){e.item.link&&v()}return(M,J)=>{const O=x("VPSidebarItem",!0);return a(),b(W($.value),{class:C(["VPSidebarItem",I.value])},{default:p(()=>[M.item.text?(a(),i("div",Y({key:0,class:"item",role:T.value},Je(M.item.items?{click:N,keydown:N}:{},!0),{tabindex:M.item.items&&0}),[Or,M.item.link?(a(),b(z,{key:0,tag:y.value,class:"link",href:M.item.link,rel:M.item.rel,target:M.item.target},{default:p(()=>[(a(),b(W(w.value),{class:"text",innerHTML:M.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),b(W(w.value),{key:1,class:"text",innerHTML:M.item.text},null,8,["innerHTML"])),M.item.collapsed!=null?(a(),i("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Ye(B,["enter"]),tabindex:"0"},[_(Be,{class:"caret-icon"})],32)):f("",!0)],16,Fr)):f("",!0),M.item.items&&M.item.items.length?(a(),i("div",Wr,[M.depth<5?(a(!0),i(L,{key:0},H(M.item.items,q=>(a(),b(O,{key:q.text,item:q,depth:M.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),Gr=m(Ur,[["__scopeId","data-v-e31bd47b"]]),xe=s=>(D("data-v-575e6a36"),s=s(),E(),s),jr=xe(()=>c("div",{class:"curtain"},null,-1)),Rr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},qr=xe(()=>c("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Kr=g({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=F(),o=s,n=S(null),l=Se(K?document.body:null);return R([o,n],()=>{var u;o.open?(l.value=!0,(u=n.value)==null||u.focus()):l.value=!1},{immediate:!0,flush:"post"}),(u,h)=>r(t)?(a(),i("aside",{key:0,class:C(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:n,onClick:h[0]||(h[0]=Qe(()=>{},["stop"]))},[jr,c("nav",Rr,[qr,d(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),i(L,null,H(r(e),v=>(a(),i("div",{key:v.text,class:"group"},[_(Gr,{item:v,depth:0},null,8,["item"])]))),128)),d(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),Zr=m(Kr,[["__scopeId","data-v-575e6a36"]]),Jr=g({__name:"VPSkipLink",setup(s){const e=se(),t=S();R(()=>e.path,()=>t.value.focus());function o({target:n}){const l=document.getElementById(decodeURIComponent(n.hash).slice(1));if(l){const u=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",u)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",u),l.focus(),window.scrollTo(0,0)}}return(n,l)=>(a(),i(L,null,[c("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),c("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o}," Skip to content ")],64))}}),Yr=m(Jr,[["__scopeId","data-v-0f60ec36"]]),Qr=g({__name:"Layout",setup(s){const{isOpen:e,open:t,close:o}=F(),n=se();R(()=>n.path,o),gt(e,o);const{frontmatter:l}=P(),u=Xe(),h=k(()=>!!u["home-hero-image"]);return Me("hero-image-slot-exists",h),(v,$)=>{const y=x("Content");return r(l).layout!==!1?(a(),i("div",{key:0,class:C(["Layout",r(l).pageClass])},[d(v.$slots,"layout-top",{},void 0,!0),_(Yr),_(nt,{class:"backdrop",show:r(e),onClick:r(o)},null,8,["show","onClick"]),_(Er,null,{"nav-bar-title-before":p(()=>[d(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":p(()=>[d(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":p(()=>[d(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":p(()=>[d(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":p(()=>[d(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":p(()=>[d(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(jn,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),_(Zr,{open:r(e)},{"sidebar-nav-before":p(()=>[d(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":p(()=>[d(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(mn,null,{"page-top":p(()=>[d(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":p(()=>[d(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":p(()=>[d(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":p(()=>[d(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":p(()=>[d(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":p(()=>[d(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":p(()=>[d(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":p(()=>[d(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":p(()=>[d(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":p(()=>[d(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":p(()=>[d(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":p(()=>[d(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":p(()=>[d(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":p(()=>[d(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":p(()=>[d(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":p(()=>[d(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":p(()=>[d(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":p(()=>[d(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":p(()=>[d(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":p(()=>[d(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(yn),d(v.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),b(y,{key:1}))}}}),Xr=m(Qr,[["__scopeId","data-v-5a346dfe"]]),el={Layout:Xr,enhanceApp:({app:s})=>{s.component("Badge",et)}},tl={class:"sponsor"},sl={class:"sponsor-logo"},nl=["src"],ol={class:"sponsor-text"},al=g({__name:"Sponsor",props:{logo:{type:String,required:!0}},setup(s){return(e,t)=>(a(),i("div",tl,[c("div",sl,[c("img",{src:r(G)(s.logo)},null,8,nl)]),c("div",ol,[d(e.$slots,"default",{},void 0,!0)])]))}}),rl=m(al,[["__scopeId","data-v-0e80e83e"]]),ll=JSON.parse(`[{"title":"2023 in Review and 2024 Plans and Wishes","url":"/blog/2024/01/happy-2024.html","excerpt":"Last year passed by quickly, and now it's time to reflect on the highlights of 2023 and outline plans for 2024.\\n","date":"2024-01-17T00:00:00.000Z"},{"title":"We've been authorized as CVE Numbering Authority","url":"/blog/2023/10/cve-numbering-authority.html","excerpt":"It's our pleasure to announce, that Wren Security has been authorized by the Common Vulnerabilities and Exposures (CVE) Program as a CVE Numbering Authority (CNA).\\n","date":"2023-10-17T00:00:00.000Z"},{"title":"Wren:AM 15.0.0 Released","url":"/blog/2023/10/wrenam-15-0-0-released.html","excerpt":"We're thrilled to announce the release of the anticipated new version of Wren:AM.\\nTake a closer look at the carefully curated changes that we have worked on.\\n","date":"2023-10-10T00:00:00.000Z"},{"title":"Wren:DS 5.0.0 Released","url":"/blog/2023/05/wrends-5-0-0-released.html","excerpt":"We are excited to announce the release of Wren:DS 5.0.0. This release is the first official\\nWren Security release compatible with JDK 17 and zero dependencies on legacy infrastructure.\\n","date":"2023-05-16T00:00:00.000Z"},{"title":"Happy 2023!","url":"/blog/2023/01/happy-2023.html","excerpt":"With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up!\\n","date":"2023-01-06T00:00:00.000Z"},{"title":"Wren:IDM 6.1.0 Released","url":"/blog/2022/12/wrenidm-6-1-0-released.html","excerpt":"Brand new release Wren:IDM 6.1.0 has been published. This release is fully compatible with JDK 17.\\n","date":"2022-12-30T00:00:00.000Z"},{"title":"Commons 22.2.0 Released","url":"/blog/2022/08/commons-22-2-0-released.html","excerpt":"We are excited to announce the release of Wren Security Commons 22.2.0. This release is\\ncompatible with JDK 17.\\n","date":"2022-08-11T00:00:00.000Z"},{"title":"Wren:IDM Cookbook Created","url":"/blog/2022/06/wrenidm-cookbook-created.html","excerpt":"We have prepared recipes (samples) demonstrating key Wren:IDM features.\\n","date":"2022-06-09T00:00:00.000Z"},{"title":"Brand New Website","url":"/blog/2022/04/brand-new-website.html","excerpt":"We have created a brand new website for Wren Security. :tada:\\n","date":"2022-04-27T00:00:00.000Z"},{"title":"Wren:IDM 6.0.0 Released","url":"/blog/2021/10/wrenidm-6-0-0-released.html","excerpt":"We are excited to announce the release of Wren:IDM 6.0.0. This release is the first official\\nWren Security release compatible with JDK 11 and zero dependencies on legacy infrastructure.\\n","date":"2021-10-08T00:00:00.000Z"}]`),il=["innerHTML"],cl=["href"],ul=g({__name:"Blog",setup(s){return(e,t)=>{const o=x("PostHeader");return a(!0),i(L,null,H(r(ll),n=>(a(),i("article",{key:n.url},[_(o,{title:n.title,author:n.author,date:n.date,url:n.url},null,8,["title","author","date","url"]),c("section",null,[c("p",{innerHTML:n.excerpt},null,8,il)]),c("div",null,[c("a",{href:r(G)(n.url)},"Read more →",8,cl)])]))),128)}}}),dl=m(ul,[["__scopeId","data-v-e6bfbb3a"]]),vl=["href"],hl=g({__name:"Post",setup(s){const{frontmatter:e}=ye();return(t,o)=>{const n=x("PostHeader");return a(),i("article",null,[_(n,{title:r(e).title,author:r(e).author,date:r(e).date},null,8,["title","author","date"]),c("section",null,[d(t.$slots,"default",{},void 0,!0)]),c("div",null,[c("a",{href:r(G)("/blog/")},"← Back to the blog",8,vl)])])}}}),pl=m(hl,[["__scopeId","data-v-b887dfec"]]),_l=["href"],fl={key:1},ml={key:0},gl=g({__name:"PostHeader",props:{title:{type:String,required:!0},author:{type:String,required:!1,default:null},date:{type:String,required:!0},url:{type:String,required:!1,default:null}},setup(s){function e(t){return new Date(t).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}return(t,o)=>(a(),i(L,null,[c("h1",null,[s.url?(a(),i("a",{key:0,href:r(G)(s.url)},V(s.title),9,_l)):(a(),i("span",fl,V(s.title),1))]),c("header",null,[s.author?(a(),i("div",ml,V(s.author),1)):f("",!0),c("div",null,V(e(s.date)),1)])],64))}}),bl=m(gl,[["__scopeId","data-v-a613bfb5"]]),$l={...el,enhanceApp({app:s}){s.component("Sponsor",rl),s.component("Blog",dl),s.component("Post",pl),s.component("PostHeader",bl)}};export{$l as R}; diff --git a/assets/community_contact.md.m3agR_Iz.js b/assets/community_contact.md.m3agR_Iz.js new file mode 100644 index 0000000..6ab2c51 --- /dev/null +++ b/assets/community_contact.md.m3agR_Iz.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as a,V as o}from"./chunks/framework.kuHzA11c.js";const m=JSON.parse('{"title":"Contact","description":"","frontmatter":{"title":"Contact"},"headers":[],"relativePath":"community/contact.md","filePath":"community/contact.md"}'),r={name:"community/contact.md"},s=o('

Product Support

If you have any questions or comments about the software, please visit our Gitter channel.

Security Issues

If you think you have found a security vulnerability, please refer to disclosure policy.

',4),c=[s];function i(n,u,l,p,_,d){return a(),e("div",null,c)}const f=t(r,[["render",i]]);export{m as __pageData,f as default}; diff --git a/assets/community_contact.md.m3agR_Iz.lean.js b/assets/community_contact.md.m3agR_Iz.lean.js new file mode 100644 index 0000000..764fcec --- /dev/null +++ b/assets/community_contact.md.m3agR_Iz.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as a,V as o}from"./chunks/framework.kuHzA11c.js";const m=JSON.parse('{"title":"Contact","description":"","frontmatter":{"title":"Contact"},"headers":[],"relativePath":"community/contact.md","filePath":"community/contact.md"}'),r={name:"community/contact.md"},s=o("",4),c=[s];function i(n,u,l,p,_,d){return a(),e("div",null,c)}const f=t(r,[["render",i]]);export{m as __pageData,f as default}; diff --git a/assets/community_disclosure.md.B_QN1Nar.js b/assets/community_disclosure.md.B_QN1Nar.js new file mode 100644 index 0000000..c164b08 --- /dev/null +++ b/assets/community_disclosure.md.B_QN1Nar.js @@ -0,0 +1 @@ +import{_ as e,c as o,o as i,V as s}from"./chunks/framework.kuHzA11c.js";const _=JSON.parse('{"title":"Disclosure Policy","description":"","frontmatter":{"title":"Disclosure Policy"},"headers":[],"relativePath":"community/disclosure.md","filePath":"community/disclosure.md"}'),t={name:"community/disclosure.md"},r=s('

Disclosure Policy


Please do not disclose any potential security issues publicly. Report the vulnerability to our team and give us time to work on it. We will disclose it responsibly as soon as it is properly remediated.

How To Disclose

If you think you have found a security vulnerability, please send an email to disclosure@wrensecurity.org. Only security-related issues should be sent to this address.

Please provide as much information as possible, including a description of the vulnerability, the software version, and the steps to reproduce the issue. Additional supporting materials, such as proof-of-concept code or screenshots, can also be helpful.

Our team will contact you to acknowledge receipt of the report. If necessary, we will work together on clarification and validation of the issue.

Publication

Security vulnerabilities are published as a security advisories within the GitHub project repositories.

',9),a=[r];function l(c,n,u,d,p,h){return i(),o("div",null,a)}const m=e(t,[["render",l]]);export{_ as __pageData,m as default}; diff --git a/assets/community_disclosure.md.B_QN1Nar.lean.js b/assets/community_disclosure.md.B_QN1Nar.lean.js new file mode 100644 index 0000000..ae41247 --- /dev/null +++ b/assets/community_disclosure.md.B_QN1Nar.lean.js @@ -0,0 +1 @@ +import{_ as e,c as o,o as i,V as s}from"./chunks/framework.kuHzA11c.js";const _=JSON.parse('{"title":"Disclosure Policy","description":"","frontmatter":{"title":"Disclosure Policy"},"headers":[],"relativePath":"community/disclosure.md","filePath":"community/disclosure.md"}'),t={name:"community/disclosure.md"},r=s("",9),a=[r];function l(c,n,u,d,p,h){return i(),o("div",null,a)}const m=e(t,[["render",l]]);export{_ as __pageData,m as default}; diff --git a/assets/community_join.md.8U0IlyxF.js b/assets/community_join.md.8U0IlyxF.js new file mode 100644 index 0000000..9249887 --- /dev/null +++ b/assets/community_join.md.8U0IlyxF.js @@ -0,0 +1 @@ +import{_ as e,c as t,o,V as n}from"./chunks/framework.kuHzA11c.js";const b=JSON.parse('{"title":"Get Involved","description":"","frontmatter":{"title":"Get Involved"},"headers":[],"relativePath":"community/join.md","filePath":"community/join.md"}'),i={name:"community/join.md"},r=n('

Get Involved

If you would like to become involved in the development process of Wren Security Suite there are many different ways in which you can contribute. The first step is to join our Gitter channel. Here are some of the areas ways in which you can help:

  • Investigate bugs reported in the GitHub issues.
  • Answer questions posted to the Gitter channels.
  • Contribute to the projects documentation.

Contributor Guidelines

If you want to start contributing changes, then the first step is to read our Contributor Guidelines.

Become a team member

Here are some of the roles we could use your help for:

Community Coordinator

Someone to help us get the word out about all the great technical work that’s being done behind the scenes on the Wren fork. The ideal person to help us is someone who’s great at communicating, understands technical issues (without necessarily having to be a developer), and can spend about 10-15 hours a week helping us with content, posts, and discussions in the issue queue.

DevOps Admin

Someone to help us ensure that our buildable projects stay buildable, as we continue to accept PRs and enhancements. Experience with automated container creation and with integrating code style (e.g. FindBugs, CheckStyle, etc.) automatically in GitHub PRs is a plus. We expect that there will be more time needed up-front for this role than on-going; likely it will take the next few weeks to get us completely tuned up for this.

Penetration Testers / Security Analysts

A lot of our current work involves fixing existing and/or known issues in projects like Wren:AM 13.5 and Wren:IDM 6. If you are someone who can help us find and plug the holes in our current releases, please reach out. We’d love to tap your skill to make our platform even more secure.

Project Leads

We’re currently looking for leads for Wren:AM and Wren:DS to enhance our technical team. Leads would help coordinate PRs and enforce project process. Likely 15 to 20 hours per week; more if the leads want to have a more hands-on role in PRs.

',11),a=[r];function s(l,c,u,d,h,p){return o(),t("div",null,a)}const f=e(i,[["render",s]]);export{b as __pageData,f as default}; diff --git a/assets/community_join.md.8U0IlyxF.lean.js b/assets/community_join.md.8U0IlyxF.lean.js new file mode 100644 index 0000000..db49d37 --- /dev/null +++ b/assets/community_join.md.8U0IlyxF.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o,V as n}from"./chunks/framework.kuHzA11c.js";const b=JSON.parse('{"title":"Get Involved","description":"","frontmatter":{"title":"Get Involved"},"headers":[],"relativePath":"community/join.md","filePath":"community/join.md"}'),i={name:"community/join.md"},r=n("",11),a=[r];function s(l,c,u,d,h,p){return o(),t("div",null,a)}const f=e(i,[["render",s]]);export{b as __pageData,f as default}; diff --git a/assets/index.md.fEr0DZCr.js b/assets/index.md.fEr0DZCr.js new file mode 100644 index 0000000..ee79362 --- /dev/null +++ b/assets/index.md.fEr0DZCr.js @@ -0,0 +1 @@ +import{_ as t,c as n,o,m as e}from"./chunks/framework.kuHzA11c.js";const g=JSON.parse('{"title":"Home","description":"","frontmatter":{"layout":"home","title":"Home","hero":{"name":"Wren Security Suite","tagline":"Community-driven, open-source software for user authentication, user identity management, and single-sign-on.","image":{"src":"/wrensec-logo.png","alt":"Wren Security logo"},"actions":[{"theme":"brand","text":"Get Started","link":"https://docs.wrensecurity.org"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/WrenSecurity"}]},"features":[{"title":"🗒️ Open-source Software","details":"Wren Security is an open-source community security suite. With roots in Sun Microsystems’ products, it adopted community projects formerly maintained by ForgeRock™."},{"title":"🔑 Identity Management","details":"Identity management system with flexible data model, multiple extension points and scripting support (Groovy and JavaScript). Can connect to and manage a wide range of systems through integrated Identity Connector Framework."},{"title":"🔐 Access Management","details":"Access management, entitlements and federation server platform. Provides centralized authentication and authorization for multiple realms with delegated administration."}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),a={name:"index.md"},i=e("div",{class:"project-origin"},[e("div",{class:"tip custom-block"},[e("p",{class:"custom-block-title"},"Project Origin"),e("p",null,"Though our project originated with code that ForgeRock™ had previously released, we are not affiliated with ForgeRock™ in any way. Our projects are based on the very latest code from what was available under a CDDL license (OpenAM 13.5+, OpenDJ 3.5+, OpenIDM 4.5+, and OpenIG 4.0+). ForgeRock™ no longer releases any of the most recent versions of their software under an open-source license. ForgeRock™’s “Community Edition” are ancient versions of the projects. Join our community for the latest and greatest.")])],-1),r=[i];function s(c,d,l,m,u,p){return o(),n("div",null,r)}const y=t(a,[["render",s]]);export{g as __pageData,y as default}; diff --git a/assets/index.md.fEr0DZCr.lean.js b/assets/index.md.fEr0DZCr.lean.js new file mode 100644 index 0000000..ee79362 --- /dev/null +++ b/assets/index.md.fEr0DZCr.lean.js @@ -0,0 +1 @@ +import{_ as t,c as n,o,m as e}from"./chunks/framework.kuHzA11c.js";const g=JSON.parse('{"title":"Home","description":"","frontmatter":{"layout":"home","title":"Home","hero":{"name":"Wren Security Suite","tagline":"Community-driven, open-source software for user authentication, user identity management, and single-sign-on.","image":{"src":"/wrensec-logo.png","alt":"Wren Security logo"},"actions":[{"theme":"brand","text":"Get Started","link":"https://docs.wrensecurity.org"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/WrenSecurity"}]},"features":[{"title":"🗒️ Open-source Software","details":"Wren Security is an open-source community security suite. With roots in Sun Microsystems’ products, it adopted community projects formerly maintained by ForgeRock™."},{"title":"🔑 Identity Management","details":"Identity management system with flexible data model, multiple extension points and scripting support (Groovy and JavaScript). Can connect to and manage a wide range of systems through integrated Identity Connector Framework."},{"title":"🔐 Access Management","details":"Access management, entitlements and federation server platform. Provides centralized authentication and authorization for multiple realms with delegated administration."}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),a={name:"index.md"},i=e("div",{class:"project-origin"},[e("div",{class:"tip custom-block"},[e("p",{class:"custom-block-title"},"Project Origin"),e("p",null,"Though our project originated with code that ForgeRock™ had previously released, we are not affiliated with ForgeRock™ in any way. Our projects are based on the very latest code from what was available under a CDDL license (OpenAM 13.5+, OpenDJ 3.5+, OpenIDM 4.5+, and OpenIG 4.0+). ForgeRock™ no longer releases any of the most recent versions of their software under an open-source license. ForgeRock™’s “Community Edition” are ancient versions of the projects. Join our community for the latest and greatest.")])],-1),r=[i];function s(c,d,l,m,u,p){return o(),n("div",null,r)}const y=t(a,[["render",s]]);export{g as __pageData,y as default}; diff --git a/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2 b/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2 new file mode 100644 index 0000000..2a68729 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2 differ diff --git a/assets/inter-italic-cyrillic.-nLMcIwj.woff2 b/assets/inter-italic-cyrillic.-nLMcIwj.woff2 new file mode 100644 index 0000000..f640351 Binary files /dev/null and b/assets/inter-italic-cyrillic.-nLMcIwj.woff2 differ diff --git a/assets/inter-italic-greek-ext.hznxWNZO.woff2 b/assets/inter-italic-greek-ext.hznxWNZO.woff2 new file mode 100644 index 0000000..0021896 Binary files /dev/null and b/assets/inter-italic-greek-ext.hznxWNZO.woff2 differ diff --git a/assets/inter-italic-greek.PSfer2Kc.woff2 b/assets/inter-italic-greek.PSfer2Kc.woff2 new file mode 100644 index 0000000..71c265f Binary files /dev/null and b/assets/inter-italic-greek.PSfer2Kc.woff2 differ diff --git a/assets/inter-italic-latin-ext.RnFly65-.woff2 b/assets/inter-italic-latin-ext.RnFly65-.woff2 new file mode 100644 index 0000000..9c1b944 Binary files /dev/null and b/assets/inter-italic-latin-ext.RnFly65-.woff2 differ diff --git a/assets/inter-italic-latin.27E69YJn.woff2 b/assets/inter-italic-latin.27E69YJn.woff2 new file mode 100644 index 0000000..01fcf20 Binary files /dev/null and b/assets/inter-italic-latin.27E69YJn.woff2 differ diff --git a/assets/inter-italic-vietnamese.xzQHe1q1.woff2 b/assets/inter-italic-vietnamese.xzQHe1q1.woff2 new file mode 100644 index 0000000..e4f788e Binary files /dev/null and b/assets/inter-italic-vietnamese.xzQHe1q1.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2 b/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2 new file mode 100644 index 0000000..28593cc Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2 differ diff --git a/assets/inter-roman-cyrillic.jIZ9REo5.woff2 b/assets/inter-roman-cyrillic.jIZ9REo5.woff2 new file mode 100644 index 0000000..a20adc1 Binary files /dev/null and b/assets/inter-roman-cyrillic.jIZ9REo5.woff2 differ diff --git a/assets/inter-roman-greek-ext.9JiNzaSO.woff2 b/assets/inter-roman-greek-ext.9JiNzaSO.woff2 new file mode 100644 index 0000000..e3b0be7 Binary files /dev/null and b/assets/inter-roman-greek-ext.9JiNzaSO.woff2 differ diff --git a/assets/inter-roman-greek.Cb5wWeGA.woff2 b/assets/inter-roman-greek.Cb5wWeGA.woff2 new file mode 100644 index 0000000..f790e04 Binary files /dev/null and b/assets/inter-roman-greek.Cb5wWeGA.woff2 differ diff --git a/assets/inter-roman-latin-ext.GZWE-KO4.woff2 b/assets/inter-roman-latin-ext.GZWE-KO4.woff2 new file mode 100644 index 0000000..715bd90 Binary files /dev/null and b/assets/inter-roman-latin-ext.GZWE-KO4.woff2 differ diff --git a/assets/inter-roman-latin.bvIUbFQP.woff2 b/assets/inter-roman-latin.bvIUbFQP.woff2 new file mode 100644 index 0000000..a540b7a Binary files /dev/null and b/assets/inter-roman-latin.bvIUbFQP.woff2 differ diff --git a/assets/inter-roman-vietnamese.paY3CzEB.woff2 b/assets/inter-roman-vietnamese.paY3CzEB.woff2 new file mode 100644 index 0000000..5a9f9cb Binary files /dev/null and b/assets/inter-roman-vietnamese.paY3CzEB.woff2 differ diff --git a/assets/projects_wrenam_download.md.gNKDq-z5.js b/assets/projects_wrenam_download.md.gNKDq-z5.js new file mode 100644 index 0000000..de6d0e2 --- /dev/null +++ b/assets/projects_wrenam_download.md.gNKDq-z5.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as o}from"./chunks/framework.kuHzA11c.js";const m=JSON.parse('{"title":"Wren:AM","description":"","frontmatter":{"title":"Wren:AM"},"headers":[],"relativePath":"projects/wrenam/download.md","filePath":"projects/wrenam/download.md"}'),t={name:"projects/wrenam/download.md"},n=o('

Getting Started

You can get Wren:AM Web Application Archive (WAR) in couple of ways:

Download binary release

The easiest way to get the Wren:AM is to download the latest binary release.

Docker image

You can also run Wren:AM in a Docker container. Official Wren:AM Docker images can be found on Docker Hub.

Build the source code

You can also create your own build from the source code. Manual how to build the source code can be found here.

',8),c=[n];function i(d,l,s,h,u,_){return r(),a("div",null,c)}const p=e(t,[["render",i]]);export{m as __pageData,p as default}; diff --git a/assets/projects_wrenam_download.md.gNKDq-z5.lean.js b/assets/projects_wrenam_download.md.gNKDq-z5.lean.js new file mode 100644 index 0000000..14adab7 --- /dev/null +++ b/assets/projects_wrenam_download.md.gNKDq-z5.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as o}from"./chunks/framework.kuHzA11c.js";const m=JSON.parse('{"title":"Wren:AM","description":"","frontmatter":{"title":"Wren:AM"},"headers":[],"relativePath":"projects/wrenam/download.md","filePath":"projects/wrenam/download.md"}'),t={name:"projects/wrenam/download.md"},n=o("",8),c=[n];function i(d,l,s,h,u,_){return r(),a("div",null,c)}const p=e(t,[["render",i]]);export{m as __pageData,p as default}; diff --git a/assets/projects_wrenam_index.md.rsoeQYds.js b/assets/projects_wrenam_index.md.rsoeQYds.js new file mode 100644 index 0000000..8cfbc4b --- /dev/null +++ b/assets/projects_wrenam_index.md.rsoeQYds.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,V as o}from"./chunks/framework.kuHzA11c.js";const f=JSON.parse('{"title":"Wren:AM","description":"","frontmatter":{"title":"Wren:AM","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenam/index.md","filePath":"projects/wrenam/index.md"}'),n={name:"projects/wrenam/index.md"},i=o('

Wren:AM

Overview

Wren:AM is an "all-in-one" access management solution providing strong and adaptive authentication, authorization, single sign-on (SSO), entitlements, federation and web services security.

Wren:AM provides mobile support out of the box, with full OAuth 2.0 and OpenID Connect (OIDC) support - modern protocols that provide the most efficient method for developing secure native or web-based mobile applications optimized for bandwidth and CPU.

Wren:AM is one of the projects in the Wren Security Suite, a community initiative that adopted open‐source projects formerly developed by ForgeRock, which has its own roots in Sun Microsystems’ products.

Acknowledgments

Wren:AM is standing on the shoulders of giants and is a continuation of a prior work:

  • OpenSSO by Sun Microsystems
  • OpenAM by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

',12),r=[i];function s(d,c,l,p,h,m){return a(),t("div",null,r)}const _=e(n,[["render",s]]);export{f as __pageData,_ as default}; diff --git a/assets/projects_wrenam_index.md.rsoeQYds.lean.js b/assets/projects_wrenam_index.md.rsoeQYds.lean.js new file mode 100644 index 0000000..baffe7a --- /dev/null +++ b/assets/projects_wrenam_index.md.rsoeQYds.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,V as o}from"./chunks/framework.kuHzA11c.js";const f=JSON.parse('{"title":"Wren:AM","description":"","frontmatter":{"title":"Wren:AM","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenam/index.md","filePath":"projects/wrenam/index.md"}'),n={name:"projects/wrenam/index.md"},i=o("",12),r=[i];function s(d,c,l,p,h,m){return a(),t("div",null,r)}const _=e(n,[["render",s]]);export{f as __pageData,_ as default}; diff --git a/assets/projects_wrenam_resources.md.UYXqwHAU.js b/assets/projects_wrenam_resources.md.UYXqwHAU.js new file mode 100644 index 0000000..e0f8c0e --- /dev/null +++ b/assets/projects_wrenam_resources.md.UYXqwHAU.js @@ -0,0 +1 @@ +import{_ as r,c as o,o as a,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const w=JSON.parse('{"title":"Wren:AM","description":"","frontmatter":{"title":"Wren:AM"},"headers":[],"relativePath":"projects/wrenam/resources.md","filePath":"projects/wrenam/resources.md"}'),n={name:"projects/wrenam/resources.md"},s=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrenam/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t(").")],-1),i=[s,c];function d(m,l,u,_,p,h){return a(),o("div",null,i)}const x=r(n,[["render",d]]);export{w as __pageData,x as default}; diff --git a/assets/projects_wrenam_resources.md.UYXqwHAU.lean.js b/assets/projects_wrenam_resources.md.UYXqwHAU.lean.js new file mode 100644 index 0000000..e0f8c0e --- /dev/null +++ b/assets/projects_wrenam_resources.md.UYXqwHAU.lean.js @@ -0,0 +1 @@ +import{_ as r,c as o,o as a,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const w=JSON.parse('{"title":"Wren:AM","description":"","frontmatter":{"title":"Wren:AM"},"headers":[],"relativePath":"projects/wrenam/resources.md","filePath":"projects/wrenam/resources.md"}'),n={name:"projects/wrenam/resources.md"},s=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrenam/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t(").")],-1),i=[s,c];function d(m,l,u,_,p,h){return a(),o("div",null,i)}const x=r(n,[["render",d]]);export{w as __pageData,x as default}; diff --git a/assets/projects_wrends_download.md.QWn4sKjK.js b/assets/projects_wrends_download.md.QWn4sKjK.js new file mode 100644 index 0000000..34b6fee --- /dev/null +++ b/assets/projects_wrends_download.md.QWn4sKjK.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as t}from"./chunks/framework.kuHzA11c.js";const p=JSON.parse('{"title":"Wren:DS","description":"","frontmatter":{"title":"Wren:DS"},"headers":[],"relativePath":"projects/wrends/download.md","filePath":"projects/wrends/download.md"}'),o={name:"projects/wrends/download.md"},n=t('

Getting Started

You can get Wren:DS application in a few ways.

Download binary release

The easiest way to get the Wren:DS is to download the latest binary release.

Docker image

You can also run Wren:DS in a Docker container. Official Wren:DS Docker images can be found on Docker Hub.

Build the source code

You can also create your own build from the source code. Manual how to build the source code can be found here.

',8),d=[n];function c(s,i,l,h,u,_){return r(),a("div",null,d)}const f=e(o,[["render",c]]);export{p as __pageData,f as default}; diff --git a/assets/projects_wrends_download.md.QWn4sKjK.lean.js b/assets/projects_wrends_download.md.QWn4sKjK.lean.js new file mode 100644 index 0000000..751908c --- /dev/null +++ b/assets/projects_wrends_download.md.QWn4sKjK.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as t}from"./chunks/framework.kuHzA11c.js";const p=JSON.parse('{"title":"Wren:DS","description":"","frontmatter":{"title":"Wren:DS"},"headers":[],"relativePath":"projects/wrends/download.md","filePath":"projects/wrends/download.md"}'),o={name:"projects/wrends/download.md"},n=t("",8),d=[n];function c(s,i,l,h,u,_){return r(),a("div",null,d)}const f=e(o,[["render",c]]);export{p as __pageData,f as default}; diff --git a/assets/projects_wrends_index.md.8H1AiFTO.js b/assets/projects_wrends_index.md.8H1AiFTO.js new file mode 100644 index 0000000..9d4860f --- /dev/null +++ b/assets/projects_wrends_index.md.8H1AiFTO.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,V as r}from"./chunks/framework.kuHzA11c.js";const u=JSON.parse('{"title":"Wren:DS","description":"","frontmatter":{"title":"Wren:DS","sidebarDepth":2},"headers":[],"relativePath":"projects/wrends/index.md","filePath":"projects/wrends/index.md"}'),o={name:"projects/wrends/index.md"},i=r('

Wren:DS

Overview

Wren:DS is an LDAPv3 compliant directory service, which has been developed for the Java platform, providing a high performance, highly available, and secure store for the identities managed by your organization. Its easy installation process, combined with the power of the Java platform makes Wren:DS the simplest, fastest directory to deploy and manage.

Acknowledgments

Wren:DS is standing on the shoulders of giants and is a continuation of a prior work:

  • OpenDS by Sun Microsystems
  • OpenDJ by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

',10),n=[i];function s(d,l,c,h,p,m){return t(),a("div",null,n)}const _=e(o,[["render",s]]);export{u as __pageData,_ as default}; diff --git a/assets/projects_wrends_index.md.8H1AiFTO.lean.js b/assets/projects_wrends_index.md.8H1AiFTO.lean.js new file mode 100644 index 0000000..3889f5f --- /dev/null +++ b/assets/projects_wrends_index.md.8H1AiFTO.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,V as r}from"./chunks/framework.kuHzA11c.js";const u=JSON.parse('{"title":"Wren:DS","description":"","frontmatter":{"title":"Wren:DS","sidebarDepth":2},"headers":[],"relativePath":"projects/wrends/index.md","filePath":"projects/wrends/index.md"}'),o={name:"projects/wrends/index.md"},i=r("",10),n=[i];function s(d,l,c,h,p,m){return t(),a("div",null,n)}const _=e(o,[["render",s]]);export{u as __pageData,_ as default}; diff --git a/assets/projects_wrends_resources.md.vYMhQNHO.js b/assets/projects_wrends_resources.md.vYMhQNHO.js new file mode 100644 index 0000000..e693f73 --- /dev/null +++ b/assets/projects_wrends_resources.md.vYMhQNHO.js @@ -0,0 +1 @@ +import{_ as r,c as o,o as n,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const w=JSON.parse('{"title":"Wren:DS","description":"","frontmatter":{"title":"Wren:DS"},"headers":[],"relativePath":"projects/wrends/resources.md","filePath":"projects/wrends/resources.md"}'),s={name:"projects/wrends/resources.md"},a=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrends/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t(").")],-1),d=[a,c];function i(l,u,m,_,p,h){return n(),o("div",null,d)}const x=r(s,[["render",i]]);export{w as __pageData,x as default}; diff --git a/assets/projects_wrends_resources.md.vYMhQNHO.lean.js b/assets/projects_wrends_resources.md.vYMhQNHO.lean.js new file mode 100644 index 0000000..e693f73 --- /dev/null +++ b/assets/projects_wrends_resources.md.vYMhQNHO.lean.js @@ -0,0 +1 @@ +import{_ as r,c as o,o as n,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const w=JSON.parse('{"title":"Wren:DS","description":"","frontmatter":{"title":"Wren:DS"},"headers":[],"relativePath":"projects/wrends/resources.md","filePath":"projects/wrends/resources.md"}'),s={name:"projects/wrends/resources.md"},a=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrends/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t(").")],-1),d=[a,c];function i(l,u,m,_,p,h){return n(),o("div",null,d)}const x=r(s,[["render",i]]);export{w as __pageData,x as default}; diff --git a/assets/projects_wrenicf_index.md.8w14POdz.js b/assets/projects_wrenicf_index.md.8w14POdz.js new file mode 100644 index 0000000..da69128 --- /dev/null +++ b/assets/projects_wrenicf_index.md.8w14POdz.js @@ -0,0 +1 @@ +import{_ as e,c as r,o,V as n}from"./chunks/framework.kuHzA11c.js";const u=JSON.parse('{"title":"Wren:ICF","description":"","frontmatter":{"title":"Wren:ICF","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenicf/index.md","filePath":"projects/wrenicf/index.md"}'),t={name:"projects/wrenicf/index.md"},a=n('

Wren:ICF

Overview

Wren:ICF is an umbrella brand encompassing community-developed Identity Connector Framework as well as a set of production-ready connectors – LDAP, Office 365, SSH, SQL, PowerShell, REST and many more.

The main project is Wren:ICF Java Framework where the various parts of the framework (specification, APIs, SPIs and network protocol) are forged, and it also provides the default connector runtime environment for the Java world.

Wren:ICF .NET Framework is a connector framework implementation and runtime environment for Microsoft's .NET world.

Framework Features

Wren:ICF addresses the following topics:

  • connector specification – definition of connector interfaces and available operations
  • connector runtime environment – Java and .NET server implementations managing individual connectors, their discoverability and lifecycle (e.g. pooling)
  • remote connector protocol – low-level remote connector network protocol

Runtime environment manages individual connectors through connector SPI methods and offers their functionality through public API. Each connector works with a specific set of objects (e.g. accounts and groups) defined by self-described schema, and can implement one or more well defined operations.

Identity Connectors

Wren:ICF provides a set of common basic connectors and scriptable connectors with sample integrations:

  • LDAP Connector – integration with LDAP server (e.g. Active Directory)
  • CSV File Connector – reading and writing rows from a CSV file
  • Scriptable SSH Connector – custom remote shell invocations through managed JSch connection
  • Scriptable SQL Connector – custom database commands through managed JDBC connection
  • Scriptable REST Connector – custom calls through managed HTTP connection
  • Scriptable Groovy Connector – custom groovy scripts for Wren:ICF operations
  • Scriptable PowerShell Connector – custom PowerShell scripts for Wren:ICF operations

Many other connectors are available under Wren Security's GitHub organization or by third-party vendors.

Acknowledgments

Wren:ICF is standing on the shoulders of giants and is a continuation of a prior work:

  • Sun Identity Framework by Sun Microsystems
  • OpenICF by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

',20),i=[a];function c(s,l,d,m,h,p){return o(),r("div",null,i)}const w=e(t,[["render",c]]);export{u as __pageData,w as default}; diff --git a/assets/projects_wrenicf_index.md.8w14POdz.lean.js b/assets/projects_wrenicf_index.md.8w14POdz.lean.js new file mode 100644 index 0000000..bb76183 --- /dev/null +++ b/assets/projects_wrenicf_index.md.8w14POdz.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,o,V as n}from"./chunks/framework.kuHzA11c.js";const u=JSON.parse('{"title":"Wren:ICF","description":"","frontmatter":{"title":"Wren:ICF","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenicf/index.md","filePath":"projects/wrenicf/index.md"}'),t={name:"projects/wrenicf/index.md"},a=n("",20),i=[a];function c(s,l,d,m,h,p){return o(),r("div",null,i)}const w=e(t,[["render",c]]);export{u as __pageData,w as default}; diff --git a/assets/projects_wrenidm_download.md.TuKnfGqC.js b/assets/projects_wrenidm_download.md.TuKnfGqC.js new file mode 100644 index 0000000..7759d65 --- /dev/null +++ b/assets/projects_wrenidm_download.md.TuKnfGqC.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as t}from"./chunks/framework.kuHzA11c.js";const _=JSON.parse('{"title":"Wren:IDM","description":"","frontmatter":{"title":"Wren:IDM"},"headers":[],"relativePath":"projects/wrenidm/download.md","filePath":"projects/wrenidm/download.md"}'),o={name:"projects/wrenidm/download.md"},n=t('

Getting Started

You can get Wren:IDM application in a few ways.

Download binary release

The easiest way to get the Wren:IDM is to download the latest binary release.

Docker image

You can also run Wren:IDM in a Docker container. Official Wren:IDM Docker images can be found on Docker Hub.

Build the source code

The last but not least you can create your own build from the source code. Manual how to build the source code can be found here.

',8),i=[n];function d(c,l,s,h,u,b){return r(),a("div",null,i)}const p=e(o,[["render",d]]);export{_ as __pageData,p as default}; diff --git a/assets/projects_wrenidm_download.md.TuKnfGqC.lean.js b/assets/projects_wrenidm_download.md.TuKnfGqC.lean.js new file mode 100644 index 0000000..191572a --- /dev/null +++ b/assets/projects_wrenidm_download.md.TuKnfGqC.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as t}from"./chunks/framework.kuHzA11c.js";const _=JSON.parse('{"title":"Wren:IDM","description":"","frontmatter":{"title":"Wren:IDM"},"headers":[],"relativePath":"projects/wrenidm/download.md","filePath":"projects/wrenidm/download.md"}'),o={name:"projects/wrenidm/download.md"},n=t("",8),i=[n];function d(c,l,s,h,u,b){return r(),a("div",null,i)}const p=e(o,[["render",d]]);export{_ as __pageData,p as default}; diff --git a/assets/projects_wrenidm_index.md.0bCQdGNi.js b/assets/projects_wrenidm_index.md.0bCQdGNi.js new file mode 100644 index 0000000..1042291 --- /dev/null +++ b/assets/projects_wrenidm_index.md.0bCQdGNi.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,V as o}from"./chunks/framework.kuHzA11c.js";const f=JSON.parse('{"title":"Wren:IDM","description":"","frontmatter":{"title":"Wren:IDM","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenidm/index.md","filePath":"projects/wrenidm/index.md"}'),i={name:"projects/wrenidm/index.md"},n=o('

Wren:IDM

Overview

Wren:IDM is a community‐developed identity management system with a flexible data model, multiple extension points and scripting support, including JavaScript and Groovy. It can connect to and manage a wide range of systems through the Identity Connector Framework (Wren:ICF).

Wren:IDM is one of the projects in the Wren Security Suite, a community initiative that adopted open‐source projects formerly developed by ForgeRock, which has its own roots in Sun Microsystems’ products.

Wren:IDM itself is focused on identity management processes and it also provides a powerful framework for implementing IAG and a portion of IAM processes as well. Although the project is based on OpenIDM code, it is not affiliated with ForgeRock in any way. It is based on the very latest code available under a CDDL license (not‐yet‐released OpenIDM 5.x).

The features of Wren:IDM include:

  • A complete platform for building IDM and IG solutions using the concepts described below – roles, mappings, synchronizations, workflows, policies, etc.
  • ICF Connector Servers – services that allow connectors to be run outside of the IDM itself. Useful when a connector needs a specific client environment to talk to the integrated system. Also facilitates security. .NET and Java Connector Servers are available.
  • Administration GUI – an interface for making changes to data models and configuration using a point‐and‐click interface rather than Wren:IDM's REST interface.
  • Self‐service GUI – an interface for end‐users to update their profile information, passwords, and preferences.

Both the Administration GUI and Self‐Service GUI are web‐based, single‐page applications that can be turned off in deployments that do not desire to use them [1].

Acknowledgments

Large portions of the source code are based on the open-source projects previously released by:

  • Sun Microsystems
  • ForgeRock

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

',15),r=[n];function s(c,d,l,p,h,m){return a(),t("div",null,r)}const w=e(i,[["render",s]]);export{f as __pageData,w as default}; diff --git a/assets/projects_wrenidm_index.md.0bCQdGNi.lean.js b/assets/projects_wrenidm_index.md.0bCQdGNi.lean.js new file mode 100644 index 0000000..1108c46 --- /dev/null +++ b/assets/projects_wrenidm_index.md.0bCQdGNi.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,V as o}from"./chunks/framework.kuHzA11c.js";const f=JSON.parse('{"title":"Wren:IDM","description":"","frontmatter":{"title":"Wren:IDM","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenidm/index.md","filePath":"projects/wrenidm/index.md"}'),i={name:"projects/wrenidm/index.md"},n=o("",15),r=[n];function s(c,d,l,p,h,m){return a(),t("div",null,r)}const w=e(i,[["render",s]]);export{f as __pageData,w as default}; diff --git a/assets/projects_wrenidm_resources.md.cSlX1xqe.js b/assets/projects_wrenidm_resources.md.cSlX1xqe.js new file mode 100644 index 0000000..0b5b00c --- /dev/null +++ b/assets/projects_wrenidm_resources.md.cSlX1xqe.js @@ -0,0 +1 @@ +import{_ as o,c as r,o as n,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const b=JSON.parse('{"title":"Wren:IDM","description":"","frontmatter":{"title":"Wren:IDM"},"headers":[],"relativePath":"projects/wrenidm/resources.md","filePath":"projects/wrenidm/resources.md"}'),a={name:"projects/wrenidm/resources.md"},s=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrenidm/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t("). Repository hosting cookbook with common use cases is available on "),e("a",{href:"https://github.com/WrenSecurity/wrenidm-cookbook",target:"_blank",rel:"noreferrer"},"GitHub"),t(".")],-1),i=[s,c];function d(m,l,u,h,p,_){return n(),r("div",null,i)}const k=o(a,[["render",d]]);export{b as __pageData,k as default}; diff --git a/assets/projects_wrenidm_resources.md.cSlX1xqe.lean.js b/assets/projects_wrenidm_resources.md.cSlX1xqe.lean.js new file mode 100644 index 0000000..0b5b00c --- /dev/null +++ b/assets/projects_wrenidm_resources.md.cSlX1xqe.lean.js @@ -0,0 +1 @@ +import{_ as o,c as r,o as n,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const b=JSON.parse('{"title":"Wren:IDM","description":"","frontmatter":{"title":"Wren:IDM"},"headers":[],"relativePath":"projects/wrenidm/resources.md","filePath":"projects/wrenidm/resources.md"}'),a={name:"projects/wrenidm/resources.md"},s=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrenidm/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t("). Repository hosting cookbook with common use cases is available on "),e("a",{href:"https://github.com/WrenSecurity/wrenidm-cookbook",target:"_blank",rel:"noreferrer"},"GitHub"),t(".")],-1),i=[s,c];function d(m,l,u,h,p,_){return n(),r("div",null,i)}const k=o(a,[["render",d]]);export{b as __pageData,k as default}; diff --git a/assets/projects_wrenig_download.md.HQGrk4rT.js b/assets/projects_wrenig_download.md.HQGrk4rT.js new file mode 100644 index 0000000..243d798 --- /dev/null +++ b/assets/projects_wrenig_download.md.HQGrk4rT.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as t}from"./chunks/framework.kuHzA11c.js";const p=JSON.parse('{"title":"Wren:IG","description":"","frontmatter":{"title":"Wren:IG"},"headers":[],"relativePath":"projects/wrenig/download.md","filePath":"projects/wrenig/download.md"}'),o={name:"projects/wrenig/download.md"},n=t('

Getting Started

You can get Wren:IG application in a few ways.

Download binary release

The easiest way to get the Wren:IG is to download the latest binary release.

Docker image

You can also run Wren:IG in a Docker container. Official Wren:IG Docker images can be found on Docker Hub.

Build the source code

The last but not least you can create your own build from the source code. Manual how to build the source code can be found here.

',8),i=[n];function c(d,l,s,h,u,b){return r(),a("div",null,i)}const g=e(o,[["render",c]]);export{p as __pageData,g as default}; diff --git a/assets/projects_wrenig_download.md.HQGrk4rT.lean.js b/assets/projects_wrenig_download.md.HQGrk4rT.lean.js new file mode 100644 index 0000000..b3648e0 --- /dev/null +++ b/assets/projects_wrenig_download.md.HQGrk4rT.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as r,V as t}from"./chunks/framework.kuHzA11c.js";const p=JSON.parse('{"title":"Wren:IG","description":"","frontmatter":{"title":"Wren:IG"},"headers":[],"relativePath":"projects/wrenig/download.md","filePath":"projects/wrenig/download.md"}'),o={name:"projects/wrenig/download.md"},n=t("",8),i=[n];function c(d,l,s,h,u,b){return r(),a("div",null,i)}const g=e(o,[["render",c]]);export{p as __pageData,g as default}; diff --git a/assets/projects_wrenig_index.md.PMQqdtzj.js b/assets/projects_wrenig_index.md.PMQqdtzj.js new file mode 100644 index 0000000..a1491c9 --- /dev/null +++ b/assets/projects_wrenig_index.md.PMQqdtzj.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,V as i}from"./chunks/framework.kuHzA11c.js";const f=JSON.parse('{"title":"Wren:IG","description":"","frontmatter":{"title":"Wren:IG","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenig/index.md","filePath":"projects/wrenig/index.md"}'),a={name:"projects/wrenig/index.md"},o=i('

Wren:IG

Overview

Wren:IG is a community‐developed reverse proxy server providing single sign-on (SSO) to any application behind the proxy.

Wren:IG includes a number of pre-built filters to transform data of intercepred requests / responses. Scripted filter allows you to easily create your own filter using the Groovy language.

The features of Wren:IG include:

  • Authentication / Authorization using industry-standard protocols (SAML 2.0, OAuth 2.0, OpenID Connect)
  • Single Sign-On (SSO)
  • Single Logout (SLO)
  • Session management
  • Password replay

Wren:IG is one of the projects in the Wren Security Suite, a community initiative that adopted open‐source projects formerly developed by ForgeRock.

Acknowledgments

Wren:IG is standing on the shoulders of giants and is a continuation of a prior work:

  • OpenIG by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

',14),n=[o];function s(l,d,c,p,h,u){return r(),t("div",null,n)}const g=e(a,[["render",s]]);export{f as __pageData,g as default}; diff --git a/assets/projects_wrenig_index.md.PMQqdtzj.lean.js b/assets/projects_wrenig_index.md.PMQqdtzj.lean.js new file mode 100644 index 0000000..efca5bf --- /dev/null +++ b/assets/projects_wrenig_index.md.PMQqdtzj.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as r,V as i}from"./chunks/framework.kuHzA11c.js";const f=JSON.parse('{"title":"Wren:IG","description":"","frontmatter":{"title":"Wren:IG","sidebarDepth":2},"headers":[],"relativePath":"projects/wrenig/index.md","filePath":"projects/wrenig/index.md"}'),a={name:"projects/wrenig/index.md"},o=i("",14),n=[o];function s(l,d,c,p,h,u){return r(),t("div",null,n)}const g=e(a,[["render",s]]);export{f as __pageData,g as default}; diff --git a/assets/projects_wrenig_resources.md.g8zJFkN-.js b/assets/projects_wrenig_resources.md.g8zJFkN-.js new file mode 100644 index 0000000..17ba829 --- /dev/null +++ b/assets/projects_wrenig_resources.md.g8zJFkN-.js @@ -0,0 +1 @@ +import{_ as r,c as o,o as n,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const g=JSON.parse('{"title":"Wren:IG","description":"","frontmatter":{"title":"Wren:IG"},"headers":[],"relativePath":"projects/wrenig/resources.md","filePath":"projects/wrenig/resources.md"}'),a={name:"projects/wrenig/resources.md"},s=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrenig/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t(").")],-1),i=[s,c];function d(l,u,m,_,p,h){return n(),o("div",null,i)}const w=r(a,[["render",d]]);export{g as __pageData,w as default}; diff --git a/assets/projects_wrenig_resources.md.g8zJFkN-.lean.js b/assets/projects_wrenig_resources.md.g8zJFkN-.lean.js new file mode 100644 index 0000000..17ba829 --- /dev/null +++ b/assets/projects_wrenig_resources.md.g8zJFkN-.lean.js @@ -0,0 +1 @@ +import{_ as r,c as o,o as n,m as e,a as t}from"./chunks/framework.kuHzA11c.js";const g=JSON.parse('{"title":"Wren:IG","description":"","frontmatter":{"title":"Wren:IG"},"headers":[],"relativePath":"projects/wrenig/resources.md","filePath":"projects/wrenig/resources.md"}'),a={name:"projects/wrenig/resources.md"},s=e("h2",{id:"documentation",tabindex:"-1"},[t("Documentation "),e("a",{class:"header-anchor",href:"#documentation","aria-label":'Permalink to "Documentation"'},"​")],-1),c=e("p",null,[t("Project documentation can be found in our documentation platform ("),e("a",{href:"https://docs.wrensecurity.org/wrenig/latest/index.html",target:"_blank",rel:"noreferrer"},"docs.wrensecurity.org"),t(").")],-1),i=[s,c];function d(l,u,m,_,p,h){return n(),o("div",null,i)}const w=r(a,[["render",d]]);export{g as __pageData,w as default}; diff --git a/assets/sponsors.md.uztJYjTr.js b/assets/sponsors.md.uztJYjTr.js new file mode 100644 index 0000000..deb1d39 --- /dev/null +++ b/assets/sponsors.md.uztJYjTr.js @@ -0,0 +1 @@ +import{_ as r,c as n,J as s,w as a,m as e,a as o,G as i,o as c}from"./chunks/framework.kuHzA11c.js";const w=JSON.parse('{"title":"Sponsors","description":"","frontmatter":{"title":"Sponsors","sidebar":false},"headers":[],"relativePath":"sponsors.md","filePath":"sponsors.md"}'),h={name:"sponsors.md"},l=e("h1",{id:"sponsors",tabindex:"-1"},[o("Sponsors "),e("a",{class:"header-anchor",href:"#sponsors","aria-label":'Permalink to "Sponsors"'},"​")],-1),p=e("p",null,"The following is a list of significant sponsors to Wren Security. Sponsors are listed in no particular order within each section.",-1),d=e("p",null,[e("a",{href:"https://orchi.tech/en/",target:"_blank"},"Orchitech"),o(" is a tech company from Prague, with more than a decade of experience in identity and access management.")],-1),f=e("h1",{id:"thank-you",tabindex:"-1"},[o("Thank you "),e("a",{class:"header-anchor",href:"#thank-you","aria-label":'Permalink to "Thank you"'},"​")],-1),_=e("p",null,[o("We use JFrog "),e("a",{href:"https://jfrog.com/artifactory/",target:"_blank"},"Artifactory"),o(" to host binaries needed for the build of the Wren Security projects.")],-1);function m(u,g,y,k,S,b){const t=i("Sponsor");return c(),n("div",null,[l,p,s(t,{logo:"orchitech.png"},{default:a(()=>[d]),_:1}),f,s(t,{logo:"jfrog-artifactory.png"},{default:a(()=>[_]),_:1})])}const P=r(h,[["render",m]]);export{w as __pageData,P as default}; diff --git a/assets/sponsors.md.uztJYjTr.lean.js b/assets/sponsors.md.uztJYjTr.lean.js new file mode 100644 index 0000000..deb1d39 --- /dev/null +++ b/assets/sponsors.md.uztJYjTr.lean.js @@ -0,0 +1 @@ +import{_ as r,c as n,J as s,w as a,m as e,a as o,G as i,o as c}from"./chunks/framework.kuHzA11c.js";const w=JSON.parse('{"title":"Sponsors","description":"","frontmatter":{"title":"Sponsors","sidebar":false},"headers":[],"relativePath":"sponsors.md","filePath":"sponsors.md"}'),h={name:"sponsors.md"},l=e("h1",{id:"sponsors",tabindex:"-1"},[o("Sponsors "),e("a",{class:"header-anchor",href:"#sponsors","aria-label":'Permalink to "Sponsors"'},"​")],-1),p=e("p",null,"The following is a list of significant sponsors to Wren Security. Sponsors are listed in no particular order within each section.",-1),d=e("p",null,[e("a",{href:"https://orchi.tech/en/",target:"_blank"},"Orchitech"),o(" is a tech company from Prague, with more than a decade of experience in identity and access management.")],-1),f=e("h1",{id:"thank-you",tabindex:"-1"},[o("Thank you "),e("a",{class:"header-anchor",href:"#thank-you","aria-label":'Permalink to "Thank you"'},"​")],-1),_=e("p",null,[o("We use JFrog "),e("a",{href:"https://jfrog.com/artifactory/",target:"_blank"},"Artifactory"),o(" to host binaries needed for the build of the Wren Security projects.")],-1);function m(u,g,y,k,S,b){const t=i("Sponsor");return c(),n("div",null,[l,p,s(t,{logo:"orchitech.png"},{default:a(()=>[d]),_:1}),f,s(t,{logo:"jfrog-artifactory.png"},{default:a(()=>[_]),_:1})])}const P=r(h,[["render",m]]);export{w as __pageData,P as default}; diff --git a/assets/style.4qTdUQlM.css b/assets/style.4qTdUQlM.css new file mode 100644 index 0000000..ca085c9 --- /dev/null +++ b/assets/style.4qTdUQlM.css @@ -0,0 +1 @@ +@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.jIZ9REo5.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.Cb5wWeGA.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.9JiNzaSO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.bvIUbFQP.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.GZWE-KO4.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.paY3CzEB.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.-nLMcIwj.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.PSfer2Kc.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.hznxWNZO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.27E69YJn.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.RnFly65-.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.xzQHe1q1.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%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");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%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")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--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");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-f87ff6e4]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-f87ff6e4]{padding:96px 32px 168px}}.code[data-v-f87ff6e4]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-f87ff6e4]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-f87ff6e4]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-f87ff6e4]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-f87ff6e4]{padding-top:20px}.link[data-v-f87ff6e4]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-f87ff6e4]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-935f8a84]{display:none}.VPDocAsideOutline.has-outline[data-v-935f8a84]{display:block}.content[data-v-935f8a84]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-935f8a84]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-935f8a84]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-7e05ebdb]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-7e05ebdb]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-48f9bb55]{margin-top:64px}.edit-info[data-v-48f9bb55]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-48f9bb55]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-48f9bb55]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-48f9bb55]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-48f9bb55]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-48f9bb55]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-48f9bb55]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-48f9bb55]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-48f9bb55]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-48f9bb55]{margin-left:auto;text-align:right}.desc[data-v-48f9bb55]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-48f9bb55]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-c1c5efc1]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-c1c5efc1]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-c1c5efc1]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-c1c5efc1]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-c1c5efc1]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-c1c5efc1]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-c1c5efc1]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-c1c5efc1]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-c1c5efc1]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-c1c5efc1]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-c1c5efc1]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-c1c5efc1]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-c1c5efc1]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-da5d1713]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-da5d1713]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-da5d1713]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-da5d1713]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-da5d1713]{flex-direction:row}}.main[data-v-da5d1713]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-da5d1713]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-da5d1713]{text-align:left}}@media (min-width: 960px){.main[data-v-da5d1713]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-da5d1713]{max-width:592px}}.name[data-v-da5d1713],.text[data-v-da5d1713]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-da5d1713],.VPHero.has-image .text[data-v-da5d1713]{margin:0 auto}.name[data-v-da5d1713]{color:var(--vp-home-hero-name-color)}.clip[data-v-da5d1713]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-da5d1713],.text[data-v-da5d1713]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-da5d1713],.text[data-v-da5d1713]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-da5d1713],.VPHero.has-image .text[data-v-da5d1713]{margin:0}}.tagline[data-v-da5d1713]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-da5d1713]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-da5d1713]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-da5d1713]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-da5d1713]{margin:0}}.actions[data-v-da5d1713]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-da5d1713]{justify-content:center}@media (min-width: 640px){.actions[data-v-da5d1713]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-da5d1713]{justify-content:flex-start}}.action[data-v-da5d1713]{flex-shrink:0;padding:6px}.image[data-v-da5d1713]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-da5d1713]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-da5d1713]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-da5d1713]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-da5d1713]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-da5d1713]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-da5d1713]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-da5d1713]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-da5d1713]{width:320px;height:320px}}[data-v-da5d1713] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-da5d1713] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-da5d1713] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-33204567]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-33204567]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-33204567]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-33204567]>.VPImage{margin-bottom:20px}.icon[data-v-33204567]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-33204567]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-33204567]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-33204567]{padding-top:8px}.link-text-value[data-v-33204567]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-33204567]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.VPHome[data-v-d82743a8]{padding-bottom:96px}.VPHome[data-v-d82743a8] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-d82743a8]{padding-bottom:128px}}.VPContent[data-v-669faec9]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-669faec9]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-669faec9]{margin:0}@media (min-width: 960px){.VPContent[data-v-669faec9]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-669faec9]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-669faec9]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-af18c0d5]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-af18c0d5]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-af18c0d5]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-af18c0d5]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-af18c0d5]{color:var(--vp-c-text-1)}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-af18c0d5]{font-size:14px}}.icon[data-v-af18c0d5]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}.open>.icon[data-v-af18c0d5]{transform:rotate(90deg)}.items[data-v-af18c0d5]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-af18c0d5]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-af18c0d5]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-af18c0d5]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-af18c0d5]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-af18c0d5]{transition:all .2s ease-out}.flyout-leave-active[data-v-af18c0d5]{transition:all .15s ease-in}.flyout-enter-from[data-v-af18c0d5],.flyout-leave-to[data-v-af18c0d5]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-0282ae07]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-0282ae07]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-0282ae07]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-0282ae07]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-0282ae07]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-0282ae07]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-0282ae07]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-0282ae07]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-0282ae07]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-0282ae07]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-0282ae07]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-0282ae07]{display:none}}.menu-icon[data-v-0282ae07]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-0282ae07]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-0282ae07]{padding:12px 32px 11px}}.VPSwitch[data-v-b1685198]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-b1685198]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-b1685198]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-b1685198]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-b1685198] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-b1685198] svg{fill:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-1736f215]{opacity:1}.moon[data-v-1736f215],.dark .sun[data-v-1736f215]{opacity:0}.dark .moon[data-v-1736f215]{opacity:1}.dark .VPSwitchAppearance[data-v-1736f215] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-e6aabb21]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-e6aabb21]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-43f1e123]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-43f1e123]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-43f1e123]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-43f1e123]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e7ea1737]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e7ea1737] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e7ea1737] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e7ea1737] .group:last-child{padding-bottom:0}.VPMenu[data-v-e7ea1737] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e7ea1737] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e7ea1737] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e7ea1737] .action{padding-left:24px}.VPFlyout[data-v-9c007e85]{position:relative}.VPFlyout[data-v-9c007e85]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-9c007e85]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-9c007e85]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-9c007e85]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-9c007e85]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-9c007e85],.button[aria-expanded=true]+.menu[data-v-9c007e85]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-9c007e85]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-9c007e85]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-9c007e85]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-9c007e85]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-9c007e85]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-9c007e85]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-9c007e85]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-f80f8133]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-f80f8133]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-f80f8133]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-d0bd9dde]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-d0bd9dde]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-d0bd9dde]{display:none}}.trans-title[data-v-d0bd9dde]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-d0bd9dde],.item.social-links[data-v-d0bd9dde]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-d0bd9dde]{min-width:176px}.appearance-action[data-v-d0bd9dde]{margin-right:-2px}.social-links-list[data-v-d0bd9dde]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-42ef59de]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-42ef59de],.VPNavBarMenuLink[data-v-42ef59de]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-7f418b0f]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-7f418b0f]{display:flex}}/*! @docsearch/css 3.5.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-8460f0a8]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-8460f0a8]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-8460f0a8]{border-bottom-color:var(--vp-c-divider)}}[data-v-8460f0a8] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-74abcbb9]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-74abcbb9]{display:flex;align-items:center}}.title[data-v-74abcbb9]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-19c990f1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar.has-local-nav[data-v-19c990f1]{background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar.has-local-nav[data-v-19c990f1]{background-color:transparent}.VPNavBar[data-v-19c990f1]:not(.has-sidebar):not(.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-19c990f1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-19c990f1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-19c990f1]{padding:0}}.container[data-v-19c990f1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-19c990f1],.container>.content[data-v-19c990f1]{pointer-events:none}.container[data-v-19c990f1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-19c990f1]{max-width:100%}}.title[data-v-19c990f1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-19c990f1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-19c990f1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-19c990f1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-19c990f1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-19c990f1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-19c990f1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-19c990f1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.top) .content-body[data-v-19c990f1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-19c990f1]{column-gap:.5rem}}.menu+.translations[data-v-19c990f1]:before,.menu+.appearance[data-v-19c990f1]:before,.menu+.social-links[data-v-19c990f1]:before,.translations+.appearance[data-v-19c990f1]:before,.appearance+.social-links[data-v-19c990f1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-19c990f1]:before,.translations+.appearance[data-v-19c990f1]:before{margin-right:16px}.appearance+.social-links[data-v-19c990f1]:before{margin-left:16px}.social-links[data-v-19c990f1]{margin-right:-8px}.divider[data-v-19c990f1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-19c990f1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-19c990f1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-19c990f1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar.has-local-nav .divider-line[data-v-19c990f1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.top) .divider-line[data-v-19c990f1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.top) .divider[data-v-19c990f1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-2d7af913]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-2d7af913]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-05f27b2a]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-05f27b2a]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-19976ae1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-19976ae1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-65ef89ca]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-65ef89ca]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-65ef89ca]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-65ef89ca]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-65ef89ca]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-65ef89ca]{transform:rotate(45deg)}.button[data-v-65ef89ca]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-65ef89ca]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-65ef89ca]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-65ef89ca]:first-child{padding-top:0}.group+.group[data-v-65ef89ca],.group+.item[data-v-65ef89ca]{padding-top:4px}.VPNavScreenTranslations[data-v-d72aa483]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-d72aa483]{height:auto}.title[data-v-d72aa483]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-d72aa483]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-d72aa483]{margin-right:8px}.icon.chevron[data-v-d72aa483]{margin-left:4px}.list[data-v-d72aa483]{padding:4px 0 0 24px}.link[data-v-d72aa483]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-cc5739dd]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-cc5739dd],.VPNavScreen.fade-leave-active[data-v-cc5739dd]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-cc5739dd],.VPNavScreen.fade-leave-active .container[data-v-cc5739dd]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-cc5739dd],.VPNavScreen.fade-leave-to[data-v-cc5739dd]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-cc5739dd],.VPNavScreen.fade-leave-to .container[data-v-cc5739dd]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-cc5739dd]{display:none}}.container[data-v-cc5739dd]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-cc5739dd],.menu+.appearance[data-v-cc5739dd],.translations+.appearance[data-v-cc5739dd]{margin-top:24px}.menu+.social-links[data-v-cc5739dd]{margin-top:16px}.appearance+.social-links[data-v-cc5739dd]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-e31bd47b]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-e31bd47b]{padding-bottom:10px}.item[data-v-e31bd47b]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-e31bd47b]{cursor:pointer}.indicator[data-v-e31bd47b]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-e31bd47b],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-e31bd47b],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-e31bd47b],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-e31bd47b]{background-color:var(--vp-c-brand-1)}.link[data-v-e31bd47b]{display:flex;align-items:center;flex-grow:1}.text[data-v-e31bd47b]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-e31bd47b]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-e31bd47b],.VPSidebarItem.level-2 .text[data-v-e31bd47b],.VPSidebarItem.level-3 .text[data-v-e31bd47b],.VPSidebarItem.level-4 .text[data-v-e31bd47b],.VPSidebarItem.level-5 .text[data-v-e31bd47b]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-e31bd47b],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-e31bd47b],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-e31bd47b],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-e31bd47b],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-e31bd47b],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-e31bd47b]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-e31bd47b],.VPSidebarItem.level-1.has-active>.item>.text[data-v-e31bd47b],.VPSidebarItem.level-2.has-active>.item>.text[data-v-e31bd47b],.VPSidebarItem.level-3.has-active>.item>.text[data-v-e31bd47b],.VPSidebarItem.level-4.has-active>.item>.text[data-v-e31bd47b],.VPSidebarItem.level-5.has-active>.item>.text[data-v-e31bd47b],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-e31bd47b],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-e31bd47b],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-e31bd47b],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-e31bd47b],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-e31bd47b],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-e31bd47b]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-e31bd47b],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-e31bd47b],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-e31bd47b],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-e31bd47b],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-e31bd47b],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-e31bd47b]{color:var(--vp-c-brand-1)}.caret[data-v-e31bd47b]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-e31bd47b]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-e31bd47b]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-e31bd47b]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-e31bd47b]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-e31bd47b],.VPSidebarItem.level-2 .items[data-v-e31bd47b],.VPSidebarItem.level-3 .items[data-v-e31bd47b],.VPSidebarItem.level-4 .items[data-v-e31bd47b],.VPSidebarItem.level-5 .items[data-v-e31bd47b]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-e31bd47b]{display:none}.VPSidebar[data-v-575e6a36]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-575e6a36]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-575e6a36]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-575e6a36]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-575e6a36]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-575e6a36]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-575e6a36]{outline:0}.group+.group[data-v-575e6a36]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-575e6a36]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-0f60ec36]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0f60ec36]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0f60ec36]{top:14px;left:16px}}.Layout[data-v-5a346dfe]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-96bd69d5]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-96bd69d5]{margin:0 auto;max-width:1152px}.love[data-v-96bd69d5]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-96bd69d5]{width:28px;height:28px;fill:currentColor}.message[data-v-96bd69d5]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-96bd69d5]{padding-top:32px}.action[data-v-96bd69d5]{padding-top:40px;text-align:center}.VPTeamPage[data-v-10b00018]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-10b00018]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-10b00018-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-10b00018-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-10b00018-s],.VPTeamMembers+.VPTeamPageSection[data-v-10b00018-s]{margin-top:96px}}.VPTeamMembers[data-v-10b00018-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-10b00018-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-10b00018-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-0d3d0d4d]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-0d3d0d4d]{padding:32px}.VPTeamMembersItem.small .data[data-v-0d3d0d4d]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-0d3d0d4d]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-0d3d0d4d]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-0d3d0d4d]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-0d3d0d4d]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-0d3d0d4d]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-0d3d0d4d]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-0d3d0d4d]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-0d3d0d4d]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-0d3d0d4d]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-0d3d0d4d]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-0d3d0d4d]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-0d3d0d4d]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-0d3d0d4d]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-0d3d0d4d]{text-align:center}.avatar[data-v-0d3d0d4d]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-0d3d0d4d]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-0d3d0d4d]{margin:0;font-weight:600}.affiliation[data-v-0d3d0d4d]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-0d3d0d4d]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-0d3d0d4d]:hover{color:var(--vp-c-brand-1)}.desc[data-v-0d3d0d4d]{margin:0 auto}.desc[data-v-0d3d0d4d] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-0d3d0d4d]{display:flex;justify-content:center;height:56px}.sp-link[data-v-0d3d0d4d]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-0d3d0d4d]:hover,.sp .sp-link.link[data-v-0d3d0d4d]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-0d3d0d4d]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.sponsor[data-v-0e80e83e]{display:flex;justify-content:space-between;padding:30px 20px}.sponsor-logo[data-v-0e80e83e]{width:30%;display:flex;align-items:center;justify-content:center}.sponsor-logo img[data-v-0e80e83e]{width:100%;max-width:250px}.sponsor-text[data-v-0e80e83e]{width:60%}article+article[data-v-e6bfbb3a]{margin-top:1.5rem;border-top:1px solid var(--vp-c-divider)}section[data-v-b887dfec]{margin-bottom:20px}h1[data-v-a613bfb5]{margin-top:1.5rem;margin-bottom:5px}header div[data-v-a613bfb5]{display:inline-block;color:#6b7280}header div[data-v-a613bfb5]:not(:last-child):after{content:"|";margin:0 5px}:root{--vp-c-brand-1: #c12233;--vp-c-brand-2: #d92639;--vp-c-brand-3: #dd3c4d;--vp-custom-block-tip-text: #155F3E;--vp-custom-block-tip-bg: rgba(66, 184, 131, .05);--vp-custom-block-tip-border: rgba(66, 184, 131, .5)}.dark{--vp-c-brand-1: #dd3e4f;--vp-c-brand-2: #dd3c4d;--vp-c-brand-3: #d92639;--vp-custom-block-tip-text: #42D392;--vp-custom-block-tip-bg: rgba(66, 184, 131, .05);--vp-custom-block-tip-border: rgba(66, 184, 131, .25);--vp-c-gutter: var(--vp-c-divider)}.dark img{filter:grayscale(1) invert(1)}.vp-doc a{text-decoration:inherit}.vp-doc a:hover{text-decoration:underline}.project-origin{padding:16px 24px;display:flex;justify-content:center}.project-origin .custom-block{max-width:1152px}@media (min-width: 640px){.project-origin{padding:16px 48px}}@media (min-width: 960px){.project-origin{padding:16px 64px}} diff --git a/blog/2021/10/wrenidm-6-0-0-released.html b/blog/2021/10/wrenidm-6-0-0-released.html new file mode 100644 index 0000000..a71aa66 --- /dev/null +++ b/blog/2021/10/wrenidm-6-0-0-released.html @@ -0,0 +1,27 @@ + + + + + + Wren:IDM 6.0.0 Released | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:IDM 6.0.0 Released

October 8, 2021

We are excited to announce the release of Wren:IDM 6.0.0. Wren Security release compatible with JDK 11 and zero dependencies on legacy infrastructure (everything you need to build the project is hosted in JFrog Artifactory).

Changes

List of significant changes:

  • Change Maven parent to wrensec-parent (new Maven plugin versions, dedicated JFrog repository)
  • Upgrade core dependencies (Apache Felix, Activiti, RhinoJS, ...)
  • Support Java 11 as the default build and runtime environment
  • Add Dockerfile and publish official image to Docker Hub
  • Add GitHub Actions pipeline (switch from Semaphore CI)
  • Replace OrientDB with H2 as the default playground database

How to get

You can build your own binary as described by README.

Alternatively you can use the official Docker image from Docker Hub:

bash
docker run --rm --name wrenidm-test -p 8080:8080 wrensecurity/wrenidm:6.0.0
+ + + + \ No newline at end of file diff --git a/blog/2022/04/brand-new-website.html b/blog/2022/04/brand-new-website.html new file mode 100644 index 0000000..3ff8119 --- /dev/null +++ b/blog/2022/04/brand-new-website.html @@ -0,0 +1,27 @@ + + + + + + Brand New Website | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Brand New Website

April 27, 2022

We have created a brand new website for Wren Security security suite.

Our former website (built using WordPress) was not easy to update and expand. It was created as more of a leaflet to define our presence and look and feel for the Wren Security brand. It served its purpose, but it was time to move on.

The new website has dedicated sections for top-level projects (Wren:IDM, Wren:AM, Wren:DS and Wren:ICF), instructions on community involvement and dedicated section for blog posts (various project related news).

New website is built and run using the following technologies:

Source code of the website is hosted in wrensec-website GitHub repository. Pull requests are welcome. 💯

+ + + + \ No newline at end of file diff --git a/blog/2022/06/wrenidm-cookbook-created.html b/blog/2022/06/wrenidm-cookbook-created.html new file mode 100644 index 0000000..49c6595 --- /dev/null +++ b/blog/2022/06/wrenidm-cookbook-created.html @@ -0,0 +1,27 @@ + + + + + + Wren:IDM Cookbook Created | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:IDM Cookbook Created

June 9, 2022

We have prepared recipes (samples) demonstrating key Wren:IDM features. From now it is possible to try Wren:IDM easily.

We have prepared following samples:

  • sync ⚙️ – synchronize data between Wren:IDM and source / target systems
  • workflow 📝 – create workflow with approval in Wren:IDM
  • roles 🔐 – manage roles and assignment values
  • endpoint 🗳️ – create custom REST API endpoint to execute custom business logic
  • scheduler ⏱️ – schedule synchronization or script to be automatically triggered
  • email 📧 – send email notification

Environment for each sample is defined through Docker Compose file. You need just one command to start relevant Docker containers, zero configuration needed.

Samples are hosted in wrenidm-cookbook GitHub repository.

+ + + + \ No newline at end of file diff --git a/blog/2022/08/commons-22-2-0-released.html b/blog/2022/08/commons-22-2-0-released.html new file mode 100644 index 0000000..25e31b1 --- /dev/null +++ b/blog/2022/08/commons-22-2-0-released.html @@ -0,0 +1,27 @@ + + + + + + Commons 22.2.0 Released | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Commons 22.2.0 Released

August 11, 2022

We are excited to announce the release of Wren Security Commons 22.2.0. This release is compatible with JDK 17.

Maven groupId of all modules was switched to our package org.wrensecurity.commons.

Changes

List of significant changes:

  • Switched Maven groupId to org.wrensecurity.commons
  • Support for Java 17
  • Merged wrensec-guice project as its own module
  • Fixed Maven site generation where possible
+ + + + \ No newline at end of file diff --git a/blog/2022/12/wrenidm-6-1-0-released.html b/blog/2022/12/wrenidm-6-1-0-released.html new file mode 100644 index 0000000..46a5dd1 --- /dev/null +++ b/blog/2022/12/wrenidm-6-1-0-released.html @@ -0,0 +1,27 @@ + + + + + + Wren:IDM 6.1.0 Released | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:IDM 6.1.0 Released

December 30, 2022

Brand new release Wren:IDM 6.1.0 has been published. This release is fully compatible with JDK 17 and Maven groupId of all modules was switched to our package org.wrensecurity.wrenidm.

Changes

List of significant changes:

  • Add Java 17 support and drop Java 8 support
  • Change Maven groupId to org.wrensecurity.wrenidm

Other changes:

  • Change Maven packaging from bundle to jar (#112)
  • Support for custom operation-specific options in provisioner (#124)
  • Workaround Rhino JS file encoding issue (#130)
  • Improve docker build (multistage with buildkit cache)
  • Upgrade wrensec-parent to the latest release (4.0.0)
  • Upgrade wrensec-commons to 22.4.0
  • Upgrade wrensec-ui to 22.1.1
  • Upgrade wrenicf-java-framework to 1.5.3.0
  • Upgrade Rhino JS to 1.7.14

How to get

You can build your own binary as described by README.

Alternatively you can use the official Docker image from Docker Hub:

bash
docker run --rm --name wrenidm-test -p 8080:8080 wrensecurity/wrenidm:6.1.0
+ + + + \ No newline at end of file diff --git a/blog/2023/01/happy-2023.html b/blog/2023/01/happy-2023.html new file mode 100644 index 0000000..b56bc03 --- /dev/null +++ b/blog/2023/01/happy-2023.html @@ -0,0 +1,27 @@ + + + + + + Happy 2023! | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Happy 2023!

January 6, 2023

With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up!

Some 6 years ago, when ForgeRock abandoned their community edition, our journey to save the future of open-source IAM platform began. Since then, we’ve spent countless hours crafting an independent fork. Just over the course of 2022, we’ve put a lot of effort into modernization of the stack and introduced full Java 17 support, Docker images as official artifacts and many other fixes and improvements. The numbers speak for themselves:

  • 283 commits;
  • 52 000+ insertions and 28 000+ deletions in 3100+ files;
  • 92 merged pull requests;
  • 29 closed issues;
  • 19 new releases and 26 tags.

On top of that, we fully migrated from Semaphore CI to GitHub CI for automated builds, and we drafted system tests for Wren:IDM, Wren:AM and Wren:DS that verify project’s release stability.

In addition to the purely technical advances, we’ve significantly improved the documentation infrastructure to start rebuilding what we had lost during the fork process, namely:

You might have noticed that our focus was shaped mainly by our passion for Identity Management. This led us to the point where Wren:IDM became a reliable foundation for IDM implementations of any scale. But the Wren Security Suite wouldn't be complete without its Access Management essentials, and we’re very aware that it has not received the care it deserves. That's why we are thrilled to announce that we will kickstart 2023 with a completely upgraded Wren:DS (former OpenDJ), shortly followed by Wren:AM, the successor of OpenAM.

Upgraded technological stack, carefully curated changes, Docker images and seamless migration will provide a reliable replacement for those who still run their aging OpenAM and OpenDS installations.

Follow us on Gitter, star our GitHub and stay tuned.

Happy New Year!

+ + + + \ No newline at end of file diff --git a/blog/2023/05/wrends-5-0-0-released.html b/blog/2023/05/wrends-5-0-0-released.html new file mode 100644 index 0000000..f2e652a --- /dev/null +++ b/blog/2023/05/wrends-5-0-0-released.html @@ -0,0 +1,27 @@ + + + + + + Wren:DS 5.0.0 Released | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:DS 5.0.0 Released

May 16, 2023

We are excited to announce that the brand new release of Wren:DS 5.0.0 is finally out! This is the first release of Wren:DS that is fully independent of the legacy infrastructure. Its technological stack has been updated to be compatible with JDK 17, and all changes have been carefully curated to provide a high level of security while still offering a reliable migration path from legacy OpenDJ installations.

If you are already running Wren:DS or an unsupported version of OpenDJ, we strongly recommend that you upgrade, as only the new versions will receive the support they deserve.

What's next? Wren:AM. Stay tuned!

Changes

List of significant changes:

  • Add Java 17 support and drop Java 8 support
  • Change Maven groupId to org.wrensecurity.wrends
  • Upgrade to the newest wrensec-parent and wrensec-commons
  • Upgrade Berkley DB JE dependency and remove PDB backend
  • Update visible project title and logo to Wren:DS
  • Switch to GitHub Actions for CI, create new project for system testing
  • Add docker build with amd64 and aarch64 support and Docker Hub publishing pipeline
  • Remove or replace files with non-CDDL license

How to get

Refer to the Getting Started page to learn how to get and run Wren:DS.

Alternatively you can run the official Docker image from Docker Hub:

bash
docker run --rm --name wrends-test -p 1389:1389 -p 1636:1636 wrensecurity/wrends:5.0.0
+ + + + \ No newline at end of file diff --git a/blog/2023/10/cve-numbering-authority.html b/blog/2023/10/cve-numbering-authority.html new file mode 100644 index 0000000..cb6f4bc --- /dev/null +++ b/blog/2023/10/cve-numbering-authority.html @@ -0,0 +1,27 @@ + + + + + + We've been authorized as CVE Numbering Authority | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

We've been authorized as CVE Numbering Authority

October 17, 2023

It's our pleasure to announce, that Wren Security has been authorized by the Common Vulnerabilities and Exposures CVE Program as a CVE Numbering Authority CNA. As a CNA, we have the ability to directly assign CVE IDs and publish CVE records for vulnerabilities discovered in our projects.

Security is a fundamental aspect of our efforts, which is even reflected in our name. Therefore, we have recently made several releases that include significant security improvements and have clarified our disclosure processes. And since the principles of open source dictate that we respect transparency, it was a natural step to contribute to the global initiative of identifying, defining, and cataloging publicly-disclosed cybersecurity vulnerabilities.

It's a commitment, but we believe that it will help to build trust with our users.

What is CVE Program?

The mission of the Common Vulnerabilities and Exposures (CVE®) program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities. There is one CVE Record for each vulnerability in the catalog. The vulnerabilities are discovered then assigned and published by organizations from around the world that have partnered with the CVE Program. Partners publish CVE Records to communicate consistent descriptions of vulnerabilities. Information technology and cybersecurity professionals use CVE Records to ensure they are discussing the same issue, and to coordinate their efforts to prioritize and address the vulnerabilities.

What are CNAs?

CNAs are organizations responsible for the regular assignment of CVE IDs to vulnerabilities, and for creating and publishing information about the Vulnerability in the associated CVE Record. Each CNA has a specific Scope of responsibility for vulnerability identification and publishing.

Disclosure

If you think you've found a vulnerability, please don't disclose it publicly until you've checked with us. Please, refer to the disclosure policy.

+ + + + \ No newline at end of file diff --git a/blog/2023/10/wrenam-15-0-0-released.html b/blog/2023/10/wrenam-15-0-0-released.html new file mode 100644 index 0000000..090e328 --- /dev/null +++ b/blog/2023/10/wrenam-15-0-0-released.html @@ -0,0 +1,27 @@ + + + + + + Wren:AM 15.0.0 Released | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:AM 15.0.0 Released

October 10, 2023
We're thrilled to announce the release of the anticipated new version of Wren:AM. Following Wren:IDM and Wren:DS, it's now completely independent of the legacy infrastructure, features an upgraded technology stack, and is compatible with JDK 17 (with preparations for Jakarta EE). Additionally, we've addressed a significant number of issues from previous versions, predominantly the security ones. The project remains highly compatible with abandoned community versions of OpenAM, allowing for a seamless migration process, with the added option to leverage Docker images for added convenience.

Numbers worth mentioning include:

  • 89 pull requests merged;
  • 136 new commits;
  • 22 issues closed;
  • 27 known AM security vulnerabilities fixed;
  • 35 Dependabot alerts fixed;
  • 93 security issues (reported by Trivy) fixed.

If you're already running Wren:AM or an unsupported version of OpenAM, we strongly recommend upgrading to get the best out of your access management solution.

Changes

List of significant changes:

  • Upgraded build pipeline (wrensec-parent, JFrog repository, GitHub Actions)
  • Upgraded dependencies (including switch to Jakarta compatible coordinates)
  • Added support for Java 17 as the default build and runtime environment
  • Added Dockerfile and official images published to Docker Hub
  • Fixed ton of security, build and runtime issues

Review all the changes on GitHub.

How to get

Refer to the Getting Started page to learn how to get and run Wren:AM.

Alternatively you can run the official Docker image from Docker Hub:

bash
docker run --rm --name wrenam-test -p 8080:8080 wrensecurity/wrenam:15.0.0
+ + + + \ No newline at end of file diff --git a/blog/2024/01/happy-2024.html b/blog/2024/01/happy-2024.html new file mode 100644 index 0000000..5419578 --- /dev/null +++ b/blog/2024/01/happy-2024.html @@ -0,0 +1,27 @@ + + + + + + 2023 in Review and 2024 Plans and Wishes | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

2023 in Review and 2024 Plans and Wishes

January 17, 2024

The past year's efforts were mainly focused on the Access Management tools. Both Wren:DS and Wren:AM have undergone significant upgrades and security hardening to meet the standards earlier set by Wren:IDM. This means that the key components are now independent of the legacy infrastructure and have also been polished to ensure the high level of security and robustness. This progress paved the way for the introduction of new features, such as Cisco Duo authentication module.

On top of that there was regular maintenance and improvements in the development infrastructure, e.g. cleanup of the UI libraries. To highlight our dedication to delivering dependable software, we have become a CVE numbering authority in the CVE.org Program, allowing us to transparently manage and share potential security vulnerabilities (see Disclosure Policy). The importance of maintaining an active online presence led us to create an X (Twitter) account providing a more convenient way to share updates. Follow us to keep up with the latest news.

Plans and Wishes for 2024

Looking ahead to 2024, our goal remains to get rid of the legacy heritage. We will soon release an upgraded and independent version of Wren:IG. After that, we will continue with the Wren:ICF framework components to ensure a seamless interplay with the rest of the platform.

Addressing the unfinished redesign of the Wren:AM administration interface is a priority, as it contributes significantly to our credibility. We'll focus on rewriting the remaining pages to enhance user experience.

For the same reasons, we will continue to fill the gaps in the documentation and create basic guides to help users get started.

What else? We'd like to keep up with the trends and go passwordless. So, we will start digging into the integration of FIDO standards.

We aspire to improve the clarity of our development roadmap. This involves open planning of releases on GitHub allowing our community to easily track progress through our backlog.

Conclusion

As we wrap up 2023, let's look at the year in numbers:

  • 267 commits;
  • 130 000+ insertions and 120 000+ deletions in 4200+ files;
  • 112 merged pull requests;
  • 36 closed issues;
  • 28 new releases and 35 tags;
  • 285 dependabot issues fixed.

We are determined to maintain the same pace in 2024 and deepen our footprint in the open-source identity and access management field.

Happy new year!

+ + + + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..ac09ac9 --- /dev/null +++ b/blog/index.html @@ -0,0 +1,41 @@ + + + + + + Blog | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:AM 15.0.0 Released

October 10, 2023

We're thrilled to announce the release of the anticipated new version of Wren:AM. +Take a closer look at the carefully curated changes that we have worked on. +

Wren:DS 5.0.0 Released

May 16, 2023

We are excited to announce the release of Wren:DS 5.0.0. This release is the first official +Wren Security release compatible with JDK 17 and zero dependencies on legacy infrastructure. +

Happy 2023!

January 6, 2023

With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up! +

Wren:IDM 6.0.0 Released

October 8, 2021

We are excited to announce the release of Wren:IDM 6.0.0. This release is the first official +Wren Security release compatible with JDK 11 and zero dependencies on legacy infrastructure. +

+ + + + \ No newline at end of file diff --git a/community/contact.html b/community/contact.html new file mode 100644 index 0000000..522bf27 --- /dev/null +++ b/community/contact.html @@ -0,0 +1,27 @@ + + + + + + Contact | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Product Support

If you have any questions or comments about the software, please visit our Gitter channel.

Security Issues

If you think you have found a security vulnerability, please refer to disclosure policy.

+ + + + \ No newline at end of file diff --git a/community/disclosure.html b/community/disclosure.html new file mode 100644 index 0000000..7f76573 --- /dev/null +++ b/community/disclosure.html @@ -0,0 +1,27 @@ + + + + + + Disclosure Policy | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Disclosure Policy


Please do not disclose any potential security issues publicly. Report the vulnerability to our team and give us time to work on it. We will disclose it responsibly as soon as it is properly remediated.

How To Disclose

If you think you have found a security vulnerability, please send an email to disclosure@wrensecurity.org. Only security-related issues should be sent to this address.

Please provide as much information as possible, including a description of the vulnerability, the software version, and the steps to reproduce the issue. Additional supporting materials, such as proof-of-concept code or screenshots, can also be helpful.

Our team will contact you to acknowledge receipt of the report. If necessary, we will work together on clarification and validation of the issue.

Publication

Security vulnerabilities are published as a security advisories within the GitHub project repositories.

+ + + + \ No newline at end of file diff --git a/community/join.html b/community/join.html new file mode 100644 index 0000000..0cd357d --- /dev/null +++ b/community/join.html @@ -0,0 +1,27 @@ + + + + + + Get Involved | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Get Involved

If you would like to become involved in the development process of Wren Security Suite there are many different ways in which you can contribute. The first step is to join our Gitter channel. Here are some of the areas ways in which you can help:

  • Investigate bugs reported in the GitHub issues.
  • Answer questions posted to the Gitter channels.
  • Contribute to the projects documentation.

Contributor Guidelines

If you want to start contributing changes, then the first step is to read our Contributor Guidelines.

Become a team member

Here are some of the roles we could use your help for:

Community Coordinator

Someone to help us get the word out about all the great technical work that’s being done behind the scenes on the Wren fork. The ideal person to help us is someone who’s great at communicating, understands technical issues (without necessarily having to be a developer), and can spend about 10-15 hours a week helping us with content, posts, and discussions in the issue queue.

DevOps Admin

Someone to help us ensure that our buildable projects stay buildable, as we continue to accept PRs and enhancements. Experience with automated container creation and with integrating code style (e.g. FindBugs, CheckStyle, etc.) automatically in GitHub PRs is a plus. We expect that there will be more time needed up-front for this role than on-going; likely it will take the next few weeks to get us completely tuned up for this.

Penetration Testers / Security Analysts

A lot of our current work involves fixing existing and/or known issues in projects like Wren:AM 13.5 and Wren:IDM 6. If you are someone who can help us find and plug the holes in our current releases, please reach out. We’d love to tap your skill to make our platform even more secure.

Project Leads

We’re currently looking for leads for Wren:AM and Wren:DS to enhance our technical team. Leads would help coordinate PRs and enforce project process. Likely 15 to 20 hours per week; more if the leads want to have a more hands-on role in PRs.

+ + + + \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..9b35119 Binary files /dev/null and b/favicon.ico differ diff --git a/feed.rss b/feed.rss new file mode 100644 index 0000000..54ad96f --- /dev/null +++ b/feed.rss @@ -0,0 +1,319 @@ + + + + Wren Security + https://wrensecurity.org + The official blog for Wren Security projects + Mon, 22 Jan 2024 15:43:06 GMT + https://validator.w3.org/feed/docs/rss2.html + https://github.com/jpmonette/feed + en + + Wren Security + https://wrensecurity.org/wrensec-logo.png + https://wrensecurity.org + + Copyright © 2017-present Wren Security + + <![CDATA[2023 in Review and 2024 Plans and Wishes]]> + https://wrensecurity.org/blog/2024/01/happy-2024.html + https://wrensecurity.org/blog/2024/01/happy-2024.html + Wed, 17 Jan 2024 00:00:00 GMT + + +

The past year's efforts were mainly focused on the Access Management tools. Both Wren:DS and Wren:AM have undergone significant upgrades and security hardening to meet the standards earlier set by Wren:IDM. This means that the key components are now independent of the legacy infrastructure and have also been polished to ensure the high level of security and robustness. This progress paved the way for the introduction of new features, such as Cisco Duo authentication module.

+

On top of that there was regular maintenance and improvements in the development infrastructure, e.g. cleanup of the UI libraries. +To highlight our dedication to delivering dependable software, we have become a CVE numbering authority in the CVE.org Program, allowing us to transparently manage and share potential security vulnerabilities (see Disclosure Policy). The importance of maintaining an active online presence led us to create an X (Twitter) account providing a more convenient way to share updates. Follow us to keep up with the latest news.

+

Plans and Wishes for 2024

+

Looking ahead to 2024, our goal remains to get rid of the legacy heritage. We will soon release an upgraded and independent version of Wren:IG. After that, we will continue with the Wren:ICF framework components to ensure a seamless interplay with the rest of the platform.

+

Addressing the unfinished redesign of the Wren:AM administration interface is a priority, as it contributes significantly to our credibility. We'll focus on rewriting the remaining pages to enhance user experience.

+

For the same reasons, we will continue to fill the gaps in the documentation and create basic guides to help users get started.

+

What else? We'd like to keep up with the trends and go passwordless. So, we will start digging into the integration of FIDO standards.

+

We aspire to improve the clarity of our development roadmap. This involves open planning of releases on GitHub allowing our community to easily track progress through our backlog.

+

Conclusion

+

As we wrap up 2023, let's look at the year in numbers:

+
    +
  • 267 commits;
  • +
  • 130 000+ insertions and 120 000+ deletions in 4200+ files;
  • +
  • 112 merged pull requests;
  • +
  • 36 closed issues;
  • +
  • 28 new releases and 35 tags;
  • +
  • 285 dependabot issues fixed.
  • +
+

We are determined to maintain the same pace in 2024 and deepen our footprint in the open-source identity and access management field.

+

Happy new year!

+ +]]>
+
+ + <![CDATA[We've been authorized as CVE Numbering Authority]]> + https://wrensecurity.org/blog/2023/10/cve-numbering-authority.html + https://wrensecurity.org/blog/2023/10/cve-numbering-authority.html + Tue, 17 Oct 2023 00:00:00 GMT + + +

It's our pleasure to announce, that Wren Security has been authorized by the Common Vulnerabilities and Exposures CVE Program as a CVE Numbering Authority CNA. As a CNA, we have the ability to directly assign CVE IDs and publish CVE records for vulnerabilities discovered in our projects.

+

Security is a fundamental aspect of our efforts, which is even reflected in our name. Therefore, we have recently made several releases that include significant security improvements and have clarified our disclosure processes. And since the principles of open source dictate that we respect transparency, it was a natural step to contribute to the global initiative of identifying, defining, and cataloging publicly-disclosed cybersecurity vulnerabilities.

+

It's a commitment, but we believe that it will help to build trust with our users.

+

What is CVE Program?

+

The mission of the Common Vulnerabilities and Exposures (CVE®) program is to identify, define, and catalog publicly disclosed cybersecurity vulnerabilities. There is one CVE Record for each vulnerability in the catalog. The vulnerabilities are discovered then assigned and published by organizations from around the world that have partnered with the CVE Program. Partners publish CVE Records to communicate consistent descriptions of vulnerabilities. Information technology and cybersecurity professionals use CVE Records to ensure they are discussing the same issue, and to coordinate their efforts to prioritize and address the vulnerabilities.

+

What are CNAs?

+

CNAs are organizations responsible for the regular assignment of CVE IDs to vulnerabilities, and for creating and publishing information about the Vulnerability in the associated CVE Record. Each CNA has a specific Scope of responsibility for vulnerability identification and publishing.

+

Disclosure

+

If you think you've found a vulnerability, please don't disclose it publicly until you've checked with us. Please, refer to the disclosure policy.

+ +]]>
+
+ + <![CDATA[Wren:AM 15.0.0 Released]]> + https://wrensecurity.org/blog/2023/10/wrenam-15-0-0-released.html + https://wrensecurity.org/blog/2023/10/wrenam-15-0-0-released.html + Tue, 10 Oct 2023 00:00:00 GMT + + +We're thrilled to announce the release of the anticipated new version of Wren:AM. Following Wren:IDM and Wren:DS, it's now completely independent of the legacy infrastructure, features an upgraded technology stack, and is compatible with JDK 17 (with preparations for Jakarta EE). Additionally, we've addressed a significant number of issues from previous versions, predominantly the security ones. +The project remains highly compatible with abandoned community versions of OpenAM, allowing for a seamless migration process, with the added option to leverage Docker images for added convenience. +

Numbers worth mentioning include:

+
    +
  • 89 pull requests merged;
  • +
  • 136 new commits;
  • +
  • 22 issues closed;
  • +
  • 27 known AM security vulnerabilities fixed;
  • +
  • 35 Dependabot alerts fixed;
  • +
  • 93 security issues (reported by Trivy) fixed.
  • +
+

If you're already running Wren:AM or an unsupported version of OpenAM, we strongly recommend upgrading to get the best out of your access management solution.

+

Changes

+

List of significant changes:

+
    +
  • Upgraded build pipeline (wrensec-parent, JFrog repository, GitHub Actions)
  • +
  • Upgraded dependencies (including switch to Jakarta compatible coordinates)
  • +
  • Added support for Java 17 as the default build and runtime environment
  • +
  • Added Dockerfile and official images published to Docker Hub
  • +
  • Fixed ton of security, build and runtime issues
  • +
+

Review all the changes on GitHub.

+

How to get

+

Refer to the Getting Started page to learn how to get and run Wren:AM.

+

Alternatively you can run the official Docker image from Docker Hub:

+
bash
docker run --rm --name wrenam-test -p 8080:8080 wrensecurity/wrenam:15.0.0
+
+]]>
+
+ + <![CDATA[Wren:DS 5.0.0 Released]]> + https://wrensecurity.org/blog/2023/05/wrends-5-0-0-released.html + https://wrensecurity.org/blog/2023/05/wrends-5-0-0-released.html + Tue, 16 May 2023 00:00:00 GMT + + +

We are excited to announce that the brand new release of Wren:DS 5.0.0 +is finally out! This is the first release of Wren:DS that is fully independent of the legacy +infrastructure. Its technological stack has been updated to be compatible with JDK 17, and all +changes have been carefully curated to provide a high level of security while still offering +a reliable migration path from legacy OpenDJ installations.

+

If you are already running Wren:DS or an unsupported version of OpenDJ, we strongly recommend +that you upgrade, as only the new versions will receive the support they deserve.

+

What's next? Wren:AM. Stay tuned!

+

Changes

+

List of significant changes:

+
    +
  • Add Java 17 support and drop Java 8 support
  • +
  • Change Maven groupId to org.wrensecurity.wrends
  • +
  • Upgrade to the newest wrensec-parent and wrensec-commons
  • +
  • Upgrade Berkley DB JE dependency and remove PDB backend
  • +
  • Update visible project title and logo to Wren:DS
  • +
  • Switch to GitHub Actions for CI, create new project for system testing
  • +
  • Add docker build with amd64 and aarch64 support and Docker Hub publishing pipeline
  • +
  • Remove or replace files with non-CDDL license
  • +
+

How to get

+

Refer to the Getting Started page to learn how to get and run Wren:DS.

+

Alternatively you can run the official Docker image from Docker Hub:

+
bash
docker run --rm --name wrends-test -p 1389:1389 -p 1636:1636 wrensecurity/wrends:5.0.0
+
+]]>
+
+ + <![CDATA[Happy 2023!]]> + https://wrensecurity.org/blog/2023/01/happy-2023.html + https://wrensecurity.org/blog/2023/01/happy-2023.html + Fri, 06 Jan 2023 00:00:00 GMT + + +

With 2022 gone, we feel it’s time for a brief recap. And we have some exciting news about the future as well, so buckle up!

+

Some 6 years ago, when ForgeRock abandoned their community edition, our journey to save the future of open-source IAM platform began. Since then, we’ve spent countless hours crafting an independent fork. Just over the course of 2022, we’ve put a lot of effort into modernization of the stack and introduced full Java 17 support, Docker images as official artifacts and many other fixes and improvements. The numbers speak for themselves:

+
    +
  • 283 commits;
  • +
  • 52 000+ insertions and 28 000+ deletions in 3100+ files;
  • +
  • 92 merged pull requests;
  • +
  • 29 closed issues;
  • +
  • 19 new releases and 26 tags.
  • +
+

On top of that, we fully migrated from Semaphore CI to GitHub CI for automated builds, and we drafted system tests for Wren:IDM, Wren:AM and Wren:DS that verify project’s release stability.

+

In addition to the purely technical advances, we’ve significantly improved the documentation infrastructure to start rebuilding what we had lost during the fork process, namely:

+ +

You might have noticed that our focus was shaped mainly by our passion for Identity Management. This led us to the point where Wren:IDM became a reliable foundation for IDM implementations of any scale. +But the Wren Security Suite wouldn't be complete without its Access Management essentials, and we’re very aware that it has not received the care it deserves. That's why we are thrilled to announce that we will kickstart 2023 with a completely upgraded Wren:DS (former OpenDJ), shortly followed by Wren:AM, the successor of OpenAM.

+

Upgraded technological stack, carefully curated changes, Docker images and seamless migration will provide a reliable replacement for those who still run their aging OpenAM and OpenDS installations.

+

Follow us on Gitter, star our GitHub and stay tuned.

+

Happy New Year!

+ +]]>
+
+ + <![CDATA[Wren:IDM 6.1.0 Released]]> + https://wrensecurity.org/blog/2022/12/wrenidm-6-1-0-released.html + https://wrensecurity.org/blog/2022/12/wrenidm-6-1-0-released.html + Fri, 30 Dec 2022 00:00:00 GMT + + +

Brand new release Wren:IDM 6.1.0 has been published. +This release is fully compatible with JDK 17 and Maven groupId of all modules was switched to our package org.wrensecurity.wrenidm.

+

Changes

+

List of significant changes:

+
    +
  • Add Java 17 support and drop Java 8 support
  • +
  • Change Maven groupId to org.wrensecurity.wrenidm
  • +
+

Other changes:

+
    +
  • Change Maven packaging from bundle to jar (#112)
  • +
  • Support for custom operation-specific options in provisioner (#124)
  • +
  • Workaround Rhino JS file encoding issue (#130)
  • +
  • Improve docker build (multistage with buildkit cache)
  • +
  • Upgrade wrensec-parent to the latest release (4.0.0)
  • +
  • Upgrade wrensec-commons to 22.4.0
  • +
  • Upgrade wrensec-ui to 22.1.1
  • +
  • Upgrade wrenicf-java-framework to 1.5.3.0
  • +
  • Upgrade Rhino JS to 1.7.14
  • +
+

How to get

+

You can build your own binary as described by README.

+

Alternatively you can use the official Docker image from Docker Hub:

+
bash
docker run --rm --name wrenidm-test -p 8080:8080 wrensecurity/wrenidm:6.1.0
+
+]]>
+
+ + <![CDATA[Commons 22.2.0 Released]]> + https://wrensecurity.org/blog/2022/08/commons-22-2-0-released.html + https://wrensecurity.org/blog/2022/08/commons-22-2-0-released.html + Thu, 11 Aug 2022 00:00:00 GMT + + +

We are excited to announce the release of Wren Security Commons 22.2.0. +This release is compatible with JDK 17.

+

Maven groupId of all modules was switched to our package org.wrensecurity.commons.

+

Changes

+

List of significant changes:

+
    +
  • Switched Maven groupId to org.wrensecurity.commons
  • +
  • Support for Java 17
  • +
  • Merged wrensec-guice project as its own module
  • +
  • Fixed Maven site generation where possible
  • +
+ +]]>
+
+ + <![CDATA[Wren:IDM Cookbook Created]]> + https://wrensecurity.org/blog/2022/06/wrenidm-cookbook-created.html + https://wrensecurity.org/blog/2022/06/wrenidm-cookbook-created.html + Thu, 09 Jun 2022 00:00:00 GMT + + +

We have prepared recipes (samples) demonstrating key Wren:IDM features. +From now it is possible to try Wren:IDM easily.

+

We have prepared following samples:

+
    +
  • sync ⚙️ – synchronize data between Wren:IDM and source / target systems
  • +
  • workflow 📝 – create workflow with approval in Wren:IDM
  • +
  • roles 🔐 – manage roles and assignment values
  • +
  • endpoint 🗳️ – create custom REST API endpoint to execute custom business logic
  • +
  • scheduler ⏱️ – schedule synchronization or script to be automatically triggered
  • +
  • email 📧 – send email notification
  • +
+

Environment for each sample is defined through Docker Compose file. +You need just one command to start relevant Docker containers, zero configuration needed.

+

Samples are hosted in wrenidm-cookbook +GitHub repository.

+]]>
+
+ + <![CDATA[Brand New Website]]> + https://wrensecurity.org/blog/2022/04/brand-new-website.html + https://wrensecurity.org/blog/2022/04/brand-new-website.html + Wed, 27 Apr 2022 00:00:00 GMT + + +

We have created a brand new website for Wren Security security suite.

+

Our former website (built using WordPress) was not easy to update and expand. It was +created as more of a leaflet to define our presence and look and feel for the Wren Security +brand. It served its purpose, but it was time to move on.

+

The new website has dedicated sections for top-level projects (Wren:IDM, Wren:AM, Wren:DS +and Wren:ICF), instructions on community involvement and dedicated section for blog +posts (various project related news).

+

New website is built and run using the following technologies:

+ +

Source code of the website is hosted in wrensec-website +GitHub repository. Pull requests are welcome. 💯

+]]>
+
+ + <![CDATA[Wren:IDM 6.0.0 Released]]> + https://wrensecurity.org/blog/2021/10/wrenidm-6-0-0-released.html + https://wrensecurity.org/blog/2021/10/wrenidm-6-0-0-released.html + Fri, 08 Oct 2021 00:00:00 GMT + + +

We are excited to announce the release of Wren:IDM 6.0.0. Wren Security release compatible with +JDK 11 and zero dependencies on legacy infrastructure (everything you need to build the project +is hosted in JFrog Artifactory).

+

Changes

+

List of significant changes:

+
    +
  • Change Maven parent to wrensec-parent (new Maven plugin versions, dedicated JFrog repository)
  • +
  • Upgrade core dependencies (Apache Felix, Activiti, RhinoJS, ...)
  • +
  • Support Java 11 as the default build and runtime environment
  • +
  • Add Dockerfile and publish official image to Docker Hub
  • +
  • Add GitHub Actions pipeline (switch from Semaphore CI)
  • +
  • Replace OrientDB with H2 as the default playground database
  • +
+

How to get

+

You can build your own binary as described by README.

+

Alternatively you can use the official Docker image from Docker Hub:

+
bash
docker run --rm --name wrenidm-test -p 8080:8080 wrensecurity/wrenidm:6.0.0
+
+]]>
+
+ + <![CDATA[Blog]]> + https://wrensecurity.org/blog/ + https://wrensecurity.org/blog/ + ]]> + +
+
\ No newline at end of file diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 0000000..bd27cf0 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"blog_2022_08_commons-22-2-0-released.md":"Sfonx2ON","projects_wrenidm_index.md":"0bCQdGNi","blog_2022_12_wrenidm-6-1-0-released.md":"9_1v0LX0","projects_wrends_index.md":"8H1AiFTO","projects_wrenam_resources.md":"UYXqwHAU","blog_2024_01_happy-2024.md":"CEGfrAqS","blog_2023_05_wrends-5-0-0-released.md":"DfrlO2MO","community_contact.md":"m3agR_Iz","projects_wrenicf_index.md":"8w14POdz","projects_wrenam_download.md":"gNKDq-z5","projects_wrenidm_download.md":"TuKnfGqC","projects_wrenig_download.md":"HQGrk4rT","projects_wrenig_index.md":"PMQqdtzj","projects_wrenig_resources.md":"g8zJFkN-","blog_2021_10_wrenidm-6-0-0-released.md":"pvD43zGb","sponsors.md":"uztJYjTr","projects_wrends_resources.md":"vYMhQNHO","projects_wrenam_index.md":"rsoeQYds","community_join.md":"8U0IlyxF","projects_wrends_download.md":"QWn4sKjK","community_disclosure.md":"B_QN1Nar","blog_2022_06_wrenidm-cookbook-created.md":"FIdaoIn3","projects_wrenidm_resources.md":"cSlX1xqe","blog_index.md":"84NojqWy","index.md":"fEr0DZCr","blog_2023_01_happy-2023.md":"pqXSXs90","blog_2023_10_cve-numbering-authority.md":"9xZH9qbP","blog_2023_10_wrenam-15-0-0-released.md":"8P3vg18x","blog_2022_04_brand-new-website.md":"EL5e8Ctb"} diff --git a/index.html b/index.html new file mode 100644 index 0000000..da27267 --- /dev/null +++ b/index.html @@ -0,0 +1,27 @@ + + + + + + Home | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren Security Suite

Community-driven, open-source software for user authentication, user identity management, and single-sign-on.

Wren Security logo

Project Origin

Though our project originated with code that ForgeRock™ had previously released, we are not affiliated with ForgeRock™ in any way. Our projects are based on the very latest code from what was available under a CDDL license (OpenAM 13.5+, OpenDJ 3.5+, OpenIDM 4.5+, and OpenIG 4.0+). ForgeRock™ no longer releases any of the most recent versions of their software under an open-source license. ForgeRock™’s “Community Edition” are ancient versions of the projects. Join our community for the latest and greatest.

+ + + + \ No newline at end of file diff --git a/jfrog-artifactory.png b/jfrog-artifactory.png new file mode 100644 index 0000000..01d3e13 Binary files /dev/null and b/jfrog-artifactory.png differ diff --git a/orchitech.png b/orchitech.png new file mode 100644 index 0000000..8387b72 Binary files /dev/null and b/orchitech.png differ diff --git a/projects/wrenam/download.html b/projects/wrenam/download.html new file mode 100644 index 0000000..3f0fcd1 --- /dev/null +++ b/projects/wrenam/download.html @@ -0,0 +1,27 @@ + + + + + + Wren:AM | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Getting Started

You can get Wren:AM Web Application Archive (WAR) in couple of ways:

Download binary release

The easiest way to get the Wren:AM is to download the latest binary release.

Docker image

You can also run Wren:AM in a Docker container. Official Wren:AM Docker images can be found on Docker Hub.

Build the source code

You can also create your own build from the source code. Manual how to build the source code can be found here.

+ + + + \ No newline at end of file diff --git a/projects/wrenam/index.html b/projects/wrenam/index.html new file mode 100644 index 0000000..d762616 --- /dev/null +++ b/projects/wrenam/index.html @@ -0,0 +1,27 @@ + + + + + + Wren:AM | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:AM

Overview

Wren:AM is an "all-in-one" access management solution providing strong and adaptive authentication, authorization, single sign-on (SSO), entitlements, federation and web services security.

Wren:AM provides mobile support out of the box, with full OAuth 2.0 and OpenID Connect (OIDC) support - modern protocols that provide the most efficient method for developing secure native or web-based mobile applications optimized for bandwidth and CPU.

Wren:AM is one of the projects in the Wren Security Suite, a community initiative that adopted open‐source projects formerly developed by ForgeRock, which has its own roots in Sun Microsystems’ products.

Acknowledgments

Wren:AM is standing on the shoulders of giants and is a continuation of a prior work:

  • OpenSSO by Sun Microsystems
  • OpenAM by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

+ + + + \ No newline at end of file diff --git a/projects/wrenam/resources.html b/projects/wrenam/resources.html new file mode 100644 index 0000000..3d4b6bc --- /dev/null +++ b/projects/wrenam/resources.html @@ -0,0 +1,27 @@ + + + + + + Wren:AM | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Documentation

Project documentation can be found in our documentation platform (docs.wrensecurity.org).

+ + + + \ No newline at end of file diff --git a/projects/wrends/download.html b/projects/wrends/download.html new file mode 100644 index 0000000..b20beaf --- /dev/null +++ b/projects/wrends/download.html @@ -0,0 +1,27 @@ + + + + + + Wren:DS | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Getting Started

You can get Wren:DS application in a few ways.

Download binary release

The easiest way to get the Wren:DS is to download the latest binary release.

Docker image

You can also run Wren:DS in a Docker container. Official Wren:DS Docker images can be found on Docker Hub.

Build the source code

You can also create your own build from the source code. Manual how to build the source code can be found here.

+ + + + \ No newline at end of file diff --git a/projects/wrends/index.html b/projects/wrends/index.html new file mode 100644 index 0000000..ad2d48f --- /dev/null +++ b/projects/wrends/index.html @@ -0,0 +1,27 @@ + + + + + + Wren:DS | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:DS

Overview

Wren:DS is an LDAPv3 compliant directory service, which has been developed for the Java platform, providing a high performance, highly available, and secure store for the identities managed by your organization. Its easy installation process, combined with the power of the Java platform makes Wren:DS the simplest, fastest directory to deploy and manage.

Acknowledgments

Wren:DS is standing on the shoulders of giants and is a continuation of a prior work:

  • OpenDS by Sun Microsystems
  • OpenDJ by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

+ + + + \ No newline at end of file diff --git a/projects/wrends/resources.html b/projects/wrends/resources.html new file mode 100644 index 0000000..fe4ab00 --- /dev/null +++ b/projects/wrends/resources.html @@ -0,0 +1,27 @@ + + + + + + Wren:DS | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Documentation

Project documentation can be found in our documentation platform (docs.wrensecurity.org).

+ + + + \ No newline at end of file diff --git a/projects/wrenicf/index.html b/projects/wrenicf/index.html new file mode 100644 index 0000000..f2254df --- /dev/null +++ b/projects/wrenicf/index.html @@ -0,0 +1,27 @@ + + + + + + Wren:ICF | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:ICF

Overview

Wren:ICF is an umbrella brand encompassing community-developed Identity Connector Framework as well as a set of production-ready connectors – LDAP, Office 365, SSH, SQL, PowerShell, REST and many more.

The main project is Wren:ICF Java Framework where the various parts of the framework (specification, APIs, SPIs and network protocol) are forged, and it also provides the default connector runtime environment for the Java world.

Wren:ICF .NET Framework is a connector framework implementation and runtime environment for Microsoft's .NET world.

Framework Features

Wren:ICF addresses the following topics:

  • connector specification – definition of connector interfaces and available operations
  • connector runtime environment – Java and .NET server implementations managing individual connectors, their discoverability and lifecycle (e.g. pooling)
  • remote connector protocol – low-level remote connector network protocol

Runtime environment manages individual connectors through connector SPI methods and offers their functionality through public API. Each connector works with a specific set of objects (e.g. accounts and groups) defined by self-described schema, and can implement one or more well defined operations.

Identity Connectors

Wren:ICF provides a set of common basic connectors and scriptable connectors with sample integrations:

  • LDAP Connector – integration with LDAP server (e.g. Active Directory)
  • CSV File Connector – reading and writing rows from a CSV file
  • Scriptable SSH Connector – custom remote shell invocations through managed JSch connection
  • Scriptable SQL Connector – custom database commands through managed JDBC connection
  • Scriptable REST Connector – custom calls through managed HTTP connection
  • Scriptable Groovy Connector – custom groovy scripts for Wren:ICF operations
  • Scriptable PowerShell Connector – custom PowerShell scripts for Wren:ICF operations

Many other connectors are available under Wren Security's GitHub organization or by third-party vendors.

Acknowledgments

Wren:ICF is standing on the shoulders of giants and is a continuation of a prior work:

  • Sun Identity Framework by Sun Microsystems
  • OpenICF by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

+ + + + \ No newline at end of file diff --git a/projects/wrenidm/download.html b/projects/wrenidm/download.html new file mode 100644 index 0000000..6acf86b --- /dev/null +++ b/projects/wrenidm/download.html @@ -0,0 +1,27 @@ + + + + + + Wren:IDM | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Getting Started

You can get Wren:IDM application in a few ways.

Download binary release

The easiest way to get the Wren:IDM is to download the latest binary release.

Docker image

You can also run Wren:IDM in a Docker container. Official Wren:IDM Docker images can be found on Docker Hub.

Build the source code

The last but not least you can create your own build from the source code. Manual how to build the source code can be found here.

+ + + + \ No newline at end of file diff --git a/projects/wrenidm/index.html b/projects/wrenidm/index.html new file mode 100644 index 0000000..32a3039 --- /dev/null +++ b/projects/wrenidm/index.html @@ -0,0 +1,27 @@ + + + + + + Wren:IDM | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:IDM

Overview

Wren:IDM is a community‐developed identity management system with a flexible data model, multiple extension points and scripting support, including JavaScript and Groovy. It can connect to and manage a wide range of systems through the Identity Connector Framework (Wren:ICF).

Wren:IDM is one of the projects in the Wren Security Suite, a community initiative that adopted open‐source projects formerly developed by ForgeRock, which has its own roots in Sun Microsystems’ products.

Wren:IDM itself is focused on identity management processes and it also provides a powerful framework for implementing IAG and a portion of IAM processes as well. Although the project is based on OpenIDM code, it is not affiliated with ForgeRock in any way. It is based on the very latest code available under a CDDL license (not‐yet‐released OpenIDM 5.x).

The features of Wren:IDM include:

  • A complete platform for building IDM and IG solutions using the concepts described below – roles, mappings, synchronizations, workflows, policies, etc.
  • ICF Connector Servers – services that allow connectors to be run outside of the IDM itself. Useful when a connector needs a specific client environment to talk to the integrated system. Also facilitates security. .NET and Java Connector Servers are available.
  • Administration GUI – an interface for making changes to data models and configuration using a point‐and‐click interface rather than Wren:IDM's REST interface.
  • Self‐service GUI – an interface for end‐users to update their profile information, passwords, and preferences.

Both the Administration GUI and Self‐Service GUI are web‐based, single‐page applications that can be turned off in deployments that do not desire to use them [1].

Acknowledgments

Large portions of the source code are based on the open-source projects previously released by:

  • Sun Microsystems
  • ForgeRock

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

+ + + + \ No newline at end of file diff --git a/projects/wrenidm/resources.html b/projects/wrenidm/resources.html new file mode 100644 index 0000000..3cfbdac --- /dev/null +++ b/projects/wrenidm/resources.html @@ -0,0 +1,27 @@ + + + + + + Wren:IDM | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Documentation

Project documentation can be found in our documentation platform (docs.wrensecurity.org). Repository hosting cookbook with common use cases is available on GitHub.

+ + + + \ No newline at end of file diff --git a/projects/wrenig/download.html b/projects/wrenig/download.html new file mode 100644 index 0000000..bce1366 --- /dev/null +++ b/projects/wrenig/download.html @@ -0,0 +1,27 @@ + + + + + + Wren:IG | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Getting Started

You can get Wren:IG application in a few ways.

Download binary release

The easiest way to get the Wren:IG is to download the latest binary release.

Docker image

You can also run Wren:IG in a Docker container. Official Wren:IG Docker images can be found on Docker Hub.

Build the source code

The last but not least you can create your own build from the source code. Manual how to build the source code can be found here.

+ + + + \ No newline at end of file diff --git a/projects/wrenig/index.html b/projects/wrenig/index.html new file mode 100644 index 0000000..7a10105 --- /dev/null +++ b/projects/wrenig/index.html @@ -0,0 +1,27 @@ + + + + + + Wren:IG | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Wren:IG

Overview

Wren:IG is a community‐developed reverse proxy server providing single sign-on (SSO) to any application behind the proxy.

Wren:IG includes a number of pre-built filters to transform data of intercepred requests / responses. Scripted filter allows you to easily create your own filter using the Groovy language.

The features of Wren:IG include:

  • Authentication / Authorization using industry-standard protocols (SAML 2.0, OAuth 2.0, OpenID Connect)
  • Single Sign-On (SSO)
  • Single Logout (SLO)
  • Session management
  • Password replay

Wren:IG is one of the projects in the Wren Security Suite, a community initiative that adopted open‐source projects formerly developed by ForgeRock.

Acknowledgments

Wren:IG is standing on the shoulders of giants and is a continuation of a prior work:

  • OpenIG by ForgeRock AS

We'd like to thank them for supporting the idea of open-source software.

Disclaimer

Please note that the acknowledged parties are not affiliated with this project. Their trade names, product names and trademarks should not be used to refer to the Wren Security products, as it might be considered an unfair commercial practice.

Wren Security is open source and always will be.

+ + + + \ No newline at end of file diff --git a/projects/wrenig/resources.html b/projects/wrenig/resources.html new file mode 100644 index 0000000..cca864d --- /dev/null +++ b/projects/wrenig/resources.html @@ -0,0 +1,27 @@ + + + + + + Wren:IG | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Documentation

Project documentation can be found in our documentation platform (docs.wrensecurity.org).

+ + + + \ No newline at end of file diff --git a/sponsors.html b/sponsors.html new file mode 100644 index 0000000..31a0ca0 --- /dev/null +++ b/sponsors.html @@ -0,0 +1,27 @@ + + + + + + Sponsors | Wren Security + + + + + + + + + + + + + + + + +
Skip to content

Sponsors

The following is a list of significant sponsors to Wren Security. Sponsors are listed in no particular order within each section.

Thank you

+ + + + \ No newline at end of file diff --git a/wren.png b/wren.png new file mode 100644 index 0000000..2722e00 Binary files /dev/null and b/wren.png differ diff --git a/wrensec-logo.png b/wrensec-logo.png new file mode 100644 index 0000000..f2be6d5 Binary files /dev/null and b/wrensec-logo.png differ