diff --git a/Configurator/Configurator.Net/FakeCommsSession.cs b/Configurator/Configurator.Net/FakeCommsSession.cs index fafd0a61bb..9ecc6e9934 100644 --- a/Configurator/Configurator.Net/FakeCommsSession.cs +++ b/Configurator/Configurator.Net/FakeCommsSession.cs @@ -76,8 +76,10 @@ namespace ArducopterConfigurator // Right Motor Command = 1002 // Left Motor Command = 1004 // then adc 4,3, and 5 + // mag heading float * 3 + // mag heading int * 3 - _jabberData = "2,-10,3,-2,1011,1012,1002,1000,1001,1200,1003,1400,1000,1000,1000"; + _jabberData = "2,-10,3,-2,1011,1012,1002,1000,1001,1200,1003,1400,1000,1000,1000,1.000,1.000,1.000,0,0,0"; StartJabber(); } if (stringSent == "X") diff --git a/Configurator/Configurator.Net/PresentationModels/TransmitterChannelsVm.cs b/Configurator/Configurator.Net/PresentationModels/TransmitterChannelsVm.cs index ba679f8465..910f09ef64 100644 --- a/Configurator/Configurator.Net/PresentationModels/TransmitterChannelsVm.cs +++ b/Configurator/Configurator.Net/PresentationModels/TransmitterChannelsVm.cs @@ -44,12 +44,7 @@ namespace ArducopterConfigurator.PresentationModels { StartCalibrationCommand = new DelegateCommand(_ => BeginCalibration(),_=>!IsCalibrating); SaveCalibrationCommand = new DelegateCommand(_ => SaveCalibration(),_=> IsCalibrating); - - // todo: cancel calibration? CancelCalibrationCommand = new DelegateCommand(_ => CancelCalibration(), _ => IsCalibrating); - - - ResetCommand = new DelegateCommand(_ => ResetWatermarks()); } @@ -61,16 +56,17 @@ namespace ArducopterConfigurator.PresentationModels private void BeginCalibration() { - ResetWatermarks(); - IsCalibrating = true; - // send x command to stop jabber sendString(STOP_UPDATES); + ResetWatermarks(); + + IsCalibrating = true; + // send command to clear the slope and offsets // 11;0;1;0;1;0;1;0;1;0;1;0; sendString("11;0;1;0;1;0;1;0;1;0;1;0;"); - + // continue the sensor sendString(START_UPDATES); @@ -80,6 +76,7 @@ namespace ArducopterConfigurator.PresentationModels private void CancelCalibration() { IsCalibrating = false; + HideWatermarks(); } private float GetScale(int min, int max) @@ -116,7 +113,7 @@ namespace ArducopterConfigurator.PresentationModels - var vals = string.Format("{0:0.00};{1};{2:0.00};{3};{4:0.00};{5};{6:0.00};{7};{8:0.00};{9};{10:0.00};{11};", + var vals = string.Format("{0:0.00};{1:0.00};{2:0.00};{3:0.00};{4:0.00};{5:0.00};{6:0.00};{7:0.00};{8:0.00};{9:0.00};{10:0.00};{11:0.00};", GetScale(RollMin, RollMax), GetOffset(RollMin, RollMax), GetScale(PitchMin, PitchMax), @@ -136,7 +133,7 @@ namespace ArducopterConfigurator.PresentationModels IsCalibrating = false; - + HideWatermarks(); // save //sendString(WRITE_TO_EEPROM); } @@ -151,7 +148,16 @@ namespace ArducopterConfigurator.PresentationModels ModeMax = ModeMin = Mode; } - public ICommand ResetCommand { get; private set; } + private void HideWatermarks() + { + ThrottleMin = ThrottleMax = 0; + RollMax = RollMin = 0; + YawMax = YawMin = 0; + PitchMax = PitchMin = 0; + AuxMax = AuxMin = 0; + ModeMax = ModeMin = 0; + } + public ICommand StartCalibrationCommand { get; private set; } public ICommand SaveCalibrationCommand { get; private set; } public ICommand CancelCalibrationCommand { get; private set; } @@ -183,8 +189,6 @@ namespace ArducopterConfigurator.PresentationModels public void handleLineOfText(string strRx) { PropertyHelper.PopulatePropsFromUpdate(this, _propsInUpdateOrder, strRx, false); - - } public event EventHandler sendTextToApm; diff --git a/Configurator/Configurator.Net/Program.cs b/Configurator/Configurator.Net/Program.cs index a5452efc7e..ef53a099e6 100644 --- a/Configurator/Configurator.Net/Program.cs +++ b/Configurator/Configurator.Net/Program.cs @@ -21,8 +21,8 @@ namespace ArducopterConfigurator var t = Type.GetType("Mono.Runtime"); IsMonoRuntime = (t != null); - var session = new CommsSession(); - //var session = new FakeCommsSession(); + //var session = new CommsSession(); + var session = new FakeCommsSession(); var mainVm = new MainVm(session); diff --git a/Configurator/Configurator.Net/Views/TransmitterChannelsView.Designer.cs b/Configurator/Configurator.Net/Views/TransmitterChannelsView.Designer.cs index b08bfa16a0..e97051ce75 100644 --- a/Configurator/Configurator.Net/Views/TransmitterChannelsView.Designer.cs +++ b/Configurator/Configurator.Net/Views/TransmitterChannelsView.Designer.cs @@ -49,12 +49,10 @@ this.linearIndicatorControl4 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.linearIndicatorControl5 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); this.linearIndicatorControl6 = new ArducopterConfigurator.Views.controls.LinearIndicatorControl(); - this.button1 = new System.Windows.Forms.Button(); this.label12 = new System.Windows.Forms.Label(); this.label11 = new System.Windows.Forms.Label(); this.button3 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); - this.label6 = new System.Windows.Forms.Label(); this.button4 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.TransmitterChannelsBindingSource)).BeginInit(); this.SuspendLayout(); @@ -93,10 +91,11 @@ // textBox6 // this.textBox6.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TransmitterChannelsBindingSource, "Yaw", true)); - this.textBox6.Location = new System.Drawing.Point(212, 26); + this.textBox6.Enabled = false; + this.textBox6.Location = new System.Drawing.Point(206, 26); this.textBox6.Name = "textBox6"; this.textBox6.ReadOnly = true; - this.textBox6.Size = new System.Drawing.Size(47, 20); + this.textBox6.Size = new System.Drawing.Size(35, 20); this.textBox6.TabIndex = 29; // // label3 @@ -111,43 +110,47 @@ // textBox1 // this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TransmitterChannelsBindingSource, "Roll", true)); - this.textBox1.Location = new System.Drawing.Point(212, 76); + this.textBox1.Enabled = false; + this.textBox1.Location = new System.Drawing.Point(206, 76); this.textBox1.Name = "textBox1"; this.textBox1.ReadOnly = true; - this.textBox1.Size = new System.Drawing.Size(47, 20); + this.textBox1.Size = new System.Drawing.Size(35, 20); this.textBox1.TabIndex = 32; // // textBox2 // this.textBox2.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TransmitterChannelsBindingSource, "Throttle", true)); - this.textBox2.Location = new System.Drawing.Point(7, 147); + this.textBox2.Enabled = false; + this.textBox2.Location = new System.Drawing.Point(13, 141); this.textBox2.Name = "textBox2"; this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(47, 20); + this.textBox2.Size = new System.Drawing.Size(35, 20); this.textBox2.TabIndex = 35; // // textBox3 // this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TransmitterChannelsBindingSource, "Pitch", true)); - this.textBox3.Location = new System.Drawing.Point(59, 147); + this.textBox3.Enabled = false; + this.textBox3.Location = new System.Drawing.Point(65, 141); this.textBox3.Name = "textBox3"; this.textBox3.ReadOnly = true; - this.textBox3.Size = new System.Drawing.Size(47, 20); + this.textBox3.Size = new System.Drawing.Size(35, 20); this.textBox3.TabIndex = 36; // // textBox4 // this.textBox4.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TransmitterChannelsBindingSource, "Mode", true)); - this.textBox4.Location = new System.Drawing.Point(143, 186); + this.textBox4.Enabled = false; + this.textBox4.Location = new System.Drawing.Point(118, 182); this.textBox4.Name = "textBox4"; this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(47, 20); + this.textBox4.Size = new System.Drawing.Size(35, 20); this.textBox4.TabIndex = 39; // // label4 // this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(156, 104); + this.label4.Location = new System.Drawing.Point(123, 106); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(34, 13); this.label4.TabIndex = 38; @@ -156,16 +159,17 @@ // textBox5 // this.textBox5.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.TransmitterChannelsBindingSource, "Aux", true)); - this.textBox5.Location = new System.Drawing.Point(203, 186); + this.textBox5.Enabled = false; + this.textBox5.Location = new System.Drawing.Point(176, 182); this.textBox5.Name = "textBox5"; this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(47, 20); + this.textBox5.Size = new System.Drawing.Size(35, 20); this.textBox5.TabIndex = 42; // // label5 // this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(209, 104); + this.label5.Location = new System.Drawing.Point(176, 106); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(25, 13); this.label5.TabIndex = 41; @@ -183,7 +187,7 @@ this.linearIndicatorControl3.DataBindings.Add(new System.Windows.Forms.Binding("MinWatermark", this.TransmitterChannelsBindingSource, "ThrottleMin", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.linearIndicatorControl3.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.TransmitterChannelsBindingSource, "Throttle", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.linearIndicatorControl3.IsVertical = true; - this.linearIndicatorControl3.Location = new System.Drawing.Point(16, 30); + this.linearIndicatorControl3.Location = new System.Drawing.Point(23, 30); this.linearIndicatorControl3.Max = 2000; this.linearIndicatorControl3.MaxWaterMark = 0; this.linearIndicatorControl3.Min = 1000; @@ -207,7 +211,7 @@ this.linearIndicatorControl1.DataBindings.Add(new System.Windows.Forms.Binding("MinWatermark", this.TransmitterChannelsBindingSource, "PitchMin", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.linearIndicatorControl1.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.TransmitterChannelsBindingSource, "Pitch", true)); this.linearIndicatorControl1.IsVertical = true; - this.linearIndicatorControl1.Location = new System.Drawing.Point(67, 30); + this.linearIndicatorControl1.Location = new System.Drawing.Point(75, 30); this.linearIndicatorControl1.Max = 2000; this.linearIndicatorControl1.MaxWaterMark = 0; this.linearIndicatorControl1.Min = 1000; @@ -231,7 +235,7 @@ this.linearIndicatorControl2.DataBindings.Add(new System.Windows.Forms.Binding("MinWatermark", this.TransmitterChannelsBindingSource, "ModeMin", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.linearIndicatorControl2.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.TransmitterChannelsBindingSource, "Mode", true)); this.linearIndicatorControl2.IsVertical = true; - this.linearIndicatorControl2.Location = new System.Drawing.Point(161, 123); + this.linearIndicatorControl2.Location = new System.Drawing.Point(128, 125); this.linearIndicatorControl2.Max = 2000; this.linearIndicatorControl2.MaxWaterMark = 0; this.linearIndicatorControl2.Min = 1000; @@ -255,7 +259,7 @@ this.linearIndicatorControl4.DataBindings.Add(new System.Windows.Forms.Binding("MinWatermark", this.TransmitterChannelsBindingSource, "AuxMin", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.linearIndicatorControl4.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.TransmitterChannelsBindingSource, "Aux", true)); this.linearIndicatorControl4.IsVertical = true; - this.linearIndicatorControl4.Location = new System.Drawing.Point(212, 123); + this.linearIndicatorControl4.Location = new System.Drawing.Point(186, 125); this.linearIndicatorControl4.Max = 2000; this.linearIndicatorControl4.MaxWaterMark = 0; this.linearIndicatorControl4.Min = 1000; @@ -279,7 +283,7 @@ this.linearIndicatorControl5.DataBindings.Add(new System.Windows.Forms.Binding("MinWatermark", this.TransmitterChannelsBindingSource, "RollMin", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.linearIndicatorControl5.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.TransmitterChannelsBindingSource, "Roll", true)); this.linearIndicatorControl5.IsVertical = false; - this.linearIndicatorControl5.Location = new System.Drawing.Point(106, 76); + this.linearIndicatorControl5.Location = new System.Drawing.Point(106, 79); this.linearIndicatorControl5.Max = 2000; this.linearIndicatorControl5.MaxWaterMark = 0; this.linearIndicatorControl5.Min = 1000; @@ -303,7 +307,7 @@ this.linearIndicatorControl6.DataBindings.Add(new System.Windows.Forms.Binding("MinWatermark", this.TransmitterChannelsBindingSource, "YawMin", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.linearIndicatorControl6.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.TransmitterChannelsBindingSource, "Yaw", true)); this.linearIndicatorControl6.IsVertical = false; - this.linearIndicatorControl6.Location = new System.Drawing.Point(106, 26); + this.linearIndicatorControl6.Location = new System.Drawing.Point(106, 29); this.linearIndicatorControl6.Max = 2000; this.linearIndicatorControl6.MaxWaterMark = 0; this.linearIndicatorControl6.Min = 1000; @@ -315,20 +319,10 @@ this.linearIndicatorControl6.Value = 1200; this.linearIndicatorControl6.WatermarkLineColor = System.Drawing.Color.Red; // - // button1 - // - this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.TransmitterChannelsBindingSource, "ResetCommand", true)); - this.button1.Location = new System.Drawing.Point(7, 174); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 49; - this.button1.Text = "Reset"; - this.button1.UseVisualStyleBackColor = true; - // // label12 // this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(304, 159); + this.label12.Location = new System.Drawing.Point(296, 60); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(84, 13); this.label12.TabIndex = 53; @@ -337,7 +331,7 @@ // label11 // this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(304, 130); + this.label11.Location = new System.Drawing.Point(296, 31); this.label11.Name = "label11"; this.label11.Size = new System.Drawing.Size(48, 13); this.label11.TabIndex = 52; @@ -347,7 +341,7 @@ // this.button3.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.TransmitterChannelsBindingSource, "StartCalibrationCommand", true)); this.button3.Image = ((System.Drawing.Image)(resources.GetObject("button3.Image"))); - this.button3.Location = new System.Drawing.Point(272, 123); + this.button3.Location = new System.Drawing.Point(264, 24); this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(26, 26); this.button3.TabIndex = 51; @@ -357,42 +351,31 @@ // this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.TransmitterChannelsBindingSource, "SaveCalibrationCommand", true)); this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image"))); - this.button2.Location = new System.Drawing.Point(272, 152); + this.button2.Location = new System.Drawing.Point(264, 53); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(26, 26); this.button2.TabIndex = 50; this.button2.UseVisualStyleBackColor = true; // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(304, 189); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(40, 13); - this.label6.TabIndex = 55; - this.label6.Text = "Cancel"; - // // button4 // this.button4.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.TransmitterChannelsBindingSource, "CancelCalibrationCommand", true)); - this.button4.Image = ((System.Drawing.Image)(resources.GetObject("button4.Image"))); - this.button4.Location = new System.Drawing.Point(272, 182); + this.button4.Location = new System.Drawing.Point(264, 83); this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(26, 26); + this.button4.Size = new System.Drawing.Size(59, 26); this.button4.TabIndex = 54; + this.button4.Text = "Cancel"; this.button4.UseVisualStyleBackColor = true; // // TransmitterChannelsView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.label6); this.Controls.Add(this.button4); this.Controls.Add(this.label12); this.Controls.Add(this.label11); this.Controls.Add(this.button3); this.Controls.Add(this.button2); - this.Controls.Add(this.button1); this.Controls.Add(this.linearIndicatorControl6); this.Controls.Add(this.linearIndicatorControl5); this.Controls.Add(this.linearIndicatorControl4); @@ -440,12 +423,10 @@ private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl4; private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl5; private ArducopterConfigurator.Views.controls.LinearIndicatorControl linearIndicatorControl6; - private System.Windows.Forms.Button button1; private System.Windows.Forms.Label label12; private System.Windows.Forms.Label label11; private System.Windows.Forms.Button button3; private System.Windows.Forms.Button button2; - private System.Windows.Forms.Label label6; private System.Windows.Forms.Button button4; } } diff --git a/Configurator/Configurator.Net/Views/TransmitterChannelsView.resx b/Configurator/Configurator.Net/Views/TransmitterChannelsView.resx index 6b19505ef3..e90ae9b559 100644 --- a/Configurator/Configurator.Net/Views/TransmitterChannelsView.resx +++ b/Configurator/Configurator.Net/Views/TransmitterChannelsView.resx @@ -123,140 +123,31 @@ - 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 - vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L - Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA - bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z - llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW - ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s - xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6 - eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw - YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR - XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm - WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl - xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2 - dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8 - V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za - Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v - Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb - PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/ - 0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h - /HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr - XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS - fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+ - tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/ - 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALDAAACwwBP0AiyAAAA11JREFUOE8tkYtTVHUU - x+8fU5PCUjjlMDT42JB4qcSjoumxk00FG6USapngOrvuDg+BSlYmZQKFxWZyyiBRHBChKMCw5e6CzYag - su+9+4gWVxb49NulO/d353vO/X7P+Z7zk87/uICm7nvKdcM0X/wV0yWZxss2mjplmnptNPdYOdM9TUOP - wL3zGDrsFNf+wgHdBB39i0hv1o2g7fRwuHueGP8/q4/hSQKvsyq+ImJD4LggxAU+1D3LwU4Hr33+A9Le - oz9RdcVNlcXJCmtJycamVgjjIpNUCyTUIsfGKtre+2gtS5Qdv4FUeqyP97vmqLgYSDZ94P2XwZkAN60x - rt2L0C+HGbaLnC3EootkQY1wW9n7kPzqfqTiqhtUfuOi8oJDdIiKDrGkzc0RErGQxJ8kUNIJ6zHe6/ib - D8z32X9sAKnok2E0ZheadgdrwuJfnjhX70W5Lke4PhukzxblZ1lhdNrDgivGmqj3zrcPeLdlnvxPryCp - K76j+JxM+dkZUX098W52E51Y+ydpOWFm8yR2Eqf47BQfti6Sre1BytZcZl/rAiUtM1y1K4K2klxUcmEC - r4jlJadhmaiYbcD+mDcaZygxybx0QNxCztuXeNk4TaHBwT6TlULdHUrFz4LTMjkmO4UNVor0s+QZJilu - tJNjnCS3aY699XfY+VY3UlbZBfbofydXP4VakLKFUH1yFnWtzO5TVgp0IxTUTZCnnyD/5G/k1N0lq/Yu - ebpJdrzehZRZ1kXWF1Pk1/wpROOMzM2zrISIB7x4gg9ZCiooyiPcvgh/yH627DpNYa0N9WdTZLzSiZRW - 0E7mUSsvHpHZXj2KKxwi/VUL6fst+PwhQoEois9JNODE6w6gUhvYXjNGxvEJnk8UyCz5igztGNuqx0mr - GScYdvJ0mYWUcguegAMlGEYJLeFVgrgDYZ5RN/Ls4VukHxlFlWtGOnWmj5S8Zl74aAjVx7cJesNsKe0i - teg8YW+EZf8KTk8In+LC5/Og2tHCtkMjgiv42V8jifuRdK23Sd3VhkorCvjcOMMBYd9FRHR1ej34I4/w - B9yERLw180tSBO+pipuk7hEOEgUS50STsKU+iPHcKCbzLYzmQRrahzC1DVLfNkR9+wCGtjHSdurZmlXP - c7uNnGi8xn9S4RHZGLiTUQAAAABJRU5ErkJggg== - - - - - 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 - c7uNnGi8xn9S4RHZGLiTUQAAAABJRU5ErkJggg== + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCwAA + CwsBbQSEtwAAA25JREFUOE8tk21QVHUUxv9LmtOXZupL35ucFJbCSWMofNmQeFOJl8omi6mmgo1SCbVM + EGdxdxALKkEmbYKitT44ZZgoDorQUIBgy7JgQwgq+753X6JdF5bl13+X7tz/nXPOfZ7zPOfcuapTP0/z + 28iwmE94WDz96Coxr3pQrFipEqowQqxSiYSlqICoiKruFysSHhChUFgMz/jEQ/etFM+uf0SIV6t70LY6 + 2Ns+RZj/r4V7MB+LoyzIp8xYknFEAiIy3tM+zu7WSV76+CfEtv2/UH7WTrnRSojFOGVpmSuJEVmJs2Uk + 2bLG0gLaM7fQGmcpPngJUXSgg7fbJij91hMXve38l65RD5dNYS7cDHDe7OeKRdbGfMzYiDcskW7Lztwh + p+I8oqD8EmVf2Sg7PSkVglIhHLe5PEIsl5TIfCyKOyEa5q2v/+ad5lvsONCJyP/gCiXNNkpaJlmUFv9y + RDh3M8hFc4CL4146xoL8alboHXEwbQuzKPu9/s1t3miYIufDswhN6Y8UnDSz88So7B6N3ctqUonFf+KW + Y2aWT2wnEQpODPFu4wwZ2u8RGSU/sL1xmsKGUc5ZFAkLxRcVX5iMQ3J58WmYIyhn67Tc45X6UQoNZp57 + U36FzNe+43n9CHm1k2w3mMiruU6RfJl71EymwULeMRP5unGyawcpqLeQqR8k6/gE2+qus2lXOyK9+DRb + dX+QpRtCI0EZkqg5PI6mysyWIyZya3rIrR4gWzdAzuHfyay+QXrVDbJrBtn4chsirbiN9E+GyKn8U5L6 + 6ZmYYk7xEfE4cXjvMOtVUJS72F0Bhs1u1mw+Sl7VGJqPhkh9oRWRnNtC2n4Tz+wzs6GiF5vfR8qLRlJ2 + GHG5ffg8QRSXlaDHitPuQa2pZUNlH6kHB3gq1iCt8AtStX2sq+gnubIfr9/K6mIjiTuNODyTKF4/im8W + p+LF7vHzuKaeJ/ZeJWVfL+qsZsSRTztIzP6M9e91o37/Gl6nnzVFbSTln8LvDDDnDmF1+HApNlwuB+qN + Dazb0yOxEp/xJfJPQ9Q0XiNpcxNqrWzgsmP1e6R9GwGpanU6cAfu4vbY8cl8bdrnJErcY6WXSdoqHcQa + xM6h49KWZjf6k70Ymq+ib+7iWEs3hqYu6pq6qWvppLapj+RNOtam1/HkFj2H6i/wHyZ1+UcXoDkfAAAA + AElFTkSuQmCC \ No newline at end of file