Replaced go-code-visualizer with go-callvis

Signed-off-by: Russ Magee <rmagee@gmail.com>
This commit is contained in:
Russ Magee 2018-11-21 17:06:09 -08:00
parent b63252dbf6
commit c6cbd8d681
10 changed files with 2167 additions and 6 deletions

View File

@ -50,11 +50,13 @@ passwd: common
$(MAKE) -C hkexpasswd
vis:
@which go-code-visualizer >/dev/null 2>&1; \
@which go-callvis >/dev/null 2>&1; \
stat=$$?; if [ $$stat -ne "0" ]; then \
/bin/echo "go-code-visualizer not found. Run go get github.com/CodeHipster/go-code-visualizer to install."; \
/bin/echo "go-callvis not found. Run go get github.com/Russtopia/go-callvis to install."; \
else \
go-code-visualizer . && dot -Tpng dot-visual.gv -o viz_hkexsh_dot.png; \
make -C hkexsh vis;\
make -C hkexshd vis;\
make -C hkexpasswd vis; \
fi
install:

View File

@ -1,5 +1,6 @@
.PHONY: clean all
.PHONY: clean all vis
EXTPKGS = bytes,errors,flag,fmt,internal,io,log,net,os,path,runtime,time,strings,sync,syscall,binary,encoding
EXE = $(notdir $(shell pwd))
all:
@ -8,3 +9,6 @@ all:
clean:
$(RM) $(EXE) $(EXE).exe
vis:
go-callvis -skipbrowser -svg -output hkexpasswd-vis -ignore $(EXTPKGS) -group pkg,type .

63
hkexpasswd/hkexpasswd-vis.gv Executable file
View File

@ -0,0 +1,63 @@
digraph gocallvis {
label="blitter.com/go/hkexsh/hkexpasswd";
labeljust="l";
fontname="Arial";
fontsize="14";
rankdir="LR";
bgcolor="lightgray";
style="solid";
penwidth="0.5";
pad="0.0";
nodesep="0.35";
node [shape="ellipse" style="filled" fillcolor="honeydew" fontname="Verdana" penwidth="1.0" margin="0.05,0.0"];
edge [minlen="2"]
subgraph "cluster_focus" {
bgcolor="#e6ecfa";
label="main";
labelloc="t";
labeljust="c";
fontsize="18";
"blitter.com/go/hkexsh/hkexpasswd.main" [ penwidth="0.5" fillcolor="lightblue" label="main" ]
subgraph "cluster_blitter.com/go/hkexsh" {
fontname="bold";
rank="sink";
label="[hkexsh]";
URL="/?f=blitter.com/go/hkexsh";
style="filled";
fontsize="16";
fillcolor="lightyellow";
tooltip="package: blitter.com/go/hkexsh";
penwidth="0.8";
"blitter.com/go/hkexsh.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ]
}
subgraph "cluster_github.com/jameskeane/bcrypt" {
label="[bcrypt]";
fontsize="16";
fillcolor="lightyellow";
fontname="bold";
rank="sink";
penwidth="0.8";
style="filled";
URL="/?f=github.com/jameskeane/bcrypt";
tooltip="package: github.com/jameskeane/bcrypt";
"github.com/jameskeane/bcrypt.Salt" [ fillcolor="moccasin" label="Salt" penwidth="1.5" ]
"github.com/jameskeane/bcrypt.Hash" [ fillcolor="moccasin" label="Hash" penwidth="1.5" ]
"github.com/jameskeane/bcrypt.Match" [ fillcolor="moccasin" label="Match" penwidth="1.5" ]
}
}
"blitter.com/go/hkexsh/hkexpasswd.main" -> "blitter.com/go/hkexsh.ReadPassword" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexpasswd.main" -> "github.com/jameskeane/bcrypt.Salt" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexpasswd.main" -> "github.com/jameskeane/bcrypt.Hash" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexpasswd.main" -> "github.com/jameskeane/bcrypt.Match" [ color="saddlebrown" ]
}

View File

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="290pt" height="369pt"
viewBox="0.00 0.00 290.20 369.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 369)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-369 290.2043,-369 290.2043,0 0,0"/>
<text text-anchor="middle" x="119.5" y="-7.8" font-family="Arial" font-size="14.00" fill="#000000">blitter.com/go/hkexsh/hkexpasswd</text>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-31 8,-361 282.2043,-361 282.2043,-31 8,-31"/>
<text text-anchor="middle" x="145.1021" y="-342.6" font-family="Arial" font-size="18.00" fill="#000000">main</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_blitter.com/go/hkexsh</title>
<g id="a_clust2"><a xlink:href="/?f=blitter.com/go/hkexsh" xlink:title="package: blitter.com/go/hkexsh">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-39 135,-117 274.2043,-117 274.2043,-39 135,-39"/>
<text text-anchor="middle" x="204.6021" y="-100.2" font-family="bold" font-size="16.00" fill="#000000">[hkexsh]</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/jameskeane/bcrypt</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/jameskeane/bcrypt" xlink:title="package: github.com/jameskeane/bcrypt">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="160.5512,-125 160.5512,-325 248.6531,-325 248.6531,-125 160.5512,-125"/>
<text text-anchor="middle" x="204.6021" y="-308.2" font-family="bold" font-size="16.00" fill="#000000">[bcrypt]</text>
</a>
</g>
</g>
<!-- blitter.com/go/hkexsh/hkexpasswd.main -->
<g id="node1" class="node">
<title>blitter.com/go/hkexsh/hkexpasswd.main</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="43" cy="-181" rx="27" ry="18"/>
<text text-anchor="middle" x="43" y="-177.3" font-family="Verdana" font-size="14.00" fill="#000000">main</text>
</g>
<!-- blitter.com/go/hkexsh.ReadPassword -->
<g id="node2" class="node">
<title>blitter.com/go/hkexsh.ReadPassword</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="204.6021" cy="-65" rx="61.7044" ry="18"/>
<text text-anchor="middle" x="204.6021" y="-61.3" font-family="Verdana" font-size="14.00" fill="#000000">ReadPassword</text>
</g>
<!-- blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;blitter.com/go/hkexsh.ReadPassword -->
<g id="edge1" class="edge">
<title>blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;blitter.com/go/hkexsh.ReadPassword</title>
<path fill="none" stroke="#8b4513" d="M61.5378,-167.6933C88.7072,-148.1908 139.7077,-111.582 172.9013,-87.7553"/>
<polygon fill="#8b4513" stroke="#8b4513" points="175.2609,-90.3699 181.3437,-81.6952 171.1789,-84.6833 175.2609,-90.3699"/>
</g>
<!-- github.com/jameskeane/bcrypt.Salt -->
<g id="node3" class="node">
<title>github.com/jameskeane/bcrypt.Salt</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="204.6021" cy="-151" rx="27" ry="18"/>
<text text-anchor="middle" x="204.6021" y="-147.3" font-family="Verdana" font-size="14.00" fill="#000000">Salt</text>
</g>
<!-- blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;github.com/jameskeane/bcrypt.Salt -->
<g id="edge2" class="edge">
<title>blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;github.com/jameskeane/bcrypt.Salt</title>
<path fill="none" stroke="#8b4513" d="M69.3238,-176.1132C96.2853,-171.1081 138.3942,-163.2909 168.4668,-157.7082"/>
<polygon fill="#8b4513" stroke="#8b4513" points="169.3642,-161.1015 178.5573,-155.835 168.0865,-154.2191 169.3642,-161.1015"/>
</g>
<!-- github.com/jameskeane/bcrypt.Hash -->
<g id="node4" class="node">
<title>github.com/jameskeane/bcrypt.Hash</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="204.6021" cy="-212" rx="27" ry="18"/>
<text text-anchor="middle" x="204.6021" y="-208.3" font-family="Verdana" font-size="14.00" fill="#000000">Hash</text>
</g>
<!-- blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;github.com/jameskeane/bcrypt.Hash -->
<g id="edge3" class="edge">
<title>blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;github.com/jameskeane/bcrypt.Hash</title>
<path fill="none" stroke="#8b4513" d="M68.9642,-185.9807C95.8605,-191.1402 138.1056,-199.244 168.3013,-205.0364"/>
<polygon fill="#8b4513" stroke="#8b4513" points="167.9541,-208.5336 178.4345,-206.9803 169.2729,-201.6589 167.9541,-208.5336"/>
</g>
<!-- github.com/jameskeane/bcrypt.Match -->
<g id="node5" class="node">
<title>github.com/jameskeane/bcrypt.Match</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="204.6021" cy="-273" rx="28.102" ry="18"/>
<text text-anchor="middle" x="204.6021" y="-269.3" font-family="Verdana" font-size="14.00" fill="#000000">Match</text>
</g>
<!-- blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;github.com/jameskeane/bcrypt.Match -->
<g id="edge4" class="edge">
<title>blitter.com/go/hkexsh/hkexpasswd.main&#45;&gt;github.com/jameskeane/bcrypt.Match</title>
<path fill="none" stroke="#8b4513" d="M61.0401,-194.6349C79.1435,-207.9571 108.1242,-228.3184 135,-243 146.3672,-249.2097 159.2837,-255.0795 170.8773,-259.9528"/>
<polygon fill="#8b4513" stroke="#8b4513" points="169.6617,-263.2372 180.2417,-263.7975 172.3204,-256.7617 169.6617,-263.2372"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -1,5 +1,6 @@
.PHONY: clean all
.PHONY: clean all vis
EXTPKGS = bytes,errors,flag,fmt,internal,io,log,net,os,path,runtime,time,strings,sync,syscall,binary,encoding
EXE = $(notdir $(shell pwd))
all:
@ -8,3 +9,7 @@ all:
clean:
$(RM) $(EXE) $(EXE).exe
vis:
go-callvis -skipbrowser -svg -output hkexsh-vis -ignore $(EXTPKGS) -group pkg,type .

247
hkexsh/hkexsh-vis.gv Executable file
View File

@ -0,0 +1,247 @@
digraph gocallvis {
label="blitter.com/go/hkexsh/hkexsh";
labeljust="l";
fontname="Arial";
fontsize="14";
rankdir="LR";
bgcolor="lightgray";
style="solid";
penwidth="0.5";
pad="0.0";
nodesep="0.35";
node [shape="ellipse" style="filled" fillcolor="honeydew" fontname="Verdana" penwidth="1.0" margin="0.05,0.0"];
edge [minlen="2"]
subgraph "cluster_focus" {
bgcolor="#e6ecfa";
label="main";
labelloc="t";
labeljust="c";
fontsize="18";
"blitter.com/go/hkexsh/hkexsh.reqTunnel" [ fillcolor="lightblue" label="reqTunnel" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexsh.launchTuns" [ penwidth="0.5" fillcolor="lightblue" label="launchTuns" ]
"blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ fillcolor="lightblue" label="rejectUserMsg" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexsh.main" [ penwidth="0.5" fillcolor="lightblue" label="main" ]
"blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [ label="parseNonSwitchArgs" penwidth="0.5" fillcolor="lightblue" ]
"blitter.com/go/hkexsh/hkexsh.main$1" [ label="main$1" style="dotted,filled" fillcolor="lightblue" ]
"blitter.com/go/hkexsh/hkexsh.main$2" [ fillcolor="lightblue" label="main$2" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ label="doShellMode$1" style="dotted,filled" fillcolor="lightblue" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode" [ fillcolor="lightblue" label="doShellMode" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ fillcolor="lightblue" label="handleTermResizes$1" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexsh.GetSize" [ fillcolor="lightblue" label="GetSize" penwidth="1.5" ]
"blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ fillcolor="lightblue" label="handleTermResizes" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ label="doShellMode$2" style="dotted,filled" fillcolor="lightblue" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ style="dotted,filled" fillcolor="lightblue" label="doShellMode$2$1" ]
"blitter.com/go/hkexsh/hkexsh.doCopyMode" [ fillcolor="lightblue" label="doCopyMode" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexsh.UsageShell" [ fillcolor="lightblue" label="UsageShell" penwidth="1.5" ]
"blitter.com/go/hkexsh/hkexsh.UsageCp" [ label="UsageCp" penwidth="1.5" fillcolor="lightblue" ]
subgraph "cluster_blitter.com/go/hkexsh" {
fontsize="16";
rank="sink";
label="[hkexsh]";
URL="/?f=blitter.com/go/hkexsh";
penwidth="0.8";
style="filled";
fillcolor="lightyellow";
fontname="bold";
tooltip="package: blitter.com/go/hkexsh";
"blitter.com/go/hkexsh.MakeRaw" [ fillcolor="moccasin" label="MakeRaw" penwidth="1.5" ]
"blitter.com/go/hkexsh.Restore" [ fillcolor="moccasin" label="Restore" penwidth="1.5" ]
"blitter.com/go/hkexsh.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ]
"blitter.com/go/hkexsh.NewSession" [ fillcolor="moccasin" label="NewSession" penwidth="1.5" ]
subgraph "cluster_*blitter.com/go/hkexsh.Session" {
fontsize="15";
fontcolor="#222222";
labelloc="b";
style="rounded,filled";
fillcolor="wheat2";
label="(*Session)";
tooltip="type: *blitter.com/go/hkexsh.Session";
penwidth="0.5";
"(*blitter.com/go/hkexsh.Session).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
}
subgraph "cluster_blitter.com/go/hkexsh.Session" {
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
labelloc="b";
style="rounded,filled";
fillcolor="wheat2";
label="(Session)";
tooltip="type: blitter.com/go/hkexsh.Session";
"(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).Status" [ fillcolor="moccasin" label="Status" penwidth="1.5" ]
}
}
subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
style="filled";
fillcolor="lightyellow";
fontname="bold";
label="[hkexnet]";
URL="/?f=blitter.com/go/hkexsh/hkexnet";
tooltip="package: blitter.com/go/hkexsh/hkexnet";
penwidth="0.8";
fontsize="16";
rank="sink";
"blitter.com/go/hkexsh/hkexnet.Init" [ label="Init" penwidth="1.5" fillcolor="moccasin" ]
"blitter.com/go/hkexsh/hkexnet.Dial" [ fillcolor="moccasin" label="Dial" penwidth="1.5" ]
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
labelloc="b";
style="rounded,filled";
fillcolor="wheat2";
label="(*Conn)";
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
"(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ label="Close" penwidth="1.5" fillcolor="moccasin" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ label="SetupChaff" penwidth="1.5" fillcolor="moccasin" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ label="EnableChaff" penwidth="1.5" fillcolor="moccasin" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ penwidth="1.5" fillcolor="moccasin" label="SetStatus" ]
}
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
label="(Conn)";
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
labelloc="b";
style="rounded,filled";
fillcolor="wheat2";
"(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ label="Write" penwidth="1.5" fillcolor="moccasin" ]
"(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ fillcolor="moccasin" label="Read" penwidth="1.5" ]
"(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ penwidth="1.5" fillcolor="moccasin" label="GetStatus" ]
}
}
subgraph "cluster_blitter.com/go/hkexsh/logger" {
fillcolor="lightyellow";
rank="sink";
label="[logger]";
penwidth="0.8";
style="filled";
fontname="bold";
URL="/?f=blitter.com/go/hkexsh/logger";
tooltip="package: blitter.com/go/hkexsh/logger";
fontsize="16";
"blitter.com/go/hkexsh/logger.LogDebug" [ fillcolor="moccasin" label="LogDebug" penwidth="1.5" ]
"blitter.com/go/hkexsh/logger.New" [ penwidth="1.5" fillcolor="moccasin" label="New" ]
}
subgraph "cluster_blitter.com/go/hkexsh/spinsult" {
fontsize="16";
fontname="bold";
rank="sink";
URL="/?f=blitter.com/go/hkexsh/spinsult";
tooltip="package: blitter.com/go/hkexsh/spinsult";
penwidth="0.8";
style="filled";
fillcolor="lightyellow";
label="[spinsult]";
"blitter.com/go/hkexsh/spinsult.GetSentence" [ penwidth="1.5" fillcolor="moccasin" label="GetSentence" ]
}
subgraph "cluster_github.com/mattn/go-isatty" {
label="[isatty]";
URL="/?f=github.com/mattn/go-isatty";
penwidth="0.8";
fillcolor="lightyellow";
fontname="bold";
tooltip="package: github.com/mattn/go-isatty";
fontsize="16";
style="filled";
rank="sink";
"github.com/mattn/go-isatty.IsTerminal" [ fillcolor="moccasin" label="IsTerminal" penwidth="1.5" ]
}
}
"blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "blitter.com/go/hkexsh/logger.LogDebug" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.launchTuns" -> "blitter.com/go/hkexsh/hkexsh.reqTunnel" [ ]
"blitter.com/go/hkexsh/hkexsh.rejectUserMsg" -> "blitter.com/go/hkexsh/spinsult.GetSentence" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [ ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Dial" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.MakeRaw" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$1" [ arrowhead="normalnoneodiamond" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.ReadPassword" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.NewSession" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).Op" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).Who" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).ConnHost" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).TermType" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).Cmd" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).AuthCookie" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh.Session).SetStatus" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$2" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.launchTuns" [ ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(*blitter.com/go/hkexsh.Session).SetStatus" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "blitter.com/go/hkexsh/hkexsh.GetSize" [ ]
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.handleTermResizes" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ ]
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.doShellMode" [ ]
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh.Session).Cmd" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.doCopyMode" [ ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.UsageShell" [ style="dashed" ]
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.UsageCp" [ style="dashed" ]
}

