ARCHITECTURE_1.svg 53 KB

1
  1. <svg id="mermaid-svg" width="100%" xmlns="http://www.w3.org/2000/svg" class="flowchart" style="max-width: 2839.421875px;" viewBox="0 0 2839.421875 1237.011474609375" role="graphics-document document" aria-roledescription="flowchart-v2" xmlns:xlink="http://www.w3.org/1999/xlink"><style xmlns="http://www.w3.org/1999/xhtml">@import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css");</style><style>#mermaid-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg .error-icon{fill:#552222;}#mermaid-svg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg .marker{fill:#333333;stroke:#333333;}#mermaid-svg .marker.cross{stroke:#333333;}#mermaid-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg p{margin:0;}#mermaid-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg .cluster-label text{fill:#333;}#mermaid-svg .cluster-label span{color:#333;}#mermaid-svg .cluster-label span p{background-color:transparent;}#mermaid-svg .label text,#mermaid-svg span{fill:#333;color:#333;}#mermaid-svg .node rect,#mermaid-svg .node circle,#mermaid-svg .node ellipse,#mermaid-svg .node polygon,#mermaid-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg .rough-node .label text,#mermaid-svg .node .label text,#mermaid-svg .image-shape .label,#mermaid-svg .icon-shape .label{text-anchor:middle;}#mermaid-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg .rough-node .label,#mermaid-svg .node .label,#mermaid-svg .image-shape .label,#mermaid-svg .icon-shape .label{text-align:center;}#mermaid-svg .node.clickable{cursor:pointer;}#mermaid-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg .arrowheadPath{fill:#333333;}#mermaid-svg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg .cluster text{fill:#333;}#mermaid-svg .cluster span{color:#333;}#mermaid-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg rect.text{fill:none;stroke-width:0;}#mermaid-svg .icon-shape,#mermaid-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg .icon-shape p,#mermaid-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg .icon-shape rect,#mermaid-svg .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="mermaid-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="mermaid-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster " id="Consumer" data-look="classic"><rect style="" x="8" y="1073.4070892333984" width="312.015625" height="155.60433959960938"/><g class="cluster-label " transform="translate(75.9765625, 1073.4070892333984)"><foreignObject width="176.0625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Downstream Consumers</p></span></div></foreignObject></g></g><g class="cluster " id="UI" data-look="classic"><rect style="" x="496.33203125" y="424.1279830932617" width="348.4609375" height="162.18000030517578"/><g class="cluster-label " transform="translate(570.5625, 424.1279830932617)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel "><p>Dashboard (React SPA, :80)</p></span></div></foreignObject></g></g><g class="cluster " id="Bus" data-look="classic"><rect style="" x="21.78125" y="894.7344589233398" width="369.640625" height="128.6726303100586"/><g class="cluster-label " transform="translate(147.4375, 894.7344589233398)"><foreignObject width="118.328125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Redpanda :9092</p></span></div></foreignObject></g></g><g class="cluster " id="App" data-look="classic"><rect style="" x="411.421875" y="660.3079833984375" width="821.81640625" height="363.09910583496094"/><g class="cluster-label " transform="translate(722.330078125, 660.3079833984375)"><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel "><p>Go Servers (x2, behind Caddy)</p></span></div></foreignObject></g></g><g class="cluster " id="Edge" data-look="classic"><rect style="" x="363.0234375" y="190.65866088867188" width="759.08203125" height="159.46932220458984"/><g class="cluster-label " transform="translate(673.650390625, 190.65866088867188)"><foreignObject width="137.828125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Reverse Proxy / LB</p></span></div></foreignObject></g></g><g class="cluster " id="Router" data-look="classic"><rect style="" x="1295.92578125" y="8" width="1535.49609375" height="812.7344589233398"/><g class="cluster-label " transform="translate(2005.572265625, 8)"><foreignObject width="116.203125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>OpenWrt Router</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M839.07,286.977L774.462,297.502C709.854,308.027,580.638,329.078,516.03,345.769C451.422,362.461,451.422,374.795,451.422,387.128C451.422,399.461,451.422,411.795,451.422,431.476C451.422,451.158,451.422,478.188,451.422,505.218C451.422,532.248,451.422,559.278,451.422,578.96C451.422,598.641,451.422,610.975,451.422,623.308C451.422,635.641,451.422,647.975,474.374,663.447C497.327,678.92,543.232,697.531,566.184,706.837L589.137,716.143" id="L_Caddy_S1_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Caddy_S1_0" data-points="W3sieCI6ODM5LjA3MDMxMjUsInkiOjI4Ni45NzY4Njg5NjE1OTUyNH0seyJ4Ijo0NTEuNDIxODc1LCJ5IjozNTAuMTI3OTgzMDkzMjYxN30seyJ4Ijo0NTEuNDIxODc1LCJ5IjozODcuMTI3OTgzMDkzMjYxN30seyJ4Ijo0NTEuNDIxODc1LCJ5Ijo0MjQuMTI3OTgzMDkzMjYxN30seyJ4Ijo0NTEuNDIxODc1LCJ5Ijo1MDUuMjE3OTgzMjQ1ODQ5Nn0seyJ4Ijo0NTEuNDIxODc1LCJ5Ijo1ODYuMzA3OTgzMzk4NDM3NX0seyJ4Ijo0NTEuNDIxODc1LCJ5Ijo2MjMuMzA3OTgzMzk4NDM3NX0seyJ4Ijo0NTEuNDIxODc1LCJ5Ijo2NjAuMzA3OTgzMzk4NDM3NX0seyJ4Ijo1OTIuODQzNzUsInkiOjcxNy42NDU2ODc5NDY1Mjk4fV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M984.004,323.668L987.288,328.078C990.572,332.488,997.139,341.308,1000.423,351.885C1003.707,362.461,1003.707,374.795,1003.707,387.128C1003.707,399.461,1003.707,411.795,1003.707,431.476C1003.707,451.158,1003.707,478.188,1003.707,505.218C1003.707,532.248,1003.707,559.278,1003.707,578.96C1003.707,598.641,1003.707,610.975,1003.707,623.308C1003.707,635.641,1003.707,647.975,1003.707,660.628C1003.707,673.282,1003.707,686.256,1003.707,692.743L1003.707,699.23" id="L_Caddy_S2_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Caddy_S2_0" data-points="W3sieCI6OTg0LjAwNDIzMTA4NzE2MzYsInkiOjMyMy42Njg0Nzk3OTM2ODE3fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjM1MC4xMjc5ODMwOTMyNjE3fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjM4Ny4xMjc5ODMwOTMyNjE3fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjQyNC4xMjc5ODMwOTMyNjE3fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjUwNS4yMTc5ODMyNDU4NDk2fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjU4Ni4zMDc5ODMzOTg0Mzc1fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjYyMy4zMDc5ODMzOTg0Mzc1fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjY2MC4zMDc5ODMzOTg0Mzc1fSx7IngiOjEwMDMuNzA3MDMxMjUsInkiOjcwMy4yMjk1Mzc5NjM4NjcyfV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M2309.449,94.636L2289.943,104.473C2270.438,114.31,2231.426,133.984,2211.92,149.988C2192.414,165.992,2192.414,178.325,2192.414,197.781C2192.414,217.237,2192.414,243.815,2192.414,270.393C2192.414,296.972,2192.414,323.55,2192.414,343.006C2192.414,362.461,2192.414,374.795,2192.414,387.128C2192.414,399.461,2192.414,411.795,2192.414,431.476C2192.414,451.158,2192.414,478.188,2192.414,505.218C2192.414,532.248,2192.414,559.278,2192.414,578.96C2192.414,598.641,2192.414,610.975,2192.414,623.308C2192.414,635.641,2192.414,647.975,2208.764,663.016C2225.115,678.058,2257.815,695.808,2274.165,704.682L2290.516,713.557" id="L_Lua_Shared_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Lua_Shared_0" data-points="W3sieCI6MjMwOS40NDkyMTg3NSwieSI6OTQuNjM1NjE3MjgwNjMzMjh9LHsieCI6MjE5Mi40MTQwNjI1LCJ5IjoxNTMuNjU4NjYwODg4NjcxODh9LHsieCI6MjE5Mi40MTQwNjI1LCJ5IjoxOTAuNjU4NjYwODg4NjcxODh9LHsieCI6MjE5Mi40MTQwNjI1LCJ5IjoyNzAuMzkzMzIxOTkwOTY2OH0seyJ4IjoyMTkyLjQxNDA2MjUsInkiOjM1MC4xMjc5ODMwOTMyNjE3fSx7IngiOjIxOTIuNDE0MDYyNSwieSI6Mzg3LjEyNzk4MzA5MzI2MTd9LHsieCI6MjE5Mi40MTQwNjI1LCJ5Ijo0MjQuMTI3OTgzMDkzMjYxN30seyJ4IjoyMTkyLjQxNDA2MjUsInkiOjUwNS4yMTc5ODMyNDU4NDk2fSx7IngiOjIxOTIuNDE0MDYyNSwieSI6NTg2LjMwNzk4MzM5ODQzNzV9LHsieCI6MjE5Mi40MTQwNjI1LCJ5Ijo2MjMuMzA3OTgzMzk4NDM3NX0seyJ4IjoyMTkyLjQxNDA2MjUsInkiOjY2MC4zMDc5ODMzOTg0Mzc1fSx7IngiOjIyOTQuMDMxMjUsInkiOjcxNS40NjU1Njg5NTQ3MzYzfV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M2391.918,561.308L2391.918,565.475C2391.918,569.641,2391.918,577.975,2391.918,588.308C2391.918,598.641,2391.918,610.975,2391.918,623.308C2391.918,635.641,2391.918,647.975,2392.22,657.684C2392.523,667.394,2393.127,674.48,2393.429,678.023L2393.732,681.566" id="L_Hotplug_Shared_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Hotplug_Shared_0" data-points="W3sieCI6MjM5MS45MTc5Njg3NSwieSI6NTYxLjMwNzk4MzM5ODQzNzV9LHsieCI6MjM5MS45MTc5Njg3NSwieSI6NTg2LjMwNzk4MzM5ODQzNzV9LHsieCI6MjM5MS45MTc5Njg3NSwieSI6NjIzLjMwNzk4MzM5ODQzNzV9LHsieCI6MjM5MS45MTc5Njg3NSwieSI6NjYwLjMwNzk4MzM5ODQzNzV9LHsieCI6MjM5NC4wNzE2MzY5ODczNjUsInkiOjY4NS41NTE3MjAzNDIzOTU0fV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M2511.043,542.018L2534.938,549.4C2558.833,556.781,2606.624,571.545,2630.519,585.093C2654.414,598.641,2654.414,610.975,2654.414,623.308C2654.414,635.641,2654.414,647.975,2656.179,657.855C2657.944,667.735,2661.474,675.162,2663.238,678.876L2665.003,682.589" id="L_Hotplug_Wake_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Hotplug_Wake_0" data-points="W3sieCI6MjUxMS4wNDI5Njg3NSwieSI6NTQyLjAxNzk0NTIxOTI5MTV9LHsieCI6MjY1NC40MTQwNjI1LCJ5Ijo1ODYuMzA3OTgzMzk4NDM3NX0seyJ4IjoyNjU0LjQxNDA2MjUsInkiOjYyMy4zMDc5ODMzOTg0Mzc1fSx7IngiOjI2NTQuNDE0MDYyNSwieSI6NjYwLjMwNzk4MzM5ODQzNzV9LHsieCI6MjY2Ni43MjAzNTI5OTAzNjIyLCJ5Ijo2ODYuMjAyMTU0NzMxNDkzOX1d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M2722.754,686.322L2725.022,681.987C2727.29,677.651,2731.827,668.979,2734.095,658.477C2736.363,647.975,2736.363,635.641,2736.363,623.308C2736.363,610.975,2736.363,598.641,2736.363,578.96C2736.363,559.278,2736.363,532.248,2736.363,505.218C2736.363,478.188,2736.363,451.158,2736.363,431.476C2736.363,411.795,2736.363,399.461,2736.363,387.128C2736.363,374.795,2736.363,362.461,2736.363,343.006C2736.363,323.55,2736.363,296.972,2736.363,270.393C2736.363,243.815,2736.363,217.237,2736.363,197.781C2736.363,178.325,2736.363,165.992,2696.524,150.448C2656.685,134.905,2577.006,116.151,2537.167,106.774L2497.327,97.398" id="L_Wake_Lua_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Wake_Lua_0" data-points="W3sieCI6MjcyMi43NTM3MjQ3MDE4ODUsInkiOjY4Ni4zMjIyOTg3ODQyODM3fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjY2MC4zMDc5ODMzOTg0Mzc1fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjYyMy4zMDc5ODMzOTg0Mzc1fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjU4Ni4zMDc5ODMzOTg0Mzc1fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjUwNS4yMTc5ODMyNDU4NDk2fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjQyNC4xMjc5ODMwOTMyNjE3fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjM4Ny4xMjc5ODMwOTMyNjE3fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjM1MC4xMjc5ODMwOTMyNjE3fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjI3MC4zOTMzMjE5OTA5NjY4fSx7IngiOjI3MzYuMzYzMjgxMjUsInkiOjE5MC42NTg2NjA4ODg2NzE4OH0seyJ4IjoyNzM2LjM2MzI4MTI1LCJ5IjoxNTMuNjU4NjYwODg4NjcxODh9LHsieCI6MjQ5My40MzM1OTM3NSwieSI6OTYuNDgxMTkzNDI1MDIzMDR9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M2503.5,701.641L2522.057,694.752C2540.615,687.864,2577.729,674.086,2596.286,661.03C2614.844,647.975,2614.844,635.641,2614.844,623.308C2614.844,610.975,2614.844,598.641,2614.844,578.96C2614.844,559.278,2614.844,532.248,2614.844,505.218C2614.844,478.188,2614.844,451.158,2614.844,431.476C2614.844,411.795,2614.844,399.461,2614.844,387.128C2614.844,374.795,2614.844,362.461,2614.844,343.006C2614.844,323.55,2614.844,296.972,2614.844,270.393C2614.844,243.815,2614.844,217.237,2614.844,197.781C2614.844,178.325,2614.844,165.992,2595.207,150.164C2575.57,134.336,2536.296,115.013,2516.66,105.352L2497.023,95.69" id="L_Shared_Lua_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Shared_Lua_0" data-points="W3sieCI6MjUwMy41LCJ5Ijo3MDEuNjQxMzc5MzI2OTM3Nn0seyJ4IjoyNjE0Ljg0Mzc1LCJ5Ijo2NjAuMzA3OTgzMzk4NDM3NX0seyJ4IjoyNjE0Ljg0Mzc1LCJ5Ijo2MjMuMzA3OTgzMzk4NDM3NX0seyJ4IjoyNjE0Ljg0Mzc1LCJ5Ijo1ODYuMzA3OTgzMzk4NDM3NX0seyJ4IjoyNjE0Ljg0Mzc1LCJ5Ijo1MDUuMjE3OTgzMjQ1ODQ5Nn0seyJ4IjoyNjE0Ljg0Mzc1LCJ5Ijo0MjQuMTI3OTgzMDkzMjYxN30seyJ4IjoyNjE0Ljg0Mzc1LCJ5IjozODcuMTI3OTgzMDkzMjYxN30seyJ4IjoyNjE0Ljg0Mzc1LCJ5IjozNTAuMTI3OTgzMDkzMjYxN30seyJ4IjoyNjE0Ljg0Mzc1LCJ5IjoyNzAuMzkzMzIxOTkwOTY2OH0seyJ4IjoyNjE0Ljg0Mzc1LCJ5IjoxOTAuNjU4NjYwODg4NjcxODh9LHsieCI6MjYxNC44NDM3NSwieSI6MTUzLjY1ODY2MDg4ODY3MTg4fSx7IngiOjI0OTMuNDMzNTkzNzUsInkiOjkzLjkyNDM3OTkzMTM1NjYxfV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M2309.449,86.115L2217.686,97.372C2125.923,108.629,1942.397,131.144,1850.634,148.568C1758.871,165.992,1758.871,178.325,1640.167,196.063C1521.462,213.8,1284.054,236.941,1165.35,248.512L1046.645,260.083" id="L_Lua_Caddy_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Lua_Caddy_0" data-points="W3sieCI6MjMwOS40NDkyMTg3NSwieSI6ODYuMTE0NzYwODU2NjQ1NTd9LHsieCI6MTc1OC44NzEwOTM3NSwieSI6MTUzLjY1ODY2MDg4ODY3MTg4fSx7IngiOjE3NTguODcxMDkzNzUsInkiOjE5MC42NTg2NjA4ODg2NzE4OH0seyJ4IjoxMDQyLjY2NDA2MjUsInkiOjI2MC40NzA3MDUxNTgyMzM2N31d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M592.844,764.033L570.165,773.483C547.487,782.933,502.13,801.834,479.452,817.451C456.773,833.068,456.773,845.401,456.773,857.734C456.773,870.068,456.773,882.401,408.974,897.472C361.175,912.543,265.577,930.352,217.778,939.256L169.979,948.161" id="L_S1_REvents_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S1_REvents_0" data-points="W3sieCI6NTkyLjg0Mzc1LCJ5Ijo3NjQuMDMyNzI3NDM2MzIyOH0seyJ4Ijo0NTYuNzczNDM3NSwieSI6ODIwLjczNDQ1ODkyMzMzOTh9LHsieCI6NDU2Ljc3MzQzNzUsInkiOjg1Ny43MzQ0NTg5MjMzMzk4fSx7IngiOjQ1Ni43NzM0Mzc1LCJ5Ijo4OTQuNzM0NDU4OTIzMzM5OH0seyJ4IjoxNjYuMDQ2ODc1LCJ5Ijo5NDguODkzMzM1NDUyODYzMX1d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M644.46,777.77L643.539,784.931C642.617,792.091,640.773,806.413,639.851,819.74C638.93,833.068,638.93,845.401,638.93,857.734C638.93,870.068,638.93,882.401,592.501,897.037C546.072,911.673,453.215,928.611,406.786,937.081L360.357,945.55" id="L_S1_RCommands_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S1_RCommands_0" data-points="W3sieCI6NjQ0LjQ2MDM3NjkxOTQzMTQsInkiOjc3Ny43Njk4MDk4Mzc4OTUyfSx7IngiOjYzOC45Mjk2ODc1LCJ5Ijo4MjAuNzM0NDU4OTIzMzM5OH0seyJ4Ijo2MzguOTI5Njg3NSwieSI6ODU3LjczNDQ1ODkyMzMzOTh9LHsieCI6NjM4LjkyOTY4NzUsInkiOjg5NC43MzQ0NTg5MjMzMzk4fSx7IngiOjM1Ni40MjE4NzUsInkiOjk0Ni4yNjc2NDA3MjI0NTQxfV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M947.285,750.025L877.317,761.81C807.349,773.595,667.413,797.164,597.445,815.116C527.477,833.068,527.477,845.401,527.477,857.734C527.477,870.068,527.477,882.401,467.897,897.781C408.318,913.16,289.159,931.586,229.579,940.799L170,950.012" id="L_S2_REvents_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S2_REvents_0" data-points="W3sieCI6OTQ3LjI4NTE1NjI1LCJ5Ijo3NTAuMDI0NTYzNzA0Nzk5MX0seyJ4Ijo1MjcuNDc2NTYyNSwieSI6ODIwLjczNDQ1ODkyMzMzOTh9LHsieCI6NTI3LjQ3NjU2MjUsInkiOjg1Ny43MzQ0NTg5MjMzMzk4fSx7IngiOjUyNy40NzY1NjI1LCJ5Ijo4OTQuNzM0NDU4OTIzMzM5OH0seyJ4IjoxNjYuMDQ2ODc1LCJ5Ijo5NTAuNjIyODI3MzMyODU0Nn1d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M992.442,777.574L990.281,784.767C988.12,791.961,983.798,806.348,981.637,819.708C979.477,833.068,979.477,845.401,979.477,857.734C979.477,870.068,979.477,882.401,876.298,898.143C773.119,913.885,566.762,933.036,463.583,942.612L360.405,952.187" id="L_S2_RCommands_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S2_RCommands_0" data-points="W3sieCI6OTkyLjQ0MjEyMDUwMDI3NjksInkiOjc3Ny41NzQwOTU1MTUyOTM4fSx7IngiOjk3OS40NzY1NjI1LCJ5Ijo4MjAuNzM0NDU4OTIzMzM5OH0seyJ4Ijo5NzkuNDc2NTYyNSwieSI6ODU3LjczNDQ1ODkyMzMzOTh9LHsieCI6OTc5LjQ3NjU2MjUsInkiOjg5NC43MzQ0NTg5MjMzMzk4fSx7IngiOjM1Ni40MjE4NzUsInkiOjk1Mi41NTcwMjU3Nzg5MDY5fV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M111.414,996.061L111.414,1000.619C111.414,1005.177,111.414,1014.292,111.414,1023.016C111.414,1031.74,111.414,1040.074,111.414,1048.407C111.414,1056.74,111.414,1065.074,112.036,1072.766C112.658,1080.458,113.903,1087.509,114.525,1091.035L115.147,1094.56" id="L_REvents_AnyClient_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_REvents_AnyClient_0" data-points="W3sieCI6MTExLjQxNDA2MjUsInkiOjk5Ni4wNjE0Mzk1MTQxNjAyfSx7IngiOjExMS40MTQwNjI1LCJ5IjoxMDIzLjQwNzA4OTIzMzM5ODR9LHsieCI6MTExLjQxNDA2MjUsInkiOjEwNDguNDA3MDg5MjMzMzk4NH0seyJ4IjoxMTEuNDE0MDYyNSwieSI6MTA3My40MDcwODkyMzMzOTg0fSx7IngiOjExNS44NDIzNjEyMzM2NTM4OSwieSI6MTA5OC40OTkzMjkwNzEzNTh9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M286.234,998.407L286.234,1002.574C286.234,1006.74,286.234,1015.074,286.234,1023.407C286.234,1031.74,286.234,1040.074,286.234,1048.407C286.234,1056.74,286.234,1065.074,273.649,1077.587C261.064,1090.101,235.894,1106.795,223.309,1115.142L210.724,1123.489" id="L_RCommands_AnyClient_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_RCommands_AnyClient_0" data-points="W3sieCI6Mjg2LjIzNDM3NSwieSI6OTk4LjQwNzA4OTIzMzM5ODR9LHsieCI6Mjg2LjIzNDM3NSwieSI6MTAyMy40MDcwODkyMzMzOTg0fSx7IngiOjI4Ni4yMzQzNzUsInkiOjEwNDguNDA3MDg5MjMzMzk4NH0seyJ4IjoyODYuMjM0Mzc1LCJ5IjoxMDczLjQwNzA4OTIzMzM5ODR9LHsieCI6MjA3LjM5MDYyNSwieSI6MTEyNS43MDAwMDc1MjU1NjMzfV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M705.688,752.572L758.878,763.932C812.068,775.293,918.448,798.014,971.638,815.541C1024.828,833.068,1024.828,845.401,1024.828,857.734C1024.828,870.068,1024.828,882.401,1024.828,893.259C1024.828,904.117,1024.828,913.5,1024.828,918.191L1024.828,922.883" id="L_S1_SQLite1_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S1_SQLite1_0" data-points="W3sieCI6NzA1LjY4NzUsInkiOjc1Mi41NzE4OTUyMTQ4MTY1fSx7IngiOjEwMjQuODI4MTI1LCJ5Ijo4MjAuNzM0NDU4OTIzMzM5OH0seyJ4IjoxMDI0LjgyODEyNSwieSI6ODU3LjczNDQ1ODkyMzMzOTh9LHsieCI6MTAyNC44MjgxMjUsInkiOjg5NC43MzQ0NTg5MjMzMzk4fSx7IngiOjEwMjQuODI4MTI1LCJ5Ijo5MjYuODgyNjE3OTUwNDM5NX1d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M1060.129,758.764L1075.782,769.092C1091.435,779.421,1122.741,800.078,1138.394,816.573C1154.047,833.068,1154.047,845.401,1154.047,857.734C1154.047,870.068,1154.047,882.401,1154.047,893.259C1154.047,904.117,1154.047,913.5,1154.047,918.191L1154.047,922.883" id="L_S2_SQLite2_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S2_SQLite2_0" data-points="W3sieCI6MTA2MC4xMjg5MDYyNSwieSI6NzU4Ljc2Mzc3MDYzMjQyMDZ9LHsieCI6MTE1NC4wNDY4NzUsInkiOjgyMC43MzQ0NTg5MjMzMzk4fSx7IngiOjExNTQuMDQ2ODc1LCJ5Ijo4NTcuNzM0NDU4OTIzMzM5OH0seyJ4IjoxMTU0LjA0Njg3NSwieSI6ODk0LjczNDQ1ODkyMzMzOTh9LHsieCI6MTE1NC4wNDY4NzUsInkiOjkyNi44ODI2MTc5NTA0Mzk1fV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M839.07,300.987L811.819,309.177C784.568,317.368,730.065,333.748,702.814,348.105C675.563,362.461,675.563,374.795,675.563,387.128C675.563,399.461,675.563,411.795,675.563,421.625C675.563,431.456,675.563,438.783,675.563,442.447L675.563,446.111" id="L_Caddy_Dash_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Caddy_Dash_0" data-points="W3sieCI6ODM5LjA3MDMxMjUsInkiOjMwMC45ODczNTEwODk2NzEyfSx7IngiOjY3NS41NjI1LCJ5IjozNTAuMTI3OTgzMDkzMjYxN30seyJ4Ijo2NzUuNTYyNSwieSI6Mzg3LjEyNzk4MzA5MzI2MTd9LHsieCI6Njc1LjU2MjUsInkiOjQyNC4xMjc5ODMwOTMyNjE3fSx7IngiOjY3NS41NjI1LCJ5Ijo0NTAuMTEwNzMzMDMyMjI2NTZ9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M615.332,557.55L610.599,562.343C605.866,567.136,596.4,576.722,591.667,587.682C586.934,598.641,586.934,610.975,586.934,623.308C586.934,635.641,586.934,647.975,592.093,661.042C597.253,674.109,607.572,687.909,612.732,694.81L617.892,701.71" id="L_Dash_S1_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Dash_S1_0" data-points="W3sieCI6NjE1LjMzMTk0OTk0ODM1MzIsInkiOjU1Ny41NDk1MDk1ODAyMTg2fSx7IngiOjU4Ni45MzM1OTM3NSwieSI6NTg2LjMwNzk4MzM5ODQzNzV9LHsieCI6NTg2LjkzMzU5Mzc1LCJ5Ijo2MjMuMzA3OTgzMzk4NDM3NX0seyJ4Ijo1ODYuOTMzNTkzNzUsInkiOjY2MC4zMDc5ODMzOTg0Mzc1fSx7IngiOjYyMC4yODcwMzcwODU1NTAzLCJ5Ijo3MDQuOTEzNTAzODg2MDA5OH1d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M735.793,557.55L740.526,562.343C745.259,567.136,754.725,576.722,759.458,587.682C764.191,598.641,764.191,610.975,764.191,623.308C764.191,635.641,764.191,647.975,754.455,662.211C744.719,676.448,725.247,692.587,715.511,700.657L705.775,708.727" id="L_Dash_S1_2" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Dash_S1_2" data-points="W3sieCI6NzM1Ljc5MzA1MDA1MTY0NjgsInkiOjU1Ny41NDk1MDk1ODAyMTg2fSx7IngiOjc2NC4xOTE0MDYyNSwieSI6NTg2LjMwNzk4MzM5ODQzNzV9LHsieCI6NzY0LjE5MTQwNjI1LCJ5Ijo2MjMuMzA3OTgzMzk4NDM3NX0seyJ4Ijo3NjQuMTkxNDA2MjUsInkiOjY2MC4zMDc5ODMzOTg0Mzc1fSx7IngiOjcwMi42OTU0MDcyMjkxNzk5LCJ5Ijo3MTEuMjc5Mzk1NDc5ODgzNn1d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M705.688,723.874L741.596,713.28C777.504,702.686,849.32,681.497,885.229,664.736C921.137,647.975,921.137,635.641,921.137,623.308C921.137,610.975,921.137,598.641,921.137,578.96C921.137,559.278,921.137,532.248,921.137,505.218C921.137,478.188,921.137,451.158,921.137,431.476C921.137,411.795,921.137,399.461,921.137,387.128C921.137,374.795,921.137,362.461,922.008,352.752C922.88,343.043,924.624,335.959,925.495,332.417L926.367,328.874" id="L_S1_Caddy_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S1_Caddy_0" data-points="W3sieCI6NzA1LjY4NzUsInkiOjcyMy44NzQ0MzAxNjkwNTJ9LHsieCI6OTIxLjEzNjcxODc1LCJ5Ijo2NjAuMzA3OTgzMzk4NDM3NX0seyJ4Ijo5MjEuMTM2NzE4NzUsInkiOjYyMy4zMDc5ODMzOTg0Mzc1fSx7IngiOjkyMS4xMzY3MTg3NSwieSI6NTg2LjMwNzk4MzM5ODQzNzV9LHsieCI6OTIxLjEzNjcxODc1LCJ5Ijo1MDUuMjE3OTgzMjQ1ODQ5Nn0seyJ4Ijo5MjEuMTM2NzE4NzUsInkiOjQyNC4xMjc5ODMwOTMyNjE3fSx7IngiOjkyMS4xMzY3MTg3NSwieSI6Mzg3LjEyNzk4MzA5MzI2MTd9LHsieCI6OTIxLjEzNjcxODc1LCJ5IjozNTAuMTI3OTgzMDkzMjYxN30seyJ4Ijo5MjcuMzIzMDA4NTI1NzQ5NywieSI6MzI0Ljk5MDI2NjQxMTE5ODI2fV0=" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M1295.926,380.556L1253.889,375.484C1211.853,370.413,1127.78,360.271,1080.863,350.76C1033.945,341.249,1024.183,332.369,1019.303,327.929L1014.422,323.49" id="L_Router_Caddy_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Router_Caddy_0" data-points="W3sieCI6MjQ0MS40OTM0NDYyNzAzMDYzLCJ5Ijo0NTAuNjE1MzY4MTk3NzE0OH0seyJ4IjoyNDYzLjU4OTg0Mzc1LCJ5Ijo0MjQuMTI3OTgzMDkzMjYxN30seyJ4IjoyNDYzLjU4OTg0Mzc1LCJ5IjozODcuMTI3OTgzMDkzMjYxN30seyJ4IjoxMDQzLjcwNzAzMTI1LCJ5IjozNTAuMTI3OTgzMDkzMjYxN30seyJ4IjoxMDExLjQ2MjYzMzkxNzU1OCwieSI6MzIwLjc5ODAxOTI0MTI2MzJ9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M997.733,325.128L1002.062,329.295C1006.391,333.461,1015.049,341.795,1064.085,350.762C1113.121,359.729,1202.535,369.331,1247.242,374.132L1291.949,378.932" id="L_Caddy_Router_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Caddy_Router_0" data-points="W3sieCI6OTk3LjczMzQzMjUwMjM2MDksInkiOjMyMi40ODU3NDU4ODExNDU2fSx7IngiOjEwMjMuNzA3MDMxMjUsInkiOjM1MC4xMjc5ODMwOTMyNjE3fSx7IngiOjIzMjAuMjQ2MDkzNzUsInkiOjM4Ny4xMjc5ODMwOTMyNjE3fSx7IngiOjIzMjAuMjQ2MDkzNzUsInkiOjQyNC4xMjc5ODMwOTMyNjE3fSx7IngiOjIzNDIuMzQyNDkxMjI5NjkzNywieSI6NDUwLjYxNTM2ODE5NzcxNDh9XQ==" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/><path d="M2147.012,700.18Z" id="L_Router_CMD_0" class=" edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Router_CMD_0" data-points="W3sieCI6MjI3Mi43OTI5Njg3NSwieSI6NTQ0LjAyNzE1ODQ2MDEyMDJ9LHsieCI6MjE0My4wMTE3MTg3NSwieSI6NTg2LjMwNzk4MzM5ODQzNzV9LHsieCI6MjE0My4wMTE3MTg3NSwieSI6NjIzLjMwNzk4MzM5ODQzNzV9LHsieCI6MjE0My4wMTE3MTg3NSwieSI6NjYwLjMwNzk4MzM5ODQzNzV9LHsieCI6MjE0My4wMTE3MTg3NSwieSI6NzAwLjE3OTU1NzgwMDI5M31d" marker-end="url(#mermaid-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(451.421875, 505.2179832458496)"><g class="label" data-id="L_Caddy_S1_0" transform="translate(-6.2265625, -12)"><foreignObject width="12.453125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>lb</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1003.70703125, 505.2179832458496)"><g class="label" data-id="L_Caddy_S2_0" transform="translate(-6.2265625, -12)"><foreignObject width="12.453125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>lb</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(2192.4140625, 387.1279830932617)"><g class="label" data-id="L_Lua_Shared_0" transform="translate(-21.203125, -12)"><foreignObject width="42.40625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>offline</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(2391.91796875, 623.3079833984375)"><g class="label" data-id="L_Hotplug_Shared_0" transform="translate(-19.125, -12)"><foreignObject width="38.25" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>spool</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(2654.4140625, 623.3079833984375)"><g class="label" data-id="L_Hotplug_Wake_0" transform="translate(-19.5703125, -12)"><foreignObject width="39.140625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>touch</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(2736.36328125, 387.1279830932617)"><g class="label" data-id="L_Wake_Lua_0" transform="translate(-32.0234375, -12)"><foreignObject width="64.046875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>polled by</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(2614.84375, 387.1279830932617)"><g class="label" data-id="L_Shared_Lua_0" transform="translate(-65.375, -12)"><foreignObject width="130.75" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>flush on reconnect</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1758.87109375, 153.65866088867188)"><g class="label" data-id="L_Lua_Caddy_0" transform="translate(-35.5625, -12)"><foreignObject width="71.125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>WS frame</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(456.7734375, 857.7344589233398)"><g class="label" data-id="L_S1_REvents_0" transform="translate(-25.3515625, -12)"><foreignObject width="50.703125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>publish</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(638.9296875, 857.7344589233398)"><g class="label" data-id="L_S1_RCommands_0" transform="translate(-25.3515625, -12)"><foreignObject width="50.703125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>publish</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(527.4765625, 857.7344589233398)"><g class="label" data-id="L_S2_REvents_0" transform="translate(-25.3515625, -12)"><foreignObject width="50.703125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>publish</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(979.4765625, 857.7344589233398)"><g class="label" data-id="L_S2_RCommands_0" transform="translate(-25.3515625, -12)"><foreignObject width="50.703125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>publish</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_REvents_AnyClient_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_RCommands_AnyClient_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_S1_SQLite1_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_S2_SQLite2_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(675.5625, 387.1279830932617)"><g class="label" data-id="L_Caddy_Dash_0" transform="translate(-62.4765625, -12)"><foreignObject width="124.953125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>static + /api proxy</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(586.93359375, 623.3079833984375)"><g class="label" data-id="L_Dash_S1_0" transform="translate(-83.59375, -12)"><foreignObject width="167.1875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>SSE /api/events/stream</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(764.19140625, 623.3079833984375)"><g class="label" data-id="L_Dash_S1_2" transform="translate(-73.6640625, -12)"><foreignObject width="147.328125" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>REST /api/command</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(921.13671875, 505.2179832458496)"><g class="label" data-id="L_S1_Caddy_0" transform="translate(-56.34375, -12)"><foreignObject width="112.6875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>queued if offline</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1148.1791, 362.73145)"><g class="label" data-id="L_Router_Caddy_0" transform="translate(-63.0078125, -12)"><foreignObject width="126.015625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>WebSocket :3843</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1141.89426, 362.81923)"><g class="label" data-id="L_Caddy_Router_0" transform="translate(-60.3359375, -12)"><foreignObject width="120.671875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "><p>WebSocket send</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Router_CMD_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel "></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default " id="flowchart-Lua-0" transform="translate(2401.44140625, 74.82933044433594)"><path d="M0,14.88621997471555 a91.9921875,14.88621997471555 0,0,0 183.984375,0 a91.9921875,14.88621997471555 0,0,0 -183.984375,0 l0,53.88621997471555 a91.9921875,14.88621997471555 0,0,0 183.984375,0 l0,-53.88621997471555" class="basic label-container" style="" label-offset-y="14.88621997471555" transform="translate(-91.9921875, -41.829329962073324)"/><g class="label" style="" transform="translate(-84.4921875, -2)"><rect/><foreignObject width="168.984375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>client2server-unified.lua</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-Hotplug-1" transform="translate(2391.91796875, 505.2179832458496)"><path d="M0,16.39710942876807 a119.125,16.39710942876807 0,0,0 238.25,0 a119.125,16.39710942876807 0,0,0 -238.25,0 l0,79.39710942876806 a119.125,16.39710942876807 0,0,0 238.25,0 l0,-79.39710942876806" class="basic label-container" style="" label-offset-y="16.39710942876807" transform="translate(-119.125, -56.0956641431521)"/><g class="label" style="" transform="translate(-111.625, -14)"><rect/><foreignObject width="223.25" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel "><p>/etc/hotplug.d/{wireless,dhcp}/* scripts</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-Wifi-2" transform="translate(1438.42578125, 740.5212211608887)"><path d="M0,15.808823529411764 a107.5,15.808823529411764 0,0,0 215,0 a107.5,15.808823529411764 0,0,0 -215,0 l0,78.80882352941177 a107.5,15.808823529411764 0,0,0 215,0 l0,-78.80882352941177" class="basic label-container" style="" label-offset-y="15.808823529411764" transform="translate(-107.5, -55.21323529411765)"/><g class="label" style="" transform="translate(-100, -14)"><rect/><foreignObject width="200" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel "><p>wifi_connected / disconnected</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-DHCP-3" transform="translate(1691.93359375, 740.5212211608887)"><path d="M0,15.142441717186655 a96.0078125,15.142441717186655 0,0,0 192.015625,0 a96.0078125,15.142441717186655 0,0,0 -192.015625,0 l0,54.14244171718666 a96.0078125,15.142441717186655 0,0,0 192.015625,0 l0,-54.14244171718666" class="basic label-container" style="" label-offset-y="15.142441717186655" transform="translate(-96.0078125, -42.213662575779985)"/><g class="label" style="" transform="translate(-88.5078125, -2)"><rect/><foreignObject width="177.015625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>dhcp_lease_new / expire</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-WAN-4" transform="translate(1926.37890625, 740.5212211608887)"><path d="M0,14.648033126293997 a88.4375,14.648033126293997 0,0,0 176.875,0 a88.4375,14.648033126293997 0,0,0 -176.875,0 l0,53.648033126293996 a88.4375,14.648033126293997 0,0,0 176.875,0 l0,-53.648033126293996" class="basic label-container" style="" label-offset-y="14.648033126293997" transform="translate(-88.4375, -41.47204968944099)"/><g class="label" style="" transform="translate(-80.9375, -2)"><rect/><foreignObject width="161.875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>wan_link / dhcp events</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-CMD-5" transform="translate(2143.01171875, 740.5212211608887)"><path d="M0,13.894441668054862 a78.1953125,13.894441668054862 0,0,0 156.390625,0 a78.1953125,13.894441668054862 0,0,0 -156.390625,0 l0,52.89444166805486 a78.1953125,13.894441668054862 0,0,0 156.390625,0 l0,-52.89444166805486" class="basic label-container" style="" label-offset-y="13.894441668054862" transform="translate(-78.1953125, -40.34166250208229)"/><g class="label" style="" transform="translate(-70.6953125, -2)"><rect/><foreignObject width="141.390625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Command Executor</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-Shared-6" transform="translate(2398.765625, 740.5212211608887)"><path d="M0,15.65682518919929 a104.734375,15.65682518919929 0,0,0 209.46875,0 a104.734375,15.65682518919929 0,0,0 -209.46875,0 l0,78.65682518919928 a104.734375,15.65682518919929 0,0,0 209.46875,0 l0,-78.65682518919928" class="basic label-container" style="" label-offset-y="15.65682518919929" transform="translate(-104.734375, -54.98523778379893)"/><g class="label" style="" transform="translate(-97.234375, -14)"><rect/><foreignObject width="194.46875" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Shared buffer<br />/var/run/client2server/buffer</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-Wake-7" transform="translate(2693.328125, 740.5212211608887)"><path d="M0,15.564257407057935 a103.09375,15.564257407057935 0,0,0 206.1875,0 a103.09375,15.564257407057935 0,0,0 -206.1875,0 l0,78.56425740705794 a103.09375,15.564257407057935 0,0,0 206.1875,0 l0,-78.56425740705794" class="basic label-container" style="" label-offset-y="15.564257407057935" transform="translate(-103.09375, -54.846386110586906)"/><g class="label" style="" transform="translate(-95.59375, -14)"><rect/><foreignObject width="191.1875" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>wake file<br />/var/run/client2server/wake</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-Caddy-8" transform="translate(940.8671875, 270.3933219909668)"><path d="M0,15.489776509747978 a101.796875,15.489776509747978 0,0,0 203.59375,0 a101.796875,15.489776509747978 0,0,0 -203.59375,0 l0,78.48977650974797 a101.796875,15.489776509747978 0,0,0 203.59375,0 l0,-78.48977650974797" class="basic label-container" style="" label-offset-y="15.489776509747978" transform="translate(-101.796875, -54.73466476462196)"/><g class="label" style="" transform="translate(-94.296875, -14)"><rect/><foreignObject width="188.59375" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Caddy :80/:443 dashboard<br />Caddy :3843 API/WS</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-S1-9" transform="translate(649.265625, 740.5212211608887)"><path d="M0,11.861122060176061 a56.421875,11.861122060176061 0,0,0 112.84375,0 a56.421875,11.861122060176061 0,0,0 -112.84375,0 l0,50.86112206017606 a56.421875,11.861122060176061 0,0,0 112.84375,0 l0,-50.86112206017606" class="basic label-container" style="" label-offset-y="11.861122060176061" transform="translate(-56.421875, -37.29168309026409)"/><g class="label" style="" transform="translate(-48.921875, -2)"><rect/><foreignObject width="97.84375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>server1 :3843</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-S2-10" transform="translate(1003.70703125, 740.5212211608887)"><path d="M0,11.861122060176061 a56.421875,11.861122060176061 0,0,0 112.84375,0 a56.421875,11.861122060176061 0,0,0 -112.84375,0 l0,50.86112206017606 a56.421875,11.861122060176061 0,0,0 112.84375,0 l0,-50.86112206017606" class="basic label-container" style="" label-offset-y="11.861122060176061" transform="translate(-56.421875, -37.29168309026409)"/><g class="label" style="" transform="translate(-48.921875, -2)"><rect/><foreignObject width="97.84375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>server2 :3843</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-SQLite1-11" transform="translate(1024.828125, 959.0707740783691)"><path d="M0,8.45877098668431 a31.9609375,8.45877098668431 0,0,0 63.921875,0 a31.9609375,8.45877098668431 0,0,0 -63.921875,0 l0,47.458770986684314 a31.9609375,8.45877098668431 0,0,0 63.921875,0 l0,-47.458770986684314" class="basic label-container" style="" label-offset-y="8.45877098668431" transform="translate(-31.9609375, -32.188156480026464)"/><g class="label" style="" transform="translate(-24.4609375, -2)"><rect/><foreignObject width="48.921875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>SQLite</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-SQLite2-12" transform="translate(1154.046875, 959.0707740783691)"><path d="M0,8.45877098668431 a31.9609375,8.45877098668431 0,0,0 63.921875,0 a31.9609375,8.45877098668431 0,0,0 -63.921875,0 l0,47.458770986684314 a31.9609375,8.45877098668431 0,0,0 63.921875,0 l0,-47.458770986684314" class="basic label-container" style="" label-offset-y="8.45877098668431" transform="translate(-31.9609375, -32.188156480026464)"/><g class="label" style="" transform="translate(-24.4609375, -2)"><rect/><foreignObject width="48.921875" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>SQLite</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-REvents-13" transform="translate(111.4140625, 959.0707740783691)"><path d="M0,11.660441539385046 a54.6328125,11.660441539385046 0,0,0 109.265625,0 a54.6328125,11.660441539385046 0,0,0 -109.265625,0 l0,50.66044153938505 a54.6328125,11.660441539385046 0,0,0 109.265625,0 l0,-50.66044153938505" class="basic label-container" style="" label-offset-y="11.660441539385046" transform="translate(-54.6328125, -36.99066230907757)"/><g class="label" style="" transform="translate(-47.1328125, -2)"><rect/><foreignObject width="94.265625" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>router-events</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-RCommands-14" transform="translate(286.234375, 959.0707740783691)"><path d="M0,13.224211022138483 a70.1875,13.224211022138483 0,0,0 140.375,0 a70.1875,13.224211022138483 0,0,0 -140.375,0 l0,52.22421102213848 a70.1875,13.224211022138483 0,0,0 140.375,0 l0,-52.22421102213848" class="basic label-container" style="" label-offset-y="13.224211022138483" transform="translate(-70.1875, -39.33631653320772)"/><g class="label" style="" transform="translate(-62.6875, -2)"><rect/><foreignObject width="125.375" height="24"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>router-commands</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-Dash-15" transform="translate(675.5625, 505.2179832458496)"><path d="M0,15.738168009632306 a106.203125,15.738168009632306 0,0,0 212.40625,0 a106.203125,15.738168009632306 0,0,0 -212.40625,0 l0,78.7381680096323 a106.203125,15.738168009632306 0,0,0 212.40625,0 l0,-78.7381680096323" class="basic label-container" style="" label-offset-y="15.738168009632306" transform="translate(-106.203125, -55.107252014448456)"/><g class="label" style="" transform="translate(-98.703125, -14)"><rect/><foreignObject width="197.40625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Login / Overview / Routers<br />Events / Commands / Alerts</p></span></div></foreignObject></g></g><g class="node default " id="flowchart-AnyClient-16" transform="translate(125.1953125, 1151.2092590332031)"><path d="M0,14.201447006101183 a82.1953125,14.201447006101183 0,0,0 164.390625,0 a82.1953125,14.201447006101183 0,0,0 -164.390625,0 l0,77.20144700610118 a82.1953125,14.201447006101183 0,0,0 164.390625,0 l0,-77.20144700610118" class="basic label-container" style="" label-offset-y="14.201447006101183" transform="translate(-82.1953125, -52.80217050915177)"/><g class="label" style="" transform="translate(-74.6953125, -14)"><rect/><foreignObject width="149.390625" height="48"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel "><p>Any Kafka client<br />(LuIS, analytics, etc.)</p></span></div></foreignObject></g></g></g></g></g></svg>