diff --git a/404.html b/404.html index 82346d31..19f0ef93 100644 --- a/404.html +++ b/404.html @@ -9,7 +9,7 @@ - + diff --git a/assets/js/cf2cc054.004aa2dd.js b/assets/js/cf2cc054.004aa2dd.js deleted file mode 100644 index e9ba3f14..00000000 --- a/assets/js/cf2cc054.004aa2dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdoks=self.webpackChunkdoks||[]).push([[5808],{76956:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var t=n(85893),o=n(11151);const l={id:"build",title:"Building your Plugin",sidebar_label:"On Building your Plugin"},r="Building your Plugin",a={id:"developers/python/plugin/build",title:"Building your Plugin",description:"Introduction",source:"@site/docs/developers/python/plugin/build.mdx",sourceDirName:"developers/python/plugin",slug:"/developers/python/plugin/build",permalink:"/docs/developers/python/plugin/build",draft:!1,unlisted:!1,editUrl:"https://github.com/arkitektio/arkitektio.github.io/edit/master/docs/developers/python/plugin/build.mdx",tags:[],version:"current",frontMatter:{id:"build",title:"Building your Plugin",sidebar_label:"On Building your Plugin"},sidebar:"tutorialSidebar",previous:{title:"Plugin Style",permalink:"/docs/developers/python/plugin/"},next:{title:"Lets get it rolling",permalink:"/docs/developers/python/plugin/more"}},s={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Packaging your Plugin",id:"packaging-your-plugin",level:2},{value:"Start Building",id:"start-building",level:3},{value:"The Dockerfile",id:"the-dockerfile",level:3},{value:"The config.yaml",id:"the-configyaml",level:3},{value:"Building the container",id:"building-the-container",level:3},{value:"Staging a build",id:"staging-a-build",level:3},{value:"Publishing a build",id:"publishing-a-build",level:3},{value:"Conclusion",id:"conclusion",level:3}];function d(e){const i={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"building-your-plugin",children:"Building your Plugin"}),"\n",(0,t.jsx)(i.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)(i.p,{children:"In this section, we will learn how to build an Arkitekt plugin from your python code.\nWe will also learn how to package and distribute your plugin so that it can be discovered and\nuser by others."}),"\n",(0,t.jsx)(i.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(i.p,{children:"Before we start, make sure you have created your plugin and have it working in your local environment.\nAlso check if that plugin is working with your local Arkitekt instance."}),"\n",(0,t.jsx)(i.h2,{id:"packaging-your-plugin",children:"Packaging your Plugin"}),"\n",(0,t.jsx)(i.p,{children:"To package your plugin, you will need to create a software container around your python app, that will include\nall the dependencies and the code. In a default configuration, Arkitekt uses Docker to build and run plugins."}),"\n",(0,t.jsx)(i.h3,{id:"start-building",children:"Start Building"}),"\n",(0,t.jsxs)(i.p,{children:["To start building your plugin, you will have to initialize a ",(0,t.jsx)(i.code,{children:"Builder"})," for your project. You can do this by running the following command:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port init\n"})}),"\n",(0,t.jsx)(i.p,{children:'This will ask you a few questions about your project and will create a new builder in your project ".arkitekt" directory. The content of\nthis directory will look something like this:'}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:".arkitekt\n\u251c\u2500\u2500 builders\n\u2502\xa0\xa0 \u251c\u2500\u2500 default\n\u2502\xa0\xa0 \u2502\xa0\xa0 \u251c\u2500\u2500 Dockerfile\n\u2502\xa0\xa0 \u2502\xa0\xa0 \u251c\u2500\u2500 config.yaml\n"})}),"\n",(0,t.jsxs)(i.p,{children:["This is your first builder. A builder is a way of bundling your code and dependencies into a container. The ",(0,t.jsx)(i.code,{children:"Dockerfile"})," is the file that\nwill be used to build the container. The ",(0,t.jsx)(i.code,{children:"config.yaml"})," file is the configuration file for the builder, and help the Arkitekt Server and\nconnected tools to understand if the build container fits the underlying hardware of the server."]}),"\n",(0,t.jsx)(i.admonition,{title:"On builders",type:"note",children:(0,t.jsxs)(i.p,{children:["You can have multiple builders in your project. Each builder can be used to build a different version of your plugin.\nFor example, you can have a builder that allows you to bundle your dockercontainer to support CUDA and another one that\nsupports only CPU. By specifiying the right ",(0,t.jsx)(i.code,{children:"selectors"})," in your ",(0,t.jsx)(i.code,{children:"config.yaml"})," file, you can make sure that the right builder\nis used for the right hardware of the server that is running your plugin."]})}),"\n",(0,t.jsx)(i.h3,{id:"the-dockerfile",children:"The Dockerfile"}),"\n",(0,t.jsxs)(i.p,{children:["The ",(0,t.jsx)(i.code,{children:"Dockerfile"})," is the file that will be used to build the container. It is a simple text file that contains a list of commands that\nthe Docker daemon will execute to build the container. Arkitekt has no specific requirements for the ",(0,t.jsx)(i.code,{children:"Dockerfile"}),", besides that you need\nto include the app.py and the .arkitekt folder in the container and that on execution it should be in the current working directory."]}),"\n",(0,t.jsxs)(i.p,{children:["A simple ",(0,t.jsx)(i.code,{children:"Dockerfile"})," for a python plugin could look like this:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-Dockerfile",children:"FROM python:3.8-slim\n\nRUN mkdir /app\nWORKDIR /app\nCOPY . /app\n\nRUN pip install --no-cache-dir -r requirements.txt\n\n"})}),"\n",(0,t.jsxs)(i.p,{children:["This ",(0,t.jsx)(i.code,{children:"Dockerfile"})," will create a container based on the ",(0,t.jsx)(i.code,{children:"python:3.8-slim"})," image, and will install the requirements from the ",(0,t.jsx)(i.code,{children:"requirements.txt"})," file\nthat is in the root of your project. It will also copy the rest of the files in the root of your project to the ",(0,t.jsx)(i.code,{children:"/app"})," directory in the container."]}),"\n",(0,t.jsx)(i.admonition,{title:"On Paths",type:"note",children:(0,t.jsxs)(i.p,{children:["The paths in the ",(0,t.jsx)(i.code,{children:"Dockerfile"})," are relative to the root of your project. This means that you need to have a ",(0,t.jsx)(i.code,{children:"requirements.txt"})," file in the root of your project,\nnot in the ",(0,t.jsx)(i.code,{children:".arkitekt"})," directory."]})}),"\n",(0,t.jsx)(i.h3,{id:"the-configyaml",children:"The config.yaml"}),"\n",(0,t.jsxs)(i.p,{children:["The ",(0,t.jsx)(i.code,{children:"config.yaml"})," file is the configuration file for the builder. It contains a list of selectors that will be used to determine if the builder\nis compatible with the server that is running the plugin. The ",(0,t.jsx)(i.code,{children:"config.yaml"})," file will look something like this:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"selectors:\n"})}),"\n",(0,t.jsx)(i.p,{children:"This file is empty by default. You can add selectors to the file to make sure that the builder is only used on servers that have the right hardware\nto run the container. For example, if you have a builder that supports CUDA, you can add a selector that checks if the server has a GPU:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"selectors:\n - type: cuda \n minimun_compute_capability: 3.5\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will make sure that the builder is only used on servers that have a GPU with a compute capability of 3.5 or higher.\nWe are still working on the documentation for the selectors, so for now, you can check the source code of the Arkitekt Server to see what selectors are available."}),"\n",(0,t.jsx)(i.h3,{id:"building-the-container",children:"Building the container"}),"\n",(0,t.jsx)(i.p,{children:"To build the container and your plugins, you can run the following command:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port build\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will build the container with your local docker daemon and add a new build in your local directory.\nImportantly this build is not yet published and uploaded and can only be used on your local machine."}),"\n",(0,t.jsx)(i.h3,{id:"staging-a-build",children:"Staging a build"}),"\n",(0,t.jsx)(i.p,{children:"Staging a Build allows you to test out your just build plugin against your local Arkitekt instance. To stage a build, you can run the following command:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port stage\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will run the container locally and will instruct it to connect to your local Arkitekt instance.\nThis will allow you to test your plugin in a real environment, as it would happen when you would publish your plugin.\nThis is a great way to test your plugin before you publish it."}),"\n",(0,t.jsx)(i.h3,{id:"publishing-a-build",children:"Publishing a build"}),"\n",(0,t.jsx)(i.p,{children:"To publish a build, you can run the following command:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port publish\n"})}),"\n",(0,t.jsx)(i.p,{children:'This is the final step in the process of building your plugin. This will upload your container to a registry, and will create\na new "deployment" of your plugin in the local directory. If you push your directory to a git repository, you can now point any\nArkitekt instance to this repository and it will be able to discover and use your plugin.'}),"\n",(0,t.jsx)(i.admonition,{title:"On Versioning",type:"warning",children:(0,t.jsxs)(i.p,{children:["While you can have multiple builds for the same version of your plugin, you can only have one deployment for a version of your plugin.\nSo if you want to publish a new version of your plugin, you will have to change the version in your ",(0,t.jsx)(i.code,{children:"manifest"})," by runnning\n",(0,t.jsx)(i.code,{children:"arkitekt manifest version patch"})," or ",(0,t.jsx)(i.code,{children:"arkitekt manifest version minor"})," or ",(0,t.jsx)(i.code,{children:"arkitekt manifest version major"})," and then build and publish your plugin again."]})}),"\n",(0,t.jsx)(i.admonition,{title:"On Registries",type:"note",children:(0,t.jsx)(i.p,{children:"The current publishing process only supports the Docker Hub as a registry and as we do not have a central repository for plugins yet, relies on\ngithub to host the metadata of the plugin. You can host this anywhere you want, as long as it is accessible by the Arkitekt Server, but hopefully\nwe will have a central repository for plugins in the future."})}),"\n",(0,t.jsx)(i.h3,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsx)(i.p,{children:"And thats it for building your plugin. Of course, this is a very basic example, and there are many more things you can do with the builder, but this should\nget you started. If you have any questions, feel free to ask in the community forums."})]})}function c(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>a,a:()=>r});var t=n(67294);const o={},l=t.createContext(o);function r(e){const i=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cf2cc054.4580dd42.js b/assets/js/cf2cc054.4580dd42.js new file mode 100644 index 00000000..df2730de --- /dev/null +++ b/assets/js/cf2cc054.4580dd42.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdoks=self.webpackChunkdoks||[]).push([[5808],{76956:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var t=n(85893),o=n(11151);const l={id:"build",title:"Building your Plugin",sidebar_label:"On Building your Plugin"},r="Building your Plugin",a={id:"developers/python/plugin/build",title:"Building your Plugin",description:"Introduction",source:"@site/docs/developers/python/plugin/build.mdx",sourceDirName:"developers/python/plugin",slug:"/developers/python/plugin/build",permalink:"/docs/developers/python/plugin/build",draft:!1,unlisted:!1,editUrl:"https://github.com/arkitektio/arkitektio.github.io/edit/master/docs/developers/python/plugin/build.mdx",tags:[],version:"current",frontMatter:{id:"build",title:"Building your Plugin",sidebar_label:"On Building your Plugin"},sidebar:"tutorialSidebar",previous:{title:"Plugin Style",permalink:"/docs/developers/python/plugin/"},next:{title:"Lets get it rolling",permalink:"/docs/developers/python/plugin/more"}},s={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Packaging your Plugin",id:"packaging-your-plugin",level:2},{value:"Start Building",id:"start-building",level:3},{value:"The Dockerfile",id:"the-dockerfile",level:3},{value:"The config.yaml",id:"the-configyaml",level:3},{value:"Building the container",id:"building-the-container",level:3},{value:"Staging a build",id:"staging-a-build",level:3},{value:"Publishing a build",id:"publishing-a-build",level:3},{value:"Conclusion",id:"conclusion",level:3}];function d(e){const i={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"building-your-plugin",children:"Building your Plugin"}),"\n",(0,t.jsx)(i.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)(i.p,{children:"In this section, we will learn how to build an Arkitekt plugin from your python code.\nWe will also learn how to package and distribute your plugin so that it can be discovered and\nuser by others."}),"\n",(0,t.jsx)(i.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(i.p,{children:"Before we start, make sure you have created your plugin and have it working in your local environment.\nAlso check if that plugin is working with your local Arkitekt instance."}),"\n",(0,t.jsx)(i.h2,{id:"packaging-your-plugin",children:"Packaging your Plugin"}),"\n",(0,t.jsx)(i.p,{children:"To package your plugin, you will need to create a software container around your python app, that will include\nall the dependencies and the code. In a default configuration, Arkitekt uses Docker to build and run plugins."}),"\n",(0,t.jsx)(i.h3,{id:"start-building",children:"Start Building"}),"\n",(0,t.jsxs)(i.p,{children:["To start building your plugin, you will have to initialize a ",(0,t.jsx)(i.code,{children:"Flavour"})," for your project. You can do this by running the following command:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port init\n"})}),"\n",(0,t.jsx)(i.p,{children:'This will ask you a few questions about your project and will create a new flavour in your project ".arkitekt" directory. The content of\nthis directory will look something like this:'}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:".arkitekt\n\u251c\u2500\u2500 flavours\n\u2502\xa0\xa0 \u251c\u2500\u2500 default\n\u2502\xa0\xa0 \u2502\xa0\xa0 \u251c\u2500\u2500 Dockerfile\n\u2502\xa0\xa0 \u2502\xa0\xa0 \u251c\u2500\u2500 config.yaml\n"})}),"\n",(0,t.jsxs)(i.p,{children:["This is your first flavour. A flavour is a way of bundling your code and dependencies into a container. The ",(0,t.jsx)(i.code,{children:"Dockerfile"})," is the file that\nwill be used to build the container. The ",(0,t.jsx)(i.code,{children:"config.yaml"})," file is the configuration file for the flavour, and help the Arkitekt Server and\nconnected tools to understand if the build flavour fits the underlying hardware of the server."]}),"\n",(0,t.jsx)(i.admonition,{title:"On Flavours",type:"note",children:(0,t.jsxs)(i.p,{children:["You can have multiple flavours in your project. Each flavour can be used to build a different version of your plugin.\nFor example, you can have a flavour that allows you to bundle your dockercontainer to support CUDA and another one that\nsupports only CPU. By specifiying the right ",(0,t.jsx)(i.code,{children:"selectors"})," in your ",(0,t.jsx)(i.code,{children:"config.yaml"})," file, you can make sure that the right Flavours\nis used for the right hardware of the server that is running your plugin."]})}),"\n",(0,t.jsx)(i.h3,{id:"the-dockerfile",children:"The Dockerfile"}),"\n",(0,t.jsxs)(i.p,{children:["The ",(0,t.jsx)(i.code,{children:"Dockerfile"})," is the file that will be used to build the container. It is a simple text file that contains a list of commands that\nthe Docker daemon will execute to build the container. Arkitekt has no specific requirements for the ",(0,t.jsx)(i.code,{children:"Dockerfile"}),", besides that you need\nto include the app.py and the .arkitekt folder in the container and that on execution it should be in the current working directory."]}),"\n",(0,t.jsxs)(i.p,{children:["A simple ",(0,t.jsx)(i.code,{children:"Dockerfile"})," for a python plugin could look like this:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-Dockerfile",children:"FROM python:3.8-slim\n\nRUN mkdir /app\nWORKDIR /app\nCOPY . /app\n\nRUN pip install --no-cache-dir -r requirements.txt\n\n"})}),"\n",(0,t.jsxs)(i.p,{children:["This ",(0,t.jsx)(i.code,{children:"Dockerfile"})," will create a container based on the ",(0,t.jsx)(i.code,{children:"python:3.8-slim"})," image, and will install the requirements from the ",(0,t.jsx)(i.code,{children:"requirements.txt"})," file\nthat is in the root of your project. It will also copy the rest of the files in the root of your project to the ",(0,t.jsx)(i.code,{children:"/app"})," directory in the container."]}),"\n",(0,t.jsx)(i.admonition,{title:"On Paths",type:"note",children:(0,t.jsxs)(i.p,{children:["The paths in the ",(0,t.jsx)(i.code,{children:"Dockerfile"})," are relative to the root of your project. This means that you need to have a ",(0,t.jsx)(i.code,{children:"requirements.txt"})," file in the root of your project,\nnot in the ",(0,t.jsx)(i.code,{children:".arkitekt"})," directory."]})}),"\n",(0,t.jsx)(i.h3,{id:"the-configyaml",children:"The config.yaml"}),"\n",(0,t.jsxs)(i.p,{children:["The ",(0,t.jsx)(i.code,{children:"config.yaml"})," file is the configuration file for the flavour. It contains a list of selectors that will be used to determine if the flavour\nis compatible with the server that is running the plugin. The ",(0,t.jsx)(i.code,{children:"config.yaml"})," file will look something like this:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"description: This is a vanilla flavour\ndockerfile: Dockerfile\nselectors: []\n"})}),"\n",(0,t.jsx)(i.p,{children:"This file is empty by default. You can add selectors to the file to make sure that the flavour is only used on servers that have the right hardware\nto run the container. For example, if you have a flavour that supports CUDA, you can add a selector that checks if the server has a GPU:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-yaml",children:"description: This is a cuda flavour\ndockerfile: Dockerfile\nselectors:\n - type: cuda\n min_compute_capability: 3.5\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will make sure that the flavour is only used on servers that have a GPU with a compute capability of 3.5 or higher.\nWe are still working on the documentation for the selectors, so for now, you can check the source code of the Arkitekt Server to see what selectors are available."}),"\n",(0,t.jsx)(i.h3,{id:"building-the-container",children:"Building the container"}),"\n",(0,t.jsx)(i.p,{children:"To build the container and your plugins, you can run the following command:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port build\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will build the container with your local docker daemon and add a new build in your local directory.\nImportantly this build is not yet published and uploaded and can only be used on your local machine."}),"\n",(0,t.jsx)(i.h3,{id:"staging-a-build",children:"Staging a build"}),"\n",(0,t.jsx)(i.p,{children:"Staging a Build allows you to test out your just build plugin against your local Arkitekt instance. To stage a build, you can run the following command:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port stage\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will run the container locally and will instruct it to connect to your local Arkitekt instance.\nThis will allow you to test your plugin in a real environment, as it would happen when you would publish your plugin.\nThis is a great way to test your plugin before you publish it."}),"\n",(0,t.jsx)(i.h3,{id:"publishing-a-build",children:"Publishing a build"}),"\n",(0,t.jsx)(i.p,{children:"To publish a build, you can run the following command:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"arkitekt port publish\n"})}),"\n",(0,t.jsx)(i.p,{children:'This is the final step in the process of building your plugin. This will upload your container to a registry, and will create\na new "deployment" of your plugin in the local directory. If you push your directory to a git repository, you can now point any\nArkitekt instance to this repository and it will be able to discover and use your plugin.'}),"\n",(0,t.jsx)(i.admonition,{title:"On Versioning",type:"warning",children:(0,t.jsxs)(i.p,{children:["While you can have multiple builds for the same version of your plugin, you can only have one deployment for a version of your plugin.\nSo if you want to publish a new version of your plugin, you will have to change the version in your ",(0,t.jsx)(i.code,{children:"manifest"})," by runnning\n",(0,t.jsx)(i.code,{children:"arkitekt manifest version patch"})," or ",(0,t.jsx)(i.code,{children:"arkitekt manifest version minor"})," or ",(0,t.jsx)(i.code,{children:"arkitekt manifest version major"})," and then build and publish your plugin again."]})}),"\n",(0,t.jsx)(i.admonition,{title:"On Registries",type:"note",children:(0,t.jsx)(i.p,{children:"The current publishing process only supports the Docker Hub as a registry and as we do not have a central repository for plugins yet, relies on\ngithub to host the metadata of the plugin. You can host this anywhere you want, as long as it is accessible by the Arkitekt Server, but hopefully\nwe will have a central repository for plugins in the future."})}),"\n",(0,t.jsx)(i.h3,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsx)(i.p,{children:"And thats it for building your plugin. Of course, this is a very basic example, and there are many more things you can do with the flavour, but this should\nget you started. If you have any questions, feel free to ask in the community forums."})]})}function c(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>a,a:()=>r});var t=n(67294);const o={},l=t.createContext(o);function r(e){const i=t.useContext(l);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(l.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.718dca4f.js b/assets/js/runtime~main.ff42fd54.js similarity index 99% rename from assets/js/runtime~main.718dca4f.js rename to assets/js/runtime~main.ff42fd54.js index e214e0ea..011fca74 100644 --- a/assets/js/runtime~main.718dca4f.js +++ b/assets/js/runtime~main.ff42fd54.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({1:"454dee58",28:"daa1994c",53:"935f2afb",264:"6814779d",316:"80db3030",424:"a665c5f1",533:"b2b675dd",677:"cdefd2fa",785:"58eae703",838:"cef38ef5",880:"27e978eb",885:"449cce70",929:"29fb8335",943:"8d1a0287",1034:"1181b089",1069:"abf3bc37",1173:"7b6f3062",1200:"b8bb9997",1287:"cb68eff2",1308:"52dfa0f5",1340:"3883e804",1437:"f5f0d232",1477:"b2f554cd",1479:"af1289e7",1541:"0f62fc02",1616:"97ee4e3a",1635:"7df4c860",1713:"a7023ddc",1761:"575bed5c",1854:"8d61d878",1864:"632e5743",1984:"f96a2b72",2088:"a56d56f0",2145:"ba3bf330",2241:"09c945ca",2297:"ef0d6bbb",2359:"cd4612b7",2409:"89d92de3",2490:"d05f8455",2535:"814f3328",2577:"7c296612",2687:"d9c6c13d",2688:"7b0550a4",2714:"2829418c",2776:"af26cbbe",2856:"48966710",2923:"66883665",2930:"0f13792b",3077:"7f423f2d",3085:"1f391b9e",3089:"a6aa9e1f",3203:"be27c345",3206:"f8409a7e",3237:"1df93b7f",3251:"15e447ea",3303:"a88d2383",3325:"e46f7dd0",3407:"486ba0d9",3464:"566460c9",3513:"45a67233",3518:"f4c97818",3541:"b0c4bc2e",3597:"b9e6a3e1",3608:"9e4087bc",3769:"fde100b6",3866:"e3f25138",3960:"492f4224",4013:"01a85c17",4261:"0b7a123e",4289:"7b72f809",4368:"a94703ab",4404:"82fea0af",4428:"938fdd70",4434:"a098b3b2",4474:"205e281e",4558:"be073b57",4646:"fbd36646",4702:"f1ee6339",4741:"68958c3d",4745:"b3fe7977",4936:"93b8056e",4967:"e5bfe64c",4974:"4b98998a",5006:"4a8d1adb",5123:"2a6019ce",5230:"37a3a4cd",5308:"ea0acf11",5490:"da97a5f8",5773:"ad06c551",5808:"cf2cc054",5856:"9520c4a3",5989:"32aed7c5",6103:"ccc49370",6108:"1e257955",6160:"a85c7d07",6205:"267b6d2c",6581:"cfea6d67",6587:"0a77dd79",6734:"2bd3efc0",7001:"295e763a",7079:"85685f30",7264:"5f60be0b",7414:"393be207",7461:"94cdff14",7482:"f79112e6",7494:"c123599e",7546:"821e21fd",7553:"9ef38842",7657:"dd3eaaea",7706:"862daaac",7841:"1b1ed653",7884:"26ab43aa",7918:"17896441",7920:"1a4e3797",7985:"2930934a",8129:"73a34c87",8139:"33d5dcdb",8248:"46a169c0",8275:"ae816f90",8316:"4c9087e1",8357:"213d75ee",8365:"736116e7",8400:"de2543ee",8518:"a7bd4aaa",8610:"6875c492",8886:"c3dca9f0",8942:"ca414ad3",8950:"0d04c8e2",9035:"4c9e35b1",9233:"42bccb52",9533:"adcb5c09",9538:"6cd30318",9659:"b25ffcae",9661:"5e95c892",9670:"c2c6cdfb",9700:"e16015ca",9717:"0c163dea",9781:"926b72eb",9817:"14eb3368",9843:"07209b1a"}[e]||e)+"."+{1:"5f5caaea",28:"3edbfca6",53:"4af21331",109:"65e044a1",132:"b0eefc34",264:"f70ed567",316:"c73e8c7e",424:"30b301c8",533:"7ee24a0a",677:"ad8bb116",724:"8e952d6c",768:"efa7c49b",785:"6f538a64",838:"bc745847",845:"703442ea",868:"2bd565e3",880:"a768f78d",885:"b70cca32",929:"70883419",943:"76ae244d",1034:"7aa73020",1069:"2c2b1c1a",1173:"e71652db",1200:"635ec063",1216:"e8671b59",1287:"27fdcd2a",1308:"7588ba14",1340:"e1bfdd13",1426:"c99ed026",1437:"ad4fed35",1441:"b0f448ec",1477:"aa43bc51",1479:"b94f333b",1504:"d0081fe1",1541:"48121b57",1574:"15085ad0",1616:"e5603f9d",1635:"690365f2",1644:"045d705a",1713:"7da7022c",1761:"837518e6",1763:"90c11cda",1854:"e526cc59",1864:"564f8445",1984:"9819184a",2088:"1a8cbb68",2098:"98bbf2c1",2145:"a9c4582c",2183:"c3486412",2198:"d7be4b07",2241:"d139daf6",2297:"73a96a41",2359:"5ab5ddf0",2409:"7c4d9843",2490:"ff6230cc",2535:"47e871fd",2573:"7a06f1d6",2577:"5c2481d1",2661:"a025e7ec",2687:"03767328",2688:"2a12f202",2693:"b5ac3f1a",2696:"816cf9c9",2700:"8b5d4d55",2714:"406defc6",2776:"8edf8c32",2856:"483f0a34",2923:"ba677c0f",2930:"b6b4fe04",3076:"2f5f0f73",3077:"0c382d79",3085:"9f75967b",3089:"578afea9",3203:"7e0b71f6",3206:"519f1137",3237:"2050a504",3251:"d343a810",3303:"7c19cccb",3325:"39b53a92",3343:"231ab063",3407:"a2f5f3de",3464:"a68c7f79",3513:"1dcaea7b",3518:"f8ea952d",3541:"f38eef78",3571:"5359f8d8",3597:"c06cd448",3608:"a116eb2c",3619:"f20a5b9e",3750:"93186b09",3769:"5652022f",3866:"75e947ab",3911:"186504d4",3960:"7580ca60",4013:"7cdc1b69",4178:"de014807",4238:"e0713479",4261:"59ac60d5",4289:"729299dc",4368:"47b83e1c",4404:"f1cdd4e1",4428:"3c01a1c4",4434:"1398f8f1",4474:"6d9ebded",4558:"4dfe643d",4646:"4372540c",4702:"991330b7",4706:"50e287ff",4707:"e5903143",4741:"f5ff71a3",4745:"384fc57b",4936:"67956637",4967:"bcc60a98",4974:"2f79e644",4980:"5df12923",5006:"3f598df3",5092:"c208c7ae",5123:"c9b99be3",5230:"7e188904",5250:"b77d214f",5269:"be8d10d4",5308:"e36defa7",5326:"002b023d",5398:"1878ccc3",5421:"97490379",5490:"37b1ed74",5739:"64054679",5773:"3e6107dd",5790:"ff39bfac",5808:"004aa2dd",5856:"e21233d6",5943:"ab5c215b",5989:"18e34596",5995:"8899e9e9",6079:"6e6cec22",6103:"094e4548",6105:"4833e8f3",6108:"e344572a",6160:"7455ce52",6205:"b2fce3c0",6255:"f7f54b88",6572:"7fcacb35",6581:"12f0bf60",6587:"24ee6cc8",6648:"c2170fff",6734:"88d1651e",6896:"0fcfd753",6920:"2dc25cb2",6945:"b47ddbd7",6985:"e6d7da33",7001:"56e6b875",7079:"d9009d71",7102:"3a673714",7264:"35bbbaf0",7414:"34d729ce",7461:"86b095fe",7471:"cf97fcaa",7480:"ef6ebc2d",7481:"419b374f",7482:"dc4e862e",7494:"7d5af90c",7546:"c6fb7f5b",7552:"1bfad473",7553:"2dfc2c6f",7588:"da2552c3",7591:"f0172564",7649:"b9a1b318",7657:"e3be3e35",7662:"b18d3691",7706:"ceabd655",7806:"1407e4a1",7841:"4ea00f60",7884:"2e7c16f8",7918:"648980ee",7920:"08128e2f",7936:"17002a7b",7985:"08665233",8016:"80742a8a",8129:"ae94e84b",8139:"f47c93d8",8248:"d1adcd07",8275:"b6c84097",8316:"05e66778",8357:"1ce87d09",8365:"773e9378",8400:"0d8a038e",8518:"5fdb2c9c",8610:"e6759fb9",8886:"5c80b916",8942:"78aba7ac",8950:"1fcf90d6",8955:"b68195a5",9035:"d635ba4a",9138:"ee36fe33",9233:"e05942d4",9533:"773e612b",9538:"664eeec6",9583:"3f21af4f",9659:"1a1e4fd0",9661:"f9268aec",9670:"1470dde8",9700:"2ccce6f3",9717:"12cc25ec",9744:"5a5f9d29",9781:"419156f0",9817:"77d6dcc9",9843:"ff0b912c",9863:"eaee8b50",9893:"f48c243c"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},f="doks:",r.l=(e,a,d,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",48966710:"2856",66883665:"2923","454dee58":"1",daa1994c:"28","935f2afb":"53","6814779d":"264","80db3030":"316",a665c5f1:"424",b2b675dd:"533",cdefd2fa:"677","58eae703":"785",cef38ef5:"838","27e978eb":"880","449cce70":"885","29fb8335":"929","8d1a0287":"943","1181b089":"1034",abf3bc37:"1069","7b6f3062":"1173",b8bb9997:"1200",cb68eff2:"1287","52dfa0f5":"1308","3883e804":"1340",f5f0d232:"1437",b2f554cd:"1477",af1289e7:"1479","0f62fc02":"1541","97ee4e3a":"1616","7df4c860":"1635",a7023ddc:"1713","575bed5c":"1761","8d61d878":"1854","632e5743":"1864",f96a2b72:"1984",a56d56f0:"2088",ba3bf330:"2145","09c945ca":"2241",ef0d6bbb:"2297",cd4612b7:"2359","89d92de3":"2409",d05f8455:"2490","814f3328":"2535","7c296612":"2577",d9c6c13d:"2687","7b0550a4":"2688","2829418c":"2714",af26cbbe:"2776","0f13792b":"2930","7f423f2d":"3077","1f391b9e":"3085",a6aa9e1f:"3089",be27c345:"3203",f8409a7e:"3206","1df93b7f":"3237","15e447ea":"3251",a88d2383:"3303",e46f7dd0:"3325","486ba0d9":"3407","566460c9":"3464","45a67233":"3513",f4c97818:"3518",b0c4bc2e:"3541",b9e6a3e1:"3597","9e4087bc":"3608",fde100b6:"3769",e3f25138:"3866","492f4224":"3960","01a85c17":"4013","0b7a123e":"4261","7b72f809":"4289",a94703ab:"4368","82fea0af":"4404","938fdd70":"4428",a098b3b2:"4434","205e281e":"4474",be073b57:"4558",fbd36646:"4646",f1ee6339:"4702","68958c3d":"4741",b3fe7977:"4745","93b8056e":"4936",e5bfe64c:"4967","4b98998a":"4974","4a8d1adb":"5006","2a6019ce":"5123","37a3a4cd":"5230",ea0acf11:"5308",da97a5f8:"5490",ad06c551:"5773",cf2cc054:"5808","9520c4a3":"5856","32aed7c5":"5989",ccc49370:"6103","1e257955":"6108",a85c7d07:"6160","267b6d2c":"6205",cfea6d67:"6581","0a77dd79":"6587","2bd3efc0":"6734","295e763a":"7001","85685f30":"7079","5f60be0b":"7264","393be207":"7414","94cdff14":"7461",f79112e6:"7482",c123599e:"7494","821e21fd":"7546","9ef38842":"7553",dd3eaaea:"7657","862daaac":"7706","1b1ed653":"7841","26ab43aa":"7884","1a4e3797":"7920","2930934a":"7985","73a34c87":"8129","33d5dcdb":"8139","46a169c0":"8248",ae816f90:"8275","4c9087e1":"8316","213d75ee":"8357","736116e7":"8365",de2543ee:"8400",a7bd4aaa:"8518","6875c492":"8610",c3dca9f0:"8886",ca414ad3:"8942","0d04c8e2":"8950","4c9e35b1":"9035","42bccb52":"9233",adcb5c09:"9533","6cd30318":"9538",b25ffcae:"9659","5e95c892":"9661",c2c6cdfb:"9670",e16015ca:"9700","0c163dea":"9717","926b72eb":"9781","14eb3368":"9817","07209b1a":"9843"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(d);n{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(d.exports,d,d.exports,r),d.loaded=!0,d.exports}r.m=b,r.c=t,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](d[o])))?d.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[d,c,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},d=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,d({}),d([]),d(d)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=d(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var d in a)r.o(a,d)&&!r.o(e,d)&&Object.defineProperty(e,d,{enumerable:!0,get:a[d]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,d)=>(r.f[d](e,a),a)),[])),r.u=e=>"assets/js/"+({1:"454dee58",28:"daa1994c",53:"935f2afb",264:"6814779d",316:"80db3030",424:"a665c5f1",533:"b2b675dd",677:"cdefd2fa",785:"58eae703",838:"cef38ef5",880:"27e978eb",885:"449cce70",929:"29fb8335",943:"8d1a0287",1034:"1181b089",1069:"abf3bc37",1173:"7b6f3062",1200:"b8bb9997",1287:"cb68eff2",1308:"52dfa0f5",1340:"3883e804",1437:"f5f0d232",1477:"b2f554cd",1479:"af1289e7",1541:"0f62fc02",1616:"97ee4e3a",1635:"7df4c860",1713:"a7023ddc",1761:"575bed5c",1854:"8d61d878",1864:"632e5743",1984:"f96a2b72",2088:"a56d56f0",2145:"ba3bf330",2241:"09c945ca",2297:"ef0d6bbb",2359:"cd4612b7",2409:"89d92de3",2490:"d05f8455",2535:"814f3328",2577:"7c296612",2687:"d9c6c13d",2688:"7b0550a4",2714:"2829418c",2776:"af26cbbe",2856:"48966710",2923:"66883665",2930:"0f13792b",3077:"7f423f2d",3085:"1f391b9e",3089:"a6aa9e1f",3203:"be27c345",3206:"f8409a7e",3237:"1df93b7f",3251:"15e447ea",3303:"a88d2383",3325:"e46f7dd0",3407:"486ba0d9",3464:"566460c9",3513:"45a67233",3518:"f4c97818",3541:"b0c4bc2e",3597:"b9e6a3e1",3608:"9e4087bc",3769:"fde100b6",3866:"e3f25138",3960:"492f4224",4013:"01a85c17",4261:"0b7a123e",4289:"7b72f809",4368:"a94703ab",4404:"82fea0af",4428:"938fdd70",4434:"a098b3b2",4474:"205e281e",4558:"be073b57",4646:"fbd36646",4702:"f1ee6339",4741:"68958c3d",4745:"b3fe7977",4936:"93b8056e",4967:"e5bfe64c",4974:"4b98998a",5006:"4a8d1adb",5123:"2a6019ce",5230:"37a3a4cd",5308:"ea0acf11",5490:"da97a5f8",5773:"ad06c551",5808:"cf2cc054",5856:"9520c4a3",5989:"32aed7c5",6103:"ccc49370",6108:"1e257955",6160:"a85c7d07",6205:"267b6d2c",6581:"cfea6d67",6587:"0a77dd79",6734:"2bd3efc0",7001:"295e763a",7079:"85685f30",7264:"5f60be0b",7414:"393be207",7461:"94cdff14",7482:"f79112e6",7494:"c123599e",7546:"821e21fd",7553:"9ef38842",7657:"dd3eaaea",7706:"862daaac",7841:"1b1ed653",7884:"26ab43aa",7918:"17896441",7920:"1a4e3797",7985:"2930934a",8129:"73a34c87",8139:"33d5dcdb",8248:"46a169c0",8275:"ae816f90",8316:"4c9087e1",8357:"213d75ee",8365:"736116e7",8400:"de2543ee",8518:"a7bd4aaa",8610:"6875c492",8886:"c3dca9f0",8942:"ca414ad3",8950:"0d04c8e2",9035:"4c9e35b1",9233:"42bccb52",9533:"adcb5c09",9538:"6cd30318",9659:"b25ffcae",9661:"5e95c892",9670:"c2c6cdfb",9700:"e16015ca",9717:"0c163dea",9781:"926b72eb",9817:"14eb3368",9843:"07209b1a"}[e]||e)+"."+{1:"5f5caaea",28:"3edbfca6",53:"4af21331",109:"65e044a1",132:"b0eefc34",264:"f70ed567",316:"c73e8c7e",424:"30b301c8",533:"7ee24a0a",677:"ad8bb116",724:"8e952d6c",768:"efa7c49b",785:"6f538a64",838:"bc745847",845:"703442ea",868:"2bd565e3",880:"a768f78d",885:"b70cca32",929:"70883419",943:"76ae244d",1034:"7aa73020",1069:"2c2b1c1a",1173:"e71652db",1200:"635ec063",1216:"e8671b59",1287:"27fdcd2a",1308:"7588ba14",1340:"e1bfdd13",1426:"c99ed026",1437:"ad4fed35",1441:"b0f448ec",1477:"aa43bc51",1479:"b94f333b",1504:"d0081fe1",1541:"48121b57",1574:"15085ad0",1616:"e5603f9d",1635:"690365f2",1644:"045d705a",1713:"7da7022c",1761:"837518e6",1763:"90c11cda",1854:"e526cc59",1864:"564f8445",1984:"9819184a",2088:"1a8cbb68",2098:"98bbf2c1",2145:"a9c4582c",2183:"c3486412",2198:"d7be4b07",2241:"d139daf6",2297:"73a96a41",2359:"5ab5ddf0",2409:"7c4d9843",2490:"ff6230cc",2535:"47e871fd",2573:"7a06f1d6",2577:"5c2481d1",2661:"a025e7ec",2687:"03767328",2688:"2a12f202",2693:"b5ac3f1a",2696:"816cf9c9",2700:"8b5d4d55",2714:"406defc6",2776:"8edf8c32",2856:"483f0a34",2923:"ba677c0f",2930:"b6b4fe04",3076:"2f5f0f73",3077:"0c382d79",3085:"9f75967b",3089:"578afea9",3203:"7e0b71f6",3206:"519f1137",3237:"2050a504",3251:"d343a810",3303:"7c19cccb",3325:"39b53a92",3343:"231ab063",3407:"a2f5f3de",3464:"a68c7f79",3513:"1dcaea7b",3518:"f8ea952d",3541:"f38eef78",3571:"5359f8d8",3597:"c06cd448",3608:"a116eb2c",3619:"f20a5b9e",3750:"93186b09",3769:"5652022f",3866:"75e947ab",3911:"186504d4",3960:"7580ca60",4013:"7cdc1b69",4178:"de014807",4238:"e0713479",4261:"59ac60d5",4289:"729299dc",4368:"47b83e1c",4404:"f1cdd4e1",4428:"3c01a1c4",4434:"1398f8f1",4474:"6d9ebded",4558:"4dfe643d",4646:"4372540c",4702:"991330b7",4706:"50e287ff",4707:"e5903143",4741:"f5ff71a3",4745:"384fc57b",4936:"67956637",4967:"bcc60a98",4974:"2f79e644",4980:"5df12923",5006:"3f598df3",5092:"c208c7ae",5123:"c9b99be3",5230:"7e188904",5250:"b77d214f",5269:"be8d10d4",5308:"e36defa7",5326:"002b023d",5398:"1878ccc3",5421:"97490379",5490:"37b1ed74",5739:"64054679",5773:"3e6107dd",5790:"ff39bfac",5808:"4580dd42",5856:"e21233d6",5943:"ab5c215b",5989:"18e34596",5995:"8899e9e9",6079:"6e6cec22",6103:"094e4548",6105:"4833e8f3",6108:"e344572a",6160:"7455ce52",6205:"b2fce3c0",6255:"f7f54b88",6572:"7fcacb35",6581:"12f0bf60",6587:"24ee6cc8",6648:"c2170fff",6734:"88d1651e",6896:"0fcfd753",6920:"2dc25cb2",6945:"b47ddbd7",6985:"e6d7da33",7001:"56e6b875",7079:"d9009d71",7102:"3a673714",7264:"35bbbaf0",7414:"34d729ce",7461:"86b095fe",7471:"cf97fcaa",7480:"ef6ebc2d",7481:"419b374f",7482:"dc4e862e",7494:"7d5af90c",7546:"c6fb7f5b",7552:"1bfad473",7553:"2dfc2c6f",7588:"da2552c3",7591:"f0172564",7649:"b9a1b318",7657:"e3be3e35",7662:"b18d3691",7706:"ceabd655",7806:"1407e4a1",7841:"4ea00f60",7884:"2e7c16f8",7918:"648980ee",7920:"08128e2f",7936:"17002a7b",7985:"08665233",8016:"80742a8a",8129:"ae94e84b",8139:"f47c93d8",8248:"d1adcd07",8275:"b6c84097",8316:"05e66778",8357:"1ce87d09",8365:"773e9378",8400:"0d8a038e",8518:"5fdb2c9c",8610:"e6759fb9",8886:"5c80b916",8942:"78aba7ac",8950:"1fcf90d6",8955:"b68195a5",9035:"d635ba4a",9138:"ee36fe33",9233:"e05942d4",9533:"773e612b",9538:"664eeec6",9583:"3f21af4f",9659:"1a1e4fd0",9661:"f9268aec",9670:"1470dde8",9700:"2ccce6f3",9717:"12cc25ec",9744:"5a5f9d29",9781:"419156f0",9817:"77d6dcc9",9843:"ff0b912c",9863:"eaee8b50",9893:"f48c243c"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},f="doks:",r.l=(e,a,d,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==d)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(d))),a)return a(d)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",48966710:"2856",66883665:"2923","454dee58":"1",daa1994c:"28","935f2afb":"53","6814779d":"264","80db3030":"316",a665c5f1:"424",b2b675dd:"533",cdefd2fa:"677","58eae703":"785",cef38ef5:"838","27e978eb":"880","449cce70":"885","29fb8335":"929","8d1a0287":"943","1181b089":"1034",abf3bc37:"1069","7b6f3062":"1173",b8bb9997:"1200",cb68eff2:"1287","52dfa0f5":"1308","3883e804":"1340",f5f0d232:"1437",b2f554cd:"1477",af1289e7:"1479","0f62fc02":"1541","97ee4e3a":"1616","7df4c860":"1635",a7023ddc:"1713","575bed5c":"1761","8d61d878":"1854","632e5743":"1864",f96a2b72:"1984",a56d56f0:"2088",ba3bf330:"2145","09c945ca":"2241",ef0d6bbb:"2297",cd4612b7:"2359","89d92de3":"2409",d05f8455:"2490","814f3328":"2535","7c296612":"2577",d9c6c13d:"2687","7b0550a4":"2688","2829418c":"2714",af26cbbe:"2776","0f13792b":"2930","7f423f2d":"3077","1f391b9e":"3085",a6aa9e1f:"3089",be27c345:"3203",f8409a7e:"3206","1df93b7f":"3237","15e447ea":"3251",a88d2383:"3303",e46f7dd0:"3325","486ba0d9":"3407","566460c9":"3464","45a67233":"3513",f4c97818:"3518",b0c4bc2e:"3541",b9e6a3e1:"3597","9e4087bc":"3608",fde100b6:"3769",e3f25138:"3866","492f4224":"3960","01a85c17":"4013","0b7a123e":"4261","7b72f809":"4289",a94703ab:"4368","82fea0af":"4404","938fdd70":"4428",a098b3b2:"4434","205e281e":"4474",be073b57:"4558",fbd36646:"4646",f1ee6339:"4702","68958c3d":"4741",b3fe7977:"4745","93b8056e":"4936",e5bfe64c:"4967","4b98998a":"4974","4a8d1adb":"5006","2a6019ce":"5123","37a3a4cd":"5230",ea0acf11:"5308",da97a5f8:"5490",ad06c551:"5773",cf2cc054:"5808","9520c4a3":"5856","32aed7c5":"5989",ccc49370:"6103","1e257955":"6108",a85c7d07:"6160","267b6d2c":"6205",cfea6d67:"6581","0a77dd79":"6587","2bd3efc0":"6734","295e763a":"7001","85685f30":"7079","5f60be0b":"7264","393be207":"7414","94cdff14":"7461",f79112e6:"7482",c123599e:"7494","821e21fd":"7546","9ef38842":"7553",dd3eaaea:"7657","862daaac":"7706","1b1ed653":"7841","26ab43aa":"7884","1a4e3797":"7920","2930934a":"7985","73a34c87":"8129","33d5dcdb":"8139","46a169c0":"8248",ae816f90:"8275","4c9087e1":"8316","213d75ee":"8357","736116e7":"8365",de2543ee:"8400",a7bd4aaa:"8518","6875c492":"8610",c3dca9f0:"8886",ca414ad3:"8942","0d04c8e2":"8950","4c9e35b1":"9035","42bccb52":"9233",adcb5c09:"9533","6cd30318":"9538",b25ffcae:"9659","5e95c892":"9661",c2c6cdfb:"9670",e16015ca:"9700","0c163dea":"9717","926b72eb":"9781","14eb3368":"9817","07209b1a":"9843"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,d)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)d.push(c[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((d,f)=>c=e[a]=[d,f]));d.push(c[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(d=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var f=d&&("load"===d.type?"missing":d.type),b=d&&d.target&&d.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,d)=>{var c,f,b=d[0],t=d[1],o=d[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(d);n