Commit de63c2f6bcf3b1ad6d78923c52229bec5d16f68d

Authored by Kai Nessig
1 parent b60c7ff1

add structure diagram with notes

docs/structure-notes/diagram.plantuml 0 → 100644
  1 +@startuml
  2 +abstract class Bot
  3 +note right of Bot
  4 + Abstraktion des Bots:
  5 + Verbindet zum jeweiligen
  6 + Service und leitet
  7 + Nachrichten an den
  8 + Gateway weiter
  9 +end note
  10 +class TelegramBot
  11 +class TwitterBot
  12 +
  13 +Bot <|-- TelegramBot
  14 +Bot <|-- TwitterBot
  15 +
  16 +class Gateway
  17 +note left of Gateway
  18 + Verbindungszentrale
  19 + zwischen
  20 + - Bots,
  21 + - nlp-Modulen,
  22 + - Registry
  23 +end note
  24 +class MetaMetaPersistence
  25 +note left of MetaMetaPersistence
  26 + z. B.: ob ein Nutzer
  27 + schon mal eine
  28 + Anfrage gestellt hat
  29 +end note
  30 +class MetaPersistence
  31 +note left of MetaPersistence
  32 + z. B.: ob ein Nutzer
  33 + den angefragten
  34 + Service schon mal
  35 + genutzt hat
  36 +end note
  37 +
  38 +
  39 +package nlp {
  40 +class "rasa-ai"
  41 +class "drools"
  42 +class "Google Cloud Speech API"
  43 +class "Google Cloud Natural Language"
  44 +class "Microsoft Azure Spracherkennungs-API"
  45 +class "Microsoft Azure Textanalyse-API"
  46 +"Google Cloud Speech API" -> "Google Cloud Natural Language"
  47 +"Microsoft Azure Spracherkennungs-API" -> "Microsoft Azure Textanalyse-API"
  48 +legend left
  49 + Zieht die Bedeutung
  50 + aus der Nachricht
  51 + (Text/Audio) heraus.
  52 +end legend
  53 +}
  54 +
  55 +
  56 +Gateway -- nlp
  57 +
  58 +Bot "1..*" -- Gateway
  59 +
  60 +Gateway -- MetaMetaPersistence
  61 +
  62 +class Registry
  63 +
  64 +Gateway "1" -- "1" Registry
  65 +Registry -- MetaPersistence
  66 +
  67 +abstract class Service
  68 +note left of Service
  69 + Abstraktion der Services:
  70 + Verbindet zur Registry,
  71 + konfiguriert nlp-Modul,
  72 + empfängt Requests der Benutzer
  73 + erzeugt Antworten an den Benutzer
  74 +end note
  75 +
  76 +
  77 +class MensaService
  78 +Service <|-- MensaService
  79 +Service <|-- WetterService
  80 +
  81 +Registry "1" -- "*" Service
  82 +@enduml
