This commit is contained in:
number571 2026-06-01 23:22:20 +07:00
parent aec4252865
commit feef44f0cd
9 changed files with 193 additions and 237 deletions

View File

@ -29,6 +29,7 @@ type sNode struct {
fMutex sync.RWMutex
fState state.IState
fSettings ISettings
fHandlerF IHandlerF
fLogger logger.ILogger
fAdapter adapters.IAdapter
fKVDatavase database.IKVDatabase
@ -40,6 +41,7 @@ type sNode struct {
func NewNode(
pSett ISettings,
pHandlerF IHandlerF,
pLogger logger.ILogger,
pAdapter adapters.IAdapter,
pKVDatavase database.IKVDatabase,
@ -49,6 +51,7 @@ func NewNode(
return &sNode{
fState: state.NewBoolState(),
fSettings: pSett,
fHandlerF: pHandlerF,
fLogger: pLogger,
fAdapter: pAdapter,
fKVDatavase: pKVDatavase,
@ -156,11 +159,6 @@ func (p *sNode) GetKeysContainer() layer2.IKeysContainer {
return p.fKeysContainer
}
func (p *sNode) HandleFunc(pHead uint32, pHandle IHandlerF) INode {
p.setRoute(pHead, pHandle)
return p
}
// Send message without response waiting.
func (p *sNode) SendPayload(
_ context.Context,
@ -338,15 +336,8 @@ func (p *sNode) handleRequest(
pHead iHead,
pBody []byte,
) {
// get function by payload head
f, ok := p.getRoute(pHead.getRoute())
if !ok || f == nil {
p.fLogger.PushWarn(pLogBuilder.WithType(anon_logger.CLogWarnUnknownRoute))
return
}
// response can be nil
resp, err := f(pCtx, p, pSender, pBody)
resp, err := p.fHandlerF(pCtx, p, pSender, pBody)
if err != nil {
p.fLogger.PushWarn(pLogBuilder.WithType(anon_logger.CLogWarnIncorrectResponse))
return
@ -459,21 +450,6 @@ func (p *sNode) storeHashIntoDatabase(pLogBuilder anon_logger.ILogBuilder, pNetM
return nil
}
func (p *sNode) setRoute(pHead uint32, pHandle IHandlerF) {
p.fMutex.Lock()
defer p.fMutex.Unlock()
p.fHandleRoutes[pHead] = pHandle
}
func (p *sNode) getRoute(pHead uint32) (IHandlerF, bool) {
p.fMutex.RLock()
defer p.fMutex.RUnlock()
f, ok := p.fHandleRoutes[pHead]
return f, ok
}
func (p *sNode) getAction(pActionKey string) (chan []byte, bool) {
p.fMutex.RLock()
defer p.fMutex.RUnlock()

View File

@ -56,7 +56,9 @@ func TestNodeSettings(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
node, _, _ := testRunNodeWithDB(ctx, time.Minute, "", &tsDatabase{})
node, _, _ := testRunNodeWithDB(ctx, time.Minute, "", &tsDatabase{}, func(ctx context.Context, i INode, ik layer2.IParticipantKey, b []byte) ([]byte, error) {
return nil, nil
})
defer testFreeNodes([]INode{node}, 9)
sett := node.GetSettings()
@ -107,7 +109,9 @@ func TestComplexFetchPayload(t *testing.T) {
defer cancel()
addresses := [2]string{testutils.TgAddrs[2], testutils.TgAddrs[3]}
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 0)
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 0, func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
return []byte(string(reqBytes) + " (response)"), nil
})
if nodes[0] == nil {
t.Fatal("nodes is null")
}
@ -150,7 +154,9 @@ func TestF2FWithoutFriends(t *testing.T) {
// 3 seconds for wait
addresses := [2]string{testutils.TgAddrs[10], testutils.TgAddrs[11]}
nodes, privKeys := testRunNodes(ctx, t, 3*time.Second, addresses, 1)
nodes, privKeys := testRunNodes(ctx, t, 3*time.Second, addresses, 1, func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
return []byte(string(reqBytes) + " (response)"), nil
})
if nodes[0] == nil {
t.Fatal("nodes is null")
}
@ -179,19 +185,14 @@ func TestFetchPayload(t *testing.T) {
defer cancel()
addresses := [2]string{testutils.TgAddrs[12], testutils.TgAddrs[13]}
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 4)
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 4, func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
return []byte(fmt.Sprintf("echo: '%s'", string(reqBytes))), nil
})
if nodes[0] == nil {
t.Fatal("nodes is null")
}
defer testFreeNodes(nodes[:], 4)
nodes[1].HandleFunc(
tcHead,
func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
return []byte(fmt.Sprintf("echo: '%s'", string(reqBytes))), nil
},
)
largeBodySize := nodes[0].GetQBProcessor().GetScheme().GetPayloadLimit() - encoding.CSizeUint64 + 1
_, err := nodes[0].FetchPayload(
ctx,
@ -222,23 +223,18 @@ func TestBroadcastPayload(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
chResult := make(chan string)
addresses := [2]string{testutils.TgAddrs[14], testutils.TgAddrs[15]}
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 3)
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 3, func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
res := fmt.Sprintf("echo: '%s'", string(reqBytes))
go func() { chResult <- res }()
return nil, nil
})
if nodes[0] == nil {
t.Fatal("nodes is null")
}
defer testFreeNodes(nodes[:], 3)
chResult := make(chan string)
nodes[1].HandleFunc(
tcHead,
func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
res := fmt.Sprintf("echo: '%s'", string(reqBytes))
go func() { chResult <- res }()
return nil, nil
},
)
largeBodySize := nodes[0].GetQBProcessor().GetScheme().GetPayloadLimit() - encoding.CSizeUint64 + 1
err := nodes[0].SendPayload(
context.Background(),
@ -276,7 +272,9 @@ func TestEnqueuePayload(t *testing.T) {
defer cancel()
addresses := [2]string{testutils.TgAddrs[16], testutils.TgAddrs[17]}
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 8)
nodes, privKeys := testRunNodes(ctx, t, time.Minute, addresses, 8, func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
return []byte(string(reqBytes) + " (response)"), nil
})
if nodes[0] == nil {
t.Fatal("nodes is null")
}
@ -321,7 +319,9 @@ func TestHandleWrapper(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
_node, _, privKey := testRunNode(ctx, time.Minute, "", 7, 0)
_node, _, privKey := testRunNode(ctx, time.Minute, "", 7, 0, func(_ context.Context, _ INode, _ layer2.IParticipantKey, _ []byte) ([]byte, error) {
return nil, errors.New("some error") //nolint:err113
})
defer testFreeNodes([]INode{_node}, 7)
node := _node.(*sNode)
@ -372,13 +372,6 @@ func TestHandleWrapper(t *testing.T) {
t.Fatal(err) // works only logger
}
node.HandleFunc(
111,
func(_ context.Context, _ INode, _ layer2.IParticipantKey, _ []byte) ([]byte, error) {
return nil, errors.New("some error") //nolint:err113
},
)
msg2, err := scheme.EncryptMessage(
pubKey,
payload.NewPayload64(
@ -445,7 +438,9 @@ func TestStoreHashWithBroadcastMessage(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
_node, _, privKey := testRunNode(ctx, time.Minute, "", 6, 0)
_node, _, privKey := testRunNode(ctx, time.Minute, "", 6, 0, func(ctx context.Context, i INode, ik layer2.IParticipantKey, b []byte) ([]byte, error) {
return nil, nil
})
defer testFreeNodes([]INode{_node}, 6)
node := _node.(*sNode)
@ -487,7 +482,9 @@ func TestRecvSendMessage(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
_node, _, privKey := testRunNode(ctx, time.Minute, "", 5, 0)
_node, _, privKey := testRunNode(ctx, time.Minute, "", 5, 0, func(ctx context.Context, i INode, ik layer2.IParticipantKey, b []byte) ([]byte, error) {
return nil, nil
})
defer testFreeNodes([]INode{_node}, 5)
node := _node.(*sNode)
@ -549,14 +546,14 @@ func TestRecvSendMessage(t *testing.T) {
// nodes[2], nodes[3], nodes[4] = routes
// nodes[2], nodes[4] are have open ports
// Scheme: (nodes[0]) -> nodes[2] -> nodes[3] -> nodes[4] -> (nodes[1])
func testRunNodes(ctx context.Context, t *testing.T, timeWait time.Duration, addresses [2]string, typeDB int) ([5]INode, [5]asymmetric.IPrivKey) {
func testRunNodes(ctx context.Context, t *testing.T, timeWait time.Duration, addresses [2]string, typeDB int, handlerF IHandlerF) ([5]INode, [5]asymmetric.IPrivKey) {
nodes := [5]INode{}
networkNodes := [5]network.INode{}
privKeys := [5]asymmetric.IPrivKey{}
addrs := [5]string{"", "", addresses[0], "", addresses[1]}
for i := 0; i < 5; i++ {
nodes[i], networkNodes[i], privKeys[i] = testRunNode(ctx, timeWait, addrs[i], typeDB, i)
nodes[i], networkNodes[i], privKeys[i] = testRunNode(ctx, timeWait, addrs[i], typeDB, i, handlerF)
if nodes[i] == nil {
t.Errorf("node (%d) is not running %d", i, typeDB)
return [5]INode{}, [5]asymmetric.IPrivKey{}
@ -569,16 +566,6 @@ func testRunNodes(ctx context.Context, t *testing.T, timeWait time.Duration, add
nodes[0].GetKeysContainer().Add(pubKey1)
nodes[1].GetKeysContainer().Add(pubKey0)
for _, node := range nodes {
node.HandleFunc(
tcHead,
func(_ context.Context, _ INode, _ layer2.IParticipantKey, reqBytes []byte) ([]byte, error) {
// send response
return []byte(string(reqBytes) + " (response)"), nil
},
)
}
go func() {
if err := networkNodes[2].Run(ctx); err != nil && !errors.Is(err, net.ErrClosed) && !errors.Is(err, context.Canceled) {
t.Error(err)
@ -645,7 +632,7 @@ func (p *stLogging) HasErro() bool {
}
*/
func testRunNodeWithDB(ctx context.Context, timeWait time.Duration, addr string, db database.IKVDatabase) (INode, network.INode, asymmetric.IPrivKey) {
func testRunNodeWithDB(ctx context.Context, timeWait time.Duration, addr string, db database.IKVDatabase, handlerF IHandlerF) (INode, network.INode, asymmetric.IPrivKey) {
privKey := asymmetric.NewPrivKey()
msgChan := make(chan layer1.IMessage)
parallel := uint64(1)
@ -678,6 +665,7 @@ func testRunNodeWithDB(ctx context.Context, timeWait time.Duration, addr string,
FServiceName: "TEST",
FFetchTimeout: timeWait,
}),
handlerF,
// internal_std_logger.NewStdLogger(&stLogging{}, internal_anon_logger.GetLogFunc()),
logger.NewLogger(
logger.NewSettings(&logger.SSettings{}),
@ -721,12 +709,12 @@ func testRunNodeWithDB(ctx context.Context, timeWait time.Duration, addr string,
return node, networkNode, privKey
}
func testRunNode(ctx context.Context, timeWait time.Duration, addr string, typeDB, numDB int) (INode, network.INode, asymmetric.IPrivKey) {
func testRunNode(ctx context.Context, timeWait time.Duration, addr string, typeDB, numDB int, handlerF IHandlerF) (INode, network.INode, asymmetric.IPrivKey) {
db, err := database.NewKVDatabase(fmt.Sprintf(tcPathDBTemplate, typeDB, numDB))
if err != nil {
panic(err)
}
return testRunNodeWithDB(ctx, timeWait, addr, db)
return testRunNodeWithDB(ctx, timeWait, addr, db, handlerF)
}
func testFreeNodes(nodes []INode, typeDB int) {

View File

@ -69,6 +69,9 @@ func newNode(serviceName, address string) *sNode {
FServiceName: serviceName,
FFetchTimeout: time.Minute,
}),
func(_ context.Context, _ anonymity.INode, _ layer2.IParticipantKey, b []byte) ([]byte, error) {
return []byte("echo: " + string(b)), nil
},
logger.NewLogger(
logger.NewSettings(&logger.SSettings{
FInfo: os.Stdout,

View File

@ -5,8 +5,6 @@ import (
"fmt"
"time"
anonymity "github.com/number571/go-peer/pkg/anonymity/qb"
"github.com/number571/go-peer/pkg/crypto/scheme/layer2"
"github.com/number571/go-peer/pkg/payload"
)
@ -49,12 +47,6 @@ func runClientNode() *sNode {
func runServiceNode() *sNode {
ctx := context.Background()
node := newNode("snode", nodeAddress)
node.fAnonymity.HandleFunc(
nodeRouter,
func(_ context.Context, _ anonymity.INode, _ layer2.IParticipantKey, b []byte) ([]byte, error) {
return []byte("echo: " + string(b)), nil
},
)
go func() { _ = node.fAnonymity.Run(ctx) }()
go func() { _ = node.fNetwork.Run(ctx) }()

View File

@ -16,9 +16,11 @@ import (
"github.com/number571/go-peer/pkg/crypto/scheme/layer1"
"github.com/number571/go-peer/pkg/crypto/scheme/layer2"
"github.com/number571/go-peer/pkg/crypto/scheme/layer2/hybrid"
"github.com/number571/go-peer/pkg/encoding"
"github.com/number571/go-peer/pkg/logger"
"github.com/number571/go-peer/pkg/network"
"github.com/number571/go-peer/pkg/network/conn"
"github.com/number571/go-peer/pkg/payload"
"github.com/number571/go-peer/pkg/storage/cache"
"github.com/number571/go-peer/pkg/storage/database"
)
@ -69,6 +71,7 @@ func newNode(serviceName, address string) *sNode {
FServiceName: serviceName,
FFetchTimeout: time.Minute,
}),
handler,
logger.NewLogger(
logger.NewSettings(&logger.SSettings{
FInfo: os.Stdout,
@ -141,3 +144,25 @@ func exchangeKeys(node1, node2 *sNode) (layer2.IParticipantKey, layer2.IParticip
return pubKey1, pubKey2
}
var (
handler = func(ctx context.Context, n anonymity.INode, pKey layer2.IParticipantKey, b []byte) ([]byte, error) {
numBytes := [encoding.CSizeUint64]byte{}
copy(numBytes[:], b)
num := encoding.BytesToUint64(numBytes)
msg := "ping"
if num%2 == 1 {
msg = "pong"
}
fmt.Printf("%s-%d\n", msg, num)
numBytes = encoding.Uint64ToBytes(num + 1)
_ = n.SendPayload(
ctx,
pKey,
payload.NewPayload64(uint64(nodeRouter), numBytes[:]),
)
return nil, nil
}
)

View File

@ -2,11 +2,8 @@ package main
import (
"context"
"fmt"
"time"
anonymity "github.com/number571/go-peer/pkg/anonymity/qb"
"github.com/number571/go-peer/pkg/crypto/scheme/layer2"
"github.com/number571/go-peer/pkg/encoding"
"github.com/number571/go-peer/pkg/payload"
)
@ -16,28 +13,6 @@ const (
nodeRouter = uint32(0xA557711A)
)
var (
handler = func(ctx context.Context, n anonymity.INode, pKey layer2.IParticipantKey, b []byte) ([]byte, error) {
numBytes := [encoding.CSizeUint64]byte{}
copy(numBytes[:], b)
num := encoding.BytesToUint64(numBytes)
msg := "ping"
if num%2 == 1 {
msg = "pong"
}
fmt.Printf("%s-%d\n", msg, num)
numBytes = encoding.Uint64ToBytes(num + 1)
_ = n.SendPayload(
ctx,
pKey,
payload.NewPayload64(uint64(nodeRouter), numBytes[:]),
)
return nil, nil
}
)
func init() {
printTagVersion()
}
@ -61,7 +36,6 @@ func main() {
func runClientNode() *sNode {
ctx := context.Background()
node := newNode("cnode", "")
node.fAnonymity.HandleFunc(nodeRouter, handler)
go func() { _ = node.fAnonymity.Run(ctx) }()
_ = node.fNetwork.AddConnection(ctx, nodeAddress)
@ -72,7 +46,6 @@ func runClientNode() *sNode {
func runServiceNode() *sNode {
ctx := context.Background()
node := newNode("snode", nodeAddress)
node.fAnonymity.HandleFunc(nodeRouter, handler)
go func() { _ = node.fAnonymity.Run(ctx) }()
go func() { _ = node.fNetwork.Run(ctx) }()

View File

@ -19,7 +19,6 @@ type (
type INode interface {
types.IRunner
HandleFunc(uint32, IHandlerF) INode
GetLogger() logger.ILogger
GetSettings() ISettings

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="20" role="img" aria-label="code lines: 12931"><title>code lines: 12931</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="96" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="57" height="20" fill="#555"/><rect x="57" width="40" height="20" fill="#4682b4"/><rect width="96" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="295" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">code lines</text><text x="295" y="140" transform="scale(.1)" fill="#fff" textLength="510">code lines</text><text aria-hidden="true" x="770" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="320">12931</text><text x="770" y="140" transform="scale(.1)" fill="#fff" textLength="320">12931</text></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="20" role="img" aria-label="code lines: 12887"><title>code lines: 12887</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="96" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="57" height="20" fill="#555"/><rect x="57" width="40" height="20" fill="#4682b4"/><rect width="96" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="295" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">code lines</text><text x="295" y="140" transform="scale(.1)" fill="#fff" textLength="510">code lines</text><text aria-hidden="true" x="770" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="320">12887</text><text x="770" y="140" transform="scale(.1)" fill="#fff" textLength="320">12887</text></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -7,7 +7,7 @@
>
<g>
<rect x="20.000000" y="20.000000" width="988.000000" height="600.000000" style="fill: rgb(4, 115, 61);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="20.000000" y="20.000000" width="988.000000" height="600.000000" style="fill: rgb(5, 116, 61);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -20,7 +20,7 @@
<g>
<rect x="28.000000" y="41.600000" width="961.936809" height="570.400000" style="fill: rgb(4, 116, 61);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="28.000000" y="41.600000" width="961.832402" height="570.400000" style="fill: rgb(5, 116, 61);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -33,18 +33,18 @@
<g>
<rect x="997.936809" y="41.600000" width="2.063191" height="570.400000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="997.832402" y="41.600000" width="2.167598" height="570.400000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="383.924279" y="63.200000" width="449.554686" height="290.598336" style="fill: rgb(3, 114, 60);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="387.533393" y="63.200000" width="444.301171" height="285.066667" style="fill: rgb(4, 114, 60);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(391.924279,78.800000) scale(1.000000)"
transform="translate(395.533393,78.800000) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">anonymity/qb</text>
@ -52,7 +52,7 @@
<g>
<rect x="36.000000" y="63.200000" width="339.924279" height="540.800000" style="fill: rgb(4, 115, 61);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="36.000000" y="63.200000" width="343.533393" height="540.800000" style="fill: rgb(4, 115, 61);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -65,12 +65,12 @@
<g>
<rect x="841.478965" y="445.952821" width="140.457843" height="70.802051" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="839.834565" y="445.952821" width="141.997837" height="70.802051" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(849.478965,461.552821) scale(1.000000)"
transform="translate(847.834565,461.552821) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">encoding</text>
@ -78,12 +78,12 @@
<g>
<rect x="841.478965" y="350.264615" width="140.457843" height="87.688205" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="839.834565" y="350.264615" width="141.997837" height="87.688205" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(849.478965,365.864615) scale(1.000000)"
transform="translate(847.834565,365.864615) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">logger</text>
@ -91,12 +91,12 @@
<g>
<rect x="383.924279" y="361.798336" width="449.554686" height="242.201664" style="fill: rgb(8, 123, 65);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="387.533393" y="356.266667" width="444.301171" height="247.733333" style="fill: rgb(10, 126, 67);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(391.924279,377.398336) scale(1.000000)"
transform="translate(395.533393,371.866667) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">network</text>
@ -104,12 +104,12 @@
<g>
<rect x="841.478965" y="240.504615" width="140.457843" height="101.760000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="839.834565" y="240.504615" width="141.997837" height="101.760000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(849.478965,256.104615) scale(1.000000)"
transform="translate(847.834565,256.104615) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">payload</text>
@ -117,12 +117,12 @@
<g>
<rect x="841.478965" y="524.754872" width="87.779254" height="79.245128" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="839.834565" y="524.754872" width="88.772798" height="79.245128" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(849.478965,540.354872) scale(1.000000)"
transform="translate(847.834565,540.354872) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">state</text>
@ -130,12 +130,12 @@
<g>
<rect x="841.478965" y="63.200000" width="140.457843" height="169.304615" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="839.834565" y="63.200000" width="141.997837" height="169.304615" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(849.478965,78.800000) scale(1.000000)"
transform="translate(847.834565,78.800000) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">storage</text>
@ -143,12 +143,12 @@
<g>
<rect x="937.258219" y="524.754872" width="44.678590" height="79.245128" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="936.607363" y="524.754872" width="45.225039" height="79.245128" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(945.258219,540.354872) scale(0.165964)"
transform="translate(944.607363,540.354872) scale(0.169126)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">types/converter.go</text>
@ -156,12 +156,12 @@
<g>
<rect x="739.835834" y="272.341093" width="45.510361" height="32.728621" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="735.474759" y="268.484507" width="47.062746" height="31.891080" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(747.835834,287.941093) scale(0.341555)"
transform="translate(743.474759,284.084507) scale(0.359523)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">action.go</text>
@ -169,18 +169,18 @@
<g>
<rect x="793.346195" y="317.595117" width="22.099578" height="28.203219" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="790.537505" y="312.807929" width="22.972795" height="27.458738" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="391.924279" y="84.800000" width="241.809226" height="260.998336" style="fill: rgb(2, 112, 59);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="395.533393" y="84.800000" width="230.992998" height="255.466667" style="fill: rgb(3, 112, 59);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(399.924279,100.400000) scale(1.000000)"
transform="translate(403.533393,100.400000) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">anonymity.go</text>
@ -188,18 +188,18 @@
<g>
<rect x="823.445773" y="317.595117" width="2.033193" height="28.203219" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="821.510300" y="312.807929" width="2.324265" height="27.458738" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="793.346195" y="272.341093" width="32.132771" height="37.254024" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="790.537505" y="268.484507" width="33.297059" height="36.323422" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(801.346195,287.941093) scale(0.240071)"
transform="translate(798.537505,284.084507) scale(0.257397)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">head.go</text>
@ -207,12 +207,12 @@
<g>
<rect x="641.733505" y="272.341093" width="90.102328" height="73.457243" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="634.526392" y="268.484507" width="92.948368" height="71.782160" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(649.733505,287.941093) scale(0.367571)"
transform="translate(642.526392,284.084507) scale(0.381688)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">logger/log_builder.go</text>
@ -220,12 +220,12 @@
<g>
<rect x="641.733505" y="84.800000" width="183.745460" height="179.541093" style="fill: rgb(8, 123, 65);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="634.526392" y="84.800000" width="189.308173" height="175.684507" style="fill: rgb(8, 123, 65);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(649.733505,100.400000) scale(1.000000)"
transform="translate(642.526392,100.400000) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">queue</text>
@ -233,12 +233,12 @@
<g>
<rect x="739.835834" y="313.069715" width="45.510361" height="32.728621" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="735.474759" y="308.375587" width="47.062746" height="31.891080" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(747.835834,328.669715) scale(0.279454)"
transform="translate(743.474759,323.975587) scale(0.294155)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">settings.go</text>
@ -246,7 +246,7 @@
<g>
<rect x="44.000000" y="332.470897" width="153.101324" height="263.529103" style="fill: rgb(3, 112, 59);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="44.000000" y="332.470897" width="154.853028" height="263.529103" style="fill: rgb(3, 112, 59);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -259,12 +259,12 @@
<g>
<rect x="291.682822" y="442.848581" width="76.241457" height="77.052138" style="fill: rgb(12, 129, 68);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="294.375953" y="442.848581" width="77.157441" height="77.052138" style="fill: rgb(12, 129, 68);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(299.682822,458.448581) scale(0.896450)"
transform="translate(302.375953,458.448581) scale(0.910081)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">hashing</text>
@ -272,18 +272,18 @@
<g>
<rect x="366.013519" y="527.900719" width="1.910760" height="68.099281" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="369.514871" y="527.900719" width="2.018522" height="68.099281" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="205.101324" y="442.848581" width="78.581498" height="153.151419" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="206.853028" y="442.848581" width="79.522925" height="153.151419" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(213.101324,458.448581) scale(0.407432)"
transform="translate(214.853028,458.448581) scale(0.413561)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">puzzle/puzzle.go</text>
@ -291,12 +291,12 @@
<g>
<rect x="291.682822" y="527.900719" width="66.330698" height="68.099281" style="fill: rgb(16, 136, 71);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="294.375953" y="527.900719" width="67.138918" height="68.099281" style="fill: rgb(16, 136, 71);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(299.682822,543.500719) scale(0.327674)"
transform="translate(302.375953,543.500719) scale(0.332936)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">random/random.go</text>
@ -304,7 +304,7 @@
<g>
<rect x="44.000000" y="84.800000" width="323.924279" height="239.670897" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="44.000000" y="84.800000" width="327.533393" height="239.670897" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -317,12 +317,12 @@
<g>
<rect x="205.101324" y="332.470897" width="162.822955" height="102.377684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="206.853028" y="332.470897" width="164.680366" height="102.377684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(213.101324,348.070897) scale(1.000000)"
transform="translate(214.853028,348.070897) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">symmetric</text>
@ -330,12 +330,12 @@
<g>
<rect x="849.478965" y="467.552821" width="48.767647" height="41.202051" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="847.834565" y="467.552821" width="49.427645" height="41.202051" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(857.478965,483.152821) scale(0.426662)"
transform="translate(855.834565,483.152821) scale(0.435256)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">bytes.go</text>
@ -343,30 +343,30 @@
<g>
<rect x="953.552985" y="508.554530" width="20.383824" height="0.200342" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="953.118580" y="508.554530" width="20.713822" height="0.200342" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="906.246613" y="467.552821" width="39.306373" height="16.601026" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="905.262209" y="467.552821" width="39.856371" height="16.601026" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="906.246613" y="492.153846" width="39.306373" height="16.601026" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="905.262209" y="492.153846" width="39.856371" height="16.601026" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="953.552985" y="467.552821" width="20.383824" height="33.001709" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="953.118580" y="467.552821" width="20.713822" height="33.001709" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(961.552985,483.152821) scale(0.026862)"
transform="translate(961.118580,483.152821) scale(0.028884)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">serialize_yaml.go</text>
@ -374,12 +374,12 @@
<g>
<rect x="849.478965" y="371.864615" width="104.978749" height="58.088205" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="847.834565" y="371.864615" width="106.292273" height="58.088205" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(857.478965,387.464615) scale(1.000000)"
transform="translate(855.834565,387.464615) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">logger.go</text>
@ -387,18 +387,18 @@
<g>
<rect x="962.457714" y="371.864615" width="11.479095" height="58.088205" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="962.126838" y="371.864615" width="11.705564" height="58.088205" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="596.586488" y="383.398336" width="146.705292" height="212.601664" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="597.760579" y="377.866667" width="144.864644" height="218.133333" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(604.586488,398.998336) scale(1.000000)"
transform="translate(605.760579,393.466667) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">conn</text>
@ -406,12 +406,12 @@
<g>
<rect x="751.291779" y="383.398336" width="74.187186" height="143.393299" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="750.625223" y="377.866667" width="73.209342" height="147.189542" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(759.291779,398.998336) scale(0.606117)"
transform="translate(758.625223,393.466667) scale(0.595931)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">connkeeper</text>
@ -419,12 +419,12 @@
<g>
<rect x="391.924279" y="383.398336" width="196.662209" height="212.601664" style="fill: rgb(22, 145, 76);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="395.533393" y="377.866667" width="194.227185" height="218.133333" style="fill: rgb(29, 153, 80);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(399.924279,398.998336) scale(1.000000)"
transform="translate(403.533393,393.466667) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(0, 0, 0); fill-opacity: 1.00; white-space: pre;"
data-math="N">network.go</text>
@ -432,12 +432,12 @@
<g>
<rect x="751.291779" y="534.791635" width="69.050487" height="61.208365" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="750.625223" y="533.056209" width="68.133758" height="62.943791" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(759.291779,550.391635) scale(0.502372)"
transform="translate(758.625223,548.656209) scale(0.493691)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">settings.go</text>
@ -445,12 +445,12 @@
<g>
<rect x="849.478965" y="262.104615" width="56.530744" height="72.160000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="847.834565" y="262.104615" width="57.280998" height="72.160000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(857.478965,277.704615) scale(0.703659)"
transform="translate(855.834565,277.704615) scale(0.716684)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">joiner</text>
@ -458,12 +458,12 @@
<g>
<rect x="914.009710" y="262.104615" width="59.927099" height="32.080000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="913.115563" y="262.104615" width="60.716840" height="32.080000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(922.009710,277.704615) scale(0.381312)"
transform="translate(921.115563,277.704615) scale(0.388167)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">payload32.go</text>
@ -471,12 +471,12 @@
<g>
<rect x="914.009710" y="302.184615" width="59.927099" height="32.080000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="913.115563" y="302.184615" width="60.716840" height="32.080000" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(922.009710,317.784615) scale(0.381312)"
transform="translate(921.115563,317.784615) scale(0.388167)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">payload64.go</text>
@ -484,12 +484,12 @@
<g>
<rect x="849.478965" y="546.354872" width="67.790291" height="49.645128" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="847.834565" y="546.354872" width="68.734158" height="49.645128" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(857.478965,561.954872) scale(0.674353)"
transform="translate(855.834565,561.954872) scale(0.686643)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">state.go</text>
@ -497,12 +497,12 @@
<g>
<rect x="849.478965" y="178.580708" width="124.457843" height="45.923907" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="847.834565" y="178.580708" width="125.997837" height="45.923907" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(857.478965,194.180708) scale(0.941474)"
transform="translate(855.834565,194.180708) scale(0.954842)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">cache/lru.go</text>
@ -510,12 +510,12 @@
<g>
<rect x="849.478965" y="84.800000" width="124.457843" height="85.780708" style="fill: rgb(11, 128, 67);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="847.834565" y="84.800000" width="125.997837" height="85.780708" style="fill: rgb(11, 128, 67);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(857.478965,100.400000) scale(1.000000)"
transform="translate(855.834565,100.400000) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">database</text>
@ -523,18 +523,18 @@
<g>
<rect x="798.850865" y="253.811687" width="18.628100" height="2.529406" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="796.363629" y="250.212207" width="19.470935" height="2.272300" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="649.733505" y="106.400000" width="141.117360" height="149.941093" style="fill: rgb(10, 126, 67);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="642.526392" y="106.400000" width="145.837238" height="146.084507" style="fill: rgb(10, 126, 67);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(657.733505,122.000000) scale(1.000000)"
transform="translate(650.526392,122.000000) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">queue.go</text>
@ -542,12 +542,12 @@
<g>
<rect x="798.850865" y="106.400000" width="18.628100" height="139.411687" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="796.363629" y="106.400000" width="19.470935" height="135.812207" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(806.850865,122.000000) scale(0.024887)"
transform="translate(804.363629,122.000000) scale(0.032869)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">settings.go</text>
@ -555,12 +555,12 @@
<g>
<rect x="52.000000" y="464.607470" width="65.702260" height="123.392530" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="52.000000" y="464.607470" width="66.592014" height="123.392530" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(60.000000,480.207470) scale(0.862886)"
transform="translate(60.000000,480.207470) scale(0.878334)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">dsa.go</text>
@ -568,12 +568,12 @@
<g>
<rect x="125.702260" y="464.607470" width="63.399064" height="123.392530" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="126.592014" y="464.607470" width="64.261014" height="123.392530" style="fill: rgb(6, 119, 63);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(133.702260,480.207470) scale(0.822900)"
transform="translate(134.592014,480.207470) scale(0.837865)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">kem.go</text>
@ -581,7 +581,7 @@
<g>
<rect x="52.000000" y="354.070897" width="137.101324" height="102.536573" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="52.000000" y="354.070897" width="138.853028" height="102.536573" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -594,12 +594,12 @@
<g>
<rect x="299.682822" y="464.448581" width="31.508212" height="47.452138" style="fill: rgb(23, 148, 78);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="302.375953" y="464.448581" width="32.038518" height="47.452138" style="fill: rgb(23, 148, 78);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(307.682822,480.048581) scale(0.161544)"
transform="translate(310.375953,480.048581) scale(0.167068)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(0, 0, 0); fill-opacity: 1.00; white-space: pre;"
data-math="N">hashing.go</text>
@ -607,12 +607,12 @@
<g>
<rect x="339.191034" y="464.448581" width="20.733245" height="47.452138" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="342.414471" y="464.448581" width="21.118922" height="47.452138" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(347.191034,480.048581) scale(0.070435)"
transform="translate(350.414471,480.048581) scale(0.076174)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">hmac.go</text>
@ -620,12 +620,12 @@
<g>
<rect x="296.913776" y="106.400000" width="63.010503" height="210.070897" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="299.711667" y="106.400000" width="63.821726" height="210.070897" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(304.913776,122.000000) scale(0.816155)"
transform="translate(307.711667,122.000000) scale(0.830238)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">layer1</text>
@ -633,7 +633,7 @@
<g>
<rect x="52.000000" y="106.400000" width="236.913776" height="210.070897" style="fill: rgb(9, 123, 65);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="52.000000" y="106.400000" width="239.711667" height="210.070897" style="fill: rgb(9, 123, 65);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -646,12 +646,12 @@
<g>
<rect x="278.126965" y="354.070897" width="47.736264" height="72.777684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="280.658781" y="354.070897" width="48.404932" height="72.777684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(286.126965,369.670897) scale(0.550977)"
transform="translate(288.658781,369.670897) scale(0.562586)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">cfb.go</text>
@ -659,12 +659,12 @@
<g>
<rect x="333.863229" y="354.070897" width="26.061050" height="72.777684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="337.063713" y="354.070897" width="26.469680" height="72.777684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(341.863229,369.670897) scale(0.116447)"
transform="translate(345.063713,369.670897) scale(0.121177)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">cipher.go</text>
@ -672,12 +672,12 @@
<g>
<rect x="213.101324" y="354.070897" width="57.025641" height="72.777684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="214.853028" y="354.070897" width="57.805754" height="72.777684" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(221.101324,369.670897) scale(0.712251)"
transform="translate(222.853028,369.670897) scale(0.725794)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">gcm.go</text>
@ -685,12 +685,12 @@
<g>
<rect x="604.586488" y="404.998336" width="130.705292" height="141.220050" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="605.760579" y="399.466667" width="128.864644" height="145.541667" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(612.586488,420.598336) scale(1.000000)"
transform="translate(613.760579,415.066667) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">conn.go</text>
@ -698,12 +698,12 @@
<g>
<rect x="604.586488" y="554.218386" width="124.100278" height="33.781614" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="605.760579" y="553.008333" width="122.347280" height="34.991667" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(612.586488,569.818386) scale(1.000000)"
transform="translate(613.760579,568.608333) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">settings.go</text>
@ -711,12 +711,12 @@
<g>
<rect x="759.291779" y="404.998336" width="58.187186" height="82.475022" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="758.625223" y="399.466667" width="57.209342" height="85.295089" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(767.291779,420.598336) scale(0.338038)"
transform="translate(766.625223,415.066667) scale(0.330203)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">connkeeper.go</text>
@ -724,18 +724,18 @@
<g>
<rect x="759.291779" y="495.473358" width="50.833054" height="23.318277" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="758.625223" y="492.761755" width="49.963860" height="24.294454" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
</g>
<g>
<rect x="857.478965" y="283.704615" width="40.530744" height="39.898947" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="855.834565" y="283.704615" width="41.280998" height="39.898947" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(865.478965,299.304615) scale(0.232299)"
transform="translate(863.834565,299.304615) scale(0.239403)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">joiner32.go</text>
@ -743,12 +743,12 @@
<g>
<rect x="857.478965" y="106.400000" width="105.546397" height="56.180708" style="fill: rgb(12, 128, 68);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="855.834565" y="106.400000" width="107.047892" height="56.180708" style="fill: rgb(12, 128, 68);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(865.478965,122.000000) scale(0.847977)"
transform="translate(863.834565,122.000000) scale(0.862196)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">database.go</text>
@ -756,12 +756,12 @@
<g>
<rect x="304.913776" y="128.000000" width="47.010503" height="138.161104" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="307.711667" y="128.000000" width="47.821726" height="138.161104" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(312.913776,143.600000) scale(0.323026)"
transform="translate(315.711667,143.600000) scale(0.331476)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">message.go</text>
@ -769,12 +769,12 @@
<g>
<rect x="304.913776" y="274.161104" width="42.009548" height="34.309793" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="307.711667" y="274.161104" width="42.747024" height="34.309793" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(312.913776,289.761104) scale(0.246303)"
transform="translate(315.711667,289.761104) scale(0.253286)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">settings.go</text>
@ -782,7 +782,7 @@
<g>
<rect x="60.000000" y="128.000000" width="97.652512" height="180.470897" style="fill: rgb(12, 128, 68);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="60.000000" y="128.000000" width="98.943846" height="180.470897" style="fill: rgb(12, 128, 68);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
@ -795,12 +795,12 @@
<g>
<rect x="165.652512" y="239.839873" width="115.261264" height="68.631024" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="166.943846" y="239.839873" width="116.767821" height="68.631024" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(173.652512,255.439873) scale(0.795363)"
transform="translate(174.943846,255.439873) scale(0.807434)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">kcontainer.go</text>
@ -808,12 +808,12 @@
<g>
<rect x="165.652512" y="128.000000" width="115.261264" height="103.839873" style="fill: rgb(13, 130, 69);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="166.943846" y="128.000000" width="116.767821" height="103.839873" style="fill: rgb(13, 130, 69);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(173.652512,143.600000) scale(1.000000)"
transform="translate(174.943846,143.600000) scale(1.000000)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">symmetric</text>
@ -821,12 +821,12 @@
<g>
<rect x="68.000000" y="269.771576" width="76.933959" height="30.699321" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="68.000000" y="269.771576" width="78.157328" height="30.699321" style="fill: rgb(0, 104, 55);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(76.000000,285.371576) scale(0.634729)"
transform="translate(76.000000,285.371576) scale(0.647472)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">message.go</text>
@ -834,12 +834,12 @@
<g>
<rect x="68.000000" y="149.600000" width="81.652512" height="112.171576" style="fill: rgb(16, 136, 72);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="68.000000" y="149.600000" width="82.943846" height="112.171576" style="fill: rgb(16, 136, 72);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(76.000000,165.200000) scale(0.759867)"
transform="translate(76.000000,165.200000) scale(0.774813)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">scheme.go</text>
@ -847,12 +847,12 @@
<g>
<rect x="173.652512" y="149.600000" width="97.274944" height="74.239873" style="fill: rgb(13, 131, 69);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<rect x="174.943846" y="149.600000" width="98.753602" height="74.239873" style="fill: rgb(13, 131, 69);opacity:1;fill-opacity:1.00;stroke:rgb(128,128,128);stroke-width:1px;stroke-opacity:1.00;" />
<text
data-notex="1"
text-anchor="start"
transform="translate(181.652512,165.200000) scale(0.940682)"
transform="translate(182.943846,165.200000) scale(0.957796)"
style="font-family: Open Sans, verdana, arial, sans-serif !important; font-size: 12px; fill: rgb(255, 255, 255); fill-opacity: 1.00; white-space: pre;"
data-math="N">scheme.go</text>

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB