Commit 9a458707 authored by pfandzelter's avatar pfandzelter
Browse files

multi node fred now enabled

parent 6f6d2e3c
......@@ -6,9 +6,6 @@
## Setup
In order to run zmq please install [zmq](https://zeromq.org/download/) and [czmq](http://czmq.zeromq.org/page:get-the-software).
On Arch, this is done by running `yay -S czmq-git`. Or use the Docker image.
To use Terraform, install [Terraform](https://www.terraform.io/downloads.html).
## Git Workflow
......
......@@ -6,7 +6,6 @@ import (
"syscall"
"github.com/BurntSushi/toml"
"github.com/alecthomas/kingpin"
"github.com/go-errors/errors"
"github.com/mmcloughlin/geohash"
"github.com/rs/zerolog"
......@@ -15,6 +14,7 @@ import (
"gitlab.tu-berlin.de/mcc-fred/fred/pkg/dynamo"
"gitlab.tu-berlin.de/mcc-fred/fred/pkg/peering"
"gitlab.tu-berlin.de/mcc-fred/fred/pkg/storageclient"
"gopkg.in/alecthomas/kingpin.v2"
"gitlab.tu-berlin.de/mcc-fred/fred/pkg/badgerdb"
"gitlab.tu-berlin.de/mcc-fred/fred/pkg/fred"
......@@ -29,17 +29,19 @@ type fredConfig struct {
Lng float64 `toml:"lng"`
} `toml:"location"`
Server struct {
Host string `toml:"host"`
Cert string `toml:"cert"`
Key string `toml:"key"`
CA string `toml:"ca"`
Host string `toml:"host"`
Proxy string `toml:"proxy"`
Cert string `toml:"cert"`
Key string `toml:"key"`
CA string `toml:"ca"`
} `toml:"server"`
Storage struct {
Adaptor string `toml:"adaptor"`
} `toml:"storage"`
Peering struct {
Host string `toml:"host"`
} `toml:"zmq"`
Host string `toml:"host"`
HostProxy string `toml:"hostproxy"`
} `toml:"peering"`
Log struct {
Level string `toml:"level"`
Handler string `toml:"handler"`
......@@ -78,13 +80,21 @@ var (
lng = kingpin.Flag("lng", "Longitude of the node.").PlaceHolder("LONGITUDE").Default("-200").Float64() // Domain: ]-180,180]
// API server configuration
grpcHost = kingpin.Flag("host", "Host address of server for external connections.").String()
grpcCert = kingpin.Flag("cert", "Certificate for external connections.").String()
grpcKey = kingpin.Flag("key", "Key file for external connections.").String()
grpcCA = kingpin.Flag("ca-file", "Certificate authority root certificate file for external connections.").String()
grpcHost = kingpin.Flag("host", "Host address of server for external connections.").String()
grpcHostProxy = kingpin.Flag("host-proxy", "Publicly reachable host address of server for external connections (if behind a proxy).").String()
grpcCert = kingpin.Flag("cert", "Certificate for external connections.").String()
grpcKey = kingpin.Flag("key", "Key file for external connections.").String()
grpcCA = kingpin.Flag("ca-file", "Certificate authority root certificate file for external connections.").String()
// peering configuration
internalHost = kingpin.Flag("zmq-host", "(Publicly reachable) address of this server for internal connections.").String()
// this is the address that grpc will bind to (locally)
peerHost = kingpin.Flag("peer-host", "local address of this peering server.").String()
// this is the address that the node will advertise to nase
peerHostProxy = kingpin.Flag("peer-host-proxy", "Publicly reachable address of this peering server (if behind a proxy)").String()
// storage configuration
adaptor = kingpin.Flag("adaptor", "Storage adaptor, can be \"remote\", \"badgerdb\", \"memory\", \"dynamo\".").Enum("remote", "badgerdb", "memory", "dynamo")
remoteStorageHost = kingpin.Flag("remote-storage-host", "Host address of GRPC Server for storage connection.").String()
remoteStorageCert = kingpin.Flag("remote-storage-cert", "Certificate for storage connection.").String()
remoteStorageKey = kingpin.Flag("remote-storage-key", "Key file for storage connection.").String()
......@@ -94,9 +104,6 @@ var (
bdbPath = kingpin.Flag("badgerdb-path", "Path to the badgerdb database").String()
// storage configuration
adaptor = kingpin.Flag("adaptor", "Storage adaptor, can be \"remote\", \"badgerdb\", \"memory\", \"dynamo\".").Enum("remote", "badgerdb", "memory", "dynamo")
// logging configuration
logLevel = kingpin.Flag("log-level", "Log level, can be \"debug\", \"info\" ,\"warn\", \"error\", \"fatal\", \"panic\".").Enum("debug", "info", "warn", "errors", "fatal", "panic")
handler = kingpin.Flag("handler", "Mode of log handler, can be \"dev\", \"prod\".").Enum("dev", "prod")
......@@ -148,6 +155,9 @@ func main() {
if *grpcHost != "" {
fc.Server.Host = *grpcHost
}
if *grpcHostProxy != "" {
fc.Server.Proxy = *grpcHostProxy
}
if *grpcCert != "" {
fc.Server.Cert = *grpcCert
}
......@@ -157,8 +167,11 @@ func main() {
if *grpcCA != "" {
fc.Server.CA = *grpcCA
}
if *internalHost != "" {
fc.Peering.Host = *internalHost
if *peerHost != "" {
fc.Peering.Host = *peerHost
}
if *peerHostProxy != "" {
fc.Peering.HostProxy = *peerHostProxy
}
if *adaptor != "" {
fc.Storage.Adaptor = *adaptor
......@@ -269,23 +282,25 @@ func main() {
c := peering.NewClient()
f := fred.New(&fred.Config{
Store: store,
Client: c,
PeeringHost: fc.Peering.Host,
NodeID: fc.General.nodeID,
NaSeHosts: []string{fc.NaSe.Host},
NaSeCert: fc.NaSe.Cert,
NaSeKey: fc.NaSe.Key,
NaSeCA: fc.NaSe.CA,
TriggerCert: fc.Trigger.Cert,
TriggerKey: fc.Trigger.Key,
Store: store,
Client: c,
PeeringHost: fc.Peering.Host,
PeeringHostProxy: fc.Peering.HostProxy,
NodeID: fc.General.nodeID,
NaSeHosts: []string{fc.NaSe.Host},
NaSeCert: fc.NaSe.Cert,
NaSeKey: fc.NaSe.Key,
NaSeCA: fc.NaSe.CA,
TriggerCert: fc.Trigger.Cert,
TriggerKey: fc.Trigger.Key,
})
log.Debug().Msg("Starting Interconnection Server...")
is := peering.NewServer(fc.Peering.Host, f.I)
log.Debug().Msg("Starting GRPC Server for Client (==Externalconnection)...")
es := api.NewServer(fc.Server.Host, f.E, fc.Server.Cert, fc.Server.Key, fc.Server.CA)
isProxied := fc.Server.Proxy != "" && fc.Server.Host != fc.Server.Proxy
es := api.NewServer(fc.Server.Host, f.E, fc.Server.Cert, fc.Server.Key, fc.Server.CA, isProxied, fc.Server.Proxy)
quit := make(chan os.Signal, 1)
signal.Notify(quit,
......
......@@ -14,7 +14,7 @@ ssl = false
# adaptor can be either "memory" or "badgerdb" or "remote"
adaptor = "badgerdb"
[zmq]
[peering]
host = ":5555"
[dynamodb]
......
......@@ -4,7 +4,6 @@ go 1.15
require (
github.com/BurntSushi/toml v0.3.1
github.com/alecthomas/kingpin v2.2.6+incompatible
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
github.com/aws/aws-sdk-go v1.34.13
......@@ -24,5 +23,5 @@ require (
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/grpc v1.28.1
google.golang.org/protobuf v1.25.0
gopkg.in/yaml.v2 v2.2.4 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6
)
......@@ -5,8 +5,6 @@ github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM=
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI=
github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
......@@ -319,6 +317,7 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
......@@ -329,9 +328,8 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
......
E07FC2396E9D65E5
E07FC2396E9D65F3
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDfjCCAmagAwIBAgIJAOB/wjlunWXwMA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV
BAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcMBkJlcmxpbjEMMAoGA1UE
CgwDTUNDMQ0wCwYDVQQLDARGUkVEMQ0wCwYDVQQDDARldGNkMB4XDTIwMDkyNTE4
NDM0M1oXDTI1MDkyNDE4NDM0M1owWzELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJl
cmxpbjEPMA0GA1UEBwwGQmVybGluMQwwCgYDVQQKDANNQ0MxDTALBgNVBAsMBEZS
RUQxDTALBgNVBAMMBGV0Y2QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCowtUJ/ZDGiABeyb2NHHDgwrSp8P4ylOW+9G5IvS7Kgnp4TktefKcdhX8Emb6z
clfrsicA+Wj3JFcwZho/AUMZ+TyoBSj1+/QlH8i0jGO07JxAkS4ua1hGHxok0ZXa
u4aROeqXMHXveIhA1G9wi+jrprJUsVmmCeDUDLqB+c+Q69HfLwvA5PdfizJdwVKo
lHY5dRH5zs+w4K2xb+dgwnW4Tkb3LEy5h5DBM7WlRTN7tfS70LFXXXbnKnaJ1fnI
RjmMS503qqocJlptHG4BzqdLiVYAk6zbd/Bu9QLP6MEI7huheRiSk3m7JZnwJxfo
orNywF9G1SuHeIwcZP7a5k91AgMBAAGjRTBDMAsGA1UdDwQEAwIEMDAdBgNVHSUE
FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwFQYDVR0RBA4wDIcEfwAAAYcErBoGATAN
BgkqhkiG9w0BAQUFAAOCAQEAuC3s5ZMjZmAEUTCMiL9i6JqF4vVYy9PonoYKOd/A
/Si8M//ZYDKXHVKcyLAY46vC9c6HlKRWhV9tIdJNjXVzMkLuXkLQyUQJJQo0wtHe
2SAryC70Zm6V68NBkGRfUf5aFAxyayRJY6MPyYvgOLBNIgWspMguwf0n1lBfS5wo
bET7JjKM4NsglOtmSMIR+Rvw20ODTFoj3kXwPnVzdYbJM+Xkq8lSeADoLIVbOeTL
Knu9c46P9sng1/pSmr9X93x9jGaIrEOvE5HGy3j+4xxHjjU6IEeoKoujb0PhP2tH
RKe7zgCRQw+oUMmTagejXp+RHq5Q2V0o/GtK1JTMg662DQ==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAqMLVCf2QxogAXsm9jRxw4MK0qfD+MpTlvvRuSL0uyoJ6eE5L
XnynHYV/BJm+s3JX67InAPlo9yRXMGYaPwFDGfk8qAUo9fv0JR/ItIxjtOycQJEu
LmtYRh8aJNGV2ruGkTnqlzB173iIQNRvcIvo66ayVLFZpgng1Ay6gfnPkOvR3y8L
wOT3X4syXcFSqJR2OXUR+c7PsOCtsW/nYMJ1uE5G9yxMuYeQwTO1pUUze7X0u9Cx
V1125yp2idX5yEY5jEudN6qqHCZabRxuAc6nS4lWAJOs23fwbvUCz+jBCO4boXkY
kpN5uyWZ8CcX6KKzcsBfRtUrh3iMHGT+2uZPdQIDAQABAoIBAAF2btI/WFngI+Cu
bu4iKPhJt7chV5Kop7UX+Ty4JweqSdVxGEYhXnFrDsbDbluvygNI7/2aK8a4kejh
eajCIgq/lj7+jHRVUrBfriWicdrHkjMdDwFn/MPe0SMwjdPvfCMWFWpqCRuiN8wY
Cz82dzZTo4gIYXaG72PnGFa4C4x9+yFMzwTNVGhSpe99nStyfsioQ5+sLgBk8Eei
lxQWHyrTmXnjmRAOsBVKFcPQfLCBlrdlLCdssWCsmVAgRtZcbt1TZYL4Yhfr3V9D
ORFKUt60JDwWA3xhzUgFE7NzpZ8mVi7V/i92r0ZxPayWID1TjJOWGEsPxUwBKDuM
7EQxmAECgYEA0WHZGasxi5u80jYuJPzAi/hsqK29EM9qT8z4d+hhO282JsUx1psr
gsxw4HzqWVGRwmbdMkHtr6h0bnEbmexIeu9eoxiArKkkg8HTiK7v07GLCyZGihT+
QAg09QIoqts6wUin5E23qpLwxdL7PlC1nupduxFllyZW9NM7DcN26kECgYEAzlWz
jGarqh5fYsvVlcGc0zMKFmVluTasJb8d39djXeoZysq71dLA8uySlTP1qtf84pB+
hDkcfLab5YQuOM+zRtWYxMX41aZoBCIAomNewRw93pTH65xuH1re0+ASiExeBRYI
oZWX3t/ccCKrekqADbYN9p34bp8frmdKeZoz0DUCgYEAntr31au2qU79EReeJt3E
T+2osskt2mUjKWw/Tun1axxTH1MZHtMXTeNB+G+NdTqXtcBJLeorJMxPmcMix8Mm
sm6NhHwAk/63/2a80MS4nAnljg36EqUeyQHw+7oplIdDqoUvK91y7W0SU2RgzcR6
Jxl1B4qJYwXpj1H7SdP0koECgYB+C4aCd1nYs3MrpD9Wm47UyfIYmlqY2VgyOtzi
F+7AuTiGVHCIf5WVEIW/FZ22fvkh4okW9th7KwZzH9soo2DuHZ+UXSfURDJ4i9j9
WlzQ9RKqfRLf0JDJILbMka5git5IlxwwsXS0FubPra45J3ewaI2BISFZWmV9IeYy
AMw0HQKBgCYZEC8owm9PD2EfkVoS9lyfVEuzQuc3dafGPjjca1CMgDp14ETH40R9
A8p1yVaSVV1YnZNR9JEsB7Vtz+DaXRtUj8JRxlUfcTOfKtKFWMU0vaCdJ77oh9Jn
MXFVmpCqUDA9kwLeHPDpc6oYOacqG3mWwe2dudf5K4OWwCXES3AA
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDhjCCAm6gAwIBAgIJAOB/wjlunWXdMA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV
MIIDhjCCAm6gAwIBAgIJAOB/wjlunWXoMA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV
BAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcMBkJlcmxpbjEMMAoGA1UE
CgwDTUNDMQ0wCwYDVQQLDARGUkVEMQ0wCwYDVQQDDARldGNkMB4XDTIwMDkyMzE2
MjA0M1oXDTI1MDkyMjE2MjA0M1owYzELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJl
CgwDTUNDMQ0wCwYDVQQLDARGUkVEMQ0wCwYDVQQDDARldGNkMB4XDTIwMDkyNTE4
MjAwMFoXDTI1MDkyNDE4MjAwMFowYzELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJl
cmxpbjEPMA0GA1UEBwwGQmVybGluMQwwCgYDVQQKDANNQ0MxDTALBgNVBAsMBEZS
RUQxFTATBgNVBAMMDGxpdHRsZWNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMOQHovYXJNe5nqWT2r1Cvv4Zkw54F+WwbZs1YSK9kbPmK49hSni
UMYbnGNviQWC6JjW9W0BzLh0ej4fv3Y3Usl6l3gU51lWsgc4+7uyDqgROsEFbYjh
2ltSlRWa5C0KjDGWUwxYEclQ26i+GW974YPlEgkU9CoBg3OsH+STCMnvlAwnYXZi
9VlO306jfF5U++Bu4yBMVKhzgrK+pv99rkxPjhRR4RTwRZbY2rovxyBDc8bERfPZ
0rsKcCjG+7J9A//6jCKPCawE+Zyqr8+I2GGVSxZ0v2ulIu2xZWGuPeEchAVe6Np1
PORLlpn154PGbhnOxginw5ZU1J6HyygNLnUCAwEAAaNFMEMwCwYDVR0PBAQDAgQw
ADCCAQoCggEBALxg5z7TCYLK1g+QDBz9XsUf/jcep3aCWNcu1Yqk1vCKad4mjPr7
QT4a18vSKzWF8djYA3RRJsyVdKYsPOkd0BxDbSzVk6JA68sPwQnnrE2Wjza9y2wc
bbo9o4JxQBywZ6Rfj74ozp0S96WojHRBlj6DpHqey9RBhoZAjlquKf0NPYqIfzpN
7eJfnhkGSPpNte5Z8dmfQrUv1y0vwUpa0pXecZ1ZN75/Y5Z+6tbMQ2nDGHvcawtp
jgqc7R/eDiC30LUSRGd1YwwTERzKXSbp1j5m3nnbZ69saIjFxeM45l4Yq7SxxUmF
Sd052ZYctBDQTstkx4f0svODWlMOuJA8Q6UCAwEAAaNFMEMwCwYDVR0PBAQDAgQw
MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAVBgNVHREEDjAMhwR/AAAB
hwSsGgIBMA0GCSqGSIb3DQEBBQUAA4IBAQBDUWKICnZM1gLr7t38gS/EVqZBsB4c
xSW40CUeFJivesdSMDgu/+CDeVp1nfPyYNcs0Ow5jkDuTd425roAyBuFl/N5pyJ8
2S8txI8b8HgWLoL0RjrAP7zHa9KgrKsqtzBt0+dhNydmqlB9GDb/Sfjg1FV8McIq
YfJznzIIqwF6YHXnk6kj2Q1sdLWHe2YSQ+/abzj6BzuGyDCgH3Bxg4pU9QPsLnWy
jOQNBG9FMBed+G/7FlxTg2mTt+Erl4NnnFEvMfETelOvZY8VfODJ8+0iozzjB02W
dxJlCW34DeSeHmzWV3+GyCYZE/gdqraWRsm05pIZghmkHhBL1xKTKIlt
hwSsGgQBMA0GCSqGSIb3DQEBBQUAA4IBAQAZWujpnVd7Evo++S2Liw6Jgg7jKBXp
CLO8dRelBLJ5FczxK2bQR7ZmFFF3X+IM5dsnWV6z1viUnnPCCU/jgFIrg8x9xqTH
AqgJ7sVjo14c5xOx2y7ZlYBkk2oI2EvzWlASkRtJLdq8d2egdn15h05xYtJfa4WP
rb/A5P5NMNz+3oW27qlcRR+p7JQTBY8PAkWLCo85Y0HaWk+mqVmkmDAKt+hFodg9
aLLVHxUp0W1/DWIQWtwAoow6URdR/kEsN4w7zeP/0RCpvg/aDJvkax3lzknW/KLe
CxoHbWqSSAI4OgeEz7oGzHhIN+/Ur3kKqA+qFdM0tfiiPnrmJjiOCuAG
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAw5Aei9hck17mepZPavUK+/hmTDngX5bBtmzVhIr2Rs+Yrj2F
KeJQxhucY2+JBYLomNb1bQHMuHR6Ph+/djdSyXqXeBTnWVayBzj7u7IOqBE6wQVt
iOHaW1KVFZrkLQqMMZZTDFgRyVDbqL4Zb3vhg+USCRT0KgGDc6wf5JMIye+UDCdh
dmL1WU7fTqN8XlT74G7jIExUqHOCsr6m/32uTE+OFFHhFPBFltjaui/HIENzxsRF
89nSuwpwKMb7sn0D//qMIo8JrAT5nKqvz4jYYZVLFnS/a6Ui7bFlYa494RyEBV7o
2nU85EuWmfXng8ZuGc7GCKfDllTUnofLKA0udQIDAQABAoIBAQCYG1qG7wxiW6fs
pUi0KlAW14fJtiJ8dufImjIg22zees2IiLUwdKTa0dL7zF7I+J8tcdSGqqWuunny
JANpUXKE32M8tRWUeUgTMhEqVj3sHyqRw0UE+JY7/amTmlvrZI7SatfBfCapbMjN
IL7r5XDsg5lZkwCuQ2sY50IPKQXm+aMCieqwCcFV3cTKvb+byx/K/XmeFsYKi/iR
Khg4FU0D4dALbiAarazsLg7Yr+TqrO7xpyQY5hTqOf+W2I+C8c8lgqfkojbAoxwE
84nLBoQPTYJzIpoSSVltCgQqeL4tWtk9a2OFEmNUfiq6DOOCmCIiNHXsy7PdCPY/
uwz6FNzBAoGBAOVkWLRGJaeGHwEAySUNnGrocAa4PGjmnbJa7YeA8DS9RbSrZ9yc
X4Y5hzRvpRe3VCR5GLvQhRiHg0AV9UeGaezlgB8WX/Fl6UCosAS1x4UZAjjEnF4H
woCeSrshiyPXFiuebL4KpPk+IFVULHvxBq12lxcKLp+d5+NSgmxcHlqZAoGBANo/
PbsHnjHfmzV58d+J9b+YDkQThu+EZNmB//FZiqq9a0eZmSH8utr6JXMH+/ebERxi
vh90+G5OAqnqyBwSwZcNNe009BE9Ea9UjDJvZtSYXm4xJ9ruppST3bRXt3aeCHEM
scc//8rC1ojwFyfRFgJ01v8Czd8ITS+byVykNVg9AoGAJEhw92K5Bfxi3we+yQuU
GBzXy1hMxdLkUperRmmQlObzJZaPAQgC2/oxdovKMyweNP6qeNqMksqsafCPMVcD
XiMW1tP1LPuPn1iPLs+J1XWVMmF20jCsBSgEbgDqPysAKLoQPSb13S6Ecrqzpo8D
HWDKmSxVH44cZYphcr5HVtECgYEAlvESMp5MLNYntE6ImEAENORnSXHv6wu37C7a
4wM4wmmLHtP+cuEmInjLGcm13EPlC6rHL15oy3EsqnP0vmXCekPqvgnXm2yPJKHm
7KLbjcFr3e4lUGep0iyKM0ZPXrxhvj43XkTHFma2lbLncORMwpoob+pylARbzceC
9o2jT0kCgYAMW6VqfX3y9h38QQzBPJ77b4i6YBIq0o+xKFaLJaFN7kHhDQioswIl
mSbCnyD6UFdAzz2RyewZeszyolXv4hPQQdBOmgzY8AzI3JiarDD1femEYfWpDlfm
6cQ9//H7X+zUlU/lkkEnqyvDZkA3h3ewlW00yz6S6X8LL0rKiS3gwA==
MIIEpQIBAAKCAQEAvGDnPtMJgsrWD5AMHP1exR/+Nx6ndoJY1y7ViqTW8Ipp3iaM
+vtBPhrXy9IrNYXx2NgDdFEmzJV0piw86R3QHENtLNWTokDryw/BCeesTZaPNr3L
bBxtuj2jgnFAHLBnpF+PvijOnRL3paiMdEGWPoOkep7L1EGGhkCOWq4p/Q09ioh/
Ok3t4l+eGQZI+k217lnx2Z9CtS/XLS/BSlrSld5xnVk3vn9jln7q1sxDacMYe9xr
C2mOCpztH94OILfQtRJEZ3VjDBMRHMpdJunWPmbeedtnr2xoiMXF4zjmXhirtLHF
SYVJ3TnZlhy0ENBOy2THh/Sy84NaUw64kDxDpQIDAQABAoIBAQC5lmZ8OIGoP5lA
39NvRBd38ZsMRsEJOkW4ScXLv7aaaGMAn85I/fw66Uss3LQBGSM5VSeiEsk8yQmR
JQglSl/bWHpYr1mxgnBLMAwoa/wOvIP/lGCy9BcOYueR/W0CVrDk+ditqZpUmXkt
1a36YxtYH22N+KArTxrvbO5SXD+1swEzdNSkvaihRbqRcYq4mg294mg2o5qF4WyN
TWq2ozco/ZeSacsbEmpmyuY6aDoywKa2bhFztfz8A6J1EW7sqYESjwVre8jBIhKB
8agsuPFr4QAIxI7NraMn6vM0N/9Jrc90pKQwxObjWaDoLpX1fPSmFC4R2BwDKiCf
+WZfaD8JAoGBAPBhTl2rKCbn1eKV3uKplOsKBDptSvZ8vtuIPfQBe9i8AiS/OxFB
MR7kNHbQ7JK+SGwAS5LMaW1tbVtVtLTESIo+mFU5rthy2MTnvsyAlenOnacJxWz6
E4/XIpiLbFf2TJcavY88JkczjphOubr5Et/grFXT4yFgvY5VReAXC2T7AoGBAMie
jqvJU+x1n8EdNQG1X2PLwnNTQXm9bvODaMQHwE3V4HQKix3ZtNvyLTg8BmrNxcOJ
2CqbSmFEJ5sk50kMiBa/nv2b8soEnFoZq600JCVCRFH426AHhcYXmWk3fvTeXDmj
15S8ulselb2AQvu9s1qWqRtxMgCcOXh/UaJtmlffAoGBAOSUo2CPEW9tpgYBXiFM
AUBAFiU5KL+bgCJiPAd8IbjHj4JCFnkh9QPbHcieg1hHeba50SOXHeng1My1g1Ei
FZjgTRs97vYEv/z+IoF1BRmAUIo20HYAl/mAKnXEnxJGNC68TuWV3RB4BnDu687Q
axJZI4e6JZHn3Fks3XVqdHthAoGABD1dlIHPtTqTIrikSyHzHx/KPzeuNY1sT9ci
GqpzRPHVKX6jjADy0ocer4aNOCqbGFPMbrITc1TGZX/1J1UNdzWbfY6TJfPM/hZ2
y1VDwknROc5BjfM6v4H2KwQSOciNOGafArSuV4ig731LbRiINsziTAMrZFno2QQP
zJf2YA8CgYEAihAXVtVTlmCuAKcEBGTS6ayp54nARwTZfxM6KuGR0doLAAT0vjFw
gtLrV+OtXozeqn4L+0Cykj3jaHcv4d6SLg7hETAmg5aR0ZdGXSpOxmI4PrXgJfeC
CXlkL37qqdjk1YVPKddPiWkSBaCxMKsSC+JAnQhpLWuc3t6JVl8DXVc=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
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
X17fq/k=
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----