diff --git a/404.html b/404.html index 3894a8682..b0c91927f 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + diff --git a/assets/js/195b633a.12a376ca.js b/assets/js/195b633a.12a376ca.js new file mode 100644 index 000000000..5ffb9bdb4 --- /dev/null +++ b/assets/js/195b633a.12a376ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[9571],{36591:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var i=n(85893),s=n(11151);const o={id:"client_message_batching",sidebar_label:"Message batching control",title:"Message batching control"},a=void 0,r={id:"pro/client_message_batching",title:"Message batching control",description:"Centrifugo PRO provides advanced options to tweak connection message write behaviour.",source:"@site/docs/pro/client_msg_batching.md",sourceDirName:"pro",slug:"/pro/client_message_batching",permalink:"/docs/pro/client_message_batching",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/pro/client_msg_batching.md",tags:[],version:"current",frontMatter:{id:"client_message_batching",sidebar_label:"Message batching control",title:"Message batching control"},sidebar:"Pro",previous:{title:"Engine load optimizations",permalink:"/docs/pro/engine_optimizations"},next:{title:"Observability enhancements",permalink:"/docs/pro/observability_enhancements"}},c={},l=[{value:"client_write_delay",id:"client_write_delay",level:2},{value:"client_reply_without_queue",id:"client_reply_without_queue",level:2},{value:"client_max_messages_in_frame",id:"client_max_messages_in_frame",level:2}];function d(e){const t={admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Centrifugo PRO provides advanced options to tweak connection message write behaviour."}),"\n",(0,i.jsx)(t.p,{children:"By default, Centrifugo tries to write messages to clients as fast as possible. Centrifugo also does best effort combining different protocol messages into one transport frame (to reduce system calls and thus reduce CPU usage) without sacrificing delivery latency."}),"\n",(0,i.jsx)(t.p,{children:"But still in this model if you have a lot of messages sent to each individual connection, you may have a lot of write system calls. These system calls have an huge impact on the server CPU utilization. Sometimes you want to trade-off delivery latency in favour of lower CPU consumption by Centrifugo node. It's possible to do by telling Centrifugo to slow down message delivery and collect messages to larger batches before sending them towards individual client. To achieve that Centrifugo PRO exposes additional configuration options."}),"\n",(0,i.jsx)(t.p,{children:"We have customer reports showing that enabling options described here reduced total CPU usage of Centrifugo cluster by half. This may be a significant cost reduction at scale."}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsx)(t.p,{children:"Note, this is only useful when you have lots of messages per client. This specific feature won't be helpful with a case when the message is broadcasted towards many different connections as the feature described here only batches message writing it terms of a single socket."})}),"\n",(0,i.jsx)(t.h2,{id:"client_write_delay",children:"client_write_delay"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"client_write_delay"})," is a duration option, it is a time Centrifugo will try to collect messages inside each connection message write loop before sending them towards the connection."]}),"\n",(0,i.jsxs)(t.p,{children:["Enabling ",(0,i.jsx)(t.code,{children:"client_write_delay"})," may reduce CPU usage of both server and client in case of high message rate inside individual connections. The reduction happens due to the lesser number of system calls to execute. Enabling ",(0,i.jsx)(t.code,{children:"client_write_delay"})," limits the maximum throughput of messages towards the connection which may be achieved. For example, if ",(0,i.jsx)(t.code,{children:"client_write_delay"})," is 100ms then the max throughput per second will be ",(0,i.jsx)(t.code,{children:"(1000 / 100) * client_max_messages_in_frame"})," (16 by default), i.e. 160 messages per second. Though this should be more than enough for target Centrifugo use cases (frontend apps)."]}),"\n",(0,i.jsx)(t.p,{children:"Example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="config.json"',children:'{\n // Rest of config here ...\n "client_write_delay": "100ms"\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"client_reply_without_queue",children:"client_reply_without_queue"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"client_reply_without_queue"})," is a boolean option to not use client queue for replies to commands. When ",(0,i.jsx)(t.code,{children:"true"})," replies are written to the transport without going through the connection message queue."]}),"\n",(0,i.jsx)(t.h2,{id:"client_max_messages_in_frame",children:"client_max_messages_in_frame"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"client_max_messages_in_frame"})," is an integer option which controls the maximum number of messages which may be joined by Centrifugo into one transport frame. By default, 16. Use -1 for unlimited number."]})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var i=n(67294);const s={},o=i.createContext(s);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/195b633a.7d926ad5.js b/assets/js/195b633a.7d926ad5.js deleted file mode 100644 index 6c2d0a7ac..000000000 --- a/assets/js/195b633a.7d926ad5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[9571],{36591:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var i=n(85893),s=n(11151);const o={id:"client_message_batching",sidebar_label:"Message batching control",title:"Message batching control"},a=void 0,r={id:"pro/client_message_batching",title:"Message batching control",description:"Centrifugo PRO provides advanced options to tweak connection message write behaviour.",source:"@site/docs/pro/client_msg_batching.md",sourceDirName:"pro",slug:"/pro/client_message_batching",permalink:"/docs/pro/client_message_batching",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/pro/client_msg_batching.md",tags:[],version:"current",frontMatter:{id:"client_message_batching",sidebar_label:"Message batching control",title:"Message batching control"},sidebar:"Pro",previous:{title:"Engine load optimizations",permalink:"/docs/pro/engine_optimizations"},next:{title:"Observability enhancements",permalink:"/docs/pro/observability_enhancements"}},c={},l=[{value:"client_write_delay",id:"client_write_delay",level:2},{value:"client_reply_without_queue",id:"client_reply_without_queue",level:2},{value:"client_max_messages_in_frame",id:"client_max_messages_in_frame",level:2}];function d(e){const t={admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Centrifugo PRO provides advanced options to tweak connection message write behaviour."}),"\n",(0,i.jsx)(t.p,{children:"By default, Centrifugo tries to write messages to clients as fast as possible. Centrifugo also does best effort combining different protocol messages into one transport frame (to reduce system calls and thus reduce CPU usage) without sacrificing delivery latency."}),"\n",(0,i.jsx)(t.p,{children:"But still in this model if you have a lot of messages sent to each individual connection, you may have a lot of write system calls. These system calls have an huge impact on the server CPU utilization. Sometimes you want to trade-off delivery latency in favour of lower CPU consumption by Centrifugo node. It's possible to do by telling Centrifugo to slow down message delivery and collect messages to larger batches before sending them towards individual client. To achieve that Centrifugo PRO exposes additional configuration options."}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsx)(t.p,{children:"Note, this is only useful when you have lots of messages per client. This specific feature won't be helpful with a case when the message is broadcasted towards many different connections as the feature described here only batches message writing it terms of a single socket."})}),"\n",(0,i.jsx)(t.h2,{id:"client_write_delay",children:"client_write_delay"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"client_write_delay"})," is a duration option, it is a time Centrifugo will try to collect messages inside each connection message write loop before sending them towards the connection."]}),"\n",(0,i.jsxs)(t.p,{children:["Enabling ",(0,i.jsx)(t.code,{children:"client_write_delay"})," may reduce CPU usage of both server and client in case of high message rate inside individual connections. The reduction happens due to the lesser number of system calls to execute. Enabling ",(0,i.jsx)(t.code,{children:"client_write_delay"})," limits the maximum throughput of messages towards the connection which may be achieved. For example, if ",(0,i.jsx)(t.code,{children:"client_write_delay"})," is 100ms then the max throughput per second will be ",(0,i.jsx)(t.code,{children:"(1000 / 100) * client_max_messages_in_frame"})," (16 by default), i.e. 160 messages per second. Though this should be more than enough for target Centrifugo use cases (frontend apps)."]}),"\n",(0,i.jsx)(t.p,{children:"Example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",metastring:'title="config.json"',children:'{\n // Rest of config here ...\n "client_write_delay": "100ms"\n}\n'})}),"\n",(0,i.jsx)(t.h2,{id:"client_reply_without_queue",children:"client_reply_without_queue"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"client_reply_without_queue"})," is a boolean option to not use client queue for replies to commands. When ",(0,i.jsx)(t.code,{children:"true"})," replies are written to the transport without going through the connection message queue."]}),"\n",(0,i.jsx)(t.h2,{id:"client_max_messages_in_frame",children:"client_max_messages_in_frame"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"client_max_messages_in_frame"})," is an integer option which controls the maximum number of messages which may be joined by Centrifugo into one transport frame. By default, 16. Use -1 for unlimited number."]})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var i=n(67294);const s={},o=i.createContext(s);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9dd8a0d2.a0bac9de.js b/assets/js/9dd8a0d2.82de9114.js similarity index 90% rename from assets/js/9dd8a0d2.a0bac9de.js rename to assets/js/9dd8a0d2.82de9114.js index 29057f572..ee3056f22 100644 --- a/assets/js/9dd8a0d2.a0bac9de.js +++ b/assets/js/9dd8a0d2.82de9114.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[7054,8951,2278,9523,4968,2438,9217],{59250:(e,t,s)=>{s.r(t),s.d(t,{default:()=>a});s(67294);var i=s(86010);const n={featureTitle:"featureTitle_fCfN",featureContent:"featureContent_FT24",featureContentReversed:"featureContentReversed_juV3",featureImage:"featureImage_lJJP",darkSection:"darkSection_dAst",featureImageReversed:"featureImageReversed_n2Vd"};var r=s(85893);function a(e){let{reversed:t,title:s,img:a,text:o,isDark:c}=e;const l=(0,r.jsx)("div",{className:(0,i.Z)("col col--6",n.featureImage,t?n.featureImageReversed:""),children:a}),h=(0,r.jsxs)("div",{className:(0,i.Z)("col col--6",n.featureContent,t?n.featureContentReversed:""),children:[(0,r.jsx)("h3",{className:n.featureTitle,children:s}),o]});return(0,r.jsx)("section",{className:(0,i.Z)("highlightSection",c?n.darkSection+" darkSection":""),children:(0,r.jsx)("div",{className:"container",children:(0,r.jsx)("div",{className:"row",children:t?(0,r.jsxs)(r.Fragment,{children:[h,l]}):(0,r.jsxs)(r.Fragment,{children:[l,h]})})})})}},53225:(e,t,s)=>{s.r(t),s.d(t,{default:()=>m});var i=s(67294),n=s(85893);function r(e,t){return Math.floor(Math.random()*(t-e+1)+e)}function a(e,t,s,i){const n=i*Math.PI/180;return[e+s*Math.cos(n),t+s*Math.sin(n)]}function o(e,t,s,i){return 180*Math.atan2(i-t,s-e)/Math.PI}function c(e,t,s,i,n,r,a,o,c,l,h,d){this.ctx=e,this.init(t,s,i,n,r,a,o,c,l,h,d)}function l(e,t,s,i,n,r){this.ctx=e,this.init(t,s,i,n,r)}function h(e,t,s,i,n,r){e.beginPath(),e.moveTo(t,s),e.lineTo(i,n),e.lineWidth=r,e.strokeStyle="#F6CFC7",e.stroke();const a=e.createLinearGradient(t,s,i,n);a.addColorStop(0,"#F60809"),a.addColorStop(1,"#F6B9BD"),e.strokeStyle=a,e.lineWidth=r,e.shadowBlur=10,e.shadowColor="red",e.stroke()}function d(e,t,i,n){const a=e.getContext("2d"),o=t/2,d=i/2;let u,m,f;n?(u="#8d3838",m="#6e2b2b",f="#6e2b2b"):(u="#ffd4d4",m="#e6e8eb",f="#ffd4d4");const p=[],g=[],v=i/7,x=v/15,C=s.g.requestAnimationFrame||s.g.mozRequestAnimationFrame||s.g.webkitRequestAnimationFrame||s.g.msRequestAnimationFrame||function(e){setTimeout(e,17)};for(let s=0;s<3;s+=1){const e=new l(a,t,i,r(0,t),r(0,i),u);p.push(e)}g.push(new c(a,t,i,o,d,v,2.65*v,9*x,0,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,2.65*v,9*x,90,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,2.65*v,9*x,180,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,2.65*v,9*x,270,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,1.45*v,8*x,45,1.5,2,f)),g.push(new c(a,t,i,o,d,v,1.45*v,8*x,135,1.5,2,f)),g.push(new c(a,t,i,o,d,v,1.45*v,8*x,225,1.5,2,f));let b=0;const w="up"==localStorage.getItem("lights");C((function s(r){if(t<=1)return;const o=(r-b)/1e3;if(null!==e.offsetParent){a.clearRect(0,0,t,i);for(let e=0;e1280?(Math.random()>.95&&function(e,t,s){const i=t/2+30*(.5-Math.random()),n=s/2+30*(.5-Math.random()),r=Math.floor(10*Math.random())+2;let a=i,o=n;const c=Math.random()*Math.PI*2;e.globalCompositeOperation="lighter";for(let l=0;l.7&&h(e,a,o,a+Math.cos(s+Math.PI/4)*t,o+Math.sin(s+Math.PI/4)*t,3),Math.random()>.7&&h(e,a,o,a+Math.cos(s-Math.PI/4)*t,o+Math.sin(s-Math.PI/4)*t,3),Math.random()>.7&&h(e,a,o,a+Math.cos(s-Math.PI/4)*t,o+Math.sin(s-Math.PI/4)*t,3),a=i,o=n}e.globalCompositeOperation="source-over"}(a,t,i),a.shadowBlur=100):a.shadowBlur=0}b=r,C(s)}))}let u;if(c.prototype.init=function(e,t,s,i,n,r,a,o,c,l,h){this.X=e,this.Y=t,this.radius=n,this.x=s,this.y=i,this.r=r,this.w=a,this.c=h,this.rotate=o,this.speed=60*c,this.angleDiff=l,this.a=0},c.prototype.drawSegment=function(e,t,s){this.ctx.translate(this.x,this.y),this.ctx.rotate(s*Math.PI/180),this.ctx.translate(-this.x,-this.y),this.ctx.beginPath();const i=a(this.x,this.y,this.r,e),n=i[0],r=i[1],c=a(this.x,this.y,this.r,t),l=c[0],h=c[1],d=n-this.w,u=h-this.w,m=o(this.x,this.y,d,r),f=o(this.x,this.y,l,u),p=t*Math.PI/180,g=e*Math.PI/180,v=m*Math.PI/180,x=f*Math.PI/180;this.ctx.arc(this.x,this.y,this.r,p,g,!0),this.ctx.arc(this.x,this.y,this.r-this.w,v,x,!1),this.ctx.closePath(),this.ctx.fillStyle=this.c,this.ctx.fill(),this.ctx.stroke()},c.prototype.draw=function(){this.ctx.save(),this.ctx.lineWidth=3,this.ctx.strokeStyle=this.c,this.ctx.shadowColor=this.c,this.drawSegment(4+this.angleDiff,86-this.angleDiff,this.rotate+this.a),this.ctx.restore()},c.prototype.resize=function(){this.x=this.X/2,this.y=this.Y/2},c.prototype.updateParams=function(e){this.a+=this.speed*e*this.radius/this.r},c.prototype.render=function(e){this.updateParams(e),this.draw()},l.prototype.init=function(e,t,s,i,n){this.X=e,this.Y=t,this.x=s,this.y=i,this.c=n,this.lw=1,this.v={x:100*Math.random(),y:100*Math.random()}},l.prototype.draw=function(){this.ctx.save(),this.ctx.lineWidth=this.lw,this.ctx.strokeStyle=this.c,this.ctx.beginPath(),this.ctx.moveTo(0,this.y),this.ctx.lineTo(this.X,this.y),this.ctx.stroke(),this.ctx.lineWidth=this.lw,this.ctx.beginPath(),this.ctx.moveTo(this.x,0),this.ctx.lineTo(this.x,this.Y),this.ctx.stroke(),this.ctx.restore()},l.prototype.updatePosition=function(e){this.x+=this.v.x*e,this.y+=this.v.y*e},l.prototype.wrapPosition=function(){this.x<0&&(this.x=this.X),this.x>this.X&&(this.x=0),this.y<0&&(this.y=this.Y),this.y>this.Y&&(this.y=0)},l.prototype.render=function(e){this.updatePosition(e),this.wrapPosition(),this.draw()},s.g.window||process&&process.browser){u=new MutationObserver((function(e){e.forEach((function(e){"attributes"==e.type&&window.dispatchEvent(new Event("resized"))}))}));const e=document.querySelector("html");u.observe(e,{attributes:!0})}const m=e=>{const[t,r]=i.useState({x:1,y:1}),a=i.useRef(null),o=()=>{null!==a.current&&(a.current.width=a.current.clientWidth,a.current.height=a.current.clientHeight,r({x:a.current?a.current.clientWidth:0,y:a.current?a.current.clientHeight:0}))};return i.useEffect((()=>o()),[]),(s.g.window||process&&process.browser)&&(i.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o)))),i.useEffect((()=>(window.addEventListener("resized",o),()=>window.removeEventListener("resized",o))))),i.useEffect((()=>{d(a.current,t.x,t.y,e.isDarkTheme)}),[t]),(0,n.jsx)("canvas",{ref:a,style:{width:"100%",height:"100%"}})}},63349:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 140 40",children:(0,i.jsx)("path",{fill:"#000000",d:"M18.412 12.216c-4.287 0-5.808 3.454-5.912 3.707a6.332 6.332 0 0 0-5.91-3.707 6.627 6.627 0 0 0-4.653 2.01A6.856 6.856 0 0 0 0 18.975c0 7.282 6.87 13.184 12.5 13.184 5.628 0 12.5-5.902 12.5-13.184a6.856 6.856 0 0 0-1.937-4.748 6.627 6.627 0 0 0-4.65-2.01zm1.13 7.037c0 1.9-0.742 3.722-2.063 5.065a6.983 6.983 0 0 1-4.98 2.099 6.983 6.983 0 0 1-4.98-2.099 7.226 7.226 0 0 1-2.062-5.065v-0.205h2.49v0.205A4.674 4.674 0 0 0 9.28 22.53a4.517 4.517 0 0 0 3.221 1.357 4.517 4.517 0 0 0 3.221-1.357 4.675 4.675 0 0 0 1.335-3.277v-0.205h2.49l-0.006 0.205zm110.438-7.03c-5.791 0-10.02 4.252-10.02 9.988 0 5.735 4.232 9.989 10.02 9.989 5.788 0 10.02-4.252 10.02-9.99 0-5.836-4.23-9.986-10.02-9.986zm0 15.93c-3.174 0-5.338-2.458-5.338-5.942 0-3.485 2.164-5.94 5.338-5.94s5.337 2.458 5.337 5.94c0 3.481-2.166 5.943-5.337 5.943zm-22.251-15.93c-5.79 0-10.02 4.252-10.02 9.988 0 5.735 4.232 9.989 10.02 9.989 5.788 0 10.023-4.252 10.023-9.99-0.008-5.836-4.237-9.986-10.023-9.986zm0 15.93c-3.172 0-5.337-2.458-5.337-5.942 0-3.485 2.165-5.94 5.337-5.94 3.172 0 5.337 2.458 5.337 5.94 0 3.481-2.17 5.943-5.337 5.943zm-65.012-15.93c-3.122 0-5.44 1.383-6.799 3.74V7h-4.232v14.7c0 6.248 3.625 10.5 9.868 10.5 5.136 0 9.92-3.74 9.92-10.09-0.007-5.379-3.168-9.886-8.757-9.886zm-1.208 15.725c-3.423 0-5.387-2.509-5.387-5.737 0-3.277 1.912-5.94 5.337-5.94 3.274 0 5.338 2.663 5.338 5.94-0.002 3.228-1.865 5.738-5.288 5.738zm22.104-15.724c-5.136 0-9.92 3.74-9.92 10.09 0 5.379 3.171 9.876 8.763 9.876 3.121 0 5.437-1.383 6.796-3.74v3.545h4.232v-9.27c-0.002-6.25-3.627-10.501-9.87-10.501zm0 15.93c-3.373 0-5.228-2.563-5.228-5.84 0-3.226 1.865-5.839 5.288-5.839s5.387 2.51 5.387 5.736c-0.01 3.279-2.024 5.943-5.447 5.943zM91.256 7v8.964c-1.359-2.358-3.674-3.74-6.796-3.74-5.591 0-8.763 4.507-8.763 9.875 0 6.455 4.481 10.09 9.709 10.09 6.244 0 10.07-4.25 10.07-10.5V7.003L91.256 7zm-5.589 20.948c-3.423 0-5.287-2.509-5.287-5.737 0-3.277 2.066-5.94 5.337-5.94 3.426 0 5.338 2.612 5.338 5.94-0.005 3.228-1.965 5.738-5.388 5.738z"})})}},50650:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"108",height:"39",stroke:"#000",strokeLinecap:"round",strokeLinejoin:"round",fill:"#fff",fillRule:"evenodd",children:[(0,i.jsx)("defs",{children:(0,i.jsx)("clipPath",{id:"A",children:(0,i.jsx)("path",{d:"M15.7566 4.3862l-.0308.1504-.4803.1427-.6616.2276-.6558.2662c-.4359.1871-.868.3974-1.2904.6346l-1.2036.7561-.1003-.0463c-3.9985-1.5276-7.5494.3106-7.5494.3106-.3241 4.253 1.597 6.9341 1.977 7.4202l-.2642.7966c-.2951.9644-.517 1.9539-.6539 2.9762l-.054.4436C1.0956 20.2894 0 24.0294 0 24.0294c3.0842 3.5471 6.6795 3.767 6.6795 3.767s.0058-.0058.0097-.0077c.4571.8159.9856 1.5932 1.5816 2.3165l.7831.8795c-1.1245 3.2154.1582 5.8907.1582 5.8907 3.4333.1292 5.6881-1.5026 6.1626-1.8787l1.0377.3086c1.0551.272 2.1352.4321 3.2154.4784l.8081.0154h.1312l.0849-.0019.1697-.0058.1678-.0077.0039.0058c1.6164 2.3068 4.4614 2.6328 4.4614 2.6328 2.0233-2.1333 2.139-4.2492 2.139-4.7063h0v-.0309l-.0019-.0636-.0058-.0984c.4244-.2971.8294-.6172 1.2133-.9606a12.606 12.606 0 0 0 2.1043-2.4669l.162-.2566c2.2896.1312 3.904-1.4177 3.904-1.4177-.38-2.3859-1.7398-3.549-2.0233-3.7689h0s-.0116-.0096-.029-.0212l-.027-.0193-.0501-.0328.0347-.4301.0251-.7696-.002-.191-.0019-.0964v-.0483l-.0019-.0655-.0077-.1601-.0116-.2161-.0154-.2063-.0193-.1987-.0232-.1987-.027-.1967-.1485-.7793c-.2392-1.028-.6404-2.004-1.1708-2.8816s-1.1901-1.655-1.9327-2.3089-1.5758-1.1823-2.4496-1.5758-1.7919-.6462-2.7062-.7619c-.4571-.0598-.9123-.0829-1.3636-.0771l-.1678.0038-.0425.0019-.0579.002-.0694.0038-.1678.0116-.1852.0154-.6886.0965c-.9065.1697-1.7629.4976-2.5171.949s-1.41 1.0165-1.9442 1.6568-.9471 1.3463-1.2326 2.0793-.4455 1.4891-.4899 2.2239l-.0116.5478.0039.1351.0058.1465.0212.2624a5.907 5.907 0 0 0 .2045 1.0743c.1986.6886.5188 1.3116.9123 1.8401s.8641.9683 1.3637 1.3097 1.0338.5864 1.5623.7426a5.434 5.434 0 0 0 1.5528.2218l.1851-.0038.0984-.0039.0984-.0058.1581-.0154c.0116 0 .0289-.0039.0444-.0058l.0482-.0058.0964-.0135c.0656-.0077.1216-.0212.1794-.0309l.1736-.0385c.1138-.0251.2238-.0598.3337-.0926.216-.0714.4186-.1582.6076-.2546s.3626-.2064.5246-.3202l.135-.1022a.395.395 0 0 0 .0618-.5594c-.1216-.1485-.3299-.1871-.4957-.0945l-.1254.0656c-.1447.0694-.2951.135-.4552.1871s-.326.0926-.4996.1234l-.2623.0328c-.0444.0058-.0887.0077-.135.0077l-.1331.0039c-.0424 0-.0849-.0019-.1292-.0019l-.1621-.0078s-.027 0-.0058-.0019l-.0173-.0019-.0367-.0039-.0733-.0077-.1446-.0193c-.3877-.054-.7812-.1678-1.1592-.3395s-.7426-.4069-1.0705-.7021-.6134-.648-.8372-1.0492-.38-.8449-.4532-1.3116c-.0367-.2334-.0521-.4745-.0463-.7099l.0096-.1948c0 .0174.0019-.0096.0019-.0115l.002-.0232.0038-.0482.0097-.0964.0559-.382c.1794-1.0164.6886-2.0079 1.4756-2.762.1967-.1871.4089-.3627.6345-.517s.4668-.2932.7176-.4089.513-.2102.7812-.2835.5439-.1196.8236-.1447l.4204-.0173.0946.0019.1138.0038.0713.002c.029 0 0 0 .0135.0019l.029.0019.1138.0077c.3028.0251.6056.0676.9027.1351a6.44 6.44 0 0 1 1.7147.65c1.0802.5979 2.0002 1.5334 2.5653 2.6618a6.08 6.08 0 0 1 .5825 1.7919l.056.4725.0096.1196.0058.1196.0039.1196.0019.1119v.1022l-.0019.1157-.0135.2797-.0502.5169-.081.5092-.1138.5015c-.0829.3337-.1909.6597-.3163.9799-.2527.6403-.5902 1.2479-.9972 1.8092-.8159 1.1207-1.9288 2.0369-3.1942 2.6117-.6326.2854-1.3.4957-1.9867.6095-.3433.0578-.6905.0925-1.0377.1041l-.0636.002h-.056l-.1118.0019h-.1717-.0849c.0483 0-.0077 0-.0058-.0019l-.0347-.002-.5574-.027c-.7426-.0559-1.4775-.1871-2.1892-.3954s-1.4023-.4822-2.0562-.8294c-1.3058-.6982-2.4727-1.6549-3.387-2.8084-.4591-.5748-.8603-1.192-1.192-1.842s-.5922-1.3309-.7851-2.0272-.3105-1.41-.3568-2.1275l-.0077-.135-.0019-.0328v-.029l-.0019-.0597-.0039-.1177-.0019-.0289v-.0405-.083l-.002-.1678v-.0328c0 .0058 0 .0058 0-.0115v-.0656l.0058-.2623.0888-1.0841.1813-1.0955.2642-1.0763c.2025-.7079.4552-1.3946.7542-2.0426.5998-1.2982 1.3868-2.4419 2.3319-3.3639l.7349-.6539c.2546-.2045.5189-.3935.7908-.5709s.5497-.3414.8371-.4919l.436-.216.2218-.0984.2237-.0945c.299-.1273.6076-.2334.9162-.3337l.2334-.0714.2353-.0655.4745-.1216.2392-.052.2411-.0502.2411-.0443.1215-.0213.1215-.0192.2431-.0367.2739-.0366.2719-.0328.1717-.0174.1138-.0116.0578-.0058.0676-.0038.2758-.0174.137-.0096s.0501-.0019.0057-.0019l.029-.002.0578-.0019.2353-.0116h.9297c.6153.0251 1.2191.0926 1.8054.2006 1.1747.218 2.2799.596 3.279 1.0898s1.898 1.0917 2.6773 1.7456l.1446.1234.1408.1254.2759.2527.2661.2565.2546.2604.9124 1.0609c.5536.7117.9953 1.4292 1.3482 2.1082l.0656.1273.0617.1273.1196.2488.1138.245.1042.2392.3491.9065.3723 1.2383a.304.304 0 0 0 .3221.2276c.1543-.0135.2719-.1408.2758-.2951.0077-.3877-.0019-.8448-.0463-1.3656-.0579-.6442-.1678-1.3907-.3858-2.2104s-.5323-1.7167-.9952-2.6483-1.0705-1.898-1.8575-2.8335a14.502 14.502 0 0 0-1.0049-1.0821c.54-2.1487-.6578-4.0119-.6578-4.0119-2.0677-.1293-3.3831.6423-3.8711.9952l-.2469-.1041-1.086-.3935-1.1399-.3163-1.1881-.2295-.2122-.0309C21.7862 1.2055 19.1957 0 19.1957 0c-2.8894 1.8227-3.4391 4.3862-3.4391 4.3862",stroke:"none",strokeLinejoin:"miter",strokeLinecap:"butt",fill:"#000",fillRule:"nonzero",strokeWidth:".0193",transform:"translate(0 .0077)"})})}),(0,i.jsxs)("g",{fill:"#000",stroke:"none",fillRule:"nonzero",children:[(0,i.jsx)("path",{d:"M55.4146 19.4587c-.1404 3.6146-2.9917 6.4302-6.5348 6.4302-3.7396 0-6.5195-3.0275-6.5195-6.6778 0-3.686 3.0096-6.7135 6.6778-6.7135 1.6567 0 3.2776.7122 4.6484 1.9936l-1.0696 1.3172c-1.0517-.9087-2.3153-1.5316-3.5788-1.5316-2.6905 0-4.8986 2.2081-4.8986 4.9343 0 2.7594 2.083 4.8986 4.7378 4.8986 2.3867 0 4.2578-1.7461 4.6305-3.9898h-5.4117v-1.5853h7.3211v.9241zm6.2157-.873h-.9981c-1.1028 0-1.9936.8935-1.9936 1.9937v5.1997h-1.7818v-8.9062h1.4601v.7479c.4799-.4799 1.2457-.7479 2.1009-.7479h1.9221zm9.7053 7.1959h-1.5138v-1.1231c-1.1717 1.1436-3.0172 1.6924-4.8883.8704-1.3861-.6101-2.4174-1.8736-2.6931-3.3644-.5309-2.8794 1.6848-5.4346 4.5157-5.4346 1.1921 0 2.2616.4799 3.0453 1.2636v-1.1232h1.5316v8.9113zM69.513 21.968c.4211-1.8099-.9497-3.4538-2.7365-3.4538-1.5495 0-2.7952 1.2636-2.7952 2.7952 0 1.7332 1.524 3.0734 3.2955 2.7722 1.09-.1864 1.986-1.0339 2.2362-2.1136m5.4116-5.5903v.4978h2.8309v1.5673h-2.8309v7.3389h-1.7639v-9.3504c0-1.9604 1.4065-3.1168 3.1704-3.1168h2.1366l-.7122 1.6746h-1.4218c-.7837 0-1.4091.6228-1.4091 1.3886m12.2707 9.4039h-1.5138v-1.1231c-1.1717 1.1436-3.0172 1.6924-4.8883.8704-1.3861-.6101-2.4174-1.8736-2.6931-3.3644-.5309-2.8794 1.6848-5.4346 4.5157-5.4346 1.1921 0 2.2616.4799 3.0453 1.2636v-1.1232h1.5316v8.9113zm-1.8201-3.8136c.4212-1.8099-.9496-3.4538-2.7364-3.4538-1.5495 0-2.7952 1.2636-2.7952 2.7952 0 1.7332 1.5239 3.0734 3.2955 2.7722 1.0874-.1864 1.986-1.0339 2.2361-2.1136m11.3338-1.4602v5.2713h-1.7817v-5.2713c0-1.1053-.9087-1.9936-1.9936-1.9936-1.1232 0-2.0115.8909-2.0115 1.9936v5.2713h-1.7818v-8.9062h1.478v.7658c.6407-.5693 1.4959-.9088 2.3868-.9088 2.0651.0026 3.7038 1.695 3.7038 3.7779m10.4736 5.2738h-1.5138v-1.1231c-1.1716 1.1436-3.0172 1.6924-4.8883.8704-1.3861-.6101-2.4174-1.8736-2.6931-3.3644-.5309-2.8794 1.6848-5.4346 4.5157-5.4346 1.1921 0 2.2616.4799 3.0453 1.2636v-1.1232h1.5316v8.9113zM105.36 21.968c.4211-1.8099-.9496-3.4538-2.7365-3.4538-1.5495 0-2.7952 1.2636-2.7952 2.7952 0 1.7332 1.524 3.0734 3.2955 2.7722 1.0875-.1864 1.986-1.0339 2.2362-2.1136"}),(0,i.jsx)("path",{d:"M0 0h35.3825v38.4281H0z",transform:"translate(0 -.0077)",clipPath:"url(#A)"})]})]})}},51374:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsxs)("svg",{width:"160",height:"29",viewBox:"0 0 160 29",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,i.jsx)("path",{d:"M44.985 9.6615C44.7884 9.31867 44.5534 8.99925 44.2847 8.70943C43.7645 8.15179 43.138 7.70383 42.4421 7.39193C41.7311 7.06577 40.958 6.89714 40.1757 6.89752C39.0539 6.87224 37.9496 7.17767 37.0002 7.77581C36.0334 8.43321 35.2941 9.37419 34.8842 10.4692C34.3411 11.903 34.0845 13.4295 34.1287 14.9621V15.9572C34.0844 17.4882 34.3303 19.0138 34.8535 20.4533C35.2458 21.5357 35.9649 22.4693 36.9112 23.1251C37.8605 23.7223 38.9655 24.0248 40.0866 23.9942C40.8739 23.998 41.6529 23.8337 42.3715 23.5121C43.0801 23.1988 43.7214 22.7514 44.2602 22.1946C44.5261 21.9186 44.7657 21.6184 44.9757 21.2979V23.5397H52.0392V7.35204H44.9757L44.985 9.6615ZM45.16 15.8251C45.1745 16.512 45.1033 17.1982 44.9481 17.8675C44.8566 18.318 44.6443 18.7351 44.3339 19.0743C44.198 19.2054 44.0373 19.308 43.8611 19.376C43.685 19.4441 43.497 19.4762 43.3082 19.4705C43.1233 19.4755 42.9391 19.4431 42.7671 19.375C42.595 19.3069 42.4384 19.2046 42.307 19.0743C41.9942 18.7392 41.7815 18.3234 41.6928 17.8736C41.5474 17.2009 41.4814 16.5132 41.4962 15.8251V14.9621C41.4809 14.2796 41.5502 13.5978 41.7021 12.9322C41.7888 12.4922 41.9961 12.0849 42.3008 11.7559C42.4329 11.6293 42.5891 11.5306 42.76 11.4652C42.9309 11.3998 43.1131 11.3691 43.2959 11.3752C43.6746 11.3626 44.0429 11.4993 44.3216 11.7559C44.6326 12.0826 44.8455 12.4902 44.9358 12.9322C45.0916 13.5972 45.1628 14.2792 45.1477 14.9621L45.16 15.8251Z",fill:"black"}),(0,i.jsx)("path",{d:"M69.0228 7.546C68.2385 7.10178 67.347 6.8819 66.4461 6.91034C65.5689 6.89745 64.6994 7.07449 63.8972 7.42934C63.1644 7.75789 62.5068 8.23345 61.9654 8.82662C61.6036 9.22935 61.2987 9.68 61.0594 10.1657V7.36485H54.2233V23.5525H61.2652V13.8479C61.2518 13.483 61.3244 13.1201 61.477 12.7884C61.5941 12.531 61.7884 12.3163 62.0329 12.1742C62.2633 12.0474 62.5224 11.9818 62.7854 11.9838C62.9678 11.9736 63.1503 12.0022 63.3207 12.0679C63.4912 12.1335 63.6457 12.2346 63.7742 12.3645C64.0467 12.7129 64.1753 13.1526 64.1335 13.5929V23.5586H71.1725V12.6839C71.2056 11.5894 71.0197 10.4994 70.6258 9.47772C70.3089 8.68225 69.7476 8.00798 69.0228 7.55215",fill:"black"}),(0,i.jsx)("path",{d:"M100.983 17.1711C101.01 17.847 100.839 18.5161 100.492 19.0966C100.348 19.306 100.154 19.4755 99.9277 19.5894C99.701 19.7033 99.4491 19.7576 99.1956 19.7476C98.7997 19.7649 98.4123 19.6286 98.1146 19.3669C97.792 19.0157 97.5786 18.5781 97.5004 18.1077C97.3466 17.322 97.2787 16.5219 97.2977 15.7215V14.9751C97.2977 13.5901 97.4544 12.6044 97.7738 12.0209C97.9086 11.7459 98.1208 11.5163 98.3843 11.3603C98.6478 11.2043 98.9511 11.1285 99.257 11.1424C99.5036 11.1258 99.7503 11.1737 99.9727 11.2814C100.195 11.3891 100.386 11.5529 100.525 11.7566C100.837 12.3067 100.986 12.934 100.955 13.5655V13.6516H108.172C108.142 12.3473 107.724 11.0814 106.972 10.0154C106.183 8.9613 105.105 8.15821 103.87 7.70291C102.349 7.13926 100.735 6.86831 99.1127 6.9044C97.4861 6.87585 95.8711 7.18219 94.3679 7.80428C93.0212 8.37295 91.8787 9.33669 91.0911 10.5682C90.2906 11.7967 89.8903 13.3382 89.8903 15.1932V15.6478C89.8903 17.4905 90.2782 19.0393 91.0542 20.2943C91.8216 21.5312 92.9505 22.5025 94.2881 23.0767C95.8095 23.7154 97.4477 24.0292 99.0974 23.9981C100.697 24.0273 102.289 23.7575 103.79 23.2026C105.063 22.7366 106.177 21.9187 107.002 20.8441C107.801 19.7537 108.241 18.4423 108.261 17.0911H100.983V17.1711Z",fill:"black"}),(0,i.jsx)("path",{d:"M124.443 7.54468C123.66 7.09528 122.769 6.87106 121.866 6.89672C120.99 6.88379 120.122 7.06084 119.321 7.41571C118.587 7.74266 117.929 8.21858 117.389 8.81315C117.123 9.10845 116.888 9.42931 116.686 9.77121V2.36688H109.644V23.5389H116.686V13.8342C116.672 13.4693 116.745 13.1065 116.897 12.7748C117.016 12.518 117.21 12.3037 117.453 12.1606C117.685 12.0332 117.945 11.9676 118.209 11.9701C118.391 11.9602 118.574 11.9889 118.744 12.0546C118.914 12.1202 119.069 12.2212 119.198 12.3509C119.468 12.7005 119.595 13.1395 119.554 13.5793V23.545H126.596V12.6703C126.628 11.5756 126.441 10.4855 126.046 9.4641C125.731 8.66752 125.169 7.99272 124.443 7.53853",fill:"black"}),(0,i.jsx)("path",{d:"M139.064 9.66154C138.868 9.31871 138.633 8.99929 138.364 8.70947C137.844 8.15183 137.218 7.70387 136.522 7.39197C135.815 7.07262 135.049 6.90827 134.274 6.90986C133.152 6.88457 132.047 7.19 131.098 7.78815C130.132 8.44644 129.393 9.38712 128.982 10.4815C128.439 11.9154 128.182 13.4418 128.227 14.9744V15.9695C128.182 17.5005 128.428 19.0261 128.951 20.4656C129.344 21.548 130.063 22.4816 131.009 23.1374C131.958 23.7347 133.063 24.0371 134.185 24.0065C134.972 24.0104 135.751 23.846 136.469 23.5244C137.178 23.2111 137.819 22.7637 138.358 22.2069C138.624 21.931 138.864 21.6308 139.074 21.3102V23.552H146.137V7.36438H139.074L139.064 9.66154ZM139.243 15.8251C139.256 16.5122 139.184 17.1984 139.028 17.8675C138.936 18.3181 138.724 18.7351 138.413 19.0744C138.277 19.2055 138.117 19.308 137.941 19.3761C137.764 19.4441 137.576 19.4763 137.388 19.4705C137.203 19.4756 137.019 19.4431 136.846 19.375C136.674 19.3069 136.518 19.2046 136.386 19.0744C136.074 18.7392 135.861 18.3234 135.772 17.8737C135.627 17.2009 135.561 16.5133 135.576 15.8251V14.9621C135.56 14.2796 135.63 13.5978 135.781 12.9322C135.868 12.4922 136.076 12.085 136.38 11.756C136.512 11.6294 136.669 11.5306 136.839 11.4652C137.01 11.3998 137.192 11.3692 137.375 11.3752C137.754 11.3626 138.122 11.4993 138.401 11.756C138.712 12.0827 138.925 12.4903 139.015 12.9322C139.172 13.5971 139.245 14.2791 139.23 14.9621L139.243 15.8251Z",fill:"black"}),(0,i.jsx)("path",{d:"M160 11.6973V7.36408H156.984V2.37973H149.945V7.36408H147.47V11.6973H149.927V18.7608C149.879 19.7987 150.153 20.826 150.71 21.7029C151.226 22.4493 151.963 23.0152 152.817 23.3214C153.798 23.6629 154.831 23.8282 155.869 23.8097C156.648 23.8187 157.426 23.7426 158.188 23.5825C158.813 23.4502 159.42 23.244 159.997 22.9683V19.1479C159.511 19.3103 159.002 19.3942 158.489 19.3966C158.092 19.4252 157.698 19.3168 157.371 19.0895C157.11 18.8807 156.981 18.5121 156.981 17.9839V11.6912L160 11.6973Z",fill:"black"}),(0,i.jsx)("path",{d:"M27.8915 0.00614816H27.6642C20.9416 0.00614816 17.674 10.0639 17.674 10.0639V2.34635H0V23.5582H7.06348V9.41598H10.8317V23.5582H18.411C18.411 23.5582 22.3052 6.77177 25.9506 8.02784C28.4075 8.94917 21.4791 23.5429 21.4791 23.5429H31.4877C31.4877 23.5429 32.8758 14.0379 32.8973 10.7488C33.2044 5.16248 32.323 0 27.8853 0",fill:"black"}),(0,i.jsx)("path",{d:"M77.4955 24.4947C77.5058 24.2161 77.4236 23.9419 77.262 23.7147C77.0874 23.4942 76.8496 23.3324 76.5803 23.251C76.2265 23.1414 75.8573 23.0896 75.487 23.0974L71.7219 7.36431H79.0525L81.2484 20.8586H80.5789L82.876 7.36431H90.0593L86.4969 23.0974C86.1031 23.0851 85.71 23.137 85.3329 23.251C85.0775 23.3265 84.8547 23.4855 84.7002 23.7025C84.559 23.9419 84.4907 24.2171 84.5037 24.4947V28.2169H77.4955V24.4947Z",fill:"black"})]})}},52537:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"191",height:"55",viewBox:"0 0 191 55",className:"site-brand__logo",children:(0,i.jsxs)("g",{fill:"#000000",children:[(0,i.jsx)("g",{children:(0,i.jsx)("path",{d:"M89.348 16.818l-4.585-12.18c-.19-.473-.326-.892-.326-1.254 0-.948.734-1.255 2.88-1.338V.847h-8.07v1.2c.87.139 1.549.306 1.875 1.142l.97 2.562-4.267 11.039-4.423-12.152c-.19-.501-.326-.892-.326-1.254 0-.948.734-1.255 2.88-1.338V.847h-8.234v1.2c.87.139 1.55.306 1.875 1.142l7.005 18.48h.924l5.408-13.8 5.38 13.8h.925l6.626-18.48c.326-.864 1.006-1.003 1.875-1.143V.847h-6.848v1.2c2.147.083 2.908.417 2.908 1.365 0 .362-.163.78-.327 1.255l-4.125 12.15zM107.986 17.04c-.897 1.144-2.419 2.203-4.675 2.203-3.587 0-5.218-2.37-5.218-6.217h10.653v-.78c0-3.345-2.065-5.91-6.033-5.91-4.158 0-7.202 3.262-7.202 8.14 0 3.987 2.582 7.192 6.958 7.192 3.832 0 5.707-2.23 6.305-4.265l-.788-.362zm-5.952-8.975c2.446 0 3.723 1.616 3.723 3.568h-7.582c.3-2.091 1.712-3.568 3.86-3.568M51.395 17.04c-.897 1.144-2.42 2.203-4.675 2.203-3.587 0-5.218-2.37-5.218-6.217h10.654v-.78c0-3.345-2.066-5.91-6.033-5.91-4.158 0-7.202 3.262-7.202 8.14 0 3.987 2.581 7.192 6.957 7.192 3.831 0 5.707-2.23 6.305-4.265l-.788-.362zm-5.952-8.975c2.446 0 3.723 1.616 3.723 3.568h-7.582c.299-2.091 1.712-3.568 3.859-3.568M30.782 6.336c-2.12 0-4.022 1.06-5.191 2.592V6.336h-.815L21.63 7.73v.669l1.243.976v15.377c0 1.281-.924 1.42-2.174 1.588v1.087h7.066V26.34c-1.25-.168-2.174-.307-2.174-1.59v-4.197c.87.669 2.12 1.115 3.75 1.115 4.294 0 7.827-3.206 7.827-8.363 0-3.847-2.202-6.969-6.386-6.969zM29.64 20.08c-2.062 0-4.043-.862-4.049-3.5v-6.285c.924-1.003 2.5-1.84 4.158-1.84 3.505 0 4.62 3.123 4.62 6.022 0 3.596-1.875 5.603-4.729 5.603zM10.488.607C4.765.607.017 4.82.017 11.532c0 5.318 3.772 10.136 9.906 10.136 5.723 0 10.471-4.213 10.471-10.925 0-5.318-3.772-10.136-9.906-10.136m6.511 11.215c0 4.908-2.328 7.837-6.229 7.837-2.324 0-4.244-.967-5.55-2.798-1.166-1.635-1.808-3.91-1.808-6.408 0-4.907 2.329-7.837 6.229-7.837 2.325 0 4.244.968 5.55 2.799C16.357 7.05 17 9.325 17 11.822M68.392 18.713v-7.805c0-3.262-1.875-4.572-4.538-4.572-2.146 0-4.319 1.393-5.515 2.73v-2.73h-.815L54.38 7.73v.669l1.243.976v9.406c-.034 1.217-.945 1.357-2.171 1.521v1.087h7.066v-1.087c-1.25-.167-2.174-.307-2.174-1.589h-.004v-8.392c1.142-.947 3.015-1.727 4.482-1.727 1.794 0 2.854.641 2.854 2.704v7.415c0 1.282-.924 1.422-2.174 1.589v1.087h7.066v-1.087c-1.251-.167-2.175-.307-2.175-1.589zM119.036 6.336c-2.12 0-3.968 1.06-5.164 2.593V.02h-.815l-3.146 1.394v.669l1.243.976v16.743h.003c1.169.92 3.423 1.866 6.465 1.866 4.267 0 7.827-3.206 7.827-8.363 0-3.847-2.228-6.969-6.413-6.969zM117.92 20.08c-2.064 0-4.047-.863-4.049-3.508v-6.277c.924-1.003 2.5-1.84 4.158-1.84 3.479 0 4.62 3.123 4.62 6.022 0 3.596-1.875 5.603-4.729 5.603z",transform:"translate(64.687 15.682)"})}),(0,i.jsx)("path",{d:"M40.828 27.457l-.001.055 6.38 3.517s1.855 1.048 3.889 1.808c-2.163-.193-4.29-.05-4.29-.05l-7.277.41c-.265.554-.569 1.087-.906 1.596l11.096 8.805c.487-.666.945-1.355 1.37-2.065l-5.016-3.985c-1.95-1.616-3.903-2.52-3.903-2.52 1.817.37 4.435.21 4.435.21l7.373-.414c.23-.829.425-1.673.578-2.53l-6.463-3.56s-2.288-1.277-4.086-1.729c0 0 2.152.03 4.613-.584l6.25-1.42c-.073-.83-.182-1.649-.328-2.455l-13.835 3.138c.078.58.121 1.172.121 1.773zM37.1 36.694c-.424.44-.878.852-1.358 1.231l1.22 7.168s.334 2.099 1.005 4.157c-1.197-1.806-2.635-3.375-2.635-3.375l-4.86-5.417c-.591.136-1.197.235-1.815.29l.011 14.137c.835-.036 1.66-.11 2.475-.22l-.002-6.392c.052-2.528-.457-4.613-.457-4.613.842 1.647 2.6 3.586 2.6 3.586l4.923 5.489c.801-.34 1.584-.716 2.345-1.128l-1.237-7.255s-.426-2.58-1.192-4.263c0 0 1.318 1.696 3.334 3.231l5.012 3.986c.599-.57 1.17-1.168 1.716-1.79L37.1 36.694zM35.827 17.056l6.738-2.78s1.978-.792 3.843-1.903c-1.501 1.565-2.715 3.312-2.715 3.312l-4.215 5.926c.268.547.497 1.115.689 1.7l13.828-3.157c-.22-.8-.477-1.586-.767-2.356l-6.257 1.427c-2.484.511-4.41 1.47-4.41 1.47 1.423-1.185 2.929-3.326 2.929-3.326l4.27-5.999c-.511-.703-1.054-1.38-1.628-2.03l-6.816 2.814s-2.428.988-3.903 2.108c0 0 1.366-1.659 2.418-3.96l2.784-5.759c-.69-.455-1.4-.88-2.132-1.272l-6.162 12.735c.527.316 1.03.668 1.506 1.05zM15.393 21.612l-4.216-5.925s-1.214-1.747-2.715-3.311c1.865 1.11 3.844 1.901 3.844 1.901l6.737 2.78c.477-.383.979-.734 1.506-1.05L14.385 3.272c-.73.393-1.441.818-2.131 1.273l2.785 5.759c1.052 2.3 2.419 3.959 2.419 3.959-1.476-1.12-3.905-2.107-3.905-2.107L6.737 9.342c-.573.65-1.116 1.328-1.627 2.03l4.27 6s1.506 2.14 2.93 3.325c0 0-1.926-.959-4.41-1.47l-6.257-1.425c-.29.77-.547 1.555-.768 2.355l13.83 3.156c.19-.585.42-1.154.688-1.7zM24.402 40.458l-4.86 5.418s-1.438 1.57-2.634 3.376c.67-2.06 1.004-4.158 1.004-4.158l1.22-7.168c-.481-.38-.935-.79-1.359-1.231L6.69 45.518c.545.622 1.118 1.22 1.717 1.79l5.011-3.986c2.015-1.535 3.333-3.231 3.333-3.231-.766 1.683-1.19 4.262-1.19 4.262l-1.237 7.256c.76.412 1.543.788 2.345 1.128l4.921-5.49s1.758-1.94 2.6-3.586c0 0-.509 2.085-.456 4.612l-.001 6.393c.814.11 1.64.183 2.474.22l.01-14.137c-.62-.056-1.224-.154-1.815-.29zM24.511 14.43l2.02-6.981s.613-2.036.904-4.181c.293 2.145.905 4.18.905 4.18l2.02 6.983c.605.134 1.194.307 1.764.52L38.27 2.206c-.758-.324-1.535-.614-2.326-.87L33.16 7.1c-1.148 2.255-1.597 4.354-1.597 4.354-.042-1.848-.782-4.356-.782-4.356L28.739.032C28.307.012 27.873 0 27.436 0c-.437 0-.872.011-1.304.032L24.09 7.099s-.74 2.508-.782 4.356c0 0-.449-2.099-1.597-4.354l-2.783-5.764c-.792.256-1.568.546-2.326.87l6.146 12.743c.57-.212 1.16-.385 1.763-.52zM6.252 26.424c2.46.614 4.613.583 4.613.583-1.798.452-4.087 1.73-4.087 1.73l-6.462 3.56c.153.858.347 1.702.579 2.53l7.373.413s2.618.161 4.434-.21c0 0-1.952.903-3.902 2.52l-5.017 3.986c.427.71.884 1.399 1.371 2.065l11.095-8.807c-.337-.509-.64-1.041-.907-1.596l-7.276-.41s-2.127-.141-4.29.053c2.033-.762 3.888-1.81 3.888-1.81l6.38-3.517-.002-.057c0-.601.044-1.192.121-1.772L.33 22.55c-.146.807-.255 1.626-.329 2.455l6.252 1.42z"})]})})}},23397:(e,t,s)=>{s.r(t),s.d(t,{default:()=>R});var i=s(67294),n=s(86010),r=s(7372),a=s(33692),o=s(52263),c=s(44996);const l={heroBanner:"heroBanner_UJJx",hero:"hero_syme",container:"container_czXe",mainTitle:"mainTitle_BcKq",subTitle:"subTitle_opAm",section:"section_rC2D",sectionAlt:"sectionAlt_XiGz",buttons:"buttons_pzbO",logos:"logos_NYVn",features:"features_keug",featureImage:"featureImage_yA8i",heart:"heart_Zeus",quote:"quote_aYQC",responsiveEmbed:"responsiveEmbed_q7kv",lspDemo:"lspDemo_XLVG",playWithIt:"playWithIt_Xc2P"};var h=s(53225),d=s(92949),u=s(59250),m=s(63349),f=s(50650),p=s(51374),g=s(52537);const v="carousel_NhIU",x="testimonial_bdm8",C="quote_WCQh",b="author_w76v",w="switch_Vlgy";var j=s(85893);const y=[{quote:"We use Centrifugo to power real time updates and chat. It's been incredibly easy to use and reliable.",author:"Victor Pontis, Founder at Luma"},{quote:"Centrifugo listed in our tech radar, and new projects will use it by default.",author:"Marko Kevac, Engineering Manager at Badoo"},{quote:"Nine months in production, and we didn't encounter any issue with Centrifugo \u2013 it performed flawlessly!",author:"Kirill, CTO at RabbitX"}];const M=function(){const[e,t]=(0,i.useState)(0);return(0,j.jsxs)("div",{className:v,children:[(0,j.jsx)("button",{className:w,onClick:()=>{t((e=>0===e?y.length-1:e-1))},children:"<"}),(0,j.jsxs)("div",{className:x,children:[(0,j.jsxs)("blockquote",{className:C,children:["\u201c",y[e].quote,"\u201d"]}),(0,j.jsxs)("p",{className:b,children:["- ",y[e].author]})]}),(0,j.jsx)("button",{className:w,onClick:()=>{t((e=>e===y.length-1?0:e+1))},children:">"})]})},S="banner_G2O5",k="bannerTitle_na9p",N="bannerLink_azGU",_="bannerText_WQt1",z=()=>(0,j.jsxs)("div",{className:S,children:[(0,j.jsxs)("h2",{className:k,children:["Using Centrifugo? Check out ",(0,j.jsx)("a",{className:N,href:"/docs/pro/overview",children:"Centrifugo PRO"})]}),(0,j.jsx)("p",{className:_,children:"Innovative answers to complex real-time messaging challenges"})]}),V="imageContainer_hh_m",P="rotatingImage_UjnV",I=["/img/pro_carousel_1.png","/img/pro_carousel_2.png","/img/pro_carousel_3.png","/img/pro_carousel_4.png"],L=()=>{const[e,t]=(0,i.useState)(0);return(0,i.useEffect)((()=>{const e=setInterval((()=>{t((e=>(e+1)%I.length))}),1500);return()=>clearInterval(e)}),[]),(0,j.jsx)("div",{className:V,children:(0,j.jsx)("img",{src:I[e],alt:"Rotating Image",className:P})})};function T(e){let{imageUrl:t,title:s,children:i}=e;const r=(0,c.Z)(t);return(0,j.jsxs)("div",{className:(0,n.Z)("col col--4",l.feature),children:[r&&(0,j.jsx)("div",{className:"text--center",children:(0,j.jsx)("div",{className:"feature-media",children:(0,j.jsx)("img",{className:l.featureImage,src:r,alt:s})})}),(0,j.jsx)("h2",{className:"text--center",children:s}),(0,j.jsx)("p",{children:i})]})}function H(){const e="dark"==(0,d.I)().colorMode;return(0,j.jsxs)("header",{id:"hero",className:(0,n.Z)("hero hero--primary",l.heroBanner),children:[(0,j.jsx)(h.default,{isDarkTheme:e}),(0,j.jsxs)("div",{className:"container",style:{zIndex:1},children:[(0,j.jsx)("div",{className:l.mainTitle,children:"CENTRIFUGO"}),(0,j.jsx)("div",{className:l.subTitle,children:"Scalable real-time messaging server. Set up once and forever."}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg"),to:(0,c.Z)("docs/getting-started/introduction"),children:"GET STARTED"})})]})]})}const R=function(){const e=(0,o.Z)(),{siteConfig:{tagline:t}={}}=e;return(0,j.jsxs)(r.Z,{title:t,description:"Centrifugo is an open source server designed to help building interactive real-time messaging applications. Think chats, live comments, multiplayer games, streaming metrics etc. Centrifugo provides a variety of real-time transports, scales well and integrates with any application.",children:[(0,j.jsx)(H,{}),(0,j.jsx)(z,{}),(0,j.jsxs)("main",{children:[(0,j.jsx)("section",{className:(0,n.Z)("logos-wrapper",l.logos),children:(0,j.jsx)("div",{className:"container",children:(0,j.jsxs)("div",{className:"row justify-content-center",children:[(0,j.jsx)("div",{className:"col",style:{fontSize:"14px"},children:"USED IN PRODUCTS OF SUCCESSFUL COMPANIES"}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(m.default,{})}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(f.default,{})}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(p.default,{})}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(g.default,{})}),(0,j.jsx)("div",{className:"col",style:{fontSize:"14px"},children:"THOUSANDS OF REAL INSTALLATIONS"})]})})}),(0,j.jsx)("section",{className:(0,n.Z)("features-wrapper",l.features),children:(0,j.jsx)("div",{className:"container",children:(0,j.jsxs)("div",{className:"row",children:[(0,j.jsxs)(T,{title:"Seamless Integration",imageUrl:"img/feature_integration.png",children:["Centrifugo is a self-hosted service which handles connections over various ",(0,j.jsx)("a",{href:"/docs/transports/overview",children:"transports"})," and provides a simple ",(0,j.jsx)("a",{href:"/docs/server/server_api",children:"publishing API"}),". Centrifugo nicely integrates with any application \u2014 no changes in the existing app architecture required to introduce real-time updates."]}),(0,j.jsxs)(T,{title:"Great Performance",imageUrl:"img/feature_performance.png",children:["Centrifugo is written in Go language and includes some smart optimizations. See the description of the test stand with ",(0,j.jsx)("a",{href:"/blog/2020/02/10/million-connections-with-centrifugo",children:"one million WebSocket"})," connections and 30 million delivered messages per minute on hardware comparable to a single modern server."]}),(0,j.jsx)(T,{title:"Feature-rich",imageUrl:"img/feature_rich.png",children:"Centrifugo provides flexible auth, various types of subscriptions, channel history, online presence, delta updates, the ability to proxy connection events to the backend, and much more. It comes with official SDK libraries for both web and mobile development."}),(0,j.jsx)(T,{title:"Out-of-the-box Scalability",imageUrl:"img/feature_scalability.png",children:"Scale connections over many Centrifugo nodes by using built-in integrations with efficient brokers: Redis (or Redis Cluster, or Redis-compatible storages like AWS Elasticache, DragonflyDB, Valkey, KeyDB, with client-side sharding support), and Nats."}),(0,j.jsx)(T,{title:"Proven in Production",imageUrl:"img/feature_production.png",children:"Started a decade ago, Centrifugo (and Centrifuge library for Go it's built on top of) is mature, battle-tested software that has been successfully used in production by many companies around the world: VK, Badoo, ManyChat, OpenWeb, Grafana, and others."}),(0,j.jsxs)(T,{title:"Centrifugo PRO",imageUrl:"img/feature_pro.png",children:[(0,j.jsx)("a",{href:"/docs/pro/overview",children:"Centrifugo PRO"})," offers great benefits for corporate and enterprise environments by providing unique features on top of the OSS version: analytics with ClickHouse, real-time tracing, performance optimizations, push notification API, SSO integrations for web UI, etc."]})]})})}),(0,j.jsx)(u.default,{img:(0,j.jsx)("img",{src:"/img/basic_pub_sub.png"}),reversed:!0,isDark:!0,title:"What is real-time messaging?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Real-time messaging is used to create interactive applications where events are delivered to online users with minimal delay."}),(0,j.jsx)("p",{children:"Chats apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, etc. can all be built on top of a real-time messaging system."}),(0,j.jsxs)("p",{children:["Centrifugo is a user facing ",(0,j.jsx)("b",{children:"PUB/SUB"})," server that handles persistent connections over various real-time transports \u2014 ",(0,j.jsx)("b",{children:"WebSocket"}),", HTTP-streaming, SSE (Server-Sent Events), WebTransport, GRPC."]})]})}),(0,j.jsx)(M,{}),(0,j.jsx)(u.default,{img:(0,j.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/dzgXph_pRJ0",title:"YouTube video player",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowFullScreen:!0}),title:"Looking for a cool demo?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Here is the real-time telemetry streamed from the Assetto Corsa racing simulator to the Grafana dashboard with a help of our WebSocket technologies."}),(0,j.jsxs)("p",{children:["This demonstrates that you can stream ",(0,j.jsx)("b",{children:"60Hz"})," data towards client connections and thus provide instant visual feedback on the state of the system."]}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg",l.getStarted),to:(0,c.Z)("docs/getting-started/introduction"),children:"Impressive? Get Started!"})})]})}),(0,j.jsx)(u.default,{img:(0,j.jsx)("iframe",{width:"560",height:"315",src:"/img/grand-chat-tutorial-demo.mp4",title:"Messenger tutorial",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowFullScreen:!0}),reversed:!0,isDark:!0,title:"Slack-scale messenger?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Straightforward with Centrifugo! Even though your backend does not support concurrency. See the tutorial where we build a beautiful messenger app and go beyond usually shown basics."}),(0,j.jsx)("p",{children:"Centrifugo is a versatile real-time component \u2013 it can be used to build various types of real-time applications, not just messengers."}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg",l.getStarted),to:(0,c.Z)("docs/tutorial/intro"),children:"See full tutorial"})})]})}),(0,j.jsx)(u.default,{img:(0,j.jsx)(L,{}),title:"Are you Enterprise?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Centrifugal Labs offers a PRO version of Centrifugo that includes a set of unique features, additional APIs, and enhanced performance. Ever dreamed about a self-hosted real-time messaging system combined with a push notification system? Want to benefit from analytics of real-time connections and subscriptions? Centrifugo PRO makes this possible. And much more actually."}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg",l.getStarted),to:(0,c.Z)("docs/pro/overview"),children:"More about Centrifugo PRO"})})]})})]})]})}},86010:(e,t,s)=>{function i(e){var t,s,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tn});const n=function(){for(var e,t,s=0,n="";s{s.r(t),s.d(t,{default:()=>a});s(67294);var i=s(86010);const n={featureTitle:"featureTitle_fCfN",featureContent:"featureContent_FT24",featureContentReversed:"featureContentReversed_juV3",featureImage:"featureImage_lJJP",darkSection:"darkSection_dAst",featureImageReversed:"featureImageReversed_n2Vd"};var r=s(85893);function a(e){let{reversed:t,title:s,img:a,text:o,isDark:c}=e;const l=(0,r.jsx)("div",{className:(0,i.Z)("col col--6",n.featureImage,t?n.featureImageReversed:""),children:a}),h=(0,r.jsxs)("div",{className:(0,i.Z)("col col--6",n.featureContent,t?n.featureContentReversed:""),children:[(0,r.jsx)("h3",{className:n.featureTitle,children:s}),o]});return(0,r.jsx)("section",{className:(0,i.Z)("highlightSection",c?n.darkSection+" darkSection":""),children:(0,r.jsx)("div",{className:"container",children:(0,r.jsx)("div",{className:"row",children:t?(0,r.jsxs)(r.Fragment,{children:[h,l]}):(0,r.jsxs)(r.Fragment,{children:[l,h]})})})})}},53225:(e,t,s)=>{s.r(t),s.d(t,{default:()=>m});var i=s(67294),n=s(85893);function r(e,t){return Math.floor(Math.random()*(t-e+1)+e)}function a(e,t,s,i){const n=i*Math.PI/180;return[e+s*Math.cos(n),t+s*Math.sin(n)]}function o(e,t,s,i){return 180*Math.atan2(i-t,s-e)/Math.PI}function c(e,t,s,i,n,r,a,o,c,l,h,d){this.ctx=e,this.init(t,s,i,n,r,a,o,c,l,h,d)}function l(e,t,s,i,n,r){this.ctx=e,this.init(t,s,i,n,r)}function h(e,t,s,i,n,r){e.beginPath(),e.moveTo(t,s),e.lineTo(i,n),e.lineWidth=r,e.strokeStyle="#F6CFC7",e.stroke();const a=e.createLinearGradient(t,s,i,n);a.addColorStop(0,"#F60809"),a.addColorStop(1,"#F6B9BD"),e.strokeStyle=a,e.lineWidth=r,e.shadowBlur=10,e.shadowColor="red",e.stroke()}function d(e,t,i,n){const a=e.getContext("2d"),o=t/2,d=i/2;let u,m,f;n?(u="#8d3838",m="#6e2b2b",f="#6e2b2b"):(u="#ffd4d4",m="#e6e8eb",f="#ffd4d4");const p=[],g=[],v=i/7,x=v/15,C=s.g.requestAnimationFrame||s.g.mozRequestAnimationFrame||s.g.webkitRequestAnimationFrame||s.g.msRequestAnimationFrame||function(e){setTimeout(e,17)};for(let s=0;s<3;s+=1){const e=new l(a,t,i,r(0,t),r(0,i),u);p.push(e)}g.push(new c(a,t,i,o,d,v,2.65*v,9*x,0,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,2.65*v,9*x,90,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,2.65*v,9*x,180,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,2.65*v,9*x,270,-1.5,0,m)),g.push(new c(a,t,i,o,d,v,1.45*v,8*x,45,1.5,2,f)),g.push(new c(a,t,i,o,d,v,1.45*v,8*x,135,1.5,2,f)),g.push(new c(a,t,i,o,d,v,1.45*v,8*x,225,1.5,2,f));let b=0;const w="up"==localStorage.getItem("lights");C((function s(r){if(t<=1)return;const o=(r-b)/1e3;if(null!==e.offsetParent){a.clearRect(0,0,t,i);for(let e=0;e1280?(Math.random()>.95&&function(e,t,s){const i=t/2+30*(.5-Math.random()),n=s/2+30*(.5-Math.random()),r=Math.floor(10*Math.random())+2;let a=i,o=n;const c=Math.random()*Math.PI*2;e.globalCompositeOperation="lighter";for(let l=0;l.7&&h(e,a,o,a+Math.cos(s+Math.PI/4)*t,o+Math.sin(s+Math.PI/4)*t,3),Math.random()>.7&&h(e,a,o,a+Math.cos(s-Math.PI/4)*t,o+Math.sin(s-Math.PI/4)*t,3),Math.random()>.7&&h(e,a,o,a+Math.cos(s-Math.PI/4)*t,o+Math.sin(s-Math.PI/4)*t,3),a=i,o=n}e.globalCompositeOperation="source-over"}(a,t,i),a.shadowBlur=100):a.shadowBlur=0}b=r,C(s)}))}let u;if(c.prototype.init=function(e,t,s,i,n,r,a,o,c,l,h){this.X=e,this.Y=t,this.radius=n,this.x=s,this.y=i,this.r=r,this.w=a,this.c=h,this.rotate=o,this.speed=60*c,this.angleDiff=l,this.a=0},c.prototype.drawSegment=function(e,t,s){this.ctx.translate(this.x,this.y),this.ctx.rotate(s*Math.PI/180),this.ctx.translate(-this.x,-this.y),this.ctx.beginPath();const i=a(this.x,this.y,this.r,e),n=i[0],r=i[1],c=a(this.x,this.y,this.r,t),l=c[0],h=c[1],d=n-this.w,u=h-this.w,m=o(this.x,this.y,d,r),f=o(this.x,this.y,l,u),p=t*Math.PI/180,g=e*Math.PI/180,v=m*Math.PI/180,x=f*Math.PI/180;this.ctx.arc(this.x,this.y,this.r,p,g,!0),this.ctx.arc(this.x,this.y,this.r-this.w,v,x,!1),this.ctx.closePath(),this.ctx.fillStyle=this.c,this.ctx.fill(),this.ctx.stroke()},c.prototype.draw=function(){this.ctx.save(),this.ctx.lineWidth=3,this.ctx.strokeStyle=this.c,this.ctx.shadowColor=this.c,this.drawSegment(4+this.angleDiff,86-this.angleDiff,this.rotate+this.a),this.ctx.restore()},c.prototype.resize=function(){this.x=this.X/2,this.y=this.Y/2},c.prototype.updateParams=function(e){this.a+=this.speed*e*this.radius/this.r},c.prototype.render=function(e){this.updateParams(e),this.draw()},l.prototype.init=function(e,t,s,i,n){this.X=e,this.Y=t,this.x=s,this.y=i,this.c=n,this.lw=1,this.v={x:100*Math.random(),y:100*Math.random()}},l.prototype.draw=function(){this.ctx.save(),this.ctx.lineWidth=this.lw,this.ctx.strokeStyle=this.c,this.ctx.beginPath(),this.ctx.moveTo(0,this.y),this.ctx.lineTo(this.X,this.y),this.ctx.stroke(),this.ctx.lineWidth=this.lw,this.ctx.beginPath(),this.ctx.moveTo(this.x,0),this.ctx.lineTo(this.x,this.Y),this.ctx.stroke(),this.ctx.restore()},l.prototype.updatePosition=function(e){this.x+=this.v.x*e,this.y+=this.v.y*e},l.prototype.wrapPosition=function(){this.x<0&&(this.x=this.X),this.x>this.X&&(this.x=0),this.y<0&&(this.y=this.Y),this.y>this.Y&&(this.y=0)},l.prototype.render=function(e){this.updatePosition(e),this.wrapPosition(),this.draw()},s.g.window||process&&process.browser){u=new MutationObserver((function(e){e.forEach((function(e){"attributes"==e.type&&window.dispatchEvent(new Event("resized"))}))}));const e=document.querySelector("html");u.observe(e,{attributes:!0})}const m=e=>{const[t,r]=i.useState({x:1,y:1}),a=i.useRef(null),o=()=>{null!==a.current&&(a.current.width=a.current.clientWidth,a.current.height=a.current.clientHeight,r({x:a.current?a.current.clientWidth:0,y:a.current?a.current.clientHeight:0}))};return i.useEffect((()=>o()),[]),(s.g.window||process&&process.browser)&&(i.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o)))),i.useEffect((()=>(window.addEventListener("resized",o),()=>window.removeEventListener("resized",o))))),i.useEffect((()=>{d(a.current,t.x,t.y,e.isDarkTheme)}),[t]),(0,n.jsx)("canvas",{ref:a,style:{width:"100%",height:"100%"}})}},63349:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 140 40",children:(0,i.jsx)("path",{fill:"#000000",d:"M18.412 12.216c-4.287 0-5.808 3.454-5.912 3.707a6.332 6.332 0 0 0-5.91-3.707 6.627 6.627 0 0 0-4.653 2.01A6.856 6.856 0 0 0 0 18.975c0 7.282 6.87 13.184 12.5 13.184 5.628 0 12.5-5.902 12.5-13.184a6.856 6.856 0 0 0-1.937-4.748 6.627 6.627 0 0 0-4.65-2.01zm1.13 7.037c0 1.9-0.742 3.722-2.063 5.065a6.983 6.983 0 0 1-4.98 2.099 6.983 6.983 0 0 1-4.98-2.099 7.226 7.226 0 0 1-2.062-5.065v-0.205h2.49v0.205A4.674 4.674 0 0 0 9.28 22.53a4.517 4.517 0 0 0 3.221 1.357 4.517 4.517 0 0 0 3.221-1.357 4.675 4.675 0 0 0 1.335-3.277v-0.205h2.49l-0.006 0.205zm110.438-7.03c-5.791 0-10.02 4.252-10.02 9.988 0 5.735 4.232 9.989 10.02 9.989 5.788 0 10.02-4.252 10.02-9.99 0-5.836-4.23-9.986-10.02-9.986zm0 15.93c-3.174 0-5.338-2.458-5.338-5.942 0-3.485 2.164-5.94 5.338-5.94s5.337 2.458 5.337 5.94c0 3.481-2.166 5.943-5.337 5.943zm-22.251-15.93c-5.79 0-10.02 4.252-10.02 9.988 0 5.735 4.232 9.989 10.02 9.989 5.788 0 10.023-4.252 10.023-9.99-0.008-5.836-4.237-9.986-10.023-9.986zm0 15.93c-3.172 0-5.337-2.458-5.337-5.942 0-3.485 2.165-5.94 5.337-5.94 3.172 0 5.337 2.458 5.337 5.94 0 3.481-2.17 5.943-5.337 5.943zm-65.012-15.93c-3.122 0-5.44 1.383-6.799 3.74V7h-4.232v14.7c0 6.248 3.625 10.5 9.868 10.5 5.136 0 9.92-3.74 9.92-10.09-0.007-5.379-3.168-9.886-8.757-9.886zm-1.208 15.725c-3.423 0-5.387-2.509-5.387-5.737 0-3.277 1.912-5.94 5.337-5.94 3.274 0 5.338 2.663 5.338 5.94-0.002 3.228-1.865 5.738-5.288 5.738zm22.104-15.724c-5.136 0-9.92 3.74-9.92 10.09 0 5.379 3.171 9.876 8.763 9.876 3.121 0 5.437-1.383 6.796-3.74v3.545h4.232v-9.27c-0.002-6.25-3.627-10.501-9.87-10.501zm0 15.93c-3.373 0-5.228-2.563-5.228-5.84 0-3.226 1.865-5.839 5.288-5.839s5.387 2.51 5.387 5.736c-0.01 3.279-2.024 5.943-5.447 5.943zM91.256 7v8.964c-1.359-2.358-3.674-3.74-6.796-3.74-5.591 0-8.763 4.507-8.763 9.875 0 6.455 4.481 10.09 9.709 10.09 6.244 0 10.07-4.25 10.07-10.5V7.003L91.256 7zm-5.589 20.948c-3.423 0-5.287-2.509-5.287-5.737 0-3.277 2.066-5.94 5.337-5.94 3.426 0 5.338 2.612 5.338 5.94-0.005 3.228-1.965 5.738-5.388 5.738z"})})}},50650:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"108",height:"39",stroke:"#000",strokeLinecap:"round",strokeLinejoin:"round",fill:"#fff",fillRule:"evenodd",children:[(0,i.jsx)("defs",{children:(0,i.jsx)("clipPath",{id:"A",children:(0,i.jsx)("path",{d:"M15.7566 4.3862l-.0308.1504-.4803.1427-.6616.2276-.6558.2662c-.4359.1871-.868.3974-1.2904.6346l-1.2036.7561-.1003-.0463c-3.9985-1.5276-7.5494.3106-7.5494.3106-.3241 4.253 1.597 6.9341 1.977 7.4202l-.2642.7966c-.2951.9644-.517 1.9539-.6539 2.9762l-.054.4436C1.0956 20.2894 0 24.0294 0 24.0294c3.0842 3.5471 6.6795 3.767 6.6795 3.767s.0058-.0058.0097-.0077c.4571.8159.9856 1.5932 1.5816 2.3165l.7831.8795c-1.1245 3.2154.1582 5.8907.1582 5.8907 3.4333.1292 5.6881-1.5026 6.1626-1.8787l1.0377.3086c1.0551.272 2.1352.4321 3.2154.4784l.8081.0154h.1312l.0849-.0019.1697-.0058.1678-.0077.0039.0058c1.6164 2.3068 4.4614 2.6328 4.4614 2.6328 2.0233-2.1333 2.139-4.2492 2.139-4.7063h0v-.0309l-.0019-.0636-.0058-.0984c.4244-.2971.8294-.6172 1.2133-.9606a12.606 12.606 0 0 0 2.1043-2.4669l.162-.2566c2.2896.1312 3.904-1.4177 3.904-1.4177-.38-2.3859-1.7398-3.549-2.0233-3.7689h0s-.0116-.0096-.029-.0212l-.027-.0193-.0501-.0328.0347-.4301.0251-.7696-.002-.191-.0019-.0964v-.0483l-.0019-.0655-.0077-.1601-.0116-.2161-.0154-.2063-.0193-.1987-.0232-.1987-.027-.1967-.1485-.7793c-.2392-1.028-.6404-2.004-1.1708-2.8816s-1.1901-1.655-1.9327-2.3089-1.5758-1.1823-2.4496-1.5758-1.7919-.6462-2.7062-.7619c-.4571-.0598-.9123-.0829-1.3636-.0771l-.1678.0038-.0425.0019-.0579.002-.0694.0038-.1678.0116-.1852.0154-.6886.0965c-.9065.1697-1.7629.4976-2.5171.949s-1.41 1.0165-1.9442 1.6568-.9471 1.3463-1.2326 2.0793-.4455 1.4891-.4899 2.2239l-.0116.5478.0039.1351.0058.1465.0212.2624a5.907 5.907 0 0 0 .2045 1.0743c.1986.6886.5188 1.3116.9123 1.8401s.8641.9683 1.3637 1.3097 1.0338.5864 1.5623.7426a5.434 5.434 0 0 0 1.5528.2218l.1851-.0038.0984-.0039.0984-.0058.1581-.0154c.0116 0 .0289-.0039.0444-.0058l.0482-.0058.0964-.0135c.0656-.0077.1216-.0212.1794-.0309l.1736-.0385c.1138-.0251.2238-.0598.3337-.0926.216-.0714.4186-.1582.6076-.2546s.3626-.2064.5246-.3202l.135-.1022a.395.395 0 0 0 .0618-.5594c-.1216-.1485-.3299-.1871-.4957-.0945l-.1254.0656c-.1447.0694-.2951.135-.4552.1871s-.326.0926-.4996.1234l-.2623.0328c-.0444.0058-.0887.0077-.135.0077l-.1331.0039c-.0424 0-.0849-.0019-.1292-.0019l-.1621-.0078s-.027 0-.0058-.0019l-.0173-.0019-.0367-.0039-.0733-.0077-.1446-.0193c-.3877-.054-.7812-.1678-1.1592-.3395s-.7426-.4069-1.0705-.7021-.6134-.648-.8372-1.0492-.38-.8449-.4532-1.3116c-.0367-.2334-.0521-.4745-.0463-.7099l.0096-.1948c0 .0174.0019-.0096.0019-.0115l.002-.0232.0038-.0482.0097-.0964.0559-.382c.1794-1.0164.6886-2.0079 1.4756-2.762.1967-.1871.4089-.3627.6345-.517s.4668-.2932.7176-.4089.513-.2102.7812-.2835.5439-.1196.8236-.1447l.4204-.0173.0946.0019.1138.0038.0713.002c.029 0 0 0 .0135.0019l.029.0019.1138.0077c.3028.0251.6056.0676.9027.1351a6.44 6.44 0 0 1 1.7147.65c1.0802.5979 2.0002 1.5334 2.5653 2.6618a6.08 6.08 0 0 1 .5825 1.7919l.056.4725.0096.1196.0058.1196.0039.1196.0019.1119v.1022l-.0019.1157-.0135.2797-.0502.5169-.081.5092-.1138.5015c-.0829.3337-.1909.6597-.3163.9799-.2527.6403-.5902 1.2479-.9972 1.8092-.8159 1.1207-1.9288 2.0369-3.1942 2.6117-.6326.2854-1.3.4957-1.9867.6095-.3433.0578-.6905.0925-1.0377.1041l-.0636.002h-.056l-.1118.0019h-.1717-.0849c.0483 0-.0077 0-.0058-.0019l-.0347-.002-.5574-.027c-.7426-.0559-1.4775-.1871-2.1892-.3954s-1.4023-.4822-2.0562-.8294c-1.3058-.6982-2.4727-1.6549-3.387-2.8084-.4591-.5748-.8603-1.192-1.192-1.842s-.5922-1.3309-.7851-2.0272-.3105-1.41-.3568-2.1275l-.0077-.135-.0019-.0328v-.029l-.0019-.0597-.0039-.1177-.0019-.0289v-.0405-.083l-.002-.1678v-.0328c0 .0058 0 .0058 0-.0115v-.0656l.0058-.2623.0888-1.0841.1813-1.0955.2642-1.0763c.2025-.7079.4552-1.3946.7542-2.0426.5998-1.2982 1.3868-2.4419 2.3319-3.3639l.7349-.6539c.2546-.2045.5189-.3935.7908-.5709s.5497-.3414.8371-.4919l.436-.216.2218-.0984.2237-.0945c.299-.1273.6076-.2334.9162-.3337l.2334-.0714.2353-.0655.4745-.1216.2392-.052.2411-.0502.2411-.0443.1215-.0213.1215-.0192.2431-.0367.2739-.0366.2719-.0328.1717-.0174.1138-.0116.0578-.0058.0676-.0038.2758-.0174.137-.0096s.0501-.0019.0057-.0019l.029-.002.0578-.0019.2353-.0116h.9297c.6153.0251 1.2191.0926 1.8054.2006 1.1747.218 2.2799.596 3.279 1.0898s1.898 1.0917 2.6773 1.7456l.1446.1234.1408.1254.2759.2527.2661.2565.2546.2604.9124 1.0609c.5536.7117.9953 1.4292 1.3482 2.1082l.0656.1273.0617.1273.1196.2488.1138.245.1042.2392.3491.9065.3723 1.2383a.304.304 0 0 0 .3221.2276c.1543-.0135.2719-.1408.2758-.2951.0077-.3877-.0019-.8448-.0463-1.3656-.0579-.6442-.1678-1.3907-.3858-2.2104s-.5323-1.7167-.9952-2.6483-1.0705-1.898-1.8575-2.8335a14.502 14.502 0 0 0-1.0049-1.0821c.54-2.1487-.6578-4.0119-.6578-4.0119-2.0677-.1293-3.3831.6423-3.8711.9952l-.2469-.1041-1.086-.3935-1.1399-.3163-1.1881-.2295-.2122-.0309C21.7862 1.2055 19.1957 0 19.1957 0c-2.8894 1.8227-3.4391 4.3862-3.4391 4.3862",stroke:"none",strokeLinejoin:"miter",strokeLinecap:"butt",fill:"#000",fillRule:"nonzero",strokeWidth:".0193",transform:"translate(0 .0077)"})})}),(0,i.jsxs)("g",{fill:"#000",stroke:"none",fillRule:"nonzero",children:[(0,i.jsx)("path",{d:"M55.4146 19.4587c-.1404 3.6146-2.9917 6.4302-6.5348 6.4302-3.7396 0-6.5195-3.0275-6.5195-6.6778 0-3.686 3.0096-6.7135 6.6778-6.7135 1.6567 0 3.2776.7122 4.6484 1.9936l-1.0696 1.3172c-1.0517-.9087-2.3153-1.5316-3.5788-1.5316-2.6905 0-4.8986 2.2081-4.8986 4.9343 0 2.7594 2.083 4.8986 4.7378 4.8986 2.3867 0 4.2578-1.7461 4.6305-3.9898h-5.4117v-1.5853h7.3211v.9241zm6.2157-.873h-.9981c-1.1028 0-1.9936.8935-1.9936 1.9937v5.1997h-1.7818v-8.9062h1.4601v.7479c.4799-.4799 1.2457-.7479 2.1009-.7479h1.9221zm9.7053 7.1959h-1.5138v-1.1231c-1.1717 1.1436-3.0172 1.6924-4.8883.8704-1.3861-.6101-2.4174-1.8736-2.6931-3.3644-.5309-2.8794 1.6848-5.4346 4.5157-5.4346 1.1921 0 2.2616.4799 3.0453 1.2636v-1.1232h1.5316v8.9113zM69.513 21.968c.4211-1.8099-.9497-3.4538-2.7365-3.4538-1.5495 0-2.7952 1.2636-2.7952 2.7952 0 1.7332 1.524 3.0734 3.2955 2.7722 1.09-.1864 1.986-1.0339 2.2362-2.1136m5.4116-5.5903v.4978h2.8309v1.5673h-2.8309v7.3389h-1.7639v-9.3504c0-1.9604 1.4065-3.1168 3.1704-3.1168h2.1366l-.7122 1.6746h-1.4218c-.7837 0-1.4091.6228-1.4091 1.3886m12.2707 9.4039h-1.5138v-1.1231c-1.1717 1.1436-3.0172 1.6924-4.8883.8704-1.3861-.6101-2.4174-1.8736-2.6931-3.3644-.5309-2.8794 1.6848-5.4346 4.5157-5.4346 1.1921 0 2.2616.4799 3.0453 1.2636v-1.1232h1.5316v8.9113zm-1.8201-3.8136c.4212-1.8099-.9496-3.4538-2.7364-3.4538-1.5495 0-2.7952 1.2636-2.7952 2.7952 0 1.7332 1.5239 3.0734 3.2955 2.7722 1.0874-.1864 1.986-1.0339 2.2361-2.1136m11.3338-1.4602v5.2713h-1.7817v-5.2713c0-1.1053-.9087-1.9936-1.9936-1.9936-1.1232 0-2.0115.8909-2.0115 1.9936v5.2713h-1.7818v-8.9062h1.478v.7658c.6407-.5693 1.4959-.9088 2.3868-.9088 2.0651.0026 3.7038 1.695 3.7038 3.7779m10.4736 5.2738h-1.5138v-1.1231c-1.1716 1.1436-3.0172 1.6924-4.8883.8704-1.3861-.6101-2.4174-1.8736-2.6931-3.3644-.5309-2.8794 1.6848-5.4346 4.5157-5.4346 1.1921 0 2.2616.4799 3.0453 1.2636v-1.1232h1.5316v8.9113zM105.36 21.968c.4211-1.8099-.9496-3.4538-2.7365-3.4538-1.5495 0-2.7952 1.2636-2.7952 2.7952 0 1.7332 1.524 3.0734 3.2955 2.7722 1.0875-.1864 1.986-1.0339 2.2362-2.1136"}),(0,i.jsx)("path",{d:"M0 0h35.3825v38.4281H0z",transform:"translate(0 -.0077)",clipPath:"url(#A)"})]})]})}},51374:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsxs)("svg",{width:"160",height:"29",viewBox:"0 0 160 29",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[(0,i.jsx)("path",{d:"M44.985 9.6615C44.7884 9.31867 44.5534 8.99925 44.2847 8.70943C43.7645 8.15179 43.138 7.70383 42.4421 7.39193C41.7311 7.06577 40.958 6.89714 40.1757 6.89752C39.0539 6.87224 37.9496 7.17767 37.0002 7.77581C36.0334 8.43321 35.2941 9.37419 34.8842 10.4692C34.3411 11.903 34.0845 13.4295 34.1287 14.9621V15.9572C34.0844 17.4882 34.3303 19.0138 34.8535 20.4533C35.2458 21.5357 35.9649 22.4693 36.9112 23.1251C37.8605 23.7223 38.9655 24.0248 40.0866 23.9942C40.8739 23.998 41.6529 23.8337 42.3715 23.5121C43.0801 23.1988 43.7214 22.7514 44.2602 22.1946C44.5261 21.9186 44.7657 21.6184 44.9757 21.2979V23.5397H52.0392V7.35204H44.9757L44.985 9.6615ZM45.16 15.8251C45.1745 16.512 45.1033 17.1982 44.9481 17.8675C44.8566 18.318 44.6443 18.7351 44.3339 19.0743C44.198 19.2054 44.0373 19.308 43.8611 19.376C43.685 19.4441 43.497 19.4762 43.3082 19.4705C43.1233 19.4755 42.9391 19.4431 42.7671 19.375C42.595 19.3069 42.4384 19.2046 42.307 19.0743C41.9942 18.7392 41.7815 18.3234 41.6928 17.8736C41.5474 17.2009 41.4814 16.5132 41.4962 15.8251V14.9621C41.4809 14.2796 41.5502 13.5978 41.7021 12.9322C41.7888 12.4922 41.9961 12.0849 42.3008 11.7559C42.4329 11.6293 42.5891 11.5306 42.76 11.4652C42.9309 11.3998 43.1131 11.3691 43.2959 11.3752C43.6746 11.3626 44.0429 11.4993 44.3216 11.7559C44.6326 12.0826 44.8455 12.4902 44.9358 12.9322C45.0916 13.5972 45.1628 14.2792 45.1477 14.9621L45.16 15.8251Z",fill:"black"}),(0,i.jsx)("path",{d:"M69.0228 7.546C68.2385 7.10178 67.347 6.8819 66.4461 6.91034C65.5689 6.89745 64.6994 7.07449 63.8972 7.42934C63.1644 7.75789 62.5068 8.23345 61.9654 8.82662C61.6036 9.22935 61.2987 9.68 61.0594 10.1657V7.36485H54.2233V23.5525H61.2652V13.8479C61.2518 13.483 61.3244 13.1201 61.477 12.7884C61.5941 12.531 61.7884 12.3163 62.0329 12.1742C62.2633 12.0474 62.5224 11.9818 62.7854 11.9838C62.9678 11.9736 63.1503 12.0022 63.3207 12.0679C63.4912 12.1335 63.6457 12.2346 63.7742 12.3645C64.0467 12.7129 64.1753 13.1526 64.1335 13.5929V23.5586H71.1725V12.6839C71.2056 11.5894 71.0197 10.4994 70.6258 9.47772C70.3089 8.68225 69.7476 8.00798 69.0228 7.55215",fill:"black"}),(0,i.jsx)("path",{d:"M100.983 17.1711C101.01 17.847 100.839 18.5161 100.492 19.0966C100.348 19.306 100.154 19.4755 99.9277 19.5894C99.701 19.7033 99.4491 19.7576 99.1956 19.7476C98.7997 19.7649 98.4123 19.6286 98.1146 19.3669C97.792 19.0157 97.5786 18.5781 97.5004 18.1077C97.3466 17.322 97.2787 16.5219 97.2977 15.7215V14.9751C97.2977 13.5901 97.4544 12.6044 97.7738 12.0209C97.9086 11.7459 98.1208 11.5163 98.3843 11.3603C98.6478 11.2043 98.9511 11.1285 99.257 11.1424C99.5036 11.1258 99.7503 11.1737 99.9727 11.2814C100.195 11.3891 100.386 11.5529 100.525 11.7566C100.837 12.3067 100.986 12.934 100.955 13.5655V13.6516H108.172C108.142 12.3473 107.724 11.0814 106.972 10.0154C106.183 8.9613 105.105 8.15821 103.87 7.70291C102.349 7.13926 100.735 6.86831 99.1127 6.9044C97.4861 6.87585 95.8711 7.18219 94.3679 7.80428C93.0212 8.37295 91.8787 9.33669 91.0911 10.5682C90.2906 11.7967 89.8903 13.3382 89.8903 15.1932V15.6478C89.8903 17.4905 90.2782 19.0393 91.0542 20.2943C91.8216 21.5312 92.9505 22.5025 94.2881 23.0767C95.8095 23.7154 97.4477 24.0292 99.0974 23.9981C100.697 24.0273 102.289 23.7575 103.79 23.2026C105.063 22.7366 106.177 21.9187 107.002 20.8441C107.801 19.7537 108.241 18.4423 108.261 17.0911H100.983V17.1711Z",fill:"black"}),(0,i.jsx)("path",{d:"M124.443 7.54468C123.66 7.09528 122.769 6.87106 121.866 6.89672C120.99 6.88379 120.122 7.06084 119.321 7.41571C118.587 7.74266 117.929 8.21858 117.389 8.81315C117.123 9.10845 116.888 9.42931 116.686 9.77121V2.36688H109.644V23.5389H116.686V13.8342C116.672 13.4693 116.745 13.1065 116.897 12.7748C117.016 12.518 117.21 12.3037 117.453 12.1606C117.685 12.0332 117.945 11.9676 118.209 11.9701C118.391 11.9602 118.574 11.9889 118.744 12.0546C118.914 12.1202 119.069 12.2212 119.198 12.3509C119.468 12.7005 119.595 13.1395 119.554 13.5793V23.545H126.596V12.6703C126.628 11.5756 126.441 10.4855 126.046 9.4641C125.731 8.66752 125.169 7.99272 124.443 7.53853",fill:"black"}),(0,i.jsx)("path",{d:"M139.064 9.66154C138.868 9.31871 138.633 8.99929 138.364 8.70947C137.844 8.15183 137.218 7.70387 136.522 7.39197C135.815 7.07262 135.049 6.90827 134.274 6.90986C133.152 6.88457 132.047 7.19 131.098 7.78815C130.132 8.44644 129.393 9.38712 128.982 10.4815C128.439 11.9154 128.182 13.4418 128.227 14.9744V15.9695C128.182 17.5005 128.428 19.0261 128.951 20.4656C129.344 21.548 130.063 22.4816 131.009 23.1374C131.958 23.7347 133.063 24.0371 134.185 24.0065C134.972 24.0104 135.751 23.846 136.469 23.5244C137.178 23.2111 137.819 22.7637 138.358 22.2069C138.624 21.931 138.864 21.6308 139.074 21.3102V23.552H146.137V7.36438H139.074L139.064 9.66154ZM139.243 15.8251C139.256 16.5122 139.184 17.1984 139.028 17.8675C138.936 18.3181 138.724 18.7351 138.413 19.0744C138.277 19.2055 138.117 19.308 137.941 19.3761C137.764 19.4441 137.576 19.4763 137.388 19.4705C137.203 19.4756 137.019 19.4431 136.846 19.375C136.674 19.3069 136.518 19.2046 136.386 19.0744C136.074 18.7392 135.861 18.3234 135.772 17.8737C135.627 17.2009 135.561 16.5133 135.576 15.8251V14.9621C135.56 14.2796 135.63 13.5978 135.781 12.9322C135.868 12.4922 136.076 12.085 136.38 11.756C136.512 11.6294 136.669 11.5306 136.839 11.4652C137.01 11.3998 137.192 11.3692 137.375 11.3752C137.754 11.3626 138.122 11.4993 138.401 11.756C138.712 12.0827 138.925 12.4903 139.015 12.9322C139.172 13.5971 139.245 14.2791 139.23 14.9621L139.243 15.8251Z",fill:"black"}),(0,i.jsx)("path",{d:"M160 11.6973V7.36408H156.984V2.37973H149.945V7.36408H147.47V11.6973H149.927V18.7608C149.879 19.7987 150.153 20.826 150.71 21.7029C151.226 22.4493 151.963 23.0152 152.817 23.3214C153.798 23.6629 154.831 23.8282 155.869 23.8097C156.648 23.8187 157.426 23.7426 158.188 23.5825C158.813 23.4502 159.42 23.244 159.997 22.9683V19.1479C159.511 19.3103 159.002 19.3942 158.489 19.3966C158.092 19.4252 157.698 19.3168 157.371 19.0895C157.11 18.8807 156.981 18.5121 156.981 17.9839V11.6912L160 11.6973Z",fill:"black"}),(0,i.jsx)("path",{d:"M27.8915 0.00614816H27.6642C20.9416 0.00614816 17.674 10.0639 17.674 10.0639V2.34635H0V23.5582H7.06348V9.41598H10.8317V23.5582H18.411C18.411 23.5582 22.3052 6.77177 25.9506 8.02784C28.4075 8.94917 21.4791 23.5429 21.4791 23.5429H31.4877C31.4877 23.5429 32.8758 14.0379 32.8973 10.7488C33.2044 5.16248 32.323 0 27.8853 0",fill:"black"}),(0,i.jsx)("path",{d:"M77.4955 24.4947C77.5058 24.2161 77.4236 23.9419 77.262 23.7147C77.0874 23.4942 76.8496 23.3324 76.5803 23.251C76.2265 23.1414 75.8573 23.0896 75.487 23.0974L71.7219 7.36431H79.0525L81.2484 20.8586H80.5789L82.876 7.36431H90.0593L86.4969 23.0974C86.1031 23.0851 85.71 23.137 85.3329 23.251C85.0775 23.3265 84.8547 23.4855 84.7002 23.7025C84.559 23.9419 84.4907 24.2171 84.5037 24.4947V28.2169H77.4955V24.4947Z",fill:"black"})]})}},52537:(e,t,s)=>{s.r(t),s.d(t,{default:()=>n});s(67294);var i=s(85893);function n(){return(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"191",height:"55",viewBox:"0 0 191 55",className:"site-brand__logo",children:(0,i.jsxs)("g",{fill:"#000000",children:[(0,i.jsx)("g",{children:(0,i.jsx)("path",{d:"M89.348 16.818l-4.585-12.18c-.19-.473-.326-.892-.326-1.254 0-.948.734-1.255 2.88-1.338V.847h-8.07v1.2c.87.139 1.549.306 1.875 1.142l.97 2.562-4.267 11.039-4.423-12.152c-.19-.501-.326-.892-.326-1.254 0-.948.734-1.255 2.88-1.338V.847h-8.234v1.2c.87.139 1.55.306 1.875 1.142l7.005 18.48h.924l5.408-13.8 5.38 13.8h.925l6.626-18.48c.326-.864 1.006-1.003 1.875-1.143V.847h-6.848v1.2c2.147.083 2.908.417 2.908 1.365 0 .362-.163.78-.327 1.255l-4.125 12.15zM107.986 17.04c-.897 1.144-2.419 2.203-4.675 2.203-3.587 0-5.218-2.37-5.218-6.217h10.653v-.78c0-3.345-2.065-5.91-6.033-5.91-4.158 0-7.202 3.262-7.202 8.14 0 3.987 2.582 7.192 6.958 7.192 3.832 0 5.707-2.23 6.305-4.265l-.788-.362zm-5.952-8.975c2.446 0 3.723 1.616 3.723 3.568h-7.582c.3-2.091 1.712-3.568 3.86-3.568M51.395 17.04c-.897 1.144-2.42 2.203-4.675 2.203-3.587 0-5.218-2.37-5.218-6.217h10.654v-.78c0-3.345-2.066-5.91-6.033-5.91-4.158 0-7.202 3.262-7.202 8.14 0 3.987 2.581 7.192 6.957 7.192 3.831 0 5.707-2.23 6.305-4.265l-.788-.362zm-5.952-8.975c2.446 0 3.723 1.616 3.723 3.568h-7.582c.299-2.091 1.712-3.568 3.859-3.568M30.782 6.336c-2.12 0-4.022 1.06-5.191 2.592V6.336h-.815L21.63 7.73v.669l1.243.976v15.377c0 1.281-.924 1.42-2.174 1.588v1.087h7.066V26.34c-1.25-.168-2.174-.307-2.174-1.59v-4.197c.87.669 2.12 1.115 3.75 1.115 4.294 0 7.827-3.206 7.827-8.363 0-3.847-2.202-6.969-6.386-6.969zM29.64 20.08c-2.062 0-4.043-.862-4.049-3.5v-6.285c.924-1.003 2.5-1.84 4.158-1.84 3.505 0 4.62 3.123 4.62 6.022 0 3.596-1.875 5.603-4.729 5.603zM10.488.607C4.765.607.017 4.82.017 11.532c0 5.318 3.772 10.136 9.906 10.136 5.723 0 10.471-4.213 10.471-10.925 0-5.318-3.772-10.136-9.906-10.136m6.511 11.215c0 4.908-2.328 7.837-6.229 7.837-2.324 0-4.244-.967-5.55-2.798-1.166-1.635-1.808-3.91-1.808-6.408 0-4.907 2.329-7.837 6.229-7.837 2.325 0 4.244.968 5.55 2.799C16.357 7.05 17 9.325 17 11.822M68.392 18.713v-7.805c0-3.262-1.875-4.572-4.538-4.572-2.146 0-4.319 1.393-5.515 2.73v-2.73h-.815L54.38 7.73v.669l1.243.976v9.406c-.034 1.217-.945 1.357-2.171 1.521v1.087h7.066v-1.087c-1.25-.167-2.174-.307-2.174-1.589h-.004v-8.392c1.142-.947 3.015-1.727 4.482-1.727 1.794 0 2.854.641 2.854 2.704v7.415c0 1.282-.924 1.422-2.174 1.589v1.087h7.066v-1.087c-1.251-.167-2.175-.307-2.175-1.589zM119.036 6.336c-2.12 0-3.968 1.06-5.164 2.593V.02h-.815l-3.146 1.394v.669l1.243.976v16.743h.003c1.169.92 3.423 1.866 6.465 1.866 4.267 0 7.827-3.206 7.827-8.363 0-3.847-2.228-6.969-6.413-6.969zM117.92 20.08c-2.064 0-4.047-.863-4.049-3.508v-6.277c.924-1.003 2.5-1.84 4.158-1.84 3.479 0 4.62 3.123 4.62 6.022 0 3.596-1.875 5.603-4.729 5.603z",transform:"translate(64.687 15.682)"})}),(0,i.jsx)("path",{d:"M40.828 27.457l-.001.055 6.38 3.517s1.855 1.048 3.889 1.808c-2.163-.193-4.29-.05-4.29-.05l-7.277.41c-.265.554-.569 1.087-.906 1.596l11.096 8.805c.487-.666.945-1.355 1.37-2.065l-5.016-3.985c-1.95-1.616-3.903-2.52-3.903-2.52 1.817.37 4.435.21 4.435.21l7.373-.414c.23-.829.425-1.673.578-2.53l-6.463-3.56s-2.288-1.277-4.086-1.729c0 0 2.152.03 4.613-.584l6.25-1.42c-.073-.83-.182-1.649-.328-2.455l-13.835 3.138c.078.58.121 1.172.121 1.773zM37.1 36.694c-.424.44-.878.852-1.358 1.231l1.22 7.168s.334 2.099 1.005 4.157c-1.197-1.806-2.635-3.375-2.635-3.375l-4.86-5.417c-.591.136-1.197.235-1.815.29l.011 14.137c.835-.036 1.66-.11 2.475-.22l-.002-6.392c.052-2.528-.457-4.613-.457-4.613.842 1.647 2.6 3.586 2.6 3.586l4.923 5.489c.801-.34 1.584-.716 2.345-1.128l-1.237-7.255s-.426-2.58-1.192-4.263c0 0 1.318 1.696 3.334 3.231l5.012 3.986c.599-.57 1.17-1.168 1.716-1.79L37.1 36.694zM35.827 17.056l6.738-2.78s1.978-.792 3.843-1.903c-1.501 1.565-2.715 3.312-2.715 3.312l-4.215 5.926c.268.547.497 1.115.689 1.7l13.828-3.157c-.22-.8-.477-1.586-.767-2.356l-6.257 1.427c-2.484.511-4.41 1.47-4.41 1.47 1.423-1.185 2.929-3.326 2.929-3.326l4.27-5.999c-.511-.703-1.054-1.38-1.628-2.03l-6.816 2.814s-2.428.988-3.903 2.108c0 0 1.366-1.659 2.418-3.96l2.784-5.759c-.69-.455-1.4-.88-2.132-1.272l-6.162 12.735c.527.316 1.03.668 1.506 1.05zM15.393 21.612l-4.216-5.925s-1.214-1.747-2.715-3.311c1.865 1.11 3.844 1.901 3.844 1.901l6.737 2.78c.477-.383.979-.734 1.506-1.05L14.385 3.272c-.73.393-1.441.818-2.131 1.273l2.785 5.759c1.052 2.3 2.419 3.959 2.419 3.959-1.476-1.12-3.905-2.107-3.905-2.107L6.737 9.342c-.573.65-1.116 1.328-1.627 2.03l4.27 6s1.506 2.14 2.93 3.325c0 0-1.926-.959-4.41-1.47l-6.257-1.425c-.29.77-.547 1.555-.768 2.355l13.83 3.156c.19-.585.42-1.154.688-1.7zM24.402 40.458l-4.86 5.418s-1.438 1.57-2.634 3.376c.67-2.06 1.004-4.158 1.004-4.158l1.22-7.168c-.481-.38-.935-.79-1.359-1.231L6.69 45.518c.545.622 1.118 1.22 1.717 1.79l5.011-3.986c2.015-1.535 3.333-3.231 3.333-3.231-.766 1.683-1.19 4.262-1.19 4.262l-1.237 7.256c.76.412 1.543.788 2.345 1.128l4.921-5.49s1.758-1.94 2.6-3.586c0 0-.509 2.085-.456 4.612l-.001 6.393c.814.11 1.64.183 2.474.22l.01-14.137c-.62-.056-1.224-.154-1.815-.29zM24.511 14.43l2.02-6.981s.613-2.036.904-4.181c.293 2.145.905 4.18.905 4.18l2.02 6.983c.605.134 1.194.307 1.764.52L38.27 2.206c-.758-.324-1.535-.614-2.326-.87L33.16 7.1c-1.148 2.255-1.597 4.354-1.597 4.354-.042-1.848-.782-4.356-.782-4.356L28.739.032C28.307.012 27.873 0 27.436 0c-.437 0-.872.011-1.304.032L24.09 7.099s-.74 2.508-.782 4.356c0 0-.449-2.099-1.597-4.354l-2.783-5.764c-.792.256-1.568.546-2.326.87l6.146 12.743c.57-.212 1.16-.385 1.763-.52zM6.252 26.424c2.46.614 4.613.583 4.613.583-1.798.452-4.087 1.73-4.087 1.73l-6.462 3.56c.153.858.347 1.702.579 2.53l7.373.413s2.618.161 4.434-.21c0 0-1.952.903-3.902 2.52l-5.017 3.986c.427.71.884 1.399 1.371 2.065l11.095-8.807c-.337-.509-.64-1.041-.907-1.596l-7.276-.41s-2.127-.141-4.29.053c2.033-.762 3.888-1.81 3.888-1.81l6.38-3.517-.002-.057c0-.601.044-1.192.121-1.772L.33 22.55c-.146.807-.255 1.626-.329 2.455l6.252 1.42z"})]})})}},23397:(e,t,s)=>{s.r(t),s.d(t,{default:()=>R});var i=s(67294),n=s(86010),r=s(7372),a=s(33692),o=s(52263),c=s(44996);const l={heroBanner:"heroBanner_UJJx",hero:"hero_syme",container:"container_czXe",mainTitle:"mainTitle_BcKq",subTitle:"subTitle_opAm",section:"section_rC2D",sectionAlt:"sectionAlt_XiGz",buttons:"buttons_pzbO",logos:"logos_NYVn",features:"features_keug",featureImage:"featureImage_yA8i",heart:"heart_Zeus",quote:"quote_aYQC",responsiveEmbed:"responsiveEmbed_q7kv",lspDemo:"lspDemo_XLVG",playWithIt:"playWithIt_Xc2P"};var h=s(53225),d=s(92949),u=s(59250),m=s(63349),f=s(50650),p=s(51374),g=s(52537);const v="carousel_NhIU",x="testimonial_bdm8",C="quote_WCQh",b="author_w76v",w="switch_Vlgy";var j=s(85893);const y=[{quote:"We use Centrifugo to power real time updates and chat. It's been incredibly easy to use and reliable.",author:"Victor Pontis, Founder at Luma"},{quote:"Centrifugo listed in our tech radar, and new projects will use it by default.",author:"Marko Kevac, Engineering Manager at Badoo"},{quote:"Nine months in production, and we didn't encounter any issue with Centrifugo \u2013 it performed flawlessly!",author:"Kirill, CTO at RabbitX"}];const M=function(){const[e,t]=(0,i.useState)(0);return(0,j.jsxs)("div",{className:v,children:[(0,j.jsx)("button",{className:w,onClick:()=>{t((e=>0===e?y.length-1:e-1))},children:"<"}),(0,j.jsxs)("div",{className:x,children:[(0,j.jsxs)("blockquote",{className:C,children:["\u201c",y[e].quote,"\u201d"]}),(0,j.jsxs)("p",{className:b,children:["- ",y[e].author]})]}),(0,j.jsx)("button",{className:w,onClick:()=>{t((e=>e===y.length-1?0:e+1))},children:">"})]})},S="banner_G2O5",k="bannerTitle_na9p",N="bannerLink_azGU",_="bannerText_WQt1",z=()=>(0,j.jsxs)("div",{className:S,children:[(0,j.jsxs)("h2",{className:k,children:["Using Centrifugo? Check out ",(0,j.jsx)("a",{className:N,href:"/docs/pro/overview",children:"Centrifugo PRO"})]}),(0,j.jsx)("p",{className:_,children:"Innovative answers to complex real-time messaging challenges"})]}),V="imageContainer_hh_m",I="rotatingImage_UjnV",P=["/img/pro_carousel_1.png","/img/pro_carousel_2.png","/img/pro_carousel_3.png","/img/pro_carousel_4.png"],L=()=>{const[e,t]=(0,i.useState)(0);return(0,i.useEffect)((()=>{const e=setInterval((()=>{t((e=>(e+1)%P.length))}),1500);return()=>clearInterval(e)}),[]),(0,j.jsx)("div",{className:V,children:(0,j.jsx)("img",{src:P[e],alt:"Rotating Image",className:I})})};function T(e){let{imageUrl:t,title:s,children:i}=e;const r=(0,c.Z)(t);return(0,j.jsxs)("div",{className:(0,n.Z)("col col--4",l.feature),children:[r&&(0,j.jsx)("div",{className:"text--center",children:(0,j.jsx)("div",{className:"feature-media",children:(0,j.jsx)("img",{className:l.featureImage,src:r,alt:s})})}),(0,j.jsx)("h2",{className:"text--center",children:s}),(0,j.jsx)("p",{children:i})]})}function H(){const e="dark"==(0,d.I)().colorMode;return(0,j.jsxs)("header",{id:"hero",className:(0,n.Z)("hero hero--primary",l.heroBanner),children:[(0,j.jsx)(h.default,{isDarkTheme:e}),(0,j.jsxs)("div",{className:"container",style:{zIndex:1},children:[(0,j.jsx)("div",{className:l.mainTitle,children:"CENTRIFUGO"}),(0,j.jsx)("div",{className:l.subTitle,children:"Scalable real-time messaging server. Set up once and forever."}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg"),to:(0,c.Z)("docs/getting-started/introduction"),children:"GET STARTED"})})]})]})}const R=function(){const e=(0,o.Z)(),{siteConfig:{tagline:t}={}}=e;return(0,j.jsxs)(r.Z,{title:t,description:"Centrifugo is an open source server designed to help building interactive real-time messaging applications. Think chats, live comments, multiplayer games, streaming metrics etc. Centrifugo provides a variety of real-time transports, scales well and integrates with any application.",children:[(0,j.jsx)(H,{}),(0,j.jsx)(z,{}),(0,j.jsxs)("main",{children:[(0,j.jsx)("section",{className:(0,n.Z)("logos-wrapper",l.logos),children:(0,j.jsx)("div",{className:"container",children:(0,j.jsxs)("div",{className:"row justify-content-center",children:[(0,j.jsx)("div",{className:"col",style:{fontSize:"14px"},children:"USED IN PRODUCTS OF SUCCESSFUL COMPANIES"}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(m.default,{})}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(f.default,{})}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(p.default,{})}),(0,j.jsx)("div",{className:"col",children:(0,j.jsx)(g.default,{})}),(0,j.jsx)("div",{className:"col",style:{fontSize:"14px"},children:"THOUSANDS OF REAL INSTALLATIONS"})]})})}),(0,j.jsx)("section",{className:(0,n.Z)("features-wrapper",l.features),children:(0,j.jsx)("div",{className:"container",children:(0,j.jsxs)("div",{className:"row",children:[(0,j.jsxs)(T,{title:"Seamless Integration",imageUrl:"img/feature_integration.png",children:["Centrifugo is a self-hosted service which handles connections over various ",(0,j.jsx)("a",{href:"/docs/transports/overview",children:"transports"})," and provides a simple ",(0,j.jsx)("a",{href:"/docs/server/server_api",children:"publishing API"}),". Centrifugo nicely integrates with any application \u2014 no changes in the existing app architecture required to introduce real-time updates."]}),(0,j.jsxs)(T,{title:"Great Performance",imageUrl:"img/feature_performance.png",children:["Centrifugo is written in Go language and includes some smart optimizations. See the description of the test stand with ",(0,j.jsx)("a",{href:"/blog/2020/02/10/million-connections-with-centrifugo",children:"one million WebSocket"})," connections and 30 million delivered messages per minute on hardware comparable to a single modern server."]}),(0,j.jsx)(T,{title:"Feature-rich",imageUrl:"img/feature_rich.png",children:"Centrifugo provides flexible auth, various types of subscriptions, channel history, online presence, delta updates, the ability to proxy connection events to the backend, and much more. It comes with official SDK libraries for both web and mobile development."}),(0,j.jsx)(T,{title:"Out-of-the-box Scalability",imageUrl:"img/feature_scalability.png",children:"Scale connections over many Centrifugo nodes by using built-in integrations with efficient brokers: Redis (or Redis Cluster, or Redis-compatible storages like AWS Elasticache, DragonflyDB, Valkey, KeyDB, with client-side sharding support), and Nats."}),(0,j.jsx)(T,{title:"Proven in Production",imageUrl:"img/feature_production.png",children:"Started a decade ago, Centrifugo (and Centrifuge library for Go it's built on top of) is mature, battle-tested software that has been successfully used in production by many companies around the world: VK, Badoo, ManyChat, OpenWeb, Grafana, and others."}),(0,j.jsxs)(T,{title:"Centrifugo PRO",imageUrl:"img/feature_pro.png",children:[(0,j.jsx)("a",{href:"/docs/pro/overview",children:"Centrifugo PRO"})," offers great benefits for corporate and enterprise environments by providing unique features on top of the OSS version: analytics with ClickHouse, real-time tracing, performance optimizations, push notification API, SSO integrations for web UI, etc."]})]})})}),(0,j.jsx)(u.default,{img:(0,j.jsx)("img",{src:"/img/basic_pub_sub.png"}),reversed:!0,isDark:!0,title:"What is real-time messaging?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Real-time messaging is used to create interactive applications where events are delivered to online users with minimal delay."}),(0,j.jsx)("p",{children:"Chats apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, AI streaming responses, etc. can all be built on top of a real-time messaging system."}),(0,j.jsxs)("p",{children:["Centrifugo is a user facing ",(0,j.jsx)("b",{children:"PUB/SUB"})," server that handles persistent connections over various real-time transports \u2014 ",(0,j.jsx)("b",{children:"WebSocket"}),", HTTP-streaming, SSE (Server-Sent Events), WebTransport, GRPC."]})]})}),(0,j.jsx)(M,{}),(0,j.jsx)(u.default,{img:(0,j.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/dzgXph_pRJ0",title:"YouTube video player",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowFullScreen:!0}),title:"Looking for a cool demo?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Here is the real-time telemetry streamed from the Assetto Corsa racing simulator to the Grafana dashboard with a help of our WebSocket technologies."}),(0,j.jsxs)("p",{children:["This demonstrates that you can stream ",(0,j.jsx)("b",{children:"60Hz"})," data towards client connections and thus provide instant visual feedback on the state of the system."]}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg",l.getStarted),to:(0,c.Z)("docs/getting-started/introduction"),children:"Impressive? Get Started!"})})]})}),(0,j.jsx)(u.default,{img:(0,j.jsx)("iframe",{width:"560",height:"315",src:"/img/grand-chat-tutorial-demo.mp4",title:"Messenger tutorial",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowFullScreen:!0}),reversed:!0,isDark:!0,title:"Slack-scale messenger?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Straightforward with Centrifugo! Even though your backend does not support concurrency. See the tutorial where we build a beautiful messenger app and go beyond usually shown basics."}),(0,j.jsx)("p",{children:"Centrifugo is a versatile real-time component \u2013 it can be used to build various types of real-time applications, not just messengers."}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg",l.getStarted),to:(0,c.Z)("docs/tutorial/intro"),children:"See full tutorial"})})]})}),(0,j.jsx)(u.default,{img:(0,j.jsx)(L,{}),title:"Are you Enterprise?",text:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("p",{children:"Centrifugal Labs offers a PRO version of Centrifugo that includes a set of unique features, additional APIs, and enhanced performance. Ever dreamed about a self-hosted real-time messaging system combined with a push notification system? Want to benefit from analytics of real-time connections and subscriptions? Centrifugo PRO makes this possible. And much more actually."}),(0,j.jsx)("div",{className:l.buttons,children:(0,j.jsx)(a.Z,{className:(0,n.Z)("button button--outline button--secondary button--lg",l.getStarted),to:(0,c.Z)("docs/pro/overview"),children:"More about Centrifugo PRO"})})]})})]})]})}},86010:(e,t,s)=>{function i(e){var t,s,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;tn});const n=function(){for(var e,t,s=0,n="";s{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var i=t(85893),o=t(11151);const a={id:"introduction",title:"Centrifugo introduction"},r=void 0,s={id:"getting-started/introduction",title:"Centrifugo introduction",description:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server.",source:"@site/docs/getting-started/introduction.md",sourceDirName:"getting-started",slug:"/getting-started/introduction",permalink:"/docs/getting-started/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/getting-started/introduction.md",tags:[],version:"current",frontMatter:{id:"introduction",title:"Centrifugo introduction"},sidebar:"Introduction",next:{title:"Join community",permalink:"/docs/getting-started/community"}},c={},l=[{value:"Background and motivation",id:"background-and-motivation",level:2}];function d(e){const n={admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("img",{src:"/img/logo_animated_no_accel.svg",width:"100px",height:"100px",align:"left",style:{marginRight:"10px",float:"left"}}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is language-agnostic and can be used to build chat apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, AI streaming responses, etc., in combination with any backend and frontend. It is well suited for modern architectures and allows decoupling of business logic from the real-time transport layer."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo scales horizontally, allowing multiple Centrifugo nodes in a cluster to load balance client connections. A message published to any Centrifugo node in this setup will be delivered to online subscribers connected to other nodes. This is achieved through an integration with a set of high-performance PUB/SUB brokers capable of handling millions of concurrent channels."}),"\n",(0,i.jsx)(n.p,{children:"Several official SDKs for browser and mobile development wrap the bidirectional client-to-server protocol, offering a straightforward API for real-time subscriptions multiplexed over a single connection. These SDKs handle reconnects, manage ping-pong, timeouts, and deal with other complexities of working with real-time connections. Additionally, Centrifugo supports a unidirectional approach for simple use cases with no SDK dependency."}),"\n",(0,i.jsx)(n.admonition,{title:"Real-time?",type:"info",children:(0,i.jsx)(n.p,{children:"By real-time, we refer to a soft real-time system. This means there are no strict latency timing constraints. Centrifugo does its best to minimize delivery delays, but due to factors like network latencies, garbage collection cycles, and so on, those can't be guaranteed."})}),"\n",(0,i.jsx)(n.h2,{id:"background-and-motivation",children:"Background and motivation"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(72297).Z+"",width:"2000",height:"1068"})}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo was born more than a decade ago to help applications whose server-side code was written in a language or framework lacking built-in concurrency support. In such cases, managing persistent connections can be a real headache, usually resolvable only by altering the technology stack and investing time in developing a production-ready solution."}),"\n",(0,i.jsx)(n.p,{children:"For instance, frameworks like Django, Flask, Yii, Laravel, Ruby on Rails, and others offer limited or suboptimal support for handling numerous persistent connections for real-time messaging tasks."}),"\n",(0,i.jsx)(n.p,{children:"Here, Centrifugo provides a straightforward and non-obtrusive way to introduce real-time updates and manage many persistent connections without radical changes in the application backend architecture. Developers can continue to work on the application's backend using their preferred language or framework, and keep the existing architecture. Just let Centrifugo deal with persistent connections and be the real-time messaging transport layer."}),"\n",(0,i.jsx)(n.p,{children:"These days, Centrifugo offers advanced and unique features that can significantly simplify a developer's workload and save months (if not years) of development time, even if the application's backend is built with an asynchronous concurrent language or framework. The documentation uncovers features step by step."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo fits well with modern architectures and can serve as a universal real-time component, regardless of the application's technology stack. It stands as a powerful self-hosted alternative to cloud solutions like Pusher, Ably, or PubNub."})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},72297:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/bg_cat-4454fbaae0446c3b1964e06821dd378b.jpg"},11151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>r});var i=t(67294);const o={},a=i.createContext(o);function r(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9ff4038f.4a9bfed7.js b/assets/js/9ff4038f.4a9bfed7.js deleted file mode 100644 index bdeac6c40..000000000 --- a/assets/js/9ff4038f.4a9bfed7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[2353],{4590:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var i=t(85893),o=t(11151);const a={id:"introduction",title:"Centrifugo introduction"},r=void 0,s={id:"getting-started/introduction",title:"Centrifugo introduction",description:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server.",source:"@site/docs/getting-started/introduction.md",sourceDirName:"getting-started",slug:"/getting-started/introduction",permalink:"/docs/getting-started/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/getting-started/introduction.md",tags:[],version:"current",frontMatter:{id:"introduction",title:"Centrifugo introduction"},sidebar:"Introduction",next:{title:"Join community",permalink:"/docs/getting-started/community"}},c={},l=[{value:"Background and motivation",id:"background-and-motivation",level:2}];function d(e){const n={admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("img",{src:"/img/logo_animated_no_accel.svg",width:"100px",height:"100px",align:"left",style:{marginRight:"10px",float:"left"}}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is language-agnostic and can be used to build chat apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, etc., in combination with any backend and frontend. It is well suited for modern architectures and allows decoupling of business logic from the real-time transport layer."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo scales horizontally, allowing multiple Centrifugo nodes in a cluster to load balance client connections. A message published to any Centrifugo node in this setup will be delivered to online subscribers connected to other nodes. This is achieved through an integration with a set of high-performance PUB/SUB brokers capable of handling millions of concurrent channels."}),"\n",(0,i.jsx)(n.p,{children:"Several official SDKs for browser and mobile development wrap the bidirectional client-to-server protocol, offering a straightforward API for real-time subscriptions multiplexed over a single connection. These SDKs handle reconnects, manage ping-pong, timeouts, and deal with other complexities of working with real-time connections. Additionally, Centrifugo supports a unidirectional approach for simple use cases with no SDK dependency."}),"\n",(0,i.jsx)(n.admonition,{title:"Real-time?",type:"info",children:(0,i.jsx)(n.p,{children:"By real-time, we refer to a soft real-time system. This means there are no strict latency timing constraints. Centrifugo does its best to minimize delivery delays, but due to factors like network latencies, garbage collection cycles, and so on, those can't be guaranteed."})}),"\n",(0,i.jsx)(n.h2,{id:"background-and-motivation",children:"Background and motivation"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(72297).Z+"",width:"2000",height:"1068"})}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo was born more than a decade ago to help applications whose server-side code was written in a language or framework lacking built-in concurrency support. In such cases, managing persistent connections can be a real headache, usually resolvable only by altering the technology stack and investing time in developing a production-ready solution."}),"\n",(0,i.jsx)(n.p,{children:"For instance, frameworks like Django, Flask, Yii, Laravel, Ruby on Rails, and others offer limited or suboptimal support for handling numerous persistent connections for real-time messaging tasks."}),"\n",(0,i.jsx)(n.p,{children:"Here, Centrifugo provides a straightforward and non-obtrusive way to introduce real-time updates and manage many persistent connections without radical changes in the application backend architecture. Developers can continue to work on the application's backend using their preferred language or framework, and keep the existing architecture. Just let Centrifugo deal with persistent connections and be the real-time messaging transport layer."}),"\n",(0,i.jsx)(n.p,{children:"These days, Centrifugo offers advanced and unique features that can significantly simplify a developer's workload and save months (if not years) of development time, even if the application's backend is built with an asynchronous concurrent language or framework. The documentation uncovers features step by step."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo fits well with modern architectures and can serve as a universal real-time component, regardless of the application's technology stack. It stands as a powerful self-hosted alternative to cloud solutions like Pusher, Ably, or PubNub."})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},72297:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/bg_cat-4454fbaae0446c3b1964e06821dd378b.jpg"},11151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>r});var i=t(67294);const o={},a=i.createContext(o);function r(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.c6990af2.js b/assets/js/runtime~main.9e6d95f3.js similarity index 98% rename from assets/js/runtime~main.c6990af2.js rename to assets/js/runtime~main.9e6d95f3.js index 4df041b61..c0d57321e 100644 --- a/assets/js/runtime~main.c6990af2.js +++ b/assets/js/runtime~main.9e6d95f3.js @@ -1 +1 @@ -(()=>{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=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 d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({68:"7b29b810",70:"dc4f2258",102:"52bba951",152:"54f44165",216:"3630fee7",347:"54aee988",408:"b325d9c4",410:"84a9b932",425:"c0256a6a",430:"c9a3329e",477:"84b8e2b1",509:"629b5641",532:"d1cb7448",562:"a2d1b113",595:"7f356cfe",628:"0a4443e6",630:"5ffc8930",674:"bd17143e",683:"40537b69",744:"41756ce8",798:"4e585bdd",811:"893c1918",895:"4268d52f",902:"d4ca9753",926:"70aa60b8",988:"9df29718",992:"0fe76b3c",1002:"fe6343fd",1004:"c141421f",1035:"200ce466",1080:"ccc49370",1152:"0136d6f0",1196:"6e37598f",1202:"0eb45cff",1313:"2114e513",1385:"3a890c2d",1420:"5fe24874",1439:"b301b932",1504:"5e453c2c",1514:"1ded7460",1530:"a728857c",1616:"0d0ff016",1658:"07703c67",1695:"d2c1944d",1713:"514bf6b6",1714:"45dfef24",1792:"b910a859",1888:"d4dfc5db",1977:"9db3c45b",1983:"d6627831",1994:"f1b7a7af",2005:"3dfd29d6",2026:"21e8a749",2039:"008140b4",2040:"7a7ba156",2069:"cf0e38ba",2128:"be4c395a",2136:"5c30ba71",2165:"6b2be476",2203:"46627d28",2278:"18793598",2291:"29839967",2292:"3b028b51",2309:"ba0d3b30",2353:"9ff4038f",2413:"3bb37b67",2438:"bfbfeea3",2442:"ee88d6e4",2469:"d1c7a4f7",2479:"ed785809",2535:"814f3328",2540:"211f1d7a",2569:"c3677326",2578:"71fc0044",2617:"679c4099",2624:"03e522d9",2635:"7bd30152",2637:"6ef9986d",2735:"ff64321a",2757:"2b147458",2865:"ad7c169e",2906:"60271c2c",2911:"1b3188ba",2918:"332362b2",2983:"3529cd5b",3001:"bbd14fff",3039:"fbd7a87c",3073:"b2eaf182",3085:"1f391b9e",3089:"a6aa9e1f",3113:"25003e4f",3117:"275906c5",3165:"cac93e67",3190:"4ebb2955",3205:"21c2d27e",3255:"06f11616",3315:"21fdfc04",3321:"6aa961d8",3343:"25c94216",3352:"69d81c34",3400:"3a3c4090",3461:"7df4dfbf",3468:"f26176d2",3556:"984c0c66",3581:"2dbf7ee0",3608:"9e4087bc",3629:"aba21aa0",3655:"694566b3",3672:"1248e41e",3676:"c0434fb9",3734:"3d15ab27",3784:"041d543b",3848:"1a1440a1",3895:"4f64b982",3981:"1d3c9151",4013:"01a85c17",4016:"d9829201",4020:"e8314be4",4035:"2b8ad662",4073:"3e15fc9c",4085:"230ca58d",4114:"631e3db1",4131:"238ce909",4158:"32eeb95a",4160:"3c51ccb2",4225:"633b2ed2",4282:"e6b6a8f8",4295:"237c01c3",4335:"e8c6e505",4368:"a94703ab",4435:"a82fa8b7",4491:"e6afaed9",4583:"7c110bd0",4586:"c98fa109",4633:"2f70c421",4655:"776d934d",4691:"0a7ca2d6",4787:"1117f49a",4864:"ee10dcb9",4911:"5a70f1d0",4935:"c85d45db",4964:"ea108d2f",4968:"2eb9c429",5028:"94d5cf4c",5048:"0eae5577",5069:"192a8b1e",5077:"3a2ce571",5107:"936398dc",5146:"ffdd667d",5148:"679046a6",5180:"d016d150",5214:"c318ab3c",5270:"13f6d888",5304:"30b3ad4a",5312:"fd3209d2",5343:"1335c7a1",5358:"3c4ec49c",5402:"f8e87449",5407:"56231886",5410:"e1d600f6",5432:"16c9b55b",5484:"ee78c395",5625:"39d4d18a",5675:"561a848a",5688:"b1c31e1e",5731:"32663f72",5734:"b4a3c16e",5736:"89734ed6",5755:"a564e6ff",5847:"c1817076",5859:"369aea06",5861:"9c1ee1d6",5863:"f178572b",5878:"d835c886",5901:"d2fe6fea",5980:"a7456010",5990:"32e1c903",5993:"29b4017f",6050:"81e12894",6103:"6aa24bd3",6104:"86030ab7",6253:"3f0e28d9",6274:"a41a0a70",6360:"0902c6ba",6484:"4bd4488a",6504:"53a3e6dc",6515:"fcb790ab",6533:"1cd70467",6562:"f762c5da",6567:"a74df3cd",6685:"db2f115c",6686:"267fbc4e",6705:"fe52e117",6709:"0295581e",6720:"6574fcee",6738:"861598a7",6791:"2daf4703",6841:"ea47b74c",6847:"d9558d80",6867:"93f9db65",6877:"91c5cac2",6889:"aacb0ae1",6953:"b4f0bebf",6990:"0dc36dc4",7040:"ab6f12ff",7049:"c2f60b05",7054:"9dd8a0d2",7092:"b05011d9",7115:"2a42cb18",7140:"e19d40c8",7249:"5fe5b810",7262:"e66faea1",7270:"9c3b1acf",7272:"4529506a",7287:"2e854b47",7318:"f2e9cf2f",7330:"b5547432",7383:"95a43cb4",7393:"acecf23e",7401:"0d503bfe",7417:"18b1e3cf",7422:"11a20880",7423:"58246c43",7437:"17f6162e",7445:"a8fc9e46",7566:"8e068dda",7572:"6fbe284c",7578:"cc50533f",7670:"91116fee",7717:"01eca2db",7725:"b9cceeee",7750:"4db41ed0",7765:"fe91fc6f",7810:"19e7756f",7815:"2bf25d27",7875:"7a0b2670",7918:"17896441",7920:"1a4e3797",7965:"4a4109ec",7973:"20c4d804",8007:"5706869d",8072:"31c58a66",8199:"5acb7541",8238:"4fc58f03",8246:"0d57d15e",8356:"04ac3258",8375:"5de4a79c",8499:"b479c509",8518:"a7bd4aaa",8523:"f2f7592a",8589:"7672fb2a",8610:"6875c492",8650:"cadfeb4f",8655:"c8380abd",8665:"9b9e219e",8679:"ebc15847",8693:"b0ea8d09",8695:"02c21cfa",8791:"e257283f",8896:"06f9ead7",8899:"4ec37bcb",8951:"09382599",8973:"d4c029c2",8982:"5934e2d7",8983:"79276c30",9027:"9b70d0cc",9054:"b89c2c0a",9093:"386a3726",9109:"a1538072",9201:"4efbf0bc",9208:"36994c47",9217:"fd93cfee",9226:"2acc7b89",9235:"e7893f84",9240:"bbb9e52d",9247:"92b58ac1",9309:"250ad80d",9334:"9c87bba9",9347:"b1f4df52",9362:"8db697a0",9443:"155d95c4",9474:"b6f2a3eb",9476:"498554e3",9523:"2391cf3d",9571:"195b633a",9602:"b62a3811",9604:"49012ebf",9620:"58b29436",9630:"e9cbd346",9661:"5e95c892",9668:"267a22d2",9678:"005b200e",9727:"1d4d4d48",9730:"1e2e01a5",9804:"209857dd",9878:"7747d83f",9925:"73e61bcc"}[e]||e)+"."+{68:"508082ff",70:"6e957083",102:"0fc3a49c",152:"2c065e7f",216:"fa9f5b10",347:"2f8525a7",408:"20cc5e53",410:"e5d3231b",425:"47c0918b",430:"e66f5164",477:"00a01503",509:"8026a2d4",532:"0e153895",562:"f57fa187",595:"97bd2f70",628:"d791006f",630:"1977bbf8",674:"3b64b711",683:"153d7331",744:"24bbd7e4",798:"afd085ad",811:"4f10393a",895:"929a6832",902:"e234425f",926:"3be1d920",988:"df6a1b74",992:"4c6ed1f4",1002:"70eadd97",1004:"86c6cc73",1035:"4ccea36e",1080:"88b4e60f",1152:"bf4e4e2d",1196:"180e65b8",1202:"8654c40f",1313:"e2844e66",1385:"1ea84dad",1420:"36e85b90",1426:"2968b13c",1439:"7d6c9c6d",1504:"a0ac4e70",1514:"058513eb",1530:"cdfad606",1616:"06661121",1658:"e4ef09e0",1695:"0b4b53d6",1713:"3b2f5e1a",1714:"20091116",1772:"6d5a31b9",1792:"00f4ffbf",1888:"b91ad9a6",1977:"f27b462b",1983:"ec397b81",1994:"67edf125",2005:"2e7f8221",2026:"363e4a43",2039:"3fff641c",2040:"abef088e",2069:"b4bac076",2128:"3744e319",2136:"1c830e49",2165:"2d60cb81",2203:"de0062fa",2278:"d6ba6946",2291:"1fad80ae",2292:"9e374f29",2309:"47027545",2312:"a6b4f4c3",2353:"4a9bfed7",2413:"6074a974",2438:"694435cb",2442:"3fbf7502",2469:"7efeefbd",2479:"bcf85839",2535:"80094057",2540:"afce88de",2569:"80be8bac",2578:"1c2abf47",2617:"0623e965",2624:"f5ad11aa",2635:"0eea2ce3",2637:"5b359f42",2735:"e970fd74",2757:"a382d9a1",2865:"58378055",2906:"661a3f80",2911:"ebf28c7f",2918:"7c8de0bf",2983:"6037893f",3001:"78600d55",3039:"cc490564",3073:"378a95f0",3085:"a3a4dbd2",3089:"f2fb7c4e",3113:"36e40b79",3117:"2a532f77",3165:"7e04668b",3190:"c54e9f74",3205:"ee6f19eb",3255:"a5931b50",3315:"805dc457",3321:"4aa973e6",3343:"2b343735",3352:"70be561c",3400:"e8411c52",3461:"d7654115",3468:"1aff2ccc",3556:"2dcf5a91",3581:"0c7c0966",3608:"85e787d3",3629:"8b8a38eb",3655:"b36b0672",3672:"8effc9e6",3676:"98344dff",3734:"af304823",3784:"1e621dc2",3848:"7771e0f4",3895:"12d3ebba",3981:"14f00664",4013:"2f7dfa16",4016:"f6796d5a",4020:"c931abe2",4035:"8607d01e",4073:"e5c550f5",4085:"297058b0",4114:"dd95081f",4131:"10bb85d1",4158:"ddce737e",4160:"a857b5f6",4225:"297a8942",4282:"3a29a743",4295:"bc9ea20c",4335:"fb7d0e7e",4368:"2997a41f",4435:"17c3f2fe",4491:"cb29c1d0",4583:"8ec3c849",4586:"a3ab5555",4633:"f5b43c19",4655:"d624e353",4691:"4b6c2d6c",4787:"d7790b82",4864:"3f6cd347",4911:"21d40fd8",4935:"6c851c46",4964:"897ca3e3",4968:"313fb402",5028:"f2f65f21",5048:"40a9360f",5069:"8a97f21d",5077:"c475ab47",5107:"858e7640",5146:"a5ec9072",5148:"5abb9abe",5180:"105c590a",5214:"f2fa822e",5270:"bf61a0aa",5304:"3224c254",5312:"56c548a6",5343:"a3dbd100",5358:"e6d1e9fa",5386:"d06b5c39",5402:"8a0967bf",5407:"43d386d4",5410:"be2ca255",5432:"f50d0a4b",5484:"28a71401",5625:"40345bfc",5675:"e634aa72",5688:"083a8b50",5731:"28534265",5734:"8b164f48",5736:"271de030",5755:"f6721a42",5847:"78677984",5859:"da51eb5e",5861:"3cf0b566",5863:"f097dbd6",5878:"953b25c7",5901:"bcc65ca6",5980:"f95501f8",5990:"369df1d0",5993:"0b6be868",6050:"3fe3417c",6103:"b50e7e32",6104:"db43d3e9",6253:"2011a943",6274:"eeb9c737",6360:"90ccfaf7",6484:"b6ed66c3",6504:"3cd922a5",6515:"984c7534",6533:"54c40b64",6562:"66ac91d6",6567:"0d729f77",6685:"c4dbaac4",6686:"72bf1caa",6705:"95947139",6709:"04033ffe",6720:"fc25e987",6738:"dc326d76",6791:"111501da",6841:"33485655",6847:"e80b3bb6",6867:"3ea3112f",6877:"0ddb15bb",6889:"bbada35a",6945:"b25b2ba8",6953:"5eb4aa35",6990:"972ce2f0",7040:"bca9b644",7049:"2d9859d8",7054:"a0bac9de",7092:"3a93e9ff",7115:"543d524d",7140:"2afb93cd",7249:"07dccae4",7262:"816a3587",7270:"1570fddf",7272:"411b3db2",7287:"3bd3e607",7318:"a2109a62",7330:"f6cd5008",7383:"c28a3ff4",7393:"4fa667cf",7401:"1683ffdd",7417:"fa86b7b5",7422:"08c54c32",7423:"2dc2ce1f",7437:"1c9fef2e",7445:"9c1f9232",7566:"99d21e2f",7572:"fbf4295d",7578:"18fc8d60",7670:"49f04be5",7717:"000207f1",7725:"a21c59e2",7750:"b16144b5",7765:"0269806d",7810:"60e8dc46",7815:"313e6ff1",7875:"3c3b4bf5",7918:"2a0b9e89",7920:"9c47db27",7965:"ccdd7034",7973:"9ada3512",8007:"35de0fe7",8072:"f8d1cd02",8199:"780f9dc4",8238:"6409f5a3",8246:"48ceaaaa",8356:"d14e9138",8375:"f98481f4",8499:"0d3cf6c3",8518:"85343870",8523:"f9f2ed16",8589:"5484757a",8610:"88e01907",8650:"84a1bff8",8655:"3f686e37",8665:"38fcac3d",8679:"fccb360e",8693:"7b505e6e",8695:"0ba13655",8791:"5ae3ea74",8894:"82ffb7b5",8896:"8cdd4c3b",8899:"3cc9f87e",8951:"503acccd",8973:"0014c4fe",8982:"6b1e9e1b",8983:"2a97314c",9027:"4829c1a7",9054:"703006b2",9093:"43bd95f3",9109:"ec8ac8e9",9201:"65147a77",9208:"5beab5c7",9217:"c7d91946",9226:"8bd4dc11",9235:"45b824e6",9240:"aabbe36a",9247:"77dccd61",9309:"13a665ad",9334:"825c4ec3",9347:"d87683ca",9362:"665db87b",9443:"664e184e",9474:"49e44458",9476:"e35e3975",9523:"558435a6",9571:"7d926ad5",9602:"79113a1f",9604:"82ed41cd",9620:"4d63dfd7",9630:"8d62a9dd",9661:"440c495a",9668:"0b07620a",9678:"a436342a",9727:"7e48f500",9730:"e37db956",9804:"c6a58497",9878:"38c79092",9925:"c52d024f"}[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,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="centrifugal.dev:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},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",18793598:"2278",29839967:"2291",56231886:"5407","7b29b810":"68",dc4f2258:"70","52bba951":"102","54f44165":"152","3630fee7":"216","54aee988":"347",b325d9c4:"408","84a9b932":"410",c0256a6a:"425",c9a3329e:"430","84b8e2b1":"477","629b5641":"509",d1cb7448:"532",a2d1b113:"562","7f356cfe":"595","0a4443e6":"628","5ffc8930":"630",bd17143e:"674","40537b69":"683","41756ce8":"744","4e585bdd":"798","893c1918":"811","4268d52f":"895",d4ca9753:"902","70aa60b8":"926","9df29718":"988","0fe76b3c":"992",fe6343fd:"1002",c141421f:"1004","200ce466":"1035",ccc49370:"1080","0136d6f0":"1152","6e37598f":"1196","0eb45cff":"1202","2114e513":"1313","3a890c2d":"1385","5fe24874":"1420",b301b932:"1439","5e453c2c":"1504","1ded7460":"1514",a728857c:"1530","0d0ff016":"1616","07703c67":"1658",d2c1944d:"1695","514bf6b6":"1713","45dfef24":"1714",b910a859:"1792",d4dfc5db:"1888","9db3c45b":"1977",d6627831:"1983",f1b7a7af:"1994","3dfd29d6":"2005","21e8a749":"2026","008140b4":"2039","7a7ba156":"2040",cf0e38ba:"2069",be4c395a:"2128","5c30ba71":"2136","6b2be476":"2165","46627d28":"2203","3b028b51":"2292",ba0d3b30:"2309","9ff4038f":"2353","3bb37b67":"2413",bfbfeea3:"2438",ee88d6e4:"2442",d1c7a4f7:"2469",ed785809:"2479","814f3328":"2535","211f1d7a":"2540",c3677326:"2569","71fc0044":"2578","679c4099":"2617","03e522d9":"2624","7bd30152":"2635","6ef9986d":"2637",ff64321a:"2735","2b147458":"2757",ad7c169e:"2865","60271c2c":"2906","1b3188ba":"2911","332362b2":"2918","3529cd5b":"2983",bbd14fff:"3001",fbd7a87c:"3039",b2eaf182:"3073","1f391b9e":"3085",a6aa9e1f:"3089","25003e4f":"3113","275906c5":"3117",cac93e67:"3165","4ebb2955":"3190","21c2d27e":"3205","06f11616":"3255","21fdfc04":"3315","6aa961d8":"3321","25c94216":"3343","69d81c34":"3352","3a3c4090":"3400","7df4dfbf":"3461",f26176d2:"3468","984c0c66":"3556","2dbf7ee0":"3581","9e4087bc":"3608",aba21aa0:"3629","694566b3":"3655","1248e41e":"3672",c0434fb9:"3676","3d15ab27":"3734","041d543b":"3784","1a1440a1":"3848","4f64b982":"3895","1d3c9151":"3981","01a85c17":"4013",d9829201:"4016",e8314be4:"4020","2b8ad662":"4035","3e15fc9c":"4073","230ca58d":"4085","631e3db1":"4114","238ce909":"4131","32eeb95a":"4158","3c51ccb2":"4160","633b2ed2":"4225",e6b6a8f8:"4282","237c01c3":"4295",e8c6e505:"4335",a94703ab:"4368",a82fa8b7:"4435",e6afaed9:"4491","7c110bd0":"4583",c98fa109:"4586","2f70c421":"4633","776d934d":"4655","0a7ca2d6":"4691","1117f49a":"4787",ee10dcb9:"4864","5a70f1d0":"4911",c85d45db:"4935",ea108d2f:"4964","2eb9c429":"4968","94d5cf4c":"5028","0eae5577":"5048","192a8b1e":"5069","3a2ce571":"5077","936398dc":"5107",ffdd667d:"5146","679046a6":"5148",d016d150:"5180",c318ab3c:"5214","13f6d888":"5270","30b3ad4a":"5304",fd3209d2:"5312","1335c7a1":"5343","3c4ec49c":"5358",f8e87449:"5402",e1d600f6:"5410","16c9b55b":"5432",ee78c395:"5484","39d4d18a":"5625","561a848a":"5675",b1c31e1e:"5688","32663f72":"5731",b4a3c16e:"5734","89734ed6":"5736",a564e6ff:"5755",c1817076:"5847","369aea06":"5859","9c1ee1d6":"5861",f178572b:"5863",d835c886:"5878",d2fe6fea:"5901",a7456010:"5980","32e1c903":"5990","29b4017f":"5993","81e12894":"6050","6aa24bd3":"6103","86030ab7":"6104","3f0e28d9":"6253",a41a0a70:"6274","0902c6ba":"6360","4bd4488a":"6484","53a3e6dc":"6504",fcb790ab:"6515","1cd70467":"6533",f762c5da:"6562",a74df3cd:"6567",db2f115c:"6685","267fbc4e":"6686",fe52e117:"6705","0295581e":"6709","6574fcee":"6720","861598a7":"6738","2daf4703":"6791",ea47b74c:"6841",d9558d80:"6847","93f9db65":"6867","91c5cac2":"6877",aacb0ae1:"6889",b4f0bebf:"6953","0dc36dc4":"6990",ab6f12ff:"7040",c2f60b05:"7049","9dd8a0d2":"7054",b05011d9:"7092","2a42cb18":"7115",e19d40c8:"7140","5fe5b810":"7249",e66faea1:"7262","9c3b1acf":"7270","4529506a":"7272","2e854b47":"7287",f2e9cf2f:"7318",b5547432:"7330","95a43cb4":"7383",acecf23e:"7393","0d503bfe":"7401","18b1e3cf":"7417","11a20880":"7422","58246c43":"7423","17f6162e":"7437",a8fc9e46:"7445","8e068dda":"7566","6fbe284c":"7572",cc50533f:"7578","91116fee":"7670","01eca2db":"7717",b9cceeee:"7725","4db41ed0":"7750",fe91fc6f:"7765","19e7756f":"7810","2bf25d27":"7815","7a0b2670":"7875","1a4e3797":"7920","4a4109ec":"7965","20c4d804":"7973","5706869d":"8007","31c58a66":"8072","5acb7541":"8199","4fc58f03":"8238","0d57d15e":"8246","04ac3258":"8356","5de4a79c":"8375",b479c509:"8499",a7bd4aaa:"8518",f2f7592a:"8523","7672fb2a":"8589","6875c492":"8610",cadfeb4f:"8650",c8380abd:"8655","9b9e219e":"8665",ebc15847:"8679",b0ea8d09:"8693","02c21cfa":"8695",e257283f:"8791","06f9ead7":"8896","4ec37bcb":"8899","09382599":"8951",d4c029c2:"8973","5934e2d7":"8982","79276c30":"8983","9b70d0cc":"9027",b89c2c0a:"9054","386a3726":"9093",a1538072:"9109","4efbf0bc":"9201","36994c47":"9208",fd93cfee:"9217","2acc7b89":"9226",e7893f84:"9235",bbb9e52d:"9240","92b58ac1":"9247","250ad80d":"9309","9c87bba9":"9334",b1f4df52:"9347","8db697a0":"9362","155d95c4":"9443",b6f2a3eb:"9474","498554e3":"9476","2391cf3d":"9523","195b633a":"9571",b62a3811:"9602","49012ebf":"9604","58b29436":"9620",e9cbd346:"9630","5e95c892":"9661","267a22d2":"9668","005b200e":"9678","1d4d4d48":"9727","1e2e01a5":"9730","209857dd":"9804","7747d83f":"9878","73e61bcc":"9925"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,3312:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|3312)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n{"use strict";var e,f,a,c,d,b={},t={};function r(e){var f=t[e];if(void 0!==f)return f.exports;var a=t[e]={exports:{}};return b[e].call(a.exports,a,a.exports,r),a.exports}r.m=b,e=[],r.O=(f,a,c,d)=>{if(!a){var b=1/0;for(i=0;i=d)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[a,c,d]},r.n=e=>{var f=e&&e.__esModule?()=>e.default:()=>e;return r.d(f,{a:f}),f},a=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 d=Object.create(null);r.r(d);var b={};f=f||[null,a({}),a([]),a(a)];for(var t=2&c&&e;"object"==typeof t&&!~f.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((f=>b[f]=()=>e[f]));return b.default=()=>e,r.d(d,b),d},r.d=(e,f)=>{for(var a in f)r.o(f,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:f[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((f,a)=>(r.f[a](e,f),f)),[])),r.u=e=>"assets/js/"+({68:"7b29b810",70:"dc4f2258",102:"52bba951",152:"54f44165",216:"3630fee7",347:"54aee988",408:"b325d9c4",410:"84a9b932",425:"c0256a6a",430:"c9a3329e",477:"84b8e2b1",509:"629b5641",532:"d1cb7448",562:"a2d1b113",595:"7f356cfe",628:"0a4443e6",630:"5ffc8930",674:"bd17143e",683:"40537b69",744:"41756ce8",798:"4e585bdd",811:"893c1918",895:"4268d52f",902:"d4ca9753",926:"70aa60b8",988:"9df29718",992:"0fe76b3c",1002:"fe6343fd",1004:"c141421f",1035:"200ce466",1080:"ccc49370",1152:"0136d6f0",1196:"6e37598f",1202:"0eb45cff",1313:"2114e513",1385:"3a890c2d",1420:"5fe24874",1439:"b301b932",1504:"5e453c2c",1514:"1ded7460",1530:"a728857c",1616:"0d0ff016",1658:"07703c67",1695:"d2c1944d",1713:"514bf6b6",1714:"45dfef24",1792:"b910a859",1888:"d4dfc5db",1977:"9db3c45b",1983:"d6627831",1994:"f1b7a7af",2005:"3dfd29d6",2026:"21e8a749",2039:"008140b4",2040:"7a7ba156",2069:"cf0e38ba",2128:"be4c395a",2136:"5c30ba71",2165:"6b2be476",2203:"46627d28",2278:"18793598",2291:"29839967",2292:"3b028b51",2309:"ba0d3b30",2353:"9ff4038f",2413:"3bb37b67",2438:"bfbfeea3",2442:"ee88d6e4",2469:"d1c7a4f7",2479:"ed785809",2535:"814f3328",2540:"211f1d7a",2569:"c3677326",2578:"71fc0044",2617:"679c4099",2624:"03e522d9",2635:"7bd30152",2637:"6ef9986d",2735:"ff64321a",2757:"2b147458",2865:"ad7c169e",2906:"60271c2c",2911:"1b3188ba",2918:"332362b2",2983:"3529cd5b",3001:"bbd14fff",3039:"fbd7a87c",3073:"b2eaf182",3085:"1f391b9e",3089:"a6aa9e1f",3113:"25003e4f",3117:"275906c5",3165:"cac93e67",3190:"4ebb2955",3205:"21c2d27e",3255:"06f11616",3315:"21fdfc04",3321:"6aa961d8",3343:"25c94216",3352:"69d81c34",3400:"3a3c4090",3461:"7df4dfbf",3468:"f26176d2",3556:"984c0c66",3581:"2dbf7ee0",3608:"9e4087bc",3629:"aba21aa0",3655:"694566b3",3672:"1248e41e",3676:"c0434fb9",3734:"3d15ab27",3784:"041d543b",3848:"1a1440a1",3895:"4f64b982",3981:"1d3c9151",4013:"01a85c17",4016:"d9829201",4020:"e8314be4",4035:"2b8ad662",4073:"3e15fc9c",4085:"230ca58d",4114:"631e3db1",4131:"238ce909",4158:"32eeb95a",4160:"3c51ccb2",4225:"633b2ed2",4282:"e6b6a8f8",4295:"237c01c3",4335:"e8c6e505",4368:"a94703ab",4435:"a82fa8b7",4491:"e6afaed9",4583:"7c110bd0",4586:"c98fa109",4633:"2f70c421",4655:"776d934d",4691:"0a7ca2d6",4787:"1117f49a",4864:"ee10dcb9",4911:"5a70f1d0",4935:"c85d45db",4964:"ea108d2f",4968:"2eb9c429",5028:"94d5cf4c",5048:"0eae5577",5069:"192a8b1e",5077:"3a2ce571",5107:"936398dc",5146:"ffdd667d",5148:"679046a6",5180:"d016d150",5214:"c318ab3c",5270:"13f6d888",5304:"30b3ad4a",5312:"fd3209d2",5343:"1335c7a1",5358:"3c4ec49c",5402:"f8e87449",5407:"56231886",5410:"e1d600f6",5432:"16c9b55b",5484:"ee78c395",5625:"39d4d18a",5675:"561a848a",5688:"b1c31e1e",5731:"32663f72",5734:"b4a3c16e",5736:"89734ed6",5755:"a564e6ff",5847:"c1817076",5859:"369aea06",5861:"9c1ee1d6",5863:"f178572b",5878:"d835c886",5901:"d2fe6fea",5980:"a7456010",5990:"32e1c903",5993:"29b4017f",6050:"81e12894",6103:"6aa24bd3",6104:"86030ab7",6253:"3f0e28d9",6274:"a41a0a70",6360:"0902c6ba",6484:"4bd4488a",6504:"53a3e6dc",6515:"fcb790ab",6533:"1cd70467",6562:"f762c5da",6567:"a74df3cd",6685:"db2f115c",6686:"267fbc4e",6705:"fe52e117",6709:"0295581e",6720:"6574fcee",6738:"861598a7",6791:"2daf4703",6841:"ea47b74c",6847:"d9558d80",6867:"93f9db65",6877:"91c5cac2",6889:"aacb0ae1",6953:"b4f0bebf",6990:"0dc36dc4",7040:"ab6f12ff",7049:"c2f60b05",7054:"9dd8a0d2",7092:"b05011d9",7115:"2a42cb18",7140:"e19d40c8",7249:"5fe5b810",7262:"e66faea1",7270:"9c3b1acf",7272:"4529506a",7287:"2e854b47",7318:"f2e9cf2f",7330:"b5547432",7383:"95a43cb4",7393:"acecf23e",7401:"0d503bfe",7417:"18b1e3cf",7422:"11a20880",7423:"58246c43",7437:"17f6162e",7445:"a8fc9e46",7566:"8e068dda",7572:"6fbe284c",7578:"cc50533f",7670:"91116fee",7717:"01eca2db",7725:"b9cceeee",7750:"4db41ed0",7765:"fe91fc6f",7810:"19e7756f",7815:"2bf25d27",7875:"7a0b2670",7918:"17896441",7920:"1a4e3797",7965:"4a4109ec",7973:"20c4d804",8007:"5706869d",8072:"31c58a66",8199:"5acb7541",8238:"4fc58f03",8246:"0d57d15e",8356:"04ac3258",8375:"5de4a79c",8499:"b479c509",8518:"a7bd4aaa",8523:"f2f7592a",8589:"7672fb2a",8610:"6875c492",8650:"cadfeb4f",8655:"c8380abd",8665:"9b9e219e",8679:"ebc15847",8693:"b0ea8d09",8695:"02c21cfa",8791:"e257283f",8896:"06f9ead7",8899:"4ec37bcb",8951:"09382599",8973:"d4c029c2",8982:"5934e2d7",8983:"79276c30",9027:"9b70d0cc",9054:"b89c2c0a",9093:"386a3726",9109:"a1538072",9201:"4efbf0bc",9208:"36994c47",9217:"fd93cfee",9226:"2acc7b89",9235:"e7893f84",9240:"bbb9e52d",9247:"92b58ac1",9309:"250ad80d",9334:"9c87bba9",9347:"b1f4df52",9362:"8db697a0",9443:"155d95c4",9474:"b6f2a3eb",9476:"498554e3",9523:"2391cf3d",9571:"195b633a",9602:"b62a3811",9604:"49012ebf",9620:"58b29436",9630:"e9cbd346",9661:"5e95c892",9668:"267a22d2",9678:"005b200e",9727:"1d4d4d48",9730:"1e2e01a5",9804:"209857dd",9878:"7747d83f",9925:"73e61bcc"}[e]||e)+"."+{68:"508082ff",70:"6e957083",102:"0fc3a49c",152:"2c065e7f",216:"fa9f5b10",347:"2f8525a7",408:"20cc5e53",410:"e5d3231b",425:"47c0918b",430:"e66f5164",477:"00a01503",509:"8026a2d4",532:"0e153895",562:"f57fa187",595:"97bd2f70",628:"d791006f",630:"1977bbf8",674:"3b64b711",683:"153d7331",744:"24bbd7e4",798:"afd085ad",811:"4f10393a",895:"929a6832",902:"e234425f",926:"3be1d920",988:"df6a1b74",992:"4c6ed1f4",1002:"70eadd97",1004:"86c6cc73",1035:"4ccea36e",1080:"88b4e60f",1152:"bf4e4e2d",1196:"180e65b8",1202:"8654c40f",1313:"e2844e66",1385:"1ea84dad",1420:"36e85b90",1426:"2968b13c",1439:"7d6c9c6d",1504:"a0ac4e70",1514:"058513eb",1530:"cdfad606",1616:"06661121",1658:"e4ef09e0",1695:"0b4b53d6",1713:"3b2f5e1a",1714:"20091116",1772:"6d5a31b9",1792:"00f4ffbf",1888:"b91ad9a6",1977:"f27b462b",1983:"ec397b81",1994:"67edf125",2005:"2e7f8221",2026:"363e4a43",2039:"3fff641c",2040:"abef088e",2069:"b4bac076",2128:"3744e319",2136:"1c830e49",2165:"2d60cb81",2203:"de0062fa",2278:"d6ba6946",2291:"1fad80ae",2292:"9e374f29",2309:"47027545",2312:"a6b4f4c3",2353:"1177ca34",2413:"6074a974",2438:"694435cb",2442:"3fbf7502",2469:"7efeefbd",2479:"bcf85839",2535:"80094057",2540:"afce88de",2569:"80be8bac",2578:"1c2abf47",2617:"0623e965",2624:"f5ad11aa",2635:"0eea2ce3",2637:"5b359f42",2735:"e970fd74",2757:"a382d9a1",2865:"58378055",2906:"661a3f80",2911:"ebf28c7f",2918:"7c8de0bf",2983:"6037893f",3001:"78600d55",3039:"cc490564",3073:"378a95f0",3085:"a3a4dbd2",3089:"f2fb7c4e",3113:"36e40b79",3117:"2a532f77",3165:"7e04668b",3190:"c54e9f74",3205:"ee6f19eb",3255:"a5931b50",3315:"805dc457",3321:"4aa973e6",3343:"2b343735",3352:"70be561c",3400:"e8411c52",3461:"d7654115",3468:"1aff2ccc",3556:"2dcf5a91",3581:"0c7c0966",3608:"85e787d3",3629:"8b8a38eb",3655:"b36b0672",3672:"8effc9e6",3676:"98344dff",3734:"af304823",3784:"1e621dc2",3848:"7771e0f4",3895:"12d3ebba",3981:"14f00664",4013:"2f7dfa16",4016:"f6796d5a",4020:"c931abe2",4035:"8607d01e",4073:"e5c550f5",4085:"297058b0",4114:"dd95081f",4131:"10bb85d1",4158:"ddce737e",4160:"a857b5f6",4225:"297a8942",4282:"3a29a743",4295:"bc9ea20c",4335:"fb7d0e7e",4368:"2997a41f",4435:"17c3f2fe",4491:"cb29c1d0",4583:"8ec3c849",4586:"a3ab5555",4633:"f5b43c19",4655:"d624e353",4691:"4b6c2d6c",4787:"d7790b82",4864:"3f6cd347",4911:"21d40fd8",4935:"6c851c46",4964:"897ca3e3",4968:"313fb402",5028:"f2f65f21",5048:"40a9360f",5069:"8a97f21d",5077:"c475ab47",5107:"858e7640",5146:"a5ec9072",5148:"5abb9abe",5180:"105c590a",5214:"f2fa822e",5270:"bf61a0aa",5304:"3224c254",5312:"56c548a6",5343:"a3dbd100",5358:"e6d1e9fa",5386:"d06b5c39",5402:"8a0967bf",5407:"43d386d4",5410:"be2ca255",5432:"f50d0a4b",5484:"28a71401",5625:"40345bfc",5675:"e634aa72",5688:"083a8b50",5731:"28534265",5734:"8b164f48",5736:"271de030",5755:"f6721a42",5847:"78677984",5859:"da51eb5e",5861:"3cf0b566",5863:"f097dbd6",5878:"953b25c7",5901:"bcc65ca6",5980:"f95501f8",5990:"369df1d0",5993:"0b6be868",6050:"3fe3417c",6103:"b50e7e32",6104:"db43d3e9",6253:"2011a943",6274:"eeb9c737",6360:"90ccfaf7",6484:"b6ed66c3",6504:"3cd922a5",6515:"984c7534",6533:"54c40b64",6562:"66ac91d6",6567:"0d729f77",6685:"c4dbaac4",6686:"72bf1caa",6705:"95947139",6709:"04033ffe",6720:"fc25e987",6738:"dc326d76",6791:"111501da",6841:"33485655",6847:"e80b3bb6",6867:"3ea3112f",6877:"0ddb15bb",6889:"bbada35a",6945:"b25b2ba8",6953:"5eb4aa35",6990:"972ce2f0",7040:"bca9b644",7049:"2d9859d8",7054:"82de9114",7092:"3a93e9ff",7115:"543d524d",7140:"2afb93cd",7249:"07dccae4",7262:"816a3587",7270:"1570fddf",7272:"411b3db2",7287:"3bd3e607",7318:"a2109a62",7330:"f6cd5008",7383:"c28a3ff4",7393:"4fa667cf",7401:"1683ffdd",7417:"fa86b7b5",7422:"08c54c32",7423:"2dc2ce1f",7437:"1c9fef2e",7445:"9c1f9232",7566:"99d21e2f",7572:"fbf4295d",7578:"18fc8d60",7670:"49f04be5",7717:"000207f1",7725:"a21c59e2",7750:"b16144b5",7765:"0269806d",7810:"60e8dc46",7815:"313e6ff1",7875:"3c3b4bf5",7918:"2a0b9e89",7920:"9c47db27",7965:"ccdd7034",7973:"9ada3512",8007:"35de0fe7",8072:"f8d1cd02",8199:"780f9dc4",8238:"6409f5a3",8246:"48ceaaaa",8356:"d14e9138",8375:"f98481f4",8499:"0d3cf6c3",8518:"85343870",8523:"f9f2ed16",8589:"5484757a",8610:"88e01907",8650:"84a1bff8",8655:"3f686e37",8665:"38fcac3d",8679:"fccb360e",8693:"7b505e6e",8695:"0ba13655",8791:"5ae3ea74",8894:"82ffb7b5",8896:"8cdd4c3b",8899:"3cc9f87e",8951:"503acccd",8973:"0014c4fe",8982:"6b1e9e1b",8983:"2a97314c",9027:"4829c1a7",9054:"703006b2",9093:"43bd95f3",9109:"ec8ac8e9",9201:"65147a77",9208:"5beab5c7",9217:"c7d91946",9226:"8bd4dc11",9235:"45b824e6",9240:"aabbe36a",9247:"77dccd61",9309:"13a665ad",9334:"825c4ec3",9347:"d87683ca",9362:"665db87b",9443:"664e184e",9474:"49e44458",9476:"e35e3975",9523:"558435a6",9571:"12a376ca",9602:"79113a1f",9604:"82ed41cd",9620:"4d63dfd7",9630:"8d62a9dd",9661:"440c495a",9668:"0b07620a",9678:"a436342a",9727:"7e48f500",9730:"e37db956",9804:"c6a58497",9878:"38c79092",9925:"c52d024f"}[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,f)=>Object.prototype.hasOwnProperty.call(e,f),c={},d="centrifugal.dev:",r.l=(e,f,a,b)=>{if(c[e])c[e].push(f);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(a))),f)return f(a)},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",18793598:"2278",29839967:"2291",56231886:"5407","7b29b810":"68",dc4f2258:"70","52bba951":"102","54f44165":"152","3630fee7":"216","54aee988":"347",b325d9c4:"408","84a9b932":"410",c0256a6a:"425",c9a3329e:"430","84b8e2b1":"477","629b5641":"509",d1cb7448:"532",a2d1b113:"562","7f356cfe":"595","0a4443e6":"628","5ffc8930":"630",bd17143e:"674","40537b69":"683","41756ce8":"744","4e585bdd":"798","893c1918":"811","4268d52f":"895",d4ca9753:"902","70aa60b8":"926","9df29718":"988","0fe76b3c":"992",fe6343fd:"1002",c141421f:"1004","200ce466":"1035",ccc49370:"1080","0136d6f0":"1152","6e37598f":"1196","0eb45cff":"1202","2114e513":"1313","3a890c2d":"1385","5fe24874":"1420",b301b932:"1439","5e453c2c":"1504","1ded7460":"1514",a728857c:"1530","0d0ff016":"1616","07703c67":"1658",d2c1944d:"1695","514bf6b6":"1713","45dfef24":"1714",b910a859:"1792",d4dfc5db:"1888","9db3c45b":"1977",d6627831:"1983",f1b7a7af:"1994","3dfd29d6":"2005","21e8a749":"2026","008140b4":"2039","7a7ba156":"2040",cf0e38ba:"2069",be4c395a:"2128","5c30ba71":"2136","6b2be476":"2165","46627d28":"2203","3b028b51":"2292",ba0d3b30:"2309","9ff4038f":"2353","3bb37b67":"2413",bfbfeea3:"2438",ee88d6e4:"2442",d1c7a4f7:"2469",ed785809:"2479","814f3328":"2535","211f1d7a":"2540",c3677326:"2569","71fc0044":"2578","679c4099":"2617","03e522d9":"2624","7bd30152":"2635","6ef9986d":"2637",ff64321a:"2735","2b147458":"2757",ad7c169e:"2865","60271c2c":"2906","1b3188ba":"2911","332362b2":"2918","3529cd5b":"2983",bbd14fff:"3001",fbd7a87c:"3039",b2eaf182:"3073","1f391b9e":"3085",a6aa9e1f:"3089","25003e4f":"3113","275906c5":"3117",cac93e67:"3165","4ebb2955":"3190","21c2d27e":"3205","06f11616":"3255","21fdfc04":"3315","6aa961d8":"3321","25c94216":"3343","69d81c34":"3352","3a3c4090":"3400","7df4dfbf":"3461",f26176d2:"3468","984c0c66":"3556","2dbf7ee0":"3581","9e4087bc":"3608",aba21aa0:"3629","694566b3":"3655","1248e41e":"3672",c0434fb9:"3676","3d15ab27":"3734","041d543b":"3784","1a1440a1":"3848","4f64b982":"3895","1d3c9151":"3981","01a85c17":"4013",d9829201:"4016",e8314be4:"4020","2b8ad662":"4035","3e15fc9c":"4073","230ca58d":"4085","631e3db1":"4114","238ce909":"4131","32eeb95a":"4158","3c51ccb2":"4160","633b2ed2":"4225",e6b6a8f8:"4282","237c01c3":"4295",e8c6e505:"4335",a94703ab:"4368",a82fa8b7:"4435",e6afaed9:"4491","7c110bd0":"4583",c98fa109:"4586","2f70c421":"4633","776d934d":"4655","0a7ca2d6":"4691","1117f49a":"4787",ee10dcb9:"4864","5a70f1d0":"4911",c85d45db:"4935",ea108d2f:"4964","2eb9c429":"4968","94d5cf4c":"5028","0eae5577":"5048","192a8b1e":"5069","3a2ce571":"5077","936398dc":"5107",ffdd667d:"5146","679046a6":"5148",d016d150:"5180",c318ab3c:"5214","13f6d888":"5270","30b3ad4a":"5304",fd3209d2:"5312","1335c7a1":"5343","3c4ec49c":"5358",f8e87449:"5402",e1d600f6:"5410","16c9b55b":"5432",ee78c395:"5484","39d4d18a":"5625","561a848a":"5675",b1c31e1e:"5688","32663f72":"5731",b4a3c16e:"5734","89734ed6":"5736",a564e6ff:"5755",c1817076:"5847","369aea06":"5859","9c1ee1d6":"5861",f178572b:"5863",d835c886:"5878",d2fe6fea:"5901",a7456010:"5980","32e1c903":"5990","29b4017f":"5993","81e12894":"6050","6aa24bd3":"6103","86030ab7":"6104","3f0e28d9":"6253",a41a0a70:"6274","0902c6ba":"6360","4bd4488a":"6484","53a3e6dc":"6504",fcb790ab:"6515","1cd70467":"6533",f762c5da:"6562",a74df3cd:"6567",db2f115c:"6685","267fbc4e":"6686",fe52e117:"6705","0295581e":"6709","6574fcee":"6720","861598a7":"6738","2daf4703":"6791",ea47b74c:"6841",d9558d80:"6847","93f9db65":"6867","91c5cac2":"6877",aacb0ae1:"6889",b4f0bebf:"6953","0dc36dc4":"6990",ab6f12ff:"7040",c2f60b05:"7049","9dd8a0d2":"7054",b05011d9:"7092","2a42cb18":"7115",e19d40c8:"7140","5fe5b810":"7249",e66faea1:"7262","9c3b1acf":"7270","4529506a":"7272","2e854b47":"7287",f2e9cf2f:"7318",b5547432:"7330","95a43cb4":"7383",acecf23e:"7393","0d503bfe":"7401","18b1e3cf":"7417","11a20880":"7422","58246c43":"7423","17f6162e":"7437",a8fc9e46:"7445","8e068dda":"7566","6fbe284c":"7572",cc50533f:"7578","91116fee":"7670","01eca2db":"7717",b9cceeee:"7725","4db41ed0":"7750",fe91fc6f:"7765","19e7756f":"7810","2bf25d27":"7815","7a0b2670":"7875","1a4e3797":"7920","4a4109ec":"7965","20c4d804":"7973","5706869d":"8007","31c58a66":"8072","5acb7541":"8199","4fc58f03":"8238","0d57d15e":"8246","04ac3258":"8356","5de4a79c":"8375",b479c509:"8499",a7bd4aaa:"8518",f2f7592a:"8523","7672fb2a":"8589","6875c492":"8610",cadfeb4f:"8650",c8380abd:"8655","9b9e219e":"8665",ebc15847:"8679",b0ea8d09:"8693","02c21cfa":"8695",e257283f:"8791","06f9ead7":"8896","4ec37bcb":"8899","09382599":"8951",d4c029c2:"8973","5934e2d7":"8982","79276c30":"8983","9b70d0cc":"9027",b89c2c0a:"9054","386a3726":"9093",a1538072:"9109","4efbf0bc":"9201","36994c47":"9208",fd93cfee:"9217","2acc7b89":"9226",e7893f84:"9235",bbb9e52d:"9240","92b58ac1":"9247","250ad80d":"9309","9c87bba9":"9334",b1f4df52:"9347","8db697a0":"9362","155d95c4":"9443",b6f2a3eb:"9474","498554e3":"9476","2391cf3d":"9523","195b633a":"9571",b62a3811:"9602","49012ebf":"9604","58b29436":"9620",e9cbd346:"9630","5e95c892":"9661","267a22d2":"9668","005b200e":"9678","1d4d4d48":"9727","1e2e01a5":"9730","209857dd":"9804","7747d83f":"9878","73e61bcc":"9925"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,3312:0};r.f.j=(f,a)=>{var c=r.o(e,f)?e[f]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1303|3312)$/.test(f))e[f]=0;else{var d=new Promise(((a,d)=>c=e[f]=[a,d]));a.push(c[2]=d);var b=r.p+r.u(f),t=new Error;r.l(b,(a=>{if(r.o(e,f)&&(0!==(c=e[f])&&(e[f]=void 0),c)){var d=a&&("load"===a.type?"missing":a.type),b=a&&a.target&&a.target.src;t.message="Loading chunk "+f+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+f,f)}},r.O.j=f=>0===e[f];var f=(f,a)=>{var c,d,b=a[0],t=a[1],o=a[2],n=0;if(b.some((f=>0!==e[f]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(f&&f(a);n