Merge branch '63-add-badges-decals-e-g-for-favorites-completed-games-non-working-games-collections-and-folders' into 575-theme-add-a-modern-clean-switch-like-theme-as-an-official-theme-in-es-de-to-choose-from

This commit is contained in:
Sophia Hadash 2021-10-11 23:38:30 +02:00
commit 1c6a80fcc7
7 changed files with 360 additions and 383 deletions

View file

@ -404,17 +404,19 @@ void DetailedGameListView::updateInfoPanel()
mGenre.setValue(file->metadata.get("genre")); mGenre.setValue(file->metadata.get("genre"));
mPlayers.setValue(file->metadata.get("players")); mPlayers.setValue(file->metadata.get("players"));
// Generate badges slots value based on the game metadata. // Populate the badge slots based on game metadata.
std::stringstream ss; std::vector<std::string> badgeSlots;
ss << (file->metadata.get("favorite").compare("true") ? "" : "favorite "); for (auto badge : mBadges.getBadgeTypes()) {
ss << (file->metadata.get("completed").compare("true") ? "" : "completed "); if (badge == "altemulator") {
ss << (file->metadata.get("kidgame").compare("true") ? "" : "kidgame "); if (file->metadata.get(badge).compare("") != 0)
ss << (file->metadata.get("broken").compare("true") ? "" : "broken "); badgeSlots.push_back(badge);
ss << (file->metadata.get("altemulator").compare("") ? "altemulator " : ""); }
std::string slots = ss.str(); else {
if (!slots.empty()) if (file->metadata.get(badge).compare("true") == 0)
slots.pop_back(); badgeSlots.push_back(badge);
mBadges.setValue(slots); }
}
mBadges.setBadges(badgeSlots);
mName.setValue(file->metadata.get("name")); mName.setValue(file->metadata.get("name"));

View file

@ -445,17 +445,19 @@ void VideoGameListView::updateInfoPanel()
mGenre.setValue(file->metadata.get("genre")); mGenre.setValue(file->metadata.get("genre"));
mPlayers.setValue(file->metadata.get("players")); mPlayers.setValue(file->metadata.get("players"));
// Generate badges slots value based on the game metadata. // Populate the badge slots based on game metadata.
std::stringstream ss; std::vector<std::string> badgeSlots;
ss << (file->metadata.get("favorite").compare("true") ? "" : "favorite "); for (auto badge : mBadges.getBadgeTypes()) {
ss << (file->metadata.get("completed").compare("true") ? "" : "completed "); if (badge == "altemulator") {
ss << (file->metadata.get("kidgame").compare("true") ? "" : "kidgame "); if (file->metadata.get(badge).compare("") != 0)
ss << (file->metadata.get("broken").compare("true") ? "" : "broken "); badgeSlots.push_back(badge);
ss << (file->metadata.get("altemulator").compare("") ? "altemulator " : ""); }
std::string slots = ss.str(); else {
if (!slots.empty()) if (file->metadata.get(badge).compare("true") == 0)
slots.pop_back(); badgeSlots.push_back(badge);
mBadges.setValue(slots); }
}
mBadges.setBadges(badgeSlots);
mName.setValue(file->metadata.get("name")); mName.setValue(file->metadata.get("name"));

View file