docs/structure-notes/diagram.svg 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="700px" preserveAspectRatio="none" style="width:2257px;height:700px;" version="1.1" viewBox="0 0 2257 700" width="2257px" zoomAndPan="magnify"><defs><filter height="300%" id="fs74tbu87ubde" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[cb16d009c2c3c451e9c65eba30a46b49]
  2 +cluster nlp--><polygon fill="#FFFFFF" filter="url(#fs74tbu87ubde)" points="551,264.5,581,264.5,588,286.7969,1861,286.7969,1861,455.5,551,455.5,551,264.5" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="551" x2="588" y1="286.7969" y2="286.7969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="24" x="555" y="279.4951">nlp</text><rect fill="#DDDDDD" height="58.8906" rx="5" ry="5" style="stroke: #000000; stroke-width: 1.5;" width="159" x="1130" y="296.7969"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="143" x="1136" y="314.792">Zieht die Bedeutung</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="121" x="1136" y="331.0889">aus der Nachricht</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="140" x="1136" y="347.3857">(Text/Audio) heraus.</text><!--MD5=[1a430f771feecd7605e990fdc690e74d]
  3 +class rasa-ai--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="rasa-ai" style="stroke: #A80036; stroke-width: 1.5;" width="75" x="700.5" y="383.5"/><ellipse cx="715.5" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M718.4688,405.1406 Q717.8906,405.4375 717.25,405.5859 Q716.6094,405.7344 715.9063,405.7344 Q713.4063,405.7344 712.0859,404.0859 Q710.7656,402.4375 710.7656,399.3125 Q710.7656,396.1875 712.0859,394.5313 Q713.4063,392.875 715.9063,392.875 Q716.6094,392.875 717.2578,393.0313 Q717.9063,393.1875 718.4688,393.4844 L718.4688,396.2031 Q717.8438,395.625 717.25,395.3516 Q716.6563,395.0781 716.0313,395.0781 Q714.6875,395.0781 714,396.1484 Q713.3125,397.2188 713.3125,399.3125 Q713.3125,401.4063 714,402.4766 Q714.6875,403.5469 716.0313,403.5469 Q716.6563,403.5469 717.25,403.2734 Q717.8438,403 718.4688,402.4219 L718.4688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="43" x="729.5" y="403.6543">rasa-ai</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="701.5" x2="774.5" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="701.5" x2="774.5" y1="423.5" y2="423.5"/><!--MD5=[8c071e7f4ceac9e4887eb6ad26d4178d]
  4 +class drools--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="drools" style="stroke: #A80036; stroke-width: 1.5;" width="71" x="594.5" y="383.5"/><ellipse cx="609.5" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M612.4688,405.1406 Q611.8906,405.4375 611.25,405.5859 Q610.6094,405.7344 609.9063,405.7344 Q607.4063,405.7344 606.0859,404.0859 Q604.7656,402.4375 604.7656,399.3125 Q604.7656,396.1875 606.0859,394.5313 Q607.4063,392.875 609.9063,392.875 Q610.6094,392.875 611.2578,393.0313 Q611.9063,393.1875 612.4688,393.4844 L612.4688,396.2031 Q611.8438,395.625 611.25,395.3516 Q610.6563,395.0781 610.0313,395.0781 Q608.6875,395.0781 608,396.1484 Q607.3125,397.2188 607.3125,399.3125 Q607.3125,401.4063 608,402.4766 Q608.6875,403.5469 610.0313,403.5469 Q610.6563,403.5469 611.25,403.2734 Q611.8438,403 612.4688,402.4219 L612.4688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="39" x="623.5" y="403.6543">drools</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="595.5" x2="664.5" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="595.5" x2="664.5" y1="423.5" y2="423.5"/><!--MD5=[cfa2d47d12dc6a89ef4dd7c0ea664d64]
  5 +class Google Cloud Speech API--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Google Cloud Speech API" style="stroke: #A80036; stroke-width: 1.5;" width="189" x="1382.5" y="383.5"/><ellipse cx="1397.5" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1400.4688,405.1406 Q1399.8906,405.4375 1399.25,405.5859 Q1398.6094,405.7344 1397.9063,405.7344 Q1395.4063,405.7344 1394.0859,404.0859 Q1392.7656,402.4375 1392.7656,399.3125 Q1392.7656,396.1875 1394.0859,394.5313 Q1395.4063,392.875 1397.9063,392.875 Q1398.6094,392.875 1399.2578,393.0313 Q1399.9063,393.1875 1400.4688,393.4844 L1400.4688,396.2031 Q1399.8438,395.625 1399.25,395.3516 Q1398.6563,395.0781 1398.0313,395.0781 Q1396.6875,395.0781 1396,396.1484 Q1395.3125,397.2188 1395.3125,399.3125 Q1395.3125,401.4063 1396,402.4766 Q1396.6875,403.5469 1398.0313,403.5469 Q1398.6563,403.5469 1399.25,403.2734 Q1399.8438,403 1400.4688,402.4219 L1400.4688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="157" x="1411.5" y="403.6543">Google Cloud Speech API</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1383.5" x2="1570.5" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1383.5" x2="1570.5" y1="423.5" y2="423.5"/><!--MD5=[7c4900552af84581be74f8adb48c3ed9]
  6 +class Google Cloud Natural Language--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Google Cloud Natural Language" style="stroke: #A80036; stroke-width: 1.5;" width="231" x="1606.5" y="383.5"/><ellipse cx="1621.5" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1624.4688,405.1406 Q1623.8906,405.4375 1623.25,405.5859 Q1622.6094,405.7344 1621.9063,405.7344 Q1619.4063,405.7344 1618.0859,404.0859 Q1616.7656,402.4375 1616.7656,399.3125 Q1616.7656,396.1875 1618.0859,394.5313 Q1619.4063,392.875 1621.9063,392.875 Q1622.6094,392.875 1623.2578,393.0313 Q1623.9063,393.1875 1624.4688,393.4844 L1624.4688,396.2031 Q1623.8438,395.625 1623.25,395.3516 Q1622.6563,395.0781 1622.0313,395.0781 Q1620.6875,395.0781 1620,396.1484 Q1619.3125,397.2188 1619.3125,399.3125 Q1619.3125,401.4063 1620,402.4766 Q1620.6875,403.5469 1622.0313,403.5469 Q1622.6563,403.5469 1623.25,403.2734 Q1623.8438,403 1624.4688,402.4219 L1624.4688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="199" x="1635.5" y="403.6543">Google Cloud Natural Language</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1607.5" x2="1836.5" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1607.5" x2="1836.5" y1="423.5" y2="423.5"/><!--MD5=[acf266757ecf13af39ce6c6e198e21d2]
  7 +class Microsoft Azure Spracherkennungs-API--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Microsoft Azure Spracherkennungs-API" style="stroke: #A80036; stroke-width: 1.5;" width="273" x="810.5" y="383.5"/><ellipse cx="825.5" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M828.4688,405.1406 Q827.8906,405.4375 827.25,405.5859 Q826.6094,405.7344 825.9063,405.7344 Q823.4063,405.7344 822.0859,404.0859 Q820.7656,402.4375 820.7656,399.3125 Q820.7656,396.1875 822.0859,394.5313 Q823.4063,392.875 825.9063,392.875 Q826.6094,392.875 827.2578,393.0313 Q827.9063,393.1875 828.4688,393.4844 L828.4688,396.2031 Q827.8438,395.625 827.25,395.3516 Q826.6563,395.0781 826.0313,395.0781 Q824.6875,395.0781 824,396.1484 Q823.3125,397.2188 823.3125,399.3125 Q823.3125,401.4063 824,402.4766 Q824.6875,403.5469 826.0313,403.5469 Q826.6563,403.5469 827.25,403.2734 Q827.8438,403 828.4688,402.4219 L828.4688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="241" x="839.5" y="403.6543">Microsoft Azure Spracherkennungs-API</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="811.5" x2="1082.5" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="811.5" x2="1082.5" y1="423.5" y2="423.5"/><!--MD5=[5c8a763c67d47e21fa2e55f7c3e59860]
  8 +class Microsoft Azure Textanalyse-API--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Microsoft Azure Textanalyse-API" style="stroke: #A80036; stroke-width: 1.5;" width="228" x="1119" y="383.5"/><ellipse cx="1134" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1136.9688,405.1406 Q1136.3906,405.4375 1135.75,405.5859 Q1135.1094,405.7344 1134.4063,405.7344 Q1131.9063,405.7344 1130.5859,404.0859 Q1129.2656,402.4375 1129.2656,399.3125 Q1129.2656,396.1875 1130.5859,394.5313 Q1131.9063,392.875 1134.4063,392.875 Q1135.1094,392.875 1135.7578,393.0313 Q1136.4063,393.1875 1136.9688,393.4844 L1136.9688,396.2031 Q1136.3438,395.625 1135.75,395.3516 Q1135.1563,395.0781 1134.5313,395.0781 Q1133.1875,395.0781 1132.5,396.1484 Q1131.8125,397.2188 1131.8125,399.3125 Q1131.8125,401.4063 1132.5,402.4766 Q1133.1875,403.5469 1134.5313,403.5469 Q1135.1563,403.5469 1135.75,403.2734 Q1136.3438,403 1136.9688,402.4219 L1136.9688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="196" x="1148" y="403.6543">Microsoft Azure Textanalyse-API</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1120" x2="1346" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1120" x2="1346" y1="423.5" y2="423.5"/><!--MD5=[5f7a1d5056c7d80958fde22b7188240f]
  9 +class Bot--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Bot" style="stroke: #A80036; stroke-width: 1.5;" width="53" x="215.5" y="27.5"/><ellipse cx="230.5" cy="43.5" fill="#A9DCDF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M230.6094,38.8438 L229.4531,43.9219 L231.7813,43.9219 L230.6094,38.8438 Z M229.125,36.6094 L232.1094,36.6094 L235.4688,49 L233.0156,49 L232.25,45.9375 L228.9688,45.9375 L228.2188,49 L225.7813,49 L229.125,36.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="21" x="244.5" y="47.6543">Bot</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="216.5" x2="267.5" y1="59.5" y2="59.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="216.5" x2="267.5" y1="67.5" y2="67.5"/><path d="M304,8.5 L304,47.5 L268.539,51.5 L304,55.5 L304,94.1641 A0,0 0 0 0 304,94.1641 L496,94.1641 A0,0 0 0 0 496,94.1641 L496,18.5 L486,8.5 L304,8.5 A0,0 0 0 0 304,8.5 " fill="#FBFB77" filter="url(#fs74tbu87ubde)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M486,8.5 L486,18.5 L496,18.5 L486,8.5 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="137" x="310" y="25.5669">Abstraktion des Bots:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="159" x="322" y="40.6997">Verbindet zum jeweiligen</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="322" y="55.8325">Service und leitet</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="125" x="322" y="70.9653">Nachrichten an den</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="97" x="322" y="86.0981">Gateway weiter</text><!--MD5=[cb74a83a4f903f6f1f6543ccb0a5b44e]
  10 +class TelegramBot--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="TelegramBot" style="stroke: #A80036; stroke-width: 1.5;" width="111" x="48.5" y="173.5"/><ellipse cx="63.5" cy="189.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M66.4688,195.1406 Q65.8906,195.4375 65.25,195.5859 Q64.6094,195.7344 63.9063,195.7344 Q61.4063,195.7344 60.0859,194.0859 Q58.7656,192.4375 58.7656,189.3125 Q58.7656,186.1875 60.0859,184.5313 Q61.4063,182.875 63.9063,182.875 Q64.6094,182.875 65.2578,183.0313 Q65.9063,183.1875 66.4688,183.4844 L66.4688,186.2031 Q65.8438,185.625 65.25,185.3516 Q64.6563,185.0781 64.0313,185.0781 Q62.6875,185.0781 62,186.1484 Q61.3125,187.2188 61.3125,189.3125 Q61.3125,191.4063 62,192.4766 Q62.6875,193.5469 64.0313,193.5469 Q64.6563,193.5469 65.25,193.2734 Q65.8438,193 66.4688,192.4219 L66.4688,195.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="79" x="77.5" y="193.6543">TelegramBot</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="49.5" x2="158.5" y1="205.5" y2="205.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="49.5" x2="158.5" y1="213.5" y2="213.5"/><!--MD5=[f78070549fed58b9f712d01bcdfa8080]
  11 +class TwitterBot--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="TwitterBot" style="stroke: #A80036; stroke-width: 1.5;" width="95" x="194.5" y="173.5"/><ellipse cx="209.5" cy="189.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M212.4688,195.1406 Q211.8906,195.4375 211.25,195.5859 Q210.6094,195.7344 209.9063,195.7344 Q207.4063,195.7344 206.0859,194.0859 Q204.7656,192.4375 204.7656,189.3125 Q204.7656,186.1875 206.0859,184.5313 Q207.4063,182.875 209.9063,182.875 Q210.6094,182.875 211.2578,183.0313 Q211.9063,183.1875 212.4688,183.4844 L212.4688,186.2031 Q211.8438,185.625 211.25,185.3516 Q210.6563,185.0781 210.0313,185.0781 Q208.6875,185.0781 208,186.1484 Q207.3125,187.2188 207.3125,189.3125 Q207.3125,191.4063 208,192.4766 Q208.6875,193.5469 210.0313,193.5469 Q210.6563,193.5469 211.25,193.2734 Q211.8438,193 212.4688,192.4219 L212.4688,195.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="63" x="223.5" y="193.6543">TwitterBot</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="195.5" x2="288.5" y1="205.5" y2="205.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="195.5" x2="288.5" y1="213.5" y2="213.5"/><!--MD5=[6de492f04047ff8a778df2bea690e363]
  12 +class Gateway--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Gateway" style="stroke: #A80036; stroke-width: 1.5;" width="85" x="516.5" y="173.5"/><ellipse cx="531.5" cy="189.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M534.4688,195.1406 Q533.8906,195.4375 533.25,195.5859 Q532.6094,195.7344 531.9063,195.7344 Q529.4063,195.7344 528.0859,194.0859 Q526.7656,192.4375 526.7656,189.3125 Q526.7656,186.1875 528.0859,184.5313 Q529.4063,182.875 531.9063,182.875 Q532.6094,182.875 533.2578,183.0313 Q533.9063,183.1875 534.4688,183.4844 L534.4688,186.2031 Q533.8438,185.625 533.25,185.3516 Q532.6563,185.0781 532.0313,185.0781 Q530.6875,185.0781 530,186.1484 Q529.3125,187.2188 529.3125,189.3125 Q529.3125,191.4063 530,192.4766 Q530.6875,193.5469 532.0313,193.5469 Q532.6563,193.5469 533.25,193.2734 Q533.8438,193 534.4688,192.4219 L534.4688,195.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="53" x="545.5" y="193.6543">Gateway</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="517.5" x2="600.5" y1="205.5" y2="205.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="517.5" x2="600.5" y1="213.5" y2="213.5"/><path d="M324.5,154.5 L324.5,240.1641 A0,0 0 0 0 324.5,240.1641 L481.5,240.1641 A0,0 0 0 0 481.5,240.1641 L481.5,201.5 L516.375,197.5 L481.5,193.5 L481.5,164.5 L471.5,154.5 L324.5,154.5 A0,0 0 0 0 324.5,154.5 " fill="#FBFB77" filter="url(#fs74tbu87ubde)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M471.5,154.5 L471.5,164.5 L481.5,164.5 L471.5,154.5 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="132" x="330.5" y="171.5669">Verbindungszentrale</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="57" x="342.5" y="186.6997">zwischen</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="42" x="342.5" y="201.8325">- Bots,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="91" x="342.5" y="216.9653">- nlp-Modulen,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="60" x="342.5" y="232.0981">- Registry</text><!--MD5=[a6b9c0f13e903759af77a6040a4d75f7]
  13 +class MetaMetaPersistence--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="MetaMetaPersistence" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="2078" y="383.5"/><ellipse cx="2093" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2095.9688,405.1406 Q2095.3906,405.4375 2094.75,405.5859 Q2094.1094,405.7344 2093.4063,405.7344 Q2090.9063,405.7344 2089.5859,404.0859 Q2088.2656,402.4375 2088.2656,399.3125 Q2088.2656,396.1875 2089.5859,394.5313 Q2090.9063,392.875 2093.4063,392.875 Q2094.1094,392.875 2094.7578,393.0313 Q2095.4063,393.1875 2095.9688,393.4844 L2095.9688,396.2031 Q2095.3438,395.625 2094.75,395.3516 Q2094.1563,395.0781 2093.5313,395.0781 Q2092.1875,395.0781 2091.5,396.1484 Q2090.8125,397.2188 2090.8125,399.3125 Q2090.8125,401.4063 2091.5,402.4766 Q2092.1875,403.5469 2093.5313,403.5469 Q2094.1563,403.5469 2094.75,403.2734 Q2095.3438,403 2095.9688,402.4219 L2095.9688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="2107" y="403.6543">MetaMetaPersistence</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2079" x2="2245" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2079" x2="2245" y1="423.5" y2="423.5"/><path d="M1884.5,380 L1884.5,435.3984 A0,0 0 0 0 1884.5,435.3984 L2043.5,435.3984 A0,0 0 0 0 2043.5,435.3984 L2043.5,411.5 L2077.87,407.5 L2043.5,403.5 L2043.5,390 L2033.5,380 L1884.5,380 A0,0 0 0 0 1884.5,380 " fill="#FBFB77" filter="url(#fs74tbu87ubde)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2033.5,380 L2033.5,390 L2043.5,390 L2033.5,380 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="122" x="1890.5" y="397.0669">z. B.: ob ein Nutzer</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="97" x="1902.5" y="412.1997">schon mal eine</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="1902.5" y="427.3325">Anfrage gestellt hat</text><!--MD5=[31b2e9695773afd3c5dca78d98af2285]
  14 +class MetaPersistence--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="MetaPersistence" style="stroke: #A80036; stroke-width: 1.5;" width="137" x="195.5" y="514"/><ellipse cx="210.5" cy="530" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M213.4688,535.6406 Q212.8906,535.9375 212.25,536.0859 Q211.6094,536.2344 210.9063,536.2344 Q208.4063,536.2344 207.0859,534.5859 Q205.7656,532.9375 205.7656,529.8125 Q205.7656,526.6875 207.0859,525.0313 Q208.4063,523.375 210.9063,523.375 Q211.6094,523.375 212.2578,523.5313 Q212.9063,523.6875 213.4688,523.9844 L213.4688,526.7031 Q212.8438,526.125 212.25,525.8516 Q211.6563,525.5781 211.0313,525.5781 Q209.6875,525.5781 209,526.6484 Q208.3125,527.7188 208.3125,529.8125 Q208.3125,531.9063 209,532.9766 Q209.6875,534.0469 211.0313,534.0469 Q211.6563,534.0469 212.25,533.7734 Q212.8438,533.5 213.4688,532.9219 L213.4688,535.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="105" x="224.5" y="534.1543">MetaPersistence</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="196.5" x2="331.5" y1="546" y2="546"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="196.5" x2="331.5" y1="554" y2="554"/><path d="M6,502.5 L6,573.0313 A0,0 0 0 0 6,573.0313 L160,573.0313 A0,0 0 0 0 160,573.0313 L160,542 L195.388,538 L160,534 L160,512.5 L150,502.5 L6,502.5 A0,0 0 0 0 6,502.5 " fill="#FBFB77" filter="url(#fs74tbu87ubde)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M150,502.5 L150,512.5 L160,512.5 L150,502.5 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="122" x="12" y="519.5669">z. B.: ob ein Nutzer</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="106" x="24" y="534.6997">den angefragten</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="24" y="549.8325">Service schon mal</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="74" x="24" y="564.9653">genutzt hat</text><!--MD5=[3dfa3f2a47c42e7badf1c5a380940d73]
  15 +class Registry--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Registry" style="stroke: #A80036; stroke-width: 1.5;" width="82" x="442" y="383.5"/><ellipse cx="457" cy="399.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M459.9688,405.1406 Q459.3906,405.4375 458.75,405.5859 Q458.1094,405.7344 457.4063,405.7344 Q454.9063,405.7344 453.5859,404.0859 Q452.2656,402.4375 452.2656,399.3125 Q452.2656,396.1875 453.5859,394.5313 Q454.9063,392.875 457.4063,392.875 Q458.1094,392.875 458.7578,393.0313 Q459.4063,393.1875 459.9688,393.4844 L459.9688,396.2031 Q459.3438,395.625 458.75,395.3516 Q458.1563,395.0781 457.5313,395.0781 Q456.1875,395.0781 455.5,396.1484 Q454.8125,397.2188 454.8125,399.3125 Q454.8125,401.4063 455.5,402.4766 Q456.1875,403.5469 457.5313,403.5469 Q458.1563,403.5469 458.75,403.2734 Q459.3438,403 459.9688,402.4219 L459.9688,405.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="50" x="471" y="403.6543">Registry</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="443" x2="523" y1="415.5" y2="415.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="443" x2="523" y1="423.5" y2="423.5"/><!--MD5=[dbb8b4f13c7b21394f9d757e58732f45]
  16 +class Service--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="Service" style="stroke: #A80036; stroke-width: 1.5;" width="77" x="663.5" y="514"/><ellipse cx="678.5" cy="530" fill="#A9DCDF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M678.6094,525.3438 L677.4531,530.4219 L679.7813,530.4219 L678.6094,525.3438 Z M677.125,523.1094 L680.1094,523.1094 L683.4688,535.5 L681.0156,535.5 L680.25,532.4375 L676.9688,532.4375 L676.2188,535.5 L673.7813,535.5 L677.125,523.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="45" x="692.5" y="534.1543">Service</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="664.5" x2="739.5" y1="546" y2="546"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="664.5" x2="739.5" y1="554" y2="554"/><path d="M367.5,495 L367.5,580.6641 A0,0 0 0 0 367.5,580.6641 L628.5,580.6641 A0,0 0 0 0 628.5,580.6641 L628.5,542 L663.339,538 L628.5,534 L628.5,505 L618.5,495 L367.5,495 A0,0 0 0 0 367.5,495 " fill="#FBFB77" filter="url(#fs74tbu87ubde)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M618.5,495 L618.5,505 L628.5,505 L618.5,495 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="160" x="373.5" y="512.0669">Abstraktion der Services:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="385.5" y="527.1997">Verbindet zur Registry,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="142" x="385.5" y="542.3325">konfiguriert nlp-Modul,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="212" x="385.5" y="557.4653">empfängt Requests der Benutzer</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="228" x="385.5" y="572.5981">erzeugt Antworten an den Benutzer</text><!--MD5=[7ef71cb86d0382d53f92aacb0f4b71d0]
  17 +class MensaService--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="MensaService" style="stroke: #A80036; stroke-width: 1.5;" width="118" x="566" y="641"/><ellipse cx="581" cy="657" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M583.9688,662.6406 Q583.3906,662.9375 582.75,663.0859 Q582.1094,663.2344 581.4063,663.2344 Q578.9063,663.2344 577.5859,661.5859 Q576.2656,659.9375 576.2656,656.8125 Q576.2656,653.6875 577.5859,652.0313 Q578.9063,650.375 581.4063,650.375 Q582.1094,650.375 582.7578,650.5313 Q583.4063,650.6875 583.9688,650.9844 L583.9688,653.7031 Q583.3438,653.125 582.75,652.8516 Q582.1563,652.5781 581.5313,652.5781 Q580.1875,652.5781 579.5,653.6484 Q578.8125,654.7188 578.8125,656.8125 Q578.8125,658.9063 579.5,659.9766 Q580.1875,661.0469 581.5313,661.0469 Q582.1563,661.0469 582.75,660.7734 Q583.3438,660.5 583.9688,659.9219 L583.9688,662.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="595" y="661.1543">MensaService</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="567" x2="683" y1="673" y2="673"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="567" x2="683" y1="681" y2="681"/><!--MD5=[a1ac23f7d6b37ce4151bd234c8b47e18]
  18 +class WetterService--><rect fill="#FEFECE" filter="url(#fs74tbu87ubde)" height="48" id="WetterService" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="719.5" y="641"/><ellipse cx="734.5" cy="657" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M737.4688,662.6406 Q736.8906,662.9375 736.25,663.0859 Q735.6094,663.2344 734.9063,663.2344 Q732.4063,663.2344 731.0859,661.5859 Q729.7656,659.9375 729.7656,656.8125 Q729.7656,653.6875 731.0859,652.0313 Q732.4063,650.375 734.9063,650.375 Q735.6094,650.375 736.2578,650.5313 Q736.9063,650.6875 737.4688,650.9844 L737.4688,653.7031 Q736.8438,653.125 736.25,652.8516 Q735.6563,652.5781 735.0313,652.5781 Q733.6875,652.5781 733,653.6484 Q732.3125,654.7188 732.3125,656.8125 Q732.3125,658.9063 733,659.9766 Q733.6875,661.0469 735.0313,661.0469 Q735.6563,661.0469 736.25,660.7734 Q736.8438,660.5 737.4688,659.9219 L737.4688,662.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="748.5" y="661.1543">WetterService</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="720.5" x2="837.5" y1="673" y2="673"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="720.5" x2="837.5" y1="681" y2="681"/><!--MD5=[74255b05c2b64650430312fa704ce0c0]
  19 +reverse link Bot to TelegramBot--><path d="M205.968,90.099 C180.663,116.504 147.625,150.979 126.117,173.421 " fill="none" id="Bot&lt;-TelegramBot" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="200.936,85.233,219.828,75.636,211.044,94.919,200.936,85.233" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c559cf4cfbe0b535537177f6ce6ace31]
  20 +reverse link Bot to TwitterBot--><path d="M242,95.763 C242,121.278 242,152.552 242,173.421 " fill="none" id="Bot&lt;-TwitterBot" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="235,95.636,242,75.636,249,95.636,235,95.636" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[bf0ce985bfeb0d766c56dc67ecba9ee4]
  21 +link Google Cloud Speech API to Google Cloud Natural Language--><path d="M1571.75,407.5 C1581.58,407.5 1591.41,407.5 1601.23,407.5 " fill="none" id="Google Cloud Speech API-&gt;Google Cloud Natural Language" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1606.37,407.5,1597.37,403.5,1601.37,407.5,1597.37,411.5,1606.37,407.5" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ab65187e5e3bb1e884fa7bf04ddaa369]
  22 +link Microsoft Azure Spracherkennungs-API to Microsoft Azure Textanalyse-API--><path d="M1083.58,407.5 C1093.6,407.5 1103.62,407.5 1113.65,407.5 " fill="none" id="Microsoft Azure Spracherkennungs-API-&gt;Microsoft Azure Textanalyse-API" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1118.89,407.5,1109.89,403.5,1113.89,407.5,1109.89,411.5,1118.89,407.5" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5a7bee2b9ca17417b03452ed10595b55]
  23 +link Gateway to nlp--><path d="M559,221.554 C559,228.2177 559,236.0418 559,244.6397 C559,248.9386 559,253.431 559,258.0686 C559,259.228 559,260.3964 559,261.5732 C559,262.1616 559,262.7521 559,263.3445 C559,263.6407 559,263.9375 559,264.2347 " fill="none" id="Gateway-nlp" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9d9d2bd3fc2c7eca8c4958bc525f67ce]
  24 +link Bot to Gateway--><path d="M262.201,75.762 C269.155,82.613 277.377,89.582 286,94.5 C371.431,143.229 410.128,112.373 499,154.5 C509.8,159.62 520.759,166.642 530.303,173.48 " fill="none" id="Bot-Gateway" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="241.3219" y="95.5871">1..*</text><!--MD5=[381c53986a85dce6cdc4a4e35ae18ff4]
  25 +link Gateway to MetaMetaPersistence--><path d="M601.861,198.806 C840.401,200.648 1995.96,211.462 2061,248.5 C2113.2,278.223 2142.62,347.17 2154.98,383.365 " fill="none" id="Gateway-MetaMetaPersistence" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f6f6703481f44d2c177340b7baa47857]
  26 +link Gateway to Registry--><path d="M550.576,221.554 C535.968,261.536 506.096,343.289 491.461,383.342 " fill="none" id="Gateway-Registry" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="539.3924" y="241.7236">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="484.6041" y="372.3135">1</text><!--MD5=[1310d7491568d7a02cb0e17253404b68]
  27 +link Registry to MetaPersistence--><path d="M443.594,431.622 C403.941,454.889 343.13,490.57 303.458,513.848 " fill="none" id="Registry-MetaPersistence" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5cead8586ac6af575e2328a909d43534]
  28 +reverse link Service to MensaService--><path d="M677.19,579.275 C664.636,599.6556 649.849,623.6607 639.226,640.9058 " fill="none" id="Service&lt;-MensaService" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="671.248,575.576,687.697,562.219,683.168,582.918,671.248,575.576" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[357541afbd081577ed9e150c91979a82]
  29 +reverse link Service to WetterService--><path d="M726.81,579.275 C739.364,599.6556 754.151,623.6607 764.774,640.9058 " fill="none" id="Service&lt;-WetterService" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="720.832,582.918,716.303,562.219,732.752,575.576,720.832,582.918" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[3a106bbeaef6a98b94f0ef4eec5eba62]
  30 +link Registry to Service--><path d="M499.395,431.587 C510.258,445.203 525.669,461.645 543,471.5 C583.816,494.71 603.397,475.26 646,495 C656.475,499.854 666.888,506.889 675.841,513.818 " fill="none" id="Registry-Service" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="494.4163" y="451.3694">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="7" x="661.2409" y="502.7834">*</text><!--MD5=[414cef5c7b97be90eaef630bd43cc3cd]
  31 +@startuml
  32 +abstract class Bot
  33 +note right of Bot
  34 + Abstraktion des Bots:
  35 + Verbindet zum jeweiligen
  36 + Service und leitet
  37 + Nachrichten an den
  38 + Gateway weiter
  39 +end note
  40 +class TelegramBot
  41 +class TwitterBot
  42 +
  43 +Bot <|- - TelegramBot
  44 +Bot <|- - TwitterBot
  45 +
  46 +class Gateway
  47 +note left of Gateway
  48 + Verbindungszentrale
  49 + zwischen
  50 + - Bots,
  51 + - nlp-Modulen,
  52 + - Registry
  53 +end note
  54 +class MetaMetaPersistence
  55 +note left of MetaMetaPersistence
  56 + z. B.: ob ein Nutzer
  57 + schon mal eine
  58 + Anfrage gestellt hat
  59 +end note
  60 +class MetaPersistence
  61 +note left of MetaPersistence
  62 + z. B.: ob ein Nutzer
  63 + den angefragten
  64 + Service schon mal
  65 + genutzt hat
  66 +end note
  67 +
  68 +
  69 +package nlp {
  70 +class "rasa-ai"
  71 +class "drools"
  72 +class "Google Cloud Speech API"
  73 +class "Google Cloud Natural Language"
  74 +class "Microsoft Azure Spracherkennungs-API"
  75 +class "Microsoft Azure Textanalyse-API"
  76 +"Google Cloud Speech API" -> "Google Cloud Natural Language"
  77 +"Microsoft Azure Spracherkennungs-API" -> "Microsoft Azure Textanalyse-API"
  78 +legend left
  79 + Zieht die Bedeutung
  80 + aus der Nachricht
  81 + (Text/Audio) heraus.
  82 +end legend
  83 +}
  84 +
  85 +
  86 +Gateway - - nlp
  87 +
  88 +Bot "1..*" - - Gateway
  89 +
  90 +Gateway - - MetaMetaPersistence
  91 +
  92 +class Registry
  93 +
  94 +Gateway "1" - - "1" Registry
  95 +Registry - - MetaPersistence
  96 +
  97 +abstract class Service
  98 +note left of Service
  99 + Abstraktion der Services:
  100 + Verbindet zur Registry,
  101 + konfiguriert nlp-Modul,
  102 + empfängt Requests der Benutzer
  103 + erzeugt Antworten an den Benutzer
  104 +end note
  105 +
  106 +
  107 +class MensaService
  108 +Service <|- - MensaService
  109 +Service <|- - WetterService
  110 +
  111 +Registry "1" - - "*" Service
  112 +@enduml
  113 +
  114 +PlantUML version 1.2019.11(Sun Sep 22 10:02:15 UTC 2019)
  115 +(GPL source distribution)
  116 +Java Runtime: OpenJDK Runtime Environment
  117 +JVM: OpenJDK 64-Bit Server VM
  118 +Java Version: 1.8.0_212-8u212-b01-1~deb9u1-b01
  119 +Operating System: Linux
  120 +Default Encoding: UTF-8
  121 +Language: en
  122 +Country: null
  123 +--></g></svg>
0 \ No newline at end of file 124 \ No newline at end of file