Compare commits

..

13 Commits

45 changed files with 5880 additions and 1258 deletions

8
deployment/.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
*.js
!jest.config.js
*.d.ts
node_modules
# CDK asset staging directory
.cdk.staging
cdk.out

6
deployment/.npmignore Normal file
View File

@@ -0,0 +1,6 @@
*.ts
!*.d.ts
# CDK asset staging directory
.cdk.staging
cdk.out

14
deployment/README.md Normal file
View File

@@ -0,0 +1,14 @@
# Welcome to your CDK TypeScript project
This is a blank project for CDK development with TypeScript.
The `cdk.json` file tells the CDK Toolkit how to execute your app.
## Useful commands
* `npm run build` compile typescript to js
* `npm run watch` watch for changes and compile
* `npm run test` perform the jest unit tests
* `npx cdk deploy` deploy this stack to your default AWS account/region
* `npx cdk diff` compare deployed stack with current state
* `npx cdk synth` emits the synthesized CloudFormation template

View File

@@ -0,0 +1,21 @@
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { DeploymentStack } from '../lib/deployment-stack';
const app = new cdk.App();
new DeploymentStack(app, 'DeploymentStack', {
/* If you don't specify 'env', this stack will be environment-agnostic.
* Account/Region-dependent features and context lookups will not work,
* but a single synthesized template can be deployed anywhere. */
/* Uncomment the next line to specialize this stack for the AWS Account
* and Region that are implied by the current CLI configuration. */
// env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },
/* Uncomment the next line if you know exactly what Account and Region you
* want to deploy the stack to. */
// env: { account: '123456789012', region: 'us-east-1' },
/* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */
});

64
deployment/cdk.json Normal file
View File

@@ -0,0 +1,64 @@
{
"app": "npx ts-node --prefer-ts-exts bin/deployment.ts",
"watch": {
"include": [
"**"
],
"exclude": [
"README.md",
"cdk*.json",
"**/*.d.ts",
"**/*.js",
"tsconfig.json",
"package*.json",
"yarn.lock",
"node_modules",
"test"
]
},
"context": {
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
"@aws-cdk/core:checkSecretUsage": true,
"@aws-cdk/core:target-partitions": [
"aws",
"aws-cn"
],
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
"@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
"@aws-cdk/aws-iam:minimizePolicies": true,
"@aws-cdk/core:validateSnapshotRemovalPolicy": true,
"@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
"@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
"@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
"@aws-cdk/core:enablePartitionLiterals": true,
"@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
"@aws-cdk/aws-iam:standardizedServicePrincipals": true,
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
"@aws-cdk/aws-route53-patters:useCertificate": true,
"@aws-cdk/customresources:installLatestAwsSdkDefault": false,
"@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
"@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
"@aws-cdk/aws-redshift:columnId": true,
"@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
"@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
"@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
"@aws-cdk/aws-kms:aliasNameRef": true,
"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
"@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
"@aws-cdk/aws-efs:denyAnonymousAccess": true,
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
"@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true,
"@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true,
"@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true,
"@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true,
"@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true,
"@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true
}
}

View File

@@ -0,0 +1,8 @@
module.exports = {
testEnvironment: 'node',
roots: ['<rootDir>/test'],
testMatch: ['**/*.test.ts'],
transform: {
'^.+\\.tsx?$': 'ts-jest'
}
};

View File

@@ -0,0 +1,33 @@
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
import * as s3deploy from 'aws-cdk-lib/aws-s3-deployment';
import { Construct } from 'constructs';
import path = require('path');
export class DeploymentStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const staticBucket = new s3.Bucket(this, 'StaticBucket', {
autoDeleteObjects: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
const distribution = new cloudfront.Distribution(this, 'CDNServer', {
defaultBehavior: { origin: new origins.S3Origin(staticBucket) },
defaultRootObject: 'index.html'
});
new cdk.CfnOutput(this, 'URL', {
value: `https://${distribution.domainName}`
});
new s3deploy.BucketDeployment(this, 'DeployWithInvalidation', {
sources: [s3deploy.Source.asset(path.join(__dirname, '../../dist'))],
destinationBucket: staticBucket,
distribution: distribution,
});
}
}

4287
deployment/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

27
deployment/package.json Normal file
View File

@@ -0,0 +1,27 @@
{
"name": "deployment",
"version": "0.1.0",
"bin": {
"deployment": "bin/deployment.js"
},
"scripts": {
"build": "tsc",
"watch": "tsc -w",
"test": "jest",
"cdk": "cdk"
},
"devDependencies": {
"@types/jest": "^29.5.11",
"@types/node": "20.11.5",
"jest": "^29.7.0",
"ts-jest": "^29.1.1",
"aws-cdk": "2.122.0",
"ts-node": "^10.9.2",
"typescript": "~5.3.3"
},
"dependencies": {
"aws-cdk-lib": "2.122.0",
"constructs": "^10.0.0",
"source-map-support": "^0.5.21"
}
}

View File

@@ -0,0 +1,17 @@
// import * as cdk from 'aws-cdk-lib';
// import { Template } from 'aws-cdk-lib/assertions';
// import * as Deployment from '../lib/deployment-stack';
// example test. To run these tests, uncomment this file along with the
// example resource in lib/deployment-stack.ts
test('SQS Queue Created', () => {
// const app = new cdk.App();
// // WHEN
// const stack = new Deployment.DeploymentStack(app, 'MyTestStack');
// // THEN
// const template = Template.fromStack(stack);
// template.hasResourceProperties('AWS::SQS::Queue', {
// VisibilityTimeout: 300
// });
});

31
deployment/tsconfig.json Normal file
View File

@@ -0,0 +1,31 @@
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"lib": [
"es2020",
"dom"
],
"declaration": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": false,
"inlineSourceMap": true,
"inlineSources": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false,
"typeRoots": [
"./node_modules/@types"
]
},
"exclude": [
"node_modules",
"cdk.out"
]
}

265
notes/NOTES.md Normal file
View File