@ -7,72 +7,55 @@
// Used by gamelist views. // Used by gamelist views.
// //
#define SLOT_FAVORITE "favorite"
#define SLOT_COMPLETED "completed"
#define SLOT_KIDGAME "kidgame"
#define SLOT_BROKEN "broken"
#define SLOT_ALTERNATIVE_EMULATOR "altemulator"
#include "components/BadgesComponent.h" #include "components/BadgesComponent.h"
#include "Settings.h"
#include "ThemeData.h" #include "ThemeData.h"
#include "resources/TextureResource.h" #include "utils/StringUtil.h"
// Available slot definitions.
std::vector<std::string> BadgesComponent::mSlots = {SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDS,
SLOT_BROKEN, SLOT_ALTERNATIVE_EMULATOR};
BadgesComponent::BadgesComponent(Window* window) BadgesComponent::BadgesComponent(Window* window)
: FlexboxComponent(window) : FlexboxComponent{window, mBadgeImages}
, mBadgeTypes{
{SLOT_FAVORITE, SLOT_COMPLETED, SLOT_KIDGAME, SLOT_BROKEN, SLOT_ALTERNATIVE_EMULATOR}}
{ {
mBadgeIcons[SLOT_FAVORITE] = ":/graphics/badge_favorite.svg"; mBadgeIcons[SLOT_FAVORITE] = ":/graphics/badge_favorite.svg";
mBadgeIcons[SLOT_COMPLETED] = ":/graphics/badge_completed.svg"; mBadgeIcons[SLOT_COMPLETED] = ":/graphics/badge_completed.svg";
mBadgeIcons[SLOT_KIDS] = ":/graphics/badge_kidgame.svg"; mBadgeIcons[SLOT_KIDGAME] = ":/graphics/badge_kidgame.svg";
mBadgeIcons[SLOT_BROKEN] = ":/graphics/badge_broken.svg"; mBadgeIcons[SLOT_BROKEN] = ":/graphics/badge_broken.svg";
mBadgeIcons[SLOT_ALTERNATIVE_EMULATOR] = ":/graphics/badge_altemulator.svg"; mBadgeIcons[SLOT_ALTERNATIVE_EMULATOR] = ":/graphics/badge_altemulator.svg";
ImageComponent mImageFavorite = ImageComponent(window);
mImageComponents.insert({SLOT_FAVORITE, mImageFavorite});
ImageComponent mImageCompleted = ImageComponent(window);
mImageComponents.insert({SLOT_COMPLETED, mImageCompleted});
ImageComponent mImageKids = ImageComponent(window);
mImageComponents.insert({SLOT_KIDS, mImageKids});
ImageComponent mImageBroken = ImageComponent(window);
mImageComponents.insert({SLOT_BROKEN, mImageBroken});
ImageComponent mImageAltEmulator = ImageComponent(window);
mImageComponents.insert({SLOT_ALTERNATIVE_EMULATOR, mImageAltEmulator});
} }
BadgesComponent::~BadgesComponent() void BadgesComponent::setBadges(const std::vector<std::string>& badges)
{ {
for (GuiComponent* c : mChildren) std::map<std::string, bool> prevVisibility;
c->clearChildren();
clearChildren();
mBadgeIcons.clear();
mImageComponents.clear();
}
void BadgesComponent::setValue(const std::string& value) // Save the visibility status to know whether any badges changed.
{ for (auto& image : mBadgeImages) {
mChildren.clear(); prevVisibility[image.first] = image.second.isVisible();
if (!value.empty()) { image.second.setVisible(false);
std::string temp;
std::istringstream ss(value);
while (std::getline(ss, temp, ' ')) {
if (!(temp == SLOT_FAVORITE || temp == SLOT_COMPLETED || temp == SLOT_KIDS ||
temp == SLOT_BROKEN || temp == SLOT_ALTERNATIVE_EMULATOR))
LOG(LogError) << "Badge slot '" << temp << "' is invalid.";
else if (std::find(mSlots.begin(), mSlots.end(), temp) != mSlots.end())
mChildren.push_back(&mImageComponents.find(temp)->second);
}
} }
for (auto& badge : badges) {
auto it = std::find_if(
mBadgeImages.begin(), mBadgeImages.end(),
[badge](std::pair<std::string, ImageComponent> image) { return image.first == badge; });
if (it != mBadgeImages.cend())
it->second.setVisible(true);
}
// Only recalculate the flexbox if any badges changed.
for (auto& image : mBadgeImages) {
if (prevVisibility[image.first] != image.second.isVisible()) {
onSizeChanged(); onSizeChanged();
} break;
}
std::string BadgesComponent::getValue() const }
{
std::stringstream ss;
for (auto& slot : mSlots)
ss << slot << ' ';
std::string r = ss.str();
r.pop_back();
return r;
} }
void BadgesComponent::applyTheme(const std::shared_ptr<ThemeData>& theme, void BadgesComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
@ -82,39 +65,31 @@ void BadgesComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
{ {
using namespace ThemeFlags; using namespace ThemeFlags;
const ThemeData::ThemeElement* elem = theme->getElement(view, element, "badges"); const ThemeData::ThemeElement* elem{theme->getElement(view, element, "badges")};
if (!elem) if (!elem)
return; return;
for (auto& slot : mSlots) { if (elem->has("slots")) {
if (properties & PATH && elem->has(slot)) { std::vector<std::string> slots = Utils::String::delimitedStringToVector(
Utils::String::toLower(elem->get<std::string>("slots")), " ");
for (auto slot : slots) {
if (std::find(mBadgeTypes.cbegin(), mBadgeTypes.cend(), slot) != mBadgeTypes.end()) {
if (properties & PATH && elem->has(slot))
mBadgeIcons[slot] = elem->get<std::string>(slot); mBadgeIcons[slot] = elem->get<std::string>(slot);
mImageComponents.find(slot)->second.setImage(mBadgeIcons[slot]);
ImageComponent badgeImage{mWindow};
badgeImage.setImage(mBadgeIcons[slot]);
badgeImage.setVisible(false);
mBadgeImages.push_back(std::make_pair(slot, badgeImage));
} }
else { else {
mImageComponents.find(slot)->second.setImage(mBadgeIcons[slot]); LOG(LogError) << "Invalid badge slot \"" << slot << "\" defined";
std::string teststring;
}
}
if (elem->has("slots")) {
auto value = elem->get<std::string>("slots");
mSlots = {};
if (!value.empty()) {
std::string temp;
std::istringstream ss(value);
while (std::getline(ss, temp, ' ')) {
if (!(temp == SLOT_FAVORITE || temp == SLOT_COMPLETED || temp == SLOT_KIDS ||
temp == SLOT_BROKEN || temp == SLOT_ALTERNATIVE_EMULATOR))
LOG(LogError) << "Badge slot '" << temp << "' is invalid.";
else
mSlots.push_back(temp);
}
} }
} }
// Apply theme on the flexbox component parent. // Apply theme on the flexbox component parent.
FlexboxComponent::applyTheme(theme, view, element, properties); FlexboxComponent::applyTheme(theme, view, element, properties);
}
onSizeChanged();
} }

View file

@ -11,30 +11,14 @@
#define ES_CORE_COMPONENTS_BADGES_COMPONENT_H #define ES_CORE_COMPONENTS_BADGES_COMPONENT_H
#include "FlexboxComponent.h" #include "FlexboxComponent.h"
#include "GuiComponent.h"
#include "ImageComponent.h"
#include "renderers/Renderer.h"
#define NUM_SLOTS 4
#define SLOT_FAVORITE "favorite"
#define SLOT_COMPLETED "completed"
#define SLOT_KIDS "kidgame"
#define SLOT_BROKEN "broken"
#define SLOT_ALTERNATIVE_EMULATOR "altemulator"
class TextureResource;
class BadgesComponent : public FlexboxComponent class BadgesComponent : public FlexboxComponent
{ {
public: public:
BadgesComponent(Window* window); BadgesComponent(Window* window);
~BadgesComponent();
static std::shared_ptr<BadgesComponent>& getInstance(); std::vector<std::string> getBadgeTypes() { return mBadgeTypes; }
void setBadges(const std::vector<std::string>& badges);
std::string getValue() const override;
// Should be a list of strings.
void setValue(const std::string& value) override;
virtual void applyTheme(const std::shared_ptr<ThemeData>& theme, virtual void applyTheme(const std::shared_ptr<ThemeData>& theme,
const std::string& view, const std::string& view,
@ -42,9 +26,9 @@ public:
unsigned int properties) override; unsigned int properties) override;
private: private:
static std::vector<std::string> mSlots; std::vector<std::string> mBadgeTypes;
std::map<std::string, std::string> mBadgeIcons; std::map<std::string, std::string> mBadgeIcons;
std::map<std::string, ImageComponent> mImageComponents; std::vector<std::pair<std::string, ImageComponent>> mBadgeImages;
}; };
#endif // ES_CORE_COMPONENTS_BADGES_COMPONENT_H #endif // ES_CORE_COMPONENTS_BADGES_COMPONENT_H

View file

@ -7,35 +7,41 @@
// Used by gamelist views. // Used by gamelist views.
// //
#include "components/FlexboxComponent.h" #define DEFAULT_DIRECTION Direction::row
#include "Settings.h" #define DEFAULT_ALIGN Align::center
#include "ThemeData.h" #define DEFAULT_ITEMS_PER_LINE 4
#include "resources/TextureResource.h" #define DEFAULT_LINES 1
#define DEFAULT_MARGIN_X 10.0f
#define DEFAULT_MARGIN_Y 10.0f
FlexboxComponent::FlexboxComponent(Window* window) #include "components/FlexboxComponent.h"
: GuiComponent(window)
, mDirection(DEFAULT_DIRECTION) #include "ThemeData.h"
, mAlign(DEFAULT_ALIGN)
, mItemsPerLine(DEFAULT_ITEMS_PER_LINE) FlexboxComponent::FlexboxComponent(Window* window,
, mLines(DEFAULT_LINES) std::vector<std::pair<std::string, ImageComponent>>& images)
, mItemMargin({DEFAULT_MARGIN_X, DEFAULT_MARGIN_Y}) : GuiComponent{window}
, mLayoutValid(false) , mDirection{DEFAULT_DIRECTION}
, mAlign{DEFAULT_ALIGN}
, mImages(images)
, mItemsPerLine{DEFAULT_ITEMS_PER_LINE}
, mLines{DEFAULT_LINES}
, mItemMargin{glm::vec2{DEFAULT_MARGIN_X, DEFAULT_MARGIN_Y}}
, mLayoutValid{false}
{ {
} }
void FlexboxComponent::onSizeChanged() { mLayoutValid = false; }
void FlexboxComponent::computeLayout() void FlexboxComponent::computeLayout()
{ {
// Start placing items in the top-left. // Start placing items in the top-left.
float anchorX = 0; float anchorX{0.0f};
float anchorY = 0; float anchorY{0.0f};
float anchorOriginX = 0; float anchorOriginX{0.0f};
float anchorOriginY = 0; float anchorOriginY{0.0f};
// Translation directions when placing items. // Translation directions when placing items.
glm::ivec2 directionLine = {1, 0}; glm::ivec2 directionLine{1, 0};
glm::ivec2 directionRow = {0, 1}; glm::ivec2 directionRow{0, 1};
// Change direction. // Change direction.
if (mDirection == Direction::column) { if (mDirection == Direction::column) {
@ -43,21 +49,23 @@ void FlexboxComponent::computeLayout()
directionRow = {1, 0}; directionRow = {1, 0};
} }
// Compute children maximal dimensions. // Compute maximum image dimensions.
glm::vec2 grid; glm::vec2 grid;
if (mDirection == Direction::row) if (mDirection == Direction::row)
grid = {mItemsPerLine, mLines}; grid = {mItemsPerLine, mLines};
else else
grid = {mLines, mItemsPerLine}; grid = {mLines, mItemsPerLine};
glm::vec2 maxItemSize = (mSize + mItemMargin - grid * mItemMargin) / grid; glm::vec2 maxItemSize{(mSize + mItemMargin - grid * mItemMargin) / grid};
// Set final children dimensions. // Set final image dimensions.
for (auto i : mChildren) { for (auto& image : mImages) {
auto oldSize = i->getSize(); if (!image.second.isVisible())
continue;
auto oldSize{image.second.getSize()};
if (oldSize.x == 0) if (oldSize.x == 0)
oldSize.x = maxItemSize.x; oldSize.x = maxItemSize.x;
glm::vec2 sizeMaxX = {maxItemSize.x, oldSize.y * (maxItemSize.x / oldSize.x)}; glm::vec2 sizeMaxX{maxItemSize.x, oldSize.y * (maxItemSize.x / oldSize.x)};
glm::vec2 sizeMaxY = {oldSize.x * (maxItemSize.y / oldSize.y), maxItemSize.y}; glm::vec2 sizeMaxY{oldSize.x * (maxItemSize.y / oldSize.y), maxItemSize.y};
glm::vec2 newSize; glm::vec2 newSize;
if (sizeMaxX.y > maxItemSize.y) if (sizeMaxX.y > maxItemSize.y)
newSize = sizeMaxY; newSize = sizeMaxY;
@ -65,23 +73,27 @@ void FlexboxComponent::computeLayout()
newSize = sizeMaxX; newSize = sizeMaxX;
else else
newSize = sizeMaxX.x * sizeMaxX.y >= sizeMaxY.x * sizeMaxY.y ? sizeMaxX : sizeMaxY; newSize = sizeMaxX.x * sizeMaxX.y >= sizeMaxY.x * sizeMaxY.y ? sizeMaxX : sizeMaxY;
i->setSize(newSize); image.second.setResize(newSize.x, newSize.y);
} }
// Pre-compute layout parameters. // Pre-compute layout parameters.
float lineWidth = (mDirection == Direction::row ? (maxItemSize.y + mItemMargin.y) : float lineWidth = (mDirection == Direction::row ? (maxItemSize.y + mItemMargin.y) :
(maxItemSize.x + mItemMargin.x)); (maxItemSize.x + mItemMargin.x));
float anchorXStart = anchorX; float anchorXStart{anchorX};
float anchorYStart = anchorY; float anchorYStart{anchorY};
// Iterate through the children. int i = 0;
for (int i = 0; i < static_cast<int>(mChildren.size()); i++) {
GuiComponent* child = mChildren[i]; // Iterate through the images.
auto size = child->getSize(); for (auto& image : mImages) {
if (!image.second.isVisible())
continue;
auto size{image.second.getSize()};
// Top-left anchor position. // Top-left anchor position.
float x = anchorX - anchorOriginX * size.x; float x{anchorX - anchorOriginX * size.x};
float y = anchorY - anchorOriginY * size.y; float y{anchorY - anchorOriginY * size.y};
// Apply alignment // Apply alignment
if (mAlign == Align::end) { if (mAlign == Align::end) {
@ -93,7 +105,7 @@ void FlexboxComponent::computeLayout()
y += directionLine.y == 0 ? (maxItemSize.y - size.y) / 2 : 0; y += directionLine.y == 0 ? (maxItemSize.y - size.y) / 2 : 0;
} }
else if (mAlign == Align::stretch && mDirection == Direction::row) { else if (mAlign == Align::stretch && mDirection == Direction::row) {
child->setSize(child->getSize().x, maxItemSize.y); image.second.setSize(image.second.getSize().x, maxItemSize.y);
} }
// Apply origin. // Apply origin.
@ -103,10 +115,10 @@ void FlexboxComponent::computeLayout()
y -= mOrigin.y * mSize.y; y -= mOrigin.y * mSize.y;
// Store final item position. // Store final item position.
child->setPosition(getPosition().x + x, getPosition().y + y); image.second.setPosition(getPosition().x + x, getPosition().y + y);
// Translate anchor. // Translate anchor.
if ((i + 1) % std::max(1, static_cast<int>(mItemsPerLine)) != 0) { if ((i++ + 1) % std::max(1, static_cast<int>(mItemsPerLine)) != 0) {
// Translate on same line. // Translate on same line.
anchorX += (size.x + mItemMargin.x) * static_cast<float>(directionLine.x); anchorX += (size.x + mItemMargin.x) * static_cast<float>(directionLine.x);
anchorY += (size.y + mItemMargin.y) * static_cast<float>(directionLine.y); anchorY += (size.y + mItemMargin.y) * static_cast<float>(directionLine.y);
@ -135,7 +147,8 @@ void FlexboxComponent::render(const glm::mat4& parentTrans)
if (!mLayoutValid) if (!mLayoutValid)
computeLayout(); computeLayout();
renderChildren(parentTrans); for (auto& image : mImages)
image.second.render(parentTrans);
} }
void FlexboxComponent::applyTheme(const std::shared_ptr<ThemeData>& theme, void FlexboxComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
@ -149,7 +162,6 @@ void FlexboxComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
glm::vec2{static_cast<float>(Renderer::getScreenWidth()), glm::vec2{static_cast<float>(Renderer::getScreenWidth()),
static_cast<float>(Renderer::getScreenHeight())}}; static_cast<float>(Renderer::getScreenHeight())}};
// TODO: How to do this without explicit 'badges' property?
const ThemeData::ThemeElement* elem = theme->getElement(view, element, "badges"); const ThemeData::ThemeElement* elem = theme->getElement(view, element, "badges");
if (!elem) if (!elem)
return; return;
@ -179,9 +191,3 @@ void FlexboxComponent::applyTheme(const std::shared_ptr<ThemeData>& theme,
// Layout no longer valid. // Layout no longer valid.
mLayoutValid = false; mLayoutValid = false;
} }
std::vector<HelpPrompt> FlexboxComponent::getHelpPrompts()
{
std::vector<HelpPrompt> prompts;
return prompts;
}

View file

@ -11,67 +11,75 @@
#define ES_CORE_COMPONENTS_FLEXBOX_COMPONENT_H #define ES_CORE_COMPONENTS_FLEXBOX_COMPONENT_H
#include "GuiComponent.h" #include "GuiComponent.h"
#include "renderers/Renderer.h" #include "components/ImageComponent.h"
// Default values.
#define DEFAULT_DIRECTION Direction::row
#define DEFAULT_ALIGN Align::center
#define DEFAULT_ITEMS_PER_LINE 4
#define DEFAULT_LINES 1
#define DEFAULT_MARGIN_X 10.0f
#define DEFAULT_MARGIN_Y 10.0f
class FlexboxComponent : public GuiComponent class FlexboxComponent : public GuiComponent
{ {
public: public:
enum class Direction : char { row, column }; enum class Direction : char {
enum class Align : char { start, end, center, stretch }; row, // Replace with AllowShortEnumsOnASingleLine: false (clang-format >=11.0).
column
};
explicit FlexboxComponent(Window* window); enum class Align : char {
start, // Replace with AllowShortEnumsOnASingleLine: false (clang-format >=11.0).
end,
center,
stretch
};
explicit FlexboxComponent(Window* window,
std::vector<std::pair<std::string, ImageComponent>>& images);
// Getters/Setters for rendering options. // Getters/Setters for rendering options.
[[nodiscard]] Align getAlign() const { return mAlign; }; Align getAlign() const { return mAlign; }
void setAlign(Align value) void setAlign(Align value)
{ {
mAlign = value; mAlign = value;
mLayoutValid = false; mLayoutValid = false;
}; }
[[nodiscard]] unsigned int getItemsPerLine() const { return mItemsPerLine; };
unsigned int getItemsPerLine() const { return mItemsPerLine; }
void setItemsPerLine(unsigned int value) void setItemsPerLine(unsigned int value)
{ {
mItemsPerLine = value; mItemsPerLine = value;
mLayoutValid = false; mLayoutValid = false;
}; }
[[nodiscard]] unsigned int getLines() const { return mLines; };
unsigned int getLines() const { return mLines; }
void setLines(unsigned int value) void setLines(unsigned int value)
{ {
mLines = value; mLines = value;
mLayoutValid = false; mLayoutValid = false;
}; }
[[nodiscard]] glm::vec2 getItemMargin() const { return mItemMargin; };
glm::vec2 getItemMargin() const { return mItemMargin; }
void setItemMargin(glm::vec2 value) void setItemMargin(glm::vec2 value)
{ {
mItemMargin = value; mItemMargin = value;
mLayoutValid = false; mLayoutValid = false;
}; }
void onSizeChanged() override; void onSizeChanged() override { mLayoutValid = false; }
void render(const glm::mat4& parentTrans) override; void render(const glm::mat4& parentTrans) override;
void applyTheme(const std::shared_ptr<ThemeData>& theme, void applyTheme(const std::shared_ptr<ThemeData>& theme,
const std::string& view, const std::string& view,
const std::string& element, const std::string& element,
unsigned int properties) override; unsigned int properties) override;
std::vector<HelpPrompt> getHelpPrompts() override;
private: private:
// Calculate flexbox layout. // Calculate flexbox layout.
void computeLayout(); void computeLayout();
// Rendering options. // Layout options.
Direction mDirection; Direction mDirection;
Align mAlign; Align mAlign;
std::vector<std::pair<std::string, ImageComponent>>& mImages;
unsigned int mItemsPerLine; unsigned int mItemsPerLine;
unsigned int mLines; unsigned int mLines;
glm::vec2 mItemMargin; glm::vec2 mItemMargin;
bool mLayoutValid; bool mLayoutValid;
}; };

View file

@ -12,7 +12,7 @@
viewBox="0 0 21.166666 29.633334" viewBox="0 0 21.166666 29.633334"
version="1.1" version="1.1"
id="svg4842" id="svg4842"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="badge_altemulator.svg"> sodipodi:docname="badge_altemulator.svg">
<defs <defs
id="defs4836" /> id="defs4836" />
@ -23,15 +23,15 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="7.0546875" inkscape:zoom="12.442154"
inkscape:cx="29.041584" inkscape:cx="-18.41824"
inkscape:cy="62.825107" inkscape:cy="59.681612"
inkscape:document-units="mm" inkscape:document-units="mm"
inkscape:current-layer="layer1" inkscape:current-layer="layer2"
showgrid="false" showgrid="false"
inkscape:window-width="3440" inkscape:window-width="3840"
inkscape:window-height="1355" inkscape:window-height="2065"
inkscape:window-x="2560" inkscape:window-x="0"
inkscape:window-y="0" inkscape:window-y="0"
inkscape:window-maximized="1" inkscape:window-maximized="1"
fit-margin-top="0" fit-margin-top="0"
@ -42,7 +42,7 @@
inkscape:snap-nodes="false" inkscape:snap-nodes="false"
inkscape:snap-others="false" inkscape:snap-others="false"
inkscape:snap-global="true" inkscape:snap-global="true"
inkscape:document-rotation="0"/> inkscape:document-rotation="0" />
<metadata <metadata
id="metadata4839"> id="metadata4839">
<rdf:RDF> <rdf:RDF>
@ -51,7 +51,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -77,7 +77,7 @@
width="204.36" width="204.36"
height="288.81" height="288.81"
id="rect14" id="rect14"
style="fill:#d7d7d7;fill-opacity:1;stroke-width:0.26458"/> style="fill:#d7d7d7;fill-opacity:1;stroke-width:0.26458" />
</g> </g>
<g <g
id="g20" id="g20"
@ -88,7 +88,7 @@
width="194.89999" width="194.89999"
height="279.22" height="279.22"
id="rect18" id="rect18"
style="stroke-width:0.26458"/> style="stroke-width:0.26458" />
</g> </g>
<rect <rect
style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.0266453" style="fill:#e6e6e6;fill-opacity:1;stroke-width:0.0266453"
@ -181,27 +181,27 @@
d="m 2.2271284,292.95117 c 0,0.40604 0.015331,0.79582 0.030663,1.17749 0,0.0243 0.030663,0.0406 0.076656,0.0406 0.2529687,0.008 1.364477,0.0203 1.625048,0.0203 0.2529687,0 1.073192,-0.004 1.3184891,-0.0122 v -0.29642 -0.35327 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.2606263,-0.004 -1.096179,-0.008 -1.3568192,-0.008 h -0.099653 v -0.21114 h 0.9965315 v -0.268 -0.30859 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.1993091,0 -0.6132565,-0.004 -0.919871,-0.004 v -0.21521 h 0.2989565 c 0.2529687,0 0.9735306,0 1.2188276,-0.008 v -0.29642 -0.35326 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.2606264,-0.004 -1.0808497,-0.008 -1.3414899,-0.008 -0.2529687,0 -1.3491477,0.004 -1.5867594,0.008 -0.022997,0.40604 -0.030663,0.81206 -0.030663,1.21812 z" d="m 2.2271284,292.95117 c 0,0.40604 0.015331,0.79582 0.030663,1.17749 0,0.0243 0.030663,0.0406 0.076656,0.0406 0.2529687,0.008 1.364477,0.0203 1.625048,0.0203 0.2529687,0 1.073192,-0.004 1.3184891,-0.0122 v -0.29642 -0.35327 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.2606263,-0.004 -1.096179,-0.008 -1.3568192,-0.008 h -0.099653 v -0.21114 h 0.9965315 v -0.268 -0.30859 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.1993091,0 -0.6132565,-0.004 -0.919871,-0.004 v -0.21521 h 0.2989565 c 0.2529687,0 0.9735306,0 1.2188276,-0.008 v -0.29642 -0.35326 c -0.00767,-0.0203 -0.038327,-0.0406 -0.076656,-0.0406 -0.2606264,-0.004 -1.0808497,-0.008 -1.3414899,-0.008 -0.2529687,0 -1.3491477,0.004 -1.5867594,0.008 -0.022997,0.40604 -0.030663,0.81206 -0.030663,1.21812 z"
id="path78-4" id="path78-4"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704"/> style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704" />
<path <path
d="m 5.6153964,294.14527 c 0.5289244,0.0325 1.0961791,0.0446 1.6174179,0.0446 1.0348618,0 1.8780861,-0.15023 1.8780861,-0.79582 0,-0.5644 -0.9505434,-0.71463 -1.5867594,-0.81618 -0.3142859,-0.0487 -0.5519252,-0.0853 -0.5519252,-0.15834 0,-0.0731 0.1533072,-0.1137 0.3909464,-0.1137 0.4752649,0 1.0195325,0.0812 1.3798065,0.16647 l 0.1763081,-0.67809 c -0.5135951,-0.0527 -1.0348617,-0.0894 -1.4795233,-0.0894 -1.0501911,0 -1.8167688,0.0487 -1.8167688,0.70652 0,0.62531 0.8508821,0.75525 1.4258361,0.84049 0.2989567,0.0446 0.5212666,0.0772 0.5212666,0.15836 0,0.065 -0.1226499,0.14617 -0.4139474,0.14617 -0.3449586,0 -0.8202234,-0.0528 -1.3568193,-0.14212 z" d="m 5.6153964,294.14527 c 0.5289244,0.0325 1.0961791,0.0446 1.6174179,0.0446 1.0348618,0 1.8780861,-0.15023 1.8780861,-0.79582 0,-0.5644 -0.9505434,-0.71463 -1.5867594,-0.81618 -0.3142859,-0.0487 -0.5519252,-0.0853 -0.5519252,-0.15834 0,-0.0731 0.1533072,-0.1137 0.3909464,-0.1137 0.4752649,0 1.0195325,0.0812 1.3798065,0.16647 l 0.1763081,-0.67809 c -0.5135951,-0.0527 -1.0348617,-0.0894 -1.4795233,-0.0894 -1.0501911,0 -1.8167688,0.0487 -1.8167688,0.70652 0,0.62531 0.8508821,0.75525 1.4258361,0.84049 0.2989567,0.0446 0.5212666,0.0772 0.5212666,0.15836 0,0.065 -0.1226499,0.14617 -0.4139474,0.14617 -0.3449586,0 -0.8202234,-0.0528 -1.3568193,-0.14212 z"
id="path80-9" id="path80-9"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704"/> style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704" />
<path <path
d="m 9.4307297,292.9475 c 0,0.10149 0.00613,0.19489 0.01226,0.29641 0,0.0243 0.024523,0.0406 0.061303,0.0406 0.2023048,0.008 0.9931183,0.0203 1.2015133,0.0203 0.202306,0 0.919554,-0.004 1.054426,-0.0122 0,-0.0853 0.0061,-0.17459 0.0061,-0.2558 0,-0.20302 -0.0061,-0.24769 -0.0061,-0.34514 -0.0061,-0.0203 -0.03065,-0.0406 -0.06131,-0.0406 -0.208428,-0.004 -0.692729,-0.008 -0.901169,-0.008 -0.202303,0 -1.1647903,0.004 -1.354836,0.008 -0.00613,0.13399 -0.01226,0.21926 -0.01226,0.29642 z" d="m 9.4307297,292.9475 c 0,0.10149 0.00613,0.19489 0.01226,0.29641 0,0.0243 0.024523,0.0406 0.061303,0.0406 0.2023048,0.008 0.9931183,0.0203 1.2015133,0.0203 0.202306,0 0.919554,-0.004 1.054426,-0.0122 0,-0.0853 0.0061,-0.17459 0.0061,-0.2558 0,-0.20302 -0.0061,-0.24769 -0.0061,-0.34514 -0.0061,-0.0203 -0.03065,-0.0406 -0.06131,-0.0406 -0.208428,-0.004 -0.692729,-0.008 -0.901169,-0.008 -0.202303,0 -1.1647903,0.004 -1.354836,0.008 -0.00613,0.13399 -0.01226,0.21926 -0.01226,0.29642 z"
id="path82-1" id="path82-1"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.0328234"/> style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.0328234" />
<path <path
d="m 13.651876,292.95117 c 0,-0.19489 0,-0.36544 0.0077,-0.53598 h 0.130314 c 0.206967,0 0.360288,0.0528 0.360288,0.53598 0,0.48319 -0.153307,0.54004 -0.360288,0.54004 h -0.130314 c -0.0077,-0.17054 -0.0077,-0.34108 -0.0077,-0.54004 z m -1.517812,0 c 0,0.40604 0.01533,0.75525 0.01533,1.13692 0,0.0243 0.03066,0.0406 0.07666,0.0406 0.528925,0.0284 1.011861,0.0487 1.433466,0.0487 1.28783,0 2.092697,-0.21115 2.092697,-1.22628 0,-0.95418 -0.812553,-1.24657 -2.108095,-1.24657 -0.429277,0 -0.98886,0.0284 -1.494784,0.0691 0,0.40604 -0.01533,0.7715 -0.01533,1.17749 z" d="m 13.651876,292.95117 c 0,-0.19489 0,-0.36544 0.0077,-0.53598 h 0.130314 c 0.206967,0 0.360288,0.0528 0.360288,0.53598 0,0.48319 -0.153307,0.54004 -0.360288,0.54004 h -0.130314 c -0.0077,-0.17054 -0.0077,-0.34108 -0.0077,-0.54004 z m -1.517812,0 c 0,0.40604 0.01533,0.75525 0.01533,1.13692 0,0.0243 0.03066,0.0406 0.07666,0.0406 0.528925,0.0284 1.011861,0.0487 1.433466,0.0487 1.28783,0 2.092697,-0.21115 2.092697,-1.22628 0,-0.95418 -0.812553,-1.24657 -2.108095,-1.24657 -0.429277,0 -0.98886,0.0284 -1.494784,0.0691 0,0.40604 -0.01533,0.7715 -0.01533,1.17749 z"
id="path84-7" id="path84-7"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704"/> style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.036704" />
<path <path
d="m 15.999759,292.92458 c 0,0.3953 0.01492,0.77476 0.02985,1.14634 0,0.0237 0.02985,0.0395 0.07463,0.0395 0.246278,0.008 1.328384,0.0198 1.582062,0.0198 0.246277,0 1.044804,-0.004 1.283611,-0.0118 v -0.28858 -0.34391 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.253731,-0.004 -1.067182,-0.008 -1.320928,-0.008 h -0.09702 v -0.20557 h 0.970171 v -0.2609 -0.30043 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.194037,0 -0.597034,-0.004 -0.895539,-0.004 v -0.20951 h 0.291049 c 0.246277,0 0.947778,0 1.186587,-0.008 v -0.28857 -0.34391 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.253731,-0.004 -1.052258,-0.008 -1.306003,-0.008 -0.246277,0 -1.313459,0.004 -1.544785,0.008 -0.02239,0.39529 -0.02985,0.79057 -0.02985,1.18589 z" d="m 15.999759,292.92458 c 0,0.3953 0.01492,0.77476 0.02985,1.14634 0,0.0237 0.02985,0.0395 0.07463,0.0395 0.246278,0.008 1.328384,0.0198 1.582062,0.0198 0.246277,0 1.044804,-0.004 1.283611,-0.0118 v -0.28858 -0.34391 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.253731,-0.004 -1.067182,-0.008 -1.320928,-0.008 h -0.09702 v -0.20557 h 0.970171 v -0.2609 -0.30043 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.194037,0 -0.597034,-0.004 -0.895539,-0.004 v -0.20951 h 0.291049 c 0.246277,0 0.947778,0 1.186587,-0.008 v -0.28857 -0.34391 c -0.0075,-0.0198 -0.03731,-0.0395 -0.07463,-0.0395 -0.253731,-0.004 -1.052258,-0.008 -1.306003,-0.008 -0.246277,0 -1.313459,0.004 -1.544785,0.008 -0.02239,0.39529 -0.02985,0.79057 -0.02985,1.18589 z"
id="path86-0" id="path86-0"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.0357331"/> style="fill:#f0f0f0;fill-opacity:1;stroke-width:0.0357331" />
</g> </g>
<g <g
id="g54" id="g54"
@ -211,11 +211,11 @@
<path <path
id="path26" id="path26"
d="m 17.44,237.05 c 0,6.2189 2.6119,7.5125 6.7911,7.5125 1.0199,0 1.8408,-0.0746 2.8607,-0.27364 l -0.52239,-3.9304 -2.2886,0.17413 c -1.0199,0.0497 -1.6667,-0.52239 -1.6667,-3.4826 0,-2.9602 0.74627,-3.5075 1.6667,-3.4577 l 2.2886,0.14926 0.54726,-3.9055 c -1.0199,-0.22388 -1.8159,-0.42289 -2.8358,-0.42289 -4.204,0 -6.8408,1.791 -6.8408,7.6368 z" d="m 17.44,237.05 c 0,6.2189 2.6119,7.5125 6.7911,7.5125 1.0199,0 1.8408,-0.0746 2.8607,-0.27364 l -0.52239,-3.9304 -2.2886,0.17413 c -1.0199,0.0497 -1.6667,-0.52239 -1.6667,-3.4826 0,-2.9602 0.74627,-3.5075 1.6667,-3.4577 l 2.2886,0.14926 0.54726,-3.9055 c -1.0199,-0.22388 -1.8159,-0.42289 -2.8358,-0.42289 -4.204,0 -6.8408,1.791 -6.8408,7.6368 z"
inkscape:connector-curvature="0"/> inkscape:connector-curvature="0" />
<path <path
id="path28" id="path28"
d="m 27.505,237.05 c 0,5.7712 2.1642,7.612 6.9154,7.612 3.5075,-0.17413 5.7214,-2.7114 5.7214,-7.612 0,-5.7463 -2.2388,-7.6368 -6.9652,-7.6368 -3.5075,0.17413 -5.6717,2.7612 -5.6717,7.6368 z m 5.1741,0 c 0,-2.9602 0.42289,-3.2836 1.0945,-3.2836 0.67161,0 1.1692,0.32339 1.1692,3.2836 0,2.9602 -0.42289,3.2836 -1.0945,3.2836 -0.67161,0 -1.1692,-0.32339 -1.1692,-3.2836 z" d="m 27.505,237.05 c 0,5.7712 2.1642,7.612 6.9154,7.612 3.5075,-0.17413 5.7214,-2.7114 5.7214,-7.612 0,-5.7463 -2.2388,-7.6368 -6.9652,-7.6368 -3.5075,0.17413 -5.6717,2.7612 -5.6717,7.6368 z m 5.1741,0 c 0,-2.9602 0.42289,-3.2836 1.0945,-3.2836 0.67161,0 1.1692,0.32339 1.1692,3.2836 0,2.9602 -0.42289,3.2836 -1.0945,3.2836 -0.67161,0 -1.1692,-0.32339 -1.1692,-3.2836 z"
inkscape:connector-curvature="0"/> inkscape:connector-curvature="0" />
<path <path
id="path30" id="path30"
d="m 41.176,237.05 c 0,2.4876 0.04975,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.79602,0.0498 1.5672,0.0746 2.4129,0.0746 0.8209,0 1.2687,-0.0249 2.0647,-0.0746 l -0.0995,-6.5921 2.5871,6.3433 c 0.04975,0.14925 0.12438,0.24875 0.27363,0.24875 0.79602,0.0498 1.5174,0.0746 2.2637,0.0746 0.8209,0 1.2438,-0.0249 1.9403,-0.0746 0.04975,-2.4876 0.0995,-4.9751 0.0995,-7.4627 0,-2.4876 -0.04975,-4.8756 -0.0995,-7.214 0,-0.12438 -0.12438,-0.22388 -0.24876,-0.24876 -0.74627,-0.0249 -1.4677,-0.0498 -2.3134,-0.0498 -0.8209,0 -1.393,0.0249 -2.1642,0.0498 l 0.07463,6.6169 -2.5622,-6.3682 c -0.07463,-0.12438 -0.14925,-0.22388 -0.27363,-0.24876 -0.79602,-0.0249 -1.4428,-0.0498 -2.1642,-0.0498 -0.8209,0 -1.2687,0.0249 -2.0398,0.0498 -0.07463,2.4876 -0.0995,4.9751 -0.0995,7.4627 z" d="m 41.176,237.05 c 0,2.4876 0.04975,4.8756 0.0995,7.214 0,0.14925 0.0995,0.24875 0.24876,0.24875 0.79602,0.0498 1.5672,0.0746 2.4129,0.0746 0.8209,0 1.2687,-0.0249 2.0647,-0.0746 l -0.0995,-6.5921 2.5871,6.3433 c 0.04975,0.14925 0.12438,0.24875 0.27363,0.24875 0.79602,0.0498 1.5174,0.0746 2.2637,0.0746 0.8209,0 1.2438,-0.0249 1.9403,-0.0746 0.04975,-2.4876 0.0995,-4.9751 0.0995,-7.4627 0,-2.4876 -0.04975,-4.8756 -0.0995,-7.214 0,-0.12438 -0.12438,-0.22388 -0.24876,-0.24876 -0.74627,-0.0249 -1.4677,-0.0498 -2.3134,-0.0498 -0.8209,0 -1.393,0.0249 -2.1642,0.0498 l 0.07463,6.6169 -2.5622,-6.3682 c -0.07463,-0.12438 -0.14925,-0.22388 -0.27363,-0.24876 -0.79602,-0.0249 -1.4428,-0.0498 -2.1642,-0.0498 -0.8209,0 -1.2687,0.0249 -2.0398,0.0498 -0.07463,2.4876 -0.0995,4.9751 -0.0995,7.4627 z"
@ -296,7 +296,7 @@
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:Dyuthi;-inkscape-font-specification:Dyuthi;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.5833px;line-height:1.25;font-family:Dyuthi;-inkscape-font-specification:Dyuthi;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="19.372959" x="19.372959"
y="271.49698" y="271.49698"
id="text5145"/> id="text5145" />
<g <g
id="g5222"> id="g5222">
<g <g
@ -381,7 +381,7 @@
id="rect5061" id="rect5061"
d="m 4.7486749,277.07833 c -0.3682172,0 -0.664559,0.25094 -0.664559,0.56276 v 5.0648 c 0,0.31182 0.2963418,0.56276 0.664559,0.56276 H 16.456487 c 0.368217,0 0.664559,-0.25094 0.664559,-0.56276 v -1.64279 a 0.91714642,0.91714642 0 0 1 -0.698149,-0.88987 0.91714642,0.91714642 0 0 1 0.698149,-0.88935 v -1.64279 c 0,-0.31182 -0.296342,-0.56276 -0.664559,-0.56276 z" d="m 4.7486749,277.07833 c -0.3682172,0 -0.664559,0.25094 -0.664559,0.56276 v 5.0648 c 0,0.31182 0.2963418,0.56276 0.664559,0.56276 H 16.456487 c 0.368217,0 0.664559,-0.25094 0.664559,-0.56276 v -1.64279 a 0.91714642,0.91714642 0 0 1 -0.698149,-0.88987 0.91714642,0.91714642 0 0 1 0.698149,-0.88935 v -1.64279 c 0,-0.31182 -0.296342,-0.56276 -0.664559,-0.56276 z"
style="opacity:1;fill:#fcfcfd;fill-opacity:1;stroke:#282828;stroke-width:0.274902;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" style="opacity:1;fill:#fcfcfd;fill-opacity:1;stroke:#282828;stroke-width:0.274902;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
inkscape:connector-curvature="0"/> inkscape:connector-curvature="0" />
<rect <rect
rx="0.42198506" rx="0.42198506"
ry="0.42198506" ry="0.42198506"
@ -390,7 +390,7 @@
height="4.9067254" height="4.9067254"
width="5.7913175" width="5.7913175"
id="rect5019" id="rect5019"
style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.213968;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"/> style="opacity:1;vector-effect:none;fill:#ffd700;fill-opacity:1;stroke:#282828;stroke-width:0.213968;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" />
</g> </g>
</g> </g>
<g <g
@ -401,31 +401,31 @@
aria-label="ALT EMU" aria-label="ALT EMU"
transform="scale(1.0680187,0.93631321)" transform="scale(1.0680187,0.93631321)"
id="text41" id="text41"
style="font-size:4.97619px;line-height:1.25;font-family:'Bebas Neue';-inkscape-font-specification:'Bebas Neue';display:inline;stroke-width:0.0339285"> style="font-size:4.97619px;line-height:1.25;font-family:'Bebas Neue';-inkscape-font-specification:'Bebas Neue';display:inline;stroke-width:0.0339285;fill:#f0f0f0;fill-opacity:1">
<path <path
d="m 1.7229501,4.7457954 c 0,0.024881 0.019905,0.03981 0.044786,0.03981 0.1642143,0.00995 0.3383809,0.014928 0.5075714,0.014928 0.1642142,0 0.2537857,-0.00498 0.4130238,-0.014928 0.034833,-0.1791429 0.06469,-0.3632619 0.094548,-0.547381 h 0.4627856 c 0.024881,0.1691905 0.054738,0.338381 0.089571,0.4976191 0.00498,0.029857 0.029857,0.049762 0.054738,0.049762 0.1741666,0.014928 0.3184761,0.014928 0.4876666,0.014928 0.1691904,0 0.2786666,-0.00498 0.4329285,-0.014928 C 4.1662594,3.8202241 3.9323785,2.8050813 3.7432833,1.8496528 3.7383071,1.8247719 3.7134261,1.7998909 3.6885452,1.7998909 3.449688,1.7949147 3.2158071,1.7899385 2.97695,1.7899385 c -0.233881,0 -0.4627857,0 -0.6867143,0.00995 -0.184119,0.9205952 -0.393119,1.8809999 -0.5424047,2.7916426 -0.00995,0.049762 -0.024881,0.1443096 -0.024881,0.1542619 z M 2.8674738,3.5913193 c 0.03981,-0.3732142 0.079619,-0.7464285 0.1244047,-1.1146665 0.049762,0.3732142 0.099524,0.7464285 0.1542619,1.1146665 z" d="m 1.7229501,4.7457954 c 0,0.024881 0.019905,0.03981 0.044786,0.03981 0.1642143,0.00995 0.3383809,0.014928 0.5075714,0.014928 0.1642142,0 0.2537857,-0.00498 0.4130238,-0.014928 0.034833,-0.1791429 0.06469,-0.3632619 0.094548,-0.547381 h 0.4627856 c 0.024881,0.1691905 0.054738,0.338381 0.089571,0.4976191 0.00498,0.029857 0.029857,0.049762 0.054738,0.049762 0.1741666,0.014928 0.3184761,0.014928 0.4876666,0.014928 0.1691904,0 0.2786666,-0.00498 0.4329285,-0.014928 C 4.1662594,3.8202241 3.9323785,2.8050813 3.7432833,1.8496528 3.7383071,1.8247719 3.7134261,1.7998909 3.6885452,1.7998909 3.449688,1.7949147 3.2158071,1.7899385 2.97695,1.7899385 c -0.233881,0 -0.4627857,0 -0.6867143,0.00995 -0.184119,0.9205952 -0.393119,1.8809999 -0.5424047,2.7916426 -0.00995,0.049762 -0.024881,0.1443096 -0.024881,0.1542619 z M 2.8674738,3.5913193 c 0.03981,-0.3732142 0.079619,-0.7464285 0.1244047,-1.1146665 0.049762,0.3732142 0.099524,0.7464285 0.1542619,1.1146665 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#f0f0f0;stroke-width:0.0339285;fill-opacity:1"
id="path975"/> id="path975" />
<path <path
d="m 4.4946808,3.2927479 c 0,0.497619 0.00995,0.9753333 0.019905,1.4430952 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.1642143,0.00995 0.8857619,0.024881 1.0549523,0.024881 0.1642143,0 0.5772381,-0.00498 0.7364762,-0.014929 0,-0.1244047 0,-0.2438333 0,-0.3632618 0,-0.1393334 0,-0.2786667 0,-0.4329286 C 6.3507997,3.974486 6.3308949,3.949605 6.306014,3.949605 6.1368235,3.9446288 5.7138474,3.9396526 5.5446569,3.9396526 h -0.019905 c 0,-0.2089999 0.00498,-0.4229761 0.00498,-0.6469047 0,-0.497619 -0.00995,-0.9753332 -0.019905,-1.4430951 0,-0.024881 -0.024881,-0.049762 -0.049762,-0.049762 -0.1691905,-0.00498 -0.3433572,-0.00995 -0.5125476,-0.00995 -0.1642143,0 -0.2786667,0.00498 -0.4329286,0.00995 -0.014928,0.497619 -0.019905,0.995238 -0.019905,1.492857 z" d="m 4.4946808,3.2927479 c 0,0.497619 0.00995,0.9753333 0.019905,1.4430952 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.1642143,0.00995 0.8857619,0.024881 1.0549523,0.024881 0.1642143,0 0.5772381,-0.00498 0.7364762,-0.014929 0,-0.1244047 0,-0.2438333 0,-0.3632618 0,-0.1393334 0,-0.2786667 0,-0.4329286 C 6.3507997,3.974486 6.3308949,3.949605 6.306014,3.949605 6.1368235,3.9446288 5.7138474,3.9396526 5.5446569,3.9396526 h -0.019905 c 0,-0.2089999 0.00498,-0.4229761 0.00498,-0.6469047 0,-0.497619 -0.00995,-0.9753332 -0.019905,-1.4430951 0,-0.024881 -0.024881,-0.049762 -0.049762,-0.049762 -0.1691905,-0.00498 -0.3433572,-0.00995 -0.5125476,-0.00995 -0.1642143,0 -0.2786667,0.00498 -0.4329286,0.00995 -0.014928,0.497619 -0.019905,0.995238 -0.019905,1.492857 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#f0f0f0;stroke-width:0.0339285;fill-opacity:1"
id="path977"/> id="path977" />
<path <path
d="m 6.1318408,2.1780813 c 0,0.1343572 0,0.2687143 0.00498,0.4080476 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.084595,0.00498 0.3234523,0.00995 0.5473809,0.014929 0,0.209 0,0.4130238 0,0.6419285 0,0.497619 0.00995,0.9753333 0.019905,1.4430952 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.1642143,0.00995 0.338381,0.014928 0.5075714,0.014928 0.1642143,0 0.2786667,-0.00498 0.4379048,-0.014928 0.00995,-0.4976191 0.019905,-0.9952381 0.019905,-1.4928571 0,-0.2289047 -0.00498,-0.4329285 -0.00995,-0.6369523 0.2587619,0 0.5225,-0.00498 0.6070952,-0.00995 0,-0.1244047 0,-0.2488095 0,-0.3682381 0,-0.1443095 0,-0.2836428 0,-0.4279523 -0.00498,-0.024881 -0.024881,-0.049762 -0.049762,-0.049762 -0.1691904,-0.00498 -0.8608809,-0.00995 -1.0300713,-0.00995 -0.1642143,0 -0.995238,0.00498 -1.1494999,0.00995 -0.00498,0.1343571 -0.00498,0.2587619 -0.00498,0.3781904 z" d="m 6.1318408,2.1780813 c 0,0.1343572 0,0.2687143 0.00498,0.4080476 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.084595,0.00498 0.3234523,0.00995 0.5473809,0.014929 0,0.209 0,0.4130238 0,0.6419285 0,0.497619 0.00995,0.9753333 0.019905,1.4430952 0,0.029857 0.019905,0.049762 0.049762,0.049762 0.1642143,0.00995 0.338381,0.014928 0.5075714,0.014928 0.1642143,0 0.2786667,-0.00498 0.4379048,-0.014928 0.00995,-0.4976191 0.019905,-0.9952381 0.019905,-1.4928571 0,-0.2289047 -0.00498,-0.4329285 -0.00995,-0.6369523 0.2587619,0 0.5225,-0.00498 0.6070952,-0.00995 0,-0.1244047 0,-0.2488095 0,-0.3682381 0,-0.1443095 0,-0.2836428 0,-0.4279523 -0.00498,-0.024881 -0.024881,-0.049762 -0.049762,-0.049762 -0.1691904,-0.00498 -0.8608809,-0.00995 -1.0300713,-0.00995 -0.1642143,0 -0.995238,0.00498 -1.1494999,0.00995 -0.00498,0.1343571 -0.00498,0.2587619 -0.00498,0.3781904 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#f0f0f0;stroke-width:0.0339285;fill-opacity:1"
id="path979"/> id="path979" />
<path <path
d="m 10.067999,3.2927479 c 0,0.497619 0.01,0.9753333 0.0199,1.4430952 0,0.029857 0.0199,0.049762 0.04976,0.049762 0.164215,0.00995 0.885762,0.024881 1.054953,0.024881 0.164214,0 0.696666,-0.00498 0.855904,-0.014929 0,-0.1244047 0,-0.2438333 0,-0.3632618 0,-0.1393334 0,-0.2786667 0,-0.4329286 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.169191,-0.00498 -0.711596,-0.00995 -0.880786,-0.00995 h -0.06469 c 0,-0.084595 0,-0.1691904 0,-0.2587618 h 0.646905 c 0,-0.1194286 0,-0.2239286 0,-0.3284286 0,-0.1194286 0,-0.2388571 0,-0.3781904 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.129381,0 -0.398095,-0.00498 -0.597143,-0.00498 0,-0.089571 0,-0.1791429 0,-0.2637381 0.0846,0 0.154262,0 0.194072,0 0.164214,0 0.631976,0 0.791214,-0.00995 0,-0.1244047 0,-0.2438333 0,-0.3632619 0,-0.1393333 0,-0.2786666 0,-0.4329285 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.16919,-0.00498 -0.701643,-0.00995 -0.870833,-0.00995 -0.164214,0 -0.87581,0.00498 -1.030071,0.00995 -0.01493,0.497619 -0.0199,0.995238 -0.0199,1.492857 z" d="m 10.067999,3.2927479 c 0,0.497619 0.01,0.9753333 0.0199,1.4430952 0,0.029857 0.0199,0.049762 0.04976,0.049762 0.164215,0.00995 0.885762,0.024881 1.054953,0.024881 0.164214,0 0.696666,-0.00498 0.855904,-0.014929 0,-0.1244047 0,-0.2438333 0,-0.3632618 0,-0.1393334 0,-0.2786667 0,-0.4329286 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.169191,-0.00498 -0.711596,-0.00995 -0.880786,-0.00995 h -0.06469 c 0,-0.084595 0,-0.1691904 0,-0.2587618 h 0.646905 c 0,-0.1194286 0,-0.2239286 0,-0.3284286 0,-0.1194286 0,-0.2388571 0,-0.3781904 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.129381,0 -0.398095,-0.00498 -0.597143,-0.00498 0,-0.089571 0,-0.1791429 0,-0.2637381 0.0846,0 0.154262,0 0.194072,0 0.164214,0 0.631976,0 0.791214,-0.00995 0,-0.1244047 0,-0.2438333 0,-0.3632619 0,-0.1393333 0,-0.2786666 0,-0.4329285 -0.005,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.16919,-0.00498 -0.701643,-0.00995 -0.870833,-0.00995 -0.164214,0 -0.87581,0.00498 -1.030071,0.00995 -0.01493,0.497619 -0.0199,0.995238 -0.0199,1.492857 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#f0f0f0;stroke-width:0.0339285;fill-opacity:1"
id="path981"/> id="path981" />
<path <path
d="m 12.327182,3.2927479 c 0,0.497619 0.01,0.9753333 0.0199,1.4430952 0,0.029857 0.01991,0.049762 0.04976,0.049762 0.164215,0.00995 0.363262,0.014928 0.482691,0.014928 0.164214,0 0.253786,-0.00498 0.413024,-0.014928 l -0.0199,-1.3485476 0.542405,1.099738 0.04976,0.00995 0.05474,-0.00995 0.567285,-1.1544761 c 0,0.4677619 0.0199,0.915619 0.02986,1.3535238 0,0.029857 0.0199,0.049762 0.04976,0.049762 0.164215,0.00995 0.338381,0.014928 0.45781,0.014928 0.164214,0 0.243833,-0.00498 0.388143,-0.014928 0.01,-0.4976191 0.0199,-0.9952381 0.0199,-1.4928571 0,-0.497619 -0.01,-0.9753332 -0.0199,-1.4430951 0,-0.024881 -0.02488,-0.044786 -0.04976,-0.049762 -0.139334,-0.00498 -0.293596,-0.00995 -0.462786,-0.00995 -0.139333,0 -0.258762,0.00498 -0.348333,0.014929 -0.02488,0 -0.04479,0.024881 -0.05972,0.044786 l -0.627,1.2788809 -0.622023,-1.2788809 c -0.01,-0.019905 -0.02986,-0.044786 -0.05474,-0.049762 -0.149286,-0.00498 -0.263738,-0.00995 -0.432929,-0.00995 -0.164214,0 -0.253786,0.00498 -0.408048,0.00995 -0.01493,0.497619 -0.0199,0.995238 -0.0199,1.492857 z" d="m 12.327182,3.2927479 c 0,0.497619 0.01,0.9753333 0.0199,1.4430952 0,0.029857 0.01991,0.049762 0.04976,0.049762 0.164215,0.00995 0.363262,0.014928 0.482691,0.014928 0.164214,0 0.253786,-0.00498 0.413024,-0.014928 l -0.0199,-1.3485476 0.542405,1.099738 0.04976,0.00995 0.05474,-0.00995 0.567285,-1.1544761 c 0,0.4677619 0.0199,0.915619 0.02986,1.3535238 0,0.029857 0.0199,0.049762 0.04976,0.049762 0.164215,0.00995 0.338381,0.014928 0.45781,0.014928 0.164214,0 0.243833,-0.00498 0.388143,-0.014928 0.01,-0.4976191 0.0199,-0.9952381 0.0199,-1.4928571 0,-0.497619 -0.01,-0.9753332 -0.0199,-1.4430951 0,-0.024881 -0.02488,-0.044786 -0.04976,-0.049762 -0.139334,-0.00498 -0.293596,-0.00995 -0.462786,-0.00995 -0.139333,0 -0.258762,0.00498 -0.348333,0.014929 -0.02488,0 -0.04479,0.024881 -0.05972,0.044786 l -0.627,1.2788809 -0.622023,-1.2788809 c -0.01,-0.019905 -0.02986,-0.044786 -0.05474,-0.049762 -0.149286,-0.00498 -0.263738,-0.00995 -0.432929,-0.00995 -0.164214,0 -0.253786,0.00498 -0.408048,0.00995 -0.01493,0.497619 -0.0199,0.995238 -0.0199,1.492857 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#f0f0f0;stroke-width:0.0339285;fill-opacity:1"
id="path983"/> id="path983" />
<path <path
d="m 15.696059,3.3126527 c 0,1.2539999 0.447857,1.5227142 1.348547,1.5227142 0.701643,-0.034833 1.109691,-0.442881 1.109691,-1.5227142 0,-0.497619 -0.01,-0.995238 -0.01991,-1.4629999 0,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.16919,-0.00498 -0.343357,-0.00995 -0.512548,-0.00995 -0.164214,0 -0.278666,0.00498 -0.432928,0.00995 -0.01493,0.497619 -0.01991,1.1644285 -0.01991,1.6620475 0,0.4428809 -0.05474,0.5075714 -0.189095,0.5075714 -0.134357,0 -0.199048,-0.06469 -0.199048,-0.5075714 0,-0.497619 -0.01,-1.1445237 -0.0199,-1.6122856 0,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.169191,-0.00498 -0.343357,-0.00995 -0.512548,-0.00995 -0.164214,0 -0.278667,0.00498 -0.432928,0.00995 -0.01493,0.497619 -0.0199,1.0151428 -0.0199,1.5127618 z" d="m 15.696059,3.3126527 c 0,1.2539999 0.447857,1.5227142 1.348547,1.5227142 0.701643,-0.034833 1.109691,-0.442881 1.109691,-1.5227142 0,-0.497619 -0.01,-0.995238 -0.01991,-1.4629999 0,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.16919,-0.00498 -0.343357,-0.00995 -0.512548,-0.00995 -0.164214,0 -0.278666,0.00498 -0.432928,0.00995 -0.01493,0.497619 -0.01991,1.1644285 -0.01991,1.6620475 0,0.4428809 -0.05474,0.5075714 -0.189095,0.5075714 -0.134357,0 -0.199048,-0.06469 -0.199048,-0.5075714 0,-0.497619 -0.01,-1.1445237 -0.0199,-1.6122856 0,-0.024881 -0.02488,-0.049762 -0.04976,-0.049762 -0.169191,-0.00498 -0.343357,-0.00995 -0.512548,-0.00995 -0.164214,0 -0.278667,0.00498 -0.432928,0.00995 -0.01493,0.497619 -0.0199,1.0151428 -0.0199,1.5127618 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#ffffff;stroke-width:0.0339285" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.97619px;font-family:Digitalt;-inkscape-font-specification:Digitalt;fill:#f0f0f0;stroke-width:0.0339285;fill-opacity:1"
id="path985"/> id="path985" />
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 51 KiB