diff --git a/Documentation/User Manual/5-input-and-output-files/VDRI.md b/Documentation/User Manual/5-input-and-output-files/VDRI.md
index 049d27e933a688a4d7ce5a363d65d901882ed718..a243e8afd508925915d1ac96a41799ef5b712c45 100644
--- a/Documentation/User Manual/5-input-and-output-files/VDRI.md	
+++ b/Documentation/User Manual/5-input-and-output-files/VDRI.md	
@@ -91,6 +91,12 @@ Header: **\<t>, \<v>***\[, \<grad>]\[, \<Padd>]\[, \<vair\_res>, \<vair\_beta>\]
 This driving cycle defines the actual measured speed of the vehicle, the gear, and the engine speed over time.
 It overrides the shift strategy of Vecto and also directly sets the engine speed.
 
+<div class="vecto2">
+It is necessary to set the option 'Use gears/rpm\'s from driving cycle in the **Options** tab.
+
+![](pics/MeasuredSpeedSettings.png)
+</div>
+
 Header: **\<t>, \<v>, \<n>, \<gear>***\[, \<grad>]\[, \<Padd>]\[, \<vair\_res>, \<vair\_beta>]\[, \<Aux\_ID>\]*
 
 |  Identifier |  Unit  |                                                                                                                                              Description                                                                                                                                               |
diff --git a/Documentation/User Manual/help.html b/Documentation/User Manual/help.html
index 308a7af2c275f0876350a55cc820b7ed3b64ed39..6de5236ab4610432082a6b5a0a29abfd85137a31 100644
--- a/Documentation/User Manual/help.html	
+++ b/Documentation/User Manual/help.html	
@@ -2647,7 +2647,7 @@ Example: “Gears\Gear1.vtlm” points to the “Gears” subdirectory of the Ge
 <h2>Powertrain and Components Structure</h2>
 <p>The powertrain in Vecto V3 consists of the following components which are connected in this order:</p>
 <div class="figure">
-<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICB3aWR0aD0iMzY2LjMxMDMzbW0iCiAgIGhlaWdodD0iMTkuMDkyMzMzbW0iCiAgIHZpZXdCb3g9IjAgMCAxMjk3Ljk1IDY3LjY0OTk5OCIKICAgaWQ9InN2ZzIiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45MSByMTM3MjUiCiAgIHNvZGlwb2RpOmRvY25hbWU9InBvd2VydHJhaW4uc3ZnIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDMzNjgiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzMzcwIgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzM4MCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDMzODIiCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzMzk4IgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzQwMCIKICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDM0MTYiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNDE4IgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzQzNCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM0MzYiCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNDUyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzQ1NCIKICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDM0NzAiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNDcyIgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzQ4OCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM0OTAiCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNTAwIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzUwMiIKICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDM1MTIiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNTE0IgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzUzMCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM1MzIiCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNTQyIgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzU0NCIKICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDM1NTQiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNTU2IgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzU2NiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM1NjgiCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNTg0IgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzU4NiIKICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDM2MDIiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNjA0IgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzYxNCIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM2MTYiCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNjI2IgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzYyOCIKICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDM2MzgiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNjQwIgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICAgIDxjbGlwUGF0aAogICAgICAgaWQ9ImNsaXBQYXRoMzY1NiIKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM2NTgiCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+CiAgICA8L2NsaXBQYXRoPgogICAgPGNsaXBQYXRoCiAgICAgICBpZD0iY2xpcFBhdGgzNjc0IgogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzY3NiIKICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGgKICAgICAgIGlkPSJjbGlwUGF0aDM2OTIiCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNjk0IgogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPgogICAgPC9jbGlwUGF0aD4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjAuMzUiCiAgICAgaW5rc2NhcGU6Y3g9IjUyOS41MzIxNSIKICAgICBpbmtzY2FwZTpjeT0iLTExMC43NDY0MyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBmaXQtbWFyZ2luLXRvcD0iMCIKICAgICBmaXQtbWFyZ2luLWxlZnQ9IjAiCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCIKICAgICBmaXQtbWFyZ2luLWJvdHRvbT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU0LjUzMjE1LC0zNTMuOTY1NzcpIj4KICAgIDxwYXRoCiAgICAgICBkPSJtIC0xNTMuNTU3MTUsNDIwLjY0MDc3IDc3Ljg1LDAgMCwtNjMuOSAtNzcuODUsMCAwLDYzLjkgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDMzNjAiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gLTE1My41NTcxNSw0MjAuNjQwNzcgNzcuODUsMCAwLC02My45IC03Ny44NSwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMzM2MiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczMzY0IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImczMzY2IgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzMzY4KSI+CiAgICAgICAgPHRleHQKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw1OC43NTIsMTczLjMpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzM3MiI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNy45MTg1NiAxMi40NDE2IDE1LjQ2MTI4IDIxLjMxOTIwMSAyNC4zMjU5MiAzMS4xMjk5MTkgMzcuMjcyOTYxIgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zMzc0Ij5Ecml2aW5nPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBpZD0iZzMzNzYiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPgogICAgICA8ZwogICAgICAgICBpZD0iZzMzNzgiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDMzODApIj4KICAgICAgICA8dGV4dAogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDYzLjU1MiwxNTkuMjYpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzM4NCI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNi45NDY1NTk5IDEyLjcwMDggMTguMTgyODggMjEuMjAyNTYiCiAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgICAgIGlkPSJ0c3BhbjMzODYiPkN5Y2xlPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBkPSJtIC03Mi40ODIxNSwzODAuNjkwNzcgOC4yNSwwIDAsLTUuMjc1IDguMjUsMTMuMiAtOC4yNSwxMy4yIDAsLTUuMjc1IC04LjI1LDAgMCwtMTUuODUgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDMzODgiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gLTUyLjYwNzE1LDQyMC42NDA3NyA3Ny44NSwwIDAsLTYzLjkgLTc3Ljg1LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzMzkwIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIC01Mi42MDcxNSw0MjAuNjQwNzcgNzcuODUsMCAwLC02My45IC03Ny44NSwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMzM5MiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczMzk0IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImczMzk2IgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzMzk4KSI+CiAgICAgICAgPHRleHQKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwxNDIuMDEsMTY2LjMpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzQwMiI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNy45MTg1NiAxMi40NDE2IDE1LjQ2MTI4IDIxLjIxNTUyMSAyNy42Njk2IgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zNDA0Ij5Ecml2ZXI8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMjguNDY3ODUsMzgwLjY5MDc3IDguMjUsMCAwLC01LjI3NSA4LjI1LDEzLjIgLTguMjUsMTMuMiAwLC01LjI3NSAtOC4yNSwwIDAsLTE1Ljg1IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNDA2IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDQ4LjE5Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNDA4IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDQ4LjE5Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InBhdGgzNDEwIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzM0MTIiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPgogICAgICA8ZwogICAgICAgICBpZD0iZzM0MTQiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM0MTYpIj4KICAgICAgICA8dGV4dAogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDIxOS44OSwxNjYuMykiCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgaWQ9InRleHQzNDIwIj4KICAgICAgICAgIDx0c3BhbgogICAgICAgICAgICAgeD0iMCA2LjcyNjI0MDIgMTMuMTgwMzIgMjAuMDM2MTYgMjMuMDE2OTYgMjguNTM3OTIgMzEuNTE4NzIxIgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zNDIyIj5WZWhpY2xlPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDIzMC4yMTc4NSwzODAuNjkwNzcgOC4zMjUsMCAwLC01LjI3NSA4LjMyNSwxMy4yIC04LjMyNSwxMy4yIDAsLTUuMjc1IC04LjMyNSwwIDAsLTE1Ljg1IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNDI0IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE0OS4xNDI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJwYXRoMzQyNiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAxNDkuMTQyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDM0MjgiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPGcKICAgICAgIGlkPSJnMzQzMCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzQzMiIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzQzNCkiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMzAwLjAyLDE2Ni4zKSIKICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBpZD0idGV4dDM0MzgiPgogICAgICAgICAgPHRzcGFuCiAgICAgICAgICAgICB4PSIwIDExLjUzNDQgMTguMzM4NCAyNC44MzEzNiAzMS4yODU0NCAzNC4yOTIxNiIKICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICAgICAgaWQ9InRzcGFuMzQ0MCI+V2hlZWxzPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDMzMS4xNjc4NSwzODAuNjkwNzcgOC4yNSwwIDAsLTUuMjc1IDguMjUsMTMuMiAtOC4yNSwxMy4yIDAsLTUuMjc1IC04LjI1LDAgMCwtMTUuODUgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDM0NDIiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMjUwLjA5Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNDQ0IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDI1MC4wOTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMzQ0NiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczNDQ4IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImczNDUwIgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNDUyKSI+CiAgICAgICAgPHRleHQKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwzODMuMDYsMTY2LjMpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzQ1NiI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNy4wNTAyNCAxMS40MDQ4IDE3LjYxMjY0IDIzLjE1OTUxOSAyOS42MTM2IgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zNDU4Ij5CcmFrZXM8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIGQ9Im0gNTMzLjA2Nzg1LDM4MC42OTA3NyA4LjI1LDAgMCwtNS4yNzUgOC4yNSwxMy4yIC04LjI1LDEzLjIgMCwtNS4yNzUgLTguMjUsMCAwLC0xNS44NSB6IgogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJwYXRoMzQ2MCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSAzNTEuMDQyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDM0NjIiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzUxLjA0Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InBhdGgzNDY0IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzM0NjYiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPgogICAgICA8ZwogICAgICAgICBpZD0iZzM0NjgiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM0NzApIj4KICAgICAgICA8dGV4dAogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDQ1Ny4yLDE2Ni4zKSIKICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBpZD0idGV4dDM0NzQiPgogICAgICAgICAgPHRzcGFuCiAgICAgICAgICAgICB4PSIwIDcuNDM5MDQwMiAxMy4wNTA3MiAxNi4wNzA0IDIyLjUyNDQ4MSAzMC43MDIyNCAzNy4xNTYzMTkgNDMuNDE2IgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zNDc2Ij5BeGxlR2VhcjwvdHNwYW4+CiAgICAgICAgPC90ZXh0PgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cGF0aAogICAgICAgZD0ibSA2MzQuMDE3ODUsMzgwLjY5MDc3IDguMjUsMCAwLC01LjI3NSA4LjI1LDEzLjIgLTguMjUsMTMuMiAwLC01LjI3NSAtOC4yNSwwIDAsLTE1Ljg1IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNDc4IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDQ1MS45OTI4NSw0MjAuNjQwNzcgNzcuODUsMCAwLC02My45IC03Ny44NSwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJwYXRoMzQ4MCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA0NTEuOTkyODUsNDIwLjY0MDc3IDc3Ljg1LDAgMCwtNjMuOSAtNzcuODUsMCAwLDYzLjkgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDM0ODIiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPGcKICAgICAgIGlkPSJnMzQ4NCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzQ4NiIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzQ4OCkiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNTM5LjM4LDE3Ni4wNCkiCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgaWQ9InRleHQzNDkyIj4KICAgICAgICAgIDx0c3BhbgogICAgICAgICAgICAgeD0iMCAzLjkyNjg3OTkgMTEuNDMwNzIgMTguMjM0NzIgMjQuMzM4ODgxIDMxLjE4MTc2MSAzNC4xNjI1NiA0MC40MDkyNzkiCiAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgICAgIGlkPSJ0c3BhbjM0OTQiPihBbmd1bGFyPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBpZD0iZzM0OTYiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPgogICAgICA8ZwogICAgICAgICBpZD0iZzM0OTgiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1MDApIj4KICAgICAgICA8dGV4dAogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDU0Ny4yLDE1Ni40OCkiCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgaWQ9InRleHQzNTA0Ij4KICAgICAgICAgIDx0c3BhbgogICAgICAgICAgICAgeD0iMCA4LjE3Nzc2MDEgMTQuNjMxODQgMjAuODY1NjAxIgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zNTA2Ij5HZWFyPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBpZD0iZzM1MDgiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPgogICAgICA8ZwogICAgICAgICBpZD0iZzM1MTAiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1MTIpIj4KICAgICAgICA8dGV4dAogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDU3Mi42NCwxNTYuNDgpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzUxNiI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgaWQ9InRzcGFuMzUxOCI+KTwvdHNwYW4+CiAgICAgICAgPC90ZXh0PgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cGF0aAogICAgICAgZD0ibSA0MzIuMTE3ODUsMzgwLjY5MDc3IDguMjUsMCAwLC01LjI3NSA4LjI1LDEzLjIgLTguMjUsMTMuMiAwLC01LjI3NSAtOC4yNSwwIDAsLTE1Ljg1IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNTIwIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDU1Mi43OTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJwYXRoMzUyMiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA1NTIuNzkyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDM1MjQiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPGcKICAgICAgIGlkPSJnMzUyNiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzUyOCIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzUzMCkiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjE3Ljc0LDE3My4zKSIKICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBpZD0idGV4dDM1MzQiPgogICAgICAgICAgPHRzcGFuCiAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIGlkPSJ0c3BhbjM1MzYiPig8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcKICAgICAgIGlkPSJnMzUzOCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzU0MCIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzU0MikiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjIxLjcsMTczLjMpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzU0NiI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNi44NDI4Nzk4IDEzLjIwNjI0IDE3LjQwNTI3OSAyMy42MTMxMTkgMjguMDg0MzIgMzQuODg4MzIxIDQxLjM5NDI0MSIKICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICAgICAgaWQ9InRzcGFuMzU0OCI+UmV0YXJkZXI8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcKICAgICAgIGlkPSJnMzU1MCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzU1MiIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzU1NCkiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjE5LjksMTU5LjI2KSIKICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBpZD0idGV4dDM1NTgiPgogICAgICAgICAgPHRzcGFuCiAgICAgICAgICAgICB4PSIwIDYuODAzOTk5OSAxMS4zOTE4NCAxNC4zNzI2NCAyNC43Mjc2OCAzMC45MzU1MiAzNS42MTQwNzkiCiAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgICAgIGlkPSJ0c3BhbjM1NjAiPnByaW1hcnk8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcKICAgICAgIGlkPSJnMzU2MiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzU2NCIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzU2NikiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjYxLjQyLDE1OS4yNikiCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgaWQ9InRleHQzNTcwIj4KICAgICAgICAgIDx0c3BhbgogICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICBpZD0idHNwYW4zNTcyIj4pPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDg0Mi44MTc4NSwzODAuNjkwNzcgOC4zMjUsMCAwLC01LjI3NSA4LjMyNSwxMy4yIC04LjMyNSwxMy4yIDAsLTUuMjc1IC04LjMyNSwwIDAsLTE1Ljg1IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNTc0IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDY1My43NDI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJwYXRoMzU3NiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA2NTMuNzQyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDM1NzgiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPGcKICAgICAgIGlkPSJnMzU4MCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzU4MiIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzU4NCkiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNzAxLjExLDE2Ni4zKSIKICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBpZD0idGV4dDM1ODgiPgogICAgICAgICAgPHRzcGFuCiAgICAgICAgICAgICB4PSIwIDguMTc3NzYwMSAxNC42MzE4NCAyMC44NjU2MDEgMjUuMzg4NjM5IDMyLjI1NzQzOSAzOC44NTQwOCIKICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICAgICAgaWQ9InRzcGFuMzU5MCI+R2VhcmJveDwvdHNwYW4+CiAgICAgICAgPC90ZXh0PgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cGF0aAogICAgICAgZD0ibSA5NDMuNzY3ODUsMzgwLjY5MDc3IDguMjUsMCAwLC01LjI3NSA4LjI1LDEzLjIgLTguMjUsMTMuMiAwLC01LjI3NSAtOC4yNSwwIDAsLTE1Ljg1IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNTkyIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDc1NC42OTI4NSw0MjAuNjQwNzcgODUuMDUsMCAwLC02My45IC04NS4wNSwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIKICAgICAgIGlkPSJwYXRoMzU5NCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8cGF0aAogICAgICAgZD0ibSA3NTQuNjkyODUsNDIwLjY0MDc3IDg1LjA1LDAgMCwtNjMuOSAtODUuMDUsMCAwLDYzLjkgeiIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDM1OTYiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPGcKICAgICAgIGlkPSJnMzU5OCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzYwMCIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYwMikiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNzgyLjAyLDE3My4zKSIKICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBpZD0idGV4dDM2MDYiPgogICAgICAgICAgPHRzcGFuCiAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIGlkPSJ0c3BhbjM2MDgiPig8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcKICAgICAgIGlkPSJnMzYxMCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzYxMiIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYxNCkiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNzg1Ljk4LDE3My4zKSIKICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBpZD0idGV4dDM2MTgiPgogICAgICAgICAgPHRzcGFuCiAgICAgICAgICAgICB4PSIwIDYuODQyODc5OCAxMy4yMDYyNCAxNy40MDUyNzkgMjMuNjEzMTE5IDI4LjA4NDMyIDM0Ljg4ODMyMSA0MS4zOTQyNDEiCiAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgICAgIGlkPSJ0c3BhbjM2MjAiPlJldGFyZGVyPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnCiAgICAgICBpZD0iZzM2MjIiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPgogICAgICA8ZwogICAgICAgICBpZD0iZzM2MjQiCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM2MjYpIj4KICAgICAgICA8dGV4dAogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDc3Ny45NCwxNTkuMjYpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzYzMCI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNS4wNjczNTk5IDExLjUyMTQ0IDE2LjkyNTc2IDIzLjc1NTY4IDMwLjU5ODU2IDM3LjQwMjU2MSA0My42NjIyMzkgNDguMzI3ODM5IgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zNjMyIj5zZWNvbmRhcnk8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcKICAgICAgIGlkPSJnMzYzNCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+CiAgICAgIDxnCiAgICAgICAgIGlkPSJnMzYzNiIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYzOCkiPgogICAgICAgIDx0ZXh0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsODMyLjE4LDE1OS4yNikiCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgaWQ9InRleHQzNjQyIj4KICAgICAgICAgIDx0c3BhbgogICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICBpZD0idHNwYW4zNjQ0Ij4pPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDEyOS40MTc4NSwzODAuNjkwNzcgOC4yNSwwIDAsLTUuMjc1IDguMjUsMTMuMiAtOC4yNSwxMy4yIDAsLTUuMjc1IC04LjI1LDAgMCwtMTUuODUgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDM2NDYiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gODYyLjY5Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNjQ4IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDg2Mi42OTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMzY1MCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczNjUyIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImczNjU0IgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjU2KSI+CiAgICAgICAgPHRleHQKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw4NzMuOTEsMTY2LjMpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzY2MCI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNi45NDY1NTk5IDkuOTI3MzU5NiAxNi43NzAyNDEgMjAuOTY5MjggMjYuNDUxMzYxIgogICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiCiAgICAgICAgICAgICBpZD0idHNwYW4zNjYyIj5DbHV0Y2g8L3RzcGFuPgogICAgICAgIDwvdGV4dD4KICAgICAgPC9nPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIGQ9Im0gNzM0LjgxNzg1LDM4MC42OTA3NyA4LjMyNSwwIDAsLTUuMjc1IDguMzI1LDEzLjIgLTguMzI1LDEzLjIgMCwtNS4yNzUgLTguMzI1LDAgMCwtMTUuODUgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDM2NjQiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gOTYzLjY0Mjg1LDQyMC42NDA3NyA3OC4wMDAwNSwwIDAsLTYzLjkgLTc4LjAwMDA1LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNjY2IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDk2My42NDI4NSw0MjAuNjQwNzcgNzguMDAwMDUsMCAwLC02My45IC03OC4wMDAwNSwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMzY2OCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczNjcwIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImczNjcyIgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjc0KSI+CiAgICAgICAgPHRleHQKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw5NTMuMjMsMTY2LjMpIgogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmktQm9sZDt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGlkPSJ0ZXh0MzY3OCI+CiAgICAgICAgICA8dHNwYW4KICAgICAgICAgICAgIHg9IjAgNi4zMjQ0ODAxIDEzLjI4NCAxOS40MjcwNCAyMi42NjcwNCAyOS42MjY1NiIKICAgICAgICAgICAgIHk9IjAiCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIgogICAgICAgICAgICAgaWQ9InRzcGFuMzY4MCI+RW5naW5lPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDEwNjEuMjE3OSwzODAuNjkwNzcgLTguMjUsMCAwLC01LjI3NSAtOC4yNSwxMy4yIDguMjUsMTMuMiAwLC01LjI3NSA4LjI1LDAgMCwtMTUuODUgeiIKICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiCiAgICAgICBpZD0icGF0aDM2ODIiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTA2NC41OTI5LDQxOC44NDA3NyA3Ny44NSwwIDAsLTYzLjkgLTc3Ljg1LDAgMCw2My45IHoiCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIgogICAgICAgaWQ9InBhdGgzNjg0IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDEwNjQuNTkyOSw0MTguODQwNzcgNzcuODUsMCAwLC02My45IC03Ny44NSwwIDAsNjMuOSB6IgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMzY4NiIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczNjg4IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4KICAgICAgPGcKICAgICAgICAgaWQ9ImczNjkwIgogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjkyKSI+CiAgICAgICAgPHRleHQKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwxMDI0Ljk3LDE2Ny43NCkiCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgaWQ9InRleHQzNjk2Ij4KICAgICAgICAgIDx0c3BhbgogICAgICAgICAgICAgeD0iMCA3LjQzOTA0MDIgMTQuMjQzMDQgMTkuOTA2NTYxIDIyLjg4NzM2IDI1Ljg2ODE2IDI4Ljg4Nzg0IDM1LjA5NTY4IDM5LjY3MDU1OSA0Mi42NTEzNiA0OS4xMzEzNTkiCiAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSIKICAgICAgICAgICAgIGlkPSJ0c3BhbjM2OTgiPkF1eGlsaWFyaWVzPC90c3Bhbj4KICAgICAgICA8L3RleHQ+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo=" />
+<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8IS0tIENyZWF0ZWQgd2l0aCBJbmtzY2FwZSAoaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvKSAtLT4NCg0KPHN2Zw0KICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIg0KICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyINCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHdpZHRoPSIzNjYuMzEwMzNtbSINCiAgIGhlaWdodD0iMTkuMDkyMzMzbW0iDQogICB2aWV3Qm94PSIwIDAgMTI5Ny45NSA2Ny42NDk5OTgiDQogICBpZD0ic3ZnMiINCiAgIHZlcnNpb249IjEuMSINCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTEgcjEzNzI1Ig0KICAgc29kaXBvZGk6ZG9jbmFtZT0icG93ZXJ0cmFpbi5zdmciPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczQiPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDMzNjgiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDMzNzAiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoMzM4MCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoMzM4MiINCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGgzMzk4Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGgzNDAwIg0KICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDM0MTYiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDM0MTgiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoMzQzNCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoMzQzNiINCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGgzNDUyIg0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGgzNDU0Ig0KICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDM0NzAiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDM0NzIiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoMzQ4OCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoMzQ5MCINCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGgzNTAwIg0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGgzNTAyIg0KICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDM1MTIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDM1MTQiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoMzUzMCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoMzUzMiINCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGgzNTQyIg0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGgzNTQ0Ig0KICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDM1NTQiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDM1NTYiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoMzU2NiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoMzU2OCINCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGgzNTg0Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGgzNTg2Ig0KICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDM2MDIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDM2MDQiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoMzYxNCINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoMzYxNiINCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGgzNjI2Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGgzNjI4Ig0KICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDM2MzgiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDM2NDAiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogICAgPGNsaXBQYXRoDQogICAgICAgaWQ9ImNsaXBQYXRoMzY1NiINCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+DQogICAgICA8cGF0aA0KICAgICAgICAgc3R5bGU9ImNsaXAtcnVsZTpldmVub2RkIg0KICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICAgIGlkPSJwYXRoMzY1OCINCiAgICAgICAgIGQ9Ik0gMS42ODk2ZS01LDAgMTEzMy44OCwwIGwgMCwyODMuNTYgLTExMzMuODc5OTgzMTA0LDAgMCwtMjgzLjU2IHoiIC8+DQogICAgPC9jbGlwUGF0aD4NCiAgICA8Y2xpcFBhdGgNCiAgICAgICBpZD0iY2xpcFBhdGgzNjc0Ig0KICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCiAgICAgIDxwYXRoDQogICAgICAgICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQiDQogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgICAgaWQ9InBhdGgzNjc2Ig0KICAgICAgICAgZD0iTSAxLjY4OTZlLTUsMCAxMTMzLjg4LDAgbCAwLDI4My41NiAtMTEzMy44Nzk5ODMxMDQsMCAwLC0yODMuNTYgeiIgLz4NCiAgICA8L2NsaXBQYXRoPg0KICAgIDxjbGlwUGF0aA0KICAgICAgIGlkPSJjbGlwUGF0aDM2OTIiDQogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiPg0KICAgICAgPHBhdGgNCiAgICAgICAgIHN0eWxlPSJjbGlwLXJ1bGU6ZXZlbm9kZCINCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgICBpZD0icGF0aDM2OTQiDQogICAgICAgICBkPSJNIDEuNjg5NmUtNSwwIDExMzMuODgsMCBsIDAsMjgzLjU2IC0xMTMzLjg3OTk4MzEwNCwwIDAsLTI4My41NiB6IiAvPg0KICAgIDwvY2xpcFBhdGg+DQogIDwvZGVmcz4NCiAgPHNvZGlwb2RpOm5hbWVkdmlldw0KICAgICBpZD0iYmFzZSINCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIg0KICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiINCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp6b29tPSIwLjM1Ig0KICAgICBpbmtzY2FwZTpjeD0iNTI5LjUzMjE1Ig0KICAgICBpbmtzY2FwZTpjeT0iLTExMC43NDY0MyINCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4Ig0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgZml0LW1hcmdpbi10b3A9IjAiDQogICAgIGZpdC1tYXJnaW4tbGVmdD0iMCINCiAgICAgZml0LW1hcmdpbi1yaWdodD0iMCINCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAxOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiIC8+DQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE3Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI+DQogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4NCiAgICAgIDwvY2M6V29yaz4NCiAgICA8L3JkZjpSREY+DQogIDwvbWV0YWRhdGE+DQogIDxnDQogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIg0KICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIg0KICAgICBpZD0ibGF5ZXIxIg0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNTQuNTMyMTUsLTM1My45NjU3NykiPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSAtMTUzLjU1NzE1LDQyMC42NDA3NyA3Ny44NSwwIDAsLTYzLjkgLTc3Ljg1LDAgMCw2My45IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSINCiAgICAgICBpZD0icGF0aDMzNjAiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gLTE1My41NTcxNSw0MjAuNjQwNzcgNzcuODUsMCAwLC02My45IC03Ny44NSwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InBhdGgzMzYyIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPGcNCiAgICAgICBpZD0iZzMzNjQiDQogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzMzNjYiDQogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzMzY4KSI+DQogICAgICAgIDx0ZXh0DQogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDU4Ljc1MiwxNzMuMykiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDMzNzIiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAgNy45MTg1NiAxMi40NDE2IDE1LjQ2MTI4IDIxLjMxOTIwMSAyNC4zMjU5MiAzMS4xMjk5MTkgMzcuMjcyOTYxIg0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zMzc0Ij5Ecml2aW5nPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzM3NiINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzM3OCINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDMzODApIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjMuNTUyLDE1OS4yNikiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDMzODQiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAgNi45NDY1NTk5IDEyLjcwMDggMTguMTgyODggMjEuMjAyNTYiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIg0KICAgICAgICAgICAgIGlkPSJ0c3BhbjMzODYiPkN5Y2xlPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gLTcyLjQ4MjE1LDM4MC42OTA3NyA4LjI1LDAgMCwtNS4yNzUgOC4yNSwxMy4yIC04LjI1LDEzLjIgMCwtNS4yNzUgLTguMjUsMCAwLC0xNS44NSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9InBhdGgzMzg4Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIC01Mi42MDcxNSw0MjAuNjQwNzcgNzcuODUsMCAwLC02My45IC03Ny44NSwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9InBhdGgzMzkwIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIC01Mi42MDcxNSw0MjAuNjQwNzcgNzcuODUsMCAwLC02My45IC03Ny44NSwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InBhdGgzMzkyIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPGcNCiAgICAgICBpZD0iZzMzOTQiDQogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzMzOTYiDQogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzMzk4KSI+DQogICAgICAgIDx0ZXh0DQogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDE0Mi4wMSwxNjYuMykiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDM0MDIiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAgNy45MTg1NiAxMi40NDE2IDE1LjQ2MTI4IDIxLjIxNTUyMSAyNy42Njk2Ig0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zNDA0Ij5Ecml2ZXI8L3RzcGFuPg0KICAgICAgICA8L3RleHQ+DQogICAgICA8L2c+DQogICAgPC9nPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSAyOC40Njc4NSwzODAuNjkwNzcgOC4yNSwwIDAsLTUuMjc1IDguMjUsMTMuMiAtOC4yNSwxMy4yIDAsLTUuMjc1IC04LjI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzQwNiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA0OC4xOTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9InBhdGgzNDA4Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDQ4LjE5Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBpZD0icGF0aDM0MTAiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzQxMiINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzQxNCINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM0MTYpIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsMjE5Ljg5LDE2Ni4zKSINCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiDQogICAgICAgICAgIGlkPSJ0ZXh0MzQyMCI+DQogICAgICAgICAgPHRzcGFuDQogICAgICAgICAgICAgeD0iMCA2LjcyNjI0MDIgMTMuMTgwMzIgMjAuMDM2MTYgMjMuMDE2OTYgMjguNTM3OTIgMzEuNTE4NzIxIg0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zNDIyIj5WZWhpY2xlPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gMjMwLjIxNzg1LDM4MC42OTA3NyA4LjMyNSwwIDAsLTUuMjc1IDguMzI1LDEzLjIgLTguMzI1LDEzLjIgMCwtNS4yNzUgLTguMzI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzQyNCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSAxNDkuMTQyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzQyNiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSAxNDkuMTQyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJwYXRoMzQyOCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxnDQogICAgICAgaWQ9ImczNDMwIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNDMyIg0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzQzNCkiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwzMDAuMDIsMTY2LjMpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNDM4Ij4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIDExLjUzNDQgMTguMzM4NCAyNC44MzEzNiAzMS4yODU0NCAzNC4yOTIxNiINCiAgICAgICAgICAgICB5PSIwIg0KICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICAgICAgaWQ9InRzcGFuMzQ0MCI+V2hlZWxzPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gMzMxLjE2Nzg1LDM4MC42OTA3NyA4LjI1LDAgMCwtNS4yNzUgOC4yNSwxMy4yIC04LjI1LDEzLjIgMCwtNS4yNzUgLTguMjUsMCAwLC0xNS44NSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9InBhdGgzNDQyIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDI1MC4wOTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9InBhdGgzNDQ0Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDI1MC4wOTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InBhdGgzNDQ2Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPGcNCiAgICAgICBpZD0iZzM0NDgiDQogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzM0NTAiDQogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNDUyKSI+DQogICAgICAgIDx0ZXh0DQogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDM4My4wNiwxNjYuMykiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDM0NTYiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAgNy4wNTAyNCAxMS40MDQ4IDE3LjYxMjY0IDIzLjE1OTUxOSAyOS42MTM2Ig0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zNDU4Ij5CcmFrZXM8L3RzcGFuPg0KICAgICAgICA8L3RleHQ+DQogICAgICA8L2c+DQogICAgPC9nPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA1MzMuMDY3ODUsMzgwLjY5MDc3IDguMjUsMCAwLC01LjI3NSA4LjI1LDEzLjIgLTguMjUsMTMuMiAwLC01LjI3NSAtOC4yNSwwIDAsLTE1Ljg1IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSINCiAgICAgICBpZD0icGF0aDM0NjAiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gMzUxLjA0Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2JkZDdlZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSINCiAgICAgICBpZD0icGF0aDM0NjIiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gMzUxLjA0Mjg1LDQyMC42NDA3NyA3OCwwIDAsLTYzLjkgLTc4LDAgMCw2My45IHoiDQogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzViOWJkNTtzdHJva2Utd2lkdGg6MS45NDk5OTk5MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgICBpZD0icGF0aDM0NjQiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzQ2NiINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzQ2OCINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM0NzApIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNDU3LjIsMTY2LjMpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNDc0Ij4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIDcuNDM5MDQwMiAxMy4wNTA3MiAxNi4wNzA0IDIyLjUyNDQ4MSAzMC43MDIyNCAzNy4xNTYzMTkgNDMuNDE2Ig0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zNDc2Ij5BeGxlR2VhcjwvdHNwYW4+DQogICAgICAgIDwvdGV4dD4NCiAgICAgIDwvZz4NCiAgICA8L2c+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDYzNC4wMTc4NSwzODAuNjkwNzcgOC4yNSwwIDAsLTUuMjc1IDguMjUsMTMuMiAtOC4yNSwxMy4yIDAsLTUuMjc1IC04LjI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzQ3OCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA0NTEuOTkyODUsNDIwLjY0MDc3IDc3Ljg1LDAgMCwtNjMuOSAtNzcuODUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzQ4MCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA0NTEuOTkyODUsNDIwLjY0MDc3IDc3Ljg1LDAgMCwtNjMuOSAtNzcuODUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJwYXRoMzQ4MiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxnDQogICAgICAgaWQ9ImczNDg0Ig0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNDg2Ig0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzQ4OCkiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw1MzkuMzgsMTc2LjA0KSINCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiDQogICAgICAgICAgIGlkPSJ0ZXh0MzQ5MiI+DQogICAgICAgICAgPHRzcGFuDQogICAgICAgICAgICAgeD0iMCAzLjkyNjg3OTkgMTEuNDMwNzIgMTguMjM0NzIgMjQuMzM4ODgxIDMxLjE4MTc2MSAzNC4xNjI1NiA0MC40MDkyNzkiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIg0KICAgICAgICAgICAgIGlkPSJ0c3BhbjM0OTQiPihBbmd1bGFyPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzQ5NiINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzQ5OCINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1MDApIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNTQ3LjIsMTU2LjQ4KSINCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiDQogICAgICAgICAgIGlkPSJ0ZXh0MzUwNCI+DQogICAgICAgICAgPHRzcGFuDQogICAgICAgICAgICAgeD0iMCA4LjE3Nzc2MDEgMTQuNjMxODQgMjAuODY1NjAxIg0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zNTA2Ij5HZWFyPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzUwOCINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzUxMCINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1MTIpIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNTcyLjY0LDE1Ni40OCkiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDM1MTYiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBpZD0idHNwYW4zNTE4Ij4pPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gNDMyLjExNzg1LDM4MC42OTA3NyA4LjI1LDAgMCwtNS4yNzUgOC4yNSwxMy4yIC04LjI1LDEzLjIgMCwtNS4yNzUgLTguMjUsMCAwLC0xNS44NSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9InBhdGgzNTIwIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDU1Mi43OTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNiZGQ3ZWU7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9InBhdGgzNTIyIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDU1Mi43OTI4NSw0MjAuNjQwNzcgNzgsMCAwLC02My45IC03OCwwIDAsNjMuOSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1YjliZDU7c3Ryb2tlLXdpZHRoOjEuOTQ5OTk5OTM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgICAgaWQ9InBhdGgzNTI0Ig0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+DQogICAgPGcNCiAgICAgICBpZD0iZzM1MjYiDQogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzM1MjgiDQogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNTMwKSI+DQogICAgICAgIDx0ZXh0DQogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDYxNy43NCwxNzMuMykiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDM1MzQiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBpZD0idHNwYW4zNTM2Ij4oPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzUzOCINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzU0MCINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1NDIpIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjIxLjcsMTczLjMpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNTQ2Ij4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIDYuODQyODc5OCAxMy4yMDYyNCAxNy40MDUyNzkgMjMuNjEzMTE5IDI4LjA4NDMyIDM0Ljg4ODMyMSA0MS4zOTQyNDEiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIg0KICAgICAgICAgICAgIGlkPSJ0c3BhbjM1NDgiPlJldGFyZGVyPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzU1MCINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzU1MiINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1NTQpIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjE5LjksMTU5LjI2KSINCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiDQogICAgICAgICAgIGlkPSJ0ZXh0MzU1OCI+DQogICAgICAgICAgPHRzcGFuDQogICAgICAgICAgICAgeD0iMCA2LjgwMzk5OTkgMTEuMzkxODQgMTQuMzcyNjQgMjQuNzI3NjggMzAuOTM1NTIgMzUuNjE0MDc5Ig0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zNTYwIj5wcmltYXJ5PC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8Zw0KICAgICAgIGlkPSJnMzU2MiINCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwtMjExLjUzMjE1LDYwMS4wMTU3NykiPg0KICAgICAgPGcNCiAgICAgICAgIGlkPSJnMzU2NCINCiAgICAgICAgIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDM1NjYpIj4NCiAgICAgICAgPHRleHQNCiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsNjYxLjQyLDE1OS4yNikiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDM1NzAiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBpZD0idHNwYW4zNTcyIj4pPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gODQyLjgxNzg1LDM4MC42OTA3NyA4LjMyNSwwIDAsLTUuMjc1IDguMzI1LDEzLjIgLTguMzI1LDEzLjIgMCwtNS4yNzUgLTguMzI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzU3NCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA2NTMuNzQyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzU3NiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA2NTMuNzQyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJwYXRoMzU3OCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxnDQogICAgICAgaWQ9ImczNTgwIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNTgyIg0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzU4NCkiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw3MDEuMTEsMTY2LjMpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNTg4Ij4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIDguMTc3NzYwMSAxNC42MzE4NCAyMC44NjU2MDEgMjUuMzg4NjM5IDMyLjI1NzQzOSAzOC44NTQwOCINCiAgICAgICAgICAgICB5PSIwIg0KICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICAgICAgaWQ9InRzcGFuMzU5MCI+R2VhcmJveDwvdHNwYW4+DQogICAgICAgIDwvdGV4dD4NCiAgICAgIDwvZz4NCiAgICA8L2c+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDk0My43Njc4NSwzODAuNjkwNzcgOC4yNSwwIDAsLTUuMjc1IDguMjUsMTMuMiAtOC4yNSwxMy4yIDAsLTUuMjc1IC04LjI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzU5MiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA3NTQuNjkyODUsNDIwLjY0MDc3IDg1LjA1LDAgMCwtNjMuOSAtODUuMDUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzU5NCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA3NTQuNjkyODUsNDIwLjY0MDc3IDg1LjA1LDAgMCwtNjMuOSAtODUuMDUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJwYXRoMzU5NiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxnDQogICAgICAgaWQ9ImczNTk4Ig0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNjAwIg0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYwMikiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw3ODIuMDIsMTczLjMpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNjA2Ij4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIg0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgaWQ9InRzcGFuMzYwOCI+KDwvdHNwYW4+DQogICAgICAgIDwvdGV4dD4NCiAgICAgIDwvZz4NCiAgICA8L2c+DQogICAgPGcNCiAgICAgICBpZD0iZzM2MTAiDQogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzM2MTIiDQogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjE0KSI+DQogICAgICAgIDx0ZXh0DQogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDc4NS45OCwxNzMuMykiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDM2MTgiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAgNi44NDI4Nzk4IDEzLjIwNjI0IDE3LjQwNTI3OSAyMy42MTMxMTkgMjguMDg0MzIgMzQuODg4MzIxIDQxLjM5NDI0MSINCiAgICAgICAgICAgICB5PSIwIg0KICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICAgICAgaWQ9InRzcGFuMzYyMCI+UmV0YXJkZXI8L3RzcGFuPg0KICAgICAgICA8L3RleHQ+DQogICAgICA8L2c+DQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9ImczNjIyIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNjI0Ig0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzYyNikiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw3NzcuOTQsMTU5LjI2KSINCiAgICAgICAgICAgc3R5bGU9ImZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpO3dyaXRpbmctbW9kZTpsci10YjtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiDQogICAgICAgICAgIGlkPSJ0ZXh0MzYzMCI+DQogICAgICAgICAgPHRzcGFuDQogICAgICAgICAgICAgeD0iMCA1LjA2NzM1OTkgMTEuNTIxNDQgMTYuOTI1NzYgMjMuNzU1NjggMzAuNTk4NTYgMzcuNDAyNTYxIDQzLjY2MjIzOSA0OC4zMjc4MzkiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIg0KICAgICAgICAgICAgIGlkPSJ0c3BhbjM2MzIiPnNlY29uZGFyeTwvdHNwYW4+DQogICAgICAgIDwvdGV4dD4NCiAgICAgIDwvZz4NCiAgICA8L2c+DQogICAgPGcNCiAgICAgICBpZD0iZzM2MzQiDQogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSwwLDAsLTEuMjUsLTIxMS41MzIxNSw2MDEuMDE1NzcpIj4NCiAgICAgIDxnDQogICAgICAgICBpZD0iZzM2MzYiDQogICAgICAgICBjbGlwLXBhdGg9InVybCgjY2xpcFBhdGgzNjM4KSI+DQogICAgICAgIDx0ZXh0DQogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLDgzMi4xOCwxNTkuMjYpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNjQyIj4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIg0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgaWQ9InRzcGFuMzY0NCI+KTwvdHNwYW4+DQogICAgICAgIDwvdGV4dD4NCiAgICAgIDwvZz4NCiAgICA8L2c+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDEyOS40MTc4NSwzODAuNjkwNzcgOC4yNSwwIDAsLTUuMjc1IDguMjUsMTMuMiAtOC4yNSwxMy4yIDAsLTUuMjc1IC04LjI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzY0NiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA4NjIuNjkyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzY0OCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA4NjIuNjkyODUsNDIwLjY0MDc3IDc4LDAgMCwtNjMuOSAtNzgsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJwYXRoMzY1MCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxnDQogICAgICAgaWQ9ImczNjUyIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNjU0Ig0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzY1NikiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw4NzMuOTEsMTY2LjMpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjEyLjk2MDAwMDA0cHg7Zm9udC1mYW1pbHk6Q2FsaWJyaTstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkNhbGlicmk7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNjYwIj4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIDYuOTQ2NTU5OSA5LjkyNzM1OTYgMTYuNzcwMjQxIDIwLjk2OTI4IDI2LjQ1MTM2MSINCiAgICAgICAgICAgICB5PSIwIg0KICAgICAgICAgICAgIHNvZGlwb2RpOnJvbGU9ImxpbmUiDQogICAgICAgICAgICAgaWQ9InRzcGFuMzY2MiI+Q2x1dGNoPC90c3Bhbj4NCiAgICAgICAgPC90ZXh0Pg0KICAgICAgPC9nPg0KICAgIDwvZz4NCiAgICA8cGF0aA0KICAgICAgIGQ9Im0gNzM0LjgxNzg1LDM4MC42OTA3NyA4LjMyNSwwIDAsLTUuMjc1IDguMzI1LDEzLjIgLTguMzI1LDEzLjIgMCwtNS4yNzUgLTguMzI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzY2NCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA5NjMuNjQyODUsNDIwLjY0MDc3IDc4LjAwMDA1LDAgMCwtNjMuOSAtNzguMDAwMDUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzY2NiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSA5NjMuNjQyODUsNDIwLjY0MDc3IDc4LjAwMDA1LDAgMCwtNjMuOSAtNzguMDAwMDUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJwYXRoMzY2OCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxnDQogICAgICAgaWQ9ImczNjcwIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNjcyIg0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzY3NCkiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSw5NTMuMjMsMTY2LjMpIg0KICAgICAgICAgICBzdHlsZT0iZm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxMi45NjAwMDAwNHB4O2ZvbnQtZmFtaWx5OkNhbGlicmk7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpDYWxpYnJpLUJvbGQ7d3JpdGluZy1tb2RlOmxyLXRiO2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSINCiAgICAgICAgICAgaWQ9InRleHQzNjc4Ij4NCiAgICAgICAgICA8dHNwYW4NCiAgICAgICAgICAgICB4PSIwIDYuMzI0NDgwMSAxMy4yODQgMTkuNDI3MDQgMjIuNjY3MDQgMjkuNjI2NTYiDQogICAgICAgICAgICAgeT0iMCINCiAgICAgICAgICAgICBzb2RpcG9kaTpyb2xlPSJsaW5lIg0KICAgICAgICAgICAgIGlkPSJ0c3BhbjM2ODAiPkVuZ2luZTwvdHNwYW4+DQogICAgICAgIDwvdGV4dD4NCiAgICAgIDwvZz4NCiAgICA8L2c+DQogICAgPHBhdGgNCiAgICAgICBkPSJtIDEwNjEuMjE3OSwzODAuNjkwNzcgLTguMjUsMCAwLC01LjI3NSAtOC4yNSwxMy4yIDguMjUsMTMuMiAwLC01LjI3NSA4LjI1LDAgMCwtMTUuODUgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzY4MiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSAxMDY0LjU5MjksNDE4Ljg0MDc3IDc3Ljg1LDAgMCwtNjMuOSAtNzcuODUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDojYmRkN2VlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIg0KICAgICAgIGlkPSJwYXRoMzY4NCINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxwYXRoDQogICAgICAgZD0ibSAxMDY0LjU5MjksNDE4Ljg0MDc3IDc3Ljg1LDAgMCwtNjMuOSAtNzcuODUsMCAwLDYzLjkgeiINCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNWI5YmQ1O3N0cm9rZS13aWR0aDoxLjk0OTk5OTkzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICAgIGlkPSJwYXRoMzY4NiINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICAgIDxnDQogICAgICAgaWQ9ImczNjg4Ig0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMjUsMCwwLC0xLjI1LC0yMTEuNTMyMTUsNjAxLjAxNTc3KSI+DQogICAgICA8Zw0KICAgICAgICAgaWQ9ImczNjkwIg0KICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzY5MikiPg0KICAgICAgICA8dGV4dA0KICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwxMDI0Ljk3LDE2Ny43NCkiDQogICAgICAgICAgIHN0eWxlPSJmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTIuOTYwMDAwMDRweDtmb250LWZhbWlseTpDYWxpYnJpOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Q2FsaWJyaTt3cml0aW5nLW1vZGU6bHItdGI7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIg0KICAgICAgICAgICBpZD0idGV4dDM2OTYiPg0KICAgICAgICAgIDx0c3Bhbg0KICAgICAgICAgICAgIHg9IjAgNy40MzkwNDAyIDE0LjI0MzA0IDE5LjkwNjU2MSAyMi44ODczNiAyNS44NjgxNiAyOC44ODc4NCAzNS4wOTU2OCAzOS42NzA1NTkgNDIuNjUxMzYgNDkuMTMxMzU5Ig0KICAgICAgICAgICAgIHk9IjAiDQogICAgICAgICAgICAgc29kaXBvZGk6cm9sZT0ibGluZSINCiAgICAgICAgICAgICBpZD0idHNwYW4zNjk4Ij5BdXhpbGlhcmllczwvdHNwYW4+DQogICAgICAgIDwvdGV4dD4NCiAgICAgIDwvZz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPg0K" />
 
 </div>
 <p>The engine tries to supply the requested power demand (including all power losses happening in the powertrain and auxiliaries). If the engine can’t supply the given power demand, the driver component limits it (e.g. by accelerating slower than requested by the driving cycle).</p>
