mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-06-01 01:54:00 +00:00
2 lines
38 KiB
XML
2 lines
38 KiB
XML
<?plantuml 1.2026.2?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="ACTIVITY" height="2113px" preserveAspectRatio="none" style="width:2321px;height:2113px;background:#FFFFFF;" version="1.1" viewBox="0 0 2321 2113" width="2321px" zoomAndPan="magnify"><title>Biergarten Pipeline - Activity Diagram (Swimlanes)</title><defs/><g><g class="title" data-source-line="5"><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="366.625" x="975.9546" y="33.5352">Biergarten Pipeline - Activity Diagram (Swimlanes)</text></g><rect fill="none" height="21.1992" style="stroke:none;stroke-width:1;" width="2288.5342" x="15" y="49.7852"/><ellipse cx="151.0117" cy="85.9844" fill="#222222" rx="10" ry="10" style="stroke:#222222;stroke-width:1;"/><path d="M277.6504,112.7402 L277.6504,129.0508 L257.6504,133.0508 L277.6504,137.0508 L277.6504,153.3613 A0,0 0 0 0 277.6504,153.3613 L533.8057,153.3613 A0,0 0 0 0 533.8057,153.3613 L533.8057,122.7402 L523.8057,112.7402 L277.6504,112.7402 A0,0 0 0 0 277.6504,112.7402" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M523.8057,112.7402 L523.8057,122.7402 L533.8057,122.7402 L523.8057,112.7402" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="235.1553" x="283.6504" y="130.3086">Determines mode (mocked vs model)</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="194.0479" x="283.6504" y="145.6191">and LLM sampling parameters.</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="213.2773" x="44.373" y="115.9844"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="193.2773" x="54.373" y="137.5859">Parse Command-Line Arguments</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="171.1309" x="65.4463" y="221.8389"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="151.1309" x="75.4463" y="243.4404">Log Error & Display Usage</text><ellipse cx="151.0117" cy="295.4053" fill="none" rx="11" ry="11" style="stroke:#222222;stroke-width:1;"/><ellipse cx="151.0117" cy="295.4053" fill="#222222" rx="6" ry="6" style="stroke:#222222;stroke-width:1;"/><polygon fill="#FEFECE" points="94.9724,173.3613,207.051,173.3613,219.051,185.3613,207.051,197.3613,94.9724,197.3613,82.9724,185.3613,94.9724,173.3613" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="13.5835" x="155.0117" y="207.9961">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="112.0786" x="94.9724" y="189.5186">Are arguments valid?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="17.4829" x="219.051" y="183.041">yes</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="149.082" x="76.4707" y="348.4053"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="129.082" x="86.4707" y="370.0068">Initialize Global States</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="260.0234" x="21" y="402.5381"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="240.0234" x="31" y="424.1396">Construct Dependency Injector (Boost.DI)</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="229.2734" x="36.375" y="456.6709"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="209.2734" x="46.375" y="478.2725">Instantiate BiergartenDataGenerator</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="92.6973" x="193.771" y="1772.6641"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="72.6973" x="203.771" y="1794.2656">Log Warning</text><path d="M216.4961,1975.3408 L216.4961,1983.9961 L196.4961,1987.9961 L216.4961,1991.9961 L216.4961,2000.6514 A0,0 0 0 0 216.4961,2000.6514 L487.0415,2000.6514 A0,0 0 0 0 487.0415,2000.6514 L487.0415,1985.3408 L477.0415,1975.3408 L216.4961,1975.3408 A0,0 0 0 0 216.4961,1975.3408" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M477.0415,1975.3408 L477.0415,1985.3408 L487.0415,1985.3408 L477.0415,1975.3408" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="249.5454" x="222.4961" y="1992.9092">Dumps generated JSON fields to spdlog</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="90.9688" x="105.5273" y="1970.9297"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="70.9688" x="115.5273" y="1992.5313">LogResults()</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="184.2031" x="58.9102" y="2025.0625"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="164.2031" x="68.9102" y="2046.6641">Exit Pipeline Successfully (0)</text><ellipse cx="151.0117" cy="2090.1953" fill="none" rx="11" ry="11" style="stroke:#222222;stroke-width:1;"/><ellipse cx="151.0117" cy="2090.1953" fill="#222222" rx="6" ry="6" style="stroke:#222222;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1.5;" x1="15" x2="15" y1="49.7852" y2="2101.1953"/><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="272.8496" x="544.8057" y="510.8037"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="252.8496" x="554.8057" y="532.4053">JsonLoader::LoadLocations("locations.json")</text><path d="M788.5596,569.3477 L788.5596,578.0029 L768.5596,582.0029 L788.5596,586.0029 L788.5596,594.6582 A0,0 0 0 0 788.5596,594.6582 L1044.626,594.6582 A0,0 0 0 0 1044.626,594.6582 L1044.626,579.3477 L1034.626,569.3477 L788.5596,569.3477 A0,0 0 0 0 788.5596,569.3477" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M1034.626,569.3477 L1034.626,579.3477 L1044.626,579.3477 L1034.626,569.3477" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="235.0664" x="794.5596" y="586.916">Randomly samples from loaded array</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="174.6582" x="593.9014" y="564.9365"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="154.6582" x="603.9014" y="586.5381">Sample up to 50 Locations</text><line style="stroke:#000000;stroke-width:1.5;" x1="538.8057" x2="538.8057" y1="49.7852" y2="2101.1953"/><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="192.4297" x="1109.7119" y="675.2041"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="172.4297" x="1119.7119" y="696.8057">GetLocationContext(Location)</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="247.9941" x="1081.9297" y="729.3369"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="227.9941" x="1091.9297" y="750.9385">Fetch extract for Region (City, Country)</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="238.6133" x="1086.6201" y="783.4697"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="218.6133" x="1096.6201" y="805.0713">Fetch extract for "beer in <Country>"</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="214.9063" x="1098.4736" y="837.6025"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="194.9063" x="1108.4736" y="859.2041">Fetch extract for "beer in <City>"</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="250.6016" x="1080.626" y="891.7354"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="230.6016" x="1090.626" y="913.3369">Store EnrichedCity (Location + Context)</text><polygon fill="#FEFECE" points="1132.3186,619.0693,1279.5349,619.0693,1291.5349,631.0693,1279.5349,643.0693,1132.3186,643.0693,1120.3186,631.0693,1132.3186,619.0693" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="107.9106" x="1209.9268" y="653.7041">Remaining locations</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="147.2163" x="1132.3186" y="635.2266">For each sampled Location?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="27.9512" x="1092.3674" y="628.749">Done</text><line style="stroke:#000000;stroke-width:1.5;" x1="1049.626" x2="1049.626" y1="49.7852" y2="2101.1953"/><polygon fill="#FEFECE" points="1664.2834,1024.0029,1750.0276,1024.0029,1762.0276,1036.0029,1750.0276,1048.0029,1664.2834,1048.0029,1652.2834,1036.0029,1664.2834,1024.0029" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="85.7441" x="1664.2834" y="1040.1602">Generator Mode</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="81.2754" x="1571.0081" y="1033.6826">MockGenerator</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="84.4443" x="1762.0276" y="1033.6826">LlamaGenerator</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="187.4316" x="1426.1563" y="1068.0029"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="167.4316" x="1436.1563" y="1089.6045">Calculate Deterministic Hash</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="249.2891" x="1395.2275" y="1122.1357"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="229.2891" x="1405.2275" y="1143.7373">Select Adjective, Noun, and Description</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="134.041" x="1452.8516" y="1176.2686"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="114.041" x="1462.8516" y="1197.8701">Build BreweryResult</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="228.6816" x="1405.5313" y="1230.4014"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="208.6816" x="1415.5313" y="1252.0029">Store GeneratedBrewery into results</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="216.3477" x="1786.2651" y="1068.0029"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="196.3477" x="1796.2651" y="1089.6045">Prepare System and User Prompts</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="142.3555" x="1823.2612" y="1122.1357"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="122.3555" x="1833.2612" y="1143.7373">Attempt Counter = 1</text><path d="M2018.145,1233.2686 L2018.145,1249.5791 L1998.145,1253.5791 L2018.145,1257.5791 L2018.145,1273.8896 A0,0 0 0 0 2018.145,1273.8896 L2252.6865,1273.8896 A0,0 0 0 0 2252.6865,1273.8896 L2252.6865,1243.2686 L2242.6865,1233.2686 L2018.145,1233.2686 A0,0 0 0 0 2018.145,1233.2686" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M2242.6865,1233.2686 L2242.6865,1243.2686 L2252.6865,1243.2686 L2242.6865,1233.2686" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="213.5415" x="2024.145" y="1250.8369">Applies Gemma 4 Jinja formatting</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="158.6279" x="2024.145" y="1266.1475">and GBNF JSON Grammar</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="207.4121" x="1790.7329" y="1236.5127"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="187.4121" x="1800.7329" y="1258.1143">Run Model Inference (llama.cpp)</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="272.1289" x="1758.3745" y="1293.8896"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="252.1289" x="1768.3745" y="1315.4912">Validate JSON Output (ValidateBreweryJson)</text><polygon fill="#FEFECE" points="1857.9666,1348.0225,1930.9114,1348.0225,1942.9114,1360.0225,1930.9114,1372.0225,1857.9666,1372.0225,1845.9666,1360.0225,1857.9666,1348.0225" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="72.9448" x="1857.9666" y="1364.1797">Is JSON Valid?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="17.4829" x="1828.4836" y="1357.7021">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="13.5835" x="1942.9114" y="1357.7021">no</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="162.7461" x="1684.5166" y="1382.0225"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="142.7461" x="1694.5166" y="1403.624">Parse into BreweryResult</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="201.4707" x="1922.2529" y="1430.5"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="181.4707" x="1932.2529" y="1452.1016">Increase max_tokens threshold</text><polygon fill="#FEFECE" points="1949.2244,1382.0225,2096.7522,1382.0225,2108.7522,1394.0225,2096.7522,1406.0225,1949.2244,1406.0225,1937.2244,1394.0225,1949.2244,1382.0225" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="17.4829" x="2026.9883" y="1416.6572">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="147.5278" x="1949.2244" y="1398.1797">Error == "incomplete JSON"</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="13.5835" x="2108.7522" y="1391.7021">no</text><polygon fill="#FEFECE" points="2022.9883,1488.3984,2034.9883,1500.3984,2022.9883,1512.3984,2010.9883,1500.3984,2022.9883,1488.3984" style="stroke:#A80036;stroke-width:0.5;"/><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="311.4512" x="1867.2627" y="1532.3984"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="291.4512" x="1877.2627" y="1554">Append Error details to Prompt for LLM correction</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="179.9023" x="1933.0371" y="1586.5313"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="159.9023" x="1943.0371" y="1608.1328">Increment Attempt Counter</text><polygon fill="#FEFECE" points="1894.439,1176.2686,1906.439,1188.2686,1894.439,1200.2686,1882.439,1188.2686,1894.439,1176.2686" style="stroke:#A80036;stroke-width:0.5;"/><polygon fill="#FEFECE" points="1854.7896,1640.6641,1934.0884,1640.6641,1946.0884,1652.6641,1934.0884,1664.6641,1854.7896,1664.6641,1842.7896,1652.6641,1854.7896,1640.6641" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="79.2988" x="1854.7896" y="1656.8213">Attempt <= 3?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="17.4829" x="1946.0884" y="1650.3438">yes</text><polygon fill="#FEFECE" points="1894.439,1684.6641,1906.439,1696.6641,1894.439,1708.6641,1882.439,1696.6641,1894.439,1684.6641" style="stroke:#A80036;stroke-width:0.5;"/><polygon fill="#FEFECE" points="1818.2634,1728.6641,1970.6145,1728.6641,1982.6145,1740.6641,1970.6145,1752.6641,1818.2634,1752.6641,1806.2634,1740.6641,1818.2634,1728.6641" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="152.3511" x="1818.2634" y="1744.8213">Still Invalid after 3 attempts?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="17.4829" x="1788.7805" y="1738.3438">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="13.5835" x="1982.6145" y="1738.3438">no</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="70.8242" x="1760.8513" y="1826.7969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="50.8242" x="1770.8513" y="1848.3984">Skip City</text><rect fill="#FEFECE" height="34.1328" rx="12.5" ry="12.5" style="stroke:#A80036;stroke-width:0.5;" width="228.6816" x="1878.2737" y="1772.6641"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="208.6816" x="1888.2737" y="1794.2656">Store GeneratedBrewery into results</text><polygon fill="#FEFECE" points="1894.439,1870.9297,1906.439,1882.9297,1894.439,1894.9297,1882.439,1882.9297,1894.439,1870.9297" style="stroke:#A80036;stroke-width:0.5;"/><polygon fill="#FEFECE" points="1707.1555,1904.9297,1719.1555,1916.9297,1707.1555,1928.9297,1695.1555,1916.9297,1707.1555,1904.9297" style="stroke:#A80036;stroke-width:0.5;"/><polygon fill="#FEFECE" points="1647.1282,967.8682,1767.1829,967.8682,1779.1829,979.8682,1767.1829,991.8682,1647.1282,991.8682,1635.1282,979.8682,1647.1282,967.8682" style="stroke:#A80036;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="137.2529" x="1711.1555" y="1002.5029">Remaining enriched cities</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="120.0547" x="1647.1282" y="984.0254">For each EnrichedCity?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="27.9512" x="1607.177" y="977.5479">Done</text><line style="stroke:#000000;stroke-width:1.5;" x1="1362.2275" x2="1362.2275" y1="49.7852" y2="2101.1953"/><line style="stroke:#000000;stroke-width:1.5;" x1="2301.6865" x2="2301.6865" y1="49.7852" y2="2101.1953"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="95.9844" y2="115.9844"/><polygon fill="#181818" points="147.0117,105.9844,155.0117,105.9844,151.0117,115.9844" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="255.9717" y2="284.4053"/><polygon fill="#181818" points="147.0117,274.4053,155.0117,274.4053,151.0117,284.4053" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="197.3613" y2="221.8389"/><polygon fill="#181818" points="147.0117,211.8389,155.0117,211.8389,151.0117,221.8389" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="219.051" x2="246.5771" y1="185.3613" y2="185.3613"/><polygon fill="#181818" points="242.5771,254.4053,250.5771,254.4053,246.5771,264.4053" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="246.5771" x2="246.5771" y1="185.3613" y2="328.4053"/><line style="stroke:#181818;stroke-width:1;" x1="246.5771" x2="151.0117" y1="328.4053" y2="328.4053"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="328.4053" y2="348.4053"/><polygon fill="#181818" points="147.0117,338.4053,155.0117,338.4053,151.0117,348.4053" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="150.1172" y2="173.3613"/><polygon fill="#181818" points="147.0117,163.3613,155.0117,163.3613,151.0117,173.3613" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="382.5381" y2="402.5381"/><polygon fill="#181818" points="147.0117,392.5381,155.0117,392.5381,151.0117,402.5381" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="436.6709" y2="456.6709"/><polygon fill="#181818" points="147.0117,446.6709,155.0117,446.6709,151.0117,456.6709" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="2005.0625" y2="2025.0625"/><polygon fill="#181818" points="147.0117,2015.0625,155.0117,2015.0625,151.0117,2025.0625" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="2059.1953" y2="2079.1953"/><polygon fill="#181818" points="147.0117,2069.1953,155.0117,2069.1953,151.0117,2079.1953" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="681.2305" x2="681.2305" y1="544.9365" y2="564.9365"/><polygon fill="#181818" points="677.2305,554.9365,685.2305,554.9365,681.2305,564.9365" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1205.9268" y1="709.3369" y2="729.3369"/><polygon fill="#181818" points="1201.9268,719.3369,1209.9268,719.3369,1205.9268,729.3369" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1205.9268" y1="763.4697" y2="783.4697"/><polygon fill="#181818" points="1201.9268,773.4697,1209.9268,773.4697,1205.9268,783.4697" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1205.9268" y1="817.6025" y2="837.6025"/><polygon fill="#181818" points="1201.9268,827.6025,1209.9268,827.6025,1205.9268,837.6025" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1205.9268" y1="871.7354" y2="891.7354"/><polygon fill="#181818" points="1201.9268,881.7354,1209.9268,881.7354,1205.9268,891.7354" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1205.9268" y1="643.0693" y2="675.2041"/><polygon fill="#181818" points="1201.9268,665.2041,1209.9268,665.2041,1205.9268,675.2041" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1205.9268" y1="925.8682" y2="935.8682"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1343.2275" y1="935.8682" y2="935.8682"/><polygon fill="#181818" points="1339.2275,792.0586,1343.2275,782.0586,1347.2275,792.0586" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1343.2275" x2="1343.2275" y1="631.0693" y2="935.8682"/><line style="stroke:#181818;stroke-width:1;" x1="1343.2275" x2="1291.5349" y1="631.0693" y2="631.0693"/><polygon fill="#181818" points="1301.5349,627.0693,1291.5349,631.0693,1301.5349,635.0693" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1120.3186" x2="1068.626" y1="631.0693" y2="631.0693"/><polygon fill="#181818" points="1064.626,786.8086,1072.626,786.8086,1068.626,796.8086" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1068.626" x2="1068.626" y1="631.0693" y2="952.8682"/><line style="stroke:#181818;stroke-width:1;" x1="1068.626" x2="1707.1555" y1="952.8682" y2="952.8682"/><line style="stroke:#181818;stroke-width:1;" x1="1707.1555" x2="1707.1555" y1="952.8682" y2="967.8682"/><polygon fill="#181818" points="1703.1555,957.8682,1711.1555,957.8682,1707.1555,967.8682" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1519.8721" x2="1519.8721" y1="1102.1357" y2="1122.1357"/><polygon fill="#181818" points="1515.8721,1112.1357,1523.8721,1112.1357,1519.8721,1122.1357" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1519.8721" x2="1519.8721" y1="1156.2686" y2="1176.2686"/><polygon fill="#181818" points="1515.8721,1166.2686,1523.8721,1166.2686,1519.8721,1176.2686" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1519.8721" x2="1519.8721" y1="1210.4014" y2="1230.4014"/><polygon fill="#181818" points="1515.8721,1220.4014,1523.8721,1220.4014,1519.8721,1230.4014" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1102.1357" y2="1122.1357"/><polygon fill="#181818" points="1890.439,1112.1357,1898.439,1112.1357,1894.439,1122.1357" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1270.6455" y2="1293.8896"/><polygon fill="#181818" points="1890.439,1283.8896,1898.439,1283.8896,1894.439,1293.8896" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1765.8896" x2="1765.8896" y1="1416.1553" y2="1696.6641"/><line style="stroke:#181818;stroke-width:1;" x1="1765.8896" x2="1882.439" y1="1696.6641" y2="1696.6641"/><polygon fill="#181818" points="1872.439,1692.6641,1882.439,1696.6641,1872.439,1700.6641" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2022.9883" x2="2022.9883" y1="1406.0225" y2="1430.5"/><polygon fill="#181818" points="2018.9883,1420.5,2026.9883,1420.5,2022.9883,1430.5" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2108.7522" x2="2133.7236" y1="1394.0225" y2="1394.0225"/><polygon fill="#181818" points="2129.7236,1437.5664,2137.7236,1437.5664,2133.7236,1447.5664" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2133.7236" x2="2133.7236" y1="1394.0225" y2="1500.3984"/><line style="stroke:#181818;stroke-width:1;" x1="2133.7236" x2="2034.9883" y1="1500.3984" y2="1500.3984"/><polygon fill="#181818" points="2044.9883,1496.3984,2034.9883,1500.3984,2044.9883,1504.3984" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2022.9883" x2="2022.9883" y1="1464.6328" y2="1488.3984"/><polygon fill="#181818" points="2018.9883,1478.3984,2026.9883,1478.3984,2022.9883,1488.3984" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2022.9883" x2="2022.9883" y1="1512.3984" y2="1532.3984"/><polygon fill="#181818" points="2018.9883,1522.3984,2026.9883,1522.3984,2022.9883,1532.3984" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2022.9883" x2="2022.9883" y1="1566.5313" y2="1586.5313"/><polygon fill="#181818" points="2018.9883,1576.5313,2026.9883,1576.5313,2022.9883,1586.5313" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1845.9666" x2="1765.8896" y1="1360.0225" y2="1360.0225"/><line style="stroke:#181818;stroke-width:1;" x1="1765.8896" x2="1765.8896" y1="1360.0225" y2="1382.0225"/><polygon fill="#181818" points="1761.8896,1372.0225,1769.8896,1372.0225,1765.8896,1382.0225" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1942.9114" x2="2022.9883" y1="1360.0225" y2="1360.0225"/><line style="stroke:#181818;stroke-width:1;" x1="2022.9883" x2="2022.9883" y1="1360.0225" y2="1382.0225"/><polygon fill="#181818" points="2018.9883,1372.0225,2026.9883,1372.0225,2022.9883,1382.0225" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2022.9883" x2="2022.9883" y1="1620.6641" y2="1625.6641"/><line style="stroke:#181818;stroke-width:1;" x1="2022.9883" x2="1894.439" y1="1625.6641" y2="1625.6641"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1625.6641" y2="1640.6641"/><polygon fill="#181818" points="1890.439,1630.6641,1898.439,1630.6641,1894.439,1640.6641" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1328.0225" y2="1348.0225"/><polygon fill="#181818" points="1890.439,1338.0225,1898.439,1338.0225,1894.439,1348.0225" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1200.2686" y2="1236.5127"/><polygon fill="#181818" points="1890.439,1226.5127,1898.439,1226.5127,1894.439,1236.5127" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1946.0884" x2="2264.6865" y1="1652.6641" y2="1652.6641"/><polygon fill="#181818" points="2260.6865,1440.3223,2264.6865,1430.3223,2268.6865,1440.3223" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2264.6865" x2="2264.6865" y1="1188.2686" y2="1652.6641"/><line style="stroke:#181818;stroke-width:1;" x1="2264.6865" x2="1906.439" y1="1188.2686" y2="1188.2686"/><polygon fill="#181818" points="1916.439,1184.2686,1906.439,1188.2686,1916.439,1192.2686" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1664.6641" y2="1684.6641"/><polygon fill="#181818" points="1890.439,1674.6641,1898.439,1674.6641,1894.439,1684.6641" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1156.2686" y2="1176.2686"/><polygon fill="#181818" points="1890.439,1166.2686,1898.439,1166.2686,1894.439,1176.2686" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1982.6145" x2="1992.6145" y1="1740.6641" y2="1740.6641"/><line style="stroke:#181818;stroke-width:1;" x1="1992.6145" x2="1992.6145" y1="1740.6641" y2="1772.6641"/><polygon fill="#181818" points="1988.6145,1762.6641,1996.6145,1762.6641,1992.6145,1772.6641" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1796.2634" x2="1796.2634" y1="1860.9297" y2="1882.9297"/><line style="stroke:#181818;stroke-width:1;" x1="1796.2634" x2="1882.439" y1="1882.9297" y2="1882.9297"/><polygon fill="#181818" points="1872.439,1878.9297,1882.439,1882.9297,1872.439,1886.9297" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1992.6145" x2="1992.6145" y1="1806.7969" y2="1882.9297"/><line style="stroke:#181818;stroke-width:1;" x1="1992.6145" x2="1906.439" y1="1882.9297" y2="1882.9297"/><polygon fill="#181818" points="1916.439,1878.9297,1906.439,1882.9297,1916.439,1886.9297" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1708.6641" y2="1728.6641"/><polygon fill="#181818" points="1890.439,1718.6641,1898.439,1718.6641,1894.439,1728.6641" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1652.2834" x2="1519.8721" y1="1036.0029" y2="1036.0029"/><line style="stroke:#181818;stroke-width:1;" x1="1519.8721" x2="1519.8721" y1="1036.0029" y2="1068.0029"/><polygon fill="#181818" points="1515.8721,1058.0029,1523.8721,1058.0029,1519.8721,1068.0029" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1762.0276" x2="1894.439" y1="1036.0029" y2="1036.0029"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1036.0029" y2="1068.0029"/><polygon fill="#181818" points="1890.439,1058.0029,1898.439,1058.0029,1894.439,1068.0029" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1519.8721" x2="1519.8721" y1="1264.5342" y2="1916.9297"/><line style="stroke:#181818;stroke-width:1;" x1="1519.8721" x2="1695.1555" y1="1916.9297" y2="1916.9297"/><polygon fill="#181818" points="1685.1555,1912.9297,1695.1555,1916.9297,1685.1555,1920.9297" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1894.439" y1="1894.9297" y2="1916.9297"/><line style="stroke:#181818;stroke-width:1;" x1="1894.439" x2="1719.1555" y1="1916.9297" y2="1916.9297"/><polygon fill="#181818" points="1729.1555,1912.9297,1719.1555,1916.9297,1729.1555,1920.9297" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1707.1555" x2="1707.1555" y1="991.8682" y2="1024.0029"/><polygon fill="#181818" points="1703.1555,1014.0029,1711.1555,1014.0029,1707.1555,1024.0029" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1707.1555" x2="1707.1555" y1="1928.9297" y2="1938.9297"/><line style="stroke:#181818;stroke-width:1;" x1="1707.1555" x2="2282.6865" y1="1938.9297" y2="1938.9297"/><polygon fill="#181818" points="2278.6865,1484.6328,2282.6865,1474.6328,2286.6865,1484.6328" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="2282.6865" x2="2282.6865" y1="979.8682" y2="1938.9297"/><line style="stroke:#181818;stroke-width:1;" x1="2282.6865" x2="1779.1829" y1="979.8682" y2="979.8682"/><polygon fill="#181818" points="1789.1829,975.8682,1779.1829,979.8682,1789.1829,983.8682" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1635.1282" x2="1381.2275" y1="979.8682" y2="979.8682"/><polygon fill="#181818" points="1377.2275,1479.3828,1385.2275,1479.3828,1381.2275,1489.3828" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1381.2275" x2="1381.2275" y1="979.8682" y2="1955.9297"/><line style="stroke:#181818;stroke-width:1;" x1="1381.2275" x2="151.0117" y1="1955.9297" y2="1955.9297"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="1955.9297" y2="1970.9297"/><polygon fill="#181818" points="147.0117,1960.9297,155.0117,1960.9297,151.0117,1970.9297" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="151.0117" y1="490.8037" y2="495.8037"/><line style="stroke:#181818;stroke-width:1;" x1="151.0117" x2="681.2305" y1="495.8037" y2="495.8037"/><line style="stroke:#181818;stroke-width:1;" x1="681.2305" x2="681.2305" y1="495.8037" y2="510.8037"/><polygon fill="#181818" points="677.2305,500.8037,685.2305,500.8037,681.2305,510.8037" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="681.2305" x2="681.2305" y1="599.0693" y2="604.0693"/><line style="stroke:#181818;stroke-width:1;" x1="681.2305" x2="1205.9268" y1="604.0693" y2="604.0693"/><line style="stroke:#181818;stroke-width:1;" x1="1205.9268" x2="1205.9268" y1="604.0693" y2="619.0693"/><polygon fill="#181818" points="1201.9268,609.0693,1209.9268,609.0693,1205.9268,619.0693" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="240.1196" x2="240.1196" y1="1806.7969" y2="1811.7969"/><line style="stroke:#181818;stroke-width:1;" x1="240.1196" x2="1796.2634" y1="1811.7969" y2="1811.7969"/><line style="stroke:#181818;stroke-width:1;" x1="1796.2634" x2="1796.2634" y1="1811.7969" y2="1826.7969"/><polygon fill="#181818" points="1792.2634,1816.7969,1800.2634,1816.7969,1796.2634,1826.7969" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="1806.2634" x2="240.1196" y1="1740.6641" y2="1740.6641"/><line style="stroke:#181818;stroke-width:1;" x1="240.1196" x2="240.1196" y1="1740.6641" y2="1772.6641"/><polygon fill="#181818" points="236.1196,1762.6641,244.1196,1762.6641,240.1196,1772.6641" style="stroke:#181818;stroke-width:1;"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="110.1357" x="221.835" y="67.1875">Orchestrator</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="99.4131" x="744.5093" y="67.1875">DataLoader</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="98.6221" x="1156.6157" y="67.1875">Enrichment</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacing" textLength="86.6953" x="1788.6094" y="67.1875">Generator</text><?plantuml-src ZLNRRkD637tNLn0kKCXeDaYHjYZiJGlVudNWN61Zjoy5Yeb4onEFPeGPAecAV7n9NMpdKhH-i2tn32-7XvomqxPGNkKGg3B8trudLEOc2dlBA27zgAaQgsINULVQTEACy_3TvUnoDfbzX7G-HT-YHh-UdPt_4aMaYGECDVfCUK8BTxf0eot2f_r1c6gLYQTu_QHpeoo6VXIztFfaYvoQ8kTVea1yFXhSAHyG9YxFbKq_BSNHo6TbZfR2CBAE4BpEjXG1J97Gvum8aBiK8SvTiiCK7fjdqsSCEu7byXg2oWlEAeEw93aOJYDaetYC8hs1UEGHL1SA7fNHwUzze2tN55idpWPBby7CUwx_Uwuf54PLy3Me38Ti3UIA20rd7rTI87lNcoWQBAmcpTx-HfWRTwyCh4aHSZM3YRDSVvaGrr8m7crImS8-OCAKG3nsBj3fTD4VYXScoB8ZEcPxgaZDqMBDuP0vbHTBfxXFBz7WAZZRF0m6yhjqYIBDCUEUwVwUFZ2e9n7MGX52MG0v-FaCzkXZsWUmOafTRgg6KkP-urqEHiAap9zN5QSnioouhJ3v4ZrjDRkDBxaYLCcsFPVk_JF9Ea2ymbnfAotQvrPpFaVga4mNuJF5tNDVQ1zS8h5NVkyL4xdXC2lCs0hnXBLtmbegBVdgty2zUqGFsiBd5lXRxx-HxBY5hPbuXAPUJCK0-_pW1sXJvk3StfQ9gRCe-jytxZr7n_xUyOEj4H8M5jOiYNxtxk2QrTyfzvfdOcyHAESyKIOfZIYf6o4TI2VmHONji86iqR08OPIA5lKZdi0DitDIpzCKG-9r8HMsw76fJGfZZq_egnM6qb3dfwQdJG3J5i8aiiPy3MHvCRIPcwLHkNgRxPr77bg4THK8ypg3hu4RSSUwA-HuZHeH6mjgkitM2_YniV1fL5J_PTYgj3KzXiTiWvu7ZiCQ2NkQ54L_sEAE1JygU7EmpkV8Emb-WYjj7vG88bT4t8y_hQGq7zzSmjNwzWRcl61ovQCkv3VP949sRRqjgIW9ukvjouYCQd_OdP5sBa9puDkhHLGr_MvTDyko9lC3ykLpxr7jsgU6usQL7U8q--pY0dhQ9av6iqsrzs5CZhgm2NjbNxbw_elS3crW97Tpwqnw2Fq-NBCHztwOMDd0JG8faj8coEvf6bkFdApkn7al8kpKTiX1zWkyQNo7QRVlGG7GpbY7_tm1v-rerGL67I5hqaRaKTy0e3QYfdDGpR7mKIVUt6HjYd9P_A6yZ6oNrF78jwZrJXSWOzvWtfBs_mRecDosyFVhvdMIabuZbX3tNs_uQPaN0R8kP2F3ZKQJrkq9HMfS5WrcpveEj_swJ18COLCQlXhYCtPPtuV_0000?></g></svg>
|