701
hkexsh/hkexsh-vis.gv.svg Normal file
View File

@ -0,0 +1,701 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="962pt" height="1939pt"
viewBox="0.00 0.00 962.12 1939.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1939)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1939 962.1203,-1939 962.1203,0 0,0"/>
<text text-anchor="middle" x="102" y="-7.8" font-family="Arial" font-size="14.00" fill="#000000">blitter.com/go/hkexsh/hkexsh</text>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-31 8,-1931 954.1203,-1931 954.1203,-31 8,-31"/>
<text text-anchor="middle" x="481.0601" y="-1912.6" font-family="Arial" font-size="18.00" fill="#000000">main</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_blitter.com/go/hkexsh</title>
<g id="a_clust2"><a xlink:href="/?f=blitter.com/go/hkexsh" xlink:title="package: blitter.com/go/hkexsh">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="643.4626,-300 643.4626,-1081 782.6669,-1081 782.6669,-300 643.4626,-300"/>
<text text-anchor="middle" x="713.0647" y="-1064.2" font-family="bold" font-size="16.00" fill="#000000">[hkexsh]</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*blitter.com/go/hkexsh.Session</title>
<g id="a_clust3"><a xlink:href="/?f=blitter.com/go/hkexsh" xlink:title="type: *blitter.com/go/hkexsh.Session">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M674.7133,-413C674.7133,-413 751.4162,-413 751.4162,-413 757.4162,-413 763.4162,-419 763.4162,-425 763.4162,-425 763.4162,-478 763.4162,-478 763.4162,-484 757.4162,-490 751.4162,-490 751.4162,-490 674.7133,-490 674.7133,-490 668.7133,-490 662.7133,-484 662.7133,-478 662.7133,-478 662.7133,-425 662.7133,-425 662.7133,-419 668.7133,-413 674.7133,-413"/>
<text text-anchor="middle" x="713.0647" y="-422" font-family="bold" font-size="15.00" fill="#222222">(*Session)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_blitter.com/go/hkexsh.Session</title>
<g id="a_clust4"><a xlink:href="/?f=blitter.com/go/hkexsh" xlink:title="type: blitter.com/go/hkexsh.Session">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M667.563,-551C667.563,-551 758.5664,-551 758.5664,-551 764.5664,-551 770.5664,-557 770.5664,-563 770.5664,-563 770.5664,-982 770.5664,-982 770.5664,-988 764.5664,-994 758.5664,-994 758.5664,-994 667.563,-994 667.563,-994 661.563,-994 655.563,-988 655.563,-982 655.563,-982 655.563,-563 655.563,-563 655.563,-557 661.563,-551 667.563,-551"/>
<text text-anchor="middle" x="713.0647" y="-560" font-family="bold" font-size="15.00" fill="#222222">(Session)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_blitter.com/go/hkexsh/hkexnet</title>
<g id="a_clust5"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="package: blitter.com/go/hkexsh/hkexnet">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="632.7125,-1089 632.7125,-1895 793.417,-1895 793.417,-1089 632.7125,-1089"/>
<text text-anchor="middle" x="713.0647" y="-1878.2" font-family="bold" font-size="16.00" fill="#000000">[hkexnet]</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*blitter.com/go/hkexsh/hkexnet.Conn</title>
<g id="a_clust6"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="type: *blitter.com/go/hkexsh/hkexnet.Conn">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M652.7125,-1418C652.7125,-1418 773.417,-1418 773.417,-1418 779.417,-1418 785.417,-1424 785.417,-1430 785.417,-1430 785.417,-1849 785.417,-1849 785.417,-1855 779.417,-1861 773.417,-1861 773.417,-1861 652.7125,-1861 652.7125,-1861 646.7125,-1861 640.7125,-1855 640.7125,-1849 640.7125,-1849 640.7125,-1430 640.7125,-1430 640.7125,-1424 646.7125,-1418 652.7125,-1418"/>
<text text-anchor="middle" x="713.0647" y="-1427" font-family="bold" font-size="15.00" fill="#222222">(*Conn)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_blitter.com/go/hkexsh/hkexnet.Conn</title>
<g id="a_clust7"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="type: blitter.com/go/hkexsh/hkexnet.Conn">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M673.6132,-1097C673.6132,-1097 752.5162,-1097 752.5162,-1097 758.5162,-1097 764.5162,-1103 764.5162,-1109 764.5162,-1109 764.5162,-1284 764.5162,-1284 764.5162,-1290 758.5162,-1296 752.5162,-1296 752.5162,-1296 673.6132,-1296 673.6132,-1296 667.6132,-1296 661.6132,-1290 661.6132,-1284 661.6132,-1284 661.6132,-1109 661.6132,-1109 661.6132,-1103 667.6132,-1097 673.6132,-1097"/>
<text text-anchor="middle" x="713.0647" y="-1106" font-family="bold" font-size="15.00" fill="#222222">(Conn)</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_blitter.com/go/hkexsh/logger</title>
<g id="a_clust8"><a xlink:href="/?f=blitter.com/go/hkexsh/logger" xlink:title="package: blitter.com/go/hkexsh/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="659.9632,-153 659.9632,-292 766.1663,-292 766.1663,-153 659.9632,-153"/>
<text text-anchor="middle" x="713.0647" y="-275.2" font-family="bold" font-size="16.00" fill="#000000">[logger]</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_blitter.com/go/hkexsh/spinsult</title>
<g id="a_clust9"><a xlink:href="/?f=blitter.com/go/hkexsh/spinsult" xlink:title="package: blitter.com/go/hkexsh/spinsult">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="404.9068,-127 404.9068,-205 532.0107,-205 532.0107,-127 404.9068,-127"/>
<text text-anchor="middle" x="468.4588" y="-188.2" font-family="bold" font-size="16.00" fill="#000000">[spinsult]</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/mattn/go&#45;isatty</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/mattn/go-isatty" xlink:title="package: github.com/mattn/go&#45;isatty">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="175.7014,-1575 175.7014,-1653 281.9045,-1653 281.9045,-1575 175.7014,-1575"/>
<text text-anchor="middle" x="228.803" y="-1636.2" font-family="bold" font-size="16.00" fill="#000000">[isatty]</text>
</a>
</g>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.reqTunnel -->
<g id="node1" class="node">
<title>blitter.com/go/hkexsh/hkexsh.reqTunnel</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="468.4588" cy="-860" rx="43.4031" ry="18"/>
<text text-anchor="middle" x="468.4588" y="-856.3" font-family="Verdana" font-size="14.00" fill="#000000">reqTunnel</text>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket -->
<g id="node32" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1469" rx="50.7037" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1465.3" font-family="Verdana" font-size="14.00" fill="#000000">WritePacket</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.reqTunnel&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket -->
<g id="edge2" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.reqTunnel&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket</title>
<path fill="none" stroke="#8b4513" d="M473.0524,-878.0352C498.0658,-976.1767 616.9314,-1441.7185 622.3116,-1447 630.6333,-1455.1691 641.4433,-1460.4845 652.6864,-1463.9047"/>
<polygon fill="#8b4513" stroke="#8b4513" points="652.0711,-1467.36 662.6265,-1466.4467 653.8054,-1460.5782 652.0711,-1467.36"/>
</g>
<!-- blitter.com/go/hkexsh/logger.LogDebug -->
<g id="node42" class="node">
<title>blitter.com/go/hkexsh/logger.LogDebug</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-240" rx="45.2034" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-236.3" font-family="Verdana" font-size="14.00" fill="#000000">LogDebug</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.reqTunnel&#45;&gt;blitter.com/go/hkexsh/logger.LogDebug -->
<g id="edge1" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.reqTunnel&#45;&gt;blitter.com/go/hkexsh/logger.LogDebug</title>
<path fill="none" stroke="#8b4513" d="M472.52,-841.9306C493.2141,-750.3562 587.3129,-340.0644 622.3116,-294 634.5712,-277.8642 653.1624,-265.5955 670.3323,-256.8625"/>
<polygon fill="#8b4513" stroke="#8b4513" points="672.1784,-259.8586 679.6757,-252.3725 669.1464,-253.5493 672.1784,-259.8586"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.launchTuns -->
<g id="node2" class="node">
<title>blitter.com/go/hkexsh/hkexsh.launchTuns</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="228.803" cy="-860" rx="48.3036" ry="18"/>
<text text-anchor="middle" x="228.803" y="-856.3" font-family="Verdana" font-size="14.00" fill="#000000">launchTuns</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.launchTuns&#45;&gt;blitter.com/go/hkexsh/hkexsh.reqTunnel -->
<g id="edge3" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.launchTuns&#45;&gt;blitter.com/go/hkexsh/hkexsh.reqTunnel</title>
<path fill="none" stroke="#000000" d="M277.3009,-860C317.1448,-860 373.5316,-860 414.738,-860"/>
<polygon fill="#000000" stroke="#000000" points="414.8679,-863.5001 424.8678,-860 414.8678,-856.5001 414.8679,-863.5001"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.rejectUserMsg -->
<g id="node3" class="node">
<title>blitter.com/go/hkexsh/hkexsh.rejectUserMsg</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="228.803" cy="-165" rx="61.1043" ry="18"/>
<text text-anchor="middle" x="228.803" y="-161.3" font-family="Verdana" font-size="14.00" fill="#000000">rejectUserMsg</text>
</g>
<!-- blitter.com/go/hkexsh/spinsult.GetSentence -->
<g id="node44" class="node">
<title>blitter.com/go/hkexsh/spinsult.GetSentence</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="468.4588" cy="-153" rx="55.6039" ry="18"/>
<text text-anchor="middle" x="468.4588" y="-149.3" font-family="Verdana" font-size="14.00" fill="#000000">GetSentence</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.rejectUserMsg&#45;&gt;blitter.com/go/hkexsh/spinsult.GetSentence -->
<g id="edge4" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.rejectUserMsg&#45;&gt;blitter.com/go/hkexsh/spinsult.GetSentence</title>
<path fill="none" stroke="#8b4513" d="M289.2783,-161.9719C323.9849,-160.2341 367.5788,-158.0512 403.0767,-156.2738"/>
<polygon fill="#8b4513" stroke="#8b4513" points="403.5235,-159.7559 413.3359,-155.7601 403.1733,-152.7647 403.5235,-159.7559"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main -->
<g id="node4" class="node">
<title>blitter.com/go/hkexsh/hkexsh.main</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="43" cy="-944" rx="27" ry="18"/>
<text text-anchor="middle" x="43" y="-940.3" font-family="Verdana" font-size="14.00" fill="#000000">main</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.launchTuns -->
<g id="edge32" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.launchTuns</title>
<path fill="none" stroke="#000000" d="M59.0583,-929.5279C71.2049,-919.2274 88.696,-905.7203 106,-897 128.1711,-885.8269 154.325,-877.3677 176.7863,-871.3779"/>
<polygon fill="#000000" stroke="#000000" points="177.6786,-874.7624 186.4905,-868.8801 175.9337,-867.9833 177.6786,-874.7624"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.rejectUserMsg -->
<g id="edge24" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.rejectUserMsg</title>
<path fill="none" stroke="#000000" d="M43.3787,-925.959C45.7858,-818.497 60.3393,-265.4382 106,-207 119.4734,-189.7563 140.3981,-179.5514 161.1813,-173.5264"/>
<polygon fill="#000000" stroke="#000000" points="162.2189,-176.873 171.0149,-170.967 160.4557,-170.0987 162.2189,-176.873"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs -->
<g id="node5" class="node">
<title>blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="228.803" cy="-393" rx="85.6064" ry="18"/>
<text text-anchor="middle" x="228.803" y="-389.3" font-family="Verdana" font-size="14.00" fill="#000000">parseNonSwitchArgs</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs -->
<g id="edge5" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs</title>
<path fill="none" stroke="#000000" d="M44.5018,-925.8126C50.8107,-851.2506 76.2241,-568.9576 106,-485 116.5987,-455.1152 118.4671,-444.089 143,-424 149.2038,-418.9199 156.3095,-414.6368 163.7176,-411.034"/>
<polygon fill="#000000" stroke="#000000" points="165.4924,-414.0759 173.2179,-406.8256 162.6573,-407.6757 165.4924,-414.0759"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main$1 -->
<g id="node6" class="node">
<title>blitter.com/go/hkexsh/hkexsh.main$1</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="228.803" cy="-718" rx="34.8031" ry="18"/>
<text text-anchor="middle" x="228.803" y="-714.3" font-family="Verdana" font-size="14.00" fill="#000000">main$1</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.main$1 -->
<g id="edge13" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.main$1</title>
<path fill="none" stroke="#000000" d="M46.8131,-925.8836C56.081,-883.4567 80.8796,-779.3997 106,-755 122.5289,-738.9453 145.7615,-729.8244 167.577,-724.6548"/>
<polygon fill="#000000" stroke="#000000" points="185.0575,-725.1243 194.2971,-719.9397 183.841,-718.2308 185.0575,-725.1243"/>
<polyline fill="none" stroke="#000000" points="184.4492,-721.6775 179.5253,-722.5464 "/>
<polygon fill="none" stroke="#000000" points="167.7079,-724.6318 172.9215,-719.65 179.5253,-722.5464 174.3117,-727.5283 167.7079,-724.6318"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main$2 -->
<g id="node7" class="node">
<title>blitter.com/go/hkexsh/hkexsh.main$2</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="228.803" cy="-1395" rx="34.8031" ry="18"/>
<text text-anchor="middle" x="228.803" y="-1391.3" font-family="Verdana" font-size="14.00" fill="#000000">main$2</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.main$2 -->
<g id="edge31" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.main$2</title>
<path fill="none" stroke="#000000" d="M43.2683,-962.1827C44.6936,-1034.0671 53.4746,-1297.454 106,-1358 122.2754,-1376.7606 147.6812,-1386.1971 171.1713,-1390.873"/>
<polygon fill="#000000" stroke="#000000" points="183.6551,-1396.2096 194.0523,-1394.1728 184.6543,-1389.2812 183.6551,-1396.2096"/>
<polyline fill="none" stroke="#000000" points="184.1547,-1392.7454 179.2059,-1392.0317 "/>
<ellipse fill="none" stroke="#000000" cx="175.2469" cy="-1391.4607" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode -->
<g id="node9" class="node">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="228.803" cy="-454" rx="55.0038" ry="18"/>
<text text-anchor="middle" x="228.803" y="-450.3" font-family="Verdana" font-size="14.00" fill="#000000">doShellMode</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode -->
<g id="edge44" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode</title>
<path fill="none" stroke="#000000" d="M44.3721,-925.8501C50.5943,-845.5544 77.1099,-524.7363 106,-491 120.6948,-473.8402 143.0313,-464.4704 164.644,-459.4112"/>
<polygon fill="#000000" stroke="#000000" points="165.4075,-462.8275 174.4932,-457.3776 163.992,-455.9721 165.4075,-462.8275"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doCopyMode -->
<g id="node15" class="node">
<title>blitter.com/go/hkexsh/hkexsh.doCopyMode</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="468.4588" cy="-1208" rx="56.2041" ry="18"/>
<text text-anchor="middle" x="468.4588" y="-1204.3" font-family="Verdana" font-size="14.00" fill="#000000">doCopyMode</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.doCopyMode -->
<g id="edge51" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.doCopyMode</title>
<path fill="none" stroke="#000000" d="M46.9733,-961.9729C56.3941,-1003.0014 81.1638,-1101.7322 106,-1124 188.2747,-1197.7664 322.4448,-1210.4552 402.4139,-1210.7555"/>
<polygon fill="#000000" stroke="#000000" points="402.858,-1214.2543 412.8479,-1210.7254 402.8378,-1207.2543 402.858,-1214.2543"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.UsageShell -->
<g id="node16" class="node">
<title>blitter.com/go/hkexsh/hkexsh.UsageShell</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width="1.5" cx="228.803" cy="-596" rx="48.3036" ry="18"/>
<text text-anchor="middle" x="228.803" y="-592.3" font-family="Verdana" font-size="14.00" fill="#000000">UsageShell</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.UsageShell -->
<g id="edge53" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.UsageShell</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M46.3747,-925.9688C58.0552,-865.3721 98.4921,-670.4219 143,-627 152.0352,-618.1853 163.7604,-611.8544 175.6251,-607.3152"/>
<polygon fill="#000000" stroke="#000000" points="176.8056,-610.6105 185.1215,-604.0458 174.5268,-603.9918 176.8056,-610.6105"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.UsageCp -->
<g id="node17" class="node">
<title>blitter.com/go/hkexsh/hkexsh.UsageCp</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width="1.5" cx="228.803" cy="-657" rx="39.703" ry="18"/>
<text text-anchor="middle" x="228.803" y="-653.3" font-family="Verdana" font-size="14.00" fill="#000000">UsageCp</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.UsageCp -->
<g id="edge54" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexsh.UsageCp</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M44.2198,-925.9893C48.452,-878.7121 66.7662,-750.4247 143,-688 154.3402,-678.714 168.6936,-672.0907 182.3999,-667.4185"/>
<polygon fill="#000000" stroke="#000000" points="183.7132,-670.6751 192.2136,-664.351 181.6248,-663.9938 183.7132,-670.6751"/>
</g>
<!-- blitter.com/go/hkexsh.MakeRaw -->
<g id="node18" class="node">
<title>blitter.com/go/hkexsh.MakeRaw</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-387" rx="42.2035" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-383.3" font-family="Verdana" font-size="14.00" fill="#000000">MakeRaw</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.MakeRaw -->
<g id="edge11" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.MakeRaw</title>
<path fill="none" stroke="#8b4513" d="M49.1972,-926.3312C61.5137,-894.0744 92.338,-826.0263 143,-794 208.1486,-752.8159 247.1193,-806.2292 314.606,-769 360.6807,-743.5827 577.4703,-436.5352 622.3116,-409 634.0913,-401.7665 648.0918,-396.911 661.5269,-393.6518"/>
<polygon fill="#8b4513" stroke="#8b4513" points="662.6135,-396.9976 671.6445,-391.4577 661.1299,-390.1566 662.6135,-396.9976"/>
</g>
<!-- blitter.com/go/hkexsh.Restore -->
<g id="node19" class="node">
<title>blitter.com/go/hkexsh.Restore</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-326" rx="34.8031" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-322.3" font-family="Verdana" font-size="14.00" fill="#000000">Restore</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.Restore -->
<g id="edge52" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.Restore</title>
<path fill="none" stroke="#8b4513" d="M46.8735,-926.0437C56.0411,-888.5339 82.9602,-802.4145 143,-767 176.0265,-747.5193 285.9611,-774.4896 314.606,-749 425.2022,-650.586 286.2136,-531.8723 387.606,-424 438.8649,-369.4652 477.6448,-398.573 549.3116,-377 591.8174,-364.205 640.3491,-349.0171 673.4741,-338.5622"/>
<polygon fill="#8b4513" stroke="#8b4513" points="674.7554,-341.828 683.236,-335.4774 672.6461,-335.1533 674.7554,-341.828"/>
</g>
<!-- blitter.com/go/hkexsh.ReadPassword -->
<g id="node20" class="node">
<title>blitter.com/go/hkexsh.ReadPassword</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-525" rx="61.7044" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-521.3" font-family="Verdana" font-size="14.00" fill="#000000">ReadPassword</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.ReadPassword -->
<g id="edge14" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.ReadPassword</title>
<path fill="none" stroke="#8b4513" d="M52.4076,-927.0471C67.7045,-901.276 100.5753,-852.8327 143,-830 318.1311,-735.7455 444.0006,-907.933 586.3116,-769 657.8346,-699.1747 554.4076,-620.3496 622.3116,-547 628.1694,-540.6724 635.5106,-536.0244 643.4659,-532.6313"/>
<polygon fill="#8b4513" stroke="#8b4513" points="644.8036,-535.8699 653.0347,-529.1991 642.4402,-529.2809 644.8036,-535.8699"/>
</g>
<!-- blitter.com/go/hkexsh.NewSession -->
<g id="node21" class="node">
<title>blitter.com/go/hkexsh.NewSession</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1029" rx="52.0048" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1025.3" font-family="Verdana" font-size="14.00" fill="#000000">NewSession</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.NewSession -->
<g id="edge15" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh.NewSession</title>
<path fill="none" stroke="#8b4513" d="M57.9696,-959.4715C70.1028,-971.3892 88.073,-987.6874 106,-999 154.5442,-1029.6331 171.4015,-1039 228.803,-1039 228.803,-1039 228.803,-1039 468.4588,-1039 530.7554,-1039 601.9022,-1035.7218 651.3426,-1032.9193"/>
<polygon fill="#8b4513" stroke="#8b4513" points="651.7706,-1036.4005 661.5522,-1032.3299 651.367,-1029.4122 651.7706,-1036.4005"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).SetStatus -->
<g id="node22" class="node">
<title>(*blitter.com/go/hkexsh.Session).SetStatus</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-464" rx="42.2035" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-460.3" font-family="Verdana" font-size="14.00" fill="#000000">SetStatus</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh.Session).SetStatus -->
<g id="edge25" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh.Session).SetStatus</title>
<path fill="none" stroke="#8b4513" d="M66.9923,-935.419C102.056,-923.6657 169.5743,-904 228.803,-904 228.803,-904 228.803,-904 351.106,-904 395.2463,-904 514.7385,-918.4422 549.3116,-891 620.9404,-834.1451 561.3433,-554.1618 622.3116,-486 632.1471,-475.004 646.4576,-469.0455 660.8188,-465.9328"/>
<polygon fill="#8b4513" stroke="#8b4513" points="661.4657,-469.3728 670.7149,-464.2054 660.262,-462.4771 661.4657,-469.3728"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).Op -->
<g id="node23" class="node">
<title>(blitter.com/go/hkexsh.Session).Op</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-785" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-781.3" font-family="Verdana" font-size="14.00" fill="#000000">Op</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Op -->
<g id="edge16" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Op</title>
<path fill="none" stroke="#8b4513" d="M69.7215,-947.2824C105.7758,-951.4204 172.0307,-958 228.803,-958 228.803,-958 228.803,-958 351.106,-958 439.6447,-958 473.1591,-983.1653 549.3116,-938 603.6596,-905.7667 574.2497,-857.0213 622.3116,-816 637.6271,-802.928 658.7258,-795.2884 676.7256,-790.8658"/>
<polygon fill="#8b4513" stroke="#8b4513" points="677.6182,-794.253 686.6235,-788.6713 676.103,-787.419 677.6182,-794.253"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).Who -->
<g id="node24" class="node">
<title>(blitter.com/go/hkexsh.Session).Who</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-907" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-903.3" font-family="Verdana" font-size="14.00" fill="#000000">Who</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Who -->
<g id="edge17" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Who</title>
<path fill="none" stroke="#8b4513" d="M66.6825,-952.695C101.6403,-964.7302 169.3427,-985 228.803,-985 228.803,-985 228.803,-985 468.4588,-985 539.9573,-985 554.9469,-961.959 622.3116,-938 641.0636,-931.3306 662.0911,-924.1305 679.1803,-918.3494"/>
<polygon fill="#8b4513" stroke="#8b4513" points="680.3836,-921.6374 688.7401,-915.1244 678.146,-915.0046 680.3836,-921.6374"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).ConnHost -->
<g id="node25" class="node">
<title>(blitter.com/go/hkexsh.Session).ConnHost</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-968" rx="42.8032" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-964.3" font-family="Verdana" font-size="14.00" fill="#000000">ConnHost</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).ConnHost -->
<g id="edge18" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).ConnHost</title>
<path fill="none" stroke="#8b4513" d="M58.1801,-959.0303C70.1511,-969.9659 87.8111,-984.1753 106,-992 156.7972,-1013.8526 173.5048,-1012 228.803,-1012 228.803,-1012 228.803,-1012 468.4588,-1012 505.882,-1012 604.8973,-991.7979 664.8531,-978.7715"/>
<polygon fill="#8b4513" stroke="#8b4513" points="665.8245,-982.1419 674.847,-976.5881 664.3303,-975.3033 665.8245,-982.1419"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).TermType -->
<g id="node26" class="node">
<title>(blitter.com/go/hkexsh.Session).TermType</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-602" rx="42.8032" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-598.3" font-family="Verdana" font-size="14.00" fill="#000000">TermType</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).TermType -->
<g id="edge19" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).TermType</title>
<path fill="none" stroke="#8b4513" d="M44.067,-925.7254C47.6656,-871.631 61.7238,-708.1537 106,-581 117.3143,-548.5071 115.0529,-533.069 143,-513 174.4451,-490.419 190.09,-498 228.803,-498 228.803,-498 228.803,-498 468.4588,-498 505.4764,-498 516.3632,-501.1265 549.3116,-518 587.1992,-537.403 584.3787,-560.6855 622.3116,-580 634.63,-586.2723 648.8103,-590.8069 662.2458,-594.0656"/>
<polygon fill="#8b4513" stroke="#8b4513" points="661.8093,-597.5542 672.3315,-596.3165 663.334,-590.7223 661.8093,-597.5542"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).Cmd -->
<g id="node27" class="node">
<title>(blitter.com/go/hkexsh.Session).Cmd</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-846" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-842.3" font-family="Verdana" font-size="14.00" fill="#000000">Cmd</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Cmd -->
<g id="edge20" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Cmd</title>
<path fill="none" stroke="#8b4513" d="M44.8696,-925.8453C52.4194,-856.551 83.1615,-610.3822 143,-566 204.2587,-520.5645 242.7319,-540.4827 314.606,-566 480.6571,-624.9529 467.7422,-731.4024 622.3116,-816 639.5908,-825.4571 660.358,-832.5941 677.6635,-837.5293"/>
<polygon fill="#8b4513" stroke="#8b4513" points="676.8318,-840.9302 687.4001,-840.1815 678.6716,-834.1762 676.8318,-840.9302"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).AuthCookie -->
<g id="node28" class="node">
<title>(blitter.com/go/hkexsh.Session).AuthCookie</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-663" rx="49.5034" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-659.3" font-family="Verdana" font-size="14.00" fill="#000000">AuthCookie</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).AuthCookie -->
<g id="edge21" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).AuthCookie</title>
<path fill="none" stroke="#8b4513" d="M44.3809,-925.6474C50.3568,-851.9423 76.7409,-579.1677 143,-532 174.1702,-509.811 190.5416,-525 228.803,-525 228.803,-525 228.803,-525 468.4588,-525 552.0033,-525 547.6621,-595.488 622.3116,-633 635.0783,-639.4154 649.5233,-644.909 663.0735,-649.3751"/>
<polygon fill="#8b4513" stroke="#8b4513" points="662.1549,-652.7555 672.7452,-652.444 664.2721,-646.0834 662.1549,-652.7555"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).Status -->
<g id="node29" class="node">
<title>(blitter.com/go/hkexsh.Session).Status</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-724" rx="29.9034" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-720.3" font-family="Verdana" font-size="14.00" fill="#000000">Status</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Status -->
<g id="edge45" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh.Session).Status</title>
<path fill="none" stroke="#8b4513" d="M69.728,-940.9521C105.7897,-937.1097 172.0527,-931 228.803,-931 228.803,-931 228.803,-931 351.106,-931 395.3753,-931 511.2353,-933.5827 549.3116,-911 615.1517,-871.9508 567.9097,-808.8534 622.3116,-755 636.0604,-741.3898 656.0249,-733.7481 673.73,-729.4608"/>
<polygon fill="#8b4513" stroke="#8b4513" points="674.7808,-732.8155 683.8294,-727.3044 673.319,-725.9698 674.7808,-732.8155"/>
</g>
<!-- blitter.com/go/hkexsh/hkexnet.Init -->
<g id="node30" class="node">
<title>blitter.com/go/hkexsh/hkexnet.Init</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1331" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1327.3" font-family="Verdana" font-size="14.00" fill="#000000">Init</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Init -->
<g id="edge7" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Init</title>
<path fill="none" stroke="#8b4513" d="M43.9147,-962.0088C47.4701,-1014.2054 64.4229,-1167.6548 143,-1259 174.1992,-1295.2688 180.9614,-1324 228.803,-1324 228.803,-1324 228.803,-1324 468.4588,-1324 541.9224,-1324 627.746,-1327.1939 675.7128,-1329.2669"/>
<polygon fill="#8b4513" stroke="#8b4513" points="675.7805,-1332.7731 685.9247,-1329.7161 676.0882,-1325.7799 675.7805,-1332.7731"/>
</g>
<!-- blitter.com/go/hkexsh/hkexnet.Dial -->
<g id="node31" class="node">
<title>blitter.com/go/hkexsh/hkexnet.Dial</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1392" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1388.3" font-family="Verdana" font-size="14.00" fill="#000000">Dial</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Dial -->
<g id="edge8" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Dial</title>
<path fill="none" stroke="#8b4513" d="M46.0265,-962.0435C57.17,-1026.6537 97.6302,-1245.4159 143,-1298 172.2811,-1331.9372 183.9798,-1351 228.803,-1351 228.803,-1351 228.803,-1351 468.4588,-1351 544.076,-1351 631.0557,-1370.2941 678.2243,-1382.411"/>
<polygon fill="#8b4513" stroke="#8b4513" points="677.384,-1385.8089 687.9441,-1384.9518 679.1544,-1379.0364 677.384,-1385.8089"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).Close -->
<g id="node33" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).Close</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1591" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1587.3" font-family="Verdana" font-size="14.00" fill="#000000">Close</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).Close -->
<g id="edge9" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).Close</title>
<path fill="none" stroke="#8b4513" d="M44.7475,-962.0992C51.6998,-1032.5786 78.3624,-1288.5477 106,-1365 116.7799,-1394.8199 117.6376,-1406.969 143,-1426 174.5792,-1449.6959 189.322,-1449 228.803,-1449 228.803,-1449 228.803,-1449 468.4588,-1449 521.5867,-1449 545.0997,-1435.4716 586.3116,-1469 620.3714,-1496.7097 590.4412,-1530.7976 622.3116,-1561 632.61,-1570.7594 646.1525,-1577.3462 659.6234,-1581.791"/>
<polygon fill="#8b4513" stroke="#8b4513" points="675.5676,-1589.2727 686.1116,-1588.2362 677.2226,-1582.4712 675.5676,-1589.2727"/>
<polyline fill="none" stroke="#8b4513" points="676.3951,-1585.8719 671.5368,-1584.6898 "/>
<polygon fill="none" stroke="#8b4513" points="659.877,-1581.8526 666.6526,-1579.3846 671.5368,-1584.6898 664.7612,-1587.1578 659.877,-1581.8526"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff -->
<g id="node34" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1652" rx="47.7038" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1648.3" font-family="Verdana" font-size="14.00" fill="#000000">SetupChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff -->
<g id="edge26" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff</title>
<path fill="none" stroke="#8b4513" d="M43.5504,-962.0021C45.8152,-1021.7819 56.7895,-1218.5971 106,-1372 116.9899,-1406.2585 116.1071,-1420.1004 143,-1444 173.4228,-1471.0366 188.1026,-1476 228.803,-1476 228.803,-1476 228.803,-1476 468.4588,-1476 521.5867,-1476 546.7326,-1460.5588 586.3116,-1496 629.6996,-1534.8521 581.981,-1579.9828 622.3116,-1622 631.8349,-1631.9216 644.7033,-1638.5634 657.7529,-1643.0091"/>
<polygon fill="#8b4513" stroke="#8b4513" points="657.1309,-1646.4766 667.715,-1645.9987 659.143,-1639.772 657.1309,-1646.4766"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff -->
<g id="node35" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1713" rx="52.0048" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1709.3" font-family="Verdana" font-size="14.00" fill="#000000">EnableChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff -->
<g id="edge27" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff</title>
<path fill="none" stroke="#8b4513" d="M43.9453,-962.2035C47.4393,-1022.6802 61.7987,-1222.0161 106,-1380 117.3213,-1420.4643 113.2166,-1437.3608 143,-1467 172.3134,-1496.1715 187.4478,-1503 228.803,-1503 228.803,-1503 228.803,-1503 468.4588,-1503 521.5867,-1503 547.7584,-1486.4456 586.3116,-1523 639.2047,-1573.1508 573.3562,-1628.9985 622.3116,-1683 630.8422,-1692.4099 642.3842,-1698.8748 654.3744,-1703.3144"/>
<polygon fill="#8b4513" stroke="#8b4513" points="653.4451,-1706.6926 664.0374,-1706.4583 655.6109,-1700.0361 653.4451,-1706.6926"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff -->
<g id="node36" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1774" rx="54.4038" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1770.3" font-family="Verdana" font-size="14.00" fill="#000000">DisableChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff -->
<g id="edge28" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff</title>
<path fill="none" stroke="#8b4513" d="M43.7624,-962.078C47.7392,-1047.7504 68.846,-1412.0562 143,-1492 171.3634,-1522.5779 187.0958,-1530 228.803,-1530 228.803,-1530 228.803,-1530 468.4588,-1530 521.5867,-1530 548.4567,-1512.7229 586.3116,-1550 648.7957,-1611.5305 564.6518,-1677.9272 622.3116,-1744 626.6384,-1748.9582 631.8025,-1753.1001 637.4406,-1756.5598"/>
<polygon fill="#8b4513" stroke="#8b4513" points="651.786,-1766.5446 662.355,-1767.2832 654.5534,-1760.1149 651.786,-1766.5446"/>
<polyline fill="none" stroke="#8b4513" points="653.1697,-1763.3297 648.577,-1761.353 "/>
<polygon fill="none" stroke="#8b4513" points="637.5547,-1756.6088 644.6472,-1755.3068 648.577,-1761.353 641.4845,-1762.655 637.5547,-1756.6088"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff -->
<g id="node37" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1835" rx="64.2048" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1831.3" font-family="Verdana" font-size="14.00" fill="#000000">ShutdownChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff -->
<g id="edge29" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff</title>
<path fill="none" stroke="#8b4513" d="M43.7012,-962.305C46.5295,-1026.9229 59.2977,-1249.9747 106,-1427 117.1371,-1469.2154 112.7584,-1486.5101 143,-1518 172.0152,-1548.2128 186.9139,-1557 228.803,-1557 228.803,-1557 228.803,-1557 468.4588,-1557 598.1686,-1557 520.4327,-1724.7172 622.3116,-1805 626.3795,-1808.2056 630.8045,-1811.0756 635.439,-1813.644"/>
<polygon fill="#8b4513" stroke="#8b4513" points="649.9425,-1823.6816 660.5121,-1824.4116 652.7047,-1817.2496 649.9425,-1823.6816"/>
<polyline fill="none" stroke="#8b4513" points="651.3236,-1820.4656 646.7293,-1818.4926 "/>
<polygon fill="none" stroke="#8b4513" points="635.7031,-1813.7573 642.7946,-1812.4495 646.7293,-1818.4926 639.6378,-1819.8003 635.7031,-1813.7573"/>
</g>
<!-- (blitter.com/go/hkexsh/hkexnet.Conn).Write -->
<g id="node39" class="node">
<title>(blitter.com/go/hkexsh/hkexnet.Conn).Write</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1148" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1144.3" font-family="Verdana" font-size="14.00" fill="#000000">Write</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Write -->
<g id="edge22" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Write</title>
<path fill="none" stroke="#8b4513" d="M51.1041,-961.2204C73.0247,-1004.9787 138.0079,-1117 228.803,-1117 228.803,-1117 228.803,-1117 468.4588,-1117 543.0766,-1117 629.4896,-1131.3734 677.0375,-1140.5458"/>
<polygon fill="#8b4513" stroke="#8b4513" points="676.6497,-1144.0364 687.1368,-1142.5292 677.9987,-1137.1676 676.6497,-1144.0364"/>
</g>
<!-- (blitter.com/go/hkexsh/hkexnet.Conn).Read -->
<g id="node40" class="node">
<title>(blitter.com/go/hkexsh/hkexnet.Conn).Read</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1270" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1266.3" font-family="Verdana" font-size="14.00" fill="#000000">Read</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Read -->
<g id="edge23" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Read</title>
<path fill="none" stroke="#8b4513" d="M44.5338,-961.9915C51.4307,-1030.3338 85.8111,-1270 228.803,-1270 228.803,-1270 228.803,-1270 468.4588,-1270 541.8923,-1270 627.7265,-1270 675.7033,-1270"/>
<polygon fill="#8b4513" stroke="#8b4513" points="675.9174,-1273.5001 685.9174,-1270 675.9174,-1266.5001 675.9174,-1273.5001"/>
</g>
<!-- blitter.com/go/hkexsh/logger.New -->
<g id="node43" class="node">
<title>blitter.com/go/hkexsh/logger.New</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-179" rx="27" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-175.3" font-family="Verdana" font-size="14.00" fill="#000000">New</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/logger.New -->
<g id="edge6" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;blitter.com/go/hkexsh/logger.New</title>
<path fill="none" stroke="#8b4513" d="M43.593,-925.955C47.7611,-813.541 77.1018,-214 228.803,-214 228.803,-214 228.803,-214 468.4588,-214 504.462,-214 513.5737,-213.3628 549.3116,-209 593.7092,-203.58 644.2688,-193.7502 677.3167,-186.8226"/>
<polygon fill="#8b4513" stroke="#8b4513" points="678.3446,-190.1825 687.4013,-184.6846 676.8928,-183.3347 678.3446,-190.1825"/>
</g>
<!-- github.com/mattn/go&#45;isatty.IsTerminal -->
<g id="node45" class="node">
<title>github.com/mattn/go&#45;isatty.IsTerminal</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="228.803" cy="-1601" rx="45.2034" ry="18"/>
<text text-anchor="middle" x="228.803" y="-1597.3" font-family="Verdana" font-size="14.00" fill="#000000">IsTerminal</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main&#45;&gt;github.com/mattn/go&#45;isatty.IsTerminal -->
<g id="edge10" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main&#45;&gt;github.com/mattn/go&#45;isatty.IsTerminal</title>
<path fill="none" stroke="#8b4513" d="M43.7411,-962.2146C47.8416,-1059.4255 68.9192,-1514.5539 106,-1564 121.6748,-1584.9018 148.7784,-1594.4162 173.5415,-1598.5908"/>
<polygon fill="#8b4513" stroke="#8b4513" points="173.2133,-1602.0793 183.6076,-1600.028 174.2027,-1595.1496 173.2133,-1602.0793"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main$1&#45;&gt;blitter.com/go/hkexsh.Restore -->
<g id="edge12" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main$1&#45;&gt;blitter.com/go/hkexsh.Restore</title>
<path fill="none" stroke="#8b4513" d="M263.0291,-714.6025C281.1112,-710.961 302.0924,-703.4521 314.606,-688 394.1238,-589.8096 271.163,-504.251 350.606,-406 370.7225,-381.1208 577.7602,-346.6974 669.5983,-332.5106"/>
<polygon fill="#8b4513" stroke="#8b4513" points="670.3327,-335.939 679.6859,-330.9622 669.2706,-329.02 670.3327,-335.939"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket -->
<g id="edge30" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket</title>
<path fill="none" stroke="#8b4513" d="M262.9511,-1398.5781C326.7236,-1405.4622 468.1638,-1421.6832 586.3116,-1442 610.939,-1446.235 638.0552,-1451.8773 660.8652,-1456.9087"/>
<polygon fill="#8b4513" stroke="#8b4513" points="660.165,-1460.3384 670.6867,-1459.0957 661.6865,-1453.5058 660.165,-1460.3384"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$1 -->
<g id="node8" class="node">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$1</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="468.4588" cy="-454" rx="64.8047" ry="18"/>
<text text-anchor="middle" x="468.4588" y="-450.3" font-family="Verdana" font-size="14.00" fill="#000000">doShellMode$1</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$1&#45;&gt;blitter.com/go/hkexsh.Restore -->
<g id="edge33" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$1&#45;&gt;blitter.com/go/hkexsh.Restore</title>
<path fill="none" stroke="#8b4513" d="M507.7401,-439.5177C531.7402,-429.6096 562.324,-415.0181 586.3116,-397 605.4351,-382.6355 602.3524,-370.1787 622.3116,-357 636.9243,-347.3515 654.8476,-340.3986 670.8951,-335.5549"/>
<polygon fill="#8b4513" stroke="#8b4513" points="671.9306,-338.8993 680.5981,-332.8063 670.0228,-332.1643 671.9306,-338.8993"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$1&#45;&gt;(*blitter.com/go/hkexsh.Session).SetStatus -->
<g id="edge35" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$1&#45;&gt;(*blitter.com/go/hkexsh.Session).SetStatus</title>
<path fill="none" stroke="#8b4513" d="M532.7261,-456.6274C572.5763,-458.2565 623.1277,-460.3232 660.5632,-461.8536"/>
<polygon fill="#8b4513" stroke="#8b4513" points="660.6196,-465.3588 670.7543,-462.2703 660.9056,-458.3646 660.6196,-465.3588"/>
</g>
<!-- (blitter.com/go/hkexsh/hkexnet.Conn).GetStatus -->
<g id="node41" class="node">
<title>(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1209" rx="43.4031" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1205.3" font-family="Verdana" font-size="14.00" fill="#000000">GetStatus</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$1&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus -->
<g id="edge34" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$1&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus</title>
<path fill="none" stroke="#8b4513" d="M472.3656,-471.9943C484.1087,-526.1176 520.0803,-692.1813 549.3116,-830 582.1912,-985.0195 516.768,-1060.7941 622.3116,-1179 632.3691,-1190.2641 646.7437,-1197.3109 661.0954,-1201.7153"/>
<polygon fill="#8b4513" stroke="#8b4513" points="660.4091,-1205.1548 670.9742,-1204.3617 662.2205,-1198.3932 660.4091,-1205.1548"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode$1 -->
<g id="edge36" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode$1</title>
<path fill="none" stroke="#000000" d="M284.0858,-454C312.5346,-454 347.9018,-454 380.0293,-454"/>
<polygon fill="#000000" stroke="#000000" points="393.2494,-457.5 403.2494,-454 393.2494,-450.5 393.2494,-457.5"/>
<polyline fill="none" stroke="#000000" points="393.2494,-454 388.2494,-454.0001 "/>
<ellipse fill="none" stroke="#000000" cx="384.2494" cy="-454.0001" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.handleTermResizes -->
<g id="node12" class="node">
<title>blitter.com/go/hkexsh/hkexsh.handleTermResizes</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="468.4588" cy="-258" rx="80.7059" ry="18"/>
<text text-anchor="middle" x="468.4588" y="-254.3" font-family="Verdana" font-size="14.00" fill="#000000">handleTermResizes</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode&#45;&gt;blitter.com/go/hkexsh/hkexsh.handleTermResizes -->
<g id="edge40" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode&#45;&gt;blitter.com/go/hkexsh/hkexsh.handleTermResizes</title>
<path fill="none" stroke="#000000" d="M275.973,-444.7213C289.6283,-440.2402 303.7602,-433.6512 314.606,-424 341.9287,-399.6865 333.1033,-382.1144 350.606,-350 365.7801,-322.158 363.2693,-309.3263 387.606,-289 393.6095,-283.9858 400.5125,-279.7292 407.7015,-276.1295"/>
<polygon fill="#000000" stroke="#000000" points="409.2777,-279.2574 416.9143,-271.9135 406.3648,-272.8922 409.2777,-279.2574"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$2 -->
<g id="node13" class="node">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$2</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="468.4588" cy="-319" rx="64.8047" ry="18"/>
<text text-anchor="middle" x="468.4588" y="-315.3" font-family="Verdana" font-size="14.00" fill="#000000">doShellMode$2</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode$2 -->
<g id="edge43" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode$2</title>
<path fill="none" stroke="#000000" d="M275.7722,-444.4918C289.4194,-440.0013 303.5971,-433.4648 314.606,-424 340.5363,-401.7065 324.3207,-377.8739 350.606,-356 361.7224,-346.7492 375.1604,-339.8047 388.9254,-334.5933"/>
<polygon fill="#000000" stroke="#000000" points="402.7973,-333.8954 411.2847,-327.5539 400.6952,-327.2184 402.7973,-333.8954"/>
<polyline fill="none" stroke="#000000" points="401.7463,-330.5569 396.9771,-332.0584 "/>
<ellipse fill="none" stroke="#000000" cx="393.1617" cy="-333.2596" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.handleTermResizes$1 -->
<g id="node10" class="node">
<title>blitter.com/go/hkexsh/hkexsh.handleTermResizes$1</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="713.0647" cy="-57" rx="90.507" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-53.3" font-family="Verdana" font-size="14.00" fill="#000000">handleTermResizes$1</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.GetSize -->
<g id="node11" class="node">
<title>blitter.com/go/hkexsh/hkexsh.GetSize</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width="1.5" cx="911.4691" cy="-57" rx="34.8031" ry="18"/>
<text text-anchor="middle" x="911.4691" y="-53.3" font-family="Verdana" font-size="14.00" fill="#000000">GetSize</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.handleTermResizes$1&#45;&gt;blitter.com/go/hkexsh/hkexsh.GetSize -->
<g id="edge37" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.handleTermResizes$1&#45;&gt;blitter.com/go/hkexsh/hkexsh.GetSize</title>
<path fill="none" stroke="#000000" d="M803.8476,-57C825.6139,-57 847.9248,-57 866.548,-57"/>
<polygon fill="#000000" stroke="#000000" points="866.7705,-60.5001 876.7705,-57 866.7705,-53.5001 866.7705,-60.5001"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.handleTermResizes$1&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket -->
<g id="edge38" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.handleTermResizes$1&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket</title>
<path fill="none" stroke="#8b4513" d="M643.3244,-68.6826C627.1761,-75.1259 612.3697,-85.0936 604.3116,-100.5 587.1375,-133.3354 587.1375,-1401.6646 604.3116,-1434.5 613.6573,-1452.3682 632.7676,-1461.4811 652.3987,-1465.9764"/>
<polygon fill="#8b4513" stroke="#8b4513" points="651.8693,-1469.4385 662.3488,-1467.8794 653.1843,-1462.5631 651.8693,-1469.4385"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.handleTermResizes&#45;&gt;blitter.com/go/hkexsh/hkexsh.handleTermResizes$1 -->
<g id="edge39" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.handleTermResizes&#45;&gt;blitter.com/go/hkexsh/hkexsh.handleTermResizes$1</title>
<path fill="none" stroke="#000000" d="M504.9778,-241.8425C519.9137,-234.017 536.6256,-223.5715 549.3116,-211 594.4653,-166.2537 572.9683,-128.0791 622.3116,-88 625.4213,-85.4741 628.7482,-83.1492 632.2241,-81.0098"/>
<polygon fill="#000000" stroke="#000000" points="645.8478,-78.2241 653.2838,-70.6772 642.7645,-71.9398 645.8478,-78.2241"/>
<polyline fill="none" stroke="#000000" points="644.3062,-75.0819 639.8173,-77.2843 "/>
<ellipse fill="none" stroke="#000000" cx="636.2263" cy="-79.0462" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$2$1 -->
<g id="node14" class="node">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$2$1</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="713.0647" cy="-118" rx="74.6057" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-114.3" font-family="Verdana" font-size="14.00" fill="#000000">doShellMode$2$1</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$2&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode$2$1 -->
<g id="edge41" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$2&#45;&gt;blitter.com/go/hkexsh/hkexsh.doShellMode$2$1</title>
<path fill="none" stroke="#000000" d="M517.8536,-307.2286C529.0953,-302.8587 540.3512,-296.9484 549.3116,-289 602.3976,-241.9093 568.1565,-192.8572 622.3116,-147 629.0067,-141.3307 636.8232,-136.7658 645.009,-133.0909"/>
<polygon fill="#000000" stroke="#000000" points="646.4078,-136.3007 654.3678,-129.3087 643.7849,-129.8107 646.4078,-136.3007"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doShellMode$2&#45;&gt;blitter.com/go/hkexsh.Restore -->
<g id="edge42" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doShellMode$2&#45;&gt;blitter.com/go/hkexsh.Restore</title>
<path fill="none" stroke="#8b4513" d="M533.0461,-320.8483C575.6116,-322.0664 630.279,-323.6309 668.1476,-324.7146"/>
<polygon fill="#8b4513" stroke="#8b4513" points="668.2629,-328.2192 678.3589,-325.0068 668.4632,-321.2221 668.2629,-328.2192"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(blitter.com/go/hkexsh.Session).Cmd -->
<g id="edge46" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(blitter.com/go/hkexsh.Session).Cmd</title>
<path fill="none" stroke="#8b4513" d="M475.9248,-1189.8122C503.1202,-1123.8835 596.6318,-900.0937 622.3116,-877 637.2835,-863.5358 658.3632,-855.8745 676.4387,-851.5383"/>
<polygon fill="#8b4513" stroke="#8b4513" points="677.3455,-854.9235 686.3886,-849.4031 675.8768,-848.0793 677.3455,-854.9235"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket -->
<g id="edge47" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket</title>
<path fill="none" stroke="#8b4513" d="M480.3574,-1225.762C501.8382,-1257.918 548.3865,-1328.0138 586.3116,-1388 602.7269,-1413.9642 597.4973,-1428.8931 622.3116,-1447 631.6303,-1453.7999 642.7802,-1458.5193 654.0232,-1461.7895"/>
<polygon fill="#8b4513" stroke="#8b4513" points="653.3288,-1465.2244 663.8838,-1464.3062 655.0599,-1458.4419 653.3288,-1465.2244"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus -->
<g id="node38" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="713.0647" cy="-1530" rx="42.2035" ry="18"/>
<text text-anchor="middle" x="713.0647" y="-1526.3" font-family="Verdana" font-size="14.00" fill="#000000">SetStatus</text>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus -->
<g id="edge49" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus</title>
<path fill="none" stroke="#8b4513" d="M477.4717,-1225.9944C508.6218,-1288.0654 610.4768,-1489.9797 622.3116,-1500 633.9392,-1509.8449 648.8996,-1516.4869 663.3066,-1520.9572"/>
<polygon fill="#8b4513" stroke="#8b4513" points="662.5708,-1524.3858 673.1445,-1523.7177 664.462,-1517.6461 662.5708,-1524.3858"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Read -->
<g id="edge48" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Read</title>
<path fill="none" stroke="#8b4513" d="M512.7551,-1219.2277C560.1684,-1231.2456 634.4262,-1250.0676 677.9635,-1261.1029"/>
<polygon fill="#8b4513" stroke="#8b4513" points="677.259,-1264.535 687.8125,-1263.5993 678.979,-1257.7496 677.259,-1264.535"/>
</g>
<!-- blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus -->
<g id="edge50" class="edge">
<title>blitter.com/go/hkexsh/hkexsh.doCopyMode&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus</title>
<path fill="none" stroke="#8b4513" d="M524.5763,-1208.2294C565.059,-1208.3949 619.3862,-1208.617 659.3146,-1208.7803"/>
<polygon fill="#8b4513" stroke="#8b4513" points="659.3815,-1212.2805 669.3958,-1208.8215 659.4102,-1205.2805 659.3815,-1212.2805"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -1,5 +1,6 @@
.PHONY: clean all
.PHONY: clean all vis
EXTPKGS = binary,bytes,crypto,encoding,errors,flag,fmt,internal,io,log,net,os,path,runtime,time,strings,sync,syscall
EXE = $(notdir $(shell pwd))
all:
@ -8,3 +9,6 @@ all:
clean:
$(RM) $(EXE) $(EXE).exe
vis:
go-callvis -skipbrowser -svg -output hkexshd-vis -ignore $(EXTPKGS) -group pkg,type .

279
hkexshd/hkexshd-vis.gv Executable file
View File

@ -0,0 +1,279 @@
digraph gocallvis {
label="blitter.com/go/hkexsh/hkexshd";
labeljust="l";
fontname="Arial";
fontsize="14";
rankdir="LR";
bgcolor="lightgray";
style="solid";
penwidth="0.5";
pad="0.0";
nodesep="0.35";
node [shape="ellipse" style="filled" fillcolor="honeydew" fontname="Verdana" penwidth="1.0" margin="0.05,0.0"];
edge [minlen="2"]
subgraph "cluster_focus" {
bgcolor="#e6ecfa";
label="main";
labelloc="t";
labeljust="c";
fontsize="18";
"blitter.com/go/hkexsh/hkexshd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexshd.main$1" [ label="main$1" style="dotted,filled" fillcolor="lightblue" ]
"blitter.com/go/hkexsh/hkexshd.main$2" [ fillcolor="lightblue" label="main$2" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ label="GenAuthToken" penwidth="1.5" fillcolor="lightblue" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" [ fillcolor="lightblue" label="runShellAs" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ fillcolor="lightblue" label="runShellAs$1" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ fillcolor="lightblue" label="runShellAs$2" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ fillcolor="lightblue" label="runShellAs$3" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ fillcolor="lightblue" label="runShellAs$4" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexshd.main$2$1" [ fillcolor="lightblue" label="main$2$1" style="dotted,filled" ]
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" [ fillcolor="lightblue" label="runClientToServerCopyAs" penwidth="0.5" ]
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ fillcolor="lightblue" label="runServerToClientCopyAs" penwidth="0.5" ]
subgraph "cluster_blitter.com/go/goutmp" {
URL="/?f=blitter.com/go/goutmp";
tooltip="package: blitter.com/go/goutmp";
fillcolor="lightyellow";
fontname="bold";
rank="sink";
label="[goutmp]";
penwidth="0.8";
fontsize="16";
style="filled";
"blitter.com/go/goutmp.GetHost" [ fillcolor="moccasin" label="GetHost" penwidth="1.5" ]
"blitter.com/go/goutmp.Put_utmp" [ fillcolor="moccasin" label="Put_utmp" penwidth="1.5" ]
"blitter.com/go/goutmp.Unput_utmp" [ fillcolor="moccasin" label="Unput_utmp" penwidth="1.5" ]
"blitter.com/go/goutmp.Put_lastlog_entry" [ fillcolor="moccasin" label="Put_lastlog_entry" penwidth="1.5" ]
}
subgraph "cluster_blitter.com/go/hkexsh" {
penwidth="0.8";
fontsize="16";
style="filled";
fontname="bold";
rank="sink";
label="[hkexsh]";
URL="/?f=blitter.com/go/hkexsh";
fillcolor="lightyellow";
tooltip="package: blitter.com/go/hkexsh";
"blitter.com/go/hkexsh.AuthUserByToken" [ fillcolor="moccasin" label="AuthUserByToken" penwidth="1.5" ]
"blitter.com/go/hkexsh.AuthUserByPasswd" [ fillcolor="moccasin" label="AuthUserByPasswd" penwidth="1.5" ]
subgraph "cluster_*blitter.com/go/hkexsh.Session" {
style="rounded,filled";
fillcolor="wheat2";
label="(*Session)";
tooltip="type: *blitter.com/go/hkexsh.Session";
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
labelloc="b";
"(*blitter.com/go/hkexsh.Session).SetOp" [ label="SetOp" penwidth="1.5" fillcolor="moccasin" ]
"(*blitter.com/go/hkexsh.Session).SetWho" [ fillcolor="moccasin" label="SetWho" penwidth="1.5" ]
"(*blitter.com/go/hkexsh.Session).SetConnHost" [ fillcolor="moccasin" label="SetConnHost" penwidth="1.5" ]
"(*blitter.com/go/hkexsh.Session).SetTermType" [ fillcolor="moccasin" label="SetTermType" penwidth="1.5" ]
"(*blitter.com/go/hkexsh.Session).SetCmd" [ fillcolor="moccasin" label="SetCmd" penwidth="1.5" ]
"(*blitter.com/go/hkexsh.Session).SetAuthCookie" [ fillcolor="moccasin" label="SetAuthCookie" penwidth="1.5" ]
"(*blitter.com/go/hkexsh.Session).ClearAuthCookie" [ fillcolor="moccasin" label="ClearAuthCookie" penwidth="1.5" ]
}
subgraph "cluster_blitter.com/go/hkexsh.Session" {
fillcolor="wheat2";
label="(Session)";
tooltip="type: blitter.com/go/hkexsh.Session";
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
labelloc="b";
style="rounded,filled";
"(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).Cmd" [ label="Cmd" penwidth="1.5" fillcolor="moccasin" ]
"(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
"(blitter.com/go/hkexsh.Session).TermType" [ penwidth="1.5" fillcolor="moccasin" label="TermType" ]
}
}
subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
penwidth="0.8";
fontsize="16";
fontname="bold";
rank="sink";
tooltip="package: blitter.com/go/hkexsh/hkexnet";
style="filled";
fillcolor="lightyellow";
label="[hkexnet]";
URL="/?f=blitter.com/go/hkexsh/hkexnet";
"blitter.com/go/hkexsh/hkexnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ]
"blitter.com/go/hkexsh/hkexnet.Listen" [ label="Listen" penwidth="1.5" fillcolor="moccasin" ]
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
style="rounded,filled";
fillcolor="wheat2";
label="(*Conn)";
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
labelloc="b";
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ fillcolor="moccasin" label="SetupChaff" penwidth="1.5" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ label="Close" penwidth="1.5" fillcolor="moccasin" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr" [ fillcolor="moccasin" label="RemoteAddr" penwidth="1.5" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ penwidth="1.5" fillcolor="moccasin" label="EnableChaff" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ label="ShutdownChaff" penwidth="1.5" fillcolor="moccasin" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
"(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ label="WritePacket" penwidth="1.5" fillcolor="moccasin" ]
}
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.HKExListener" {
tooltip="type: *blitter.com/go/hkexsh/hkexnet.HKExListener";
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
labelloc="b";
style="rounded,filled";
fillcolor="wheat2";
label="(*HKExListener)";
"(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept" [ fillcolor="moccasin" label="Accept" penwidth="1.5" ]
}
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
penwidth="0.5";
fontsize="15";
fontcolor="#222222";
labelloc="b";
style="rounded,filled";
fillcolor="wheat2";
label="(Conn)";
"(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" ]
}
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.HKExListener" {
fontsize="15";
fontcolor="#222222";
labelloc="b";
style="rounded,filled";
fillcolor="wheat2";
label="(HKExListener)";
tooltip="type: blitter.com/go/hkexsh/hkexnet.HKExListener";
penwidth="0.5";
"(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
}
}
subgraph "cluster_blitter.com/go/hkexsh/logger" {
label="[logger]";
tooltip="package: blitter.com/go/hkexsh/logger";
rank="sink";
fontsize="16";
style="filled";
fillcolor="lightyellow";
fontname="bold";
URL="/?f=blitter.com/go/hkexsh/logger";
penwidth="0.8";
"blitter.com/go/hkexsh/logger.New" [ penwidth="1.5" fillcolor="moccasin" label="New" ]
"blitter.com/go/hkexsh/logger.LogNotice" [ fillcolor="moccasin" label="LogNotice" penwidth="1.5" ]
"blitter.com/go/hkexsh/logger.LogErr" [ fillcolor="moccasin" label="LogErr" penwidth="1.5" ]
}
subgraph "cluster_github.com/kr/pty" {
tooltip="package: github.com/kr/pty";
fontsize="16";
fontname="bold";
label="[pty]";
URL="/?f=github.com/kr/pty";
penwidth="0.8";
style="filled";
fillcolor="lightyellow";
rank="sink";
"github.com/kr/pty.Start" [ penwidth="1.5" fillcolor="moccasin" label="Start" ]
"github.com/kr/pty.Setsize" [ fillcolor="moccasin" label="Setsize" penwidth="1.5" ]
}
}
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$1" -> "blitter.com/go/hkexsh/logger.LogNotice" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexshd.main$1" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Listen" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main" -> "(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main" -> "(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh.Session).SetOp" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh.Session).SetWho" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh.Session).SetConnHost" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh.Session).SetTermType" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh.Session).SetCmd" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh.Session).SetAuthCookie" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).Op" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).Who" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).ConnHost" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).Cmd" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).AuthCookie" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh.AuthUserByToken" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh.Session).ClearAuthCookie" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh.AuthUserByPasswd" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/logger.LogNotice" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).TermType" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "github.com/kr/pty.Start" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ arrowhead="normalnoneodiamond" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs$2" -> "github.com/kr/pty.Setsize" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ arrowhead="normalnoneodot" ]
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runShellAs" [ ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/logger.LogErr" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_utmp" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2$1" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.main$2$1" [ arrowhead="normalnoneodiamond" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" [ ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ ]
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexshd.main$2" [ arrowhead="normalnoneodot" ]
}