@@ -2735,6 +2735,42 @@ Example: “Gears\Gear1.vtlm” points to the “Gears” subdirectory of the Ge
 </dd>
 </dl>
 </div>
+<div class="vecto3">
+<p>Since Vecto 3.0.4 the coasting strategy according to the ACEA White Book 2016 is implemented.</p>
+<p>The look ahead coasting functionality represents the driver behavior prior to a deceleration event. Due to information of the route ahead the driver is able to anticipate on the deceleration event by releasing the accelerator pedal.</p>
+<p>This pedal release decision is based on an estimation of kinetical and potential (height) energy gain versus the expected dissipated energy tue to vehicle resistances during the route section ahead.</p>
+<p>For an upcoming target speed change the energy level after the speed change is compared to the vehicle’s current energy level (kinetic and potential energy). The difference of those energy levels is used to estimate the average deceleration force to reach the next target speed. Coasting starts if the vehicle’s (estimated) average resistance force during coasting multiplied by a speed dependent ‘Decision Factor’ becomes smaller than the average deceleration force. (For details on the equations please see the ACEA White Book 2016, Section 8)</p>
+<p>The <em>Decision Factor (DF)</em> depends on the next target speed and the speed change:</p>
+<p><span class="math inline">\(DF_{Coasting} = 2.5 - 1.5 * DF_{vel} * DF_{vdrop}\)</span></p>
+<p>whereas <span class="math inline">\(DF_{vel}\)</span> and <span class="math inline">\(DF_{vdrop}\)</span> are speed dependent and speed change dependent lookup curves, giving a value from 0 and 1.</p>
+<p>For the look ahead coasting target speed changes within the preview distance are considered.</p>
+<p><span class="math inline">\(preview distance [m] = 10 * vehicle speed [km/h]\)</span></p>
+<dl>
+<dt>Parameters in <a href="#job-file">Job File</a>:</dt>
+<dd><ul>
+<li><strong>PreviewDistanceFactor</strong></li>
+<li><strong>DF_offset</strong>: offset in the equation for DF<sub>coasting</sub> (default 2.5)</li>
+<li><strong>DF_scaling</strong>: factor in the equation for DF<sub>coasting</sub> (default 1.5)</li>
+<li><strong>DF_targetSpeedLookup</strong>: csv file for DF<sub>vel</sub> lookup (see below)</li>
+<li><strong>Df_velocityDropLookup</strong>: csv file for DF<sub>vdrop</sub> lookup (see below)</li>
+</ul>
+</dd>
+</dl>
+<h4 id="decision-factor-for-target-velocity-lookup-dfvel-1">Decision Factor for target velocity lookup (DF<sub>vel</sub>)</h4>
+<p>Example (default values):</p>
+<pre><code>v_target [km/h], decision_factor [-]
+0              , 0
+48             , 0
+52             , 1
+100            , 1</code></pre>
+<h4 id="decision-factor-for-velocity-drop-lookup-dfvdrop-1">Decision Factor for velocity drop lookup (DF<sub>vdrop</sub>)</h4>
+<p>Example (default values):</p>
+<pre><code>v_drop [km/h], decision_factor [-]
+-100          , 1
+9             , 1
+11            , 0
+100           , 0</code></pre>
+</div>
 </div>
 <div id="overspeed-eco-roll" class="section level2">
 <h2>Overspeed / Eco-Roll</h2>
@@ -4720,6 +4756,13 @@ Kneeling, UnknownCycleName, 0,</code></pre>
 <div id="engineering-mode-measured-speed-with-gear-time-based-cycle" class="section level3">
 <h3>Engineering Mode: Measured-Speed With Gear, Time-Based Cycle</h3>
 <p>This driving cycle defines the actual measured speed of the vehicle, the gear, and the engine speed over time. It overrides the shift strategy of Vecto and also directly sets the engine speed.</p>
+<div class="vecto2">
+<p>It is necessary to set the option ’Use gears/rpm's from driving cycle in the <strong>Options</strong> tab.</p>
+<div class="figure">
+<img src="data:image/png;base64,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" />
+
+</div>
+</div>
 <p>Header: <strong>&lt;t&gt;, &lt;v&gt;, &lt;n&gt;, &lt;gear&gt;</strong><em>[, &lt;grad&gt;][, &lt;Padd&gt;][, &lt;vair_res&gt;, &lt;vair_beta&gt;][, &lt;Aux_ID&gt;]</em></p>
 <table style="width:100%;">
 <colgroup>
@@ -5777,6 +5820,16 @@ Kneeling, UnknownCycleName, 0,</code></pre>
 <div id="changelog" class="section level1">
 <h1>Changelog</h1>
 <p><strong>VECTO 3.0.4</strong></p>
+<p><strong><em>Build 565 (2016-07-19)</em></strong></p>
+<ul>
+<li>Bugfixes
+<ul>
+<li>AAUX HVAC Dialog does not store path to ActuationsMap and SSMSource</li>
+<li>GUI: check for axle loads in declaration mode renders editing dialog useless</li>
+<li>Vecto 2.2: Simulation aborts (Vecto terminates) when simulating EngineOnly cycles</li>
+<li>Vecto 3: Building SimulationRun EngineOnly simulation failed</li>
+</ul></li>
+</ul>
 <p><strong><em>Build 544 (2016-06-28)</em></strong></p>
 <ul>
 <li>Main Updates
