mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-19 23:31:03 +10:00
Merge branch 'main' into unread-peoplefirst
This commit is contained in:
+429
-36
@@ -376,6 +376,24 @@ abstract class AppLocalizations {
|
||||
/// **'Scan'**
|
||||
String get scanner_scan;
|
||||
|
||||
/// No description provided for @scanner_bluetoothOff.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Bluetooth is off'**
|
||||
String get scanner_bluetoothOff;
|
||||
|
||||
/// No description provided for @scanner_bluetoothOffMessage.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Please turn on Bluetooth to scan for devices'**
|
||||
String get scanner_bluetoothOffMessage;
|
||||
|
||||
/// No description provided for @scanner_enableBluetooth.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Enable Bluetooth'**
|
||||
String get scanner_enableBluetooth;
|
||||
|
||||
/// No description provided for @device_quickSwitch.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -682,6 +700,12 @@ abstract class AppLocalizations {
|
||||
/// **'An open-source Flutter client for MeshCore LoRa mesh networking devices.'**
|
||||
String get settings_aboutDescription;
|
||||
|
||||
/// No description provided for @settings_aboutOpenMeteoAttribution.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'LOS elevation data: Open-Meteo (CC BY 4.0)'**
|
||||
String get settings_aboutOpenMeteoAttribution;
|
||||
|
||||
/// No description provided for @settings_infoName.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -730,24 +754,6 @@ abstract class AppLocalizations {
|
||||
/// **'Presets'**
|
||||
String get settings_presets;
|
||||
|
||||
/// No description provided for @settings_preset915Mhz.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'915 MHz'**
|
||||
String get settings_preset915Mhz;
|
||||
|
||||
/// No description provided for @settings_preset868Mhz.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'868 MHz'**
|
||||
String get settings_preset868Mhz;
|
||||
|
||||
/// No description provided for @settings_preset433Mhz.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'433 MHz'**
|
||||
String get settings_preset433Mhz;
|
||||
|
||||
/// No description provided for @settings_frequency.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -802,17 +808,23 @@ abstract class AppLocalizations {
|
||||
/// **'Invalid TX power (0-22 dBm)'**
|
||||
String get settings_txPowerInvalid;
|
||||
|
||||
/// No description provided for @settings_longRange.
|
||||
/// No description provided for @settings_clientRepeat.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Long Range'**
|
||||
String get settings_longRange;
|
||||
/// **'Off-Grid Repeat'**
|
||||
String get settings_clientRepeat;
|
||||
|
||||
/// No description provided for @settings_fastSpeed.
|
||||
/// No description provided for @settings_clientRepeatSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Fast Speed'**
|
||||
String get settings_fastSpeed;
|
||||
/// **'Allow this device to repeat mesh packets for others'**
|
||||
String get settings_clientRepeatSubtitle;
|
||||
|
||||
/// No description provided for @settings_clientRepeatFreqWarning.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Off-grid repeat requires 433, 869, or 918 MHz frequency'**
|
||||
String get settings_clientRepeatFreqWarning;
|
||||
|
||||
/// No description provided for @settings_error.
|
||||
///
|
||||
@@ -958,6 +970,18 @@ abstract class AppLocalizations {
|
||||
/// **'Українська'**
|
||||
String get appSettings_languageUk;
|
||||
|
||||
/// No description provided for @appSettings_enableMessageTracing.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Enable Message Tracing'**
|
||||
String get appSettings_enableMessageTracing;
|
||||
|
||||
/// No description provided for @appSettings_enableMessageTracingSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Show detailed routing and timing metadata for messages'**
|
||||
String get appSettings_enableMessageTracingSubtitle;
|
||||
|
||||
/// No description provided for @appSettings_notifications.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -1234,6 +1258,24 @@ abstract class AppLocalizations {
|
||||
/// **'Offline Map Cache'**
|
||||
String get appSettings_offlineMapCache;
|
||||
|
||||
/// No description provided for @appSettings_unitsTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Units'**
|
||||
String get appSettings_unitsTitle;
|
||||
|
||||
/// No description provided for @appSettings_unitsMetric.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Metric (m / km)'**
|
||||
String get appSettings_unitsMetric;
|
||||
|
||||
/// No description provided for @appSettings_unitsImperial.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Imperial (ft / mi)'**
|
||||
String get appSettings_unitsImperial;
|
||||
|
||||
/// No description provided for @appSettings_noAreaSelected.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -1294,11 +1336,47 @@ abstract class AppLocalizations {
|
||||
/// **'Contacts will appear when devices advertise'**
|
||||
String get contacts_contactsWillAppear;
|
||||
|
||||
/// No description provided for @contacts_unread.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Unread'**
|
||||
String get contacts_unread;
|
||||
|
||||
/// No description provided for @contacts_searchContactsNoNumber.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Search Contacts...'**
|
||||
String get contacts_searchContactsNoNumber;
|
||||
|
||||
/// No description provided for @contacts_searchContacts.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Search contacts...'**
|
||||
String get contacts_searchContacts;
|
||||
/// **'Search {number}{str} Contacts...'**
|
||||
String contacts_searchContacts(int number, String str);
|
||||
|
||||
/// No description provided for @contacts_searchFavorites.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Search {number}{str} Favorites...'**
|
||||
String contacts_searchFavorites(int number, String str);
|
||||
|
||||
/// No description provided for @contacts_searchUsers.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Search {number}{str} Users...'**
|
||||
String contacts_searchUsers(int number, String str);
|
||||
|
||||
/// No description provided for @contacts_searchRepeaters.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Search {number}{str} Repeaters...'**
|
||||
String contacts_searchRepeaters(int number, String str);
|
||||
|
||||
/// No description provided for @contacts_searchRoomServers.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Search {number}{str} Room servers...'**
|
||||
String contacts_searchRoomServers(int number, String str);
|
||||
|
||||
/// No description provided for @contacts_noUnreadContacts.
|
||||
///
|
||||
@@ -1516,6 +1594,18 @@ abstract class AppLocalizations {
|
||||
/// **'Edit channel'**
|
||||
String get channels_editChannel;
|
||||
|
||||
/// No description provided for @channels_muteChannel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Mute channel'**
|
||||
String get channels_muteChannel;
|
||||
|
||||
/// No description provided for @channels_unmuteChannel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Unmute channel'**
|
||||
String get channels_unmuteChannel;
|
||||
|
||||
/// No description provided for @channels_deleteChannel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -1528,6 +1618,12 @@ abstract class AppLocalizations {
|
||||
/// **'Delete \"{name}\"? This cannot be undone.'**
|
||||
String channels_deleteChannelConfirm(String name);
|
||||
|
||||
/// No description provided for @channels_channelDeleteFailed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Failed to delete channel \"{name}\"'**
|
||||
String channels_channelDeleteFailed(String name);
|
||||
|
||||
/// No description provided for @channels_channelDeleted.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -2026,6 +2122,12 @@ abstract class AppLocalizations {
|
||||
/// **'Path Management'**
|
||||
String get chat_pathManagement;
|
||||
|
||||
/// No description provided for @chat_ShowAllPaths.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Show all paths'**
|
||||
String get chat_ShowAllPaths;
|
||||
|
||||
/// No description provided for @chat_routingMode.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -2278,6 +2380,18 @@ abstract class AppLocalizations {
|
||||
/// **'Node Map'**
|
||||
String get map_title;
|
||||
|
||||
/// No description provided for @map_lineOfSight.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Line of Sight'**
|
||||
String get map_lineOfSight;
|
||||
|
||||
/// No description provided for @map_losScreenTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Line of Sight'**
|
||||
String get map_losScreenTitle;
|
||||
|
||||
/// No description provided for @map_noNodesWithLocation.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -2518,6 +2632,30 @@ abstract class AppLocalizations {
|
||||
/// **'Manage Repeater'**
|
||||
String get map_manageRepeater;
|
||||
|
||||
/// No description provided for @map_tapToAdd.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Tap on nodes to add them to the path.'**
|
||||
String get map_tapToAdd;
|
||||
|
||||
/// No description provided for @map_runTrace.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Run Path Trace'**
|
||||
String get map_runTrace;
|
||||
|
||||
/// No description provided for @map_removeLast.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Remove Last'**
|
||||
String get map_removeLast;
|
||||
|
||||
/// No description provided for @map_pathTraceCancelled.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Path trace cancelled.'**
|
||||
String get map_pathTraceCancelled;
|
||||
|
||||
/// No description provided for @mapCache_title.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -2997,17 +3135,17 @@ abstract class AppLocalizations {
|
||||
/// **'Send commands to the repeater'**
|
||||
String get repeater_cliSubtitle;
|
||||
|
||||
/// No description provided for @repeater_neighbours.
|
||||
/// No description provided for @repeater_neighbors.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Neighbors'**
|
||||
String get repeater_neighbours;
|
||||
String get repeater_neighbors;
|
||||
|
||||
/// No description provided for @repeater_neighboursSubtitle.
|
||||
/// No description provided for @repeater_neighborsSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'View zero hop neighbors.'**
|
||||
String get repeater_neighboursSubtitle;
|
||||
String get repeater_neighborsSubtitle;
|
||||
|
||||
/// No description provided for @repeater_settings.
|
||||
///
|
||||
@@ -4151,13 +4289,13 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @neighbors_receivedData.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Received Neighbours Data'**
|
||||
/// **'Received Neighbors Data'**
|
||||
String get neighbors_receivedData;
|
||||
|
||||
/// No description provided for @neighbors_requestTimedOut.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Neighbours request timed out.'**
|
||||
/// **'Neighbors request timed out.'**
|
||||
String get neighbors_requestTimedOut;
|
||||
|
||||
/// No description provided for @neighbors_errorLoading.
|
||||
@@ -4166,16 +4304,16 @@ abstract class AppLocalizations {
|
||||
/// **'Error loading neighbors: {error}'**
|
||||
String neighbors_errorLoading(String error);
|
||||
|
||||
/// No description provided for @neighbors_repeatersNeighbours.
|
||||
/// No description provided for @neighbors_repeatersNeighbors.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Repeaters Neighbours'**
|
||||
String get neighbors_repeatersNeighbours;
|
||||
/// **'Repeaters Neighbors'**
|
||||
String get neighbors_repeatersNeighbors;
|
||||
|
||||
/// No description provided for @neighbors_noData.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'No neighbours data available.'**
|
||||
/// **'No neighbors data available.'**
|
||||
String get neighbors_noData;
|
||||
|
||||
/// No description provided for @neighbors_unknownContact.
|
||||
@@ -4676,6 +4814,24 @@ abstract class AppLocalizations {
|
||||
/// **'All'**
|
||||
String get listFilter_all;
|
||||
|
||||
/// No description provided for @listFilter_favorites.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Favorites'**
|
||||
String get listFilter_favorites;
|
||||
|
||||
/// No description provided for @listFilter_addToFavorites.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Add to favorites'**
|
||||
String get listFilter_addToFavorites;
|
||||
|
||||
/// No description provided for @listFilter_removeFromFavorites.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Remove from favorites'**
|
||||
String get listFilter_removeFromFavorites;
|
||||
|
||||
/// No description provided for @listFilter_users.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -4736,6 +4892,231 @@ abstract class AppLocalizations {
|
||||
/// **'One or more of the hops is missing a location!'**
|
||||
String get pathTrace_someHopsNoLocation;
|
||||
|
||||
/// No description provided for @pathTrace_clearTooltip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Clear path.'**
|
||||
String get pathTrace_clearTooltip;
|
||||
|
||||
/// No description provided for @losSelectStartEnd.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Select start and end nodes for LOS.'**
|
||||
String get losSelectStartEnd;
|
||||
|
||||
/// No description provided for @losRunFailed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Line-of-sight check failed: {error}'**
|
||||
String losRunFailed(String error);
|
||||
|
||||
/// No description provided for @losClearAllPoints.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Clear all points'**
|
||||
String get losClearAllPoints;
|
||||
|
||||
/// No description provided for @losRunToViewElevationProfile.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Run LOS to view elevation profile'**
|
||||
String get losRunToViewElevationProfile;
|
||||
|
||||
/// No description provided for @losMenuTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'LOS Menu'**
|
||||
String get losMenuTitle;
|
||||
|
||||
/// No description provided for @losMenuSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Tap nodes or long-press map for custom points'**
|
||||
String get losMenuSubtitle;
|
||||
|
||||
/// No description provided for @losShowDisplayNodes.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Show display nodes'**
|
||||
String get losShowDisplayNodes;
|
||||
|
||||
/// No description provided for @losCustomPoints.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Custom points'**
|
||||
String get losCustomPoints;
|
||||
|
||||
/// No description provided for @losCustomPointLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Custom {index}'**
|
||||
String losCustomPointLabel(int index);
|
||||
|
||||
/// No description provided for @losPointA.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Point A'**
|
||||
String get losPointA;
|
||||
|
||||
/// No description provided for @losPointB.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Point B'**
|
||||
String get losPointB;
|
||||
|
||||
/// No description provided for @losAntennaA.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Antenna A: {value} {unit}'**
|
||||
String losAntennaA(String value, String unit);
|
||||
|
||||
/// No description provided for @losAntennaB.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Antenna B: {value} {unit}'**
|
||||
String losAntennaB(String value, String unit);
|
||||
|
||||
/// No description provided for @losRun.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Run LOS'**
|
||||
String get losRun;
|
||||
|
||||
/// No description provided for @losNoElevationData.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'No elevation data'**
|
||||
String get losNoElevationData;
|
||||
|
||||
/// No description provided for @losProfileClear.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{distance} {distanceUnit}, clear LOS, min clearance {clearance} {heightUnit}'**
|
||||
String losProfileClear(
|
||||
String distance,
|
||||
String distanceUnit,
|
||||
String clearance,
|
||||
String heightUnit,
|
||||
);
|
||||
|
||||
/// No description provided for @losProfileBlocked.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{distance} {distanceUnit}, blocked by {obstruction} {heightUnit}'**
|
||||
String losProfileBlocked(
|
||||
String distance,
|
||||
String distanceUnit,
|
||||
String obstruction,
|
||||
String heightUnit,
|
||||
);
|
||||
|
||||
/// No description provided for @losStatusChecking.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'LOS: checking...'**
|
||||
String get losStatusChecking;
|
||||
|
||||
/// No description provided for @losStatusNoData.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'LOS: no data'**
|
||||
String get losStatusNoData;
|
||||
|
||||
/// No description provided for @losStatusSummary.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'LOS: {clear}/{total} clear, {blocked} blocked, {unknown} unknown'**
|
||||
String losStatusSummary(int clear, int total, int blocked, int unknown);
|
||||
|
||||
/// No description provided for @losErrorElevationUnavailable.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Elevation data unavailable for one or more samples.'**
|
||||
String get losErrorElevationUnavailable;
|
||||
|
||||
/// No description provided for @losErrorInvalidInput.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Invalid points/elevation data for LOS calculation.'**
|
||||
String get losErrorInvalidInput;
|
||||
|
||||
/// No description provided for @losRenameCustomPoint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Rename custom point'**
|
||||
String get losRenameCustomPoint;
|
||||
|
||||
/// No description provided for @losPointName.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Point name'**
|
||||
String get losPointName;
|
||||
|
||||
/// No description provided for @losShowPanelTooltip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Show LOS panel'**
|
||||
String get losShowPanelTooltip;
|
||||
|
||||
/// No description provided for @losHidePanelTooltip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Hide LOS panel'**
|
||||
String get losHidePanelTooltip;
|
||||
|
||||
/// No description provided for @losElevationAttribution.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Elevation data: Open-Meteo (CC BY 4.0)'**
|
||||
String get losElevationAttribution;
|
||||
|
||||
/// No description provided for @losLegendRadioHorizon.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Radio horizon'**
|
||||
String get losLegendRadioHorizon;
|
||||
|
||||
/// No description provided for @losLegendLosBeam.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'LOS beam'**
|
||||
String get losLegendLosBeam;
|
||||
|
||||
/// No description provided for @losLegendTerrain.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Terrain'**
|
||||
String get losLegendTerrain;
|
||||
|
||||
/// No description provided for @losFrequencyLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Frequency'**
|
||||
String get losFrequencyLabel;
|
||||
|
||||
/// No description provided for @losFrequencyInfoTooltip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'View calculation details'**
|
||||
String get losFrequencyInfoTooltip;
|
||||
|
||||
/// No description provided for @losFrequencyDialogTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Radio horizon calculation'**
|
||||
String get losFrequencyDialogTitle;
|
||||
|
||||
/// Explain how the calculation uses the baseline frequency and derived k-factor.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Starting from k={baselineK} at {baselineFreq} MHz, the calculation adjusts the k-factor for the current {frequencyMHz} MHz band, which defines the curved radio horizon cap.'**
|
||||
String losFrequencyDialogDescription(
|
||||
double baselineK,
|
||||
double baselineFreq,
|
||||
double frequencyMHz,
|
||||
double kFactor,
|
||||
);
|
||||
|
||||
/// No description provided for @contacts_pathTrace.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -4993,6 +5374,18 @@ abstract class AppLocalizations {
|
||||
/// In en, this message translates to:
|
||||
/// **'meshcore-open GPX map data export'**
|
||||
String get settings_gpxExportShareSubject;
|
||||
|
||||
/// No description provided for @snrIndicator_nearByRepeaters.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Nearby Repeaters'**
|
||||
String get snrIndicator_nearByRepeaters;
|
||||
|
||||
/// No description provided for @snrIndicator_lastSeen.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Last seen'**
|
||||
String get snrIndicator_lastSeen;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
|
||||
Reference in New Issue
Block a user