Compare commits
2 Commits
e0ee7ca9dc
...
07830df99d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07830df99d | ||
|
|
4171dce2e7 |
2
MainForm.Designer.cs
generated
2
MainForm.Designer.cs
generated
@@ -28,6 +28,7 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||||
lbMain = new ListBox();
|
lbMain = new ListBox();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
@@ -48,6 +49,7 @@
|
|||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
ClientSize = new Size(800, 450);
|
ClientSize = new Size(800, 450);
|
||||||
Controls.Add(lbMain);
|
Controls.Add(lbMain);
|
||||||
|
Icon = (Icon)resources.GetObject("$this.Icon");
|
||||||
Name = "MainForm";
|
Name = "MainForm";
|
||||||
Text = "RoboSpot MotionCamera finder";
|
Text = "RoboSpot MotionCamera finder";
|
||||||
FormClosing += MainForm_FormClosing;
|
FormClosing += MainForm_FormClosing;
|
||||||
|
|||||||
30
MainForm.cs
30
MainForm.cs
@@ -1,8 +1,11 @@
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.NetworkInformation;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using Tmds.MDns;
|
using Tmds.MDns;
|
||||||
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace robospot_camera_finder
|
namespace robospot_camera_finder
|
||||||
{
|
{
|
||||||
@@ -44,6 +47,33 @@ namespace robospot_camera_finder
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
|
bool got_proper_ip = false;
|
||||||
|
foreach (var net_interface in NetworkInterface.GetAllNetworkInterfaces())
|
||||||
|
{
|
||||||
|
IPInterfaceProperties prop = net_interface.GetIPProperties();
|
||||||
|
foreach (var ip in prop.UnicastAddresses)
|
||||||
|
{
|
||||||
|
if (ip.Address.ToString().StartsWith("10."))
|
||||||
|
{
|
||||||
|
if (ip.IPv4Mask.ToString() == "255.0.0.0")
|
||||||
|
{
|
||||||
|
got_proper_ip = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!got_proper_ip)
|
||||||
|
{
|
||||||
|
DialogResult open_netsettings = MessageBox.Show("No Ethernet interface on the 10.0.0.0/8 subnet found. Cameras might not be detected. Do you want to open network settings ?", "Wrong IP configuration", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
|
||||||
|
if (open_netsettings == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
ProcessStartInfo startInfo = new ProcessStartInfo("NCPA.cpl");
|
||||||
|
startInfo.UseShellExecute = true;
|
||||||
|
|
||||||
|
Process.Start(startInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
browser.StartBrowse("_rtsp._tcp");
|
browser.StartBrowse("_rtsp._tcp");
|
||||||
|
|
||||||
lbMain.DataSource = all_cameras;
|
lbMain.DataSource = all_cameras;
|
||||||
|
|||||||
@@ -57,4 +57,29 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAP9UAAD/VwAA
|
||||||
|
/w0AAAAAAAAAgwAAAMgAAADIAAAAyAAAALsAAAAAAAAAAAAAAAAAAADLAAAA0AAAGNQAAN/4AAD//wAA
|
||||||
|
//8AAP/iAAD/HgAAAIIAAAD/AAAA/wAAAP8AAAD/AAAAFgAAAAAAAAAUAAAA/wAAAP8AAIT/AAD//wAA
|
||||||
|
//8AAP//AAD//wAA/5cAAABYAAAA/wAAAP8AAAD/AAAA/wAAAEAAAAAAAAAALwAAAP8AAAD/AACi/wAA
|
||||||
|
//8AAP//AAD//wAA//8AAP+0AAAALwAAAP8AAAD/AAAA/wAAAP8AAABrAAAAAAAAAEsAAAD/AAAA/wAA
|
||||||
|
Wv8AAP//AAD//wAA//8AAP//AAD/bQAAAAgAAAD9AAAA/wAAAP8AAAD/AAAAlQAAAAAAAABnAAAA/wAA
|
||||||
|
AP8AAAD/AAB7/wAA9fcAAP/wAAD/iAAAAAIAAAAAAAAA2wAAAP8AAAD/AAAA/wAAAM8AAABQAAAApgAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAABXAAAAAAAAAAAAAAAAAAAAAAAAALEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAApgAAABsAAAAAAAAAAAAAAAAAAACIAAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAMwAAAAAAAAAAAAAAXgAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAAALAAAAAAAAADQAAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAAZAAAAAAAAAAAAAAADgAAAMoAAAD/AAAA/wAAAP8AAAD/AAAAawAAAAAAAAAMAAAA/gAA
|
||||||
|
AP8AAAD/AAAA/wAAAIwAAAAAAAAAAAAAAAYAAACwAAAA/wAAAP8AAAD/AAAA/wAAAKgAAAAAAAAAAAAA
|
||||||
|
AOEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACfAAAAAAAA
|
||||||
|
AAAAAAC3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAPgAA
|
||||||
|
AAAAAAAAAAAAjQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADXAAAAUAAA
|
||||||
|
AAAAAAAAAAAAAAAAABkAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADQAAAAZAAAAAAAA
|
||||||
|
AAAAAAAA//EAAAcAAAACAAAAAgAAAAIAAACCAQAAgAcAAIADAACAAQAAgAAAAIGAAACBwAAAwAAAAMAA
|
||||||
|
AADAAQAAwAcAAA==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
60
StreamViewer.Designer.cs
generated
60
StreamViewer.Designer.cs
generated
@@ -31,11 +31,12 @@ namespace robospot_camera_finder
|
|||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
components = new System.ComponentModel.Container();
|
components = new System.ComponentModel.Container();
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StreamViewer));
|
||||||
videoView = new LibVLCSharp.WinForms.VideoView();
|
videoView = new LibVLCSharp.WinForms.VideoView();
|
||||||
tbZoom = new TrackBar();
|
tbZoom = new TrackBar();
|
||||||
lblMinZoom = new Label();
|
|
||||||
lblMaxZoom = new Label();
|
|
||||||
timerUpdateZoom = new System.Windows.Forms.Timer(components);
|
timerUpdateZoom = new System.Windows.Forms.Timer(components);
|
||||||
|
btnZoomMin = new Button();
|
||||||
|
btnZoomMax = new Button();
|
||||||
((System.ComponentModel.ISupportInitialize)videoView).BeginInit();
|
((System.ComponentModel.ISupportInitialize)videoView).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)tbZoom).BeginInit();
|
((System.ComponentModel.ISupportInitialize)tbZoom).BeginInit();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
@@ -68,44 +69,49 @@ namespace robospot_camera_finder
|
|||||||
tbZoom.KeyUp += tbZoom_KeyUp;
|
tbZoom.KeyUp += tbZoom_KeyUp;
|
||||||
tbZoom.MouseUp += tbZoom_MouseUp;
|
tbZoom.MouseUp += tbZoom_MouseUp;
|
||||||
//
|
//
|
||||||
// lblMinZoom
|
|
||||||
//
|
|
||||||
lblMinZoom.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
|
||||||
lblMinZoom.AutoSize = true;
|
|
||||||
lblMinZoom.Location = new Point(902, 492);
|
|
||||||
lblMinZoom.Name = "lblMinZoom";
|
|
||||||
lblMinZoom.Size = new Size(19, 15);
|
|
||||||
lblMinZoom.TabIndex = 2;
|
|
||||||
lblMinZoom.Text = "1x";
|
|
||||||
//
|
|
||||||
// lblMaxZoom
|
|
||||||
//
|
|
||||||
lblMaxZoom.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
|
||||||
lblMaxZoom.AutoSize = true;
|
|
||||||
lblMaxZoom.Location = new Point(902, 12);
|
|
||||||
lblMaxZoom.Name = "lblMaxZoom";
|
|
||||||
lblMaxZoom.Size = new Size(25, 15);
|
|
||||||
lblMaxZoom.TabIndex = 3;
|
|
||||||
lblMaxZoom.Text = "32x";
|
|
||||||
//
|
|
||||||
// timerUpdateZoom
|
// timerUpdateZoom
|
||||||
//
|
//
|
||||||
timerUpdateZoom.Enabled = true;
|
timerUpdateZoom.Enabled = true;
|
||||||
timerUpdateZoom.Interval = 10000;
|
timerUpdateZoom.Interval = 10000;
|
||||||
timerUpdateZoom.Tick += timerUpdateZoom_Tick;
|
timerUpdateZoom.Tick += timerUpdateZoom_Tick;
|
||||||
//
|
//
|
||||||
|
// btnZoomMin
|
||||||
|
//
|
||||||
|
btnZoomMin.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
btnZoomMin.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||||
|
btnZoomMin.Location = new Point(886, 484);
|
||||||
|
btnZoomMin.Name = "btnZoomMin";
|
||||||
|
btnZoomMin.Size = new Size(42, 23);
|
||||||
|
btnZoomMin.TabIndex = 2;
|
||||||
|
btnZoomMin.Text = "1x";
|
||||||
|
btnZoomMin.UseVisualStyleBackColor = true;
|
||||||
|
btnZoomMin.Click += btnZoomMin_Click;
|
||||||
|
//
|
||||||
|
// btnZoomMax
|
||||||
|
//
|
||||||
|
btnZoomMax.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||||
|
btnZoomMax.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||||
|
btnZoomMax.Location = new Point(886, 12);
|
||||||
|
btnZoomMax.Name = "btnZoomMax";
|
||||||
|
btnZoomMax.Size = new Size(42, 23);
|
||||||
|
btnZoomMax.TabIndex = 3;
|
||||||
|
btnZoomMax.Text = "32x";
|
||||||
|
btnZoomMax.UseVisualStyleBackColor = true;
|
||||||
|
btnZoomMax.Click += btnZoomMax_Click;
|
||||||
|
//
|
||||||
// StreamViewer
|
// StreamViewer
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
AutoScaleMode = AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
ClientSize = new Size(933, 519);
|
ClientSize = new Size(933, 519);
|
||||||
Controls.Add(lblMaxZoom);
|
Controls.Add(btnZoomMax);
|
||||||
Controls.Add(lblMinZoom);
|
Controls.Add(btnZoomMin);
|
||||||
Controls.Add(tbZoom);
|
Controls.Add(tbZoom);
|
||||||
Controls.Add(videoView);
|
Controls.Add(videoView);
|
||||||
|
Icon = (Icon)resources.GetObject("$this.Icon");
|
||||||
Margin = new Padding(4, 3, 4, 3);
|
Margin = new Padding(4, 3, 4, 3);
|
||||||
Name = "StreamViewer";
|
Name = "StreamViewer";
|
||||||
Text = "LibVLCSharp.WinForms";
|
Text = "Camera";
|
||||||
FormClosed += StreamViewer_FormClosed;
|
FormClosed += StreamViewer_FormClosed;
|
||||||
((System.ComponentModel.ISupportInitialize)videoView).EndInit();
|
((System.ComponentModel.ISupportInitialize)videoView).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)tbZoom).EndInit();
|
((System.ComponentModel.ISupportInitialize)tbZoom).EndInit();
|
||||||
@@ -117,8 +123,8 @@ namespace robospot_camera_finder
|
|||||||
|
|
||||||
private LibVLCSharp.WinForms.VideoView videoView;
|
private LibVLCSharp.WinForms.VideoView videoView;
|
||||||
private TrackBar tbZoom;
|
private TrackBar tbZoom;
|
||||||
private Label lblMinZoom;
|
|
||||||
private Label lblMaxZoom;
|
|
||||||
private System.Windows.Forms.Timer timerUpdateZoom;
|
private System.Windows.Forms.Timer timerUpdateZoom;
|
||||||
|
private Button btnZoomMin;
|
||||||
|
private Button btnZoomMax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,9 @@ namespace robospot_camera_finder
|
|||||||
string password = "RoboSpot10";
|
string password = "RoboSpot10";
|
||||||
string cam_ip = "";
|
string cam_ip = "";
|
||||||
|
|
||||||
|
int max_zoom_pulse = 9999;
|
||||||
|
int min_zoom_pulse = 10;
|
||||||
|
|
||||||
public StreamViewer(string name, string ip)
|
public StreamViewer(string name, string ip)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -56,13 +59,13 @@ namespace robospot_camera_finder
|
|||||||
private void sendZoomValue(string zoom_pulse)
|
private void sendZoomValue(string zoom_pulse)
|
||||||
{
|
{
|
||||||
// clamp values to allowed range
|
// clamp values to allowed range
|
||||||
if (int.Parse(zoom_pulse) < 10)
|
if (int.Parse(zoom_pulse) < min_zoom_pulse)
|
||||||
{
|
{
|
||||||
zoom_pulse = "10";
|
zoom_pulse = min_zoom_pulse.ToString();
|
||||||
}
|
}
|
||||||
if (int.Parse(zoom_pulse) > 9999)
|
if (int.Parse(zoom_pulse) > max_zoom_pulse)
|
||||||
{
|
{
|
||||||
zoom_pulse = "9999";
|
zoom_pulse = max_zoom_pulse.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://" + cam_ip + "/stw-cgi/ptzcontrol.cgi?msubmenu=absolute&action=control&ZoomPulse=" + zoom_pulse);
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://" + cam_ip + "/stw-cgi/ptzcontrol.cgi?msubmenu=absolute&action=control&ZoomPulse=" + zoom_pulse);
|
||||||
@@ -91,5 +94,17 @@ namespace robospot_camera_finder
|
|||||||
{
|
{
|
||||||
updateZoomSlider();
|
updateZoomSlider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void btnZoomMax_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
tbZoom.Value = max_zoom_pulse;
|
||||||
|
sendZoomValue(tbZoom.Value.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnZoomMin_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
tbZoom.Value = min_zoom_pulse;
|
||||||
|
sendZoomValue(tbZoom.Value.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,4 +60,29 @@
|
|||||||
<metadata name="timerUpdateZoom.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="timerUpdateZoom.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>17, 17</value>
|
<value>17, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAP9UAAD/VwAA
|
||||||
|
/w0AAAAAAAAAgwAAAMgAAADIAAAAyAAAALsAAAAAAAAAAAAAAAAAAADLAAAA0AAAGNQAAN/4AAD//wAA
|
||||||
|
//8AAP/iAAD/HgAAAIIAAAD/AAAA/wAAAP8AAAD/AAAAFgAAAAAAAAAUAAAA/wAAAP8AAIT/AAD//wAA
|
||||||
|
//8AAP//AAD//wAA/5cAAABYAAAA/wAAAP8AAAD/AAAA/wAAAEAAAAAAAAAALwAAAP8AAAD/AACi/wAA
|
||||||
|
//8AAP//AAD//wAA//8AAP+0AAAALwAAAP8AAAD/AAAA/wAAAP8AAABrAAAAAAAAAEsAAAD/AAAA/wAA
|
||||||
|
Wv8AAP//AAD//wAA//8AAP//AAD/bQAAAAgAAAD9AAAA/wAAAP8AAAD/AAAAlQAAAAAAAABnAAAA/wAA
|
||||||
|
AP8AAAD/AAB7/wAA9fcAAP/wAAD/iAAAAAIAAAAAAAAA2wAAAP8AAAD/AAAA/wAAAM8AAABQAAAApgAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAABXAAAAAAAAAAAAAAAAAAAAAAAAALEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAApgAAABsAAAAAAAAAAAAAAAAAAACIAAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAAMwAAAAAAAAAAAAAAXgAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAAALAAAAAAAAADQAAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAAZAAAAAAAAAAAAAAADgAAAMoAAAD/AAAA/wAAAP8AAAD/AAAAawAAAAAAAAAMAAAA/gAA
|
||||||
|
AP8AAAD/AAAA/wAAAIwAAAAAAAAAAAAAAAYAAACwAAAA/wAAAP8AAAD/AAAA/wAAAKgAAAAAAAAAAAAA
|
||||||
|
AOEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACfAAAAAAAA
|
||||||
|
AAAAAAC3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAPgAA
|
||||||
|
AAAAAAAAAAAAjQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADXAAAAUAAA
|
||||||
|
AAAAAAAAAAAAAAAAABkAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADQAAAAZAAAAAAAA
|
||||||
|
AAAAAAAA//EAAAcAAAACAAAAAgAAAAIAAACCAQAAgAcAAIADAACAAQAAgAAAAIGAAACBwAAAwAAAAMAA
|
||||||
|
AADAAQAAwAcAAA==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
BIN
favicon.ico
Normal file
BIN
favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Reference in New Issue
Block a user