@@ -0,0 +1,265 @@
# Millionen langlebiger TCP-Verbindungen Herausforderungen und Lösungen bei Update-Prozessen
Neulich stehe ich am Bahnhof, mit gepackten Koffern, und will in meinen Urlaub starten. Beim Warten auf den (natürlich)
verspäteten Zug hatte ich jede Menge Zeit zum überlegen. Ich habe mich gefragt: "Ist der Herd wirklich abgeschaltet?". Anders
als in früheren Urlauben hatte ich aber einen smarten Herd daheim. Ich öffne also meine App, stelle fest, dass alles in Ordnung
ist, und kann beruhigt in den Zug einsteigen.
IoT (also "Internet of Things") beschreibt genau diese Art von Geräten. Mein Name ist Bene. Ich bin Softwareentwickler mit Fokus
auf Softwarearchitektur bei Scandio. Wir bei Scandio entwickeln für unsere Kunden maßgeschneiderte intelligente und kreative
Softwarelösungen. Wir haben dabei einen Schwerpunkt unter anderem im Bereich "Internet of Things".
Ein Projekt aus diesem Bereich will ich heute vorstellen. Dabei geht es darum, wie die IoT-Geräte unseres Kunden mit
verschiedenen Backends kommunizieren und um die Herausforderungen bei der Aktualisierung des Systems, das zwischen den Geräten
und den Backends liegt.
## Inhalt
Ein kurzer Überblick über den Vortrag: Nach dem Projektsetup (also Hintergrund, Motivation und Ziel des Projekts) beschreibe ich
euch die Problemstellung etwas genauer und dann natürlich auch die Lösungen, also: wie sieht die Architektur des Systems jetzt
aus, was genau passiert, wenn das System Updates bekommt, und zum Schluss noch: was wären unsere Wunschträume für die
Architektur, wenn Zeit und Geld keine Rolle spielen würde oder wir ganz von vorne anfangen würden.
Eine organisatorische Bemerkung: wenn während des Vortrags Fragen aufkommen, stellt sie gerne sofort und ich werde sie so gut
wie möglich beantworten.
## Über Scandio
Noch kurz ein paar Worte über Scandio: Neben IoT haben wir Stärken in den Bereichen Cloud und Systems Engineering, DevOps und
Fullstack-Web-Entwicklung. Daneben unterstützen wir mit agilen Coaches und Beratern dabei, Prozesse zu optimieren. Insbesondere
helfen wir als Atlassian Platinum Solution Partner unseren Kunden bei ihrer agilen Transformation.
## Projektsetup
Das Projekt, von dem ich heute rede, hat den Namen "Heimdall".
Heimdall ist in der nordischen Mythologie der Wächter der Götterbrücke Bifröst (das ist der Regenbogen im Bild) und Heimdall hat
außergewöhnliche Wahrnehmungsfähigkeiten. Hier im Bild ist das durch das Hören symbolisiert. Genauso wie Heimdall die Verbindung
zwischen den Welten überwacht, fungiert unser Heimdall-System als ein Gateway, das die Brücke zwischen einer Vielzahl von
IoT-Geräten und verschiedenen Backend-Systemen bildet. Ähnlich der mythischen Figur hat unser Heimdall die Aufgabe, die
Sicherheit, Stabilität und Effizienz dieser Verbindungen zu gewährleisten.
Heimdall wird seit 2018 entwickelt und hat ein vollständig extern entwickeltes und verwaltetes System abgelöst. Bei diesem alten
System hatte unser Kunde keinen Zugriff auf den Source Code oder Entwicklungsdetails. Daher wurde die Entscheidung für eine
Neuentwicklung getroffen. Die fehlenden Informationen über das alte System gingen sogar so weit, dass wir bei der Migration zu
unserem neuen System regelmäßig das alte System überlastet haben, da wir einfach keine Informationen bekommen konnten, welche
Last das alte System aushält. Mit diesem Lock-In-Effekt war unser Kunde verständlicherweise unzufrieden und hat uns beauftragt,
Heimdall neu zu entwickeln.
[5] Ich will hier einmal schematisch zeigen, welche Aufgabe Heimdall hat. Meine smarte Herdplatte von vorhin muss regelmäßig an
das Herdplattenstatusbackend die Information senden, welche Herdplatten auf welcher Stufe angeschaltet sind. Gleichzeitig
tauscht das smarte Heizungsthermostat eures Nachbarn Nachrichten mit einem Backend aus, um herauszufinden, ob die Heizung nach
oben oder unten geregelt werden sollte, und die smarte Dunstabzugshaube eurer Tante meldet an das entsprechende Backend, dass
die Filter mal wieder eine Reinigung bräuchten. Heimdall sitzt zwischen den Geräten und den Backends und sorgt dafür, dass die
richtigen Nachrichten das richtige Backend erreichen, und dass umgekehrt auch Nachrichten in die Gegenrichtung versendet werden
können: beispielsweise kann das Herdplattenbackend die Herdplatte anweisen, sich abzuschalten. Die Geräte halten dazu eine
Verbindung zu Heimdall aufrecht. Über diese Verbindung werden die Nachrichten dann ausgetauscht.
## Problemstellung
Das wichtigste Qualitätsziel bei Heimdall ist, dass diese Verbindungen zwischen Gerät und Heimdall so selten wie möglich
unterbrochen werden. Das hat zwei Gründe: Zum einen kann ich als Nutzer nicht sehen, auf welcher Stufe mein Herd gerade kocht,
wenn der Herd nicht mit Heimdall verbunden ist. Zum anderen finden einige Prozesse nach jeder Neuverbindung statt. Das kann
potenziell zu Überlastung von Heimdall oder den Backends führen, wenn die Neuverbindungen zu häufig stattfinden.
Ein Szenario gibt es aber, in dem Verbindungen auf keinen Fall gehalten werden können: nämlich wenn der Server, mit dem die
Hausgeräte verbunden sind, ein Update bekommt und daher ersetzt werden muss. Deswegen ist eins der größten Ziele bei der
Entwicklung der Architektur von Heimdall, dass solche Neustarts bei den meisten Konfigurationsänderungen des Systems nicht
notwendig sind, sondern die Konfigurationsänderungen am Live-System durchgeführt werden können.
## Lösungen
Diesem Prinzip, dass Konfigurationsänderungen ohne Neustarts möglich sein sollen, werden wir bei der Betrachtung der
Heimdall-Architektur noch öfter begegnen. Wir schauen uns jetzt mal an, wie Heimdall aufgebaut ist.
[10] Das Kernstück von Heimdall ist der sogenannte "Web Socket Manager", kurz WSM. Eure Herdplatte kann über euer heimisches
WLAN mit dem Internet kommunizieren. Nachdem die Firmware der Herdplatte gestartet und die Verbindung mit dem Internet
hergestellt wurde, versucht die Herdplatte eine Websocket-Verbindung zum WSM zu öffnen. Dabei handelt es sich um eine dauerhafte
Verbindung, über die zu beliebigen Zeiten Nachrichten in beide Richtungen entlang der Verbindung geschickt werden können. Die
Verbindung wird so lange wie möglich aufrecht erhalten. Es gibt im Wesentlichen vier Gründe für den Abbruch der Verbindung: Das
Gerät wurde abgeschaltet, die Netzwerkverbindung zwischen Gerät und WSM wurde unterbrochen, der WSM wurde beendet oder der WSM
hat die Verbindung beendet. Im letzten Fall teilt also der WSM dem Gerät mit, dass über die Verbindung keine Daten mehr
entgegengenommen oder verschickt werden können, ohne dass WSM oder Gerät beendet wurden. Gehen wir also mal davon aus, dass die
Verbindung geöffnet ist und die Herdplatte mit dem WSM kommuniziert. Dann leitet der WSM die Nachrichten des Geräts an ein
Backend weiter und umgekehrt werden Nachrichten vom Backend an das Gerät zurückgeleitet. Wenn es nur ein Gerät und nur ein
Backend geben würde, wäre ich jetzt fertig mit der Präsentation. Das ist aber natürlich nicht alles.
[15] In Wirklichkeit gibt es ja außer eurer Herdplatte auch noch den Thermostat eures Nachbarn, die Dunstabzugshaube eurer Tante
und noch jede Menge andere Geräte, die mit den Backend-Systemen kommunizieren sollen. Unser Deployment ist in vier verschiedene
Regionen aufgeteilt, und in der größten Region, der Region Europa, haben wir aktuell etwa 2,5 Millionen Geräte, die zur gleichen
Zeit mit Heimdall verbunden sind. Deshalb gibt es auch mehrere WSM-Pods, also mehrere Instanzen des WSM. Zum einen wird dadurch
die Skalierbarkeit des Systems verbessert, und zum anderen verlieren im Falle eines Crashs nicht alle Geräte gleichzeitig die
Verbindung. Vor diesen Instanzen liegt ein Load Balancer, der versucht, die Verbindungslast möglichst gleichmäßig zu verteilen,
um Rechenressourcen möglichst effizient nutzen zu können. Der Load Balancer routet die Verbindungen von den Geräten zum WSM im
Round-Robin-Algorithmus, also: eure Herdplatte verbindet sich zuerst und wird an die erste Instanz geroutet, danach kommt die
smarte Glühbirne eures Freunds, die wird dann an die zweite Instanz geroutet, und nach der letzten Instanz beginnt das Spiel von
vorne. Bei synchronen Aufrufen an das Backend kommt die Antwort an die richtige WSM-Instanz zurück. Allerdings führen synchrone
Aufrufe zu zwei Nachteilen: zum einen muss der WSM auf die Antwort des Backends warten und so lange die Verbindung zum Backend
offen halten. Wenn sehr viele Nachrichten auf einmal verschickt werden und das Backend langsam arbeitet, kann das zur
Überlastung des WSM führen. Ein zweiter Nachteil von synchronen Aufrufen ist die stärkere Kopplung: die Verarbeitung der
Nachricht schlägt nämlich fehl, wenn das Backend oder weiter innen liegende Systeme bei der Verarbeitung der Nachricht
scheitern. Da sind asynchrone Aufrufe die bessere Lösung. Das heißt, dass entweder das Backend die Nachricht entgegennimmt und
erst im Nachgang verarbeitet, oder dass der WSM die Nachricht an einen hochverfügbaren Message Broker schickt und die Backends
die Nachricht in ihrer Geschwindigkeit zu einer späteren Zeit konsumieren können. Egal, für welche Lösung man sich hier
entscheidet: das Backend muss eine Nachricht zurück an das Gerät senden, weiß aber noch nicht, mit welcher WSM-Instanz das Gerät
verbunden ist. Übrigens hätten wir das selbe Problem auch ganz ohne asynchrone Aufrufe: sagen wir mal, euer Nachbar möchte seiner
Heizung mitteilen, dass sie die Temperatur in der Wohnung auf 22 Grad hochregeln soll, weil er jetzt auf dem Heimweg ist. Dann
muss das Heizungsbackend eine Nachricht an den Thermostat schicken. Wenn das Backend versucht, die Nachricht über eine zufällige
Instanz des WSM zu schicken, ist die Chance nicht sehr hoch, dass der Thermostat gerade mit dieser Instanz verbunden ist.
Hier kommen der Forwarding-Service (kurz FORS) und eine Adress-Datenbank ins Spiel. Jeder WSM-Pod schreibt nach einer geöffneten
Verbindung mit einem Gerät die Geräte-ID zusammen mit der eigenen Adresse in die Adress-Datenbank. Der FORS fragt jetzt für ein
Gerät die richtige Adresse ab und kann Nachrichten vom Backend an die richtige WSM-Instanz weiterleiten. Konkret schaut der
Ablauf also so aus: Gerät 1 baut eine Websocket-Verbindung zu WSM-Pod 1 auf. In der Folge teilt WSM-Pod 1 der Adress-Datenbank
mit: Gerät 1 ist mit dem Pod verbunden, der Adresse 1 besitzt. An der Kommunikation vom Gerät zum Backend hat sich nichts
geändert. Wenn jetzt aber das Backend eine Nachricht an das Gerät senden möchte, dann wird die Nachricht an unseren
Forwarding-Service geschickt. Der Forwarding-Service fragt die konkrete Adresse des richtigen WSM-Pods bei der Adress-Datenbank
an und leitet die Nachricht entsprechend weiter. Dann ist die Nachricht beim richtigen WSM gelandet und kann an das Gerät über
die Websocket-Verbindung geschickt werden.
[20] Dazu kommt, dass es in Wirklichkeit nicht nur ein Backend gibt. Ein Message Mapping kann vom WSM genutzt werden, um zu
entscheiden, an welches Backend ein konkreter Nachrichtentyp mit einer konkreten Version gesendet werden soll. Der Ablauf hier
ist also: Das Gerät (der Einfachheit halber habe ich in diesem Bild nur noch ein Gerät) schickt die Nachricht mit dem Typ
"/foo/config" und der Version 1 an den WSM. Der WSM findet mit Hilfe des Message Mappings heraus, dass Backend 1 für die
Verarbeitung der entsprechenden Nachrichten verantwortlich ist und leitet die Nachricht entsprechend weiter. Wir sind also wie
ein Postunternehmen dafür zuständig, dass die richtigen Nachrichten an den richtigen Empfänger gelangen, aber nicht dafür, dass
die Nachrichten inhaltlich auch sinnvoll sind. Es findet also bei Heimdall keinerlei Validierung der Nachrichten statt. Das
Message Mapping ändert sich regelmäßig. Deshalb ist es wichtig, dass eine Rekonfiguration ohne Neustart der WSM-Pods möglich
ist, da sonst ja Verbindungen gekappt werden müssten.
Der WSM hat noch diverse andere Aufgaben:
* Er führt den TLS-Handshake durch. Das heißt: alle Informationen, die zwischen Gerät und WSM ausgetauscht werden, werden
verschlüsselt ausgetauscht. Dabei muss sich sowohl der Server, also der WSM, beim Gerät authentifizieren, als auch das Gerät
nachweisen, dass es sich tatsächlich um ein Gerät unseres Kunden handelt. Die Authentifizierungen finden statt, indem
überprüft wird, dass Gerät und WSM beide Zertifikate besitzen, die von einer vertrauenswürdigen Entität, also einer
Certificate Authority (kurz CA) des Kunden signiert wurden.
* Bei der Validierung des Zertifikats, das das Gerät ausweist, gibt es noch ein paar Details zu beachten. Nämlich gibt es etwa
10 verschiedene ausstellende CAs, also Certificate Authorities, denen der WSM vertrauen soll. Manche dieser CAs haben
Zertifikate ausgestellt, die inzwischen abgelaufen sind und die daher von einer Standard-Validierung nicht akzeptiert werden
würden. Das Problem dabei: für Firmware-Updates müssen auch Nachrichten über Heimdall ausgetauscht werden, und die
entsprechenden Geräte-Zertifikate können ohne ein Firmware-Update nicht aktualisiert werden. Deshalb muss Heimdall auf die
Validierung des Gültigkeitszeitraums für die entsprechenden CAs verzichten.
* Manche Geräte-Zertifikate sollen außerdem sofort abgelehnt werden, weil die entsprechenden Geräte defekt sind. Das wird über
eine Datenbank mit blockierten Zertifikaten geregelt. Für das Blockieren eines Zertifikats ist wie beim Message Mapping kein
Neustart des WSM notwendig, sodass auch hier Neuverbindungen vermieden werden.
* Noch einmal andere Geräte sind in einem Quarantäne-Status. Für diese Geräte dürfen nur bestimmte Nachrichten versendet und
empfangen werden, beispielsweise wieder Nachrichten im Zusammenhang mit Firmware-Updates. Wie die blockierten Zertifikate wird
das über eine eigene Datenbank konfiguriert und benötigt keinen WSM-Neustart.
* Dann muss der WSM noch den Websocket-Upgrade durchführen (dazu sage ich später noch mehr).
* Schließlich gibt es noch einen Corporate Handshake, der vom Protokoll unseres Kunden vorgesehen ist. Bevor dieser Handshake
abgeschlossen ist, dürfen keine anderen Nachrichten in beide Richtungen gesendet oder weitergeleitet werden.
[25] Hier ist noch einmal eine Zusammenfassung des gesamten Heimdall-Systems, soweit es für den Vortrag relevant ist. Die
Grundidee ist also, dass der WSM so selten wie möglich neugestartet werden muss. Das erreichen wir, indem Konfiguration, die
sich regelmäßig ändern könnte, externalisiert wird und ohne Neustarts geändert werden kann. Das sieht man in diesem Bild durch
das Message Mapping und die beiden Datenbanken zum Blockieren von Zertifikaten und für den Quarantäne-Status.
Was passiert jetzt aber, wenn der WSM doch einmal neugestartet werden muss oder abstürzt? Wenn ein WSM-Pod kontrolliert beendet
wird, werden die Verbindungen zu den entsprechenden Geräten nacheinander beendet. Dann verbinden sich die Geräte mit anderen
Instanzen neu. Aktuell dauert dieser Prozess in unserer größten Stage mit etwa 2,5 Millionen Geräten knapp 3 Stunden. Da wir ja
Round-Robin für das Load Balancing nutzen, hat der Ersatz-Pod, der hier gestartet wurde, danach deutlich weniger offene
Verbindungen als die alten Pods. In der Praxis führt das nicht zu Problemen, denn die Last ist bei neuen Verbindungen mit
Abstand am höchsten.
Falls ein Pod (beispielsweise aufgrund eines Bugs) unkontrolliert beendet wird, versuchen sich alle Geräte auf einmal neu zu
verbinden. Das würde zur Überlastung des Systems führen, daher gibt es einen Rate Limiter, der dafür sorgt, dass sich Geräte
nicht zu schnell wieder verbinden können. Natürlich ist das ein ungünstiger Zustand, da die Funktionalität der noch nicht wieder
verbundenen Geräte eine ganze Weile eingeschränkt sein kann.
Jetzt kommen wir mal zum geplanten Fall: eine neue WSM-Version soll deployed werden. Das Deployment läuft dann so ab: In einem
ersten Schritt werden 1/3 der Instanzen durch Instanzen der neuen Version als Canary-Deployment ersetzt. Diese neue Version
läuft parallel zu der alten für eine Woche, bevor auch die übrigen Instanzen ersetzt werden. So können Fehler frühzeitig erkannt
und behoben werden, bevor alle Geräte betroffen sind.
[30] Das bedeutet übrigens nicht, dass nach dem Canary-Deployment 1/3 der Verbindungen auf der neuen Version stattfinden. Die
Wahrheit ist hier etwas komplizierter: die Geräte, die sich nach dem Abschalten mancher der alten Instanzen neu verbinden,
verbinden sich ja genauso häufig mit jeder der Canary-Instanzen wie mit jeder der alten Stable-Instanzen. In dem 7-Tage-Zeitraum
gleichen sich die Anzahl der verbundenen Geräte dann etwas aus, weil Geräte regelmäßig auch aus anderen Gründen die Verbindung
verlieren und sich neu verbinden. Nach einer Woche werden die übrigen 2/3 der Instanzen ersetzt und wie vorhin haben dann die
zuerst deployeten Canary-Instanzen mehr offene Verbindungen als die zuletzt deployeten. Wie gesagt führt das allerdings in der
Praxis zu keinen Problemen und gleicht sich auf Dauer von selbst aus.
Jetzt habt ihr gesehen, wie das System tatsächlich aussieht. Natürlich haben wir in den gut 5 Jahren, in denen das Projekt
existiert, auch dazugelernt und würden einige Dinge anders gestalten. Am Anfang des Vortrags habe ich ja schon gesagt, dass das
Ziel wäre, den WSM so selten wie möglich updaten zu müssen. Dafür ist es hilfreich, wenn der WSM so wenige Aufgaben wie möglich
bekommt. In einer idealen Welt sollte daher der WSM der kleinste Service im gesamten System sein. Die Realität ist: der WSM ist
der mit Abstand größte Service des Heimdall-Systems.
Woran liegt das? Aktuell hat der WSM einige Aufgaben:
* TLS und alles, was dazugehört: die Terminierung der TLS-Verbindung, die Validierung der Geräte-Zertifikate, die Ausnahmen zur
Validierung der Zertifikate und das Blocklisting von Zertifikaten.
* Der Websocket-Upgrade, also die Entgegennahme der initialen HTTP-Verbindung und der Wechsel zum Websocket-Protokoll
* Der Corporate Handshake, der zu Beginn jeder Verbindung stattfinden muss
* Das Message Routing an die Backends inklusive Offenhalten der Verbindungen und Warten auf Antworten
* Die Quarantäne-Logik
* Einige andere Workarounds, die im WSM diverse Spezialfälle abhandeln
Um also den WSM möiglichst klein zu bekommen, müssen möglichst viele dieser Aufgaben ausgelagert werden. Oder umgekehrt: die
Aufgaben, die unbedingt notwendig zum Halten der Verbindung sind, sollten aus dem WSM extrahiert werden.
[35] Bevor ich einen Vorschlag vorstelle, wie wir das erreichen könnten, will ich noch einmal ein bisschen detaillierter
erklären, wie das Websocket-Protokoll funktioniert. Das Gerät eröffnet zu Beginn eine TCP-Verbindung zum WSM. Es ist nicht
besonders wichtig zu wissen, was TCP genau macht, sondern nur, dass man bei einer TCP-Verbindung Daten in beide Richtungen
verschicken kann und dass die TCP-Verbindung jederzeit auf beiden Seiten geschlossen werden kann. Nach Öffnung der
zugrundeliegenden Verbindung findet der TLS-Handshake mit Verschlüsselung und Authentifizierung statt. Ab diesem Zeitpunkt
verläuft die Kommunikation verschlüsselt und der WSM kennt ein Zertifikat, das das jeweilige Gerät ausweist. Als nächstes wird
vom Gerät der Websocket-Endpunkt aufgerufen und der WSM wechselt das Protokoll zum Websocket-Protokoll. Ab hier können beliebige
Daten im Websocket-Protokoll zwischen Gerät und WSM hin und her geschickt werden. Dann passiert der Corporate Handshake und
schließlich der Austausch von beliebigen anderen Nachrichten, beispielsweise über den Status der Geräte. Die Verbindung
inklusive TLS-Terminierung muss von einem einzigen Server gehalten werden, wenn wir nicht komische Nichtstandard-Dinge mit
Verschlüsselung tun wollen, was aus Security-Gesichtspunkten natürlich keine gute Idee ist. Allerdings könnte die gesamte
Kommunikation, die nach der Entschlüsselung der Nachrichten, also unterhalb der ersten gestrichelten Linie, stattfindet,
außerhalb des Services stattfinden, der die Verbindung hält.
Hier wäre daher unser Vorschlag, um die Verbindungen noch länger halten zu können. Vor die übrigen Systeme wird ein Service
gesetzt, den ich hier "Connection Holder" genannt habe und der nur dafür zuständig ist, die TCP-Verbindung zu den Geräten zu
halten, die TLS-Verschlüsselung zu terminieren und zu Validieren, dass die Geräte-Zertifikate von einem bekannten Issuer
ausgestellt wurden. Nach der TLS-Terminierung wird die TCP-Verbindung einfach an das Äquivalent des jetzigen WSMs
weitergetunnelt. Wenn die WSM-Instanz beendet wird, kann der Tunnel an eine andere WSM-Instanz weitergeroutet werden, ohne die
Verbindung zum Gerät abzubrechen. Damit der WSM Zertifikatslogik wie Blocklisting durchführen kann, muss zu Beginn des
Verbindungsaufbaus zwischen Connection Holder und WSM das validierte Geräte-Zertifikat mitgeschickt werden. Außerdem müssen die
Verbindungen eine eindeutige ID bekommen, sodass die WSM-Instanzen beispielsweise persistieren können, ob für eine gegebene
Verbindung bereits der Corporate Handshake durchgeführt wurde. Natürlich könnten auch andere Aufgaben aus dem WSM ausgelagert
werden, hier mal exemplarisch das Message Routing inklusive Warten auf die Antwort des Backends.
[40] Schauen wir uns das ganze in der Laufzeitsicht etwas genauer an. Das Gerät öffnet also eine TCP-Verbindung inklusive TLS
zum Connection Holder. Diese Verbindung soll jetzt möglichst lange bestehen bleiben. Der Connection Holder erstellt eine
eindeutige Verbindungs-ID, die der WSM später nutzen kann, um Verbindungen zu identifizieren und ihren Status zu vergleichen.
Der Connection Holder sucht sich per Load Balancing eine WSM-Instanz, zu der er eine TCP-Verbindung öffnet. Das Gerät öffnet
eine Websocket-Verbindung zum Connection Holder, der wiederum eine Websocket-Verbindung zum WSM öffnet. Dort wird überprüft, ob
das validierte Geräte-Zertifikat akzeptiert werden soll und gegebenenfalls kann der WSM an dieser Stelle die Verbindung sofort
beenden. Andernfalls wird die Connection-ID persistiert, mit dem Status "hier existiert eine Verbindung, für die aber noch kein
Corporate Handshake durchgeführt wurde". Die Antworten "101 Switching Protocols" sorgen dafür, dass die jeweiligen
Websocket-Verbindungen geöffnet sind. Alle weiteren Nachrichten werden vom Connection Holder zwischen Gerät und WSM
weitergetunnelt. Jetzt kann der WSM also wie gehabt den Corporate Handshake durchführen, würde danach auch wieder einen Status
für die jeweilige Verbindung persistieren, und könnte dann Nachrichten wie zuvor weiterleiten. Wenn jetzt die TCP-Verbindung vom
WSM beendet wird, öffnet der Connection Holder eine TCP-Verbindung zu einer anderen WSM-Instanz und versucht, auch dorthin eine
Websocket-Verbindung zu etablieren. Durch die persistierte Connection-ID erkennt die zweite WSM-Instanz, dass der Corporate
Handshake bereits durchgeführt wurde und behandelt die Verbindung entsprechend. Ab diesem Zeitpunkt werden Nachrichten an die
zweite WSM-Instanz weitergetunnelt. Das Gerät merkt davon nichts.
Von innen betrachtet würde der Connection Holder so aussehen: Außen liegt der TCP Connector, der die TCP-Verbindung zum Gerät
entgegennimmt und die Connection-ID erstellt. Dann kommt ein Filter, der für die TLS-Terminierung inklusive Extraktion des
Geräte-Zertifikats zuständig ist. Zum Schluss noch der Websocket-Filter, der die Websocket-Verbindungen zum WSM verwaltet.
Was wären die Nachteile des vorgeschlagenen Refactorings? Zum einen natürlich die Entwicklungskosten, bestehend aus den
Entwicklungskosten des Connection Holders, den notwendigen Refactorings im WSM sowie den notwendigen ausführlichen Tests, um zu
gewährleisten, dass das System funktioniert wie geplant. Zum anderen käme in die Servicelandschaft bei Heimdall ein weiterer
Service hinzu, der potenziell gewartet und beim Onboarding neuer Entwickler:innen berücksichtigt werden muss. Allerdings können
die Nachteile relativiert werden, und es gibt auch einige Vorteile: zum einen ist das notwendige Refactoring im WSM minimal,
denn nur die Logik für das Persistieren und Überprüfen des Verbindungsstatus kommt hinzu. Die Entwicklung des Connection Holder
ist auch nicht sonderlich aufwändig, da er relativ wenige Aufgaben hat. Entsprechend hält sich auch der Overhead beim Onboarding
in Grenzen. Der große Vorteil allerdings ist, dass der Connection Holder äußerst selten Updates benötigt. Hier ist zu erwarten,
dass die Businesslogik sich sehr selten ändert, also werden Updates hauptsächlich aus Security-Gründen nötig werden. Der große
Vorteil ist jetzt, dass WSM-Updates ohne Verbindungsneustarts möglich werden. Insbesondere führt das dazu, dass die Updates des
WSM deutlich schneller stattfinden können und außen liegende Systeme weniger beeinflussen. Das führt zu einer verbesserten
Time-To-Market bei neuen Features und zu verringerten Abhängigkeiten und Kommunikations-Overheads zu anderen Teams.
Zusammenfassend können wir schon im aktuellen System zuverlässig dafür sorgen, dass Konfiguration schnell und unkompliziert ohne
Neuverbindungen geändert werden kann. Neuverbindungen komplett zu vermeiden dürfte nicht möglich sein, aber wir haben Ideen, wie
wir uns in diese Richtung verbessern können. Ich hoffe, ich konnte euch einen guten Einblick in die Herausforderungen geben, vor
die uns die langlaufenden Verbindungen in Zusammenhang mit Systemupdates stellen.
Hier seht ihr noch einmal, wie ihr mich erreichen könnt. Danke fürs Zuhören!

1371
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,15 +9,15 @@
"preview": "vite preview"
},
"devDependencies": {
"@types/reveal.js": "^4.4.8",
"@types/reveal.js": "^5.0.3",
"path": "^0.12.7",
"sass": "^1.69.6",
"typescript": "^5.2.2",
"vite": "^5.0.8",
"vite-plugin-handlebars": "^1.6.0",
"vite-plugin-handlebars": "^2.0.0",
"vite-plugin-inspect": "^0.8.1"
},
"dependencies": {
"reveal.js": "^5.0.4"
"reveal.js": "^5.1.0"
}
}

