Deploy to GitHub pages

This commit is contained in:
github-actions[bot] 2026-08-16 01:14:40 +00:00 committed by GitHub
commit f00cd0b4e2
630 changed files with 199715 additions and 0 deletions

0
.nojekyll Normal file
View file

16
404.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[3218],{2447(e,t,s){s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"sets/tcp/index","title":"TCP","description":"The TCP tab is the core of DPI bypass configuration. It contains three sub-tabs matching three aspects of packet processing:","source":"@site/docs/sets/tcp/index.md","sourceDirName":"sets/tcp","slug":"/sets/tcp/","permalink":"/b4/docs/sets/tcp/","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/sets/tcp/index.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2,"title":"TCP"},"sidebar":"tutorialSidebar","previous":{"title":"Targets","permalink":"/b4/docs/sets/targets"},"next":{"title":"General","permalink":"/b4/docs/sets/tcp/general"}}');var i=s(2615),r=s(416);const o={sidebar_position:2,title:"TCP"},c=void 0,a={},l=[];function p(e){const t={a:"a",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"The TCP tab is the core of DPI bypass configuration. It contains three sub-tabs matching three aspects of packet processing:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"./general",children:"General"})," - limits, delays, duplication"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"./splitting",children:"Splitting"})," - breaking packets into pieces"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"./faking",children:"Faking"})," - sending fake packets, desync, mutation"]}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},416(e,t,s){s.d(t,{R:()=>o,x:()=>c});var n=s(9471);const i={},r=n.createContext(i);function o(e){const t=n.useContext(r);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[1829],{1829(c,e,s){s.d(e,{createPacketServices:()=>a.$});var a=s(790);s(6100)}}]);

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[924],{8734(e,n,t){t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"advanced/config","title":"Configuration file","description":"English translation is in progress. See the Russian version.","source":"@site/docs/advanced/config.md","sourceDirName":"advanced","slug":"/advanced/config","permalink":"/b4/docs/advanced/config","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/advanced/config.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2,"title":"Configuration file"},"sidebar":"tutorialSidebar","previous":{"title":"CLI parameters","permalink":"/b4/docs/advanced/cli"},"next":{"title":"How TSPU works","permalink":"/b4/docs/advanced/tspu"}}');var i=t(2615),s=t(416);const a={sidebar_position:2,title:"Configuration file"},r=void 0,c={},d=[];function l(e){const n={a:"a",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(n.p,{children:["English translation is in progress. See the ",(0,i.jsx)(n.a,{href:"/ru/docs/advanced/config",children:"Russian version"}),"."]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},416(e,n,t){t.d(n,{R:()=>a,x:()=>r});var o=t(9471);const i={},s=o.createContext(i);function a(e){const n=o.useContext(s);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[4583],{9446(e,t,s){s.r(t),s.d(t,{default:()=>A});var i=s(3526),n=s(3840),o=s(9641),c=s(6552),r=s(2190),l=s(7333);const a="features_t9lD",d="sectionTitle_JIRO",h="docCard_LdKM";var u=s(2615);const m=[{titleId:"home.section.intro.title",titleDefault:"Introduction",descriptionId:"home.section.intro.desc",descriptionDefault:"What b4 is, how censorship bypass works, and what you need to start.",link:"/docs/intro"},{titleId:"home.section.install.title",titleDefault:"Installation",descriptionId:"home.section.install.desc",descriptionDefault:"Install on Linux, OpenWRT, ASUS Merlin, Keenetic, MikroTik, and Docker.",link:"/docs/install/"},{titleId:"home.section.quickstart.title",titleDefault:"Quickstart",descriptionId:"home.section.quickstart.desc",descriptionDefault:"From first launch to a working bypass in 5 minutes via the web UI.",link:"/docs/quickstart"},{titleId:"home.section.sets.title",titleDefault:"Sets",descriptionId:"home.section.sets.desc",descriptionDefault:"Bypass configuration bundles: targets, TCP/UDP strategies, routing.",link:"/docs/sets/"}];function p({titleId:e,titleDefault:t,descriptionId:s,descriptionDefault:c,link:r}){return(0,u.jsx)("div",{className:(0,i.A)("col col--6"),children:(0,u.jsxs)("div",{className:h,children:[(0,u.jsx)(l.A,{as:"h3",children:(0,u.jsx)(n.A,{to:r,children:(0,u.jsx)(o.A,{id:e,children:t})})}),(0,u.jsx)("p",{children:(0,u.jsx)(o.A,{id:s,children:c})})]})})}function x(){return(0,u.jsx)("section",{className:a,children:(0,u.jsxs)("div",{className:"container",children:[(0,u.jsx)(l.A,{as:"h2",className:d,children:(0,u.jsx)(o.A,{id:"home.section.heading",children:"Documentation"})}),(0,u.jsx)("div",{className:"row",children:m.map((e,t)=>(0,u.jsx)(p,{...e},t))})]})})}const j="heroBanner_qdFl",b="buttons_AeoN",f="description_meEo";function k(){const{siteConfig:e}=(0,c.A)();return(0,u.jsx)("header",{className:(0,i.A)("hero hero--primary",j),children:(0,u.jsxs)("div",{className:"container",children:[(0,u.jsx)("h1",{className:"hero__title",children:e.title}),(0,u.jsx)("p",{className:"hero__subtitle",children:(0,u.jsx)(o.A,{id:"home.subtitle",children:"Packet-level censorship bypass for Linux and routers"})}),(0,u.jsx)("p",{className:f,children:(0,u.jsx)(o.A,{id:"home.description",children:"Web UI, automatic configuration discovery, support for routers and servers"})}),(0,u.jsxs)("div",{className:b,children:[(0,u.jsx)(n.A,{className:"button button--secondary button--lg",to:"/docs/intro",children:(0,u.jsx)(o.A,{id:"home.cta.start",children:"Get started"})}),(0,u.jsx)(n.A,{className:"button button--outline button--secondary button--lg margin-left--md",to:"https://github.com/DanielLavrushin/b4",children:(0,u.jsx)(o.A,{id:"home.cta.github",children:"GitHub"})})]})]})})}function A(){return(0,u.jsxs)(r.A,{title:(0,o.T)({id:"home.title",message:"Documentation"}),description:(0,o.T)({id:"home.meta.description",message:"b4 - censorship bypass for Linux"}),children:[(0,u.jsx)(k,{}),(0,u.jsx)("main",{children:(0,u.jsx)(x,{})})]})}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[687],{6925(e,t,n){n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"settings/security","title":"Security","description":"Authentication","source":"@site/docs/settings/security.md","sourceDirName":"settings","slug":"/settings/security","permalink":"/b4/docs/settings/security","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/settings/security.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"sidebar_position":3,"title":"Security"},"sidebar":"tutorialSidebar","previous":{"title":"Geo data","permalink":"/b4/docs/settings/geodata"},"next":{"title":"Payloads","permalink":"/b4/docs/settings/payloads"}}');var i=n(2615),r=n(416);const o={sidebar_position:3,title:"Security"},c=void 0,a={},l=[{value:"Authentication",id:"authentication",level:2},{value:"HTTPS",id:"https",level:2}];function d(e){const t={admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"authentication",children:"Authentication"}),"\n",(0,i.jsx)(t.p,{children:"By default the web interface is open without a password. To restrict access, set a username and password:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Go to ",(0,i.jsx)(t.strong,{children:"Settings -> Core -> Web server"})]}),"\n",(0,i.jsxs)(t.li,{children:["Fill in the ",(0,i.jsx)(t.strong,{children:"Username"})," and ",(0,i.jsx)(t.strong,{children:"Password"})," fields"]}),"\n",(0,i.jsx)(t.li,{children:"Save the settings"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"After that, opening the web interface requires credentials."}),"\n",(0,i.jsx)(t.admonition,{title:"External access",type:"warning",children:(0,i.jsx)(t.p,{children:"If b4 is exposed externally (for example, on a VPS), set up authentication. Without it, anyone who knows the address and port gets full management access."})}),"\n",(0,i.jsx)(t.admonition,{title:"Authentication without HTTPS",type:"danger",children:(0,i.jsxs)(t.p,{children:["If authentication is enabled but HTTPS is ",(0,i.jsx)(t.strong,{children:"not configured"}),", the username and password are transmitted over the network ",(0,i.jsx)(t.strong,{children:"in plain text"}),". Anyone who can intercept traffic (for example, on public Wi-Fi) can see your credentials. Always enable HTTPS together with authentication, especially if b4 is reachable outside the local network."]})}),"\n",(0,i.jsx)(t.h2,{id:"https",children:"HTTPS"}),"\n",(0,i.jsx)(t.p,{children:"To enable HTTPS:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Prepare certificate and key files (",(0,i.jsx)(t.code,{children:".crt"}),"/",(0,i.jsx)(t.code,{children:".pem"})," and ",(0,i.jsx)(t.code,{children:".key"}),"/",(0,i.jsx)(t.code,{children:".pem"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:["In the web server settings enter the file paths:","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"TLS Certificate"})," - path to the certificate file (",(0,i.jsx)(t.code,{children:".crt"})," or ",(0,i.jsx)(t.code,{children:".pem"}),")"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"TLS Key"})," - path to the key file (",(0,i.jsx)(t.code,{children:".key"})," or ",(0,i.jsx)(t.code,{children:".pem"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.li,{children:"Save and restart"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"For a self-signed certificate (suitable for a local network):"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:'openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=b4"\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Copy the files to the configuration directory (for example, ",(0,i.jsx)(t.code,{children:"/etc/b4/"}),") and point the settings at them."]}),"\n",(0,i.jsxs)(t.p,{children:["After HTTPS is enabled, the web interface is available over ",(0,i.jsx)(t.code,{children:"https://"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},416(e,t,n){n.d(t,{R:()=>o,x:()=>c});var s=n(9471);const i={},r=s.createContext(i);function o(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[3969],{9702(e,t,a){function i(e,t){e.accDescr&&t.setAccDescription?.(e.accDescr),e.accTitle&&t.setAccTitle?.(e.accTitle),e.title&&t.setDiagramTitle?.(e.title)}a.d(t,{S:()=>i}),(0,a(8).K2)(i,"populateCommonDb")},3969(e,t,a){a.d(t,{diagram:()=>C});var i=a(5786),l=a(9702),n=a(8721),r=a(7596),s=a(8),o=a(6046),c=a(7012),p=r.UI.pie,d={sections:new Map,showData:!1,config:p},u=d.sections,g=d.showData,h=structuredClone(p),f=(0,s.K2)(()=>structuredClone(h),"getConfig"),m=(0,s.K2)(()=>{u=new Map,g=d.showData,(0,r.IU)()},"clear"),w=(0,s.K2)(({label:e,value:t})=>{if(t<0)throw new Error(`"${e}" has invalid value: ${t}. Negative values are not allowed in pie charts. All slice values must be >= 0.`);u.has(e)||(u.set(e,t),s.Rm.debug(`added new section: ${e}, with value: ${t}`))},"addSection"),S=(0,s.K2)(()=>u,"getSections"),x=(0,s.K2)(e=>{g=e},"setShowData"),D=(0,s.K2)(()=>g,"getShowData"),T={getConfig:f,clear:m,setDiagramTitle:r.ke,getDiagramTitle:r.ab,setAccTitle:r.SV,getAccTitle:r.iN,setAccDescription:r.EI,getAccDescription:r.m7,addSection:w,getSections:S,setShowData:x,getShowData:D},$=(0,s.K2)((e,t)=>{(0,l.S)(e,t),t.setShowData(e.showData),e.sections.map(t.addSection)},"populateDb"),b={parse:(0,s.K2)(async e=>{const t=await(0,o.qg)("pie",e);s.Rm.debug(t),$(t,T)},"parse")},v=(0,s.K2)(e=>`\n .pieCircle{\n stroke: ${e.pieStrokeColor};\n stroke-width : ${e.pieStrokeWidth};\n opacity : ${e.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${e.pieOuterStrokeColor};\n stroke-width: ${e.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${e.pieTitleTextSize};\n fill: ${e.pieTitleTextColor};\n font-family: ${e.fontFamily};\n }\n .slice {\n font-family: ${e.fontFamily};\n fill: ${e.pieSectionTextColor};\n font-size:${e.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${e.pieLegendTextColor};\n font-family: ${e.fontFamily};\n font-size: ${e.pieLegendTextSize};\n }\n`,"getStyles"),y=(0,s.K2)(e=>{const t=[...e.values()].reduce((e,t)=>e+t,0),a=[...e.entries()].map(([e,t])=>({label:e,value:t})).filter(e=>e.value/t*100>=1).sort((e,t)=>t.value-e.value);return(0,c.rLf)().value(e=>e.value)(a)},"createPieArcs"),C={parser:b,db:T,renderer:{draw:(0,s.K2)((e,t,a,l)=>{s.Rm.debug("rendering pie chart\n"+e);const o=l.db,p=(0,r.D7)(),d=(0,n.$t)(o.getConfig(),p.pie),u=18,g=450,h=g,f=(0,i.D)(t),m=f.append("g");m.attr("transform","translate(225,225)");const{themeVariables:w}=p;let[S]=(0,n.I5)(w.pieOuterStrokeWidth);S??=2;const x=d.textPosition,D=Math.min(h,g)/2-40,T=(0,c.JLW)().innerRadius(0).outerRadius(D),$=(0,c.JLW)().innerRadius(D*x).outerRadius(D*x);m.append("circle").attr("cx",0).attr("cy",0).attr("r",D+S/2).attr("class","pieOuterCircle");const b=o.getSections(),v=y(b),C=[w.pie1,w.pie2,w.pie3,w.pie4,w.pie5,w.pie6,w.pie7,w.pie8,w.pie9,w.pie10,w.pie11,w.pie12];let k=0;b.forEach(e=>{k+=e});const A=v.filter(e=>"0"!==(e.data.value/k*100).toFixed(0)),K=(0,c.UMr)(C);m.selectAll("mySlices").data(A).enter().append("path").attr("d",T).attr("fill",e=>K(e.data.label)).attr("class","pieCircle"),m.selectAll("mySlices").data(A).enter().append("text").text(e=>(e.data.value/k*100).toFixed(0)+"%").attr("transform",e=>"translate("+$.centroid(e)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(o.getDiagramTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");const R=[...b.entries()].map(([e,t])=>({label:e,value:t})),z=m.selectAll(".legend").data(R).enter().append("g").attr("class","legend").attr("transform",(e,t)=>"translate(216,"+(22*t-22*R.length/2)+")");z.append("rect").attr("width",u).attr("height",u).style("fill",e=>K(e.label)).style("stroke",e=>K(e.label)),z.append("text").attr("x",22).attr("y",14).text(e=>o.getShowData()?`${e.label} [${e.value}]`:e.label);const M=512+Math.max(...z.selectAll("text").nodes().map(e=>e?.getBoundingClientRect().width??0));f.attr("viewBox",`0 0 ${M} 450`),(0,r.a$)(f,g,M,d.useMaxWidth)},"draw")},styles:v}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[596],{7035(n,e,t){t.r(e),t.d(e,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"connections","title":"Connections","description":"English translation is in progress. See the Russian version.","source":"@site/docs/connections.md","sourceDirName":".","slug":"/connections","permalink":"/b4/docs/connections","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/connections.md","tags":[],"version":"current","sidebarPosition":10,"frontMatter":{"sidebar_position":10,"title":"Connections"},"sidebar":"tutorialSidebar","previous":{"title":"DPI Detector","permalink":"/b4/docs/detector"},"next":{"title":"Logs","permalink":"/b4/docs/logs"}}');var s=t(2615),i=t(416);const r={sidebar_position:10,title:"Connections"},c=void 0,a={},l=[];function d(n){const e={a:"a",p:"p",...(0,i.R)(),...n.components};return(0,s.jsxs)(e.p,{children:["English translation is in progress. See the ",(0,s.jsx)(e.a,{href:"/ru/docs/connections",children:"Russian version"}),"."]})}function u(n={}){const{wrapper:e}={...(0,i.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(d,{...n})}):d(n)}},416(n,e,t){t.d(e,{R:()=>r,x:()=>c});var o=t(9471);const s={},i=o.createContext(s);function r(n){const e=o.useContext(i);return o.useMemo(function(){return"function"==typeof n?n(e):{...e,...n}},[e,n])}function c(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:r(n.components),o.createElement(i.Provider,{value:e},n.children)}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[5010],{5010(e,s,a){a.d(s,{createTreemapServices:()=>c.d});var c=a(8153);a(6100)}}]);

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[5091],{5091(c,e,s){s.d(e,{createArchitectureServices:()=>a.S});var a=s(2020);s(6100)}}]);

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[1297],{2707(e,n,t){t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"advanced/cli","title":"CLI parameters","description":"English translation is in progress. See the Russian version.","source":"@site/docs/advanced/cli.md","sourceDirName":"advanced","slug":"/advanced/cli","permalink":"/b4/docs/advanced/cli","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/advanced/cli.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1,"title":"CLI parameters"},"sidebar":"tutorialSidebar","previous":{"title":"Advanced","permalink":"/b4/docs/advanced/"},"next":{"title":"Configuration file","permalink":"/b4/docs/advanced/config"}}');var i=t(2615),a=t(416);const o={sidebar_position:1,title:"CLI parameters"},r=void 0,c={},d=[];function l(e){const n={a:"a",p:"p",...(0,a.R)(),...e.components};return(0,i.jsxs)(n.p,{children:["English translation is in progress. See the ",(0,i.jsx)(n.a,{href:"/ru/docs/advanced/cli",children:"Russian version"}),"."]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},416(e,n,t){t.d(n,{R:()=>o,x:()=>r});var s=t(9471);const i={},a=s.createContext(i);function o(e){const n=s.useContext(a);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]);

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[5525],{7995(e,t,i){i.d(t,{A:()=>r});i(9471);var n=i(3526),o=i(9641),s=i(7333),a=i(2615);function r({className:e}){return(0,a.jsx)("main",{className:(0,n.A)("container margin-vert--xl",e),children:(0,a.jsx)("div",{className:"row",children:(0,a.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,a.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,a.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,a.jsx)("p",{children:(0,a.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},5525(e,t,i){i.r(t),i.d(t,{default:()=>h});i(9471);var n=i(9641),o=i(2963),s=i(2190),a=i(7995),r=i(2615);function h(){const e=(0,n.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.be,{title:e}),(0,r.jsx)(s.A,{children:(0,r.jsx)(a.A,{})})]})}}}]);

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[3490],{4736(t,e,s){s.r(e),s.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"logs","title":"Logs","description":"English translation is in progress. See the Russian version.","source":"@site/docs/logs.md","sourceDirName":".","slug":"/logs","permalink":"/b4/docs/logs","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/logs.md","tags":[],"version":"current","sidebarPosition":11,"frontMatter":{"sidebar_position":11,"title":"Logs"},"sidebar":"tutorialSidebar","previous":{"title":"Connections","permalink":"/b4/docs/connections"},"next":{"title":"MTProto / Telegram","permalink":"/b4/docs/mtproto"}}');var o=s(2615),i=s(416);const r={sidebar_position:11,title:"Logs"},a=void 0,c={},l=[];function d(t){const e={a:"a",p:"p",...(0,i.R)(),...t.components};return(0,o.jsxs)(e.p,{children:["English translation is in progress. See the ",(0,o.jsx)(e.a,{href:"/ru/docs/logs",children:"Russian version"}),"."]})}function u(t={}){const{wrapper:e}={...(0,i.R)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(d,{...t})}):d(t)}},416(t,e,s){s.d(e,{R:()=>r,x:()=>a});var n=s(9471);const o={},i=n.createContext(o);function r(t){const e=n.useContext(i);return n.useMemo(function(){return"function"==typeof t?t(e):{...e,...t}},[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:r(t.components),n.createElement(i.Provider,{value:e},t.children)}}}]);

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[5564],{5564(s,a,c){c.d(a,{createGitGraphServices:()=>e.b});var e=c(1524);c(6100)}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[7958],{2203(e,n,r){r.r(n),r.d(n,{assets:()=>i,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"install/docker","title":"Docker","description":"Image: lavrushin/b4 on Docker Hub.","source":"@site/docs/install/docker.md","sourceDirName":"install","slug":"/install/docker","permalink":"/b4/docs/install/docker","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/install/docker.md","tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"sidebar_position":6,"title":"Docker"},"sidebar":"tutorialSidebar","previous":{"title":"MikroTik","permalink":"/b4/docs/install/mikrotik"},"next":{"title":"Quickstart","permalink":"/b4/docs/quickstart"}}');var t=r(2615),c=r(416);const o={sidebar_position:6,title:"Docker"},d=void 0,i={},l=[{value:"docker-compose",id:"docker-compose",level:2},{value:"docker run",id:"docker-run",level:2},{value:"Parameters",id:"parameters",level:2},{value:"Management",id:"management",level:2},{value:"Web interface",id:"web-interface",level:2}];function a(e){const n={a:"a",code:"code",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Image: ",(0,t.jsx)(n.a,{href:"https://hub.docker.com/r/lavrushin/b4",children:"lavrushin/b4"})," on Docker Hub."]}),"\n",(0,t.jsx)(n.h2,{id:"docker-compose",children:"docker-compose"}),"\n",(0,t.jsxs)(n.p,{children:["Create a ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," file:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"services:\n b4:\n image: lavrushin/b4:latest\n container_name: b4\n network_mode: host\n cap_add:\n - NET_ADMIN\n - NET_RAW\n - SYS_MODULE\n volumes:\n - ./config:/etc/b4\n restart: unless-stopped\n"})}),"\n",(0,t.jsx)(n.p,{children:"Run:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir -p config\ndocker compose up -d\n"})}),"\n",(0,t.jsx)(n.h2,{id:"docker-run",children:"docker run"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir -p config\ndocker run -d \\\n --name b4 \\\n --network host \\\n --cap-add NET_ADMIN \\\n --cap-add NET_RAW \\\n --cap-add SYS_MODULE \\\n -v ./config:/etc/b4 \\\n --restart unless-stopped \\\n lavrushin/b4:latest\n"})}),"\n",(0,t.jsx)(n.h2,{id:"parameters",children:"Parameters"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Parameter"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"network_mode: host"})}),(0,t.jsx)(n.td,{children:"b4 works with the host network stack directly"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"NET_ADMIN"})}),(0,t.jsx)(n.td,{children:"manage netfilter and firewall rules"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"NET_RAW"})}),(0,t.jsx)(n.td,{children:"use raw sockets"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"SYS_MODULE"})}),(0,t.jsx)(n.td,{children:"load kernel modules (modprobe)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"-v ./config:/etc/b4"})}),(0,t.jsx)(n.td,{children:"configuration is stored on the host"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"management",children:"Management"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"docker compose logs -f b4 # logs\ndocker compose restart b4 # restart\ndocker compose down # stop\ndocker compose pull && docker compose up -d # update\n"})}),"\n",(0,t.jsx)(n.h2,{id:"web-interface",children:"Web interface"}),"\n",(0,t.jsxs)(n.p,{children:["After startup: ",(0,t.jsx)(n.code,{children:"http://localhost:7000"})]}),"\n",(0,t.jsxs)(n.p,{children:["The port is configured in ",(0,t.jsx)(n.code,{children:"config/b4.json"})," (",(0,t.jsx)(n.code,{children:"web_server.port"}),")."]})]})}function h(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},416(e,n,r){r.d(n,{R:()=>o,x:()=>d});var s=r(9471);const t={},c=s.createContext(t);function o(e){const n=s.useContext(c);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]);

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[9647],{6393(s,e,r){r.r(e),r.d(e,{default:()=>h});r(9471);var a=r(3526),c=r(1376),u=r(2963),l=r(7377),o=r(2190),d=r(2615);function h(s){return(0,d.jsx)(u.e3,{className:(0,a.A)(c.G.wrapper.docsPages),children:(0,d.jsx)(o.A,{children:(0,l.v)(s.route.routes)})})}}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,9 @@
/*!
Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable
Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
Licensed under The MIT License (http://opensource.org/licenses/MIT)
*/
/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */
/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[6659],{9702(t,e,a){function r(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}a.d(e,{S:()=>r}),(0,a(8).K2)(r,"populateCommonDb")},6659(t,e,a){a.d(e,{diagram:()=>m});var r=a(5786),i=a(9702),o=a(8721),s=a(7596),n=a(8),l=a(6046),c=s.UI.packet,d=class{constructor(){this.packet=[],this.setAccTitle=s.SV,this.getAccTitle=s.iN,this.setDiagramTitle=s.ke,this.getDiagramTitle=s.ab,this.getAccDescription=s.m7,this.setAccDescription=s.EI}static{(0,n.K2)(this,"PacketDB")}getConfig(){const t=(0,o.$t)({...c,...(0,s.zj)().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){(0,s.IU)(),this.packet=[]}},b=(0,n.K2)((t,e)=>{(0,i.S)(t,e);let a=-1,r=[],o=1;const{bitsPerRow:s}=e.getConfig();for(let{start:i,end:l,bits:c,label:d}of t.blocks){if(void 0!==i&&void 0!==l&&l<i)throw new Error(`Packet block ${i} - ${l} is invalid. End must be greater than start.`);if(i??=a+1,i!==a+1)throw new Error(`Packet block ${i} - ${l??i} is not contiguous. It should start from ${a+1}.`);if(0===c)throw new Error(`Packet block ${i} is invalid. Cannot have a zero bit field.`);for(l??=i+(c??1)-1,c??=l-i+1,a=l,n.Rm.debug(`Packet block ${i} - ${a} with label ${d}`);r.length<=s+1&&e.getPacket().length<1e4;){const[t,a]=h({start:i,end:l,bits:c,label:d},o,s);if(r.push(t),t.end+1===o*s&&(e.pushWord(r),r=[],o++),!a)break;({start:i,end:l,bits:c,label:d}=a)}}e.pushWord(r)},"populate"),h=(0,n.K2)((t,e,a)=>{if(void 0===t.start)throw new Error("start should have been set during first phase");if(void 0===t.end)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*a)return[t,void 0];const r=e*a-1,i=e*a;return[{start:t.start,end:r,label:t.label,bits:r-t.start},{start:i,end:t.end,label:t.label,bits:t.end-i}]},"getNextFittingBlock"),p={parser:{yy:void 0},parse:(0,n.K2)(async t=>{const e=await(0,l.qg)("packet",t),a=p.parser?.yy;if(!(a instanceof d))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");n.Rm.debug(e),b(e,a)},"parse")},k=(0,n.K2)((t,e,a,i)=>{const o=i.db,n=o.getConfig(),{rowHeight:l,paddingY:c,bitWidth:d,bitsPerRow:b}=n,h=o.getPacket(),p=o.getDiagramTitle(),k=l+c,u=k*(h.length+1)-(p?0:l),f=d*b+2,w=(0,r.D)(e);w.attr("viewBox",`0 0 ${f} ${u}`),(0,s.a$)(w,u,f,n.useMaxWidth);for(const[r,s]of h.entries())g(w,s,r,n);w.append("text").text(p).attr("x",f/2).attr("y",u-k/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),g=(0,n.K2)((t,e,a,{rowHeight:r,paddingX:i,paddingY:o,bitWidth:s,bitsPerRow:n,showBits:l})=>{const c=t.append("g"),d=a*(r+o)+o;for(const b of e){const t=b.start%n*s+1,e=(b.end-b.start+1)*s-i;if(c.append("rect").attr("x",t).attr("y",d).attr("width",e).attr("height",r).attr("class","packetBlock"),c.append("text").attr("x",t+e/2).attr("y",d+r/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(b.label),!l)continue;const a=b.end===b.start,o=d-2;c.append("text").attr("x",t+(a?e/2:0)).attr("y",o).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",a?"middle":"start").text(b.start),a||c.append("text").attr("x",t+e).attr("y",o).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(b.end)}},"drawWord"),u={draw:k},f={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},w=(0,n.K2)(({packet:t}={})=>{const e=(0,o.$t)(f,t);return`\n\t.packetByte {\n\t\tfont-size: ${e.byteFontSize};\n\t}\n\t.packetByte.start {\n\t\tfill: ${e.startByteColor};\n\t}\n\t.packetByte.end {\n\t\tfill: ${e.endByteColor};\n\t}\n\t.packetLabel {\n\t\tfill: ${e.labelColor};\n\t\tfont-size: ${e.labelFontSize};\n\t}\n\t.packetTitle {\n\t\tfill: ${e.titleColor};\n\t\tfont-size: ${e.titleFontSize};\n\t}\n\t.packetBlock {\n\t\tstroke: ${e.blockStrokeColor};\n\t\tstroke-width: ${e.blockStrokeWidth};\n\t\tfill: ${e.blockFillColor};\n\t}\n\t`},"styles"),m={parser:p,get db(){return new d},renderer:u,styles:w}}}]);

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[8098],{1587(e,t,o){o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"discovery","title":"Discovery","description":"English translation is in progress. See the Russian version.","source":"@site/docs/discovery.md","sourceDirName":".","slug":"/discovery","permalink":"/b4/docs/discovery","draft":false,"unlisted":false,"editUrl":"https://github.com/DanielLavrushin/b4/tree/main/docs/docs/discovery.md","tags":[],"version":"current","sidebarPosition":7,"frontMatter":{"sidebar_position":7,"title":"Discovery"},"sidebar":"tutorialSidebar","previous":{"title":"Import from another tool","permalink":"/b4/docs/sets/import"},"next":{"title":"Domain Watchdog","permalink":"/b4/docs/watchdog"}}');var n=o(2615),i=o(416);const r={sidebar_position:7,title:"Discovery"},c=void 0,a={},d=[];function l(e){const t={a:"a",p:"p",...(0,i.R)(),...e.components};return(0,n.jsxs)(t.p,{children:["English translation is in progress. See the ",(0,n.jsx)(t.a,{href:"/ru/docs/discovery",children:"Russian version"}),"."]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},416(e,t,o){o.d(t,{R:()=>r,x:()=>c});var s=o(9471);const n={},i=s.createContext(n);function r(e){const t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[7284],{7284(r,s,a){a.d(s,{diagram:()=>t});var e=a(8910),l=(a(3020),a(3405),a(8652),a(5690),a(5481),a(4685),a(1308),a(2819),a(6450),a(5697),a(378),a(8721),a(7596),a(8)),t={parser:e._$,get db(){return new e.NM},renderer:e.Lh,styles:e.tM,init:(0,l.K2)(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")}}}]);

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[740],{740(e,s,c){c.d(s,{createPieServices:()=>a.f});var a=c(5184);c(6100)}}]);

Some files were not shown because too many files have changed in this diff Show more