767
hkexshd/hkexshd-vis.gv.svg Normal file
View File

@ -0,0 +1,767 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="915pt" height="1911pt"
viewBox="0.00 0.00 915.32 1911.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1911)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1911 915.3169,-1911 915.3169,0 0,0"/>
<text text-anchor="middle" x="106" y="-7.8" font-family="Arial" font-size="14.00" fill="#000000">blitter.com/go/hkexsh/hkexshd</text>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-31 8,-1903 907.3169,-1903 907.3169,-31 8,-31"/>
<text text-anchor="middle" x="457.6585" y="-1884.6" font-family="Arial" font-size="18.00" fill="#000000">main</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_blitter.com/go/goutmp</title>
<g id="a_clust2"><a xlink:href="/?f=blitter.com/go/goutmp" xlink:title="package: blitter.com/go/goutmp">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="579.2096,-429 579.2096,-690 739.3146,-690 739.3146,-429 579.2096,-429"/>
<text text-anchor="middle" x="659.2621" y="-673.2" font-family="bold" font-size="16.00" fill="#000000">[goutmp]</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_blitter.com/go/hkexsh</title>
<g id="a_clust3"><a xlink:href="/?f=blitter.com/go/hkexsh" xlink:title="package: blitter.com/go/hkexsh">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="301.5032,-39 301.5032,-1028 477.0088,-1028 477.0088,-39 301.5032,-39"/>
<text text-anchor="middle" x="389.256" y="-1011.2" font-family="bold" font-size="16.00" fill="#000000">[hkexsh]</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_*blitter.com/go/hkexsh.Session</title>
<g id="a_clust4"><a xlink:href="/?f=blitter.com/go/hkexsh" xlink:title="type: *blitter.com/go/hkexsh.Session">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M322.8536,-47C322.8536,-47 455.6585,-47 455.6585,-47 461.6585,-47 467.6585,-53 467.6585,-59 467.6585,-59 467.6585,-478 467.6585,-478 467.6585,-484 461.6585,-490 455.6585,-490 455.6585,-490 322.8536,-490 322.8536,-490 316.8536,-490 310.8536,-484 310.8536,-478 310.8536,-478 310.8536,-59 310.8536,-59 310.8536,-53 316.8536,-47 322.8536,-47"/>
<text text-anchor="middle" x="389.256" y="-56" font-family="bold" font-size="15.00" fill="#222222">(*Session)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_blitter.com/go/hkexsh.Session</title>
<g id="a_clust5"><a xlink:href="/?f=blitter.com/go/hkexsh" xlink:title="type: blitter.com/go/hkexsh.Session">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M343.7543,-498C343.7543,-498 434.7577,-498 434.7577,-498 440.7577,-498 446.7577,-504 446.7577,-510 446.7577,-510 446.7577,-868 446.7577,-868 446.7577,-874 440.7577,-880 434.7577,-880 434.7577,-880 343.7543,-880 343.7543,-880 337.7543,-880 331.7543,-874 331.7543,-868 331.7543,-868 331.7543,-510 331.7543,-510 331.7543,-504 337.7543,-498 343.7543,-498"/>
<text text-anchor="middle" x="389.256" y="-507" font-family="bold" font-size="15.00" fill="#222222">(Session)</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_blitter.com/go/hkexsh/hkexnet</title>
<g id="a_clust6"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="package: blitter.com/go/hkexsh/hkexnet">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="573.911,-698 573.911,-1613 744.6132,-1613 744.6132,-698 573.911,-698"/>
<text text-anchor="middle" x="659.2621" y="-1596.2" font-family="bold" font-size="16.00" fill="#000000">[hkexnet]</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_*blitter.com/go/hkexsh/hkexnet.Conn</title>
<g id="a_clust7"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="type: *blitter.com/go/hkexsh/hkexnet.Conn">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M598.9099,-791C598.9099,-791 719.6144,-791 719.6144,-791 725.6144,-791 731.6144,-797 731.6144,-803 731.6144,-803 731.6144,-1283 731.6144,-1283 731.6144,-1289 725.6144,-1295 719.6144,-1295 719.6144,-1295 598.9099,-1295 598.9099,-1295 592.9099,-1295 586.9099,-1289 586.9099,-1283 586.9099,-1283 586.9099,-803 586.9099,-803 586.9099,-797 592.9099,-791 598.9099,-791"/>
<text text-anchor="middle" x="659.2621" y="-800" font-family="bold" font-size="15.00" fill="#222222">(*Conn)</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_*blitter.com/go/hkexsh/hkexnet.HKExListener</title>
<g id="a_clust8"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="type: *blitter.com/go/hkexsh/hkexnet.HKExListener">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M593.911,-1417C593.911,-1417 724.6132,-1417 724.6132,-1417 730.6132,-1417 736.6132,-1423 736.6132,-1429 736.6132,-1429 736.6132,-1482 736.6132,-1482 736.6132,-1488 730.6132,-1494 724.6132,-1494 724.6132,-1494 593.911,-1494 593.911,-1494 587.911,-1494 581.911,-1488 581.911,-1482 581.911,-1482 581.911,-1429 581.911,-1429 581.911,-1423 587.911,-1417 593.911,-1417"/>
<text text-anchor="middle" x="659.2621" y="-1426" font-family="bold" font-size="15.00" fill="#222222">(*HKExListener)</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_blitter.com/go/hkexsh/hkexnet.Conn</title>
<g id="a_clust9"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="type: blitter.com/go/hkexsh/hkexnet.Conn">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M634.2621,-706C634.2621,-706 684.2621,-706 684.2621,-706 690.2621,-706 696.2621,-712 696.2621,-718 696.2621,-718 696.2621,-771 696.2621,-771 696.2621,-777 690.2621,-783 684.2621,-783 684.2621,-783 634.2621,-783 634.2621,-783 628.2621,-783 622.2621,-777 622.2621,-771 622.2621,-771 622.2621,-718 622.2621,-718 622.2621,-712 628.2621,-706 634.2621,-706"/>
<text text-anchor="middle" x="659.2621" y="-715" font-family="bold" font-size="15.00" fill="#222222">(Conn)</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_blitter.com/go/hkexsh/hkexnet.HKExListener</title>
<g id="a_clust10"><a xlink:href="/?f=blitter.com/go/hkexsh/hkexnet" xlink:title="type: blitter.com/go/hkexsh/hkexnet.HKExListener">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M597.2621,-1502C597.2621,-1502 721.2621,-1502 721.2621,-1502 727.2621,-1502 733.2621,-1508 733.2621,-1514 733.2621,-1514 733.2621,-1567 733.2621,-1567 733.2621,-1573 727.2621,-1579 721.2621,-1579 721.2621,-1579 597.2621,-1579 597.2621,-1579 591.2621,-1579 585.2621,-1573 585.2621,-1567 585.2621,-1567 585.2621,-1514 585.2621,-1514 585.2621,-1508 591.2621,-1502 597.2621,-1502"/>
<text text-anchor="middle" x="659.2621" y="-1511" font-family="bold" font-size="15.00" fill="#222222">(HKExListener)</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_blitter.com/go/hkexsh/logger</title>
<g id="a_clust11"><a xlink:href="/?f=blitter.com/go/hkexsh/logger" xlink:title="package: blitter.com/go/hkexsh/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="337.2545,-1488 337.2545,-1688 441.2575,-1688 441.2575,-1488 337.2545,-1488"/>
<text text-anchor="middle" x="389.256" y="-1671.2" font-family="bold" font-size="16.00" fill="#000000">[logger]</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_github.com/kr/pty</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/kr/pty" xlink:title="package: github.com/kr/pty">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="817.3146,-1701 817.3146,-1840 899.3169,-1840 899.3169,-1701 817.3146,-1701"/>
<text text-anchor="middle" x="858.3158" y="-1823.2" font-family="bold" font-size="16.00" fill="#000000">[pty]</text>
</a>
</g>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main -->
<g id="node1" class="node">
<title>blitter.com/go/hkexsh/hkexshd.main</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="43" cy="-1771" rx="27" ry="18"/>
<text text-anchor="middle" x="43" y="-1767.3" font-family="Verdana" font-size="14.00" fill="#000000">main</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$1 -->
<g id="node2" class="node">
<title>blitter.com/go/hkexsh/hkexshd.main$1</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="177.6512" cy="-1609" rx="34.8031" ry="18"/>
<text text-anchor="middle" x="177.6512" y="-1605.3" font-family="Verdana" font-size="14.00" fill="#000000">main$1</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexshd.main$1 -->
<g id="edge4" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexshd.main$1</title>
<path fill="none" stroke="#000000" d="M52.8763,-1753.9068C64.4769,-1734.4349 84.8393,-1702.0721 106,-1677 116.8157,-1664.185 129.8225,-1651.2389 141.7686,-1640.1315"/>
<polygon fill="#000000" stroke="#000000" points="154.0999,-1633.7598 159.2006,-1624.4736 149.4223,-1628.5521 154.0999,-1633.7598"/>
<polyline fill="none" stroke="#000000" points="151.7611,-1631.156 148.0414,-1634.4972 "/>
<ellipse fill="none" stroke="#000000" cx="145.0656" cy="-1637.1701" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2 -->
<g id="node3" class="node">
<title>blitter.com/go/hkexsh/hkexshd.main$2</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="177.6512" cy="-1037" rx="34.8031" ry="18"/>
<text text-anchor="middle" x="177.6512" y="-1033.3" font-family="Verdana" font-size="14.00" fill="#000000">main$2</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexshd.main$2 -->
<g id="edge56" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexshd.main$2</title>
<path fill="none" stroke="#000000" d="M46.3285,-1752.8561C63.7736,-1657.7607 144.8194,-1215.9701 170.0993,-1078.1661"/>
<polygon fill="#000000" stroke="#000000" points="175.9567,-1065.6342 174.3185,-1055.1668 169.0716,-1064.3711 175.9567,-1065.6342"/>
<polyline fill="none" stroke="#000000" points="172.5141,-1065.0026 171.6119,-1069.9206 "/>
<ellipse fill="none" stroke="#000000" cx="170.8902" cy="-1073.8549" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexnet.Init -->
<g id="node32" class="node">
<title>blitter.com/go/hkexsh/hkexnet.Init</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1330" rx="27" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1326.3" font-family="Verdana" font-size="14.00" fill="#000000">Init</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Init -->
<g id="edge2" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Init</title>
<path fill="none" stroke="#8b4513" d="M69.4979,-1766.9224C96.6002,-1763.1099 139.9567,-1758 177.6512,-1758 177.6512,-1758 177.6512,-1758 389.256,-1758 435.8175,-1758 458.1558,-1775.6464 493.2096,-1745 624.5029,-1630.2148 461.5874,-1494.4053 573.911,-1361 586.0489,-1346.584 605.4613,-1338.8718 622.708,-1334.746"/>
<polygon fill="#8b4513" stroke="#8b4513" points="623.4597,-1338.1647 632.541,-1332.7077 622.0387,-1331.3104 623.4597,-1338.1647"/>
</g>
<!-- blitter.com/go/hkexsh/hkexnet.Listen -->
<g id="node33" class="node">
<title>blitter.com/go/hkexsh/hkexnet.Listen</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1391" rx="28.102" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1387.3" font-family="Verdana" font-size="14.00" fill="#000000">Listen</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Listen -->
<g id="edge5" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/hkexnet.Listen</title>
<path fill="none" stroke="#8b4513" d="M69.2336,-1775.3529C96.3093,-1779.4627 139.8114,-1785 177.6512,-1785 177.6512,-1785 177.6512,-1785 389.256,-1785 452.5295,-1785 485.8601,-1810.1294 530.2096,-1765 640.7061,-1652.5605 469.8407,-1531.4123 573.911,-1413 585.5392,-1399.7694 603.9667,-1393.9889 620.7279,-1391.6338"/>
<polygon fill="#8b4513" stroke="#8b4513" points="621.2908,-1395.0941 630.8731,-1390.5741 620.5635,-1388.132 621.2908,-1395.0941"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff -->
<g id="node34" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1269" rx="47.7038" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1265.3" font-family="Verdana" font-size="14.00" fill="#000000">SetupChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff -->
<g id="edge8" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff</title>
<path fill="none" stroke="#8b4513" d="M64.7751,-1781.9872C90.8997,-1794.1319 136.3533,-1812 177.6512,-1812 177.6512,-1812 177.6512,-1812 389.256,-1812 444.2224,-1812 460.9006,-1789.4683 493.2096,-1745 531.0393,-1692.9333 517.5287,-1668.0969 530.2096,-1605 544.0908,-1535.9307 527.0135,-1343.5725 573.911,-1291 581.2421,-1282.7818 591.1968,-1277.4457 601.7205,-1274.0206"/>
<polygon fill="#8b4513" stroke="#8b4513" points="602.7439,-1277.3697 611.4862,-1271.3845 600.9196,-1270.6116 602.7439,-1277.3697"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept -->
<g id="node42" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1468" rx="31.2029" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1464.3" font-family="Verdana" font-size="14.00" fill="#000000">Accept</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept -->
<g id="edge7" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept</title>
<path fill="none" stroke="#8b4513" d="M58.6979,-1785.6812C70.8006,-1796.2908 88.3952,-1810.2417 106,-1819 135.6014,-1833.7265 144.5889,-1839 177.6512,-1839 177.6512,-1839 177.6512,-1839 389.256,-1839 452.5295,-1839 485.6134,-1863.8856 530.2096,-1819 632.3118,-1716.2353 481.238,-1607.3425 573.911,-1496 584.7137,-1483.0211 601.6477,-1476.0123 617.5937,-1472.2452"/>
<polygon fill="#8b4513" stroke="#8b4513" points="618.7286,-1475.5883 627.8554,-1470.2076 617.3652,-1468.7223 618.7286,-1475.5883"/>
</g>
<!-- (blitter.com/go/hkexsh/hkexnet.HKExListener).Close -->
<g id="node44" class="node">
<title>(blitter.com/go/hkexsh/hkexnet.HKExListener).Close</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1553" rx="27" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1549.3" font-family="Verdana" font-size="14.00" fill="#000000">Close</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;(blitter.com/go/hkexsh/hkexnet.HKExListener).Close -->
<g id="edge6" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;(blitter.com/go/hkexsh/hkexnet.HKExListener).Close</title>
<path fill="none" stroke="#8b4513" d="M52.8764,-1787.8767C63.763,-1805.0121 82.8395,-1831.0839 106,-1846 133.7964,-1863.9018 144.5889,-1866 177.6512,-1866 177.6512,-1866 177.6512,-1866 389.256,-1866 452.5295,-1866 485.0469,-1890.3156 530.2096,-1846 617.2898,-1760.5532 491.7192,-1665.1588 573.911,-1575 582.0875,-1566.031 593.39,-1560.5078 605.0967,-1557.1562"/>
<polygon fill="#8b4513" stroke="#8b4513" points="622.5802,-1557.7794 631.8655,-1552.6771 621.425,-1550.8754 622.5802,-1557.7794"/>
<polyline fill="none" stroke="#8b4513" points="622.0026,-1554.3274 617.0712,-1555.1526 "/>
<polygon fill="none" stroke="#8b4513" points="605.2357,-1557.133 610.4933,-1552.1976 617.0712,-1555.1526 611.8136,-1560.0879 605.2357,-1557.133"/>
</g>
<!-- blitter.com/go/hkexsh/logger.New -->
<g id="node45" class="node">
<title>blitter.com/go/hkexsh/logger.New</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-1636" rx="27" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1632.3" font-family="Verdana" font-size="14.00" fill="#000000">New</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/logger.New -->
<g id="edge1" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main&#45;&gt;blitter.com/go/hkexsh/logger.New</title>
<path fill="none" stroke="#8b4513" d="M63.7242,-1759.3479C104.7846,-1736.716 199.8966,-1686.5364 285.3024,-1658 307.2044,-1650.682 332.5427,-1645.2604 352.7199,-1641.6304"/>
<polygon fill="#8b4513" stroke="#8b4513" points="353.4981,-1645.0479 362.7553,-1639.8949 352.3051,-1638.1503 353.4981,-1645.0479"/>
</g>
<!-- blitter.com/go/hkexsh/logger.LogNotice -->
<g id="node46" class="node">
<title>blitter.com/go/hkexsh/logger.LogNotice</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-1575" rx="44.0031" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1571.3" font-family="Verdana" font-size="14.00" fill="#000000">LogNotice</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$1&#45;&gt;blitter.com/go/hkexsh/logger.LogNotice -->
<g id="edge3" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$1&#45;&gt;blitter.com/go/hkexsh/logger.LogNotice</title>
<path fill="none" stroke="#8b4513" d="M211.1806,-1603.6126C245.3789,-1598.1177 298.8742,-1589.5223 338.3119,-1583.1855"/>
<polygon fill="#8b4513" stroke="#8b4513" points="338.9512,-1586.6278 348.2693,-1581.5856 337.8407,-1579.7164 338.9512,-1586.6278"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.GenAuthToken -->
<g id="node4" class="node">
<title>blitter.com/go/hkexsh/hkexshd.GenAuthToken</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-1223" rx="61.7044" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1219.3" font-family="Verdana" font-size="14.00" fill="#000000">GenAuthToken</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.GenAuthToken -->
<g id="edge28" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.GenAuthToken</title>
<path fill="none" stroke="#000000" d="M181.0777,-1055.1781C187.9925,-1086.7063 206.6531,-1151.4594 248.3024,-1186 268.1573,-1202.4661 294.5537,-1211.6852 319.1322,-1216.818"/>
<polygon fill="#000000" stroke="#000000" points="318.6898,-1220.2963 329.1659,-1218.7152 319.9903,-1213.4182 318.6898,-1220.2963"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs -->
<g id="node5" class="node">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="389.256" cy="-1714" rx="46.4041" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1710.3" font-family="Verdana" font-size="14.00" fill="#000000">runShellAs</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs -->
<g id="edge40" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs</title>
<path fill="none" stroke="#000000" d="M177.9373,-1055.0992C179.8322,-1150.8784 193.5457,-1597.7776 285.3024,-1692 297.7286,-1704.7601 315.5684,-1711.0246 332.9707,-1713.878"/>
<polygon fill="#000000" stroke="#000000" points="332.7566,-1717.3793 343.1222,-1715.1873 333.652,-1710.4368 332.7566,-1717.3793"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2$1 -->
<g id="node10" class="node">
<title>blitter.com/go/hkexsh/hkexshd.main$2$1</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="389.256" cy="-1108" rx="44.6032" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1104.3" font-family="Verdana" font-size="14.00" fill="#000000">main$2$1</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.main$2$1 -->
<g id="edge45" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.main$2$1</title>
<path fill="none" stroke="#000000" d="M201.6742,-1049.9813C215.1152,-1056.8797 232.334,-1065.1237 248.3024,-1071 272.2796,-1079.8235 299.2736,-1087.4433 323.1732,-1093.4359"/>
<polygon fill="#000000" stroke="#000000" points="338.9028,-1100.7837 349.4418,-1099.698 340.526,-1093.9745 338.9028,-1100.7837"/>
<polyline fill="none" stroke="#000000" points="339.7144,-1097.3791 334.8507,-1096.2196 "/>
<polygon fill="none" stroke="#000000" points="323.1778,-1093.4369 329.9418,-1090.9373 334.8507,-1096.2196 328.0867,-1098.7192 323.1778,-1093.4369"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs -->
<g id="node11" class="node">
<title>blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="389.256" cy="-1311" rx="103.9072" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1307.3" font-family="Verdana" font-size="14.00" fill="#000000">runClientToServerCopyAs</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs -->
<g id="edge50" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs</title>
<path fill="none" stroke="#000000" d="M180.7232,-1055.2357C189.4997,-1105.2402 216.1343,-1242.8767 248.3024,-1274 259.8968,-1285.2178 274.4604,-1293.1428 289.7947,-1298.7194"/>
<polygon fill="#000000" stroke="#000000" points="288.8293,-1302.0864 299.4224,-1301.8966 291.023,-1295.439 288.8293,-1302.0864"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs -->
<g id="node12" class="node">
<title>blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-width=".5" cx="389.256" cy="-1372" rx="103.9072" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1368.3" font-family="Verdana" font-size="14.00" fill="#000000">runServerToClientCopyAs</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs -->
<g id="edge55" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs</title>
<path fill="none" stroke="#000000" d="M181.3619,-1055.1407C194.0176,-1115.1203 237.3668,-1305.3117 285.3024,-1342 292.1844,-1347.2672 299.9622,-1351.6103 308.0894,-1355.1913"/>
<polygon fill="#000000" stroke="#000000" points="306.8004,-1358.4453 317.3846,-1358.9191 309.406,-1351.9483 306.8004,-1358.4453"/>
</g>
<!-- blitter.com/go/goutmp.GetHost -->
<g id="node13" class="node">
<title>blitter.com/go/goutmp.GetHost</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-638" rx="36.1036" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-634.3" font-family="Verdana" font-size="14.00" fill="#000000">GetHost</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/goutmp.GetHost -->
<g id="edge27" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/goutmp.GetHost</title>
<path fill="none" stroke="#8b4513" d="M189.0984,-1054.0953C206.5198,-1078.3861 242.2514,-1121.8436 285.3024,-1139 328.2215,-1156.1039 452.9504,-1161.6668 493.2096,-1139 520.8399,-1123.4436 519.9298,-1107.9959 530.2096,-1078 585.0377,-918.0152 488.5862,-846.0168 573.911,-700 585.2419,-680.6094 605.3011,-665.5696 623.127,-655.1615"/>
<polygon fill="#8b4513" stroke="#8b4513" points="625.1357,-658.0499 632.1871,-650.1425 621.7436,-651.9267 625.1357,-658.0499"/>
</g>
<!-- blitter.com/go/goutmp.Put_utmp -->
<g id="node14" class="node">
<title>blitter.com/go/goutmp.Put_utmp</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-455" rx="41.6038" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-451.3" font-family="Verdana" font-size="14.00" fill="#000000">Put_utmp</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/goutmp.Put_utmp -->
<g id="edge43" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/goutmp.Put_utmp</title>
<path fill="none" stroke="#8b4513" d="M212.2227,-1038.9206C289.7826,-1042.8827 472.5095,-1050.1535 493.2096,-1032 677.6381,-870.2604 418.7954,-676.0334 573.911,-486 582.8955,-474.9931 596.1324,-467.894 609.514,-463.3155"/>
<polygon fill="#8b4513" stroke="#8b4513" points="610.6493,-466.6291 619.2248,-460.4072 608.641,-459.9234 610.6493,-466.6291"/>
</g>
<!-- blitter.com/go/goutmp.Put_lastlog_entry -->
<g id="node16" class="node">
<title>blitter.com/go/goutmp.Put_lastlog_entry</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-516" rx="72.105" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-512.3" font-family="Verdana" font-size="14.00" fill="#000000">Put_lastlog_entry</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/goutmp.Put_lastlog_entry -->
<g id="edge46" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/goutmp.Put_lastlog_entry</title>
<path fill="none" stroke="#8b4513" d="M210.5458,-1043.1217C289.0676,-1056.9051 484.3307,-1086.0218 530.2096,-1044 611.9684,-969.1148 506.3683,-634.922 573.911,-547 578.8406,-540.583 585.2246,-535.493 592.2816,-531.4559"/>
<polygon fill="#8b4513" stroke="#8b4513" points="594.1105,-534.4561 601.5215,-526.8846 591.0064,-528.1819 594.1105,-534.4561"/>
</g>
<!-- blitter.com/go/hkexsh.AuthUserByToken -->
<g id="node17" class="node">
<title>blitter.com/go/hkexsh.AuthUserByToken</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-915" rx="73.9057" ry="18"/>
<text text-anchor="middle" x="389.256" y="-911.3" font-family="Verdana" font-size="14.00" fill="#000000">AuthUserByToken</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh.AuthUserByToken -->
<g id="edge21" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh.AuthUserByToken</title>
<path fill="none" stroke="#8b4513" d="M192.8575,-1020.5047C212.4099,-1000.22 248.2784,-966.0245 285.3024,-946 297.3659,-939.4754 310.9783,-934.1543 324.282,-929.88"/>
<polygon fill="#8b4513" stroke="#8b4513" points="325.3441,-933.2153 333.8881,-926.9503 323.3021,-926.5198 325.3441,-933.2153"/>
</g>
<!-- blitter.com/go/hkexsh.AuthUserByPasswd -->
<g id="node18" class="node">
<title>blitter.com/go/hkexsh.AuthUserByPasswd</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-976" rx="79.5063" ry="18"/>
<text text-anchor="middle" x="389.256" y="-972.3" font-family="Verdana" font-size="14.00" fill="#000000">AuthUserByPasswd</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh.AuthUserByPasswd -->
<g id="edge23" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh.AuthUserByPasswd</title>
<path fill="none" stroke="#8b4513" d="M205.1846,-1025.8243C226.7311,-1017.3729 257.5863,-1005.9118 285.3024,-998 295.7599,-995.0148 306.9138,-992.2378 317.8887,-989.7314"/>
<polygon fill="#8b4513" stroke="#8b4513" points="318.8902,-993.0943 327.8924,-987.5075 317.3711,-986.2611 318.8902,-993.0943"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).SetOp -->
<g id="node19" class="node">
<title>(*blitter.com/go/hkexsh.Session).SetOp</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-98" rx="28.7023" ry="18"/>
<text text-anchor="middle" x="389.256" y="-94.3" font-family="Verdana" font-size="14.00" fill="#000000">SetOp</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetOp -->
<g id="edge10" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetOp</title>
<path fill="none" stroke="#8b4513" d="M178.58,-1018.8019C184.9733,-896.6257 224.0368,-198.5237 285.3024,-129 301.5333,-110.5814 328.1883,-102.8824 350.443,-99.7619"/>
<polygon fill="#8b4513" stroke="#8b4513" points="351.0881,-103.2111 360.6266,-98.5995 350.2941,-96.2563 351.0881,-103.2111"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).SetWho -->
<g id="node20" class="node">
<title>(*blitter.com/go/hkexsh.Session).SetWho</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-159" rx="35.4036" ry="18"/>
<text text-anchor="middle" x="389.256" y="-155.3" font-family="Verdana" font-size="14.00" fill="#000000">SetWho</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetWho -->
<g id="edge11" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetWho</title>
<path fill="none" stroke="#8b4513" d="M178.8456,-1018.9704C184.1793,-940.6728 207.3699,-622.4709 248.3024,-364 260.6689,-285.9107 231.6856,-248.1043 285.3024,-190 300.339,-173.7049 323.532,-165.8412 344.1987,-162.1004"/>
<polygon fill="#8b4513" stroke="#8b4513" points="344.7438,-165.5578 354.0945,-160.5763 343.6782,-158.6394 344.7438,-165.5578"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).SetConnHost -->
<g id="node21" class="node">
<title>(*blitter.com/go/hkexsh.Session).SetConnHost</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-220" rx="55.6039" ry="18"/>
<text text-anchor="middle" x="389.256" y="-216.3" font-family="Verdana" font-size="14.00" fill="#000000">SetConnHost</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetConnHost -->
<g id="edge12" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetConnHost</title>
<path fill="none" stroke="#8b4513" d="M178.9075,-1018.7545C186.8145,-906.2411 231.1171,-309.5813 285.3024,-251 295.9499,-239.4887 310.6678,-232.186 325.6821,-227.5721"/>
<polygon fill="#8b4513" stroke="#8b4513" points="326.8075,-230.8937 335.5516,-224.9111 324.9852,-224.135 326.8075,-230.8937"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).SetTermType -->
<g id="node22" class="node">
<title>(*blitter.com/go/hkexsh.Session).SetTermType</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-281" rx="55.6039" ry="18"/>
<text text-anchor="middle" x="389.256" y="-277.3" font-family="Verdana" font-size="14.00" fill="#000000">SetTermType</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetTermType -->
<g id="edge13" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetTermType</title>
<path fill="none" stroke="#8b4513" d="M179.1336,-1018.8065C188.0197,-911.6775 235.5214,-365.9474 285.3024,-312 295.9363,-300.4761 310.6495,-293.169 325.6635,-288.5549"/>
<polygon fill="#8b4513" stroke="#8b4513" points="326.789,-291.8765 335.5334,-285.8943 324.9671,-285.1177 326.789,-291.8765"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).SetCmd -->
<g id="node23" class="node">
<title>(*blitter.com/go/hkexsh.Session).SetCmd</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-342" rx="35.5042" ry="18"/>
<text text-anchor="middle" x="389.256" y="-338.3" font-family="Verdana" font-size="14.00" fill="#000000">SetCmd</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetCmd -->
<g id="edge14" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetCmd</title>
<path fill="none" stroke="#8b4513" d="M179.4085,-1018.7073C189.3531,-916.8185 239.7454,-422.1337 285.3024,-373 300.1999,-356.9329 323.0272,-349.067 343.4997,-345.2664"/>
<polygon fill="#8b4513" stroke="#8b4513" points="344.2929,-348.6846 353.6249,-343.6683 343.2015,-341.7702 344.2929,-348.6846"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).SetAuthCookie -->
<g id="node24" class="node">
<title>(*blitter.com/go/hkexsh.Session).SetAuthCookie</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-403" rx="62.905" ry="18"/>
<text text-anchor="middle" x="389.256" y="-399.3" font-family="Verdana" font-size="14.00" fill="#000000">SetAuthCookie</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetAuthCookie -->
<g id="edge15" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).SetAuthCookie</title>
<path fill="none" stroke="#8b4513" d="M179.7094,-1018.841C190.7308,-922.9579 243.8168,-478.2857 285.3024,-434 294.8341,-423.8249 307.5464,-416.9423 320.8026,-412.2989"/>
<polygon fill="#8b4513" stroke="#8b4513" points="321.9924,-415.5946 330.5135,-409.2984 319.9259,-408.9065 321.9924,-415.5946"/>
</g>
<!-- (*blitter.com/go/hkexsh.Session).ClearAuthCookie -->
<g id="node25" class="node">
<title>(*blitter.com/go/hkexsh.Session).ClearAuthCookie</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-464" rx="70.305" ry="18"/>
<text text-anchor="middle" x="389.256" y="-460.3" font-family="Verdana" font-size="14.00" fill="#000000">ClearAuthCookie</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).ClearAuthCookie -->
<g id="edge22" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh.Session).ClearAuthCookie</title>
<path fill="none" stroke="#8b4513" d="M180.0446,-1018.8077C192.0848,-928.4809 246.9636,-530.9778 285.3024,-492 293.2601,-483.9097 303.2904,-478.0819 313.9626,-473.8986"/>
<polygon fill="#8b4513" stroke="#8b4513" points="315.1515,-477.191 323.4705,-470.6301 312.8758,-470.5712 315.1515,-477.191"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).Op -->
<g id="node26" class="node">
<title>(blitter.com/go/hkexsh.Session).Op</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-854" rx="27" ry="18"/>
<text text-anchor="middle" x="389.256" y="-850.3" font-family="Verdana" font-size="14.00" fill="#000000">Op</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).Op -->
<g id="edge16" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).Op</title>
<path fill="none" stroke="#8b4513" d="M184.2368,-1019.1561C197.6648,-985.4109 231.5599,-912.3734 285.3024,-876 304.7754,-862.8205 330.6283,-857.3113 351.6804,-855.1015"/>
<polygon fill="#8b4513" stroke="#8b4513" points="352.2142,-858.5691 361.8855,-854.243 351.6273,-851.5937 352.2142,-858.5691"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).Who -->
<g id="node27" class="node">
<title>(blitter.com/go/hkexsh.Session).Who</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-549" rx="27" ry="18"/>
<text text-anchor="middle" x="389.256" y="-545.3" font-family="Verdana" font-size="14.00" fill="#000000">Who</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).Who -->
<g id="edge17" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).Who</title>
<path fill="none" stroke="#8b4513" d="M179.3897,-1018.8497C187.1226,-941.9242 220.8841,-643.8239 285.3024,-580 302.9729,-562.4925 330.0818,-554.7987 352.1858,-551.4523"/>
<polygon fill="#8b4513" stroke="#8b4513" points="352.7771,-554.9053 362.2538,-550.1679 351.8912,-547.9616 352.7771,-554.9053"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).ConnHost -->
<g id="node28" class="node">
<title>(blitter.com/go/hkexsh.Session).ConnHost</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-610" rx="42.8032" ry="18"/>
<text text-anchor="middle" x="389.256" y="-606.3" font-family="Verdana" font-size="14.00" fill="#000000">ConnHost</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).ConnHost -->
<g id="edge18" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).ConnHost</title>
<path fill="none" stroke="#8b4513" d="M180.1244,-1018.9697C190.0858,-948.9128 229.4322,-695.9573 285.3024,-641 299.1869,-627.3424 318.8174,-619.6604 337.2859,-615.3548"/>
<polygon fill="#8b4513" stroke="#8b4513" points="337.9971,-618.7819 347.0909,-613.3455 336.5918,-611.9244 337.9971,-618.7819"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).Cmd -->
<g id="node29" class="node">
<title>(blitter.com/go/hkexsh.Session).Cmd</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-671" rx="27" ry="18"/>
<text text-anchor="middle" x="389.256" y="-667.3" font-family="Verdana" font-size="14.00" fill="#000000">Cmd</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).Cmd -->
<g id="edge19" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).Cmd</title>
<path fill="none" stroke="#8b4513" d="M181.0926,-1018.7534C193.3745,-955.5038 236.9079,-747.0663 285.3024,-702 303.3874,-685.1587 330.2445,-677.4376 352.1295,-673.9118"/>
<polygon fill="#8b4513" stroke="#8b4513" points="352.6726,-677.3701 362.0987,-672.5327 351.7134,-670.4361 352.6726,-677.3701"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).AuthCookie -->
<g id="node30" class="node">
<title>(blitter.com/go/hkexsh.Session).AuthCookie</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-732" rx="49.5034" ry="18"/>
<text text-anchor="middle" x="389.256" y="-728.3" font-family="Verdana" font-size="14.00" fill="#000000">AuthCookie</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).AuthCookie -->
<g id="edge20" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).AuthCookie</title>
<path fill="none" stroke="#8b4513" d="M179.37,-1018.949C184.9875,-970.2021 207.2105,-834.7537 285.3024,-763 297.9925,-751.3399 314.8927,-744.0547 331.3719,-739.5067"/>
<polygon fill="#8b4513" stroke="#8b4513" points="332.6581,-742.795 341.5366,-737.0139 330.9908,-735.9965 332.6581,-742.795"/>
</g>
<!-- (blitter.com/go/hkexsh.Session).TermType -->
<g id="node31" class="node">
<title>(blitter.com/go/hkexsh.Session).TermType</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-793" rx="42.8032" ry="18"/>
<text text-anchor="middle" x="389.256" y="-789.3" font-family="Verdana" font-size="14.00" fill="#000000">TermType</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).TermType -->
<g id="edge29" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh.Session).TermType</title>
<path fill="none" stroke="#8b4513" d="M181.6496,-1018.8204C191.6332,-977.7594 221.5671,-877.2842 285.3024,-824 300.0536,-811.6676 319.5724,-804.2413 337.71,-799.7693"/>
<polygon fill="#8b4513" stroke="#8b4513" points="338.5994,-803.1571 347.6053,-797.5764 337.0849,-796.323 338.5994,-803.1571"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).Close -->
<g id="node35" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).Close</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1086" rx="27" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1082.3" font-family="Verdana" font-size="14.00" fill="#000000">Close</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).Close -->
<g id="edge9" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).Close</title>
<path fill="none" stroke="#8b4513" d="M180.0567,-1055.0739C189.4965,-1122.9165 226.409,-1360.6739 285.3024,-1403 360.3373,-1456.9269 405.3587,-1431.6457 493.2096,-1403 512.564,-1396.6891 519.5037,-1393.3148 530.2096,-1376 591.6026,-1276.7089 499.1732,-1206.6776 573.911,-1117 582.2551,-1106.988 594.1111,-1100.2095 606.3406,-1095.6203"/>
<polygon fill="#8b4513" stroke="#8b4513" points="623.7258,-1094.6179 632.4902,-1088.6651 621.9265,-1087.8531 623.7258,-1094.6179"/>
<polyline fill="none" stroke="#8b4513" points="622.8262,-1091.2355 617.9942,-1092.5207 "/>
<polygon fill="none" stroke="#8b4513" points="606.3974,-1095.6052 611.1676,-1090.1974 617.9942,-1092.5207 613.2239,-1097.9286 606.3974,-1095.6052"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr -->
<g id="node36" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1147" rx="53.8039" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1143.3" font-family="Verdana" font-size="14.00" fill="#000000">RemoteAddr</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr -->
<g id="edge26" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr</title>
<path fill="none" stroke="#8b4513" d="M179.4791,-1055.0196C187.1289,-1126.1167 219.2883,-1385.2246 285.3024,-1425 364.4491,-1472.6881 409.0002,-1463.041 493.2096,-1425 581.4918,-1385.1192 552.6158,-1202.466 573.911,-1178 581.2808,-1169.5329 591.1537,-1163.3777 601.5673,-1158.9033"/>
<polygon fill="#8b4513" stroke="#8b4513" points="603.1121,-1162.061 611.2264,-1155.2486 600.6349,-1155.514 603.1121,-1162.061"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus -->
<g id="node40" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1208" rx="42.2035" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1204.3" font-family="Verdana" font-size="14.00" fill="#000000">SetStatus</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus -->
<g id="edge42" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus</title>
<path fill="none" stroke="#8b4513" d="M179.1492,-1055.1318C185.7132,-1129.1834 214.8161,-1406.7081 285.3024,-1448 365.0321,-1494.7068 410.695,-1489.5895 493.2096,-1448 559.3462,-1414.6655 568.4824,-1244.8822 573.911,-1239 583.2832,-1228.8448 596.2439,-1222.0095 609.2369,-1217.4112"/>
<polygon fill="#8b4513" stroke="#8b4513" points="610.625,-1220.6441 619.1202,-1214.313 608.5311,-1213.9646 610.625,-1220.6441"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket -->
<g id="node41" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-842" rx="50.7037" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-838.3" font-family="Verdana" font-size="14.00" fill="#000000">WritePacket</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket -->
<g id="edge51" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket</title>
<path fill="none" stroke="#8b4513" d="M182.0146,-1055.1854C189.857,-1083.3228 209.2857,-1136.5079 248.3024,-1159 302.5761,-1190.2873 482.6842,-1199.815 530.2096,-1159 627.7596,-1075.2236 492.3571,-972.4155 573.911,-873 581.4882,-863.7633 592.0585,-857.2787 603.1859,-852.7261"/>
<polygon fill="#8b4513" stroke="#8b4513" points="604.384,-856.0148 612.6106,-849.3384 602.0161,-849.4275 604.384,-856.0148"/>
</g>
<!-- (blitter.com/go/hkexsh/hkexnet.Conn).Write -->
<g id="node43" class="node">
<title>(blitter.com/go/hkexsh/hkexnet.Conn).Write</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-757" rx="27" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-753.3" font-family="Verdana" font-size="14.00" fill="#000000">Write</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Write -->
<g id="edge24" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;(blitter.com/go/hkexsh/hkexnet.Conn).Write</title>
<path fill="none" stroke="#8b4513" d="M179.9184,-1055.013C186.5727,-1099.1039 210.5452,-1211.9102 285.3024,-1254 325.5616,-1276.6668 455.0699,-1280.0759 493.2096,-1254 580.5101,-1194.3132 506.9983,-866.8937 573.911,-785 585.7062,-770.564 605.096,-763.5046 622.4159,-760.0805"/>
<polygon fill="#8b4513" stroke="#8b4513" points="623.0013,-763.5313 632.3014,-758.4562 621.8662,-756.6239 623.0013,-763.5313"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/logger.LogNotice -->
<g id="edge25" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/logger.LogNotice</title>
<path fill="none" stroke="#8b4513" d="M178.0255,-1055.0853C179.8178,-1116.9405 190.0874,-1325.0097 248.3024,-1484 259.2048,-1513.7753 260.1225,-1525.7282 285.3024,-1545 300.0785,-1556.3091 318.9842,-1563.358 336.6113,-1567.7503"/>
<polygon fill="#8b4513" stroke="#8b4513" points="336.277,-1571.2625 346.8012,-1570.0416 337.8127,-1564.433 336.277,-1571.2625"/>
</g>
<!-- blitter.com/go/hkexsh/logger.LogErr -->
<g id="node47" class="node">
<title>blitter.com/go/hkexsh/logger.LogErr</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="389.256" cy="-1514" rx="30.6034" ry="18"/>
<text text-anchor="middle" x="389.256" y="-1510.3" font-family="Verdana" font-size="14.00" fill="#000000">LogErr</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/logger.LogErr -->
<g id="edge41" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2&#45;&gt;blitter.com/go/hkexsh/logger.LogErr</title>
<path fill="none" stroke="#8b4513" d="M178.2468,-1055.1674C181.0255,-1129.5353 194.9309,-1409.968 248.3024,-1477 271.7656,-1506.4686 315.6139,-1514.1751 348.1994,-1515.465"/>
<polygon fill="#8b4513" stroke="#8b4513" points="348.272,-1518.9672 358.3433,-1515.6778 348.4189,-1511.9688 348.272,-1518.9672"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs$1 -->
<g id="node6" class="node">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs$1</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="659.2621" cy="-1639" rx="56.2041" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1635.3" font-family="Verdana" font-size="14.00" fill="#000000">runShellAs$1</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$1 -->
<g id="edge31" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$1</title>
<path fill="none" stroke="#000000" d="M433.9095,-1709.0793C452.8265,-1705.8592 474.7221,-1700.5864 493.2096,-1692 511.5934,-1683.4618 510.7471,-1672.3665 529.2096,-1664 544.4621,-1657.0882 561.5624,-1652.0857 578.2246,-1648.4656"/>
<polygon fill="#000000" stroke="#000000" points="595.787,-1648.8635 605.0097,-1643.6489 594.5481,-1641.974 595.787,-1648.8635"/>
<polyline fill="none" stroke="#000000" points="595.1675,-1645.4188 590.2465,-1646.3037 "/>
<polygon fill="none" stroke="#000000" points="578.4359,-1648.4276 583.6332,-1643.4288 590.2465,-1646.3037 585.0492,-1651.3025 578.4359,-1648.4276"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs$2 -->
<g id="node7" class="node">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs$2</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="659.2621" cy="-1700" rx="56.2041" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1696.3" font-family="Verdana" font-size="14.00" fill="#000000">runShellAs$2</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$2 -->
<g id="edge33" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$2</title>
<path fill="none" stroke="#000000" d="M432.9593,-1708.1507C451.9134,-1704.755 474.0972,-1699.6017 493.2096,-1692 510.6332,-1685.07 511.1594,-1675.0787 529.2096,-1670 542.4534,-1666.2736 571.3943,-1672.4595 598.6198,-1680.1636"/>
<polygon fill="#000000" stroke="#000000" points="610.1191,-1687.2782 620.7035,-1686.8077 612.1359,-1680.575 610.1191,-1687.2782"/>
<polyline fill="none" stroke="#000000" points="611.1275,-1683.9266 606.3395,-1682.4861 "/>
<ellipse fill="none" stroke="#000000" cx="602.5091" cy="-1681.3337" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs$3 -->
<g id="node8" class="node">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs$3</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="659.2621" cy="-1761" rx="56.2041" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1757.3" font-family="Verdana" font-size="14.00" fill="#000000">runShellAs$3</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$3 -->
<g id="edge34" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$3</title>
<path fill="none" stroke="#000000" d="M429.6657,-1705.1871C464.5887,-1698.2908 512.1998,-1690.8192 530.2096,-1697 553.4859,-1704.9881 552.31,-1719.2107 573.911,-1731 580.5977,-1734.6494 587.8142,-1737.9928 595.1198,-1741.0151"/>
<polygon fill="#000000" stroke="#000000" points="606.2702,-1748.8976 616.863,-1749.104 608.7109,-1742.3369 606.2702,-1748.8976"/>
<polyline fill="none" stroke="#000000" points="607.4905,-1745.6173 602.8043,-1743.8739 "/>
<ellipse fill="none" stroke="#000000" cx="599.0553" cy="-1742.4792" rx="4" ry="4"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs$4 -->
<g id="node9" class="node">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs$4</title>
<ellipse fill="#add8e6" stroke="#000000" stroke-dasharray="1,5" cx="659.2621" cy="-1822" rx="56.2041" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1818.3" font-family="Verdana" font-size="14.00" fill="#000000">runShellAs$4</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$4 -->
<g id="edge38" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;blitter.com/go/hkexsh/hkexshd.runShellAs$4</title>
<path fill="none" stroke="#000000" d="M432.6093,-1707.434C462.124,-1705.1652 500.9833,-1706.6707 530.2096,-1724 561.1112,-1742.3227 545.7252,-1769.7248 573.911,-1792 579.1675,-1796.1542 585.042,-1799.7569 591.1825,-1802.8766"/>
<polygon fill="#000000" stroke="#000000" points="601.9949,-1811.135 612.5735,-1811.7219 604.6698,-1804.6663 601.9949,-1811.135"/>
<polyline fill="none" stroke="#000000" points="603.3324,-1807.9006 598.7118,-1805.99 "/>
<ellipse fill="none" stroke="#000000" cx="595.0154" cy="-1804.4615" rx="4" ry="4"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff -->
<g id="node37" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-903" rx="52.0048" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-899.3" font-family="Verdana" font-size="14.00" fill="#000000">EnableChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff -->
<g id="edge35" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff</title>
<path fill="none" stroke="#8b4513" d="M435.3925,-1715.7345C455.9895,-1713.9445 478.8115,-1707.9549 493.2096,-1692 549.954,-1629.1202 521.6982,-1000.6903 573.911,-934 581.0518,-924.8792 591.1247,-918.4403 601.8583,-913.8952"/>
<polygon fill="#8b4513" stroke="#8b4513" points="603.2365,-917.1174 611.4038,-910.3687 600.8106,-910.5511 603.2365,-917.1174"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff -->
<g id="node38" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-964" rx="54.4038" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-960.3" font-family="Verdana" font-size="14.00" fill="#000000">DisableChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff -->
<g id="edge36" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff</title>
<path fill="none" stroke="#8b4513" d="M435.5043,-1715.0141C455.7468,-1713.0028 478.2443,-1707.0362 493.2096,-1692 550.5173,-1634.421 518.5519,-1593.3965 530.2096,-1513 546.7871,-1398.6756 503.6981,-1086.7334 573.911,-995 577.2168,-990.681 581.1817,-986.9631 585.568,-983.7627"/>
<polygon fill="#8b4513" stroke="#8b4513" points="602.5082,-979.2659 609.9111,-971.6865 599.3974,-972.9952 602.5082,-979.2659"/>
<polyline fill="none" stroke="#8b4513" points="600.9528,-976.1306 596.4737,-978.3526 "/>
<polygon fill="none" stroke="#8b4513" points="585.7238,-983.6855 589.3211,-977.4357 596.4737,-978.3526 592.8764,-984.6023 585.7238,-983.6855"/>
</g>
<!-- (*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff -->
<g id="node39" class="node">
<title>(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-1025" rx="64.2048" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-1021.3" font-family="Verdana" font-size="14.00" fill="#000000">ShutdownChaff</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff -->
<g id="edge37" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff</title>
<path fill="none" stroke="#8b4513" d="M435.4891,-1714.7038C455.6053,-1712.6084 478.0045,-1706.6611 493.2096,-1692 542.0181,-1644.9376 518.9294,-1610.8573 530.2096,-1544 548.3236,-1436.639 507.5125,-1142.2887 573.911,-1056 576.0742,-1053.1888 578.5165,-1050.6323 581.172,-1048.3075"/>
<polygon fill="#8b4513" stroke="#8b4513" points="597.7378,-1042.6982 604.6129,-1034.637 594.2113,-1036.6514 597.7378,-1042.6982"/>
<polyline fill="none" stroke="#8b4513" points="595.9745,-1039.6748 591.6554,-1042.1937 "/>
<polygon fill="none" stroke="#8b4513" points="581.2894,-1048.2391 584.4572,-1041.7611 591.6554,-1042.1937 588.4875,-1048.6717 581.2894,-1048.2391"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus -->
<g id="edge39" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus</title>
<path fill="none" stroke="#8b4513" d="M435.6409,-1714.2471C455.546,-1712.0237 477.7331,-1706.1018 493.2096,-1692 568.7915,-1623.1322 509.9142,-1318.7483 573.911,-1239 582.7242,-1228.0176 595.7778,-1220.9251 609.0398,-1216.345"/>
<polygon fill="#8b4513" stroke="#8b4513" points="610.1151,-1219.6764 618.6758,-1213.4343 608.0909,-1212.9755 610.1151,-1219.6764"/>
</g>
<!-- github.com/kr/pty.Start -->
<g id="node48" class="node">
<title>github.com/kr/pty.Start</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="858.3158" cy="-1788" rx="27" ry="18"/>
<text text-anchor="middle" x="858.3158" y="-1784.3" font-family="Verdana" font-size="14.00" fill="#000000">Start</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;github.com/kr/pty.Start -->
<g id="edge30" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs&#45;&gt;github.com/kr/pty.Start</title>
<path fill="none" stroke="#8b4513" d="M404.4084,-1731.1387C433.5094,-1762.599 500.8446,-1828.573 573.911,-1853 645.8642,-1877.0548 671.2889,-1872.4794 744.6132,-1853 777.3999,-1844.2899 810.5898,-1823.655 832.5769,-1807.9531"/>
<polygon fill="#8b4513" stroke="#8b4513" points="834.7094,-1810.7297 840.7135,-1802.0003 830.5762,-1805.0802 834.7094,-1810.7297"/>
</g>
<!-- github.com/kr/pty.Setsize -->
<g id="node49" class="node">
<title>github.com/kr/pty.Setsize</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="858.3158" cy="-1727" rx="33.0023" ry="18"/>
<text text-anchor="middle" x="858.3158" y="-1723.3" font-family="Verdana" font-size="14.00" fill="#000000">Setsize</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runShellAs$2&#45;&gt;github.com/kr/pty.Setsize -->
<g id="edge32" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runShellAs$2&#45;&gt;github.com/kr/pty.Setsize</title>
<path fill="none" stroke="#8b4513" d="M711.0415,-1707.0234C743.7454,-1711.4595 785.4636,-1717.1182 816.1435,-1721.2797"/>
<polygon fill="#8b4513" stroke="#8b4513" points="815.7161,-1724.7537 826.0958,-1722.6296 816.657,-1717.8172 815.7161,-1724.7537"/>
</g>
<!-- blitter.com/go/goutmp.Unput_utmp -->
<g id="node15" class="node">
<title>blitter.com/go/goutmp.Unput_utmp</title>
<ellipse fill="#ffe4b5" stroke="#000000" stroke-width="1.5" cx="659.2621" cy="-577" rx="52.6044" ry="18"/>
<text text-anchor="middle" x="659.2621" y="-573.3" font-family="Verdana" font-size="14.00" fill="#000000">Unput_utmp</text>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.main$2$1&#45;&gt;blitter.com/go/goutmp.Unput_utmp -->
<g id="edge44" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.main$2$1&#45;&gt;blitter.com/go/goutmp.Unput_utmp</title>
<path fill="none" stroke="#8b4513" d="M434.0456,-1108.8347C465.8405,-1106.8307 506.871,-1098.4792 530.2096,-1071 597.1105,-992.2301 510.6901,-689.753 573.911,-608 580.9226,-598.9332 590.8355,-592.5159 601.4364,-587.9747"/>
<polygon fill="#8b4513" stroke="#8b4513" points="602.7321,-591.2269 610.8737,-584.4473 600.2812,-584.67 602.7321,-591.2269"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff -->
<g id="edge47" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff</title>
<path fill="none" stroke="#8b4513" d="M449.3017,-1296.2586C480.4126,-1285.0045 515.0081,-1265.8301 530.2096,-1234 588.2773,-1112.4139 488.8178,-1038.4709 573.911,-934 581.2265,-925.0187 591.3737,-918.6392 602.1246,-914.1079"/>
<polygon fill="#8b4513" stroke="#8b4513" points="603.5032,-917.3299 611.6718,-910.5827 601.0785,-910.7633 603.5032,-917.3299"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff -->
<g id="edge48" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff</title>
<path fill="none" stroke="#8b4513" d="M467.6093,-1299.0005C490.8973,-1291.688 514.3873,-1279.9237 530.2096,-1261 607.059,-1169.0874 497.4074,-1087.2005 573.911,-995 577.3841,-990.8143 581.4712,-987.1938 585.9437,-984.0622"/>
<polygon fill="#8b4513" stroke="#8b4513" points="603.0018,-979.649 610.4603,-972.1243 599.9373,-973.3554 603.0018,-979.649"/>
<polyline fill="none" stroke="#8b4513" points="601.4695,-976.5022 596.9741,-978.6911 "/>
<polygon fill="none" stroke="#8b4513" points="586.1852,-983.9446 589.8285,-977.7216 596.9741,-978.6911 593.3308,-984.9142 586.1852,-983.9446"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff -->
<g id="edge49" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff</title>
<path fill="none" stroke="#8b4513" d="M492.956,-1309.1428C506.8314,-1304.832 519.8285,-1298.1304 530.2096,-1288 605.3034,-1214.7193 505.9727,-1135.9595 573.911,-1056 576.3657,-1053.111 579.1123,-1050.4912 582.0743,-1048.1156"/>
<polygon fill="#8b4513" stroke="#8b4513" points="598.6781,-1042.9186 605.7294,-1035.0111 595.2859,-1036.7954 598.6781,-1042.9186"/>
<polyline fill="none" stroke="#8b4513" points="596.982,-1039.857 592.6083,-1042.28 "/>
<polygon fill="none" stroke="#8b4513" points="582.1114,-1048.0951 585.4215,-1041.6886 592.6083,-1042.28 589.2982,-1048.6865 582.1114,-1048.0951"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff -->
<g id="edge52" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff</title>
<path fill="none" stroke="#8b4513" d="M464.523,-1359.5784C475.0435,-1355.3197 485.0342,-1349.6208 493.2096,-1342 628.422,-1215.9609 457.4075,-1077.5102 573.911,-934 581.2118,-925.0068 591.3529,-918.6223 602.1023,-914.0898"/>
<polygon fill="#8b4513" stroke="#8b4513" points="603.4809,-917.3118 611.6493,-910.5644 601.056,-910.7452 603.4809,-917.3118"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff -->
<g id="edge53" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff</title>
<path fill="none" stroke="#8b4513" d="M489.187,-1366.8168C504.7028,-1361.802 519.2058,-1353.9744 530.2096,-1342 635.3864,-1227.5465 476.9171,-1116.4657 573.911,-995 577.3049,-990.7499 581.3341,-987.0823 585.7658,-983.9174"/>
<polygon fill="#8b4513" stroke="#8b4513" points="602.7684,-979.4636 610.2003,-971.9126 599.6816,-973.1809 602.7684,-979.4636"/>
<polyline fill="none" stroke="#8b4513" points="601.225,-976.3222 596.7374,-978.527 "/>
<polygon fill="none" stroke="#8b4513" points="585.967,-983.8186 589.5884,-977.5827 596.7374,-978.527 593.1161,-984.7629 585.967,-983.8186"/>
</g>
<!-- blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff -->
<g id="edge54" class="edge">
<title>blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs&#45;&gt;(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff</title>
<path fill="none" stroke="#8b4513" d="M447.7449,-1386.882C475.9141,-1390.3933 508.2574,-1388.5144 530.2096,-1369 635.1879,-1275.6796 485.5288,-1165.1683 573.911,-1056 576.143,-1053.2431 578.642,-1050.7314 581.3437,-1048.443"/>
<polygon fill="#8b4513" stroke="#8b4513" points="598.0233,-1042.9193 604.9597,-1034.9107 594.543,-1036.8457 598.0233,-1042.9193"/>
<polyline fill="none" stroke="#8b4513" points="596.2831,-1039.8825 591.9449,-1042.3684 "/>
<polygon fill="none" stroke="#8b4513" points="581.5331,-1048.3345 584.7503,-1041.8808 591.9449,-1042.3684 588.7277,-1048.822 581.5331,-1048.3345"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 61 KiB