BIN
public/consulting.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
public/development.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -1,8 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='227.968576pt' height='190.30441pt' viewBox='-72.000111 -72.003505 227.968576 190.30441'>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:11.955168px}
text.f1 {font-family:nf0;font-size:9.96264px}
]]>
@@ -34,5 +34,8 @@ text.f1 {font-family:nf0;font-size:9.96264px}
<path d='M84.7027-1.781L67.3167 14.004L84.7027 5.305V8.848H142.9217V-19.312H84.7027Z' fill='#f6d0d0'/>
<path d='M84.7027-1.781L67.3167 14.004L84.7027 5.305V8.848H142.9217V-19.312H84.7027Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<text class='f1' x='-71.402255' y='124.654175' transform='matrix(1 0 0 1 159.4273 -133.17264)'>W<tspan x='-62.625163'>eb</tspan><tspan x='-49.544224'>Sock</tspan><tspan x='-28.164404'>et</tspan><tspan x='-64.991298' y='136.609343'>Manager</tspan></text>
<path d='M-.7344 62.0977L41.9847 68.7422L-.7344 55.0117V37.5938H-58.5234V65.7539H-.7344Z' fill='#f6d0d0'/>
<path d='M-.7344 62.0977L41.9847 68.7422L-.7344 55.0117V37.5938H-58.5234V65.7539H-.7344Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<text class='f1' x='-71.402255' y='124.654175' transform='matrix(1 0 0 1 16.1983 -76.2666)'>W<tspan x='-62.625163'>ebsock</tspan><tspan x='-31.442106'>et-</tspan><tspan x='-70.640114' y='136.609343'>V</tspan><tspan x='-64.712349'>erbindung</tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='284.66413pt' height='218.65201pt' viewBox='-72.000065 -72.003505 284.66413 218.65201'>
<defs>
<pattern id='pat0-f6d0d0' x='-.99628' y='-.99628' width='2.98883' height='2.98883' viewBox='-.99628 -.99628 2.98883 2.98883' patternUnits='userSpaceOnUse' patternTransform='matrix(1 0 0 -1 -99.7487 164.956)' overflow='visible'>
@@ -12,7 +12,7 @@
</pattern>
</defs>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:6.973848px}
text.f1 {font-family:nf0;font-size:11.955168px}
text.f2 {font-family:nf0;font-size:8.966376px}

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='284.66413pt' height='289.51921pt' viewBox='-72.000065 -72.003505 284.66413 289.51921'>
<defs>
<clipPath id='clip1'>
@@ -7,7 +7,7 @@
</clipPath>
</defs>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,d09GRgABAAAAAAt0AAoAAAAADnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAE8AAABghkcVBGNtYXAAAAFEAAAAjgAAALxDHeW0Z2x5ZgAAAdQAAAelAAAKKDSHcMRoZWFkAAAJfAAAAC4AAAA2Jhjs72hoZWEAAAmsAAAAHgAAACQHPwLDaG10eAAACcwAAACCAAAAiEw6CCBsb2NhAAAKUAAAAEYAAABGKlYoFG1heHAAAAqYAAAAGAAAACAAJwA9bmFtZQAACrAAAAC1AAABEbpJm2Fwb3N0AAALaAAAAAwAAAAgAAMAAHjaY2BmsmWcwMDKwMA0i+nsPxGGfhDN+IbxDYMxIycDELAxQEADAwMzAxJIKS5LB0oaKqgxb/sPVMS8jeEXUJgRKu3BwPD/PwMDAAyPD9kAeNpjYGBgYmBgYAZiESDJCKZZGFYAaTUGBSCLjcGIwYrBicGFwYPBlyGAIZghnCGRIZUhnSGTIZ+hhKGc4YmC2v//QPWGQHWOQHVuQHX+DEFgdclgddkMRQxlEHX/L/w/+f/w/0P/D/7f+3/P/93/d/xf/3/d/7X/1/xf/X/l/xX/be7/BruCCAAAILAw1AAAeNqVVn1MW9cVv+c+YpdAAeOPZ5JAMI5tKMUEnr8/nuMabCB8GAxODIaEr4IDCSQQkoxCQ5I2X42ark0oFWmlLdOybpk0TYuWbe00rV2lJGtXTVpR/9qStNMqdVL+SJcq47Fzn+Ot1SZVk6xz77PePef8zu93zrsESIIQ6KEfEwUhBqNKaXcK0OP73YP19Hyjq4cAsRFCc+ltoiekAuxqEew2c5lCa7SJINTqtBpFPhhoruT+Utzafr7H5xoJDk8Eojdh3gobI71Vde27msRhd6rbfrj7U3RFAmsPyUW6iTxGVIQ4bY5anUZRZlZnNgHewuOP6ix6vUW3RVVUtEWng7+wVatl5/PR7KcrREnWE2IyKI0ggBEMHHwiXdseBI0HNEFpDkwv37pFV1bLgcA5QghHkmtr1Ivn8ghPNhMiqNLZK0sArYXDRwciM1pwtZkrIfnRwSOiPdA6t+/az9t6u1veutLctXPnEl3p73V3FeQNirv3AfRJf4o2hNqE8Ok6wnJLounDGDlEm45QAsWgyQOj7N4PNrMleStxLhp9MXn6zIEXzkzQlY5X+58aXGynl1fPLx0LzC8C0iH72Yx+svHBoDKqDFqDygCfS1dF+K00CzHolH5EV2zSXXy3ce0LmkJ+yrAaGKnMChjHgeB4oxUfFZhACTLldDjtRruBpkrPdMSfa3x1Yf+pPPHx0djIjCsVbnObCt8BiFtr2y8OJC/+ZGoo2nH+RDy2UF+Uz78lkExOh2VsTCcsKwGtQA8HpH5RhDcC0Ct9l65I1yGSeZ/bINebqLNBwPfVyJMa16vwOOR1iOuke9XSPYWILM3R48iUH+pX5+lR6dfSb/Acq6e4dp/OILZ8sgldskIqzIhOBCwsr0S2ZHg6ZI7OhBc6F5YjC99fiIA4Mzp85NCH01A/vNQO1y41DS3F2l/pzz5x4cLJ7QtLr5zKcNUo1xh1yNISmAAf8W8xviY+OHB8/vD1XyT6euNvQ4X0EV2ZvjUhdC0lQM6tG03vIz0RMKYdMEGptShJWUyVAON/DHw+fbyj7meoyV+19vYnrkK19CFdOTAcSWmlGwoY3BFpibN6PYk8OhCrCXm0WcFiBQfTDzYaazdNCYe+Gbt2QaND9/Cg625tI5wea5gW/SNvDux8d1g4O9G8EPJP7e4c/ak/vM1kf3PUNSQ29TT5nGGnO+qIjzoHgi2JJiLzgz3APYP5F2IX8k61oGaGM3IWJRrhNr/xddfyRv3xbb/0fq9Q/QPvdfHd/WO0aPWv4weoerWcuhsaVt+TacJa1K59AXeohZSQClSH2cJ0aLbbHF42LJAkrSWtSJWG11pqmRLzsOt0cDmbKx1wtO4+dmhvY12g3Xd4R3eKFvzT36cbTwyHioQnnoyH2pKiJxSsgmBfT3SNRM2KSnftDBVdVb40jmqM/SnGLsa6oWshj2JsWSRf6wEd6PxxzsO5djnGZ1HyiaksT1Ys0N6TqKh313RYX54vbJut27Mj0HYwVTgyncblWLsPf+MI6m8DaoRh4FH1RovCgvB4xoPTzvA5Jvv3erwu6pnonfJ3NE9YrfuaY6CevxiH6lXSEIMLC9zooX5pz0zabxXm/BnmLE+idemWlfMtBoNWptfJK7gyhdJgtwKUhif9vrFtg1PS/J7o1qZic/BMKJkD9bRrfehIi7ZlrvH5g2U5yW8ZzcW7QBrsVLYMyrmXyzE2EHMmd6eg0rDULU45hF1h/A8MuU6IY8LNuQ4OuUY3GcREUxd49u7azxBVaVtdDNKzF3a2rv59dBZqKre07ojWRS8+S0cPDT60OWcw5nZEdwk1zJFcnH/YEZbMWH/J5wtrTXq9SUuLl1V6vUGvQ+5akcB7WF98W63UsokSAEGpNn5Q7/O532/+5MsIFAQ/4IikEW/eld6T+e5C+xLHJrocAR1z8v8Ym3sK8ZaiL54VM22wL1GCeaBMb7CmuDlBi5OOo8ZNA54fZ/nE8LbEOl8w5GnT+GjxzpqaVK3zbWkRhhrDNOqVXoNUuC4YkM7RYjkOy5npTZ2Jo+O/6vok3dztjMfB6w8541ovBqqxDwxIl2CwMRL2yF4Y//dpAfrIZ6pVZ6hPzzdGiPytkBnRVvkmwmMn0Yw/7xv6ztPWmCM6DHzzXGTpmdzoXAgW57MGZmdHcv0j7rmnM/k1oW+cu5BJSuAZ/dCg0bhbC7wesI7pC+CzrIBXeoEWx3cr2DnWw+/jOaM8fzi73LHp6ZMZPma7wD4lDvh2w/moKdWVmPBFDzX4lqPmicSug36uPSS2nq50lZQ7nwh0JRqtQXus0lTpq6hvT4btHke6X3Owp0z0CvtCqrUCki7rj1cw6CqjXbD/cHKy1JJv4IrK/a6hIXrlbI20WFWZtTUbIhFI1ZxFH1h7WMFKYuLpoSX847L/xtabYgxurN5hRAHTAf0zbv/3fPvDY7nHbEfzcib9l4SzCuUp27J/rroGXpeGXTZ4Y/UOXC3ZLHXKlJOsR/Pttjzfaon3/5lxXKYD/n3V+YapV6Yz6/D3MW/iebPum2YgfVHF60v1+nzWUzyPXRFbe0jdqAJ2v9rwlRvWf29i6TvW79PLO+mL16Mbl/prC/kXQzdNTgAAAHjaY2BkYGAA4rfsX/ji+W2+MjCzMIDAw0NXniLo/xrMNcwgLgcDE4gCAFgXDAoAAHjaY2BkYGDe9p8NSE5j4GZgYa5hAIqgACUATykDCgAAeNpjPMbAwGTOEAnEJgzXGOyZ6hn4mYoZYpjmAbE9EO9m8GS6whDDXAZkb2GwYwLRnQxRTHEMOszTGOSZVBiMmPgZ9JksGMyYBBh0geaYMTxl8Gb8yuAHpEOZuxm8mYwY/JhsGXQZI4A0G4MRoycDN+MbBmFmZgYFsP4JDMEAsvgXmAAAAAAAAAAQADgAWAB0AKYAygDgARQBLAFOAXwBnAHEAfwCIgJgAo4CugLsAyYDPgNYA2QDmAO6A+gEBAQ4BFoEbASSBOgFFAAAeNpjYGRgYFBisGFgYQABRgY0AAAKHgBleNotjj8LgzAQxZ9UhdqOpYVO+QTBP107dXB3EDqVSqI4mICK4NLP3hfNhTt+7949CIAEPwRwFSDepqsQB6qdI5xw9Bxzf/Gc4I4bdRA694zMc8irp+cIV7w8x3xvzwke+FS2sbM1bVrrceqtEZlMqUpt9PidtRLNKtTST0s3iEJmMkcFi4Y9sw1apKihMWJCv20EPyG53b2Sntn8LxMain6DlVNhYWLi7DBQF0y5ZP4HDeck6QAAAHjaY2BmwAsAAH0ABA==) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:11.955168px}
text.f1 {font-family:nf0;font-size:6.973848px}
text.f2 {font-family:nf0;font-size:8.966376px}

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='284.66413pt' height='289.51921pt' viewBox='-72.000065 -72.003505 284.66413 289.51921'>
<defs>
<clipPath id='clip1'>
@@ -10,7 +10,7 @@
</clipPath>
</defs>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:6.973848px}
text.f1 {font-family:nf0;font-size:11.955168px}
text.f2 {font-family:nf0;font-size:8.966376px}
@@ -63,7 +63,7 @@ text.f3 {font-family:nf0;font-size:9.96264px}
<path d='M-17.1445 65.742C3.8163 78.148 14.7973 87.566 28.5433 104.312' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M30.12501 106.241897L28.902356 102.624707L28.60548 104.386426L26.820323 104.33565Z'/>
<path d='M30.12501 106.241897L28.902356 102.624707L28.60548 104.386426L26.820323 104.33565Z' stroke='#000' fill='none' stroke-width='.398481' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f0' x='-99.748699' y='235.82189' transform='matrix(.75899 .65102 -.65102 .75899 228.126304 -43.459441)'>Back<tspan x='-84.817698'>end</tspan><tspan x='-71.825415'>2</tspan></text>
<text class='f0' x='-99.748699' y='235.82189' transform='matrix(.75899 .65102 -.65102 .75899 228.126304 -43.459441)'>Back<tspan x='-84.817698'>end</tspan><tspan x='-71.825415'>1</tspan></text>
<path d='M37.0503 106.395L-10.7852-49.059' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-11.519483-51.445295L-11.753855-47.636708L-10.812453-49.152332L-9.183546-48.42577Z'/>
<path d='M-11.519483-51.445295L-11.753855-47.636708L-10.812453-49.152332L-9.183546-48.42577Z' stroke='#000' fill='none' stroke-width='.39848' stroke-miterlimit='10' stroke-linejoin='bevel'/>

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='227.96913pt' height='251.332195pt' viewBox='-72.000065 -72.004 227.96913 251.332195'>
<defs>
<clipPath id='clip1'>
@@ -10,7 +10,7 @@
</clipPath>
</defs>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:6.973848px}
text.f1 {font-family:nf0;font-size:11.955168px}
text.f2 {font-family:nf0;font-size:8.966376px}

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='313.011576pt' height='289.5192pt' viewBox='-72.000111 -72.003505 313.011576 289.5192'>
<defs>
<clipPath id='clip1'>
@@ -16,7 +16,7 @@
</clipPath>
</defs>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:6.973848px}
text.f1 {font-family:nf0;font-size:8.966376px}
text.f2 {font-family:nf0;font-size:11.955168px}

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,8 +1,8 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='232.18001pt' height='144.83962pt' viewBox='-72.000205 -71.999705 232.18001 144.83962'>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:14.346196px}
text.f1 {font-family:nf0;font-size:9.96264px}
]]>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,49 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='227.968576pt' height='246.85511pt' viewBox='-72.000111 -72.003505 227.968576 246.85511'>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:9.96264px}
]]>
</style>
<g id='page1'>
<path d='M58.0077 155.168H25.9648C24.3086 155.168 22.9648 156.5117 22.9648 158.168V171.4531C22.9648 173.1094 24.3086 174.4531 25.9648 174.4531H58.0077C59.6637 174.4531 61.0077 173.1094 61.0077 171.4531V158.168C61.0077 156.5117 59.6637 155.168 58.0077 155.168Z' fill='#42d4fb'/>
<path d='M58.0077 155.168H25.9648C24.3086 155.168 22.9648 156.5117 22.9648 158.168V171.4531C22.9648 173.1094 24.3086 174.4531 25.9648 174.4531H58.0077C59.6637 174.4531 61.0077 173.1094 61.0077 171.4531V158.168C61.0077 156.5117 59.6637 155.168 58.0077 155.168Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f0' x='-71.402255' y='193.157769' transform='matrix(1 0 0 1 100.3659 -24.805)'>Ger<tspan x='-56.308852'>ät</tspan></text>
<path d='M57.9177-71.605H26.0547C24.3945-71.605 23.0547-70.262 23.0547-68.605V-55.32C23.0547-53.664 24.3945-52.32 26.0547-52.32H57.9177C59.5747-52.32 60.9177-53.664 60.9177-55.32V-68.605C60.9177-70.262 59.5747-71.605 57.9177-71.605Z' fill='#42d4fb'/>
<path d='M57.9177-71.605H26.0547C24.3945-71.605 23.0547-70.262 23.0547-68.605V-55.32C23.0547-53.664 24.3945-52.32 26.0547-52.32H57.9177C59.5747-52.32 60.9177-53.664 60.9177-55.32V-68.605C60.9177-70.262 59.5747-71.605 57.9177-71.605Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f0' x='-71.402255' y='193.157769' transform='matrix(1 0 0 1 100.4556 -251.5795)'>WSM</text>
<path d='M79.2457 84.305H4.7227C3.0664 84.305 1.7227 85.645 1.7227 87.305V100.5859C1.7227 102.2422 3.0664 103.5859 4.7227 103.5859H79.2457C80.9027 103.5859 82.2457 102.2422 82.2457 100.5859V87.305C82.2457 85.645 80.9027 84.305 79.2457 84.305Z' fill='#fff'/>
<path d='M79.2457 84.305H4.7227C3.0664 84.305 1.7227 85.645 1.7227 87.305V100.5859C1.7227 102.2422 3.0664 103.5859 4.7227 103.5859H79.2457C80.9027 103.5859 82.2457 102.2422 82.2457 100.5859V87.305C82.2457 85.645 80.9027 84.305 79.2457 84.305Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f0' x='-71.402255' y='193.157769' transform='matrix(1 0 0 1 79.12527 -95.6721)'>T<tspan x='-65.594035'>CP</tspan><tspan x='-50.580344'>Connect</tspan><tspan x='-14.226676'>or</tspan></text>
<path d='M66.8247 41.637H17.1484C15.4883 41.637 14.1484 42.98 14.1484 44.637V58.211C14.1484 59.867 15.4883 61.211 17.1484 61.211H66.8247C68.4807 61.211 69.8247 59.867 69.8247 58.211V44.637C69.8247 42.98 68.4807 41.637 66.8247 41.637Z' fill='#fff'/>
<path d='M66.8247 41.637H17.1484C15.4883 41.637 14.1484 42.98 14.1484 44.637V58.211C14.1484 59.867 15.4883 61.211 17.1484 61.211H66.8247C68.4807 61.211 69.8247 59.867 69.8247 58.211V44.637C69.8247 42.98 68.4807 41.637 66.8247 41.637Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f0' x='-71.402255' y='193.157769' transform='matrix(1 0 0 1 91.5488 -138.0478)'>TLS<tspan x='-51.895413'>Filter</tspan></text>
<path d='M82.4297-.883H1.5391C-.1172-.883-1.4609 .461-1.4609 2.117V15.691C-1.4609 17.348-.1172 18.691 1.5391 18.691H82.4297C84.0857 18.691 85.4297 17.348 85.4297 15.691V2.117C85.4297 .461 84.0857-.883 82.4297-.883Z' fill='#fff'/>
<path d='M82.4297-.883H1.5391C-.1172-.883-1.4609 .461-1.4609 2.117V15.691C-1.4609 17.348-.1172 18.691 1.5391 18.691H82.4297C84.0857 18.691 85.4297 17.348 85.4297 15.691V2.117C85.4297 .461 84.0857-.883 82.4297-.883Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f0' x='-71.402255' y='193.157769' transform='matrix(1 0 0 1 75.94215 -180.568)'>W<tspan x='-62.625163'>ebsock</tspan><tspan x='-31.442106'>et</tspan><tspan x='-20.682462'>Filter</tspan></text>
<path d='M-71.402346 130.4648V-27.617C-71.402346-30.93-68.71485-33.617-65.40235-33.617H149.3707C152.6877-33.617 155.3707-30.93 155.3707-27.617V130.4648C155.3707 133.7773 152.6877 136.4648 149.3707 136.4648H-65.40235C-68.71485 136.4648-71.402346 133.7773-71.402346 130.4648Z' stroke='#000' fill='none' stroke-width='1.19553' stroke-miterlimit='10'/>
<path d='M148.7737-46.621H75.3277C72.0117-46.621 69.3277-43.934 69.3277-40.621V-43.051C69.3277-39.734 72.0117-37.051 75.3277-37.051H148.7737C152.0897-37.051 154.7737-39.734 154.7737-43.051V-40.621C154.7737-43.934 152.0897-46.621 148.7737-46.621Z' fill='#fff'/>
<text class='f0' x='-71.402255' y='193.157769' transform='matrix(1 0 0 1 141.7285 -231.3067)'>Connection<tspan x='-19.247841'>Holder</tspan></text>
<path d='M41.9847 152.0742V106.6797' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M41.984335 154.56991L43.33199 150.999593L41.984335 152.17537L40.64059 150.999593Z'/>
<path d='M41.984335 154.56991L43.33199 150.999593L41.984335 152.17537L40.64059 150.999593Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M41.984335 104.18362L40.64059 107.753934L41.984335 106.58206L43.33199 107.753934Z'/>
<path d='M41.984335 104.18362L40.64059 107.753934L41.984335 106.58206L43.33199 107.753934Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M41.9847 81.207V64.305' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M41.984335 83.70314L43.33199 80.132826L41.984335 81.30861L40.64059 80.132826Z'/>
<path d='M41.984335 83.70314L43.33199 80.132826L41.984335 81.30861L40.64059 80.132826Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M41.984335 61.80856L40.64059 65.378874L41.984335 64.20309L43.33199 65.378874Z'/>
<path d='M41.984335 61.80856L40.64059 65.378874L41.984335 64.20309L43.33199 65.378874Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M41.9847 38.543V21.785' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M41.984335 41.03906L43.33199 37.468751L41.984335 38.64453L40.64059 37.468751Z'/>
<path d='M41.984335 41.03906L43.33199 37.468751L41.984335 38.64453L40.64059 37.468751Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M41.984335 19.28905L40.64059 22.859361L41.984335 21.68358L43.33199 22.859361Z'/>
<path d='M41.984335 19.28905L40.64059 22.859361L41.984335 21.68358L43.33199 22.859361Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M41.9847-3.977V-49.227' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M41.984335-1.48046L43.33199-5.050777L41.984335-3.875L40.64059-5.050777Z'/>
<path d='M41.984335-1.48046L43.33199-5.050777L41.984335-3.875L40.64059-5.050777Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M41.984335-51.72268L40.64059-48.152368L41.984335-49.32815L43.33199-48.152368Z'/>
<path d='M41.984335-51.72268L40.64059-48.152368L41.984335-49.32815L43.33199-48.152368Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,112 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='479.912584pt' height='392.851205pt' viewBox='-72.000105 -72.003505 479.912584 392.851205'>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:6.973848px}
text.f1 {font-family:nf0;font-size:8.966376px}
text.f2 {font-family:nf0;font-size:9.96264px}
]]>
</style>
<g id='page1'>
<path d='M-36.5586-71.605H-68.6016C-70.2578-71.605-71.6016-70.266-71.6016-68.605V-55.324C-71.6016-53.668-70.2578-52.324-68.6016-52.324H-36.5586C-34.9023-52.324-33.5586-53.668-33.5586-55.324V-68.605C-33.5586-70.266-34.9023-71.605-36.5586-71.605Z' fill='#fff'/>
<path d='M-36.5586-71.605H-68.6016C-70.2578-71.605-71.6016-70.266-71.6016-68.605V-55.324C-71.6016-53.668-70.2578-52.324-68.6016-52.324H-36.5586C-34.9023-52.324-33.5586-53.668-33.5586-55.324V-68.605C-33.5586-70.266-34.9023-71.605-36.5586-71.605Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 -13.0213 -379.1419)'>Ger<tspan x='-37.486993'>ät</tspan></text>
<path d='M111.4566-71.605H89.5276C87.8706-71.605 86.5276-70.266 86.5276-68.605V-55.324C86.5276-53.668 87.8706-52.324 89.5276-52.324H111.4566C113.1136-52.324 114.4566-53.668 114.4566-55.324V-68.605C114.4566-70.266 113.1136-71.605 111.4566-71.605Z' fill='#fff'/>
<path d='M111.4566-71.605H89.5276C87.8706-71.605 86.5276-70.266 86.5276-68.605V-55.324C86.5276-53.668 87.8706-52.324 89.5276-52.324H111.4566C113.1136-52.324 114.4566-53.668 114.4566-55.324V-68.605C114.4566-70.266 113.1136-71.605 111.4566-71.605Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 145.1082 -379.1419)'>CH</text>
<path d='M273.4686-71.605H233.6636C232.0076-71.605 230.6636-70.266 230.6636-68.605V-55.324C230.6636-53.668 232.0076-52.324 233.6636-52.324H273.4686C275.1246-52.324 276.4686-53.668 276.4686-55.324V-68.605C276.4686-70.266 275.1246-71.605 273.4686-71.605Z' fill='#fff'/>
<path d='M273.4686-71.605H233.6636C232.0076-71.605 230.6636-70.266 230.6636-68.605V-55.324C230.6636-53.668 232.0076-52.324 233.6636-52.324H273.4686C275.1246-52.324 276.4686-53.668 276.4686-55.324V-68.605C276.4686-70.266 275.1246-71.605 273.4686-71.605Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 289.2454 -379.1419)'>WSM<tspan x='-26.71739'>1</tspan></text>
<path d='M350.0036-71.605H310.2036C308.5426-71.605 307.2036-70.266 307.2036-68.605V-55.324C307.2036-53.668 308.5426-52.324 310.2036-52.324H350.0036C351.6606-52.324 353.0036-53.668 353.0036-55.324V-68.605C353.0036-70.266 351.6606-71.605 350.0036-71.605Z' fill='#fff'/>
<path d='M350.0036-71.605H310.2036C308.5426-71.605 307.2036-70.266 307.2036-68.605V-55.324C307.2036-53.668 308.5426-52.324 310.2036-52.324H350.0036C351.6606-52.324 353.0036-53.668 353.0036-55.324V-68.605C353.0036-70.266 351.6606-71.605 350.0036-71.605Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 365.7814 -379.1419)'>WSM<tspan x='-26.71739'>2</tspan></text>
<path d='M-52.582033-51.996V320.64845' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M100.5236-51.996V320.64845' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M253.6246-51.996V320.64845' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M330.1756-51.996V320.64845' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M-49.88281-14.793H97.8556' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-52.38279-14.792923L-48.808575-13.44527L-49.98436-14.792923L-48.808575-16.13667Z'/>
<path d='M-52.38279-14.792923L-48.808575-13.44527L-49.98436-14.792923L-48.808575-16.13667Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M100.3516-14.792923L96.781292-16.13667L97.95317-14.792923L96.781292-13.44527Z'/>
<path d='M100.3516-14.792923L96.781292-16.13667L97.95317-14.792923L96.781292-13.44527Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 41.1279 -341.1211)'>T<tspan x='-46.772176'>CP-V</tspan><tspan x='-25.40232'>erbindung</tspan></text>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 68.0224 -324.8061)'>TLS</text>
<path d='M-52.582033 52.293H97.8556' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M100.3516 52.293018L96.781284 50.94927L97.95316 52.293018L96.781284 53.64067Z'/>
<path d='M100.3516 52.293018L96.781284 50.94927L97.95316 52.293018L96.781284 53.64067Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 6.2183 -273.966)'>H<tspan x='-45.676286'>T</tspan><tspan x='-39.648887'>TP</tspan><tspan x='-25.153253'>GE</tspan><tspan x='-12.590358'>T</tspan><tspan x='-4.221747'>W</tspan><tspan x='4.555345'>ebsock</tspan><tspan x='35.738402'>et-Endpunkt</tspan></text>
<path d='M-49.88281 126.836H100.5506' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M-52.38279 126.835565L-48.808575 128.17931L-49.98436 126.835565L-48.808575 125.48791Z'/>
<path d='M-52.38279 126.835565L-48.808575 128.17931L-49.98436 126.835565L-48.808575 125.48791Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 23.7378 -199.495)'>101<tspan x='-33.601574'>Switching</tspan><tspan x='11.45944'>Pr</tspan><tspan x='20.834278'>ot</tspan><tspan x='29.511732'>ocols</tspan></text>
<path d='M-49.88281 152.93H250.9846' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-52.38279 152.929801L-48.808575 154.27355L-49.98436 152.929801L-48.808575 151.58214Z'/>
<path d='M-52.38279 152.929801L-48.808575 154.27355L-49.98436 152.929801L-48.808575 151.58214Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M253.4803 152.929801L249.90999 151.58214L251.08577 152.929801L249.90999 154.27355Z'/>
<path d='M253.4803 152.929801L249.90999 151.58214L251.08577 152.929801L249.90999 154.27355Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M48.4996 149.895H152.5976V135.68H48.4996Z' fill='#fff'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 104.4028 -174.244)'>W<tspan x='-43.803304'>ebsock</tspan><tspan x='-12.620247'>et-A</tspan><tspan x='4.734669'>ustausch</tspan></text>
<path d='M-49.88281 302.0117H327.5506' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-52.38279 302.011617L-48.808575 303.35537L-49.98436 302.011617L-48.808575 300.66396Z'/>
<path d='M-52.38279 302.011617L-48.808575 303.35537L-49.98436 302.011617L-48.808575 300.66396Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M330.04703 302.011617L326.476714 300.66396L327.64859 302.011617L326.476714 303.35537Z'/>
<path d='M330.04703 302.011617L326.476714 300.66396L327.64859 302.011617L326.476714 303.35537Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M125.0706 316.42189H229.1676V302.211H125.0706Z' fill='#fff'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 180.9704 -7.716)'>W<tspan x='-43.803304'>ebsock</tspan><tspan x='-12.620247'>et-A</tspan><tspan x='4.734669'>ustausch</tspan></text>
<path d='M100.5506-3.609C109.2696-3.609 109.2696 7.57 103.2456 7.57' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M100.74958 7.570313L104.319896 8.91797L103.14802 7.570313L104.319896 6.22656Z'/>
<path d='M100.74958 7.570313L104.319896 8.91797L103.14802 7.570313L104.319896 6.22656Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f1' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 163.1914 -315.42006)'>erstelle<tspan x='-22.076788'>connection</tspan><tspan x='23.660693'>ID</tspan></text>
<path d='M103.2456 29.934H250.9846' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M100.74963 29.933599L104.319942 31.27735L103.14807 29.933599L104.319942 28.58594Z'/>
<path d='M100.74963 29.933599L104.319942 31.27735L103.14807 29.933599L104.319942 28.58594Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M253.48084 29.933599L249.910532 28.58594L251.08631 29.933599L249.910532 31.27735Z'/>
<path d='M253.48084 29.933599L249.910532 28.58594L251.08631 29.933599L249.910532 31.27735Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 194.2584 -296.3975)'>T<tspan x='-46.772176'>CP-V</tspan><tspan x='-25.40232'>erbindung</tspan></text>
<path d='M100.5506 70.93H250.9846' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M253.48003 70.929734L249.909715 69.58598L251.0855 70.929734L249.909715 72.27739Z'/>
<path d='M253.48003 70.929734L249.909715 69.58598L251.0855 70.929734L249.909715 72.27739Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 159.3494 -255.3293)'>H<tspan x='-45.676286'>T</tspan><tspan x='-39.648887'>TP</tspan><tspan x='-25.153253'>GE</tspan><tspan x='-12.590358'>T</tspan><tspan x='-4.221747'>W</tspan><tspan x='4.555345'>ebsock</tspan><tspan x='35.738402'>et-Endpunkt</tspan></text>
<text class='f0' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 172.6494 -240.967)'>inkl.<tspan x='-38.29795'>Connection-ID</tspan><tspan x='6.620609'>+</tspan><tspan x='12.248509'>Ger</tspan><tspan x='22.813889'>äte-Z</tspan><tspan x='38.477145'>er</tspan><tspan x='44.586235'>tifikat</tspan></text>
<path d='M103.2456 108.199H253.6796' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M100.74975 108.199549L104.320064 109.5433L103.14428 108.199549L104.320064 106.85189Z'/>
<path d='M100.74975 108.199549L104.320064 109.5433L103.14428 108.199549L104.320064 106.85189Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 176.8684 -218.131)'>101<tspan x='-33.601574'>Switching</tspan><tspan x='11.45944'>Pr</tspan><tspan x='20.834278'>ot</tspan><tspan x='29.511732'>ocols</tspan></text>
<path d='M103.2456 179.016H253.6796' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M100.74987 179.015931L104.320186 180.35968L103.1444 179.015931L104.320186 177.66827Z'/>
<path d='M100.74987 179.015931L104.320186 180.35968L103.1444 179.015931L104.320186 177.66827Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 175.6334 -147.315)'>V<tspan x='-46.652632'>erbindung</tspan><tspan x='-.535578'>wir</tspan><tspan x='12.455708'>d</tspan><tspan x='20.405888'>beendet</tspan></text>
<path d='M103.2456 205.105H327.5506' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M100.7499 205.10523L104.320216 206.45289L103.14444 205.10523L104.320216 203.76148Z'/>
<path d='M100.7499 205.10523L104.320216 206.45289L103.14444 205.10523L104.320216 203.76148Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M330.04654 205.10523L326.476226 203.76148L327.6481 205.10523L326.476226 206.45289Z'/>
<path d='M330.04654 205.10523L326.476226 203.76148L327.6481 205.10523L326.476226 206.45289Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M153.6676 204.906H231.1836V188.703H153.6676Z' fill='#fff'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 209.5704 -121.223)'>T<tspan x='-46.772176'>CP-V</tspan><tspan x='-25.40232'>erbindung</tspan></text>
<path d='M100.5506 234.9258H327.5506' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M330.04666 234.925977L326.476348 233.57832L327.64822 234.925977L326.476348 236.26973Z'/>
<path d='M330.04666 234.925977L326.476348 233.57832L327.64822 234.925977L326.476348 236.26973Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M141.7306 234.7266H289.0666V218.59H141.7306Z' fill='#fff'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 197.6314 -91.335)'>H<tspan x='-45.676286'>T</tspan><tspan x='-39.648887'>TP</tspan><tspan x='-25.153253'>GE</tspan><tspan x='-12.590358'>T</tspan><tspan x='-4.221747'>W</tspan><tspan x='4.555345'>ebsock</tspan><tspan x='35.738402'>et-Endpunkt</tspan></text>
<path d='M155.0316 247.1367H275.7656V235.125H155.0316Z' fill='#fff'/>
<text class='f0' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 210.9314 -76.973)'>inkl.<tspan x='-38.29795'>Connection-ID</tspan><tspan x='6.620609'>+</tspan><tspan x='12.248509'>Ger</tspan><tspan x='22.813889'>äte-Z</tspan><tspan x='38.477145'>er</tspan><tspan x='44.586235'>tifikat</tspan></text>
<path d='M103.2456 275.9219H330.2456' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M100.75004 275.921596L104.320354 277.26925L103.14457 275.921596L104.320354 274.57785Z'/>
<path d='M100.75004 275.921596L104.320354 277.26925L103.14457 275.921596L104.320354 274.57785Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M159.2496 275.7227H271.5466V259.5195H159.2496Z' fill='#fff'/>
<text class='f2' x='-52.580396' y='320.718494' transform='matrix(1 0 0 1 215.1504 -50.407)'>101<tspan x='-33.601574'>Switching</tspan><tspan x='11.45944'>Pr</tspan><tspan x='20.834278'>ot</tspan><tspan x='29.511732'>ocols</tspan></text>
<path d='M253.6796 83.977C262.4026 83.977 262.4026 95.156 256.3786 95.156' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M253.87875 95.156254L257.452971 96.50391L256.27719 95.156254L257.452971 93.8125Z'/>
<path d='M253.87875 95.156254L257.452971 96.50391L256.27719 95.156254L257.452971 93.8125Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f1' x='-52.580396' y='308.763326' transform='matrix(1 0 0 1 316.3214 -221.9851)'>persistier<tspan x='-16.445894'>e</tspan><tspan x='-52.580396' y='320.718494'>Connection-ID</tspan></text>
<path d='M330.2456 249.832C338.9646 249.832 338.9646 261.0117 332.9416 261.0117' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M330.44546 261.012122L334.015774 262.35587L332.8439 261.012122L334.015774 259.66447Z'/>
<path d='M330.44546 261.012122L334.015774 262.35587L332.8439 261.012122L334.015774 259.66447Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f1' x='-52.580396' y='296.808158' transform='matrix(1 0 0 1 392.8864 -50.024)'>hole<tspan x='-33.831707'>persistier</tspan><tspan x='2.598682'>ten</tspan><tspan x='-52.580396' y='308.763326'>Status</tspan><tspan x='-25.080524'>zu</tspan><tspan x='-52.580396' y='320.718494'>Connection-ID</tspan></text>
<path d='M97.2306 156.25H103.8706V149.605H97.2306Z' fill='#fff'/>
<path d='M97.2306 156.25H103.8706V149.605H97.2306Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M97.2306 305.332H103.8706V298.6914H97.2306Z' fill='#fff'/>
<path d='M97.2306 305.332H103.8706V298.6914H97.2306Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,24 +1,24 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.1.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='243.350607pt' height='134.034552pt' viewBox='-68.679612 -68.681027 243.350607 134.034552'>
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='274.534007pt' height='134.136146pt' viewBox='-68.680031 -68.681021 274.534007 134.136146'>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,d09GRgABAAAAAANQAAoAAAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAEcAAABghe504GNtYXAAAAE8AAAAMQAAADwA1wAvZ2x5ZgAAAXAAAACdAAAApIpmcThoZWFkAAACEAAAAC8AAAA2JPTtlmhoZWEAAAJAAAAAIAAAACQGHAFYaG10eAAAAmAAAAAMAAAADAViADZsb2NhAAACbAAAAAgAAAAIADAAUm1heHAAAAJ0AAAAGAAAACAABgAhbmFtZQAAAowAAAC1AAABEbpJm2Fwb3N0AAADRAAAAAwAAAAgAAMAAHjaY2BmPM04gYGVgYFpFtPZfyIM/SCa8Q3jGwZjRk4GIGBjgANGBiSQUlyWDpRUZihh3vYfqIh5G8MvVDX//zMwAAAlzQ+8AHjaY2BgYGJgYGAGYhEgyQimWRg0gDQbkGYEyiozlPz/D+SD6f/3/veBVQEBAJIxCQAAAAB42mNgYtBmYGCKYLrBIM0gz8CgqsyubK5sagzGxuxgLKoMxsrqQFHGynlqRur17VrdU9SN1OcCcVG1VkOHulHeXK15Z8+e1b9jcAEIDO7on/1zhwEIGBm4/39lVGVawSDKwCAsCjRIUETM2MhcnE2ZTc1UEGiN6eqCAgV1fkVmSQ1bi5QUphXdhv+m62qzGHAyurszZhp2AwBuJil7AAAAeNpjYGRgYADitaGbZ8Xz23xlYGZhAIGHh648Q9D/vzJFMN0AcjkYmECiAHowDeQAeNpjYGRgYN72n42BgSmYgfv/b6YIBqAICmAGAG/SBHgBxgAAAlMAKwFJAAsAAAAAADAAUnjaY2BkYGBgZlBgYGIAAUYGNAAAA+8AKHjaLY4/C4MwEMWfVIXajqWFTvkEwT9dO3VwdxA6lUqiOJiAiuDSz94XzYU7fu/ePQiABD8EcBUg3qarEAeqnSOccPQcc3/xnOCOG3UQOveMzHPIq6fnCFe8PMd8b88JHvhUtrGzNW1a63HqrRGZTKlKbfT4nbUSzSrU0k9LN4hCZjJHBYuGPbMNWqSooTFiQr9tBD8hud29kp7Z/C8TGop+g5VTYWFi4uwwUBdMuWT+Bw3nJOkAAAB42mNgZsALAAB9AAQ=) format('woff');}
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,d09GRgABAAAAAAUAAAoAAAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAEkAAABghfB1eGNtYXAAAAFAAAAARAAAAFwCYgDrZ2x5ZgAAAYQAAAIpAAACVISaSldoZWFkAAADsAAAAC4AAAA2JStx7mhoZWEAAAPgAAAAIAAAACQGLQHEaG10eAAABAAAAAAcAAAAHA2pASxsb2NhAAAEHAAAABAAAAAQAZoCQG1heHAAAAQsAAAAGAAAACAADAA9bmFtZQAABEQAAACwAAABC4sROltwb3N0AAAE9AAAAAwAAAAgAAMAAHjaY2Bm/Mw4gYGVgYFpFtPZfyIM/SCa8Q3jGwZjRk4GIGBjgANmBiSQUlyWDpRUZnjCvO0/UBHzNoZfQGFGhIr//xkYAEFrEFYAAAB42mNgYGBiYGBgBmIRIMkIplkYPIA0HwMHUI6NQZnBnSGVoYihhOHJ//9AcRT+/3v/d/+f93/S/4n/lcC6kQAAdwYTQXjaNZDLbxJRFMbvueCQSgRGZ+ZCDBWYMKMglN5hBiiPSrCtNIHSVvFFalMwilWDNlar8VHjoykmumiqm3blookr/wB3bklcGsNKd93bVQNeaDy5X869d3HO9/0QRkGE8CX8Ex1HJxDyyxY5JutaX5qlL1HuS1bZL6xsK1R9/jbQ3FCpusV0/0ngxZpK724Ftlut1lA78oNVpD3U2m8jVoDy3T1cx7+Rj023gewLQxqihkYlIofZk3ODMAgajRkxXda9uO5Znym/zn9avbdmyxy5OXtjOV4fn0r4j34HKIfp9OZCZfPrUq008+FVeXZ1zGUn3zS2B6NQdw92sYpIL8ehgzUZNlhyg1cUJI0aMcKZfJzFq4cBPOONdGrxTHWp8+xWKTLpVrLruYoVxvCFw7mVglh4mn/zwGetPJYV9zXoVM9bClWWpcgCTbIdNtYV5t3Cy7xGWBgC5wQhUXQkRyC86HTArnk02XmH3eV5rsfA2v0LfryDRISOiQwm3/PD7MicovMMtf6l0fCodq/JdTIdr9XwTnO48zEUNEcGYGIC6sNNZEaU5fvDOA6iU4iiJEJeRe3xVPSokQQ92vMjqgdkeYGIKu0RtQHLbooaVBI4nxL7f4HPAybPglGcf/nwTv7s6HTq0cUrdezYT89Jty9fz/kkRWLnF/ETokguLXC6nJuqZEZy2RBk566WuqikcMEEXcaZeCiF3/PE6XE67bzT6SXkHyKthF0AAAB42mNgZGBgAGH3RWbx/DZfGZhZGEDg4dXpvAj6/1emTKZHQC4HAxNIFAAXfwrJAAB42mNgZGBg3vafjYGBaTcD9//fTJkMQBEUwA4Ae0EE9QHGAAACUwArArsASQIQAC0BWABOAUkACwIkADIAAAAAADAAZACWALIA1AEqeNpjYGRgYGBnsGFgYQABRgY0AAAHRQBKeNotjD8PgjAQxR8RSERHo479BMif0cmJnQEnB5sWwkCbUELC4mf3Ab3mXn7v3l0BJPghwFoB4k3XCnGg2znCCUfPMecXzwnuuNEH4Zqe8fAccuvpOcIVL88x39tzggyf2ko7WdNmjR5db43I04yu0kaP30krIReh5t7N3SDKtEANC8me2AYtv2igMcKh3yYCOVJO96xiZrb8ywsNxVxioSrMvHDUDgN9yaviDyXAJBt42mNgZsALAAB9AAQ=) format('woff');}
text.f0 {font-family:nf0;font-size:9.96264px}
]]>
</style>
<g id='page1'>
<path d='M-65.03906 53.917971H170.3746' stroke='#000' fill='none' stroke-width='.3985'/>
<path d='M172.87455 53.917971L169.300334 52.57031L170.47612 53.917971L169.300334 55.26172Z'/>
<path d='M172.87455 53.917971L169.300334 52.57031L170.47612 53.917971L169.300334 55.26172Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f0' x='-59.371412' y='53.91721' transform='matrix(1 0 0 1 230.8444 10.1351)'>t</text>
<path d='M-59.371095 59.58594V-62.4458' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-59.371095-64.9414L-60.71875-61.367177L-59.371095-62.54296L-58.02734-61.367177Z'/>
<path d='M-59.371095-64.9414L-60.71875-61.367177L-59.371095-62.54296L-58.02734-61.367177Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f0' x='-59.371412' y='53.91721' transform='matrix(1 0 0 1 -9.3082 -115.5148)'>#</text>
<path d='M25.668 65.2539V-53.8008M110.7106 65.2539V-53.8008' stroke='#808080' fill='none' stroke-width='.19925' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M-59.371095-34.8086L-58.21875-34.7852L-57.79688-35.043L-57.12109-34.6562L-56.03125-34.707L-55.52734-34.5273L-54.53516-34.7617L-53.79688-34.457L-52.23828-34.5664L-51.77344-34.8555L-51.27344-34.4102L-50.33203-34.3828L-49.58203-35.2109L-48.5664-35.1523L-47.168-35.1445L-46.3633-34.8945L-45.8672-34.7227L-44.5195-34.8125L-44.0039-34.4961L-43.5898-35.0625L-42.4414-35.0859L-41.2891-34.9609L-41.0234-34.7812L-39.8633-34.75L-38.9023-34.918L-38.2266-34.6797L-37.4727-34.5352L-36.6719-34.668L-35.2656-34.5937L-34.5547-34.625L-33.6016-34.9609L-33.0742-34.3945L-32.2227-35.0703L-31.1953-34.8984L-30.1797-34.8164L-29.5781-34.7422L-28.5742-34.8164L-27.6094-34.5625L-27.3867-34.7734L-26.25-34.5L-25.3906-35L-24.8086-34.5508L-23.2773-34.4648L-22.4375-34.9258L-21.9023-35.1562L-21.3086-34.9883L-20.5977-34.7187L-19.5977-35.0977L-18.6758-34.7617L-17.3398-34.8789L-16.7852-34.6523L-15.7539-34.4258L-15.4844-34.8008L-13.9766-34.4609L-13.0977-35L-12.7852-35.207L-11.8945-34.7148L-11.2734-35.2266L-9.6328-34.7305L-9.1484-35.0391L-7.9375-34.8281L-7.5742-34.7305L-6.3789-34.6406L-5.8711-35.0195L-4.5391-34.9883L-3.7578-34.9648L-2.9453-34.4336L-2.543-34.7305L-1.3359-35.1875L-.8867-35.1602L.0117-35.1445L1.3437-35.2227L1.6758-34.7305L3.0859-34.4687L3.2852-34.5391L4.8242-34.8008L5.5703-34.6445L5.8008-35.0859L6.8477-35.0391L7.7969-34.5703L8.9102-35.1406L9.4023-35.1797L10.6484-34.8437L11.125-34.9727L12.1562-35.1055L12.707-34.9102L14.0234-34.7852L14.6523-34.6289L15.3281-34.8984L16.1758-34.9336L17.0898-34.5156L18.3867-34.5625L18.7109-34.8242L19.7461-35.0078L20.8555-34.7266L21.1211-34.5L22.043-34.7148L22.9648-35.0703L24.1875-35.1719L24.4648-34.5469L25.668-34.8086L26.7266-35.2773L27.4687-35.1406L28.0508-35.5547L29.125-36.3984L29.4727-35.875L30.7578-36.7734L31.6562-36.5078L31.957-36.5L32.8633-37.3867L33.5156-37.4727L34.6367-37.7031L34.9023-38.2148L36.1719-38.6094L37.2422-38.4102L37.7148-38.9805L38.3945-39.0469L39.2734-39.6211L39.7305-39.8086L40.5508-40.1719L41.7776-39.875L42.7456-40.0859L43.6676-40.7187L44.5666-41.1289L44.9496-40.8398L45.5786-41.8281L46.6286-41.9062L47.0786-42.1992L48.6016-42.4102L49.0316-42.8125L49.7426-42.6406L50.4996-42.9648L51.2106-42.9375L52.4846-43.5781L53.2266-43.6875L53.7456-44.5859L54.9536-44.3945L55.7736-44.4375L56.3206-44.6836L57.0076-45.5781L58.0856-46.0352L58.5386-46.0039L59.8126-45.9687L60.4176-46.6798L61.2886-46.7848L61.9456-46.7268L62.9336-47.2268L63.7186-47.5858L64.2456-47.7458L65.2856-47.9458L66.0786-48.6678L67.0116-48.8908L67.3906-48.9058L68.5076-49.4728L69.1246-49.6918L69.8676-49.5118L71.2426-49.6598L71.3356-50.2268L72.4376-50.4918H72.9106L74.1636-51.2778L74.8786-51.2348L75.5666-51.1918L76.3166-51.3988L77.3046-52.2698L77.7106-52.5708L78.9106-52.2028L79.3676-52.8088L80.5036-52.7498L81.4416-53.4568L82.0276-53.5548L82.9256-53.8598L83.9806-54.0238L84.7656-54.6988L85.3786-54.5118L86.1606-54.7308L86.8786-54.8518L87.6526-55.6368L88.2886-55.9728L89.5356-56.2028L90.2036-56.2378L90.6446-56.6988L92.1326-56.5548L92.7616-57.0738L93.2386-57.6678L94.4106-57.4768L95.1136-58.0388L95.8286-58.3598L96.8476-58.4258L97.4886-58.4488L98.6206-59.0628L99.1286-59.4178L99.9536-59.1598L100.3046-59.7968L101.6636-60.4488L102.4106-60.0978L102.9646-60.5118L103.7456-60.9728L104.8556-61.5308L105.2346-61.1488L106.0386-61.9608L106.9536-61.8048L107.9256-62.2778L108.9296-62.5388L110.0356-62.4958L110.6836-63.1448L111.3746-63.3518L112.8166-63.0978L113.5936-63.4258L114.4536-63.2778L115.1566-63.5778L115.6096-62.9878L116.8126-63.1988L117.4606-62.7888L118.1996-63.3088L119.6056-62.9688L120.3476-63.0388L120.6996-63.3088L121.6526-62.9378L122.8436-63.3238L123.3436-63.3788L124.6916-62.8518L125.2616-62.8318L126.1796-62.8518L126.8706-62.8278L128.0746-62.8238L128.8006-63.3238L129.7426-62.8278L130.2856-62.9458L131.1406-62.8668L131.9416-63.1018L132.4956-62.8668L134.0936-63.0978L134.7886-62.8088L135.0896-62.9528L136.0236-62.8988L137.3556-63.4648L137.9136-63.0468L138.9536-63.4458L140.0466-63.5198L140.7736-63.1288L141.3746-63.0238L142.5666-63.5278L143.4376-63.3628L144.0546-63.5198L144.9886-63.4648L145.7386-63.1678L146.2386-63.4878L147.6796-63.3278L148.2536-63.3948L149.2496-62.9528L150.0976-63.0778L150.5706-62.8628L151.1916-62.7928L152.1796-62.9688L152.9416-63.4728L154.4806-63.2458L154.6796-62.8088L155.4216-63.4418L156.3946-63.5308L157.9066-63.4378L158.5666-63.1838L159.4066-62.8788L160.1366-63.4878L160.9496-63.3828L161.3636-62.8208L162.6676-62.8598L163.7576-63.3518L164.6956-63.2028L165.3636-63.1878L166.0236-62.9648L167.1916-63.3908L167.4026-63.1558' stroke='#42d4fb' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-59.371095-25.4531L-58.37109-25.5937L-57.93359-25.0937L-57.20703-25.5547L-55.63281-25.4023L-54.71484-25.2539L-54.24609-25.2773L-53.08203-25.2344L-52.28125-25.2109L-52.11328-25.6758L-50.45703-25.4492L-50.05469-25.1523L-49.207-25.8359L-48.582-25.5586L-47.6094-25.0625L-46.7852-25.8672L-45.9805-25.8516L-44.9453-25.25L-44.2461-25.6484L-43.0703-25.1758L-42.043-25.2227L-41.6758-25.875L-40.3789-25.1523L-40.1445-25.8633L-38.957-25.5508L-38.4414-25.4766L-37.4375-25.8477L-36.0195-25.2266L-35.5742-25.4414L-34.8438-25.8008L-34.2813-25.5352L-32.6133-25.793L-31.8516-25.7969L-31.4648-25.375L-30.4414-25.1797L-29.8672-25.625L-28.582-25.2305L-28.0313-25.3789L-27.3633-25.207L-26.3164-25.2187L-25.4844-25.5703L-24.4492-25.5273L-23.3477-25.1445L-22.5234-25.7695L-21.6211-25.0859L-21.457-25.5039L-20.3984-25.0352L-19.3203-25.1992L-18.5156-25.8281L-17.6289-25.6992L-16.5352-25.7773H-15.8125L-15.3633-25.4141L-13.9258-25.7305L-13.0625-25.3125L-12.1953-25.832L-11.5547-25.1523L-10.9219-25.6133L-10.2031-25.4414L-9.082-25.7578L-8.2305-25.4766L-7.2695-25.7344L-6.6797-25.5703L-5.3828-25.6133L-5.0156-25.6797L-3.875-25.457L-2.9102-25.4922L-2.0039-25.3359L-1.3438-25.5273H-.9102L-.1836-25.7266L.7422-25.4258L1.9414-25.8672L2.4883-25.3008L3.7578-25.3437L4.3047-25.4805L5.6523-25.6016L6.418-25.1367L6.7656-25.6758L7.9141-25.5352L9.082-25.5234L9.1562-25.543L10.7422-25.207L11.0312-25.4258L12.0547-25.1992L12.6016-25.7852L13.4609-25.5742L14.2031-25.3633L15.1562-25.2812L16.207-25.7109L17.3242-25.5781L18.0117-25.5312L19.1992-25.5703L19.9922-25.1797L20.25-25.4141L21.5352-25.1602L22.2148-25.5937L23.4531-25.0898L24.1875-25.8633L25.1719-25.5078L25.668-25.4531L26.9062-25.6094L26.8633-26.0703L27.9609-26.5625L29.1133-26.9766L29.8672-27.1719L30.1211-27.3789L31.0508-26.8711L32.0703-27.8242L32.7422-27.6992L33.7539-27.9023L34.2539-28.3945L35.0742-29.0156L35.8008-29.1094L37.1523-29.1797L37.6328-29.043L38.1133-29.9453L39.5664-30.0625L40.3398-30.5937L40.7886-30.5391L41.7306-30.8945L42.1486-31.2422L43.6916-31.6953L44.3436-31.5117L45.1676-31.707L46.0386-32.0664L46.4296-32.2578L47.7926-32.4609L48.6526-32.9492L48.9336-33.3555L49.6136-33.5664L50.6836-33.5234L51.7736-33.9219L52.1876-34.0977L53.0426-34.6055L53.8006-34.6562L54.9766-35.6133L55.9026-35.1289L56.4026-35.7969L57.3706-36.2422L57.6206-36.4062L58.9886-36.4766L59.5156-36.4805L60.4646-36.6992L61.2456-37.5547L61.5116-37.7187L62.8986-37.8477L63.4496-38.1172L64.1716-38.2891L65.5816-38.7891L65.7856-38.8867L67.1096-39.3516L68.0586-39.3789L68.3356-40.0156L69.0076-40.3086L70.1096-40.1641L70.5896-40.1836L71.2856-41.082L72.5466-41.5L73.3206-41.2187L74.0506-41.6289L74.9846-42.1758L75.3246-42.2187L76.3786-42.3242L77.6956-42.5937L78.0076-42.6641L78.7146-43.043L79.5466-43.1328L80.6796-44.0859L81.5546-44.3008L82.3476-44.332L83.0276-44.2969L83.6486-44.6875L84.2306-45.3672L85.0466-45.4883L86.1876-45.3789L86.9296-45.9844L87.5706-46.0781L88.3006-46.4138L89.0466-46.5238L90.1016-46.4998L91.0466-47.1558L91.9996-47.5628L92.9216-48.1838L93.3046-48.2268L93.9766-48.1798L94.8706-48.1128L95.7306-48.4608L96.6176-49.5308L97.4176-49.5428L98.3246-49.7108L99.2696-49.9488L99.9886-50.0708L100.7456-50.3628L101.0356-50.9458L102.3826-51.3438L102.7426-51.2538L103.7036-51.6988L104.6326-51.6018L105.7306-52.3128L106.4926-52.7698L107.1716-52.8438L108.1796-53.1488L108.8516-53.4488L109.7816-53.5588L110.6836-53.7928L111.8746-53.4878L112.3986-53.5858L113.2386-53.6988L114.3636-53.7968L115.3286-53.6718L115.5116-53.9458L116.8596-54.2148L117.1796-53.9098L118.7856-53.8518L118.9496-54.0238H120.1056L120.9646-54.0858L121.4996-54.2068L122.4176-53.7778L123.1486-53.9728L124.1996-53.4418L125.0816-53.5588L126.2306-53.5118L127.2816-54.0738L127.6996-53.4918L128.4766-53.5468L129.6406-53.7968L130.4646-53.5428L131.4566-54.1718L132.1566-53.7228L132.4496-53.9378L133.3946-54.1098L134.1056-53.9178L135.2736-53.8238L136.5626-53.8478L136.9416-54.1988L138.1636-53.7028L139.1136-54.0858L139.7146-53.9958L140.5896-53.8908L141.3206-53.6168L142.3866-54.1598L143.2736-54.2068L144.2306-53.6018L144.7656-53.5038L145.8356-53.8788L146.5586-53.8748L147.0816-54.1958L148.2186-53.7968L148.7186-53.9058L149.7776-53.5738L150.7926-53.7068L151.2696-53.8238L152.6956-53.6678L153.1206-53.5388L153.8126-53.7578L155.3556-53.4178L155.8556-53.8478L156.9996-54.2028L157.0816-53.9648L158.0116-53.9098L159.2816-53.4608L159.6526-53.6798L161.0746-53.5198L162.0356-53.7068L162.4886-53.5158L163.6486-53.8788L164.4646-53.5078L165.4686-54.0938L166.3396-53.4258L167.2386-54.1638L167.4026-53.8008' stroke='#090' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-59.371095-31.125L-58.664064-30.8906L-57.91406-31.3984L-56.98828-31.4414L-56.02344-30.7266L-55.14844-30.7891L-53.86328-30.8437L-53.41797-30.957L-52.45313-30.8516L-52.12891-31.2734L-50.46094-31.3867L-50.35547-31.125L-48.8555-31.4023L-47.9141-30.9336L-47.4414-31.0469L-46.9492-30.8594L-45.9063-30.7422L-45.1328-31.3672L-44.2109-31.3906L-43.6094-31.3164L-42.0938-31.1719L-41.75-31.3945L-40.3398-31.4766L-39.5273-31.4336L-38.7617-30.9609L-38.0195-31.0117L-37.1055-31.4922L-36.6016-31.0117L-35.2188-31.4375L-35.0039-31.0703L-34.1758-31.0508L-32.8867-31.1523L-31.9023-31.1172L-31.6094-31.1914L-30.707-30.9453L-29.6758-31.207L-29.1016-31.0312L-28.2617-31.4414L-27.3438-31.4883L-26.6094-31.3242L-24.9453-31.1836L-24.2422-30.7812L-23.6172-31.4297L-22.6211-31.207L-22.0508-31.2422L-21.5195-30.7031L-20.4648-31.082L-19.2305-31.1172L-18.9102-30.7773L-17.3906-30.7344L-16.9375-31.375L-16.1602-31.2148L-15.4883-31.5L-14.2188-31.0664L-13.8125-30.9453L-12.4492-30.9336L-11.5586-30.7656L-11.1797-31.4922L-10.0273-31.4062L-8.8711-31.4844L-8.5352-31.0664L-7.7344-30.8633L-6.9648-30.9805L-6.1602-30.7773L-5.1367-31.0547L-3.7969-31.1367L-3.0273-31.1797L-2.3477-31.5039L-1.6992-30.918L-.5547-30.9883L.2969-31.1172L.668-31.457L1.9531-30.7344L2.7773-31.4453L3.7266-30.7773L4.2227-31.2148L5.2852-31.4414L6.1094-31.1367L7.1406-30.8867L7.6406-31.3711L8.5781-31.0703L9.5859-31.1211L10.5273-31.0391L11.4531-31.3398L12.3906-31.1875L12.8398-30.8242L13.3555-30.9648L14.8125-31.1055L15.082-30.7305L16.543-31.3125L16.9258-31.1562L17.6562-30.9258L18.75-31.2148L19.5937-30.7227L20.2383-30.9414L21.6328-31.2539L22.4102-30.9922L22.9844-30.8203L24.1875-30.9219L25.0703-31.0312L25.668-31.125M25.668 53.917971L26.7227 53.335939L26.9531 53.398439L28.1602 53.082033L28.9727 52.992189L29.7891 52.921877L30.2422 52.16016L30.8828 51.85156L32.3711 52.08203L32.6758 51.48047L33.8906 51.53906L34.6523 51.26172L35.293 50.36328L36.418 50.50391L37.1953 50.0586L38.1445 49.77344L39.0586 49.8125L39.6758 49.10156L39.7734 48.8125L41.1246 48.36719L41.6996 48.73438L42.9846 48.3711L43.0426 47.67969L44.0156 47.59766L45.2656 47.3711L46.1836 47.4336L47.0356 46.86719L47.5856 46.92578L48.5546 45.98438L48.8086 46.16016L49.4456 45.69531L51.0156 45.85156L51.4536 45.27735L52.0036 45.27344L53.4176 45.01563L53.6636 44.58594L55.0196 44.5L55.3086 44.01563L56.3396 43.7813L57.1756 43.1914L57.6206 43.207L58.4956 43.1719L59.3246 42.918L60.3516 42.5039L61.5156 42.0039L61.9026 41.6133L62.4256 41.6992L63.7886 41.1289L64.5546 40.8359L65.2496 40.6758L66.3436 40.1719L66.4496 40.0547L68.0316 40.0977L68.3706 40.0547L69.0586 39.3164L69.7856 39.1797L70.7966 38.543L71.5976 38.3281L72.3906 38.125L73.2226 38.4961L74.0116 37.8672L74.7306 37.4727L75.9256 37.4961L76.5546 37.3047L77.3046 36.6016L78.1366 36.8047L78.9566 35.9844L79.8046 35.5977L80.5786 35.8477L81.3246 35.8086L81.7536 35.2773L82.9606 34.8281L84.0116 34.5742L84.4996 33.9688L85.3476 34.0938L86.2576 33.4297L87.0786 33.5313L87.8246 33.3516L88.3596 33.293L89.6486 32.2305L90.6676 32.6875L91.0386 32.1172L91.9566 31.6523L92.5746 31.4688L93.4536 31.6172L94.0356 31.4609L94.7886 30.8125L95.4066 30.3438L96.7616 30.2539L97.5786 30.3281L97.8356 29.6328L99.3866 29.4492L100.2306 29.3359L100.5316 29.3438L101.2036 28.9961L102.3676 28.6953L102.7856 28.125L104.1486 27.7656L104.8046 27.6563L105.1366 27.3086L106.7226 27.1406L107.4106 27.1094L107.7036 26.4414L108.8206 26.082L109.9336 26.1484L110.6836 25.5781L111.3356 25.2461L112.7186 25.6445L113.1716 25.2656L113.9496 25.2734L115.0976 25.2422L115.3986 25.2734L116.3286 25.9805L117.2966 25.5391L118.0506 25.4766L118.8866 25.7656L120.3126 25.8242L120.9136 25.625L121.8246 25.3906L122.9416 25.7109L123.4686 25.625L124.1486 25.6719L125.2386 25.5273L126.3046 25.2148L127.0036 25.4063L127.3986 25.4023L128.8246 25.2031L129.3396 25.2734L129.8676 25.6016L131.2226 25.9063L132.2576 25.3828L132.7066 25.7109L133.3556 25.4961L134.3396 25.2539L135.5546 25.6484L135.8246 25.6367L137.0156 25.3711L138.1606 25.5117L139.0546 25.9141L139.9956 25.8086L140.6246 25.5L141.0356 25.3594L142.1606 25.5078L142.9846 25.75L143.8516 25.5391L144.7106 25.3516L145.6136 25.6484L146.6526 25.8242L147.5706 25.3203L148.4956 25.6836L148.7106 25.3398L149.9456 25.4453L150.8286 25.8125L151.2856 25.3594L152.7186 25.7266L152.8246 25.5L154.2036 25.4961L154.5506 25.6406L155.5196 25.9219L156.5076 25.8828L157.3636 25.3008L158.5546 25.5273L159.1916 25.8906L160.0276 25.8516L161.2186 25.6328L161.4606 25.9492L162.4886 25.5547L163.6876 25.6445L163.9726 25.4492L165.4176 25.2852L165.9066 25.543L166.9566 25.5156L167.4026 25.5703' stroke='#d21515' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M22.8359-28.2891L28.5039-33.957M22.8359-33.957L28.5039-28.2891M25.668 56.75391V51.08203' stroke='#d21515' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<path d='M-33.85938 54.015625H201.5587' stroke='#000' fill='none' stroke-width='.3985'/>
<path d='M204.05513 54.015625L200.484822 52.67188L201.6606 54.015625L200.484822 55.36328Z'/>
<path d='M204.05513 54.015625L200.484822 52.67188L201.6606 54.015625L200.484822 55.36328Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f0' x='-28.188331' y='54.016843' transform='matrix(1 0 0 1 230.8443 10.1351)'>t</text>
<path d='M-28.187501 59.6875V-62.3442' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-28.187501-64.83984L-29.53516-61.269523L-28.187501-62.4453L-26.84375-61.269523Z'/>
<path d='M-28.187501-64.83984L-29.53516-61.269523L-28.187501-62.4453L-26.84375-61.269523Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f0' x='-28.188331' y='54.016843' transform='matrix(1 0 0 1 -40.4917 -115.5148)'>#<tspan x='-19.979122'>Ger</tspan><tspan x='-4.88572'>äte</tspan></text>
<path d='M56.8516 65.3555V-53.6992M141.8907 65.3555V-53.6992' stroke='#808080' fill='none' stroke-width='.19925' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M-28.187501-34.707L-26.94141-34.9453L-26.46094-34.7539L-25.93359-34.293L-24.36328-35.0273L-24.28125-34.6758L-22.98828-34.7969L-22.4375-34.8086L-21.70313-34.5391L-20.88672-34.4609L-19.64063-34.5391L-18.41406-34.625L-17.918-34.7656L-17.3789-34.3516L-16.2344-35.0039L-15.5195-34.7969L-14.4297-35.0039L-13.6992-34.6484L-12.8438-34.5937L-11.8281-34.2969L-11.2695-34.3828L-9.9922-34.4062L-9.4063-35.0586L-8.3477-34.6094L-7.582-34.543L-7.2891-34.7539L-6.0859-34.8008L-5.582-34.9336L-4.7383-34.7656L-3.3008-34.8633L-2.3164-34.6602L-1.4219-34.3359L-.8828-35.1289L.207-34.8672L1.1289-35.0977L1.2812-34.9453L2.3906-34.6523L3.2422-34.5312L4.3789-34.4297L5.2383-34.5078L5.7031-34.3437L6.3398-34.5586L7.4922-34.9062L8.4063-34.4805L9.5117-34.7852L10.3086-35.0273L10.8359-34.3164L11.6328-34.5L12.2344-34.8281L13.625-34.9687L14.2422-34.6094L15.5195-34.8984L16.0547-35.0859L17.2813-34.5312L17.9883-34.3711L18.7539-34.5977L19.332-34.4648L20.1328-34.7109L21.043-34.4687L22.1133-34.375L22.7266-34.8828L23.6719-34.3633L24.6758-34.7109L25.6836-35.0234L26.625-34.9687L26.7266-35.0078L28.3359-34.8516L29.082-34.9961L30.0156-35.0117L30.5234-34.5L31.3164-35.1055L32.5-34.8633L33.4102-34.5312L33.6992-34.5195L35.0469-34.7891L35.4883-34.5508L36.2109-34.5L37.5039-34.9375L37.7891-34.582L38.9297-34.6289L40.1211-34.8125L40.7422-34.5352L41.875-35.1055L42.668-34.332L43.4063-34.4805L44.0195-35.0195L44.7461-35.0937L45.418-34.5742L47.0664-34.5781L47.0781-34.9687L48.3164-34.3047L49.4492-34.375L50.0703-34.5547L51.2188-35.0234L51.9609-35.0156L52.7109-34.7695L53.0859-34.418L54.6641-34.7227L55.0039-34.9336L56.0742-34.7344L56.8516-34.707L57.4102-35.0156L58.4609-35.0664L59.7383-35.3906L60.3242-36.0742L61.1523-36.2812L61.9141-36.5078L62.2383-36.8711L62.918-36.8359L63.9727-36.8594L65.2852-37.3047L65.7031-37.6484L66.7227-38.0234H67.0703L67.9727-38.0547L69.3867-38.6602L69.8984-38.7148L70.8164-39.4766L71.3438-39.8398L71.8827-39.8945L73.2027-40.1289L73.8947-40L74.3167-40.5156L75.2387-40.6211L75.9917-41.3008L77.4097-41.2773L77.9417-41.9219L78.3437-42.1406L79.5157-42.4453L80.2187-42.2852L81.0547-43.0039L81.8007-42.7695L82.7657-43.582L83.6877-43.6055L84.3517-44.2109L84.7307-44.3516L85.6717-44.543L86.6287-44.8789L87.4337-44.7227L88.3087-44.9844L89.5077-45.1797L89.7697-45.6328L90.8207-46.2112L91.9847-46.0122L92.0627-46.0582L93.0977-47.1052L94.2847-47.1642L94.7817-47.5902L95.3597-47.4182L96.4887-47.6482L96.9917-48.0432L97.8127-48.3672L98.9067-49.0122L99.8087-49.4452L100.2617-49.0272L101.0587-49.7582L101.9687-49.3122L102.4997-49.9612L103.9887-50.0192L104.5467-50.5512L104.8707-51.0512L105.9647-51.3712L107.1527-51.1252L107.9217-51.4182L108.0427-52.0702L109.5587-52.6872L109.9027-52.0122L110.8277-52.3792L112.0277-53.3042L112.6597-53.2772L112.9377-53.7422L113.9457-53.9922L115.0347-53.8872L115.7387-53.9372L116.1207-54.6292L117.5747-55.2502L118.1757-55.2382L118.7107-55.3792L119.5037-55.8282L120.7697-55.7772L121.3747-55.8202L121.9137-56.3712L122.8827-56.4452L123.6837-56.8202L124.8317-57.3902L125.5157-57.4142L126.1167-57.6172L127.2067-58.3752L127.7417-58.6402L128.9337-59.0782L129.7027-58.6252L130.3357-59.3632L130.9647-59.0742L132.0117-59.8282L132.2847-60.2502L133.7927-60.4102L134.4457-60.8672L134.9027-60.4262L135.8127-61.3902L136.3867-61.0702L137.4957-61.4022L138.4997-62.3552L138.8987-61.8082L139.7307-62.7692L140.2497-62.8592L141.8667-63.0472L142.5857-63.2932L143.5157-63.0472L144.7417-62.9802L145.3597-63.1872L146.1917-63.2652L147.0817-63.3672L147.6957-62.6332L148.4647-63.2502L149.4997-62.6992L150.8007-62.6762L151.5627-63.0622L152.0667-62.9612L152.7147-63.1442L153.9377-63.2812L154.8987-63.1252L155.8477-63.0432L156.0977-63.0972L157.2617-63.0902L158.1247-62.7932L158.5627-62.6682L160.1247-62.8122L160.3437-62.6722L161.4097-62.9292L161.9337-62.6562L163.0347-63.2262L163.8707-63.1562L164.7027-63.2582L165.9767-63.4062L166.7067-63.3402L167.3317-62.9612L168.2457-63.0782L169.3517-63.2032L169.6137-63.0782L170.4997-62.8752L171.2577-63.4412L172.3167-63.1132L173.6447-63.1522L174.2847-62.7972L174.6957-62.6332L175.9217-62.9412L176.9297-62.7382L177.8907-63.1012L178.2617-63.0742L179.4527-63.4762L180.2737-62.8872L180.9917-62.6372L181.7067-63.3282L182.9297-63.1722L183.6637-63.3792L184.1167-62.7342L184.8827-62.8472L185.8007-63.3752L186.7307-63.2382L187.5937-63.1602L188.3397-62.6402L189.5667-63.4372L190.6637-63.3672L191.0627-63.4062L192.4887-63.0972L193.2027-63.2772L193.5077-62.9612L194.5467-63.0272L195.2817-62.8512L196.4687-63.1792L197.4527-63.1762L198.2657-63.3982L198.5857-63.0542' stroke='#42d4fb' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-28.187501-25.3555L-26.95703-24.9336L-26.22656-25.3242L-25.66406-25.3008L-24.63281-25.6172L-24.00391-25.4062L-22.94531-25.7227L-22.55859-25.0078L-21.16016-24.9609L-20.91016-25.0898L-19.60547-25.4492L-18.79297-25.7227L-17.8086-25.1953L-17.0039-25.4141L-16.3516-25.7578L-15.3633-25.3672L-14.9609-25.3984L-13.7305-25.125L-13.1484-25.3203L-12.3711-25.0469L-11.1484-25.4414L-10.5664-25.4922L-9.4883-25.1328L-8.4648-25.1641L-7.8867-25.4023L-7.0508-25.2422L-6.2383-25.2773L-5.2656-25.5352L-4.0391-25.5234L-3.1406-25.7617L-2.7969-25.1523L-1.9766-25.6719L-.6797-25.1406L.1523-25.7695L.457-25.5078L1.6328-25.457L2.7891-25.7227L3.0859-25.6992L3.7266-25.0898L4.8047-25.1602L5.4844-25.1992L6.8047-25.4102L7.2969-25.1172L8.4844-24.9766L9.6328-25.5312L10.0234-25.6992L11.3164-24.9766L11.5156-25.5156L12.6094-25.0781L13.3086-25.6094L14.6914-25.5234L15.1758-25.207L16.1094-25.5273L17.2773-25.4023L17.4609-25.6719L18.4766-25.1797L19.0508-25.1406L20.0898-25.457L21.0625-25.6289L21.5859-25.0352L22.8789-24.9609L23.3711-25.0937L24.5-25.7578L25.0469-25.7305L26.4688-25.0508L26.8633-25.2031L27.9102-25.0547L29.2109-25.3164L29.6016-25.5625L30.0781-25.3242L31.0078-25.7227L32.0898-25.6992L33.0156-25.3672L33.9688-25.3945L34.5742-24.9805L35.2266-25.1406L36.8125-25.1758L37.0703-25.2578L38.1602-25.0469L39.2734-25.2344L39.4375-25.5898L41.0898-25.2148L41.6719-25.1523L41.9883-25.457L42.9102-25.6523L44.3203-25.668L45.0586-25.3359L45.3789-24.957L46.7656-25.0156L47.0781-25.7734L48.1445-25.1523L49.0117-25.7422L49.8984-25.4141L51.0078-25.7148L51.582-25.6641L52.5273-25.3359L53.7383-25.5L54.3086-25.2891L54.9531-25.5078L55.7695-25.0508L56.8516-25.3555L57.2813-25.7891L58.3398-25.6758L59.6328-26.1914L59.8477-26.6328L60.7227-26.7852L62.0586-27.2148L62.0313-27.5156L63.2539-27.3594L64.1133-28.043L64.7852-27.7383L66.0586-28.5664L66.4492-28.1562L67.0313-29L68.0977-28.6953L69.1602-29.5117L69.9453-29.9258L70.3906-30.082L71.2227-30.3125L72.1957-30.418L73.2307-30.5469L73.3987-30.9414L74.7847-30.9062L75.5197-31.6055L76.4887-31.7187L77.1137-32.5391L77.3277-32.6211L79.0117-32.4844L79.7737-32.9023L80.5897-33.4453L81.3597-33.6914L82.1797-33.5586L82.4917-33.4883L83.6327-34.2852L84.2187-34.9141L85.2027-34.8398L85.4377-35.3242L86.5507-35.1797L87.4917-35.5586L88.4767-35.9219L89.0037-36.2852L90.2847-36.0898L90.8707-36.3359L91.6527-36.7422L92.7187-37.0234L92.9807-37.8008L93.7347-37.3867L94.9767-37.8398L95.5347-37.9219L96.7387-38.4844L96.9377-38.8555L97.7417-39.1445L99.0667-39.0508L99.2737-39.7031L100.4687-40.2148L101.4767-40.082L102.2887-40.1562L102.6637-40.8203L103.3867-41.1328L104.5467-41.293L104.9607-41.7695L106.3437-42.1562L106.5817-42.2773L107.5237-41.9531L108.7737-42.3242L109.1917-43.0195L110.4217-42.9219L110.9957-43.2852L111.4097-43.418L112.6567-44.3281L113.2107-44.2578L113.9917-43.9805L114.8167-44.2305L116.0237-44.9102L116.2307-45.125L117.0197-45.6367L117.9497-46.0042L119.2887-46.1442L120.1637-46.1212L120.5467-46.5582L121.6917-46.9222L122.3667-47.5742L123.2927-47.6682L123.8827-47.6442L125.0037-47.9722L125.2387-47.8162L126.1637-48.7152H126.6757L127.9687-49.0942L128.5427-49.1872L129.7927-49.7692L130.1287-49.6792L130.6137-50.1212L132.0817-50.2972L133.1487-50.4922L133.5897-51.3512L134.4807-50.8752L134.9137-51.5782L135.8867-52.1292L136.7457-52.1602L137.1167-52.3982L138.7347-52.4332L139.4727-52.7502L139.7107-52.7342L141.0897-53.3712L141.8667-53.6912L142.6327-53.3042L143.4887-53.5662L144.6207-53.9022L145.6677-53.3902L146.4767-53.9222L146.6797-53.7382L148.1917-54.0042L148.7497-53.4962L149.1447-53.7892L150.7817-53.5972L150.9457-53.2812L152.3827-53.3982L153.0037-53.5512L154.1567-53.7112L154.2387-54.0742L155.8907-53.9722L155.9847-53.8122L156.8867-53.4882L158.3047-53.7892L158.6637-53.8632L159.4567-54.0312L160.7777-53.7072L161.4607-53.7932L161.9567-54.0862L162.8907-53.8982L164.0037-53.4372L164.8317-53.3162L165.9997-53.7622L166.4337-53.4182L166.9847-53.3472L168.1527-53.8242L168.7307-53.8122L169.8207-54.0352L170.4807-54.0272L171.9067-53.7622L172.7657-53.3592L173.6877-53.3082L174.4527-54.0002L174.6797-53.8752L175.5937-54.1012L176.9727-53.7262L177.4887-53.5942L178.1057-54.0352L179.2187-53.5232L180.1567-54.0232L180.6797-53.6522L181.9607-53.7382L182.5857-53.5002L183.7417-53.5232L184.5077-54.0312L185.4957-53.5472L186.1957-53.2772L187.1487-53.3402L187.5237-53.8282L188.6287-53.3402L189.6797-53.5582L190.2537-53.6522L191.2577-54.1092L192.3707-53.7382L193.0317-53.5122L193.8317-53.3042L194.4417-53.5662L195.3707-53.4652L196.0117-53.4222L197.0317-53.6562L197.7927-53.5432L198.5857-53.6992' stroke='#090' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-28.187501-31.0234L-27.08984-30.6133L-26.22266-30.6797L-25.39844-30.6445L-24.63672-31.2187L-23.77344-31.2969L-23.39063-30.9023L-22.42578-31.4297L-21.80469-31.1211L-20.17578-31.3359L-19.32813-30.8125L-18.99609-30.6875L-18.25391-31.2773L-16.7656-31.3242L-16.5703-31.3398L-15.0117-31.3672L-14.5234-30.9492L-13.4766-30.8516L-12.957-31.0117L-12.0625-31.2578L-11.5156-30.6914L-10.1992-30.7969L-9.3672-31.3203L-8.2578-31.4102L-8.1758-31.2031L-6.6367-31.0156L-6.293-30.8164L-5.207-31.4453L-4.4648-30.8984L-3.1484-31.4336L-2.5547-30.9141L-1.8242-30.6211L-1.1836-31.0586L-.4883-31.1836L.6406-31.125L1.6758-31.0469L2.0312-30.6562L3.5664-30.9453L3.875-30.6328L4.7891-30.7031L5.7539-31.3555L6.5039-30.6562L7.5938-31.375L8.7773-31.0703L9.207-31.1406L9.9727-30.6758L11.125-30.9453L11.7773-31.0547L12.6875-30.8242L13.6914-30.9727L14.5273-30.7148L14.9102-31.0195L15.7188-31.2812L17.2148-31.0117L17.8594-31.1797L18.2461-31.2617L19.5-31.4297L20.2227-30.9336L21.5273-31.0234L21.9336-31.0039L22.9844-31.332L23.9102-30.6758L24.2852-30.6367L25.5313-30.8164L26.0273-30.6406L27.1289-30.9844L27.5313-31.3398L28.543-31.3477L29.9492-31.3555L30.6797-30.8125L30.9258-30.9687L32.3477-30.75L32.7109-30.8203L33.9063-31.2344L34.9102-31.3633L36-31.2109L36.1875-31.3359L37.1953-31.2969L37.9727-30.6016L39.3086-30.793L39.8594-31.0703L40.9961-31.125L41.5625-31.4414L42.5742-31.3242L43.3477-30.7969L44.4883-30.6992L45.0664-30.6289L45.3789-31.3086L46.7266-31.0742L47.9102-30.6523L48.1133-30.9609L48.8906-31.3828H50.0977L51.2734-30.6055L52.1211-31.0273L52.4414-30.6641L53.1797-31.2656L54.6016-30.6523L55.1953-31.1562L55.8164-30.6602L56.8516-31.0234M56.8516 54.015625L57.3477 54.113281L58.2891 53.527344L59.5625 53.308594L60.3867 53.171875L60.9805 52.69141L62.0859 52.50781L62.8633 52.17969L63.6094 51.53906L64.2148 51.86719L65.168 50.85156L65.3477 51.19531L66.3906 50.90234L67.2969 50.86719L68.0547 50.59375L68.7734 49.60156L70.1563 49.96875L70.9414 49.24609L71.2617 49.41016L71.9027 49.20313L73.2227 48.86328L73.4067 48.41406L74.7027 47.91797L75.6567 48.17188L76.1717 47.98438L77.0427 47.14453L78.1447 46.83594L78.8667 46.73438L79.1407 46.21875L80.0667 46.67578L80.7697 46.23047L81.4137 45.55078L82.4457 45.05078L83.2187 44.80469L84.3087 45.23438L84.8597 44.94531L85.8477 44.17188L86.4417 44.46875L87.4257 43.457L87.9297 43.5508L89.2537 43.2891L90.2617 43.1406L90.8707 42.2578L91.4727 42.3867L92.3127 42.1289L93.5587 42.1602L93.6367 41.5547L94.9417 41.5313L95.9847 41.1484L96.4067 40.8633L97.0277 40.5078L98.4097 40.3906L98.6247 40.3633L99.8247 39.6211L100.1017 39.7227L101.0277 39.3594L102.2387 39.1953L102.8207 39.1289L103.8597 38.0078L104.1057 38.2617L105.1167 37.9453L105.8167 37.5547L107.1017 36.9141L107.6917 36.832L108.9767 37.0859L108.9137 36.6797L110.2027 36.2734L111.0427 35.9453L111.6167 35.9414L112.8517 35.3984L113.4457 35.2422L114.3867 35.1094L114.6757 35.1836L115.8907 34.7383L116.7387 34.4141L117.3987 34.1758L118.3827 33.6875L118.6837 32.9844L119.4727 32.8672H120.2967L121.7387 32.3867L122.1487 32.1719L122.8597 31.7813L123.5317 31.3906L124.5857 31.7695L125.5467 31.207L126.2927 30.6563L127.1327 30.2344L128.0937 30.1406L128.9027 29.9844L129.4497 29.625L130.2737 29.9023L130.8987 29.293L131.9767 29.1328L132.3637 29.1055L133.6367 28.5508L134.5427 27.8008L135.1447 27.7148L135.8127 27.6797L136.3637 27.125L137.1017 27.1133L137.8127 26.6328L139.4337 26.375L139.7107 26.2266L140.4887 26.3203L141.8667 25.6797L142.3207 25.6289L143.4887 25.7109L144.0277 25.6797L145.5547 25.3867L146.4607 25.3203L147.4177 26.0547L148.1597 25.5313L148.9297 25.7148L149.7617 25.543L150.8047 25.5859L151.4687 25.7383L151.7107 25.6289L152.6287 25.6875L153.5197 25.6758L154.7307 25.8477L155.7347 25.5547L156.4527 25.5273L157.0667 25.7969L158.0817 25.4453L158.8087 25.8242L159.6327 25.6953L160.3277 25.5L161.4337 25.5781L162.2227 25.8477L162.8597 25.6836L163.9497 26.0586L164.6677 25.4102L165.8167 25.6445L166.9297 25.3164L167.0627 26.0586L168.2457 25.832L168.8747 25.4844L169.8047 25.4375L170.6997 25.3984L171.4997 25.2852L172.2497 25.2734L173.6717 25.8555L173.8167 25.3281L174.9687 25.7227L175.5777 25.2734L176.6287 25.9531L177.7927 25.4883L178.6677 25.6758L179.5627 26L180.0667 25.8398L180.7387 26.0391L182.1167 25.6914L182.9027 25.9883L183.2847 25.3828L184.8167 25.7148L184.9297 25.2813L186.2027 25.668L187.0117 25.9766L188.1327 26.0742L188.9457 26.0625L189.5627 25.8164L190.4527 25.4297L191.0747 25.5664L192.3597 26.0352L193.2387 25.4414L193.8007 25.3438L194.3787 25.3477L195.7227 26.0234L196.6247 25.3398L197.0707 25.5117L198.2187 25.3242L198.5857 25.6719' stroke='#d21515' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M54.0156-28.1875L59.6875-33.8594M54.0156-33.8594L59.6875-28.1875M56.8516 56.85156V51.18359' stroke='#d21515' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -0,0 +1,58 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- This file was generated by dvisvgm 3.2 -->
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='322.21921pt' height='237.01525pt' viewBox='-72.000105 -72.003505 322.21921 237.01525'>
<style type='text/css'>
<![CDATA[@font-face{font-family:nf0;src:url(data:application/x-font-woff;base64,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) format('woff');}
text.f0 {font-family:nf0;font-size:6.973848px}
text.f1 {font-family:nf0;font-size:8.966376px}
text.f2 {font-family:nf0;font-size:9.96264px}
]]>
</style>
<g id='page1'>
<path d='M-36.5586-71.605H-68.6016C-70.2578-71.605-71.6016-70.262-71.6016-68.605V-55.32C-71.6016-53.664-70.2578-52.32-68.6016-52.32H-36.5586C-34.9023-52.32-33.5586-53.664-33.5586-55.32V-68.605C-33.5586-70.262-34.9023-71.605-36.5586-71.605Z' fill='#fff'/>
<path d='M-36.5586-71.605H-68.6016C-70.2578-71.605-71.6016-70.262-71.6016-68.605V-55.32C-71.6016-53.664-70.2578-52.32-68.6016-52.32H-36.5586C-34.9023-52.32-33.5586-53.664-33.5586-55.32V-68.605C-33.5586-70.262-34.9023-71.605-36.5586-71.605Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 -13.0213 -223.2327)'>Ger<tspan x='-37.486993'>ät</tspan></text>
<path d='M246.8206-71.605H214.9566C213.3006-71.605 211.9566-70.262 211.9566-68.605V-55.32C211.9566-53.664 213.3006-52.32 214.9566-52.32H246.8206C248.4766-52.32 249.8206-53.664 249.8206-55.32V-68.605C249.8206-70.262 248.4766-71.605 246.8206-71.605Z' fill='#fff'/>
<path d='M246.8206-71.605H214.9566C213.3006-71.605 211.9566-70.262 211.9566-68.605V-55.32C211.9566-53.664 213.3006-52.32 214.9566-52.32H246.8206C248.4766-52.32 249.8206-53.664 249.8206-55.32V-68.605C249.8206-70.262 248.4766-71.605 246.8206-71.605Z' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 270.5364 -223.2327)'>WSM</text>
<path d='M-52.582033-51.922V164.812495' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M230.8866-51.922V164.812495' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M-52.582033-30.25H228.1916' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M230.6877-30.250005L227.117387-31.59376L228.29317-30.250005L227.117387-28.90235Z'/>
<path d='M230.6877-30.250005L227.117387-31.59376L228.29317-30.250005L227.117387-28.90235Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 90.9588 -200.6718)'>T<tspan x='-46.772176'>CP-V</tspan><tspan x='-25.40232'>erbindung</tspan><tspan x='20.714734'>öffnen</tspan></text>
<path d='M-49.88281-8.578H228.1916' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-52.38279-8.578129L-48.808575-7.23047L-49.98436-8.578129L-48.808575-9.92188Z'/>
<path d='M-52.38279-8.578129L-48.808575-7.23047L-49.98436-8.578129L-48.808575-9.92188Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M230.6877-8.578129L227.117387-9.92188L228.29317-8.578129L227.117387-7.23047Z'/>
<path d='M230.6877-8.578129L227.117387-9.92188L228.29317-8.578129L227.117387-7.23047Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 107.2081 -177.0078)'>TLS-Handshak<tspan x='11.329934'>e</tspan></text>
<text class='f1' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 66.7294 -163.05397)'>V<tspan x='-47.245398'>erschlüsselung</tspan><tspan x='14.093578'>und</tspan><tspan x='31.093823'>A</tspan><tspan x='36.644012'>uthentifizierung</tspan></text>
<path d='M-56.10156 13.098H234.4066' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10' stroke-dasharray='.79701 1.99255'/>
<path d='M17.4648 19.996H160.8436V6.199H17.4648Z' fill='#fff'/>
<text class='f0' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 73.3651 -149.733)'>(ab<tspan x='-41.073543'>hier</tspan><tspan x='-28.053364'>ist</tspan><tspan x='-19.029201'>die</tspan><tspan x='-8.303419'>K</tspan><tspan x='-4.000558'>ommunikation</tspan><tspan x='41.852497'>v</tspan><tspan x='45.158094'>erschlüsselt)</tspan></text>
<path d='M-52.582033 45.605H228.1916' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M230.6877 45.605446L227.117387 44.2617L228.29317 45.605446L227.117387 46.9531Z'/>
<path d='M230.6877 45.605446L227.117387 44.2617L228.29317 45.605446L227.117387 46.9531Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 71.3869 -124.7469)'>H<tspan x='-45.676286'>T</tspan><tspan x='-39.648887'>TP</tspan><tspan x='-25.153253'>GE</tspan><tspan x='-12.590358'>T</tspan><tspan x='-4.221747'>W</tspan><tspan x='4.555345'>ebsock</tspan><tspan x='35.738402'>et-Endpunkt</tspan></text>
<path d='M-49.88281 67.2812H230.8866' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-dasharray='2.98883 2.98883'/>
<path d='M-52.38279 67.281237L-48.808575 68.62499L-49.98436 67.281237L-48.808575 65.93358Z'/>
<path d='M-52.38279 67.281237L-48.808575 68.62499L-49.98436 67.281237L-48.808575 65.93358Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 88.9065 -103.1419)'>101<tspan x='-33.601574'>Switching</tspan><tspan x='11.45944'>Pr</tspan><tspan x='20.834278'>ot</tspan><tspan x='29.511732'>ocols</tspan></text>
<path d='M-56.10156 88.9531H234.4066' stroke='#000' fill='none' stroke-width='.79701' stroke-miterlimit='10' stroke-dasharray='.79701 1.99255'/>
<path d='M-6.4219 95.8516H184.7306V82.0547H-6.4219Z' fill='#fff'/>
<text class='f0' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 49.47934 -73.8778)'>(ab<tspan x='-41.073543'>hier</tspan><tspan x='-28.053364'>v</tspan><tspan x='-24.747768'>erläuft</tspan><tspan x='-3.442658'>die</tspan><tspan x='7.283124'>K</tspan><tspan x='11.585985'>ommunikation</tspan><tspan x='57.43904'>im</tspan><tspan x='66.874661'>W</tspan><tspan x='73.018625'>ebsock</tspan><tspan x='94.846762'>et-Pr</tspan><tspan x='109.240777'>ot</tspan><tspan x='115.314992'>okoll)</tspan></text>
<path d='M-49.88281 121.4648H228.1916' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-52.38279 121.465092L-48.808575 122.80884L-49.98436 121.465092L-48.808575 120.11744Z'/>
<path d='M-52.38279 121.465092L-48.808575 122.80884L-49.98436 121.465092L-48.808575 120.11744Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M230.6877 121.465092L227.117387 120.11744L228.29317 121.465092L227.117387 122.80884Z'/>
<path d='M230.6877 121.465092L227.117387 120.11744L228.29317 121.465092L227.117387 122.80884Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 94.3113 -48.889)'>Corpor<tspan x='-22.941539'>ate</tspan><tspan x='-6.851882'>Handshak</tspan><tspan x='37.123205'>e</tspan></text>
<path d='M-49.88281 143.1367H228.1916' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10'/>
<path d='M-52.38279 143.136488L-48.808575 144.48024L-49.98436 143.136488L-48.808575 141.78883Z'/>
<path d='M-52.38279 143.136488L-48.808575 144.48024L-49.98436 143.136488L-48.808575 141.78883Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<path d='M230.6877 143.136488L227.117387 141.78883L228.29317 143.136488L227.117387 144.48024Z'/>
<path d='M230.6877 143.136488L227.117387 141.78883L228.29317 143.136488L227.117387 144.48024Z' stroke='#000' fill='none' stroke-width='.3985' stroke-miterlimit='10' stroke-linejoin='bevel'/>
<text class='f2' x='-52.580396' y='164.811325' transform='matrix(1 0 0 1 81.798 -25.294)'>A<tspan x='-46.413525'>ustausch</tspan><tspan x='-3.853134'>v</tspan><tspan x='.859188'>on</tspan><tspan x='14.32867'>Nachrichten</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

