feat(protobufs): sync to firmware-current and consume workspace package (#1097)

* feat(protobufs): sync to firmware-current and consume workspace package

Sync the vendored .proto sources to firmware-current (v2.7.25+48), regenerate the v2 TS bindings, and consume the workspace @meshtastic/protobufs (workspace:*) in place of the stale JSR 2.7.20 — finishing the monorepo migration (core was already workspace:*).

Includes the one required breaking-change fix: admin nodedb_reset changed int32 to bool, so resetNodes() now sends value: true.

* build(protobufs): vendor generated bindings for workspace consumers

The package is consumed via workspace:* — its exports point at the TS source, which imports ./dist/meshtastic/*_pb.ts — so the generated output must exist at build time. CI builds web/core with no codegen step and the runners have no buf CLI, so the bindings are vendored here (kept gitignored; lint/format skip them). Regenerate with: pnpm --filter @meshtastic/protobufs gen

* fix(protobufs): clean script removes the actual generated output dir

buf writes bindings to packages/ts/dist, but clean was removing a non-existent root dist — so it never cleaned stale output. Addresses Copilot review feedback.

* refactor: move web app packages/web -> apps/web

Aligns the web app with the apps/web layout (matching the Vercel web-test Root Directory and the SDK-migration direction). Pure directory move plus root config: pnpm-workspace (adds apps/*), vitest projects, root tsconfig reference, and the pr/release-web/nightly workflows. vercel.json moved with the app. Build + 36 validation tests green.

* feat: config fields, module pages, key verification, telemetry capture

Incorporates the firmware-current feature work onto the protobuf foundation: new config fields (Display message bubbles; LoRa fem_lna_mode + serial_hal_only; Telemetry air_quality_screen_enabled); 4 new ModuleConfig pages (TrafficManagement, StatusMessage, TAK, RemoteHardware); the manual Key Verification flow (sendKeyVerification + ClientNotificationDialog stages + Verify Key button); live telemetry capture (nodeDB addDeviceMetrics) and admin hardening (toggleMutedNode, graceful PortNum default); plus the sdk-preview ConfigEditor demo and store/config tests. Build + lint + format + 131 tests green.

* chore: drop #1062 (unsaved-change-detection) to match upstream revert

#1062 was merged to main by accident (per @danditomaso) and is being reverted. Reverse-applied its diff here via 3-way so #1097 stays consistent with where main is headed, while keeping the feature changes layered on the same files (deviceStore/changeRegistry). Build + 131 tests + lint + format green.

* fix(nodes): clean up SNR display in node table and map popup

SNR is a ratio measured in dB, not dBm (which is absolute power); the
node table and map popup both mislabeled it and crammed three values
together: '0dBm/50%/50raw'. The trailing '%/raw' pair was the same
heuristic ((snr+10)*5) shown twice — once clamped, once not.

Render SNR in dB rounded to one decimal, color-coded by a 0-100%
signal-quality heuristic (green/yellow/red), with the quality percentage
as a muted secondary. Drop the redundant raw value. Adds unit.db; this
matches the existing SNRTooltip, which already renders dB.
This commit is contained in:
Ben Meadors
2026-06-15 13:23:28 -05:00
committed by GitHub
parent 7a8529b841
commit bbe9a0d5cd
695 changed files with 27038 additions and 786 deletions
+1
View File
@@ -45,6 +45,7 @@
"publish:jsr": "pnpm run prepack && pnpm prepare:jsr && deno publish --allow-dirty --no-check"
},
"dependencies": {
"@meshtastic/protobufs": "workspace:*",
"crc": "npm:crc@^4.3.2"
}
}
+68 -2
View File
@@ -312,6 +312,61 @@ export class MeshDevice {
);
}
/**
* Sends a key verification admin message to the connected node, driving the
* manual public-key verification handshake (see firmware KeyVerificationModule).
* The node correlates each exchange by nonce, so a response message only needs
* to echo the nonce supplied by the matching ClientNotification; remoteNodenum
* is only meaningful for the initial INITIATE_VERIFICATION request.
*/
public async sendKeyVerification(
messageType: Protobuf.Admin.KeyVerificationAdmin_MessageType,
remoteNodenum: number,
nonce: bigint,
securityNumber?: number,
): Promise<number> {
this.log.debug("sendKeyVerification", "🔑 Sending key verification message");
const keyVerificationMessage = create(Protobuf.Admin.AdminMessageSchema, {
payloadVariant: {
case: "keyVerification",
value: create(Protobuf.Admin.KeyVerificationAdminSchema, {
messageType,
remoteNodenum,
nonce,
securityNumber,
}),
},
});
return await this.sendPacket(
toBinary(Protobuf.Admin.AdminMessageSchema, keyVerificationMessage),
Protobuf.Portnums.PortNum.ADMIN_APP,
"self",
);
}
/**
* Toggles the muted state of a node (by node number) on the connected device.
* Muted nodes are silenced for notification purposes.
*/
public async toggleMutedNode(nodeNum: number): Promise<number> {
this.log.debug("toggleMutedNode", "🔇 Toggling muted node");
const toggleMutedMessage = create(Protobuf.Admin.AdminMessageSchema, {
payloadVariant: {
case: "toggleMutedNode",
value: nodeNum,
},
});
return await this.sendPacket(
toBinary(Protobuf.Admin.AdminMessageSchema, toggleMutedMessage),
Protobuf.Portnums.PortNum.ADMIN_APP,
"self",
);
}
/**
* Sets devices ChannelSettings
*/
@@ -575,7 +630,9 @@ export class MeshDevice {
const resetNodes = create(Protobuf.Admin.AdminMessageSchema, {
payloadVariant: {
case: "nodedbReset",
value: 1,
// nodedb_reset is now a bool (proto >= 2.7): setting the oneof case
// triggers the reset; `true` preserves favorites through it.
value: true,
},
});
@@ -1154,7 +1211,16 @@ export class MeshDevice {
}
default:
throw new Error(`Unhandled case ${dataPacket.portnum}`);
// Unknown / newer portnums (e.g. firmware modules this client predates)
// are ignored rather than throwing, so a single unsupported packet can't
// break decoding of the rest of the stream.
this.log.debug(
Emitter[Emitter.HandleMeshPacket],
`📦 Ignoring unhandled ${
Protobuf.Portnums.PortNum[dataPacket.portnum] ?? dataPacket.portnum
} packet`,
);
break;
}
}
}
+311 -3
View File
@@ -2,6 +2,7 @@ syntax = "proto3";
package meshtastic;
/* trunk-ignore(buf-lint/COMPILE) */
import "meshtastic/channel.proto";
import "meshtastic/config.proto";
import "meshtastic/connection_status.proto";
@@ -12,7 +13,7 @@ import "meshtastic/module_config.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "AdminProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -151,6 +152,21 @@ message AdminMessage {
* TODO: REPLACE
*/
PAXCOUNTER_CONFIG = 12;
/*
* TODO: REPLACE
*/
STATUSMESSAGE_CONFIG = 13;
/*
* Traffic management module config
*/
TRAFFICMANAGEMENT_CONFIG = 14;
/*
* TAK module config
*/
TAK_CONFIG = 15;
}
enum BackupLocation {
@@ -187,6 +203,23 @@ message AdminMessage {
uint32 touch_y = 4;
}
/*
* User is requesting an over the air update.
* Node will reboot into the OTA loader
*/
message OTAEvent {
/*
* Tell the node to reboot into OTA mode for firmware update via BLE or WiFi (ESP32 only for now)
*/
OTAMode reboot_ota_mode = 1;
/*
* A 32 byte hash of the OTA firmware.
* Used to verify the integrity of the firmware before applying an update.
*/
bytes ota_hash = 2;
}
/*
* TODO: REPLACE
*/
@@ -414,6 +447,11 @@ message AdminMessage {
*/
uint32 remove_ignored_node = 48;
/*
* Set specified node-num to be muted
*/
uint32 toggle_muted_node = 49;
/*
* Begins an edit transaction for config, module config, owner, and channel settings changes
* This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings)
@@ -443,8 +481,9 @@ message AdminMessage {
/*
* Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot)
* Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth.
* Deprecated in favor of reboot_ota_mode in 2.7.17
*/
int32 reboot_ota_seconds = 95;
int32 reboot_ota_seconds = 95 [deprecated = true];
/*
* This message is only supported for the simulator Portduino build.
@@ -469,11 +508,164 @@ message AdminMessage {
/*
* Tell the node to reset the nodedb.
* When true, favorites are preserved through reset.
*/
int32 nodedb_reset = 100;
bool nodedb_reset = 100;
/*
* Tell the node to reset into the OTA Loader
*/
OTAEvent ota_request = 102;
/*
* Parameters and sensor configuration
*/
SensorConfig sensor_config = 103;
/*
* Lockdown passphrase delivery / unlock / lock-now command for hardened
* firmware builds (see MESHTASTIC_LOCKDOWN). Used to provision the
* passphrase on first boot, unlock encrypted storage on subsequent
* reboots, re-verify on already-unlocked devices to authorize a new
* client connection, or immediately re-lock the device.
*
* Replaces the earlier scheme that repurposed SecurityConfig.private_key
* to carry passphrase bytes; that hack is retired.
*/
LockdownAuth lockdown_auth = 104;
}
}
/*
* Lockdown passphrase delivery payload.
*
* One message handles three operations distinguished by content:
* - Provision (first-time): passphrase set, lock_now=false. Firmware
* generates DEK, wraps with passphrase-derived KEK, persists.
* - Unlock: passphrase set, lock_now=false. Firmware verifies
* passphrase against stored DEK, unlocks storage, authorizes the
* connection that delivered this packet.
* - Lock now: lock_now=true, passphrase ignored. Firmware revokes
* all client auth and reboots into the locked state.
*
* Firmware decides between provision and unlock based on its own state
* (whether a DEK file already exists). Clients do not need to track
* which case applies.
*/
message LockdownAuth {
/*
* Passphrase bytes (1-32). Empty when lock_now is true.
* Capped to 32 to match the proto cap on related security fields.
*/
bytes passphrase = 1;
/*
* Optional override of the boot-count token TTL granted on success.
* 0 = use firmware default (TOKEN_DEFAULT_BOOTS).
* On reboot the firmware decrements this; when it reaches 0 the
* device boots fully locked and requires a fresh passphrase.
*/
uint32 boots_remaining = 2;
/*
* Optional wall-clock expiry for the unlock token, as absolute
* Unix-epoch seconds. 0 = no time limit (only the boot-count TTL
* applies). On boot, if the device RTC is set and now > this value,
* the token is treated as expired.
*/
uint32 valid_until_epoch = 3;
/*
* If true, ignore passphrase fields, immediately revoke all
* connection-level admin authorization, and reboot the device into
* the locked state. Always honoured regardless of current lock state.
*/
bool lock_now = 4;
/*
* Optional per-boot uptime cap on the unlocked session, in seconds.
* 0 = unlimited (token-only enforcement, suitable for unattended
* tower / infrastructure nodes).
*
* When non-zero, the firmware arms an uptime timer at unlock. On
* each expiry, while there is still boot-count budget, the firmware
* decrements the on-flash boot count in place, revokes per-
* connection admin auth (clients must re-authenticate to see
* content), re-engages the screen lock, and re-arms the timer
* without rebooting. Mesh routing keeps running across session
* boundaries; only when the boot-count budget reaches zero does
* the device hard-lock and reboot.
*
* Total exposure ceiling = ((resolved boot count) + 1) * max_session_seconds.
* The +1 accounts for the initial passphrase-unlocked session
* itself, since boots_remaining is the number of subsequent
* session rolls (each consuming one boot from the rollback ledger).
* The resolved boot count is the value the firmware writes into the
* token at unlock time: the client-supplied boots_remaining when
* non-zero, otherwise the firmware default (TOKEN_DEFAULT_BOOTS).
* Note that boots_remaining == 0 in this message means "use firmware
* default", NOT "zero boots" — a client computing the ceiling for
* display should mirror that resolution rather than multiplying the
* raw request value.
*
* The cap is persisted in the token, so it survives token-based
* auto-unlock across reboots. Explicit operator Lock Now still
* deletes the token and forces passphrase re-entry.
*
* Uses millis() (CPU uptime), not wall-clock time, so the cap is
* immune to GPS spoofing, RTC backup-battery removal, and Faraday
* cage isolation — none of those move the uptime counter. The only
* way to reset the session clock is a reboot, which costs a boot
* from the on-flash, HMAC-bound counter.
*/
uint32 max_session_seconds = 5;
/*
* Disable lockdown mode. Requires a valid passphrase in the same
* message (the device must prove the operator owns it before
* reverting at-rest encryption). On success the firmware decrypts
* every stored config / channel / nodedb file back to plaintext,
* removes the wrapped DEK, unlock token, monotonic-counter, and
* backoff files, and reboots out of lockdown.
*
* This is the inverse of the provision/unlock path: it is how the
* client app's "lockdown mode" toggle returns a device to normal
* operation.
*
* NOT reversed by this operation: APPROTECT. Once the debug port
* lockout has been burned (on silicon where it is effective) it is
* permanent — disabling lockdown decrypts your data and removes the
* access gates, but the SWD/JTAG port stays locked for the life of
* the device (recoverable only via a full chip erase over a debug
* probe, which destroys all data). Clients should make this
* irreversibility clear at the moment lockdown is first enabled.
*
* When true the passphrase field is still required; boots_remaining,
* valid_until_epoch, max_session_seconds, and lock_now are ignored.
*/
bool disable = 6;
}
/*
* Firmware update mode for OTA updates
*/
enum OTAMode {
/*
* Do not reboot into OTA mode
*/
NO_REBOOT_OTA = 0;
/*
* Reboot into OTA mode for BLE firmware update
*/
OTA_BLE = 1;
/*
* Reboot into OTA mode for WiFi firmware update
*/
OTA_WIFI = 2;
}
/*
* Parameters for setting up Meshtastic for ameteur radio usage
*/
@@ -499,6 +691,12 @@ message HamParameters {
* Optional short name of user
*/
string short_name = 4;
/*
* Optional long name of user
* Appended to callsign
*/
string long_name = 5;
}
/*
@@ -580,3 +778,113 @@ message KeyVerificationAdmin {
*/
optional uint32 security_number = 4;
}
message SensorConfig {
/*
* SCD4X CO2 Sensor configuration
*/
SCD4X_config scd4x_config = 1;
/*
* SEN5X PM Sensor configuration
*/
SEN5X_config sen5x_config = 2;
/*
* SCD30 CO2 Sensor configuration
*/
SCD30_config scd30_config = 3;
/*
* SHTXX temperature and relative humidity sensor configuration
*/
SHTXX_config shtxx_config = 4;
}
message SCD4X_config {
/*
* Set Automatic self-calibration enabled
*/
optional bool set_asc = 1;
/*
* Recalibration target CO2 concentration in ppm (FRC or ASC)
*/
optional uint32 set_target_co2_conc = 2;
/*
* Reference temperature in degC
*/
optional float set_temperature = 3;
/*
* Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure)
*/
optional uint32 set_altitude = 4;
/*
* Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude)
*/
optional uint32 set_ambient_pressure = 5;
/*
* Perform a factory reset of the sensor
*/
optional bool factory_reset = 6;
/*
* Power mode for sensor (true for low power, false for normal)
*/
optional bool set_power_mode = 7;
}
message SEN5X_config {
/*
* Reference temperature in degC
*/
optional float set_temperature = 1;
/*
* One-shot mode (true for low power - one-shot mode, false for normal - continuous mode)
*/
optional bool set_one_shot_mode = 2;
}
message SCD30_config {
/*
* Set Automatic self-calibration enabled
*/
optional bool set_asc = 1;
/*
* Recalibration target CO2 concentration in ppm (FRC or ASC)
*/
optional uint32 set_target_co2_conc = 2;
/*
* Reference temperature in degC
*/
optional float set_temperature = 3;
/*
* Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure)
*/
optional uint32 set_altitude = 4;
/*
* Power mode for sensor (true for low power, false for normal)
*/
optional uint32 set_measurement_interval = 5;
/*
* Perform a factory reset of the sensor
*/
optional bool soft_reset = 6;
}
message SHTXX_config {
/*
* Accuracy mode (0 = low, 1 = medium, 2 = high)
*/
optional uint32 set_accuracy = 1;
}
+1 -1
View File
@@ -8,7 +8,7 @@ import "meshtastic/config.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "AppOnlyProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
File diff suppressed because it is too large Load Diff
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "CannedMessageConfigProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
+4 -8
View File
@@ -1,11 +1,12 @@
syntax = "proto3";
/* trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH) */
package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ChannelProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -86,11 +87,6 @@ message ChannelSettings {
* Per-channel module settings.
*/
ModuleSettings module_settings = 7;
/*
* Whether or not we should receive notifactions / alerts through this channel
*/
bool mute = 8;
}
/*
@@ -103,10 +99,10 @@ message ModuleSettings {
uint32 position_precision = 1;
/*
* Controls whether or not the phone / clients should mute the current channel
* Controls whether or not the client / device should mute the current channel
* Useful for noisy public channels you don't necessarily want to disable
*/
bool is_client_muted = 2;
bool is_muted = 2;
}
/*
@@ -8,7 +8,7 @@ import "meshtastic/mesh.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ClientOnlyProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
+152 -3
View File
@@ -7,7 +7,7 @@ import "meshtastic/device_ui.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ConfigProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
message Config {
@@ -111,7 +111,7 @@ message Config {
ROUTER_LATE = 11;
/*
* Description: Treats packets from or to favorited nodes as ROUTER, and all other packets as CLIENT.
* Description: Treats packets from or to favorited nodes as ROUTER_LATE, and all other packets as CLIENT.
* Technical Details: Used for stronger attic/roof nodes to distribute messages more widely
* from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes
* where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node.
@@ -648,6 +648,11 @@ message Config {
* Can not be auto detected but set by proto. Used for 128x128 screens
*/
OLED_SH1107_128_128 = 4;
/*
* Can not be auto detected but set by proto. Used for 64x128 rotated screens
*/
OLED_SH1107_ROTATED = 5;
}
/*
@@ -783,6 +788,11 @@ message Config {
* If true, node names will show in long format
*/
bool use_long_node_name = 13;
/*
* If true, the device will display message bubbles on screen.
*/
bool enable_message_bubbles = 14;
}
/*
@@ -924,6 +934,62 @@ message Config {
* Brazil 902MHz
*/
BR_902 = 26;
/*
* ITU Region 1 Amateur Radio 2m band (144-146 MHz)
*/
ITU1_2M = 27;
/*
* ITU Region 2 Amateur Radio 2m band (144-148 MHz)
*/
ITU2_2M = 28;
/*
* EU 866MHz band (Band no. 47b of 2006/771/EC and subsequent amendments) for Non-specific short-range devices (SRD)
*/
EU_866 = 29;
/*
* EU 874MHz and 917MHz bands (Band no. 1 and 4 of 2022/172/EC and subsequent amendments) for Non-specific short-range devices (SRD)
*/
EU_874 = 30;
EU_917 = 31;
/*
* EU 868MHz band, with narrow presets
*/
EU_N_868 = 32;
/*
* ITU Region 3 Amateur Radio 2m band (144-148 MHz)
*/
ITU3_2M = 33;
/*
* ITU Region 1 Amateur Radio 70cm band (430-440 MHz)
*/
ITU1_70CM = 34;
/*
* ITU Region 2 Amateur Radio 70cm band (420-450 MHz)
* Note: Some countries do not allocate 420-430 MHz or 440-450 MHz.
* Check local law!
*/
ITU2_70CM = 35;
/*
* ITU Region 3 Amateur Radio 70cm band (430-450 MHz)
* Note: Some countries do not allocate 440-450 MHz. Check local law!
*/
ITU3_70CM = 36;
/*
* ITU Region 2 Amateur Radio 1.25m '125cm' band (220-225 MHz)
* Note: Some countries do not allocate 220-222 MHz (Ex: USA/Canada).
* Check local law!
*/
ITU2_125CM = 37;
}
/*
@@ -938,8 +1004,9 @@ message Config {
/*
* Long Range - Slow
* Deprecated in 2.7: Unpopular slow preset.
*/
LONG_SLOW = 1;
LONG_SLOW = 1 [deprecated = true];
/*
* Very Long Range - Slow
@@ -978,6 +1045,78 @@ message Config {
* It is not legal to use in all regions due to this wider bandwidth.
*/
SHORT_TURBO = 8;
/*
* Long Range - Turbo
* This preset performs similarly to LongFast, but with 500Khz bandwidth.
*/
LONG_TURBO = 9;
/*
* Lite Fast
* Medium range preset optimized for EU 866MHz SRD band with 125kHz bandwidth.
* Comparable link budget to MEDIUM_FAST but compliant with Band no. 47b of 2006/771/EC.
*/
LITE_FAST = 10;
/*
* Lite Slow
* Medium-to-moderate range preset optimized for EU 866MHz SRD band with 125kHz bandwidth.
* Comparable link budget to LONG_FAST but compliant with Band no. 47b of 2006/771/EC.
*/
LITE_SLOW = 11;
/*
* Narrow Fast
* Medium-to-moderate range preset optimized for EU 868MHz band with 62.5kHz bandwidth.
* Comparable link budget to SHORT_SLOW, but with half the data rate.
* Intended to avoid interference with other devices.
*/
NARROW_FAST = 12;
/*
* Narrow Slow
* Moderate range preset optimized for EU 868MHz band with 62.5kHz bandwidth.
* Comparable link budget and data rate to LONG_FAST.
*/
NARROW_SLOW = 13;
/*
* Tiny Fast
* Preset optimized for compliance with Amateur Radio restrictions with 20kHz bandwidth.
* Many regions limit data transmission bandwidth in lower amateur bands (2 Meter).
* Note: TCXO with tight tolerances (±5 ppm or better) is *absolutely required* at these narrow bandwidths.
* Only compatible with SX127x and SX126x chipsets.
* Comparable link budget and data rate to LONG_FAST.
*/
TINY_FAST = 14;
/*
* Tiny Slow
* Preset optimized for compliance with Amateur Radio restrictions with 20kHz bandwidth.
* Many regions limit data transmission bandwidth in lower amateur bands (2 Meter).
* Note: TCXO with tight tolerances (±5 ppm or better) is *absolutely required* at these narrow bandwidths.
* Only compatible with SX127x and SX126x chipsets.
* Comparable link budget and data rate to LONG_MODERATE.
*/
TINY_SLOW = 15;
}
enum FEM_LNA_Mode {
/*
* FEM_LNA is present but disabled
*/
DISABLED = 0;
/*
* FEM_LNA is present and enabled
*/
ENABLED = 1;
/*
* FEM_LNA is not present on the device
*/
NOT_PRESENT = 2;
}
/*
@@ -1100,6 +1239,16 @@ message Config {
* Sets the ok_to_mqtt bit on outgoing packets
*/
bool config_ok_to_mqtt = 105;
/*
* Set where LORA FEM is enabled, disabled, or not present
*/
FEM_LNA_Mode fem_lna_mode = 106;
/*
* Don't use radiolib to initialize the radio, instead listen for a serialHal connection
*/
bool serial_hal_only = 107;
}
message BluetoothConfig {
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ConnStatusProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
message DeviceConnectionStatus {
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "DeviceUIProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
+87 -35
View File
@@ -2,6 +2,7 @@ syntax = "proto3";
package meshtastic;
/* trunk-ignore(buf-lint/COMPILE) */
import "meshtastic/channel.proto";
import "meshtastic/config.proto";
import "meshtastic/localonly.proto";
@@ -12,7 +13,7 @@ import "nanopb.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "DeviceOnly";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
option (nanopb_fileopt).include = "<vector>";
@@ -49,6 +50,11 @@ message PositionLite {
* TODO: REPLACE
*/
Position.LocSource location_source = 5;
/*
* Indicates the bits of precision set by the sending node
*/
uint32 precision_bits = 6;
}
message UserLite {
@@ -106,20 +112,15 @@ message NodeInfoLite {
*/
uint32 num = 1;
/*
* The user info for this node
*/
UserLite user = 2;
// Tag 2 was UserLite user; flattened into tags 14..18 (presence via
// NODEINFO_BITFIELD_HAS_USER).
// Tag 3 was PositionLite position; moved to NodeDatabase.positions.
reserved 2, 3;
reserved "user", "position";
/*
* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
* Position.time now indicates the last time we received a POSITION from that node.
*/
PositionLite position = 3;
/*
* Returns the Signal-to-noise ratio (SNR) of the last received message,
* as measured by the receiver. Return SNR of the last received message in dB
* In-memory SNR of the last received message in dB. Not serialised directly:
* always zeroed before encode; persisted as snr_q4 = 19 below.
*/
float snr = 4;
@@ -127,48 +128,69 @@ message NodeInfoLite {
* Set to indicate the last time we received a packet from this node
*/
fixed32 last_heard = 5;
/*
* The latest device metrics for the node.
*/
DeviceMetrics device_metrics = 6;
// Tag 6 was DeviceMetrics device_metrics; moved to NodeDatabase.telemetry.
reserved 6;
reserved "device_metrics";
/*
* local channel index we heard that node on. Only populated if its not the default channel.
*/
uint32 channel = 7;
/*
* True if we witnessed the node over MQTT instead of LoRA transport
*/
bool via_mqtt = 8;
// Tags 8/10/11 were via_mqtt/is_favorite/is_ignored bools; packed into bitfield.
reserved 8, 10, 11;
reserved "via_mqtt", "is_favorite", "is_ignored";
/*
* Number of hops away from us this node is (0 if direct neighbor)
*/
optional uint32 hops_away = 9;
/*
* True if node is in our favorites list
* Persists between NodeDB internal clean ups
*/
bool is_favorite = 10;
/*
* True if node is in our ignored list
* Persists between NodeDB internal clean ups
*/
bool is_ignored = 11;
/*
* Last byte of the node number of the node that should be used as the next hop to reach this node.
*/
uint32 next_hop = 12;
/*
* Bitfield for storing booleans.
* LSB 0 is_key_manually_verified
* Bitfield for storing booleans. See NODEINFO_BITFIELD_* in src/mesh/NodeDB.h.
*/
uint32 bitfield = 13;
// Flattened user fields (formerly UserLite). macaddr dropped (deprecated 1.2.11).
/*
* A full name for this user, i.e. "Kevin Hester".
*/
string long_name = 14;
/*
* A VERY short name, ideally two characters or an emoji.
* Suitable for a tiny OLED screen.
*/
string short_name = 15;
/*
* Hardware model the user's device is running.
*/
HardwareModel hw_model = 16;
/*
* The user's role in the mesh.
*/
Config.DeviceConfig.Role role = 17;
/*
* The public key of the user's device, for PKI-based encrypted DMs.
*/
bytes public_key = 18;
/*
* Q4-encoded SNR: dB × 4, sint32 zigzag. Matches RouteDiscovery convention.
* Encode: snr_q4 = (int32_t)(snr * 4.0f). Decode: snr = snr_q4 / 4.0f.
* float snr is always zeroed on disk; this field carries all persisted SNR.
*/
sint32 snr_q4 = 19;
}
/*
@@ -234,6 +256,29 @@ message DeviceState {
repeated NodeRemoteHardwarePin node_remote_hardware_pins = 13;
}
// Satellite per-node entries; stored alongside the slim NodeInfoLite so nodes
// that never report don't pay the embedded cost.
message NodePositionEntry {
uint32 num = 1;
PositionLite position = 2;
}
message NodeTelemetryEntry {
uint32 num = 1;
DeviceMetrics device_metrics = 2;
}
message NodeEnvironmentEntry {
uint32 num = 1;
EnvironmentMetrics environment_metrics = 2;
}
message NodeStatusEntry {
uint32 num = 1;
StatusMessage status = 2;
}
message NodeDatabase {
/*
* A version integer used to invalidate old save files when we make
@@ -246,6 +291,13 @@ message NodeDatabase {
* New lite version of NodeDB to decrease memory footprint
*/
repeated NodeInfoLite nodes = 2 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeInfoLite>"];
// Per-NodeNum satellite arrays. Constrained platforms (e.g. STM32WL) omit
// these via MESHTASTIC_EXCLUDE_*DB build flags.
repeated NodePositionEntry positions = 3 [(nanopb).callback_datatype = "std::vector<meshtastic_NodePositionEntry>"];
repeated NodeTelemetryEntry telemetry = 4 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeTelemetryEntry>"];
repeated NodeStatusEntry status = 5 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeStatusEntry>"];
repeated NodeEnvironmentEntry environment = 6 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeEnvironmentEntry>"];
}
/*
@@ -0,0 +1,50 @@
syntax = "proto3";
package meshtastic;
/* trunk-ignore(buf-lint/COMPILE) */
import "meshtastic/deviceonly.proto";
import "meshtastic/telemetry.proto";
import "nanopb.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "DeviceOnlyLegacy";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
option (nanopb_fileopt).include = "<vector>";
/*
* Legacy NodeInfoLite descriptor used only to decode pre-split
* /prefs/nodes.proto saves during the v24 -> v25 migration boot.
* This preserves the original NodeInfoLite-compatible field numbers needed
* to parse old wire bytes cleanly, including user (2), position (3),
* device_metrics (6), and the legacy-only compatibility fields via_mqtt (8),
* is_favorite (10), and is_ignored (11). Steady-state code does not use
* this struct; it is dropped after migration completes. This file should be
* removed once DEVICESTATE_MIN_VER advances past 24.
*/
message NodeInfoLite_Legacy {
uint32 num = 1;
UserLite user = 2;
PositionLite position = 3;
float snr = 4;
fixed32 last_heard = 5;
DeviceMetrics device_metrics = 6;
uint32 channel = 7;
bool via_mqtt = 8;
optional uint32 hops_away = 9;
bool is_favorite = 10;
bool is_ignored = 11;
uint32 next_hop = 12;
uint32 bitfield = 13;
}
/*
* Legacy NodeDatabase shape: one repeated array of fat NodeInfoLite_Legacy
* with no satellite position/telemetry arrays.
*/
message NodeDatabase_Legacy {
uint32 version = 1;
repeated NodeInfoLite_Legacy nodes = 2 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeInfoLite_Legacy>"];
}
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "InterdeviceProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
// encapsulate up to 1k of NMEA string data
+16 -1
View File
@@ -8,7 +8,7 @@ import "meshtastic/module_config.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "LocalOnlyProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -131,6 +131,21 @@ message LocalModuleConfig {
*/
ModuleConfig.PaxcounterConfig paxcounter = 14;
/*
* StatusMessage Config
*/
ModuleConfig.StatusMessageConfig statusmessage = 15;
/*
* The part of the config that is specific to the Traffic Management module
*/
ModuleConfig.TrafficManagementConfig traffic_management = 16;
/*
* TAK Config
*/
ModuleConfig.TAKConfig tak = 17;
/*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
+442 -5
View File
@@ -13,7 +13,7 @@ import "meshtastic/xmodem.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "MeshProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -388,9 +388,9 @@ enum HardwareModel {
LORA_RELAY_V1 = 32;
/*
* TODO: REPLACE
* T-Echo Plus device from LilyGo
*/
NRF52840DK = 33;
T_ECHO_PLUS = 33;
/*
* TODO: REPLACE
@@ -700,9 +700,9 @@ enum HardwareModel {
HELTEC_SENSOR_HUB = 92;
/*
* Reserved Fried Chicken ID for future use
* Muzi Works Muzi-Base device
*/
RESERVED_FRIED_CHICKEN = 93;
MUZI_BASE = 93;
/*
* Heltec Magnetic Power Bank with Meshtastic compatible
@@ -810,6 +810,129 @@ enum HardwareModel {
*/
T_WATCH_ULTRA = 114;
/*
* Elecrow ThinkNode M3
*/
THINKNODE_M3 = 115;
/*
* RAK WISMESH_TAP_V2 with ESP32-S3 CPU
*/
WISMESH_TAP_V2 = 116;
/*
* RAK3401
*/
RAK3401 = 117;
/*
* RAK6421 Hat+
*/
RAK6421 = 118;
/*
* Elecrow ThinkNode M4
*/
THINKNODE_M4 = 119;
/*
* Elecrow ThinkNode M6
*/
THINKNODE_M6 = 120;
/*
* Elecrow Meshstick 1262
*/
MESHSTICK_1262 = 121;
/*
* LilyGo T-Beam 1W
*/
TBEAM_1_WATT = 122;
/*
* LilyGo T5 S3 ePaper Pro (V1 and V2)
*/
T5_S3_EPAPER_PRO = 123;
/*
* LilyGo T-Beam BPF (144-148Mhz)
*/
TBEAM_BPF = 124;
/*
* LilyGo T-Mini E-paper S3 Kit
*/
MINI_EPAPER_S3 = 125;
/*
* LilyGo T-Display S3 Pro LR1121
*/
TDISPLAY_S3_PRO = 126;
/*
* Heltec Mesh Node T096 board features an nRF52840 CPU and a TFT screen.
*/
HELTEC_MESH_NODE_T096 = 127;
/*
* Seeed studio T1000-E Pro tracker card. NRF52840 w/ LR2021 radio,
* GPS, button, buzzer, and sensors.
*/
TRACKER_T1000_E_PRO = 128;
/*
* Elecrow ThinkNode M7, M8 and M9
*/
THINKNODE_M7 = 129;
THINKNODE_M8 = 130;
THINKNODE_M9 = 131;
/*
* The Heltec-V4-R8 uses an ESP32S3R8 chip, plus an SX1262.
*/
HELTEC_V4_R8 = 132;
/*
* The HELTEC_MESH_NODE_T1 uses an NRF52840 chip, plus an SX1262.
*/
HELTEC_MESH_NODE_T1 = 133;
/*
* B&Q Consulting Station G3: TBD
*/
STATION_G3 = 134;
/*
* Lilygo T-Impulse-Plus
*/
T_IMPULSE_PLUS = 135;
/*
* Lilygo T-Echo Card
*/
T_ECHO_CARD = 136;
/*
* Seeed Tracker L2
*/
SEEED_WIO_TRACKER_L2 = 137;
/*
* Elecrow CrowPanel Advance P4 models, ESP32-P4 and TFT with SX1262 radio plugin
*/
CROWPANEL_P4 = 138;
/*
* Heltec Mesh Tower V2
*/
HELTEC_MESH_TOWER_V2 = 139;
/*
* Meshnology W10
*/
MESHNOLOGY_W10 = 140;
/*
* ------------------------------------------------------------------------------------------------------------------------------------------
* Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
@@ -851,6 +974,9 @@ message User {
/*
* A full name for this user, i.e. "Kevin Hester"
* Limited to 24 bytes of UTF-8: longer names are accepted from senders
* built against the older 39-byte limit, but devices truncate them before
* storing or rebroadcasting. Clients should enforce 24 bytes in their UI.
*/
string long_name = 2;
@@ -1020,6 +1146,12 @@ message Routing {
* This typically enforced per portnum and is used to prevent a single node from monopolizing airtime
*/
RATE_LIMIT_EXCEEDED = 38;
/*
* PKI encryption failed, due to no public key for the remote node
* This is different from PKI_UNKNOWN_PUBKEY which indicates a failure upon receiving a packet
*/
PKI_SEND_FAIL_PUBLIC_KEY = 39;
}
oneof variant {
@@ -1101,6 +1233,11 @@ message Data {
* Bitfield for extra flags. First use is to indicate that user approves the packet being uploaded to MQTT.
*/
optional uint32 bitfield = 9;
/*
* XEdDSA signature for the payload
*/
bytes xeddsa_signature = 10;
}
/*
@@ -1124,6 +1261,176 @@ message KeyVerification {
bytes hash2 = 3;
}
/*
* The actual over-the-mesh message doing store and forward++
*/
message StoreForwardPlusPlus {
/*
* Enum of message types
*/
enum SFPP_message_type {
/*
* Send an announcement of the canonical tip of a chain
*/
CANON_ANNOUNCE = 0;
/*
* Query whether a specific link is on the chain
*/
CHAIN_QUERY = 1;
/*
* Request the next link in the chain
*/
LINK_REQUEST = 3;
/*
* Provide a link to add to the chain
*/
LINK_PROVIDE = 4;
/*
* If we must fragment, send the first half
*/
LINK_PROVIDE_FIRSTHALF = 5;
/*
* If we must fragment, send the second half
*/
LINK_PROVIDE_SECONDHALF = 6;
}
/*
* Which message type is this
*/
SFPP_message_type sfpp_message_type = 1;
/*
* The hash of the specific message
*/
bytes message_hash = 2;
/*
* The hash of a link on a chain
*/
bytes commit_hash = 3;
/*
* the root hash of a chain
*/
bytes root_hash = 4;
/*
* The encrypted bytes from a message
*/
bytes message = 5;
/*
* Message ID of the contained message
*/
uint32 encapsulated_id = 6;
/*
* Destination of the contained message
*/
uint32 encapsulated_to = 7;
/*
* Sender of the contained message
*/
uint32 encapsulated_from = 8;
/*
* The receive time of the message in question
*/
uint32 encapsulated_rxtime = 9;
/*
* Used in a LINK_REQUEST to specify the message X spots back from head
*/
uint32 chain_count = 10;
}
/*
* The actual over-the-mesh message doing RemoteShell
*/
message RemoteShell {
/*
* Frame op code for PTY session control and stream transport.
*
* Values 1-63 are client->server requests.
* Values 64-127 are server->client responses/events.
*/
enum OpCode {
OP_UNSET = 0;
// Client -> server
OPEN = 1;
INPUT = 2;
RESIZE = 3;
CLOSE = 4;
PING = 5;
ACK = 6;
// Server -> client
OPEN_OK = 64;
OUTPUT = 65;
CLOSED = 66;
ERROR = 67;
PONG = 68;
}
/*
* Structured frame operation.
*/
OpCode op = 1;
/*
* Logical PTY session identifier.
*/
uint32 session_id = 2;
/*
* Monotonic sequence number for this frame.
*/
uint32 seq = 3;
/*
* Cumulative ack sequence number.
*/
uint32 ack_seq = 4;
/*
* Opaque bytes payload for INPUT/OUTPUT/ERROR and other frame bodies.
*/
bytes payload = 5;
/*
* Terminal size columns used for OPEN/RESIZE signaling.
*/
uint32 cols = 6;
/*
* Terminal size rows used for OPEN/RESIZE signaling.
*/
uint32 rows = 7;
/*
* Bit flags for protocol extensions.
*/
uint32 flags = 8;
/*
* The last sequence number TX'd.
*/
uint32 last_tx_seq = 9;
/*
* The last sequence number RX'd.
*/
uint32 last_rx_seq = 10;
}
/*
* Waypoint message, used to share arbitrary locations across the mesh
*/
@@ -1170,6 +1477,13 @@ message Waypoint {
fixed32 icon = 8;
}
/*
* Message for node status
*/
message StatusMessage {
string status = 1;
}
/*
* This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server
*/
@@ -1345,6 +1659,11 @@ message MeshPacket {
* Arrived via API connection
*/
TRANSPORT_API = 7;
/*
* Arrived via Unicast UDP
*/
TRANSPORT_UNICAST_UDP = 8;
}
/*
@@ -1356,6 +1675,10 @@ message MeshPacket {
/*
* The (immediate) destination for this packet
* If the value is 4,294,967,295 (maximum value of an unsigned 32bit integer), this indicates that the packet was
* not destined for a specific node, but for a channel as indicated by the value of `channel` below.
* If the value is another, this indicates that the packet was destined for a specific
* node (i.e. a kind of "Direct Message" to this node) and not broadcast on a channel.
*/
fixed32 to = 2;
@@ -1499,6 +1822,11 @@ message MeshPacket {
* Indicates which transport mechanism this packet arrived over
*/
TransportMechanism transport_mechanism = 21;
/*
* Indicates whether the packet has a valid signature
*/
bool xeddsa_signed = 22;
}
/*
@@ -1629,6 +1957,19 @@ message NodeInfo {
* LSB 0 of the bitfield
*/
bool is_key_manually_verified = 12;
/*
* True if node has been muted
* Persistes between NodeDB internal clean ups
*/
bool is_muted = 13;
/*
* True if node is signing its packets via XEdDSA
* Persists between NodeDB internal clean ups
* LSB 1 of the bitfield
*/
bool has_xeddsa_signed = 14;
}
/*
@@ -1987,9 +2328,105 @@ message FromRadio {
* Persistent data for device-ui
*/
DeviceUIConfig deviceuiConfig = 17;
/*
* Lockdown state notification for hardened firmware builds.
* Sent post-config (so unauthorized clients learn they must
* provision/unlock) and after each LockdownAuth admin command
* to report success or failure. Replaces the earlier scheme of
* encoding state as magic-string prefixes inside ClientNotification.
*/
LockdownStatus lockdown_status = 18;
}
}
/*
* Lockdown state report from firmware to client (for hardened builds
* with MESHTASTIC_LOCKDOWN). Sent immediately after config_complete_id
* to inform a freshly-connected unauthorized client what it must do,
* and again in response to each LockdownAuth admin command.
*/
message LockdownStatus {
enum State {
/* Default; should not be sent. */
STATE_UNSPECIFIED = 0;
/*
* No passphrase has ever been provisioned on this device.
* Client should prompt the operator to set one.
*/
NEEDS_PROVISION = 1;
/*
* Storage is locked or this client has not authenticated yet.
* lock_reason carries a machine-readable detail string.
* Client should present (or auto-replay) a passphrase via
* AdminMessage.lockdown_auth.
*/
LOCKED = 2;
/*
* Passphrase accepted; client is now authorized for this connection.
* boots_remaining and valid_until_epoch describe the active session
* token's TTL.
*/
UNLOCKED = 3;
/*
* Passphrase rejected. backoff_seconds is non-zero when rate-limited.
*/
UNLOCK_FAILED = 4;
/*
* Lockdown is supported by this firmware but not currently active
* (no passphrase has been provisioned, or it was disabled via
* AdminMessage.lockdown_auth.disable). The device is operating in
* normal, non-encrypted mode. Clients render the lockdown-mode
* toggle as OFF on receiving this. Distinct from NEEDS_PROVISION,
* which is only used during an in-progress enable flow.
*/
DISABLED = 5;
}
/* Current lockdown state being reported. */
State state = 1;
/*
* For LOCKED: machine-readable reason. Known values:
* "needs_auth" — storage already unlocked, client must auth
* "token_missing" — no boot token on flash
* "token_expired" — boot token wall-clock TTL elapsed
* "token_boots_zero" — boot token boot-count TTL exhausted
* "token_hmac_fail" — token tampered or wrong device
* "token_dek_fail" — token DEK decrypt failed
* "token_wrong_size" — token file corrupted
* "token_bad_magic" — token file corrupted
* "not_provisioned" — should generally use NEEDS_PROVISION state instead
* Other values may be added; clients should treat unknown values as
* "locked, ask for passphrase".
*/
string lock_reason = 2;
/*
* For UNLOCKED: remaining boots on the issued session token.
* Decrements by 1 on each subsequent boot.
*/
uint32 boots_remaining = 3;
/*
* For UNLOCKED: wall-clock expiry of the issued session token,
* absolute Unix-epoch seconds. 0 = no time limit.
*/
uint32 valid_until_epoch = 4;
/*
* For UNLOCK_FAILED: seconds the client must wait before another
* passphrase attempt will be accepted. 0 = wrong passphrase, no
* backoff (immediate retry allowed but advisable to prompt user).
*/
uint32 backoff_seconds = 5;
}
/*
* A notification message from the device to the client
* To be used for important messages that should to be displayed to the user
@@ -2,10 +2,12 @@ syntax = "proto3";
package meshtastic;
import "meshtastic/atak.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ModuleConfigProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -51,9 +53,9 @@ message ModuleConfig {
bool encryption_enabled = 5;
/*
* Whether to send / consume json packets on MQTT
* Deprecated: JSON packet support on MQTT was removed, and this field is ignored.
*/
bool json_enabled = 6;
bool json_enabled = 6 [deprecated = true];
/*
* If true, we attempt to establish a secure connection using TLS
@@ -295,6 +297,82 @@ message ModuleConfig {
int32 ble_threshold = 4;
}
/*
* Config for the Traffic Management module.
* Provides packet inspection and traffic shaping to help reduce channel utilization
*/
message TrafficManagementConfig {
/*
* Master enable for traffic management module
*/
bool enabled = 1;
/*
* Enable position deduplication to drop redundant position broadcasts
*/
bool position_dedup_enabled = 2;
/*
* Number of bits of precision for position deduplication (0-32)
*/
uint32 position_precision_bits = 3;
/*
* Minimum interval in seconds between position updates from the same node
*/
uint32 position_min_interval_secs = 4;
/*
* Enable direct response to NodeInfo requests from local cache
*/
bool nodeinfo_direct_response = 5;
/*
* Minimum hop distance from requestor before responding to NodeInfo requests
*/
uint32 nodeinfo_direct_response_max_hops = 6;
/*
* Enable per-node rate limiting to throttle chatty nodes
*/
bool rate_limit_enabled = 7;
/*
* Time window in seconds for rate limiting calculations
*/
uint32 rate_limit_window_secs = 8;
/*
* Maximum packets allowed per node within the rate limit window
*/
uint32 rate_limit_max_packets = 9;
/*
* Enable dropping of unknown/undecryptable packets per rate_limit_window_secs
*/
bool drop_unknown_enabled = 10;
/*
* Number of unknown packets before dropping from a node
*/
uint32 unknown_packet_threshold = 11;
/*
* Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected)
*/
bool exhaust_hop_telemetry = 12;
/*
* Set hop_limit to 0 for relayed position broadcasts (own packets unaffected)
*/
bool exhaust_hop_position = 13;
/*
* Preserve hop_limit for router-to-router traffic
*/
bool router_preserve_hops = 14;
}
/*
* Serial Config
*/
@@ -337,9 +415,12 @@ message ModuleConfig {
// VE.Direct is a serial protocol used by Victron Energy products
// https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
VE_DIRECT = 7;
//Used to configure and view some parameters of MeshSolar.
//https://heltec.org/project/meshsolar/
// Used to configure and view some parameters of MeshSolar.
// https://heltec.org/project/meshsolar/
MS_CONFIG = 8;
// Logs mesh traffic to the serial pins, ideal for logging via openLog or similar.
LOG = 9; // includes other packets
LOGTEXT = 10; // only text (channel & DM)
}
/*
@@ -621,6 +702,11 @@ message ModuleConfig {
* Note: We will still send telemtry to the connected phone / client every minute over the API
*/
bool device_telemetry_enabled = 14;
/*
* Enable/Disable the air quality telemetry measurement module on-device display
*/
bool air_quality_screen_enabled = 15;
}
/*
@@ -761,6 +847,16 @@ message ModuleConfig {
uint32 blue = 5;
}
/*
* StatusMessage config - Allows setting a status message for a node to periodically rebroadcast
*/
message StatusMessageConfig {
/*
* The actual status string
*/
string node_status = 1;
}
/*
* TODO: REPLACE
*/
@@ -829,6 +925,37 @@ message ModuleConfig {
* TODO: REPLACE
*/
PaxcounterConfig paxcounter = 13;
/*
* TODO: REPLACE
*/
StatusMessageConfig statusmessage = 14;
/*
* Traffic management module config for mesh network optimization
*/
TrafficManagementConfig traffic_management = 15;
/*
* TAK team/role configuration for TAK_TRACKER
*/
TAKConfig tak = 16;
}
/*
* TAK team/role configuration
*/
message TAKConfig {
/*
* Team color.
* Default Unspecifed_Color -> firmware uses Cyan
*/
Team team = 1;
/*
* Member role.
* Default Unspecifed -> firmware uses TeamMember
*/
MemberRole role = 2;
}
}
+1 -1
View File
@@ -8,7 +8,7 @@ import "meshtastic/mesh.proto";
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "MQTTProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
+1 -1
View File
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "PaxcountProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
+42 -1
View File
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "Portnums";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -115,6 +115,11 @@ enum PortNum {
*/
KEY_VERIFICATION_APP = 12;
/*
* Module/port for handling primitive remote shell access.
*/
REMOTE_SHELL_APP = 13;
/*
* Provides a 'ping' service that replies to any packet it receives.
* Also serves as a small example module.
@@ -134,6 +139,22 @@ enum PortNum {
*/
PAXCOUNTER_APP = 34;
/*
* Store and Forward++ module included in the firmware
* ENCODING: protobuf
* This module is specifically for Native Linux nodes, and provides a Git-style
* chain of messages.
*/
STORE_FORWARD_PLUSPLUS_APP = 35;
/*
* Node Status module
* ENCODING: protobuf
* This module allows setting an extra string of status for a node.
* Broadcasts on change and on a timer, possibly once a day.
*/
NODE_STATUS_APP = 36;
/*
* Provides a hardware serial interface to send and receive from the Meshtastic network.
* Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic
@@ -211,6 +232,12 @@ enum PortNum {
*/
POWERSTRESS_APP = 74;
/*
* LoraWAN Payload Transport
* ENCODING: compact binary LoRaWAN uplink (10-byte RF metadata + PHY payload) - see LoRaWANBridgeModule
*/
LORAWAN_BRIDGE = 75;
/*
* Reticulum Network Stack Tunnel App
* ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
@@ -224,6 +251,20 @@ enum PortNum {
*/
CAYENNE_APP = 77;
/*
* ATAK Plugin V2
* Portnum for payloads from the official Meshtastic ATAK plugin using
* TAKPacketV2 with zstd dictionary compression.
*/
ATAK_PLUGIN_V2 = 78;
/*
* GroupAlarm integration
* Used for transporting GroupAlarm-related messages between Meshtastic nodes
* and companion applications/services.
*/
GROUPALARM_APP = 112;
/*
* Private applications should use portnums >= 256.
* To simplify initial development and testing you can use "PRIVATE_APP"
+1 -1
View File
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "PowerMonProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "RemoteHardware";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
+1 -1
View File
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "RTTTLConfigProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -0,0 +1,63 @@
syntax = "proto3";
package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "SerialHal";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
// SerialHalCommand messages are sent from host to device over the SerialHal
// framing stream. Responses normally come back as SerialHalResponse with the
// same transaction_id.
//
// Interrupt notifications are the one asynchronous exception: the device emits
// an unsolicited SerialHalResponse with transaction_id == 0 and value == pin.
// Host implementations should treat those frames as interrupt events rather
// than replies to an outstanding request.
message SerialHalCommand {
enum Type {
UNSET = 0;
PIN_MODE = 1;
DIGITAL_WRITE = 2;
DIGITAL_READ = 3;
ATTACH_INTERRUPT = 4;
DETACH_INTERRUPT = 5;
SPI_TRANSFER = 6;
NOOP = 7;
}
// Host-assigned request id. Replies echo this id back in
// SerialHalResponse.transaction_id.
uint32 transaction_id = 1;
Type type = 2;
uint32 pin = 3;
uint32 value = 4;
uint32 mode = 5;
bytes data = 6;
}
message SerialHalResponse {
enum Result {
OK = 0;
ERROR = 1;
BAD_REQUEST = 2;
UNSUPPORTED = 3;
}
// Matches the originating SerialHalCommand.transaction_id for normal
// request/response traffic.
//
// A value of 0 indicates an unsolicited interrupt notification generated by
// the device. In that case, the host should interpret value as the GPIO pin
// that triggered.
uint32 transaction_id = 1;
Result result = 2;
// Used by DIGITAL_READ replies and interrupt notifications. For interrupt
// notifications (transaction_id == 0), this carries the pin number.
uint32 value = 3;
bytes data = 4;
string error = 5;
}
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "StoreAndForwardProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
+140 -4
View File
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "TelemetryProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
@@ -153,6 +153,11 @@ message EnvironmentMetrics {
* Soil temperature measured (*C)
*/
optional float soil_temperature = 22;
/*
* One-wire temperature (*C)
*/
repeated float one_wire_temperature = 23;
}
/*
@@ -443,6 +448,51 @@ message LocalStats {
* Number of packets that were dropped because the transmit queue was full.
*/
uint32 num_tx_dropped = 14;
/*
* Noise floor value measured in dBm
*/
int32 noise_floor = 15;
}
/*
* Traffic management statistics for mesh network optimization
*/
message TrafficManagementStats {
/*
* Total number of packets inspected by traffic management
*/
uint32 packets_inspected = 1;
/*
* Number of position packets dropped due to deduplication
*/
uint32 position_dedup_drops = 2;
/*
* Number of NodeInfo requests answered from cache
*/
uint32 nodeinfo_cache_hits = 3;
/*
* Number of packets dropped due to rate limiting
*/
uint32 rate_limit_drops = 4;
/*
* Number of unknown/undecryptable packets dropped
*/
uint32 unknown_packet_drops = 5;
/*
* Number of packets with hop_limit exhausted for local-only broadcast
*/
uint32 hop_exhausted_packets = 6;
/*
* Number of times router hop preservation was applied
*/
uint32 router_hops_preserved = 7;
}
/*
@@ -560,6 +610,11 @@ message Telemetry {
* Linux host metrics
*/
HostMetrics host_metrics = 8;
/*
* Traffic management statistics
*/
TrafficManagementStats traffic_management_stats = 9;
}
}
@@ -603,7 +658,7 @@ enum TelemetrySensorType {
BMP280 = 6;
/*
* High accuracy temperature and humidity
* TODO - REMOVE High accuracy temperature and humidity
*/
SHTC3 = 7;
@@ -628,7 +683,7 @@ enum TelemetrySensorType {
QMC5883L = 11;
/*
* High accuracy temperature and humidity
* TODO - REMOVE High accuracy temperature and humidity
*/
SHT31 = 12;
@@ -653,7 +708,7 @@ enum TelemetrySensorType {
RCWL9620 = 16;
/*
* Sensirion High accuracy temperature and humidity
* TODO - REMOVE Sensirion High accuracy temperature and humidity
*/
SHT4X = 17;
@@ -786,10 +841,56 @@ enum TelemetrySensorType {
* SEN5X PM SENSORS
*/
SEN5X = 43;
/*
* TSL2561 light sensor
*/
TSL2561 = 44;
/*
* BH1750 light sensor
*/
BH1750 = 45;
/*
* HDC1080 Temperature and Humidity Sensor
*/
HDC1080 = 46;
/*
* TODO - REMOVE STH21 Temperature and R. Humidity sensor
*/
SHT21 = 47;
/*
* Sensirion STC31 CO2 sensor
*/
STC31 = 48;
/*
* SCD30 CO2, humidity, temperature sensor
*/
SCD30 = 49;
/*
* SHT family of sensors for temperature and humidity
*/
SHTXX = 50;
/*
* DS248X Bridge for one-wire temperature sensors
*/
DS248X = 51;
/*
* MMC5983MA 3-Axis Digital Magnetic Sensor
*/
MMC5983MA = 52;
/*
* ICM-42607-P 6‑Axis IMU
*/
ICM42607P = 53;
}
/*
@@ -806,3 +907,38 @@ message Nau7802Config {
*/
float calibrationFactor = 2;
}
/*
* SEN5X State, for saving to flash
*/
message SEN5XState {
/*
* Last cleaning time for SEN5X
*/
uint32 last_cleaning_time = 1;
/*
* Last cleaning time for SEN5X - valid flag
*/
bool last_cleaning_valid = 2;
/*
* Config flag for one-shot mode (see admin.proto)
*/
bool one_shot_mode = 3;
/*
* Last VOC state time for SEN55
*/
optional uint32 voc_state_time = 4;
/*
* Last VOC state validity flag for SEN55
*/
optional bool voc_state_valid = 5;
/*
* VOC state array (8x uint8t) for SEN55
*/
optional fixed64 voc_state_array = 6;
}
+1 -1
View File
@@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "XmodemProtos";
option java_package = "com.geeksville.mesh";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
message XModem {
+7 -9
View File
@@ -1,5 +1,5 @@
{
"name": "@meshtastic/protobufs-ws",
"name": "@meshtastic/protobufs",
"private": true,
"version": "0.0.0",
"type": "module",
@@ -9,20 +9,18 @@
"./packages/ts/dist/"
],
"exports": {
".": {
"types": "./packages/ts/dist/mod.d.ts",
"default": "./packages/ts/dist/mod.js"
},
"./*": "./packages/ts/dist/*"
".": "./packages/ts/mod.ts"
},
"types": "./packages/ts/dist/mod.d.ts",
"types": "./packages/ts/mod.ts",
"sideEffects": false,
"scripts": {
"gen": "buf generate",
"clean": "rimraf dist",
"clean": "rimraf packages/ts/dist",
"build": "pnpm run clean && pnpm run gen"
},
"dependencies": {},
"dependencies": {
"@bufbuild/protobuf": "^2.9.0"
},
"devDependencies": {
"@bufbuild/protoc-gen-es": "^1.9.0",
"rimraf": "^6.0.0"
File diff suppressed because one or more lines are too long
@@ -0,0 +1,53 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/apponly.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { ChannelSettings } from "./channel_pb";
import { file_meshtastic_channel } from "./channel_pb";
import type { Config_LoRaConfig } from "./config_pb";
import { file_meshtastic_config } from "./config_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/apponly.proto.
*/
export const file_meshtastic_apponly: GenFile = /*@__PURE__*/
fileDesc("ChhtZXNodGFzdGljL2FwcG9ubHkucHJvdG8SCm1lc2h0YXN0aWMibwoKQ2hhbm5lbFNldBItCghzZXR0aW5ncxgBIAMoCzIbLm1lc2h0YXN0aWMuQ2hhbm5lbFNldHRpbmdzEjIKC2xvcmFfY29uZmlnGAIgASgLMh0ubWVzaHRhc3RpYy5Db25maWcuTG9SYUNvbmZpZ0JjChRvcmcubWVzaHRhc3RpYy5wcm90b0INQXBwT25seVByb3Rvc1oiZ2l0aHViLmNvbS9tZXNodGFzdGljL2dvL2dlbmVyYXRlZKoCFE1lc2h0YXN0aWMuUHJvdG9idWZzugIAYgZwcm90bzM", [file_meshtastic_channel, file_meshtastic_config]);
/**
*
* This is the most compact possible representation for a set of channels.
* It includes only one PRIMARY channel (which must be first) and
* any SECONDARY channels.
* No DISABLED channels are included.
* This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of Channels as a (long) URL
*
* @generated from message meshtastic.ChannelSet
*/
export type ChannelSet = Message<"meshtastic.ChannelSet"> & {
/**
*
* Channel list with settings
*
* @generated from field: repeated meshtastic.ChannelSettings settings = 1;
*/
settings: ChannelSettings[];
/**
*
* LoRa config
*
* @generated from field: meshtastic.Config.LoRaConfig lora_config = 2;
*/
loraConfig?: Config_LoRaConfig | undefined;
};
/**
* Describes the message meshtastic.ChannelSet.
* Use `create(ChannelSetSchema)` to create a new message.
*/
export const ChannelSetSchema: GenMessage<ChannelSet> = /*@__PURE__*/
messageDesc(file_meshtastic_apponly, 0);
File diff suppressed because one or more lines are too long
@@ -0,0 +1,37 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/cannedmessages.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/cannedmessages.proto.
*/
export const file_meshtastic_cannedmessages: GenFile = /*@__PURE__*/
fileDesc("Ch9tZXNodGFzdGljL2Nhbm5lZG1lc3NhZ2VzLnByb3RvEgptZXNodGFzdGljIi0KGUNhbm5lZE1lc3NhZ2VNb2R1bGVDb25maWcSEAoIbWVzc2FnZXMYASABKAlCbwoUb3JnLm1lc2h0YXN0aWMucHJvdG9CGUNhbm5lZE1lc3NhZ2VDb25maWdQcm90b3NaImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAGIGcHJvdG8z");
/**
*
* Canned message module configuration.
*
* @generated from message meshtastic.CannedMessageModuleConfig
*/
export type CannedMessageModuleConfig = Message<"meshtastic.CannedMessageModuleConfig"> & {
/**
*
* Predefined messages for canned message module separated by '|' characters.
*
* @generated from field: string messages = 1;
*/
messages: string;
};
/**
* Describes the message meshtastic.CannedMessageModuleConfig.
* Use `create(CannedMessageModuleConfigSchema)` to create a new message.
*/
export const CannedMessageModuleConfigSchema: GenMessage<CannedMessageModuleConfig> = /*@__PURE__*/
messageDesc(file_meshtastic_cannedmessages, 0);
@@ -0,0 +1,248 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/channel.proto (package meshtastic, syntax proto3)
/* eslint-disable */
// trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH)
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/channel.proto.
*/
export const file_meshtastic_channel: GenFile = /*@__PURE__*/
fileDesc("ChhtZXNodGFzdGljL2NoYW5uZWwucHJvdG8SCm1lc2h0YXN0aWMiuAEKD0NoYW5uZWxTZXR0aW5ncxIXCgtjaGFubmVsX251bRgBIAEoDUICGAESCwoDcHNrGAIgASgMEgwKBG5hbWUYAyABKAkSCgoCaWQYBCABKAcSFgoOdXBsaW5rX2VuYWJsZWQYBSABKAgSGAoQZG93bmxpbmtfZW5hYmxlZBgGIAEoCBIzCg9tb2R1bGVfc2V0dGluZ3MYByABKAsyGi5tZXNodGFzdGljLk1vZHVsZVNldHRpbmdzIj4KDk1vZHVsZVNldHRpbmdzEhoKEnBvc2l0aW9uX3ByZWNpc2lvbhgBIAEoDRIQCghpc19tdXRlZBgCIAEoCCKhAQoHQ2hhbm5lbBINCgVpbmRleBgBIAEoBRItCghzZXR0aW5ncxgCIAEoCzIbLm1lc2h0YXN0aWMuQ2hhbm5lbFNldHRpbmdzEiYKBHJvbGUYAyABKA4yGC5tZXNodGFzdGljLkNoYW5uZWwuUm9sZSIwCgRSb2xlEgwKCERJU0FCTEVEEAASCwoHUFJJTUFSWRABEg0KCVNFQ09OREFSWRACQmMKFG9yZy5tZXNodGFzdGljLnByb3RvQg1DaGFubmVsUHJvdG9zWiJnaXRodWIuY29tL21lc2h0YXN0aWMvZ28vZ2VuZXJhdGVkqgIUTWVzaHRhc3RpYy5Qcm90b2J1ZnO6AgBiBnByb3RvMw");
/**
*
* This information can be encoded as a QRcode/url so that other users can configure
* their radio to join the same channel.
* A note about how channel names are shown to users: channelname-X
* poundsymbol is a prefix used to indicate this is a channel name (idea from @professr).
* Where X is a letter from A-Z (base 26) representing a hash of the PSK for this
* channel - so that if the user changes anything about the channel (which does
* force a new PSK) this letter will also change. Thus preventing user confusion if
* two friends try to type in a channel name of "BobsChan" and then can't talk
* because their PSKs will be different.
* The PSK is hashed into this letter by "0x41 + [xor all bytes of the psk ] modulo 26"
* This also allows the option of someday if people have the PSK off (zero), the
* users COULD type in a channel name and be able to talk.
* FIXME: Add description of multi-channel support and how primary vs secondary channels are used.
* FIXME: explain how apps use channels for security.
* explain how remote settings and remote gpio are managed as an example
*
* @generated from message meshtastic.ChannelSettings
*/
export type ChannelSettings = Message<"meshtastic.ChannelSettings"> & {
/**
*
* Deprecated in favor of LoraConfig.channel_num
*
* @generated from field: uint32 channel_num = 1 [deprecated = true];
* @deprecated
*/
channelNum: number;
/**
*
* A simple pre-shared key for now for crypto.
* Must be either 0 bytes (no crypto), 16 bytes (AES128), or 32 bytes (AES256).
* A special shorthand is used for 1 byte long psks.
* These psks should be treated as only minimally secure,
* because they are listed in this source code.
* Those bytes are mapped using the following scheme:
* `0` = No crypto
* `1` = The special "default" channel key: {0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e, 0x69, 0x01}
* `2` through 10 = The default channel key, except with 1 through 9 added to the last byte.
* Shown to user as simple1 through 10
*
* @generated from field: bytes psk = 2;
*/
psk: Uint8Array;
/**
*
* A SHORT name that will be packed into the URL.
* Less than 12 bytes.
* Something for end users to call the channel
* If this is the empty string it is assumed that this channel
* is the special (minimally secure) "Default"channel.
* In user interfaces it should be rendered as a local language translation of "X".
* For channel_num hashing empty string will be treated as "X".
* Where "X" is selected based on the English words listed above for ModemPreset
*
* @generated from field: string name = 3;
*/
name: string;
/**
*
* Used to construct a globally unique channel ID.
* The full globally unique ID will be: "name.id" where ID is shown as base36.
* Assuming that the number of meshtastic users is below 20K (true for a long time)
* the chance of this 64 bit random number colliding with anyone else is super low.
* And the penalty for collision is low as well, it just means that anyone trying to decrypt channel messages might need to
* try multiple candidate channels.
* Any time a non wire compatible change is made to a channel, this field should be regenerated.
* There are a small number of 'special' globally known (and fairly) insecure standard channels.
* Those channels do not have a numeric id included in the settings, but instead it is pulled from
* a table of well known IDs.
* (see Well Known Channels FIXME)
*
* @generated from field: fixed32 id = 4;
*/
id: number;
/**
*
* If true, messages on the mesh will be sent to the *public* internet by any gateway ndoe
*
* @generated from field: bool uplink_enabled = 5;
*/
uplinkEnabled: boolean;
/**
*
* If true, messages seen on the internet will be forwarded to the local mesh.
*
* @generated from field: bool downlink_enabled = 6;
*/
downlinkEnabled: boolean;
/**
*
* Per-channel module settings.
*
* @generated from field: meshtastic.ModuleSettings module_settings = 7;
*/
moduleSettings?: ModuleSettings | undefined;
};
/**
* Describes the message meshtastic.ChannelSettings.
* Use `create(ChannelSettingsSchema)` to create a new message.
*/
export const ChannelSettingsSchema: GenMessage<ChannelSettings> = /*@__PURE__*/
messageDesc(file_meshtastic_channel, 0);
/**
*
* This message is specifically for modules to store per-channel configuration data.
*
* @generated from message meshtastic.ModuleSettings
*/
export type ModuleSettings = Message<"meshtastic.ModuleSettings"> & {
/**
*
* Bits of precision for the location sent in position packets.
*
* @generated from field: uint32 position_precision = 1;
*/
positionPrecision: number;
/**
*
* Controls whether or not the client / device should mute the current channel
* Useful for noisy public channels you don't necessarily want to disable
*
* @generated from field: bool is_muted = 2;
*/
isMuted: boolean;
};
/**
* Describes the message meshtastic.ModuleSettings.
* Use `create(ModuleSettingsSchema)` to create a new message.
*/
export const ModuleSettingsSchema: GenMessage<ModuleSettings> = /*@__PURE__*/
messageDesc(file_meshtastic_channel, 1);
/**
*
* A pair of a channel number, mode and the (sharable) settings for that channel
*
* @generated from message meshtastic.Channel
*/
export type Channel = Message<"meshtastic.Channel"> & {
/**
*
* The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1)
* (Someday - not currently implemented) An index of -1 could be used to mean "set by name",
* in which case the target node will find and set the channel by settings.name.
*
* @generated from field: int32 index = 1;
*/
index: number;
/**
*
* The new settings, or NULL to disable that channel
*
* @generated from field: meshtastic.ChannelSettings settings = 2;
*/
settings?: ChannelSettings | undefined;
/**
*
* TODO: REPLACE
*
* @generated from field: meshtastic.Channel.Role role = 3;
*/
role: Channel_Role;
};
/**
* Describes the message meshtastic.Channel.
* Use `create(ChannelSchema)` to create a new message.
*/
export const ChannelSchema: GenMessage<Channel> = /*@__PURE__*/
messageDesc(file_meshtastic_channel, 2);
/**
*
* How this channel is being used (or not).
* Note: this field is an enum to give us options for the future.
* In particular, someday we might make a 'SCANNING' option.
* SCANNING channels could have different frequencies and the radio would
* occasionally check that freq to see if anything is being transmitted.
* For devices that have multiple physical radios attached, we could keep multiple PRIMARY/SCANNING channels active at once to allow
* cross band routing as needed.
* If a device has only a single radio (the common case) only one channel can be PRIMARY at a time
* (but any number of SECONDARY channels can't be sent received on that common frequency)
*
* @generated from enum meshtastic.Channel.Role
*/
export enum Channel_Role {
/**
*
* This channel is not in use right now
*
* @generated from enum value: DISABLED = 0;
*/
DISABLED = 0,
/**
*
* This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY
*
* @generated from enum value: PRIMARY = 1;
*/
PRIMARY = 1,
/**
*
* Secondary channels are only used for encryption/decryption/authentication purposes.
* Their radio settings (freq etc) are ignored, only psk is used.
*
* @generated from enum value: SECONDARY = 2;
*/
SECONDARY = 2,
}
/**
* Describes the enum meshtastic.Channel.Role.
*/
export const Channel_RoleSchema: GenEnum<Channel_Role> = /*@__PURE__*/
enumDesc(file_meshtastic_channel, 2, 0);
@@ -0,0 +1,98 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/clientonly.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { LocalConfig, LocalModuleConfig } from "./localonly_pb";
import { file_meshtastic_localonly } from "./localonly_pb";
import type { Position } from "./mesh_pb";
import { file_meshtastic_mesh } from "./mesh_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/clientonly.proto.
*/
export const file_meshtastic_clientonly: GenFile = /*@__PURE__*/
fileDesc("ChttZXNodGFzdGljL2NsaWVudG9ubHkucHJvdG8SCm1lc2h0YXN0aWMiqQMKDURldmljZVByb2ZpbGUSFgoJbG9uZ19uYW1lGAEgASgJSACIAQESFwoKc2hvcnRfbmFtZRgCIAEoCUgBiAEBEhgKC2NoYW5uZWxfdXJsGAMgASgJSAKIAQESLAoGY29uZmlnGAQgASgLMhcubWVzaHRhc3RpYy5Mb2NhbENvbmZpZ0gDiAEBEjkKDW1vZHVsZV9jb25maWcYBSABKAsyHS5tZXNodGFzdGljLkxvY2FsTW9kdWxlQ29uZmlnSASIAQESMQoOZml4ZWRfcG9zaXRpb24YBiABKAsyFC5tZXNodGFzdGljLlBvc2l0aW9uSAWIAQESFQoIcmluZ3RvbmUYByABKAlIBogBARIcCg9jYW5uZWRfbWVzc2FnZXMYCCABKAlIB4gBAUIMCgpfbG9uZ19uYW1lQg0KC19zaG9ydF9uYW1lQg4KDF9jaGFubmVsX3VybEIJCgdfY29uZmlnQhAKDl9tb2R1bGVfY29uZmlnQhEKD19maXhlZF9wb3NpdGlvbkILCglfcmluZ3RvbmVCEgoQX2Nhbm5lZF9tZXNzYWdlc0JmChRvcmcubWVzaHRhc3RpYy5wcm90b0IQQ2xpZW50T25seVByb3Rvc1oiZ2l0aHViLmNvbS9tZXNodGFzdGljL2dvL2dlbmVyYXRlZKoCFE1lc2h0YXN0aWMuUHJvdG9idWZzugIAYgZwcm90bzM", [file_meshtastic_localonly, file_meshtastic_mesh]);
/**
*
* This abstraction is used to contain any configuration for provisioning a node on any client.
* It is useful for importing and exporting configurations.
*
* @generated from message meshtastic.DeviceProfile
*/
export type DeviceProfile = Message<"meshtastic.DeviceProfile"> & {
/**
*
* Long name for the node
*
* @generated from field: optional string long_name = 1;
*/
longName?: string | undefined;
/**
*
* Short name of the node
*
* @generated from field: optional string short_name = 2;
*/
shortName?: string | undefined;
/**
*
* The url of the channels from our node
*
* @generated from field: optional string channel_url = 3;
*/
channelUrl?: string | undefined;
/**
*
* The Config of the node
*
* @generated from field: optional meshtastic.LocalConfig config = 4;
*/
config?: LocalConfig | undefined;
/**
*
* The ModuleConfig of the node
*
* @generated from field: optional meshtastic.LocalModuleConfig module_config = 5;
*/
moduleConfig?: LocalModuleConfig | undefined;
/**
*
* Fixed position data
*
* @generated from field: optional meshtastic.Position fixed_position = 6;
*/
fixedPosition?: Position | undefined;
/**
*
* Ringtone for ExternalNotification
*
* @generated from field: optional string ringtone = 7;
*/
ringtone?: string | undefined;
/**
*
* Predefined messages for CannedMessage
*
* @generated from field: optional string canned_messages = 8;
*/
cannedMessages?: string | undefined;
};
/**
* Describes the message meshtastic.DeviceProfile.
* Use `create(DeviceProfileSchema)` to create a new message.
*/
export const DeviceProfileSchema: GenMessage<DeviceProfile> = /*@__PURE__*/
messageDesc(file_meshtastic_clientonly, 0);
File diff suppressed because one or more lines are too long
@@ -0,0 +1,237 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/connection_status.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/connection_status.proto.
*/
export const file_meshtastic_connection_status: GenFile = /*@__PURE__*/
fileDesc("CiJtZXNodGFzdGljL2Nvbm5lY3Rpb25fc3RhdHVzLnByb3RvEgptZXNodGFzdGljIrECChZEZXZpY2VDb25uZWN0aW9uU3RhdHVzEjMKBHdpZmkYASABKAsyIC5tZXNodGFzdGljLldpZmlDb25uZWN0aW9uU3RhdHVzSACIAQESOwoIZXRoZXJuZXQYAiABKAsyJC5tZXNodGFzdGljLkV0aGVybmV0Q29ubmVjdGlvblN0YXR1c0gBiAEBEj0KCWJsdWV0b290aBgDIAEoCzIlLm1lc2h0YXN0aWMuQmx1ZXRvb3RoQ29ubmVjdGlvblN0YXR1c0gCiAEBEjcKBnNlcmlhbBgEIAEoCzIiLm1lc2h0YXN0aWMuU2VyaWFsQ29ubmVjdGlvblN0YXR1c0gDiAEBQgcKBV93aWZpQgsKCV9ldGhlcm5ldEIMCgpfYmx1ZXRvb3RoQgkKB19zZXJpYWwiZwoUV2lmaUNvbm5lY3Rpb25TdGF0dXMSMwoGc3RhdHVzGAEgASgLMiMubWVzaHRhc3RpYy5OZXR3b3JrQ29ubmVjdGlvblN0YXR1cxIMCgRzc2lkGAIgASgJEgwKBHJzc2kYAyABKAUiTwoYRXRoZXJuZXRDb25uZWN0aW9uU3RhdHVzEjMKBnN0YXR1cxgBIAEoCzIjLm1lc2h0YXN0aWMuTmV0d29ya0Nvbm5lY3Rpb25TdGF0dXMiewoXTmV0d29ya0Nvbm5lY3Rpb25TdGF0dXMSEgoKaXBfYWRkcmVzcxgBIAEoBxIUCgxpc19jb25uZWN0ZWQYAiABKAgSGQoRaXNfbXF0dF9jb25uZWN0ZWQYAyABKAgSGwoTaXNfc3lzbG9nX2Nvbm5lY3RlZBgEIAEoCCJMChlCbHVldG9vdGhDb25uZWN0aW9uU3RhdHVzEgsKA3BpbhgBIAEoDRIMCgRyc3NpGAIgASgFEhQKDGlzX2Nvbm5lY3RlZBgDIAEoCCI8ChZTZXJpYWxDb25uZWN0aW9uU3RhdHVzEgwKBGJhdWQYASABKA0SFAoMaXNfY29ubmVjdGVkGAIgASgIQmYKFG9yZy5tZXNodGFzdGljLnByb3RvQhBDb25uU3RhdHVzUHJvdG9zWiJnaXRodWIuY29tL21lc2h0YXN0aWMvZ28vZ2VuZXJhdGVkqgIUTWVzaHRhc3RpYy5Qcm90b2J1ZnO6AgBiBnByb3RvMw");
/**
* @generated from message meshtastic.DeviceConnectionStatus
*/
export type DeviceConnectionStatus = Message<"meshtastic.DeviceConnectionStatus"> & {
/**
*
* WiFi Status
*
* @generated from field: optional meshtastic.WifiConnectionStatus wifi = 1;
*/
wifi?: WifiConnectionStatus | undefined;
/**
*
* WiFi Status
*
* @generated from field: optional meshtastic.EthernetConnectionStatus ethernet = 2;
*/
ethernet?: EthernetConnectionStatus | undefined;
/**
*
* Bluetooth Status
*
* @generated from field: optional meshtastic.BluetoothConnectionStatus bluetooth = 3;
*/
bluetooth?: BluetoothConnectionStatus | undefined;
/**
*
* Serial Status
*
* @generated from field: optional meshtastic.SerialConnectionStatus serial = 4;
*/
serial?: SerialConnectionStatus | undefined;
};
/**
* Describes the message meshtastic.DeviceConnectionStatus.
* Use `create(DeviceConnectionStatusSchema)` to create a new message.
*/
export const DeviceConnectionStatusSchema: GenMessage<DeviceConnectionStatus> = /*@__PURE__*/
messageDesc(file_meshtastic_connection_status, 0);
/**
*
* WiFi connection status
*
* @generated from message meshtastic.WifiConnectionStatus
*/
export type WifiConnectionStatus = Message<"meshtastic.WifiConnectionStatus"> & {
/**
*
* Connection status
*
* @generated from field: meshtastic.NetworkConnectionStatus status = 1;
*/
status?: NetworkConnectionStatus | undefined;
/**
*
* WiFi access point SSID
*
* @generated from field: string ssid = 2;
*/
ssid: string;
/**
*
* RSSI of wireless connection
*
* @generated from field: int32 rssi = 3;
*/
rssi: number;
};
/**
* Describes the message meshtastic.WifiConnectionStatus.
* Use `create(WifiConnectionStatusSchema)` to create a new message.
*/
export const WifiConnectionStatusSchema: GenMessage<WifiConnectionStatus> = /*@__PURE__*/
messageDesc(file_meshtastic_connection_status, 1);
/**
*
* Ethernet connection status
*
* @generated from message meshtastic.EthernetConnectionStatus
*/
export type EthernetConnectionStatus = Message<"meshtastic.EthernetConnectionStatus"> & {
/**
*
* Connection status
*
* @generated from field: meshtastic.NetworkConnectionStatus status = 1;
*/
status?: NetworkConnectionStatus | undefined;
};
/**
* Describes the message meshtastic.EthernetConnectionStatus.
* Use `create(EthernetConnectionStatusSchema)` to create a new message.
*/
export const EthernetConnectionStatusSchema: GenMessage<EthernetConnectionStatus> = /*@__PURE__*/
messageDesc(file_meshtastic_connection_status, 2);
/**
*
* Ethernet or WiFi connection status
*
* @generated from message meshtastic.NetworkConnectionStatus
*/
export type NetworkConnectionStatus = Message<"meshtastic.NetworkConnectionStatus"> & {
/**
*
* IP address of device
*
* @generated from field: fixed32 ip_address = 1;
*/
ipAddress: number;
/**
*
* Whether the device has an active connection or not
*
* @generated from field: bool is_connected = 2;
*/
isConnected: boolean;
/**
*
* Whether the device has an active connection to an MQTT broker or not
*
* @generated from field: bool is_mqtt_connected = 3;
*/
isMqttConnected: boolean;
/**
*
* Whether the device is actively remote syslogging or not
*
* @generated from field: bool is_syslog_connected = 4;
*/
isSyslogConnected: boolean;
};
/**
* Describes the message meshtastic.NetworkConnectionStatus.
* Use `create(NetworkConnectionStatusSchema)` to create a new message.
*/
export const NetworkConnectionStatusSchema: GenMessage<NetworkConnectionStatus> = /*@__PURE__*/
messageDesc(file_meshtastic_connection_status, 3);
/**
*
* Bluetooth connection status
*
* @generated from message meshtastic.BluetoothConnectionStatus
*/
export type BluetoothConnectionStatus = Message<"meshtastic.BluetoothConnectionStatus"> & {
/**
*
* The pairing PIN for bluetooth
*
* @generated from field: uint32 pin = 1;
*/
pin: number;
/**
*
* RSSI of bluetooth connection
*
* @generated from field: int32 rssi = 2;
*/
rssi: number;
/**
*
* Whether the device has an active connection or not
*
* @generated from field: bool is_connected = 3;
*/
isConnected: boolean;
};
/**
* Describes the message meshtastic.BluetoothConnectionStatus.
* Use `create(BluetoothConnectionStatusSchema)` to create a new message.
*/
export const BluetoothConnectionStatusSchema: GenMessage<BluetoothConnectionStatus> = /*@__PURE__*/
messageDesc(file_meshtastic_connection_status, 4);
/**
*
* Serial connection status
*
* @generated from message meshtastic.SerialConnectionStatus
*/
export type SerialConnectionStatus = Message<"meshtastic.SerialConnectionStatus"> & {
/**
*
* Serial baud rate
*
* @generated from field: uint32 baud = 1;
*/
baud: number;
/**
*
* Whether the device has an active connection or not
*
* @generated from field: bool is_connected = 2;
*/
isConnected: boolean;
};
/**
* Describes the message meshtastic.SerialConnectionStatus.
* Use `create(SerialConnectionStatusSchema)` to create a new message.
*/
export const SerialConnectionStatusSchema: GenMessage<SerialConnectionStatus> = /*@__PURE__*/
messageDesc(file_meshtastic_connection_status, 5);
@@ -0,0 +1,698 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/device_ui.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/device_ui.proto.
*/
export const file_meshtastic_device_ui: GenFile = /*@__PURE__*/
fileDesc("ChptZXNodGFzdGljL2RldmljZV91aS5wcm90bxIKbWVzaHRhc3RpYyLABQoORGV2aWNlVUlDb25maWcSDwoHdmVyc2lvbhgBIAEoDRIZChFzY3JlZW5fYnJpZ2h0bmVzcxgCIAEoDRIWCg5zY3JlZW5fdGltZW91dBgDIAEoDRITCgtzY3JlZW5fbG9jaxgEIAEoCBIVCg1zZXR0aW5nc19sb2NrGAUgASgIEhAKCHBpbl9jb2RlGAYgASgNEiAKBXRoZW1lGAcgASgOMhEubWVzaHRhc3RpYy5UaGVtZRIVCg1hbGVydF9lbmFibGVkGAggASgIEhYKDmJhbm5lcl9lbmFibGVkGAkgASgIEhQKDHJpbmdfdG9uZV9pZBgKIAEoDRImCghsYW5ndWFnZRgLIAEoDjIULm1lc2h0YXN0aWMuTGFuZ3VhZ2USKwoLbm9kZV9maWx0ZXIYDCABKAsyFi5tZXNodGFzdGljLk5vZGVGaWx0ZXISMQoObm9kZV9oaWdobGlnaHQYDSABKAsyGS5tZXNodGFzdGljLk5vZGVIaWdobGlnaHQSGAoQY2FsaWJyYXRpb25fZGF0YRgOIAEoDBIhCghtYXBfZGF0YRgPIAEoCzIPLm1lc2h0YXN0aWMuTWFwEi0KDGNvbXBhc3NfbW9kZRgQIAEoDjIXLm1lc2h0YXN0aWMuQ29tcGFzc01vZGUSGAoQc2NyZWVuX3JnYl9jb2xvchgRIAEoDRIbChNpc19jbG9ja2ZhY2VfYW5hbG9nGBIgASgIEkIKCmdwc19mb3JtYXQYEyABKA4yLi5tZXNodGFzdGljLkRldmljZVVJQ29uZmlnLkdwc0Nvb3JkaW5hdGVGb3JtYXQiVgoTR3BzQ29vcmRpbmF0ZUZvcm1hdBIHCgNERUMQABIHCgNETVMQARIHCgNVVE0QAhIICgRNR1JTEAMSBwoDT0xDEAQSCAoET1NHUhAFEgcKA01MUxAGIqcBCgpOb2RlRmlsdGVyEhYKDnVua25vd25fc3dpdGNoGAEgASgIEhYKDm9mZmxpbmVfc3dpdGNoGAIgASgIEhkKEXB1YmxpY19rZXlfc3dpdGNoGAMgASgIEhEKCWhvcHNfYXdheRgEIAEoBRIXCg9wb3NpdGlvbl9zd2l0Y2gYBSABKAgSEQoJbm9kZV9uYW1lGAYgASgJEg8KB2NoYW5uZWwYByABKAUifgoNTm9kZUhpZ2hsaWdodBITCgtjaGF0X3N3aXRjaBgBIAEoCBIXCg9wb3NpdGlvbl9zd2l0Y2gYAiABKAgSGAoQdGVsZW1ldHJ5X3N3aXRjaBgDIAEoCBISCgppYXFfc3dpdGNoGAQgASgIEhEKCW5vZGVfbmFtZRgFIAEoCSI9CghHZW9Qb2ludBIMCgR6b29tGAEgASgFEhAKCGxhdGl0dWRlGAIgASgFEhEKCWxvbmdpdHVkZRgDIAEoBSJMCgNNYXASIgoEaG9tZRgBIAEoCzIULm1lc2h0YXN0aWMuR2VvUG9pbnQSDQoFc3R5bGUYAiABKAkSEgoKZm9sbG93X2dwcxgDIAEoCCo+CgtDb21wYXNzTW9kZRILCgdEWU5BTUlDEAASDgoKRklYRURfUklORxABEhIKDkZSRUVaRV9IRUFESU5HEAIqJQoFVGhlbWUSCAoEREFSSxAAEgkKBUxJR0hUEAESBwoDUkVEEAIqwAIKCExhbmd1YWdlEgsKB0VOR0xJU0gQABIKCgZGUkVOQ0gQARIKCgZHRVJNQU4QAhILCgdJVEFMSUFOEAMSDgoKUE9SVFVHVUVTRRAEEgsKB1NQQU5JU0gQBRILCgdTV0VESVNIEAYSCwoHRklOTklTSBAHEgoKBlBPTElTSBAIEgsKB1RVUktJU0gQCRILCgdTRVJCSUFOEAoSCwoHUlVTU0lBThALEgkKBURVVENIEAwSCQoFR1JFRUsQDRINCglOT1JXRUdJQU4QDhINCglTTE9WRU5JQU4QDxINCglVS1JBSU5JQU4QEBINCglCVUxHQVJJQU4QERIJCgVDWkVDSBASEgoKBkRBTklTSBATEhYKElNJTVBMSUZJRURfQ0hJTkVTRRAeEhcKE1RSQURJVElPTkFMX0NISU5FU0UQH0JkChRvcmcubWVzaHRhc3RpYy5wcm90b0IORGV2aWNlVUlQcm90b3NaImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAGIGcHJvdG8z");
/**
* @generated from message meshtastic.DeviceUIConfig
*/
export type DeviceUIConfig = Message<"meshtastic.DeviceUIConfig"> & {
/**
*
* A version integer used to invalidate saved files when we make incompatible changes.
*
* @generated from field: uint32 version = 1;
*/
version: number;
/**
*
* TFT display brightness 1..255
*
* @generated from field: uint32 screen_brightness = 2;
*/
screenBrightness: number;
/**
*
* Screen timeout 0..900
*
* @generated from field: uint32 screen_timeout = 3;
*/
screenTimeout: number;
/**
*
* Screen/Settings lock enabled
*
* @generated from field: bool screen_lock = 4;
*/
screenLock: boolean;
/**
* @generated from field: bool settings_lock = 5;
*/
settingsLock: boolean;
/**
* @generated from field: uint32 pin_code = 6;
*/
pinCode: number;
/**
*
* Color theme
*
* @generated from field: meshtastic.Theme theme = 7;
*/
theme: Theme;
/**
*
* Audible message, banner and ring tone
*
* @generated from field: bool alert_enabled = 8;
*/
alertEnabled: boolean;
/**
* @generated from field: bool banner_enabled = 9;
*/
bannerEnabled: boolean;
/**
* @generated from field: uint32 ring_tone_id = 10;
*/
ringToneId: number;
/**
*
* Localization
*
* @generated from field: meshtastic.Language language = 11;
*/
language: Language;
/**
*
* Node list filter
*
* @generated from field: meshtastic.NodeFilter node_filter = 12;
*/
nodeFilter?: NodeFilter | undefined;
/**
*
* Node list highlightening
*
* @generated from field: meshtastic.NodeHighlight node_highlight = 13;
*/
nodeHighlight?: NodeHighlight | undefined;
/**
*
* 8 integers for screen calibration data
*
* @generated from field: bytes calibration_data = 14;
*/
calibrationData: Uint8Array;
/**
*
* Map related data
*
* @generated from field: meshtastic.Map map_data = 15;
*/
mapData?: Map | undefined;
/**
*
* Compass mode
*
* @generated from field: meshtastic.CompassMode compass_mode = 16;
*/
compassMode: CompassMode;
/**
*
* RGB color for BaseUI
* 0xRRGGBB format, e.g. 0xFF0000 for red
*
* @generated from field: uint32 screen_rgb_color = 17;
*/
screenRgbColor: number;
/**
*
* Clockface analog style
* true for analog clockface, false for digital clockface
*
* @generated from field: bool is_clockface_analog = 18;
*/
isClockfaceAnalog: boolean;
/**
*
* How the GPS coordinates are formatted on the OLED screen.
*
* @generated from field: meshtastic.DeviceUIConfig.GpsCoordinateFormat gps_format = 19;
*/
gpsFormat: DeviceUIConfig_GpsCoordinateFormat;
};
/**
* Describes the message meshtastic.DeviceUIConfig.
* Use `create(DeviceUIConfigSchema)` to create a new message.
*/
export const DeviceUIConfigSchema: GenMessage<DeviceUIConfig> = /*@__PURE__*/
messageDesc(file_meshtastic_device_ui, 0);
/**
*
* How the GPS coordinates are displayed on the OLED screen.
*
* @generated from enum meshtastic.DeviceUIConfig.GpsCoordinateFormat
*/
export enum DeviceUIConfig_GpsCoordinateFormat {
/**
*
* GPS coordinates are displayed in the normal decimal degrees format:
* DD.DDDDDD DDD.DDDDDD
*
* @generated from enum value: DEC = 0;
*/
DEC = 0,
/**
*
* GPS coordinates are displayed in the degrees minutes seconds format:
* DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant
*
* @generated from enum value: DMS = 1;
*/
DMS = 1,
/**
*
* Universal Transverse Mercator format:
* ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing
*
* @generated from enum value: UTM = 2;
*/
UTM = 2,
/**
*
* Military Grid Reference System format:
* ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square,
* E is easting, N is northing
*
* @generated from enum value: MGRS = 3;
*/
MGRS = 3,
/**
*
* Open Location Code (aka Plus Codes).
*
* @generated from enum value: OLC = 4;
*/
OLC = 4,
/**
*
* Ordnance Survey Grid Reference (the National Grid System of the UK).
* Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square,
* E is the easting, N is the northing
*
* @generated from enum value: OSGR = 5;
*/
OSGR = 5,
/**
*
* Maidenhead Locator System
* Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
*
* @generated from enum value: MLS = 6;
*/
MLS = 6,
}
/**
* Describes the enum meshtastic.DeviceUIConfig.GpsCoordinateFormat.
*/
export const DeviceUIConfig_GpsCoordinateFormatSchema: GenEnum<DeviceUIConfig_GpsCoordinateFormat> = /*@__PURE__*/
enumDesc(file_meshtastic_device_ui, 0, 0);
/**
* @generated from message meshtastic.NodeFilter
*/
export type NodeFilter = Message<"meshtastic.NodeFilter"> & {
/**
*
* Filter unknown nodes
*
* @generated from field: bool unknown_switch = 1;
*/
unknownSwitch: boolean;
/**
*
* Filter offline nodes
*
* @generated from field: bool offline_switch = 2;
*/
offlineSwitch: boolean;
/**
*
* Filter nodes w/o public key
*
* @generated from field: bool public_key_switch = 3;
*/
publicKeySwitch: boolean;
/**
*
* Filter based on hops away
*
* @generated from field: int32 hops_away = 4;
*/
hopsAway: number;
/**
*
* Filter nodes w/o position
*
* @generated from field: bool position_switch = 5;
*/
positionSwitch: boolean;
/**
*
* Filter nodes by matching name string
*
* @generated from field: string node_name = 6;
*/
nodeName: string;
/**
*
* Filter based on channel
*
* @generated from field: int32 channel = 7;
*/
channel: number;
};
/**
* Describes the message meshtastic.NodeFilter.
* Use `create(NodeFilterSchema)` to create a new message.
*/
export const NodeFilterSchema: GenMessage<NodeFilter> = /*@__PURE__*/
messageDesc(file_meshtastic_device_ui, 1);
/**
* @generated from message meshtastic.NodeHighlight
*/
export type NodeHighlight = Message<"meshtastic.NodeHighlight"> & {
/**
*
* Hightlight nodes w/ active chat
*
* @generated from field: bool chat_switch = 1;
*/
chatSwitch: boolean;
/**
*
* Highlight nodes w/ position
*
* @generated from field: bool position_switch = 2;
*/
positionSwitch: boolean;
/**
*
* Highlight nodes w/ telemetry data
*
* @generated from field: bool telemetry_switch = 3;
*/
telemetrySwitch: boolean;
/**
*
* Highlight nodes w/ iaq data
*
* @generated from field: bool iaq_switch = 4;
*/
iaqSwitch: boolean;
/**
*
* Highlight nodes by matching name string
*
* @generated from field: string node_name = 5;
*/
nodeName: string;
};
/**
* Describes the message meshtastic.NodeHighlight.
* Use `create(NodeHighlightSchema)` to create a new message.
*/
export const NodeHighlightSchema: GenMessage<NodeHighlight> = /*@__PURE__*/
messageDesc(file_meshtastic_device_ui, 2);
/**
* @generated from message meshtastic.GeoPoint
*/
export type GeoPoint = Message<"meshtastic.GeoPoint"> & {
/**
*
* Zoom level
*
* @generated from field: int32 zoom = 1;
*/
zoom: number;
/**
*
* Coordinate: latitude
*
* @generated from field: int32 latitude = 2;
*/
latitude: number;
/**
*
* Coordinate: longitude
*
* @generated from field: int32 longitude = 3;
*/
longitude: number;
};
/**
* Describes the message meshtastic.GeoPoint.
* Use `create(GeoPointSchema)` to create a new message.
*/
export const GeoPointSchema: GenMessage<GeoPoint> = /*@__PURE__*/
messageDesc(file_meshtastic_device_ui, 3);
/**
* @generated from message meshtastic.Map
*/
export type Map = Message<"meshtastic.Map"> & {
/**
*
* Home coordinates
*
* @generated from field: meshtastic.GeoPoint home = 1;
*/
home?: GeoPoint | undefined;
/**
*
* Map tile style
*
* @generated from field: string style = 2;
*/
style: string;
/**
*
* Map scroll follows GPS
*
* @generated from field: bool follow_gps = 3;
*/
followGps: boolean;
};
/**
* Describes the message meshtastic.Map.
* Use `create(MapSchema)` to create a new message.
*/
export const MapSchema: GenMessage<Map> = /*@__PURE__*/
messageDesc(file_meshtastic_device_ui, 4);
/**
* @generated from enum meshtastic.CompassMode
*/
export enum CompassMode {
/**
*
* Compass with dynamic ring and heading
*
* @generated from enum value: DYNAMIC = 0;
*/
DYNAMIC = 0,
/**
*
* Compass with fixed ring and heading
*
* @generated from enum value: FIXED_RING = 1;
*/
FIXED_RING = 1,
/**
*
* Compass with heading and freeze option
*
* @generated from enum value: FREEZE_HEADING = 2;
*/
FREEZE_HEADING = 2,
}
/**
* Describes the enum meshtastic.CompassMode.
*/
export const CompassModeSchema: GenEnum<CompassMode> = /*@__PURE__*/
enumDesc(file_meshtastic_device_ui, 0);
/**
* @generated from enum meshtastic.Theme
*/
export enum Theme {
/**
*
* Dark
*
* @generated from enum value: DARK = 0;
*/
DARK = 0,
/**
*
* Light
*
* @generated from enum value: LIGHT = 1;
*/
LIGHT = 1,
/**
*
* Red
*
* @generated from enum value: RED = 2;
*/
RED = 2,
}
/**
* Describes the enum meshtastic.Theme.
*/
export const ThemeSchema: GenEnum<Theme> = /*@__PURE__*/
enumDesc(file_meshtastic_device_ui, 1);
/**
*
* Localization
*
* @generated from enum meshtastic.Language
*/
export enum Language {
/**
*
* English
*
* @generated from enum value: ENGLISH = 0;
*/
ENGLISH = 0,
/**
*
* French
*
* @generated from enum value: FRENCH = 1;
*/
FRENCH = 1,
/**
*
* German
*
* @generated from enum value: GERMAN = 2;
*/
GERMAN = 2,
/**
*
* Italian
*
* @generated from enum value: ITALIAN = 3;
*/
ITALIAN = 3,
/**
*
* Portuguese
*
* @generated from enum value: PORTUGUESE = 4;
*/
PORTUGUESE = 4,
/**
*
* Spanish
*
* @generated from enum value: SPANISH = 5;
*/
SPANISH = 5,
/**
*
* Swedish
*
* @generated from enum value: SWEDISH = 6;
*/
SWEDISH = 6,
/**
*
* Finnish
*
* @generated from enum value: FINNISH = 7;
*/
FINNISH = 7,
/**
*
* Polish
*
* @generated from enum value: POLISH = 8;
*/
POLISH = 8,
/**
*
* Turkish
*
* @generated from enum value: TURKISH = 9;
*/
TURKISH = 9,
/**
*
* Serbian
*
* @generated from enum value: SERBIAN = 10;
*/
SERBIAN = 10,
/**
*
* Russian
*
* @generated from enum value: RUSSIAN = 11;
*/
RUSSIAN = 11,
/**
*
* Dutch
*
* @generated from enum value: DUTCH = 12;
*/
DUTCH = 12,
/**
*
* Greek
*
* @generated from enum value: GREEK = 13;
*/
GREEK = 13,
/**
*
* Norwegian
*
* @generated from enum value: NORWEGIAN = 14;
*/
NORWEGIAN = 14,
/**
*
* Slovenian
*
* @generated from enum value: SLOVENIAN = 15;
*/
SLOVENIAN = 15,
/**
*
* Ukrainian
*
* @generated from enum value: UKRAINIAN = 16;
*/
UKRAINIAN = 16,
/**
*
* Bulgarian
*
* @generated from enum value: BULGARIAN = 17;
*/
BULGARIAN = 17,
/**
*
* Czech
*
* @generated from enum value: CZECH = 18;
*/
CZECH = 18,
/**
*
* Danish
*
* @generated from enum value: DANISH = 19;
*/
DANISH = 19,
/**
*
* Simplified Chinese (experimental)
*
* @generated from enum value: SIMPLIFIED_CHINESE = 30;
*/
SIMPLIFIED_CHINESE = 30,
/**
*
* Traditional Chinese (experimental)
*
* @generated from enum value: TRADITIONAL_CHINESE = 31;
*/
TRADITIONAL_CHINESE = 31,
}
/**
* Describes the enum meshtastic.Language.
*/
export const LanguageSchema: GenEnum<Language> = /*@__PURE__*/
enumDesc(file_meshtastic_device_ui, 2);
@@ -0,0 +1,132 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/deviceonly_legacy.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { PositionLite, UserLite } from "./deviceonly_pb";
import { file_meshtastic_deviceonly } from "./deviceonly_pb";
import type { DeviceMetrics } from "./telemetry_pb";
import { file_meshtastic_telemetry } from "./telemetry_pb";
import { file_nanopb } from "../nanopb_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/deviceonly_legacy.proto.
*/
export const file_meshtastic_deviceonly_legacy: GenFile = /*@__PURE__*/
fileDesc("CiJtZXNodGFzdGljL2RldmljZW9ubHlfbGVnYWN5LnByb3RvEgptZXNodGFzdGljItwCChNOb2RlSW5mb0xpdGVfTGVnYWN5EgsKA251bRgBIAEoDRIiCgR1c2VyGAIgASgLMhQubWVzaHRhc3RpYy5Vc2VyTGl0ZRIqCghwb3NpdGlvbhgDIAEoCzIYLm1lc2h0YXN0aWMuUG9zaXRpb25MaXRlEgsKA3NuchgEIAEoAhISCgpsYXN0X2hlYXJkGAUgASgHEjEKDmRldmljZV9tZXRyaWNzGAYgASgLMhkubWVzaHRhc3RpYy5EZXZpY2VNZXRyaWNzEg8KB2NoYW5uZWwYByABKA0SEAoIdmlhX21xdHQYCCABKAgSFgoJaG9wc19hd2F5GAkgASgNSACIAQESEwoLaXNfZmF2b3JpdGUYCiABKAgSEgoKaXNfaWdub3JlZBgLIAEoCBIQCghuZXh0X2hvcBgMIAEoDRIQCghiaXRmaWVsZBgNIAEoDUIMCgpfaG9wc19hd2F5IokBChNOb2RlRGF0YWJhc2VfTGVnYWN5Eg8KB3ZlcnNpb24YASABKA0SYQoFbm9kZXMYAiADKAsyHy5tZXNodGFzdGljLk5vZGVJbmZvTGl0ZV9MZWdhY3lCMZI/LpIBK3N0ZDo6dmVjdG9yPG1lc2h0YXN0aWNfTm9kZUluZm9MaXRlX0xlZ2FjeT5CdAoUb3JnLm1lc2h0YXN0aWMucHJvdG9CEERldmljZU9ubHlMZWdhY3laImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAJI/C8IBCDx2ZWN0b3I+YgZwcm90bzM", [file_meshtastic_deviceonly, file_meshtastic_telemetry, file_nanopb]);
/**
*
* Legacy NodeInfoLite descriptor used only to decode pre-split
* /prefs/nodes.proto saves during the v24 -> v25 migration boot.
* This preserves the original NodeInfoLite-compatible field numbers needed
* to parse old wire bytes cleanly, including user (2), position (3),
* device_metrics (6), and the legacy-only compatibility fields via_mqtt (8),
* is_favorite (10), and is_ignored (11). Steady-state code does not use
* this struct; it is dropped after migration completes. This file should be
* removed once DEVICESTATE_MIN_VER advances past 24.
*
* @generated from message meshtastic.NodeInfoLite_Legacy
*/
export type NodeInfoLite_Legacy = Message<"meshtastic.NodeInfoLite_Legacy"> & {
/**
* @generated from field: uint32 num = 1;
*/
num: number;
/**
* @generated from field: meshtastic.UserLite user = 2;
*/
user?: UserLite | undefined;
/**
* @generated from field: meshtastic.PositionLite position = 3;
*/
position?: PositionLite | undefined;
/**
* @generated from field: float snr = 4;
*/
snr: number;
/**
* @generated from field: fixed32 last_heard = 5;
*/
lastHeard: number;
/**
* @generated from field: meshtastic.DeviceMetrics device_metrics = 6;
*/
deviceMetrics?: DeviceMetrics | undefined;
/**
* @generated from field: uint32 channel = 7;
*/
channel: number;
/**
* @generated from field: bool via_mqtt = 8;
*/
viaMqtt: boolean;
/**
* @generated from field: optional uint32 hops_away = 9;
*/
hopsAway?: number | undefined;
/**
* @generated from field: bool is_favorite = 10;
*/
isFavorite: boolean;
/**
* @generated from field: bool is_ignored = 11;
*/
isIgnored: boolean;
/**
* @generated from field: uint32 next_hop = 12;
*/
nextHop: number;
/**
* @generated from field: uint32 bitfield = 13;
*/
bitfield: number;
};
/**
* Describes the message meshtastic.NodeInfoLite_Legacy.
* Use `create(NodeInfoLite_LegacySchema)` to create a new message.
*/
export const NodeInfoLite_LegacySchema: GenMessage<NodeInfoLite_Legacy> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly_legacy, 0);
/**
*
* Legacy NodeDatabase shape: one repeated array of fat NodeInfoLite_Legacy
* with no satellite position/telemetry arrays.
*
* @generated from message meshtastic.NodeDatabase_Legacy
*/
export type NodeDatabase_Legacy = Message<"meshtastic.NodeDatabase_Legacy"> & {
/**
* @generated from field: uint32 version = 1;
*/
version: number;
/**
* @generated from field: repeated meshtastic.NodeInfoLite_Legacy nodes = 2;
*/
nodes: NodeInfoLite_Legacy[];
};
/**
* Describes the message meshtastic.NodeDatabase_Legacy.
* Use `create(NodeDatabase_LegacySchema)` to create a new message.
*/
export const NodeDatabase_LegacySchema: GenMessage<NodeDatabase_Legacy> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly_legacy, 1);
@@ -0,0 +1,636 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/deviceonly.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Channel } from "./channel_pb";
import { file_meshtastic_channel } from "./channel_pb";
import type { Config_DeviceConfig_Role } from "./config_pb";
import { file_meshtastic_config } from "./config_pb";
import type { LocalConfig, LocalModuleConfig } from "./localonly_pb";
import { file_meshtastic_localonly } from "./localonly_pb";
import type { HardwareModel, MeshPacket, MyNodeInfo, NodeRemoteHardwarePin, Position_LocSource, StatusMessage, User } from "./mesh_pb";
import { file_meshtastic_mesh } from "./mesh_pb";
import type { DeviceMetrics, EnvironmentMetrics } from "./telemetry_pb";
import { file_meshtastic_telemetry } from "./telemetry_pb";
import { file_nanopb } from "../nanopb_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/deviceonly.proto.
*/
export const file_meshtastic_deviceonly: GenFile = /*@__PURE__*/
fileDesc("ChttZXNodGFzdGljL2RldmljZW9ubHkucHJvdG8SCm1lc2h0YXN0aWMiqAEKDFBvc2l0aW9uTGl0ZRISCgpsYXRpdHVkZV9pGAEgASgPEhMKC2xvbmdpdHVkZV9pGAIgASgPEhAKCGFsdGl0dWRlGAMgASgFEgwKBHRpbWUYBCABKAcSNwoPbG9jYXRpb25fc291cmNlGAUgASgOMh4ubWVzaHRhc3RpYy5Qb3NpdGlvbi5Mb2NTb3VyY2USFgoOcHJlY2lzaW9uX2JpdHMYBiABKA0iggIKCFVzZXJMaXRlEhMKB21hY2FkZHIYASABKAxCAhgBEhEKCWxvbmdfbmFtZRgCIAEoCRISCgpzaG9ydF9uYW1lGAMgASgJEisKCGh3X21vZGVsGAQgASgOMhkubWVzaHRhc3RpYy5IYXJkd2FyZU1vZGVsEhMKC2lzX2xpY2Vuc2VkGAUgASgIEjIKBHJvbGUYBiABKA4yJC5tZXNodGFzdGljLkNvbmZpZy5EZXZpY2VDb25maWcuUm9sZRISCgpwdWJsaWNfa2V5GAcgASgMEhwKD2lzX3VubWVzc2FnYWJsZRgJIAEoCEgAiAEBQhIKEF9pc191bm1lc3NhZ2FibGUiqgMKDE5vZGVJbmZvTGl0ZRILCgNudW0YASABKA0SCwoDc25yGAQgASgCEhIKCmxhc3RfaGVhcmQYBSABKAcSDwoHY2hhbm5lbBgHIAEoDRIWCglob3BzX2F3YXkYCSABKA1IAIgBARIQCghuZXh0X2hvcBgMIAEoDRIQCghiaXRmaWVsZBgNIAEoDRIRCglsb25nX25hbWUYDiABKAkSEgoKc2hvcnRfbmFtZRgPIAEoCRIrCghod19tb2RlbBgQIAEoDjIZLm1lc2h0YXN0aWMuSGFyZHdhcmVNb2RlbBIyCgRyb2xlGBEgASgOMiQubWVzaHRhc3RpYy5Db25maWcuRGV2aWNlQ29uZmlnLlJvbGUSEgoKcHVibGljX2tleRgSIAEoDBIOCgZzbnJfcTQYEyABKBFCDAoKX2hvcHNfYXdheUoECAIQA0oECAMQBEoECAYQB0oECAgQCUoECAoQC0oECAsQDFIEdXNlclIIcG9zaXRpb25SDmRldmljZV9tZXRyaWNzUgh2aWFfbXF0dFILaXNfZmF2b3JpdGVSCmlzX2lnbm9yZWQi6wIKC0RldmljZVN0YXRlEicKB215X25vZGUYAiABKAsyFi5tZXNodGFzdGljLk15Tm9kZUluZm8SHwoFb3duZXIYAyABKAsyEC5tZXNodGFzdGljLlVzZXISLQoNcmVjZWl2ZV9xdWV1ZRgFIAMoCzIWLm1lc2h0YXN0aWMuTWVzaFBhY2tldBIPCgd2ZXJzaW9uGAggASgNEi8KD3J4X3RleHRfbWVzc2FnZRgHIAEoCzIWLm1lc2h0YXN0aWMuTWVzaFBhY2tldBITCgdub19zYXZlGAkgASgIQgIYARIZCg1kaWRfZ3BzX3Jlc2V0GAsgASgIQgIYARIrCgtyeF93YXlwb2ludBgMIAEoCzIWLm1lc2h0YXN0aWMuTWVzaFBhY2tldBJEChlub2RlX3JlbW90ZV9oYXJkd2FyZV9waW5zGA0gAygLMiEubWVzaHRhc3RpYy5Ob2RlUmVtb3RlSGFyZHdhcmVQaW4iTAoRTm9kZVBvc2l0aW9uRW50cnkSCwoDbnVtGAEgASgNEioKCHBvc2l0aW9uGAIgASgLMhgubWVzaHRhc3RpYy5Qb3NpdGlvbkxpdGUiVAoSTm9kZVRlbGVtZXRyeUVudHJ5EgsKA251bRgBIAEoDRIxCg5kZXZpY2VfbWV0cmljcxgCIAEoCzIZLm1lc2h0YXN0aWMuRGV2aWNlTWV0cmljcyJgChROb2RlRW52aXJvbm1lbnRFbnRyeRILCgNudW0YASABKA0SOwoTZW52aXJvbm1lbnRfbWV0cmljcxgCIAEoCzIeLm1lc2h0YXN0aWMuRW52aXJvbm1lbnRNZXRyaWNzIkkKD05vZGVTdGF0dXNFbnRyeRILCgNudW0YASABKA0SKQoGc3RhdHVzGAIgASgLMhkubWVzaHRhc3RpYy5TdGF0dXNNZXNzYWdlIoMECgxOb2RlRGF0YWJhc2USDwoHdmVyc2lvbhgBIAEoDRJTCgVub2RlcxgCIAMoCzIYLm1lc2h0YXN0aWMuTm9kZUluZm9MaXRlQiqSPyeSASRzdGQ6OnZlY3RvcjxtZXNodGFzdGljX05vZGVJbmZvTGl0ZT4SYQoJcG9zaXRpb25zGAMgAygLMh0ubWVzaHRhc3RpYy5Ob2RlUG9zaXRpb25FbnRyeUIvkj8skgEpc3RkOjp2ZWN0b3I8bWVzaHRhc3RpY19Ob2RlUG9zaXRpb25FbnRyeT4SYwoJdGVsZW1ldHJ5GAQgAygLMh4ubWVzaHRhc3RpYy5Ob2RlVGVsZW1ldHJ5RW50cnlCMJI/LZIBKnN0ZDo6dmVjdG9yPG1lc2h0YXN0aWNfTm9kZVRlbGVtZXRyeUVudHJ5PhJaCgZzdGF0dXMYBSADKAsyGy5tZXNodGFzdGljLk5vZGVTdGF0dXNFbnRyeUItkj8qkgEnc3RkOjp2ZWN0b3I8bWVzaHRhc3RpY19Ob2RlU3RhdHVzRW50cnk+EmkKC2Vudmlyb25tZW50GAYgAygLMiAubWVzaHRhc3RpYy5Ob2RlRW52aXJvbm1lbnRFbnRyeUIykj8vkgEsc3RkOjp2ZWN0b3I8bWVzaHRhc3RpY19Ob2RlRW52aXJvbm1lbnRFbnRyeT4iRQoLQ2hhbm5lbEZpbGUSJQoIY2hhbm5lbHMYASADKAsyEy5tZXNodGFzdGljLkNoYW5uZWwSDwoHdmVyc2lvbhgCIAEoDSLiAQoRQmFja3VwUHJlZmVyZW5jZXMSDwoHdmVyc2lvbhgBIAEoDRIRCgl0aW1lc3RhbXAYAiABKAcSJwoGY29uZmlnGAMgASgLMhcubWVzaHRhc3RpYy5Mb2NhbENvbmZpZxI0Cg1tb2R1bGVfY29uZmlnGAQgASgLMh0ubWVzaHRhc3RpYy5Mb2NhbE1vZHVsZUNvbmZpZxIpCghjaGFubmVscxgFIAEoCzIXLm1lc2h0YXN0aWMuQ2hhbm5lbEZpbGUSHwoFb3duZXIYBiABKAsyEC5tZXNodGFzdGljLlVzZXJCbgoUb3JnLm1lc2h0YXN0aWMucHJvdG9CCkRldmljZU9ubHlaImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAJI/C8IBCDx2ZWN0b3I+YgZwcm90bzM", [file_meshtastic_channel, file_meshtastic_config, file_meshtastic_localonly, file_meshtastic_mesh, file_meshtastic_telemetry, file_nanopb]);
/**
*
* Position with static location information only for NodeDBLite
*
* @generated from message meshtastic.PositionLite
*/
export type PositionLite = Message<"meshtastic.PositionLite"> & {
/**
*
* The new preferred location encoding, multiply by 1e-7 to get degrees
* in floating point
*
* @generated from field: sfixed32 latitude_i = 1;
*/
latitudeI: number;
/**
*
* TODO: REPLACE
*
* @generated from field: sfixed32 longitude_i = 2;
*/
longitudeI: number;
/**
*
* In meters above MSL (but see issue #359)
*
* @generated from field: int32 altitude = 3;
*/
altitude: number;
/**
*
* This is usually not sent over the mesh (to save space), but it is sent
* from the phone so that the local device can set its RTC If it is sent over
* the mesh (because there are devices on the mesh without GPS), it will only
* be sent by devices which has a hardware GPS clock.
* seconds since 1970
*
* @generated from field: fixed32 time = 4;
*/
time: number;
/**
*
* TODO: REPLACE
*
* @generated from field: meshtastic.Position.LocSource location_source = 5;
*/
locationSource: Position_LocSource;
/**
*
* Indicates the bits of precision set by the sending node
*
* @generated from field: uint32 precision_bits = 6;
*/
precisionBits: number;
};
/**
* Describes the message meshtastic.PositionLite.
* Use `create(PositionLiteSchema)` to create a new message.
*/
export const PositionLiteSchema: GenMessage<PositionLite> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 0);
/**
* @generated from message meshtastic.UserLite
*/
export type UserLite = Message<"meshtastic.UserLite"> & {
/**
*
* This is the addr of the radio.
*
* @generated from field: bytes macaddr = 1 [deprecated = true];
* @deprecated
*/
macaddr: Uint8Array;
/**
*
* A full name for this user, i.e. "Kevin Hester"
*
* @generated from field: string long_name = 2;
*/
longName: string;
/**
*
* A VERY short name, ideally two characters.
* Suitable for a tiny OLED screen
*
* @generated from field: string short_name = 3;
*/
shortName: string;
/**
*
* TBEAM, HELTEC, etc...
* Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
* Apps will still need the string here for older builds
* (so OTA update can find the right image), but if the enum is available it will be used instead.
*
* @generated from field: meshtastic.HardwareModel hw_model = 4;
*/
hwModel: HardwareModel;
/**
*
* In some regions Ham radio operators have different bandwidth limitations than others.
* If this user is a licensed operator, set this flag.
* Also, "long_name" should be their licence number.
*
* @generated from field: bool is_licensed = 5;
*/
isLicensed: boolean;
/**
*
* Indicates that the user's role in the mesh
*
* @generated from field: meshtastic.Config.DeviceConfig.Role role = 6;
*/
role: Config_DeviceConfig_Role;
/**
*
* The public key of the user's device.
* This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
*
* @generated from field: bytes public_key = 7;
*/
publicKey: Uint8Array;
/**
*
* Whether or not the node can be messaged
*
* @generated from field: optional bool is_unmessagable = 9;
*/
isUnmessagable?: boolean | undefined;
};
/**
* Describes the message meshtastic.UserLite.
* Use `create(UserLiteSchema)` to create a new message.
*/
export const UserLiteSchema: GenMessage<UserLite> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 1);
/**
* @generated from message meshtastic.NodeInfoLite
*/
export type NodeInfoLite = Message<"meshtastic.NodeInfoLite"> & {
/**
*
* The node number
*
* @generated from field: uint32 num = 1;
*/
num: number;
/**
*
* In-memory SNR of the last received message in dB. Not serialised directly:
* always zeroed before encode; persisted as snr_q4 = 19 below.
*
* @generated from field: float snr = 4;
*/
snr: number;
/**
*
* Set to indicate the last time we received a packet from this node
*
* @generated from field: fixed32 last_heard = 5;
*/
lastHeard: number;
/**
*
* local channel index we heard that node on. Only populated if its not the default channel.
*
* @generated from field: uint32 channel = 7;
*/
channel: number;
/**
*
* Number of hops away from us this node is (0 if direct neighbor)
*
* @generated from field: optional uint32 hops_away = 9;
*/
hopsAway?: number | undefined;
/**
*
* Last byte of the node number of the node that should be used as the next hop to reach this node.
*
* @generated from field: uint32 next_hop = 12;
*/
nextHop: number;
/**
*
* Bitfield for storing booleans. See NODEINFO_BITFIELD_* in src/mesh/NodeDB.h.
*
* @generated from field: uint32 bitfield = 13;
*/
bitfield: number;
/**
*
* A full name for this user, i.e. "Kevin Hester".
*
* @generated from field: string long_name = 14;
*/
longName: string;
/**
*
* A VERY short name, ideally two characters or an emoji.
* Suitable for a tiny OLED screen.
*
* @generated from field: string short_name = 15;
*/
shortName: string;
/**
*
* Hardware model the user's device is running.
*
* @generated from field: meshtastic.HardwareModel hw_model = 16;
*/
hwModel: HardwareModel;
/**
*
* The user's role in the mesh.
*
* @generated from field: meshtastic.Config.DeviceConfig.Role role = 17;
*/
role: Config_DeviceConfig_Role;
/**
*
* The public key of the user's device, for PKI-based encrypted DMs.
*
* @generated from field: bytes public_key = 18;
*/
publicKey: Uint8Array;
/**
*
* Q4-encoded SNR: dB × 4, sint32 zigzag. Matches RouteDiscovery convention.
* Encode: snr_q4 = (int32_t)(snr * 4.0f). Decode: snr = snr_q4 / 4.0f.
* float snr is always zeroed on disk; this field carries all persisted SNR.
*
* @generated from field: sint32 snr_q4 = 19;
*/
snrQ4: number;
};
/**
* Describes the message meshtastic.NodeInfoLite.
* Use `create(NodeInfoLiteSchema)` to create a new message.
*/
export const NodeInfoLiteSchema: GenMessage<NodeInfoLite> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 2);
/**
*
* This message is never sent over the wire, but it is used for serializing DB
* state to flash in the device code
* FIXME, since we write this each time we enter deep sleep (and have infinite
* flash) it would be better to use some sort of append only data structure for
* the receive queue and use the preferences store for the other stuff
*
* @generated from message meshtastic.DeviceState
*/
export type DeviceState = Message<"meshtastic.DeviceState"> & {
/**
*
* Read only settings/info about this node
*
* @generated from field: meshtastic.MyNodeInfo my_node = 2;
*/
myNode?: MyNodeInfo | undefined;
/**
*
* My owner info
*
* @generated from field: meshtastic.User owner = 3;
*/
owner?: User | undefined;
/**
*
* Received packets saved for delivery to the phone
*
* @generated from field: repeated meshtastic.MeshPacket receive_queue = 5;
*/
receiveQueue: MeshPacket[];
/**
*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code.
*
* @generated from field: uint32 version = 8;
*/
version: number;
/**
*
* We keep the last received text message (only) stored in the device flash,
* so we can show it on the screen.
* Might be null
*
* @generated from field: meshtastic.MeshPacket rx_text_message = 7;
*/
rxTextMessage?: MeshPacket | undefined;
/**
*
* Used only during development.
* Indicates developer is testing and changes should never be saved to flash.
* Deprecated in 2.3.1
*
* @generated from field: bool no_save = 9 [deprecated = true];
* @deprecated
*/
noSave: boolean;
/**
*
* Previously used to manage GPS factory resets.
* Deprecated in 2.5.23
*
* @generated from field: bool did_gps_reset = 11 [deprecated = true];
* @deprecated
*/
didGpsReset: boolean;
/**
*
* We keep the last received waypoint stored in the device flash,
* so we can show it on the screen.
* Might be null
*
* @generated from field: meshtastic.MeshPacket rx_waypoint = 12;
*/
rxWaypoint?: MeshPacket | undefined;
/**
*
* The mesh's nodes with their available gpio pins for RemoteHardware module
*
* @generated from field: repeated meshtastic.NodeRemoteHardwarePin node_remote_hardware_pins = 13;
*/
nodeRemoteHardwarePins: NodeRemoteHardwarePin[];
};
/**
* Describes the message meshtastic.DeviceState.
* Use `create(DeviceStateSchema)` to create a new message.
*/
export const DeviceStateSchema: GenMessage<DeviceState> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 3);
/**
* @generated from message meshtastic.NodePositionEntry
*/
export type NodePositionEntry = Message<"meshtastic.NodePositionEntry"> & {
/**
* @generated from field: uint32 num = 1;
*/
num: number;
/**
* @generated from field: meshtastic.PositionLite position = 2;
*/
position?: PositionLite | undefined;
};
/**
* Describes the message meshtastic.NodePositionEntry.
* Use `create(NodePositionEntrySchema)` to create a new message.
*/
export const NodePositionEntrySchema: GenMessage<NodePositionEntry> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 4);
/**
* @generated from message meshtastic.NodeTelemetryEntry
*/
export type NodeTelemetryEntry = Message<"meshtastic.NodeTelemetryEntry"> & {
/**
* @generated from field: uint32 num = 1;
*/
num: number;
/**
* @generated from field: meshtastic.DeviceMetrics device_metrics = 2;
*/
deviceMetrics?: DeviceMetrics | undefined;
};
/**
* Describes the message meshtastic.NodeTelemetryEntry.
* Use `create(NodeTelemetryEntrySchema)` to create a new message.
*/
export const NodeTelemetryEntrySchema: GenMessage<NodeTelemetryEntry> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 5);
/**
* @generated from message meshtastic.NodeEnvironmentEntry
*/
export type NodeEnvironmentEntry = Message<"meshtastic.NodeEnvironmentEntry"> & {
/**
* @generated from field: uint32 num = 1;
*/
num: number;
/**
* @generated from field: meshtastic.EnvironmentMetrics environment_metrics = 2;
*/
environmentMetrics?: EnvironmentMetrics | undefined;
};
/**
* Describes the message meshtastic.NodeEnvironmentEntry.
* Use `create(NodeEnvironmentEntrySchema)` to create a new message.
*/
export const NodeEnvironmentEntrySchema: GenMessage<NodeEnvironmentEntry> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 6);
/**
* @generated from message meshtastic.NodeStatusEntry
*/
export type NodeStatusEntry = Message<"meshtastic.NodeStatusEntry"> & {
/**
* @generated from field: uint32 num = 1;
*/
num: number;
/**
* @generated from field: meshtastic.StatusMessage status = 2;
*/
status?: StatusMessage | undefined;
};
/**
* Describes the message meshtastic.NodeStatusEntry.
* Use `create(NodeStatusEntrySchema)` to create a new message.
*/
export const NodeStatusEntrySchema: GenMessage<NodeStatusEntry> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 7);
/**
* @generated from message meshtastic.NodeDatabase
*/
export type NodeDatabase = Message<"meshtastic.NodeDatabase"> & {
/**
*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code.
*
* @generated from field: uint32 version = 1;
*/
version: number;
/**
*
* New lite version of NodeDB to decrease memory footprint
*
* @generated from field: repeated meshtastic.NodeInfoLite nodes = 2;
*/
nodes: NodeInfoLite[];
/**
* Per-NodeNum satellite arrays. Constrained platforms (e.g. STM32WL) omit
* these via MESHTASTIC_EXCLUDE_*DB build flags.
*
* @generated from field: repeated meshtastic.NodePositionEntry positions = 3;
*/
positions: NodePositionEntry[];
/**
* @generated from field: repeated meshtastic.NodeTelemetryEntry telemetry = 4;
*/
telemetry: NodeTelemetryEntry[];
/**
* @generated from field: repeated meshtastic.NodeStatusEntry status = 5;
*/
status: NodeStatusEntry[];
/**
* @generated from field: repeated meshtastic.NodeEnvironmentEntry environment = 6;
*/
environment: NodeEnvironmentEntry[];
};
/**
* Describes the message meshtastic.NodeDatabase.
* Use `create(NodeDatabaseSchema)` to create a new message.
*/
export const NodeDatabaseSchema: GenMessage<NodeDatabase> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 8);
/**
*
* The on-disk saved channels
*
* @generated from message meshtastic.ChannelFile
*/
export type ChannelFile = Message<"meshtastic.ChannelFile"> & {
/**
*
* The channels our node knows about
*
* @generated from field: repeated meshtastic.Channel channels = 1;
*/
channels: Channel[];
/**
*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code.
*
* @generated from field: uint32 version = 2;
*/
version: number;
};
/**
* Describes the message meshtastic.ChannelFile.
* Use `create(ChannelFileSchema)` to create a new message.
*/
export const ChannelFileSchema: GenMessage<ChannelFile> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 9);
/**
*
* The on-disk backup of the node's preferences
*
* @generated from message meshtastic.BackupPreferences
*/
export type BackupPreferences = Message<"meshtastic.BackupPreferences"> & {
/**
*
* The version of the backup
*
* @generated from field: uint32 version = 1;
*/
version: number;
/**
*
* The timestamp of the backup (if node has time)
*
* @generated from field: fixed32 timestamp = 2;
*/
timestamp: number;
/**
*
* The node's configuration
*
* @generated from field: meshtastic.LocalConfig config = 3;
*/
config?: LocalConfig | undefined;
/**
*
* The node's module configuration
*
* @generated from field: meshtastic.LocalModuleConfig module_config = 4;
*/
moduleConfig?: LocalModuleConfig | undefined;
/**
*
* The node's channels
*
* @generated from field: meshtastic.ChannelFile channels = 5;
*/
channels?: ChannelFile | undefined;
/**
*
* The node's user (owner) information
*
* @generated from field: meshtastic.User owner = 6;
*/
owner?: User | undefined;
};
/**
* Describes the message meshtastic.BackupPreferences.
* Use `create(BackupPreferencesSchema)` to create a new message.
*/
export const BackupPreferencesSchema: GenMessage<BackupPreferences> = /*@__PURE__*/
messageDesc(file_meshtastic_deviceonly, 10);
@@ -0,0 +1,160 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/interdevice.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/interdevice.proto.
*/
export const file_meshtastic_interdevice: GenFile = /*@__PURE__*/
fileDesc("ChxtZXNodGFzdGljL2ludGVyZGV2aWNlLnByb3RvEgptZXNodGFzdGljImoKClNlbnNvckRhdGESJQoEdHlwZRgBIAEoDjIXLm1lc2h0YXN0aWMuTWVzc2FnZVR5cGUSFQoLZmxvYXRfdmFsdWUYAiABKAJIABIWCgx1aW50MzJfdmFsdWUYAyABKA1IAEIGCgRkYXRhIlYKEkludGVyZGV2aWNlTWVzc2FnZRIOCgRubWVhGAEgASgJSAASKAoGc2Vuc29yGAIgASgLMhYubWVzaHRhc3RpYy5TZW5zb3JEYXRhSABCBgoEZGF0YSrVAQoLTWVzc2FnZVR5cGUSBwoDQUNLEAASFQoQQ09MTEVDVF9JTlRFUlZBTBCgARIMCgdCRUVQX09OEKEBEg0KCEJFRVBfT0ZGEKIBEg0KCFNIVVRET1dOEKMBEg0KCFBPV0VSX09OEKQBEg8KClNDRDQxX1RFTVAQsAESEwoOU0NENDFfSFVNSURJVFkQsQESDgoJU0NENDFfQ08yELIBEg8KCkFIVDIwX1RFTVAQswESEwoOQUhUMjBfSFVNSURJVFkQtAESDwoKVFZPQ19JTkRFWBC1AUJnChRvcmcubWVzaHRhc3RpYy5wcm90b0IRSW50ZXJkZXZpY2VQcm90b3NaImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAGIGcHJvdG8z");
/**
* @generated from message meshtastic.SensorData
*/
export type SensorData = Message<"meshtastic.SensorData"> & {
/**
* The message type
*
* @generated from field: meshtastic.MessageType type = 1;
*/
type: MessageType;
/**
* The sensor data, either as a float or an uint32
*
* @generated from oneof meshtastic.SensorData.data
*/
data: {
/**
* @generated from field: float float_value = 2;
*/
value: number;
case: "floatValue";
} | {
/**
* @generated from field: uint32 uint32_value = 3;
*/
value: number;
case: "uint32Value";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message meshtastic.SensorData.
* Use `create(SensorDataSchema)` to create a new message.
*/
export const SensorDataSchema: GenMessage<SensorData> = /*@__PURE__*/
messageDesc(file_meshtastic_interdevice, 0);
/**
* @generated from message meshtastic.InterdeviceMessage
*/
export type InterdeviceMessage = Message<"meshtastic.InterdeviceMessage"> & {
/**
* The message data
*
* @generated from oneof meshtastic.InterdeviceMessage.data
*/
data: {
/**
* @generated from field: string nmea = 1;
*/
value: string;
case: "nmea";
} | {
/**
* @generated from field: meshtastic.SensorData sensor = 2;
*/
value: SensorData;
case: "sensor";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message meshtastic.InterdeviceMessage.
* Use `create(InterdeviceMessageSchema)` to create a new message.
*/
export const InterdeviceMessageSchema: GenMessage<InterdeviceMessage> = /*@__PURE__*/
messageDesc(file_meshtastic_interdevice, 1);
/**
* @generated from enum meshtastic.MessageType
*/
export enum MessageType {
/**
* @generated from enum value: ACK = 0;
*/
ACK = 0,
/**
* in ms
*
* @generated from enum value: COLLECT_INTERVAL = 160;
*/
COLLECT_INTERVAL = 160,
/**
* duration ms
*
* @generated from enum value: BEEP_ON = 161;
*/
BEEP_ON = 161,
/**
* cancel prematurely
*
* @generated from enum value: BEEP_OFF = 162;
*/
BEEP_OFF = 162,
/**
* @generated from enum value: SHUTDOWN = 163;
*/
SHUTDOWN = 163,
/**
* @generated from enum value: POWER_ON = 164;
*/
POWER_ON = 164,
/**
* @generated from enum value: SCD41_TEMP = 176;
*/
SCD41_TEMP = 176,
/**
* @generated from enum value: SCD41_HUMIDITY = 177;
*/
SCD41_HUMIDITY = 177,
/**
* @generated from enum value: SCD41_CO2 = 178;
*/
SCD41_CO2 = 178,
/**
* @generated from enum value: AHT20_TEMP = 179;
*/
AHT20_TEMP = 179,
/**
* @generated from enum value: AHT20_HUMIDITY = 180;
*/
AHT20_HUMIDITY = 180,
/**
* @generated from enum value: TVOC_INDEX = 181;
*/
TVOC_INDEX = 181,
}
/**
* Describes the enum meshtastic.MessageType.
*/
export const MessageTypeSchema: GenEnum<MessageType> = /*@__PURE__*/
enumDesc(file_meshtastic_interdevice, 0);
@@ -0,0 +1,254 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/localonly.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Config_BluetoothConfig, Config_DeviceConfig, Config_DisplayConfig, Config_LoRaConfig, Config_NetworkConfig, Config_PositionConfig, Config_PowerConfig, Config_SecurityConfig } from "./config_pb";
import { file_meshtastic_config } from "./config_pb";
import type { ModuleConfig_AmbientLightingConfig, ModuleConfig_AudioConfig, ModuleConfig_CannedMessageConfig, ModuleConfig_DetectionSensorConfig, ModuleConfig_ExternalNotificationConfig, ModuleConfig_MQTTConfig, ModuleConfig_NeighborInfoConfig, ModuleConfig_PaxcounterConfig, ModuleConfig_RangeTestConfig, ModuleConfig_RemoteHardwareConfig, ModuleConfig_SerialConfig, ModuleConfig_StatusMessageConfig, ModuleConfig_StoreForwardConfig, ModuleConfig_TAKConfig, ModuleConfig_TelemetryConfig, ModuleConfig_TrafficManagementConfig } from "./module_config_pb";
import { file_meshtastic_module_config } from "./module_config_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/localonly.proto.
*/
export const file_meshtastic_localonly: GenFile = /*@__PURE__*/
fileDesc("ChptZXNodGFzdGljL2xvY2Fsb25seS5wcm90bxIKbWVzaHRhc3RpYyKyAwoLTG9jYWxDb25maWcSLwoGZGV2aWNlGAEgASgLMh8ubWVzaHRhc3RpYy5Db25maWcuRGV2aWNlQ29uZmlnEjMKCHBvc2l0aW9uGAIgASgLMiEubWVzaHRhc3RpYy5Db25maWcuUG9zaXRpb25Db25maWcSLQoFcG93ZXIYAyABKAsyHi5tZXNodGFzdGljLkNvbmZpZy5Qb3dlckNvbmZpZxIxCgduZXR3b3JrGAQgASgLMiAubWVzaHRhc3RpYy5Db25maWcuTmV0d29ya0NvbmZpZxIxCgdkaXNwbGF5GAUgASgLMiAubWVzaHRhc3RpYy5Db25maWcuRGlzcGxheUNvbmZpZxIrCgRsb3JhGAYgASgLMh0ubWVzaHRhc3RpYy5Db25maWcuTG9SYUNvbmZpZxI1CglibHVldG9vdGgYByABKAsyIi5tZXNodGFzdGljLkNvbmZpZy5CbHVldG9vdGhDb25maWcSDwoHdmVyc2lvbhgIIAEoDRIzCghzZWN1cml0eRgJIAEoCzIhLm1lc2h0YXN0aWMuQ29uZmlnLlNlY3VyaXR5Q29uZmlnIr8IChFMb2NhbE1vZHVsZUNvbmZpZxIxCgRtcXR0GAEgASgLMiMubWVzaHRhc3RpYy5Nb2R1bGVDb25maWcuTVFUVENvbmZpZxI1CgZzZXJpYWwYAiABKAsyJS5tZXNodGFzdGljLk1vZHVsZUNvbmZpZy5TZXJpYWxDb25maWcSUgoVZXh0ZXJuYWxfbm90aWZpY2F0aW9uGAMgASgLMjMubWVzaHRhc3RpYy5Nb2R1bGVDb25maWcuRXh0ZXJuYWxOb3RpZmljYXRpb25Db25maWcSQgoNc3RvcmVfZm9yd2FyZBgEIAEoCzIrLm1lc2h0YXN0aWMuTW9kdWxlQ29uZmlnLlN0b3JlRm9yd2FyZENvbmZpZxI8CgpyYW5nZV90ZXN0GAUgASgLMigubWVzaHRhc3RpYy5Nb2R1bGVDb25maWcuUmFuZ2VUZXN0Q29uZmlnEjsKCXRlbGVtZXRyeRgGIAEoCzIoLm1lc2h0YXN0aWMuTW9kdWxlQ29uZmlnLlRlbGVtZXRyeUNvbmZpZxJECg5jYW5uZWRfbWVzc2FnZRgHIAEoCzIsLm1lc2h0YXN0aWMuTW9kdWxlQ29uZmlnLkNhbm5lZE1lc3NhZ2VDb25maWcSMwoFYXVkaW8YCSABKAsyJC5tZXNodGFzdGljLk1vZHVsZUNvbmZpZy5BdWRpb0NvbmZpZxJGCg9yZW1vdGVfaGFyZHdhcmUYCiABKAsyLS5tZXNodGFzdGljLk1vZHVsZUNvbmZpZy5SZW1vdGVIYXJkd2FyZUNvbmZpZxJCCg1uZWlnaGJvcl9pbmZvGAsgASgLMisubWVzaHRhc3RpYy5Nb2R1bGVDb25maWcuTmVpZ2hib3JJbmZvQ29uZmlnEkgKEGFtYmllbnRfbGlnaHRpbmcYDCABKAsyLi5tZXNodGFzdGljLk1vZHVsZUNvbmZpZy5BbWJpZW50TGlnaHRpbmdDb25maWcSSAoQZGV0ZWN0aW9uX3NlbnNvchgNIAEoCzIuLm1lc2h0YXN0aWMuTW9kdWxlQ29uZmlnLkRldGVjdGlvblNlbnNvckNvbmZpZxI9CgpwYXhjb3VudGVyGA4gASgLMikubWVzaHRhc3RpYy5Nb2R1bGVDb25maWcuUGF4Y291bnRlckNvbmZpZxJDCg1zdGF0dXNtZXNzYWdlGA8gASgLMiwubWVzaHRhc3RpYy5Nb2R1bGVDb25maWcuU3RhdHVzTWVzc2FnZUNvbmZpZxJMChJ0cmFmZmljX21hbmFnZW1lbnQYECABKAsyMC5tZXNodGFzdGljLk1vZHVsZUNvbmZpZy5UcmFmZmljTWFuYWdlbWVudENvbmZpZxIvCgN0YWsYESABKAsyIi5tZXNodGFzdGljLk1vZHVsZUNvbmZpZy5UQUtDb25maWcSDwoHdmVyc2lvbhgIIAEoDUJlChRvcmcubWVzaHRhc3RpYy5wcm90b0IPTG9jYWxPbmx5UHJvdG9zWiJnaXRodWIuY29tL21lc2h0YXN0aWMvZ28vZ2VuZXJhdGVkqgIUTWVzaHRhc3RpYy5Qcm90b2J1ZnO6AgBiBnByb3RvMw", [file_meshtastic_config, file_meshtastic_module_config]);
/**
* @generated from message meshtastic.LocalConfig
*/
export type LocalConfig = Message<"meshtastic.LocalConfig"> & {
/**
*
* The part of the config that is specific to the Device
*
* @generated from field: meshtastic.Config.DeviceConfig device = 1;
*/
device?: Config_DeviceConfig | undefined;
/**
*
* The part of the config that is specific to the GPS Position
*
* @generated from field: meshtastic.Config.PositionConfig position = 2;
*/
position?: Config_PositionConfig | undefined;
/**
*
* The part of the config that is specific to the Power settings
*
* @generated from field: meshtastic.Config.PowerConfig power = 3;
*/
power?: Config_PowerConfig | undefined;
/**
*
* The part of the config that is specific to the Wifi Settings
*
* @generated from field: meshtastic.Config.NetworkConfig network = 4;
*/
network?: Config_NetworkConfig | undefined;
/**
*
* The part of the config that is specific to the Display
*
* @generated from field: meshtastic.Config.DisplayConfig display = 5;
*/
display?: Config_DisplayConfig | undefined;
/**
*
* The part of the config that is specific to the Lora Radio
*
* @generated from field: meshtastic.Config.LoRaConfig lora = 6;
*/
lora?: Config_LoRaConfig | undefined;
/**
*
* The part of the config that is specific to the Bluetooth settings
*
* @generated from field: meshtastic.Config.BluetoothConfig bluetooth = 7;
*/
bluetooth?: Config_BluetoothConfig | undefined;
/**
*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code.
*
* @generated from field: uint32 version = 8;
*/
version: number;
/**
*
* The part of the config that is specific to Security settings
*
* @generated from field: meshtastic.Config.SecurityConfig security = 9;
*/
security?: Config_SecurityConfig | undefined;
};
/**
* Describes the message meshtastic.LocalConfig.
* Use `create(LocalConfigSchema)` to create a new message.
*/
export const LocalConfigSchema: GenMessage<LocalConfig> = /*@__PURE__*/
messageDesc(file_meshtastic_localonly, 0);
/**
* @generated from message meshtastic.LocalModuleConfig
*/
export type LocalModuleConfig = Message<"meshtastic.LocalModuleConfig"> & {
/**
*
* The part of the config that is specific to the MQTT module
*
* @generated from field: meshtastic.ModuleConfig.MQTTConfig mqtt = 1;
*/
mqtt?: ModuleConfig_MQTTConfig | undefined;
/**
*
* The part of the config that is specific to the Serial module
*
* @generated from field: meshtastic.ModuleConfig.SerialConfig serial = 2;
*/
serial?: ModuleConfig_SerialConfig | undefined;
/**
*
* The part of the config that is specific to the ExternalNotification module
*
* @generated from field: meshtastic.ModuleConfig.ExternalNotificationConfig external_notification = 3;
*/
externalNotification?: ModuleConfig_ExternalNotificationConfig | undefined;
/**
*
* The part of the config that is specific to the Store & Forward module
*
* @generated from field: meshtastic.ModuleConfig.StoreForwardConfig store_forward = 4;
*/
storeForward?: ModuleConfig_StoreForwardConfig | undefined;
/**
*
* The part of the config that is specific to the RangeTest module
*
* @generated from field: meshtastic.ModuleConfig.RangeTestConfig range_test = 5;
*/
rangeTest?: ModuleConfig_RangeTestConfig | undefined;
/**
*
* The part of the config that is specific to the Telemetry module
*
* @generated from field: meshtastic.ModuleConfig.TelemetryConfig telemetry = 6;
*/
telemetry?: ModuleConfig_TelemetryConfig | undefined;
/**
*
* The part of the config that is specific to the Canned Message module
*
* @generated from field: meshtastic.ModuleConfig.CannedMessageConfig canned_message = 7;
*/
cannedMessage?: ModuleConfig_CannedMessageConfig | undefined;
/**
*
* The part of the config that is specific to the Audio module
*
* @generated from field: meshtastic.ModuleConfig.AudioConfig audio = 9;
*/
audio?: ModuleConfig_AudioConfig | undefined;
/**
*
* The part of the config that is specific to the Remote Hardware module
*
* @generated from field: meshtastic.ModuleConfig.RemoteHardwareConfig remote_hardware = 10;
*/
remoteHardware?: ModuleConfig_RemoteHardwareConfig | undefined;
/**
*
* The part of the config that is specific to the Neighbor Info module
*
* @generated from field: meshtastic.ModuleConfig.NeighborInfoConfig neighbor_info = 11;
*/
neighborInfo?: ModuleConfig_NeighborInfoConfig | undefined;
/**
*
* The part of the config that is specific to the Ambient Lighting module
*
* @generated from field: meshtastic.ModuleConfig.AmbientLightingConfig ambient_lighting = 12;
*/
ambientLighting?: ModuleConfig_AmbientLightingConfig | undefined;
/**
*
* The part of the config that is specific to the Detection Sensor module
*
* @generated from field: meshtastic.ModuleConfig.DetectionSensorConfig detection_sensor = 13;
*/
detectionSensor?: ModuleConfig_DetectionSensorConfig | undefined;
/**
*
* Paxcounter Config
*
* @generated from field: meshtastic.ModuleConfig.PaxcounterConfig paxcounter = 14;
*/
paxcounter?: ModuleConfig_PaxcounterConfig | undefined;
/**
*
* StatusMessage Config
*
* @generated from field: meshtastic.ModuleConfig.StatusMessageConfig statusmessage = 15;
*/
statusmessage?: ModuleConfig_StatusMessageConfig | undefined;
/**
*
* The part of the config that is specific to the Traffic Management module
*
* @generated from field: meshtastic.ModuleConfig.TrafficManagementConfig traffic_management = 16;
*/
trafficManagement?: ModuleConfig_TrafficManagementConfig | undefined;
/**
*
* TAK Config
*
* @generated from field: meshtastic.ModuleConfig.TAKConfig tak = 17;
*/
tak?: ModuleConfig_TAKConfig | undefined;
/**
*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code.
*
* @generated from field: uint32 version = 8;
*/
version: number;
};
/**
* Describes the message meshtastic.LocalModuleConfig.
* Use `create(LocalModuleConfigSchema)` to create a new message.
*/
export const LocalModuleConfigSchema: GenMessage<LocalModuleConfig> = /*@__PURE__*/
messageDesc(file_meshtastic_localonly, 1);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,189 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/mqtt.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Config_DeviceConfig_Role, Config_LoRaConfig_ModemPreset, Config_LoRaConfig_RegionCode } from "./config_pb";
import { file_meshtastic_config } from "./config_pb";
import type { HardwareModel, MeshPacket } from "./mesh_pb";
import { file_meshtastic_mesh } from "./mesh_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/mqtt.proto.
*/
export const file_meshtastic_mqtt: GenFile = /*@__PURE__*/
fileDesc("ChVtZXNodGFzdGljL21xdHQucHJvdG8SCm1lc2h0YXN0aWMiYQoPU2VydmljZUVudmVsb3BlEiYKBnBhY2tldBgBIAEoCzIWLm1lc2h0YXN0aWMuTWVzaFBhY2tldBISCgpjaGFubmVsX2lkGAIgASgJEhIKCmdhdGV3YXlfaWQYAyABKAki3wMKCU1hcFJlcG9ydBIRCglsb25nX25hbWUYASABKAkSEgoKc2hvcnRfbmFtZRgCIAEoCRIyCgRyb2xlGAMgASgOMiQubWVzaHRhc3RpYy5Db25maWcuRGV2aWNlQ29uZmlnLlJvbGUSKwoIaHdfbW9kZWwYBCABKA4yGS5tZXNodGFzdGljLkhhcmR3YXJlTW9kZWwSGAoQZmlybXdhcmVfdmVyc2lvbhgFIAEoCRI4CgZyZWdpb24YBiABKA4yKC5tZXNodGFzdGljLkNvbmZpZy5Mb1JhQ29uZmlnLlJlZ2lvbkNvZGUSPwoMbW9kZW1fcHJlc2V0GAcgASgOMikubWVzaHRhc3RpYy5Db25maWcuTG9SYUNvbmZpZy5Nb2RlbVByZXNldBIbChNoYXNfZGVmYXVsdF9jaGFubmVsGAggASgIEhIKCmxhdGl0dWRlX2kYCSABKA8SEwoLbG9uZ2l0dWRlX2kYCiABKA8SEAoIYWx0aXR1ZGUYCyABKAUSGgoScG9zaXRpb25fcHJlY2lzaW9uGAwgASgNEh4KFm51bV9vbmxpbmVfbG9jYWxfbm9kZXMYDSABKA0SIQoZaGFzX29wdGVkX3JlcG9ydF9sb2NhdGlvbhgOIAEoCEJgChRvcmcubWVzaHRhc3RpYy5wcm90b0IKTVFUVFByb3Rvc1oiZ2l0aHViLmNvbS9tZXNodGFzdGljL2dvL2dlbmVyYXRlZKoCFE1lc2h0YXN0aWMuUHJvdG9idWZzugIAYgZwcm90bzM", [file_meshtastic_config, file_meshtastic_mesh]);
/**
*
* This message wraps a MeshPacket with extra metadata about the sender and how it arrived.
*
* @generated from message meshtastic.ServiceEnvelope
*/
export type ServiceEnvelope = Message<"meshtastic.ServiceEnvelope"> & {
/**
*
* The (probably encrypted) packet
*
* @generated from field: meshtastic.MeshPacket packet = 1;
*/
packet?: MeshPacket | undefined;
/**
*
* The global channel ID it was sent on
*
* @generated from field: string channel_id = 2;
*/
channelId: string;
/**
*
* The sending gateway node ID. Can we use this to authenticate/prevent fake
* nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
* the globally trusted nodenum
*
* @generated from field: string gateway_id = 3;
*/
gatewayId: string;
};
/**
* Describes the message meshtastic.ServiceEnvelope.
* Use `create(ServiceEnvelopeSchema)` to create a new message.
*/
export const ServiceEnvelopeSchema: GenMessage<ServiceEnvelope> = /*@__PURE__*/
messageDesc(file_meshtastic_mqtt, 0);
/**
*
* Information about a node intended to be reported unencrypted to a map using MQTT.
*
* @generated from message meshtastic.MapReport
*/
export type MapReport = Message<"meshtastic.MapReport"> & {
/**
*
* A full name for this user, i.e. "Kevin Hester"
*
* @generated from field: string long_name = 1;
*/
longName: string;
/**
*
* A VERY short name, ideally two characters.
* Suitable for a tiny OLED screen
*
* @generated from field: string short_name = 2;
*/
shortName: string;
/**
*
* Role of the node that applies specific settings for a particular use-case
*
* @generated from field: meshtastic.Config.DeviceConfig.Role role = 3;
*/
role: Config_DeviceConfig_Role;
/**
*
* Hardware model of the node, i.e. T-Beam, Heltec V3, etc...
*
* @generated from field: meshtastic.HardwareModel hw_model = 4;
*/
hwModel: HardwareModel;
/**
*
* Device firmware version string
*
* @generated from field: string firmware_version = 5;
*/
firmwareVersion: string;
/**
*
* The region code for the radio (US, CN, EU433, etc...)
*
* @generated from field: meshtastic.Config.LoRaConfig.RegionCode region = 6;
*/
region: Config_LoRaConfig_RegionCode;
/**
*
* Modem preset used by the radio (LongFast, MediumSlow, etc...)
*
* @generated from field: meshtastic.Config.LoRaConfig.ModemPreset modem_preset = 7;
*/
modemPreset: Config_LoRaConfig_ModemPreset;
/**
*
* Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...)
* and it uses the default frequency slot given the region and modem preset.
*
* @generated from field: bool has_default_channel = 8;
*/
hasDefaultChannel: boolean;
/**
*
* Latitude: multiply by 1e-7 to get degrees in floating point
*
* @generated from field: sfixed32 latitude_i = 9;
*/
latitudeI: number;
/**
*
* Longitude: multiply by 1e-7 to get degrees in floating point
*
* @generated from field: sfixed32 longitude_i = 10;
*/
longitudeI: number;
/**
*
* Altitude in meters above MSL
*
* @generated from field: int32 altitude = 11;
*/
altitude: number;
/**
*
* Indicates the bits of precision for latitude and longitude set by the sending node
*
* @generated from field: uint32 position_precision = 12;
*/
positionPrecision: number;
/**
*
* Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT)
*
* @generated from field: uint32 num_online_local_nodes = 13;
*/
numOnlineLocalNodes: number;
/**
*
* User has opted in to share their location (map report) with the mqtt server
* Controlled by map_report.should_report_location
*
* @generated from field: bool has_opted_report_location = 14;
*/
hasOptedReportLocation: boolean;
};
/**
* Describes the message meshtastic.MapReport.
* Use `create(MapReportSchema)` to create a new message.
*/
export const MapReportSchema: GenMessage<MapReport> = /*@__PURE__*/
messageDesc(file_meshtastic_mqtt, 1);
@@ -0,0 +1,53 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/paxcount.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/paxcount.proto.
*/
export const file_meshtastic_paxcount: GenFile = /*@__PURE__*/
fileDesc("ChltZXNodGFzdGljL3BheGNvdW50LnByb3RvEgptZXNodGFzdGljIjUKCFBheGNvdW50EgwKBHdpZmkYASABKA0SCwoDYmxlGAIgASgNEg4KBnVwdGltZRgDIAEoDUJkChRvcmcubWVzaHRhc3RpYy5wcm90b0IOUGF4Y291bnRQcm90b3NaImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAGIGcHJvdG8z");
/**
*
* TODO: REPLACE
*
* @generated from message meshtastic.Paxcount
*/
export type Paxcount = Message<"meshtastic.Paxcount"> & {
/**
*
* seen Wifi devices
*
* @generated from field: uint32 wifi = 1;
*/
wifi: number;
/**
*
* Seen BLE devices
*
* @generated from field: uint32 ble = 2;
*/
ble: number;
/**
*
* Uptime in seconds
*
* @generated from field: uint32 uptime = 3;
*/
uptime: number;
};
/**
* Describes the message meshtastic.Paxcount.
* Use `create(PaxcountSchema)` to create a new message.
*/
export const PaxcountSchema: GenMessage<Paxcount> = /*@__PURE__*/
messageDesc(file_meshtastic_paxcount, 0);
@@ -0,0 +1,412 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/portnums.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc } from "@bufbuild/protobuf/codegenv2";
/**
* Describes the file meshtastic/portnums.proto.
*/
export const file_meshtastic_portnums: GenFile = /*@__PURE__*/
fileDesc("ChltZXNodGFzdGljL3BvcnRudW1zLnByb3RvEgptZXNodGFzdGljKv0FCgdQb3J0TnVtEg8KC1VOS05PV05fQVBQEAASFAoQVEVYVF9NRVNTQUdFX0FQUBABEhcKE1JFTU9URV9IQVJEV0FSRV9BUFAQAhIQCgxQT1NJVElPTl9BUFAQAxIQCgxOT0RFSU5GT19BUFAQBBIPCgtST1VUSU5HX0FQUBAFEg0KCUFETUlOX0FQUBAGEh8KG1RFWFRfTUVTU0FHRV9DT01QUkVTU0VEX0FQUBAHEhAKDFdBWVBPSU5UX0FQUBAIEg0KCUFVRElPX0FQUBAJEhgKFERFVEVDVElPTl9TRU5TT1JfQVBQEAoSDQoJQUxFUlRfQVBQEAsSGAoUS0VZX1ZFUklGSUNBVElPTl9BUFAQDBIUChBSRU1PVEVfU0hFTExfQVBQEA0SDQoJUkVQTFlfQVBQECASEQoNSVBfVFVOTkVMX0FQUBAhEhIKDlBBWENPVU5URVJfQVBQECISHgoaU1RPUkVfRk9SV0FSRF9QTFVTUExVU19BUFAQIxITCg9OT0RFX1NUQVRVU19BUFAQJBIOCgpTRVJJQUxfQVBQEEASFQoRU1RPUkVfRk9SV0FSRF9BUFAQQRISCg5SQU5HRV9URVNUX0FQUBBCEhEKDVRFTEVNRVRSWV9BUFAQQxILCgdaUFNfQVBQEEQSEQoNU0lNVUxBVE9SX0FQUBBFEhIKDlRSQUNFUk9VVEVfQVBQEEYSFAoQTkVJR0hCT1JJTkZPX0FQUBBHEg8KC0FUQUtfUExVR0lOEEgSEgoOTUFQX1JFUE9SVF9BUFAQSRITCg9QT1dFUlNUUkVTU19BUFAQShISCg5MT1JBV0FOX0JSSURHRRBLEhgKFFJFVElDVUxVTV9UVU5ORUxfQVBQEEwSDwoLQ0FZRU5ORV9BUFAQTRISCg5BVEFLX1BMVUdJTl9WMhBOEhIKDkdST1VQQUxBUk1fQVBQEHASEAoLUFJJVkFURV9BUFAQgAISEwoOQVRBS19GT1JXQVJERVIQgQISCAoDTUFYEP8DQl4KFG9yZy5tZXNodGFzdGljLnByb3RvQghQb3J0bnVtc1oiZ2l0aHViLmNvbS9tZXNodGFzdGljL2dvL2dlbmVyYXRlZKoCFE1lc2h0YXN0aWMuUHJvdG9idWZzugIAYgZwcm90bzM");
/**
*
* For any new 'apps' that run on the device or via sister apps on phones/PCs they should pick and use a
* unique 'portnum' for their application.
* If you are making a new app using meshtastic, please send in a pull request to add your 'portnum' to this
* master table.
* PortNums should be assigned in the following range:
* 0-63 Core Meshtastic use, do not use for third party apps
* 64-127 Registered 3rd party apps, send in a pull request that adds a new entry to portnums.proto to register your application
* 256-511 Use one of these portnums for your private applications that you don't want to register publically
* All other values are reserved.
* Note: This was formerly a Type enum named 'typ' with the same id #
* We have change to this 'portnum' based scheme for specifying app handlers for particular payloads.
* This change is backwards compatible by treating the legacy OPAQUE/CLEAR_TEXT values identically.
*
* @generated from enum meshtastic.PortNum
*/
export enum PortNum {
/**
*
* Deprecated: do not use in new code (formerly called OPAQUE)
* A message sent from a device outside of the mesh, in a form the mesh does not understand
* NOTE: This must be 0, because it is documented in IMeshService.aidl to be so
* ENCODING: binary undefined
*
* @generated from enum value: UNKNOWN_APP = 0;
*/
UNKNOWN_APP = 0,
/**
*
* A simple UTF-8 text message, which even the little micros in the mesh
* can understand and show on their screen eventually in some circumstances
* even signal might send messages in this form (see below)
* ENCODING: UTF-8 Plaintext (?)
*
* @generated from enum value: TEXT_MESSAGE_APP = 1;
*/
TEXT_MESSAGE_APP = 1,
/**
*
* Reserved for built-in GPIO/example app.
* See remote_hardware.proto/HardwareMessage for details on the message sent/received to this port number
* ENCODING: Protobuf
*
* @generated from enum value: REMOTE_HARDWARE_APP = 2;
*/
REMOTE_HARDWARE_APP = 2,
/**
*
* The built-in position messaging app.
* Payload is a Position message.
* ENCODING: Protobuf
*
* @generated from enum value: POSITION_APP = 3;
*/
POSITION_APP = 3,
/**
*
* The built-in user info app.
* Payload is a User message.
* ENCODING: Protobuf
*
* @generated from enum value: NODEINFO_APP = 4;
*/
NODEINFO_APP = 4,
/**
*
* Protocol control packets for mesh protocol use.
* Payload is a Routing message.
* ENCODING: Protobuf
*
* @generated from enum value: ROUTING_APP = 5;
*/
ROUTING_APP = 5,
/**
*
* Admin control packets.
* Payload is a AdminMessage message.
* ENCODING: Protobuf
*
* @generated from enum value: ADMIN_APP = 6;
*/
ADMIN_APP = 6,
/**
*
* Compressed TEXT_MESSAGE payloads.
* ENCODING: UTF-8 Plaintext (?) with Unishox2 Compression
* NOTE: The Device Firmware converts a TEXT_MESSAGE_APP to TEXT_MESSAGE_COMPRESSED_APP if the compressed
* payload is shorter. There's no need for app developers to do this themselves. Also the firmware will decompress
* any incoming TEXT_MESSAGE_COMPRESSED_APP payload and convert to TEXT_MESSAGE_APP.
*
* @generated from enum value: TEXT_MESSAGE_COMPRESSED_APP = 7;
*/
TEXT_MESSAGE_COMPRESSED_APP = 7,
/**
*
* Waypoint payloads.
* Payload is a Waypoint message.
* ENCODING: Protobuf
*
* @generated from enum value: WAYPOINT_APP = 8;
*/
WAYPOINT_APP = 8,
/**
*
* Audio Payloads.
* Encapsulated codec2 packets. On 2.4 GHZ Bandwidths only for now
* ENCODING: codec2 audio frames
* NOTE: audio frames contain a 3 byte header (0xc0 0xde 0xc2) and a one byte marker for the decompressed bitrate.
* This marker comes from the 'moduleConfig.audio.bitrate' enum minus one.
*
* @generated from enum value: AUDIO_APP = 9;
*/
AUDIO_APP = 9,
/**
*
* Same as Text Message but originating from Detection Sensor Module.
* NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
*
* @generated from enum value: DETECTION_SENSOR_APP = 10;
*/
DETECTION_SENSOR_APP = 10,
/**
*
* Same as Text Message but used for critical alerts.
*
* @generated from enum value: ALERT_APP = 11;
*/
ALERT_APP = 11,
/**
*
* Module/port for handling key verification requests.
*
* @generated from enum value: KEY_VERIFICATION_APP = 12;
*/
KEY_VERIFICATION_APP = 12,
/**
*
* Module/port for handling primitive remote shell access.
*
* @generated from enum value: REMOTE_SHELL_APP = 13;
*/
REMOTE_SHELL_APP = 13,
/**
*
* Provides a 'ping' service that replies to any packet it receives.
* Also serves as a small example module.
* ENCODING: ASCII Plaintext
*
* @generated from enum value: REPLY_APP = 32;
*/
REPLY_APP = 32,
/**
*
* Used for the python IP tunnel feature
* ENCODING: IP Packet. Handled by the python API, firmware ignores this one and pases on.
*
* @generated from enum value: IP_TUNNEL_APP = 33;
*/
IP_TUNNEL_APP = 33,
/**
*
* Paxcounter lib included in the firmware
* ENCODING: protobuf
*
* @generated from enum value: PAXCOUNTER_APP = 34;
*/
PAXCOUNTER_APP = 34,
/**
*
* Store and Forward++ module included in the firmware
* ENCODING: protobuf
* This module is specifically for Native Linux nodes, and provides a Git-style
* chain of messages.
*
* @generated from enum value: STORE_FORWARD_PLUSPLUS_APP = 35;
*/
STORE_FORWARD_PLUSPLUS_APP = 35,
/**
*
* Node Status module
* ENCODING: protobuf
* This module allows setting an extra string of status for a node.
* Broadcasts on change and on a timer, possibly once a day.
*
* @generated from enum value: NODE_STATUS_APP = 36;
*/
NODE_STATUS_APP = 36,
/**
*
* Provides a hardware serial interface to send and receive from the Meshtastic network.
* Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic
* network is forwarded to the RX pin while sending a packet to TX will go out to the Mesh network.
* Maximum packet size of 240 bytes.
* Module is disabled by default can be turned on by setting SERIAL_MODULE_ENABLED = 1 in SerialPlugh.cpp.
* ENCODING: binary undefined
*
* @generated from enum value: SERIAL_APP = 64;
*/
SERIAL_APP = 64,
/**
*
* STORE_FORWARD_APP (Work in Progress)
* Maintained by Jm Casler (MC Hamster) : jm@casler.org
* ENCODING: Protobuf
*
* @generated from enum value: STORE_FORWARD_APP = 65;
*/
STORE_FORWARD_APP = 65,
/**
*
* Optional port for messages for the range test module.
* ENCODING: ASCII Plaintext
* NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
*
* @generated from enum value: RANGE_TEST_APP = 66;
*/
RANGE_TEST_APP = 66,
/**
*
* Provides a format to send and receive telemetry data from the Meshtastic network.
* Maintained by Charles Crossan (crossan007) : crossan007@gmail.com
* ENCODING: Protobuf
*
* @generated from enum value: TELEMETRY_APP = 67;
*/
TELEMETRY_APP = 67,
/**
*
* Experimental tools for estimating node position without a GPS
* Maintained by Github user a-f-G-U-C (a Meshtastic contributor)
* Project files at https://github.com/a-f-G-U-C/Meshtastic-ZPS
* ENCODING: arrays of int64 fields
*
* @generated from enum value: ZPS_APP = 68;
*/
ZPS_APP = 68,
/**
*
* Used to let multiple instances of Linux native applications communicate
* as if they did using their LoRa chip.
* Maintained by GitHub user GUVWAF.
* Project files at https://github.com/GUVWAF/Meshtasticator
* ENCODING: Protobuf (?)
*
* @generated from enum value: SIMULATOR_APP = 69;
*/
SIMULATOR_APP = 69,
/**
*
* Provides a traceroute functionality to show the route a packet towards
* a certain destination would take on the mesh. Contains a RouteDiscovery message as payload.
* ENCODING: Protobuf
*
* @generated from enum value: TRACEROUTE_APP = 70;
*/
TRACEROUTE_APP = 70,
/**
*
* Aggregates edge info for the network by sending out a list of each node's neighbors
* ENCODING: Protobuf
*
* @generated from enum value: NEIGHBORINFO_APP = 71;
*/
NEIGHBORINFO_APP = 71,
/**
*
* ATAK Plugin
* Portnum for payloads from the official Meshtastic ATAK plugin
*
* @generated from enum value: ATAK_PLUGIN = 72;
*/
ATAK_PLUGIN = 72,
/**
*
* Provides unencrypted information about a node for consumption by a map via MQTT
*
* @generated from enum value: MAP_REPORT_APP = 73;
*/
MAP_REPORT_APP = 73,
/**
*
* PowerStress based monitoring support (for automated power consumption testing)
*
* @generated from enum value: POWERSTRESS_APP = 74;
*/
POWERSTRESS_APP = 74,
/**
*
* LoraWAN Payload Transport
* ENCODING: compact binary LoRaWAN uplink (10-byte RF metadata + PHY payload) - see LoRaWANBridgeModule
*
* @generated from enum value: LORAWAN_BRIDGE = 75;
*/
LORAWAN_BRIDGE = 75,
/**
*
* Reticulum Network Stack Tunnel App
* ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
*
* @generated from enum value: RETICULUM_TUNNEL_APP = 76;
*/
RETICULUM_TUNNEL_APP = 76,
/**
*
* App for transporting Cayenne Low Power Payload, popular for LoRaWAN sensor nodes. Offers ability to send
* arbitrary telemetry over meshtastic that is not covered by telemetry.proto
* ENCODING: CayenneLLP
*
* @generated from enum value: CAYENNE_APP = 77;
*/
CAYENNE_APP = 77,
/**
*
* ATAK Plugin V2
* Portnum for payloads from the official Meshtastic ATAK plugin using
* TAKPacketV2 with zstd dictionary compression.
*
* @generated from enum value: ATAK_PLUGIN_V2 = 78;
*/
ATAK_PLUGIN_V2 = 78,
/**
*
* GroupAlarm integration
* Used for transporting GroupAlarm-related messages between Meshtastic nodes
* and companion applications/services.
*
* @generated from enum value: GROUPALARM_APP = 112;
*/
GROUPALARM_APP = 112,
/**
*
* Private applications should use portnums >= 256.
* To simplify initial development and testing you can use "PRIVATE_APP"
* in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh))
*
* @generated from enum value: PRIVATE_APP = 256;
*/
PRIVATE_APP = 256,
/**
*
* ATAK Forwarder Module https://github.com/paulmandal/atak-forwarder
* ENCODING: libcotshrink
*
* @generated from enum value: ATAK_FORWARDER = 257;
*/
ATAK_FORWARDER = 257,
/**
*
* Currently we limit port nums to no higher than this value
*
* @generated from enum value: MAX = 511;
*/
MAX = 511,
}
/**
* Describes the enum meshtastic.PortNum.
*/
export const PortNumSchema: GenEnum<PortNum> = /*@__PURE__*/
enumDesc(file_meshtastic_portnums, 0);
@@ -0,0 +1,308 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/powermon.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/powermon.proto.
*/
export const file_meshtastic_powermon: GenFile = /*@__PURE__*/
fileDesc("ChltZXNodGFzdGljL3Bvd2VybW9uLnByb3RvEgptZXNodGFzdGljIuABCghQb3dlck1vbiLTAQoFU3RhdGUSCAoETm9uZRAAEhEKDUNQVV9EZWVwU2xlZXAQARISCg5DUFVfTGlnaHRTbGVlcBACEgwKCFZleHQxX09uEAQSDQoJTG9yYV9SWE9uEAgSDQoJTG9yYV9UWE9uEBASEQoNTG9yYV9SWEFjdGl2ZRAgEgkKBUJUX09uEEASCwoGTEVEX09uEIABEg4KCVNjcmVlbl9PbhCAAhITCg5TY3JlZW5fRHJhd2luZxCABBIMCgdXaWZpX09uEIAIEg8KCkdQU19BY3RpdmUQgBAi/wIKElBvd2VyU3RyZXNzTWVzc2FnZRIyCgNjbWQYASABKA4yJS5tZXNodGFzdGljLlBvd2VyU3RyZXNzTWVzc2FnZS5PcGNvZGUSEwoLbnVtX3NlY29uZHMYAiABKAIinwIKBk9wY29kZRIJCgVVTlNFVBAAEg4KClBSSU5UX0lORk8QARIPCgtGT1JDRV9RVUlFVBACEg0KCUVORF9RVUlFVBADEg0KCVNDUkVFTl9PThAQEg4KClNDUkVFTl9PRkYQERIMCghDUFVfSURMRRAgEhEKDUNQVV9ERUVQU0xFRVAQIRIOCgpDUFVfRlVMTE9OECISCgoGTEVEX09OEDASCwoHTEVEX09GRhAxEgwKCExPUkFfT0ZGEEASCwoHTE9SQV9UWBBBEgsKB0xPUkFfUlgQQhIKCgZCVF9PRkYQUBIJCgVCVF9PThBREgwKCFdJRklfT0ZGEGASCwoHV0lGSV9PThBhEgsKB0dQU19PRkYQcBIKCgZHUFNfT04QcUJkChRvcmcubWVzaHRhc3RpYy5wcm90b0IOUG93ZXJNb25Qcm90b3NaImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAGIGcHJvdG8z");
/**
* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
* But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us)
*
* @generated from message meshtastic.PowerMon
*/
export type PowerMon = Message<"meshtastic.PowerMon"> & {
};
/**
* Describes the message meshtastic.PowerMon.
* Use `create(PowerMonSchema)` to create a new message.
*/
export const PowerMonSchema: GenMessage<PowerMon> = /*@__PURE__*/
messageDesc(file_meshtastic_powermon, 0);
/**
* Any significant power changing event in meshtastic should be tagged with a powermon state transition.
* If you are making new meshtastic features feel free to add new entries at the end of this definition.
*
* @generated from enum meshtastic.PowerMon.State
*/
export enum PowerMon_State {
/**
* @generated from enum value: None = 0;
*/
None = 0,
/**
* @generated from enum value: CPU_DeepSleep = 1;
*/
CPU_DeepSleep = 1,
/**
* @generated from enum value: CPU_LightSleep = 2;
*/
CPU_LightSleep = 2,
/**
*
* The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only
* occasionally. In cases where that rail has multiple devices on it we usually want to have logging on
* the state of that rail as an independent record.
* For instance on the Heltec Tracker 1.1 board, this rail is the power source for the GPS and screen.
*
* The log messages will be short and complete (see PowerMon.Event in the protobufs for details).
* something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of all current states.
* (We use a bitmask for states so that if a log message gets lost it won't be fatal)
*
* @generated from enum value: Vext1_On = 4;
*/
Vext1_On = 4,
/**
* @generated from enum value: Lora_RXOn = 8;
*/
Lora_RXOn = 8,
/**
* @generated from enum value: Lora_TXOn = 16;
*/
Lora_TXOn = 16,
/**
* @generated from enum value: Lora_RXActive = 32;
*/
Lora_RXActive = 32,
/**
* @generated from enum value: BT_On = 64;
*/
BT_On = 64,
/**
* @generated from enum value: LED_On = 128;
*/
LED_On = 128,
/**
* @generated from enum value: Screen_On = 256;
*/
Screen_On = 256,
/**
* @generated from enum value: Screen_Drawing = 512;
*/
Screen_Drawing = 512,
/**
* @generated from enum value: Wifi_On = 1024;
*/
Wifi_On = 1024,
/**
*
* GPS is actively trying to find our location
* See GPSPowerState for more details
*
* @generated from enum value: GPS_Active = 2048;
*/
GPS_Active = 2048,
}
/**
* Describes the enum meshtastic.PowerMon.State.
*/
export const PowerMon_StateSchema: GenEnum<PowerMon_State> = /*@__PURE__*/
enumDesc(file_meshtastic_powermon, 0, 0);
/**
*
* PowerStress testing support via the C++ PowerStress module
*
* @generated from message meshtastic.PowerStressMessage
*/
export type PowerStressMessage = Message<"meshtastic.PowerStressMessage"> & {
/**
*
* What type of HardwareMessage is this?
*
* @generated from field: meshtastic.PowerStressMessage.Opcode cmd = 1;
*/
cmd: PowerStressMessage_Opcode;
/**
* @generated from field: float num_seconds = 2;
*/
numSeconds: number;
};
/**
* Describes the message meshtastic.PowerStressMessage.
* Use `create(PowerStressMessageSchema)` to create a new message.
*/
export const PowerStressMessageSchema: GenMessage<PowerStressMessage> = /*@__PURE__*/
messageDesc(file_meshtastic_powermon, 1);
/**
*
* What operation would we like the UUT to perform.
* note: senders should probably set want_response in their request packets, so that they can know when the state
* machine has started processing their request
*
* @generated from enum meshtastic.PowerStressMessage.Opcode
*/
export enum PowerStressMessage_Opcode {
/**
*
* Unset/unused
*
* @generated from enum value: UNSET = 0;
*/
UNSET = 0,
/**
* Print board version slog and send an ack that we are alive and ready to process commands
*
* @generated from enum value: PRINT_INFO = 1;
*/
PRINT_INFO = 1,
/**
* Try to turn off all automatic processing of packets, screen, sleeping, etc (to make it easier to measure in isolation)
*
* @generated from enum value: FORCE_QUIET = 2;
*/
FORCE_QUIET = 2,
/**
* Stop powerstress processing - probably by just rebooting the board
*
* @generated from enum value: END_QUIET = 3;
*/
END_QUIET = 3,
/**
* Turn the screen on
*
* @generated from enum value: SCREEN_ON = 16;
*/
SCREEN_ON = 16,
/**
* Turn the screen off
*
* @generated from enum value: SCREEN_OFF = 17;
*/
SCREEN_OFF = 17,
/**
* Let the CPU run but we assume mostly idling for num_seconds
*
* @generated from enum value: CPU_IDLE = 32;
*/
CPU_IDLE = 32,
/**
* Force deep sleep for FIXME seconds
*
* @generated from enum value: CPU_DEEPSLEEP = 33;
*/
CPU_DEEPSLEEP = 33,
/**
* Spin the CPU as fast as possible for num_seconds
*
* @generated from enum value: CPU_FULLON = 34;
*/
CPU_FULLON = 34,
/**
* Turn the LED on for num_seconds (and leave it on - for baseline power measurement purposes)
*
* @generated from enum value: LED_ON = 48;
*/
LED_ON = 48,
/**
* Force the LED off for num_seconds
*
* @generated from enum value: LED_OFF = 49;
*/
LED_OFF = 49,
/**
* Completely turn off the LORA radio for num_seconds
*
* @generated from enum value: LORA_OFF = 64;
*/
LORA_OFF = 64,
/**
* Send Lora packets for num_seconds
*
* @generated from enum value: LORA_TX = 65;
*/
LORA_TX = 65,
/**
* Receive Lora packets for num_seconds (node will be mostly just listening, unless an external agent is helping stress this by sending packets on the current channel)
*
* @generated from enum value: LORA_RX = 66;
*/
LORA_RX = 66,
/**
* Turn off the BT radio for num_seconds
*
* @generated from enum value: BT_OFF = 80;
*/
BT_OFF = 80,
/**
* Turn on the BT radio for num_seconds
*
* @generated from enum value: BT_ON = 81;
*/
BT_ON = 81,
/**
* Turn off the WIFI radio for num_seconds
*
* @generated from enum value: WIFI_OFF = 96;
*/
WIFI_OFF = 96,
/**
* Turn on the WIFI radio for num_seconds
*
* @generated from enum value: WIFI_ON = 97;
*/
WIFI_ON = 97,
/**
* Turn off the GPS radio for num_seconds
*
* @generated from enum value: GPS_OFF = 112;
*/
GPS_OFF = 112,
/**
* Turn on the GPS radio for num_seconds
*
* @generated from enum value: GPS_ON = 113;
*/
GPS_ON = 113,
}
/**
* Describes the enum meshtastic.PowerStressMessage.Opcode.
*/
export const PowerStressMessage_OpcodeSchema: GenEnum<PowerStressMessage_Opcode> = /*@__PURE__*/
enumDesc(file_meshtastic_powermon, 1, 0);
@@ -0,0 +1,126 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/remote_hardware.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/remote_hardware.proto.
*/
export const file_meshtastic_remote_hardware: GenFile = /*@__PURE__*/
fileDesc("CiBtZXNodGFzdGljL3JlbW90ZV9oYXJkd2FyZS5wcm90bxIKbWVzaHRhc3RpYyLWAQoPSGFyZHdhcmVNZXNzYWdlEi4KBHR5cGUYASABKA4yIC5tZXNodGFzdGljLkhhcmR3YXJlTWVzc2FnZS5UeXBlEhEKCWdwaW9fbWFzaxgCIAEoBBISCgpncGlvX3ZhbHVlGAMgASgEImwKBFR5cGUSCQoFVU5TRVQQABIPCgtXUklURV9HUElPUxABEg8KC1dBVENIX0dQSU9TEAISEQoNR1BJT1NfQ0hBTkdFRBADEg4KClJFQURfR1BJT1MQBBIUChBSRUFEX0dQSU9TX1JFUExZEAVCZAoUb3JnLm1lc2h0YXN0aWMucHJvdG9CDlJlbW90ZUhhcmR3YXJlWiJnaXRodWIuY29tL21lc2h0YXN0aWMvZ28vZ2VuZXJhdGVkqgIUTWVzaHRhc3RpYy5Qcm90b2J1ZnO6AgBiBnByb3RvMw");
/**
*
* An example app to show off the module system. This message is used for
* REMOTE_HARDWARE_APP PortNums.
* Also provides easy remote access to any GPIO.
* In the future other remote hardware operations can be added based on user interest
* (i.e. serial output, spi/i2c input/output).
* FIXME - currently this feature is turned on by default which is dangerous
* because no security yet (beyond the channel mechanism).
* It should be off by default and then protected based on some TBD mechanism
* (a special channel once multichannel support is included?)
*
* @generated from message meshtastic.HardwareMessage
*/
export type HardwareMessage = Message<"meshtastic.HardwareMessage"> & {
/**
*
* What type of HardwareMessage is this?
*
* @generated from field: meshtastic.HardwareMessage.Type type = 1;
*/
type: HardwareMessage_Type;
/**
*
* What gpios are we changing. Not used for all MessageTypes, see MessageType for details
*
* @generated from field: uint64 gpio_mask = 2;
*/
gpioMask: bigint;
/**
*
* For gpios that were listed in gpio_mask as valid, what are the signal levels for those gpios.
* Not used for all MessageTypes, see MessageType for details
*
* @generated from field: uint64 gpio_value = 3;
*/
gpioValue: bigint;
};
/**
* Describes the message meshtastic.HardwareMessage.
* Use `create(HardwareMessageSchema)` to create a new message.
*/
export const HardwareMessageSchema: GenMessage<HardwareMessage> = /*@__PURE__*/
messageDesc(file_meshtastic_remote_hardware, 0);
/**
*
* TODO: REPLACE
*
* @generated from enum meshtastic.HardwareMessage.Type
*/
export enum HardwareMessage_Type {
/**
*
* Unset/unused
*
* @generated from enum value: UNSET = 0;
*/
UNSET = 0,
/**
*
* Set gpio gpios based on gpio_mask/gpio_value
*
* @generated from enum value: WRITE_GPIOS = 1;
*/
WRITE_GPIOS = 1,
/**
*
* We are now interested in watching the gpio_mask gpios.
* If the selected gpios change, please broadcast GPIOS_CHANGED.
* Will implicitly change the gpios requested to be INPUT gpios.
*
* @generated from enum value: WATCH_GPIOS = 2;
*/
WATCH_GPIOS = 2,
/**
*
* The gpios listed in gpio_mask have changed, the new values are listed in gpio_value
*
* @generated from enum value: GPIOS_CHANGED = 3;
*/
GPIOS_CHANGED = 3,
/**
*
* Read the gpios specified in gpio_mask, send back a READ_GPIOS_REPLY reply with gpio_value populated
*
* @generated from enum value: READ_GPIOS = 4;
*/
READ_GPIOS = 4,
/**
*
* A reply to READ_GPIOS. gpio_mask and gpio_value will be populated
*
* @generated from enum value: READ_GPIOS_REPLY = 5;
*/
READ_GPIOS_REPLY = 5,
}
/**
* Describes the enum meshtastic.HardwareMessage.Type.
*/
export const HardwareMessage_TypeSchema: GenEnum<HardwareMessage_Type> = /*@__PURE__*/
enumDesc(file_meshtastic_remote_hardware, 0, 0);
@@ -0,0 +1,37 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/rtttl.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/rtttl.proto.
*/
export const file_meshtastic_rtttl: GenFile = /*@__PURE__*/
fileDesc("ChZtZXNodGFzdGljL3J0dHRsLnByb3RvEgptZXNodGFzdGljIh8KC1JUVFRMQ29uZmlnEhAKCHJpbmd0b25lGAEgASgJQmcKFG9yZy5tZXNodGFzdGljLnByb3RvQhFSVFRUTENvbmZpZ1Byb3Rvc1oiZ2l0aHViLmNvbS9tZXNodGFzdGljL2dvL2dlbmVyYXRlZKoCFE1lc2h0YXN0aWMuUHJvdG9idWZzugIAYgZwcm90bzM");
/**
*
* Canned message module configuration.
*
* @generated from message meshtastic.RTTTLConfig
*/
export type RTTTLConfig = Message<"meshtastic.RTTTLConfig"> & {
/**
*
* Ringtone for PWM Buzzer in RTTTL Format.
*
* @generated from field: string ringtone = 1;
*/
ringtone: string;
};
/**
* Describes the message meshtastic.RTTTLConfig.
* Use `create(RTTTLConfigSchema)` to create a new message.
*/
export const RTTTLConfigSchema: GenMessage<RTTTLConfig> = /*@__PURE__*/
messageDesc(file_meshtastic_rtttl, 0);
@@ -0,0 +1,188 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/serial_hal.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/serial_hal.proto.
*/
export const file_meshtastic_serial_hal: GenFile = /*@__PURE__*/
fileDesc("ChttZXNodGFzdGljL3NlcmlhbF9oYWwucHJvdG8SCm1lc2h0YXN0aWMiogIKEFNlcmlhbEhhbENvbW1hbmQSFgoOdHJhbnNhY3Rpb25faWQYASABKA0SLwoEdHlwZRgCIAEoDjIhLm1lc2h0YXN0aWMuU2VyaWFsSGFsQ29tbWFuZC5UeXBlEgsKA3BpbhgDIAEoDRINCgV2YWx1ZRgEIAEoDRIMCgRtb2RlGAUgASgNEgwKBGRhdGEYBiABKAwijAEKBFR5cGUSCQoFVU5TRVQQABIMCghQSU5fTU9ERRABEhEKDURJR0lUQUxfV1JJVEUQAhIQCgxESUdJVEFMX1JFQUQQAxIUChBBVFRBQ0hfSU5URVJSVVBUEAQSFAoQREVUQUNIX0lOVEVSUlVQVBAFEhAKDFNQSV9UUkFOU0ZFUhAGEggKBE5PT1AQByLMAQoRU2VyaWFsSGFsUmVzcG9uc2USFgoOdHJhbnNhY3Rpb25faWQYASABKA0SNAoGcmVzdWx0GAIgASgOMiQubWVzaHRhc3RpYy5TZXJpYWxIYWxSZXNwb25zZS5SZXN1bHQSDQoFdmFsdWUYAyABKA0SDAoEZGF0YRgEIAEoDBINCgVlcnJvchgFIAEoCSI9CgZSZXN1bHQSBgoCT0sQABIJCgVFUlJPUhABEg8KC0JBRF9SRVFVRVNUEAISDwoLVU5TVVBQT1JURUQQA0JfChRvcmcubWVzaHRhc3RpYy5wcm90b0IJU2VyaWFsSGFsWiJnaXRodWIuY29tL21lc2h0YXN0aWMvZ28vZ2VuZXJhdGVkqgIUTWVzaHRhc3RpYy5Qcm90b2J1ZnO6AgBiBnByb3RvMw");
/**
* @generated from message meshtastic.SerialHalCommand
*/
export type SerialHalCommand = Message<"meshtastic.SerialHalCommand"> & {
/**
* Host-assigned request id. Replies echo this id back in
* SerialHalResponse.transaction_id.
*
* @generated from field: uint32 transaction_id = 1;
*/
transactionId: number;
/**
* @generated from field: meshtastic.SerialHalCommand.Type type = 2;
*/
type: SerialHalCommand_Type;
/**
* @generated from field: uint32 pin = 3;
*/
pin: number;
/**
* @generated from field: uint32 value = 4;
*/
value: number;
/**
* @generated from field: uint32 mode = 5;
*/
mode: number;
/**
* @generated from field: bytes data = 6;
*/
data: Uint8Array;
};
/**
* Describes the message meshtastic.SerialHalCommand.
* Use `create(SerialHalCommandSchema)` to create a new message.
*/
export const SerialHalCommandSchema: GenMessage<SerialHalCommand> = /*@__PURE__*/
messageDesc(file_meshtastic_serial_hal, 0);
/**
* @generated from enum meshtastic.SerialHalCommand.Type
*/
export enum SerialHalCommand_Type {
/**
* @generated from enum value: UNSET = 0;
*/
UNSET = 0,
/**
* @generated from enum value: PIN_MODE = 1;
*/
PIN_MODE = 1,
/**
* @generated from enum value: DIGITAL_WRITE = 2;
*/
DIGITAL_WRITE = 2,
/**
* @generated from enum value: DIGITAL_READ = 3;
*/
DIGITAL_READ = 3,
/**
* @generated from enum value: ATTACH_INTERRUPT = 4;
*/
ATTACH_INTERRUPT = 4,
/**
* @generated from enum value: DETACH_INTERRUPT = 5;
*/
DETACH_INTERRUPT = 5,
/**
* @generated from enum value: SPI_TRANSFER = 6;
*/
SPI_TRANSFER = 6,
/**
* @generated from enum value: NOOP = 7;
*/
NOOP = 7,
}
/**
* Describes the enum meshtastic.SerialHalCommand.Type.
*/
export const SerialHalCommand_TypeSchema: GenEnum<SerialHalCommand_Type> = /*@__PURE__*/
enumDesc(file_meshtastic_serial_hal, 0, 0);
/**
* @generated from message meshtastic.SerialHalResponse
*/
export type SerialHalResponse = Message<"meshtastic.SerialHalResponse"> & {
/**
* Matches the originating SerialHalCommand.transaction_id for normal
* request/response traffic.
*
* A value of 0 indicates an unsolicited interrupt notification generated by
* the device. In that case, the host should interpret value as the GPIO pin
* that triggered.
*
* @generated from field: uint32 transaction_id = 1;
*/
transactionId: number;
/**
* @generated from field: meshtastic.SerialHalResponse.Result result = 2;
*/
result: SerialHalResponse_Result;
/**
* Used by DIGITAL_READ replies and interrupt notifications. For interrupt
* notifications (transaction_id == 0), this carries the pin number.
*
* @generated from field: uint32 value = 3;
*/
value: number;
/**
* @generated from field: bytes data = 4;
*/
data: Uint8Array;
/**
* @generated from field: string error = 5;
*/
error: string;
};
/**
* Describes the message meshtastic.SerialHalResponse.
* Use `create(SerialHalResponseSchema)` to create a new message.
*/
export const SerialHalResponseSchema: GenMessage<SerialHalResponse> = /*@__PURE__*/
messageDesc(file_meshtastic_serial_hal, 1);
/**
* @generated from enum meshtastic.SerialHalResponse.Result
*/
export enum SerialHalResponse_Result {
/**
* @generated from enum value: OK = 0;
*/
OK = 0,
/**
* @generated from enum value: ERROR = 1;
*/
ERROR = 1,
/**
* @generated from enum value: BAD_REQUEST = 2;
*/
BAD_REQUEST = 2,
/**
* @generated from enum value: UNSUPPORTED = 3;
*/
UNSUPPORTED = 3,
}
/**
* Describes the enum meshtastic.SerialHalResponse.Result.
*/
export const SerialHalResponse_ResultSchema: GenEnum<SerialHalResponse_Result> = /*@__PURE__*/
enumDesc(file_meshtastic_serial_hal, 1, 0);
@@ -0,0 +1,384 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/storeforward.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/storeforward.proto.
*/
export const file_meshtastic_storeforward: GenFile = /*@__PURE__*/
fileDesc("Ch1tZXNodGFzdGljL3N0b3JlZm9yd2FyZC5wcm90bxIKbWVzaHRhc3RpYyKcBwoPU3RvcmVBbmRGb3J3YXJkEjcKAnJyGAEgASgOMisubWVzaHRhc3RpYy5TdG9yZUFuZEZvcndhcmQuUmVxdWVzdFJlc3BvbnNlEjcKBXN0YXRzGAIgASgLMiYubWVzaHRhc3RpYy5TdG9yZUFuZEZvcndhcmQuU3RhdGlzdGljc0gAEjYKB2hpc3RvcnkYAyABKAsyIy5tZXNodGFzdGljLlN0b3JlQW5kRm9yd2FyZC5IaXN0b3J5SAASOgoJaGVhcnRiZWF0GAQgASgLMiUubWVzaHRhc3RpYy5TdG9yZUFuZEZvcndhcmQuSGVhcnRiZWF0SAASDgoEdGV4dBgFIAEoDEgAGs0BCgpTdGF0aXN0aWNzEhYKDm1lc3NhZ2VzX3RvdGFsGAEgASgNEhYKDm1lc3NhZ2VzX3NhdmVkGAIgASgNEhQKDG1lc3NhZ2VzX21heBgDIAEoDRIPCgd1cF90aW1lGAQgASgNEhAKCHJlcXVlc3RzGAUgASgNEhgKEHJlcXVlc3RzX2hpc3RvcnkYBiABKA0SEQoJaGVhcnRiZWF0GAcgASgIEhIKCnJldHVybl9tYXgYCCABKA0SFQoNcmV0dXJuX3dpbmRvdxgJIAEoDRpJCgdIaXN0b3J5EhgKEGhpc3RvcnlfbWVzc2FnZXMYASABKA0SDgoGd2luZG93GAIgASgNEhQKDGxhc3RfcmVxdWVzdBgDIAEoDRouCglIZWFydGJlYXQSDgoGcGVyaW9kGAEgASgNEhEKCXNlY29uZGFyeRgCIAEoDSK8AgoPUmVxdWVzdFJlc3BvbnNlEgkKBVVOU0VUEAASEAoMUk9VVEVSX0VSUk9SEAESFAoQUk9VVEVSX0hFQVJUQkVBVBACEg8KC1JPVVRFUl9QSU5HEAMSDwoLUk9VVEVSX1BPTkcQBBIPCgtST1VURVJfQlVTWRAFEhIKDlJPVVRFUl9ISVNUT1JZEAYSEAoMUk9VVEVSX1NUQVRTEAcSFgoSUk9VVEVSX1RFWFRfRElSRUNUEAgSGQoVUk9VVEVSX1RFWFRfQlJPQURDQVNUEAkSEAoMQ0xJRU5UX0VSUk9SEEASEgoOQ0xJRU5UX0hJU1RPUlkQQRIQCgxDTElFTlRfU1RBVFMQQhIPCgtDTElFTlRfUElORxBDEg8KC0NMSUVOVF9QT05HEEQSEAoMQ0xJRU5UX0FCT1JUEGpCCQoHdmFyaWFudEJrChRvcmcubWVzaHRhc3RpYy5wcm90b0IVU3RvcmVBbmRGb3J3YXJkUHJvdG9zWiJnaXRodWIuY29tL21lc2h0YXN0aWMvZ28vZ2VuZXJhdGVkqgIUTWVzaHRhc3RpYy5Qcm90b2J1ZnO6AgBiBnByb3RvMw");
/**
*
* TODO: REPLACE
*
* @generated from message meshtastic.StoreAndForward
*/
export type StoreAndForward = Message<"meshtastic.StoreAndForward"> & {
/**
*
* TODO: REPLACE
*
* @generated from field: meshtastic.StoreAndForward.RequestResponse rr = 1;
*/
rr: StoreAndForward_RequestResponse;
/**
*
* TODO: REPLACE
*
* @generated from oneof meshtastic.StoreAndForward.variant
*/
variant: {
/**
*
* TODO: REPLACE
*
* @generated from field: meshtastic.StoreAndForward.Statistics stats = 2;
*/
value: StoreAndForward_Statistics;
case: "stats";
} | {
/**
*
* TODO: REPLACE
*
* @generated from field: meshtastic.StoreAndForward.History history = 3;
*/
value: StoreAndForward_History;
case: "history";
} | {
/**
*
* TODO: REPLACE
*
* @generated from field: meshtastic.StoreAndForward.Heartbeat heartbeat = 4;
*/
value: StoreAndForward_Heartbeat;
case: "heartbeat";
} | {
/**
*
* Text from history message.
*
* @generated from field: bytes text = 5;
*/
value: Uint8Array;
case: "text";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message meshtastic.StoreAndForward.
* Use `create(StoreAndForwardSchema)` to create a new message.
*/
export const StoreAndForwardSchema: GenMessage<StoreAndForward> = /*@__PURE__*/
messageDesc(file_meshtastic_storeforward, 0);
/**
*
* TODO: REPLACE
*
* @generated from message meshtastic.StoreAndForward.Statistics
*/
export type StoreAndForward_Statistics = Message<"meshtastic.StoreAndForward.Statistics"> & {
/**
*
* Number of messages we have ever seen
*
* @generated from field: uint32 messages_total = 1;
*/
messagesTotal: number;
/**
*
* Number of messages we have currently saved our history.
*
* @generated from field: uint32 messages_saved = 2;
*/
messagesSaved: number;
/**
*
* Maximum number of messages we will save
*
* @generated from field: uint32 messages_max = 3;
*/
messagesMax: number;
/**
*
* Router uptime in seconds
*
* @generated from field: uint32 up_time = 4;
*/
upTime: number;
/**
*
* Number of times any client sent a request to the S&F.
*
* @generated from field: uint32 requests = 5;
*/
requests: number;
/**
*
* Number of times the history was requested.
*
* @generated from field: uint32 requests_history = 6;
*/
requestsHistory: number;
/**
*
* Is the heartbeat enabled on the server?
*
* @generated from field: bool heartbeat = 7;
*/
heartbeat: boolean;
/**
*
* Maximum number of messages the server will return.
*
* @generated from field: uint32 return_max = 8;
*/
returnMax: number;
/**
*
* Maximum history window in minutes the server will return messages from.
*
* @generated from field: uint32 return_window = 9;
*/
returnWindow: number;
};
/**
* Describes the message meshtastic.StoreAndForward.Statistics.
* Use `create(StoreAndForward_StatisticsSchema)` to create a new message.
*/
export const StoreAndForward_StatisticsSchema: GenMessage<StoreAndForward_Statistics> = /*@__PURE__*/
messageDesc(file_meshtastic_storeforward, 0, 0);
/**
*
* TODO: REPLACE
*
* @generated from message meshtastic.StoreAndForward.History
*/
export type StoreAndForward_History = Message<"meshtastic.StoreAndForward.History"> & {
/**
*
* Number of that will be sent to the client
*
* @generated from field: uint32 history_messages = 1;
*/
historyMessages: number;
/**
*
* The window of messages that was used to filter the history client requested
*
* @generated from field: uint32 window = 2;
*/
window: number;
/**
*
* Index in the packet history of the last message sent in a previous request to the server.
* Will be sent to the client before sending the history and can be set in a subsequent request to avoid getting packets the server already sent to the client.
*
* @generated from field: uint32 last_request = 3;
*/
lastRequest: number;
};
/**
* Describes the message meshtastic.StoreAndForward.History.
* Use `create(StoreAndForward_HistorySchema)` to create a new message.
*/
export const StoreAndForward_HistorySchema: GenMessage<StoreAndForward_History> = /*@__PURE__*/
messageDesc(file_meshtastic_storeforward, 0, 1);
/**
*
* TODO: REPLACE
*
* @generated from message meshtastic.StoreAndForward.Heartbeat
*/
export type StoreAndForward_Heartbeat = Message<"meshtastic.StoreAndForward.Heartbeat"> & {
/**
*
* Period in seconds that the heartbeat is sent out that will be sent to the client
*
* @generated from field: uint32 period = 1;
*/
period: number;
/**
*
* If set, this is not the primary Store & Forward router on the mesh
*
* @generated from field: uint32 secondary = 2;
*/
secondary: number;
};
/**
* Describes the message meshtastic.StoreAndForward.Heartbeat.
* Use `create(StoreAndForward_HeartbeatSchema)` to create a new message.
*/
export const StoreAndForward_HeartbeatSchema: GenMessage<StoreAndForward_Heartbeat> = /*@__PURE__*/
messageDesc(file_meshtastic_storeforward, 0, 2);
/**
*
* 001 - 063 = From Router
* 064 - 127 = From Client
*
* @generated from enum meshtastic.StoreAndForward.RequestResponse
*/
export enum StoreAndForward_RequestResponse {
/**
*
* Unset/unused
*
* @generated from enum value: UNSET = 0;
*/
UNSET = 0,
/**
*
* Router is an in error state.
*
* @generated from enum value: ROUTER_ERROR = 1;
*/
ROUTER_ERROR = 1,
/**
*
* Router heartbeat
*
* @generated from enum value: ROUTER_HEARTBEAT = 2;
*/
ROUTER_HEARTBEAT = 2,
/**
*
* Router has requested the client respond. This can work as a
* "are you there" message.
*
* @generated from enum value: ROUTER_PING = 3;
*/
ROUTER_PING = 3,
/**
*
* The response to a "Ping"
*
* @generated from enum value: ROUTER_PONG = 4;
*/
ROUTER_PONG = 4,
/**
*
* Router is currently busy. Please try again later.
*
* @generated from enum value: ROUTER_BUSY = 5;
*/
ROUTER_BUSY = 5,
/**
*
* Router is responding to a request for history.
*
* @generated from enum value: ROUTER_HISTORY = 6;
*/
ROUTER_HISTORY = 6,
/**
*
* Router is responding to a request for stats.
*
* @generated from enum value: ROUTER_STATS = 7;
*/
ROUTER_STATS = 7,
/**
*
* Router sends a text message from its history that was a direct message.
*
* @generated from enum value: ROUTER_TEXT_DIRECT = 8;
*/
ROUTER_TEXT_DIRECT = 8,
/**
*
* Router sends a text message from its history that was a broadcast.
*
* @generated from enum value: ROUTER_TEXT_BROADCAST = 9;
*/
ROUTER_TEXT_BROADCAST = 9,
/**
*
* Client is an in error state.
*
* @generated from enum value: CLIENT_ERROR = 64;
*/
CLIENT_ERROR = 64,
/**
*
* Client has requested a replay from the router.
*
* @generated from enum value: CLIENT_HISTORY = 65;
*/
CLIENT_HISTORY = 65,
/**
*
* Client has requested stats from the router.
*
* @generated from enum value: CLIENT_STATS = 66;
*/
CLIENT_STATS = 66,
/**
*
* Client has requested the router respond. This can work as a
* "are you there" message.
*
* @generated from enum value: CLIENT_PING = 67;
*/
CLIENT_PING = 67,
/**
*
* The response to a "Ping"
*
* @generated from enum value: CLIENT_PONG = 68;
*/
CLIENT_PONG = 68,
/**
*
* Client has requested that the router abort processing the client's request
*
* @generated from enum value: CLIENT_ABORT = 106;
*/
CLIENT_ABORT = 106,
}
/**
* Describes the enum meshtastic.StoreAndForward.RequestResponse.
*/
export const StoreAndForward_RequestResponseSchema: GenEnum<StoreAndForward_RequestResponse> = /*@__PURE__*/
enumDesc(file_meshtastic_storeforward, 0, 0);
File diff suppressed because one or more lines are too long
@@ -0,0 +1,97 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file meshtastic/xmodem.proto (package meshtastic, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file meshtastic/xmodem.proto.
*/
export const file_meshtastic_xmodem: GenFile = /*@__PURE__*/
fileDesc("ChdtZXNodGFzdGljL3htb2RlbS5wcm90bxIKbWVzaHRhc3RpYyK2AQoGWE1vZGVtEisKB2NvbnRyb2wYASABKA4yGi5tZXNodGFzdGljLlhNb2RlbS5Db250cm9sEgsKA3NlcRgCIAEoDRINCgVjcmMxNhgDIAEoDRIOCgZidWZmZXIYBCABKAwiUwoHQ29udHJvbBIHCgNOVUwQABIHCgNTT0gQARIHCgNTVFgQAhIHCgNFT1QQBBIHCgNBQ0sQBhIHCgNOQUsQFRIHCgNDQU4QGBIJCgVDVFJMWhAaQmIKFG9yZy5tZXNodGFzdGljLnByb3RvQgxYbW9kZW1Qcm90b3NaImdpdGh1Yi5jb20vbWVzaHRhc3RpYy9nby9nZW5lcmF0ZWSqAhRNZXNodGFzdGljLlByb3RvYnVmc7oCAGIGcHJvdG8z");
/**
* @generated from message meshtastic.XModem
*/
export type XModem = Message<"meshtastic.XModem"> & {
/**
* @generated from field: meshtastic.XModem.Control control = 1;
*/
control: XModem_Control;
/**
* @generated from field: uint32 seq = 2;
*/
seq: number;
/**
* @generated from field: uint32 crc16 = 3;
*/
crc16: number;
/**
* @generated from field: bytes buffer = 4;
*/
buffer: Uint8Array;
};
/**
* Describes the message meshtastic.XModem.
* Use `create(XModemSchema)` to create a new message.
*/
export const XModemSchema: GenMessage<XModem> = /*@__PURE__*/
messageDesc(file_meshtastic_xmodem, 0);
/**
* @generated from enum meshtastic.XModem.Control
*/
export enum XModem_Control {
/**
* @generated from enum value: NUL = 0;
*/
NUL = 0,
/**
* @generated from enum value: SOH = 1;
*/
SOH = 1,
/**
* @generated from enum value: STX = 2;
*/
STX = 2,
/**
* @generated from enum value: EOT = 4;
*/
EOT = 4,
/**
* @generated from enum value: ACK = 6;
*/
ACK = 6,
/**
* @generated from enum value: NAK = 21;
*/
NAK = 21,
/**
* @generated from enum value: CAN = 24;
*/
CAN = 24,
/**
* @generated from enum value: CTRLZ = 26;
*/
CTRLZ = 26,
}
/**
* Describes the enum meshtastic.XModem.Control.
*/
export const XModem_ControlSchema: GenEnum<XModem_Control> = /*@__PURE__*/
enumDesc(file_meshtastic_xmodem, 0, 0);
+463
View File
@@ -0,0 +1,463 @@
// Custom options for defining:
// - Maximum size of string/bytes
// - Maximum number of elements in array
//
// These are used by nanopb to generate statically allocable structures
// for memory-limited environments.
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file nanopb.proto (syntax proto2)
/* eslint-disable */
import type { GenEnum, GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { EnumOptions, FieldDescriptorProto_Type, FieldOptions, FileOptions, MessageOptions } from "@bufbuild/protobuf/wkt";
import { file_google_protobuf_descriptor } from "@bufbuild/protobuf/wkt";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file nanopb.proto.
*/
export const file_nanopb: GenFile = /*@__PURE__*/
fileDesc("CgxuYW5vcGIucHJvdG8ipAcKDU5hbm9QQk9wdGlvbnMSEAoIbWF4X3NpemUYASABKAUSEgoKbWF4X2xlbmd0aBgOIAEoBRIRCgltYXhfY291bnQYAiABKAUSJgoIaW50X3NpemUYByABKA4yCC5JbnRTaXplOgpJU19ERUZBVUxUEiQKBHR5cGUYAyABKA4yCi5GaWVsZFR5cGU6CkZUX0RFRkFVTFQSGAoKbG9uZ19uYW1lcxgEIAEoCDoEdHJ1ZRIcCg1wYWNrZWRfc3RydWN0GAUgASgIOgVmYWxzZRIaCgtwYWNrZWRfZW51bRgKIAEoCDoFZmFsc2USGwoMc2tpcF9tZXNzYWdlGAYgASgIOgVmYWxzZRIYCglub191bmlvbnMYCCABKAg6BWZhbHNlEg0KBW1zZ2lkGAkgASgNEh4KD2Fub255bW91c19vbmVvZhgLIAEoCDoFZmFsc2USFQoGcHJvdG8zGAwgASgIOgVmYWxzZRIjChRwcm90bzNfc2luZ3VsYXJfbXNncxgVIAEoCDoFZmFsc2USHQoOZW51bV90b19zdHJpbmcYDSABKAg6BWZhbHNlEhsKDGZpeGVkX2xlbmd0aBgPIAEoCDoFZmFsc2USGgoLZml4ZWRfY291bnQYECABKAg6BWZhbHNlEh4KD3N1Ym1zZ19jYWxsYmFjaxgWIAEoCDoFZmFsc2USLwoMbWFuZ2xlX25hbWVzGBEgASgOMhEuVHlwZW5hbWVNYW5nbGluZzoGTV9OT05FEigKEWNhbGxiYWNrX2RhdGF0eXBlGBIgASgJOg1wYl9jYWxsYmFja190EjQKEWNhbGxiYWNrX2Z1bmN0aW9uGBMgASgJOhlwYl9kZWZhdWx0X2ZpZWxkX2NhbGxiYWNrEjAKDmRlc2NyaXB0b3JzaXplGBQgASgOMg8uRGVzY3JpcHRvclNpemU6B0RTX0FVVE8SGgoLZGVmYXVsdF9oYXMYFyABKAg6BWZhbHNlEg8KB2luY2x1ZGUYGCADKAkSDwoHZXhjbHVkZRgaIAMoCRIPCgdwYWNrYWdlGBkgASgJEkEKDXR5cGVfb3ZlcnJpZGUYGyABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRIZCgtzb3J0X2J5X3RhZxgcIAEoCDoEdHJ1ZRIuCg1mYWxsYmFja190eXBlGB0gASgOMgouRmllbGRUeXBlOgtGVF9DQUxMQkFDSyppCglGaWVsZFR5cGUSDgoKRlRfREVGQVVMVBAAEg8KC0ZUX0NBTExCQUNLEAESDgoKRlRfUE9JTlRFUhAEEg0KCUZUX1NUQVRJQxACEg0KCUZUX0lHTk9SRRADEg0KCUZUX0lOTElORRAFKkQKB0ludFNpemUSDgoKSVNfREVGQVVMVBAAEggKBElTXzgQCBIJCgVJU18xNhAQEgkKBUlTXzMyECASCQoFSVNfNjQQQCpaChBUeXBlbmFtZU1hbmdsaW5nEgoKBk1fTk9ORRAAEhMKD01fU1RSSVBfUEFDS0FHRRABEg0KCU1fRkxBVFRFThACEhYKEk1fUEFDS0FHRV9JTklUSUFMUxADKkUKDkRlc2NyaXB0b3JTaXplEgsKB0RTX0FVVE8QABIICgREU18xEAESCAoERFNfMhACEggKBERTXzQQBBIICgREU184EAg6VAoObmFub3BiX2ZpbGVvcHQSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMY8gcgASgLMg4uTmFub1BCT3B0aW9uc1INbmFub3BiRmlsZW9wdDpVCg1uYW5vcGJfbXNnb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGPIHIAEoCzIOLk5hbm9QQk9wdGlvbnNSDG5hbm9wYk1zZ29wdDpUCg5uYW5vcGJfZW51bW9wdBIcLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucxjyByABKAsyDi5OYW5vUEJPcHRpb25zUg1uYW5vcGJFbnVtb3B0OkYKBm5hbm9wYhIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMY8gcgASgLMg4uTmFub1BCT3B0aW9uc1IGbmFub3BiQj4KGGZpLmthcHNpLmtvdGkuanBhLm5hbm9wYloiZ2l0aHViLmNvbS9tZXNodGFzdGljL2dvL2dlbmVyYXRlZA", [file_google_protobuf_descriptor]);
/**
* This is the inner options message, which basically defines options for
* a field. When it is used in message or file scope, it applies to all
* fields.
*
* @generated from message NanoPBOptions
*/
export type NanoPBOptions = Message<"NanoPBOptions"> & {
/**
* Allocated size for 'bytes' and 'string' fields.
* For string fields, this should include the space for null terminator.
*
* @generated from field: optional int32 max_size = 1;
*/
maxSize: number;
/**
* Maximum length for 'string' fields. Setting this is equivalent
* to setting max_size to a value of length+1.
*
* @generated from field: optional int32 max_length = 14;
*/
maxLength: number;
/**
* Allocated number of entries in arrays ('repeated' fields)
*
* @generated from field: optional int32 max_count = 2;
*/
maxCount: number;
/**
* Size of integer fields. Can save some memory if you don't need
* full 32 bits for the value.
*
* @generated from field: optional IntSize int_size = 7 [default = IS_DEFAULT];
*/
intSize: IntSize;
/**
* Force type of field (callback or static allocation)
*
* @generated from field: optional FieldType type = 3 [default = FT_DEFAULT];
*/
type: FieldType;
/**
* Use long names for enums, i.e. EnumName_EnumValue.
*
* @generated from field: optional bool long_names = 4 [default = true];
*/
longNames: boolean;
/**
* Add 'packed' attribute to generated structs.
* Note: this cannot be used on CPUs that break on unaligned
* accesses to variables.
*
* @generated from field: optional bool packed_struct = 5 [default = false];
*/
packedStruct: boolean;
/**
* Add 'packed' attribute to generated enums.
*
* @generated from field: optional bool packed_enum = 10 [default = false];
*/
packedEnum: boolean;
/**
* Skip this message
*
* @generated from field: optional bool skip_message = 6 [default = false];
*/
skipMessage: boolean;
/**
* Generate oneof fields as normal optional fields instead of union.
*
* @generated from field: optional bool no_unions = 8 [default = false];
*/
noUnions: boolean;
/**
* integer type tag for a message
*
* @generated from field: optional uint32 msgid = 9;
*/
msgid: number;
/**
* decode oneof as anonymous union
*
* @generated from field: optional bool anonymous_oneof = 11 [default = false];
*/
anonymousOneof: boolean;
/**
* Proto3 singular field does not generate a "has_" flag
*
* @generated from field: optional bool proto3 = 12 [default = false];
*/
proto3: boolean;
/**
* Force proto3 messages to have no "has_" flag.
* This was default behavior until nanopb-0.4.0.
*
* @generated from field: optional bool proto3_singular_msgs = 21 [default = false];
*/
proto3SingularMsgs: boolean;
/**
* Generate an enum->string mapping function (can take up lots of space).
*
* @generated from field: optional bool enum_to_string = 13 [default = false];
*/
enumToString: boolean;
/**
* Generate bytes arrays with fixed length
*
* @generated from field: optional bool fixed_length = 15 [default = false];
*/
fixedLength: boolean;
/**
* Generate repeated field with fixed count
*
* @generated from field: optional bool fixed_count = 16 [default = false];
*/
fixedCount: boolean;
/**
* Generate message-level callback that is called before decoding submessages.
* This can be used to set callback fields for submsgs inside oneofs.
*
* @generated from field: optional bool submsg_callback = 22 [default = false];
*/
submsgCallback: boolean;
/**
* Shorten or remove package names from type names.
* This option applies only on the file level.
*
* @generated from field: optional TypenameMangling mangle_names = 17 [default = M_NONE];
*/
mangleNames: TypenameMangling;
/**
* Data type for storage associated with callback fields.
*
* @generated from field: optional string callback_datatype = 18 [default = "pb_callback_t"];
*/
callbackDatatype: string;
/**
* Callback function used for encoding and decoding.
* Prior to nanopb-0.4.0, the callback was specified in per-field pb_callback_t
* structure. This is still supported, but does not work inside e.g. oneof or pointer
* fields. Instead, a new method allows specifying a per-message callback that
* will be called for all callback fields in a message type.
*
* @generated from field: optional string callback_function = 19 [default = "pb_default_field_callback"];
*/
callbackFunction: string;
/**
* Select the size of field descriptors. This option has to be defined
* for the whole message, not per-field. Usually automatic selection is
* ok, but if it results in compilation errors you can increase the field
* size here.
*
* @generated from field: optional DescriptorSize descriptorsize = 20 [default = DS_AUTO];
*/
descriptorsize: DescriptorSize;
/**
* Set default value for has_ fields.
*
* @generated from field: optional bool default_has = 23 [default = false];
*/
defaultHas: boolean;
/**
* Extra files to include in generated `.pb.h`
*
* @generated from field: repeated string include = 24;
*/
include: string[];
/**
* Automatic includes to exclude from generated `.pb.h`
* Same as nanopb_generator.py command line flag -x.
*
* @generated from field: repeated string exclude = 26;
*/
exclude: string[];
/**
* Package name that applies only for nanopb.
*
* @generated from field: optional string package = 25;
*/
package: string;
/**
* Override type of the field in generated C code. Only to be used with related field types
*
* @generated from field: optional google.protobuf.FieldDescriptorProto.Type type_override = 27;
*/
typeOverride: FieldDescriptorProto_Type;
/**
* Due to historical reasons, nanopb orders fields in structs by their tag number
* instead of the order in .proto. Set this to false to keep the .proto order.
* The default value will probably change to false in nanopb-0.5.0.
*
* @generated from field: optional bool sort_by_tag = 28 [default = true];
*/
sortByTag: boolean;
/**
* Set the FT_DEFAULT field conversion strategy.
* A field that can become a static member of a c struct (e.g. int, bool, etc)
* will be a a static field.
* Fields with dynamic length are converted to either a pointer or a callback.
*
* @generated from field: optional FieldType fallback_type = 29 [default = FT_CALLBACK];
*/
fallbackType: FieldType;
};
/**
* Describes the message NanoPBOptions.
* Use `create(NanoPBOptionsSchema)` to create a new message.
*/
export const NanoPBOptionsSchema: GenMessage<NanoPBOptions> = /*@__PURE__*/
messageDesc(file_nanopb, 0);
/**
* @generated from enum FieldType
*/
export enum FieldType {
/**
* Automatically decide field type, generate static field if possible.
*
* @generated from enum value: FT_DEFAULT = 0;
*/
FT_DEFAULT = 0,
/**
* Always generate a callback field.
*
* @generated from enum value: FT_CALLBACK = 1;
*/
FT_CALLBACK = 1,
/**
* Always generate a dynamically allocated field.
*
* @generated from enum value: FT_POINTER = 4;
*/
FT_POINTER = 4,
/**
* Generate a static field or raise an exception if not possible.
*
* @generated from enum value: FT_STATIC = 2;
*/
FT_STATIC = 2,
/**
* Ignore the field completely.
*
* @generated from enum value: FT_IGNORE = 3;
*/
FT_IGNORE = 3,
/**
* Legacy option, use the separate 'fixed_length' option instead
*
* @generated from enum value: FT_INLINE = 5;
*/
FT_INLINE = 5,
}
/**
* Describes the enum FieldType.
*/
export const FieldTypeSchema: GenEnum<FieldType> = /*@__PURE__*/
enumDesc(file_nanopb, 0);
/**
* @generated from enum IntSize
*/
export enum IntSize {
/**
* Default, 32/64bit based on type in .proto
*
* @generated from enum value: IS_DEFAULT = 0;
*/
IS_DEFAULT = 0,
/**
* @generated from enum value: IS_8 = 8;
*/
IS_8 = 8,
/**
* @generated from enum value: IS_16 = 16;
*/
IS_16 = 16,
/**
* @generated from enum value: IS_32 = 32;
*/
IS_32 = 32,
/**
* @generated from enum value: IS_64 = 64;
*/
IS_64 = 64,
}
/**
* Describes the enum IntSize.
*/
export const IntSizeSchema: GenEnum<IntSize> = /*@__PURE__*/
enumDesc(file_nanopb, 1);
/**
* @generated from enum TypenameMangling
*/
export enum TypenameMangling {
/**
* Default, no typename mangling
*
* @generated from enum value: M_NONE = 0;
*/
M_NONE = 0,
/**
* Strip current package name
*
* @generated from enum value: M_STRIP_PACKAGE = 1;
*/
M_STRIP_PACKAGE = 1,
/**
* Only use last path component
*
* @generated from enum value: M_FLATTEN = 2;
*/
M_FLATTEN = 2,
/**
* Replace the package name by the initials
*
* @generated from enum value: M_PACKAGE_INITIALS = 3;
*/
M_PACKAGE_INITIALS = 3,
}
/**
* Describes the enum TypenameMangling.
*/
export const TypenameManglingSchema: GenEnum<TypenameMangling> = /*@__PURE__*/
enumDesc(file_nanopb, 2);
/**
* @generated from enum DescriptorSize
*/
export enum DescriptorSize {
/**
* Select minimal size based on field type
*
* @generated from enum value: DS_AUTO = 0;
*/
DS_AUTO = 0,
/**
* 1 word; up to 15 byte fields, no arrays
*
* @generated from enum value: DS_1 = 1;
*/
DS_1 = 1,
/**
* 2 words; up to 4095 byte fields, 4095 entry arrays
*
* @generated from enum value: DS_2 = 2;
*/
DS_2 = 2,
/**
* 4 words; up to 2^32-1 byte fields, 2^16-1 entry arrays
*
* @generated from enum value: DS_4 = 4;
*/
DS_4 = 4,
/**
* 8 words; up to 2^32-1 entry arrays
*
* @generated from enum value: DS_8 = 8;
*/
DS_8 = 8,
}
/**
* Describes the enum DescriptorSize.
*/
export const DescriptorSizeSchema: GenEnum<DescriptorSize> = /*@__PURE__*/
enumDesc(file_nanopb, 3);
/**
* @generated from extension: optional NanoPBOptions nanopb_fileopt = 1010;
*/
export const nanopb_fileopt: GenExtension<FileOptions, NanoPBOptions> = /*@__PURE__*/
extDesc(file_nanopb, 0);
/**
* @generated from extension: optional NanoPBOptions nanopb_msgopt = 1010;
*/
export const nanopb_msgopt: GenExtension<MessageOptions, NanoPBOptions> = /*@__PURE__*/
extDesc(file_nanopb, 1);
/**
* @generated from extension: optional NanoPBOptions nanopb_enumopt = 1010;
*/
export const nanopb_enumopt: GenExtension<EnumOptions, NanoPBOptions> = /*@__PURE__*/
extDesc(file_nanopb, 2);
/**
* @generated from extension: optional NanoPBOptions nanopb = 1010;
*/
export const nanopb: GenExtension<FieldOptions, NanoPBOptions> = /*@__PURE__*/
extDesc(file_nanopb, 3);
+20 -20
View File
@@ -1,20 +1,20 @@
export * as Admin from "./dist/admin_pb.ts";
export * as AppOnly from "./dist/apponly_pb.ts";
export * as ATAK from "./dist/atak_pb.ts";
export * as CannedMessages from "./dist/cannedmessages_pb.ts";
export * as Channel from "./dist/channel_pb.ts";
export * as ClientOnly from "./dist/clientonly_pb.ts";
export * as Config from "./dist/config_pb.ts";
export * as ConnectionStatus from "./dist/connection_status_pb.ts";
export * as LocalOnly from "./dist/localonly_pb.ts";
export * as Mesh from "./dist/mesh_pb.ts";
export * as ModuleConfig from "./dist/module_config_pb.ts";
export * as Mqtt from "./dist/mqtt_pb.ts";
export * as PaxCount from "./dist/paxcount_pb.ts";
export * as Portnums from "./dist/portnums_pb.ts";
export * as PowerMon from "./dist/powermon_pb.ts";
export * as RemoteHardware from "./dist/remote_hardware_pb.ts";
export * as Rtttl from "./dist/rtttl_pb.ts";
export * as StoreForward from "./dist/storeforward_pb.ts";
export * as Telemetry from "./dist/telemetry_pb.ts";
export * as Xmodem from "./dist/xmodem_pb.ts";
export * as Admin from "./dist/meshtastic/admin_pb.ts";
export * as AppOnly from "./dist/meshtastic/apponly_pb.ts";
export * as ATAK from "./dist/meshtastic/atak_pb.ts";
export * as CannedMessages from "./dist/meshtastic/cannedmessages_pb.ts";
export * as Channel from "./dist/meshtastic/channel_pb.ts";
export * as ClientOnly from "./dist/meshtastic/clientonly_pb.ts";
export * as Config from "./dist/meshtastic/config_pb.ts";
export * as ConnectionStatus from "./dist/meshtastic/connection_status_pb.ts";
export * as LocalOnly from "./dist/meshtastic/localonly_pb.ts";
export * as Mesh from "./dist/meshtastic/mesh_pb.ts";
export * as ModuleConfig from "./dist/meshtastic/module_config_pb.ts";
export * as Mqtt from "./dist/meshtastic/mqtt_pb.ts";
export * as PaxCount from "./dist/meshtastic/paxcount_pb.ts";
export * as Portnums from "./dist/meshtastic/portnums_pb.ts";
export * as PowerMon from "./dist/meshtastic/powermon_pb.ts";
export * as RemoteHardware from "./dist/meshtastic/remote_hardware_pb.ts";
export * as Rtttl from "./dist/meshtastic/rtttl_pb.ts";
export * as StoreForward from "./dist/meshtastic/storeforward_pb.ts";
export * as Telemetry from "./dist/meshtastic/telemetry_pb.ts";
export * as Xmodem from "./dist/meshtastic/xmodem_pb.ts";
-13
View File
@@ -1,13 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxfmt/configuration_schema.json",
"useTabs": false,
"tabWidth": 2,
"printWidth": 80,
"ignorePatterns": [
"node_modules",
"dist",
"protobufs",
"**/locales/*-*/*.json",
"**/packages/ui/"
]
}
-26
View File
@@ -1,26 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxlint/configuration_schema.json",
"plugins": ["react", "react-perf", "jsx-a11y", "typescript", "import"],
"rules": {
"no-debugger": "error",
"@typescript-eslint/no-explicit-any": "error",
"@typescript-eslint/no-unused-vars": "error",
"import/no-unused-modules": "error"
},
"ignorePatterns": [
"node_modules",
"dist",
"protobufs",
"**/locales/*-*/*.json",
"**/packages/ui/"
],
"overrides": [
{
"files": ["**/*.test.ts", "**/*.test.tsx", "**/__tests__/**/*.{ts,tsx}"],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-non-null-assertion": "off"
}
}
]
}
-150
View File
@@ -1,150 +0,0 @@
# Contributing to Meshtastic Web
Thank you for your interest in contributing to **Meshtastic Web**! 🎉
We welcome all contributions—whether it’s fixing a typo, improving documentation, adding new features, or reporting bugs. This document outlines how to get started and the conventions we follow.
---
## 📋 Code of Conduct
We follow the [Meshtastic Code of Conduct](https://meshtastic.org/docs/legal/conduct/).
Please make sure you are familiar with it before contributing.
---
## 🚀 Getting Started
Before making changes, please take some time to explore the repository and its monorepo structure.
Understanding how the packages are organized will make it much easier to contribute effectively.
[Meshtastic Web](https://github.com/meshtastic/web/)
### Prerequisites
- [Node.js](https://nodejs.org/) (v22 or later)
- [pnpm](https://pnpm.io/) (v10.14.x or later)
- Git
### Installation
Clone the repo and install dependencies:
```bash
git clone https://github.com/meshtastic/web.git meshtastic-web
cd meshtastic-web
pnpm install
```
### Development
Start the development server:
```bash
pnpm --filter @meshtastic/web dev
```
Once running, the site will be available at:
👉 **http://localhost:3000**
---
## 🗂 Repository Structure
Meshtastic Web uses a **monorepo** setup managed with **pnpm workspaces**:
```
/packages
├─ web # React frontend
├─ core # Shared types & logic
├─ transport-* # Transport layer packages
└─ ...other packages
```
---
## ✅ Contribution Workflow
1. **Fork the repo** and create your branch from `main`.
### Branch Naming
- Use [Conventional Commit](https://www.conventionalcommits.org/) style for your branch names:
```
feat/add-project-filter
fix/storage-service
chore/update-ci-cache
```
2. **Make your changes locally** and verify that the app runs as expected at `http://localhost:3000`.
3. **Commit your changes** with a descriptive commit message that follows the [Conventional Commits](https://www.conventionalcommits.org/) style.
4. **Open a Pull Request (PR)** from your fork's branch to the main repository's `main` branch on GitHub:
- Clearly describe the problem and solution.
- Reference related issues (e.g., `Fixes #123`).
- Keep PRs focused on a single feature or fix.
- Complete all fields in the PR template.
- Tag a **Meshtastic Web developer** in the PR for review.
5. **CI/CD**:
- Our GitHub Actions workflows handle builds, linting, and packaging automatically.
- All checks must pass before merge.
---
## 🌍 Internationalization (i18n)
Meshtastic Web supports multiple languages. If your changes introduce **new user-facing strings**:
- Add them to the **`en.json`** file.
- Do **not** hardcode English strings directly in components.
- This ensures they can be translated into other languages.
🔗 See these guides for more details:
- [i18n Developer Guide](https://github.com/meshtastic/web/blob/main/packages/web/CONTRIBUTING_I18N_DEVELOPER_GUIDE.md)
- [Translation Contribution Guide](https://github.com/meshtastic/web/blob/main/packages/web/CONTRIBUTING_TRANSLATIONS.md)
---
## 🧪 Testing
Tests are written with [Vitest](https://vitest.dev/).
Run all tests locally with:
```bash
pnpm --filter @meshtastic/web test
```
Please include tests for new features and bug fixes whenever possible.
---
## 📝 Commit Messages
We use **Conventional Commits**:
- `feat:` – a new feature
- `fix:` – a bug fix
- `docs:` – documentation changes
- `chore:` – maintenance, dependencies, build scripts
- `refactor:` – code restructuring without feature changes
- `test:` – adding or updating tests
- `ci:` – CI/CD changes
Example:
```
feat: add toast notification system
fix: correct caching issue in storage service
```
---
## 💡 Tips for Contributors
- Keep PRs **small, focused, and atomic**.
- Discuss larger changes with the team on [Discord](https://discord.gg/meshtastic) before starting work.
- If unsure, open a draft PR for early feedback.
---
## 🙌 Community
Contributors are the heart of Meshtastic ❤️.
Join the conversation:
- [Discord](https://discord.gg/meshtastic)
- [GitHub Discussions](https://github.com/meshtastic/web/discussions)
---
## 📜 License
By contributing, you agree that your contributions will be licensed under the [GPL-3.0-only License](../../LICENSE).
@@ -1,111 +0,0 @@
# i18n Developer Guide
When developing new components, all user-facing text must be added as an i18n
key and rendered using our translation functions. This ensures your UI can be
translated into multiple languages.
## Adding New i18n Keys
### Search Before Creating
Before adding a new key, please perform a quick search to see if one that fits
your needs already exists. Many common labels like "Save," "Cancel," "Name,"
"Description," "Loading...," or "Error" are likely already present, especially
in the common.json namespace. Reusing existing keys prevents duplication and
ensures consistency across the application. Using your code editor's search
function across the /i18n/locales/en/ directory is an effective way to do this.
### Key Naming and Structure Rules
To maintain consistency and ease of use, please adhere to the following rules
when creating new keys in the JSON files.
- **Keys are camelCase:** `exampleKey`, `anotherExampleKey`.
- **Avoid Deep Nesting:** One or two levels of nesting are acceptable for
grouping related keys (e.g., all labels for a specific menu). However, nesting
deeper than two levels should be avoided to maintain readability and ease of
use.
- **Good (1 level):**
```json
"buttons": {
"save": "Save",
"cancel": "Cancel"
}
```
- **Acceptable (2 levels):**
```json
"userMenu": {
"items": {
"profile": "Profile",
"settings": "Settings"
}
}
```
- **Avoid (3+ levels):**
```json
"userMenu": {
"items": {
"actions": {
"viewProfile": "View Profile"
}
}
}
```
- **Organize for Retrieval, Not UI Layout:** Keys should be named logically for
easy retrieval, not to mirror the layout of your component.
### Namespace Rules
We use namespaces to organize keys. All source keys are added to the English
(`en`) files located at `/packages/web/public/i18n/locales/en/`. Place your new keys in the
appropriate file based on these rules:
- `common.json`:
- All button labels (`save`, `cancel`, `submit`, etc.).
- Any text that is repeated and used throughout the application (e.g.,
"Loading...", "Error").
- `ui.json`:
- Labels and text specific to a distinct UI element or view that isn't a
dialog or a config page.
- `dialog.json`:
- All text specific to modal dialogs (titles, body text, prompts).
- `messages.json`:
- Text specifically related to the messaging interface.
- `deviceConfig.json` & `moduleConfig.json`:
- Labels and descriptions for the settings on the Device and Module
configuration pages.
## Using i18n Keys in Components
We use the `useTranslation` hook from `react-i18next` to access the translation
function, `t`.
### Default Namespaces
Our i18next configuration has fallback namespaces configured which includes
`common`, `ui`, and `dialog`. This means you **do not** need to explicitly
specify these namespaces when calling the hook. The system will automatically
check these files for your key.
For any keys in `common.json`, `ui.json`, or `dialog.json`, you can instantiate
the hook simply:
```typescript
import { useTranslation } from "react-i18next";
// In your component
const { t } = useTranslation(["messages"]);
// Usage
return <p>{t("someMessageLabel")}</p>;
```
You can also specify the namespace on a per-call basis using the options object.
This is useful if a component primarily uses a default namespace but needs a
single key from another.
```typescript
const { t } = useTranslation();
return <p>{t("someMessageLabel", { ns: "messages" })}</p>;
```
-31
View File
@@ -1,31 +0,0 @@
# Contributing Translations
Thank you for your interest in making the Meshtastic Web Client accessible to a
global audience! Your translation efforts are greatly appreciated.
## Our Translation Platform: Crowdin
We manage all our translations through a platform called
[Crowdin](https://crowdin.com/). This allows for a collaborative and streamlined
translation process. All translation work should be done on our Crowdin project,
not directly in the code repository via Pull Requests.
### How to Get Started
1. **Create a Crowdin Account:** If you don't already have one, sign up for a
free account on Crowdin.
2. **Join Our Project:** Please ask for a link to our specific Crowdin project
on the Meshtastic Discord.
3. **Request Translator Role:** Once you have an account, join the Meshtastic
Discord and notify an admin in the `#web` channel. They will grant you the
necessary permissions to start translating.
4. **Start Translating:** Once you have your role, you can begin translating the
source labels into your native language directly on the Crowdin platform.
### Language Activation
A new language will only be added to the web client and appear in the language
picker once its translation is 100% complete on Crowdin. The repository
maintainers will handle this process once the milestone is reached.
Thank you for helping us bring Meshtastic to more users around the world!
-156
View File
@@ -1,156 +0,0 @@
# Meshtastic Web
<!--Project specific badges here-->
[![CI](https://img.shields.io/github/actions/workflow/status/meshtastic/web/ci.yml?branch=main&label=actions&logo=github&color=yellow)](https://github.com/meshtastic/web/actions/workflows/ci.yml)
[![CLA assistant](https://cla-assistant.io/readme/badge/meshtastic/web)](https://cla-assistant.io/meshtastic/web)
[![Fiscal Contributors](https://opencollective.com/meshtastic/tiers/badge.svg?label=Fiscal%20Contributors&color=deeppink)](https://opencollective.com/meshtastic/)
[![Vercel](https://img.shields.io/static/v1?label=Powered%20by&message=Vercel&style=flat&logo=vercel&color=000000)](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
## Overview
Official [Meshtastic](https://meshtastic.org) web interface, that can be hosted
or served from a node
**[Hosted version](https://client.meshtastic.org)**
## Stats
![Alt](https://repobeats.axiom.co/api/embed/e5b062db986cb005d83e81724c00cb2b9cce8e4c.svg "Repobeats analytics image")
## Self-host
The client can be self hosted using the precompiled container images with an OCI
compatible runtime such as [Docker](https://www.docker.com/) or
[Podman](https://podman.io/). The base image used is
[Nginx 1.27](https://hub.docker.com/_/nginx)
```bash
# With Docker
docker run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web
#With Podman
podman run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web
```
## Release Schedule
Our release process follows these guidelines:
- **Versioning:** We use Semantic Versioning (`Major.Minor.Patch`).
- **Stable Releases:** Published around the beginning of each month (e.g.,
`v2.6.1`).
- **Pre-releases:** A pre-release is typically issued mid-month for testing and
early adoption.
- **Nightly Builds:** An experimental Docker image containing the latest
cutting-edge features and fixes is automatically built nightly from the `main`
branch.
### Nightly Builds
```bash
# With Docker
docker run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web:nightly
#With Podman
podman run -d -p 8080:8080 --restart always --name Meshtastic-Web ghcr.io/meshtastic/web:nightly
```
> [!WARNING]
>
> - Nightly builds represent the latest development state and may contain
> breaking changes
> - These builds undergo automated testing but may be less stable than tagged
> release versions
> - Not recommended for production environments unless you are actively testing
> new features
> - No guarantee of backward compatibility between nightly builds
#### Version Information
Each nightly build is tagged with:
- The nightly tag for the latest build
- A specific SHA for build reproducibility
### Feedback
If you encounter any issues with nightly builds, please report them in our
[issues tracker](https://github.com/meshtastic/web/issues). Your feedback helps
improve the stability of future releases
## Development & Building
You'll need to download the package manager used with this repo. You can install
it by visiting [pnpm.io](https://pnpm.io/) and following the installation
instructions listed on the home page.
### Development
Install the dependencies.
```bash
cd packages/web &&
pnpm install
```
Start the development server:
```bash
pnpm run dev
```
### Building and Packaging
Build the project:
```bash
pnpm run build
```
GZip the output:
```bash
pnpm run package
```
### Why pnpm?
Meshtastic Web uses pnpm as its package manager for several compelling
reasons:
- **Efficient Storage**: pnpm uses content-addressable storage, avoiding duplication
of packages across projects and saving significant disk space.
- **Fast Performance**: Faster package installation compared to other package
managers through symlinks and efficient dependency resolution.
- **Strict Dependency Management**: Prevents access to unlisted dependencies,
ensuring better project reliability and security.
- **Workspace Support**: Excellent monorepo support with workspaces for managing
multiple packages efficiently.
- **Reproducible Builds**: Lockfile ensures consistent builds across all
environments.
### Contributing
We welcome contributions! Here’s how the deployment flow works for pull
requests:
- **Preview Deployments:**\
Every pull request automatically generates a preview deployment on Vercel.
This allows you and reviewers to easily preview changes before merging.
- **Staging Environment (`client-test`):**\
Once your PR is merged, your changes will be available on our staging site:
[client-test.meshtastic.org](https://client-test.meshtastic.org/).\
This environment supports rapid feature iteration and testing without
impacting the production site.
- **Production Releases:**\
At regular intervals, stable and fully tested releases are promoted to our
production site: [client.meshtastic.org](https://client.meshtastic.org/).\
This is the primary interface used by the public to connect with their
Meshtastic nodes.
Please review our
[Contribution Guidelines](https://github.com/meshtastic/web/blob/main/packages/web/CONTRIBUTING.md)
before submitting a pull request. We appreciate your help in making the project
better!
-10
View File
@@ -1,10 +0,0 @@
project_id_env: CROWDIN_PROJECT_ID
api_token_env: CROWDIN_PERSONAL_TOKEN
base_path: "."
base_url: "https://meshtastic.crowdin.com/api/v2"
preserve_hierarchy: true
files:
- source: "/public/i18n/locales/en/*.json"
translation: "/public/i18n/locales/%locale%/%original_file_name%"
-29
View File
@@ -1,29 +0,0 @@
<!DOCTYPE html>
<html lang="en" data-theme="system">
<head>
<!-- CookieYes banner -->
<%- cookieYesScript %>
<!-- End of CookieYes banner -->
<meta charset="utf-8" />
<link rel="icon" type="image/svg+xml" href="/icon.svg" />
<link rel="icon" href="/favicon.ico" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180" />
<link rel="manifest" href="site.webmanifest" />
<link rel="mask-icon" href="logo_black.svg" color="#67ea94" />
<link
rel="stylesheet"
href="src/index.css"
crossorigin="anonymous"
/>
<meta name="theme-color" content="#67ea94" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Meshtastic Web Client" />
<title><%- title %></title>
</head>
<body>
<div id="root"></div>
<noscript>You need to enable JavaScript to run this app.</noscript>
<script type="module" src="src/index.tsx"></script>
</body>
</html>
-2
View File
@@ -1,2 +0,0 @@
../dist/build.tar
../dist/output
-15
View File
@@ -1,15 +0,0 @@
FROM nginx:1.29.1-alpine-slim
RUN rm -r /usr/share/nginx/html \
&& mkdir -p /usr/share/nginx/html \
&& mkdir -p /etc/nginx/conf.d
WORKDIR /usr/share/nginx/html
ADD ./packages/web/dist .
COPY ./packages/web/infra/default.conf /etc/nginx/conf.d/default.conf
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
-51
View File
@@ -1,51 +0,0 @@
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location ~* \.(?:js|jsx|mjs|ts|tsx|css|png|jpg|jpeg|gif|ico|webp|avif|svg|ttf|otf|woff|woff2|map)$ {
access_log off;
etag on;
expires 3M;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
location = /index.html {
etag on;
add_header Cache-Control "no-cache";
}
location / {
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html { internal; }
location ~ /\.ht { deny all; }
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
font/ttf
font/otf
image/svg+xml;
}
-121
View File
@@ -1,121 +0,0 @@
{
"name": "meshtastic-web",
"version": "2.6.6-0",
"type": "module",
"description": "Meshtastic web client",
"license": "GPL-3.0-only",
"repository": {
"type": "git",
"url": "git+https://github.com/meshtastic/web.git"
},
"bugs": {
"url": "https://github.com/meshtastic/web/issues"
},
"homepage": "https://meshtastic.org",
"scripts": {
"preinstall": "npx only-allow pnpm",
"setup:certs": "mkcert localhost 127.0.0.1 ::1",
"build": "vite build",
"build:analyze": "BUNDLE_ANALYZE=true pnpm run build",
"lint": "oxlint",
"lint:fix": "oxlint --fix",
"format": "oxfmt --check .",
"format:fix": "oxfmt .",
"check": "pnpm lint && pnpm format",
"check:fix": "pnpm lint:fix && pnpm format:fix",
"dev": "vite",
"dev:https": "USE_HTTPS=true vite",
"test": "vitest",
"typecheck": "pnpm run tsc --noEmit",
"preview": "vite preview",
"docker:build": "docker build -t meshtastic-web:latest -f ./infra/Containerfile .",
"package": "gzipper c -i html,js,css,png,ico,svg,json,webmanifest,txt dist dist/output && tar -cvf dist/build.tar -C ./dist/output/ ."
},
"dependencies": {
"@hookform/resolvers": "^5.2.2",
"@meshtastic/core": "workspace:*",
"@meshtastic/transport-http": "workspace:*",
"@meshtastic/transport-web-bluetooth": "workspace:*",
"@meshtastic/transport-web-serial": "workspace:*",
"@noble/curves": "^1.9.2",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-checkbox": "^1.3.3",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-menubar": "^1.1.16",
"@radix-ui/react-popover": "^1.1.15",
"@radix-ui/react-scroll-area": "^1.2.10",
"@radix-ui/react-select": "^2.2.6",
"@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13",
"@radix-ui/react-toast": "^1.2.15",
"@radix-ui/react-toggle-group": "^1.1.11",
"@radix-ui/react-tooltip": "^1.2.8",
"@radix-ui/react-visually-hidden": "^1.2.3",
"@tailwindcss/vite": "^4.1.14",
"@tanstack/react-router": "^1.170.15",
"@tanstack/react-router-devtools": "^1.167.0",
"@tanstack/router-cli": "^1.167.17",
"@tanstack/router-devtools": "^1.167.0",
"@turf/turf": "^7.2.0",
"@types/node": "^24.7.0",
"@types/web-bluetooth": "^0.0.21",
"base64-js": "^1.5.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"crypto-random-string": "^5.0.0",
"i18next": "^25.5.3",
"i18next-browser-languagedetector": "^8.2.0",
"i18next-http-backend": "^4.0.0",
"idb-keyval": "^6.2.2",
"immer": "^11.1.8",
"js-cookie": "^3.0.7",
"lucide-react": "^1.17.0",
"maplibre-gl": "5.8.0",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"react-error-boundary": "^6.0.0",
"react-hook-form": "^7.78.0",
"react-i18next": "^17.0.8",
"react-map-gl": "8.1.0",
"react-qrcode-logo": "^4.0.0",
"rfc4648": "^1.5.4",
"vite": "^7.3.2",
"vite-plugin-html": "^3.2.2",
"vite-plugin-pwa": "^1.3.0",
"zod": "^4.1.12",
"zustand": "5.0.8"
},
"devDependencies": {
"@tanstack/router-plugin": "^1.168.18",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/chrome": "^0.1.22",
"@types/geojson": "^7946.0.16",
"@types/js-cookie": "^3.0.6",
"@types/react": "^19.2.1",
"@types/react-dom": "^19.2.0",
"@types/serviceworker": "^0.0.158",
"@types/w3c-web-serial": "^1.0.8",
"@vitejs/plugin-basic-ssl": "^2.1.0",
"@vitejs/plugin-react": "^5.0.4",
"autoprefixer": "^10.4.21",
"gzipper": "^8.2.1",
"happy-dom": "^20.8.9",
"oxfmt": "^0.16.0",
"oxlint": "^1.41.0",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.14",
"tailwindcss-animate": "^1.0.7",
"tar": "^7.5.11",
"testing-library": "^0.0.2",
"typescript": "^5.9.3",
"vitest": "^4.1.8"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

-64
View File
@@ -1,64 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
id="Layer_1"
data-name="Layer 1"
viewBox="0 0 1871.69 2607.94"
>
<defs><style>
.cls-1, .cls-4 {
fill: #2c2d3c;
stroke-width: 0;
}
.cls-4 {
fill: #fff;
}
</style></defs><path
id="Body_background"
fill="#67ea94"
stroke-width="0"
d="M1349.07 573.19h-855.5c-11.05 0-20.01 8.96-20.01 20.01v1219.19c0 10.12 8.21 18.33 18.33 18.33h854.27c8.7 0 15.75-7.05 15.75-15.75V586.04c0-7.1-5.75-12.85-12.85-12.85Zm-220.55 569.8h-411V787h411v355.99Z"
data-name="Body background"
/><path
id="Body"
d="M1166.62 5.54c-21.2 13.2-31.7 24.3-34.1 36-2.2 10.6-1.8 11.4 13.6 26.9 7.7 7.6 15.3 15.7 17.1 18l3.2 4.1-13.7 5.8c-26.6 11.4-109.5 54-125.2 64.4-4.6 3-5.5 4.1-5.5 6.5 0 3.5 2.7 5.6 5.1 4.1 1.3-.8 2.9-.5 6.4 1.2 9.4 4.5 34.3 10.5 59 14.3 6.9 1.1 27.6 3.3 46 5 49.1 4.5 71 8 71 11.5 0 2.2-21.1 23.5-37.5 38-8.2 7.2-24.4 20.9-36 30.5-29 24-42.2 35.9-62 56.1-27.2 27.7-54.4 60.8-60.9 74.1-2.5 5-2.7 6.1-1.7 9.1.7 1.9 8.9 12.6 18.4 23.9 9.5 11.2 24.2 29.2 32.8 39.9 30.8 38.2 48.3 56.9 75.2 80.4l13.7 12-118.2.6c-65.1.3-203.8.7-308.4.8-182.2.3-221.1.8-237.2 3.1-11.6 1.6-16.2 4.8-18.1 12.7-.9 3.3-1.3 130.7-1.6 479.6-.3 261.4-.7 530.3-.9 597.7-.5 142.7-.1 152.6 6.6 163.8 2.6 4.2 6.9 6.4 13.7 6.8 3.1.2 55 .6 115.4 1 99.7.6 109.7.8 109.7 2.3.2 11.7-9.3 741.7-9.6 742-.2.3-75.5-1.9-167.2-4.8-158.1-4.9-167.1-5.1-171-3.5-11.6 4.6-12.2 20.8-1 26.3 4.1 1.9 10.2 2.2 165.3 7.1 88.6 2.8 168.2 5.1 177 5.1h16l4.7-5.3c2.6-2.9 5.2-6.2 5.7-7.3.7-1.5 10.4-722.4 10.1-757.4v-4.4l159.2.7c87.6.4 159.3.8 159.4.9 0 .1 2.7 169.2 5.9 375.7l5.7 375.5 3 6c1.6 3.3 4.2 7.6 5.8 9.5l2.9 3.5 167.8-.3c158.5-.4 168-.5 171.9-2.2 11.2-4.9 12.1-19.9 1.5-25.8l-3.9-2.2h-318.7l-.3-7.7c-.3-10.8-11.2-710.5-11.2-722.6v-9.7h121.8c85.3.1 123.8-.2 128.7-1 12.4-2 18.1-6.1 21.9-15.8 1.5-4 1.6-46.7 1.6-608.5 0-332.3-.3-610.5-.6-618.2-.7-15.7-1.6-20-4.7-21.8-1.7-.9-24.6-1.3-101.2-1.5l-99-.2-3-3.4c-1.6-1.9-9.1-8.8-16.5-15.4-24.3-21.5-43.4-42.2-71.5-77.2-8.2-10.2-21.9-26.8-30.5-37-8.5-10.2-16.8-20-18.3-21.9-3.4-4.1-3.2-5.1 3.8-15.6 11.1-16.9 35.8-45.8 59-69 16.8-16.9 30.6-29.2 57-51 36-29.7 54.9-46.8 67.7-60.9 8.5-9.4 8.9-10.1 8.6-14-.3-3.8-.7-4.3-5-6.4-8-4-29.7-7.2-76.3-11.2-36.5-3.1-62.7-7.4-84.3-13.6-8.9-2.6-17.8-6.1-17.1-6.8 1.4-1.3 31.8-17.6 56.9-30.4 31.9-16.3 56.3-27.9 73.3-34.8l10.7-4.5 6.3 5.2c11.6 9.7 23.7 13.6 38.1 12.1 8.3-.8 10-2.6 11.7-11.7 2.1-11.2-.9-22.9-12-47.4-9.8-21.7-19.8-36.9-31.4-47.9-7.3-6.8-8.8-6.8-20.6.5Zm190.1 570.1c1.1 1.1 1.3 114 1.6 619.5l.2 618.3-2.2 4.4c-3.2 6.3-8.1 8.7-19.8 10-9.2.9-48.7.8-618.5-.9-254.3-.8-236.4-.3-239.4-6.6-3.2-6.6-4.2-16-4.7-44-.2-15.4 0-283.4.4-595.5.5-312.1.5-569.2 0-571.3-.9-4.2.5-18.4 2.5-24.5 1-3.2 1.9-3.9 6.3-5.4 10.9-3.6 32.3-3.9 396.9-4.7 448.7-1 475-1 476.7.7Z"
class="cls-1"
/><path d="M717.52 787h411v355.99h-411z" class="cls-4" /><path
id="Dot"
fill="#454656"
stroke="#2c2d3c"
stroke-miterlimit="10"
stroke-width="7"
d="M1246.61 622.56c-10.79 3.78-18.53 10.79-23.69 21.39-2.77 5.62-2.95 6.45-2.95 16.59s.18 10.97 2.95 16.87c7.56 15.86 22.03 24.34 40.29 23.51 7.38-.28 9.31-.74 15.58-3.69 8.67-4.15 15.4-10.6 18.99-18.25 9.96-21.02 1.94-43.79-19.18-54.21-6.55-3.23-7.47-3.41-17.06-3.69-8.02-.18-11.25.18-14.94 1.48Z"
/><path
id="Eyes"
d="M651.62 705.94c-8 1.6-10.3 5.2-12 19.4-1.4 12-1.8 452.5-.4 459.2 1.4 6.4 2.7 8.9 5.7 10.8 2.1 1.4 31.7 1.6 275.1 1.5 150 0 275.3-.3 278.4-.6 6.8-.7 9.6-1.9 10.7-4.8.5-1.1.7-106.1.4-235.6-.6-263.8.3-239.2-8.5-243.1-5.2-2.3-17.1-5-23-5.1-8-.3-489.4-2.8-505.5-2.7-9.1.1-18.5.5-20.9 1Zm186.5 82c6.5 1.2 8.4 2.3 8.4 4.9s-2.3 3.1-11.3 1.8c-12.3-1.6-35.6-.4-50.4 2.7-14.5 3-33.7 9.1-43.7 13.9-7.3 3.5-16.6 10-16.6 11.6 0 .5 1.7 1 3.8 1.2 3.2.3 3.7.6 3.7 2.8s-.4 2.5-5.8 2.8c-7 .4-8.7-.8-8.7-5.6 0-10.9 30.8-26.7 65.5-33.7 6.6-1.3 13.6-2.6 15.5-2.8 7.9-.9 34-.6 39.6.4Zm224.9 3.3c35.7 7.5 65.5 22.9 65.5 33.8 0 4.8-1.7 6-8.7 5.6-5.4-.3-5.8-.5-5.8-2.8s.5-2.5 3.8-2.8c2-.2 3.7-.7 3.7-1.2 0-1.6-9.3-8.1-16.6-11.6-10-4.8-29.2-10.9-43.7-13.9-14.8-3.1-38.1-4.3-50.4-2.7-9 1.3-11.3.9-11.3-1.8 0-4.7 7.5-6 32-5.5 16.1.3 21.6.8 31.5 2.9Zm-238.5 58.4c4.6 2.3 5.9 3.6 8.4 8.4 3.2 6.3 3.7 10.2 5.6 42.3.6 9.9 1.5 26.3 2.1 36.5 1.2 20.5.5 96.3-1.1 122.6-3.3 53.9-5 74.5-6.1 76.6-.5 1-1.6 1.8-2.5 1.8-.8 0-4.1.9-7.3 2-17.1 5.7-43.2-.5-50.3-12-6-9.7-7.6-27-8.8-97-.5-27.2-1.4-56.5-2.2-65-.7-8.5-1.3-29-1.3-45.5 0-40.5 1.5-46.7 14.4-59.6 5.3-5.2 8.2-7.2 14.6-9.9 10.4-4.3 13.6-5 22-4.4 4.9.3 8.6 1.3 12.5 3.2Zm230.7 1.9c7.3 3 10 4.8 15.4 10.2 12.9 12.9 14.4 19.1 14.4 59.6 0 16.5-.6 37-1.3 45.5-.8 8.5-1.7 37.8-2.2 65-1.2 70-2.8 87.3-8.8 97-7.1 11.5-33.2 17.7-50.3 12-3.2-1.1-6.5-2-7.3-2-.9 0-2-.8-2.5-1.8-1.1-2.1-2.8-22.7-6.1-76.6-1.6-26.3-2.3-102.1-1.1-122.6 4.3-73.4 4.1-71.4 7.5-78.5 6.2-12.6 23.2-15.8 42.3-7.8Z"
class="cls-1"
/><path
id="Meshtastic_M"
fill="#2c2d3c"
fill-rule="evenodd"
stroke-width="0"
d="m1034.49 1359.63-215.84 316.53-45.53-31.04 238.56-349.85c5.12-7.52 13.64-12.02 22.74-12.03 9.1 0 17.62 4.48 22.76 11.99l239.11 349.3-45.47 31.13-216.33-316.02Zm-452.9 316.2 252.13-369.74-45.53-31.05-252.13 369.73 45.53 31.05Z"
data-name="Meshtastic M"
/><path
id="Left_hand_background"
d="M407.1 1220.22v-6.7h-23.16v-8.98c0-11.12-1.6-21.87-4.56-32.04-3.4-45.86-33.88-84.17-75.5-99.01v-2.21c0-10.27-5.04-19.37-12.77-24.96v-2.05c0-10.55-5.65-19.77-14.08-24.82v-5.24c0-6.87-2.64-13.12-6.95-17.81l-39.54-206.2c-1.2-6.26-4.31-11.66-8.6-15.74-.62-15.68-13.52-28.2-29.35-28.2-15.68 0-28.49 12.29-29.33 27.76-5.01 5.27-8.1 12.39-8.1 20.24v3.47c-5.03 6.13-8.05 13.97-8.05 22.52v146.27c0 8.02 2.66 15.43 7.15 21.38h-10.15c-6.08-10.25-17.26-17.12-30.04-17.12h-10.13c-13.97 0-25.55 10.26-27.61 23.65-16.09 8.06-28.16 22.94-32.44 40.85-9.36 8.59-16.53 19.51-20.63 31.83-11.66 13.48-18.74 31.05-18.74 50.28v32.99c0 18.66 10.95 34.76 26.77 42.23 6.87 11.27 18.91 19.02 32.83 19.97 8.64 8.63 20.58 13.97 33.76 13.97h.65c.06 18.39 10.27 34.39 25.32 42.7v2.98l-31.54 15.79c-3.23 1.62-4.54 5.54-2.92 8.77l27.13 54.21c2.71 5.41 8.24 8.47 13.91 8.31 7.05 12.52 19.2 21.77 33.64 24.94 4.35 8.18 12.87 13.82 22.79 14.02l45.97.91c12.54.25 23.88-5.09 31.68-13.72h2.9c19.87 0 38.76-4.16 55.88-11.64 57.39-6.54 101.98-55.26 101.98-114.4v-12.05c0-12.25-7.5-22.75-18.16-27.16Z"
class="cls-4"
data-name="Left hand background"
/><path
id="Left_Hand"
d="M180.02 744.24c-2.7 1.3-7.1 4.6-9.7 7.3-9.1 9.9-19.7 35.8-25.5 63l-2.8 12.8.1 49.5c0 52.1 1.1 75.2 4.5 94.8 1 6.3 1.9 11.9 1.9 12.4 0 .6-3.7-2.5-8.3-6.9-11.1-10.6-15.7-12.8-26.7-12.7-9.8.1-14.6 1.8-24.4 8.8-13 9.3-34.8 35.8-54.7 66.6-19 29.4-26.9 47.1-32 71.5-3.4 16.1-3.2 36.1.5 50 3.2 12.1 8.1 22.9 13.1 28.3 2 2.3 7.1 6.3 11.3 9 10.8 6.9 43 22.9 53.6 26.6l8.8 3.1 7.2 12.8c9 16.1 14.1 22.7 21.1 27.4l5.6 3.7-4.3 1.6c-26.9 10.4-28.9 11.3-30.8 14-1.1 1.6-2 3.7-2 4.7 0 2.4 13.9 34.6 18.7 43.3 7.2 13.2 15.8 23.2 29.7 34.7 16.4 13.7 26.1 20.2 39 26.4 13.9 6.6 25.5 9.3 36.6 8.4 12.4-1 22.4-3.1 38.5-8.1 7.9-2.4 19.1-5.5 24.9-6.9 5.8-1.4 14.7-3.8 19.9-5.5 5.1-1.6 18-5.2 28.5-8 30.2-7.9 59.5-19.7 70.7-28.7 6.4-5.1 16.6-19.3 22.2-31 2.7-5.6 6-15.4 8.6-25 4.1-15.4 4.2-16.2 4.2-31.8 0-17.1-1.1-23.6-5.1-31.6-5.5-11-13.1-16.3-23.4-16.4-3.6 0-8 .3-9.8.7-3.1.7-3.2.7-2.5-2 .5-1.5.8-7.7.7-13.7 0-9.7-.4-12.4-3.8-23.5-11.8-39.3-19.9-57.4-34.4-76.7-5.3-7.1-7.6-8.8-10.3-7.8-.8.3-2.6-.3-4-1.2-17.5-11.7-23-17.7-35.4-38.4-22.6-38.2-34.7-77-44.4-143.4-1.7-11.6-4.2-28.7-5.6-38-1.4-9.4-3.2-21.6-4-27.2-1.5-10.9-3-17.4-10.1-43.3-4.9-17.7-6.8-22.3-14.2-33.4-12.9-19.5-16.9-22.6-29.3-22.6-5.7 0-8.6.6-12.4 2.4Zm20.1 5.5c4.4 2 8.2 6.5 16.6 19.7 6.8 10.5 7.4 12.1 11.7 27.1 7 24.4 10.2 38.5 12.1 52.8 1 7.7 2.5 18 3.4 23 .8 4.9 1.8 11.7 2.1 15 1.1 10.6 7.4 49 10.1 61.7 6.9 33.1 15.3 59.9 24.9 79.7 6.6 13.4 16.5 31.1 19.3 34.3 1.9 2.2 1.8 2.2-4.6-.2-7.7-3-21-2.8-27.7.4-9.8 4.6-18.9 16.8-23.6 31.6-3.8 12.3-4.7 20.2-3.7 32.3 1 12.7 3 21.2 7.2 30.2 7.3 15.7 16.1 25.9 30.2 35.2 22.4 14.5 47.8 22.4 82.1 25.5l13.7 1.2-4.3 1.8c-2.3 1-9.9 2.9-16.9 4.4-7 1.5-20.3 5.3-29.5 8.5-29.2 10.1-50.1 14.5-99.7 20.9-28.9 3.7-62.9 9.1-78.5 12.4-8.3 1.7-11.4 1.2-19.9-3.3-8.1-4.3-16.2-14.3-23.5-28.9l-3.1-6.2h8.2c4.6 0 12.8-.7 18.2-1.5 5.5-.8 11.6-1.5 13.7-1.5 6.1 0 18.1-4.3 26.1-9.4 4.2-2.7 13.4-10.5 21.5-18.4 15.9-15.4 18.4-19.4 23.9-38.2 3.9-13.5 3.8-22.5-.3-35-1.7-5.2-4.8-15.1-6.8-22-11.3-38.1-20.2-61.5-30.5-80.3-3.7-6.8-7-13.5-7.3-14.9-.4-1.4-2.2-5.1-4.1-8.2-8.9-14.9-12.5-50.6-12.9-128.4-.1-34.8.1-38.6 2-49.2 5.5-28.9 16.4-57.2 26-66.7 6.7-6.7 16.2-8.9 23.9-5.4Zm-75.9 223.2c2.5 1.2 9.2 6.6 15.1 12 9 8.4 11.4 11.3 15.2 18.4 2.5 4.6 6.1 11.2 8.1 14.7 7.3 12.8 9.2 16.5 13.5 26.9 8.3 20.2 30.1 88.8 29 91.4-.7 1.9-3.2 1.9-13.9 0-19.4-3.4-34.8-11.1-53.2-26.5-22.6-19.1-38.4-35.1-53.4-54.5-8.7-11.1-23.7-33.2-25-36.7-1.6-4.3 23.2-33.2 35.5-41.3 10.2-6.8 20.9-8.4 29.1-4.4Zm-59.7 65.4c18.6 28 33.5 45.1 59.5 68.3 17.3 15.5 25.2 21.1 38 27.3 12.8 6.1 22.5 8.8 34.8 9.6 8.2.5 9.7.9 9.7 2.3 0 2.5-5.9 21.7-8.5 27.5-2.4 5.6-10.9 15.2-19.9 22.7l-5.8 4.9-8.2-.6c-14.7-1.2-43.1-12.1-64-24.5-33.2-19.8-62.4-49.6-77.6-79.3-2.7-5.4-5-10.5-5-11.3 0-5.6 35-63.9 37.1-61.7.3.5 4.8 7.1 9.9 14.8Zm231.1 31.7c5.3 2.4 22.2 13.2 33.5 21.3 3.1 2.2 6.6 3.8 8.5 4 3.1.2 4.1 1.2 10.2 10.1 11.9 17.3 19 34.1 29.6 69.9 4 13.7 5.2 21.9 4.2 28.2-1.3 8.5-1.6 8.7-16.1 8-40.6-1.9-82-17.7-99.4-37.8-5-5.9-11.1-16.4-14.2-24.6-3.3-8.8-5.7-24.9-5-33.8.6-8.7 5.8-25.5 9.7-31.6 3.9-6.2 13-14.7 16.5-15.4 1.6-.4 3.4-.8 3.9-1.1 3-1.1 13.5.4 18.6 2.8Zm-268.6 46.6c16.2 24.3 40.8 47.5 67.1 63.5 22.1 13.5 49.9 24.7 65.5 26.5l6.4.8-4.5 2.9c-6.7 4.3-15.9 7.8-21.5 8.1-2.7.2-9.2 1.1-14.2 2-6.8 1.2-12.9 1.5-23 1.2-16.4-.6-20.1-1.7-44.8-14-29.6-14.8-38-21-42.9-31.8-10-22-11.1-45.9-3.4-74.3l2.1-7.9 4.3 8.2c2.4 4.5 6.4 11.1 8.9 14.8Zm378.2 103.3c1.5.5 4.3 2.5 6.1 4.2 7.3 6.9 10.2 17.1 10.2 35.8 0 10.9-.4 14.3-3.4 26.5-1.9 7.7-4.7 17.2-6.1 21-5.1 13.4-16.7 30.6-24.8 36.5-11.8 8.6-40.4 19.8-69 26.9-6.7 1.7-17.8 4.9-24.7 7-6.9 2.2-17.4 5.1-23.5 6.5-6 1.4-15.7 4.1-21.5 6-14.3 4.8-26.7 7.4-38 8.1-8 .6-10.8.3-17.5-1.5-15.3-4.2-33.7-14.7-51.3-29.3-16.7-14-22.8-21.2-31.4-36.8-5.1-9.3-17.1-37.9-16.5-39.4s30.2-12.6 39.7-15c17-4.1 61-11.4 95.5-15.6 43.6-5.4 62.3-9.3 93.5-19.6 12.4-4 27.7-8.4 34-9.8 6.3-1.3 14.4-3.6 18-5.1 18.2-7.7 24.1-8.9 30.7-6.4Z"
class="cls-1"
data-name="Left Hand"
/><path
id="Right_hand_background"
d="M1819.8 966.37c-25.94-6.6-55.37 12.34-80.21 47.23-7.22 2.11-13.85 6.48-18.71 12.96l-62.66 83.5c-3.95 5.27-6.58 11.11-7.97 17.13l-5.41 1.59c-13.38 3.92-23.69 13.25-29.27 24.9-5.72 2.53-10.71 6.15-14.76 10.55-3.12-3.5-6.87-6.34-11.02-8.41l-8.6-29.33c-2.43-8.29-7.39-15.15-13.8-19.98-1.3-3.05-2.95-5.86-4.89-8.42l-1.83-6.25c-5.53-18.87-25.32-29.69-44.19-24.16l-1.17.34c-17.05 5-27.52 21.63-25.3 38.71-2.25 3.8-4 7.88-5.2 12.14-6.93 11-9.29 24.81-5.34 38.27l4.28 14.6c-2.84 8.7-3.18 18.32-.41 27.76l43.82 149.44-4.59-1.51c-5.42-1.79-11.01-1.75-16.1-.23l-5.24-1.73c-6.73-2.22-14 1.43-16.22 8.17-1.95 5.9-1.07 12.05 1.87 17.01-2.25 10.55-.41 21.21 4.6 30.14 1.2 12.02 7.42 23.12 17.2 30.4 5.03 12.25 15.17 22.32 28.74 26.8l6.25 2.06c4.14 7.04 10.75 12.68 19.12 15.44l20.53 6.78 1.08 3.7 5.36-1.57 15.54 5.13 1.09 3.73 5.4-1.58 78.79 26.01c6.91 2.28 14.02 2.19 20.48.2l18.24 6.02c18.8 6.21 39.08-4 45.29-22.81 6.21-18.8-4-39.08-22.81-45.29l-4.43-1.46c-1.72-4.44-4.32-8.51-7.65-11.96l13.47-3.95-.5-1.72c10.19-4.24 17.61-12.72 20.8-22.72l4.6 3.75 41.26-50.64c3.18-3.9 5.25-8.34 6.27-12.94 25.27-12.22 42.7-38.1 42.7-68.05v-186.05c5.89-69.09-12.51-124.56-48.47-133.71Z"
class="cls-4"
data-name="Right hand background"
/><path
id="Right_Hand"
d="M1797.02 960.24c-13.1 3.3-25.8 12.9-52.1 39.1-30.1 30-54.1 58.2-80.5 94.5-15.4 21.1-16.2 22.5-15.6 25.7.5 2.7.2 2.9-5.5 4.7-3.3 1-7.2 2.9-8.7 4-1.4 1.2-3.9 3-5.6 4-7.2 4.5-16.8 13.3-22.5 20.7-5.2 6.7-6.5 7.8-7.6 6.7-2.9-3-12.7-23.3-17.8-37.1-3-8.1-7.4-18.3-9.7-22.7-7.7-14.4-23.3-30.5-34.8-35.8-7.3-3.4-18-2.9-26.1 1.3-7.9 4-17.1 13.8-21.3 22.7-8.5 17.7-11.2 34-11.1 66.8 0 24.7 1.1 36.1 6 62.9 5.7 31.1 21.6 85.9 33.3 114.6 2.2 5.4 3.8 10.1 3.6 10.3s-5.8-.1-12.4-.7c-14.8-1.5-18.2-.9-22 3.5-6.6 7.5-6.7 17.7-.6 51.3 1.2 6.6 2.8 10.9 7.1 19 3.1 5.8 6.4 11.7 7.3 13.1s2.3 3.8 3.1 5.4 4.9 6.3 9 10.5c6.7 6.8 10.1 9.1 32.5 21.8 32.7 18.6 41.4 22.6 69.5 32.1 41.9 14.1 68.2 21 94.5 24.6 6.1.8 16.3 2.4 22.8 3.6 20.4 3.5 26.1 2.6 34.3-5.1 2.8-2.8 6.3-6.7 7.7-8.7 3.8-5.5 6.8-15.6 7-23.3.2-5.7-.2-7.2-2.1-9.6-1.2-1.5-4.4-5.7-7-9.3-8.5-11.8-35.6-37.2-44.4-41.6-7.5-3.8-22.4-9-33.6-11.8-10.4-2.6-27.5-9.1-46.7-17.9-43.6-19.9-57.9-26.8-76.7-36.6-11.6-6.2-23.4-11.9-26.2-12.8s-5.5-2-6-2.4c-.6-.5-1.8-.9-2.8-.9s-1.8-.5-1.8-1.1-1.6-2.5-3.5-4.4c-4-3.7-8-13.2-16.3-38.5-25.9-79.2-34.5-139.3-26.7-185 4-23.4 13.7-40 27.2-46.7 11.6-5.6 20.3-3.1 33.6 9.6s18.2 20.7 26.2 42.6c5.2 14.3 17.1 38.5 21.8 44.3 4 5 16.6 30.8 21.1 43.4 9.7 26.8 16.6 65.4 16.6 92.4v13.4h2.4c1.9 0 2.7-.8 3.7-3.7 2.5-7.8-.7-41.8-6.8-70.8-4.5-21.7-12.8-44.4-23.8-65l-5.4-10 2.7-3.1c1.5-1.7 3.9-4.7 5.4-6.6 1.5-1.9 6-6.1 10.2-9.2 4.1-3.1 7.7-6.4 8-7.4.9-2.6 10.3-8 19.3-11 12.9-4.2 20.3-3.7 39.3 2.8 8.5 2.9 18.3 6.6 21.8 8.2 6.9 3.3 9.6 3.3 10 .2.4-2.6-5-6.9-11.3-9.1-2.5-.8-4.7-1.9-5.1-2.4-.3-.5-1.6-.9-2.9-.9s-4.8-.9-7.7-2c-11.8-4.3-21.7-6.2-30.8-5.8l-8.8.3 1-2.4c1.1-3.1 26.2-37 39.2-53 16.1-19.8 40.9-47.2 59.2-65.2 34.3-33.6 47-39.6 65.4-30.8 10.3 4.9 16.8 11.2 25.6 24.6 13.3 20.1 15.3 26.3 19.9 61.4l.5 3.5-14.3 3.9c-26.3 7-48.8 16-84.2 33.6-24.9 12.4-33 17.4-33 20.4 0 3.5 4.1 2.9 12.3-1.8 20.3-11.7 60.9-30.7 81.9-38.3 13.4-4.9 36.3-11.5 37.4-10.8 1 .6 1.2 89.5.3 93.1-.4 1.6-1.7 2.3-4.7 2.8-14.3 2.5-43.6 18.3-57.9 31.4-6.7 6.1-8.6 9.4-6.8 11.6.7.8 1.6 1.5 2.1 1.5s3.7-2.7 7-6c11.7-11.3 37.2-26.7 51.7-31 4-1.2 7.5-2.1 7.6-1.9.4.4 1 78.5.8 89.4l-.2 7-5.2 1.9c-7.2 2.5-19.6 9.4-20.7 11.4-2 4 2.3 5.7 6.8 2.6 1.2-.9 5.7-3.4 9.9-5.5l7.7-3.9.3 12.3c.1 6.7-.1 17.2-.7 23.3-.7 9.4-1.3 12-3.7 16-6 10.6-16.7 21.8-24.9 26.1-2 1.1-2 .7-2.3-13.5-.3-15.1-1.1-18-4.4-16.7-1.4.5-1.7 3.1-2 15.3-.4 13.5-.6 15.3-3.3 21.7-3.7 8.8-18.4 28.6-28.4 38-4 3.8-9.4 9.2-11.9 12-9.2 10-16 16.1-25 22.5-6.8 4.7-9.2 7-9.2 8.6 0 2.9 2.5 3.7 5.9 1.9 6.1-3.1 23.6-17.7 29.6-24.6 3.5-4.1 9.4-10.1 13.1-13.4 8.2-7.2 24.8-27.9 28.9-35.8 2.8-5.4 3.6-6.1 10.5-9.6 4.1-2 8.7-4.5 10.2-5.5 4.3-2.9 16.4-18 19.7-24.8 2.9-5.9 3.2-7.6 4.3-22.8.6-9.1 1.2-44.9 1.3-79.5.1-34.7.4-84.4.6-110.5.3-50.6-.2-59.6-5.2-84.4-2.9-14.5-11.3-31-23.8-46.9-11.9-15.3-31.5-24-45.6-20.3Zm-287 388.6c6.1.6 13.3 1.7 16 2.5 2.8.8 7.5 2.1 10.5 3 3 .8 16.3 7.1 29.5 14 13.2 7 30.1 15.3 37.5 18.7 7.4 3.3 20.9 9.5 30 13.8 22.9 10.8 46.9 20.5 57 22.8 9.6 2.3 27.5 8.4 33.1 11.3 7.5 3.8 36.6 30.4 39.5 36.2.8 1.5 3.7 5.2 6.4 8.3 6 6.5 6.4 9.6 2.5 21.3-2.1 6.3-3.6 8.6-8.2 13.5-6.5 6.7-8.4 7.6-15.6 7.6-12.4 0-68.1-10.2-90.2-16.6-28.9-8.3-65.5-21.3-79-27.9-13.3-6.5-40.2-21.3-51-28-7.7-4.8-16.5-15.2-24.2-28.5-10.7-18.5-10.8-18.9-14.9-47.9-1.7-11.8-.8-18.9 2.8-22.8 2.4-2.6 3.3-2.7 18.3-1.3Z"
class="cls-1"
data-name="Right Hand"
/>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 102 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 77 KiB

@@ -1,271 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="795.27 277.13 409.46 1319.35">
<defs><style>
.cls-1 {
fill: #353535;
}
.cls-2 {
fill: #1e1e1d;
}
.cls-3 {
fill: #b1a368;
}
.cls-10, .cls-11, .cls-4, .cls-6, .cls-8, .cls-9 {
fill: none;
}
.cls-4, .cls-6 {
stroke: #050606;
}
.cls-10, .cls-11, .cls-4, .cls-6, .cls-8 {
stroke-miterlimit: 10;
}
.cls-4 {
stroke-width: 2.41px;
}
.cls-5 {
fill: #30c2db;
}
.cls-6 {
stroke-width: 3.91px;
}
.cls-7 {
fill: #dcf0f2;
}
.cls-10, .cls-11, .cls-8 {
stroke: #dcf0f2;
}
.cls-8 {
stroke-width: 1.81px;
}
.cls-9 {
stroke: #17afbf;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 7.23px;
}
.cls-10 {
stroke-width: 1.78px;
}
.cls-11 {
stroke-width: 1.81px;
}
</style></defs><g id="Layer_7" data-name="Layer 7"><path
class="cls-1"
d="M915.62,278.34h22.61a35,35,0,0,1,35,35V715.74a0,0,0,0,1,0,0H880.6a0,0,0,0,1,0,0V313.36A35,35,0,0,1,915.62,278.34Z"
></path><rect
class="cls-2"
x="880.6"
y="340.15"
width="92.65"
height="7.54"
></rect><rect
class="cls-2"
x="880.6"
y="356.68"
width="92.65"
height="7.54"
></rect><rect
class="cls-3"
x="885.8"
y="844.3"
width="84.14"
height="19.02"
></rect><rect
class="cls-3"
x="880.6"
y="819.07"
width="92.65"
height="25.23"
></rect><rect
class="cls-3"
x="885.8"
y="790.65"
width="84.14"
height="28.41"
></rect><rect
class="cls-3"
x="880.6"
y="723.02"
width="92.65"
height="67.63"
></rect><rect
class="cls-3"
x="885.8"
y="715.74"
width="84.14"
height="7.28"
></rect><rect
class="cls-4"
x="885.8"
y="844.3"
width="84.14"
height="19.02"
></rect><rect
class="cls-4"
x="880.6"
y="819.07"
width="92.65"
height="25.23"
></rect><rect
class="cls-4"
x="885.8"
y="790.65"
width="84.14"
height="28.41"
></rect><rect
class="cls-4"
x="880.6"
y="723.02"
width="92.65"
height="67.63"
></rect><rect
class="cls-4"
x="885.8"
y="715.74"
width="84.14"
height="7.28"
></rect><path
class="cls-4"
d="M915.62,278.34h22.61a35,35,0,0,1,35,35V715.74a0,0,0,0,1,0,0H880.6a0,0,0,0,1,0,0V313.36A35,35,0,0,1,915.62,278.34Z"
></path><rect
class="cls-4"
x="880.6"
y="340.15"
width="92.65"
height="7.54"
></rect><rect
class="cls-4"
x="880.6"
y="356.68"
width="92.65"
height="7.54"
></rect><rect
class="cls-5"
x="796.48"
y="856.3"
width="407.05"
height="738.98"
rx="47.74"
></rect><rect
class="cls-1"
x="900.05"
y="973.19"
width="202.03"
height="354.65"
rx="16.4"
></rect><rect
class="cls-6"
x="900.05"
y="973.19"
width="202.03"
height="354.65"
rx="16.4"
></rect><rect
class="cls-7"
x="871.51"
y="890.41"
width="55.42"
height="31.12"
rx="15.56"
></rect><rect
class="cls-7"
x="1070.16"
y="890.41"
width="55.42"
height="31.12"
rx="15.56"
></rect><rect
class="cls-4"
x="871.51"
y="890.41"
width="55.42"
height="31.12"
rx="15.56"
></rect><rect
class="cls-4"
x="1070.16"
y="890.41"
width="55.42"
height="31.12"
rx="15.56"
></rect><circle
class="cls-8"
cx="841.7"
cy="1537.01"
r="16.25"
></circle><circle
class="cls-8"
cx="841.7"
cy="913.26"
r="16.25"
></circle><circle
class="cls-8"
cx="1157.32"
cy="913.26"
r="16.25"
></circle><circle
class="cls-8"
cx="1157.32"
cy="1504.51"
r="16.25"
></circle><line
class="cls-9"
x1="942.51"
y1="1592.42"
x2="942.51"
y2="1381.55"
></line><line
class="cls-9"
x1="966.52"
y1="1592.42"
x2="966.52"
y2="1381.55"
></line><line
class="cls-9"
x1="990.57"
y1="1592.42"
x2="990.57"
y2="1381.55"
></line><line
class="cls-9"
x1="1014.59"
y1="1592.42"
x2="1014.59"
y2="1381.55"
></line><line
class="cls-9"
x1="1038.63"
y1="1592.42"
x2="1038.63"
y2="1381.55"
></line><line
class="cls-9"
x1="1062.65"
y1="1592.42"
x2="1062.65"
y2="1381.55"
></line><rect
class="cls-4"
x="796.48"
y="856.3"
width="407.05"
height="738.98"
rx="47.74"
></rect><path
class="cls-10"
d="M1040.1,947.74H960.65A13.93,13.93,0,0,1,947,936.64l-10.23-49.2a13.93,13.93,0,0,1,13.64-16.77h97.72a13.93,13.93,0,0,1,13.75,16.18l-8,49.2A13.94,13.94,0,0,1,1040.1,947.74Z"
></path><rect
class="cls-11"
x="816.35"
y="870.67"
width="365.51"
height="703.12"
rx="32.37"
></rect><rect
class="cls-11"
x="888.77"
y="963.84"
width="223.2"
height="374.66"
rx="25.21"
></rect></g>
</svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

@@ -1,398 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="502.65 765.65 1000.06 433.43">
<defs><style>
.cls-1 {
fill: #8e8d8e;
}
.cls-2 {
fill: #cccccb;
}
.cls-3 {
fill: #ddd;
}
.cls-4 {
fill: #2b2b2b;
}
.cls-5 {
fill: #383839;
}
.cls-6 {
fill: #599cbd;
}
.cls-10, .cls-11, .cls-14, .cls-7, .cls-9 {
fill: none;
stroke-miterlimit: 10;
}
.cls-7 {
stroke: #fff;
}
.cls-10, .cls-14, .cls-7 {
stroke-width: 1.65px;
}
.cls-8 {
fill: #cbcccb;
}
.cls-10, .cls-11, .cls-9 {
stroke: #050606;
}
.cls-9 {
stroke-width: 2px;
}
.cls-11 {
stroke-width: 1.67px;
}
.cls-12 {
fill: #fff;
}
.cls-13 {
fill: #eecc42;
}
.cls-14 {
stroke: #eecc42;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><path
class="cls-1"
d="M554.23,774h907.26a0,0,0,0,1,0,0v415.1a0,0,0,0,1,0,0H554.23a32.53,32.53,0,0,1-32.53-32.53v-350A32.53,32.53,0,0,1,554.23,774Z"
></path><path
class="cls-2"
d="M1363,985.65v82.44a8.42,8.42,0,0,0,8.42,8.42h75.41a18.61,18.61,0,0,1,18.61,18.62v82.15a20.79,20.79,0,0,1-20.79,20.79h-37.14a15,15,0,0,1-15-15v-40.46a23.46,23.46,0,0,0-23.46-23.47h-22.26a4.57,4.57,0,0,0-4.57,4.58h0a4.57,4.57,0,0,0,4.57,4.57h22.31a15.19,15.19,0,0,1,15.19,15.19V1181a17.08,17.08,0,0,1-17.08,17.08H549a45.49,45.49,0,0,1-45.35-42h37.39a57.24,57.24,0,0,0,57.24-57.23V864.62a57.24,57.24,0,0,0-57.24-57.23H503.79A45.49,45.49,0,0,1,549,766.65h818.24a17.08,17.08,0,0,1,17.08,17.08v37.46a15.19,15.19,0,0,1-15.19,15.18h-22.31a4.57,4.57,0,0,0-4.57,4.58h0a4.57,4.57,0,0,0,4.57,4.57h22.26a23.46,23.46,0,0,0,23.46-23.46V781.6a15,15,0,0,1,15-15h37.14a20.79,20.79,0,0,1,20.79,20.79v82.15a18.62,18.62,0,0,1-18.61,18.62h-75.41a8.41,8.41,0,0,0-8.42,8.41v89Z"
></path><path
class="cls-3"
d="M1363,897.36h130.87a8,8,0,0,1,8,8v155.38a8,8,0,0,1-8,8H1363a0,0,0,0,1,0,0V897.36A0,0,0,0,1,1363,897.36Z"
></path><rect
class="cls-4"
x="1404.64"
y="937.34"
width="10.03"
height="22.38"
></rect><rect
class="cls-4"
x="1404.64"
y="1003.72"
width="10.03"
height="22.38"
></rect><rect
class="cls-4"
x="1363.01"
y="1001.56"
width="23.63"
height="34.15"
></rect><rect
class="cls-4"
x="1363.01"
y="930.05"
width="23.63"
height="34.15"
></rect><path
class="cls-5"
d="M598.31,864.62v234.21a57.24,57.24,0,0,1-57.24,57.23H521.7V807.39h19.37A57.24,57.24,0,0,1,598.31,864.62Z"
></path><rect
class="cls-5"
x="728.25"
y="817.13"
width="158.2"
height="330.36"
></rect><path
class="cls-6"
d="M572.27,1146.81v-26.49a1.33,1.33,0,0,0-1.33-1.33H540.27a1.33,1.33,0,0,0-1.33,1.33v35.74a43.86,43.86,0,0,0,15.13-1.49C561.47,1152.31,572.27,1146.81,572.27,1146.81Z"
></path><path
class="cls-7"
d="M538.94,1156.06v-35.74a1.33,1.33,0,0,1,1.33-1.33h30.67a1.33,1.33,0,0,1,1.33,1.33v26.49"
></path><path
class="cls-8"
d="M528.57,837.41h3.59a0,0,0,0,1,0,0v38.22a0,0,0,0,1,0,0h-3.59a3,3,0,0,1-3-3V840.39A3,3,0,0,1,528.57,837.41Z"
></path><path
class="cls-9"
d="M503.68,1156.06h37.39a57.24,57.24,0,0,0,57.24-57.23V864.62a57.24,57.24,0,0,0-57.24-57.23H503.79"
></path><line
class="cls-10"
x1="521.7"
y1="807.39"
x2="521.7"
y2="1156.06"
></line><path
class="cls-9"
d="M1363,979.06V896.62a8.41,8.41,0,0,1,8.42-8.41h75.41a18.62,18.62,0,0,0,18.61-18.62V787.44a20.79,20.79,0,0,0-20.79-20.79h-37.14a15,15,0,0,0-15,15v40.46a23.46,23.46,0,0,1-23.46,23.46h-22.26a4.57,4.57,0,0,1-4.57-4.57h0a4.57,4.57,0,0,1,4.57-4.58h22.31a15.19,15.19,0,0,0,15.19-15.18V783.73a17.08,17.08,0,0,0-17.08-17.08H549a45.49,45.49,0,0,0-45.24,40.74"
></path><path
class="cls-9"
d="M1363,985.65v82.44a8.42,8.42,0,0,0,8.42,8.42h75.41a18.61,18.61,0,0,1,18.61,18.62v82.15a20.79,20.79,0,0,1-20.79,20.79h-37.14a15,15,0,0,1-15-15v-40.46a23.46,23.46,0,0,0-23.46-23.47h-22.26a4.57,4.57,0,0,0-4.57,4.58h0a4.57,4.57,0,0,0,4.57,4.57h22.31a15.19,15.19,0,0,1,15.19,15.19V1181a17.08,17.08,0,0,1-17.08,17.08H549a45.49,45.49,0,0,1-45.35-42"
></path><path
class="cls-7"
d="M618.9,981.73V862.12a6.16,6.16,0,0,1,6.16-6.17h87.49A10.48,10.48,0,0,0,723,845.48v-28a7.08,7.08,0,0,1,7.08-7.08H833.83A14.5,14.5,0,0,0,844,806.25l23.23-22.52a15.93,15.93,0,0,1,11.11-4.5h273.84a16,16,0,0,1,11.73,5.13l19.69,21.32a14.55,14.55,0,0,0,10.69,4.68h122.44a5.85,5.85,0,0,1,5.86,5.85v331.55a5.86,5.86,0,0,1-5.86,5.86H730.11a7.08,7.08,0,0,1-7.08-7.08v-74A10.48,10.48,0,0,0,712.55,1062H625.06a6.16,6.16,0,0,1-6.16-6.16V982.25"
></path><circle
class="cls-7"
cx="1012.63"
cy="1176.42"
r="15.95"
></circle><circle
class="cls-7"
cx="1347.86"
cy="1165.18"
r="15.95"
></circle><circle
class="cls-7"
cx="1347.86"
cy="801.82"
r="15.95"
></circle><rect
class="cls-7"
x="1406.28"
y="1109.79"
width="43.15"
height="63.43"
rx="21.58"
></rect><rect
class="cls-7"
x="1406.28"
y="796.41"
width="43.15"
height="63.43"
rx="21.58"
></rect><path
class="cls-11"
d="M1363,897.36h130.87a8,8,0,0,1,8,8v155.38a8,8,0,0,1-8,8H1363a0,0,0,0,1,0,0V897.36A0,0,0,0,1,1363,897.36Z"
></path><rect
class="cls-11"
x="1404.64"
y="937.34"
width="10.03"
height="22.38"
></rect><rect
class="cls-11"
x="1404.64"
y="1003.72"
width="10.03"
height="22.38"
></rect><rect
class="cls-11"
x="1363.01"
y="1001.56"
width="23.63"
height="34.15"
></rect><rect
class="cls-11"
x="1363.01"
y="930.05"
width="23.63"
height="34.15"
></rect><line
class="cls-11"
x1="1461.49"
y1="881.06"
x2="1461.49"
y2="897.36"
></line><line
class="cls-11"
x1="1461.49"
y1="1068.83"
x2="1461.49"
y2="1083.65"
></line><line
class="cls-11"
x1="1381.33"
y1="774.04"
x2="1394.21"
y2="774.04"
></line><line
class="cls-11"
x1="1382.28"
y1="1189.14"
x2="1394.21"
y2="1189.14"
></line><rect
class="cls-12"
x="532.16"
y="831.98"
width="49.07"
height="49.07"
rx="2.75"
></rect><rect
class="cls-10"
x="532.16"
y="831.98"
width="49.07"
height="49.07"
rx="2.75"
></rect><circle
class="cls-13"
cx="556.69"
cy="856.52"
r="9.63"
></circle><circle
class="cls-14"
cx="556.69"
cy="856.52"
r="19.11"
></circle><path
class="cls-10"
d="M528.57,837.41h3.59a0,0,0,0,1,0,0v38.22a0,0,0,0,1,0,0h-3.59a3,3,0,0,1-3-3V840.39A3,3,0,0,1,528.57,837.41Z"
></path><path
class="cls-8"
d="M584.21,837.41h3.59a0,0,0,0,1,0,0v38.22a0,0,0,0,1,0,0h-3.59a3,3,0,0,1-3-3V840.39A3,3,0,0,1,584.21,837.41Z"
transform="translate(1169.02 1713.04) rotate(-180)"
></path><path
class="cls-10"
d="M584.21,837.41h3.59a0,0,0,0,1,0,0v38.22a0,0,0,0,1,0,0h-3.59a3,3,0,0,1-3-3V840.39A3,3,0,0,1,584.21,837.41Z"
transform="translate(1169.02 1713.04) rotate(-180)"
></path><rect
class="cls-7"
x="525.59"
y="961.1"
width="31.1"
height="17.96"
rx="0.79"
></rect><rect
class="cls-7"
x="525.59"
y="985.65"
width="31.1"
height="17.96"
rx="0.79"
></rect><path
class="cls-12"
d="M576.68,978.9h-2V962h2Zm8.64-7.59H575.6v-1.93h9.72Zm1.3,7.59h-2V962h2Z"
></path><path
class="cls-12"
d="M569.32,978.9h-9.47V977h9.47Zm0-7.7h-8.19v-1.9h8.19Zm1.16,7.7h-2V962h2Z"
></path><path
class="cls-12"
d="M585.44,988.92h-9.67V987h9.67Zm1.18,15h-2V987h2Z"
></path><path
class="cls-12"
d="M571.82,1003.9h-9.46V1002h9.46Zm0-7.7h-8.19v-1.9h8.19Zm1.17,7.7h-2V987h2Z"
></path><rect
class="cls-8"
x="530.71"
y="989.79"
width="5.58"
height="9.68"
rx="1.05"
></rect><rect
class="cls-8"
x="546"
y="989.79"
width="5.58"
height="9.68"
rx="1.05"
></rect><rect
class="cls-8"
x="530.71"
y="965.24"
width="5.58"
height="9.68"
rx="1.05"
></rect><rect
class="cls-8"
x="556.69"
y="913.16"
width="5.58"
height="9.68"
rx="1.05"
></rect><rect
class="cls-8"
x="583.14"
y="913.16"
width="5.58"
height="9.68"
rx="1.05"
></rect><rect
class="cls-8"
x="546"
y="965.24"
width="5.58"
height="9.68"
rx="1.05"
></rect><path
class="cls-7"
d="M552.28,913.61v-5.5a1.36,1.36,0,0,1,1.36-1.36H590.7a1.36,1.36,0,0,1,1.36,1.36v5.5"
></path><path
class="cls-7"
d="M565.9,922.84v5.63a1.36,1.36,0,0,1-1.37,1.36H553.64a1.36,1.36,0,0,1-1.36-1.36v-5.63"
></path><rect
class="cls-8"
x="541.49"
y="1082.41"
width="5.58"
height="9.68"
rx="1.05"
transform="translate(1697.94 1471.19) rotate(135)"
></rect><path
class="cls-7"
d="M536.32,1088.36l-4-4a1.36,1.36,0,0,1,0-1.92l7.7-7.7a1.35,1.35,0,0,1,1.93,0l4,4"
></path><rect
class="cls-8"
x="571.96"
y="1050.39"
width="5.58"
height="9.68"
rx="1.05"
transform="translate(1727.32 1394.99) rotate(135)"
></rect><rect
class="cls-8"
x="583.85"
y="1059.62"
width="5.58"
height="9.68"
rx="1.05"
transform="translate(1754.13 1402.34) rotate(135)"
></rect><rect
class="cls-8"
x="574.63"
y="1068.83"
width="5.58"
height="9.68"
rx="1.05"
transform="translate(1744.92 1424.58) rotate(135)"
></rect><rect
class="cls-8"
x="561.03"
y="1083.6"
width="5.58"
height="9.68"
rx="1.05"
transform="translate(1732.15 1459.41) rotate(135)"
></rect><rect
class="cls-8"
x="551.82"
y="1092.82"
width="5.58"
height="9.68"
rx="1.05"
transform="translate(1722.93 1481.65) rotate(135)"
></rect><path
class="cls-7"
d="M566.79,1056.35l-4-4a1.36,1.36,0,0,1,0-1.92l7.71-7.71a1.36,1.36,0,0,1,1.92,0l4,4"
></path><path
class="cls-7"
d="M592.06,922.84v5.63a1.36,1.36,0,0,1-1.36,1.36H581a1.36,1.36,0,0,1-1.36-1.36v-5.63"
></path><line
class="cls-7"
x1="565.9"
y1="918.69"
x2="579.63"
y2="918.69"
></line><path
class="cls-7"
d="M551,1103.25l3.72,3.21a3.16,3.16,0,0,0,4.33-.19l35.69-36.8a3.15,3.15,0,0,0,0-4.44l-3.79-3.76"
></path><line
class="cls-7"
x1="573.31"
y1="1065.02"
x2="553.89"
y2="1084.25"
></line><path
class="cls-7"
d="M569.42,1116.78V1115a1.89,1.89,0,0,0-1.89-1.89h-23.2a1.88,1.88,0,0,0-1.89,1.89v1.8"
></path><rect
class="cls-12"
x="542.44"
y="1121.36"
width="26.13"
height="7.79"
></rect><rect
class="cls-4"
x="790.91"
y="817.13"
width="522.47"
height="330.36"
></rect></g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

@@ -1,74 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="404.68 390.65 1217.15 959.26">
<defs><style>
.cls-1 {
fill: #dfeaf7;
}
.cls-2 {
fill: #17907f;
}
.cls-3 {
fill: #2b2b2b;
}
.cls-4, .cls-5 {
fill: none;
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-4 {
stroke-width: 2.25px;
}
.cls-5 {
stroke-width: 4px;
}
.cls-6 {
fill: #050606;
}
</style></defs><g id="Layer_5" data-name="Layer 5"><path
class="cls-1"
d="M1517.73,392.65h0a102.1,102.1,0,0,0-102.1,102.1V770.37A40.62,40.62,0,0,1,1375,811H455.16a48.49,48.49,0,0,0-48.48,48.48v126a11.85,11.85,0,0,0,3.46,8.37l15.34,15.34a11.81,11.81,0,0,1,3.47,8.37v137.16a11.81,11.81,0,0,1-3.47,8.37l-15.34,15.34a11.85,11.85,0,0,0-3.46,8.37v112.67a48.49,48.49,0,0,0,48.48,48.49H1571.34a48.51,48.51,0,0,0,48.49-48.5V494.75A102.1,102.1,0,0,0,1517.73,392.65Zm-110.61,815V954a33.14,33.14,0,0,1,66.27,0v253.65a33.14,33.14,0,0,1-66.27,0Z"
></path><path
class="cls-2"
d="M1516,439.16c-30.23.91-53.92,26.54-53.92,56.79V770.37A87.11,87.11,0,0,1,1375,857.48H732.31A27.51,27.51,0,0,0,704.8,885v388.93a27.51,27.51,0,0,0,27.51,27.51h828.38a12.7,12.7,0,0,0,12.65-12.65v-794A55.69,55.69,0,0,0,1516,439.16Zm-108.9,768.47V954a33.14,33.14,0,0,1,66.27,0v253.65a33.14,33.14,0,0,1-66.27,0Z"
></path><rect
class="cls-3"
x="787.14"
y="943.38"
width="429.45"
height="224.42"
></rect><path
class="cls-1"
d="M1478.6,915.35A54.23,54.23,0,0,0,1386,953.69v254.23a54.23,54.23,0,1,0,108.45,0V953.69A54,54,0,0,0,1478.6,915.35Zm-5.21,292.28a33.14,33.14,0,0,1-66.27,0V954a33.14,33.14,0,0,1,66.27,0Z"
></path></g><g id="Layer_2" data-name="Layer 2"><path
class="cls-4"
d="M1573.34,494.75v794a12.68,12.68,0,0,1-12.65,12.65H732.31a27.51,27.51,0,0,1-27.51-27.51V885a27.51,27.51,0,0,1,27.51-27.51H1375a87.11,87.11,0,0,0,87.11-87.11V496c0-30.25,23.69-55.88,53.92-56.79A55.69,55.69,0,0,1,1573.34,494.75Z"
></path><path
class="cls-5"
d="M410.14,1178.39,425.49,1163a11.78,11.78,0,0,0,3.46-8.35V1017.5a11.8,11.8,0,0,0-3.46-8.35l-15.35-15.36a11.77,11.77,0,0,1-3.46-8.35v-126A48.47,48.47,0,0,1,455.16,811H1375a40.63,40.63,0,0,0,40.63-40.63V494.75a102.1,102.1,0,0,1,102.1-102.1h0a102.1,102.1,0,0,1,102.1,102.1v804.66a48.51,48.51,0,0,1-48.49,48.5H455.16a48.48,48.48,0,0,1-48.48-48.49V1186.74A11.78,11.78,0,0,1,410.14,1178.39Z"
></path><rect
class="cls-4"
x="1407.12"
y="920.85"
width="66.26"
height="319.9"
rx="33.13"
></rect><rect
class="cls-4"
x="1386.03"
y="899.46"
width="108.46"
height="362.69"
rx="54.23"
></rect><path
class="cls-6"
d="M639.76,1070.55a2.91,2.91,0,0,1-2.91-2.91v-30.53a5.42,5.42,0,0,0-1.6-3.86l-32.44-32.44a11.86,11.86,0,0,1-3.5-8.44V901a12.52,12.52,0,0,0-12.51-12.51H483.92a12.7,12.7,0,0,0-12.68,12.69v76.78a24.13,24.13,0,0,0,7.11,17.18l14.33,14.33a24.13,24.13,0,0,0,17.18,7.11h50.75a11.86,11.86,0,0,1,8.44,3.5l24.26,24.26a12.47,12.47,0,0,1,3.68,8.88v14.46a2.91,2.91,0,1,1-5.81,0v-14.46a6.72,6.72,0,0,0-2-4.77l-24.26-24.26a6.09,6.09,0,0,0-4.33-1.8H509.86a29.91,29.91,0,0,1-21.29-8.81l-14.33-14.33a29.87,29.87,0,0,1-8.81-21.29V901.14a18.51,18.51,0,0,1,18.49-18.5H586.8A18.34,18.34,0,0,1,605.12,901v91.41a6.09,6.09,0,0,0,1.8,4.33l32.44,32.44a11.19,11.19,0,0,1,3.3,8v30.53A2.9,2.9,0,0,1,639.76,1070.55Z"
></path><path
class="cls-6"
d="M586.8,1289.46H483.92a18.51,18.51,0,0,1-18.49-18.5v-76.78a29.87,29.87,0,0,1,8.81-21.29l14.33-14.34a29.91,29.91,0,0,1,21.29-8.81h50.75a6.09,6.09,0,0,0,4.33-1.8l24.26-24.25a6.74,6.74,0,0,0,2-4.78v-14.46a2.91,2.91,0,0,1,5.81,0v14.46a12.51,12.51,0,0,1-3.68,8.89l-24.26,24.25a11.86,11.86,0,0,1-8.44,3.5H509.86a24.17,24.17,0,0,0-17.18,7.11L478.35,1177a24.09,24.09,0,0,0-7.11,17.18V1271a12.71,12.71,0,0,0,12.68,12.69H586.8a12.53,12.53,0,0,0,12.51-12.52v-91.4a11.83,11.83,0,0,1,3.5-8.44l32.44-32.44a5.46,5.46,0,0,0,1.6-3.87v-30.53a2.91,2.91,0,0,1,5.81,0V1135a11.19,11.19,0,0,1-3.3,8l-32.44,32.45a6.06,6.06,0,0,0-1.8,4.33v91.4A18.35,18.35,0,0,1,586.8,1289.46Z"
></path><rect
class="cls-4"
x="787.14"
y="943.38"
width="429.45"
height="224.42"
></rect></g>
</svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 40 KiB

@@ -1,149 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="528.89 806.04 942.22 446.84">
<defs><style>
.cls-1 {
fill: #e8eae8;
}
.cls-2 {
fill: #dbdddb;
}
.cls-3 {
fill: #c6842a;
}
.cls-4, .cls-5, .cls-7, .cls-9 {
fill: none;
stroke-miterlimit: 10;
}
.cls-4, .cls-5 {
stroke: #050606;
}
.cls-4, .cls-9 {
stroke-width: 2.44px;
}
.cls-5, .cls-7 {
stroke-width: 1.22px;
}
.cls-6 {
fill: #b7b7b7;
}
.cls-7, .cls-9 {
stroke: #b7b7b7;
}
.cls-8 {
fill: #cbcccb;
}
.cls-10 {
fill: #434543;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><path
class="cls-1"
d="M1469.9,826.68v390.94a19.43,19.43,0,0,1-19.43,19.43H549.53a19.43,19.43,0,0,1-19.43-19.43V826.68a19.42,19.42,0,0,1,19.43-19.42h900.94A19.42,19.42,0,0,1,1469.9,826.68Z"
></path><path
class="cls-2"
d="M574.23,807.26v429.79h-24.7a19.43,19.43,0,0,1-19.43-19.43V826.68a19.42,19.42,0,0,1,19.43-19.42Z"
></path><path
class="cls-2"
d="M1469.9,826.68v390.94a19.43,19.43,0,0,1-19.43,19.43h-37.56V807.26h37.56A19.42,19.42,0,0,1,1469.9,826.68Z"
></path><path
class="cls-3"
d="M574.23,1129.8h-7.47a4.55,4.55,0,0,1-4.55-4.54V919.05a4.55,4.55,0,0,1,4.55-4.55h7.47"
></path><rect
class="cls-4"
x="530.11"
y="807.26"
width="939.78"
height="429.79"
rx="19.42"
></rect><line
class="cls-5"
x1="574.23"
y1="807.26"
x2="574.23"
y2="1237.05"
></line><path
class="cls-5"
d="M574.23,1129.8h-7.47a4.55,4.55,0,0,1-4.55-4.54V919.05a4.55,4.55,0,0,1,4.55-4.55h7.47"
></path><rect
class="cls-6"
x="599.01"
y="970.1"
width="11.52"
height="104.11"
></rect><rect
class="cls-5"
x="599.01"
y="970.1"
width="11.52"
height="104.11"
></rect><path
class="cls-2"
d="M610.53,816.78V935.32l38.37,11.55a7.85,7.85,0,0,1,5.6,7.53V1107a7.87,7.87,0,0,1-7.87,7.87h-36.1v110.58H1406V816.78Zm775.41,384.75H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66h754.51Z"
></path><path
class="cls-1"
d="M1385.94,840.45v361.08H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66Z"
></path><path
class="cls-7"
d="M610.53,816.78V935.32l38.37,11.55a7.85,7.85,0,0,1,5.6,7.53V1107a7.87,7.87,0,0,1-7.87,7.87h-36.1v110.58H1406V816.78Zm775.41,384.75H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66h754.51Z"
></path><path
class="cls-7"
d="M1385.94,840.45v361.08H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66Z"
></path><path
class="cls-7"
d="M1385.94,840.45v361.08H631.43a3.66,3.66,0,0,1-3.66-3.66V1138a3.65,3.65,0,0,1,3.66-3.65h28.3a14.7,14.7,0,0,0,14.71-14.71V931a14.7,14.7,0,0,0-14.71-14.71h-28.3a3.65,3.65,0,0,1-3.66-3.66V844.11a3.66,3.66,0,0,1,3.66-3.66Z"
></path><line
class="cls-7"
x1="666.4"
y1="1132.79"
x2="666.4"
y2="1201.53"
></line><line
class="cls-7"
x1="663.66"
y1="916.86"
x2="663.66"
y2="840.45"
></line><circle
class="cls-8"
cx="644.99"
cy="878.66"
r="10.7"
></circle><circle
class="cls-8"
cx="644.99"
cy="1171.55"
r="10.7"
></circle><circle
class="cls-9"
cx="644.99"
cy="878.66"
r="10.7"
></circle><circle
class="cls-9"
cx="644.99"
cy="1171.55"
r="10.7"
></circle><path
class="cls-10"
d="M1225,1237.05l2.23,11.19a4.25,4.25,0,0,0,4.17,3.42H1249a4.26,4.26,0,0,0,4.18-3.42l2.22-11.19"
></path><path
class="cls-10"
d="M1306.87,1237.05l2.22,11.19a4.26,4.26,0,0,0,4.18,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.22-11.19"
></path><path
class="cls-10"
d="M1388.77,1237.05l2.23,11.19a4.24,4.24,0,0,0,4.17,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.23-11.19"
></path><path
class="cls-4"
d="M1225,1237.05l2.23,11.19a4.25,4.25,0,0,0,4.17,3.42H1249a4.26,4.26,0,0,0,4.18-3.42l2.22-11.19"
></path><path
class="cls-4"
d="M1306.87,1237.05l2.22,11.19a4.26,4.26,0,0,0,4.18,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.22-11.19"
></path><path
class="cls-4"
d="M1388.77,1237.05l2.23,11.19a4.24,4.24,0,0,0,4.17,3.42h17.62a4.25,4.25,0,0,0,4.17-3.42l2.23-11.19"
></path><line
class="cls-4"
x1="1412.9"
y1="807.26"
x2="1412.9"
y2="1237.05"
></line></g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

@@ -1,221 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="479.87 739.66 1073.46 452.36">
<defs><style>
.cls-1 {
fill: #e8eae8;
}
.cls-2 {
fill: #2b2b2b;
}
.cls-3, .cls-5, .cls-7, .cls-8 {
fill: none;
stroke-miterlimit: 10;
}
.cls-3, .cls-5 {
stroke: #050606;
}
.cls-3, .cls-7 {
stroke-width: 2.44px;
}
.cls-4 {
fill: #cbcccb;
}
.cls-5 {
stroke-width: 1.73px;
}
.cls-6 {
fill: #434543;
}
.cls-7, .cls-8 {
stroke: #b7b7b7;
}
.cls-8 {
stroke-width: 1.22px;
}
.cls-9 {
fill: #dbdddb;
}
.cls-10 {
fill: #b7b7b7;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><rect
class="cls-1"
x="541.37"
y="740.89"
width="950.47"
height="441.77"
></rect><path
class="cls-2"
d="M1511.86,740.89h-20V907.47h13.88a4.83,4.83,0,1,1,0,9.65h-13.88v87h13.88a4.82,4.82,0,0,1,4.82,4.83,4.81,4.81,0,0,1-4.82,4.82h-13.88v168.83h20a40.25,40.25,0,0,0,40.25-40.25V781.15A40.25,40.25,0,0,0,1511.86,740.89Zm22.9,400.64a10.68,10.68,0,0,1-21.36,0v-17.4a10.68,10.68,0,1,1,21.36,0Zm0-343.24a10.68,10.68,0,1,1-21.36,0v-17.4a10.68,10.68,0,0,1,21.36,0Z"
></path><path
class="cls-3"
d="M1532.09,740.89h20a0,0,0,0,1,0,0v441.77a0,0,0,0,1,0,0h-20a40.25,40.25,0,0,1-40.25-40.25V781.14a40.25,40.25,0,0,1,40.25-40.25Z"
transform="translate(3043.95 1923.54) rotate(-180)"
></path><path
class="cls-4"
d="M1508.36,780.88V798.3a15.89,15.89,0,0,0,31.78,0V780.88a15.89,15.89,0,1,0-31.78,0Zm5,0a10.68,10.68,0,0,1,21.36,0v17.4a10.68,10.68,0,1,1-21.36,0Z"
></path><path
class="cls-4"
d="M1508.36,1124.11v17.42a15.89,15.89,0,1,0,31.78,0v-17.42a15.89,15.89,0,0,0-31.78,0Zm5,0a10.68,10.68,0,1,1,21.36,0v17.4a10.68,10.68,0,0,1-21.36,0Z"
></path><rect
class="cls-5"
x="1513.41"
y="770.21"
width="21.36"
height="38.76"
rx="10.68"
transform="translate(3048.18 1579.19) rotate(-180)"
></rect><rect
class="cls-5"
x="1508.36"
y="764.99"
width="31.78"
height="49.2"
rx="15.89"
transform="translate(3048.5 1579.18) rotate(-180)"
></rect><rect
class="cls-5"
x="1513.41"
y="1113.44"
width="21.36"
height="38.76"
rx="10.68"
transform="translate(3048.18 2265.65) rotate(-180)"
></rect><rect
class="cls-5"
x="1508.36"
y="1108.22"
width="31.78"
height="49.2"
rx="15.89"
transform="translate(3048.5 2265.65) rotate(-180)"
></rect><path
class="cls-4"
d="M1513.13,912.3a6.95,6.95,0,0,1-7,7h-14.33v-2.15h13.88a4.83,4.83,0,0,0,0-9.65h-13.88v-2.14h14.33A7,7,0,0,1,1513.13,912.3Z"
></path><path
class="cls-4"
d="M1513.13,1009a6.95,6.95,0,0,1-7,7h-14.33v-2.15h13.88a4.83,4.83,0,0,0,0-9.65h-13.88V1002h14.33A7,7,0,0,1,1513.13,1009Z"
></path><path
class="cls-2"
d="M521.33,740.89a40.26,40.26,0,0,0-40.25,40.26V1142.4a40.26,40.26,0,0,0,40.25,40.25h20V740.89Zm-1.53,400.64a10.68,10.68,0,0,1-21.36,0v-17.4a10.68,10.68,0,1,1,21.36,0ZM498.44,780.89a10.68,10.68,0,0,1,21.36,0v17.4a10.68,10.68,0,1,1-21.36,0Z"
></path><rect
class="cls-3"
x="541.37"
y="740.89"
width="950.47"
height="441.77"
></rect><path
class="cls-3"
d="M521.34,740.89h20a0,0,0,0,1,0,0v441.77a0,0,0,0,1,0,0h-20a40.25,40.25,0,0,1-40.25-40.25V781.14A40.25,40.25,0,0,1,521.34,740.89Z"
></path><path
class="cls-4"
d="M520.19,769.64a15.9,15.9,0,0,0-27.13,11.24V798.3a15.89,15.89,0,0,0,31.78,0V780.88A15.87,15.87,0,0,0,520.19,769.64Zm-.39,28.65a10.68,10.68,0,1,1-21.36,0v-17.4a10.68,10.68,0,0,1,21.36,0Z"
></path><path
class="cls-4"
d="M520.19,1112.88a15.89,15.89,0,0,0-27.13,11.23v17.42a15.89,15.89,0,1,0,31.78,0v-17.42A15.85,15.85,0,0,0,520.19,1112.88Zm-.39,28.65a10.68,10.68,0,0,1-21.36,0v-17.4a10.68,10.68,0,1,1,21.36,0Z"
></path><rect
class="cls-5"
x="498.43"
y="770.21"
width="21.36"
height="38.76"
rx="10.68"
></rect><rect
class="cls-5"
x="493.06"
y="764.99"
width="31.78"
height="49.2"
rx="15.89"
></rect><rect
class="cls-5"
x="498.43"
y="1113.44"
width="21.36"
height="38.76"
rx="10.68"
></rect><rect
class="cls-5"
x="493.06"
y="1108.22"
width="31.78"
height="49.2"
rx="15.89"
></rect><rect
class="cls-4"
x="501.66"
y="859.82"
width="14.3"
height="198.79"
rx="7.15"
></rect><rect
class="cls-5"
x="501.66"
y="859.82"
width="14.3"
height="198.79"
rx="7.15"
></rect><path
class="cls-6"
d="M528.29,869.68h13.07a0,0,0,0,1,0,0v179.06a0,0,0,0,1,0,0H528.29a3.45,3.45,0,0,1-3.45-3.45V873.13A3.45,3.45,0,0,1,528.29,869.68Z"
></path><path
class="cls-5"
d="M528.29,869.68h13.07a0,0,0,0,1,0,0v179.06a0,0,0,0,1,0,0H528.29a3.45,3.45,0,0,1-3.45-3.45V873.13A3.45,3.45,0,0,1,528.29,869.68Z"
></path><path
class="cls-6"
d="M1213.75,1182.65h22.83a0,0,0,0,1,0,0v6.15a2,2,0,0,1-2,2h-18.8a2,2,0,0,1-2-2v-6.15A0,0,0,0,1,1213.75,1182.65Z"
></path><path
class="cls-6"
d="M1297.35,1182.65h22.83a0,0,0,0,1,0,0v6.15a2,2,0,0,1-2,2h-18.8a2,2,0,0,1-2-2v-6.15A0,0,0,0,1,1297.35,1182.65Z"
></path><path
class="cls-6"
d="M1381,1182.65h22.83a0,0,0,0,1,0,0v6.15a2,2,0,0,1-2,2H1383a2,2,0,0,1-2-2v-6.15A0,0,0,0,1,1381,1182.65Z"
></path><path
class="cls-3"
d="M1213.75,1182.65h22.83a0,0,0,0,1,0,0v6.15a2,2,0,0,1-2,2h-18.8a2,2,0,0,1-2-2v-6.15A0,0,0,0,1,1213.75,1182.65Z"
></path><path
class="cls-3"
d="M1297.35,1182.65h22.83a0,0,0,0,1,0,0v6.15a2,2,0,0,1-2,2h-18.8a2,2,0,0,1-2-2v-6.15A0,0,0,0,1,1297.35,1182.65Z"
></path><path
class="cls-3"
d="M1381,1182.65h22.83a0,0,0,0,1,0,0v6.15a2,2,0,0,1-2,2H1383a2,2,0,0,1-2-2v-6.15A0,0,0,0,1,1381,1182.65Z"
></path><path
class="cls-7"
d="M1465.76,777.61v370.21H637.27V831.44a9.18,9.18,0,0,0-9.18-9.18H605.76a4.34,4.34,0,0,1-4.34-4.33V782a4.34,4.34,0,0,1,4.34-4.34Z"
></path><line
class="cls-8"
x1="637.28"
y1="831.44"
x2="637.28"
y2="777.61"
></line><path
class="cls-9"
d="M1472.8,766.19H588.58a2.34,2.34,0,0,0-2.34,2.34v63.55a2.34,2.34,0,0,0,2.34,2.34h29.94a4.74,4.74,0,0,1,4.74,4.74v312.71a5.55,5.55,0,0,0,5.57,5.55h844a4.87,4.87,0,0,0,4.88-4.87V771.07A4.87,4.87,0,0,0,1472.8,766.19Zm-7,381.63H637.27V831.44a9.18,9.18,0,0,0-9.18-9.18H605.76a4.34,4.34,0,0,1-4.34-4.33V782a4.34,4.34,0,0,1,4.34-4.34h860Z"
></path><circle
class="cls-4"
cx="620.54"
cy="798.13"
r="8.42"
></circle><circle
class="cls-7"
cx="620.54"
cy="798.13"
r="8.42"
></circle><rect
class="cls-10"
x="564.75"
y="905.43"
width="11.84"
height="114.57"
rx="2.32"
></rect><rect
class="cls-5"
x="564.75"
y="905.43"
width="11.84"
height="114.57"
rx="2.32"
></rect><path
class="cls-8"
d="M1472.8,766.19H588.58a2.34,2.34,0,0,0-2.34,2.34v63.55a2.34,2.34,0,0,0,2.34,2.34h29.94a4.74,4.74,0,0,1,4.74,4.74v312.71a5.55,5.55,0,0,0,5.57,5.55h844a4.87,4.87,0,0,0,4.88-4.87V771.07A4.87,4.87,0,0,0,1472.8,766.19Zm-7,381.63H637.27V831.44a9.18,9.18,0,0,0-9.18-9.18H605.76a4.34,4.34,0,0,1-4.34-4.33V782a4.34,4.34,0,0,1,4.34-4.34h860Z"
></path></g>
</svg>

Before

Width:  |  Height:  |  Size: 7.4 KiB

@@ -1,213 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="479.57 786.58 1040.84 433.17">
<defs><style>
.cls-1 {
fill: #cccccb;
}
.cls-2 {
fill: #2b2b2b;
}
.cls-3, .cls-6, .cls-7, .cls-8 {
fill: none;
stroke-miterlimit: 10;
}
.cls-3, .cls-6, .cls-7 {
stroke: #050606;
}
.cls-3, .cls-8 {
stroke-width: 1.65px;
}
.cls-4 {
fill: #40403f;
}
.cls-5 {
fill: #ddd;
}
.cls-6 {
stroke-width: 1.62px;
}
.cls-7 {
stroke-width: 1.64px;
}
.cls-8 {
stroke: #fff;
}
.cls-9 {
fill: #353535;
}
.cls-10 {
fill: #c08c2d;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><path
class="cls-1"
d="M595,923.44H519.6A10.46,10.46,0,0,1,509.14,913V802.7a15.28,15.28,0,0,1,15.28-15.28h979.89a15.29,15.29,0,0,1,15.29,15.29v400.93a15.3,15.3,0,0,1-15.29,15.29H524.42a15.28,15.28,0,0,1-15.28-15.28V1102.1a10.46,10.46,0,0,1,10.46-10.46H595"
></path><rect
class="cls-2"
x="611.37"
y="796.48"
width="819.83"
height="411.47"
></rect><line
class="cls-3"
x1="1441.99"
y1="787.41"
x2="1441.99"
y2="1218.92"
></line><path
class="cls-4"
d="M620.91,851.7v302.78a1.87,1.87,0,0,1-1.87,1.87h-13.8a8.7,8.7,0,0,1-.89,0,10.23,10.23,0,0,1-9.35-10.2v-286a10.24,10.24,0,0,1,9.35-10.2,8.7,8.7,0,0,1,.89,0H619A1.87,1.87,0,0,1,620.91,851.7Z"
></path><rect
class="cls-5"
x="480.4"
y="942.42"
width="114.6"
height="127.58"
></rect><rect
class="cls-3"
x="480.4"
y="942.42"
width="114.6"
height="127.58"
></rect><path
class="cls-6"
d="M595,923.44H519.6A10.46,10.46,0,0,1,509.14,913V802.7a15.28,15.28,0,0,1,15.28-15.28h979.89a15.29,15.29,0,0,1,15.29,15.29v400.93a15.3,15.3,0,0,1-15.29,15.29H524.42a15.28,15.28,0,0,1-15.28-15.28V1102.1a10.46,10.46,0,0,1,10.46-10.46H595"
></path><path
class="cls-2"
d="M584.65,970.14H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3V973.11A3,3,0,0,1,584.65,970.14Z"
></path><rect
class="cls-2"
x="560.58"
y="976.5"
width="9.04"
height="16.58"
rx="2.72"
></rect><path
class="cls-2"
d="M584.65,1026.63H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3v-18.49A3,3,0,0,1,584.65,1026.63Z"
></path><rect
class="cls-2"
x="560.58"
y="1028.91"
width="9.04"
height="16.58"
rx="2.72"
></rect><path
class="cls-3"
d="M584.65,970.14H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3V973.11A3,3,0,0,1,584.65,970.14Z"
></path><rect
class="cls-3"
x="560.58"
y="976.5"
width="9.04"
height="16.58"
rx="2.72"
></rect><path
class="cls-3"
d="M584.65,1026.63H595a0,0,0,0,1,0,0v24.44a0,0,0,0,1,0,0H584.65a3,3,0,0,1-3-3v-18.49A3,3,0,0,1,584.65,1026.63Z"
></path><rect
class="cls-3"
x="560.58"
y="1028.91"
width="9.04"
height="16.58"
rx="2.72"
></rect><polyline
class="cls-7"
points="611.37 1156.35 611.37 1207.95 1431.2 1207.95 1431.2 796.48 611.37 796.48 611.37 849.83"
></polyline><line
class="cls-3"
x1="611.37"
y1="1207.95"
x2="611.37"
y2="1218.93"
></line><line
class="cls-3"
x1="611.37"
y1="796.48"
x2="611.37"
y2="787.42"
></line><rect
class="cls-8"
x="560.58"
y="1107.17"
width="18.37"
height="41.67"
rx="4.91"
></rect><rect
class="cls-8"
x="528.51"
y="1107.17"
width="18.37"
height="41.67"
rx="4.91"
></rect><rect
class="cls-8"
x="560.58"
y="1166.28"
width="18.37"
height="41.67"
rx="4.91"
></rect><rect
class="cls-8"
x="528.51"
y="1166.28"
width="18.37"
height="41.67"
rx="4.91"
></rect><rect
class="cls-8"
x="560.58"
y="804.46"
width="18.37"
height="41.67"
rx="4.91"
></rect><rect
class="cls-8"
x="528.51"
y="804.46"
width="18.37"
height="41.67"
rx="4.91"
></rect><rect
class="cls-8"
x="560.58"
y="863.57"
width="18.37"
height="41.67"
rx="4.91"
></rect><rect
class="cls-8"
x="528.51"
y="863.57"
width="18.37"
height="41.67"
rx="4.91"
></rect><circle
class="cls-8"
cx="1476.63"
cy="831.74"
r="27.15"
></circle><circle
class="cls-8"
cx="1476.63"
cy="1173.49"
r="27.15"
></circle><rect
class="cls-9"
x="676.15"
y="804.6"
width="742.79"
height="396.03"
></rect><path
class="cls-10"
d="M604.35,849.87v306.44a10.23,10.23,0,0,1-9.35-10.2v-286A10.24,10.24,0,0,1,604.35,849.87Z"
></path><path
class="cls-3"
d="M605.24,849.83H619a1.87,1.87,0,0,1,1.87,1.87v302.78a1.87,1.87,0,0,1-1.87,1.87h-13.8A10.24,10.24,0,0,1,595,1146.11v-286A10.24,10.24,0,0,1,605.24,849.83Z"
></path><rect
class="cls-6"
x="676.15"
y="804.6"
width="742.79"
height="396.03"
></rect></g>
</svg>

Before

Width:  |  Height:  |  Size: 5.2 KiB

@@ -1,510 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="505.33 784.55 1040.95 426.95">
<defs><style>
.cls-1 {
fill: #e8eae8;
}
.cls-2 {
fill: #c5c9c9;
}
.cls-3 {
fill: #d3d3d3;
}
.cls-4 {
fill: #c6842a;
}
.cls-5 {
fill: #353535;
}
.cls-6 {
fill: #dbdddb;
}
.cls-11, .cls-12, .cls-13, .cls-15, .cls-7, .cls-8 {
fill: none;
stroke-miterlimit: 10;
}
.cls-12, .cls-13, .cls-7, .cls-8 {
stroke: #050606;
}
.cls-7 {
stroke-width: 2.44px;
}
.cls-11, .cls-15, .cls-8 {
stroke-width: 1.22px;
}
.cls-9 {
fill: #ffe091;
}
.cls-10 {
fill: #cbcccb;
}
.cls-11 {
stroke: #b7b7b7;
}
.cls-12 {
stroke-width: 2.36px;
}
.cls-13 {
stroke-width: 1.25px;
}
.cls-14 {
fill: #050606;
}
.cls-15 {
stroke: #ffe091;
stroke-linecap: round;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><path
class="cls-1"
d="M1421.48,785.78h91.06A22.44,22.44,0,0,1,1535,808.22v379.61a22.45,22.45,0,0,1-22.44,22.45h-91.06"
></path><rect
class="cls-2"
x="1435.08"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-2"
x="1494.51"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-2"
x="1435.08"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-2"
x="1494.51"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-3"
x="506.55"
y="858.91"
width="88.59"
height="276.51"
></rect><rect
class="cls-1"
x="579.58"
y="785.78"
width="191.61"
height="424.5"
></rect><path
class="cls-1"
d="M595.13,1210.27H528.66a22.1,22.1,0,0,1-22.11-22.11v-65.81l52.68-22.79-1.8-192.37L506.55,884V807.9a22.11,22.11,0,0,1,22.11-22.12h66.47Z"
></path><path
class="cls-4"
d="M595.13,901.4H571.68a20,20,0,0,0-13.93,5.48,58.89,58.89,0,0,1-20,12.61,7,7,0,0,0-4.53,6.57v153a7,7,0,0,0,4.53,6.57,58.89,58.89,0,0,1,20,12.61,20,20,0,0,0,13.93,5.49h23.45"
></path><path
class="cls-5"
d="M1535,1014.12h5.26a4.8,4.8,0,0,1,4.8,4.8v104.72a4.8,4.8,0,0,1-4.8,4.8H1535a0,0,0,0,1,0,0V1014.12A0,0,0,0,1,1535,1014.12Z"
></path><path
class="cls-6"
d="M1429.58,785.78v424.49H632.82V1097.4a4.66,4.66,0,0,1,4.67-4.65h28.16a11.68,11.68,0,0,0,11.67-11.68V916.93a12.75,12.75,0,0,0-12.24-12.74l-27.79-7.41a4.66,4.66,0,0,1-4.47-4.64V785.78Z"
></path><path
class="cls-7"
d="M557.43,907.19,506.55,884V807.9a22.11,22.11,0,0,1,22.11-22.12h66.47"
></path><path
class="cls-7"
d="M559.23,1099.56l-52.68,22.79v65.81a22.1,22.1,0,0,0,22.11,22.11h66.47"
></path><path
class="cls-2"
d="M529.59,841.87h22.9a5.13,5.13,0,0,0,4.43-2.56l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.83a5.13,5.13,0,0,0-4.43-2.56h-22.9a5.11,5.11,0,0,0-4.42,2.56l-11.45,19.83a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.11,5.11,0,0,0,529.59,841.87Z"
></path><path
class="cls-8"
d="M529.59,841.87h22.9a5.13,5.13,0,0,0,4.43-2.56l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.83a5.13,5.13,0,0,0-4.43-2.56h-22.9a5.11,5.11,0,0,0-4.42,2.56l-11.45,19.83a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.11,5.11,0,0,0,529.59,841.87Z"
></path><circle
class="cls-9"
cx="541.04"
cy="816.93"
r="14.1"
></circle><circle
class="cls-8"
cx="541.04"
cy="816.93"
r="14.1"
></circle><path
class="cls-2"
d="M529.59,1202h22.9a5.12,5.12,0,0,0,4.43-2.55l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.84a5.12,5.12,0,0,0-4.43-2.55h-22.9a5.1,5.1,0,0,0-4.42,2.55l-11.45,19.84a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.1,5.1,0,0,0,529.59,1202Z"
></path><path
class="cls-8"
d="M529.59,1202h22.9a5.12,5.12,0,0,0,4.43-2.55l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.84a5.12,5.12,0,0,0-4.43-2.55h-22.9a5.1,5.1,0,0,0-4.42,2.55l-11.45,19.84a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.1,5.1,0,0,0,529.59,1202Z"
></path><circle
class="cls-9"
cx="541.04"
cy="1177.09"
r="14.1"
></circle><circle
class="cls-8"
cx="541.04"
cy="1177.09"
r="14.1"
></circle><path
class="cls-2"
d="M1494.14,841.87H1517a5.11,5.11,0,0,0,4.42-2.56l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.83A5.11,5.11,0,0,0,1517,792h-22.9a5.13,5.13,0,0,0-4.43,2.56l-11.45,19.83a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.13,5.13,0,0,0,1494.14,841.87Z"
></path><path
class="cls-8"
d="M1494.14,841.87H1517a5.11,5.11,0,0,0,4.42-2.56l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.83A5.11,5.11,0,0,0,1517,792h-22.9a5.13,5.13,0,0,0-4.43,2.56l-11.45,19.83a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.13,5.13,0,0,0,1494.14,841.87Z"
></path><circle
class="cls-9"
cx="1505.59"
cy="816.93"
r="14.1"
></circle><circle
class="cls-8"
cx="1505.59"
cy="816.93"
r="14.1"
></circle><path
class="cls-2"
d="M1494.14,1202H1517a5.1,5.1,0,0,0,4.42-2.55l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.84a5.1,5.1,0,0,0-4.42-2.55h-22.9a5.12,5.12,0,0,0-4.43,2.55l-11.45,19.84a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.12,5.12,0,0,0,1494.14,1202Z"
></path><path
class="cls-8"
d="M1494.14,1202H1517a5.1,5.1,0,0,0,4.42-2.55l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.84a5.1,5.1,0,0,0-4.42-2.55h-22.9a5.12,5.12,0,0,0-4.43,2.55l-11.45,19.84a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.12,5.12,0,0,0,1494.14,1202Z"
></path><circle
class="cls-9"
cx="1505.59"
cy="1177.09"
r="14.1"
></circle><circle
class="cls-8"
cx="1505.59"
cy="1177.09"
r="14.1"
></circle><path
class="cls-1"
d="M1412.61,816.13v360.16h-755a2.5,2.5,0,0,1-2.51-2.5v-64.32a2.5,2.5,0,0,1,2.51-2.5h30.47a12.81,12.81,0,0,0,12.81-12.82V894.25a12.81,12.81,0,0,0-12.81-12.82H657.58a2.5,2.5,0,0,1-2.51-2.5V818.64a2.51,2.51,0,0,1,2.51-2.51Z"
></path><circle
class="cls-10"
cx="672.06"
cy="1154.92"
r="8.89"
></circle><circle
class="cls-11"
cx="672.06"
cy="1154.92"
r="8.89"
></circle><circle
class="cls-10"
cx="672.06"
cy="838.98"
r="8.89"
></circle><circle
class="cls-11"
cx="672.06"
cy="838.98"
r="8.89"
></circle><line
class="cls-7"
x1="506.55"
y1="884.01"
x2="506.55"
y2="1122.35"
></line><path
class="cls-12"
d="M595.13,901.4H571.68a20,20,0,0,0-13.93,5.48,58.89,58.89,0,0,1-20,12.61,7,7,0,0,0-4.53,6.57v153a7,7,0,0,0,4.53,6.57,58.89,58.89,0,0,1,20,12.61,20,20,0,0,0,13.93,5.49h23.45"
></path><rect
class="cls-2"
x="621.34"
y="935.2"
width="11.49"
height="113.49"
></rect><rect
class="cls-13"
x="621.34"
y="935.2"
width="11.49"
height="113.49"
></rect><rect
class="cls-1"
x="712.79"
y="826.99"
width="685.79"
height="336.38"
></rect><path
class="cls-7"
d="M1421.48,785.78h91.06A22.44,22.44,0,0,1,1535,808.22v379.61a22.45,22.45,0,0,1-22.44,22.45h-91.06"
></path><rect
class="cls-8"
x="1435.08"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-8"
x="1494.51"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-8"
x="1435.08"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-8"
x="1494.51"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><path
class="cls-7"
d="M1535,1014.12h5.26a4.8,4.8,0,0,1,4.8,4.8v104.72a4.8,4.8,0,0,1-4.8,4.8H1535a0,0,0,0,1,0,0V1014.12A0,0,0,0,1,1535,1014.12Z"
></path><circle
class="cls-14"
cx="1453.85"
cy="1032.4"
r="5.56"
></circle><circle
class="cls-14"
cx="1453.85"
cy="1114.38"
r="5.56"
></circle><line
class="cls-11"
x1="688.05"
y1="1106.97"
x2="688.05"
y2="1176.29"
></line><line
class="cls-11"
x1="688.05"
y1="881.43"
x2="688.05"
y2="816.13"
></line><rect
class="cls-11"
x="712.79"
y="826.99"
width="685.79"
height="336.38"
></rect><line
class="cls-15"
x1="538.46"
y1="928.91"
x2="568.22"
y2="928.91"
></line><line
class="cls-15"
x1="538.46"
y1="933.4"
x2="568.22"
y2="933.4"
></line><line
class="cls-15"
x1="538.46"
y1="937.89"
x2="568.22"
y2="937.89"
></line><line
class="cls-15"
x1="538.46"
y1="942.37"
x2="568.22"
y2="942.37"
></line><line
class="cls-15"
x1="538.46"
y1="946.86"
x2="568.22"
y2="946.86"
></line><line
class="cls-15"
x1="538.46"
y1="951.35"
x2="568.22"
y2="951.35"
></line><line
class="cls-15"
x1="538.46"
y1="955.83"
x2="568.22"
y2="955.83"
></line><line
class="cls-15"
x1="538.46"
y1="960.32"
x2="568.22"
y2="960.32"
></line><line
class="cls-15"
x1="538.46"
y1="964.81"
x2="568.22"
y2="964.81"
></line><line
class="cls-15"
x1="538.46"
y1="969.29"
x2="568.22"
y2="969.29"
></line><line
class="cls-15"
x1="538.46"
y1="973.78"
x2="568.22"
y2="973.78"
></line><line
class="cls-15"
x1="538.46"
y1="978.26"
x2="568.22"
y2="978.26"
></line><line
class="cls-15"
x1="538.46"
y1="982.75"
x2="568.22"
y2="982.75"
></line><line
class="cls-15"
x1="538.46"
y1="987.24"
x2="568.22"
y2="987.24"
></line><line
class="cls-15"
x1="538.46"
y1="991.72"
x2="568.22"
y2="991.72"
></line><line
class="cls-15"
x1="538.46"
y1="996.21"
x2="568.22"
y2="996.21"
></line><line
class="cls-15"
x1="538.46"
y1="1000.7"
x2="568.22"
y2="1000.7"
></line><line
class="cls-15"
x1="538.46"
y1="1005.18"
x2="568.22"
y2="1005.18"
></line><line
class="cls-15"
x1="538.46"
y1="1009.67"
x2="568.22"
y2="1009.67"
></line><line
class="cls-15"
x1="538.46"
y1="1014.16"
x2="568.22"
y2="1014.16"
></line><line
class="cls-15"
x1="538.46"
y1="1018.64"
x2="568.22"
y2="1018.64"
></line><line
class="cls-15"
x1="538.46"
y1="1023.13"
x2="568.22"
y2="1023.13"
></line><line
class="cls-15"
x1="538.46"
y1="1027.62"
x2="568.22"
y2="1027.62"
></line><line
class="cls-15"
x1="538.46"
y1="1032.1"
x2="568.22"
y2="1032.1"
></line><line
class="cls-15"
x1="538.46"
y1="1036.59"
x2="568.22"
y2="1036.59"
></line><line
class="cls-15"
x1="538.46"
y1="1041.08"
x2="568.22"
y2="1041.08"
></line><line
class="cls-15"
x1="538.46"
y1="1045.56"
x2="568.22"
y2="1045.56"
></line><line
class="cls-15"
x1="538.46"
y1="1050.05"
x2="568.22"
y2="1050.05"
></line><line
class="cls-15"
x1="538.46"
y1="1054.53"
x2="568.22"
y2="1054.53"
></line><line
class="cls-15"
x1="538.46"
y1="1059.02"
x2="568.22"
y2="1059.02"
></line><line
class="cls-15"
x1="538.46"
y1="1063.51"
x2="568.22"
y2="1063.51"
></line><line
class="cls-15"
x1="538.46"
y1="1067.99"
x2="568.22"
y2="1067.99"
></line><line
class="cls-15"
x1="538.46"
y1="1072.48"
x2="568.22"
y2="1072.48"
></line><line
class="cls-15"
x1="538.46"
y1="1076.97"
x2="568.22"
y2="1076.97"
></line><path
class="cls-11"
d="M632.82,1210.27V1097.4a4.66,4.66,0,0,1,4.67-4.65h28.16a11.68,11.68,0,0,0,11.67-11.68V916.93c0-6.85-5.05-10.17-12.24-12.74l-27.79-7.41a4.66,4.66,0,0,1-4.47-4.64V785.78"
></path><path
class="cls-11"
d="M1412.61,816.13v360.16h-755a2.5,2.5,0,0,1-2.51-2.5v-64.32a2.5,2.5,0,0,1,2.51-2.5h30.47a12.81,12.81,0,0,0,12.81-12.82V894.25a12.81,12.81,0,0,0-12.81-12.82H657.58a2.5,2.5,0,0,1-2.51-2.5V818.64a2.51,2.51,0,0,1,2.51-2.51Z"
></path><polyline
class="cls-7"
points="632.82 785.77 1429.58 785.77 1429.58 1210.27 632.82 1210.27"
></polyline><polyline
class="cls-7"
points="632.82 1210.27 595.13 1210.27 595.13 785.77 632.82 785.77"
></polyline></g>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

@@ -1,510 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="505.33 784.55 1040.95 426.95">
<defs><style>
.cls-1 {
fill: #e8eae8;
}
.cls-2 {
fill: #c5c9c9;
}
.cls-3 {
fill: #d3d3d3;
}
.cls-4 {
fill: #c6842a;
}
.cls-5 {
fill: #353535;
}
.cls-6 {
fill: #dbdddb;
}
.cls-11, .cls-12, .cls-13, .cls-15, .cls-7, .cls-8 {
fill: none;
stroke-miterlimit: 10;
}
.cls-12, .cls-13, .cls-7, .cls-8 {
stroke: #050606;
}
.cls-7 {
stroke-width: 2.44px;
}
.cls-11, .cls-15, .cls-8 {
stroke-width: 1.22px;
}
.cls-9 {
fill: #ffe091;
}
.cls-10 {
fill: #cbcccb;
}
.cls-11 {
stroke: #b7b7b7;
}
.cls-12 {
stroke-width: 2.36px;
}
.cls-13 {
stroke-width: 1.25px;
}
.cls-14 {
fill: #050606;
}
.cls-15 {
stroke: #ffe091;
stroke-linecap: round;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><path
class="cls-1"
d="M1421.48,785.78h91.06A22.44,22.44,0,0,1,1535,808.22v379.61a22.45,22.45,0,0,1-22.44,22.45h-91.06"
></path><rect
class="cls-2"
x="1435.08"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-2"
x="1494.51"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-2"
x="1435.08"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-2"
x="1494.51"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-3"
x="506.55"
y="858.91"
width="88.59"
height="276.51"
></rect><rect
class="cls-1"
x="579.58"
y="785.78"
width="191.61"
height="424.5"
></rect><path
class="cls-1"
d="M595.13,1210.27H528.66a22.1,22.1,0,0,1-22.11-22.11v-65.81l52.68-22.79-1.8-192.37L506.55,884V807.9a22.11,22.11,0,0,1,22.11-22.12h66.47Z"
></path><path
class="cls-4"
d="M595.13,901.4H571.68a20,20,0,0,0-13.93,5.48,58.89,58.89,0,0,1-20,12.61,7,7,0,0,0-4.53,6.57v153a7,7,0,0,0,4.53,6.57,58.89,58.89,0,0,1,20,12.61,20,20,0,0,0,13.93,5.49h23.45"
></path><path
class="cls-5"
d="M1535,1014.12h5.26a4.8,4.8,0,0,1,4.8,4.8v104.72a4.8,4.8,0,0,1-4.8,4.8H1535a0,0,0,0,1,0,0V1014.12A0,0,0,0,1,1535,1014.12Z"
></path><path
class="cls-6"
d="M1429.58,785.78v424.49H632.82V1097.4a4.66,4.66,0,0,1,4.67-4.65h28.16a11.68,11.68,0,0,0,11.67-11.68V916.93a12.75,12.75,0,0,0-12.24-12.74l-27.79-7.41a4.66,4.66,0,0,1-4.47-4.64V785.78Z"
></path><path
class="cls-7"
d="M557.43,907.19,506.55,884V807.9a22.11,22.11,0,0,1,22.11-22.12h66.47"
></path><path
class="cls-7"
d="M559.23,1099.56l-52.68,22.79v65.81a22.1,22.1,0,0,0,22.11,22.11h66.47"
></path><path
class="cls-2"
d="M529.59,841.87h22.9a5.13,5.13,0,0,0,4.43-2.56l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.83a5.13,5.13,0,0,0-4.43-2.56h-22.9a5.11,5.11,0,0,0-4.42,2.56l-11.45,19.83a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.11,5.11,0,0,0,529.59,841.87Z"
></path><path
class="cls-8"
d="M529.59,841.87h22.9a5.13,5.13,0,0,0,4.43-2.56l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.83a5.13,5.13,0,0,0-4.43-2.56h-22.9a5.11,5.11,0,0,0-4.42,2.56l-11.45,19.83a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.11,5.11,0,0,0,529.59,841.87Z"
></path><circle
class="cls-9"
cx="541.04"
cy="816.93"
r="14.1"
></circle><circle
class="cls-8"
cx="541.04"
cy="816.93"
r="14.1"
></circle><path
class="cls-2"
d="M529.59,1202h22.9a5.12,5.12,0,0,0,4.43-2.55l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.84a5.12,5.12,0,0,0-4.43-2.55h-22.9a5.1,5.1,0,0,0-4.42,2.55l-11.45,19.84a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.1,5.1,0,0,0,529.59,1202Z"
></path><path
class="cls-8"
d="M529.59,1202h22.9a5.12,5.12,0,0,0,4.43-2.55l11.45-19.83a5.12,5.12,0,0,0,0-5.11l-11.45-19.84a5.12,5.12,0,0,0-4.43-2.55h-22.9a5.1,5.1,0,0,0-4.42,2.55l-11.45,19.84a5.08,5.08,0,0,0,0,5.11l11.45,19.83A5.1,5.1,0,0,0,529.59,1202Z"
></path><circle
class="cls-9"
cx="541.04"
cy="1177.09"
r="14.1"
></circle><circle
class="cls-8"
cx="541.04"
cy="1177.09"
r="14.1"
></circle><path
class="cls-2"
d="M1494.14,841.87H1517a5.11,5.11,0,0,0,4.42-2.56l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.83A5.11,5.11,0,0,0,1517,792h-22.9a5.13,5.13,0,0,0-4.43,2.56l-11.45,19.83a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.13,5.13,0,0,0,1494.14,841.87Z"
></path><path
class="cls-8"
d="M1494.14,841.87H1517a5.11,5.11,0,0,0,4.42-2.56l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.83A5.11,5.11,0,0,0,1517,792h-22.9a5.13,5.13,0,0,0-4.43,2.56l-11.45,19.83a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.13,5.13,0,0,0,1494.14,841.87Z"
></path><circle
class="cls-9"
cx="1505.59"
cy="816.93"
r="14.1"
></circle><circle
class="cls-8"
cx="1505.59"
cy="816.93"
r="14.1"
></circle><path
class="cls-2"
d="M1494.14,1202H1517a5.1,5.1,0,0,0,4.42-2.55l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.84a5.1,5.1,0,0,0-4.42-2.55h-22.9a5.12,5.12,0,0,0-4.43,2.55l-11.45,19.84a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.12,5.12,0,0,0,1494.14,1202Z"
></path><path
class="cls-8"
d="M1494.14,1202H1517a5.1,5.1,0,0,0,4.42-2.55l11.45-19.83a5.08,5.08,0,0,0,0-5.11l-11.45-19.84a5.1,5.1,0,0,0-4.42-2.55h-22.9a5.12,5.12,0,0,0-4.43,2.55l-11.45,19.84a5.12,5.12,0,0,0,0,5.11l11.45,19.83A5.12,5.12,0,0,0,1494.14,1202Z"
></path><circle
class="cls-9"
cx="1505.59"
cy="1177.09"
r="14.1"
></circle><circle
class="cls-8"
cx="1505.59"
cy="1177.09"
r="14.1"
></circle><path
class="cls-1"
d="M1412.61,816.13v360.16h-755a2.5,2.5,0,0,1-2.51-2.5v-64.32a2.5,2.5,0,0,1,2.51-2.5h30.47a12.81,12.81,0,0,0,12.81-12.82V894.25a12.81,12.81,0,0,0-12.81-12.82H657.58a2.5,2.5,0,0,1-2.51-2.5V818.64a2.51,2.51,0,0,1,2.51-2.51Z"
></path><circle
class="cls-10"
cx="672.06"
cy="1154.92"
r="8.89"
></circle><circle
class="cls-11"
cx="672.06"
cy="1154.92"
r="8.89"
></circle><circle
class="cls-10"
cx="672.06"
cy="838.98"
r="8.89"
></circle><circle
class="cls-11"
cx="672.06"
cy="838.98"
r="8.89"
></circle><line
class="cls-7"
x1="506.55"
y1="884.01"
x2="506.55"
y2="1122.35"
></line><path
class="cls-12"
d="M595.13,901.4H571.68a20,20,0,0,0-13.93,5.48,58.89,58.89,0,0,1-20,12.61,7,7,0,0,0-4.53,6.57v153a7,7,0,0,0,4.53,6.57,58.89,58.89,0,0,1,20,12.61,20,20,0,0,0,13.93,5.49h23.45"
></path><rect
class="cls-2"
x="621.34"
y="935.2"
width="11.49"
height="113.49"
></rect><rect
class="cls-13"
x="621.34"
y="935.2"
width="11.49"
height="113.49"
></rect><rect
class="cls-1"
x="712.79"
y="826.99"
width="685.79"
height="336.38"
></rect><path
class="cls-7"
d="M1421.48,785.78h91.06A22.44,22.44,0,0,1,1535,808.22v379.61a22.45,22.45,0,0,1-22.44,22.45h-91.06"
></path><rect
class="cls-8"
x="1435.08"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-8"
x="1494.51"
y="1005.05"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-8"
x="1435.08"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><rect
class="cls-8"
x="1494.51"
y="1128.44"
width="26.44"
height="11.33"
rx="5.67"
></rect><path
class="cls-7"
d="M1535,1014.12h5.26a4.8,4.8,0,0,1,4.8,4.8v104.72a4.8,4.8,0,0,1-4.8,4.8H1535a0,0,0,0,1,0,0V1014.12A0,0,0,0,1,1535,1014.12Z"
></path><circle
class="cls-14"
cx="1453.85"
cy="1032.4"
r="5.56"
></circle><circle
class="cls-14"
cx="1453.85"
cy="1114.38"
r="5.56"
></circle><line
class="cls-11"
x1="688.05"
y1="1106.97"
x2="688.05"
y2="1176.29"
></line><line
class="cls-11"
x1="688.05"
y1="881.43"
x2="688.05"
y2="816.13"
></line><rect
class="cls-11"
x="712.79"
y="826.99"
width="685.79"
height="336.38"
></rect><line
class="cls-15"
x1="538.46"
y1="928.91"
x2="568.22"
y2="928.91"
></line><line
class="cls-15"
x1="538.46"
y1="933.4"
x2="568.22"
y2="933.4"
></line><line
class="cls-15"
x1="538.46"
y1="937.89"
x2="568.22"
y2="937.89"
></line><line
class="cls-15"
x1="538.46"
y1="942.37"
x2="568.22"
y2="942.37"
></line><line
class="cls-15"
x1="538.46"
y1="946.86"
x2="568.22"
y2="946.86"
></line><line
class="cls-15"
x1="538.46"
y1="951.35"
x2="568.22"
y2="951.35"
></line><line
class="cls-15"
x1="538.46"
y1="955.83"
x2="568.22"
y2="955.83"
></line><line
class="cls-15"
x1="538.46"
y1="960.32"
x2="568.22"
y2="960.32"
></line><line
class="cls-15"
x1="538.46"
y1="964.81"
x2="568.22"
y2="964.81"
></line><line
class="cls-15"
x1="538.46"
y1="969.29"
x2="568.22"
y2="969.29"
></line><line
class="cls-15"
x1="538.46"
y1="973.78"
x2="568.22"
y2="973.78"
></line><line
class="cls-15"
x1="538.46"
y1="978.26"
x2="568.22"
y2="978.26"
></line><line
class="cls-15"
x1="538.46"
y1="982.75"
x2="568.22"
y2="982.75"
></line><line
class="cls-15"
x1="538.46"
y1="987.24"
x2="568.22"
y2="987.24"
></line><line
class="cls-15"
x1="538.46"
y1="991.72"
x2="568.22"
y2="991.72"
></line><line
class="cls-15"
x1="538.46"
y1="996.21"
x2="568.22"
y2="996.21"
></line><line
class="cls-15"
x1="538.46"
y1="1000.7"
x2="568.22"
y2="1000.7"
></line><line
class="cls-15"
x1="538.46"
y1="1005.18"
x2="568.22"
y2="1005.18"
></line><line
class="cls-15"
x1="538.46"
y1="1009.67"
x2="568.22"
y2="1009.67"
></line><line
class="cls-15"
x1="538.46"
y1="1014.16"
x2="568.22"
y2="1014.16"
></line><line
class="cls-15"
x1="538.46"
y1="1018.64"
x2="568.22"
y2="1018.64"
></line><line
class="cls-15"
x1="538.46"
y1="1023.13"
x2="568.22"
y2="1023.13"
></line><line
class="cls-15"
x1="538.46"
y1="1027.62"
x2="568.22"
y2="1027.62"
></line><line
class="cls-15"
x1="538.46"
y1="1032.1"
x2="568.22"
y2="1032.1"
></line><line
class="cls-15"
x1="538.46"
y1="1036.59"
x2="568.22"
y2="1036.59"
></line><line
class="cls-15"
x1="538.46"
y1="1041.08"
x2="568.22"
y2="1041.08"
></line><line
class="cls-15"
x1="538.46"
y1="1045.56"
x2="568.22"
y2="1045.56"
></line><line
class="cls-15"
x1="538.46"
y1="1050.05"
x2="568.22"
y2="1050.05"
></line><line
class="cls-15"
x1="538.46"
y1="1054.53"
x2="568.22"
y2="1054.53"
></line><line
class="cls-15"
x1="538.46"
y1="1059.02"
x2="568.22"
y2="1059.02"
></line><line
class="cls-15"
x1="538.46"
y1="1063.51"
x2="568.22"
y2="1063.51"
></line><line
class="cls-15"
x1="538.46"
y1="1067.99"
x2="568.22"
y2="1067.99"
></line><line
class="cls-15"
x1="538.46"
y1="1072.48"
x2="568.22"
y2="1072.48"
></line><line
class="cls-15"
x1="538.46"
y1="1076.97"
x2="568.22"
y2="1076.97"
></line><path
class="cls-11"
d="M632.82,1210.27V1097.4a4.66,4.66,0,0,1,4.67-4.65h28.16a11.68,11.68,0,0,0,11.67-11.68V916.93c0-6.85-5.05-10.17-12.24-12.74l-27.79-7.41a4.66,4.66,0,0,1-4.47-4.64V785.78"
></path><path
class="cls-11"
d="M1412.61,816.13v360.16h-755a2.5,2.5,0,0,1-2.51-2.5v-64.32a2.5,2.5,0,0,1,2.51-2.5h30.47a12.81,12.81,0,0,0,12.81-12.82V894.25a12.81,12.81,0,0,0-12.81-12.82H657.58a2.5,2.5,0,0,1-2.51-2.5V818.64a2.51,2.51,0,0,1,2.51-2.51Z"
></path><polyline
class="cls-7"
points="632.82 785.77 1429.58 785.77 1429.58 1210.27 632.82 1210.27"
></polyline><polyline
class="cls-7"
points="632.82 1210.27 595.13 1210.27 595.13 785.77 632.82 785.77"
></polyline></g>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 95 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 95 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 47 KiB

@@ -1,216 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="340.47 241 263.8 451.32">
<defs><style>
.cls-1 {
fill: #434143;
}
.cls-2, .cls-6, .cls-7 {
fill: none;
}
.cls-2 {
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-3 {
fill: #2b2b2b;
}
.cls-4 {
fill: #181818;
}
.cls-5 {
fill: #e8eae8;
}
.cls-6, .cls-7 {
stroke: #e8eae8;
stroke-linecap: round;
stroke-linejoin: round;
}
.cls-7 {
stroke-width: 2px;
}
</style></defs><g id="Layer_2" data-name="Layer 2"><rect
class="cls-1"
x="340.97"
y="241.5"
width="262.8"
height="450.32"
rx="27.43"
></rect><rect
class="cls-2"
x="340.97"
y="241.5"
width="262.8"
height="450.32"
rx="27.43"
></rect><circle
class="cls-3"
cx="364.66"
cy="264.01"
r="10.92"
></circle><circle
class="cls-2"
cx="364.66"
cy="264.01"
r="10.92"
></circle><path
class="cls-4"
d="M372.05,264a2.39,2.39,0,0,1-2.39,2.38h-2.61V269a2.38,2.38,0,1,1-4.76,0v-2.62h-2.63a2.39,2.39,0,1,1,0-4.77h2.63V259a2.38,2.38,0,0,1,2.37-2.38,2.39,2.39,0,0,1,2.39,2.38v2.62h2.61A2.4,2.4,0,0,1,372.05,264Z"
></path><circle
class="cls-3"
cx="579.41"
cy="264.01"
r="10.92"
></circle><circle
class="cls-2"
cx="579.41"
cy="264.01"
r="10.92"
></circle><path
class="cls-4"
d="M586.79,264a2.39,2.39,0,0,1-2.38,2.38h-2.62V269a2.38,2.38,0,1,1-4.76,0v-2.62h-2.62a2.39,2.39,0,1,1,0-4.77H577V259a2.38,2.38,0,0,1,4.76,0v2.62h2.62A2.39,2.39,0,0,1,586.79,264Z"
></path><circle
class="cls-3"
cx="364.66"
cy="666.6"
r="10.92"
></circle><circle
class="cls-2"
cx="364.66"
cy="666.6"
r="10.92"
></circle><path
class="cls-4"
d="M372.05,666.61a2.39,2.39,0,0,1-2.39,2.38h-2.61v2.62a2.38,2.38,0,1,1-4.76,0V669h-2.63a2.39,2.39,0,1,1,0-4.77h2.63V661.6a2.38,2.38,0,0,1,2.37-2.38,2.39,2.39,0,0,1,2.39,2.38v2.62h2.61A2.4,2.4,0,0,1,372.05,666.61Z"
></path><circle
class="cls-3"
cx="579.41"
cy="666.6"
r="10.92"
></circle><circle
class="cls-2"
cx="579.41"
cy="666.6"
r="10.92"
></circle><path
class="cls-4"
d="M586.79,666.61a2.39,2.39,0,0,1-2.38,2.38h-2.62v2.62a2.38,2.38,0,0,1-4.76,0V669h-2.62a2.39,2.39,0,1,1,0-4.77H577V661.6a2.38,2.38,0,0,1,4.76,0v2.62h2.62A2.39,2.39,0,0,1,586.79,666.61Z"
></path><circle
class="cls-3"
cx="579.41"
cy="440.79"
r="10.92"
></circle><circle
class="cls-2"
cx="579.41"
cy="440.79"
r="10.92"
></circle><path
class="cls-4"
d="M586.79,440.79a2.39,2.39,0,0,1-2.38,2.38h-2.62v2.62a2.38,2.38,0,1,1-4.76,0v-2.62h-2.62a2.39,2.39,0,1,1,0-4.77H577v-2.62a2.38,2.38,0,0,1,4.76,0v2.62h2.62A2.39,2.39,0,0,1,586.79,440.79Z"
></path><circle
class="cls-3"
cx="361.13"
cy="442.81"
r="10.92"
></circle><circle
class="cls-2"
cx="361.13"
cy="442.81"
r="10.92"
></circle><path
class="cls-4"
d="M368.51,442.81a2.39,2.39,0,0,1-2.38,2.38h-2.62v2.62a2.38,2.38,0,1,1-4.76,0v-2.62h-2.62a2.39,2.39,0,1,1,0-4.77h2.62V437.8a2.38,2.38,0,0,1,4.76,0v2.62h2.62A2.39,2.39,0,0,1,368.51,442.81Z"
></path><rect
class="cls-5"
x="442.52"
y="591.7"
width="6.5"
height="54.62"
transform="translate(432.79 -143.7) rotate(34.78)"
></rect><path
class="cls-5"
d="M521.39,639.18l-5.34,3.71L489,604.34l-26.94,39-5.34-3.71,28.32-41,1.06-1.53a3.53,3.53,0,0,1,5.8,0l1.06,1.53Z"
></path><rect
class="cls-3"
x="407.64"
y="511.78"
width="135.85"
height="67.27"
rx="3.52"
></rect><rect
class="cls-2"
x="407.64"
y="511.78"
width="135.85"
height="67.27"
rx="3.52"
></rect><circle class="cls-6" cx="586.93" cy="479.19" r="9.9"></circle><rect
class="cls-5"
x="581.12"
y="478.38"
width="9.09"
height="1.63"
rx="0.82"
></rect><circle
class="cls-5"
cx="591.91"
cy="479.19"
r="0.83"
></circle><path
class="cls-7"
d="M592.84,629.48a7.9,7.9,0,1,1-.29-6.3"
></path><line
class="cls-7"
x1="586.78"
y1="626.67"
x2="594.43"
y2="626.67"
></line><path
class="cls-5"
d="M408.88,655.16h3.51l4.58,7.29v-7.29h3.55v13.18H417l-4.56-7.24v7.24h-3.53Z"
></path><path
class="cls-5"
d="M425.87,661.88l-3.23-.37a4.06,4.06,0,0,1,.53-1.44,3,3,0,0,1,1-.91,3.82,3.82,0,0,1,1.28-.43,8.86,8.86,0,0,1,1.76-.16,13.09,13.09,0,0,1,2.44.19,3,3,0,0,1,1.54.77,2.86,2.86,0,0,1,.68,1.14,4.67,4.67,0,0,1,.25,1.42v4.22a5.74,5.74,0,0,0,.07,1.05,5.4,5.4,0,0,0,.35,1h-3.17a3.65,3.65,0,0,1-.25-.56,4.32,4.32,0,0,1-.12-.61,4.38,4.38,0,0,1-1.32,1,5.18,5.18,0,0,1-2.08.39,3.32,3.32,0,0,1-2.4-.79,2.61,2.61,0,0,1-.81-2A2.71,2.71,0,0,1,423,664a3.89,3.89,0,0,1,2.18-1c1.27-.28,2.09-.47,2.47-.58a11.09,11.09,0,0,0,1.19-.44,1.35,1.35,0,0,0-.26-.94,1.21,1.21,0,0,0-.9-.27,2.22,2.22,0,0,0-1.25.29A1.6,1.6,0,0,0,425.87,661.88Zm2.93,1.93a12.94,12.94,0,0,1-1.45.47,3.35,3.35,0,0,0-1.31.59,1,1,0,0,0,0,1.38,1.14,1.14,0,0,0,.82.27,2,2,0,0,0,1.05-.3,1.7,1.7,0,0,0,.69-.72,2.66,2.66,0,0,0,.2-1.11Z"
></path><path
class="cls-5"
d="M434.13,658.79h3.15v1.55A5,5,0,0,1,438.7,659a3.58,3.58,0,0,1,1.76-.41,2.75,2.75,0,0,1,2.2.91,4.13,4.13,0,0,1,.79,2.79v6.07h-3.39v-5.25a2,2,0,0,0-.31-1.27,1,1,0,0,0-.86-.38,1.2,1.2,0,0,0-1,.51,3.12,3.12,0,0,0-.38,1.8v4.59h-3.38Z"
></path><path
class="cls-5"
d="M445.06,663.59a5,5,0,0,1,1.36-3.6,5.55,5.55,0,0,1,7.68.25,5.08,5.08,0,0,1,1.08,3.3,5,5,0,0,1-1.35,3.61,5.64,5.64,0,0,1-7.16.23A4.81,4.81,0,0,1,445.06,663.59Zm3.38,0a3.06,3.06,0,0,0,.48,1.89,1.49,1.49,0,0,0,2.4,0,3.18,3.18,0,0,0,.47-1.93,3,3,0,0,0-.47-1.85,1.43,1.43,0,0,0-1.17-.61,1.51,1.51,0,0,0-1.23.62A3,3,0,0,0,448.44,663.58Z"
></path><path
class="cls-5"
d="M468.82,663.56v-2.74h5.81v5.62a11.64,11.64,0,0,1-2.95,1.68,9.47,9.47,0,0,1-3,.44,6.86,6.86,0,0,1-3.53-.8,5.31,5.31,0,0,1-2.12-2.38,8.38,8.38,0,0,1-.75-3.63,8.11,8.11,0,0,1,.82-3.76,5.53,5.53,0,0,1,2.41-2.42,7.36,7.36,0,0,1,3.33-.64,8.56,8.56,0,0,1,3,.4,3.89,3.89,0,0,1,1.66,1.23,5.54,5.54,0,0,1,1,2.1l-3.63.71a2.15,2.15,0,0,0-.76-1.15,2.26,2.26,0,0,0-1.36-.39,2.39,2.39,0,0,0-2,.93,4.74,4.74,0,0,0-.73,2.94,4.94,4.94,0,0,0,.74,3.06,2.53,2.53,0,0,0,2.07.92,3.74,3.74,0,0,0,1.21-.2,6.12,6.12,0,0,0,1.31-.68v-1.24Z"
></path><path
class="cls-5"
d="M486.22,668.34H476.07a7.23,7.23,0,0,1,1.06-3.06,14.61,14.61,0,0,1,3.32-3.39,10.56,10.56,0,0,0,1.9-1.81,2.21,2.21,0,0,0,.41-1.18,1.4,1.4,0,0,0-.41-1,1.35,1.35,0,0,0-1-.43,1.39,1.39,0,0,0-1.06.44,2.84,2.84,0,0,0-.55,1.56l-3.39-.3a6.13,6.13,0,0,1,.73-2.41,3.41,3.41,0,0,1,1.5-1.33,6.28,6.28,0,0,1,2.68-.47,7.05,7.05,0,0,1,2.77.44,3.44,3.44,0,0,1,1.56,1.36,3.76,3.76,0,0,1,.57,2,4.36,4.36,0,0,1-.65,2.3,9.09,9.09,0,0,1-2.37,2.41c-.68.51-1.13.87-1.36,1.07s-.5.47-.81.8h5.28Z"
></path><path
class="cls-5"
d="M501.8,655.16h3.75V663a7,7,0,0,1-.34,2.21,4.76,4.76,0,0,1-1,1.81,4.16,4.16,0,0,1-1.51,1.09,6.89,6.89,0,0,1-2.63.44,15.27,15.27,0,0,1-1.94-.13,4.69,4.69,0,0,1-1.75-.54,4.38,4.38,0,0,1-1.29-1.13,4.22,4.22,0,0,1-.8-1.52,8.17,8.17,0,0,1-.35-2.23v-7.85h3.75v8a2.38,2.38,0,0,0,.55,1.68,2,2,0,0,0,1.53.61,2,2,0,0,0,1.53-.6,2.44,2.44,0,0,0,.55-1.69Z"
></path><path
class="cls-5"
d="M507.93,655.16h3.39v13.18h-3.39Z"
></path><path
class="cls-5"
d="M517.56,655.16v3.63h1.86v2.68h-1.86v3.38a2,2,0,0,0,.1.81.61.61,0,0,0,.58.3,3.33,3.33,0,0,0,1-.23l.25,2.53a10.1,10.1,0,0,1-2.34.29,3.74,3.74,0,0,1-1.86-.35,2,2,0,0,1-.88-1.06,6.52,6.52,0,0,1-.29-2.31v-3.36h-1.25v-2.68h1.25V657Z"
></path><path
class="cls-5"
d="M521.06,658.79h3.16v1.56a3.81,3.81,0,0,1,.94-1.39,1.88,1.88,0,0,1,1.2-.39,3.33,3.33,0,0,1,1.64.51l-1,2.6a2.43,2.43,0,0,0-.94-.26,1.12,1.12,0,0,0-1,.59,6.43,6.43,0,0,0-.53,3.13v3.2h-3.39Z"
></path><path
class="cls-5"
d="M531.94,661.88l-3.23-.37a4.06,4.06,0,0,1,.53-1.44,3,3,0,0,1,1-.91,3.82,3.82,0,0,1,1.28-.43,8.86,8.86,0,0,1,1.76-.16,13.09,13.09,0,0,1,2.44.19,3,3,0,0,1,1.54.77,2.86,2.86,0,0,1,.68,1.14,4.67,4.67,0,0,1,.25,1.42v4.22a4.85,4.85,0,0,0,.08,1.05,4.6,4.6,0,0,0,.34,1h-3.17a3.65,3.65,0,0,1-.25-.56,4.32,4.32,0,0,1-.12-.61,4.38,4.38,0,0,1-1.32,1,5.15,5.15,0,0,1-2.08.39,3.28,3.28,0,0,1-2.39-.79,2.58,2.58,0,0,1-.82-2A2.67,2.67,0,0,1,529,664a3.86,3.86,0,0,1,2.17-1c1.27-.28,2.09-.47,2.47-.58a11.09,11.09,0,0,0,1.19-.44,1.36,1.36,0,0,0-.25-.94,1.25,1.25,0,0,0-.91-.27,2.18,2.18,0,0,0-1.24.29A1.6,1.6,0,0,0,531.94,661.88Zm2.93,1.93a12.94,12.94,0,0,1-1.45.47,3.21,3.21,0,0,0-1.3.59,1,1,0,0,0-.29.67,1,1,0,0,0,.28.71,1.14,1.14,0,0,0,.82.27,1.94,1.94,0,0,0,1.05-.3,1.7,1.7,0,0,0,.69-.72,2.51,2.51,0,0,0,.2-1.11Z"
></path><path
class="cls-6"
d="M579.88,583.57v16l.41-.47a7.4,7.4,0,0,1,5.54-2.48h.24a8.27,8.27,0,0,0,6.37-3l.18-.21a3.11,3.11,0,0,0,.14-3.78l-.24-.34a8.29,8.29,0,0,0-6.76-3.49h-.57a7.4,7.4,0,0,1-4.87-1.83Z"
></path><path
class="cls-6"
d="M579.87,594.24a2.68,2.68,0,1,1,0-5.35"
></path><path
class="cls-5"
d="M588.69,547.89a6.85,6.85,0,0,0-3.84,1.17l-.15.11-8,5.63,8,5.63.15.11a6.91,6.91,0,1,0,3.84-12.65Zm0,9.72a2.81,2.81,0,1,1,2.81-2.81A2.81,2.81,0,0,1,588.69,557.61Z"
></path><polygon
class="cls-6"
points="582.55 520.31 588.06 528.85 577.03 528.85 577.03 511.78 588.06 511.78 582.55 520.31"
></polygon><polygon
class="cls-6"
points="594.05 520.03 588.06 528.85 582.55 520.31 588.06 511.78 594.05 520.03"
></polygon></g>
</svg>

Before

Width:  |  Height:  |  Size: 9.5 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 102 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 86 KiB

@@ -1,264 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="663.59 325.94 640.35 1015.71">
<defs><style>
.cls-1 {
fill: #353535;
}
.cls-2 {
fill: #1d1e1e;
}
.cls-3 {
fill: #9f9f9e;
}
.cls-4 {
fill: #434343;
}
.cls-5, .cls-7 {
fill: none;
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-5 {
stroke-width: 2px;
}
.cls-6 {
fill: #b1a368;
}
</style></defs><g id="Layer_7" data-name="Layer 7"><rect
class="cls-1"
x="1079.47"
y="834.15"
width="56.53"
height="9.97"
></rect><rect
class="cls-1"
x="1075.53"
y="800.89"
width="63.83"
height="33.26"
></rect><path
class="cls-1"
d="M1079.93,800.89v-5.28a2.81,2.81,0,0,1,2.81-2.81h50.45a2.81,2.81,0,0,1,2.82,2.81v5.28"
></path><rect
class="cls-1"
x="1076.7"
y="718.27"
width="62.66"
height="70.68"
rx="3.45"
></rect><rect
class="cls-1"
x="1082.84"
y="788.94"
width="50.73"
height="3.86"
></rect><path
class="cls-2"
d="M1085.24,695.85s-2.75-3.82-4.5-3.27-3.94.3-1.53,2.72l12.9,13s.75.76.61,3.43.07,5.63.65,5.91,30.43,1.59,30.64-.79.67-6.25-.74-5.68-11.35,4.43-19.55.05S1085.24,695.85,1085.24,695.85Z"
></path><path
class="cls-1"
d="M1282,938.23v321.64a59.85,59.85,0,0,1-59.78,59.78H745.37a59.84,59.84,0,0,1-59.78-59.78V938.23a59.84,59.84,0,0,1,59.78-59.78h476.8A59.84,59.84,0,0,1,1282,938.23Z"
></path><path
class="cls-3"
d="M1222.17,857.45H745.37a80.77,80.77,0,0,0-80.78,80.78v321.64a80.77,80.77,0,0,0,80.78,80.78h476.8a80.78,80.78,0,0,0,80.78-80.78V938.23A80.78,80.78,0,0,0,1222.17,857.45ZM1282,1259.87a59.85,59.85,0,0,1-59.78,59.78H745.37a59.84,59.84,0,0,1-59.78-59.78V938.23a59.84,59.84,0,0,1,59.78-59.78h476.8A59.84,59.84,0,0,1,1282,938.23Z"
></path><rect
class="cls-4"
x="819.33"
y="971.15"
width="328.86"
height="250.93"
></rect><path
class="cls-5"
d="M1222.17,878.45a59.83,59.83,0,0,1,59.77,59.77v321.65a59.84,59.84,0,0,1-59.77,59.78H745.36a59.84,59.84,0,0,1-59.77-59.78V938.22a59.83,59.83,0,0,1,59.77-59.77h476.81m0-21H745.36a80.77,80.77,0,0,0-80.77,80.77v321.65a80.78,80.78,0,0,0,80.77,80.78h476.81a80.78,80.78,0,0,0,80.77-80.78V938.22a80.77,80.77,0,0,0-80.77-80.77Z"
></path><rect
class="cls-5"
x="819.33"
y="971.15"
width="328.86"
height="250.93"
></rect><rect
class="cls-6"
x="1080.45"
y="847.88"
width="55.55"
height="9.57"
></rect><rect
class="cls-5"
x="1080.45"
y="847.88"
width="55.55"
height="9.57"
></rect><rect
class="cls-5"
x="1079.47"
y="834.15"
width="56.53"
height="9.97"
></rect><rect
class="cls-5"
x="1075.53"
y="800.89"
width="63.83"
height="33.26"
></rect><path
class="cls-5"
d="M1079.93,800.89v-5.28a2.81,2.81,0,0,1,2.81-2.81h50.45a2.81,2.81,0,0,1,2.82,2.81v5.28"
></path><rect
class="cls-5"
x="1076.7"
y="718.27"
width="62.66"
height="70.68"
rx="3.45"
></rect><rect
class="cls-5"
x="1082.84"
y="788.94"
width="50.73"
height="3.86"
></rect><line
class="cls-5"
x1="1093.01"
y1="718.27"
x2="1093.01"
y2="703.17"
></line><line
class="cls-5"
x1="1124.56"
y1="718.27"
x2="1124.56"
y2="710.55"
></line><path
class="cls-1"
d="M784.41,333.86l363.94,355.78-18.09,16.92a24.62,24.62,0,0,1-33.69,0l-14.9-14a.44.44,0,0,0-.5-.09h0a13.35,13.35,0,0,1-14.85-2.89L750.32,368a24.13,24.13,0,0,1,1.18-35h0A24.13,24.13,0,0,1,784.41,333.86Z"
></path><path
class="cls-2"
d="M818.35,367.13c-2.26-2.12-11.86,3.59-21.07,13.42s-15.34,19.55-13.08,21.67l-2.53-2.8c-2.26-2.12,3.87-11.84,13.08-21.67s18.8-15.54,21.07-13.42l-4.24-3.58c-2.27-2.12-11.86,3.6-21.07,13.42s-15.34,19.56-13.08,21.68l-2.53-2.8c-2.26-2.12,3.87-11.85,13.08-21.68s18.8-15.54,21.07-13.42"
></path><path
class="cls-5"
d="M784.41,333.86l363.94,355.78-18.09,16.92a24.62,24.62,0,0,1-33.69,0l-14.9-14a.44.44,0,0,0-.5-.09h0a13.35,13.35,0,0,1-14.85-2.89L750.32,368a24.13,24.13,0,0,1,1.18-35h0A24.13,24.13,0,0,1,784.41,333.86Z"
></path><line
class="cls-5"
x1="1077.35"
y1="693.43"
x2="1093.01"
y2="709.21"
></line><circle
class="cls-2"
cx="1111.17"
cy="687.29"
r="6"
></circle><circle
class="cls-5"
cx="1111.17"
cy="687.29"
r="6"
></circle><path
class="cls-7"
d="M774.9,393.05c-2.26-2.12,3.87-11.85,13.08-21.68s18.8-15.54,21.07-13.42"
></path><path
class="cls-7"
d="M777.43,395.85c-2.26-2.12,3.87-11.85,13.08-21.68s18.8-15.54,21.07-13.42"
></path><path
class="cls-7"
d="M781.67,399.42c-2.26-2.12,3.87-11.84,13.08-21.67s18.8-15.54,21.07-13.42"
></path><path
class="cls-7"
d="M784.2,402.22c-2.26-2.12,3.87-11.84,13.08-21.67s18.81-15.54,21.07-13.42"
></path><rect
class="cls-6"
x="1086.52"
y="844.12"
width="41.63"
height="3.76"
></rect><rect
class="cls-5"
x="1086.52"
y="844.12"
width="41.63"
height="3.76"
></rect><rect
class="cls-2"
x="1079.47"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1083.7"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1087.92"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1092.15"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1096.38"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1100.6"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1104.83"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1109.05"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1113.28"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1117.51"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1121.73"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1125.96"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1130.18"
y="805.49"
width="1.59"
height="25.02"
></rect><rect
class="cls-2"
x="1134.41"
y="805.49"
width="1.59"
height="25.02"
></rect></g>
</svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 164 KiB

-379
View File
@@ -1,379 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="281.97 168.43 271.78 510.19">
<defs><style>
.cls-1 {
fill: #1c60ac;
}
.cls-2 {
fill: #33353d;
}
.cls-3 {
fill: #0e5796;
}
.cls-4 {
fill: #fff;
}
.cls-5 {
fill: none;
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-6 {
fill: #9e9d9e;
}
</style></defs><g id="Layer_3" data-name="Layer 3"><rect
class="cls-1"
x="355.63"
y="645.72"
width="37.63"
height="25.23"
rx="3.38"
></rect><rect
class="cls-1"
x="352.62"
y="581.71"
width="44.76"
height="25.23"
rx="3.69"
></rect><path
class="cls-1"
d="M389.88,671h0a7.12,7.12,0,0,1-7.12,7.12H366.14A7.12,7.12,0,0,1,359,671h0"
></path><rect
class="cls-2"
x="356.31"
y="576.3"
width="37.38"
height="5.41"
></rect><path
class="cls-2"
d="M392.3,606.94s-4.84,14.19-4.84,38.78H361.15c0-24.59-4.84-38.78-4.84-38.78Z"
></path><rect
class="cls-3"
x="355.63"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="364.31"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="372.98"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="381.65"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="390.32"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="357.21"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="364.91"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="372.6"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="380.3"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="388"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-1"
x="432.13"
y="645.72"
width="37.63"
height="25.23"
rx="3.38"
></rect><rect
class="cls-1"
x="429.12"
y="581.71"
width="44.76"
height="25.23"
rx="3.69"
></rect><path
class="cls-1"
d="M466.38,671h0a7.12,7.12,0,0,1-7.12,7.12H442.63a7.11,7.11,0,0,1-7.11-7.12h0"
></path><rect
class="cls-2"
x="432.81"
y="576.3"
width="37.38"
height="5.41"
></rect><path
class="cls-2"
d="M468.79,606.94S464,621.13,464,645.72H437.64c0-24.59-4.83-38.78-4.83-38.78Z"
></path><rect
class="cls-3"
x="432.13"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="440.8"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="449.48"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="458.15"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="466.82"
y="584.04"
width="4.39"
height="20.14"
rx="0.9"
></rect><rect
class="cls-3"
x="433.71"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="441.4"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="449.1"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="456.8"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect><rect
class="cls-3"
x="464.5"
y="648.27"
width="3.9"
height="20.14"
rx="0.85"
></rect></g><g id="Layer_2" data-name="Layer 2"><path
class="cls-4"
d="M553.25,218.93V526.3a50,50,0,0,1-50,50H332.47a50,50,0,0,1-50-50V218.93a50,50,0,0,1,50-50H503.24A50,50,0,0,1,553.25,218.93Z"
></path><path
class="cls-1"
d="M553.25,218.93V328.61H282.47V218.93a50,50,0,0,1,50-50H503.24A50,50,0,0,1,553.25,218.93Z"
></path><path
class="cls-5"
d="M553.25,218.93V526.3a50,50,0,0,1-50,50H332.47a50,50,0,0,1-50-50V218.93a50,50,0,0,1,50-50H503.24A50,50,0,0,1,553.25,218.93Z"
></path><path
class="cls-4"
d="M356.47,248.86a8.83,8.83,0,0,0-5.13.45s-1.27-2.38-.86-7.18c.16-1.81.47-4.26,2.63-4.63l.1,0a2.54,2.54,0,0,1,3.26,3.1C355.85,246.23,356.69,248.83,356.47,248.86Z"
></path><path
class="cls-4"
d="M346.81,236.93a2.33,2.33,0,0,1,2.16,2.94,13,13,0,0,0-.33,4.26c.27,4.34,1.76,5.88,1.76,5.88a4.28,4.28,0,0,0-1.49,2.75,16.14,16.14,0,0,1-4.74-13,3.29,3.29,0,0,1,.94-2.14,2.34,2.34,0,0,1,1.41-.69A1.42,1.42,0,0,1,346.81,236.93Z"
></path><path
class="cls-4"
d="M348.3,260.57A18.32,18.32,0,0,1,338,249.31a20.24,20.24,0,0,1-1-7.95,4.84,4.84,0,0,1,1-3.08,2.87,2.87,0,0,1,4.25,1,5.05,5.05,0,0,1,.08,2.19,14.84,14.84,0,0,0,.62,5.95c1.39,4.89,6.95,9.07,6.95,9.07A5.94,5.94,0,0,0,348.3,260.57Z"
></path><path
class="cls-4"
d="M358,242.89a8.93,8.93,0,0,0-.45-5.13s2.38-1.26,7.18-.86c1.81.16,4.26.48,4.63,2.64a.29.29,0,0,0,0,.09,2.55,2.55,0,0,1-3.1,3.27C360.62,242.28,358,243.12,358,242.89Z"
></path><path
class="cls-4"
d="M369.93,233.24a2.33,2.33,0,0,1-2.94,2.15,13.43,13.43,0,0,0-4.26-.32c-4.34.27-5.88,1.75-5.88,1.75a4.24,4.24,0,0,0-2.75-1.48,16.14,16.14,0,0,1,13-4.74,3.28,3.28,0,0,1,2.14.93,2.36,2.36,0,0,1,.69,1.41A1.51,1.51,0,0,1,369.93,233.24Z"
></path><path
class="cls-4"
d="M346.29,234.73a18.29,18.29,0,0,1,11.26-10.34,20.05,20.05,0,0,1,7.95-1,4.77,4.77,0,0,1,3.08,1,2.87,2.87,0,0,1-1,4.25,4.77,4.77,0,0,1-2.19.08,15.07,15.07,0,0,0-5.95.63c-4.89,1.39-9.07,7-9.07,7A5.94,5.94,0,0,0,346.29,234.73Z"
></path><path
class="cls-4"
d="M363.86,244.84a8.93,8.93,0,0,0,5.13-.45s1.26,2.38.86,7.17c-.16,1.82-.48,4.27-2.64,4.63l-.09,0a2.53,2.53,0,0,1-3.26-3.09C364.48,247.46,363.64,244.87,363.86,244.84Z"
></path><path
class="cls-4"
d="M373.51,256.77a2.33,2.33,0,0,1-2.15-2.94,13.37,13.37,0,0,0,.33-4.26c-.27-4.34-1.76-5.88-1.76-5.88a4.28,4.28,0,0,0,1.49-2.75,16.14,16.14,0,0,1,4.74,13,3.29,3.29,0,0,1-.94,2.14,2.36,2.36,0,0,1-1.41.69Z"
></path><path
class="cls-4"
d="M372,233.13a18.29,18.29,0,0,1,10.34,11.26,19.87,19.87,0,0,1,1,8,4.77,4.77,0,0,1-1,3.08,2.87,2.87,0,0,1-4.25-1,4.91,4.91,0,0,1-.08-2.19,15.21,15.21,0,0,0-.62-5.95c-1.39-4.89-7-9.07-7-9.07A5.89,5.89,0,0,0,372,233.13Z"
></path><path
class="cls-4"
d="M362.33,250.81a8.79,8.79,0,0,0,.45,5.12s-2.38,1.27-7.18.87c-1.81-.16-4.26-.48-4.63-2.64a.29.29,0,0,0,0-.09,3,3,0,0,1,.8-2.79,3,3,0,0,1,2.3-.48C359.7,251.42,362.3,250.58,362.33,250.81Z"
></path><path
class="cls-4"
d="M350.4,260.46a2.32,2.32,0,0,1,2.93-2.15,13.5,13.5,0,0,0,4.27.32c4.34-.27,5.87-1.75,5.87-1.75a4.24,4.24,0,0,0,2.76,1.48,16.14,16.14,0,0,1-13,4.74,3.23,3.23,0,0,1-2.14-.93,2.43,2.43,0,0,1-.7-1.41C350.4,260.66,350.4,260.56,350.4,260.46Z"
></path><path
class="cls-4"
d="M374,259a18.29,18.29,0,0,1-11.26,10.34,20.26,20.26,0,0,1-7.95,1,4.76,4.76,0,0,1-3.08-1,2.87,2.87,0,0,1,1-4.25,4.86,4.86,0,0,1,2.18-.07,15.11,15.11,0,0,0,6-.63c4.89-1.39,9.06-7,9.06-7A6,6,0,0,0,374,259Z"
></path><path
class="cls-4"
d="M400.1,250.29v13h-7.47V230.88h15.53c7.7,0,11.84,3.89,11.84,8.88a7.75,7.75,0,0,1-5.13,7.66c1.75.59,4.39,2.26,4.39,8.05v1.6a23.55,23.55,0,0,0,.51,6.17h-7.24c-.62-1.41-.74-3.83-.74-7.27v-.47c0-3.54-1-5.21-6.67-5.21Zm0-5.57h6.4c4.18,0,5.8-1.46,5.8-4.17s-1.88-4.1-5.62-4.1H400.1Z"
></path><path
class="cls-4"
d="M430.81,255.76l-2.43,7.48h-6.65l10.62-32.36h8.48l11.07,32.36h-7.1l-2.57-7.48Zm10-5.73c-2.22-6.83-3.64-11.19-4.39-14.1h-.05c-.77,3.19-2.33,8.26-4.11,14.1Z"
></path><path
class="cls-4"
d="M454.41,230.88h6.68v14.44c2.06-2.49,8.49-9.79,12.44-14.44h8.09l-12.56,13.45,13,18.91H474l-9.59-14.38-3.29,3.27v11.11h-6.68Z"
></path><path
class="cls-4"
d="M487.73,235.1V237h-.79v-4.39h2.15c1.12,0,1.72.5,1.72,1.18a1.06,1.06,0,0,1-.89,1,1,1,0,0,1,.79,1.11v.2a2.79,2.79,0,0,0,.07.86H490a2.67,2.67,0,0,1-.09-.95V236c0-.6-.21-.86-1.15-.86Zm0-.54h1.13c.79,0,1.13-.24,1.13-.71s-.36-.7-1.06-.7h-1.2Z"
></path><path
class="cls-4"
d="M488.62,239.49a4.7,4.7,0,1,1,4.71-4.7A4.71,4.71,0,0,1,488.62,239.49Zm0-8.74a4,4,0,1,0,4,4A4,4,0,0,0,488.62,230.75Z"
></path><path class="cls-4" d="M396.73,277.19v-7.92h1v7.92Z"></path><path
class="cls-4"
d="M403.93,274.43c0,1.6-.9,2.89-2.54,2.89s-2.48-1.22-2.48-2.87.92-2.89,2.54-2.89S403.93,272.71,403.93,274.43Zm-4,0c0,1.18.56,2,1.47,2s1.44-.79,1.44-2-.52-2-1.46-2S400,273.2,400,274.44Z"
></path><path
class="cls-4"
d="M405.89,270.63h-2.32v-.94h5.72v.94H407v6.56h-1.08Z"
></path><path
class="cls-4"
d="M419.12,274.07c0-1.38,0-2.8.05-3.6h0c-.32,1.28-1.41,4.36-2.21,6.72h-1c-.61-1.94-1.74-5.41-2.06-6.73h0c.06.87.09,2.51.09,3.8v2.93h-1v-7.5h1.61c.77,2.26,1.71,5.16,1.95,6.14h0c.17-.77,1.29-3.94,2.09-6.14h1.56v7.5h-1.05Z"
></path><path
class="cls-4"
d="M425.77,276a9.39,9.39,0,0,0,.08,1.24h-1a2.46,2.46,0,0,1-.09-.68,1.88,1.88,0,0,1-3.41-.88c0-1.23.94-1.8,2.52-1.8h.88v-.44c0-.47-.15-1-1.09-1s-1,.42-1.07.85h-1c.07-.8.55-1.66,2.1-1.66,1.32,0,2,.56,2,1.82Zm-1-1.41H424c-1,0-1.55.3-1.55,1a.9.9,0,0,0,1,.94c1.21,0,1.37-.85,1.37-1.8Z"
></path><path
class="cls-4"
d="M431.82,269.27v6.38c0,.51,0,1,0,1.54h-1c0-.15,0-.54,0-.74a1.63,1.63,0,0,1-1.64.87c-1.36,0-2.21-1.14-2.21-2.82s.91-2.94,2.39-2.94c.91,0,1.33.37,1.46.67v-3Zm-3.81,5.2c0,1.27.57,2,1.38,2,1.2,0,1.44-.94,1.44-2.06s-.22-1.93-1.37-1.93C428.55,272.45,428,273.19,428,274.47Z"
></path><path
class="cls-4"
d="M433.73,274.64c0,1,.51,1.81,1.38,1.81a1.15,1.15,0,0,0,1.21-.8h1a2.19,2.19,0,0,1-2.27,1.67c-1.69,0-2.39-1.39-2.39-2.82,0-1.65.81-2.94,2.44-2.94a2.33,2.33,0,0,1,2.32,2.63,3.24,3.24,0,0,1,0,.45Zm2.68-.72c0-.85-.42-1.54-1.29-1.54s-1.28.64-1.36,1.54Z"
></path><path
class="cls-4"
d="M446,273.74h-3.59v2.51h3.94l-.13.94h-4.86v-7.5h4.81v.94h-3.76v2.16H446Z"
></path><path
class="cls-4"
d="M451.59,276a9.9,9.9,0,0,0,.07,1.24h-1a2.93,2.93,0,0,1-.09-.68,1.88,1.88,0,0,1-3.41-.88c0-1.23.94-1.8,2.52-1.8h.88v-.44c0-.47-.15-1-1.08-1s-1,.42-1.08.85h-1c.07-.8.55-1.66,2.1-1.66,1.33,0,2.06.56,2.06,1.82Zm-1-1.41h-.81c-1,0-1.55.3-1.55,1a.91.91,0,0,0,1,.94c1.21,0,1.37-.85,1.37-1.8Z"
></path><path
class="cls-4"
d="M453.63,275.6a1.16,1.16,0,0,0,1.25.9c.74,0,1-.32,1-.78s-.24-.7-1.2-1c-1.57-.39-1.88-.89-1.88-1.64s.56-1.57,2-1.57a1.8,1.8,0,0,1,2,1.6h-1a1,1,0,0,0-1.1-.8c-.69,0-.9.35-.9.68s.21.58,1.16.81c1.65.4,2,1,2,1.79s-.73,1.68-2.11,1.68a2,2,0,0,1-2.23-1.72Z"
></path><path
class="cls-4"
d="M458.65,271.69c.8,2.49,1.28,4,1.41,4.55h0c.16-.61.52-1.87,1.35-4.55h1l-1.89,5.74c-.53,1.6-.94,2-2.07,2a4.38,4.38,0,0,1-.59,0v-.9a2.9,2.9,0,0,0,.43,0c.65,0,.91-.29,1.2-1.15l-2-5.7Z"
></path><path
class="cls-6"
d="M437,480.69v22.45a6.83,6.83,0,0,1-6.83,6.83h-11.1a8,8,0,0,1-5.42-2.38,9.05,9.05,0,0,1-2.56-6.44V482.62l11.73,11.74v-3.69l-11.73-11.74-3-3v25.17c0,3.22,1.82,8.05,4,8.9h-5.75a6.83,6.83,0,0,1-6.83-6.83V480.69a6.83,6.83,0,0,1,6.83-6.83H418a8,8,0,0,1,5.42,2.38,9.05,9.05,0,0,1,2.56,6.44v18.53l-11.73-11.74v3.69L426,504.9l3,3V482.76c0-3.22-1.82-8.05-4-8.9h5.22A6.83,6.83,0,0,1,437,480.69Z"
></path><rect
class="cls-5"
x="355.63"
y="645.72"
width="37.63"
height="25.23"
rx="3.38"
></rect><rect
class="cls-5"
x="352.62"
y="581.71"
width="44.76"
height="25.23"
rx="3.69"
></rect><path
class="cls-5"
d="M389.88,671h0a7.12,7.12,0,0,1-7.12,7.12H366.14A7.12,7.12,0,0,1,359,671h0"
></path><line
class="cls-5"
x1="356.31"
y1="581.71"
x2="356.31"
y2="576.3"
></line><line
class="cls-5"
x1="393.69"
y1="581.71"
x2="393.69"
y2="576.3"
></line><path
class="cls-5"
d="M356.31,606.94s4.84,14.19,4.84,38.78"
></path><path
class="cls-5"
d="M392.3,606.94s-4.84,14.19-4.84,38.78"
></path><rect
class="cls-5"
x="432.13"
y="645.72"
width="37.63"
height="25.23"
rx="3.38"
></rect><rect
class="cls-5"
x="429.12"
y="581.71"
width="44.76"
height="25.23"
rx="3.69"
></rect><path
class="cls-5"
d="M466.38,671h0a7.12,7.12,0,0,1-7.12,7.12H442.63a7.11,7.11,0,0,1-7.11-7.12h0"
></path><line
class="cls-5"
x1="432.81"
y1="581.71"
x2="432.81"
y2="576.3"
></line><line
class="cls-5"
x1="470.19"
y1="581.71"
x2="470.19"
y2="576.3"
></line><path
class="cls-5"
d="M432.81,606.94s4.83,14.19,4.83,38.78"
></path><path
class="cls-5"
d="M468.79,606.94S464,621.13,464,645.72"
></path></g>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 128 KiB

@@ -1,322 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="754.63 172.39 553.95 1466.51">
<defs><style>
.cls-1 {
fill: #e2d299;
}
.cls-2 {
fill: #2d2d2d;
}
.cls-3 {
fill: #e6e8e8;
}
.cls-4 {
fill: #999;
}
.cls-5 {
fill: #c8cccb;
}
.cls-10, .cls-11, .cls-12, .cls-6, .cls-7, .cls-8, .cls-9 {
fill: none;
stroke-miterlimit: 10;
}
.cls-6 {
stroke: #999;
}
.cls-6, .cls-8 {
stroke-width: 1.35px;
}
.cls-10, .cls-11, .cls-12, .cls-7, .cls-8, .cls-9 {
stroke: #050606;
}
.cls-7 {
stroke-width: 4.05px;
}
.cls-9 {
stroke-width: 1.33px;
}
.cls-10 {
stroke-width: 2.66px;
}
.cls-11 {
stroke-width: 1.19px;
}
.cls-12 {
stroke-width: 1.31px;
}
</style></defs><g id="Layer_3" data-name="Layer 3"><rect
class="cls-1"
x="880.79"
y="713.97"
width="84.29"
height="27.63"
></rect><rect
class="cls-1"
x="887.38"
y="684.75"
width="71.66"
height="29.22"
></rect><rect
class="cls-1"
x="876.01"
y="620.75"
width="93.9"
height="64"
rx="15.57"
></rect><rect
class="cls-2"
x="891.84"
y="608.7"
width="62.51"
height="12.05"
></rect><path
class="cls-2"
d="M922.93,174.42h0a42.15,42.15,0,0,1,42.15,42.15V605.22a3.48,3.48,0,0,1-3.48,3.48H884.26a3.48,3.48,0,0,1-3.48-3.48V216.56a42.15,42.15,0,0,1,42.15-42.15Z"
></path><rect
class="cls-3"
x="756.66"
y="741.6"
width="549.89"
height="895.27"
rx="39.55"
></rect><path
class="cls-3"
d="M1274.64,647.59h-62.29a31.92,31.92,0,0,0-31.91,31.93v62.09l126.12,51.15V679.52A31.93,31.93,0,0,0,1274.64,647.59Zm3.87,59.81a13.86,13.86,0,0,1-13.87,13.86h-43.72a13.85,13.85,0,0,1-13.86-13.86V686.45a13.87,13.87,0,0,1,13.86-13.87h43.72a13.88,13.88,0,0,1,13.87,13.87Z"
></path><polygon
class="cls-4"
points="810.18 770.29 795.58 770.29 788.28 782.93 795.58 795.58 810.18 795.58 817.48 782.93 810.18 770.29"
></polygon><polygon
class="cls-4"
points="1253.04 770.29 1267.64 770.29 1274.94 782.93 1267.64 795.58 1253.04 795.58 1245.74 782.93 1253.04 770.29"
></polygon><polygon
class="cls-4"
points="810.18 1608.19 795.58 1608.19 788.28 1595.55 795.58 1582.9 810.18 1582.9 817.48 1595.55 810.18 1608.19"
></polygon><polygon
class="cls-4"
points="1253.04 1608.19 1267.64 1608.19 1274.94 1595.55 1267.64 1582.9 1253.04 1582.9 1245.74 1595.55 1253.04 1608.19"
></polygon><rect
class="cls-2"
x="872.9"
y="1131.27"
width="321.03"
height="160.93"
rx="17.15"
></rect><rect
class="cls-5"
x="811.61"
y="854.23"
width="37.22"
height="674.13"
rx="18.61"
></rect><path
class="cls-5"
d="M930.19,840.33v169.11a18.61,18.61,0,0,1-18.6,18.61h0A18.61,18.61,0,0,1,893,1009.44V840.91c0-10.24,8.37-19.19,18.6-19.19a18.62,18.62,0,0,1,18.61,18.61Z"
></path><path
class="cls-5"
d="M911.59,1323.24h0a18.61,18.61,0,0,1,18.6,18.61v198.51c0,10.05-7.72,18.72-17.76,19.16A18.59,18.59,0,0,1,893,1540.93V1341.85A18.61,18.61,0,0,1,911.59,1323.24Z"
></path><path
class="cls-5"
d="M1012,808.86V957.94a18.61,18.61,0,0,1-18.61,18.6h0a18.6,18.6,0,0,1-18.6-18.6V809.44c0-10.24,8.36-19.2,18.6-19.19A18.62,18.62,0,0,1,1012,808.86Z"
></path><path
class="cls-5"
d="M993.38,1323.24h0a18.61,18.61,0,0,1,18.61,18.61v231.46c0,10-7.73,18.72-17.77,19.16a18.59,18.59,0,0,1-19.44-18.59v-232A18.61,18.61,0,0,1,993.38,1323.24Z"
></path><rect
class="cls-5"
x="1218.69"
y="854.23"
width="37.22"
height="674.13"
rx="18.61"
transform="translate(2474.6 2382.59) rotate(180)"
></rect><path
class="cls-5"
d="M1137.33,840.33v169.11a18.61,18.61,0,0,0,18.61,18.61h0a18.61,18.61,0,0,0,18.6-18.61V840.91c0-10.24-8.36-19.19-18.6-19.19a18.64,18.64,0,0,0-18.61,18.61Z"
></path><path
class="cls-5"
d="M1155.94,1323.24h0a18.61,18.61,0,0,0-18.61,18.61v198.51c0,10.05,7.72,18.72,17.77,19.16a18.59,18.59,0,0,0,19.44-18.59V1341.85A18.61,18.61,0,0,0,1155.94,1323.24Z"
></path><path
class="cls-5"
d="M1055.53,808.86V957.94a18.61,18.61,0,0,0,18.61,18.6h0a18.61,18.61,0,0,0,18.61-18.6V809.44c0-10.24-8.37-19.2-18.61-19.19a18.62,18.62,0,0,0-18.61,18.61Z"
></path><path
class="cls-5"
d="M1074.14,1323.24h0a18.61,18.61,0,0,0-18.61,18.61v231.46c0,10,7.73,18.72,17.77,19.16a18.6,18.6,0,0,0,19.45-18.59v-232A18.61,18.61,0,0,0,1074.14,1323.24Z"
></path><path
class="cls-6"
d="M1294.4,841.87v694.74a14.87,14.87,0,0,1-14.87,14.87h-27.46a35.75,35.75,0,0,0-35.75,35.75v22.61a14.87,14.87,0,0,1-14.87,14.88H861.76a14.88,14.88,0,0,1-14.87-14.88v-22.61a35.74,35.74,0,0,0-35.75-35.75H783.69a14.87,14.87,0,0,1-14.87-14.87V841.87A14.87,14.87,0,0,1,783.69,827h27.45a35.75,35.75,0,0,0,35.75-35.75V768.63a14.87,14.87,0,0,1,14.87-14.87h339.69a14.87,14.87,0,0,1,14.87,14.87v22.62A35.76,35.76,0,0,0,1252.07,827h27.46A14.87,14.87,0,0,1,1294.4,841.87Z"
></path><rect
class="cls-5"
x="963.72"
y="986.16"
width="13.22"
height="126.83"
rx="1.27"
transform="translate(787.46 -368.06) rotate(35.4)"
></rect><path
class="cls-5"
d="M1144.31,1098.17l-8.71,6.19a1.28,1.28,0,0,1-1.77-.3l-64.47-90.7-64.46,90.7a1.28,1.28,0,0,1-1.77.3l-8.71-6.19a1.27,1.27,0,0,1-.3-1.77l67.12-94.45,4-5.67a5,5,0,0,1,8.17,0l4,5.67,67.13,94.45A1.28,1.28,0,0,1,1144.31,1098.17Z"
></path></g><g id="Layer_2" data-name="Layer 2"><rect
class="cls-7"
x="756.66"
y="741.6"
width="549.89"
height="895.27"
rx="39.55"
></rect><path
class="cls-7"
d="M1180.43,741.6V679.52a31.92,31.92,0,0,1,31.92-31.92h62.29a31.92,31.92,0,0,1,31.92,31.92V792.76"
></path><path
class="cls-7"
d="M834.74,741.61v47.3a25.93,25.93,0,0,1-25.94,25.93H756.66"
></path><circle
class="cls-8"
cx="802.88"
cy="782.93"
r="27.34"
></circle><polygon
class="cls-8"
points="810.18 770.29 795.58 770.29 788.28 782.93 795.58 795.58 810.18 795.58 817.48 782.93 810.18 770.29"
></polygon><path
class="cls-7"
d="M1306.56,814.84h-52.14a25.93,25.93,0,0,1-25.94-25.93v-47.3"
></path><circle
class="cls-8"
cx="1260.34"
cy="782.93"
r="27.34"
></circle><polygon
class="cls-8"
points="1253.04 770.29 1267.64 770.29 1274.94 782.93 1267.64 795.58 1253.04 795.58 1245.74 782.93 1253.04 770.29"
></polygon><path
class="cls-7"
d="M756.66,1563.63H808.8a25.94,25.94,0,0,1,25.94,25.94v47.3"
></path><circle
class="cls-8"
cx="802.88"
cy="1595.55"
r="27.34"
></circle><polygon
class="cls-8"
points="810.18 1608.19 795.58 1608.19 788.28 1595.55 795.58 1582.9 810.18 1582.9 817.48 1595.55 810.18 1608.19"
></polygon><path
class="cls-7"
d="M1228.48,1636.87v-47.3a25.94,25.94,0,0,1,25.94-25.94h52.14"
></path><circle
class="cls-8"
cx="1260.34"
cy="1595.55"
r="27.34"
></circle><polygon
class="cls-8"
points="1253.04 1608.19 1267.64 1608.19 1274.94 1595.55 1267.64 1582.9 1253.04 1582.9 1245.74 1595.55 1253.04 1608.19"
></polygon><rect
class="cls-8"
x="872.9"
y="1131.27"
width="321.03"
height="160.93"
rx="17.15"
></rect><rect
class="cls-8"
x="811.61"
y="854.23"
width="37.22"
height="674.13"
rx="18.61"
></rect><path
class="cls-8"
d="M930.19,840.33v169.11a18.61,18.61,0,0,1-18.6,18.61h0A18.61,18.61,0,0,1,893,1009.44V840.91c0-10.24,8.37-19.19,18.6-19.19a18.62,18.62,0,0,1,18.61,18.61Z"
></path><path
class="cls-8"
d="M911.59,1323.24h0a18.61,18.61,0,0,1,18.6,18.61v198.51c0,10.05-7.72,18.72-17.76,19.16A18.59,18.59,0,0,1,893,1540.93V1341.85A18.61,18.61,0,0,1,911.59,1323.24Z"
></path><path
class="cls-8"
d="M1012,808.86V957.94a18.61,18.61,0,0,1-18.61,18.6h0a18.6,18.6,0,0,1-18.6-18.6V809.44c0-10.24,8.36-19.2,18.6-19.19A18.62,18.62,0,0,1,1012,808.86Z"
></path><path
class="cls-8"
d="M993.38,1323.24h0a18.61,18.61,0,0,1,18.61,18.61v231.46c0,10-7.73,18.72-17.77,19.16a18.59,18.59,0,0,1-19.44-18.59v-232A18.61,18.61,0,0,1,993.38,1323.24Z"
></path><rect
class="cls-8"
x="1218.69"
y="854.23"
width="37.22"
height="674.13"
rx="18.61"
transform="translate(2474.6 2382.59) rotate(180)"
></rect><path
class="cls-8"
d="M1137.33,840.33v169.11a18.61,18.61,0,0,0,18.61,18.61h0a18.61,18.61,0,0,0,18.6-18.61V840.91c0-10.24-8.36-19.19-18.6-19.19a18.64,18.64,0,0,0-18.61,18.61Z"
></path><path
class="cls-8"
d="M1155.94,1323.24h0a18.61,18.61,0,0,0-18.61,18.61v198.51c0,10.05,7.72,18.72,17.77,19.16a18.59,18.59,0,0,0,19.44-18.59V1341.85A18.61,18.61,0,0,0,1155.94,1323.24Z"
></path><path
class="cls-8"
d="M1055.53,808.86V957.94a18.61,18.61,0,0,0,18.61,18.6h0a18.61,18.61,0,0,0,18.61-18.6V809.44c0-10.24-8.37-19.2-18.61-19.19a18.62,18.62,0,0,0-18.61,18.61Z"
></path><path
class="cls-8"
d="M1074.14,1323.24h0a18.61,18.61,0,0,0-18.61,18.61v231.46c0,10,7.73,18.72,17.77,19.16a18.6,18.6,0,0,0,19.45-18.59v-232A18.61,18.61,0,0,0,1074.14,1323.24Z"
></path><rect
class="cls-7"
x="1207.05"
y="672.58"
width="71.46"
height="48.69"
rx="13.87"
></rect><rect
class="cls-9"
x="1200.59"
y="665.84"
width="84.39"
height="61.92"
rx="20.35"
></rect><rect
class="cls-7"
x="880.79"
y="713.97"
width="84.29"
height="27.63"
></rect><rect
class="cls-7"
x="887.38"
y="684.75"
width="71.66"
height="29.22"
></rect><rect
class="cls-7"
x="876.01"
y="620.75"
width="93.9"
height="64"
rx="15.57"
></rect><rect
class="cls-7"
x="891.84"
y="608.7"
width="62.51"
height="12.05"
></rect><path
class="cls-7"
d="M922.93,174.42h0a42.15,42.15,0,0,1,42.15,42.15V605.22a3.48,3.48,0,0,1-3.48,3.48H884.26a3.48,3.48,0,0,1-3.48-3.48V216.56a42.15,42.15,0,0,1,42.15-42.15Z"
></path><line
class="cls-10"
x1="880.79"
y1="251.39"
x2="965.08"
y2="251.39"
></line><line
class="cls-10"
x1="880.79"
y1="260.37"
x2="965.08"
y2="260.37"
></line><rect
class="cls-11"
x="963.72"
y="986.16"
width="13.22"
height="126.83"
rx="1.27"
transform="translate(787.46 -368.06) rotate(35.4)"
></rect><path
class="cls-12"
d="M1144.31,1098.17l-8.71,6.19a1.28,1.28,0,0,1-1.77-.3l-64.47-90.7-64.46,90.7a1.28,1.28,0,0,1-1.77.3l-8.71-6.19a1.27,1.27,0,0,1-.3-1.77l67.12-94.45,4-5.67a5,5,0,0,1,8.17,0l4,5.67,67.13,94.45A1.28,1.28,0,0,1,1144.31,1098.17Z"
></path></g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 89 KiB

@@ -1,546 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="713.62 574.61 677 692.34">
<defs><style>
.cls-1 {
fill: #d3d3d3;
}
.cls-2 {
fill: #bfbfbe;
}
.cls-3 {
fill: #b0b0af;
}
.cls-4 {
fill: #e5e5e3;
}
.cls-5 {
fill: #353535;
}
.cls-6, .cls-7 {
fill: none;
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-6 {
stroke-width: 1.65px;
}
.cls-7 {
stroke-width: 3px;
}
.cls-8 {
fill: #cccccb;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><path
class="cls-1"
d="M742.78,1220.62c-19.75-8.13-31.52-23.69-26.5-40.61l69.29-233.38a11,11,0,0,1,2.09,4.35l4.07,19.26"
></path><path
class="cls-2"
d="M790,962.24l-65.73,221.37a30.26,30.26,0,0,0,33.33,38.56L842.4,1210"
></path><path
class="cls-3"
d="M807.29,1043.86l-30.5,104.26-18.71,2.1,30-98.73a3,3,0,0,0-2.87-3.87,6.45,6.45,0,0,1-6.16-8.36l16.23-52.36Z"
></path><polygon
class="cls-3"
points="828.12 1142.37 783.87 1147.34 809.96 1056.49 828.12 1142.37"
></polygon><path
class="cls-3"
d="M775.27,1153.34,761.91,1199a3.68,3.68,0,0,1,0-2.11,5.17,5.17,0,0,0-5-6.53h-2.43a6.34,6.34,0,0,1-6.07-8.19l8.14-26.82Z"
></path><polygon
class="cls-3"
points="839.03 1193.99 768.37 1201.28 782.36 1152.58 829.2 1147.52 839.03 1193.99"
></polygon><path
class="cls-4"
d="M1375,1178.08c-9.54,7.22-39,20.08-59.5,23.23l-414.72,63.57A48.48,48.48,0,0,1,846,1227l-7-33L795.25,986.9,787.66,951a10,10,0,0,0-2.09-4.35l-9.8-11.87a10,10,0,0,1-2.09-4.35L718.39,668.87c-.1-.45-.18-.91-.26-1.36a26.13,26.13,0,0,1,14.41-27.36l36.79-18.33c11.15-5.55,21.79-6.71,34.35-7.73Z"
></path><path
class="cls-1"
d="M1235.26,576.22a28.15,28.15,0,0,1,29.92,21.84l123.06,543.61a35.82,35.82,0,0,1-29.51,43.32L944,1248.56a48.48,48.48,0,0,1-54.77-37.89L770.75,650.17A29.51,29.51,0,0,1,797,614.67Z"
></path><path
class="cls-5"
d="M802.91,657.25,916.05,1194.5a17,17,0,0,0,19.22,13.33l426-64.41a14.6,14.6,0,0,0,12-17.67L1257.48,615.46a14.27,14.27,0,0,0-15.18-11.05L813.65,642.73A12.07,12.07,0,0,0,802.91,657.25Z"
></path><path
class="cls-6"
d="M802.91,657.25,916.05,1194.5a17,17,0,0,0,19.22,13.33l426-64.41a14.6,14.6,0,0,0,12-17.67L1257.48,615.46a14.27,14.27,0,0,0-15.18-11.05L813.65,642.73A12.07,12.07,0,0,0,802.91,657.25Z"
></path><path
class="cls-7"
d="M1235.26,576.22a28.15,28.15,0,0,1,29.92,21.84l123.06,543.61a35.82,35.82,0,0,1-29.51,43.32L944,1248.56a48.48,48.48,0,0,1-54.77-37.89L770.75,650.17A29.51,29.51,0,0,1,797,614.67Z"
></path><path
class="cls-7"
d="M803.68,614.09c-12.56,1-23.2,2.18-34.35,7.73l-36.79,18.33a26.12,26.12,0,0,0-14.41,27.36c.08.46.16.91.26,1.36l55.29,261.54a10,10,0,0,0,2.09,4.35l9.8,11.87a10,10,0,0,1,2.09,4.35L846,1227a48.48,48.48,0,0,0,54.77,37.89l414.72-63.57c20.54-3.15,50-16,59.5-23.22"
></path><path
class="cls-7"
d="M742.78,1220.62c-19.75-8.13-31.52-23.69-26.5-40.61l69.29-233.38"
></path><path
class="cls-7"
d="M790,962.24l-65.73,221.37a30.26,30.26,0,0,0,33.33,38.56L842.4,1210"
></path><ellipse
class="cls-8"
cx="837.63"
cy="1070.6"
rx="2.7"
ry="3.34"
transform="translate(-119.45 105.29) rotate(-6.72)"
></ellipse><ellipse
class="cls-8"
cx="776.45"
cy="893.91"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="783.68"
cy="890.78"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="790.92"
cy="887.66"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="798.15"
cy="884.53"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="805.38"
cy="881.4"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="774.39"
cy="883.96"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="781.62"
cy="880.84"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="788.85"
cy="877.71"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="796.08"
cy="874.58"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="803.31"
cy="871.46"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="772.32"
cy="874.01"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="779.56"
cy="870.89"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="786.79"
cy="867.76"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="794.02"
cy="864.64"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="801.25"
cy="861.51"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="770.26"
cy="864.07"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="777.49"
cy="860.94"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="784.72"
cy="857.81"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="791.95"
cy="854.69"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="799.18"
cy="851.56"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="768.2"
cy="854.12"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="775.43"
cy="850.99"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="782.66"
cy="847.87"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="789.89"
cy="844.74"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="797.12"
cy="841.61"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="766.13"
cy="844.17"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="773.36"
cy="841.05"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="780.59"
cy="837.92"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="787.82"
cy="834.79"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="795.05"
cy="831.67"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="764.07"
cy="834.23"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="771.3"
cy="831.1"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="778.53"
cy="827.97"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="785.76"
cy="824.85"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="792.99"
cy="821.72"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="762"
cy="824.28"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="769.23"
cy="821.15"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="776.46"
cy="818.03"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="783.69"
cy="814.9"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="790.92"
cy="811.77"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="759.94"
cy="814.33"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="767.17"
cy="811.21"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="774.4"
cy="808.08"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="781.63"
cy="804.95"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="788.86"
cy="801.83"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="757.87"
cy="804.38"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="765.1"
cy="801.26"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="772.33"
cy="798.13"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="779.57"
cy="795.01"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="786.8"
cy="791.88"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="755.81"
cy="794.44"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="763.04"
cy="791.31"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="770.27"
cy="788.18"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="777.5"
cy="785.06"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="784.73"
cy="781.93"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="753.74"
cy="784.49"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="760.97"
cy="781.36"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="768.21"
cy="778.24"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="775.44"
cy="775.11"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="782.67"
cy="771.98"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="751.68"
cy="774.54"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="758.91"
cy="771.42"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="766.14"
cy="768.29"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="773.37"
cy="765.16"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="780.6"
cy="762.04"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="749.62"
cy="764.6"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="756.85"
cy="761.47"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="764.08"
cy="758.34"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="771.31"
cy="755.22"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="778.54"
cy="752.09"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="747.55"
cy="754.65"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="754.78"
cy="751.52"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="762.01"
cy="748.4"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="769.24"
cy="745.27"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="776.47"
cy="742.14"
rx="2.21"
ry="2.73"
></ellipse><ellipse
class="cls-8"
cx="841.13"
cy="1084.42"
rx="2.7"
ry="3.34"
transform="translate(-121.04 105.8) rotate(-6.72)"
></ellipse><ellipse
class="cls-8"
cx="844.62"
cy="1098.25"
rx="2.7"
ry="3.34"
transform="translate(-122.63 106.3) rotate(-6.72)"
></ellipse></g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 34 KiB

-512
View File
@@ -1,512 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="340.47 223.69 263.8 485.94">
<defs><style>
.cls-1 {
fill: #434143;
}
.cls-2, .cls-6, .cls-7 {
fill: none;
}
.cls-2 {
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-3 {
fill: #2b2b2b;
}
.cls-4 {
fill: #181818;
}
.cls-5 {
fill: #e8eae8;
}
.cls-6, .cls-7 {
stroke: #e8eae8;
stroke-linecap: round;
stroke-linejoin: round;
}
.cls-7 {
stroke-width: 2px;
}
.cls-8 {
fill: #b1a368;
}
</style></defs><g id="Layer_2" data-name="Layer 2"><rect
class="cls-1"
x="340.97"
y="258.81"
width="262.8"
height="450.32"
rx="27.43"
></rect><rect
class="cls-2"
x="340.97"
y="258.81"
width="262.8"
height="450.32"
rx="27.43"
></rect><circle
class="cls-3"
cx="364.66"
cy="281.32"
r="10.92"
></circle><circle
class="cls-2"
cx="364.66"
cy="281.32"
r="10.92"
></circle><path
class="cls-4"
d="M372.05,281.32a2.39,2.39,0,0,1-2.39,2.38h-2.61v2.62a2.38,2.38,0,1,1-4.76,0V283.7h-2.63a2.39,2.39,0,1,1,0-4.77h2.63v-2.62a2.38,2.38,0,0,1,2.37-2.38,2.39,2.39,0,0,1,2.39,2.38v2.62h2.61A2.4,2.4,0,0,1,372.05,281.32Z"
></path><circle
class="cls-3"
cx="579.41"
cy="281.32"
r="10.92"
></circle><circle
class="cls-2"
cx="579.41"
cy="281.32"
r="10.92"
></circle><path
class="cls-4"
d="M586.79,281.32a2.39,2.39,0,0,1-2.38,2.38h-2.62v2.62a2.38,2.38,0,1,1-4.76,0V283.7h-2.62a2.39,2.39,0,1,1,0-4.77H577v-2.62a2.38,2.38,0,0,1,4.76,0v2.62h2.62A2.39,2.39,0,0,1,586.79,281.32Z"
></path><circle
class="cls-3"
cx="364.66"
cy="683.91"
r="10.92"
></circle><circle
class="cls-2"
cx="364.66"
cy="683.91"
r="10.92"
></circle><path
class="cls-4"
d="M372.05,683.92a2.39,2.39,0,0,1-2.39,2.38h-2.61v2.62a2.38,2.38,0,1,1-4.76,0V686.3h-2.63a2.39,2.39,0,1,1,0-4.77h2.63v-2.62a2.38,2.38,0,0,1,2.37-2.38,2.39,2.39,0,0,1,2.39,2.38v2.62h2.61A2.4,2.4,0,0,1,372.05,683.92Z"
></path><circle
class="cls-3"
cx="579.41"
cy="683.91"
r="10.92"
></circle><circle
class="cls-2"
cx="579.41"
cy="683.91"
r="10.92"
></circle><path
class="cls-4"
d="M586.79,683.92a2.39,2.39,0,0,1-2.38,2.38h-2.62v2.62a2.38,2.38,0,0,1-4.76,0V686.3h-2.62a2.39,2.39,0,1,1,0-4.77H577v-2.62a2.38,2.38,0,0,1,4.76,0v2.62h2.62A2.39,2.39,0,0,1,586.79,683.92Z"
></path><circle
class="cls-3"
cx="561.1"
cy="512.26"
r="10.92"
></circle><circle
class="cls-2"
cx="561.1"
cy="512.26"
r="10.92"
></circle><path
class="cls-4"
d="M568.49,512.26a2.39,2.39,0,0,1-2.38,2.38h-2.62v2.62a2.38,2.38,0,1,1-4.76,0v-2.62h-2.62a2.39,2.39,0,1,1,0-4.77h2.62v-2.62a2.38,2.38,0,0,1,4.76,0v2.62h2.62A2.39,2.39,0,0,1,568.49,512.26Z"
></path><circle
class="cls-3"
cx="478.84"
cy="406.37"
r="10.92"
></circle><circle
class="cls-2"
cx="478.84"
cy="406.37"
r="10.92"
></circle><path
class="cls-4"
d="M486.22,406.37a2.39,2.39,0,0,1-2.38,2.38h-2.62v2.62a2.38,2.38,0,1,1-4.76,0v-2.62h-2.62a2.39,2.39,0,1,1,0-4.77h2.62v-2.62a2.38,2.38,0,0,1,4.76,0V404h2.62A2.39,2.39,0,0,1,486.22,406.37Z"
></path><rect
class="cls-3"
x="380.01"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-3"
x="399.24"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-3"
x="418.47"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-5"
x="442.52"
y="443.28"
width="6.5"
height="54.62"
transform="translate(348.12 -170.22) rotate(34.78)"
></rect><path
class="cls-5"
d="M521.39,490.76l-5.34,3.71L489,455.92,462,494.9l-5.34-3.71,28.32-41,1.06-1.53a3.53,3.53,0,0,1,5.8,0l1.06,1.53Z"
></path><rect
class="cls-3"
x="437.7"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-3"
x="492.51"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-3"
x="511.74"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-3"
x="530.97"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-3"
x="550.2"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><rect
class="cls-3"
x="465.19"
y="302.06"
width="5.45"
height="72.48"
rx="1.75"
></rect><path
class="cls-5"
d="M420.79,519.77l4-.25a3.13,3.13,0,0,0,.53,1.48,2.21,2.21,0,0,0,1.85.82,2,2,0,0,0,1.38-.42,1.24,1.24,0,0,0,.49-1,1.29,1.29,0,0,0-.46-.95,5.44,5.44,0,0,0-2.15-.78,9.1,9.1,0,0,1-3.93-1.65,3.31,3.31,0,0,1-1.19-2.62,3.59,3.59,0,0,1,.61-2,4,4,0,0,1,1.82-1.46,8.43,8.43,0,0,1,3.34-.54,6.85,6.85,0,0,1,4,1,4.17,4.17,0,0,1,1.62,3.08l-3.95.23a2.06,2.06,0,0,0-.66-1.33,2.1,2.1,0,0,0-1.39-.42,1.66,1.66,0,0,0-1.1.31,1,1,0,0,0-.37.75.76.76,0,0,0,.31.59,3.42,3.42,0,0,0,1.4.5,17.67,17.67,0,0,1,3.94,1.19,4.19,4.19,0,0,1,1.73,1.51,3.8,3.8,0,0,1,.54,2,4.31,4.31,0,0,1-.72,2.41,4.57,4.57,0,0,1-2,1.67,8.13,8.13,0,0,1-3.27.57c-2.3,0-3.9-.45-4.79-1.33A5.26,5.26,0,0,1,420.79,519.77Z"
></path><path
class="cls-5"
d="M439.49,510.7v3.73h2.07v2.76h-2.07v3.48a1.85,1.85,0,0,0,.12.83.69.69,0,0,0,.65.32,4.09,4.09,0,0,0,1.16-.24l.28,2.59a11.86,11.86,0,0,1-2.61.31,4.54,4.54,0,0,1-2.07-.36,2.2,2.2,0,0,1-1-1.1,6.25,6.25,0,0,1-.32-2.37v-3.46h-1.39v-2.76h1.39v-1.8Z"
></path><path
class="cls-5"
d="M446.79,517.62l-3.6-.38a4.06,4.06,0,0,1,.59-1.49,3.23,3.23,0,0,1,1.1-.94,4.57,4.57,0,0,1,1.43-.44,11,11,0,0,1,2-.16,15.27,15.27,0,0,1,2.72.19,3.56,3.56,0,0,1,1.71.79,2.84,2.84,0,0,1,.76,1.18,4.43,4.43,0,0,1,.28,1.46v4.34a5.16,5.16,0,0,0,.08,1.08,4.81,4.81,0,0,0,.39,1h-3.54a3.68,3.68,0,0,1-.27-.58,3.18,3.18,0,0,1-.13-.63,4.9,4.9,0,0,1-1.47,1,6.18,6.18,0,0,1-2.33.41,3.86,3.86,0,0,1-2.66-.81,2.76,2.76,0,0,1-.26-3.85,4.52,4.52,0,0,1,2.42-1.08c1.42-.28,2.33-.48,2.75-.59s.86-.27,1.33-.45a1.32,1.32,0,0,0-.28-1,1.42,1.42,0,0,0-1-.28,2.59,2.59,0,0,0-1.39.3A1.6,1.6,0,0,0,446.79,517.62Zm3.26,2c-.51.18-1.05.34-1.62.49a3.72,3.72,0,0,0-1.45.6,1,1,0,0,0,0,1.42,1.34,1.34,0,0,0,.91.28,2.28,2.28,0,0,0,1.17-.31,1.84,1.84,0,0,0,.77-.74,2.49,2.49,0,0,0,.22-1.14Z"
></path><path
class="cls-5"
d="M460.21,510.7v3.73h2.07v2.76h-2.07v3.48a1.85,1.85,0,0,0,.12.83.69.69,0,0,0,.65.32,4.09,4.09,0,0,0,1.16-.24l.28,2.59a11.86,11.86,0,0,1-2.61.31,4.57,4.57,0,0,1-2.07-.36,2.2,2.2,0,0,1-1-1.1,6.25,6.25,0,0,1-.32-2.37v-3.46h-1.39v-2.76h1.39v-1.8Z"
></path><path
class="cls-5"
d="M464.22,510.7H468v2.56h-3.76Zm0,3.73H468v9.83h-3.76Z"
></path><path
class="cls-5"
d="M469.92,519.37a4.91,4.91,0,0,1,1.52-3.7,6.58,6.58,0,0,1,8.56.25,5.36,5.36,0,0,1-.29,7.11,5.74,5.74,0,0,1-4.16,1.45,5.83,5.83,0,0,1-3.83-1.2A4.84,4.84,0,0,1,469.92,519.37Zm3.78,0a3,3,0,0,0,.53,1.95,1.74,1.74,0,0,0,2.67,0,3.08,3.08,0,0,0,.53-2,2.89,2.89,0,0,0-.53-1.9,1.64,1.64,0,0,0-1.31-.63,1.67,1.67,0,0,0-1.35.64A2.89,2.89,0,0,0,473.7,519.36Z"
></path><path
class="cls-5"
d="M483,514.43h3.51V516a5.16,5.16,0,0,1,1.59-1.4,4.2,4.2,0,0,1,2-.42,3.23,3.23,0,0,1,2.45.93,4,4,0,0,1,.88,2.87v6.25h-3.78v-5.41a2,2,0,0,0-.34-1.3,1.22,1.22,0,0,0-1-.39,1.37,1.37,0,0,0-1.11.52,3.07,3.07,0,0,0-.42,1.86v4.72H483Z"
></path><path
class="cls-5"
d="M509,519.35v-2.83h6.48v5.79a13.27,13.27,0,0,1-3.29,1.72,11,11,0,0,1-3.39.46,8.38,8.38,0,0,1-3.94-.82,5.6,5.6,0,0,1-2.35-2.46,8,8,0,0,1-.84-3.73,7.85,7.85,0,0,1,.91-3.87,6,6,0,0,1,2.69-2.49,8.68,8.68,0,0,1,3.71-.66,10.45,10.45,0,0,1,3.36.41,4.37,4.37,0,0,1,1.85,1.26,5.63,5.63,0,0,1,1.1,2.17l-4,.73a2.16,2.16,0,0,0-.84-1.18,2.68,2.68,0,0,0-1.53-.41,2.72,2.72,0,0,0-2.19,1,4.59,4.59,0,0,0-.82,3,4.72,4.72,0,0,0,.83,3.15,2.93,2.93,0,0,0,2.3.94,4.64,4.64,0,0,0,1.35-.2,7.55,7.55,0,0,0,1.46-.7v-1.27Z"
></path><path
class="cls-5"
d="M528.42,524.26h-11.3a7,7,0,0,1,1.18-3.15,16,16,0,0,1,3.69-3.49,11.11,11.11,0,0,0,2.12-1.86,2.11,2.11,0,0,0,.47-1.22,1.42,1.42,0,0,0-.46-1,1.58,1.58,0,0,0-1.15-.44,1.61,1.61,0,0,0-1.18.45,2.75,2.75,0,0,0-.62,1.6l-3.77-.31a6,6,0,0,1,.81-2.48,3.85,3.85,0,0,1,1.67-1.37,7.49,7.49,0,0,1,3-.48,8.47,8.47,0,0,1,3.1.46,3.71,3.71,0,0,1,2.37,3.5,4.32,4.32,0,0,1-.72,2.36,9.93,9.93,0,0,1-2.65,2.48c-.75.53-1.26.89-1.52,1.1s-.55.49-.9.83h5.88Z"
></path><rect
class="cls-3"
x="407.64"
y="558.27"
width="135.85"
height="67.27"
rx="3.52"
></rect><rect
class="cls-2"
x="407.64"
y="558.27"
width="135.85"
height="67.27"
rx="3.52"
></rect><circle class="cls-6" cx="586.93" cy="513.44" r="9.9"></circle><rect
class="cls-5"
x="581.12"
y="512.62"
width="9.09"
height="1.63"
rx="0.82"
></rect><circle
class="cls-5"
cx="591.91"
cy="513.44"
r="0.83"
></circle><path
class="cls-5"
d="M595.54,604.4v-2a3.26,3.26,0,0,0-3.27-3.27H579.86a3.26,3.26,0,0,0-3.27,3.27v14.63a3.26,3.26,0,0,0,3.27,3.27h12.41a3.26,3.26,0,0,0,3.27-3.27v-1.57h-6.38V604.4ZM584,615.49h-5.05V604.4H584Z"
></path><rect
class="cls-5"
x="592.44"
y="610.44"
width="4.83"
height="3.64"
rx="0.91"
></rect><path
class="cls-7"
d="M579,655.86a9.88,9.88,0,0,0,15.29-1"
></path><path
class="cls-7"
d="M595.57,652.31a9.9,9.9,0,1,0-19.26-3.19"
></path><polygon
class="cls-5"
points="571.82 649.11 580.81 649.11 576.5 653.13 571.82 649.11"
></polygon><path
class="cls-6"
d="M513.83,395.84l-10,18.22a1.21,1.21,0,0,0,1.06,1.79H525a1.21,1.21,0,0,0,1.06-1.8L516,395.83A1.21,1.21,0,0,0,513.83,395.84Z"
></path><line
class="cls-6"
x1="508.31"
y1="412.99"
x2="521.75"
y2="412.99"
></line><path
class="cls-6"
d="M511.9,411.29s1.88-2,.68-3.24-2.34-2.69-.68-4.1"
></path><path
class="cls-6"
d="M514.9,411.29s1.88-2,.69-3.24-2.35-2.69-.69-4.1"
></path><path
class="cls-6"
d="M517.91,411.29s1.87-2,.68-3.24-2.35-2.69-.68-4.1"
></path><rect
class="cls-8"
x="497.97"
y="253.53"
width="25.55"
height="5.28"
></rect><path
class="cls-8"
d="M502.42,224.19h17a1.73,1.73,0,0,1,1.73,1.73v27.61a0,0,0,0,1,0,0H500.69a0,0,0,0,1,0,0V225.92A1.73,1.73,0,0,1,502.42,224.19Z"
></path><rect
class="cls-8"
x="497.97"
y="230.25"
width="25.55"
height="19.98"
rx="1.55"
></rect><rect
class="cls-2"
x="497.97"
y="253.53"
width="25.55"
height="5.28"
></rect><path
class="cls-2"
d="M521.11,225.92v4.33H500.68v-4.33a1.73,1.73,0,0,1,1.74-1.73h16.95A1.73,1.73,0,0,1,521.11,225.92Z"
></path><rect
class="cls-2"
x="500.68"
y="250.22"
width="20.43"
height="3.31"
></rect><path
class="cls-2"
d="M523.51,231.8v16.87a1.54,1.54,0,0,1-1.55,1.55H499.52a1.55,1.55,0,0,1-1.56-1.55V231.8a1.55,1.55,0,0,1,1.56-1.55H522A1.54,1.54,0,0,1,523.51,231.8Z"
></path><path
class="cls-5"
d="M382.68,266.74H383c.17,0,.27.07.28.19l.31,3.68c0,.35.11.53.18.53s.2-.17.31-.5l.34-1a.2.2,0,0,1,.2-.11.23.23,0,0,1,.2.11l.33,1c.11.33.21.5.29.5s.15-.18.18-.53l.32-3.68c0-.12.1-.19.28-.19h.38c.18,0,.28.08.28.21l-.55,6.79c0,.12-.12.19-.29.19h-.45c-.14,0-.26-.06-.28-.16l-.42-1.45c-.09-.28-.19-.43-.28-.43s-.19.15-.27.43l-.41,1.45c0,.1-.14.16-.29.16h-.46c-.17,0-.27-.07-.28-.19l-.55-6.79C382.39,266.82,382.5,266.74,382.68,266.74Z"
></path><path
class="cls-5"
d="M390.76,273.76l-.28-1.33c0-.11-.14-.17-.28-.17h-1.29a.27.27,0,0,0-.28.17l-.26,1.33a.29.29,0,0,1-.29.17h-.34c-.19,0-.29-.07-.29-.19a1.58,1.58,0,0,1,0-.21l1.42-6.62c0-.11.14-.17.28-.17h.75c.14,0,.26.06.28.17l1.41,6.62a1.58,1.58,0,0,1,0,.21c0,.12-.11.19-.29.19h-.33A.28.28,0,0,1,390.76,273.76Zm-1.21-5c-.1,0-.19.2-.28.6l-.36,1.78a1,1,0,0,0,0,.24c0,.11.1.18.27.18H390c.16,0,.28-.06.28-.18a1,1,0,0,0,0-.24l-.37-1.78C389.75,269,389.66,268.78,389.55,268.78Z"
></path><path
class="cls-5"
d="M393.2,273.93h-.4c-.16,0-.28-.08-.28-.2v-6.79c0-.12.12-.2.28-.2h1.68c1,0,1.91.52,1.91,1.54v.78a1.42,1.42,0,0,1-.85,1.32.19.19,0,0,0-.13.19.49.49,0,0,0,0,.15l.87,2.69a1.13,1.13,0,0,1,.09.33c0,.12-.09.19-.28.19h-.41c-.15,0-.26-.06-.29-.16l-.93-3c0-.09-.14-.15-.28-.15h-.44c-.17,0-.28.08-.28.2v2.92C393.49,273.85,393.37,273.93,393.2,273.93Zm.57-6.51c-.17,0-.28.08-.28.2v2.1c0,.12.11.21.28.21h.71c.53,0,1-.28,1-.8v-.91c0-.53-.43-.8-1-.8Z"
></path><path
class="cls-5"
d="M401,273.93h-.46a.3.3,0,0,1-.29-.15L399,270.5c-.16-.41-.29-.61-.4-.61s-.15.22-.15.67v3.17c0,.12-.12.2-.28.2h-.38c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h.54c.13,0,.25.05.27.15l1.24,3.19c.17.42.3.64.4.64s.16-.23.16-.69v-3.09c0-.12.11-.2.28-.2H401c.17,0,.28.08.28.2v6.79C401.3,273.85,401.19,273.93,401,273.93Z"
></path><path
class="cls-5"
d="M406.34,273.45v.28c0,.12-.12.2-.29.2h-3.47c-.16,0-.28-.08-.28-.2v-.28c0-.12.12-.2.28-.2h.95c.16,0,.28-.08.28-.2v-5.43c0-.12-.12-.2-.28-.2h-.95c-.16,0-.28-.08-.28-.2v-.28c0-.12.12-.2.28-.2h3.47c.17,0,.29.08.29.2v.28c0,.12-.12.2-.29.2h-1c-.17,0-.28.08-.28.2v5.43c0,.12.11.2.28.2h1C406.22,273.25,406.34,273.33,406.34,273.45Z"
></path><path
class="cls-5"
d="M410.85,273.93h-.46a.3.3,0,0,1-.29-.15l-1.29-3.28c-.16-.41-.29-.61-.39-.61s-.16.22-.16.67v3.17c0,.12-.12.2-.28.2h-.38c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h.54a.27.27,0,0,1,.28.15l1.23,3.19c.17.42.3.64.4.64s.16-.23.16-.69v-3.09c0-.12.11-.2.28-.2h.36c.17,0,.29.08.29.2v6.79C411.14,273.85,411,273.93,410.85,273.93Z"
></path><path
class="cls-5"
d="M415.1,271.54c0-.12-.12-.2-.29-.2h-.33c-.17,0-.29-.08-.29-.2v-.28c0-.12.12-.2.29-.2h1.29c.16,0,.28.08.28.2v1.59a2,2,0,0,1-3.82,0v-4.23a2,2,0,0,1,3.82,0v.19c0,.12-.12.2-.27.2h-.37c-.17,0-.29-.08-.29-.2v-.25c0-.53-.44-.81-1-.81s-1,.28-1,.81v4.36c0,.52.41.8.94.8s1-.28,1-.8Z"
></path><path
class="cls-5"
d="M418,269.21h-.4c-.17,0-.28-.08-.28-.2v-.38c0-.12.11-.2.28-.2h.4c.17,0,.28.08.28.2V269C418.32,269.13,418.21,269.21,418,269.21Zm0,3.08h-.4c-.17,0-.28-.09-.28-.21v-.37c0-.12.11-.2.28-.2h.4c.17,0,.28.08.28.2v.37C418.32,272.2,418.21,272.29,418,272.29Z"
></path><path
class="cls-5"
d="M424.5,267.91c0-.78.5-1.17,1.51-1.17h.81c1,0,1.5.39,1.5,1.17v4.85c0,.78-.49,1.17-1.5,1.17H426c-1,0-1.51-.39-1.51-1.17Zm1,4.91c0,.29.18.43.54.43h.81c.36,0,.55-.14.55-.43v-5c0-.29-.19-.43-.55-.43H426c-.36,0-.54.14-.54.43Z"
></path><path
class="cls-5"
d="M430.1,273.93h-.4c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h1.57c1,0,1.93.52,1.93,1.54v.82c0,1-1,1.54-1.93,1.54h-.6c-.17,0-.29.08-.29.2v2.89C430.38,273.85,430.27,273.93,430.1,273.93Zm.57-6.51c-.17,0-.29.08-.29.2v2.14c0,.12.12.2.29.2h.6c.53,0,1-.27,1-.8v-.94c0-.53-.42-.8-1-.8Z"
></path><path
class="cls-5"
d="M437.53,270.16v.28c0,.12-.12.2-.28.2h-1.67c-.16,0-.28.08-.28.2v2.21c0,.12.12.2.28.2H438c.17,0,.28.08.28.2v.28c0,.12-.11.2-.28.2h-3.36c-.17,0-.29-.08-.29-.2v-6.79c0-.12.12-.2.29-.2H438c.17,0,.28.08.28.2v.28c0,.12-.11.2-.28.2h-2.4c-.16,0-.28.08-.28.2v2.14c0,.12.12.2.28.2h1.67C437.41,270,437.53,270,437.53,270.16Z"
></path><path
class="cls-5"
d="M439.88,273.93h-.4c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h1.68c.95,0,1.9.52,1.9,1.54v.78a1.42,1.42,0,0,1-.85,1.32.19.19,0,0,0-.13.19,1.31,1.31,0,0,0,0,.15l.88,2.69a1.65,1.65,0,0,1,.09.33c0,.12-.09.19-.29.19h-.41c-.14,0-.26-.06-.28-.16l-.93-3a.28.28,0,0,0-.29-.15h-.43c-.17,0-.29.08-.29.2v2.92C440.16,273.85,440.05,273.93,439.88,273.93Zm.57-6.51c-.17,0-.29.08-.29.2v2.1c0,.12.12.21.29.21h.71c.52,0,.95-.28.95-.8v-.91c0-.53-.43-.8-.95-.8Z"
></path><path
class="cls-5"
d="M447.27,273.76l-.28-1.33a.28.28,0,0,0-.29-.17h-1.29a.28.28,0,0,0-.28.17l-.26,1.33a.27.27,0,0,1-.28.17h-.35c-.18,0-.28-.07-.28-.19a1.58,1.58,0,0,1,0-.21l1.41-6.62c0-.11.14-.17.29-.17h.74c.15,0,.26.06.29.17l1.4,6.62a1.58,1.58,0,0,1,0,.21c0,.12-.1.19-.28.19h-.34A.26.26,0,0,1,447.27,273.76Zm-1.21-5c-.1,0-.2.2-.29.6l-.36,1.78a1.66,1.66,0,0,0,0,.24c0,.11.1.18.27.18h.82c.17,0,.28-.06.28-.18a1.66,1.66,0,0,0,0-.24l-.38-1.78C446.25,269,446.16,268.78,446.06,268.78Z"
></path><path
class="cls-5"
d="M452.56,266.94v.28c0,.12-.12.2-.28.2h-1c-.16,0-.28.08-.28.2v6.11c0,.12-.12.2-.29.2h-.39c-.17,0-.29-.08-.29-.2v-6.11c0-.12-.11-.2-.28-.2h-.94c-.17,0-.29-.08-.29-.2v-.28c0-.12.12-.2.29-.2h3.47C452.44,266.74,452.56,266.82,452.56,266.94Z"
></path><path
class="cls-5"
d="M457.47,273.45v.28c0,.12-.11.2-.28.2h-3.47c-.17,0-.28-.08-.28-.2v-.28c0-.12.11-.2.28-.2h.94c.17,0,.29-.08.29-.2v-5.43c0-.12-.12-.2-.29-.2h-.94c-.17,0-.28-.08-.28-.2v-.28c0-.12.11-.2.28-.2h3.47c.17,0,.28.08.28.2v.28c0,.12-.11.2-.28.2h-1c-.17,0-.29.08-.29.2v5.43c0,.12.12.2.29.2h1C457.36,273.25,457.47,273.33,457.47,273.45Z"
></path><path
class="cls-5"
d="M458.35,267.91c0-.78.51-1.17,1.51-1.17h.81c1,0,1.5.39,1.5,1.17v4.85c0,.78-.49,1.17-1.5,1.17h-.81c-1,0-1.51-.39-1.51-1.17Zm1,4.91c0,.29.18.43.54.43h.81c.37,0,.55-.14.55-.43v-5c0-.29-.18-.43-.55-.43h-.81c-.36,0-.54.14-.54.43Z"
></path><path
class="cls-5"
d="M466.8,273.93h-.46a.3.3,0,0,1-.29-.15l-1.29-3.28c-.16-.41-.29-.61-.39-.61s-.16.22-.16.67v3.17c0,.12-.12.2-.28.2h-.38c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h.54a.27.27,0,0,1,.28.15l1.23,3.19c.17.42.3.64.4.64s.16-.23.16-.69v-3.09c0-.12.11-.2.28-.2h.36c.17,0,.29.08.29.2v6.79C467.09,273.85,467,273.93,466.8,273.93Z"
></path><path
class="cls-5"
d="M470.57,266.74h.36c.17,0,.27.07.29.19l.31,3.68c0,.35.1.53.18.53s.19-.17.3-.5l.34-1a.22.22,0,0,1,.21-.11.21.21,0,0,1,.19.11l.33,1c.11.33.21.5.29.5s.15-.18.18-.53l.32-3.68c0-.12.1-.19.29-.19h.37c.18,0,.28.08.28.21l-.55,6.79c0,.12-.12.19-.29.19h-.45a.27.27,0,0,1-.28-.16l-.41-1.45c-.09-.28-.2-.43-.29-.43s-.19.15-.27.43l-.41,1.45a.27.27,0,0,1-.28.16h-.47c-.17,0-.27-.07-.28-.19l-.54-6.79C470.29,266.82,470.39,266.74,470.57,266.74Z"
></path><path
class="cls-5"
d="M479.48,273.45v.28c0,.12-.11.2-.28.2h-3.47c-.17,0-.28-.08-.28-.2v-.28c0-.12.11-.2.28-.2h.94c.17,0,.29-.08.29-.2v-5.43c0-.12-.12-.2-.29-.2h-.94c-.17,0-.28-.08-.28-.2v-.28c0-.12.11-.2.28-.2h3.47c.17,0,.28.08.28.2v.28c0,.12-.11.2-.28.2h-1c-.17,0-.29.08-.29.2v5.43c0,.12.12.2.29.2h1C479.37,273.25,479.48,273.33,479.48,273.45Z"
></path><path
class="cls-5"
d="M484.4,266.94v.28c0,.12-.12.2-.29.2h-1c-.17,0-.28.08-.28.2v6.11c0,.12-.12.2-.29.2h-.4c-.16,0-.28-.08-.28-.2v-6.11c0-.12-.12-.2-.28-.2h-.94c-.17,0-.29-.08-.29-.2v-.28c0-.12.12-.2.29-.2h3.46C484.28,266.74,484.4,266.82,484.4,266.94Z"
></path><path
class="cls-5"
d="M486.35,266.94v2.82c0,.12.11.2.28.2H488c.17,0,.28-.08.28-.2v-2.82c0-.12.12-.2.29-.2h.38c.17,0,.29.08.29.2v6.79c0,.12-.12.2-.29.2h-.38c-.17,0-.29-.08-.29-.2v-2.89c0-.12-.11-.2-.28-.2h-1.33c-.17,0-.28.08-.28.2v2.89c0,.12-.12.2-.29.2h-.4c-.16,0-.28-.08-.28-.2v-6.79c0-.12.12-.2.28-.2h.4C486.23,266.74,486.35,266.82,486.35,266.94Z"
></path><path
class="cls-5"
d="M490.3,267.91q0-1.17,1.5-1.17h.82c1,0,1.49.39,1.49,1.17v4.85c0,.78-.49,1.17-1.49,1.17h-.82q-1.5,0-1.5-1.17Zm1,4.91c0,.29.18.43.54.43h.82c.36,0,.54-.14.54-.43v-5c0-.29-.18-.43-.54-.43h-.82c-.36,0-.54.14-.54.43Z"
></path><path
class="cls-5"
d="M495.21,266.94c0-.12.12-.2.29-.2h.39c.17,0,.29.08.29.2v5.58c0,.52.41.8.94.8s.95-.28.95-.8v-5.58c0-.12.12-.2.29-.2h.38c.17,0,.29.08.29.2v5.51a2,2,0,0,1-3.82,0Z"
></path><path
class="cls-5"
d="M504.06,266.94v.28c0,.12-.12.2-.28.2h-1c-.16,0-.28.08-.28.2v6.11c0,.12-.12.2-.29.2h-.39c-.17,0-.29-.08-.29-.2v-6.11c0-.12-.11-.2-.28-.2h-.94c-.17,0-.29-.08-.29-.2v-.28c0-.12.12-.2.29-.2h3.47C503.94,266.74,504.06,266.82,504.06,266.94Z"
></path><path
class="cls-5"
d="M510.6,273.76l-.28-1.33a.28.28,0,0,0-.29-.17h-1.29a.28.28,0,0,0-.28.17l-.26,1.33a.27.27,0,0,1-.28.17h-.35c-.18,0-.28-.07-.28-.19a1.58,1.58,0,0,1,0-.21l1.41-6.62c0-.11.14-.17.29-.17h.74c.15,0,.26.06.29.17l1.4,6.62a1.58,1.58,0,0,1,0,.21c0,.12-.1.19-.28.19h-.34A.26.26,0,0,1,510.6,273.76Zm-1.21-5c-.1,0-.2.2-.29.6l-.36,1.78a1.66,1.66,0,0,0,0,.24c0,.11.1.18.27.18h.82c.17,0,.28-.06.28-.18a1.66,1.66,0,0,0,0-.24l-.38-1.78C509.58,269,509.49,268.78,509.39,268.78Z"
></path><path
class="cls-5"
d="M515.94,273.93h-.46a.3.3,0,0,1-.29-.15l-1.29-3.28c-.16-.41-.29-.61-.4-.61s-.15.22-.15.67v3.17c0,.12-.12.2-.28.2h-.38c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h.54c.13,0,.25.05.27.15l1.24,3.19c.17.42.3.64.4.64s.16-.23.16-.69v-3.09c0-.12.11-.2.28-.2h.36c.17,0,.28.08.28.2v6.79C516.22,273.85,516.11,273.93,515.94,273.93Z"
></path><path
class="cls-5"
d="M522.88,273.76l-.28-1.33c0-.11-.14-.17-.29-.17H521a.28.28,0,0,0-.28.17l-.26,1.33a.27.27,0,0,1-.28.17h-.35c-.18,0-.28-.07-.28-.19a1.58,1.58,0,0,1,0-.21l1.41-6.62a.28.28,0,0,1,.29-.17h.75a.26.26,0,0,1,.28.17l1.41,6.62a2.07,2.07,0,0,1,0,.21c0,.12-.1.19-.28.19h-.33C523,273.93,522.91,273.87,522.88,273.76Zm-1.21-5c-.1,0-.19.2-.28.6l-.37,1.78a1.66,1.66,0,0,0,0,.24c0,.11.1.18.27.18h.82c.17,0,.29-.06.29-.18a2.28,2.28,0,0,0,0-.24l-.38-1.78C521.86,269,521.77,268.78,521.67,268.78Z"
></path><path
class="cls-5"
d="M528.22,273.93h-.46a.3.3,0,0,1-.29-.15l-1.29-3.28c-.16-.41-.29-.61-.39-.61s-.16.22-.16.67v3.17c0,.12-.12.2-.28.2H525c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h.54a.27.27,0,0,1,.28.15l1.23,3.19c.17.42.3.64.4.64s.16-.23.16-.69v-3.09c0-.12.11-.2.28-.2h.36c.17,0,.29.08.29.2v6.79C528.51,273.85,528.39,273.93,528.22,273.93Z"
></path><path
class="cls-5"
d="M533.54,266.94v.28c0,.12-.12.2-.29.2h-1c-.17,0-.28.08-.28.2v6.11c0,.12-.12.2-.29.2h-.4c-.16,0-.28-.08-.28-.2v-6.11c0-.12-.12-.2-.28-.2h-1c-.16,0-.28-.08-.28-.2v-.28c0-.12.12-.2.28-.2h3.47C533.42,266.74,533.54,266.82,533.54,266.94Z"
></path><path
class="cls-5"
d="M537.72,270.16v.28c0,.12-.12.2-.29.2h-1.66c-.17,0-.28.08-.28.2v2.21c0,.12.11.2.28.2h2.4c.17,0,.28.08.28.2v.28c0,.12-.11.2-.28.2H534.8c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h3.37c.17,0,.28.08.28.2v.28c0,.12-.11.2-.28.2h-2.4c-.17,0-.28.08-.28.2v2.14c0,.12.11.2.28.2h1.66C537.6,270,537.72,270,537.72,270.16Z"
></path><path
class="cls-5"
d="M543,273.93h-.47a.29.29,0,0,1-.28-.15l-1.29-3.28c-.17-.41-.3-.61-.4-.61s-.15.22-.15.67v3.17c0,.12-.12.2-.29.2h-.37c-.17,0-.28-.08-.28-.2v-6.79c0-.12.11-.2.28-.2h.54a.26.26,0,0,1,.27.15l1.24,3.19c.17.42.3.64.4.64s.15-.23.15-.69v-3.09c0-.12.12-.2.29-.2H543c.17,0,.28.08.28.2v6.79C543.25,273.85,543.14,273.93,543,273.93Z"
></path><path
class="cls-5"
d="M547.88,273.93h-.46a.3.3,0,0,1-.29-.15l-1.28-3.28c-.17-.41-.3-.61-.4-.61s-.16.22-.16.67v3.17c0,.12-.11.2-.28.2h-.38c-.16,0-.28-.08-.28-.2v-6.79c0-.12.12-.2.28-.2h.55a.27.27,0,0,1,.27.15l1.23,3.19c.17.42.3.64.4.64s.16-.23.16-.69v-3.09c0-.12.11-.2.28-.2h.36c.17,0,.29.08.29.2v6.79C548.17,273.85,548.05,273.93,547.88,273.93Z"
></path><path
class="cls-5"
d="M552.37,273.76l-.28-1.33a.26.26,0,0,0-.28-.17h-1.29a.28.28,0,0,0-.29.17l-.26,1.33a.27.27,0,0,1-.28.17h-.35c-.18,0-.28-.07-.28-.19a1.58,1.58,0,0,1,0-.21l1.42-6.62c0-.11.14-.17.28-.17h.75c.14,0,.26.06.28.17l1.41,6.62a1.58,1.58,0,0,1,0,.21c0,.12-.11.19-.29.19h-.33C552.51,273.93,552.4,273.87,552.37,273.76Zm-1.21-5c-.1,0-.19.2-.28.6l-.36,1.78a1,1,0,0,0,0,.24c0,.11.1.18.27.18h.82c.17,0,.29-.06.29-.18a2.28,2.28,0,0,0,0-.24l-.38-1.78C551.35,269,551.26,268.78,551.16,268.78Z"
></path><path
class="cls-5"
d="M395.77,285h-.36c-.17,0-.28-.08-.28-.2v-3.55c0-.36-.06-.54-.13-.54s-.17.16-.3.5l-.37,1a.25.25,0,0,1-.25.13.26.26,0,0,1-.26-.13l-.37-1c-.13-.34-.23-.5-.31-.5s-.12.18-.12.54v3.55c0,.12-.11.2-.28.2h-.36c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h.49a.27.27,0,0,1,.27.15l.66,1.8c.08.23.18.34.27.34s.18-.11.27-.34l.67-1.81a.28.28,0,0,1,.27-.14h.49c.17,0,.28.08.28.2v6.79C396.05,284.88,395.94,285,395.77,285Z"
></path><path
class="cls-5"
d="M400.18,284.78l-.28-1.32a.26.26,0,0,0-.28-.17h-1.29a.28.28,0,0,0-.29.17l-.26,1.32a.26.26,0,0,1-.28.18h-.35c-.18,0-.28-.07-.28-.19a1.79,1.79,0,0,1,0-.22l1.42-6.61c0-.11.14-.17.28-.17h.75c.14,0,.26.06.28.17l1.41,6.61c0,.2,0,.21,0,.22s-.1.19-.28.19h-.33A.28.28,0,0,1,400.18,284.78Zm-1.21-5c-.1,0-.19.2-.28.6l-.36,1.78a1,1,0,0,0,0,.24c0,.11.1.18.27.18h.82c.17,0,.29-.06.29-.18a1.93,1.93,0,0,0,0-.24l-.38-1.78C399.16,280,399.07,279.81,399,279.81Z"
></path><path
class="cls-5"
d="M402.69,281.21l-1.33-3.07a.6.6,0,0,1-.08-.22c0-.11.1-.15.3-.15h.4c.14,0,.23,0,.27.14l.72,1.74c.08.2.17.29.27.29s.18-.09.27-.29l.75-1.74c0-.1.13-.14.27-.14h.39c.19,0,.29.05.29.15a.7.7,0,0,1-.07.22l-1.33,3.07a1,1,0,0,0-.08.39v3.16c0,.13-.09.2-.28.2h-.4c-.2,0-.29-.07-.29-.2V281.6A1,1,0,0,0,402.69,281.21Z"
></path><path
class="cls-5"
d="M409.39,285H409c-.17,0-.29-.08-.29-.2V278c0-.12.12-.2.29-.2h1.57a1.72,1.72,0,0,1,1.92,1.54v.82a1.72,1.72,0,0,1-1.92,1.54H410c-.17,0-.28.08-.28.2v2.89C409.68,284.88,409.56,285,409.39,285Zm.57-6.51c-.17,0-.28.08-.28.2v2.14c0,.12.11.2.28.2h.61c.53,0,.94-.27.94-.8v-.94c0-.53-.41-.8-.94-.8Z"
></path><path
class="cls-5"
d="M416.82,281.19v.28c0,.12-.11.2-.28.2h-1.66c-.17,0-.29.08-.29.2v2.21c0,.12.12.2.29.2h2.4c.16,0,.28.08.28.2v.28c0,.12-.12.2-.28.2h-3.37c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h3.37c.16,0,.28.08.28.2v.27c0,.12-.12.21-.28.21h-2.4c-.17,0-.29.08-.29.2v2.14c0,.12.12.2.29.2h1.66C416.71,281,416.82,281.07,416.82,281.19Z"
></path><path
class="cls-5"
d="M419.17,285h-.4c-.16,0-.28-.08-.28-.2V278c0-.12.12-.2.28-.2h1.68c.95,0,1.91.52,1.91,1.54v.78a1.41,1.41,0,0,1-.85,1.31.19.19,0,0,0-.13.2,1,1,0,0,0,0,.15l.88,2.69a1.65,1.65,0,0,1,.09.33c0,.12-.09.19-.28.19h-.42a.28.28,0,0,1-.28-.16l-.93-3a.27.27,0,0,0-.28-.16h-.44c-.17,0-.28.09-.28.21v2.92C419.46,284.88,419.34,285,419.17,285Zm.57-6.51c-.17,0-.28.08-.28.2v2.1c0,.12.11.2.28.2h.71c.53,0,.95-.27.95-.8v-.9c0-.53-.42-.8-.95-.8Z"
></path><path
class="cls-5"
d="M427.07,285h-.36c-.17,0-.29-.08-.29-.2v-3.55c0-.36-.05-.54-.13-.54s-.16.16-.29.5l-.38,1c0,.08-.13.13-.24.13a.26.26,0,0,1-.26-.13l-.37-1c-.13-.34-.24-.5-.31-.5s-.12.18-.12.54v3.55c0,.12-.12.2-.28.2h-.36c-.17,0-.29-.08-.29-.2V278c0-.12.12-.2.29-.2h.49a.28.28,0,0,1,.27.15l.65,1.8c.08.23.18.34.28.34s.17-.11.27-.34l.67-1.81c0-.08.14-.14.27-.14h.49c.16,0,.28.08.28.2v6.79C427.35,284.88,427.23,285,427.07,285Z"
></path><path
class="cls-5"
d="M431.48,284.78l-.28-1.32a.28.28,0,0,0-.29-.17h-1.29a.28.28,0,0,0-.28.17l-.26,1.32a.26.26,0,0,1-.28.18h-.35c-.18,0-.28-.07-.28-.19a1.79,1.79,0,0,1,0-.22l1.41-6.61c0-.11.14-.17.29-.17h.74c.15,0,.26.06.29.17l1.4,6.61a1.79,1.79,0,0,1,0,.22c0,.12-.1.19-.28.19h-.34A.27.27,0,0,1,431.48,284.78Zm-1.21-5c-.1,0-.2.2-.29.6l-.36,1.78a1.93,1.93,0,0,0,0,.24c0,.11.11.18.28.18h.82c.17,0,.28-.06.28-.18a1.52,1.52,0,0,0,0-.24l-.38-1.78C430.46,280,430.37,279.81,430.27,279.81Z"
></path><path
class="cls-5"
d="M436.82,285h-.46a.31.31,0,0,1-.29-.15l-1.29-3.28c-.16-.41-.29-.61-.4-.61s-.15.22-.15.67v3.17c0,.12-.12.2-.28.2h-.38c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h.54c.13,0,.25.05.27.14l1.24,3.2c.17.42.3.63.4.63s.16-.23.16-.68V278c0-.12.11-.2.28-.2h.36c.17,0,.28.08.28.2v6.79C437.1,284.88,437,285,436.82,285Z"
></path><path
class="cls-5"
d="M441.4,281.19v.28c0,.12-.12.2-.28.2h-1.67c-.16,0-.28.08-.28.2v2.21c0,.12.12.2.28.2h2.4c.17,0,.28.08.28.2v.28c0,.12-.11.2-.28.2h-3.36c-.17,0-.29-.08-.29-.2V278c0-.12.12-.2.29-.2h3.36c.17,0,.28.08.28.2v.27c0,.12-.11.21-.28.21h-2.4c-.16,0-.28.08-.28.2v2.14c0,.12.12.2.28.2h1.67C441.28,281,441.4,281.07,441.4,281.19Z"
></path><path
class="cls-5"
d="M446.65,285h-.46a.31.31,0,0,1-.29-.15l-1.29-3.28c-.16-.41-.29-.61-.4-.61s-.15.22-.15.67v3.17c0,.12-.12.2-.28.2h-.38c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h.54c.13,0,.25.05.27.14l1.24,3.2c.17.42.3.63.4.63s.16-.23.16-.68V278c0-.12.11-.2.28-.2h.36c.17,0,.28.08.28.2v6.79C446.93,284.88,446.82,285,446.65,285Z"
></path><path
class="cls-5"
d="M452,278v.27c0,.12-.11.21-.28.21h-1c-.17,0-.28.08-.28.2v6.11c0,.12-.12.2-.29.2h-.4c-.17,0-.28-.08-.28-.2v-6.11c0-.12-.12-.2-.29-.2h-.94c-.16,0-.28-.09-.28-.21V278c0-.12.12-.2.28-.2h3.47C451.85,277.77,452,277.85,452,278Z"
></path><path
class="cls-5"
d="M456.88,284.48v.28c0,.12-.12.2-.28.2h-3.37c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h.4c.17,0,.29.08.29.2v6.11c0,.12.11.2.28.2h2.4C456.76,284.28,456.88,284.36,456.88,284.48Z"
></path><path
class="cls-5"
d="M458.3,281.21,457,278.14a.7.7,0,0,1-.07-.22c0-.11.1-.15.29-.15h.4c.14,0,.23,0,.27.14l.72,1.74c.08.2.17.29.28.29s.18-.09.27-.29l.74-1.74c0-.1.13-.14.28-.14h.38q.3,0,.3.15a.6.6,0,0,1-.08.22l-1.33,3.07a1,1,0,0,0-.07.39v3.16c0,.13-.09.2-.29.2h-.4c-.19,0-.28-.07-.28-.2V281.6A1,1,0,0,0,458.3,281.21Z"
></path><path
class="cls-5"
d="M464.42,285c-.17,0-.29-.08-.29-.2v-.32c0-.24.47-.08.47-.33v-5.5c0-.25-.47-.08-.47-.33V278c0-.12.12-.2.29-.2h2a1.7,1.7,0,0,1,1.9,1.54v4.11a1.7,1.7,0,0,1-1.9,1.54Zm1.41-6.51c-.16,0-.28.08-.28.2v5.43c0,.12.12.2.28.2h.59c.52,0,.94-.28.94-.8v-4.23c0-.53-.42-.8-.94-.8Z"
></path><path
class="cls-5"
d="M472.09,284.78l-.28-1.32c0-.11-.14-.17-.29-.17h-1.29a.28.28,0,0,0-.28.17l-.26,1.32a.26.26,0,0,1-.28.18h-.35c-.18,0-.28-.07-.28-.19a1.79,1.79,0,0,1,0-.22l1.41-6.61a.28.28,0,0,1,.29-.17h.75a.26.26,0,0,1,.28.17l1.41,6.61c0,.2,0,.21,0,.22s-.1.19-.28.19h-.33A.28.28,0,0,1,472.09,284.78Zm-1.21-5c-.1,0-.19.2-.28.6l-.37,1.78a1.52,1.52,0,0,0,0,.24c0,.11.1.18.27.18h.82c.17,0,.29-.06.29-.18a1.93,1.93,0,0,0,0-.24l-.38-1.78C471.07,280,471,279.81,470.88,279.81Z"
></path><path
class="cls-5"
d="M477.51,285h-.36c-.17,0-.29-.08-.29-.2v-3.55c0-.36-.05-.54-.12-.54s-.17.16-.3.5l-.37,1a.25.25,0,0,1-.25.13.26.26,0,0,1-.26-.13l-.37-1c-.13-.34-.23-.5-.31-.5s-.12.18-.12.54v3.55c0,.12-.11.2-.28.2h-.36c-.17,0-.29-.08-.29-.2V278c0-.12.12-.2.29-.2h.49a.27.27,0,0,1,.27.15l.66,1.8c.07.23.18.34.27.34s.18-.11.27-.34l.67-1.81c0-.08.14-.14.27-.14h.49c.17,0,.28.08.28.2v6.79C477.79,284.88,477.68,285,477.51,285Z"
></path><path
class="cls-5"
d="M481.92,284.78l-.28-1.32c0-.11-.14-.17-.29-.17h-1.29a.28.28,0,0,0-.28.17l-.26,1.32a.26.26,0,0,1-.28.18h-.35c-.18,0-.28-.07-.28-.19a1.79,1.79,0,0,1,0-.22l1.41-6.61a.28.28,0,0,1,.29-.17h.75a.26.26,0,0,1,.28.17l1.41,6.61c0,.2,0,.21,0,.22s-.1.19-.28.19h-.33A.28.28,0,0,1,481.92,284.78Zm-1.21-5c-.1,0-.19.2-.28.6l-.37,1.78a1.52,1.52,0,0,0,0,.24c0,.11.1.18.27.18h.82c.17,0,.29-.06.29-.18a1.93,1.93,0,0,0,0-.24l-.38-1.78C480.9,280,480.81,279.81,480.71,279.81Z"
></path><path
class="cls-5"
d="M486.33,282.57c0-.12-.11-.2-.28-.2h-.34c-.16,0-.28-.08-.28-.2v-.28c0-.12.12-.2.28-.2H487c.17,0,.29.08.29.2v1.59c0,1-1,1.54-1.91,1.54a1.71,1.71,0,0,1-1.91-1.54v-4.23a2,2,0,0,1,3.82,0v.19c0,.12-.12.2-.27.2h-.38c-.16,0-.28-.08-.28-.2v-.25c0-.53-.44-.81-1-.81s-.95.28-.95.81v4.35c0,.53.41.8.94.8s.95-.27.95-.8Z"
></path><path
class="cls-5"
d="M491.58,281.19v.28c0,.12-.11.2-.28.2h-1.66c-.17,0-.29.08-.29.2v2.21c0,.12.12.2.29.2H492c.16,0,.28.08.28.2v.28c0,.12-.12.2-.28.2h-3.37c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2H492c.16,0,.28.08.28.2v.27c0,.12-.12.21-.28.21h-2.4c-.17,0-.29.08-.29.2v2.14c0,.12.12.2.29.2h1.66C491.47,281,491.58,281.07,491.58,281.19Z"
></path><path
class="cls-5"
d="M499.68,278v.27c0,.12-.11.21-.28.21h-1c-.17,0-.28.08-.28.2v6.11c0,.12-.12.2-.29.2h-.4c-.17,0-.28-.08-.28-.2v-6.11c0-.12-.12-.2-.29-.2h-.94c-.16,0-.28-.09-.28-.21V278c0-.12.12-.2.28-.2h3.47C499.57,277.77,499.68,277.85,499.68,278Z"
></path><path
class="cls-5"
d="M501.64,278v2.82c0,.12.11.2.28.2h1.33c.17,0,.28-.08.28-.2V278c0-.12.12-.2.28-.2h.39c.17,0,.29.08.29.2v6.79c0,.12-.12.2-.29.2h-.39c-.16,0-.28-.08-.28-.2v-2.89c0-.12-.11-.2-.28-.2h-1.33c-.17,0-.28.08-.28.2v2.89c0,.12-.12.2-.29.2H501c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h.4C501.52,277.77,501.64,277.85,501.64,278Z"
></path><path
class="cls-5"
d="M508.78,281.19v.28c0,.12-.11.2-.28.2h-1.67c-.16,0-.28.08-.28.2v2.21c0,.12.12.2.28.2h2.4c.17,0,.29.08.29.2v.28c0,.12-.12.2-.29.2h-3.36c-.17,0-.29-.08-.29-.2V278c0-.12.12-.2.29-.2h3.36c.17,0,.29.08.29.2v.27c0,.12-.12.21-.29.21h-2.4c-.16,0-.28.08-.28.2v2.14c0,.12.12.2.28.2h1.67C508.67,281,508.78,281.07,508.78,281.19Z"
></path><path
class="cls-5"
d="M513,285c-.17,0-.28-.08-.28-.2v-.32c0-.24.46-.08.46-.33v-5.5c0-.25-.46-.08-.46-.33V278c0-.12.11-.2.28-.2h2a1.71,1.71,0,0,1,1.91,1.54v4.11A1.71,1.71,0,0,1,515,285Zm1.42-6.51c-.17,0-.29.08-.29.2v5.43c0,.12.12.2.29.2H515c.53,0,.94-.28.94-.8v-4.23c0-.53-.41-.8-.94-.8Z"
></path><path
class="cls-5"
d="M521.06,281.19v.28c0,.12-.11.2-.28.2h-1.66c-.17,0-.29.08-.29.2v2.21c0,.12.12.2.29.2h2.39c.17,0,.29.08.29.2v.28c0,.12-.12.2-.29.2h-3.36c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h3.36c.17,0,.29.08.29.2v.27c0,.12-.12.21-.29.21h-2.39c-.17,0-.29.08-.29.2v2.14c0,.12.12.2.29.2h1.66C521,281,521.06,281.07,521.06,281.19Z"
></path><path
class="cls-5"
d="M523.51,277.94l.89,4.33c.08.4.17.6.29.6s.19-.2.28-.6l.89-4.33c0-.12.12-.17.29-.17h.36c.19,0,.28.06.28.19a.75.75,0,0,1,0,.17l-1.41,6.65c0,.12-.12.18-.29.18h-.75c-.16,0-.25-.06-.28-.18l-1.43-6.65a1.55,1.55,0,0,1,0-.17c0-.13.09-.19.29-.19h.37C523.4,277.77,523.49,277.82,523.51,277.94Z"
></path><path
class="cls-5"
d="M531.63,284.48v.28c0,.12-.12.2-.29.2h-3.46c-.17,0-.29-.08-.29-.2v-.28c0-.12.12-.2.29-.2h.94c.16,0,.28-.08.28-.2v-5.43c0-.12-.12-.2-.28-.2h-.94c-.17,0-.29-.09-.29-.21V278c0-.12.12-.2.29-.2h3.46c.17,0,.29.08.29.2v.27c0,.12-.12.21-.29.21h-1c-.17,0-.28.08-.28.2v5.43c0,.12.11.2.28.2h1C531.51,284.28,531.63,284.36,531.63,284.48Z"
></path><path
class="cls-5"
d="M532.48,279.25a2,2,0,0,1,3.82,0v.19c0,.12-.12.2-.27.2h-.38c-.16,0-.28-.08-.28-.2v-.25a.84.84,0,0,0-1-.81c-.55,0-1,.28-1,.81v4.35c0,.53.42.8,1,.8s1-.27,1-.8v-.35c0-.12.12-.21.28-.21H536c.17,0,.29.09.29.21v.29c0,1-1,1.54-1.91,1.54a1.71,1.71,0,0,1-1.91-1.54Z"
></path><path
class="cls-5"
d="M540.59,281.19v.28c0,.12-.11.2-.28.2h-1.66c-.17,0-.29.08-.29.2v2.21c0,.12.12.2.29.2h2.4c.16,0,.28.08.28.2v.28c0,.12-.12.2-.28.2h-3.37c-.17,0-.28-.08-.28-.2V278c0-.12.11-.2.28-.2h3.37c.16,0,.28.08.28.2v.27c0,.12-.12.21-.28.21h-2.4c-.17,0-.29.08-.29.2v2.14c0,.12.12.2.29.2h1.66C540.48,281,540.59,281.07,540.59,281.19Z"
></path><path
class="cls-5"
d="M543.2,285h-.4c-.17,0-.28-.08-.28-.2v-.38c0-.12.11-.2.28-.2h.4c.17,0,.29.08.29.2v.38C543.49,284.88,543.37,285,543.2,285Z"
></path></g>
</svg>

Before

Width:  |  Height:  |  Size: 34 KiB

-697
View File
@@ -1,697 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="696.3 500.37 622.29 968.69">
<defs><style>
.cls-1 {
fill: #2d2d2d;
}
.cls-2 {
fill: #383838;
}
.cls-3 {
fill: #474649;
}
.cls-4 {
fill: #939696;
}
.cls-5, .cls-7 {
fill: #e6e8e8;
}
.cls-11,
.cls-12,
.cls-13,
.cls-14,
.cls-15,
.cls-16,
.cls-17,
.cls-18,
.cls-6 {
fill: none;
}
.cls-16, .cls-6 {
stroke: #939696;
stroke-width: 2px;
}
.cls-18, .cls-6 {
stroke-linecap: round;
stroke-linejoin: round;
}
.cls-7 {
font-size: 22.85px;
font-family: ArialMT, Arial;
}
.cls-8 {
fill: #515153;
}
.cls-9 {
fill: #e2d299;
}
.cls-10 {
fill: #fff;
}
.cls-11, .cls-13, .cls-14, .cls-15 {
stroke: #050606;
}
.cls-11, .cls-12, .cls-13, .cls-14, .cls-15, .cls-16, .cls-17 {
stroke-miterlimit: 10;
}
.cls-11 {
stroke-width: 1.35px;
}
.cls-12, .cls-17, .cls-18 {
stroke: #fff;
}
.cls-12, .cls-15 {
stroke-width: 1.79px;
}
.cls-13 {
stroke-width: 1.8px;
}
.cls-14 {
stroke-width: 4.05px;
}
.cls-17 {
stroke-width: 1.37px;
}
.cls-18 {
stroke-width: 1.37px;
}
</style></defs><g id="Layer_3" data-name="Layer 3"><path
class="cls-1"
d="M1292.56,1030.81v287.34c0,51.3-17,98.13-78.62,120.23-33.78,12.13-72.45,17.21-107.88,19.81-23.07,1.7-66.69,2.55-98.62,2.85-31.93-.3-75.55-1.15-98.62-2.85-35.43-2.6-74.1-7.68-107.88-19.81-61.6-22.1-78.62-68.93-78.62-120.23V1030.81Z"
/><path
class="cls-2"
d="M1306.83,1210.35c-3,2.5-2.35,7.42-6.33,11.56-2,2.07-5.21,2.65-7.94,2.72v93.52c0,51.3-17,98.13-78.62,120.23-33.78,12.13-72.45,17.21-107.88,19.81-23.07,1.7-66.69,2.55-98.62,2.85-31.93-.3-75.55-1.15-98.62-2.85-35.43-2.6-74.1-7.68-107.88-19.81-61.6-22.1-78.62-68.93-78.62-120.23v-94.29a17.44,17.44,0,0,1-7.13-1.4c-5.08-2.35-3.9-7.73-7.43-11.92a8.73,8.73,0,0,0-3.92-2.65v110.83c0,52.75,17,100.9,78.62,123.63,33.79,12.47,72.21,18,107.6,21.08,21,1.85,69.3,3.79,117.26,3.59h.24c48,.2,96.28-1.74,117.26-3.59,35.39-3.12,73.81-8.61,107.6-21.08,61.59-22.73,78.62-70.88,78.62-123.63V1208.18A13.09,13.09,0,0,0,1306.83,1210.35Z"
/><path
class="cls-3"
d="M722.79,1332.36h0a25.91,25.91,0,0,0,25.92-25.92V1137.88h530.2v186.39a12.8,12.8,0,0,0,12.81,12.8h0v-29l.84-277.22H722.32Z"
/><path
class="cls-1"
d="M1292.56,590.3v440.51H722.32V590.3a74.74,74.74,0,0,1,74.75-74.75h420.74A74.74,74.74,0,0,1,1292.56,590.3Z"
/><rect
class="cls-4"
x="942.13"
y="547.62"
width="132.22"
height="13.89"
rx="6.95"
/><rect
class="cls-5"
x="743.88"
y="1199.81"
width="540.06"
height="13.65"
rx="6.82"
/><rect
class="cls-5"
x="743.88"
y="1133.54"
width="540.06"
height="13.65"
rx="6.82"
/><rect
class="cls-5"
x="743.88"
y="1266.09"
width="540.06"
height="13.65"
rx="6.82"
/><rect
class="cls-5"
x="743.88"
y="1332.36"
width="540.06"
height="13.65"
rx="6.82"
/><path
class="cls-6"
d="M1021.42,1034.73v9.87a34.52,34.52,0,0,1,27,27.08h9.86"
/><path
class="cls-6"
d="M1007.54,1034.76v9.88a34.5,34.5,0,0,0-26.79,27h-9.86"
/><path
class="cls-6"
d="M971,1085.57h9.89a34.53,34.53,0,0,0,26.69,26.57V1122"
/><path
class="cls-6"
d="M1021.42,1122.05v-9.87a34.53,34.53,0,0,0,26.86-26.61h9.89"
/><circle class="cls-5" cx="1014.57" cy="1078.39" r="26.4" /><rect
class="cls-2"
x="755.65"
y="633.64"
width="500.52"
height="377.46"
/><text class="cls-7" transform="translate(762.22 1184.58)">Q</text><text
class="cls-7"
transform="translate(813.86 1184.58)"
>W</text><text class="cls-7" transform="translate(867.23 1184.58)"
>E</text><text class="cls-7" transform="translate(920.6 1184.58)"
>R</text><text class="cls-7" transform="translate(973.98 1184.58)"
>T</text><text class="cls-7" transform="translate(1034.95 1184.58)"
>Y</text><text class="cls-7" transform="translate(1142 1184.58)"
>I</text><text class="cls-7" transform="translate(1088.49 1184.58)"
>U</text><text class="cls-7" transform="translate(1246.93 1184.58)"
>P</text><text class="cls-7" transform="translate(1194.11 1184.58)"
>O</text><text class="cls-7" transform="translate(762.22 1249.77)"
>A</text><text class="cls-7" transform="translate(813.86 1249.77)"
>S</text><text class="cls-7" transform="translate(867.23 1249.77)"
>D</text><text class="cls-7" transform="translate(920.6 1249.77)"
>F</text><text class="cls-7" transform="translate(973.98 1249.77)"
>G</text><text class="cls-7" transform="translate(1034.95 1249.77)"
>H</text><text class="cls-7" transform="translate(1142 1249.77)"
>K</text><text class="cls-7" transform="translate(1088.49 1249.77)"
>J</text><text class="cls-7" transform="translate(1194.11 1249.77)"
>L</text><text class="cls-7" transform="translate(758.45 1316)"
>alt</text><text class="cls-7" transform="translate(813.86 1316)"
>Z</text><text class="cls-7" transform="translate(867.23 1316)"
>X</text><text class="cls-7" transform="translate(920.6 1316)">C</text><text
class="cls-7"
transform="translate(973.98 1316)"
>V</text><text class="cls-7" transform="translate(1034.95 1316)"
>B</text><text class="cls-7" transform="translate(1142 1316)">M</text><text
class="cls-7"
transform="translate(1088.49 1316)"
>N</text><path
class="cls-8"
d="M1316.56,617.77v408.74a6.22,6.22,0,0,1-1.81,4.39l-3.71,3.71v173.57a13.09,13.09,0,0,0-4.21,2.17c-3,2.5-2.35,7.42-6.33,11.56-2,2.07-5.21,2.65-7.94,2.72V590.3a74.74,74.74,0,0,0-74.75-74.75H797.07a74.74,74.74,0,0,0-74.75,74.75v633.56a17.44,17.44,0,0,1-7.13-1.4c-5.08-2.35-3.9-7.73-7.43-11.92a8.73,8.73,0,0,0-3.92-2.65V1034.61l-3.71-3.71-.08-.09a6.2,6.2,0,0,1-1.73-4.3V617.77a6.23,6.23,0,0,1,1.59-4.15l3.93-4.38V594.81a92.42,92.42,0,0,1,92.42-92.42h422.36A92.38,92.38,0,0,1,1311,594.81v14.43l3.93,4.38A6.23,6.23,0,0,1,1316.56,617.77Z"
/></g><g id="Layer_2" data-name="Layer 2"><path
class="cls-9"
d="M743.88,1061.4a14.6,14.6,0,1,1,14.6-14.6A14.62,14.62,0,0,1,743.88,1061.4Zm0-26a11.36,11.36,0,1,0,11.36,11.36A11.38,11.38,0,0,0,743.88,1035.44Z"
/><path class="cls-10" d="M892.79,1438.55v-19.42h4v16.13h9.83v3.29Z" /><path
class="cls-10"
d="M909.28,1438.55V1419h4v19.58Z"
/><path class="cls-10" d="M917.1,1438.55v-19.42h4v16.13h9.83v3.29Z" /><path
class="cls-10"
d="M936.34,1438.55v-8.24L929.17,1419h4.63l4.61,7.75,4.51-7.75h4.56l-7.2,11.37v8.21Z"
/><path
class="cls-10"
d="M958.55,1431.36v-3.3h8.53v7.8a10.79,10.79,0,0,1-3.6,2.11,13.17,13.17,0,0,1-4.78.92,10.74,10.74,0,0,1-5.36-1.29,8.23,8.23,0,0,1-3.43-3.69,11.83,11.83,0,0,1-1.15-5.21,11.35,11.35,0,0,1,1.28-5.44,8.72,8.72,0,0,1,3.76-3.65,10.12,10.12,0,0,1,4.69-1,9.32,9.32,0,0,1,5.69,1.53,6.89,6.89,0,0,1,2.64,4.23l-3.93.73a4.14,4.14,0,0,0-1.55-2.28,4.74,4.74,0,0,0-2.85-.83,5.37,5.37,0,0,0-4.12,1.64,6.93,6.93,0,0,0-1.53,4.88,7.65,7.65,0,0,0,1.55,5.23,5.16,5.16,0,0,0,4.06,1.74,6.77,6.77,0,0,0,2.49-.49,8.55,8.55,0,0,0,2.14-1.18v-2.48Z"
/><path
class="cls-10"
d="M969.92,1428.88a12.38,12.38,0,0,1,.9-5,9,9,0,0,1,1.82-2.68,7.61,7.61,0,0,1,2.53-1.77,10.88,10.88,0,0,1,4.22-.77,9.2,9.2,0,0,1,6.93,2.68q2.59,2.68,2.59,7.47a10.24,10.24,0,0,1-2.57,7.42,10.29,10.29,0,0,1-13.84,0A10.09,10.09,0,0,1,969.92,1428.88Zm4.07-.13a7.34,7.34,0,0,0,1.54,5,5.28,5.28,0,0,0,7.78,0,7.5,7.5,0,0,0,1.52-5.11,7.35,7.35,0,0,0-1.48-5,5,5,0,0,0-3.92-1.65,5,5,0,0,0-3.94,1.67A7.41,7.41,0,0,0,974,1428.75Z"
/><path
class="cls-10"
d="M1004,1438.55v-16.26H998.2V1419h15.56v3.32H1008v16.26Z"
/><path class="cls-10" d="M1014.35,1433.33v-3.75h7.37v3.75Z" /><path
class="cls-10"
d="M1024,1438.55V1419h4v8.7l8-8.7h5.31l-7.37,7.63,7.77,12h-5.11l-5.38-9.19-3.21,3.28v5.91Z"
/><path
class="cls-10"
d="M1051.86,1434l3.74.63a6.13,6.13,0,0,1-2.28,3.13,6.68,6.68,0,0,1-3.89,1.08,6.35,6.35,0,0,1-5.48-2.42,8.08,8.08,0,0,1-1.4-4.89,7.82,7.82,0,0,1,1.84-5.52,6,6,0,0,1,4.66-2,6.32,6.32,0,0,1,5,2.09c1.22,1.39,1.8,3.53,1.75,6.4h-9.41a3.8,3.8,0,0,0,.91,2.6,2.84,2.84,0,0,0,2.17.93,2.31,2.31,0,0,0,1.48-.48A3,3,0,0,0,1051.86,1434Zm.21-3.79a3.64,3.64,0,0,0-.84-2.48,2.7,2.7,0,0,0-4,0,3.41,3.41,0,0,0-.79,2.43Z"
/><path
class="cls-10"
d="M1057.08,1424.37h4l3.4,10.07,3.31-10.07h3.89l-5,13.65-.9,2.47a10.12,10.12,0,0,1-.94,1.9,4.17,4.17,0,0,1-1,1.06,4.48,4.48,0,0,1-1.43.63,7,7,0,0,1-1.91.23,9.46,9.46,0,0,1-2.13-.23l-.33-2.93a8.72,8.72,0,0,0,1.59.17,2.34,2.34,0,0,0,1.93-.77,5.37,5.37,0,0,0,1-2Z"
/><path
class="cls-10"
d="M1073.91,1438.55V1419h3.75V1426a5.32,5.32,0,0,1,4.12-2,5.52,5.52,0,0,1,4.29,1.88,7.75,7.75,0,0,1,1.69,5.38,8.21,8.21,0,0,1-1.73,5.6,5.39,5.39,0,0,1-4.2,2,5.28,5.28,0,0,1-2.4-.61,5.87,5.87,0,0,1-2-1.8v2.08Zm3.73-7.4a6.06,6.06,0,0,0,.69,3.26,3,3,0,0,0,2.59,1.5,2.65,2.65,0,0,0,2.12-1.06,5.27,5.27,0,0,0,.87-3.35,5.49,5.49,0,0,0-.88-3.5,2.77,2.77,0,0,0-2.25-1.08,2.84,2.84,0,0,0-2.25,1A4.79,4.79,0,0,0,1077.64,1431.15Z"
/><path
class="cls-10"
d="M1089.91,1431.26a7.75,7.75,0,0,1,.92-3.62,6.31,6.31,0,0,1,2.62-2.67,7.76,7.76,0,0,1,3.77-.92,7.09,7.09,0,0,1,5.27,2.09,7.18,7.18,0,0,1,2.06,5.28,7.29,7.29,0,0,1-2.08,5.34,7,7,0,0,1-5.22,2.12,8.22,8.22,0,0,1-3.72-.89,6.07,6.07,0,0,1-2.7-2.58A8.69,8.69,0,0,1,1089.91,1431.26Zm3.85.2a4.66,4.66,0,0,0,1,3.23,3.26,3.26,0,0,0,4.94,0,5.76,5.76,0,0,0,0-6.46,3.28,3.28,0,0,0-4.94,0A4.68,4.68,0,0,0,1093.76,1431.46Z"
/><path
class="cls-10"
d="M1110.3,1428.7l-3.41-.62a5.26,5.26,0,0,1,2-3,7.19,7.19,0,0,1,4.16-1,9.08,9.08,0,0,1,3.74.59,3.73,3.73,0,0,1,1.73,1.51,7.65,7.65,0,0,1,.5,3.36l0,4.38a14.16,14.16,0,0,0,.19,2.76,7.9,7.9,0,0,0,.67,1.9h-3.71a11,11,0,0,1-.36-1.1c-.07-.23-.11-.37-.14-.44a6.79,6.79,0,0,1-2.06,1.4,5.88,5.88,0,0,1-2.33.47,4.88,4.88,0,0,1-3.46-1.19,4.23,4.23,0,0,1-.68-5.15,3.78,3.78,0,0,1,1.61-1.45,12.77,12.77,0,0,1,3-.87,21,21,0,0,0,3.65-.92v-.38a1.93,1.93,0,0,0-.54-1.54,3.15,3.15,0,0,0-2-.46,2.74,2.74,0,0,0-1.57.39A2.8,2.8,0,0,0,1110.3,1428.7Zm5,3c-.48.16-1.24.35-2.29.58a6.93,6.93,0,0,0-2,.65,1.56,1.56,0,0,0-.73,1.32,1.86,1.86,0,0,0,.58,1.37,2.08,2.08,0,0,0,1.5.57,3.24,3.24,0,0,0,1.94-.67,2.35,2.35,0,0,0,.89-1.24,7.26,7.26,0,0,0,.15-1.83Z"
/><path
class="cls-10"
d="M1126.3,1438.55h-3.76v-14.18H1126v2a6.1,6.1,0,0,1,1.61-1.89,3,3,0,0,1,1.62-.45,4.67,4.67,0,0,1,2.47.71l-1.16,3.27a3.3,3.3,0,0,0-1.76-.62,2.1,2.1,0,0,0-1.34.44,3,3,0,0,0-.86,1.57,22.25,22.25,0,0,0-.31,4.75Z"
/><path
class="cls-10"
d="M1146.36,1438.55h-3.48v-2.08a5.69,5.69,0,0,1-2.06,1.81,5.18,5.18,0,0,1-2.38.6,5.39,5.39,0,0,1-4.19-2,8,8,0,0,1-1.74-5.49,7.86,7.86,0,0,1,1.7-5.48,5.5,5.5,0,0,1,4.28-1.88,5.32,5.32,0,0,1,4.12,2V1419h3.75Zm-10-7.4a6.49,6.49,0,0,0,.63,3.29,2.84,2.84,0,0,0,2.54,1.47,2.76,2.76,0,0,0,2.2-1.1,5.06,5.06,0,0,0,.91-3.29,5.54,5.54,0,0,0-.88-3.52,2.79,2.79,0,0,0-2.26-1.08,2.83,2.83,0,0,0-2.24,1.06A4.81,4.81,0,0,0,1136.34,1431.15Z"
/><rect
class="cls-11"
x="755.65"
y="633.64"
width="500.52"
height="377.46"
/><path
class="cls-12"
d="M1084.05,1030.81a84.23,84.23,0,0,1-5.85,102.73"
/><path
class="cls-12"
d="M945.08,1030.81a84.23,84.23,0,0,0,5.85,102.73"
/><path
class="cls-12"
d="M1056.1,1030.81a63.17,63.17,0,0,1-10.75,102.73"
/><path
class="cls-12"
d="M973,1030.81a63.15,63.15,0,0,0,10.75,102.73"
/><circle class="cls-12" cx="1014.57" cy="1078.39" r="26.4" /><path
class="cls-13"
d="M703.84,1208.34a10.08,10.08,0,0,1,7.37,8.09c1.15,6.75,7.53,8.15,11.11,7.13"
/><path
class="cls-14"
d="M1315,613.62l-3.93-4.38V594.81a92.42,92.42,0,0,0-92.42-92.42H796.26a92.42,92.42,0,0,0-92.42,92.42v14.43l-3.93,4.38a6.23,6.23,0,0,0-1.59,4.15v408.74a6.22,6.22,0,0,0,1.81,4.39l3.71,3.71v284.11c0,52.75,17,100.9,78.62,123.63,33.79,12.47,72.21,18,107.6,21.08,21,1.85,69.3,3.79,117.26,3.59h.24c48,.2,96.28-1.74,117.26-3.59,35.39-3.12,73.81-8.61,107.6-21.08,61.59-22.73,78.62-70.88,78.62-123.63V1034.61l3.71-3.71a6.22,6.22,0,0,0,1.81-4.39V617.77A6.23,6.23,0,0,0,1315,613.62Zm-22.41,704.53c0,51.3-17,98.13-78.62,120.23-33.78,12.13-72.45,17.21-107.88,19.81-23.07,1.7-66.69,2.55-98.62,2.85-31.93-.3-75.55-1.15-98.62-2.85-35.43-2.6-74.1-7.68-107.88-19.81-61.6-22.1-78.62-68.93-78.62-120.23V590.3a74.74,74.74,0,0,1,74.75-74.75h420.74a74.74,74.74,0,0,1,74.75,74.75Z"
/><path
class="cls-13"
d="M1311.05,1208.34a10.08,10.08,0,0,0-7.37,8.09c-1.15,6.75-7.53,8.15-11.11,7.13"
/><rect
class="cls-11"
x="942.13"
y="547.62"
width="132.22"
height="13.89"
rx="6.95"
/><line
class="cls-11"
x1="722.32"
y1="1030.81"
x2="1292.57"
y2="1030.81"
/><rect
class="cls-13"
x="748.71"
y="1147.19"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M748.71,1199.81h45.08V1175a27.9,27.9,0,0,0-28-27.8H748.71"
/><rect
class="cls-13"
x="801.73"
y="1147.19"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M801.73,1199.81h45.08V1175a27.9,27.9,0,0,0-28-27.8H801.73"
/><rect
class="cls-13"
x="854.75"
y="1147.19"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M854.75,1199.81h45.08V1175a27.9,27.9,0,0,0-28-27.8H854.75"
/><rect
class="cls-13"
x="907.77"
y="1147.19"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M907.77,1199.81h45.08V1175a27.9,27.9,0,0,0-28-27.8H907.77"
/><rect
class="cls-13"
x="960.79"
y="1147.19"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M960.79,1199.81h45.08V1175a27.9,27.9,0,0,0-28-27.8H960.79"
/><rect
class="cls-13"
x="1225.89"
y="1147.19"
width="53.02"
height="52.62"
transform="translate(2504.8 2347) rotate(-180)"
/><path
class="cls-13"
d="M1278.91,1147.19h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1172.87"
y="1147.19"
width="53.02"
height="52.62"
transform="translate(2398.76 2347) rotate(-180)"
/><path
class="cls-13"
d="M1225.89,1147.19h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1119.85"
y="1147.19"
width="53.02"
height="52.62"
transform="translate(2292.72 2347) rotate(-180)"
/><path
class="cls-13"
d="M1172.87,1147.19H1155.8a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1066.83"
y="1147.19"
width="53.02"
height="52.62"
transform="translate(2186.68 2347) rotate(-180)"
/><path
class="cls-13"
d="M1119.85,1147.19h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1013.81"
y="1147.19"
width="53.02"
height="52.62"
transform="translate(2080.64 2347) rotate(-180)"
/><path
class="cls-13"
d="M1066.83,1147.19h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="748.71"
y="1213.46"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M748.71,1266.08h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H748.71"
/><rect
class="cls-13"
x="801.73"
y="1213.46"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M801.73,1266.08h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H801.73"
/><rect
class="cls-13"
x="854.75"
y="1213.46"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M854.75,1266.08h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H854.75"
/><rect
class="cls-13"
x="907.77"
y="1213.46"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M907.77,1266.08h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H907.77"
/><rect
class="cls-13"
x="960.79"
y="1213.46"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M960.79,1266.08h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H960.79"
/><rect
class="cls-13"
x="1225.89"
y="1213.46"
width="53.02"
height="52.62"
transform="translate(2504.8 2479.54) rotate(-180)"
/><path
class="cls-13"
d="M1278.91,1213.46h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1172.87"
y="1213.46"
width="53.02"
height="52.62"
transform="translate(2398.76 2479.54) rotate(-180)"
/><path
class="cls-13"
d="M1225.89,1213.46h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1119.85"
y="1213.46"
width="53.02"
height="52.62"
transform="translate(2292.72 2479.54) rotate(-180)"
/><path
class="cls-13"
d="M1172.87,1213.46H1155.8a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1066.83"
y="1213.46"
width="53.02"
height="52.62"
transform="translate(2186.68 2479.54) rotate(-180)"
/><path
class="cls-13"
d="M1119.85,1213.46h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1013.81"
y="1213.46"
width="53.02"
height="52.62"
transform="translate(2080.64 2479.54) rotate(-180)"
/><path
class="cls-13"
d="M1066.83,1213.46h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="748.71"
y="1279.73"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M748.71,1332.35h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H748.71"
/><rect
class="cls-13"
x="801.73"
y="1279.73"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M801.73,1332.35h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H801.73"
/><path
class="cls-13"
d="M812.55,1346h17.07a27.9,27.9,0,0,1,28,27.8V1394"
/><path
class="cls-13"
d="M872.15,1346h17.07a27.9,27.9,0,0,1,28,27.8v24.6"
/><rect
class="cls-13"
x="854.75"
y="1279.73"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M854.75,1332.35h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H854.75"
/><rect
class="cls-13"
x="907.77"
y="1279.73"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M907.77,1332.35h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H907.77"
/><rect
class="cls-13"
x="960.79"
y="1279.73"
width="53.02"
height="52.62"
/><path
class="cls-13"
d="M960.79,1332.35h45.08v-24.82a27.9,27.9,0,0,0-28-27.8H960.79"
/><rect
class="cls-13"
x="1225.89"
y="1279.73"
width="53.02"
height="52.62"
transform="translate(2504.8 2612.09) rotate(-180)"
/><path
class="cls-13"
d="M1278.91,1279.73h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1172.87"
y="1279.73"
width="53.02"
height="52.62"
transform="translate(2398.76 2612.09) rotate(-180)"
/><path
class="cls-13"
d="M1225.89,1279.73h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1119.85"
y="1279.73"
width="53.02"
height="52.62"
transform="translate(2292.72 2612.09) rotate(-180)"
/><path
class="cls-13"
d="M1172.87,1279.73H1155.8a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1066.83"
y="1279.73"
width="53.02"
height="52.62"
transform="translate(2186.68 2612.09) rotate(-180)"
/><path
class="cls-13"
d="M1119.85,1279.73h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-13"
x="1013.81"
y="1279.73"
width="53.02"
height="52.62"
transform="translate(2080.64 2612.09) rotate(-180)"
/><path
class="cls-13"
d="M1066.83,1279.73h-17.07a27.91,27.91,0,0,0-28,27.8v24.82h45.08"
/><rect
class="cls-15"
x="743.88"
y="1199.81"
width="540.06"
height="13.65"
rx="6.82"
/><rect
class="cls-15"
x="743.88"
y="1133.54"
width="540.06"
height="13.65"
rx="6.82"
/><rect
class="cls-15"
x="743.88"
y="1266.09"
width="540.06"
height="13.65"
rx="6.82"
/><rect
class="cls-15"
x="743.88"
y="1332.36"
width="540.06"
height="13.65"
rx="6.82"
/><path
class="cls-15"
d="M802.07,1346c0,26.61,14.41,41.86,40.7,46,40.67,6.37,101.92,8.23,181.39,8"
/><line
class="cls-15"
x1="924.85"
y1="1398.7"
x2="924.85"
y2="1346.01"
/><line
class="cls-15"
x1="864.53"
y1="1394.78"
x2="864.53"
y2="1346.01"
/><path
class="cls-13"
d="M1170.33,1394V1373.8a27.9,27.9,0,0,1,28-27.8h17.07"
/><path
class="cls-13"
d="M1110.73,1398.4v-24.6a27.9,27.9,0,0,1,28-27.8h17.07"
/><path
class="cls-15"
d="M1225.89,1346c0,26.61-14.41,41.86-40.7,46-40.67,6.37-101.92,8.23-181.39,8"
/><line
class="cls-15"
x1="1103.11"
y1="1346.01"
x2="1103.11"
y2="1398.7"
/><line
class="cls-15"
x1="1163.43"
y1="1346.01"
x2="1163.43"
y2="1394.78"
/><circle class="cls-1" cx="743.88" cy="1046.8" r="7.19" /><path
class="cls-9"
d="M736.69,1104a5.93,5.93,0,1,1,5.93-5.93A5.94,5.94,0,0,1,736.69,1104Zm0-10.07a4.14,4.14,0,1,0,4.14,4.14A4.15,4.15,0,0,0,736.69,1094Z"
/><path
class="cls-9"
d="M736.69,1120.19a5.94,5.94,0,1,1,5.93-5.93A5.94,5.94,0,0,1,736.69,1120.19Zm0-10.07a4.14,4.14,0,1,0,4.14,4.14A4.14,4.14,0,0,0,736.69,1110.12Z"
/><path
class="cls-9"
d="M736.69,1136.35a5.93,5.93,0,1,1,5.93-5.93A5.94,5.94,0,0,1,736.69,1136.35Zm0-10.07a4.14,4.14,0,1,0,4.14,4.14A4.15,4.15,0,0,0,736.69,1126.28Z"
/><path
class="cls-9"
d="M736.69,1168.68a5.93,5.93,0,1,1,5.93-5.93A5.94,5.94,0,0,1,736.69,1168.68Zm0-10.07a4.14,4.14,0,1,0,4.14,4.14A4.15,4.15,0,0,0,736.69,1158.61Z"
/><path
class="cls-9"
d="M736.69,1184.85a5.94,5.94,0,1,1,5.93-5.93A5.94,5.94,0,0,1,736.69,1184.85Zm0-10.07a4.14,4.14,0,1,0,4.14,4.14A4.14,4.14,0,0,0,736.69,1174.78Z"
/><path
class="cls-16"
d="M918.05,1077.65a.77.77,0,0,1,0,.95l-8.88,11.19L903,1097.6a.76.76,0,0,1-.6.29H885.84a.76.76,0,0,1-.6-1.24l14.31-18.05a.77.77,0,0,0,0-.95l-14.32-18.05a.76.76,0,0,1,.6-1.24h16.55a.76.76,0,0,1,.6.29l6.19,7.81Z"
/><path
class="cls-16"
d="M885,1077.65a.77.77,0,0,1,0,.95l-8.88,11.19L870,1097.6a.76.76,0,0,1-.6.29H852.81a.76.76,0,0,1-.6-1.24l14.31-18.05a.77.77,0,0,0,0-.95L852.2,1059.6a.76.76,0,0,1,.6-1.24h16.55a.76.76,0,0,1,.6.29l6.19,7.81Z"
/><path
class="cls-16"
d="M852,1077.65a.77.77,0,0,1,0,.95l-8.88,11.19-6.19,7.81a.76.76,0,0,1-.6.29H819.78a.76.76,0,0,1-.6-1.24l14.31-18.05a.77.77,0,0,0,0-.95l-14.32-18.05a.76.76,0,0,1,.6-1.24h16.55a.76.76,0,0,1,.6.29l6.19,7.81Z"
/><path
class="cls-16"
d="M1111.88,1077.65a.77.77,0,0,0,0,.95l8.87,11.19,6.19,7.81a.79.79,0,0,0,.6.29h16.55a.77.77,0,0,0,.6-1.24l-14.31-18.05a.77.77,0,0,1,0-.95l14.32-18.05a.77.77,0,0,0-.6-1.24h-16.56a.79.79,0,0,0-.6.29l-6.19,7.81Z"
/><path
class="cls-16"
d="M1144.91,1077.65a.77.77,0,0,0,0,.95l8.87,11.19,6.19,7.81a.79.79,0,0,0,.6.29h16.55a.77.77,0,0,0,.6-1.24l-14.31-18.05a.77.77,0,0,1,0-.95l14.32-18.05a.77.77,0,0,0-.6-1.24h-16.56a.79.79,0,0,0-.6.29l-6.19,7.81Z"
/><path
class="cls-16"
d="M1177.94,1077.65a.77.77,0,0,0,0,.95l8.87,11.19,6.19,7.81a.79.79,0,0,0,.6.29h16.55a.77.77,0,0,0,.6-1.24l-14.31-18.05a.77.77,0,0,1,0-.95l14.32-18.05a.77.77,0,0,0-.6-1.24H1193.6a.79.79,0,0,0-.6.29l-6.19,7.81Z"
/><path
class="cls-10"
d="M944.82,608.91V582.67h3.47v23.14h12.92v3.1Z"
/><path class="cls-10" d="M965.94,608.91V582.67h3.47v26.24Z" /><path
class="cls-10"
d="M975.39,608.91V582.67h3.47v23.14h12.93v3.1Z"
/><path
class="cls-10"
d="M1000.6,608.91V597.79l-10.12-15.12h4.23l5.17,7.91q1.43,2.22,2.67,4.44c.78-1.37,1.74-2.92,2.86-4.64l5.08-7.71h4l-10.47,15.12v11.12Z"
/><path
class="cls-10"
d="M1029.93,598.62v-3.08l11.12,0v9.74a19.85,19.85,0,0,1-5.28,3.07,15.79,15.79,0,0,1-5.58,1,14.85,14.85,0,0,1-7-1.66,10.88,10.88,0,0,1-4.77-4.79,15,15,0,0,1-1.61-7,16.24,16.24,0,0,1,1.6-7.15,10.63,10.63,0,0,1,4.61-4.93,14.47,14.47,0,0,1,6.93-1.61,13.8,13.8,0,0,1,5.14.92,8.53,8.53,0,0,1,3.61,2.57,11.52,11.52,0,0,1,2,4.3l-3.14.86a9.81,9.81,0,0,0-1.46-3.16,6.07,6.07,0,0,0-2.51-1.83,9.2,9.2,0,0,0-3.62-.69,10.48,10.48,0,0,0-4.11.73,7.58,7.58,0,0,0-2.8,1.9,9.12,9.12,0,0,0-1.66,2.6,13.68,13.68,0,0,0-1,5.28,12.86,12.86,0,0,0,1.2,5.87,7.72,7.72,0,0,0,3.52,3.51,11,11,0,0,0,4.91,1.14,11.61,11.61,0,0,0,4.4-.86,11.35,11.35,0,0,0,3.26-1.86v-4.88Z"
/><path
class="cls-10"
d="M1045.11,596.13q0-6.54,3.51-10.23a11.92,11.92,0,0,1,9.06-3.7,12.53,12.53,0,0,1,6.55,1.74,11.32,11.32,0,0,1,4.45,4.84,15.73,15.73,0,0,1,1.53,7,15.52,15.52,0,0,1-1.61,7.15,11,11,0,0,1-4.56,4.77,13.07,13.07,0,0,1-6.38,1.62,12.42,12.42,0,0,1-6.62-1.79,11.48,11.48,0,0,1-4.42-4.89A14.84,14.84,0,0,1,1045.11,596.13Zm3.58,0a10.54,10.54,0,0,0,2.56,7.48,8.89,8.89,0,0,0,12.85,0q2.54-2.76,2.53-7.82a13.51,13.51,0,0,0-1.08-5.6,8.28,8.28,0,0,0-3.17-3.7,8.57,8.57,0,0,0-4.68-1.32,8.93,8.93,0,0,0-6.35,2.53Q1048.7,590.25,1048.69,596.18Z"
/><path
class="cls-10"
d="M990.05,1421.1v-4.57h2a2.75,2.75,0,0,1,.93.12,1,1,0,0,1,.51.44,1.23,1.23,0,0,1,.19.69,1.16,1.16,0,0,1-.31.82,1.62,1.62,0,0,1-1,.42,1.32,1.32,0,0,1,.37.23,2.86,2.86,0,0,1,.5.61l.8,1.24h-.76l-.61-.95c-.18-.27-.32-.48-.44-.63a1.27,1.27,0,0,0-.3-.31,1.13,1.13,0,0,0-.28-.12l-.34,0h-.7v2Zm.6-2.55H992a1.84,1.84,0,0,0,.65-.09.72.72,0,0,0,.36-.27.78.78,0,0,0,.12-.41.68.68,0,0,0-.24-.54,1.07,1.07,0,0,0-.74-.21h-1.45Z"
/><path
class="cls-10"
d="M991.8,1422.71a3.74,3.74,0,1,1,3.74-3.74A3.74,3.74,0,0,1,991.8,1422.71Zm0-6.94A3.21,3.21,0,1,0,995,1419,3.21,3.21,0,0,0,991.8,1415.77Z"
/><polyline
class="cls-12"
points="1101.56 1065.39 1111.5 1065.39 1123.2 1051.99 1217.31 1051.99 1245.51 1093.92 1286.27 1093.92"
/><polyline
class="cls-12"
points="927.7 1065.39 917.75 1065.39 906.06 1051.99 811.95 1051.99 783.75 1093.92 764.44 1093.92"
/><polyline
class="cls-12"
points="985.94 1365.91 985.94 1373.8 1042.55 1373.8 1042.55 1365.91"
/><path
class="cls-17"
d="M1266.42,1247.22H1252.5a1.86,1.86,0,0,1-1.19-.44l-5.61-4.67a3,3,0,0,1,0-4.67l5.61-4.68a1.85,1.85,0,0,1,1.19-.43h13.92a1.72,1.72,0,0,1,1.71,1.72v11.45A1.72,1.72,0,0,1,1266.42,1247.22Z"
/><line
class="cls-17"
x1="1254.51"
y1="1235.71"
x2="1262.65"
y2="1243.84"
/><line
class="cls-17"
x1="1262.65"
y1="1235.71"
x2="1254.51"
y2="1243.84"
/><path
class="cls-18"
d="M1261.8,1296.61v6.25a7.19,7.19,0,0,1-7.19,7.19h-7.39l2.9-3.14v6.23l-2.9-3.09"
/><path
class="cls-10"
d="M1249.84,1308s.34,3.83,0,3.83a9.67,9.67,0,0,1-2-1.42v-.91Z"
/></g>
</svg>

Before

Width:  |  Height:  |  Size: 27 KiB

-195
View File
@@ -1,195 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><svg
id="Layer_1"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 206.97 481.72"
>
<defs><style>
.cls-1,
.cls-2,
.cls-3,
.cls-4,
.cls-5,
.cls-6,
.cls-7,
.cls-8,
.cls-9,
.cls-10,
.cls-11 {
stroke-linecap: round;
stroke-linejoin: round;
}
.cls-1, .cls-2, .cls-3, .cls-6, .cls-8, .cls-10, .cls-11 {
fill: #ccc;
}
.cls-1, .cls-11 {
stroke: #999;
stroke-width: 2px;
}
.cls-2, .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9, .cls-10 {
stroke: #000;
}
.cls-2, .cls-4, .cls-5 {
stroke-width: 1.5px;
}
.cls-2, .cls-4, .cls-8, .cls-9, .cls-12, .cls-13, .cls-11 {
fill-rule: evenodd;
}
.cls-3, .cls-8 {
stroke-width: 1px;
}
.cls-4 {
fill: #242424;
}
.cls-6, .cls-7 {
stroke-width: 0.5px;
}
.cls-7 {
fill: #999;
}
.cls-9 {
fill: #fff;
stroke-width: 0.75px;
}
.cls-10 {
stroke-width: 0.22px;
}
.cls-12, .cls-13, .cls-14, .cls-15 {
stroke-width: 0px;
}
.cls-12, .cls-15 {
fill: #00afef;
}
.cls-13, .cls-14 {
fill: #b7b7b7;
}
</style></defs><path
class="cls-2"
d="M97.84,232.81h91.76c9.14,0,16.62,7.48,16.62,16.62v214.92c0,9.14-7.48,16.62-16.62,16.62H17.37c-9.14,0-16.62-7.48-16.62-16.62v-154.84c0-9.14,7.48-16.62,16.62-16.62h51.48c8.68,0,12.45-2.57,12.45-14.56v-28.98c0-9.14,7.4-16.54,16.54-16.54Z"
/><path
class="cls-4"
d="M135.52,201.13h66.32v21.47c0,.38-.31.69-.69.69h-64.94c-.38,0-.69-.31-.69-.69v-21.47Z"
/><polygon
class="cls-4"
points="201.84 201.13 194.29 182.05 143.47 182.05 135.52 201.13 201.84 201.13"
/><polygon
class="cls-4"
points="168.68 182.05 194.33 182.05 194.33 .75 143.03 .75 143.03 182.05 168.68 182.05"
/><path
class="cls-4"
d="M168.68,19.05c-8.57.07-22.61.49-25.65,2.54,0,0-1.61,6.89,0,11.41,0,0,13.59-1.34,25.65-1.34s25.65,1.34,25.65,1.34c1.61-4.52,0-11.41,0-11.41-3.05-2.04-17.08-2.47-25.65-2.54Z"
/><rect
class="cls-3"
x="7.06"
y="305.93"
width="193.13"
height="171.26"
rx="22.77"
ry="22.77"
/><rect
class="cls-6"
x="50.31"
y="330.36"
width="122.74"
height="121.76"
rx="10.5"
ry="10.5"
/><path
class="cls-7"
d="M66.49,335.98h90.38c5.2,0,9.41,4.22,9.41,9.41v91.69c0,5.2-4.22,9.41-9.41,9.41h-90.38c-5.2,0-9.41-4.22-9.41-9.41v-91.69c0-5.2,4.22-9.41,9.41-9.41Z"
/><path
class="cls-2"
d="M96.65,232.86h19.83v-2.85c0-.4-.32-.72-.72-.72h-18.38c-.4,0-.72.32-.72.72v2.85Z"
/><rect
class="cls-10"
x="92.66"
y="239.37"
width="102.73"
height="58.83"
rx="2.83"
ry="2.83"
/><rect
class="cls-5"
x="99.69"
y="245.56"
width="88.66"
height="46.46"
/><path
class="cls-2"
d="M138.06,232.81h51.53c3.1,0,6,.86,8.49,2.35v-7.04c0-2-1.02-3.78-2.56-4.83h-54.9c-1.54,1.06-2.56,2.83-2.56,4.83v4.69Z"
/><path
class="cls-2"
d="M67.74,292.89H29.51v-2.73c0-1.5,1.23-2.73,2.73-2.73h32.76c1.5,0,2.73,1.23,2.73,2.73v2.73Z"
/><path
class="cls-11"
d="M44.05,329.75c3.68,0,6.68-3,6.68-6.68s-3-6.68-6.68-6.68-6.68,3-6.68,6.68,3,6.68,6.68,6.68Z"
/><path
class="cls-11"
d="M181.27,329.75c3.68,0,6.68-3,6.68-6.68s-3-6.68-6.68-6.68-6.68,3-6.68,6.68,3,6.68,6.68,6.68Z"
/><path
class="cls-11"
d="M44.05,466.27c3.68,0,6.68-3,6.68-6.68s-3-6.68-6.68-6.68-6.68,3-6.68,6.68,3,6.68,6.68,6.68Z"
/><circle class="cls-1" cx="181.27" cy="459.59" r="6.68" /><polygon
class="cls-12"
points="108.38 262.94 108.38 274.8 114.94 274.8 114.94 276.94 105.81 276.94 105.81 262.94 108.38 262.94"
/><rect
class="cls-15"
x="117.34"
y="262.94"
width="2.57"
height="14"
/><polygon
class="cls-12"
points="125.83 262.94 125.83 274.8 132.38 274.8 132.38 276.94 123.25 276.94 123.25 262.94 125.83 262.94"
/><polygon
class="cls-12"
points="137.09 268.97 140.83 262.94 143.67 262.94 138.36 271.3 138.36 276.94 135.79 276.94 135.79 271.3 130.48 262.94 133.33 262.94 137.06 268.97 137.09 268.97"
/><path
class="cls-12"
d="M153.84,271.58h-3.14v-2.14h5.71v7.07c-.21.08-.47.16-.8.24-.33.08-.69.16-1.09.23-.4.07-.81.12-1.24.16-.43.04-.85.06-1.26.06-1.26,0-2.35-.17-3.29-.51-.94-.34-1.72-.82-2.34-1.43-.63-.61-1.09-1.35-1.4-2.19-.31-.85-.46-1.79-.46-2.81,0-.73.08-1.42.25-2.08.16-.66.41-1.27.73-1.83.32-.56.71-1.07,1.16-1.52.45-.45.98-.84,1.56-1.16.58-.32,1.22-.56,1.92-.74.69-.17,1.44-.26,2.23-.26.7,0,1.38.05,2.01.15.63.1,1.15.23,1.56.37v2.16c-.54-.17-1.09-.3-1.65-.38-.55-.09-1.11-.13-1.68-.13-.76,0-1.47.11-2.14.34-.66.23-1.24.56-1.72,1.01-.49.44-.87.99-1.15,1.64-.28.65-.42,1.4-.42,2.25,0,1.65.44,2.9,1.29,3.73.86.83,2.07,1.24,3.64,1.24.29,0,.6-.01.91-.05.31-.03.59-.07.83-.12v-3.28Z"
/><path
class="cls-12"
d="M169.93,269.93c0-.85-.1-1.6-.31-2.24-.21-.64-.5-1.17-.87-1.6-.37-.43-.81-.74-1.31-.95s-1.06-.31-1.67-.31-1.16.1-1.67.31-.95.53-1.31.95c-.37.43-.66.96-.87,1.6-.21.64-.31,1.38-.31,2.24s.1,1.6.31,2.24c.21.64.5,1.17.87,1.59.37.42.81.74,1.31.95.51.21,1.06.32,1.67.32s1.17-.11,1.67-.32c.51-.21.95-.53,1.31-.95.37-.43.66-.95.87-1.59.21-.64.31-1.39.31-2.24h0ZM172.58,269.93c0,1.07-.15,2.05-.45,2.94-.3.89-.75,1.66-1.33,2.3-.58.64-1.3,1.14-2.15,1.5-.85.35-1.81.53-2.89.53s-2.05-.18-2.89-.53c-.85-.36-1.57-.86-2.15-1.5-.58-.64-1.03-1.41-1.33-2.3-.3-.89-.46-1.87-.46-2.94s.15-2.05.46-2.94c.3-.89.75-1.66,1.33-2.3.58-.64,1.3-1.14,2.15-1.5.85-.35,1.81-.53,2.89-.53s2.05.18,2.89.53c.85.36,1.57.86,2.15,1.5.58.64,1.03,1.41,1.33,2.3.3.89.45,1.87.45,2.94Z"
/><path
class="cls-12"
d="M180.07,263.91c0,.22-.06.4-.18.55-.12.15-.3.26-.56.33h0s.93,1.28.93,1.28h-.68l-.84-1.2h-.39v1.2h-.57v-3.1h.94c.16,0,.3,0,.44.03.13.02.25.04.34.08.18.07.32.17.42.31.1.14.15.31.15.52h0ZM179.02,261.32c-.89,0-1.69.36-2.27.94-.58.58-.94,1.39-.94,2.27s.35,1.67.92,2.25l.02.02c.58.58,1.39.94,2.27.94s1.69-.36,2.27-.94c.58-.58.94-1.39.94-2.27s-.36-1.69-.94-2.27c-.58-.58-1.39-.94-2.27-.94h0ZM180.75,262.81c-.44-.44-1.05-.71-1.73-.71s-1.29.27-1.73.71c-.44.44-.71,1.05-.71,1.73s.27,1.27.7,1.71l.02.02c.44.44,1.05.71,1.73.71s1.28-.27,1.73-.71c.44-.44.71-1.05.71-1.73s-.27-1.28-.71-1.73h0ZM178.63,264.41c.13,0,.24,0,.33-.02.09-.01.17-.03.23-.05.11-.04.19-.1.24-.18.04-.07.07-.16.07-.26,0-.08-.02-.16-.05-.22-.03-.06-.09-.11-.18-.15-.05-.03-.12-.04-.2-.05-.08-.01-.18-.02-.3-.02h-.4v.95h.28Z"
/><polygon
class="cls-13"
points="22.89 342.21 42.82 342.21 42.82 344.85 25.23 344.85 25.23 354.65 22.89 354.65 22.89 342.21"
/><rect
class="cls-14"
x="22.89"
y="359.51"
width="19.94"
height="2.65"
/><polygon
class="cls-13"
points="22.89 367.95 42.82 367.95 42.82 370.6 25.23 370.6 25.23 380.4 22.89 380.4 22.89 367.95"
/><path
class="cls-13"
d="M22.89,388.37h8.45l11.49-7.69v3.17l-6.03,3.94c-1.12.73-2.24,1.42-3.36,2.04,1.04.61,2.21,1.35,3.51,2.2l5.88,3.86v3.08l-11.49-7.96h-8.45v-2.65Z"
/><path
class="cls-13"
d="M30.71,411.91h2.34v8.44h-7.39c-1.03-1.29-1.81-2.63-2.33-4.01-.52-1.38-.78-2.79-.78-4.24,0-1.96.42-3.74,1.26-5.34.84-1.6,2.05-2.81,3.63-3.62,1.59-.82,3.36-1.23,5.31-1.23s3.75.4,5.43,1.22c1.68.81,2.93,1.98,3.74,3.5.82,1.52,1.23,3.28,1.23,5.26,0,1.44-.23,2.74-.7,3.91-.47,1.16-1.12,2.08-1.95,2.74-.83.66-1.93,1.16-3.27,1.51l-.65-2.38c1.01-.3,1.81-.67,2.39-1.11.58-.45,1.04-1.08,1.39-1.9.35-.82.52-1.74.52-2.74,0-1.2-.19-2.24-.55-3.12-.37-.88-.85-1.58-1.45-2.13-.6-.54-1.26-.96-1.97-1.25-1.24-.51-2.58-.76-4.02-.76-1.78,0-3.27.31-4.47.91-1.2.61-2.09,1.5-2.67,2.67-.58,1.17-.87,2.41-.87,3.72,0,1.14.22,2.26.66,3.34.45,1.09.91,1.91,1.42,2.47h3.74v-5.85Z"
/><path
class="cls-13"
d="M32.59,424.69c3.3,0,5.89.89,7.76,2.67,1.87,1.78,2.8,4.07,2.8,6.88,0,1.84-.44,3.5-1.32,4.98-.88,1.48-2.1,2.6-3.68,3.38-1.57.77-3.35,1.16-5.34,1.16s-3.83-.41-5.42-1.23c-1.6-.82-2.8-1.97-3.62-3.47-.82-1.5-1.23-3.11-1.23-4.84,0-1.88.45-3.55,1.36-5.04.91-1.48,2.14-2.6,3.71-3.36,1.56-.76,3.22-1.14,4.97-1.14h0ZM32.55,427.42c-2.4,0-4.29.65-5.67,1.94-1.38,1.29-2.07,2.91-2.07,4.86s.7,3.62,2.09,4.9c1.39,1.28,3.37,1.92,5.93,1.92,1.62,0,3.03-.27,4.24-.82,1.21-.55,2.14-1.35,2.81-2.4.66-1.06,1-2.24,1-3.56,0-1.87-.64-3.47-1.92-4.82-1.28-1.35-3.42-2.02-6.41-2.02Z"
/><path
class="cls-8"
d="M7.06,338.45h-1.67c-.92,0-1.67.75-1.67,1.67v11.46c0,.92.75,1.67,1.67,1.67h1.67v-14.79Z"
/><path
class="cls-8"
d="M7.06,438.01h-1.67c-.92,0-1.67.75-1.67,1.67v11.46c0,.92.75,1.67,1.67,1.67h1.67v-14.79Z"
/><path
class="cls-8"
d="M200.2,338.45h1.67c.92,0,1.67.75,1.67,1.67v11.46c0,.92-.75,1.67-1.67,1.67h-1.67v-14.79Z"
/><path
class="cls-8"
d="M200.2,438.01h1.67c.92,0,1.67.75,1.67,1.67v11.46c0,.92-.75,1.67-1.67,1.67h-1.67v-14.79Z"
/><path
class="cls-9"
d="M181.07,394.74c1.93,0,3.51-1.57,3.51-3.51s-1.57-3.51-3.51-3.51-3.51,1.57-3.51,3.51,1.57,3.51,3.51,3.51Z"
/><path
class="cls-9"
d="M190.07,394.74c1.93,0,3.51-1.57,3.51-3.51s-1.57-3.51-3.51-3.51-3.51,1.57-3.51,3.51,1.57,3.51,3.51,3.51Z"
/>
</svg>

Before

Width:  |  Height:  |  Size: 8.8 KiB

-126
View File
@@ -1,126 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="733.42 451.82 573.87 931.48">
<defs><style>
.cls-1 {
fill: #8e8d8e;
}
.cls-2 {
fill: #383839;
}
.cls-3 {
fill: #cccccb;
}
.cls-4 {
fill: #222226;
}
.cls-5, .cls-6 {
fill: none;
stroke: #050606;
stroke-miterlimit: 10;
}
.cls-5 {
stroke-width: 1.87px;
}
.cls-6 {
stroke-width: 3.77px;
}
.cls-7 {
fill: #4c4c4d;
}
</style></defs><g id="Layer_4" data-name="Layer 4"><path
class="cls-1"
d="M1277.27,847.59h4.35a8.09,8.09,0,0,1,8.09,8.08v138a8.09,8.09,0,0,1-8.09,8.09h-4.35"
></path><path
class="cls-1"
d="M1277.27,732.73h18a10.14,10.14,0,0,1,10.14,10.14v43A10.14,10.14,0,0,1,1295.26,796h-18a0,0,0,0,1,0,0V732.73A0,0,0,0,1,1277.27,732.73Z"
></path><path
class="cls-2"
d="M1256.49,1200.6h0a14.19,14.19,0,0,1-2.83,12.5c-8.13,9.86-19.94,18.58-46,30.75-19.15,9-28.65,16-38.35,29.6a93.15,93.15,0,0,0-8.7,14.61c-6.95,15.17-11.77,44.44-11.77,65.66v3.61a24.09,24.09,0,0,1-24.1,24.09H887.83a24.09,24.09,0,0,1-24.1-24.09v-3.61c0-21.22-4.82-50.49-11.77-65.66a93.15,93.15,0,0,0-8.7-14.61c-9.7-13.63-19.2-20.65-38.35-29.6-26.06-12.17-37.87-20.89-46-30.75a14.22,14.22,0,0,1-2.82-12.5h0"
></path><path
class="cls-2"
d="M756.09,634.53h0a14.19,14.19,0,0,1,2.83-12.5c8.12-9.86,19.93-18.58,46-30.75,19.15-8.95,28.65-16,38.35-29.6a93.15,93.15,0,0,0,8.7-14.61c6.95-15.17,11.77-44.44,11.77-65.66V477.8a24.09,24.09,0,0,1,24.1-24.09h236.92a24.09,24.09,0,0,1,24.1,24.09v3.61c0,21.22,4.82,50.49,11.77,65.66a93.15,93.15,0,0,0,8.7,14.61c9.7,13.63,19.2,20.65,38.35,29.6,26,12.17,37.86,20.89,46,30.75a14.19,14.19,0,0,1,2.83,12.5h0"
></path><rect
class="cls-3"
x="735.31"
y="598.25"
width="541.96"
height="638.99"
rx="96.44"
></rect><path
class="cls-2"
d="M1247.38,694.68v446.11a66.63,66.63,0,0,1-66.54,66.56H831.75a66.62,66.62,0,0,1-66.56-66.56V694.68a66.63,66.63,0,0,1,66.56-66.55h349.09A66.64,66.64,0,0,1,1247.38,694.68Z"
></path><rect
class="cls-4"
x="817.71"
y="721.76"
width="379.03"
height="388.6"
></rect><path
class="cls-5"
d="M1247.38,694.68v446.11a66.63,66.63,0,0,1-66.54,66.56H831.75a66.62,66.62,0,0,1-66.56-66.56V694.68a66.63,66.63,0,0,1,66.56-66.55h349.09A66.64,66.64,0,0,1,1247.38,694.68Z"
></path><rect
class="cls-6"
x="735.31"
y="598.25"
width="541.96"
height="638.99"
rx="96.44"
></rect><path
class="cls-6"
d="M1256.49,1200.6h0a14.19,14.19,0,0,1-2.83,12.5c-8.13,9.86-19.94,18.58-46,30.75-19.15,9-28.65,16-38.35,29.6a93.15,93.15,0,0,0-8.7,14.61c-6.95,15.17-11.77,44.44-11.77,65.66v3.61a24.09,24.09,0,0,1-24.1,24.09H887.83a24.09,24.09,0,0,1-24.1-24.09v-3.61c0-21.22-4.82-50.49-11.77-65.66a93.15,93.15,0,0,0-8.7-14.61c-9.7-13.63-19.2-20.65-38.35-29.6-26.06-12.17-37.87-20.89-46-30.75a14.22,14.22,0,0,1-2.82-12.5h0"
></path><path
class="cls-6"
d="M756.09,634.53h0a14.19,14.19,0,0,1,2.83-12.5c8.12-9.86,19.93-18.58,46-30.75,19.15-8.95,28.65-16,38.35-29.6a93.15,93.15,0,0,0,8.7-14.61c6.95-15.17,11.77-44.44,11.77-65.66V477.8a24.09,24.09,0,0,1,24.1-24.09h236.92a24.09,24.09,0,0,1,24.1,24.09v3.61c0,21.22,4.82,50.49,11.77,65.66a93.15,93.15,0,0,0,8.7,14.61c9.7,13.63,19.2,20.65,38.35,29.6,26,12.17,37.86,20.89,46,30.75a14.19,14.19,0,0,1,2.83,12.5h0"
></path><rect
class="cls-5"
x="817.71"
y="721.76"
width="379.03"
height="388.6"
></rect><path
class="cls-6"
d="M1277.27,847.59h4.35a8.09,8.09,0,0,1,8.09,8.08v138a8.09,8.09,0,0,1-8.09,8.09h-4.35"
></path><path
class="cls-6"
d="M1277.27,732.73h18a10.14,10.14,0,0,1,10.14,10.14v43A10.14,10.14,0,0,1,1295.26,796h-18a0,0,0,0,1,0,0V732.73A0,0,0,0,1,1277.27,732.73Z"
></path><circle
class="cls-7"
cx="1083.08"
cy="1177.35"
r="16.6"
></circle><rect
class="cls-2"
x="1280.24"
y="739.77"
width="16.77"
height="4.59"
rx="2.29"
></rect><rect
class="cls-2"
x="1280.24"
y="750.91"
width="16.77"
height="4.59"
rx="2.29"
></rect><rect
class="cls-2"
x="1280.24"
y="762.06"
width="16.77"
height="4.59"
rx="2.29"
></rect><rect
class="cls-2"
x="1280.24"
y="773.2"
width="16.77"
height="4.59"
rx="2.29"
></rect><rect
class="cls-2"
x="1280.24"
y="784.34"
width="16.77"
height="4.59"
rx="2.29"
></rect></g>
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 85 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 131 KiB

Some files were not shown because too many files have changed in this diff Show More