diff --git a/Documentation/User Manual/pics/MeasuredSpeedSettings.png b/Documentation/User Manual/pics/MeasuredSpeedSettings.png
new file mode 100644
index 0000000000000000000000000000000000000000..11e280adc3fce579ac5d295c50192481dc6dd017
Binary files /dev/null and b/Documentation/User Manual/pics/MeasuredSpeedSettings.png differ
diff --git a/Tools/VectoLegacyTests/Properties/AssemblyInfo.cs b/Tools/VectoLegacyTests/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..acdccd8f942eecb80166a587be1270ef31971910
--- /dev/null
+++ b/Tools/VectoLegacyTests/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Allgemeine Informationen über eine Assembly werden über folgende 
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die einer Assembly zugeordnet sind.
+[assembly: AssemblyTitle("VectoLegacyTests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("VectoLegacyTests")]
+[assembly: AssemblyCopyright("Copyright ©  2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Wenn ComVisible auf "false" festgelegt wird, sind die Typen innerhalb dieser Assembly 
+// für COM-Komponenten unsichtbar.  Wenn Sie auf einen Typ in dieser Assembly von 
+// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
+[assembly: ComVisible(false)]
+
+// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+[assembly: Guid("25b42ace-0f92-4e46-80b1-12f5927f51f8")]
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+//      Hauptversion
+//      Nebenversion 
+//      Buildnummer
+//      Revision
+//
+// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 
+// durch Einsatz von '*', wie in nachfolgendem Beispiel:
+// [Assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Tools/VectoLegacyTests/TorqueConverterTest.cs b/Tools/VectoLegacyTests/TorqueConverterTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a6c0ef8f81102326957082e9fb24867cb94bfb7c
--- /dev/null
+++ b/Tools/VectoLegacyTests/TorqueConverterTest.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Diagnostics;
+using System.Globalization;
+using System.Threading;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using VECTO;
+
+namespace VectoLegacyTests
+{
+	[TestClass]
+	public class TorqueConverterTest
+	{
+		[ClassInitialize]
+		public static void InitTests(TestContext ctx)
+		{
+			if (CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ".") {
+				return;
+			}
+			try {
+				Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
+				Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
+			} catch (Exception ex) {}
+		}
+
+		[TestMethod]
+		public void TestTorqueConverter()
+		{
+			cGBX cGbx = new cGBX();
+			VECTO_Global.MyAppPath = @".\";
+			VECTO_Global.MyDeclPath = @"E:\QUAM\Workspace\VECTO_quam\Declaration\";
+			VECTO_Global.sKey = new csKey();
+			VECTO_Global.Declaration = new cDeclaration();
+			VECTO_Global.Cfg = new Configuration() {
+				DeclMode = false
+			};
+			VECTO_Global.DEV = new cDEV() {
+				TClimitOn = true,
+				TClimit = 1600,
+				TCaccmin = 0.025f,
+				TCiterPrec = 0.001f,
+			};
+			VECTO_Global.VEC = new cVECTO() {
+				EngOnly = false,
+				AuxiliaryAssembly = "CLASSIC"
+			};
+			VECTO_Global.VEC.set_DesMaxFile(true,
+				@"E:\QUAM\Workspace\VECTO_quam\Generic Vehicles\Engineering Mode\12t Delivery Truck\Truck.vacc");
+			VECTO_Global.VEC.Init();
+
+			VECTO_Global.DRI = new cDRI();
+			VECTO_Global.DRI.FilePath = @"..\..\..\..\Declaration\MissionCycles\Citybus_Suburban.vdri";
+			VECTO_Global.DRI.ReadFile();
+			VECTO_Global.DRI.GradToAlt();
+
+			VECTO_Global.MODdata = new cMOD();
+			VECTO_Global.MODdata.Init();
+
+			if (VECTO_Global.DRI.Scycle) {
+				VECTO_Global.MODdata.Vh.SetAlt();
+				var foo = VECTO_Global.DRI.ConvStoT();
+			}
+
+			VECTO_Global.MODdata.CycleInit();
+
+
+			VECTO_Global.GBX = cGbx;
+			VECTO_Global.ENG = new cENG();
+			VECTO_Global.ENG.FilePath =
+				@"..\..\..\..\Generic Vehicles\Engineering Mode\AT-TC Demo Vehicle\Engine.veng";
+			//"..\\..\\..\\Generic Vehicles\\Declaration Mode\\12t Delivery Truck\\12t Delivery Truck.veng";
+			VECTO_Global.ENG.ReadFile(true);
+			VECTO_Global.ENG.Init();
+			VECTO_Global.LogFile = new VECTO_Global.cLogFile();
+			cGbx.FilePath = @"..\..\..\..\Generic Vehicles\Engineering Mode\AT-TC Demo Vehicle\Gearbox.vgbx";
+			//"..\\..\\..\\Generic Vehicles\\Declaration Mode\\12t Delivery Truck\\12t Delivery Truck.vgbx";
+			var flag = cGbx.ReadFile(true);
+			flag = cGbx.GSinit();
+			if (cGbx.TCon) {
+				cGbx.TCinit();
+			}
+			flag = ((cENG)VECTO_Global.ENG).Init();
+			//cGbx.DeclInit();
+
+			for (var nOut = 10; nOut < 200; nOut += 10) {
+				for (var Pout = 10; Pout < 200; Pout += 20) {
+					flag = cGbx.TCiteration(1, nOut, Pout, 0);
+					Assert.IsTrue(flag);
+					Debug.WriteLine("n_out: {0}, P_out: {1}, n_in: {2}, Tq_in: {3}, reduce: {4}", nOut, Pout, cGbx.TCnUin, cGbx.TCMin,
+						cGbx.TCReduce);
+				}
+			}
+
+			//flag = cGbx.TCiteration(1, 100, 5, 0);
+			//Assert.IsTrue(flag);
+
+			//Assert.AreEqual(0, cGbx.TCnUin);
+			//Assert.AreEqual(0, cGbx.TCMin);
+		}
+	}
+}
\ No newline at end of file
diff --git a/Tools/VectoLegacyTests/VectoLegacyTests.csproj b/Tools/VectoLegacyTests/VectoLegacyTests.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..219ddd1c5c7df02b3adc21848f601989db5879f8
--- /dev/null
+++ b/Tools/VectoLegacyTests/VectoLegacyTests.csproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{49F0275A-4517-49FA-859E-77279B9C8B18}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>VectoLegacyTests</RootNamespace>
+    <AssemblyName>VectoLegacyTests</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
+    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
+    <IsCodedUITest>False</IsCodedUITest>
+    <TestProjectType>UnitTest</TestProjectType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+  </ItemGroup>
+  <Choose>
+    <When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
+      <ItemGroup>
+        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+      </ItemGroup>
+    </When>
+    <Otherwise>
+      <ItemGroup>
+        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
+      </ItemGroup>
+    </Otherwise>
+  </Choose>
+  <ItemGroup>
+    <Compile Include="TorqueConverterTest.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\VECTO\VECTO.vbproj">
+      <Project>{AAC0F132-0A9F-45B3-B682-77AC9B24B352}</Project>
+      <Name>VECTO</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Choose>
+    <When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
+      <ItemGroup>
+        <Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+        <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+        <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+        <Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+      </ItemGroup>
+    </When>
+  </Choose>
+  <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/VECTO.sln b/VECTO.sln
index bebf44a90c25603ea43609011786b8a54e070245..a7af431e59edd0dbe531dac7319b0cbba300f764 100644
--- a/VECTO.sln
+++ b/VECTO.sln
@@ -44,6 +44,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication1", "Cons
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelbasedTests", "VectoCore\ModelbasedTests\ModelbasedTests.csproj", "{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VectoLegacyTests", "Tools\VectoLegacyTests\VectoLegacyTests.csproj", "{49F0275A-4517-49FA-859E-77279B9C8B18}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -174,6 +176,14 @@ Global
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Release|Any CPU.Build.0 = Release|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Release|x64.ActiveCfg = Release|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Release|x86.ActiveCfg = Release|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Release|Any CPU.Build.0 = Release|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Release|x64.ActiveCfg = Release|Any CPU
+		{49F0275A-4517-49FA-859E-77279B9C8B18}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -188,6 +198,7 @@ Global
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 		{E8B0B447-1A54-4BEC-A160-AF0017000781} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 		{E23B3A9B-62E7-4476-849E-EEF1C3804A2F} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
+		{49F0275A-4517-49FA-859E-77279B9C8B18} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 		{B4B9BD2F-FD8F-4BB8-82FA-E2154D2C7FBD} = {73A5BF70-6168-456F-95E5-A1402BFA488C}
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4} = {73A5BF70-6168-456F-95E5-A1402BFA488C}
 	EndGlobalSection
diff --git a/VECTO/GUI/GUI_Subs.vb b/VECTO/GUI/GUI_Subs.vb
index 3969a4e064466027a454bfc0f46fdc9fc8196fa3..d15fbf5dbf8796320d75224ea6358b42d98f939a 100644
--- a/VECTO/GUI/GUI_Subs.vb
+++ b/VECTO/GUI/GUI_Subs.vb
@@ -13,75 +13,75 @@
 ''' Methods for GUI interaction
 ''' </summary>
 ''' <remarks></remarks>
-Module GUI_Subs
+Public Module GUI_Subs
 
-    Public test As Integer = 0
+	Public test As Integer = 0
 
 #Region "GUI control via background worker"
 
-    'Status Message => Msg-Listview
-    Public Sub WorkerMsg(ByVal ID As tMsgID, ByVal Msg As String, ByVal Source As String, Optional ByVal Link As String = "")
-        Dim WorkProg As New cWorkProg(tWorkMsgType.StatusListBox)
-        WorkProg.ID = ID
-        Select Case ID
-            Case tMsgID.Err
-                MSGerror += 1
-            Case tMsgID.Warn
-                MSGwarn += 1
-        End Select
-        WorkProg.Msg = Msg
-        WorkProg.Source = Source
-        WorkProg.Link = Link
-        Try
-            VECTOworker.ReportProgress(0, WorkProg)
-        Catch ex As Exception
-            GUImsg(ID, Msg)
-        End Try
-    End Sub
-
-    'Status => Statusbar
-    Public Sub WorkerStatus(ByVal Msg As String)
-        Dim WorkProg As New cWorkProg(tWorkMsgType.StatusBar)
-        WorkProg.Msg = Msg
-        VECTOworker.ReportProgress(0, WorkProg)
-    End Sub
-
-    'Job status => Job listview
-    Public Sub WorkerJobStatus(ByVal JobIndex As Int16, ByVal Msg As String, ByVal Status As tJobStatus)
-        Dim WorkProg As cWorkProg
-        WorkProg = New cWorkProg(tWorkMsgType.JobStatus)
-        WorkProg.FileIndex = JobIndex
-        WorkProg.Msg = Msg
-        WorkProg.Status = Status
-        VECTOworker.ReportProgress(0, WorkProg)
-    End Sub
-
-    'Cycle status => Cycle listview
-    Public Sub WorkerCycleStatus(ByVal CycleIndex As Int16, ByVal Msg As String)
-        Dim WorkProg As cWorkProg
-        WorkProg = New cWorkProg(tWorkMsgType.CycleStatus)
-        WorkProg.FileIndex = CycleIndex
-        WorkProg.Msg = Msg
-        VECTOworker.ReportProgress(0, WorkProg)
-    End Sub
-
-    'Worker Progress => Progbar
-    Public Sub WorkerProgJobEnd(ByVal Prog As Int16)
-        Dim WorkProg As New cWorkProg(tWorkMsgType.ProgBars)
-        VECTOworker.ReportProgress(Prog, WorkProg)
-    End Sub
-
-    'Progbar set to Continuous
-    Public Sub WorkerProgInit()
-        Dim WorkProg As New cWorkProg(tWorkMsgType.InitProgBar)
-        VECTOworker.ReportProgress(0, WorkProg)
-    End Sub
-
-    'Abort
-    Public Sub WorkerAbort()
-        Dim WorkProg As New cWorkProg(tWorkMsgType.Abort)
-        VECTOworker.ReportProgress(0, WorkProg)
-    End Sub
+	'Status Message => Msg-Listview
+	Public Sub WorkerMsg(ByVal ID As tMsgID, ByVal Msg As String, ByVal Source As String, Optional ByVal Link As String = "")
+		Dim WorkProg As New cWorkProg(tWorkMsgType.StatusListBox)
+		WorkProg.ID = ID
+		Select Case ID
+			Case tMsgID.Err
+				MSGerror += 1
+			Case tMsgID.Warn
+				MSGwarn += 1
+		End Select
+		WorkProg.Msg = Msg
+		WorkProg.Source = Source
+		WorkProg.Link = Link
+		Try
+			VECTOworker.ReportProgress(0, WorkProg)
+		Catch ex As Exception
+			GUImsg(ID, Msg)
+		End Try
+	End Sub
+
+	'Status => Statusbar
+	Public Sub WorkerStatus(ByVal Msg As String)
+		Dim WorkProg As New cWorkProg(tWorkMsgType.StatusBar)
+		WorkProg.Msg = Msg
+		VECTOworker.ReportProgress(0, WorkProg)
+	End Sub
+
+	'Job status => Job listview
+	Public Sub WorkerJobStatus(ByVal JobIndex As Int16, ByVal Msg As String, ByVal Status As tJobStatus)
+		Dim WorkProg As cWorkProg
+		WorkProg = New cWorkProg(tWorkMsgType.JobStatus)
+		WorkProg.FileIndex = JobIndex
+		WorkProg.Msg = Msg
+		WorkProg.Status = Status
+		VECTOworker.ReportProgress(0, WorkProg)
+	End Sub
+
+	'Cycle status => Cycle listview
+	Public Sub WorkerCycleStatus(ByVal CycleIndex As Int16, ByVal Msg As String)
+		Dim WorkProg As cWorkProg
+		WorkProg = New cWorkProg(tWorkMsgType.CycleStatus)
+		WorkProg.FileIndex = CycleIndex
+		WorkProg.Msg = Msg
+		VECTOworker.ReportProgress(0, WorkProg)
+	End Sub
+
+	'Worker Progress => Progbar
+	Public Sub WorkerProgJobEnd(ByVal Prog As Int16)
+		Dim WorkProg As New cWorkProg(tWorkMsgType.ProgBars)
+		VECTOworker.ReportProgress(Prog, WorkProg)
+	End Sub
+
+	'Progbar set to Continuous
+	Public Sub WorkerProgInit()
+		Dim WorkProg As New cWorkProg(tWorkMsgType.InitProgBar)
+		VECTOworker.ReportProgress(0, WorkProg)
+	End Sub
+
+	'Abort
+	Public Sub WorkerAbort()
+		Dim WorkProg As New cWorkProg(tWorkMsgType.Abort)
+		VECTOworker.ReportProgress(0, WorkProg)
+	End Sub
 
 
 
@@ -89,193 +89,193 @@ Module GUI_Subs
 
 #Region "Direct GUI control - Cannot be called by background worker!"
 
-    'Status message
-    Public Sub GUImsg(ByVal ID As tMsgID, ByVal Msg As String)
-        F_MAINForm.MSGtoForm(ID, Msg, "", "")
-    End Sub
+	'Status message
+	Public Sub GUImsg(ByVal ID As tMsgID, ByVal Msg As String)
+		F_MAINForm.MSGtoForm(ID, Msg, "", "")
+	End Sub
 
-    'Statusbar
-    Public Sub Status(ByVal txt As String)
-        F_MAINForm.ToolStripLbStatus.Text = txt
-    End Sub
+	'Statusbar
+	Public Sub Status(ByVal txt As String)
+		F_MAINForm.ToolStripLbStatus.Text = txt
+	End Sub
 
-    'Status form reset
-    Public Sub ClearMSG()
-        F_MAINForm.LvMsg.Items.Clear()
-    End Sub
+	'Status form reset
+	Public Sub ClearMSG()
+		F_MAINForm.LvMsg.Items.Clear()
+	End Sub
 
 #End Region
 
-    'Class used to pass Messages from BackgroundWorker to GUI
-    Public Class cWorkProg
-        Private MyTarget As tWorkMsgType
-        Private MyID As tMsgID
-        Private MyMsg As String
-        Private MyFileIndex As Int16
-        Private MySource As String
-        Private MyStatus As tJobStatus
-        Public Link As String
-
-        Public Sub New(ByVal MsgTarget As tWorkMsgType)
-            MyTarget = MsgTarget
-            MySource = ""
-            MyStatus = tJobStatus.Undef
-            Link = ""
-        End Sub
-
-        Public Property Status As tJobStatus
-            Get
-                Return MyStatus
-            End Get
-            Set(value As tJobStatus)
-                MyStatus = value
-            End Set
-        End Property
-
-
-        Public Property Source As String
-            Get
-                Return MySource
-            End Get
-            Set(value As String)
-                MySource = value
-            End Set
-        End Property
-
-        Public Property ID() As tMsgID
-            Get
-                Return MyID
-            End Get
-            Set(ByVal value As tMsgID)
-                MyID = value
-            End Set
-        End Property
-
-        Public Property Msg() As String
-            Get
-                Return MyMsg
-            End Get
-            Set(ByVal value As String)
-                MyMsg = value
-            End Set
-        End Property
-
-        Public ReadOnly Property Target() As tWorkMsgType
-            Get
-                Return MyTarget
-            End Get
-        End Property
-
-        Public Property FileIndex() As Int16
-            Get
-                Return MyFileIndex
-            End Get
-            Set(ByVal value As Int16)
-                MyFileIndex = value
-            End Set
-        End Property
-
-
-    End Class
-
-    'Progress bar control
-    Public Class cProgBarCtrl
-        Public ProgOverallStartInt As Integer = -1
-        Public PgroOverallEndInt As Integer = -1
-        Public ProgJobInt As Integer = -1
-        Public ProgLock As Boolean = False
-    End Class
+	'Class used to pass Messages from BackgroundWorker to GUI
+	Public Class cWorkProg
+		Private MyTarget As tWorkMsgType
+		Private MyID As tMsgID
+		Private MyMsg As String
+		Private MyFileIndex As Int16
+		Private MySource As String
+		Private MyStatus As tJobStatus
+		Public Link As String
+
+		Public Sub New(ByVal MsgTarget As tWorkMsgType)
+			MyTarget = MsgTarget
+			MySource = ""
+			MyStatus = tJobStatus.Undef
+			Link = ""
+		End Sub
+
+		Public Property Status As tJobStatus
+			Get
+				Return MyStatus
+			End Get
+			Set(value As tJobStatus)
+				MyStatus = value
+			End Set
+		End Property
+
+
+		Public Property Source As String
+			Get
+				Return MySource
+			End Get
+			Set(value As String)
+				MySource = value
+			End Set
+		End Property
+
+		Public Property ID() As tMsgID
+			Get
+				Return MyID
+			End Get
+			Set(ByVal value As tMsgID)
+				MyID = value
+			End Set
+		End Property
+
+		Public Property Msg() As String
+			Get
+				Return MyMsg
+			End Get
+			Set(ByVal value As String)
+				MyMsg = value
+			End Set
+		End Property
+
+		Public ReadOnly Property Target() As tWorkMsgType
+			Get
+				Return MyTarget
+			End Get
+		End Property
+
+		Public Property FileIndex() As Int16
+			Get
+				Return MyFileIndex
+			End Get
+			Set(ByVal value As Int16)
+				MyFileIndex = value
+			End Set
+		End Property
+
+
+	End Class
+
+	'Progress bar control
+	Public Class cProgBarCtrl
+		Public ProgOverallStartInt As Integer = -1
+		Public PgroOverallEndInt As Integer = -1
+		Public ProgJobInt As Integer = -1
+		Public ProgLock As Boolean = False
+	End Class
 
 #Region "Textbox text conversion for file open/save operations"
 
-    'Text-to-number
-    Public Function fTextboxToNumString(ByVal txt As String) As String
-        If Not IsNumeric(txt) Then
-            Return "0"
-        Else
-            Return txt
-        End If
-    End Function
-
-    'Empty text to writable placeholder
-    Public Function fStringOrDummySet(ByVal txt As String) As String
-        If txt = "" Then
-            Return sKey.EmptyString
-        Else
-            Return txt
-        End If
-    End Function
-
-    'Placeholder to empty string
-    Public Function fStringOrDummyGet(ByVal txt As String) As String
-        If Trim(UCase(txt)) = sKey.EmptyString Then
-            Return ""
-        Else
-            Return txt
-        End If
-    End Function
+	'Text-to-number
+	Public Function fTextboxToNumString(ByVal txt As String) As String
+		If Not IsNumeric(txt) Then
+			Return "0"
+		Else
+			Return txt
+		End If
+	End Function
+
+	'Empty text to writable placeholder
+	Public Function fStringOrDummySet(ByVal txt As String) As String
+		If txt = "" Then
+			Return sKey.EmptyString
+		Else
+			Return txt
+		End If
+	End Function
+
+	'Placeholder to empty string
+	Public Function fStringOrDummyGet(ByVal txt As String) As String
+		If Trim(UCase(txt)) = sKey.EmptyString Then
+			Return ""
+		Else
+			Return txt
+		End If
+	End Function
 
 #End Region
 
-    'Open File with software defined in Config
-    Public Function FileOpenAlt(ByVal file As String) As Boolean
-        Dim PSI As New ProcessStartInfo
+	'Open File with software defined in Config
+	Public Function FileOpenAlt(ByVal file As String) As Boolean
+		Dim PSI As New ProcessStartInfo
 
-        If Not IO.File.Exists(file) Then Return False
+		If Not IO.File.Exists(file) Then Return False
 
-        PSI.FileName = Cfg.OpenCmd
-        PSI.Arguments = ChrW(34) & file & ChrW(34)
-        Try
-            Process.Start(PSI)
-            Return True
-        Catch ex As Exception
-            Return False
-        End Try
+		PSI.FileName = Cfg.OpenCmd
+		PSI.Arguments = ChrW(34) & file & ChrW(34)
+		Try
+			Process.Start(PSI)
+			Return True
+		Catch ex As Exception
+			Return False
+		End Try
 
-    End Function
+	End Function
 
-    Public Function WrongMode() As Integer
+	Public Function WrongMode() As Integer
 
-        If Cfg.DeclMode Then
+		If Cfg.DeclMode Then
 
-            Select Case MsgBox("This file was created in Engineering Mode! Opening in Declaration Mode will overwrite some parameters with generic values." & vbCrLf & vbCrLf & _
-             "Do you want to switch to Engineering Mode?" & vbCrLf & vbCrLf & _
-             "[Yes] Switch mode and open file" & vbCrLf & _
-             "[No] Open file without changing mode" & vbCrLf & _
-             "[Cancel] Abort opening file" _
-             , MsgBoxStyle.YesNoCancel, "Warning")
-                Case MsgBoxResult.Yes
-                    Return 1
+			Select Case MsgBox("This file was created in Engineering Mode! Opening in Declaration Mode will overwrite some parameters with generic values." & vbCrLf & vbCrLf & _
+			 "Do you want to switch to Engineering Mode?" & vbCrLf & vbCrLf & _
+			 "[Yes] Switch mode and open file" & vbCrLf & _
+			 "[No] Open file without changing mode" & vbCrLf & _
+			 "[Cancel] Abort opening file" _
+			 , MsgBoxStyle.YesNoCancel, "Warning")
+				Case MsgBoxResult.Yes
+					Return 1
 
-                Case (MsgBoxResult.No)
-                    Return 0
+				Case (MsgBoxResult.No)
+					Return 0
 
-                Case Else
-                    Return -1
+				Case Else
+					Return -1
 
-            End Select
+			End Select
 
-        Else
+		Else
 
-            Select Case MsgBox("This file was created in Declaration Mode! For use in Engineering Mode missing parameters must be defined." & vbCrLf & vbCrLf & _
-                      "Do you want to switch to Declaration Mode?" & vbCrLf & vbCrLf & _
-                      "[Yes] Switch mode and open file" & vbCrLf & _
-                      "[No] Open file without changing mode" & vbCrLf & _
-                      "[Cancel] Abort opening file" _
-                      , MsgBoxStyle.YesNoCancel, "Warning")
-                Case MsgBoxResult.Yes
-                    Return 1
+			Select Case MsgBox("This file was created in Declaration Mode! For use in Engineering Mode missing parameters must be defined." & vbCrLf & vbCrLf & _
+					  "Do you want to switch to Declaration Mode?" & vbCrLf & vbCrLf & _
+					  "[Yes] Switch mode and open file" & vbCrLf & _
+					  "[No] Open file without changing mode" & vbCrLf & _
+					  "[Cancel] Abort opening file" _
+					  , MsgBoxStyle.YesNoCancel, "Warning")
+				Case MsgBoxResult.Yes
+					Return 1
 
-                Case (MsgBoxResult.No)
-                    Return 0
+				Case (MsgBoxResult.No)
+					Return 0
 
-                Case Else
-                    Return -1
+				Case Else
+					Return -1
 
-            End Select
+			End Select
 
-        End If
+		End If
 
-    End Function
+	End Function
 
 End Module
diff --git a/VECTO/Input Files/cGBX.vb b/VECTO/Input Files/cGBX.vb
index e957d29b88ffe2088a70db32bc13d7c8eff174ef..89ee1ab780ac738e8fd1fd8bec0d482022771060 100644
--- a/VECTO/Input Files/cGBX.vb	
+++ b/VECTO/Input Files/cGBX.vb	
@@ -649,7 +649,7 @@ Public Class cGBX
 			If ErrMin > DEV.TCiterPrec AndAlso iOptPassed > -1 AndAlso nuStep > 0.00001 Then
 				nuMin = nuList(iOptPassed - 1)
 				nuMax = nuList(iOptPassed)
-				nuStep = Math.Max((nuMax - nuMin) / 10, 0.00001)
+				nuStep = Math.Max((nuMax - nuMin) / 10.0, 0.00001)
 			Else
 				Exit Do
 			End If
diff --git a/VECTO/VECTO_Global.vb b/VECTO/VECTO_Global.vb
index 0115a892e99a4c19c184779f0dd9303fbebd6ccb..da0443713bf78622fd66d3bbf7f4f109c7875223 100644
--- a/VECTO/VECTO_Global.vb
+++ b/VECTO/VECTO_Global.vb
@@ -14,7 +14,7 @@ Imports System.Text
 Imports TUGraz.VectoCommon.Models
 Imports vectolic
 
-Module VECTO_Global
+Public Module VECTO_Global
 	Public Const VECTOvers As String = "2.2"
 	Public COREvers As String = "NOT FOUND"
 
diff --git a/VECTO/cVSUM.vb b/VECTO/cVSUM.vb
index b7b73471bb9c56e712b59e35e37d867f6da8672d..8449badabedaf3982152e184c25428a6867019b4 100644
--- a/VECTO/cVSUM.vb
+++ b/VECTO/cVSUM.vb
@@ -10,207 +10,207 @@
 ' See the LICENSE.txt for the specific language governing permissions and limitations.
 Imports System.Collections.Generic
 
-Class cVSUM
+Public Class cVSUM
 
-    Private Const FormatVersion As Short = 1
+	Private Const FormatVersion As Short = 1
 
-    Private VSUMpath As String
-    Private Fvsum As System.IO.StreamWriter
-    Private HeadInitialized As Boolean
+	Private VSUMpath As String
+	Private Fvsum As System.IO.StreamWriter
+	Private HeadInitialized As Boolean
 
-    Private VSUMentries As Dictionary(Of String, cVSUMentry)
-    Private VSUMentryList As List(Of String)     'Wird benötigt weil Dictionary nicht sortiert ist
-                                                 'Needed because Dictionary is not sorted
+	Private VSUMentries As Dictionary(Of String, cVSUMentry)
+	Private VSUMentryList As List(Of String)	 'Wird benötigt weil Dictionary nicht sortiert ist
+	'Needed because Dictionary is not sorted
 
-    Private vsumJSON As JSON
-    Private ResList As List(Of Dictionary(Of String, Object))
+	Private vsumJSON As JSON
+	Private ResList As List(Of Dictionary(Of String, Object))
 
 
-    Public Sub New()
-        HeadInitialized = False
-        VSUMpath = ""
-    End Sub
+	Public Sub New()
+		HeadInitialized = False
+		VSUMpath = ""
+	End Sub
 
-    Public Function VSUMhead() As String
-        Dim s As New System.Text.StringBuilder
-        Dim key As String
-        Dim First As Boolean
+	Public Function VSUMhead() As String
+		Dim s As New System.Text.StringBuilder
+		Dim key As String
+		Dim First As Boolean
+
+		First = True
+		For Each key In VSUMentryList
+			If Not First Then s.Append(",")
+			If DEV.AdvFormat Then
+				s.Append(VSUMentries(key).Head)
+			Else
+				s.Append(VSUMentries(key).Head & " " & VSUMentries(key).Unit)
+			End If
+			First = False
+		Next
+
+		Return s.ToString
+
+	End Function
+
+	Public Function VSUMunit() As String
+		Dim s As New System.Text.StringBuilder
+		Dim key As String
+		Dim First As Boolean
+
+		First = True
+		For Each key In VSUMentryList
+			If Not First Then s.Append(",")
+			s.Append(VSUMentries(key).Unit)
+			First = False
+		Next
+
+		Return s.ToString
+
+	End Function
+
+	Public Function VSUMline() As String
+		Dim VSUMentry As cVSUMentry
+		Dim s As New System.Text.StringBuilder
+		Dim t1 As Integer
+		Dim Vquer As Single
+		Dim Squer As Single
+		Dim sum As Double
+		Dim t As Integer
+		Dim key As String
+		Dim First As Boolean
+
+		For Each VSUMentry In VSUMentries.Values
+			VSUMentry.ValueString = Nothing
+		Next
+
+		t1 = MODdata.tDim
+
+		'Vehicle type-independent
+		VSUMentries("\\T").ValueString = (t1 + 1)
+
+		'Length, Speed, Slope
+		If Not VEC.EngOnly Then
 
-        First = True
-        For Each key In VSUMentryList
-            If Not First Then s.Append(",")
-            If DEV.AdvFormat Then
-                s.Append(VSUMentries(key).Head)
-            Else
-            s.Append(VSUMentries(key).Head & " " & VSUMentries(key).Unit)
-            End If
-            First = False
-        Next
-
-        Return s.ToString
-
-    End Function
-
-    Public Function VSUMunit() As String
-        Dim s As New System.Text.StringBuilder
-        Dim key As String
-        Dim First As Boolean
-
-        First = True
-        For Each key In VSUMentryList
-            If Not First Then s.Append(",")
-            s.Append(VSUMentries(key).Unit)
-            First = False
-        Next
-
-        Return s.ToString
-
-    End Function
-
-    Public Function VSUMline() As String
-        Dim VSUMentry As cVSUMentry
-        Dim s As New System.Text.StringBuilder
-        Dim t1 As Integer
-        Dim Vquer As Single
-        Dim Squer As Single
-        Dim sum As Double
-        Dim t As Integer
-        Dim key As String
-        Dim First As Boolean
-
-        For Each VSUMentry In VSUMentries.Values
-            VSUMentry.ValueString = Nothing
-        Next
-
-        t1 = MODdata.tDim
-
-        'Vehicle type-independent
-        VSUMentries("\\T").ValueString = (t1 + 1)
-
-        'Length, Speed, Slope
-        If Not VEC.EngOnly Then
-
-            'Average-Speed. calculation
-            If DRI.Vvorg Then
-                sum = 0
-                For t = 0 To t1
-                    sum += MODdata.Vh.V(t)
-                Next
-                Vquer = 3.6 * sum / (t1 + 1)
-            Squer = (Vquer * (t1 + 1) / 3600)
-
-            VSUMentries("\\S").ValueString = Squer
-                VSUMentries("\\V").ValueString = Vquer
-
-                'altitude change
-                VSUMentries("\\G").ValueString = MODdata.Vh.AltIntp(Vquer * (t1 + 1) / 3.6, False) - MODdata.Vh.AltIntp(0, False)
-            
-            End If
-   
-            'Auxiliary energy consumption
-            If VEC.AuxDef Then
-                For Each key In VEC.AuxPaths.Keys
-                    sum = 0
-                    For t = 0 To t1
-                        sum += MODdata.Paux(key)(t)
-                    Next
-                    VSUMentries("\\Eaux_" & UCase(key)).ValueString = sum / 3600
-                Next
-            End If
+			'Average-Speed. calculation
+			If DRI.Vvorg Then
+				sum = 0
+				For t = 0 To t1
+					sum += MODdata.Vh.V(t)
+				Next
+				Vquer = 3.6 * sum / (t1 + 1)
+				Squer = (Vquer * (t1 + 1) / 3600)
 
+				VSUMentries("\\S").ValueString = Squer
+				VSUMentries("\\V").ValueString = Vquer
 
-        End If
+				'altitude change
+				VSUMentries("\\G").ValueString = MODdata.Vh.AltIntp(Vquer * (t1 + 1) / 3.6, False) - MODdata.Vh.AltIntp(0, False)
 
-        'FC
-        If MODdata.FCerror Then
+			End If
 
-            VSUMentries("FC_h").ValueString = "ERROR"
+			'Auxiliary energy consumption
+			If VEC.AuxDef Then
+				For Each key In VEC.AuxPaths.Keys
+					sum = 0
+					For t = 0 To t1
+						sum += MODdata.Paux(key)(t)
+					Next
+					VSUMentries("\\Eaux_" & UCase(key)).ValueString = sum / 3600
+				Next
+			End If
 
-            If Not VEC.EngOnly Then VSUMentries("FC_km").ValueString = "ERROR"
 
-            If MODdata.FCAUXcSet Then
-                VSUMentries("FC-AUXc_h").ValueString = "ERROR"
-                If Not VEC.EngOnly Then VSUMentries("FC-AUXc_km").ValueString = "ERROR"
-            End If
+		End If
 
-            If Cfg.DeclMode Then
-                VSUMentries("FC-WHTCc_h").ValueString = "ERROR"
-                If Not VEC.EngOnly Then VSUMentries("FC-WHTCc_km").ValueString = "ERROR"
-            End If
+		'FC
+		If MODdata.FCerror Then
 
-        Else
+			VSUMentries("FC_h").ValueString = "ERROR"
 
-            VSUMentries("FC_h").ValueString = MODdata.FCavg
+			If Not VEC.EngOnly Then VSUMentries("FC_km").ValueString = "ERROR"
 
-            If Not VEC.EngOnly And DRI.Vvorg Then
+			If MODdata.FCAUXcSet Then
+				VSUMentries("FC-AUXc_h").ValueString = "ERROR"
+				If Not VEC.EngOnly Then VSUMentries("FC-AUXc_km").ValueString = "ERROR"
+			End If
 
+			If Cfg.DeclMode Then
+				VSUMentries("FC-WHTCc_h").ValueString = "ERROR"
+				If Not VEC.EngOnly Then VSUMentries("FC-WHTCc_km").ValueString = "ERROR"
+			End If
 
-                'AA - Output Bus Auxiliary values to text files
-                If (Not VEC Is Nothing AndAlso VEC.AuxiliaryAssembly <> "CLASSIC") Then
-                    Dim FCgKm As Single = MODdata.AA_TotalCycleFC_Grams(MODdata.AA_TotalCycleFC_Grams.Count - 1) / Squer '[g/km]
-                    VSUMentries("FC_km").ValueString = FCgKm
-                    VSUMentries("FC-Final_km").ValueString = FCgKm
-                    
-                    Dim FCFinallKm As Single = ((MODdata.AA_TotalCycleFC_Litres(MODdata.AA_TotalCycleFC_Litres.Count - 1) * 100) / Squer) '[l/100km]
-                    VSUMentries("FCl_km").ValueString = FCFinallKm
-                    
-                    Dim CO2km As Single = Cfg.CO2perFC * FCgKm   '[g/km]
-                    VSUMentries("CO2_km").ValueString = CO2km
-                    
-                    If VEH.Loading > 0 Then
-                        VSUMentries("CO2_tkm").ValueString = CO2km / (VEH.Loading / 1000) '[g/tkm]
-                        VSUMentries("FCl_tkm").ValueString = FCFinallKm / (VEH.Loading / 1000) '[l/100tkm]
-                    End If
+		Else
 
-                Else
+			VSUMentries("FC_h").ValueString = MODdata.FCavg
 
-                    VSUMentries("FC_km").ValueString = (MODdata.FCavg / Vquer)
+			If Not VEC.EngOnly And DRI.Vvorg Then
 
-                    VSUMentries("FCl_km").ValueString = (100 * MODdata.FCavgFinal / Vquer) / (Cfg.FuelDens * 1000)  '[l/100km]
-                    VSUMentries("CO2_km").ValueString = Cfg.CO2perFC * (MODdata.FCavgFinal / Vquer)   '[g/km]
 
-                    If VEH.Loading > 0 Then
-                        VSUMentries("CO2_tkm").ValueString = (Cfg.CO2perFC * (MODdata.FCavgFinal / Vquer)) / (VEH.Loading / 1000) '[g/tkm]
-                        VSUMentries("FCl_tkm").ValueString = ((100 * MODdata.FCavgFinal / Vquer) / (Cfg.FuelDens * 1000)) / (VEH.Loading / 1000)  '[l/100tkm]
-                    End If
+				'AA - Output Bus Auxiliary values to text files
+				If (Not VEC Is Nothing AndAlso VEC.AuxiliaryAssembly <> "CLASSIC") Then
+					Dim FCgKm As Single = MODdata.AA_TotalCycleFC_Grams(MODdata.AA_TotalCycleFC_Grams.Count - 1) / Squer '[g/km]
+					VSUMentries("FC_km").ValueString = FCgKm
+					VSUMentries("FC-Final_km").ValueString = FCgKm
 
-                    VSUMentries("FC-Final_km").ValueString = (MODdata.FCavgFinal / Vquer)
+					Dim FCFinallKm As Single = ((MODdata.AA_TotalCycleFC_Litres(MODdata.AA_TotalCycleFC_Litres.Count - 1) * 100) / Squer) '[l/100km]
+					VSUMentries("FCl_km").ValueString = FCFinallKm
 
-                End If
+					Dim CO2km As Single = Cfg.CO2perFC * FCgKm	 '[g/km]
+					VSUMentries("CO2_km").ValueString = CO2km
 
-            End If
+					If VEH.Loading > 0 Then
+						VSUMentries("CO2_tkm").ValueString = CO2km / (VEH.Loading / 1000) '[g/tkm]
+						VSUMentries("FCl_tkm").ValueString = FCFinallKm / (VEH.Loading / 1000) '[l/100tkm]
+					End If
 
-            If MODdata.FCAUXcSet Then
-                VSUMentries("FC-AUXc_h").ValueString = MODdata.FCavgAUXc
-                If Not VEC.EngOnly Then VSUMentries("FC-AUXc_km").ValueString = (MODdata.FCavgAUXc / Vquer)
-            End If
+				Else
 
-            If Cfg.DeclMode Then
-                VSUMentries("FC-WHTCc_h").ValueString = MODdata.FCavgWHTCc
-                If Not VEC.EngOnly Then VSUMentries("FC-WHTCc_km").ValueString = (MODdata.FCavgWHTCc / Vquer)
-            End If
+					VSUMentries("FC_km").ValueString = (MODdata.FCavg / Vquer)
 
-        End If
+					VSUMentries("FCl_km").ValueString = (100 * MODdata.FCavgFinal / Vquer) / (Cfg.FuelDens * 1000)	'[l/100km]
+					VSUMentries("CO2_km").ValueString = Cfg.CO2perFC * (MODdata.FCavgFinal / Vquer)	  '[g/km]
 
-        'Power, Revolutions
+					If VEH.Loading > 0 Then
+						VSUMentries("CO2_tkm").ValueString = (Cfg.CO2perFC * (MODdata.FCavgFinal / Vquer)) / (VEH.Loading / 1000) '[g/tkm]
+						VSUMentries("FCl_tkm").ValueString = ((100 * MODdata.FCavgFinal / Vquer) / (Cfg.FuelDens * 1000)) / (VEH.Loading / 1000)  '[l/100tkm]
+					End If
 
-        'Ppos
-        sum = 0
-        For t = 0 To t1
-            sum += Math.Max(0, MODdata.Pe(t))
-        Next
-        VSUMentries("\\Ppos").ValueString = (sum / (t1 + 1))
+					VSUMentries("FC-Final_km").ValueString = (MODdata.FCavgFinal / Vquer)
 
-        'Pneg
-        sum = 0
-        For t = 0 To t1
-            sum += Math.Min(0, MODdata.Pe(t))
-        Next
-        VSUMentries("\\Pneg").ValueString = (sum / (t1 + 1))
+				End If
 
+			End If
 
+			If MODdata.FCAUXcSet Then
+				VSUMentries("FC-AUXc_h").ValueString = MODdata.FCavgAUXc
+				If Not VEC.EngOnly Then VSUMentries("FC-AUXc_km").ValueString = (MODdata.FCavgAUXc / Vquer)
+			End If
 
-        'Only Entire-vehicle (not EngOnly)
+			If Cfg.DeclMode Then
+				VSUMentries("FC-WHTCc_h").ValueString = MODdata.FCavgWHTCc
+				If Not VEC.EngOnly Then VSUMentries("FC-WHTCc_km").ValueString = (MODdata.FCavgWHTCc / Vquer)
+			End If
+
+		End If
+
+		'Power, Revolutions
+
+		'Ppos
+		sum = 0
+		For t = 0 To t1
+			sum += Math.Max(0, MODdata.Pe(t))
+		Next
+		VSUMentries("\\Ppos").ValueString = (sum / (t1 + 1))
+
+		'Pneg
+		sum = 0
+		For t = 0 To t1
+			sum += Math.Min(0, MODdata.Pe(t))
+		Next
+		VSUMentries("\\Pneg").ValueString = (sum / (t1 + 1))
+
+
+
+		'Only Entire-vehicle (not EngOnly)
 		If Not VEC.EngOnly Then
 
 			'PwheelPos
@@ -317,106 +317,106 @@ Class cVSUM
 
 		End If
 
-        'Create Output-string:
-        First = True
+		'Create Output-string:
+		First = True
 
-        For Each key In VSUMentryList
-            If Not First Then s.Append(",")
-            s.Append(VSUMentries(key).ValueString)
-            First = False
-        Next
+		For Each key In VSUMentryList
+			If Not First Then s.Append(",")
+			s.Append(VSUMentries(key).ValueString)
+			First = False
+		Next
 
-        Return s.ToString
+		Return s.ToString
 
-    End Function
+	End Function
 
-    Private Function HeadInit() As Boolean
-        Dim MsgSrc As String
+	Private Function HeadInit() As Boolean
+		Dim MsgSrc As String
 
-        MsgSrc = "SUMALL/Output"
+		MsgSrc = "SUMALL/Output"
 
-        'Open file
-        Try
-            Fvsum = My.Computer.FileSystem.OpenTextFileWriter(VSUMpath, True, FileFormat)
-            Fvsum.AutoFlush = True
-        Catch ex As Exception
-            WorkerMsg(tMsgID.Err, "Cannot access .vsum file (" & VSUMpath & ")", MsgSrc)
-            Return False
-        End Try
+		'Open file
+		Try
+			Fvsum = My.Computer.FileSystem.OpenTextFileWriter(VSUMpath, True, FileFormat)
+			Fvsum.AutoFlush = True
+		Catch ex As Exception
+			WorkerMsg(tMsgID.Err, "Cannot access .vsum file (" & VSUMpath & ")", MsgSrc)
+			Return False
+		End Try
 
-        '*** Header / Units
-        If DEV.AdvFormat Then
-            Fvsum.WriteLine("Job,Input File,Cycle," & VSUMhead())
-            Fvsum.WriteLine("[-],[-],[-]," & VSUMunit())
-        Else
-        Fvsum.WriteLine("Job [-],Input File [-],Cycle [-]," & VSUMhead())
-        End If
+		'*** Header / Units
+		If DEV.AdvFormat Then
+			Fvsum.WriteLine("Job,Input File,Cycle," & VSUMhead())
+			Fvsum.WriteLine("[-],[-],[-]," & VSUMunit())
+		Else
+			Fvsum.WriteLine("Job [-],Input File [-],Cycle [-]," & VSUMhead())
+		End If
 
-        'Close file (will open after each job)
-        Fvsum.Close()
+		'Close file (will open after each job)
+		Fvsum.Close()
 
-        HeadInitialized = True
+		HeadInitialized = True
 
-        Return True
+		Return True
 
-    End Function
+	End Function
 
-    Public Function WriteVSUM(ByVal NrOfRunStr As String, ByVal JobFilename As String, ByVal CycleFilename As String, ByVal AbortedByError As Boolean) As Boolean
-        Dim str As String
-        Dim MsgSrc As String
-        Dim dic As Dictionary(Of String, Object)
-        Dim dic0 As Dictionary(Of String, Object)
-        Dim dic1 As Dictionary(Of String, Object)
-        Dim ls0 As List(Of Dictionary(Of String, Object))
-        Dim key As String
+	Public Function WriteVSUM(ByVal NrOfRunStr As String, ByVal JobFilename As String, ByVal CycleFilename As String, ByVal AbortedByError As Boolean) As Boolean
+		Dim str As String
+		Dim MsgSrc As String
+		Dim dic As Dictionary(Of String, Object)
+		Dim dic0 As Dictionary(Of String, Object)
+		Dim dic1 As Dictionary(Of String, Object)
+		Dim ls0 As List(Of Dictionary(Of String, Object))
+		Dim key As String
 
-        MsgSrc = "SUMALL/Output"
+		MsgSrc = "SUMALL/Output"
 
-        If Not HeadInitialized Then
-            If Not HeadInit() Then Return False
-        End If
+		If Not HeadInitialized Then
+			If Not HeadInit() Then Return False
+		End If
 
-        'JSON
-        dic = New Dictionary(Of String, Object)
+		'JSON
+		dic = New Dictionary(Of String, Object)
 
-        'Open file
-        Try
-            Fvsum = My.Computer.FileSystem.OpenTextFileWriter(VSUMpath, True, FileFormat)
-            Fvsum.AutoFlush = True
-        Catch ex As Exception
-            WorkerMsg(tMsgID.Err, "Cannot access .vsum file (" & VSUMpath & ")", MsgSrc)
-            Return False
-        End Try
+		'Open file
+		Try
+			Fvsum = My.Computer.FileSystem.OpenTextFileWriter(VSUMpath, True, FileFormat)
+			Fvsum.AutoFlush = True
+		Catch ex As Exception
+			WorkerMsg(tMsgID.Err, "Cannot access .vsum file (" & VSUMpath & ")", MsgSrc)
+			Return False
+		End Try
 
-        str = NrOfRunStr & "," & JobFilename & "," & CycleFilename & ","
-        dic.Add("Job", JobFilename)
+		str = NrOfRunStr & "," & JobFilename & "," & CycleFilename & ","
+		dic.Add("Job", JobFilename)
 
 
-        If Cfg.DeclMode Then
-            If Not Declaration.CurrentMission Is Nothing Then dic.Add("Cycle", Declaration.CurrentMission.NameStr)
-            dic.Add("Loading", ConvLoading(Declaration.CurrentLoading))
-        Else
-            dic.Add("Cycle", CycleFilename)
-            dic.Add("Loading", ConvLoading(tLoading.UserDefLoaded))
-        End If
+		If Cfg.DeclMode Then
+			If Not Declaration.CurrentMission Is Nothing Then dic.Add("Cycle", Declaration.CurrentMission.NameStr)
+			dic.Add("Loading", ConvLoading(Declaration.CurrentLoading))
+		Else
+			dic.Add("Cycle", CycleFilename)
+			dic.Add("Loading", ConvLoading(tLoading.UserDefLoaded))
+		End If
 
 
 
-        If AbortedByError Then
-            Fvsum.WriteLine(str & "Aborted due to Error!")
-            dic.Add("AbortedByError", True)
-        Else
-            Fvsum.WriteLine(str & VSUMline())
-            dic.Add("AbortedByError", False)
+		If AbortedByError Then
+			Fvsum.WriteLine(str & "Aborted due to Error!")
+			dic.Add("AbortedByError", True)
+		Else
+			Fvsum.WriteLine(str & VSUMline())
+			dic.Add("AbortedByError", False)
 
-            dic1 = New Dictionary(Of String, Object)
-            For Each key In VSUMentryList
-                dic0 = New Dictionary(Of String, Object)
+			dic1 = New Dictionary(Of String, Object)
+			For Each key In VSUMentryList
+				dic0 = New Dictionary(Of String, Object)
 
-                dic0.Add("Value", VSUMentries(key).ValueString)
-                dic0.Add("Unit", VSUMentries(key).Unit)
+				dic0.Add("Value", VSUMentries(key).ValueString)
+				dic0.Add("Unit", VSUMentries(key).Unit)
 
-                If VSUMentries(key).Multi Then
+				If VSUMentries(key).Multi Then
 
 					If dic1.ContainsKey(VSUMentries(key).Head) Then
 						ls0 = dic1(VSUMentries(key).Head)
@@ -425,41 +425,41 @@ Class cVSUM
 						dic1.Add(VSUMentries(key).Head, ls0)
 					End If
 
-                    ls0.Add(dic0)
+					ls0.Add(dic0)
 
-                Else
+				Else
 
 					dic1.Add(VSUMentries(key).Head, dic0)
 
-                End If
+				End If
 
-            Next
-            dic.Add("Results", dic1)
+			Next
+			dic.Add("Results", dic1)
 
-        End If
+		End If
 
-        ResList.Add(dic)
+		ResList.Add(dic)
 
 
-        'Close file
-        Fvsum.Close()
-        Fvsum = Nothing
+		'Close file
+		Fvsum.Close()
+		Fvsum = Nothing
 
-        Return True
+		Return True
 
-    End Function
+	End Function
 
-    Public Function WriteJSON() As Boolean
+	Public Function WriteJSON() As Boolean
 
-        vsumJSON.Content("Body").add("Results", ResList)
+		vsumJSON.Content("Body").add("Results", ResList)
 
-        Try
-            Return vsumJSON.WriteFile(VSUMpath & ".json")
-        Catch ex As Exception
-            Return False
-        End Try
+		Try
+			Return vsumJSON.WriteFile(VSUMpath & ".json")
+		Catch ex As Exception
+			Return False
+		End Try
 
-    End Function
+	End Function
 
 	Private Sub AddToVSUM(ByVal IDstring As String, ByVal Head As String, ByVal Unit As String, Optional Multi As Boolean = False)
 		If Not VSUMentries.ContainsKey(IDstring) Then
@@ -470,288 +470,288 @@ Class cVSUM
 	End Sub
 
 
-    Public Function Init(ByVal JobFile As String) As Boolean
-        Dim JobFiles As New List(Of String)
-        Dim str As String
-        Dim str1 As String
-        Dim file As New cFile_V3
-        Dim VEC0 As cVECTO
-        Dim MAP0 As cMAP
-        Dim ENG0 As cENG
-        Dim HEVorEVdone As Boolean
-        Dim EVdone As Boolean
-        Dim EngOnly As Boolean
-        Dim NonEngOnly As Boolean
-        Dim VSUMentry As cVSUMentry
-        Dim CylceKin As cCycleKin
-        Dim i1 As Integer
-        Dim i2 As Integer
-        Dim iDim As Integer
-        Dim dic As Dictionary(Of String, Object)
-
-
-        Dim MsgSrc As String
-
-        MsgSrc = "SUMALL/Init"
-
-        'Check if file exists
-        If Not IO.File.Exists(JobFile) Then
-            WorkerMsg(tMsgID.Err, "Job file not found! (" & JobFile & ")", MsgSrc)
-            Return False
-        End If
-
-        'Define Output-path
-        If Cfg.BatchMode Then
-            Select Case UCase(Cfg.BATCHoutpath)
-                Case sKey.JobPath
-                    VSUMpath = fFileWoExt(JobFile) & "_BATCH.vsum"
-                Case Else
-                    VSUMpath = Cfg.BATCHoutpath & fFILE(JobFile, False) & "_BATCH.vsum"
-            End Select
-        Else
-			VSUMpath = fFileWoExt(JobFile) & ".v2.vsum"
-        End If
+	Public Function Init(ByVal JobFile As String) As Boolean
+		Dim JobFiles As New List(Of String)
+		Dim str As String
+		Dim str1 As String
+		Dim file As New cFile_V3
+		Dim VEC0 As cVECTO
+		Dim MAP0 As cMAP
+		Dim ENG0 As cENG
+		Dim HEVorEVdone As Boolean
+		Dim EVdone As Boolean
+		Dim EngOnly As Boolean
+		Dim NonEngOnly As Boolean
+		Dim VSUMentry As cVSUMentry
+		Dim CylceKin As cCycleKin
+		Dim i1 As Integer
+		Dim i2 As Integer
+		Dim iDim As Integer
+		Dim dic As Dictionary(Of String, Object)
+
+
+		Dim MsgSrc As String
+
+		MsgSrc = "SUMALL/Init"
+
+		'Check if file exists
+		If Not IO.File.Exists(JobFile) Then
+			WorkerMsg(tMsgID.Err, "Job file not found! (" & JobFile & ")", MsgSrc)
+			Return False
+		End If
 
-        'Open file
-        Try
-            'Open file
-            Fvsum = My.Computer.FileSystem.OpenTextFileWriter(VSUMpath, False, FileFormat)
-            Fvsum.AutoFlush = True
-        Catch ex As Exception
-            WorkerMsg(tMsgID.Err, "Cannot write to .vsum file (" & VSUMpath & ")", MsgSrc)
-            Return False
-        End Try
+		'Define Output-path
+		If Cfg.BatchMode Then
+			Select Case UCase(Cfg.BATCHoutpath)
+				Case sKey.JobPath
+					VSUMpath = fFileWoExt(JobFile) & "_BATCH.vsum"
+				Case Else
+					VSUMpath = Cfg.BATCHoutpath & fFILE(JobFile, False) & "_BATCH.vsum"
+			End Select
+		Else
+			VSUMpath = fFileWoExt(JobFile) & ".v2.vsum"
+		End If
 
-        'JSON
-        vsumJSON = New JSON
+		'Open file
+		Try
+			'Open file
+			Fvsum = My.Computer.FileSystem.OpenTextFileWriter(VSUMpath, False, FileFormat)
+			Fvsum.AutoFlush = True
+		Catch ex As Exception
+			WorkerMsg(tMsgID.Err, "Cannot write to .vsum file (" & VSUMpath & ")", MsgSrc)
+			Return False
+		End Try
+
+		'JSON
+		vsumJSON = New JSON
+
+		dic = New Dictionary(Of String, Object)
+		dic.Add("CreatedBy", Lic.LicString & " (" & Lic.GUID & ")")
+		dic.Add("Date", Now.ToString)
+		dic.Add("AppVersion", VECTOvers)
+		dic.Add("FileVersion", FormatVersion)
+		vsumJSON.Content.Add("Header", dic)
+		vsumJSON.Content.Add("Body", New Dictionary(Of String, Object))
+		dic = New Dictionary(Of String, Object)
+		dic.Add("Air Density [kg/m3]", Cfg.AirDensity)
+		dic.Add("CO2/FC [-]", Cfg.CO2perFC)
+		dic.Add("Fuel Density [kg/l]", Cfg.FuelDens)
+
+		dic.Add("Distance Correction", Cfg.DistCorr)
+		vsumJSON.Content("Body").add("Settings", dic)
+
+		ResList = New List(Of Dictionary(Of String, Object))
+
+		'Info
+		If DEV.AdvFormat Then
+			Fvsum.WriteLine("VECTO " & VECTOvers)
+			Fvsum.WriteLine(Now.ToString)
+			Fvsum.WriteLine("Input File: " & JobFile)
+		End If
 
-        dic = New Dictionary(Of String, Object)
-        dic.Add("CreatedBy", Lic.LicString & " (" & Lic.GUID & ")")
-        dic.Add("Date", Now.ToString)
-        dic.Add("AppVersion", VECTOvers)
-        dic.Add("FileVersion", FormatVersion)
-        vsumJSON.Content.Add("Header", dic)
-        vsumJSON.Content.Add("Body", New Dictionary(Of String, Object))
-        dic = New Dictionary(Of String, Object)
-        dic.Add("Air Density [kg/m3]", Cfg.AirDensity)
-        dic.Add("CO2/FC [-]", Cfg.CO2perFC)
-        dic.Add("Fuel Density [kg/l]", Cfg.FuelDens)
+		'Close file (will open after each job)
+		Fvsum.Close()
 
-        dic.Add("Distance Correction", Cfg.DistCorr)
-        vsumJSON.Content("Body").add("Settings", dic)
+		'Add file to signing list
+		Lic.FileSigning.AddFile(VSUMpath)
+		Lic.FileSigning.AddFile(VSUMpath & ".json")
 
-        ResList = New List(Of Dictionary(Of String, Object))
 
-        'Info
-        If DEV.AdvFormat Then
-            Fvsum.WriteLine("VECTO " & VECTOvers)
-            Fvsum.WriteLine(Now.ToString)
-            Fvsum.WriteLine("Input File: " & JobFile)
-        End If
+		VSUMentries = New Dictionary(Of String, cVSUMentry)
+		VSUMentryList = New List(Of String)
 
-        'Close file (will open after each job)
-        Fvsum.Close()
 
-        'Add file to signing list
-        Lic.FileSigning.AddFile(VSUMpath)
-        Lic.FileSigning.AddFile(VSUMpath & ".json")
+		For Each str In JobFileList
+			JobFiles.Add(fFileRepl(str))
+		Next
 
 
-        VSUMentries = New Dictionary(Of String, cVSUMentry)
-        VSUMentryList = New List(Of String)
+		'********************** Create VSUM-Entries '**********************
+		EVdone = False
+		HEVorEVdone = False
+		EngOnly = False
+		NonEngOnly = False
 
+		'Vehicle type-independent
+		AddToVSUM("\\T", "time", "[s]")
 
-        For Each str In JobFileList
-            JobFiles.Add(fFileRepl(str))
-        Next
+		For Each str In JobFiles
 
+			VEC0 = New cVECTO
 
-        '********************** Create VSUM-Entries '**********************
-        EVdone = False
-        HEVorEVdone = False
-        EngOnly = False
-        NonEngOnly = False
+			VEC0.FilePath = str
 
-        'Vehicle type-independent
-        AddToVSUM("\\T", "time", "[s]")
+			Try
+				If Not VEC0.ReadFile Then
+					WorkerMsg(tMsgID.Err, "Can't read .vecto file '" & str & "' !", MsgSrc)
+					Return False
+				End If
+			Catch ex As Exception
+				WorkerMsg(tMsgID.Err, "File read error! (" & str & ")", MsgSrc)
+				Return False
+			End Try
 
-        For Each str In JobFiles
+			If VEC0.EngOnly Then
 
-            VEC0 = New cVECTO
+				If Not EngOnly Then
 
-            VEC0.FilePath = str
+					'nothing...
 
-            Try
-                If Not VEC0.ReadFile Then
-                    WorkerMsg(tMsgID.Err, "Can't read .vecto file '" & str & "' !", MsgSrc)
-                    Return False
-                End If
-            Catch ex As Exception
-                WorkerMsg(tMsgID.Err, "File read error! (" & str & ")", MsgSrc)
-                Return False
-            End Try
+					EngOnly = True
 
-            If VEC0.EngOnly Then
+				End If
 
-                If Not EngOnly Then
+			Else
 
-                    'nothing...
+				If Not NonEngOnly Then
 
-                    EngOnly = True
+					AddToVSUM("\\S", "distance", "[km]")
+					AddToVSUM("\\V", "speed", "[km/h]")
+					AddToVSUM("\\G", "∆altitude", "[m]")
 
-                End If
+					NonEngOnly = True
 
-            Else
+				End If
 
-                If Not NonEngOnly Then
+				'Auxiliary energy consumption
+				If VEC0.AuxDef Then
+					For Each str1 In VEC0.AuxPaths.Keys
+						AddToVSUM("\\Eaux_" & UCase(str1), "Eaux_" & str1, "[kWh]")
+					Next
+				End If
 
-                    AddToVSUM("\\S", "distance", "[km]")
-                    AddToVSUM("\\V", "speed", "[km/h]")
-                    AddToVSUM("\\G", "∆altitude", "[m]")
+			End If
 
-                    NonEngOnly = True
+			'Conventional vehicles ...
+			AddToVSUM("\\Ppos", "Ppos", "[kW]")
+			AddToVSUM("\\Pneg", "Pneg", "[kW]")
 
-                End If
+			'From the Engine-Map
+			ENG0 = New cENG
+			ENG0.FilePath = VEC0.PathENG
 
-                'Auxiliary energy consumption
-                If VEC0.AuxDef Then
-                    For Each str1 In VEC0.AuxPaths.Keys
-                        AddToVSUM("\\Eaux_" & UCase(str1), "Eaux_" & str1, "[kWh]")
-                    Next
-                End If
+			Try
+				If Not ENG0.ReadFile Then
+					WorkerMsg(tMsgID.Err, "File read error! (" & VEC0.PathENG & ")", MsgSrc)
+					Return False
+				End If
+			Catch ex As Exception
+				WorkerMsg(tMsgID.Err, "File read error! (" & VEC0.PathENG & ")", MsgSrc)
+				Return False
+			End Try
 
-            End If
+			MAP0 = New cMAP
+			MAP0.FilePath = ENG0.PathMAP
 
-            'Conventional vehicles ...
-            AddToVSUM("\\Ppos", "Ppos", "[kW]")
-            AddToVSUM("\\Pneg", "Pneg", "[kW]")
-
-            'From the Engine-Map
-            ENG0 = New cENG
-            ENG0.FilePath = VEC0.PathENG
-
-            Try
-                If Not ENG0.ReadFile Then
-                    WorkerMsg(tMsgID.Err, "File read error! (" & VEC0.PathENG & ")", MsgSrc)
-                    Return False
-                End If
-            Catch ex As Exception
-                WorkerMsg(tMsgID.Err, "File read error! (" & VEC0.PathENG & ")", MsgSrc)
-                Return False
-            End Try
-
-            MAP0 = New cMAP
-            MAP0.FilePath = ENG0.PathMAP
-
-            Try
-                If Not MAP0.ReadFile(True) Then
-                    WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc)
-                    Return False
-                End If
-            Catch ex As Exception
-                WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc)
-                Return False
-            End Try
+			Try
+				If Not MAP0.ReadFile(True) Then
+					WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc)
+					Return False
+				End If
+			Catch ex As Exception
+				WorkerMsg(tMsgID.Err, "File read error! (" & ENG0.PathMAP & ")", MsgSrc)
+				Return False
+			End Try
 
 			AddToVSUM("FC_h", "FC-Map", "[g/h]", True)
 			AddToVSUM("FC-AUXc_h", "FC-AUXc", "[g/h]", True)
 			AddToVSUM("FC-WHTCc_h", "FC-WHTCc", "[g/h]", True)
 
-            If Not VEC0.EngOnly Then
+			If Not VEC0.EngOnly Then
 
 				AddToVSUM("FC_km", "FC-Map", "[g/km]", True)
 				AddToVSUM("FC-AUXc_km", "FC-AUXc", "[g/km]", True)
 				AddToVSUM("FC-WHTCc_km", "FC-WHTCc", "[g/km]", True)
 
-                AddToVSUM("CO2_km", "CO2", "[g/km]", True)
-                AddToVSUM("CO2_tkm", "CO2", "[g/tkm]", True)
+				AddToVSUM("CO2_km", "CO2", "[g/km]", True)
+				AddToVSUM("CO2_tkm", "CO2", "[g/tkm]", True)
 
-                AddToVSUM("FC-Final_km", "FC-Final", "[g/km]", True)
-                AddToVSUM("FCl_km", "FC-Final", "[l/100km]", True)
-                AddToVSUM("FCl_tkm", "FC-Final", "[l/100tkm]", True)
+				AddToVSUM("FC-Final_km", "FC-Final", "[g/km]", True)
+				AddToVSUM("FCl_km", "FC-Final", "[l/100km]", True)
+				AddToVSUM("FCl_tkm", "FC-Final", "[l/100tkm]", True)
 
-            End If
+			End If
 
-        Next
+		Next
 
 
-        If EngOnly Then
+		If EngOnly Then
 
-            'currently nothing
+			'currently nothing
 
-        End If
+		End If
 
-        If NonEngOnly Then
+		If NonEngOnly Then
 
 			'Vehicle-related fields
 			AddToVSUM("\\PwheelPos", "PwheelPos", "[kW]")
-            AddToVSUM("\\Pbrake", "P_brake_loss", "[kW]")
-            AddToVSUM("\\EposICE", "EposICE", "[kWh]")
-            AddToVSUM("\\EnegICE", "EnegICE", "[kWh]")
-            AddToVSUM("\\Eair", "Eair", "[kWh]")
-            AddToVSUM("\\Eroll", "Eroll", "[kWh]")
-            AddToVSUM("\\Egrad", "Egrad", "[kWh]")
-            AddToVSUM("\\Eacc", "Eacc", "[kWh]")
-            AddToVSUM("\\Eaux", "Eaux", "[kWh]")
-            AddToVSUM("\\Ebrake", "Ebrake", "[kWh]")
-            AddToVSUM("\\Etransm", "Etransm", "[kWh]")
-            AddToVSUM("\\Eretarder", "Eretarder", "[kWh]")
-            AddToVSUM("\\Etorqueconv", "Etorqueconv", "[kWh]")
-            AddToVSUM("\\Mass", "Mass", "[kg]")
-            AddToVSUM("\\Loading", "Loading", "[kg]")
-
-            'CylceKin
-            CylceKin = New cCycleKin
-            For Each VSUMentry In CylceKin.VSUMentries
+			AddToVSUM("\\Pbrake", "P_brake_loss", "[kW]")
+			AddToVSUM("\\EposICE", "EposICE", "[kWh]")
+			AddToVSUM("\\EnegICE", "EnegICE", "[kWh]")
+			AddToVSUM("\\Eair", "Eair", "[kWh]")
+			AddToVSUM("\\Eroll", "Eroll", "[kWh]")
+			AddToVSUM("\\Egrad", "Egrad", "[kWh]")
+			AddToVSUM("\\Eacc", "Eacc", "[kWh]")
+			AddToVSUM("\\Eaux", "Eaux", "[kWh]")
+			AddToVSUM("\\Ebrake", "Ebrake", "[kWh]")
+			AddToVSUM("\\Etransm", "Etransm", "[kWh]")
+			AddToVSUM("\\Eretarder", "Eretarder", "[kWh]")
+			AddToVSUM("\\Etorqueconv", "Etorqueconv", "[kWh]")
+			AddToVSUM("\\Mass", "Mass", "[kg]")
+			AddToVSUM("\\Loading", "Loading", "[kg]")
+
+			'CylceKin
+			CylceKin = New cCycleKin
+			For Each VSUMentry In CylceKin.VSUMentries
 				AddToVSUM("\\" & VSUMentry.Head, VSUMentry.Head, VSUMentry.Unit)
-            Next
-
-        End If
-
-        If( Not VEC is Nothing AndAlso VEC.AuxiliaryAssembly<>"CLASSIC") then
-        'Advanced Auxiliaries I.E. Bus Auxiliaries.
-        AddToVSUM("\\AA_FC_LHR","AA FC L/H","L/R",false)
-        AddToVSUM("\\AA_FC_GHR","AA FC G/H","G/R",false)
-
-
-
-        End if
-
-        'Sort
-        iDim = VSUMentryList.Count - 1
-
-        For i1 = 0 To iDim - 1
-            str = VSUMentries(VSUMentryList(i1)).Head
-            For i2 = i1 + 1 To iDim
-                If VSUMentries(VSUMentryList(i2)).Head = str Then
-                    VSUMentryList.Insert(i1 + 1, VSUMentryList(i2))
-                    VSUMentryList.RemoveAt(i2 + 1)
-                End If
-            Next
-        Next
-
-        'Sort Aux
-        For i1 = 0 To iDim - 1
-            str = VSUMentries(VSUMentryList(i1)).Head
-            If str.Length > 4 AndAlso Left(str, 4) = "Eaux" Then
-                For i2 = i1 + 1 To iDim
-                    If VSUMentries(VSUMentryList(i2)).Head.Length > 4 AndAlso Left(VSUMentries(VSUMentryList(i2)).Head, 4) = "Eaux" Then
-                        VSUMentryList.Insert(i1 + 1, VSUMentryList(i2))
-                        VSUMentryList.RemoveAt(i2 + 1)
-                    End If
-                Next
-            End If
-        Next
+			Next
 
-        Return True
+		End If
 
-    End Function
+		If (Not VEC Is Nothing AndAlso VEC.AuxiliaryAssembly <> "CLASSIC") Then
+			'Advanced Auxiliaries I.E. Bus Auxiliaries.
+			AddToVSUM("\\AA_FC_LHR", "AA FC L/H", "L/R", False)
+			AddToVSUM("\\AA_FC_GHR", "AA FC G/H", "G/R", False)
 
-    Public ReadOnly Property VSUMfile As String
-        Get
-            Return VSUMpath
-        End Get
-    End Property
+
+
+		End If
+
+		'Sort
+		iDim = VSUMentryList.Count - 1
+
+		For i1 = 0 To iDim - 1
+			str = VSUMentries(VSUMentryList(i1)).Head
+			For i2 = i1 + 1 To iDim
+				If VSUMentries(VSUMentryList(i2)).Head = str Then
+					VSUMentryList.Insert(i1 + 1, VSUMentryList(i2))
+					VSUMentryList.RemoveAt(i2 + 1)
+				End If
+			Next
+		Next
+
+		'Sort Aux
+		For i1 = 0 To iDim - 1
+			str = VSUMentries(VSUMentryList(i1)).Head
+			If str.Length > 4 AndAlso Left(str, 4) = "Eaux" Then
+				For i2 = i1 + 1 To iDim
+					If VSUMentries(VSUMentryList(i2)).Head.Length > 4 AndAlso Left(VSUMentries(VSUMentryList(i2)).Head, 4) = "Eaux" Then
+						VSUMentryList.Insert(i1 + 1, VSUMentryList(i2))
+						VSUMentryList.RemoveAt(i2 + 1)
+					End If
+				Next
+			End If
+		Next
+
+		Return True
+
+	End Function
+
+	Public ReadOnly Property VSUMfile As String
+		Get
+			Return VSUMpath
+		End Get
+	End Property
 
 End Class
 
diff --git a/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb b/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb
index d63afd32875b2e4939d6a00f602eaf588098c983..95b2442c5cfd569da918fc9d6ace3f08c2ffe95f 100644
--- a/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb
+++ b/VECTOAux/VectoAuxiliaries/AdvancedAuxiliaries.vb
@@ -18,14 +18,13 @@ Imports VectoAuxiliaries.DownstreamModules
 Imports System.Windows.Forms
 Imports TUGraz.VectoCommon.Utils
 
+<Assembly: InternalsVisibleTo("VectoCore")> 
 
 ''' <summary>
 ''' Main entry point for the advanced auxiliary module. 
 ''' This class represents slide number 17 titled Calculations of Cycle FC accounting for Smart Auxiliaries.
 ''' </summary>
 ''' <remarks></remarks>
-<Assembly: InternalsVisibleTo("VectoCore")> 
-
 Public Class AdvancedAuxiliaries
 	Implements IAdvancedAuxiliaries
 
diff --git a/VECTOAux/VectoAuxiliaries/DownstreamModules/M10.vb b/VECTOAux/VectoAuxiliaries/DownstreamModules/M10.vb
index 1eb3be4564cbd8e64dbd2a6d47e03784f6623c49..9dbfca19b46d104e13f8dc37a3d3aa047ca57e76 100644
--- a/VECTOAux/VectoAuxiliaries/DownstreamModules/M10.vb
+++ b/VECTOAux/VectoAuxiliaries/DownstreamModules/M10.vb
@@ -10,11 +10,7 @@
 ' See the LICENSE.txt for the specific language governing permissions and limitations.
 
 Imports TUGraz.VectoCommon.Utils
-Imports TUGraz.VectoCore.Utils
-Imports VectoAuxiliaries.Electrics
 Imports VectoAuxiliaries.Pneumatics
-Imports VectoAuxiliaries.Hvac
-Imports VectoAuxiliaries.DownstreamModules
 
 Namespace DownstreamModules
 	Public Class M10
diff --git a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
index 785a09dbb4774ba971d70b90d8cbedcdc255b46d..18411c284f903f28f2ec4a691ea4397ed7e2919a 100644
--- a/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/DeclarationInputData.cs
@@ -83,7 +83,7 @@ namespace TUGraz.VectoCommon.InputData
 		/// cf. VECTO Input Parameters.xlsx
 		/// </summary>
 		Kilogram CurbWeightChassis { get; }
-
+		
 		/// <summary>
 		/// P041  Max. vehicle weight
 		/// cf. VECTO Input Parameters.xlsx
@@ -96,11 +96,11 @@ namespace TUGraz.VectoCommon.InputData
 		/// </summary>
 		SquareMeter AirDragArea { get; } // without trailer
 
-		/// <summary>
-		/// P117  Powered axle tyres/rims
-		/// cf. VECTO Input Parameters.xlsx
-		/// </summary>
-		string Rim { get; }
+		///// <summary>
+		///// P117  Powered axle tyres/rims
+		///// cf. VECTO Input Parameters.xlsx
+		///// </summary>
+		//string Rim { get; }  // deprecated
 
 		/// <summary>
 		/// parameters for every axle
@@ -134,12 +134,24 @@ namespace TUGraz.VectoCommon.InputData
 
 	public interface IAngularGearInputData : IComponentInputData
 	{
+		/// <summary>
+		/// P180
+		/// </summary>
 		AngularGearType Type { get; }
 
+		/// <summary>
+		/// P176
+		/// </summary>
 		double Ratio { get; }
 
+		/// <summary>
+		/// P173, P174, P175
+		/// </summary>
 		DataTable LossMap { get; }
 
+		/// <summary>
+		/// P177
+		/// </summary>
 		double Efficiency { get; }
 	}
 
@@ -210,11 +222,16 @@ namespace TUGraz.VectoCommon.InputData
 		/// </summary>
 		double Efficiency { get; }
 
+		///// <summary>
+		///// P145
+		///// cf. VECTO Input Parameters.xlsx
+		///// </summary>
+		//DataTable FullLoadCurve { get; } // deprecated
+
 		/// <summary>
-		/// P145
-		/// cf. VECTO Input Parameters.xlsx
+		/// P157
 		/// </summary>
-		DataTable FullLoadCurve { get; }
+		NewtonMeter MaxTorque { get; }
 
 		/// <summary>
 		/// P082
@@ -252,27 +269,8 @@ namespace TUGraz.VectoCommon.InputData
 		double Efficiency { get; }
 	}
 
-	public interface ITorqueConverterInputData
+	public interface ITorqueConverterDeclarationInputData
 	{
-		/// <summary>
-		/// P090
-		/// cf. VECTO Input Parameters.xlsx
-		/// </summary>
-		bool Enabled { get; }
-
-		/// <summary>
-		/// P092
-		/// cf. VECTO Input Parameters.xlsx
-		/// </summary>
-		// ReSharper disable once InconsistentNaming
-		PerSecond ReferenceRPM { get; }
-
-		/// <summary>
-		/// P127
-		/// cf. VECTO Input Parameters.xlsx
-		/// </summary>
-		KilogramSquareMeter Inertia { get; }
-
 		/// <summary>
 		/// P091
 		/// P099, P100, P101
diff --git a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
index 823986e91539a882b4d3ed297e0b8a71633ff8eb..38d30a59b8533fd2e06ed28b93a4265c00f2d93a 100644
--- a/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/EngineeringInputData.cs
@@ -171,7 +171,7 @@ namespace TUGraz.VectoCommon.InputData
 		/// P090, P091, P092, P127
 		/// cf. VECTO Input Parameters.xlsx
 		/// </summary>
-		ITorqueConverterInputData TorqueConverter { get; }
+		ITorqueConverterEngineeringInputData TorqueConverter { get; }
 
 		[Required, SIRange(0, double.MaxValue)]
 		Second DownshiftAferUpshiftDelay { get; }
@@ -183,6 +183,28 @@ namespace TUGraz.VectoCommon.InputData
 		MeterPerSquareSecond UpshiftMinAcceleration { get; }
 	}
 
+	public interface ITorqueConverterEngineeringInputData : ITorqueConverterDeclarationInputData
+	{
+		///// <summary>
+		///// P090
+		///// cf. VECTO Input Parameters.xlsx
+		///// </summary>
+		//bool Enabled { get; }   // deprecated
+
+		/// <summary>
+		/// P092
+		/// cf. VECTO Input Parameters.xlsx
+		/// </summary>
+		// ReSharper disable once InconsistentNaming
+		PerSecond ReferenceRPM { get; }
+
+		/// <summary>
+		/// P127
+		/// cf. VECTO Input Parameters.xlsx
+		/// </summary>
+		KilogramSquareMeter Inertia { get; }
+	}
+
 	public interface IEngineEngineeringInputData : IEngineDeclarationInputData
 	{
 		/// <summary>
@@ -292,6 +314,11 @@ namespace TUGraz.VectoCommon.InputData
 
 	public interface IAuxiliaryEngineeringInputData : IAuxiliaryDeclarationInputData
 	{
+		/// <summary>
+		/// either mapping or constant
+		/// </summary>
+		AuxiliaryDemandType AuxiliaryType { get; }
+
 		/// <summary>
 		/// P022  Aux-InputFile: transmission ratio
 		/// cf. VECTO Input Parameters.xlsx
@@ -315,5 +342,11 @@ namespace TUGraz.VectoCommon.InputData
 		/// cf. VECTO Input Parameters.xlsx
 		/// </summary>
 		DataTable DemandMap { get; }
+
+		/// <summary>
+		/// P178
+		/// additional constant auxiliary load, similar to Padd; not specified in the cycle but as auxiliary
+		/// </summary>
+		Watt ConstantPowerDemand { get; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
index d62df7a117cb7b10a68b5fa0405d82fd345dd3c3..9c3676c1bc4678808066f3a8edec342b76cfa894 100644
--- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
+++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs
@@ -41,6 +41,8 @@ namespace TUGraz.VectoCommon.InputData
 
 		IGearboxDeclarationInputData GearboxInputData { get; }
 
+		ITorqueConverterDeclarationInputData TorqueConverterInputData { get; }
+
 		IAxleGearInputData AxleGearInputData { get; }
 
 		IAngularGearInputData AngularGearInputData { get; }
@@ -62,6 +64,8 @@ namespace TUGraz.VectoCommon.InputData
 
 		IGearboxEngineeringInputData GearboxInputData { get; }
 
+		ITorqueConverterEngineeringInputData TorqueConverterInputData { get; }
+
 		IAxleGearInputData AxleGearInputData { get; }
 
 		IAngularGearInputData AngularGearInputData { get; }
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/AuxiliaryDemandType.cs b/VectoCommon/VectoCommon/Models/AuxiliaryDemandType.cs
similarity index 96%
rename from VectoCore/VectoCore/Models/Simulation/Data/AuxiliaryDemandType.cs
rename to VectoCommon/VectoCommon/Models/AuxiliaryDemandType.cs
index 9a54347de0ecce6f5492c925bcb706e5684fd59f..178755547f98656f9f7e935d7dffe6dd8efd825e 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/AuxiliaryDemandType.cs
+++ b/VectoCommon/VectoCommon/Models/AuxiliaryDemandType.cs
@@ -29,7 +29,7 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-namespace TUGraz.VectoCore.Models.Simulation.Data
+namespace TUGraz.VectoCommon.Models
 {
 	public enum AuxiliaryDemandType
 	{
diff --git a/VectoCommon/VectoCommon/Models/RetarderType.cs b/VectoCommon/VectoCommon/Models/RetarderType.cs
index 5094c03963974c4735e7254e073415fdf98545b3..cf17f5789741907cb96225e1f04d1037bfc58905 100644
--- a/VectoCommon/VectoCommon/Models/RetarderType.cs
+++ b/VectoCommon/VectoCommon/Models/RetarderType.cs
@@ -34,8 +34,9 @@ namespace TUGraz.VectoCommon.Models
 	public enum RetarderType
 	{
 		None,
-		Primary,
-		Secondary,
+		TransmissionInputRetarder,
+		TransmissionOutputRetarder,
+		EngineRetarder,
 		LossesIncludedInTransmission
 	}
 }
\ No newline at end of file
diff --git a/VectoCommon/VectoCommon/Utils/EnumHelper.cs b/VectoCommon/VectoCommon/Utils/EnumHelper.cs
index 51dd4b8ae512393b314e9472a0f933b353882610..ae34734bb61c823079c577cc6854f99e8c631a4a 100644
--- a/VectoCommon/VectoCommon/Utils/EnumHelper.cs
+++ b/VectoCommon/VectoCommon/Utils/EnumHelper.cs
@@ -33,6 +33,7 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.CompilerServices;
+using System.Text.RegularExpressions;
 
 namespace TUGraz.VectoCommon.Utils
 {
@@ -40,7 +41,7 @@ namespace TUGraz.VectoCommon.Utils
 	{
 		public static T ParseEnum<T>(this string s, bool ignoreCase = true)
 		{
-			return (T)Enum.Parse(typeof(T), s.RemoveWhitespace(), ignoreCase);
+			return (T)Enum.Parse(typeof(T), Regex.Replace(s, @"\s+", ""), ignoreCase);
 		}
 
 		public static IEnumerable<T> GetValues<T>()
diff --git a/VectoCommon/VectoCommon/Utils/VectoMath.cs b/VectoCommon/VectoCommon/Utils/VectoMath.cs
index ce8a82f79b924cba6fcd01ff4b3e7a5bc146fcdb..d7422f0806f899f5030573d655e420a217e3ccc6 100644
--- a/VectoCommon/VectoCommon/Utils/VectoMath.cs
+++ b/VectoCommon/VectoCommon/Utils/VectoMath.cs
@@ -35,9 +35,8 @@ using System.Diagnostics;
 using System.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Utils;
 
-namespace TUGraz.VectoCore.Utils
+namespace TUGraz.VectoCommon.Utils
 {
 	/// <summary>
 	/// Provides helper methods for mathematical functions.
diff --git a/VectoCommon/VectoCommon/VectoCommon.csproj b/VectoCommon/VectoCommon/VectoCommon.csproj
index 70e05745b91fa79618327184b299fdedf019fdec..0a9080e74cc13e3127d0b6da3f552eb0f6ca4533 100644
--- a/VectoCommon/VectoCommon/VectoCommon.csproj
+++ b/VectoCommon/VectoCommon/VectoCommon.csproj
@@ -50,6 +50,7 @@
     <Compile Include="InputData\EngineeringInputData.cs" />
     <Compile Include="InputData\IInputDataProvider.cs" />
     <Compile Include="InputData\IntegrityStatus.cs" />
+    <Compile Include="Models\AuxiliaryDemandType.cs" />
     <Compile Include="Models\AngularGearType.cs" />
     <Compile Include="Models\AuxiliaryModel.cs" />
     <Compile Include="Models\AxleConfiguration.cs" />
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
index 7522a855aac3a954aeaac866d2efff83c858386f..692ab39d2edb7bb06c497bab775ad82e1f45f5bf 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs
@@ -69,7 +69,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	///		]
 	/// }
 	// ReSharper disable once InconsistentNaming
-	public class JSONGearboxDataV5 : JSONFile, IGearboxEngineeringInputData, IAxleGearInputData, ITorqueConverterInputData
+	public class JSONGearboxDataV5 : JSONFile, IGearboxEngineeringInputData, IAxleGearInputData,
+		ITorqueConverterEngineeringInputData
 	{
 		public JSONGearboxDataV5(JObject data, string filename) : base(data, filename) {}
 
@@ -148,9 +149,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 					var inputData = new TransmissionInputData {
 						Gear = i,
 						Ratio = gear.GetEx<double>(JsonKeys.Gearbox_Gear_Ratio),
-						FullLoadCurve =
-							ReadTableData(gear.GetEx<string>(JsonKeys.Gearbox_Gear_FullLoadCurveFile), string.Format("Gear {0} FLD", i),
-								false),
+						MaxTorque = gear["MaxTorque"] != null ? gear["MaxTorque"].Value<double>().SI<NewtonMeter>() : null,
 						LossMap =
 							gear[JsonKeys.Gearbox_Gear_LossMapFile] != null
 								? ReadTableData(gear.GetEx<string>(JsonKeys.Gearbox_Gear_LossMapFile), string.Format("Gear {0} LossMap", i))
@@ -205,7 +204,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return Body.GetEx<double>(JsonKeys.Gearbox_StartTorqueReserve) / 100.0; }
 		}
 
-		public virtual ITorqueConverterInputData TorqueConverter
+		public virtual ITorqueConverterEngineeringInputData TorqueConverter
 		{
 			get { return this; }
 		}
@@ -244,14 +243,15 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#region ITorqueConverterInputData
 
-		public virtual bool Enabled
-		{
-			get
-			{
-				return false;
-				// TODO mk-2016-05-09: JSON ITorqueConverterInputData.Enabled always true --> as soon as TC is implemented, set to correct value!
-			}
-		}
+		// deprecated: AT transmission has to have a torque converter. 
+		//public virtual bool Enabled
+		//{
+		//	get
+		//	{
+		//		return false;
+		//		// TODO mk-2016-05-09: JSON ITorqueConverterInputData.Enabled always true --> as soon as TC is implemented, set to correct value!
+		//	}
+		//}
 
 		public virtual PerSecond ReferenceRPM
 		{
@@ -274,7 +274,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			}
 		}
 
-		KilogramSquareMeter ITorqueConverterInputData.Inertia
+		KilogramSquareMeter ITorqueConverterEngineeringInputData.Inertia
 		{
 			get
 			{
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index b3901d1f6dc20b76b3231df2b80b5554936ac5bb..f3e79e02a1a81b8b88af2ce30ff93908fd978367 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -111,6 +111,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 	{
 		protected IGearboxEngineeringInputData Gearbox;
 		protected IAxleGearInputData AxleGear;
+		protected ITorqueConverterEngineeringInputData TorqueConverter;
 		public IAngularGearInputData AngularGear;
 		protected IEngineEngineeringInputData Engine;
 		protected IVehicleEngineeringInputData VehicleData;
@@ -128,6 +129,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 				}
 
 				AxleGear = Gearbox as IAxleGearInputData;
+				TorqueConverter = Gearbox as ITorqueConverterEngineeringInputData;
 
 				Engine = JSONInputDataFactory.ReadEngine(
 					Path.Combine(BasePath, Body.GetEx(JsonKeys.Vehicle_EngineFile).Value<string>()));
@@ -165,6 +167,22 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 			get { return GearboxInputData; }
 		}
 
+		ITorqueConverterDeclarationInputData IDeclarationInputDataProvider.TorqueConverterInputData
+		{
+			get { return TorqueConverterInputData; }
+		}
+
+		public ITorqueConverterEngineeringInputData TorqueConverterInputData
+		{
+			get
+			{
+				if (TorqueConverter == null) {
+					throw new InvalidFileFormatException("TorqueConverterData not found");
+				}
+				return TorqueConverter;
+			}
+		}
+
 		IDeclarationJobInputData IDeclarationInputDataProvider.JobInputData()
 		{
 			return JobInputData();
@@ -449,7 +467,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 				var auxData = new AuxiliaryDataInputData {
 					ID = aux.GetEx<string>("ID"),
 					Type = aux.GetEx<string>("Type"),
-					Technology = aux.GetEx<string>("Technology")
+					Technology = aux.GetEx<string>("Technology"),
 				};
 				if (aux["TechList"] != null) {
 					auxData.TechList = aux["TechList"].Select(x => x.ToString()).ToList(); //  .Select(x => x.ToString).ToArray();
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
index 8eed4136237b989b6dc397bbae616437b2d79918..6263b3a1eef2d730a0472127c4a45c88377274e5 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs
@@ -34,6 +34,7 @@ using System.Collections.Generic;
 using System.Data;
 using System.Linq;
 using Newtonsoft.Json.Linq;
+using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
@@ -148,10 +149,19 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 		{
 			get
 			{
-				return
-					(RetarderType)
-						Enum.Parse(typeof(RetarderType),
-							Body.GetEx(JsonKeys.Vehicle_Retarder).GetEx<string>(JsonKeys.Vehicle_Retarder_Type), true);
+				var retarderType = Body.GetEx(JsonKeys.Vehicle_Retarder).GetEx<string>(JsonKeys.Vehicle_Retarder_Type);
+				try {
+					return retarderType.ParseEnum<RetarderType>();
+				} catch (Exception) {
+					switch (retarderType.ToLower()) {
+						case "primary":
+							return RetarderType.TransmissionInputRetarder;
+						case "secondary":
+							return RetarderType.TransmissionOutputRetarder;
+						default:
+							throw new VectoException("Unknown retarder type {0}", retarderType);
+					}
+				}
 			}
 		}
 
diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs
index a399887f6b3b8b54ccd40224cd5169b476ca7567..a142e60497c3d61b6f75f6634f05c67894237c12 100644
--- a/VectoCore/VectoCore/InputData/Impl/InputData.cs
+++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs
@@ -91,7 +91,7 @@ namespace TUGraz.VectoCore.InputData.Impl
 
 		public double Efficiency { get; internal set; }
 
-		public DataTable FullLoadCurve { get; internal set; }
+		public NewtonMeter MaxTorque { get; internal set; }
 
 		public DataTable ShiftPolygon { get; internal set; }
 
@@ -138,6 +138,14 @@ namespace TUGraz.VectoCore.InputData.Impl
 
 	public class AuxiliaryDataInputData : IAuxiliaryEngineeringInputData
 	{
+		public AuxiliaryDataInputData()
+		{
+			AuxiliaryType = AuxiliaryDemandType.Mapping;
+			ConstantPowerDemand = 0.SI<Watt>();
+		}
+
+		public AuxiliaryDemandType AuxiliaryType { get; internal set; }
+
 		public bool SavedInDeclarationMode { get; internal set; }
 
 		public string ID { get; internal set; }
@@ -155,5 +163,7 @@ namespace TUGraz.VectoCore.InputData.Impl
 		public double EfficiencyToSupply { get; internal set; }
 
 		public DataTable DemandMap { get; internal set; }
+
+		public Watt ConstantPowerDemand { get; internal set; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/AccelerationCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/AccelerationCurveReader.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1319d7c684457f3e809edbc7884552c34d31edfe
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/AccelerationCurveReader.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Data
+{
+	public class AccelerationCurveReader
+	{
+		public static AccelerationCurveData ReadFromStream(Stream stream)
+		{
+			var data = VectoCSVFile.ReadStream(stream);
+			return Create(data);
+		}
+
+		public static AccelerationCurveData ReadFromFile(string fileName)
+		{
+			try {
+				var data = VectoCSVFile.Read(fileName);
+				return Create(data);
+			} catch (Exception ex) {
+				throw new VectoException("ERROR while reading AccelerationCurve File: " + ex.Message);
+			}
+		}
+
+		internal static AccelerationCurveData Create(DataTable data)
+		{
+			if (data.Columns.Count != 3) {
+				throw new VectoException("Acceleration Limiting File must consist of 3 columns.");
+			}
+
+			if (data.Rows.Count < 2) {
+				throw new VectoException("Acceleration Limiting File must consist of at least two entries.");
+			}
+
+			if (HeaderIsValid(data.Columns)) {
+				return CreateFromColumnNames(data);
+			}
+			LoggingObject.Logger<AccelerationCurveData>()
+				.Warn("Acceleration Curve: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}",
+					Fields.Velocity, AccelerationCurveReader.Fields.Acceleration,
+					Fields.Deceleration,
+					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName)));
+			return CreateFromColumnIndizes(data);
+		}
+
+		private static AccelerationCurveData CreateFromColumnIndizes(DataTable data)
+		{
+			return new AccelerationCurveData(data.Rows.Cast<DataRow>()
+				.Select(r => new KeyValuePair<MeterPerSecond, AccelerationCurveData.AccelerationEntry>(
+					r.ParseDouble(0).KMPHtoMeterPerSecond(),
+					new AccelerationCurveData.AccelerationEntry {
+						Acceleration = r.ParseDouble(1).SI<MeterPerSquareSecond>(),
+						Deceleration = r.ParseDouble(2).SI<MeterPerSquareSecond>()
+					}))
+				.OrderBy(x => x.Key)
+				.ToList());
+		}
+
+		private static AccelerationCurveData CreateFromColumnNames(DataTable data)
+		{
+			return new AccelerationCurveData(
+				data.Rows.Cast<DataRow>()
+					.Select(r => new KeyValuePair<MeterPerSecond, AccelerationCurveData.AccelerationEntry>(
+						r.ParseDouble(Fields.Velocity).KMPHtoMeterPerSecond(),
+						new AccelerationCurveData.AccelerationEntry {
+							Acceleration = r.ParseDouble(Fields.Acceleration).SI<MeterPerSquareSecond>(),
+							Deceleration = r.ParseDouble(Fields.Deceleration).SI<MeterPerSquareSecond>()
+						}))
+					.OrderBy(x => x.Key)
+					.ToList());
+		}
+
+		private static bool HeaderIsValid(DataColumnCollection columns)
+		{
+			return columns.Contains(Fields.Velocity) &&
+					columns.Contains(Fields.Acceleration) &&
+					columns.Contains(Fields.Deceleration);
+		}
+
+		public static class Fields
+		{
+			public const string Velocity = "v";
+
+			public const string Acceleration = "acc";
+
+			public const string Deceleration = "dec";
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/CrossWindCorrectionCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/CrossWindCorrectionCurveReader.cs
similarity index 99%
rename from VectoCore/VectoCore/Models/SimulationComponent/Data/CrossWindCorrectionCurveReader.cs
rename to VectoCore/VectoCore/InputData/Reader/ComponentData/CrossWindCorrectionCurveReader.cs
index 8b401ad19e6b91a5c09c96b0b9c82265228f8064..d9ec305f2ce260a2315ad8be26d1a8eeff02934d 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/CrossWindCorrectionCurveReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/CrossWindCorrectionCurveReader.cs
@@ -161,7 +161,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			return columns.Contains(FieldsCdxABeta.Beta) && columns.Contains(FieldsCdxABeta.DeltaCdxA);
 		}
 
-		private static class FieldsCdxABeta
+		public static class FieldsCdxABeta
 		{
 			public const string Beta = "beta";
 
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/RetarderLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/RetarderLossMapReader.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d47c2d21e58d0d7299a7d672f120432f0be57599
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/RetarderLossMapReader.cs
@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Data
+{
+	public class RetarderLossMapReader
+	{
+		/// <summary>
+		/// Read the retarder loss map from a file.
+		/// </summary>
+		/// <param name="fileName"></param>
+		/// <returns></returns>
+		public static RetarderLossMap ReadFromFile(string fileName)
+		{
+			try {
+				return Create(VectoCSVFile.Read(fileName));
+			} catch (Exception ex) {
+				throw new VectoException("ERROR while loading RetarderLossMap: " + ex.Message);
+			}
+		}
+
+		/// <summary>
+		/// Create the retarder loss map from an appropriate datatable. (2 columns: Retarder Speed, Torque Loss)
+		/// </summary>
+		/// <param name="data"></param>
+		/// <returns></returns>
+		public static RetarderLossMap Create(DataTable data)
+		{
+			if (data.Columns.Count != 2) {
+				throw new VectoException("RetarderLossMap Data File must consist of 2 columns: Retarder Speed, Torque Loss");
+			}
+
+			if (data.Rows.Count < 2) {
+				throw new VectoException("RetarderLossMap must contain at least 2 entries.");
+			}
+
+			List<RetarderLossMap.RetarderLossEntry> entries;
+			if (HeaderIsValid(data.Columns)) {
+				entries = CreateFromColumnNames(data);
+			} else {
+				LoggingObject.Logger<RetarderLossMap>().Warn(
+					"RetarderLossMap: Header Line is not valid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.",
+					Fields.RetarderSpeed, Fields.TorqueLoss,
+					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse()));
+				entries = CreateFromColumnIndizes(data);
+			}
+
+			entries.Sort((entry1, entry2) => entry1.RetarderSpeed.Value().CompareTo(entry2.RetarderSpeed.Value()));
+			return new RetarderLossMap(entries);
+		}
+
+		private static List<RetarderLossMap.RetarderLossEntry> CreateFromColumnNames(DataTable data)
+		{
+			return data.Rows.Cast<DataRow>()
+				.Select(row => new RetarderLossMap.RetarderLossEntry {
+					RetarderSpeed = DataTableExtensionMethods.ParseDouble(row, (string)Fields.RetarderSpeed).RPMtoRad(),
+					TorqueLoss = DataTableExtensionMethods.ParseDouble(row, (string)Fields.TorqueLoss).SI<NewtonMeter>()
+				}).ToList();
+		}
+
+		private static bool HeaderIsValid(DataColumnCollection columns)
+		{
+			return columns.Contains(Fields.RetarderSpeed) && columns.Contains(Fields.TorqueLoss);
+		}
+
+		private static List<RetarderLossMap.RetarderLossEntry> CreateFromColumnIndizes(DataTable data)
+		{
+			return data.Rows.Cast<DataRow>()
+				.Select(row => new RetarderLossMap.RetarderLossEntry {
+					RetarderSpeed = row.ParseDouble(0).RPMtoRad(),
+					TorqueLoss = row.ParseDouble(1).SI<NewtonMeter>()
+				}).ToList();
+		}
+
+		public static class Fields
+		{
+			/// <summary>
+			///     [rpm]
+			/// </summary>
+			public const string RetarderSpeed = "Retarder Speed";
+
+			/// <summary>
+			///     [Nm]
+			/// </summary>
+			public const string TorqueLoss = "Torque Loss";
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/TorqueConverterDataReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/TorqueConverterDataReader.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ae2cf4d19212bba5f423c0ea61ab7eb5f134f31d
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/TorqueConverterDataReader.cs
@@ -0,0 +1,67 @@
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.InputData.Reader.ComponentData
+{
+	public class TorqueConverterDataReader
+	{
+		public static TorqueConverterData ReadFromFile(string filename)
+		{
+			return Create(VectoCSVFile.Read(filename));
+		}
+
+		public static TorqueConverterData ReadFromStream(Stream stream)
+		{
+			return Create(VectoCSVFile.ReadStream(stream));
+		}
+
+		public static TorqueConverterData Create(DataTable data)
+		{
+			if (data.Columns.Count != 3) {
+				throw new VectoException("TorqueConverter Characteristics data must consist of 3 columns");
+			}
+			if (data.Rows.Count < 2) {
+				throw new VectoException("TorqueConverter Characteristics data must contain at least 2 lines with numeric values");
+			}
+
+			List<TorqueConverterEntry> characteristicTorque;
+			if (HeaderIsValid(data.Columns)) {
+				characteristicTorque = (from DataRow row in data.Rows
+					select
+						new TorqueConverterEntry() {
+							SpeedRatio = row.ParseDouble((string)Fields.SpeedRatio),
+							Torque = row.ParseDouble((string)Fields.CharacteristicTorque).SI<NewtonMeter>(),
+							TorqueRatio = row.ParseDouble((string)Fields.TorqueRatio)
+						}).ToList();
+			} else {
+				characteristicTorque = (from DataRow row in data.Rows
+					select
+						new TorqueConverterEntry() {
+							SpeedRatio = row.ParseDouble(0),
+							Torque = row.ParseDouble(2).SI<NewtonMeter>(),
+							TorqueRatio = row.ParseDouble(1)
+						}).ToList();
+			}
+			return new TorqueConverterData(characteristicTorque);
+		}
+
+		private static bool HeaderIsValid(DataColumnCollection columns)
+		{
+			return columns.Contains(Fields.SpeedRatio) && columns.Contains(Fields.TorqueRatio) &&
+					columns.Contains(Fields.CharacteristicTorque);
+		}
+
+		public static class Fields
+		{
+			public const string SpeedRatio = "Speed Ratio";
+			public const string TorqueRatio = "Torque Ratio";
+			public const string CharacteristicTorque = "MP1000";
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e6304bf963b02bd9349bc0aada9a9f1233c5308a
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/TransmissionLossMapReader.cs
@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
+{
+	public sealed class TransmissionLossMapReader
+	{
+		public static TransmissionLossMap ReadFromFile(string fileName, double gearRatio, string gearName)
+		{
+			try {
+				var data = VectoCSVFile.Read(fileName, true);
+				return Create(data, gearRatio, gearName);
+			} catch (Exception ex) {
+				throw new VectoException("ERROR while reading TransmissionLossMap: " + ex.Message);
+			}
+		}
+
+		/// <summary>
+		/// Create a TransmissionLoss Map from a DataTable.
+		/// </summary>
+		/// <param name="data"></param>
+		/// <param name="gearRatio"></param>
+		/// <param name="gearName"></param>
+		/// <returns></returns>
+		public static TransmissionLossMap Create(DataTable data, double gearRatio, string gearName)
+		{
+			if (data.Columns.Count < 3) {
+				throw new VectoException("TransmissionLossMap Data File for {0} must consist of 3 columns.", gearName);
+			}
+
+			if (data.Rows.Count < 4) {
+				throw new VectoException(
+					"TransmissionLossMap for {0} must consist of at least four lines with numeric values (below file header", gearName);
+			}
+
+			List<TransmissionLossMap.GearLossMapEntry> entries;
+			if (HeaderIsValid(data.Columns)) {
+				entries = CreateFromColumnNames(data);
+			} else {
+				LoggingObject.Logger<TransmissionLossMap>().Warn(
+					"TransmissionLossMap {5}: Header line is not valid. Expected: '{0}, {1}, {2}'. Got: '{4}'. Falling back to column index.",
+					Fields.InputSpeed, Fields.InputTorque, Fields.TorqeLoss,
+					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse()), gearName);
+
+				entries = CreateFromColumIndizes(data);
+			}
+
+			return new TransmissionLossMap(entries, gearRatio, gearName);
+		}
+
+		/// <summary>
+		/// Create a DataTable from an efficiency value.
+		/// </summary>
+		/// <param name="efficiency"></param>
+		/// <param name="gearRatio"></param>
+		/// <param name="gearName"></param>
+		/// <returns></returns>
+		public static TransmissionLossMap Create(double efficiency, double gearRatio, string gearName)
+		{
+			var entries = new List<TransmissionLossMap.GearLossMapEntry> {
+				new TransmissionLossMap.GearLossMapEntry(0.RPMtoRad(), 1e5.SI<NewtonMeter>(),
+					(1 - efficiency) * 1e5.SI<NewtonMeter>()),
+				new TransmissionLossMap.GearLossMapEntry(0.RPMtoRad(), -1e5.SI<NewtonMeter>(),
+					(1 - efficiency) * 1e5.SI<NewtonMeter>()),
+				new TransmissionLossMap.GearLossMapEntry(0.RPMtoRad(), 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>()),
+				new TransmissionLossMap.GearLossMapEntry(5000.RPMtoRad(), 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>()),
+				new TransmissionLossMap.GearLossMapEntry(5000.RPMtoRad(), -1e5.SI<NewtonMeter>(),
+					(1 - efficiency) * 1e5.SI<NewtonMeter>()),
+				new TransmissionLossMap.GearLossMapEntry(5000.RPMtoRad(), 1e5.SI<NewtonMeter>(),
+					(1 - efficiency) * 1e5.SI<NewtonMeter>()),
+			};
+			return new TransmissionLossMap(entries, gearRatio, gearName);
+		}
+
+		private static bool HeaderIsValid(DataColumnCollection columns)
+		{
+			return columns.Contains(TransmissionLossMapReader.Fields.InputSpeed) &&
+					columns.Contains(TransmissionLossMapReader.Fields.InputTorque) &&
+					columns.Contains(TransmissionLossMapReader.Fields.TorqeLoss);
+		}
+
+		private static List<TransmissionLossMap.GearLossMapEntry> CreateFromColumnNames(DataTable data)
+		{
+			return (from DataRow row in data.Rows
+				select new TransmissionLossMap.GearLossMapEntry(
+					inputSpeed: row.ParseDouble(Fields.InputSpeed).RPMtoRad(),
+					inputTorque: row.ParseDouble(Fields.InputTorque).SI<NewtonMeter>(),
+					torqueLoss: row.ParseDouble(Fields.TorqeLoss).SI<NewtonMeter>()))
+				.ToList();
+		}
+
+		private static List<TransmissionLossMap.GearLossMapEntry> CreateFromColumIndizes(DataTable data)
+		{
+			return (from DataRow row in data.Rows
+				select new TransmissionLossMap.GearLossMapEntry(
+					inputSpeed: row.ParseDouble(0).RPMtoRad(),
+					inputTorque: row.ParseDouble(1).SI<NewtonMeter>(),
+					torqueLoss: row.ParseDouble(2).SI<NewtonMeter>()))
+				.ToList();
+		}
+
+		public static class Fields
+		{
+			/// <summary>[rpm]</summary>
+			public const string InputSpeed = "Input Speed";
+
+			/// <summary>[Nm]</summary>
+			public const string InputTorque = "Input Torque";
+
+			/// <summary>[Nm]</summary>
+			public const string TorqeLoss = "Torque Loss";
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
index 9110544bd593abc67cc6a92ec33791d9fa658982..f56729d5cc01f2781208f27c2ef93f1bdce9cc02 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/AbstractSimulationDataAdapter.cs
@@ -30,7 +30,9 @@
 */
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
+using iTextSharp.text.pdf;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
@@ -68,7 +70,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				//DragCoefficientRigidTruck = data.DragCoefficientRigidTruck,
 				//CrossSectionAreaRigidTruck = data.CrossSectionAreaRigidTruck.SI<SquareMeter>(),
 				//TyreRadius = data.TyreRadius.SI().Milli.Meter.Cast<Meter>(),
-				Rim = data.Rim,
+				//Rim = data.Rim,
 			};
 
 			return retVal;
@@ -89,9 +91,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 					Type = data.Type,
 				};
 				switch (retarder.Type) {
-					case RetarderType.Primary:
-					case RetarderType.Secondary:
-						retarder.LossMap = RetarderLossMap.Create(data.LossMap);
+					//case RetarderType.EngineRetarder:
+					case RetarderType.TransmissionInputRetarder:
+					case RetarderType.TransmissionOutputRetarder:
+						retarder.LossMap = RetarderLossMapReader.Create(data.LossMap);
 						retarder.Ratio = data.Ratio;
 						break;
 					case RetarderType.None:
@@ -123,7 +126,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				IntegrityStatus = data.IntegrityStatus,
 				Displacement = data.Displacement,
 				IdleSpeed = data.IdleSpeed,
-				ConsumptionMap = FuelConsumptionMap.Create(data.FuelConsumptionMap),
+				ConsumptionMap = FuelConsumptionMapReader.Create(data.FuelConsumptionMap),
 			};
 			return retVal;
 		}
@@ -147,11 +150,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		{
 			TransmissionLossMap axleLossMap;
 			try {
-				axleLossMap = TransmissionLossMap.Create(data.LossMap, data.Ratio, "AxleGear");
+				axleLossMap = TransmissionLossMapReader.Create(data.LossMap, data.Ratio, "AxleGear");
 			} catch (InvalidFileFormatException) {
-				if (useEfficiencyFallback)
-					axleLossMap = TransmissionLossMap.Create(data.Efficiency, data.Ratio, "AxleGear");
-				else {
+				if (useEfficiencyFallback) {
+					axleLossMap = TransmissionLossMapReader.Create(data.Efficiency, data.Ratio, "AxleGear");
+				} else {
 					throw;
 				}
 			}
@@ -200,12 +203,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 							AngularGear = new TransmissionData { Ratio = data.Ratio }
 						};
 						try {
-							angularGear.AngularGear.LossMap = TransmissionLossMap.Create(data.LossMap, data.Ratio, "AngularGear");
+							angularGear.AngularGear.LossMap = TransmissionLossMapReader.Create(data.LossMap, data.Ratio, "AngularGear");
 						} catch (VectoException ex) {
 							Log.Info("AngularGear Loss Map not found.");
 							if (useEfficiencyFallback) {
 								Log.Info("AngularGear Trying with Efficiency instead of Loss Map.");
-								angularGear.AngularGear.LossMap = TransmissionLossMap.Create(data.Efficiency, data.Ratio, "AngularGear");
+								angularGear.AngularGear.LossMap = TransmissionLossMapReader.Create(data.Efficiency, data.Ratio, "AngularGear");
 							} else {
 								throw new VectoException("AngularGear: LossMap not found.", ex);
 							}
@@ -216,7 +219,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 					case AngularGearType.None:
 						return null;
 					default:
-						throw new ArgumentOutOfRangeException("data", "Unknown AngularGear Type.");
+						throw new ArgumentOutOfRangeException("data", "Unknown Angulargear Type.");
 				}
 			} catch (Exception e) {
 				throw new VectoException("Error while reading AngularGear data: {0}", e.Message);
@@ -229,22 +232,53 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 		/// <param name="engineCurve"></param>
 		/// <param name="gearCurve"></param>
 		/// <returns>A combined EngineFullLoadCurve with the minimum full load torque over all inputs curves.</returns>
-		internal static EngineFullLoadCurve IntersectFullLoadCurves(EngineFullLoadCurve engineCurve, FullLoadCurve gearCurve)
+		internal static EngineFullLoadCurve IntersectFullLoadCurves(EngineFullLoadCurve engineCurve, NewtonMeter maxTorque)
 		{
-			if (gearCurve == null) {
+			if (maxTorque == null) {
 				return engineCurve;
 			}
-			// TODO mk-2016-04-18: refactor when new gearbox full load is implemented: gearbox will then only have 1 constant value as full load.
-			var entries =
-				gearCurve.FullLoadEntries.Concat(engineCurve.FullLoadEntries)
-					.OrderBy(x => x.EngineSpeed)
-					.DistinctBy((x, y) => x.EngineSpeed.Value().IsEqual(y.EngineSpeed.Value()))
-					.Select(x => new FullLoadCurve.FullLoadCurveEntry {
-						EngineSpeed = x.EngineSpeed,
-						TorqueFullLoad =
-							VectoMath.Min(engineCurve.FullLoadStationaryTorque(x.EngineSpeed),
-								gearCurve.FullLoadStationaryTorque(x.EngineSpeed))
+
+			var entries = new List<FullLoadCurve.FullLoadCurveEntry>();
+			var firstEntry = engineCurve.FullLoadEntries.First();
+			if (firstEntry.TorqueFullLoad < maxTorque) {
+				entries.Add(engineCurve.FullLoadEntries.First());
+			} else {
+				entries.Add(new FullLoadCurve.FullLoadCurveEntry {
+					EngineSpeed = firstEntry.EngineSpeed,
+					TorqueFullLoad = maxTorque,
+					TorqueDrag = firstEntry.TorqueDrag
+				});
+			}
+			foreach (var entry in engineCurve.FullLoadEntries.Pairwise(Tuple.Create)) {
+				if (entry.Item1.TorqueFullLoad <= maxTorque && entry.Item2.TorqueFullLoad <= maxTorque) {
+					// segment is below maxTorque line -> use directly
+					entries.Add(entry.Item2);
+				} else if (entry.Item1.TorqueFullLoad > maxTorque && entry.Item2.TorqueFullLoad > maxTorque) {
+					// segment is above maxTorque line -> add limited entry
+					entries.Add(new FullLoadCurve.FullLoadCurveEntry {
+						EngineSpeed = entry.Item2.EngineSpeed,
+						TorqueFullLoad = maxTorque,
+						TorqueDrag = entry.Item2.TorqueDrag
+					});
+				} else {
+					// segment intersects maxTorque line -> add new entry at intersection
+					var edgeFull = Edge.Create(new Point(entry.Item1.EngineSpeed.Value(), entry.Item1.TorqueFullLoad.Value()),
+						new Point(entry.Item2.EngineSpeed.Value(), entry.Item2.TorqueFullLoad.Value()));
+					var edgeDrag = Edge.Create(new Point(entry.Item1.EngineSpeed.Value(), entry.Item1.TorqueDrag.Value()),
+						new Point(entry.Item2.EngineSpeed.Value(), entry.Item2.TorqueDrag.Value()));
+					var intersectionX = (maxTorque.Value() - edgeFull.OffsetXY) / edgeFull.SlopeXY;
+					entries.Add(new FullLoadCurve.FullLoadCurveEntry {
+						EngineSpeed = intersectionX.SI<PerSecond>(),
+						TorqueFullLoad = maxTorque,
+						TorqueDrag = VectoMath.Interpolate(edgeDrag.P1, edgeDrag.P2, intersectionX).SI<NewtonMeter>()
 					});
+					entries.Add(new FullLoadCurve.FullLoadCurveEntry {
+						EngineSpeed = entry.Item2.EngineSpeed,
+						TorqueFullLoad = entry.Item2.TorqueFullLoad > maxTorque ? maxTorque : entry.Item2.TorqueFullLoad,
+						TorqueDrag = entry.Item2.TorqueDrag
+					});
+				}
+			}
 
 			var flc = new EngineFullLoadCurve {
 				FullLoadEntries = entries.ToList(),
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
index 116010cb45326f3340edfa23c5c835e196e9e3b1..77cc69ecfafc63f19746c1295536d7c2051f5574 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapter.cs
@@ -98,7 +98,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			retVal.CurbWeight += mission.BodyCurbWeight + mission.TrailerCurbWeight;
 			retVal.Loading = loading;
 			retVal.DynamicTyreRadius =
-				DeclarationData.DynamicTyreRadius(data.Axles[DeclarationData.PoweredAxle()].Wheels, data.Rim);
+				DeclarationData.DynamicTyreRadius(data.Axles[DeclarationData.PoweredAxle()].Wheels, "5° DC Rims"); // TODO!
 
 			var aerodynamicDragArea = data.AirDragArea + mission.DeltaCdA;
 
@@ -189,27 +189,22 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			retVal.StartSpeed = DeclarationData.Gearbox.StartSpeed;
 			retVal.StartAcceleration = DeclarationData.Gearbox.StartAcceleration;
 
-			retVal.HasTorqueConverter = false;
-
 			TransmissionLossMap gearLossMap;
 			retVal.Gears = gears.Select((gear, i) => {
 				try {
 					if (gear.LossMap == null) {
 						throw new InvalidFileFormatException(string.Format("LossMap for Gear {0} is missing.", i + 1));
 					}
-					gearLossMap = TransmissionLossMap.Create(gear.LossMap, gear.Ratio, string.Format("Gear {0}", i + 1));
+					gearLossMap = TransmissionLossMapReader.Create(gear.LossMap, gear.Ratio, string.Format("Gear {0}", i + 1));
 				} catch (InvalidFileFormatException) {
 					if (useEfficiencyFallback) {
-						gearLossMap = TransmissionLossMap.Create(gear.Efficiency, gear.Ratio, string.Format("Gear {0}", i + 1));
+						gearLossMap = TransmissionLossMapReader.Create(gear.Efficiency, gear.Ratio, string.Format("Gear {0}", i + 1));
 					} else {
 						throw;
 					}
 				}
-				var gearFullLoad = gear.FullLoadCurve == null
-					? null
-					: FullLoadCurveReader.Create(gear.FullLoadCurve, true);
 
-				var fullLoadCurve = IntersectFullLoadCurves(engine.FullLoadCurve, gearFullLoad);
+				var fullLoadCurve = IntersectFullLoadCurves(engine.FullLoadCurve, gear.MaxTorque);
 				var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(i, fullLoadCurve, gears, engine, axlegearRatio,
 					dynamicTyreRadius);
 
@@ -217,7 +212,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 					new GearData {
 						LossMap = gearLossMap,
 						ShiftPolygon = shiftPolygon,
-						FullLoadCurve = gearFullLoad,
+						MaxTorque = gear.MaxTorque,
 						Ratio = gear.Ratio,
 						TorqueConverterActive = false
 					});
@@ -225,7 +220,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 			retVal.DownshiftAfterUpshiftDelay = DeclarationData.Gearbox.DownshiftAfterUpshiftDelay;
 			retVal.UpshiftAfterDownshiftDelay = DeclarationData.Gearbox.UpshiftAfterDownshiftDelay;
-			retVal.UpshiftMinAcceleration =DeclarationData.Gearbox.UpshiftMinAcceleration;
+			retVal.UpshiftMinAcceleration = DeclarationData.Gearbox.UpshiftMinAcceleration;
 			return retVal;
 		}
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
index 0d3b4cbe16b88fc1682ced035d4c631506197310..223e245d2b91ea465368c4fd18a7a3ef2ddfd67b 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs
@@ -140,21 +140,17 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			retVal.StartSpeed = gearbox.StartSpeed;
 			retVal.StartAcceleration = gearbox.StartAcceleration;
 
-			retVal.HasTorqueConverter = gearbox.TorqueConverter.Enabled;
-
 			retVal.Gears = gears.Select((gear, i) => {
 				TransmissionLossMap lossMap;
-				if (gear.LossMap != null)
-					lossMap = TransmissionLossMap.Create(gear.LossMap, gear.Ratio, string.Format("Gear {0}", i + 1));
-				else if (useEfficiencyFallback)
-					lossMap = TransmissionLossMap.Create(gear.Efficiency, gear.Ratio, string.Format("Gear {0}", i + 1));
-				else {
+				if (gear.LossMap != null) {
+					lossMap = TransmissionLossMapReader.Create(gear.LossMap, gear.Ratio, string.Format("Gear {0}", i + 1));
+				} else if (useEfficiencyFallback) {
+					lossMap = TransmissionLossMapReader.Create(gear.Efficiency, gear.Ratio, string.Format("Gear {0}", i + 1));
+				} else {
 					throw new InvalidFileFormatException("Gear {0} LossMap or Efficiency missing.", i + 1);
 				}
-				var gearFullLoad = gear.FullLoadCurve != null
-					? FullLoadCurveReader.Create(gear.FullLoadCurve)
-					: null;
-				var fullLoadCurve = IntersectFullLoadCurves(engineData.FullLoadCurve, gearFullLoad);
+				
+				var fullLoadCurve = IntersectFullLoadCurves(engineData.FullLoadCurve, gear.MaxTorque);
 				var shiftPolygon = gear.ShiftPolygon != null
 					? ShiftPolygonReader.Create(gear.ShiftPolygon)
 					: DeclarationData.Gearbox.ComputeShiftPolygon(i, fullLoadCurve, gears, engineData, axlegearRatio, dynamicTyreRadius);
@@ -162,7 +158,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				return new KeyValuePair<uint, GearData>((uint)(i + 1), new GearData {
 					LossMap = lossMap,
 					ShiftPolygon = shiftPolygon,
-					FullLoadCurve = gearFullLoad,
+					MaxTorque = gear.MaxTorque,
 					Ratio = gear.Ratio,
 					TorqueConverterActive = gear.TorqueConverterActive
 				});
@@ -179,21 +175,45 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 			if (auxInputData.SavedInDeclarationMode) {
 				WarnEngineeringMode("AuxData");
 			}
-
 			return auxInputData.Auxiliaries.Select(a => {
-				if (a.DemandMap == null) {
-					throw new VectoSimulationException("Demand Map for auxiliary {0} {1} required", a.ID, a.Technology);
+				switch (a.AuxiliaryType) {
+					case AuxiliaryDemandType.Mapping:
+						return CreateMappingAuxiliary(a);
+					case AuxiliaryDemandType.Constant:
+						return CreateConstantAuxiliary(a);
+					default:
+						throw new VectoException("Auxiliary type {0} not supported!", a.AuxiliaryType);
 				}
-				return new VectoRunData.AuxData {
-					ID = a.ID,
-					Technology = a.Technology,
-					TechList = a.TechList.DefaultIfNull(Enumerable.Empty<string>()).ToArray(),
-					DemandType = AuxiliaryDemandType.Mapping,
-					Data = new AuxiliaryData(a, a.ID) //AuxiliaryData.Create(a.DemandMap)
-				};
 			}).Concat(new VectoRunData.AuxData { ID = "", DemandType = AuxiliaryDemandType.Direct }.ToEnumerable()).ToList();
 		}
 
+		private static VectoRunData.AuxData CreateMappingAuxiliary(IAuxiliaryEngineeringInputData a)
+		{
+			if (a.DemandMap == null) {
+				throw new VectoSimulationException("Demand Map for auxiliary {0} {1} required", a.ID, a.Technology);
+			}
+			if (a.DemandMap.Columns.Count != 3 || a.DemandMap.Rows.Count < 4) {
+				throw new VectoSimulationException(
+					"Demand Map for auxiliary {0} {1} has to contain exactly 3 columns and at least 4 rows", a.ID, a.Technology);
+			}
+			return new VectoRunData.AuxData {
+				ID = a.ID,
+				Technology = a.Technology,
+				TechList = a.TechList.DefaultIfNull(Enumerable.Empty<string>()).ToArray(),
+				DemandType = AuxiliaryDemandType.Mapping,
+				Data = new AuxiliaryData(a, a.ID) //AuxiliaryData.Create(a.DemandMap)
+			};
+		}
+
+		private static VectoRunData.AuxData CreateConstantAuxiliary(IAuxiliaryEngineeringInputData a)
+		{
+			return new VectoRunData.AuxData {
+				ID = a.ID,
+				DemandType = AuxiliaryDemandType.Constant,
+				PowerDemand = a.ConstantPowerDemand
+			};
+		}
+
 		internal DriverData CreateDriverData(IDriverEngineeringInputData driver)
 		{
 			if (driver.SavedInDeclarationMode) {
@@ -202,7 +222,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 
 			AccelerationCurveData accelerationData = null;
 			if (driver.AccelerationCurve != null) {
-				accelerationData = AccelerationCurveData.Create(driver.AccelerationCurve);
+				accelerationData = AccelerationCurveReader.Create(driver.AccelerationCurve);
 			}
 
 			var lookAheadData = new DriverData.LACData {
diff --git a/VectoCore/VectoCore/InputData/Reader/FullLoadCurveReader.cs b/VectoCore/VectoCore/InputData/Reader/FullLoadCurveReader.cs
index 5251974221c8d7a203a2d588c52d8800e2c38f77..9eb37c7934be5e3cde817029bd55406df3e624ee 100644
--- a/VectoCore/VectoCore/InputData/Reader/FullLoadCurveReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/FullLoadCurveReader.cs
@@ -89,7 +89,11 @@ namespace TUGraz.VectoCore.InputData.Reader
 			if (declarationMode) {
 				tmp = new PT1();
 			} else {
-				tmp = PT1Curve.Create(data);
+				if (data.Columns.Count > 3) {
+					tmp = PT1Curve.Create(data);
+				} else {
+					tmp = new PT1();
+				}
 			}
 			entriesFld.Sort((entry1, entry2) => entry1.EngineSpeed.Value().CompareTo(entry2.EngineSpeed.Value()));
 			return new FullLoadCurve { FullLoadEntries = entriesFld, PT1Data = tmp };
@@ -123,7 +127,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 		}
 
 
-		private static class Fields
+		public static class Fields
 		{
 			/// <summary>
 			/// [rpm] engine speed
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
index ce38c1997713813b7cbc4bf6e6e25cd3c152d6f9..a2da101383dea4ee7effe178661d77d56bcbe654 100644
--- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
@@ -66,7 +66,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 				InputDataProvider.VehicleInputData.AxleConfiguration,
 				InputDataProvider.VehicleInputData.GrossVehicleMassRating, InputDataProvider.VehicleInputData.CurbWeightChassis);
 			var driverdata = dao.CreateDriverData(InputDataProvider.DriverInputData);
-			driverdata.AccelerationCurve = AccelerationCurveData.ReadFromStream(segment.AccelerationFile);
+			driverdata.AccelerationCurve = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile);
 
 			var tempVehicle = dao.CreateVehicleData(InputDataProvider.VehicleInputData, segment.Missions.First(),
 				segment.Missions.First().Loadings.First().Value);
diff --git a/VectoCore/VectoCore/InputData/Reader/ShiftPolygonReader.cs b/VectoCore/VectoCore/InputData/Reader/ShiftPolygonReader.cs
index e67afeadee25cab31c337d8210b74aabe111e429..16d0b98001654e259a86b676e42d350badeaafb6 100644
--- a/VectoCore/VectoCore/InputData/Reader/ShiftPolygonReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ShiftPolygonReader.cs
@@ -106,7 +106,7 @@ namespace TUGraz.VectoCore.InputData.Reader
 					}).ToList();
 		}
 
-		private static class Fields
+		public static class Fields
 		{
 			/// <summary>
 			///		[Nm] torque
diff --git a/VectoCore/VectoCore/Models/Declaration/Axle.cs b/VectoCore/VectoCore/Models/Declaration/Axle.cs
index 9b686af4221da6689f18efee93764db531dcf653..c902939bb1e7442e90a6ac5542692ebd0d3a6ea8 100644
--- a/VectoCore/VectoCore/Models/Declaration/Axle.cs
+++ b/VectoCore/VectoCore/Models/Declaration/Axle.cs
@@ -29,6 +29,7 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
 using System.ComponentModel.DataAnnotations;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
@@ -49,7 +50,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 		[Required, SIRange(500, 100000)]
 		public Newton TyreTestLoad { get; internal set; }
 
-		[Required, SIRange(0, 1)]
+		[Required, SIRange(Double.MinValue, 1)]
 		public double AxleWeightShare { get; internal set; }
 
 		public bool TwinTyres { get; internal set; }
diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
index 6b22f983a25fda7a4f44f8217a445167bd9453c6..1ab2178cfec49201b7e318acc937a9dc6eb458bb 100644
--- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs
@@ -42,7 +42,7 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.Declaration
 {
-	internal class DeclarationData
+	public sealed class DeclarationData
 	{
 		private static DeclarationData _instance;
 		private Segments _segments;
diff --git a/VectoCore/VectoCore/Models/Declaration/LACDecisionFactor.cs b/VectoCore/VectoCore/Models/Declaration/LACDecisionFactor.cs
index e8de0c3b8d096b91c3e3a8ab805fab374b184a4c..355a2d79956868017505d2c63f8619ed24e36059 100644
--- a/VectoCore/VectoCore/Models/Declaration/LACDecisionFactor.cs
+++ b/VectoCore/VectoCore/Models/Declaration/LACDecisionFactor.cs
@@ -59,7 +59,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 		/// <summary>
 		/// Class for Look Ahead Coasting Decision Factor (DF_coast)
 		/// </summary>
-		private sealed class DecisionFactor : LookupData<MeterPerSecond, MeterPerSecond, double>
+		public sealed class DecisionFactor : LookupData<MeterPerSecond, MeterPerSecond, double>
 		{
 			private readonly LACDecisionFactorVTarget _vTarget;
 			private readonly LACDecisionFactorVdrop _vDrop;
@@ -89,91 +89,106 @@ namespace TUGraz.VectoCore.Models.Declaration
 				return _offset - _scaling * _vTarget.Lookup(targetVelocity) * _vDrop.Lookup(velocityDrop);
 			}
 
+
 			protected override void ParseData(DataTable table) {}
+		}
+
+		public sealed class LACDecisionFactorVdrop : LookupData<MeterPerSecond, double>
+		{
+			private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.LAC-DF-Vdrop.csv";
 
-			private sealed class LACDecisionFactorVdrop : LookupData<MeterPerSecond, double>
+			public LACDecisionFactorVdrop()
 			{
-				private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.LAC-DF-Vdrop.csv";
+				ParseData(ReadCsvResource(ResourceId));
+			}
 
-				public LACDecisionFactorVdrop()
-				{
-					ParseData(ReadCsvResource(ResourceId));
-				}
+			public LACDecisionFactorVdrop(DataTable vDrop)
+			{
+				ParseData(vDrop ?? ReadCsvResource(ResourceId));
+			}
 
-				public LACDecisionFactorVdrop(DataTable vDrop)
-				{
-					ParseData(vDrop ?? ReadCsvResource(ResourceId));
+			public override double Lookup(MeterPerSecond targetVelocity)
+			{
+				var section = Data.GetSection(kv => kv.Key < targetVelocity);
+				return VectoMath.Interpolate(section.Item1.Key, section.Item2.Key, section.Item1.Value, section.Item2.Value,
+					targetVelocity);
+			}
+
+			protected override void ParseData(DataTable table)
+			{
+				if (table.Columns.Count < 2) {
+					throw new VectoException("LAC Decision Factor File for Vdrop must consist of at least 2 columns.");
 				}
 
-				public override double Lookup(MeterPerSecond targetVelocity)
-				{
-					var section = Data.GetSection(kv => kv.Key < targetVelocity);
-					return VectoMath.Interpolate(section.Item1.Key, section.Item2.Key, section.Item1.Value, section.Item2.Value,
-						targetVelocity);
+				if (table.Rows.Count < 2) {
+					throw new VectoException(
+						"LAC Decision Factor File for Vdrop must consist of at least two lines with numeric values (below file header)");
 				}
 
-				protected override void ParseData(DataTable table)
-				{
-					if (table.Columns.Count < 2) {
-						throw new VectoException("LAC Decision Factor File for Vdrop must consist of at least 2 columns.");
-					}
-
-					if (table.Rows.Count < 2) {
-						throw new VectoException(
-							"LAC Decision Factor File for Vdrop must consist of at least two lines with numeric values (below file header)");
-					}
-
-					if (table.Columns.Contains("v_target") && table.Columns.Contains("decision_factor")) {
-						Data = table.Rows.Cast<DataRow>()
-							.ToDictionary(r => r.ParseDouble("v_drop").KMPHtoMeterPerSecond(), r => r.ParseDouble("decision_factor"));
-					} else {
-						Data = table.Rows.Cast<DataRow>()
-							.ToDictionary(r => r.ParseDouble(0).KMPHtoMeterPerSecond(), r => r.ParseDouble(1));
-					}
+				if (table.Columns.Contains(Fields.VelocityDrop) && table.Columns.Contains(Fields.DecisionFactor)) {
+					Data = table.Rows.Cast<DataRow>()
+						.ToDictionary(r => r.ParseDouble(Fields.VelocityDrop).KMPHtoMeterPerSecond(),
+							r => r.ParseDouble(Fields.DecisionFactor));
+				} else {
+					Data = table.Rows.Cast<DataRow>()
+						.ToDictionary(r => r.ParseDouble(0).KMPHtoMeterPerSecond(), r => r.ParseDouble(1));
 				}
 			}
 
-			private sealed class LACDecisionFactorVTarget : LookupData<MeterPerSecond, double>
+			public static class Fields
 			{
-				private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.LAC-DF-Vtarget.csv";
+				public const string VelocityDrop = "v_drop";
+				public const string DecisionFactor = "decision_factor";
+			}
+		}
 
-				public LACDecisionFactorVTarget()
-				{
-					ParseData(ReadCsvResource(ResourceId));
-				}
+		public sealed class LACDecisionFactorVTarget : LookupData<MeterPerSecond, double>
+		{
+			private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.LAC-DF-Vtarget.csv";
+
+			public LACDecisionFactorVTarget()
+			{
+				ParseData(ReadCsvResource(ResourceId));
+			}
+
+			public LACDecisionFactorVTarget(DataTable vTargetLookup)
+			{
+				ParseData(vTargetLookup ?? ReadCsvResource(ResourceId));
+			}
 
-				public LACDecisionFactorVTarget(DataTable vTargetLookup)
-				{
-					ParseData(vTargetLookup ?? ReadCsvResource(ResourceId));
+			public override double Lookup(MeterPerSecond targetVelocity)
+			{
+				var section = Data.GetSection(kv => kv.Key < targetVelocity);
+				return VectoMath.Interpolate(section.Item1.Key, section.Item2.Key, section.Item1.Value, section.Item2.Value,
+					targetVelocity);
+			}
+
+			protected override void ParseData(DataTable table)
+			{
+				if (table.Columns.Count < 2) {
+					throw new VectoException("LAC Decision Factor File for Vtarget must consist of at least 2 columns.");
 				}
 
-				public override double Lookup(MeterPerSecond targetVelocity)
-				{
-					var section = Data.GetSection(kv => kv.Key < targetVelocity);
-					return VectoMath.Interpolate(section.Item1.Key, section.Item2.Key, section.Item1.Value, section.Item2.Value,
-						targetVelocity);
+				if (table.Rows.Count < 2) {
+					throw new VectoException(
+						"LAC Decision Factor File for Vtarget must consist of at least two lines with numeric values (below file header)");
 				}
 
-				protected override void ParseData(DataTable table)
-				{
-					if (table.Columns.Count < 2) {
-						throw new VectoException("LAC Decision Factor File for Vtarget must consist of at least 2 columns.");
-					}
-
-					if (table.Rows.Count < 2) {
-						throw new VectoException(
-							"LAC Decision Factor File for Vtarget must consist of at least two lines with numeric values (below file header)");
-					}
-
-					if (table.Columns.Contains("v_target") && table.Columns.Contains("decision_factor")) {
-						Data = table.Rows.Cast<DataRow>()
-							.ToDictionary(r => r.ParseDouble("v_target").KMPHtoMeterPerSecond(), r => r.ParseDouble("decision_factor"));
-					} else {
-						Data = table.Rows.Cast<DataRow>()
-							.ToDictionary(r => r.ParseDouble(0).KMPHtoMeterPerSecond(), r => r.ParseDouble(1));
-					}
+				if (table.Columns.Contains(Fields.TargetVelocity) && table.Columns.Contains(Fields.DecisionFactor)) {
+					Data = table.Rows.Cast<DataRow>()
+						.ToDictionary(r => r.ParseDouble(Fields.TargetVelocity).KMPHtoMeterPerSecond(),
+							r => r.ParseDouble(Fields.DecisionFactor));
+				} else {
+					Data = table.Rows.Cast<DataRow>()
+						.ToDictionary(r => r.ParseDouble(0).KMPHtoMeterPerSecond(), r => r.ParseDouble(1));
 				}
 			}
+
+			public static class Fields
+			{
+				public const string TargetVelocity = "v_target";
+				public const string DecisionFactor = "decision_factor";
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/Declaration/Payloads.cs b/VectoCore/VectoCore/Models/Declaration/Payloads.cs
index ec19468d33cb6da4c20c5d711c19a0a7771b6c3f..56495305f3da176a8ef80872c8a8e051955cae06 100644
--- a/VectoCore/VectoCore/Models/Declaration/Payloads.cs
+++ b/VectoCore/VectoCore/Models/Declaration/Payloads.cs
@@ -37,9 +37,9 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.Declaration
 {
-	internal sealed class Payloads : LookupData<Kilogram, Payloads.PayloadEntry>
+	public sealed class Payloads : LookupData<Kilogram, Payloads.PayloadEntry>
 	{
-		internal sealed class PayloadEntry
+		public sealed class PayloadEntry
 		{
 			public Kilogram Payload50Percent;
 			public Kilogram Payload75Percent;
diff --git a/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs
index a47daf0ee7c6af5fb460766087c23db7e44e638d..aeecd0fbeff54fdcaa1f3dca7d6ce6eeafa79b77 100644
--- a/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs
+++ b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs
@@ -38,7 +38,7 @@ using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.Declaration
 {
-	internal sealed class StandardBody
+	public sealed class StandardBody
 	{
 		public StandardBody(Kilogram curbWeight, Kilogram grossVehicleWeight, SquareMeter deltaCrossWindArea,
 			Wheels.WheelsEntry wheels)
@@ -79,7 +79,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 	///     DeltaCrossWindArea,
 	///     Wheels
 	/// </summary>
-	internal sealed class StandardBodies : LookupData<string, StandardBody>
+	public sealed class StandardBodies : LookupData<string, StandardBody>
 	{
 		private const string ResourceId = "TUGraz.VectoCore.Resources.Declaration.Body_Trailers_Weights.csv";
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs
index ca50bfcc175310f6e103eaf632d85a4780d8f4da..e8053c20ea6c8d0c1a0da6dc932904effb42e7be 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/AccelerationCurve.cs
@@ -43,86 +43,18 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 {
 	public class AccelerationCurveData : SimulationComponentData
 	{
-		private List<KeyValuePair<MeterPerSecond, AccelerationEntry>> _entries;
+		private readonly List<KeyValuePair<MeterPerSecond, AccelerationEntry>> _entries;
 
-		public static AccelerationCurveData ReadFromStream(Stream stream)
+		protected internal AccelerationCurveData(List<KeyValuePair<MeterPerSecond, AccelerationEntry>> entries)
 		{
-			var data = VectoCSVFile.ReadStream(stream);
-			return Create(data);
-		}
-
-		public static AccelerationCurveData ReadFromFile(string fileName)
-		{
-			try {
-				var data = VectoCSVFile.Read(fileName);
-				return Create(data);
-			} catch (Exception ex) {
-				throw new VectoException("ERROR while reading AccelerationCurve File: " + ex.Message);
-			}
-		}
-
-		internal static AccelerationCurveData Create(DataTable data)
-		{
-			if (data.Columns.Count != 3) {
-				throw new VectoException("Acceleration Limiting File must consist of 3 columns.");
-			}
-
-			if (data.Rows.Count < 2) {
-				throw new VectoException("Acceleration Limiting File must consist of at least two entries.");
-			}
-
-			if (HeaderIsValid(data.Columns)) {
-				return CreateFromColumnNames(data);
-			}
-			Logger<AccelerationCurveData>()
-				.Warn("Acceleration Curve: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}",
-					Fields.Velocity, Fields.Acceleration, Fields.Deceleration,
-					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName)));
-			return CreateFromColumnIndizes(data);
-		}
-
-		private static AccelerationCurveData CreateFromColumnIndizes(DataTable data)
-		{
-			return new AccelerationCurveData {
-				_entries = data.Rows.Cast<DataRow>()
-					.Select(r => new KeyValuePair<MeterPerSecond, AccelerationEntry>(
-						r.ParseDouble(0).KMPHtoMeterPerSecond(),
-						new AccelerationEntry {
-							Acceleration = r.ParseDouble(1).SI<MeterPerSquareSecond>(),
-							Deceleration = r.ParseDouble(2).SI<MeterPerSquareSecond>()
-						}))
-					.OrderBy(x => x.Key)
-					.ToList()
-			};
-		}
-
-		private static AccelerationCurveData CreateFromColumnNames(DataTable data)
-		{
-			return new AccelerationCurveData {
-				_entries = data.Rows.Cast<DataRow>()
-					.Select(r => new KeyValuePair<MeterPerSecond, AccelerationEntry>(
-						r.ParseDouble(Fields.Velocity).KMPHtoMeterPerSecond(),
-						new AccelerationEntry {
-							Acceleration = r.ParseDouble(Fields.Acceleration).SI<MeterPerSquareSecond>(),
-							Deceleration = r.ParseDouble(Fields.Deceleration).SI<MeterPerSquareSecond>()
-						}))
-					.OrderBy(x => x.Key)
-					.ToList()
-			};
-		}
-
-		private static bool HeaderIsValid(DataColumnCollection columns)
-		{
-			return columns.Contains(Fields.Velocity) &&
-					columns.Contains(Fields.Acceleration) &&
-					columns.Contains(Fields.Deceleration);
+			_entries = entries;
 		}
 
 		public AccelerationEntry Lookup(MeterPerSecond key)
 		{
 			var index = FindIndex(key);
 
-			return new AccelerationEntry {
+			return new AccelerationCurveData.AccelerationEntry {
 				Acceleration =
 					VectoMath.Interpolate(_entries[index - 1].Key, _entries[index].Key,
 						_entries[index - 1].Value.Acceleration,
@@ -234,14 +166,5 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			var t = Math.Log(((v2 * k + d) / (v1 * k + d)).Cast<Scalar>()) / k;
 			return m / k * Math.Exp((k * t).Value()) + b * t + c;
 		}
-
-		private static class Fields
-		{
-			public const string Velocity = "v";
-
-			public const string Acceleration = "acc";
-
-			public const string Deceleration = "dec";
-		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs
index 783d16f4d6db94084bcf7eeac91784c282ce1d85..bbc64f3d864745d28ce064917ec056179fc41745 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMap.cs
@@ -43,75 +43,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 {
 	public class FuelConsumptionMap : SimulationComponentData
 	{
-		[Required, ValidateObject] private readonly DelaunayMap _fuelMap = new DelaunayMap("FuelConsumptionMap");
+		[Required, ValidateObject] private readonly DelaunayMap _fuelMap;
 
-		private FuelConsumptionMap() {}
-
-		public static FuelConsumptionMap ReadFromFile(string fileName)
-		{
-			try {
-				var data = VectoCSVFile.Read(fileName);
-				return Create(data);
-			} catch (Exception e) {
-				throw new VectoException(string.Format("File {0}: {1}", fileName, e.Message), e);
-			}
-		}
-
-		public static FuelConsumptionMap Create(DataTable data)
-		{
-			var headerValid = HeaderIsValid(data.Columns);
-			if (!headerValid) {
-				Logger<FuelConsumptionMap>().Warn(
-					"FuelConsumptionMap: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}",
-					Fields.EngineSpeed, Fields.Torque, Fields.FuelConsumption,
-					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName)));
-			}
-			var fuelConsumptionMap = new FuelConsumptionMap();
-
-			foreach (DataRow row in data.Rows) {
-				try {
-					var entry = headerValid ? CreateFromColumNames(row) : CreateFromColumnIndizes(row);
-
-					// Delaunay map works only as expected, when the angularVelocity is in rpm.
-					fuelConsumptionMap._fuelMap.AddPoint(entry.Torque.Value(),
-						headerValid ? row.ParseDouble(Fields.EngineSpeed) : row.ParseDouble(0),
-						entry.FuelConsumption.Value());
-				} catch (Exception e) {
-					throw new VectoException(string.Format("Line {0}: {1}", data.Rows.IndexOf(row), e.Message), e);
-				}
-			}
-
-			fuelConsumptionMap._fuelMap.Triangulate();
-			return fuelConsumptionMap;
-		}
-
-		private static bool HeaderIsValid(DataColumnCollection columns)
+		protected internal FuelConsumptionMap(DelaunayMap fuelMap)
 		{
-			return columns.Contains(Fields.EngineSpeed) && columns.Contains(Fields.Torque) &&
-					columns.Contains(Fields.FuelConsumption);
-		}
-
-		private static FuelConsumptionEntry CreateFromColumnIndizes(DataRow row)
-		{
-			return new FuelConsumptionEntry(
-				engineSpeed: row.ParseDouble(0).RPMtoRad(),
-				torque: row.ParseDouble(1).SI<NewtonMeter>(),
-				fuelConsumption:
-					row.ParseDouble(2).SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Cast<KilogramPerSecond>()
-				);
-		}
-
-		private static FuelConsumptionEntry CreateFromColumNames(DataRow row)
-		{
-			return new FuelConsumptionEntry(
-				engineSpeed: row.ParseDouble(Fields.EngineSpeed).SI().Rounds.Per.Minute.Cast<PerSecond>(),
-				torque: row.ParseDouble(Fields.Torque).SI<NewtonMeter>(),
-				fuelConsumption:
-					row.ParseDouble(Fields.FuelConsumption)
-						.SI()
-						.Gramm.Per.Hour.ConvertTo()
-						.Kilo.Gramm.Per.Second.Cast<KilogramPerSecond>()
-				);
+			_fuelMap = fuelMap;
 		}
 
 		/// <summary>
@@ -122,37 +58,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 		{
 			// delaunay map needs is initialised with rpm, therefore the angularVelocity has to be converted.
 			var value = _fuelMap.Interpolate(torque.Value(), angularVelocity.AsRPM);
-			if (value.HasValue)
+			if (value.HasValue) {
 				return value.Value.SI().Kilo.Gramm.Per.Second.Cast<KilogramPerSecond>();
+			}
 
-			if (allowExtrapolation)
+			if (allowExtrapolation) {
 				return
 					_fuelMap.Extrapolate(torque.Value(), angularVelocity.AsRPM).SI().Kilo.Gramm.Per.Second.Cast<KilogramPerSecond>();
+			}
 
 			throw new VectoException("FuelConsumptionMap: Interpolation failed. torque: {0}, n: {1}", torque.Value(),
 				angularVelocity.AsRPM);
 		}
 
-		private static class Fields
-		{
-			/// <summary>
-			/// [rpm]
-			/// </summary>
-			public const string EngineSpeed = "engine speed";
-
-			/// <summary>
-			/// [Nm]
-			/// </summary>
-			public const string Torque = "torque";
-
-			/// <summary>
-			/// [g/h]
-			/// </summary>
-			public const string FuelConsumption = "fuel consumption";
-		}
-
 		[SuppressMessage("ReSharper", "MemberCanBePrivate.Local")]
-		private class FuelConsumptionEntry
+		public class FuelConsumptionEntry
 		{
 			[Required, SIRange(0, 5000 * Constants.RPMToRad)]
 			public PerSecond EngineSpeed { get; set; }
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMapReader.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMapReader.cs
new file mode 100644
index 0000000000000000000000000000000000000000..34357faf66a489d3ab3e32ff2ac63aa82dc4ad31
--- /dev/null
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/FuelConsumptionMapReader.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Data;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
+{
+	public class FuelConsumptionMapReader
+	{
+		public static FuelConsumptionMap ReadFromFile(string fileName)
+		{
+			try {
+				var data = VectoCSVFile.Read(fileName);
+				return Create(data);
+			} catch (Exception e) {
+				throw new VectoException(string.Format("File {0}: {1}", fileName, e.Message), e);
+			}
+		}
+
+		public static FuelConsumptionMap Create(DataTable data)
+		{
+			var headerValid = HeaderIsValid(data.Columns);
+			if (!headerValid) {
+				LoggingObject.Logger<FuelConsumptionMap>().Warn(
+					"FuelConsumptionMap: Header Line is not valid. Expected: '{0}, {1}, {2}', Got: {3}",
+					Fields.EngineSpeed, Fields.Torque, Fields.FuelConsumption,
+					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName)));
+			}
+			var delaunayMap = new DelaunayMap("FuelConsumptionMap");
+
+			foreach (DataRow row in data.Rows) {
+				try {
+					var entry = headerValid ? CreateFromColumNames(row) : CreateFromColumnIndizes(row);
+
+					// Delaunay map works only as expected, when the angularVelocity is in rpm.
+					delaunayMap.AddPoint(entry.Torque.Value(),
+						headerValid ? DataTableExtensionMethods.ParseDouble(row, (string)Fields.EngineSpeed) : row.ParseDouble(0),
+						entry.FuelConsumption.Value());
+				} catch (Exception e) {
+					throw new VectoException(string.Format("Line {0}: {1}", data.Rows.IndexOf(row), e.Message), e);
+				}
+			}
+
+			delaunayMap.Triangulate();
+			return new FuelConsumptionMap(delaunayMap);
+		}
+
+		private static bool HeaderIsValid(DataColumnCollection columns)
+		{
+			return columns.Contains(Fields.EngineSpeed) && columns.Contains(Fields.Torque) &&
+					columns.Contains(Fields.FuelConsumption);
+		}
+
+		private static FuelConsumptionMap.FuelConsumptionEntry CreateFromColumnIndizes(DataRow row)
+		{
+			return new FuelConsumptionMap.FuelConsumptionEntry(
+				engineSpeed: row.ParseDouble(0).RPMtoRad(),
+				torque: row.ParseDouble(1).SI<NewtonMeter>(),
+				fuelConsumption:
+					row.ParseDouble(2).SI().Gramm.Per.Hour.ConvertTo().Kilo.Gramm.Per.Second.Cast<KilogramPerSecond>()
+				);
+		}
+
+		private static FuelConsumptionMap.FuelConsumptionEntry CreateFromColumNames(DataRow row)
+		{
+			return new FuelConsumptionMap.FuelConsumptionEntry(
+				engineSpeed: row.ParseDouble((string)Fields.EngineSpeed).SI().Rounds.Per.Minute.Cast<PerSecond>(),
+				torque: row.ParseDouble((string)Fields.Torque).SI<NewtonMeter>(),
+				fuelConsumption:
+					row.ParseDouble((string)Fields.FuelConsumption)
+						.SI()
+						.Gramm.Per.Hour.ConvertTo()
+						.Kilo.Gramm.Per.Second.Cast<KilogramPerSecond>()
+				);
+		}
+
+		public static class Fields
+		{
+			/// <summary>
+			/// [rpm]
+			/// </summary>
+			public const string EngineSpeed = "engine speed";
+
+			/// <summary>
+			/// [Nm]
+			/// </summary>
+			public const string Torque = "torque";
+
+			/// <summary>
+			/// [g/h]
+			/// </summary>
+			public const string FuelConsumption = "fuel consumption";
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/PT1Curve.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/PT1Curve.cs
index 32d9b6f27bd29aa2200e31a4d881b134a5dd3f5a..3a8434e773ba8023eae91b3c8697c6466e610f53 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/PT1Curve.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Engine/PT1Curve.cs
@@ -74,7 +74,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Engine
 
 		protected override void ParseData(DataTable data)
 		{
-			if (data.Columns.Count < 4) {
+			if (data.Columns.Count < 3) {
 				throw new VectoException("FullLoadCurve/PT1 Data File must consist of at least 4 columns.");
 			}
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs
index 4ace802b074c43cbc7bb30bc325e9d9833aebe3a..c6eea8806a7b34b36fe1ed22da8c5d2dae487dc8 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs
@@ -51,7 +51,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 		[ValidateObject]
 		public FullLoadCurve FullLoadCurve { get; internal set; }
 
-		// TODO mk-2016-05-09: Refactor TorqueConverterActive Flag when implementing Torque Converter
 		public bool TorqueConverterActive { get; internal set; }
+
+		public NewtonMeter MaxTorque { get; internal set; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs
index cd32910fff3a59e46e576a6128f9fe64d37eb158..1bbcf718f5c1a3fc4e074d644e2a138b61d4e80b 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TorqueConverterData.cs
@@ -29,7 +29,82 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using iTextSharp.text.pdf.codec;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Utils;
+
 namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 {
-	public class TorqueConverterData {}
+	public class TorqueConverterData
+	{
+		public List<TorqueConverterEntry> TorqueConverterEntries;
+
+		protected internal TorqueConverterData(List<TorqueConverterEntry> torqueConverterEntries)
+		{
+			TorqueConverterEntries = torqueConverterEntries;
+		}
+
+		public void GetInputTorqueAndAngularSpeed(NewtonMeter torqueOut, PerSecond angularSpeedOut, out NewtonMeter torqueIn,
+			out PerSecond angularSpeedIn)
+		{
+			var solutions = new List<double>();
+			var mpNorm = 1000.RPMtoRad().Value();
+
+			// Find analytic solution for torque converter operating point
+			// mu = f(nu) = f(n_out / n_in) = T_out / T_in
+			// MP1000 = f(nu) = f(n_out / n_in)
+			// Tq_in = MP1000(nu) * (n_in/1000)^2 = T_out / mu
+			//
+			// mu(nu) and MP1000(nu) are provided as piecewise linear functions (y = k*x+d)
+			// solving the equation above for n_in results in a quadratic equation
+			foreach (var segment in TorqueConverterEntries.Pairwise(Tuple.Create)) {
+				var mpEdge = Edge.Create(new Point(segment.Item1.SpeedRatio, segment.Item1.Torque.Value()),
+					new Point(segment.Item2.SpeedRatio, segment.Item2.Torque.Value()));
+				var muEdge = Edge.Create(new Point(segment.Item1.SpeedRatio, segment.Item1.TorqueRatio),
+					new Point(segment.Item2.SpeedRatio, segment.Item2.TorqueRatio));
+
+				var a = muEdge.OffsetXY * mpEdge.OffsetXY / (mpNorm * mpNorm);
+				var b = angularSpeedOut.Value() * (muEdge.SlopeXY * mpEdge.OffsetXY + mpEdge.SlopeXY * muEdge.OffsetXY) /
+						(mpNorm * mpNorm);
+				var c = angularSpeedOut.Value() * angularSpeedOut.Value() * mpEdge.SlopeXY * muEdge.SlopeXY / (mpNorm * mpNorm) -
+						torqueOut.Value();
+				var sol = VectoMath.QuadraticEquationSolver(a, b, c);
+
+				var selected = sol.Where(x => x > 0
+											&& angularSpeedOut.Value() / x >= muEdge.P1.X && angularSpeedOut.Value() / x < muEdge.P2.X
+											&& angularSpeedOut.Value() / x >= mpEdge.P1.X && angularSpeedOut.Value() / x < mpEdge.P2.X);
+				solutions.AddRange(selected);
+			}
+			if (solutions.Count == 0) {
+				throw new VectoException("No solution for input torque/input speed found! n_out: {0}, tq_out: {1}", angularSpeedOut, torqueOut);
+			}
+
+			angularSpeedIn = solutions.Min().SI<PerSecond>();
+			var mu = MuLookup(angularSpeedOut / angularSpeedIn);
+			torqueIn = torqueOut / mu;
+		}
+
+		private double MuLookup(double nu)
+		{
+			int index;
+			TorqueConverterEntries.GetSection(x => x.SpeedRatio > nu, out index);
+			var muEdge = Edge.Create(new Point(TorqueConverterEntries[index].SpeedRatio, TorqueConverterEntries[index].TorqueRatio),
+				new Point(TorqueConverterEntries[index + 1].SpeedRatio, TorqueConverterEntries[index + 1].TorqueRatio));
+			return muEdge.SlopeXY * nu + muEdge.OffsetXY;
+		}
+	}
+
+
+	public class TorqueConverterEntry
+	{
+		public double SpeedRatio;
+		public NewtonMeter Torque;
+		public double TorqueRatio;
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs
index 91c7fc84a5127d1c862d90905ec71ae0f8f18500..90441ee4d8a58c275af1f0385eb0f234051331ec 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/TransmissionLossMap.cs
@@ -45,7 +45,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 {
 	public sealed class TransmissionLossMap : LoggingObject
 	{
-		[ValidateObject] private readonly List<GearLossMapEntry> _entries;
+		[ValidateObject] private readonly IReadOnlyList<GearLossMapEntry> _entries;
 
 		private readonly double _ratio;
 
@@ -59,103 +59,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 		/// </summary>
 		private readonly DelaunayMap _invertedLossMap;
 
-		public void DrawGraph()
-		{
-			_lossMap.DrawGraph();
-		}
-
 		public string GearName { get; private set; }
 
-		public static TransmissionLossMap ReadFromFile(string fileName, double gearRatio, string gearName)
-		{
-			try {
-				var data = VectoCSVFile.Read(fileName, true);
-				return Create(data, gearRatio, gearName);
-			} catch (Exception ex) {
-				throw new VectoException("ERROR while reading TransmissionLossMap: " + ex.Message);
-			}
-		}
-
-		/// <summary>
-		/// Create a TransmissionLoss Map from a DataTable.
-		/// </summary>
-		/// <param name="data"></param>
-		/// <param name="gearRatio"></param>
-		/// <param name="gearName"></param>
-		/// <returns></returns>
-		public static TransmissionLossMap Create(DataTable data, double gearRatio, string gearName)
-		{
-			if (data.Columns.Count < 3) {
-				throw new VectoException("TransmissionLossMap Data File for {0} must consist of at least 3 columns.", gearName);
-			}
-
-			if (data.Rows.Count < 4) {
-				throw new VectoException(
-					"TransmissionLossMap for {0} must consist of at least four lines with numeric values (below file header", gearName);
-			}
-
-			List<GearLossMapEntry> entries;
-			if (HeaderIsValid(data.Columns)) {
-				entries = CreateFromColumnNames(data);
-			} else {
-				Logger<TransmissionLossMap>().Warn(
-					"TransmissionLossMap {5}: Header line is not valid. Expected: '{0}, {1}, {2}, <{3}>'. Got: '{4}'. Falling back to column index.",
-					Fields.InputSpeed, Fields.InputTorque, Fields.TorqeLoss, Fields.Efficiency,
-					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse()), gearName);
-
-				entries = CreateFromColumIndizes(data);
-			}
-
-			return new TransmissionLossMap(entries, gearRatio, gearName);
-		}
-
-		/// <summary>
-		/// Create a DataTable from an efficiency value.
-		/// </summary>
-		/// <param name="efficiency"></param>
-		/// <param name="gearRatio"></param>
-		/// <param name="gearName"></param>
-		/// <returns></returns>
-		public static TransmissionLossMap Create(double efficiency, double gearRatio, string gearName)
-		{
-			var entries = new List<GearLossMapEntry> {
-				new GearLossMapEntry(0.RPMtoRad(), 1e5.SI<NewtonMeter>(), (1 - efficiency) * 1e5.SI<NewtonMeter>()),
-				new GearLossMapEntry(0.RPMtoRad(), -1e5.SI<NewtonMeter>(), (1 - efficiency) * 1e5.SI<NewtonMeter>()),
-				new GearLossMapEntry(0.RPMtoRad(), 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>()),
-				new GearLossMapEntry(5000.RPMtoRad(), 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>()),
-				new GearLossMapEntry(5000.RPMtoRad(), -1e5.SI<NewtonMeter>(), (1 - efficiency) * 1e5.SI<NewtonMeter>()),
-				new GearLossMapEntry(5000.RPMtoRad(), 1e5.SI<NewtonMeter>(), (1 - efficiency) * 1e5.SI<NewtonMeter>()),
-			};
-			return new TransmissionLossMap(entries, gearRatio, gearName);
-		}
-
-		private static bool HeaderIsValid(DataColumnCollection columns)
-		{
-			return columns.Contains(Fields.InputSpeed) && columns.Contains(Fields.InputTorque) &&
-					columns.Contains(Fields.TorqeLoss);
-		}
-
-		private static List<GearLossMapEntry> CreateFromColumnNames(DataTable data)
-		{
-			return (from DataRow row in data.Rows
-				select new GearLossMapEntry(
-					inputSpeed: row.ParseDouble(Fields.InputSpeed).RPMtoRad(),
-					inputTorque: row.ParseDouble(Fields.InputTorque).SI<NewtonMeter>(),
-					torqueLoss: row.ParseDouble(Fields.TorqeLoss).SI<NewtonMeter>()))
-				.ToList();
-		}
-
-		private static List<GearLossMapEntry> CreateFromColumIndizes(DataTable data)
-		{
-			return (from DataRow row in data.Rows
-				select new GearLossMapEntry(
-					inputSpeed: row.ParseDouble(0).RPMtoRad(),
-					inputTorque: row.ParseDouble(1).SI<NewtonMeter>(),
-					torqueLoss: row.ParseDouble(2).SI<NewtonMeter>()))
-				.ToList();
-		}
-
-		private TransmissionLossMap(List<GearLossMapEntry> entries, double gearRatio, string gearName)
+		public TransmissionLossMap(IReadOnlyList<GearLossMapEntry> entries, double gearRatio, string gearName)
 		{
 			GearName = gearName;
 			_ratio = gearRatio;
@@ -181,7 +87,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 		/// <returns>Torque loss as seen on input side (towards the engine).</returns>
 		public LossMapResult GetTorqueLoss(PerSecond outAngularVelocity, NewtonMeter outTorque)
 		{
-			var result = new LossMapResult();
+			var result = new TransmissionLossMap.LossMapResult();
 			var torqueLoss = _lossMap.Interpolate(outAngularVelocity.ConvertTo().Rounds.Per.Minute.Value() * _ratio,
 				outTorque.Value() / _ratio);
 
@@ -233,6 +139,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 			get { return _entries[i]; }
 		}
 
+		public void DrawGraph()
+		{
+			_lossMap.DrawGraph();
+		}
+
 		[DebuggerDisplay("GearLossMapEntry({InputSpeed}, {InputTorque}, {TorqueLoss})")]
 		public class GearLossMapEntry
 		{
@@ -252,20 +163,5 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 				TorqueLoss = torqueLoss;
 			}
 		}
-
-		private static class Fields
-		{
-			/// <summary>[rpm]</summary>
-			public const string InputSpeed = "Input Speed";
-
-			/// <summary>[Nm]</summary>
-			public const string InputTorque = "Input Torque";
-
-			/// <summary>[Nm]</summary>
-			public const string TorqeLoss = "Torque Loss";
-
-			/// <summary>[-]</summary>
-			public const string Efficiency = "Eff";
-		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
index 0cdb43d5f7b51e629767e73ad555c6c8e1cd71f7..be064b524225f3b1b2dee07345b2b615c0622cd7 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
@@ -92,13 +92,13 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		[Required, SIRange(double.Epsilon, 2)]
 		public MeterPerSquareSecond StartAcceleration { get; internal set; }
 
-		/// <summary>
-		/// Gets a value indicating whether this instance has torque converter.
-		/// </summary>
-		/// <value>
-		/// <c>true</c> if this instance has torque converter; otherwise, <c>false</c>.
-		/// </value>
-		public bool HasTorqueConverter { get; internal set; }
+		///// <summary>
+		///// Gets a value indicating whether this instance has torque converter.
+		///// </summary>
+		///// <value>
+		///// <c>true</c> if this instance has torque converter; otherwise, <c>false</c>.
+		///// </value>
+		//public bool HasTorqueConverter { get; internal set; }
 
 		[Required, SIRange(0, double.MaxValue)]
 		public Second UpshiftAfterDownshiftDelay { get; internal set; }
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs
index 1b50887eb048019a83d84d3fccea2abe1458a61b..319f5b3e948dfd2a3ea7a7ca6160c50b65e102e1 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/RetarderLossMap.cs
@@ -45,10 +45,15 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 	/// </summary>
 	public class RetarderLossMap : SimulationComponentData
 	{
-		[ValidateObject] private List<RetarderLossEntry> _entries;
+		[ValidateObject] private readonly IReadOnlyList<RetarderLossEntry> _entries;
 		private PerSecond _minSpeed;
 		private PerSecond _maxSpeed;
 
+		protected internal RetarderLossMap(List<RetarderLossEntry> entries)
+		{
+			_entries = entries;
+		}
+
 		/// <summary>
 		/// Gets the minimal defined speed of the retarder loss map.
 		/// </summary>
@@ -65,50 +70,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			get { return _maxSpeed ?? (_maxSpeed = _entries.Max(e => e.RetarderSpeed)); }
 		}
 
-		/// <summary>
-		/// Read the retarder loss map from a file.
-		/// </summary>
-		/// <param name="fileName"></param>
-		/// <returns></returns>
-		public static RetarderLossMap ReadFromFile(string fileName)
-		{
-			try {
-				return Create(VectoCSVFile.Read(fileName));
-			} catch (Exception ex) {
-				throw new VectoException("ERROR while loading RetarderLossMap: " + ex.Message);
-			}
-		}
-
-		/// <summary>
-		/// Create the retarder loss map from an appropriate datatable. (2 columns: Retarder Speed, Torque Loss)
-		/// </summary>
-		/// <param name="data"></param>
-		/// <returns></returns>
-		public static RetarderLossMap Create(DataTable data)
-		{
-			if (data.Columns.Count != 2) {
-				throw new VectoException("RetarderLossMap Data File must consist of 2 columns: Retarder Speed, Torque Loss");
-			}
-
-			if (data.Rows.Count < 2) {
-				throw new VectoException("RetarderLossMap must contain at least 2 entries.");
-			}
-
-			List<RetarderLossEntry> entries;
-			if (HeaderIsValid(data.Columns)) {
-				entries = CreateFromColumnNames(data);
-			} else {
-				Logger<RetarderLossMap>().Warn(
-					"RetarderLossMap: Header Line is not valid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.",
-					Fields.RetarderSpeed, Fields.TorqueLoss,
-					", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse()));
-				entries = CreateFromColumnIndizes(data);
-			}
-
-			entries.Sort((entry1, entry2) => entry1.RetarderSpeed.Value().CompareTo(entry2.RetarderSpeed.Value()));
-			return new RetarderLossMap { _entries = entries };
-		}
-
 		/// <summary>
 		/// Calculates the retarder losses.
 		/// </summary>
@@ -121,30 +82,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 				angularVelocity);
 		}
 
-		private static List<RetarderLossEntry> CreateFromColumnNames(DataTable data)
-		{
-			return data.Rows.Cast<DataRow>()
-				.Select(row => new RetarderLossEntry {
-					RetarderSpeed = row.ParseDouble(Fields.RetarderSpeed).RPMtoRad(),
-					TorqueLoss = row.ParseDouble(Fields.TorqueLoss).SI<NewtonMeter>()
-				}).ToList();
-		}
-
-		private static bool HeaderIsValid(DataColumnCollection columns)
-		{
-			return columns.Contains(Fields.RetarderSpeed) && columns.Contains(Fields.TorqueLoss);
-		}
-
-		private static List<RetarderLossEntry> CreateFromColumnIndizes(DataTable data)
-		{
-			return data.Rows.Cast<DataRow>()
-				.Select(row => new RetarderLossEntry {
-					RetarderSpeed = row.ParseDouble(0).RPMtoRad(),
-					TorqueLoss = row.ParseDouble(1).SI<NewtonMeter>()
-				}).ToList();
-		}
-
-		private class RetarderLossEntry
+		public class RetarderLossEntry
 		{
 			[Required, SIRange(0, double.MaxValue)]
 			public PerSecond RetarderSpeed { get; set; }
@@ -152,18 +90,5 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			[Required, SIRange(0, 500)]
 			public NewtonMeter TorqueLoss { get; set; }
 		}
-
-		private static class Fields
-		{
-			/// <summary>
-			///     [rpm]
-			/// </summary>
-			public const string RetarderSpeed = "Retarder Speed";
-
-			/// <summary>
-			///     [Nm]
-			/// </summary>
-			public const string TorqueLoss = "Torque Loss";
-		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
index 3f21d3baf2d6d7b1cc3eb45ecdbdd31d544886a7..335e24755da37245d8ff9edf69c0808843a17f75 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
@@ -55,16 +55,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		[Required, ValidateObject]
 		public ICrossWindCorrection CrossWindCorrectionCurve { get; internal set; }
 
-		private List<Axle> _axleData;
+		[Required, ValidateObject] private List<Axle> _axleData;
+
+		private KilogramSquareMeter _wheelsInertia;
+		private double? _totalRollResistanceCoefficient;
 
-		[Required, ValidateObject]
 		public List<Axle> AxleData
 		{
 			get { return _axleData; }
 			internal set
 			{
 				_axleData = value;
-				ComputeRollResistanceAndReducedMassWheels();
+				_wheelsInertia = null;
+				_totalRollResistanceCoefficient = null;
 			}
 		}
 
@@ -94,12 +97,30 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		[Required, SIRange(0.1, 0.7)]
 		public Meter DynamicTyreRadius { get; internal set; }
 
-		public KilogramSquareMeter WheelsInertia { get; internal set; }
-
-		public string Rim { get; internal set; }
+		public KilogramSquareMeter WheelsInertia
+		{
+			get
+			{
+				if (_wheelsInertia == null) {
+					ComputeRollResistanceAndReducedMassWheels();
+				}
+				return _wheelsInertia;
+			}
+			internal set { _wheelsInertia = value; }
+		}
 
 		[Required, SIRange(0, 1E12)]
-		public double TotalRollResistanceCoefficient { get; private set; }
+		public double TotalRollResistanceCoefficient
+		{
+			get
+			{
+				if (_totalRollResistanceCoefficient == null) {
+					ComputeRollResistanceAndReducedMassWheels();
+				}
+				return _totalRollResistanceCoefficient.GetValueOrDefault();
+			}
+			private set { _totalRollResistanceCoefficient = value; }
+		}
 
 		public CrossWindCorrectionMode CrossWindCorrectionMode { get; set; }
 
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..278dc446517fdebfccac9d1154c4c6de675ecbd7
--- /dev/null
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverter.cs
@@ -0,0 +1,26 @@
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Connector.Ports;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
+{
+	public class TorqueConverter : ITnInPort, ITnOutPort
+	{
+		protected internal ITnOutPort NextComponent;
+
+		public void Connect(ITnOutPort other)
+		{
+			NextComponent = other;
+		}
+
+		public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false)
+		{
+			throw new System.NotImplementedException();
+		}
+
+		public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity)
+		{
+			throw new System.NotImplementedException();
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
index 39830a4f407803e5bd678d278c1d6c4de4e44a88..a74972dec2f5336fe48f93740daf655b54369d62 100644
--- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
@@ -46,61 +46,61 @@ namespace TUGraz.VectoCore.OutputData
 	public class SummaryDataContainer : LoggingObject, IDisposable
 	{
 		// ReSharper disable InconsistentNaming
-		private const string JOB = "Job [-]";
-		private const string INPUTFILE = "Input File [-]";
-		private const string CYCLE = "Cycle [-]";
-		private const string STATUS = "Status";
-		private const string MASS = "Mass [kg]";
-		private const string LOADING = "Loading [kg]";
-		private const string TIME = "time [s]";
-		private const string DISTANCE = "distance [km]";
-		private const string SPEED = "speed [km/h]";
-		private const string ALTITUDE_DELTA = "altitudeDelta [m]";
-
-		private const string FCMAP_H = "FC-Map [g/h]";
-		private const string FCMAP_KM = "FC-Map [g/km]";
-		private const string FCAUXC_H = "FC-AUXc [g/h]";
-		private const string FCAUXC_KM = "FC-AUXc [g/km]";
-		private const string FCWHTCC_H = "FC-WHTCc [g/h]";
-		private const string FCWHTCC_KM = "FC-WHTCc [g/km]";
-		private const string FCAAUX_H = "FC-AAUX [g/h]";
-		private const string FCAAUX_KM = "FC-AAUX [g/km]";
-
-		private const string FCFINAL_H = "FC-Final [g/h]";
-		private const string FCFINAL_KM = "FC-Final [g/km]";
-		private const string FCFINAL_LITERPER100KM = "FC-Final [l/100km]";
-		private const string FCFINAL_LITERPER100TKM = "FC-Final [l/100tkm]";
-
-		private const string CO2_KM = "CO2 [g/km]";
-		private const string CO2_TKM = "CO2 [g/tkm]";
-
-		private const string P_WHEEL_POS = "P_wheel_in_pos [kW]";
-		private const string P_BRAKE_LOSS = "P_brake_loss [kW]";
-		private const string P_ENG_POS = "P_eng_out_pos [kW]";
-		private const string P_ENG_NEG = "P_eng_out_neg [kW]";
-
-		private const string E_AUX_FORMAT = "E_aux_{0} [kWh]";
-		private const string E_AUX = "E_aux_sum [kWh]";
-
-		private const string E_AIR = "E_air [kWh]";
-		private const string E_ROLL = "E_roll [kWh]";
-		private const string E_GRAD = "E_grad [kWh]";
-		private const string E_INERTIA = "E_inertia [kWh]";
-		private const string E_BRAKE = "E_brake [kWh]";
-		private const string E_GBX_AXL_LOSS = "E_gbx_axl_loss [kWh]";
-		private const string E_RET_LOSS = "E_ret_loss [kWh]";
-		private const string E_TC_LOSS = "E_tc_loss [kWh]";
-		private const string E_ENG_POS = "E_eng_out_pos [kWh]";
-		private const string E_ENG_NEG = "E_eng_out_neg [kWh]";
-
-		private const string ACC = "a [m/s^2]";
-		private const string ACC_POS = "a_pos [m/s^2]";
-		private const string ACC_NEG = "a_neg [m/s^2]";
-
-		private const string ACC_TIMESHARE = "AccelerationTimeShare [%]";
-		private const string DEC_TIMESHARE = "DecelerationTimeShare [%]";
-		private const string CRUISE_TIMESHARE = "CruiseTimeShare [%]";
-		private const string STOP_TIMESHARE = "StopTimeShare [%]";
+		public const string JOB = "Job [-]";
+		public const string INPUTFILE = "Input File [-]";
+		public const string CYCLE = "Cycle [-]";
+		public const string STATUS = "Status";
+		public const string MASS = "Mass [kg]";
+		public const string LOADING = "Loading [kg]";
+		public const string TIME = "time [s]";
+		public const string DISTANCE = "distance [km]";
+		public const string SPEED = "speed [km/h]";
+		public const string ALTITUDE_DELTA = "altitudeDelta [m]";
+
+		public const string FCMAP_H = "FC-Map [g/h]";
+		public const string FCMAP_KM = "FC-Map [g/km]";
+		public const string FCAUXC_H = "FC-AUXc [g/h]";
+		public const string FCAUXC_KM = "FC-AUXc [g/km]";
+		public const string FCWHTCC_H = "FC-WHTCc [g/h]";
+		public const string FCWHTCC_KM = "FC-WHTCc [g/km]";
+		public const string FCAAUX_H = "FC-AAUX [g/h]";
+		public const string FCAAUX_KM = "FC-AAUX [g/km]";
+
+		public const string FCFINAL_H = "FC-Final [g/h]";
+		public const string FCFINAL_KM = "FC-Final [g/km]";
+		public const string FCFINAL_LITERPER100KM = "FC-Final [l/100km]";
+		public const string FCFINAL_LITERPER100TKM = "FC-Final [l/100tkm]";
+
+		public const string CO2_KM = "CO2 [g/km]";
+		public const string CO2_TKM = "CO2 [g/tkm]";
+
+		public const string P_WHEEL_POS = "P_wheel_in_pos [kW]";
+		public const string P_BRAKE_LOSS = "P_brake_loss [kW]";
+		public const string P_ENG_POS = "P_eng_out_pos [kW]";
+		public const string P_ENG_NEG = "P_eng_out_neg [kW]";
+
+		public const string E_AUX_FORMAT = "E_aux_{0} [kWh]";
+		public const string E_AUX = "E_aux_sum [kWh]";
+
+		public const string E_AIR = "E_air [kWh]";
+		public const string E_ROLL = "E_roll [kWh]";
+		public const string E_GRAD = "E_grad [kWh]";
+		public const string E_INERTIA = "E_inertia [kWh]";
+		public const string E_BRAKE = "E_brake [kWh]";
+		public const string E_GBX_AXL_LOSS = "E_gbx_axl_loss [kWh]";
+		public const string E_RET_LOSS = "E_ret_loss [kWh]";
+		public const string E_TC_LOSS = "E_tc_loss [kWh]";
+		public const string E_ENG_POS = "E_eng_out_pos [kWh]";
+		public const string E_ENG_NEG = "E_eng_out_neg [kWh]";
+
+		public const string ACC = "a [m/s^2]";
+		public const string ACC_POS = "a_pos [m/s^2]";
+		public const string ACC_NEG = "a_neg [m/s^2]";
+
+		public const string ACC_TIMESHARE = "AccelerationTimeShare [%]";
+		public const string DEC_TIMESHARE = "DecelerationTimeShare [%]";
+		public const string CRUISE_TIMESHARE = "CruiseTimeShare [%]";
+		public const string STOP_TIMESHARE = "StopTimeShare [%]";
 		// ReSharper restore InconsistentNaming
 
 		private readonly DataTable _table;
diff --git a/VectoCore/VectoCore/Properties/AssemblyInfo.cs b/VectoCore/VectoCore/Properties/AssemblyInfo.cs
index 26acbf31628823236bf0dc257eb059a500dcb353..0dae924fd18d0f9ee33a290d821538f179f12443 100644
--- a/VectoCore/VectoCore/Properties/AssemblyInfo.cs
+++ b/VectoCore/VectoCore/Properties/AssemblyInfo.cs
@@ -43,6 +43,7 @@ using System.Runtime.InteropServices;
 [assembly: ComVisible(false)]
 [assembly: Guid("b843f4c2-660b-4a3e-a336-c1f9c20aa993")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VectoAPI")]
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VectoEngineeringAPI")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VECTO")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VectoCoreTest")]
 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("VectoAPITest")]
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Utils/DelaunayMap.cs b/VectoCore/VectoCore/Utils/DelaunayMap.cs
index 852d9571a24825ad742d1a6fec8c2c5b73b19745..54036b56b7e8f64c39dc4d9a2e8e2c5d7c6c7ab3 100644
--- a/VectoCore/VectoCore/Utils/DelaunayMap.cs
+++ b/VectoCore/VectoCore/Utils/DelaunayMap.cs
@@ -39,6 +39,7 @@ using System.Windows.Forms.DataVisualization.Charting;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using Point = TUGraz.VectoCommon.Utils.Point;
 
 namespace TUGraz.VectoCore.Utils
 {
diff --git a/VectoCore/VectoCore/Utils/ProviderExtensions.cs b/VectoCore/VectoCore/Utils/ProviderExtensions.cs
index 294757a699bc4cb6545a429ca14541f2e034520f..7abcea559cc15d88385754b5df0b4d5ed551c6a5 100644
--- a/VectoCore/VectoCore/Utils/ProviderExtensions.cs
+++ b/VectoCore/VectoCore/Utils/ProviderExtensions.cs
@@ -83,8 +83,9 @@ namespace TUGraz.VectoCore.Utils
 
 		public static IPowerTrainComponent AddComponent(this IPowerTrainComponent prev, IPowerTrainComponent next)
 		{
-			if (next == null)
+			if (next == null) {
 				return prev;
+			}
 
 			prev.InPort().Connect(next.OutPort());
 			return next;
@@ -95,26 +96,26 @@ namespace TUGraz.VectoCore.Utils
 			prev.InPort().Connect(next.OutPort());
 
 			var clutch = prev as IClutch;
-			if (clutch != null)
+			if (clutch != null) {
 				next.IdleController.RequestPort = clutch.IdleControlPort;
+			}
 			return next;
 		}
 
 		public static IPowerTrainComponent AddRetarderAndGearbox(this IPowerTrainComponent prev, RetarderData data,
-			IGearbox gearbox,
-			IVehicleContainer container)
+			IGearbox gearbox, IVehicleContainer container)
 		{
 			switch (data.Type) {
-				case RetarderType.Primary:
+				case RetarderType.TransmissionOutputRetarder:
 					return prev.AddComponent(new Retarder(container, data.LossMap, data.Ratio)).AddComponent(gearbox);
-				case RetarderType.Secondary:
+				case RetarderType.TransmissionInputRetarder:
 					return prev.AddComponent(gearbox).AddComponent(new Retarder(container, data.LossMap, data.Ratio));
 				case RetarderType.None:
 					return prev.AddComponent(new DummyRetarder(container)).AddComponent(gearbox);
 				case RetarderType.LossesIncludedInTransmission:
 					return prev.AddComponent(new DummyRetarder(container)).AddComponent(gearbox);
 				default:
-					throw new ArgumentOutOfRangeException();
+					throw new ArgumentOutOfRangeException(data.Type.ToString());
 			}
 		}
 	}
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 2e125e0d4362cd6bdfe604d1bf71f207ae7730ca..c1083fa61aa63fff7e66bfb20df435b61594308a 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -131,7 +131,13 @@
     <Compile Include="Models\Connector\Ports\Impl\Response.cs" />
     <Compile Include="Models\Connector\Ports\IFvPort.cs" />
     <Compile Include="Models\Connector\Ports\ITnPort.cs" />
+    <Compile Include="InputData\Reader\ComponentData\AccelerationCurveReader.cs" />
     <Compile Include="Models\SimulationComponent\Data\AngularGearData.cs" />
+    <Compile Include="InputData\Reader\ComponentData\TransmissionLossMapReader.cs" />
+    <Compile Include="InputData\Reader\ComponentData\RetarderLossMapReader.cs" />
+    <Compile Include="InputData\Reader\ComponentData\TorqueConverterDataReader.cs" />
+    <Compile Include="Models\SimulationComponent\Data\Engine\FuelConsumptionMapReader.cs" />
+    <Compile Include="Models\SimulationComponent\Impl\TorqueConverter.cs" />
     <Compile Include="Utils\ProviderExtensions.cs" />
     <Compile Include="Models\Declaration\AirDrag.cs" />
     <Compile Include="Models\Declaration\Fan.cs" />
@@ -148,7 +154,7 @@
     <Compile Include="Models\Declaration\Wheels.cs" />
     <Compile Include="Models\Declaration\WHTCCorrection.cs" />
     <Compile Include="Models\SimulationComponent\Data\CrosswindCorrectionCdxALookup.cs" />
-    <Compile Include="Models\SimulationComponent\Data\CrossWindCorrectionCurveReader.cs" />
+    <Compile Include="InputData\Reader\ComponentData\CrossWindCorrectionCurveReader.cs" />
     <Compile Include="Models\SimulationComponent\Data\AuxiliaryData.cs" />
     <Compile Include="Models\SimulationComponent\Data\AuxSupplyPowerReader.cs" />
     <Compile Include="Models\SimulationComponent\Data\AxleGearData.cs" />
@@ -190,7 +196,6 @@
     <Compile Include="Models\Simulation\DataBus\IClutchInfo.cs" />
     <Compile Include="Models\Simulation\DataBus\IDriverInfo.cs" />
     <Compile Include="Models\Simulation\DataBus\IWheelsInfo.cs" />
-    <Compile Include="Models\Simulation\Data\AuxiliaryDemandType.cs" />
     <Compile Include="Models\SimulationComponent\Data\AuxiliaryType.cs" />
     <Compile Include="Models\SimulationComponent\Data\FullLoadCurve.cs" />
     <Compile Include="Models\Simulation\DataBus\IMileageCounter.cs" />
diff --git a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs
index 8c895ca1fa237cbe262d6f49cf63c0728b5fc148..4f17a888a4209b5ca3631c226a4d28ef99817a46 100644
--- a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs
+++ b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AAuxTests.cs
@@ -203,34 +203,48 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries
 
 		[Category("ComparisonAAUX"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Increasing_Slope,
-			"Coach_AAux_Drive_80_slope_inc.vmod", "24t Coach_AAux_Cycle_Drive_80_Increasing_Slope.vmod"),
+			"Coach_AAux_Drive_80_slope_inc.vmod", "24t Coach_AAux_Cycle_Drive_80_Increasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_80_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Increasing_Slope,
-			"Coach_AAux_Drive_50_slope_inc.vmod", "24t Coach_AAux_Cycle_Drive_50_Increasing_Slope.vmod"),
+			"Coach_AAux_Drive_50_slope_inc.vmod", "24t Coach_AAux_Cycle_Drive_50_Increasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_50_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Increasing_Slope,
-			"Coach_AAux_Drive_30_slope_inc.vmod", "24t Coach_AAux_Cycle_Drive_30_Increasing_Slope.vmod"),
+			"Coach_AAux_Drive_30_slope_inc.vmod", "24t Coach_AAux_Cycle_Drive_30_Increasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_30_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Decreasing_Slope,
-			"Coach_AAux_Drive_80_slope_dec.vmod", "24t Coach_AAux_Cycle_Drive_80_Decreasing_Slope.vmod"),
+			"Coach_AAux_Drive_80_slope_dec.vmod", "24t Coach_AAux_Cycle_Drive_80_Decreasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_80_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Decreasing_Slope,
-			"Coach_AAux_Drive_50_slope_dec.vmod", "24t Coach_AAux_Cycle_Drive_50_Decreasing_Slope.vmod"),
+			"Coach_AAux_Drive_50_slope_dec.vmod", "24t Coach_AAux_Cycle_Drive_50_Decreasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_50_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Decreasing_Slope,
-			"Coach_AAux_Drive_30_slope_dec.vmod", "24t Coach_AAux_Cycle_Drive_30_Decreasing_Slope.vmod"),
+			"Coach_AAux_Drive_30_slope_dec.vmod", "24t Coach_AAux_Cycle_Drive_30_Decreasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_30_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Dec_Increasing_Slope,
-			"Coach_AAux_Drive_80_slope_dec-inc.vmod", "24t Coach_AAux_Cycle_Drive_80_Dec_Increasing_Slope.vmod"),
+			"Coach_AAux_Drive_80_slope_dec-inc.vmod", "24t Coach_AAux_Cycle_Drive_80_Dec_Increasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_80_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Dec_Increasing_Slope,
-			"Coach_AAux_Drive_50_slope_dec-inc.vmod", "24t Coach_AAux_Cycle_Drive_50_Dec_Increasing_Slope.vmod"),
+			"Coach_AAux_Drive_50_slope_dec-inc.vmod", "24t Coach_AAux_Cycle_Drive_50_Dec_Increasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_50_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Dec_Increasing_Slope,
-			"Coach_AAux_Drive_30_slope_dec-inc.vmod", "24t Coach_AAux_Cycle_Drive_30_Dec_Increasing_Slope.vmod"),
+			"Coach_AAux_Drive_30_slope_dec-inc.vmod", "24t Coach_AAux_Cycle_Drive_30_Dec_Increasing_Slope.vmod",
+			TestName = "CoachBusAux CycleDrive_30_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDecelerateWhileBrake_80_0_level,
-			"Coach_AAux_DecelerateWhileBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_DecelerateWhileBrake_80_0_level.vmod"),
+			"Coach_AAux_DecelerateWhileBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_DecelerateWhileBrake_80_0_level.vmod",
+			TestName = "CoachBusAux CycleDecelerateWhileBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateWhileBrake_80_0_level,
-			"Coach_AAux_AccelerateWhileBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_AccelerateWhileBrake_80_0_level.vmod"),
+			"Coach_AAux_AccelerateWhileBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_AccelerateWhileBrake_80_0_level.vmod",
+			TestName = "CoachBusAux CycleAccelerateWhileBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateAtBrake_80_0_level,
-			"Coach_AAux_AccelerateAtBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_AccelerateAtBrake_80_0_level.vmod"),
+			"Coach_AAux_AccelerateAtBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_AccelerateAtBrake_80_0_level.vmod",
+			TestName = "CoachBusAux CycleAccelerateAtBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateBeforeBrake_80_0_level,
-			"Coach_AAux_AccelerateBeforeBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_AccelerateBeforeBrake_80_0_level.vmod"
+			"Coach_AAux_AccelerateBeforeBrake_80_0_level.vmod", "24t Coach_AAux_Cycle_AccelerateBeforeBrake_80_0_level.vmod",
+			TestName = "CoachBusAux CycleAccelerateBeforeBrake_80_0_level"
 			),
 		TestCase(SimpleDrivingCycles.CycleDrive_stop_85_stop_85_level,
-			"Coach_AAux_Drive_stop_85_stop_85_level.vmod", "24t Coach_AAux_Cycle_Drive_stop_85_stop_85_level.vmod"),
+			"Coach_AAux_Drive_stop_85_stop_85_level.vmod", "24t Coach_AAux_Cycle_Drive_stop_85_stop_85_level.vmod",
+			TestName = "CoachBusAux CycleDrive_stop_85_stop_85_level"),
 		]
 		public void Coach_BusAuxiliaries(string cycleData, string modFileName, string compareFileName)
 		{
diff --git a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs
index c9f2acef12657ca172426d25e76c7be3e16b4200..5b06ce329fcfaa8148710fc1cb6fbcd324a16952 100644
--- a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs
@@ -123,7 +123,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries
 			var engineFCMapFilePath = @"TestData\Integration\BusAuxiliaries\24t Coach.vmap";
 
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
-			var fcMap = FuelConsumptionMap.ReadFromFile(engineFCMapFilePath);
+			var fcMap = FuelConsumptionMapReader.ReadFromFile(engineFCMapFilePath);
 			var fld = EngineFullLoadCurve.ReadFromFile(engineFLDFilePath);
 			var modelData = new CombustionEngineData() {
 				ConsumptionMap = fcMap,
diff --git a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs
index 0d889a00838c3a9badaa5b1681d05fdaef5fe505..f08757e55b0edf7482cf2c5f737212185106c9a0 100644
--- a/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/CoachAdvancedAuxPowertrain.cs
@@ -119,8 +119,8 @@ namespace TUGraz.VectoCore.Tests.Integration
 						new GearData {
 							FullLoadCurve = FullLoadCurveReader.ReadFromFile(GearboxFullLoadCurveFile),
 							LossMap = ratio.IsEqual(1)
-								? TransmissionLossMap.ReadFromFile(GearboxIndirectLoss, ratio, string.Format("Gear {0}", i))
-								: TransmissionLossMap.ReadFromFile(GearboxDirectLoss, ratio, string.Format("Gear {0}", i)),
+								? TransmissionLossMapReader.ReadFromFile(GearboxIndirectLoss, ratio, string.Format("Gear {0}", i))
+								: TransmissionLossMapReader.ReadFromFile(GearboxDirectLoss, ratio, string.Format("Gear {0}", i)),
 							Ratio = ratio,
 							ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile)
 						}))
@@ -145,7 +145,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 			return new AxleGearData {
 				AxleGear = new GearData {
 					Ratio = ratio,
-					LossMap = TransmissionLossMap.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
+					LossMap = TransmissionLossMapReader.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
 				}
 			};
 		}
@@ -193,7 +193,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 		private static DriverData CreateDriverData(string accelerationFile, bool overspeed = false)
 		{
 			return new DriverData {
-				AccelerationCurve = AccelerationCurveData.ReadFromFile(accelerationFile),
+				AccelerationCurve = AccelerationCurveReader.ReadFromFile(accelerationFile),
 				LookAheadCoasting = new DriverData.LACData {
 					Enabled = true,
 					//MinSpeed = 50.KMPHtoMeterPerSecond(),
diff --git a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs
index 734a48b373424f690e546ab0b8d9e6cd1b714ac9..07e47ed28cc4fd84f053a56b04f077c0b3c1b898 100644
--- a/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/CoachPowerTrain.cs
@@ -121,8 +121,8 @@ namespace TUGraz.VectoCore.Tests.Integration
 						new GearData {
 							FullLoadCurve = FullLoadCurveReader.ReadFromFile(GearboxFullLoadCurveFile),
 							LossMap = ratio.IsEqual(1)
-								? TransmissionLossMap.ReadFromFile(GearboxIndirectLoss, ratio, string.Format("Gear {0}", i))
-								: TransmissionLossMap.ReadFromFile(GearboxDirectLoss, ratio, string.Format("Gear {0}", i)),
+								? TransmissionLossMapReader.ReadFromFile(GearboxIndirectLoss, ratio, string.Format("Gear {0}", i))
+								: TransmissionLossMapReader.ReadFromFile(GearboxDirectLoss, ratio, string.Format("Gear {0}", i)),
 							Ratio = ratio,
 							ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile)
 						}))
@@ -147,7 +147,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 			return new AxleGearData {
 				AxleGear = new GearData {
 					Ratio = ratio,
-					LossMap = TransmissionLossMap.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
+					LossMap = TransmissionLossMapReader.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
 				}
 			};
 		}
@@ -195,7 +195,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 		private static DriverData CreateDriverData(string accelerationFile, bool overspeed = false)
 		{
 			return new DriverData {
-				AccelerationCurve = AccelerationCurveData.ReadFromFile(accelerationFile),
+				AccelerationCurve = AccelerationCurveReader.ReadFromFile(accelerationFile),
 				LookAheadCoasting = new DriverData.LACData {
 					Enabled = true,
 					//MinSpeed = 50.KMPHtoMeterPerSecond(),
diff --git a/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs b/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs
index a69699dc7723469d747e2afb0ef9d4cef6191afc..a371b8a0035cb75a50a7ba64a233c59677873af1 100644
--- a/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs
+++ b/VectoCore/VectoCoreTest/Integration/DriverStrategy/SimpleCycles.cs
@@ -194,34 +194,37 @@ namespace TUGraz.VectoCore.Tests.Integration.DriverStrategy
 
 		[Category("ComparisonV2"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Increasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_80_Increasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_80_Increasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_80_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Increasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_50_Increasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_50_Increasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_50_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Increasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_30_Increasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_30_Increasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_30_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Decreasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_80_Decreasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_80_Decreasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_80_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Decreasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_50_Decreasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_50_Decreasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_50_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Decreasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_30_Decreasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_30_Decreasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_30_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Dec_Increasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_80_Dec_Increasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_80_Dec_Increasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_80_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Dec_Increasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_50_Dec_Increasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_50_Dec_Increasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_50_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Dec_Increasing_Slope,
-			"40t_Long_Haul_Truck_Cycle_Drive_30_Dec_Increasing_Slope.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_Drive_30_Dec_Increasing_Slope.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDrive_30_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDecelerateWhileBrake_80_0_level,
-			"40t_Long_Haul_Truck_Cycle_DecelerateWhileBrake_80_0_level.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_DecelerateWhileBrake_80_0_level.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleDecelerateWhileBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateWhileBrake_80_0_level,
-			"40t_Long_Haul_Truck_Cycle_AccelerateWhileBrake_80_0_level.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_AccelerateWhileBrake_80_0_level.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleAccelerateWhileBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateAtBrake_80_0_level,
-			"40t_Long_Haul_Truck_Cycle_AccelerateAtBrake_80_0_level.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_AccelerateAtBrake_80_0_level.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleAccelerateAtBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateBeforeBrake_80_0_level,
-			"40t_Long_Haul_Truck_Cycle_AccelerateBeforeBrake_80_0_level.vmod", GearboxType.AMT),
-		TestCase(SimpleDrivingCycles.CycleDrive_stop_85_stop_85_level, "24t Truck_Cycle_Drive_stop_85_stop_85_level.vmod", GearboxType.AMT),
-		TestCase(SimpleDrivingCycles.CycleDrive_SlopeChangeBeforeStop, "Truck_DriverStrategy_SlopeChangeBeforeStop.vmod", GearboxType.AMT),
-		TestCase(SimpleDrivingCycles.CycleDriver_FrequentSlopChange, "Truck_DriverStrategy_SlopeChangeBeforeStop.vmod", GearboxType.AMT),
+			"40t_Long_Haul_Truck_Cycle_AccelerateBeforeBrake_80_0_level.vmod", GearboxType.AMT, TestName = "TruckSpecial CycleAccelerateBeforeBrake_80_0_level"),
+		TestCase(SimpleDrivingCycles.CycleDrive_stop_85_stop_85_level, "24t Truck_Cycle_Drive_stop_85_stop_85_level.vmod",
+			GearboxType.AMT, TestName = "TruckSpecial CycleDrive_stop_85_stop_85_level"),
+		TestCase(SimpleDrivingCycles.CycleDrive_SlopeChangeBeforeStop, "Truck_DriverStrategy_SlopeChangeBeforeStop.vmod",
+			GearboxType.AMT, TestName = "TruckSpecial CycleDrive_SlopeChangeBeforeStop"),
+		TestCase(SimpleDrivingCycles.CycleDriver_FrequentSlopChange, "Truck_DriverStrategy_SlopeChangeBeforeStop.vmod",
+			GearboxType.AMT, TestName = "TruckSpecial CycleDriver_FrequentSlopChange"),
 		]
 		public void Truck_Special(string cycleData, string modFileName, GearboxType gbxType = GearboxType.AMT)
 		{
@@ -353,34 +356,40 @@ namespace TUGraz.VectoCore.Tests.Integration.DriverStrategy
 
 		[Category("ComparisonV2"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Increasing_Slope,
-			"24t Coach_Cycle_Drive_80_Increasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_80_Increasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_80_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Increasing_Slope,
-			"24t Coach_Cycle_Drive_50_Increasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_50_Increasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_50_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Increasing_Slope,
-			"24t Coach_Cycle_Drive_30_Increasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_30_Increasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_30_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Decreasing_Slope,
-			"24t Coach_Cycle_Drive_80_Decreasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_80_Decreasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_80_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Decreasing_Slope,
-			"24t Coach_Cycle_Drive_50_Decreasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_50_Decreasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_50_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Decreasing_Slope,
-			"24t Coach_Cycle_Drive_30_Decreasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_30_Decreasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_30_Decreasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_80_Dec_Increasing_Slope,
-			"24t Coach_Cycle_Drive_80_Dec_Increasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_80_Dec_Increasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_80_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_50_Dec_Increasing_Slope,
-			"24t Coach_Cycle_Drive_50_Dec_Increasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_50_Dec_Increasing_Slope.vmod", TestName = "CoachSpecial CycleDrive_50_Dec_Increasing_Slope"),
 		TestCase(SimpleDrivingCycles.CycleDrive_30_Dec_Increasing_Slope,
-			"24t Coach_Cycle_Drive_30_Dec_Increasing_Slope.vmod"),
+			"24t Coach_Cycle_Drive_30_Dec_Increasing_Slope.vmod", TestName = "CoachSpecialCycleDrive_30_Dec_Increasing_Slope "),
 		TestCase(SimpleDrivingCycles.CycleDecelerateWhileBrake_80_0_level,
-			"24t Coach_Cycle_DecelerateWhileBrake_80_0_level.vmod"),
+			"24t Coach_Cycle_DecelerateWhileBrake_80_0_level.vmod",
+			TestName = "CoachSpecial CycleDecelerateWhileBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateWhileBrake_80_0_level,
-			"24t Coach_Cycle_AccelerateWhileBrake_80_0_level.vmod"),
+			"24t Coach_Cycle_AccelerateWhileBrake_80_0_level.vmod",
+			TestName = "CoachSpecial CycleAccelerateWhileBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateAtBrake_80_0_level,
-			"24t Coach_Cycle_AccelerateAtBrake_80_0_level.vmod"),
+			"24t Coach_Cycle_AccelerateAtBrake_80_0_level.vmod", TestName = "CoachSpecial CycleAccelerateAtBrake_80_0_level"),
 		TestCase(SimpleDrivingCycles.CycleAccelerateBeforeBrake_80_0_level,
-			"24t Coach_Cycle_AccelerateBeforeBrake_80_0_level.vmod"),
-		TestCase(SimpleDrivingCycles.CycleDrive_stop_85_stop_85_level, "24t Coach_Cycle_Drive_stop_85_stop_85_level.vmod"),
-		TestCase(SimpleDrivingCycles.CycleDrive_SlopeChangeBeforeStop, "24t Coach_DriverStrategy_SlopeChangeBeforeStop.vmod"),
-		TestCase(SimpleDrivingCycles.CycleDriver_FrequentSlopChange, "24t Coach_DriverStrategy_SlopeChangeBeforeStop.vmod"),
+			"24t Coach_Cycle_AccelerateBeforeBrake_80_0_level.vmod",
+			TestName = "CoachSpecial CycleAccelerateBeforeBrake_80_0_level"),
+		TestCase(SimpleDrivingCycles.CycleDrive_stop_85_stop_85_level, "24t Coach_Cycle_Drive_stop_85_stop_85_level.vmod",
+			TestName = "CoachSpecial CycleDrive_stop_85_stop_85_level"),
+		TestCase(SimpleDrivingCycles.CycleDrive_SlopeChangeBeforeStop, "24t Coach_DriverStrategy_SlopeChangeBeforeStop.vmod",
+			TestName = "CoachSpecial CycleDrive_SlopeChangeBeforeStop"),
+		TestCase(SimpleDrivingCycles.CycleDriver_FrequentSlopChange, "24t Coach_DriverStrategy_SlopeChangeBeforeStop.vmod",
+			TestName = "CoachSpecial CycleDriver_FrequentSlopChange"),
 		]
 		public void Coach_Special(string cycleData, string modFileName)
 		{
diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
index 73e36b2edd5617d2740a64fc8628b0888515eb6c..cf5529dab582b016e1d0d3680c431e0eab87800d 100644
--- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
@@ -306,7 +306,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 						new GearData {
 							// TODO mk-2016-05-09: add realistic FullLoadCurve for gearbox - gearbox will have only 1 constant value as full load
 							FullLoadCurve = FullLoadCurveReader.ReadFromFile(GearboxFullLoadCurveFile),
-							LossMap = TransmissionLossMap.ReadFromFile(GearboxLossMap, ratio, string.Format("Gear {0}", i)),
+							LossMap = TransmissionLossMapReader.ReadFromFile(GearboxLossMap, ratio, string.Format("Gear {0}", i)),
 							Ratio = ratio,
 							ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile)
 						}))
@@ -330,7 +330,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			return new AxleGearData {
 				AxleGear = new GearData {
 					Ratio = ratio,
-					LossMap = TransmissionLossMap.ReadFromFile(AxleLossMap, ratio, "AxleGear")
+					LossMap = TransmissionLossMapReader.ReadFromFile(AxleLossMap, ratio, "AxleGear")
 				}
 			};
 		}
@@ -343,7 +343,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 					{
 						1, new GearData {
 							FullLoadCurve = null,
-							LossMap = TransmissionLossMap.ReadFromFile(GearboxLossMap, ratio, "Gear 1"),
+							LossMap = TransmissionLossMapReader.ReadFromFile(GearboxLossMap, ratio, "Gear 1"),
 							Ratio = ratio,
 							ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile)
 						}
@@ -403,7 +403,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 		private static DriverData CreateDriverData(string accelerationFile)
 		{
 			return new DriverData {
-				AccelerationCurve = AccelerationCurveData.ReadFromFile(accelerationFile),
+				AccelerationCurve = AccelerationCurveReader.ReadFromFile(accelerationFile),
 				LookAheadCoasting = new DriverData.LACData {
 					Enabled = false,
 					//Deceleration = -0.5.SI<MeterPerSquareSecond>()
diff --git a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
index 8c7f127015a4ff910bccab0da2ee16d3313f5b0b..a24ab0bced905e0e1ee8797a8d7820cf3d3a000f 100644
--- a/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
@@ -250,7 +250,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			return new AxleGearData() {
 				AxleGear = new GearData {
 					Ratio = 3.0 * 3.5,
-					LossMap = TransmissionLossMap.ReadFromFile(GbxLossMap, 3.0 * 3.5, "AxleGear")
+					LossMap = TransmissionLossMapReader.ReadFromFile(GbxLossMap, 3.0 * 3.5, "AxleGear")
 				}
 			};
 		}
@@ -296,7 +296,7 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 		private static DriverData CreateDriverData(string accelerationFile)
 		{
 			return new DriverData {
-				AccelerationCurve = AccelerationCurveData.ReadFromFile(accelerationFile),
+				AccelerationCurve = AccelerationCurveReader.ReadFromFile(accelerationFile),
 				LookAheadCoasting = new DriverData.LACData {
 					Enabled = false,
 					//Deceleration = -0.5.SI<MeterPerSquareSecond>()
diff --git a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs
index ae4ad0c609414b9cc0af103ee61771a5b857bad8..b7bcfd76a24825e460d7b024b07f208927e5db9e 100644
--- a/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs
+++ b/VectoCore/VectoCoreTest/Integration/Truck40tPowerTrain.cs
@@ -138,7 +138,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 				Gears = ratios.Select((ratio, i) => Tuple.Create((uint)i, new GearData {
 					FullLoadCurve = FullLoadCurveReader.ReadFromFile(GearboxFullLoadCurveFile),
 					LossMap =
-						TransmissionLossMap.ReadFromFile(ratio.IsEqual(1) ? GearboxIndirectLoss : GearboxDirectLoss, ratio,
+						TransmissionLossMapReader.ReadFromFile(ratio.IsEqual(1) ? GearboxIndirectLoss : GearboxDirectLoss, ratio,
 							string.Format("Gear {0}", i)),
 					Ratio = ratio,
 					ShiftPolygon = ShiftPolygonReader.ReadFromFile(ShiftPolygonFile)
@@ -164,7 +164,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 			return new AxleGearData {
 				AxleGear = new GearData {
 					Ratio = ratio,
-					LossMap = TransmissionLossMap.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
+					LossMap = TransmissionLossMapReader.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
 				}
 			};
 		}
@@ -228,7 +228,7 @@ namespace TUGraz.VectoCore.Tests.Integration
 		private static DriverData CreateDriverData(string accelerationFile, bool overspeed = false)
 		{
 			return new DriverData {
-				AccelerationCurve = AccelerationCurveData.ReadFromFile(accelerationFile),
+				AccelerationCurve = AccelerationCurveReader.ReadFromFile(accelerationFile),
 				LookAheadCoasting = new DriverData.LACData {
 					Enabled = true,
 					//MinSpeed = 50.KMPHtoMeterPerSecond(),
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
index 5e72d69c8893309b34df5b6354c346df689d6f84..e743ada3a58e274aa1638b29eb17e0bcb45e833a 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
@@ -530,7 +530,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 
 			Assert.AreEqual(VehicleClass.Class2, segment.VehicleClass);
 
-			var data = AccelerationCurveData.ReadFromStream(segment.AccelerationFile);
+			var data = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile);
 			TestAcceleration(data);
 
 			Assert.AreEqual(3, segment.Missions.Length);
@@ -605,7 +605,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 
 			Assert.AreEqual(VehicleClass.Class4, segment.VehicleClass);
 
-			var data = AccelerationCurveData.ReadFromStream(segment.AccelerationFile);
+			var data = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile);
 			TestAcceleration(data);
 
 			Assert.AreEqual(3, segment.Missions.Length);
@@ -645,7 +645,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 
 			Assert.AreEqual(VehicleClass.Class5, segment.VehicleClass);
 
-			var data = AccelerationCurveData.ReadFromStream(segment.AccelerationFile);
+			var data = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile);
 			TestAcceleration(data);
 
 			Assert.AreEqual(2, segment.Missions.Length);
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
index 9c035c5b13dc6a62dbc41639006859bec7aaed00..c1c167cd38b60aa3e78dcc2b7531a018afddf7a4 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/ShiftPolygonTest.cs
@@ -44,7 +44,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.Tests.Utils;
 using TUGraz.VectoCore.Utils;
-using Point = TUGraz.VectoCore.Utils.Point;
+using Point = TUGraz.VectoCommon.Utils.Point;
 
 namespace TUGraz.VectoCore.Tests.Models.Declaration
 {
diff --git a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
index a3ae58ab347b80e4f93592ed52b52c0f6a30bbcc..9c9dfc44e7f822c0d1efda443bdda9c2c006f760 100644
--- a/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
@@ -143,7 +143,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 					Tuple.Create((uint)i,
 						new GearData {
 							FullLoadCurve = FullLoadCurveReader.ReadFromFile(GearboxFullLoadCurveFile),
-							LossMap = TransmissionLossMap.ReadFromFile(!ratio.IsEqual(1.0) ? directlossMap : indirectLossMap, ratio,
+							LossMap = TransmissionLossMapReader.ReadFromFile(!ratio.IsEqual(1.0) ? directlossMap : indirectLossMap, ratio,
 								string.Format("Gear {0}", i)),
 							Ratio = ratio,
 							ShiftPolygon = ShiftPolygonReader.ReadFromFile(ShiftPolygonFile)
@@ -158,7 +158,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 			return new AxleGearData {
 				AxleGear = new GearData {
 					Ratio = ratio,
-					LossMap = TransmissionLossMap.ReadFromFile(lossMap, ratio, "AxleGear")
+					LossMap = TransmissionLossMapReader.ReadFromFile(lossMap, ratio, "AxleGear")
 				}
 			};
 		}
@@ -169,7 +169,7 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		[TestMethod]
 		public void TestLossMapValuesWithEfficiency()
 		{
-			var lossMap = TransmissionLossMap.Create(0.95, 1.0, "Dummy");
+			var lossMap = TransmissionLossMapReader.Create(0.95, 1.0, "Dummy");
 
 			AssertHelper.AreRelativeEqual(0.SI<NewtonMeter>(),
 				lossMap.GetTorqueLoss(0.RPMtoRad(), 0.SI<NewtonMeter>()).Value);
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
index 345719ff41c0846a5cb201339c7d5e0da58840f0..06ba84cd14024c4588167337121c8c928749b466 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
@@ -402,7 +402,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		private static DriverData CreateDriverData()
 		{
 			return new DriverData {
-				AccelerationCurve = AccelerationCurveData.ReadFromFile(AccelerationFile),
+				AccelerationCurve = AccelerationCurveReader.ReadFromFile(AccelerationFile),
 				LookAheadCoasting = new DriverData.LACData {
 					Enabled = false,
 					//Deceleration = -0.5.SI<MeterPerSquareSecond>()
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
index 89fb85d1e3f408b277ede49d715b1be1de16c405..15b8f7ebd8a2938abe7a57c06fc0feacc5fe1c39 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
@@ -84,7 +84,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 					Tuple.Create((uint)i,
 						new GearData {
 							FullLoadCurve = FullLoadCurveReader.ReadFromFile(GearboxFullLoadCurveFile),
-							LossMap = TransmissionLossMap.ReadFromFile(i != 6 ? IndirectLossMap : DirectLossMap, ratio,
+							LossMap = TransmissionLossMapReader.ReadFromFile(i != 6 ? IndirectLossMap : DirectLossMap, ratio,
 								string.Format("Gear {0}", i)),
 							Ratio = ratio,
 							ShiftPolygon = ShiftPolygonReader.ReadFromFile(GearboxShiftPolygonFile)
@@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
 			var angularGearData = new AngularGearData {
 				AngularGear = new TransmissionData {
-					LossMap = TransmissionLossMap.Create(VectoCSVFile.Read(AngularGearLossMap), ratio, "AngularGear"),
+					LossMap = TransmissionLossMapReader.Create(VectoCSVFile.Read(AngularGearLossMap), ratio, "AngularGear"),
 					Ratio = ratio
 				}
 			};
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs
index 0449b9b8b77422941ca2e476b59590fe8edfb7fb..43f559dc9c05bbd139155cd7c88f9e6cc417c29b 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/RetarderTest.cs
@@ -51,7 +51,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		public void RetarderBasicTest()
 		{
 			var vehicle = new VehicleContainer(ExecutionMode.Declaration);
-			var retarderData = RetarderLossMap.ReadFromFile(RetarderLossMapFile);
+			var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
 			var retarder = new Retarder(vehicle, retarderData, 1.0);
 
 			var nextRequest = new MockTnOutPort();
@@ -96,7 +96,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		public void RetarderRatioTest()
 		{
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
-			var retarderData = RetarderLossMap.ReadFromFile(RetarderLossMapFile);
+			var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
 			var retarder = new Retarder(vehicle, retarderData, 2.0);
 
 			var nextRequest = new MockTnOutPort();
@@ -132,7 +132,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 		[TestMethod]
 		public void RetarderDeclarationTest()
 		{
-			var retarderData = RetarderLossMap.ReadFromFile(RetarderLossMapFile);
+			var retarderData = RetarderLossMapReader.ReadFromFile(RetarderLossMapFile);
 			var declVehicle = new VehicleContainer(ExecutionMode.Declaration, null, null);
 			var retarder = new Retarder(declVehicle, retarderData, 2.0);
 			var nextRequest = new MockTnOutPort();
@@ -161,7 +161,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 				VectoCSVFile.ReadStream(InputDataHelper.InputDataAsStream("Retarder Speed [rpm],Loss Torque [Nm]",
 					retarderEntries));
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering, null, null);
-			var retarderData = RetarderLossMap.Create(retarderTbl);
+			var retarderData = RetarderLossMapReader.Create(retarderTbl);
 			var retarder = new Retarder(vehicle, retarderData, 2.0);
 
 			var nextRequest = new MockTnOutPort();
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/AccelerationCurveTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/AccelerationCurveTest.cs
index 5bdcb328d59b28af963a373bef7ae582cc1eef18..e05927a576d35002002ad32dfaf7f4c3ecc2377c 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/AccelerationCurveTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/AccelerationCurveTest.cs
@@ -51,7 +51,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		[TestMethod]
 		public void AccelerationTest()
 		{
-			Data = AccelerationCurveData.ReadFromFile(@"TestData\Components\Coach.vacc");
+			Data = AccelerationCurveReader.ReadFromFile(@"TestData\Components\Coach.vacc");
 
 			// FIXED POINTS
 			EqualAcceleration(0, 1.01570922360353, -0.231742702878269);
@@ -114,7 +114,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		[TestMethod]
 		public void ComputeAccelerationDistanceTest()
 		{
-			Data = AccelerationCurveData.ReadFromFile(@"TestData\Components\Truck.vacc");
+			Data = AccelerationCurveReader.ReadFromFile(@"TestData\Components\Truck.vacc");
 
 			// in this part the deceleration is constant
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs
index 440bbc14f64d00f39a9a71b26081282e5a1f1d88..517e1508d52182d4d5219d20b8f2ceef89f43b1d 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/FuelConsumptionMapTest.cs
@@ -47,7 +47,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		[TestMethod]
 		public void TestFuelConsumption_FixedPoints()
 		{
-			var map = FuelConsumptionMap.ReadFromFile(@"TestData\Components\24t Coach.vmap");
+			var map = FuelConsumptionMapReader.ReadFromFile(@"TestData\Components\24t Coach.vmap");
 			var lines = File.ReadAllLines(@"TestData\Components\24t Coach.vmap").Skip(1).ToArray();
 			AssertMapValuesEqual(lines, map);
 		}
@@ -55,7 +55,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		[TestMethod]
 		public void TestFuelConsumption_InterpolatedPoints()
 		{
-			var map = FuelConsumptionMap.ReadFromFile(@"TestData\Components\24t Coach.vmap");
+			var map = FuelConsumptionMapReader.ReadFromFile(@"TestData\Components\24t Coach.vmap");
 			var lines = File.ReadAllLines(@"TestData\Components\24t CoachInterpolated.vmap").Skip(1).ToArray();
 			AssertMapValuesEqual(lines, map);
 		}
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
index 5cfafad6cc275ec843806e1a168d666d3806ae1c..cbb7c430a25dc70ccc1950c8c72bef7f4051bb06 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
@@ -223,14 +223,14 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 
 			var gearboxData = new GearboxData();
 			gearboxData.Gears[1] = new GearData {
-				LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
+				LossMap = TransmissionLossMapReader.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
 				Ratio = 1
 			};
 
 			var axleGearData = new AxleGearData() {
 				AxleGear = new GearData {
 					Ratio = 1,
-					LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
+					LossMap = TransmissionLossMapReader.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
 				}
 			};
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs
index a94951be88c8d4015d419ab71f6783821d130f9a..e13422105359ab3efa6e5773f9d50f55fa68403d 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs
@@ -119,7 +119,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			data.Rows.Add("100", "0", "10"); //        |       \         |
 			data.Rows.Add("100", "100", "10"); //    (0,0):10  ----- (100,10):10
 
-			var map = TransmissionLossMap.Create(data, 1.0, "1");
+			var map = TransmissionLossMapReader.Create(data, 1.0, "1");
 
 			// test inside the triangles
 			AssertHelper.AreRelativeEqual(10, map.GetTorqueLoss(25.RPMtoRad(), 25.SI<NewtonMeter>()).Value);
@@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			data.Rows.Add("100", "0", "10"); //        |       \         |
 			data.Rows.Add("100", "100", "10"); //    (0,0):10  ----- (100,10):10
 
-			var map = TransmissionLossMap.Create(data, 1.0, "1");
+			var map = TransmissionLossMapReader.Create(data, 1.0, "1");
 
 			// test inside the triangles
 			AssertHelper.AreRelativeEqual(15, map.GetOutTorque(25.RPMtoRad(), 25.SI<NewtonMeter>(), true));
@@ -207,7 +207,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			data.Rows.Add("100", "10", "10"); //        |       \       |
 			data.Rows.Add("100", "140", "40"); //    (0,0):0 ----- (100,10):10
 
-			var map = TransmissionLossMap.Create(data, 1.0, "1");
+			var map = TransmissionLossMapReader.Create(data, 1.0, "1");
 
 			// test inside the triangles
 			AssertHelper.AreRelativeEqual(5, map.GetTorqueLoss(25.RPMtoRad(), 25.SI<NewtonMeter>()).Value);
@@ -251,7 +251,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			data.Rows.Add("100", "0", "10"); //        |       \       |
 			data.Rows.Add("100", "100", "40"); //    (0,0):0 ----- (100,0):10
 
-			var map = TransmissionLossMap.Create(data, 1.0, "1");
+			var map = TransmissionLossMapReader.Create(data, 1.0, "1");
 
 			// test inside the triangles
 			AssertHelper.AreRelativeEqual(20, map.GetOutTorque(25.RPMtoRad(), 25.SI<NewtonMeter>()));
@@ -301,18 +301,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 				"2000, 1352, -301",
 				"2100, 1100, -320",
 			};
-			var gbxFldString = new[] {
-				"560, 2500",
-				"2100, 2500"
-			};
 			var dataEng =
 				VectoCSVFile.ReadStream(InputDataHelper.InputDataAsStream("n [U/min],Mfull [Nm],Mdrag [Nm]", engineFldString));
 			var engineFld = EngineFullLoadCurve.Create(dataEng, true);
 
-			var dataGbx = VectoCSVFile.ReadStream(InputDataHelper.InputDataAsStream("n [U/min],Mfull [Nm]", gbxFldString));
-			var gbxFld = FullLoadCurveReader.Create(dataGbx, true);
 
-			var fullLoadCurve = AbstractSimulationDataAdapter.IntersectFullLoadCurves(engineFld, gbxFld);
+			var fullLoadCurve = AbstractSimulationDataAdapter.IntersectFullLoadCurves(engineFld, 2500.SI<NewtonMeter>());
 
 			Assert.AreEqual(10, fullLoadCurve.FullLoadEntries.Count);
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/TorqueConverterDataTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/TorqueConverterDataTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..25debf9c593b270c31b1d7f8d649b6fdc4c4b910
--- /dev/null
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/TorqueConverterDataTest.cs
@@ -0,0 +1,107 @@
+using System;
+using System.Diagnostics;
+using NUnit.Framework;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
+using TUGraz.VectoCore.Tests.Utils;
+
+namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
+{
+	[TestFixture]
+	public class TorqueConverterDataTest
+	{
+		[Test,
+		TestCase(30, 10, 1230.7, 842.8317),
+		TestCase(40, 10, 1081.028, 645.9384),
+		TestCase(50, 10, 981.7928, 528.8284),
+		TestCase(60, 10, 912.2327, 452.9006),
+		TestCase(70, 10, 860.6045, 399.6834),
+		TestCase(70, 30, 1433.893, 1129.279),
+		TestCase(90, 10, 789.4108, 330.28),
+		TestCase(90, 30, 1295.913, 912.1714),
+		TestCase(170, 30, 1055.424, 574.8998),
+		TestCase(170, 50, 1308.974, 900.0845),
+		TestCase(190, 30, 1029.455, 539.6072),
+		TestCase(190, 50, 1269.513, 837.2174),
+		TestCase(190, 70, 1465.33, 1128.088),]
+		public void TestTorqueConverterOperatingPoint(double nOut, double Pout, double nInExpected, double tqInExpected)
+		{
+			var tqLimit = 1600;
+			Assert.IsTrue(nInExpected < tqLimit);
+			var tqInput = new[] {
+				"0,3.935741,563.6598  ",
+				"0.1,3.296827,534.1364",
+				"0.2,2.701476,504.6129",
+				"0.3,2.265852,472.1372",
+				"0.4,1.931875,421.9474",
+				"0.5,1.554335,354.0435",
+				"0.6,1.249399,268.4255",
+				"0.7,1.075149,114.9037",
+			};
+
+			var tqData =
+				TorqueConverterDataReader.ReadFromStream(InputDataHelper.InputDataAsStream("Speed Ratio, Torque Ratio,MP1000",
+					tqInput));
+
+			PerSecond inAngularSpeed;
+			NewtonMeter inTorque;
+
+
+			var outAngularSpeed = nOut.RPMtoRad();
+			var outTorque = (Pout * 1000).SI<Watt>() / outAngularSpeed;
+			tqData.GetInputTorqueAndAngularSpeed(outTorque, outAngularSpeed, out inTorque, out inAngularSpeed);
+
+			Assert.IsTrue(inAngularSpeed.Value() < 1600.RPMtoRad().Value());
+			Assert.AreEqual(nInExpected.RPMtoRad().Value(), inAngularSpeed.Value(), 5);
+			Assert.AreEqual(tqInExpected, inTorque.Value(), 10);
+		}
+
+		[Test,
+		TestCase(10, 110),
+		TestCase(20, 130),
+		TestCase(50, 90),
+		TestCase(50, 190),
+		TestCase(60, 150),
+		TestCase(70, 70),
+		TestCase(70, 90),
+		TestCase(70, 190),
+		TestCase(80, 50),
+		TestCase(80, 130),
+		TestCase(90, 70),
+		TestCase(100, 150),
+		TestCase(130, 70),
+		TestCase(150, 80),
+		TestCase(170, 80),
+		]
+		public void TestTorqueConverterInvalidOperatingPoint(double nOut, double Pout)
+		{
+			var tqLimit = 1600.RPMtoRad();
+
+			var tqInput = new[] {
+				"0,3.935741,563.6598  ",
+				"0.1,3.296827,534.1364",
+				"0.2,2.701476,504.6129",
+				"0.3,2.265852,472.1372",
+				"0.4,1.931875,421.9474",
+				"0.5,1.554335,354.0435",
+				"0.6,1.249399,268.4255",
+				"0.7,1.075149,114.9037",
+			};
+
+			var tqData =
+				TorqueConverterDataReader.ReadFromStream(InputDataHelper.InputDataAsStream("Speed Ratio, Torque Ratio,MP1000",
+					tqInput));
+
+			PerSecond inAngularSpeed;
+			NewtonMeter inTorque;
+
+
+			var outAngularSpeed = nOut.RPMtoRad();
+			var outTorque = (Pout * 1000).SI<Watt>() / outAngularSpeed;
+			tqData.GetInputTorqueAndAngularSpeed(outTorque, outAngularSpeed, out inTorque, out inAngularSpeed);
+
+			Assert.IsTrue(inAngularSpeed.Value() > tqLimit.Value());
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
index 0e305dcc184d150f9b5dbed482297f48f469ca37..889858f55be88fc31707af43acc892565f5c4895 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
@@ -86,7 +86,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 				WHTCRural = 1,
 				WHTCMotorway = 1,
 				FullLoadCurve = EngineFullLoadCurve.Create(fullLoad),
-				ConsumptionMap = FuelConsumptionMap.Create(fuelConsumption)
+				ConsumptionMap = FuelConsumptionMapReader.Create(fuelConsumption)
 			};
 			data.FullLoadCurve.EngineData = data;
 
@@ -183,14 +183,14 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 
 			var gearboxData = new GearboxData();
 			gearboxData.Gears[1] = new GearData {
-				LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\Direct Gear.vtlm", 1, "1"),
+				LossMap = TransmissionLossMapReader.ReadFromFile(@"TestData\Components\Direct Gear.vtlm", 1, "1"),
 				Ratio = 1
 			};
 
 			var axleGearData = new AxleGearData {
 				AxleGear = new GearData {
 					Ratio = 1,
-					LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
+					LossMap = TransmissionLossMapReader.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
 				}
 			};
 
diff --git a/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs b/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs
index 9518333dc48a7886043629e93de81ab97d45e33c..994b829230837f6f68883df95ca89af7567233a4 100644
--- a/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs
+++ b/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs
@@ -40,7 +40,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
-using Point = TUGraz.VectoCore.Utils.Point;
+using Point = TUGraz.VectoCommon.Utils.Point;
 
 namespace TUGraz.VectoCore.Tests.Utils
 {
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 1c810bde42ea4da92cc5fed57d4195b342883011..0bff5b61e7749538084f602f26b420184b76903c 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -93,6 +93,7 @@
     <Compile Include="Integration\DeclarationReportTest.cs" />
     <Compile Include="Integration\ShiftStrategy\ShiftStrategyTest.cs" />
     <Compile Include="Models\Declaration\ShiftPolygonTest.cs" />
+    <Compile Include="Models\SimulationComponentData\TorqueConverterDataTest.cs" />
     <Compile Include="Models\SimulationComponentData\ValidationTest.cs" />
     <Compile Include="Models\Simulation\FactoryTest.cs" />
     <Compile Include="Models\Simulation\LossMapRangeValidationTest.cs" />