BIN
public/heimdall-bifrost.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
public/operations.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -6,8 +6,9 @@
\node (WSM) at (4,4) [component, inner sep=12px] { WSM };
\node (Backend) at (4,7) [component,external] { Backend };
\draw[very thick, rounded corners=6px] (0,2) rectangle (8,6) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
\draw (Device) edge [<->] (WSM);
\draw (Device) edge [<->] node (Websocket) {} (WSM);
\draw (WSM) edge [->, bend left=10] (Backend) (Backend) edge [->, response, bend left=10] (WSM);
\node at (5.5,4.5) [stickynote, callout absolute pointer=(WSM.20), anchor=south west] { Web Socket\\Manager };
\node at (2.5,3.5) [stickynote, callout absolute pointer=(Websocket.center), anchor=north east] { Websocket-\\Verbindung };
\end{tikzpicture}
\end{document}

View File

@@ -17,7 +17,7 @@
\draw (Device) edge [<->] (WSM);
\draw (WSM) edge [->, bend left=10] node [auto, sloped, swap] { \scriptsize /foo/config;v1 } (Message Mapping.325)
(Message Mapping.0) edge [->, response, bend left=10] node [auto, sloped] { \scriptsize Backend 2 } (WSM);
(Message Mapping.0) edge [->, response, bend left=10] node [auto, sloped] { \scriptsize Backend 1 } (WSM);
\draw (WSM) edge [->] (Backend1);
\draw (Backend1) edge [->,response] (FORS);

View File

@@ -0,0 +1,16 @@
\input{lib/preamble.tex}
\begin{document}
\begin{tikzpicture}
\node (Device) at (4,1) [component,external] { Gerät };
\node (WSM) at (4,9) [component,external] { WSM };
\node (TCPConn) at (4,3.5) [component] { TCP Connector };
\node (TLSFilter) at (4,5) [component] { TLS Filter };
\node (WSFilter) at (4,6.5) [component] { Websocket Filter };
\draw[very thick, rounded corners=6px] (0,2) rectangle (8,8) ++(0, 0.1) node [label, anchor=south east] { Connection Holder };
\draw (Device) edge [<->] (TCPConn)
(TCPConn) edge [<->] (TLSFilter)
(TLSFilter) edge [<->] (WSFilter)
(WSFilter) edge [<->] (WSM);
\end{tikzpicture}
\end{document}

View File

@@ -0,0 +1,84 @@
\input{lib/preamble.tex}
\begin{document}
\begin{tikzpicture}[scale=1.35]
\node (Device) at (0,10) [component] { Gerät };
\node (CH) at (4,10) [component] { CH };
\node (WSM1) at (8,10) [component] { WSM 1 };
\node (WSM2) at (10,10) [component] { WSM 2 };
\path (Device) edge [dashed]
node[pos=0.1] (TCP-Device) {}
node[pos=0.28] (HTTP-Device) {}
node[pos=0.48] (Switch-Device) {}
node[pos=0.55] (WSEx1-Device) {}
node[pos=0.95] (WSEx2-Device) {}
node[pos=1] (Device-End) {}
++(0,-10);
\path (CH) edge [dashed]
node[pos=0.1] (TCP-CH) {}
node[pos=0.13] (Conn-Id-Create1) {}
node[pos=0.16] (Conn-Id-Create2) {}
node[pos=0.22] (TCP2-CH) {}
node[pos=0.28] (HTTP-CH) {}
node[pos=0.33] (HTTP2-CH) {}
node[pos=0.43] (Switch2-CH) {}
node[pos=0.48] (Switch-CH) {}
node[pos=0.55] (WSEx1-Tunnel) {}
node[pos=0.62] (ConnEnd-CH) {}
node[pos=0.69] (TCP3-CH) {}
node[pos=0.77] (HTTP3-CH) {}
node[pos=0.88] (Switch3-CH) {}
node[pos=0.95] (WSEx2-Tunnel) {}
node[pos=1] (CH-End) {}
++(0,-10);
\path (WSM1) edge [dashed]
node[pos=0.22] (TCP2-WSM1) {}
node[pos=0.33] (HTTP2-WSM1) {}
node[pos=0.365] (Conn-Id-Persist1) {}
node[pos=0.395] (Conn-Id-Persist2) {}
node[pos=0.43] (Switch2-WSM1) {}
node[pos=0.55] (WSEx1-WSM1) {}
node[pos=0.62] (ConnEnd-WSM1) {}
node[pos=1] (WSM1-End) {}
++(0,-10);
\path (WSM2) edge [dashed]
node[pos=0.69] (TCP3-WSM2) {}
node[pos=0.77] (HTTP3-WSM2) {}
node[pos=0.81] (Conn-Id-Status1) {}
node[pos=0.84] (Conn-Id-Status2) {}
node[pos=0.88] (Switch3-WSM2) {}
node[pos=0.95] (WSEx2-WSM2) {}
node[pos=1] (WSM2-End) {}
++(0,-10);
\draw (TCP-Device.center) edge [<->] node [above] { TCP-Verbindung } node [below] { TLS } (TCP-CH.center)
(HTTP-Device.center) edge [->] node [above] { HTTP GET Websocket-Endpunkt } (HTTP-CH.center)
(Switch-Device.center) edge [<-,dashed] node [above] { 101 Switching Protocols } (Switch-CH.center)
(WSEx1-Device.center) edge [<->] node [above=0.1,fill=white] { Websocket-Austausch } (WSEx1-WSM1.center)
(WSEx2-Device.center) edge [<->] node [pos=0.6,below,fill=white] { Websocket-Austausch } (WSEx2-WSM2.center)
;
\draw (Conn-Id-Create1.center) edge [->,bend left=90,looseness=2]
node [anchor=west] { \small erstelle connection ID } (Conn-Id-Create2.center)
(TCP2-CH.center) edge [<->] node [above] { TCP-Verbindung } (TCP2-WSM1.center)
(HTTP2-CH.center) edge [->] node [above] { HTTP GET Websocket-Endpunkt }
node [below] { \scriptsize inkl. Connection-ID + Geräte-Zertifikat } (HTTP2-WSM1.center)
(Switch2-CH.center) edge [<-,dashed] node [above] { 101 Switching Protocols } (Switch2-WSM1.center)
(ConnEnd-CH.center) edge [<-] node [above] { Verbindung wird beendet } (ConnEnd-WSM1.center)
(TCP3-CH.center) edge [<->] node [above,fill=white,pos=0.4] { TCP-Verbindung } (TCP3-WSM2.center)
(HTTP3-CH.center) edge [->] node [above,fill=white] { HTTP GET Websocket-Endpunkt }
node [below,fill=white] { \scriptsize inkl. Connection-ID + Geräte-Zertifikat } (HTTP3-WSM2.center)
(Switch3-CH.center) edge [<-,dashed] node [above,fill=white] { 101 Switching Protocols } (Switch3-WSM2.center)
;
\draw (Conn-Id-Persist1.center) edge [->,bend left=90,looseness=2]
node [anchor=west,align=left] { \small persistiere\\\small Connection-ID } (Conn-Id-Persist2.center)
(Conn-Id-Status1.center) edge [->,bend left=90,looseness=2]
node [anchor=west,align=left] { \small hole persistierten\\\small Status zu\\\small Connection-ID } (Conn-Id-Status2.center)
;
\node[shape=rectangle,fill=white,draw=black] at (WSEx1-Tunnel) {};
\node[shape=rectangle,fill=white,draw=black] at (WSEx2-Tunnel) {};
\end{tikzpicture}
\end{document}

View File

@@ -3,14 +3,15 @@
\begin{document}
\begin{tikzpicture}[decoration={random steps,amplitude=0.15mm,segment length=0.3mm}]
\draw[->] (-0.2,0) -- (8.2,0) node[anchor=north] {t};
\draw[->] (0,-0.2) -- (0,4.2) node[anchor=east] {\#};
\draw[->] (0,-0.2) -- (0,4.2) node[anchor=east] {\# Geräte};
\draw[help lines, dashed] (3,-0.4)--(3,3.8) (6,-0.4)--(6,3.8);
\draw[color=scandioblue,decorate] (0,3.13)--(3,3.13)--(6,4.13)--(8,4.13);
\draw[color=green!60!black,decorate] (0,2.8)--(3,2.8)--(6,3.8)--(8,3.8);
\draw[color=scandiored,decorate] (0,3)--(3,3)--(6,0) (3,0)--(6,1)--(8,1);
\draw[color=scandiored,decorate] (0,3)--(3,3) (3,0)--(6,1)--(8,1);
\draw[color=scandiored] (3,3)--(6,0);
\draw[color=scandiored, thick] (3,2.9)--(3,3.1) (3,-0.1)--(3,0.1);
\end{tikzpicture}
\end{document}

View File

@@ -3,7 +3,7 @@
\begin{document}
\begin{tikzpicture}[decoration={random steps,amplitude=0.15mm,segment length=0.3mm}]
\draw[->] (-0.2,0) -- (8.2,0) node[anchor=north] {t};
\draw[->] (0,-0.2) -- (0,4.2) node[anchor=east] {\#};
\draw[->] (0,-0.2) -- (0,4.2) node[anchor=east] {\# Geräte};
\draw[help lines, dashed] (3,-0.4)--(3,3.8) (6,-0.4)--(6,3.8);

View File

@@ -1,15 +1,15 @@
\input{lib/preamble.tex}
\begin{document}
\begin{tikzpicture}[decoration={random steps,amplitude=0.15mm,segment length=0.3mm}]
\begin{tikzpicture}
\draw[->] (-0.2,0) -- (8.2,0) node[anchor=north] {t};
\draw[->] (0,-0.2) -- (0,4.2) node[anchor=east] {\#};
\draw[->] (0,-0.2) -- (0,4.2) node[anchor=east] {\# Pods};
\draw[help lines, dashed] (2,-0.4)--(2,3.8) (3,-0.4)--(3,3.8) (6,-0.4)--(6,3.8) (7,-0.4)--(7,3.8);
\draw[color=scandiored,decorate] (0,3.6)--(2,3.6)--(3,2.4)--(6,2.4)--(7,0);
\draw[color=scandiored] (0,3.6)--(2,3.6)--(3,2.4)--(6,2.4)--(7,0);
\node[anchor=south, color=scandiored] at (1,3.6) { \scriptsize stable };
\draw[color=scandioblue,decorate] (2,0)--(3,1.2)--(6,1.2)--(7,3.6)--(8,3.6);
\draw[color=scandioblue] (2,0)--(3,1.2)--(6,1.2)--(7,3.6)--(8,3.6);
\node[anchor=south, color=scandioblue] at (4.5,1.2) { \scriptsize canary };
\node[anchor=south, color=scandioblue] at (7.5,3.6) { \scriptsize stable };
\end{tikzpicture}

View File

@@ -1,29 +1,27 @@
\input{lib/preamble.tex}
\begin{document}
\begin{tikzpicture}[decoration={random steps,amplitude=0.15mm,segment length=0.3mm}]
\draw[->] (-0.2,0) -- (8.2,0) node[anchor=north] {t};
\draw[->] (0,-0.2) -- (0,5.2) node[anchor=east] {\#};
\begin{tikzpicture}[every node/.style={inner sep=2px}]
\draw[->] (-0.2,0) -- (10.2,0) node[anchor=north] {t};
\draw[->] (0,-0.2) -- (0,5.7) node[anchor=south] {\# Geräte pro Instanz};
\draw[help lines, dashed] (2,-0.4)--(2,3.8) (3,-0.4)--(3,3.8) (6,-0.4)--(6,3.8) (7,-0.4)--(7,3.8);
\draw[help lines, dashed] (2,-0.4)--(2,5.3) (3,-0.4)--(3,5.3) (6,-0.4)--(6,5.3) (7,-0.4)--(7,5.3);
\draw[color=scandiored,decorate] (0,3.7)--(2,3.7)--(3,4.884)--(6,4.884)--(7,0);
\draw[color=scandiored,decorate] (0,3.4)--(2,3.4)--(3,4.584)--(6,4.584)--(7,0);
\draw[color=scandiored,decorate] (0,3.62)--(2,3.62)--(3,4.804)--(6,4.804)--(7,0);
\draw[color=scandiored,decorate] (0,3.65)--(2,3.65)--(3,4.834)--(6,4.834)--(7,0);
\draw[color=scandiored,decorate] (0,3.49)--(2,3.49)--(3,4.674)--(6,4.674)--(7,0);
\draw[color=scandiored,decorate] (0,3.52)--(2,3.52)--(3,4.704)--(6,4.704)--(7,0);
\draw[color=scandiored,decorate] (0,3.6)--(2,3.6)--(3,0);
\draw[color=scandiored,decorate] (0,3.23)--(2,3.23)--(3,0);
\draw[color=scandiored,decorate] (0,3.83)--(2,3.83)--(3,0);
\draw[color=scandioblue,decorate] (2,0)--(3,1.16)--(6,1.16)--(7,4.325)--(8,4.325);
\draw[color=scandioblue,decorate] (2,0)--(3,1.18)--(6,1.18)--(7,4.345)--(8,4.345);
\draw[color=scandioblue,decorate] (2,0)--(3,1.2)--(6,1.2)--(7,4.365)--(8,4.365);
\draw[color=scandioblue,decorate] (6,0)--(7,3.165)--(8,3.165);
\draw[color=scandioblue,decorate] (6,0)--(7,3.18)--(8,3.18);
\draw[color=scandioblue,decorate] (6,0)--(7,3.2)--(8,3.2);
\draw[color=scandioblue,decorate] (6,0)--(7,3.15)--(8,3.15);
\draw[color=scandioblue,decorate] (6,0)--(7,3.1)--(8,3.1);
\draw[color=scandioblue,decorate] (6,0)--(7,3.22)--(8,3.22);
\draw[color=scandiored] (0,3.15)--(2,3.15)--(3,4.2) plot[domain=0:3] (\x + 3, {3.15 + 1.05*0.85^(\x * 7/3)}) (6,3.487)--(7,0);
\draw[color=scandiored] (0,3.15)--(2,3.15)--(3,0);
\node[color=scandiored,anchor=south] at (1,3.15) { \tiny stable (9x) };
\node[color=scandiored,anchor=south west,fill=white] at (2.5,1.55) { \tiny stable (3x) };
\node[color=scandiored,anchor=north] at (4.5,4.2) { \tiny stable (6x) };
\draw[color=scandioblue] (2,0)--(3,1.05) plot[domain=0:3] (\x + 3, {3.15 - 2.1*0.85^(\x * 7/3)}) -- (6,2.477)--(7,4.802)
plot[domain=0:3] (\x + 7, {3.15 + 1.652*0.85^(\x * 7/3)});
\draw[color=scandioblue] (6,0)--(7,2.324) plot[domain=0:3] (\x + 7, {3.15 - 0.826*0.85^(\x * 7/3)});
\node[color=scandioblue,anchor=south] at (4.5,1.5) { \tiny canary (3x) };
\node[color=scandioblue,anchor=west,fill=white] at (7,2.1) { \tiny canary (6x) };
\draw[<->] (3,-0.3)--(6,-0.3);
\node[fill=white] at (4.5,-0.3) { \scriptsize 7 Tage };
\end{tikzpicture}
\end{document}

View File

@@ -0,0 +1,85 @@
\input{lib/preamble.tex}
\usepackage{enumitem}
\setlist{leftmargin=*, itemsep=0.5ex, parsep=0px}
\begin{document}
\begin{tikzpicture}
\node (dev1) at (3,0.5) [component,external] { Gerät 1 };
\node (dev2) at (6,0.5) [component,external] { Gerät 2 };
\node (devX) at (9,0.5) [component,external] { Gerät \dots };
\draw[very thick, rounded corners=6px] (-1.5,2) rectangle (14,9) ++(0, 0.1) node [label, anchor=south east] { \large Heimdall };
\fill[color=scandiored!10] (1.5,2.5) rectangle (10.5,4.5);
\fill[color=black!10] (2,5) rectangle (10,7);
\node (CH1) at (3,3.5) [component] { Connection\\Holder\\ \small Pod 1 };
\node (CH2) at (6,3.5) [component] { Connection\\Holder\\ \small Pod 2 };
\node (CHX) at (9,3.5) [component] { Connection\\Holder\\ \small Pod \dots };
\node (WSM1) at (3,6) [component] { WSM\\ \small Pod 1 };
\node (WSM2) at (6,6) [component] { WSM\\ \small Pod 2 };
\node (WSMX) at (9,6) [component] { WSM\\ \small Pod \dots };
\node (WSM1 port) at (WSM1.30) [port] {};
\node at (WSM1 port) [label, below right=3px] { \scriptsize addr1 };
\node (WSM2 port) at (WSM2.30) [port] {};
\node at (WSM2 port) [label, below right=3px] { \scriptsize addr2 };
\node (FORS) at (8,8) [component, inner sep=12px] { FORS };
\node (Router) at (3,8) [component, inner sep] { Message\\Router };
\node (backend1) at (3, 10) [component,external] { Backend 1 };
\node (backend2) at (6, 10) [component,external] { Backend 2 };
\node (backendX) at (9, 10) [component,external] { Backend \dots };
\node at (1.8, 7) [stickynote, callout absolute pointer=(Router.190), anchor=east] {
\begin{minipage}{2.6cm}
\scriptsize\raggedright
Dieser Service wartet ggf. auf die Beendigung des Requests zum Backend
\end{minipage}
};
\node at (10.5, 8.5) [stickynote, callout absolute pointer=(WSMX.east), anchor=north west] {
\begin{minipage}{2.8cm}
\scriptsize\raggedright
\begin{itemize}
\item Client-Zertifikat: Expiry und Blocklisting
\item Websocket-Upgrade
\item Corporate Handshake
\item Quarantäne
\item Nachrichtenformatierung
\end{itemize}
\end{minipage}
};
\node at (10.8, 5.5) [stickynote, callout absolute pointer=(CHX.350), anchor=north west] {
\begin{minipage}{2.5cm}
\scriptsize\raggedright
\begin{itemize}
\item TCP-Verbindung
\item TLS-Terminierung
\item Validierung von Client-Zertifikaten ohne Expiry-Timestamp
\end{itemize}
\end{minipage}
};
\draw (dev1) edge [<->] (CH1)
(dev2) edge [<->] (CH2)
(devX) edge [<->] (CHX);
\draw (CH1) edge [<->] node [midway] (CH to WSM) {} (WSM1)
(CH2) edge [<->] (WSM2)
(CHX) edge [<->] (WSMX);
\draw (WSM1) edge [->, bend left=10] (Router)
(Router) edge [->, response, bend left=10] (WSM1);
\draw (Router) edge [->, bend left=10] (backend2)
(backend2) edge [->, response, bend left=10] (Router);
\draw (backend2) edge [->, response] (FORS);
\draw (FORS) edge [->, response] (WSM1 port);
\node at (1.4, 6) [stickynote, callout absolute pointer=(CH to WSM.west), anchor=north east] {
\begin{minipage}{2.2cm}
\scriptsize\raggedright
\begin{itemize}
\item TCP-Tunnel
\item vor Eröffnung des Tunnels wird das validierte Zertifikat mitgesendet
\end{itemize}
\end{minipage}
};
\end{tikzpicture}
\end{document}

View File

@@ -0,0 +1,37 @@
\input{lib/preamble.tex}
\begin{document}
\begin{tikzpicture}
\node (Device) at (0,8) [component] { Gerät };
\node (WSM) at (10,8) [component] { WSM };
\draw (Device) edge [dashed]
node[pos=0.1] (TCP1) {}
node[pos=0.2] (TLS1) {}
node[pos=0.3] (Encrypted1) {}
node[pos=0.45] (WSGet1) {}
node[pos=0.55] (WSSwitch1) {}
node[pos=0.65] (WSComm1) {}
node[pos=0.8] (CorpHS1) {}
node[pos=0.9] (Exchange1) {}
++(0,-8);
\draw (WSM) edge [dashed]
node[pos=0.1] (TCP2) {}
node[pos=0.2] (TLS2) {}
node[pos=0.3] (Encrypted2) {}
node[pos=0.45] (WSGet2) {}
node[pos=0.55] (WSSwitch2) {}
node[pos=0.65] (WSComm2) {}
node[pos=0.8] (CorpHS2) {}
node[pos=0.9] (Exchange2) {}
++(0,-8);
\draw (TCP1.center) edge [->] node [above] {TCP-Verbindung öffnen} (TCP2.center)
(TLS1.center) edge [<->] node [above] {TLS-Handshake} node [below] {\small Verschlüsselung und Authentifizierung} (TLS2.center)
(Encrypted1.west) edge[dotted, thick] node [fill=white] {\scriptsize (ab hier ist die Kommunikation verschlüsselt)} (Encrypted2.east)
(WSGet1.center) edge [->] node [above] {HTTP GET Websocket-Endpunkt} (WSGet2.center)
(WSSwitch1.center) edge [<-,dashed] node [above] {101 Switching Protocols} (WSSwitch2.center)
(WSComm1.west) edge[dotted, thick] node [fill=white] {\scriptsize (ab hier verläuft die Kommunikation im Websocket-Protokoll)} (WSComm2.east)
(CorpHS1.center) edge[<->] node [above] {Corporate Handshake} (CorpHS2.center)
(Exchange1.center) edge[<->] node [above] {Austausch von Nachrichten} (Exchange2.center)
;
\end{tikzpicture}
\end{document}

View File

@@ -1,8 +1,8 @@
<section class="sc-left-and-right" data-background-image="/backgrounds/title.svg">
<div class="sc-right">
<img src="/logo_scandio.svg" style="width: 50%;">
<h4>Millionen langlebiger TCP-Verbindungen Herausforderungen und Lösungen bei Update-Prozessen</h4>
<div class="sc-gray">31.01.2024</div>
<h4>Bleeding Edge - wie man ein Edge-Gateway up-to-date hält</h4>
<div class="sc-gray">15.05.2024</div>
</div>
</section>
@@ -19,80 +19,97 @@
</div>
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h2 style="margin: 48px;">Über Scandio</h2>
<center class="r-stretch" style="display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 36px; justify-items: center;">
<img src="consulting.png" style="height: 200px;">
<img src="development.png" style="height: 200px;">
<img src="operations.png" style="height: 200px;">
<small>
<b>CONSULTING</b>
<p>
Wir analysieren und beraten; von Cloud-Architektur über agile Beratung bis hin zu Migrationen in die Atlassian Cloud.
</p>
</small>
<small>
<b>DEVELOPMENT</b>
<p>
Webanwendungen oder Softwarearchitektur, IoT oder Data Science: unsere Teams decken jeden Aspekt von agiler
Softwareentwicklung ab.
</p>
</small>
<small>
<b>SYSTEMS ENGINEERING</b>
<p>
Mit Best Practices aus dem DevOps-Bereich and agilen Methoden entwicken unsere Teams maßgeschneiderte
Cloud-Architekturen.
</p>
</small>
</center>
<p style="margin: 48px;"><a href="https://www.scandio.de/">www.scandio.de</a></p>
</section>
<section data-background-color="black">
Projektsetup
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h2>Heimdall</h2>
<ul>
<li class="fragment">Gateway zwischen IoT-Geräten und verschiedenen Backends</li>
<li class="fragment">Entwickelt seit 2018</li>
<li class="fragment">Ablösung eines vollständig extern verwalteten Systems</li>
</ul>
<img src="/heimdall-bifrost.jpg" style="width: 45%;">
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h2>Fachlicher Kontext</h2>
<center>
<img src="/diagrams/business_context.svg" style="width: 600px;">
</center>
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h2>Qualitätsanforderungen</h2>
<ul>
<li class="fragment">Vermeidung von Verbindungsabbrüchen</li>
<li class="fragment">Wenige Neuverbindungen zur gleichen Zeit</li>
<li class="fragment">Keine Validierung oder Modifikation von Nachrichteninhalten</li>
<li class="fragment">Verbindungsdetails transparent gegenüber Backends</li>
</ul>
</section>
<section data-background-color="black">
Problemstellung
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h2>Systemupdate</h2>
<ul>
<li class="fragment">Updates an der Logik und Konfiguration von Heimdall</li>
<li class="fragment">Vermeidung von Neuverbindungen in den meisten Fällen</li>
<li class="fragment">Kontrollierte Neuverbindungen, falls Verbindungsabbrüche notwendig</li>
</ul>
</section>
<section data-background-color="black">
Lösungen
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h3>Softwarearchitektur Heimdall</h3>
<center class="r-stack">
<img class="diagram fragment fade-out" data-fragment-index="1" src="/diagrams/arch1.svg">
<img class="diagram fragment fade-in-then-out" data-fragment-index="1" src="/diagrams/arch2.svg">
<img class="diagram fragment fade-in-then-out" src="/diagrams/arch3.svg">
<img class="diagram fragment fade-in-then-out" src="/diagrams/arch4.svg">
<img class="diagram fragment fade-in-then-out" src="/diagrams/arch5.svg">
</center>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/arch1.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="r-stretch" src="/diagrams/arch6.svg">
<img class="diagram" src="/diagrams/arch2.svg">
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h3>Deploymentstrategie</h3>
<center class="r-stack">
<img class="diagram fragment fade-out" data-fragment-index="1" src="/diagrams/deployment1.svg">
<img class="diagram fragment fade-in-then-out" data-fragment-index="1" src="/diagrams/deployment2.svg">
<img class="diagram fragment fade-in-then-out" src="/diagrams/deployment3.svg">
<img class="diagram fragment fade-in-then-out" src="/diagrams/deployment4.svg">
</center>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/arch3.svg">
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right">
<h3>Ideen zur Verbesserung</h3>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/arch4.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/arch5.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/arch6.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/deployment1.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/deployment2.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/deployment3.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right">
<img class="diagram" src="/diagrams/deployment4.svg">
</section>
<section class="sc-left-and-right" data-background-color="black">
@@ -106,3 +123,38 @@
</div>
</section>
<section data-background-color="black" data-visibility="uncounted">
</section>
<section data-background-color="black" data-visibility="uncounted">
Ideen und Wünsche
</section>
<section data-background-image="/backgrounds/normal.svg" data-background-position="top right" data-visibility="uncounted">
<h2>Aufgaben des WSM</h2>
<ul>
<li class="fragment">TLS</li>
<li class="fragment">Websocket-Upgrade</li>
<li class="fragment">Corporate Handshake</li>
<li class="fragment">Message Routing</li>
<li class="fragment">Quarantäne</li>
<li class="fragment">Kleinere spezifische Workarounds</li>
</ul>
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right" data-visibility="uncounted">
<img class="r-stretch" src="/diagrams/websocket.svg" style="margin: 60px;">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right" data-visibility="uncounted">
<img class="r-stretch" src="/diagrams/future-arch.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right" data-visibility="uncounted">
<img class="r-stretch" src="/diagrams/connection-holder-runtime.svg">
</section>
<section data-background-image="/backgrounds/normal-fewer-hexagons.svg" data-background-position="top right" data-visibility="uncounted">
<img class="r-stretch" src="/diagrams/connection-holder-internal.svg">
</section>

View File

@@ -12,7 +12,7 @@
@import "./colors";
// Include theme-specific fonts
@import url(https://fonts.googleapis.com/css?family=Raleway:900|Roboto:300);
@import url(https://fonts.googleapis.com/css?family=Raleway:900|Roboto:300,700);
// Override theme settings (see ../template/settings.scss)