diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json index 070b79f..724d7db 100644 --- a/.vs/VSWorkspaceState.json +++ b/.vs/VSWorkspaceState.json @@ -1,7 +1,8 @@ { "ExpandedNodes": [ - "" + "", + "\\YD10测试机" ], - "SelectedNode": "\\C:\\Users\\Administrator\\Source\\Repos\\YD10-YD07k_SMT", + "SelectedNode": "\\YD10测试机\\Form3.cs", "PreviewInSolutionExplorer": false } \ No newline at end of file diff --git a/.vs/YD10测试机/v16/.suo b/.vs/YD10测试机/v16/.suo index f8f168c..0a4044d 100644 Binary files a/.vs/YD10测试机/v16/.suo and b/.vs/YD10测试机/v16/.suo differ diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index bd0bcd1..bb886a7 100644 Binary files a/.vs/slnx.sqlite and b/.vs/slnx.sqlite differ diff --git a/YD10测试机/BleCore.cs b/YD10测试机/BleCore.cs index 05f3bde..8696004 100644 --- a/YD10测试机/BleCore.cs +++ b/YD10测试机/BleCore.cs @@ -1,20 +1,25 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Threading.Tasks; + using Windows.Devices.Bluetooth; +using Windows.Devices.Bluetooth.Advertisement; using Windows.Devices.Bluetooth.GenericAttributeProfile; using Windows.Devices.Enumeration; +using Windows.Foundation; using Windows.Security.Cryptography; -using System.Diagnostics; -namespace BluetoothLibrary + +namespace Bluetoolth { + public enum BlueStatus { - DisConnected, // 未连接 - Connecting, // 正在连接 - Connected // 已连接 + DisConnected, //未连接 + Connecting, //正在连接 + Connected //已连接 }; public enum MsgType @@ -27,171 +32,709 @@ namespace BluetoothLibrary public class BleCore { - private BluetoothLEDevice _currentDevice; - private GattDeviceService _currentService; - private GattCharacteristic _writeCharacteristic; - private GattCharacteristic _notifyCharacteristic; - private List _discoveredDevices = new List(); - public event Action MessageChanged; + private bool asyncLock = false; + + /// + /// 搜索蓝牙设备对象 + /// + private DeviceWatcher deviceWatcher; + + /// + /// 当前连接的服务 + /// + public GattDeviceService CurrentService { get; set; } + + /// + /// 当前连接的蓝牙设备 + /// + public BluetoothLEDevice CurrentDevice { get; set; } + + /// + /// 写特征对象 + /// + public GattCharacteristic CurrentWriteCharacteristic { get; set; } + + /// + /// 写名称特征对象 + /// + public GattCharacteristic CurrentNameCharacteristic { get; set; } + + /// + /// 通知特征对象 + /// + public GattCharacteristic CurrentNotifyCharacteristic { get; set; } + + /// + /// 特性通知类型通知启用 + /// + private const GattClientCharacteristicConfigurationDescriptorValue + CHARACTERSITIC_NOTIFICATION_TYPE = GattClientCharacteristicConfigurationDescriptorValue.Notify; + + /// + /// 存储检测到的设备 + /// + private List DevicesList = new List(); + + /// + /// 定义搜索蓝牙设备委托 + /// + /// + /// + public delegate void DevicewatcherChangedEvent(MsgType type, BluetoothLEDevice bluetoothLEDevice); - public async Task StartDeviceDiscoveryAsync() + /// + /// 搜索蓝牙事件 + /// + public event DevicewatcherChangedEvent DevicewatcherChanged; + + /// + /// 获取服务委托 + /// + /// + public delegate void GattDeviceServiceAddedEvent(GattDeviceService gattDeviceService); + + /// + /// 获取服务事件 + /// + public event GattDeviceServiceAddedEvent GattDeviceServiceAdded; + + /// + /// 获取特征委托 + /// + /// + public delegate void CharacteristicAddedEvent(GattCharacteristic gattCharacteristic); + + /// + /// 获取特征事件 + /// + public event CharacteristicAddedEvent CharacteristicAdded; + + /// + /// 提示信息委托 + /// + /// + /// + /// + public delegate void MessageChangedEvent(MsgType type, string message, byte[] data = null); + + /// + /// 提示信息事件 + /// + public event MessageChangedEvent MessageChanged; + + /// + /// 当前连接蓝牙的Mac + /// + private string CurrentDeviceMAC { get; set; } + + public BleCore() { - try - { - string selector = BluetoothLEDevice.GetDeviceSelectorFromPairingState(false); - var devices = await DeviceInformation.FindAllAsync(selector); - foreach (var deviceInfo in devices) + } + + + /// + /// 搜索蓝牙设备 方法1 + /// + public void StartBleDevicewatcher_1() + { + + string[] requestedProperties = { + "System.Devices.Aep.DeviceAddress", + "System.Devices.Aep.IsConnected", + "System.Devices.Aep.Bluetooth.Le.IsConnectable" , + "System.Devices.Aep.SignalStrength", + "System.Devices.Aep.IsPresent" + }; + string aqsAllBluetoothLEDevices = "(System.Devices.Aep.ProtocolId:=\"{bb7bb05e-5972-42b5-94fc-76eaa7084d49}\")"; + + string Selector = "System.Devices.Aep.ProtocolId:=\"{bb7bb05e-5972-42b5-94fc-76eaa7084d49}\""; + string selector = "(" + Selector + ")" + " AND (System.Devices.Aep.CanPair:=System.StructuredQueryType.Boolean#True OR System.Devices.Aep.IsPaired:=System.StructuredQueryType.Boolean#True)"; + + + this.deviceWatcher = + DeviceInformation.CreateWatcher( + // aqsAllBluetoothLEDevices, + + // BluetoothLEDevice.GetDeviceSelectorFromPairingState(false), + selector, + requestedProperties, + DeviceInformationKind.AssociationEndpoint); + + //在监控之前注册事件 + this.deviceWatcher.Added += DeviceWatcher_Added; + this.deviceWatcher.Stopped += DeviceWatcher_Stopped; + this.deviceWatcher.Updated += DeviceWatcher_Updated; ; + this.deviceWatcher.Start(); + string msg = "自动发现设备中.."; + this.MessageChanged(MsgType.NotifyTxt, msg); + } + + + + BluetoothLEAdvertisementWatcher watcher; + /// + /// 搜索蓝牙设备 方法2 + /// + public void StartBleDevicewatcher() + { + watcher = new BluetoothLEAdvertisementWatcher(); + + watcher.ScanningMode = BluetoothLEScanningMode.Active; + + // only activate the watcher when we're recieving values >= -80 + watcher.SignalStrengthFilter.InRangeThresholdInDBm = -80; + + // stop watching if the value drops below -90 (user walked away) + watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -90; + + // register callback for when we see an advertisements + watcher.Received += OnAdvertisementReceived; + watcher.Stopped += Watcher_Stopped; + + // wait 5 seconds to make sure the device is really out of range + watcher.SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(5000); + watcher.SignalStrengthFilter.SamplingInterval = TimeSpan.FromMilliseconds(2000); + + // starting watching for advertisements + watcher.Start(); + string msg = "自动发现设备中.."; + + // this.MessageChanged(MsgType.NotifyTxt, msg); + } + + private void Watcher_Stopped(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementWatcherStoppedEventArgs args) + { + DevicesList.Clear(); + string msg = "自动发现设备停止"; + this.MessageChanged(MsgType.NotifyTxt, msg); + } + + private void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs) + { + BluetoothLEDevice.FromBluetoothAddressAsync(eventArgs.BluetoothAddress).Completed = async (asyncInfo, asyncStatus) => + { + if (asyncStatus == AsyncStatus.Completed) { - var device = await BluetoothLEDevice.FromIdAsync(deviceInfo.Id); - if (device != null && !_discoveredDevices.Any(d => d.DeviceId == device.DeviceId)) + if (asyncInfo.GetResults() == null) { - _discoveredDevices.Add(device); - OnMessageChanged(MsgType.BleDevice, $"Discovered device: {device.Name}", null); + //this.MessAgeChanged(MsgType.NotifyTxt, "没有得到结果集"); } + else + { + BluetoothLEDevice currentDevice = asyncInfo.GetResults(); + if (currentDevice.Name.StartsWith("Bluetooth")) + { + return; + } + + Boolean contain = false; + foreach (string deviceId in DevicesList)//过滤重复的设备 + { + if (deviceId == currentDevice.DeviceId) + { + contain = true; break; + } + } + + string tmpMAC = ""; + byte[] _Bytes1 = BitConverter.GetBytes(currentDevice.BluetoothAddress); + Array.Reverse(_Bytes1); + + tmpMAC = BitConverter.ToString(_Bytes1, 2, 6).Replace('-', ':').ToLower(); + + if (!contain) + { + this.DevicesList.Add(currentDevice.DeviceId); + this.MessageChanged(MsgType.NotifyTxt, "发现设备:" + currentDevice.Name + " address:" + tmpMAC); + this.DevicewatcherChanged(MsgType.BleDevice, currentDevice); + + // currentDevice = null; + } + /* + if (CurrentDevice == null && CurrentDeviceMAC == tmpMAC) + {//自动重连 + CurrentDevice = currentDevice; + + //获取服务 + this.CurrentDevice.GetGattServicesAsync().Completed = (asynServe, asyncStatu) => + { + if (asyncStatu == AsyncStatus.Completed) + { + var sevices = asynServe.GetResults().Services; + foreach (GattDeviceService ser in sevices) + { + if (ser.Uuid.ToString() == Utility.UUID_SERVER) + { + this.CurrentService = ser; + break; + } + + } + } + else + { + this.CurrentDevice = null; + } + }; + + if (this.CurrentService != null) + { + //获取特征值 + this.CurrentService.GetCharacteristicsAsync().Completed = (asynChara, asyncStatu) => + { + if (asyncStatu == AsyncStatus.Completed) + { + var chara = asynChara.GetResults().Characteristics; + foreach (GattCharacteristic c in chara) + { + if (c.Uuid.ToString() == Utility.UUID_Name) + { + this.CurrentNameCharacteristic = c; + break; + } + } + } + }; + } + else + {//删除设备 + this.CurrentDevice = null; + this.CurrentService = null; + return; + } + + + if (this.CurrentNameCharacteristic != null) + { + string msg = "已重连设备连接设备<" + this.CurrentDeviceMAC + "> .."; + this.MessageChanged(MsgType.NotifyTxt, msg); + } + + } + + */ + } + } - } - catch (Exception ex) - { - OnMessageChanged(MsgType.NotifyTxt, $"Error during device discovery: {ex.Message}", null); - } + }; + } + + + + /// + /// 停止搜索 + /// + public void StopBleDeviceWatcher() + { + if (deviceWatcher != null) + this.deviceWatcher.Stop(); + + if (watcher != null && watcher.Status == BluetoothLEAdvertisementWatcherStatus.Started) + watcher.Stop(); } - public async Task ConnectToDeviceAsync(string deviceId) + /// + /// 获取发现的蓝牙设备 + /// + /// + /// + private void DeviceWatcher_Added(DeviceWatcher sender, DeviceInformation args) { - try + this.MessageChanged(MsgType.NotifyTxt, "发现设备:" + args.Id); + this.Matching(args.Id, args); + } + + private void DeviceWatcher_Updated(DeviceWatcher sender, DeviceInformationUpdate args) + { + + } + + /// + /// 停止搜索蓝牙设备 + /// + /// + /// + private void DeviceWatcher_Stopped(DeviceWatcher sender, object args) + { + string msg = "自动发现设备停止"; + this.MessageChanged(MsgType.NotifyTxt, msg); + } + + + /// + /// 匹配 + /// + /// + public void StartMatching(BluetoothLEDevice device) + { + // Dispose(false); + this.CurrentDevice = device; + } + + /// + /// 获取蓝牙服务 + /// + public async void FindService() + { + /*var gattServices = this.CurrentDevice.GattServices; + foreach(GattDeviceService ser in gattServices) { - _currentDevice = await BluetoothLEDevice.FromIdAsync(deviceId); - if (_currentDevice != null) - { - _currentDevice.ConnectionStatusChanged += OnConnectionStatusChanged; - OnMessageChanged(MsgType.NotifyTxt, $"Connecting to device: {_currentDevice.Name}", null); - await DiscoverServicesAsync(); - } - else + this.GattDeviceServiceAdded(ser); + }*/ + + this.CurrentDevice.GetGattServicesAsync().Completed = async (asyncInfo, asyncStatu) => + { + if (asyncStatu == AsyncStatus.Completed) { - OnMessageChanged(MsgType.NotifyTxt, "Device not found", null); + var sevices = asyncInfo.GetResults().Services; + foreach (GattDeviceService ser in sevices) + { + this.GattDeviceServiceAdded(ser); + // FindCharacteristic(ser); + } } - } - catch (Exception ex) - { - OnMessageChanged(MsgType.NotifyTxt, $"Error connecting to device: {ex.Message}", null); - } + }; } - private async Task DiscoverServicesAsync() + + public async void FindCharacteristic(GattDeviceService gattDeviceService) { - try + /* this.CurrentService = gattDeviceService; + foreach(var c in gattDeviceService.GetAllCharacteristics()) + { + this.CharacteristicAdded(c); + }*/ + + + gattDeviceService.GetCharacteristicsAsync().Completed = async (asyncInfo, asyncStatu) => { - var services = await _currentDevice.GetGattServicesAsync(); - foreach (var service in services.Services) + if (asyncStatu == AsyncStatus.Completed) { - if (service.Uuid.ToString() == "your-service-uuid-here") // Replace with your service UUID + var chara = asyncInfo.GetResults().Characteristics; + foreach (GattCharacteristic c in chara) { - _currentService = service; - await DiscoverCharacteristicsAsync(); - break; + this.CharacteristicAdded(c); } } + }; + } + + + /// + /// 获取操作 + /// + /// + /// + public async Task SetOpteron(GattCharacteristic gattCharacteristic) + { + if (gattCharacteristic.CharacteristicProperties == GattCharacteristicProperties.WriteWithoutResponse) + { + this.CurrentWriteCharacteristic = gattCharacteristic; } - catch (Exception ex) + if (gattCharacteristic.CharacteristicProperties == GattCharacteristicProperties.Notify) { - OnMessageChanged(MsgType.NotifyTxt, $"Error discovering services: {ex.Message}", null); + this.CurrentNotifyCharacteristic = gattCharacteristic; + this.CurrentNotifyCharacteristic.ProtectionLevel = GattProtectionLevel.Plain; + this.CurrentNotifyCharacteristic.ValueChanged += Characteristic_ValueChanged; + await this.EnableNotifications(CurrentNotifyCharacteristic); } + + + if (gattCharacteristic.CharacteristicProperties == (GattCharacteristicProperties.Read | GattCharacteristicProperties.Write)) + { + this.CurrentNameCharacteristic = gattCharacteristic; + } + + if (!IsConnect) + this.Connect(); } - private async Task DiscoverCharacteristicsAsync() + bool IsConnect = false; + + private async Task Connect() { - try + IsConnect = true; + byte[] _Bytes1 = BitConverter.GetBytes(this.CurrentDevice.BluetoothAddress); + Array.Reverse(_Bytes1); + this.CurrentDeviceMAC = BitConverter.ToString(_Bytes1, 2, 6).Replace('-', ':').ToLower(); + + string msg = "正在连接设备<" + this.CurrentDeviceMAC + "> .."; + this.MessageChanged(MsgType.NotifyTxt, msg); + this.CurrentDevice.ConnectionStatusChanged += CurrentDevice_ConnectionStatusChanged; + } + + private void CurrentDevice_ConnectionStatusChanged(BluetoothLEDevice sender, object args) + { + if (sender.ConnectionStatus == BluetoothConnectionStatus.Disconnected && + CurrentDeviceMAC != null) { - var characteristics = await _currentService.GetCharacteristicsAsync(); - foreach (var characteristic in characteristics.Characteristics) + this.DevicesList.Remove(sender.DeviceId); + + string msg = "设备已断开"; + MessageChanged(MsgType.NotifyTxt, msg); + + + // if(!asyncLock) { - if (characteristic.Uuid.ToString() == "your-write-uuid-here") // Replace with your write UUID - { - _writeCharacteristic = characteristic; - } - else if (characteristic.Uuid.ToString() == "your-notify-uuid-here") // Replace with your notify UUID - { - _notifyCharacteristic = characteristic; - await EnableNotificationsAsync(characteristic); - } + asyncLock = true; + this.CurrentDevice?.Dispose(); + this.CurrentDevice = null; + + this.CurrentNotifyCharacteristic = null; + this.CurrentWriteCharacteristic = null; + this.CurrentNameCharacteristic = null; + // SelectDeviceFromIdAsync(CurrentDeviceMAC); } } - catch (Exception ex) + else { - OnMessageChanged(MsgType.NotifyTxt, $"Error discovering characteristics: {ex.Message}", null); + string msg = "设备已连接"; + MessageChanged(MsgType.NotifyTxt, msg); } } - private async Task EnableNotificationsAsync(GattCharacteristic characteristic) + /// + /// 搜索到的蓝牙设备 + /// + /// + /// + private async Task Matching(string id, DeviceInformation args = null) { + try { - await characteristic.WriteClientCharacteristicConfigurationDescriptorAsync( - GattClientCharacteristicConfigurationDescriptorValue.Notify); - characteristic.ValueChanged += OnCharacteristicValueChanged; - OnMessageChanged(MsgType.NotifyTxt, "Notifications enabled", null); + BluetoothLEDevice.FromIdAsync(id).Completed = async (asyncInfo, asyncStatus) => + { + if (asyncStatus == AsyncStatus.Completed) + { + BluetoothLEDevice bleDevice = asyncInfo.GetResults(); + if (bleDevice.Name.StartsWith("Bluetooth")) + { + return; + } + if (CurrentDeviceMAC != null) + {//自动重连 + CurrentDevice = bleDevice; + + //获取服务 + this.CurrentDevice.GetGattServicesAsync().Completed = async (asynServe, asyncStatu) => + { + if (asyncStatu == AsyncStatus.Completed) + { + var sevices = asynServe.GetResults().Services; + foreach (GattDeviceService ser in sevices) + { + if (ser.Uuid.ToString() == Utility.UUID_SERVER) + { + this.CurrentService = ser; + break; + } + + } + } + }; + + if (this.CurrentService != null) + { + //获取特征值 + this.CurrentService.GetCharacteristicsAsync().Completed = async (asynChara, asyncStatu) => + { + if (asyncStatu == AsyncStatus.Completed) + { + var chara = asynChara.GetResults().Characteristics; + foreach (GattCharacteristic c in chara) + { + if (c.Uuid.ToString() == Utility.UUID_Name) + { + this.CurrentNameCharacteristic = c; + break; + } + } + } + }; + } + + + if (this.CurrentNameCharacteristic != null) + { + string msg = "已重连设备连接设备<" + this.CurrentDeviceMAC + "> .."; + this.MessageChanged(MsgType.NotifyTxt, msg); + } + + } + + string tmp = this.DevicesList.Where(p => p == bleDevice.DeviceId).FirstOrDefault(); + + + if (tmp == null) + {//没有添加过 + + this.DevicesList.Add(bleDevice.DeviceId); + + this.DevicewatcherChanged(MsgType.BleDevice, bleDevice); + bleDevice = null; + } + } + }; } - catch (Exception ex) + catch (Exception e) { - OnMessageChanged(MsgType.NotifyTxt, $"Error enabling notifications: {ex.Message}", null); + string msg = "没有发现设备" + e.ToString(); + this.MessageChanged(MsgType.NotifyTxt, msg); + this.StopBleDeviceWatcher(); } } - private void OnCharacteristicValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args) + public void DisConnect() { - byte[] data; - CryptographicBuffer.CopyToByteArray(args.CharacteristicValue, out data); - OnMessageChanged(MsgType.BleRecData, "Data received", data); + /* GattSession.FromDeviceIdAsync(CurrentDevice.BluetoothDeviceId).Completed = async (asyncInfo, asyncStatus) => + { + if (asyncStatus == AsyncStatus.Completed) + { + GattSession session = asyncInfo.GetResults(); + if(session != null) + { + session.Dispose(); + this.MessageChanged(MsgType.NotifyTxt, "主动断开session"); + Dispose(); + } + } + };*/ + + Dispose(); } - public async Task WriteDataAsync(byte[] data) + + /// + /// 主动断开连接 + /// + public void Dispose(bool IsTip = true) { - try + IsConnect = false; + CurrentDeviceMAC = null; + + CurrentService?.Dispose(); + + if (CurrentDevice != null) + CurrentDevice.ConnectionStatusChanged -= CurrentDevice_ConnectionStatusChanged; + + CurrentDevice?.Dispose(); + + CurrentDevice = null; + CurrentService = null; + + + CurrentNameCharacteristic = null; + CurrentWriteCharacteristic = null; + CurrentNotifyCharacteristic = null; + // if(IsTip) + this.MessageChanged(MsgType.NotifyTxt, "主动断开连接"); + // else + {//清除蓝牙列表 + this.DevicesList.Clear(); + } + } + + /// + /// 按MAC地址直接组装设备ID查找设备 + /// + /// + /// + public async Task SelectDeviceFromIdAsync(string MAC) + { + CurrentDeviceMAC = MAC; + CurrentDevice = null; + + BluetoothAdapter.GetDefaultAsync().Completed = async (asyncInfo, asyncStatus) => { - if (_writeCharacteristic != null) + if (asyncStatus == AsyncStatus.Completed) { - await _writeCharacteristic.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data)); - OnMessageChanged(MsgType.BleSendData, "Data sent", data); + BluetoothAdapter bluetoothAdapter = asyncInfo.GetResults(); + // ulong 转为byte数组 + byte[] _Bytes1 = BitConverter.GetBytes(bluetoothAdapter.BluetoothAddress); + Array.Reverse(_Bytes1); + string macAddress = BitConverter.ToString(_Bytes1, 2, 6).Replace('-', ':').ToLower(); + string Id = "BluetoothLe#BluetoothLe" + macAddress + "-" + MAC; + + await Matching(Id); } - else + }; + } + + + + /// + /// 设置特征对象为接收通知对象 + /// + /// + /// + public async Task EnableNotifications(GattCharacteristic characteristic) + { + string msg = "收通知对象=" + CurrentDevice.ConnectionStatus; + this.MessageChanged(MsgType.NotifyTxt, msg); + + characteristic.WriteClientCharacteristicConfigurationDescriptorAsync(CHARACTERSITIC_NOTIFICATION_TYPE).Completed = async (asyncInfo, asyncStatus) => + { + if (asyncStatus == AsyncStatus.Completed) { - OnMessageChanged(MsgType.NotifyTxt, "Write characteristic not found", null); + GattCommunicationStatus status = asyncInfo.GetResults(); + if (status == GattCommunicationStatus.Unreachable) + { + msg = "设备不可用"; + this.MessageChanged(MsgType.NotifyTxt, msg); + if (CurrentNotifyCharacteristic != null && !asyncLock) + { + await this.EnableNotifications(CurrentNotifyCharacteristic); + } + } + asyncLock = false; + msg = "设备连接状态" + status; + this.MessageChanged(MsgType.NotifyTxt, msg); } - } - catch (Exception ex) - { - OnMessageChanged(MsgType.NotifyTxt, $"Error writing data: {ex.Message}", null); - } + }; } - private void OnConnectionStatusChanged(BluetoothLEDevice sender, object args) + /// + /// 接受到蓝牙数据 + /// + private void Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args) { - if (sender.ConnectionStatus == BluetoothConnectionStatus.Disconnected) - { - OnMessageChanged(MsgType.NotifyTxt, "Device disconnected", null); - } - else - { - OnMessageChanged(MsgType.NotifyTxt, "Device connected", null); - } + byte[] data; + CryptographicBuffer.CopyToByteArray(args.CharacteristicValue, out data); + string str = BitConverter.ToString(data); + this.MessageChanged(MsgType.BleRecData, str, data); } - private void OnMessageChanged(MsgType type, string message, byte[] data) + /// + /// 发送数据接口 + /// + /// + public async Task Write(byte[] data) { - MessageChanged?.Invoke(type, message, data); + if (CurrentWriteCharacteristic != null) + { + CurrentWriteCharacteristic.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data), GattWriteOption.WriteWithResponse); + string str = "发送数据:" + BitConverter.ToString(data); + this.MessageChanged(MsgType.BleSendData, str, data); + } + } - public void Dispose() + /// + /// 发送数据接口 + /// + /// + public async Task WriteName(byte[] data) { - // 不需要调用 Dispose 方法 - _currentDevice?.Dispose(); // 如果 BluetoothLEDevice 实现了 IDisposable,则可以调用 Dispose - _currentService = null; - _writeCharacteristic = null; - _notifyCharacteristic = null; - _discoveredDevices.Clear(); + if (CurrentNameCharacteristic != null) + { + CurrentNameCharacteristic.WriteValueAsync(CryptographicBuffer.CreateFromByteArray(data), GattWriteOption.WriteWithResponse); + string str = "发送数据:" + BitConverter.ToString(data); + this.MessageChanged(MsgType.BleSendData, str, data); + } } + } -} \ No newline at end of file +} diff --git a/YD10测试机/Form1.Designer.cs b/YD10测试机/Form1.Designer.cs index 4f7abb3..99dea01 100644 --- a/YD10测试机/Form1.Designer.cs +++ b/YD10测试机/Form1.Designer.cs @@ -429,14 +429,14 @@ namespace YD10测试机 // yD10ToolStripMenuItem // this.yD10ToolStripMenuItem.Name = "yD10ToolStripMenuItem"; - this.yD10ToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.yD10ToolStripMenuItem.Size = new System.Drawing.Size(122, 24); this.yD10ToolStripMenuItem.Text = "YD10"; this.yD10ToolStripMenuItem.Click += new System.EventHandler(this.yD10ToolStripMenuItem_Click); // // yD07KToolStripMenuItem // this.yD07KToolStripMenuItem.Name = "yD07KToolStripMenuItem"; - this.yD07KToolStripMenuItem.Size = new System.Drawing.Size(180, 24); + this.yD07KToolStripMenuItem.Size = new System.Drawing.Size(122, 24); this.yD07KToolStripMenuItem.Text = "YD07K"; this.yD07KToolStripMenuItem.Click += new System.EventHandler(this.yD07KToolStripMenuItem_Click); // @@ -508,6 +508,7 @@ namespace YD10测试机 this.textBox3.Name = "textBox3"; this.textBox3.Size = new System.Drawing.Size(355, 21); this.textBox3.TabIndex = 67; + this.textBox3.TextChanged += new System.EventHandler(this.textBox3_TextChanged); // // label9 // @@ -556,8 +557,9 @@ namespace YD10测试机 this.Controls.Add(this.menuStrip1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "Form1"; - this.Text = "YD10上位机测试V2.0"; + this.Text = "YD10上位机测试V2.1"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed); this.Load += new System.EventHandler(this.Form1_Load); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).EndInit(); diff --git a/YD10测试机/Form1.cs b/YD10测试机/Form1.cs index 7f122ce..9d9641c 100644 --- a/YD10测试机/Form1.cs +++ b/YD10测试机/Form1.cs @@ -74,40 +74,18 @@ namespace YD10测试机 } + int flag_yd07close = 0; + public void ShowMessage(bool message1, bool message2, bool message3,string printname,string znum) + { + flag_yd07close = 1; + yd_ble = message1; + checkBox2.Checked = message2; + checkBox3.Checked = message3; + comboBox1.Text = printname; + comboBox2.Text = znum; + } private void Form1_Load(object sender, EventArgs e) { - cmbBox_Port_Update(); - my_set(); - read(); - read_set(); - GetPrinter(); - - // 添加第四列(按钮列) - DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn - { - Name = "ButtonColumn", // 列的名称 - HeaderText = "操作", // 列头显示的文本 - Text = "写", // 按钮显示的文本 - AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells, - UseColumnTextForButtonValue = true, // 将按钮文本设置为列的值 - DefaultCellStyle = new DataGridViewCellStyle - { - Font = new Font("宋体", 9), // 设置按钮字体为 Arial,大小为 12,加粗 - } - }; - - dataGridView2.Columns.Add(buttonColumn); - - // 注册按钮点击事件 - dataGridView2.CellClick += DataGridView2_CellClick; - //set_ready(); - ServicePointManager.ServerCertificateValidationCallback = (obj, certificate, chain, sslPolicyErrors) => true; - this.Resize += new EventHandler(Form1_Resize);//窗体调整大小时引发事件 - X = this.Width;//获取窗体的宽度 - Y = this.Height;//获取窗体的高度 - setTag(this);//调用方法 - - if (checkBox3.Checked) { index = this.dataGridView2.Rows.Add(); @@ -146,6 +124,58 @@ namespace YD10测试机 dataGridView2.Rows[index].Cells[0].Value = "物料编码"; dataGridView2.Rows[index].Cells[1].Value = writeConfig[12].threshold; } + read_set(); + if (che_kind == "YD07k") + { + if (serialPort.IsOpen) + { + _yd_disconnet(); + serialPort.Close(); + }//关闭串口 + + // 创建 Form3 的实例 + Form3 form3 = new Form3(this); + + // 隐藏 Form1 + this.Hide(); + + + // 显示 Form3 + form3.ShowDialog(); + return; + } + //timer1.Enabled = true; + //timer2.Enabled = true; + cmbBox_Port_Update(); + my_set(); + read(); + + GetPrinter(); + + // 添加第四列(按钮列) + DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn + { + Name = "ButtonColumn", // 列的名称 + HeaderText = "操作", // 列头显示的文本 + Text = "写", // 按钮显示的文本 + AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells, + UseColumnTextForButtonValue = true, // 将按钮文本设置为列的值 + DefaultCellStyle = new DataGridViewCellStyle + { + Font = new Font("宋体", 9), // 设置按钮字体为 Arial,大小为 12,加粗 + } + }; + + dataGridView2.Columns.Add(buttonColumn); + + // 注册按钮点击事件 + dataGridView2.CellClick += DataGridView2_CellClick; + //set_ready(); + ServicePointManager.ServerCertificateValidationCallback = (obj, certificate, chain, sslPolicyErrors) => true; + this.Resize += new EventHandler(Form1_Resize);//窗体调整大小时引发事件 + X = this.Width;//获取窗体的宽度 + Y = this.Height;//获取窗体的高度 + setTag(this);//调用方法 } @@ -221,10 +251,12 @@ namespace YD10测试机 } } - + bool yd_ble = false; + string che_kind = ""; private void read_set() { - string strLoadConfigFilePath = Application.StartupPath + @"\YD10配置.json";//路径 + // string strLoadConfigFilePath = Application.StartupPath + @"\配置.json";//路径 + string strLoadConfigFilePath = Path.Combine(Application.StartupPath, "配置.json"); try { using (StreamReader configFile = new StreamReader(strLoadConfigFilePath)) @@ -234,18 +266,20 @@ namespace YD10测试机 JObject object_data_prase_json = (JObject)JsonConvert.DeserializeObject(str_data_json); if (object_data_prase_json != null) { + che_kind= (string)object_data_prase_json["车型"]; comboBox1.Text = (string)object_data_prase_json["打印机"]; comboBox2.Text = (string)object_data_prase_json["张数"]; checkBox2.Checked = (bool)object_data_prase_json["自动打印机"]; - //checkBox1.Checked = (bool)object_data_prase_json["自动蓝牙连接"]; + yd_ble = (bool)object_data_prase_json["自动蓝牙连接"]; checkBox3.Checked = (bool)object_data_prase_json["号码校验"]; - + } + // configFile.Close(); // 显式关闭文件(可选,通常不需要) } } - catch (Exception) + catch (Exception ex) { - + MessageBox.Show($"发生错误: {ex.Message}"); } } @@ -671,8 +705,6 @@ namespace YD10测试机 { } - - } @@ -1015,7 +1047,7 @@ namespace YD10测试机 // 数字1 if ((did == 0xCF40) || (did == 0xCF41)) { - writeConfig[index2].threshold = Convert.ToString(data[3]); + writeConfig[index2].threshold = Convert.ToString(data[3]).PadLeft(2, '0'); } if (did == 0xCF42) { @@ -1514,8 +1546,6 @@ namespace YD10测试机 writeConfig[14].DID = "CF50"; writeConfig[14].name = "批次号"; writeConfig[14].status = true; - - } int index = 0; @@ -2414,9 +2444,10 @@ namespace YD10测试机 string tempData=" "; private void save_zb() { - string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2, 4); + string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2, 4); + string str_sw = "X" + writeConfig[1].threshold + readConfig[1].threshold.Substring(0, 2) + readConfig[1].threshold.Substring(3, 2); tempData = tempData + get_date_time() + "," + "E-2" + writeConfig[0].threshold + "," + - readConfig[1].threshold + "," +str_get_sn+ ","+readConfig[2].threshold+","+ readConfig[3].threshold+","+flag_pass; + str_sw + "," +str_get_sn+ ","+readConfig[2].threshold+","+ readConfig[3].threshold+","+flag_pass; writeA883SmtLogCSV2(tempData); tempData = " "; } @@ -2436,7 +2467,8 @@ namespace YD10测试机 //string path = Application.StartupPath + @"\configfile\研发\" + sArray[0]; - string path = @"C:\YD10日志\";//+ sArray[0]; + // string path = @"C:\YD10日志\";//+ sArray[0]; + string path = Application.StartupPath + @"\YD10日志\"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); @@ -2476,7 +2508,7 @@ namespace YD10测试机 // 使用正确的 Split 方法 string[] sArray = str.Split(' '); // 以空格分隔 - string smt_log_path2 = @"C:\YD10日志\";//+ sArray[0]; + string smt_log_path2 = Application.StartupPath + @"\YD10日志\"; string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2,4); //判断是否已经有了这个文件 @@ -2568,6 +2600,7 @@ namespace YD10测试机 string tm = "#3-" + readConfig[2].threshold + " " + readConfig[3].threshold + "&" + writeConfig[12].threshold + "3560820" + writeConfig[7].threshold + writeConfig[6].threshold + writeConfig[5].threshold + writeConfig[8].threshold; string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2, 4); + string str_sw = "X" + writeConfig[1].threshold + readConfig[1].threshold.Substring(0, 2) + readConfig[1].threshold.Substring(3, 2); bcc.QuickMarkHeight = 100; bcc.QuickMarkWidth = 100; Image image = bcc.CreateQuickMark(tm); @@ -2578,7 +2611,7 @@ namespace YD10测试机 //e.Graphics.DrawString("电压:48-72V", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 130, 23); e.Graphics.DrawString("HW:" +"E-2"+ writeConfig[0].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 33); // e.Graphics.DrawString("类型:一键启动/无电池/无手柄", new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 50, 33); - e.Graphics.DrawString("SW:" + readConfig[1].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 43); + e.Graphics.DrawString("SW:" + str_sw, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 43); e.Graphics.DrawString("SN:" + str_get_sn, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 70, 43); e.Graphics.DrawString("IMEI:" + readConfig[2].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 53); e.Graphics.DrawString("ICCID:" + readConfig[3].threshold, new Font(new FontFamily("宋体"), 6, FontStyle.Bold), System.Drawing.Brushes.Black, 3, 63); @@ -2655,6 +2688,38 @@ namespace YD10测试机 string bd_wl="", bd_cs = "", bd_year = "", bd_year2 = "", bd_month = "", bd_day = "", bd_day1 = "", bd_ls = ""; + private void Form1_FormClosed(object sender, FormClosedEventArgs e) + { + JObject setData_jsonObject = new Newtonsoft.Json.Linq.JObject(); + if (flag_yd07close == 0) + { + setData_jsonObject.Add("车型", "YD10"); + + } + else + { + setData_jsonObject.Add("车型", "YD07k"); + } + setData_jsonObject.Add("打印机", comboBox1.Text); + setData_jsonObject.Add("张数", comboBox2.Text); + setData_jsonObject.Add("自动打印机", checkBox2.Checked); + setData_jsonObject.Add("自动蓝牙连接", yd_ble); + setData_jsonObject.Add("号码校验", checkBox3.Checked); + string config_file_str = setData_jsonObject.ToString(); + //string savePath = Application.StartupPath + @"\配置.json"; + string savePath = Path.Combine(Application.StartupPath, "配置.json"); + System.IO.File.WriteAllText(savePath, config_file_str, Encoding.UTF8); + //this.Invoke(new Action(() => + //{ + // + //})); + } + + private void textBox3_TextChanged(object sender, EventArgs e) + { + + } + private void yD10ToolStripMenuItem_Click(object sender, EventArgs e) { this.Text = "YD10上位机测试V1.9"; @@ -2806,15 +2871,7 @@ namespace YD10测试机 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { - JObject setData_jsonObject = new Newtonsoft.Json.Linq.JObject(); - setData_jsonObject.Add("打印机", comboBox1.Text); - setData_jsonObject.Add("张数", comboBox2.Text); - setData_jsonObject.Add("自动打印机", checkBox2.Checked); - // setData_jsonObject.Add("自动蓝牙连接", checkBox1.Checked); - setData_jsonObject.Add("号码校验", checkBox3.Checked); - string config_file_str = setData_jsonObject.ToString(); - string savePath = Application.StartupPath + @"\YD10配置.json"; - System.IO.File.WriteAllText(savePath, config_file_str, Encoding.UTF8); + } int flag_sn = 0; diff --git a/YD10测试机/Form3.Designer.cs b/YD10测试机/Form3.Designer.cs index 9578103..09cfa8c 100644 --- a/YD10测试机/Form3.Designer.cs +++ b/YD10测试机/Form3.Designer.cs @@ -33,6 +33,7 @@ namespace YD10测试机 System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form3)); this.label3 = new System.Windows.Forms.Label(); this.label7 = new System.Windows.Forms.Label(); this.checkBox3 = new System.Windows.Forms.CheckBox(); @@ -76,6 +77,7 @@ namespace YD10测试机 this.label9 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.button1 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); this.menuStrip1.SuspendLayout(); @@ -204,6 +206,7 @@ namespace YD10测试机 this.checkBox2.TabIndex = 72; this.checkBox2.Text = "自动打印"; this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); // // dataGridView2 // @@ -225,12 +228,12 @@ namespace YD10测试机 dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; this.dataGridView2.DefaultCellStyle = dataGridViewCellStyle1; this.dataGridView2.EnableHeadersVisualStyles = false; - this.dataGridView2.Location = new System.Drawing.Point(699, 163); + this.dataGridView2.Location = new System.Drawing.Point(704, 163); this.dataGridView2.Name = "dataGridView2"; this.dataGridView2.RowHeadersVisible = false; this.dataGridView2.RowHeadersWidth = 45; this.dataGridView2.RowTemplate.Height = 21; - this.dataGridView2.Size = new System.Drawing.Size(375, 561); + this.dataGridView2.Size = new System.Drawing.Size(375, 586); this.dataGridView2.TabIndex = 71; // // dataGridViewTextBoxColumn9 @@ -283,7 +286,7 @@ namespace YD10测试机 this.dataGridView1.RowHeadersVisible = false; this.dataGridView1.RowHeadersWidth = 45; this.dataGridView1.RowTemplate.Height = 19; - this.dataGridView1.Size = new System.Drawing.Size(316, 601); + this.dataGridView1.Size = new System.Drawing.Size(316, 626); this.dataGridView1.TabIndex = 70; // // Column1 @@ -359,7 +362,7 @@ namespace YD10测试机 this.车型设置ToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(1098, 28); + this.menuStrip1.Size = new System.Drawing.Size(1109, 28); this.menuStrip1.TabIndex = 79; this.menuStrip1.Text = "menuStrip1"; this.menuStrip1.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.menuStrip1_ItemClicked); @@ -439,7 +442,7 @@ namespace YD10测试机 this.dataGridView3.RowHeadersVisible = false; this.dataGridView3.RowHeadersWidth = 45; this.dataGridView3.RowTemplate.Height = 19; - this.dataGridView3.Size = new System.Drawing.Size(316, 561); + this.dataGridView3.Size = new System.Drawing.Size(316, 586); this.dataGridView3.TabIndex = 87; // // dataGridViewTextBoxColumn1 @@ -489,6 +492,7 @@ namespace YD10测试机 this.textBox3.Name = "textBox3"; this.textBox3.Size = new System.Drawing.Size(355, 21); this.textBox3.TabIndex = 89; + this.textBox3.TextChanged += new System.EventHandler(this.textBox3_TextChanged); // // label9 // @@ -519,11 +523,23 @@ namespace YD10测试机 this.checkBox1.Text = "蓝牙连接"; this.checkBox1.UseVisualStyleBackColor = true; // + // button1 + // + this.button1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button1.Location = new System.Drawing.Point(775, 131); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(279, 26); + this.button1.TabIndex = 93; + this.button1.Text = "开始测试"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // // Form3 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1098, 737); + this.ClientSize = new System.Drawing.Size(1109, 762); + this.Controls.Add(this.button1); this.Controls.Add(this.checkBox1); this.Controls.Add(this.label10); this.Controls.Add(this.textBox3); @@ -549,6 +565,7 @@ namespace YD10测试机 this.Controls.Add(this.cmbPort); this.Controls.Add(this.label1); this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "Form3"; this.Text = "YD07K上位机测试V1.9"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form3_FormClosing); @@ -609,5 +626,6 @@ namespace YD10测试机 private System.Windows.Forms.Label label9; private System.Windows.Forms.Label label10; private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Button button1; } } \ No newline at end of file diff --git a/YD10测试机/Form3.cs b/YD10测试机/Form3.cs index 865ed9e..76b6e86 100644 --- a/YD10测试机/Form3.cs +++ b/YD10测试机/Form3.cs @@ -1,22 +1,20 @@ using Microsoft.Win32; using System; using System.Collections.Generic; -using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Windows.Forms; -using System.Timers; using System.Drawing.Printing; using ZXingDemo; using System.Net; using System.IO; using Newtonsoft.Json.Linq; using Newtonsoft.Json; -using System.Threading; -using BluetoothLibrary; +using Windows.Devices.Bluetooth.GenericAttributeProfile; +using Bluetoolth; namespace YD10测试机 { @@ -29,6 +27,11 @@ namespace YD10测试机 { InitializeComponent(); this.form1 = form1Instance; // 保存 Form1 的引用 + + CheckForIllegalCrossThreadCalls = false; + this.bleCore.MessageChanged += BleCore_MessAgeChanged; + this.bleCore.DevicewatcherChanged += BleCore_DeviceWatcherChanged; + this.bleCore.GattDeviceServiceAdded += BleCore_GattDeviceServiceAdded; } @@ -101,6 +104,7 @@ namespace YD10测试机 read(); read_set(); GetPrinter(); + clean(); // 添加第四列(按钮列) DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn @@ -165,9 +169,69 @@ namespace YD10测试机 index = this.dataGridView2.Rows.Add(); dataGridView2.Rows[index].Cells[0].Value = "物料编码"; dataGridView2.Rows[index].Cells[1].Value = writeConfig[12].threshold; + + index = this.dataGridView2.Rows.Add(); + dataGridView2.Rows[index].Cells[0].Value = "alm_蓝牙MAC地址"; + dataGridView2.Rows[index].Cells[1].Value = alm_writeConfig[4].threshold; } } + + bool Closing = false; + + // 异步线程 + public static void RunAsync(Action action) + { + ((Action)(delegate () + { + action.Invoke(); + })).BeginInvoke(null, null); + } + + /// + /// 提示消息 + /// + private void BleCore_MessAgeChanged(MsgType type, string message, byte[] data) + { + if (Closing) return; + RunAsync(() => + { + // this.listboxMessage.Items.Add(message); + }); + } + + + /// + /// 搜索蓝牙设备列表 + /// + private void BleCore_DeviceWatcherChanged(MsgType type, Windows.Devices.Bluetooth.BluetoothLEDevice bluetoothLEDevice) + { + if (Closing) return; + RunAsync(() => + { + + //this.listboxBleDevice.Items.Add(bluetoothLEDevice.Name); + this.DeviceList.Add(bluetoothLEDevice); + + }); + } + + /// + /// 获取服务列表 + /// + /// + private void BleCore_GattDeviceServiceAdded(GattDeviceService gattDeviceService) + { + // RunAsync(() => + // { + //this.cmbServer.Items.Add(gattDeviceService.Uuid.ToString()); + this.GattDeviceServices.Add(gattDeviceService); + // this.btnFeatures.Enabled = true; + // }); + } + + + string[] rsrp_ck, rsrq_ck; string product; int wd1, wd2, gnss; @@ -209,6 +273,23 @@ namespace YD10测试机 { writeConfig[i].Svalue = (string)object_data_prase_json[writeConfig[i].name]; } + for (int i = 0; i < writeConfig.Length; i++) + { + alm_readConfig[i].Svalue = (string)object_data_prase_json[alm_readConfig[i].name]; + } + for (int i = 0; i < writeConfig.Length; i++) + { + alm_writeConfig[i].Svalue = (string)object_data_prase_json[alm_writeConfig[i].name]; + } + + for (int i = 0; i < readConfig.Length; i++) + { + readConfig[i].status = (bool)object_data_prase_json[readConfig[i].name + "status"]; + } + for (int i = 0; i < writeConfig.Length; i++) + { + writeConfig[i].status = (bool)object_data_prase_json[writeConfig[i].name + "status"]; + } for (int i = 0; i < alm_readConfig.Length; i++) { alm_readConfig[i].status = (bool)object_data_prase_json[alm_readConfig[i].name + "status"]; @@ -231,7 +312,8 @@ namespace YD10测试机 private void read_set() { - string strLoadConfigFilePath = Application.StartupPath + @"\YD07k配置.json";//路径 + //string strLoadConfigFilePath = Application.StartupPath + @"\配置.json";//路径 + string strLoadConfigFilePath = Path.Combine(Application.StartupPath, "配置.json"); try { using (StreamReader configFile = new StreamReader(strLoadConfigFilePath)) @@ -246,13 +328,13 @@ namespace YD10测试机 checkBox2.Checked = (bool)object_data_prase_json["自动打印机"]; checkBox1.Checked = (bool)object_data_prase_json["自动蓝牙连接"]; checkBox3.Checked = (bool)object_data_prase_json["号码校验"]; - - } + } } + } - catch (Exception) + catch (Exception ex) { - + MessageBox.Show($"发生错误: {ex.Message}"); } } @@ -299,6 +381,16 @@ namespace YD10测试机 return str; //返回字符串临时变量。 } + public static string getStringFromBytes2(byte[] pByte) + { + string str = ""; //定义字符串类型临时变量。 + //遍历字节数组,把每个字节转换成十六进制字符串,不足两位前面添“0”,以空格分隔累加到字符串变量里。 + for (int i = 0; i < pByte.Length; i++) + str += (pByte[i].ToString("X").PadLeft(2, '0')); + //str = str.TrimEnd(' '); //去掉字符串末尾的空格。 + return str; //返回字符串临时变量。 + } + // /16进制转字符串 static string ushortToHexString(ushort value) { @@ -681,6 +773,23 @@ namespace YD10测试机 } + if(cmd == 0xcf51) + { + if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 1) + { + cmd_data = Convert.ToInt32(data).ToString("X2"); + } + } + + + if (cmd == 0xcf52) + { + if (Convert.ToInt32(data) >= 30 && Convert.ToInt32(data) <= 70) + { + cmd_data = Convert.ToInt32(data).ToString("X2"); + } + } + string head = "59 44 "; string data2 = "07 " + ((cmd_data.Length + 1) / 3 + 3).ToString("X2") + " 00 2E " + ushortToHexString(cmd) + " " + cmd_data; string end = head + data2 + " " + crc16(data2) + " 4B 4A"; @@ -696,8 +805,12 @@ namespace YD10测试机 { return; } + if (data=="") + { + return; + } string cmd_data = ""; - if (cmd == 0xcf4d || cmd == 0xcf63) + if (cmd == 0xcf4d || cmd == 0xcf63 ) { string hexString = Convert.ToInt32(data).ToString("X8"); cmd_data = $"{hexString.Substring(6, 2)} {hexString.Substring(4, 2)} {hexString.Substring(2, 2)} {hexString.Substring(0, 2)}"; @@ -707,7 +820,7 @@ namespace YD10测试机 { if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 2) { - cmd_data = StringToHex(data); + cmd_data = Convert.ToInt32(data).ToString("X2"); } } @@ -715,7 +828,7 @@ namespace YD10测试机 { if (Convert.ToInt32(data) >= 0 && Convert.ToInt32(data) <= 1) { - cmd_data = StringToHex(data); + cmd_data = Convert.ToInt32(data).ToString("X2"); } } @@ -754,7 +867,7 @@ namespace YD10测试机 ushort did = Convert.ToUInt16(readConfig[i].DID, 16); yd_did_read_one(did); } - else if (i > 30 && i<46) + else if (i > 30 && i<48) { ushort did = Convert.ToUInt16(writeConfig[i - 31].DID, 16); if (did == 0xcf46) @@ -767,14 +880,14 @@ namespace YD10测试机 } yd_did_read_one(did); } - else if (i>45 && i<69) + else if (i>47 && i<71) { - ushort did = Convert.ToUInt16(alm_readConfig[i-46].DID, 16); + ushort did = Convert.ToUInt16(alm_readConfig[i-48].DID, 16); yd_almdid_read_one(did); } - else if (i > 68 ) + else if (i > 70 ) { - ushort did = Convert.ToUInt16(alm_writeConfig[i-69].DID, 16); + ushort did = Convert.ToUInt16(alm_writeConfig[i-71].DID, 16); yd_almdid_read_one(did); } @@ -909,6 +1022,7 @@ namespace YD10测试机 // 校验结束标志 if (end.Length == 2 && end[0] == 0x4b && end[1] == 0x4a) { + Heart = true; // 处理有效数据 if (buf[index + 2] == 0x0f) { @@ -1083,7 +1197,7 @@ namespace YD10测试机 // 查找特定 value 对应的 name int index = Array.FindIndex(readConfig, myUnitClass => myUnitClass.DID == DID); //数字 - if ((did >= 0xCF81) && (did <= 0xCF8C) || (did == 0xCF08) || (did == 0xCF09) || (did == 0xCF0C)) + if ((did >= 0xCF81) && (did <= 0xCF90) || (did == 0xCF08) || (did == 0xCF09) || (did == 0xCF0C)) { if (did == 0xCF85) { @@ -1092,6 +1206,28 @@ namespace YD10测试机 numbers = readConfig[index].threshold.Split(','); flag_gnss = 1; } + if (did == 0xCF8D) + { + readConfig[index].Ivalue = 1; + readConfig[index].threshold = string.Join(", ", data.Skip(3).Select((s8, indexx) => new { ByteValue = s8, Index = indexx }) + .GroupBy(x => x.Index / 2) // 每2个字节组成一个数据单元 + .Select(group => + { + // 将每2个字节转换为一个整数(假设是小端模式) + int value = group.Sum(x => x.ByteValue << (8 * (x.Index % 2))); + if (value == 65535) + { + readConfig[index].Ivalue = 0; + } + + // 如果值大于127,减去256 + return (value > 32767) ? value - 65536 : value; + })); + + // 使用 Split 方法按逗号拆分字符串 + //numbers = readConfig[index].threshold.Split(','); + //flag_gnss = 1; + } else if ((did == 0xCF86) || (did == 0xCF87)) { readConfig[index].threshold = ((data[3] > 127) ? data[3] - 256 : data[3]).ToString() + "dbm"; @@ -1119,7 +1255,7 @@ namespace YD10测试机 readConfig[index].threshold = string.Join("", data.Skip(3).Select(b => (char)b)).Replace("\0", ""); } // BCD 字符串 - if (did == 0xCF07 && data[3] != 0xff) + if ((did == 0xCF07 || did == 0xCF0D) && data[3] != 0xff) { readConfig[index].threshold = string.Concat(data.Skip(3).Select(b => (char)b)).Replace("\0", ""); @@ -1129,9 +1265,14 @@ namespace YD10测试机 int index2 = Array.FindIndex(writeConfig, myUnitClass => myUnitClass.DID == DID); // 数字1 if ((did == 0xCF40) || (did == 0xCF41)) + { + writeConfig[index2].threshold = Convert.ToString(data[3]).PadLeft(2, '0'); + } + if ((did == 0xCF51) || (did == 0xCF52)) { writeConfig[index2].threshold = Convert.ToString(data[3]); } + if (did == 0xCF42) { if (data[3] == 0xff) @@ -1430,13 +1571,13 @@ namespace YD10测试机 string DID = ((data[2] << 8) | data[1]).ToString("X4"); // 查找特定 value 对应的 name int index = Array.FindIndex(alm_readConfig, myUnitClass => myUnitClass.DID == DID); - if (did>=0xCFC0 && did<=0xCFB5) + if (did>=0xCFA0 && did<=0xCFB5) { alm_readConfig[index].threshold = Convert.ToString(data[3]); alm_readConfig[index].Ivalue = Convert.ToInt32(alm_readConfig[index].threshold); } - if (did >= 0xCF01 ) + if (did == 0xCF01 ) { alm_readConfig[index].threshold = string.Join("", data.Skip(3).Select(b => (char)b)).Replace("\0", ""); } @@ -1446,8 +1587,8 @@ namespace YD10测试机 int index2 = Array.FindIndex(alm_writeConfig, myUnitClass => myUnitClass.DID == DID); if (did == 0xCF61 || did == 0xCF62) { - alm_writeConfig[index].threshold = Convert.ToString(data[3]); - alm_writeConfig[index].Ivalue = Convert.ToInt32(alm_writeConfig[index].threshold); + alm_writeConfig[index2].threshold = Convert.ToString(data[3]); + alm_writeConfig[index2].Ivalue = Convert.ToInt32(alm_writeConfig[index].threshold); } if (did == 0xCF4d|| did == 0xCF63) @@ -1457,9 +1598,9 @@ namespace YD10测试机 if (did == 0xCF64) { - string ble_mac = getStringFromBytes(data); - alm_writeConfig[index2].threshold = getStringFromBytes(data).Substring(3,12); - int flag = 1; + string ble_mac = getStringFromBytes2(data); + alm_writeConfig[index2].threshold = getStringFromBytes2(data).Substring(6,12); + // int flag = 1; } break; @@ -1492,7 +1633,7 @@ namespace YD10测试机 }; myUnitClass[] readConfig = new myUnitClass[31]; - myUnitClass[] writeConfig = new myUnitClass[15]; + myUnitClass[] writeConfig = new myUnitClass[17]; myUnitClass[] alm_readConfig = new myUnitClass[23]; myUnitClass[] alm_writeConfig = new myUnitClass[5]; @@ -1743,7 +1884,7 @@ namespace YD10测试机 alm_writeConfig[3].status = true; alm_writeConfig[4].DID = "CF64"; - alm_writeConfig[4].name = "alm_蓝牙MCA地址"; + alm_writeConfig[4].name = "alm_蓝牙MAC地址"; alm_writeConfig[4].status = true; //-----读写---- @@ -1813,6 +1954,13 @@ namespace YD10测试机 writeConfig[14].name = "批次号"; writeConfig[14].status = true; + writeConfig[15].DID = "CF51"; + writeConfig[15].name = "GSENSOR旋转轴"; + writeConfig[15].status = true; + + writeConfig[16].DID = "CF52"; + writeConfig[16].name = "GSENSOR倾倒角度"; + writeConfig[16].status = true; } @@ -1821,11 +1969,24 @@ namespace YD10测试机 string flag_pass = "FAIL"; private void timer1_Tick(object sender, EventArgs e) { - - if (serialPort.IsOpen && flag_heart == 0) //串口打开且无心跳 进入连接流程 + //按钮版需关闭 + if (serialPort.IsOpen && flag_heart == 0 && flag_connet == 0) //串口打开且无心跳 进入连接流程 { out_time = 0; flag_connet = 1; + Closing = true; + this.bleCore.Dispose(); + //释放内存 + GC.Collect(); + + if (checkBox1.Checked && Closing) + { + Closing = false; + this.DeviceList.Clear(); + this.GattCharacteristics.Clear(); + this.GattDeviceServices.Clear(); + this.bleCore.StartBleDevicewatcher(); + } } @@ -1916,6 +2077,36 @@ namespace YD10测试机 smt_result *= 0; } } + else if (readConfig[readindex].name== "六轴数据校准值" || readConfig[readindex].name == "六轴传感器状态"|| readConfig[readindex].name == "音频文件状态") + { + if (readConfig[readindex].Ivalue== 1) + { + dataGridView1.Rows[i].Cells[2].Value = "pass"; + dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green; + smt_result *= 1; + } + else + { + dataGridView1.Rows[i].Cells[2].Value = "fail"; + dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red; + smt_result *= 0; + } + } + else if (readConfig[readindex].name == "外电电平") + { + if (readConfig[readindex].Ivalue == 0) + { + dataGridView1.Rows[i].Cells[2].Value = "pass"; + dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Green; + smt_result *= 1; + } + else + { + dataGridView1.Rows[i].Cells[2].Value = "fail"; + dataGridView1.Rows[i].Cells[2].Style.BackColor = Color.Red; + smt_result *= 0; + } + } else if (readConfig[readindex].name == "GNSS SNR值") { int snr_cnt = 0; @@ -2078,17 +2269,111 @@ namespace YD10测试机 // 查找特定 value 对应的 name int readindex = Array.FindIndex(alm_readConfig, myUnitClass => myUnitClass.name == name.ToString()); - if (alm_readConfig[readindex].threshold == "1") + dataGridView3.Rows[i].Cells[1].Value = alm_readConfig[readindex].threshold; + + if (alm_readConfig[readindex].name == "alm软件版本号") { - dataGridView3.Rows[i].Cells[2].Value = "pass"; - dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Green; - smt_result *= 1; + if (alm_readConfig[readindex].Svalue != null) + { + if (alm_readConfig[readindex].threshold == alm_readConfig[readindex].Svalue) + { + dataGridView3.Rows[i].Cells[2].Value = "pass"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Green; + smt_result *= 1; + } + else + { + dataGridView3.Rows[i].Cells[2].Value = "fail"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Red; + smt_result *= 0; + } + } + else + { + if (alm_readConfig[readindex].threshold != "" && alm_readConfig[readindex].threshold != null) + { + dataGridView3.Rows[i].Cells[2].Value = "pass"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Green; + smt_result *= 1; + } + else + { + dataGridView3.Rows[i].Cells[2].Value = "fail"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Red; + smt_result *= 0; + } + } + } + else if (alm_readConfig[readindex].name != "蓝牙连接") + { + if (alm_readConfig[readindex].threshold == "1") + { + dataGridView3.Rows[i].Cells[2].Value = "pass"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Green; + alm_readConfig[readindex].Bvalue = true; + smt_result *= 1; + } + else + { + dataGridView3.Rows[i].Cells[2].Value = "fail"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Red; + alm_readConfig[readindex].Bvalue = false; + smt_result *= 0; + } + + if (alm_readConfig[readindex].Bvalue = true && flag_ble == 1) + { + flag_ble = 0; + Closing = true; + this.bleCore.Dispose(); + + } } else { - dataGridView3.Rows[i].Cells[2].Value = "fail"; - dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Red; - smt_result *= 0; + if (alm_readConfig[readindex].threshold == "1") + { + dataGridView3.Rows[i].Cells[2].Value = "pass"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Green; + smt_result *= 1; + } + else + { + dataGridView3.Rows[i].Cells[2].Value = "fail"; + dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Red; + smt_result *= 0; + } + //if (alm_readConfig[readindex].Svalue != null) + //{ + // if (alm_readConfig[readindex].threshold == alm_readConfig[readindex].Svalue) + // { + // dataGridView3.Rows[i].Cells[2].Value = "pass"; + // dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Green; + // smt_result *= 1; + // } + // else + // { + // dataGridView3.Rows[i].Cells[2].Value = "fail"; + // dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Red; + // smt_result *= 0; + // } + //} + //else + //{ + // if (alm_readConfig[readindex].threshold != "" && alm_readConfig[readindex].threshold != null) + // { + // dataGridView3.Rows[i].Cells[2].Value = "pass"; + // dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Green; + // smt_result *= 1; + // } + // else + // { + // dataGridView3.Rows[i].Cells[2].Value = "fail"; + // dataGridView3.Rows[i].Cells[2].Style.BackColor = Color.Red; + // smt_result *= 0; + // } + //} + } } @@ -2103,377 +2388,487 @@ namespace YD10测试机 } int write_result = 1;//写成功 - int writeindex = -1; + int writeindex = -1, writeindex2=-1; + - for (int i = 0; i <= index2; i++) { string name2 = (string)dataGridView2.Rows[i].Cells[0].Value; // 查找特定 value 对应的 name - if (i <= 14) + if (i <= 16) { writeindex = Array.FindIndex(writeConfig, myUnitClass => myUnitClass.name == name2.ToString()); } else { - writeindex = Array.FindIndex(alm_writeConfig, myUnitClass => myUnitClass.name == name2.ToString()); + writeindex2 = Array.FindIndex(alm_writeConfig, myUnitClass => myUnitClass.name == name2.ToString()); } if (i != rowIndex) { - if (i <= 14) + if (i <= 16) { dataGridView2.Rows[i].Cells[1].Value = writeConfig[writeindex].threshold; } else { - dataGridView2.Rows[i].Cells[1].Value = alm_writeConfig[writeindex].threshold; + dataGridView2.Rows[i].Cells[1].Value = alm_writeConfig[writeindex2].threshold; + } } - if (writeConfig[writeindex].name == "物料编码") + if (writeindex != -1) { - if (flag_sn == 1) + if (writeConfig[writeindex].name == "物料编码") { - if (writeConfig[writeindex].threshold == bd_wl) - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } - else + if (flag_sn == 1) { + if (writeConfig[writeindex].threshold == bd_wl) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { - yd_did_write_one(0xcf4e, bd_wl); + yd_did_write_one(0xcf4e, bd_wl); - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; - } - } - else - { - if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } else { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } } - } - else if (writeConfig[writeindex].name == "供应商编码") - { - if (flag_sn == 1) + else if (writeConfig[writeindex].name == "供应商编码") { - if (writeConfig[writeindex].threshold == bd_cs) - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } - else + if (flag_sn == 1) { + if (writeConfig[writeindex].threshold == bd_cs) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { - yd_did_write_one(0xcf4f, bd_cs); + yd_did_write_one(0xcf4f, bd_cs); - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; - } - } - else - { - if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } - else - { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; - } - } - } - else if (writeConfig[writeindex].name == "生产日") - { - if (flag_sn == 1) - { - if (writeConfig[writeindex].threshold == bd_day) - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } else { - yd_did_write_one(0xcf45, bd_day); - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } } - else + else if (writeConfig[writeindex].name == "生产日") { - if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + if (flag_sn == 1) { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + if (writeConfig[writeindex].threshold == bd_day) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + yd_did_write_one(0xcf45, bd_day); + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } else { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } } - } - else if (writeConfig[writeindex].name == "生产月份") - { - if (flag_sn == 1) + else if (writeConfig[writeindex].name == "生产月份") { - if (writeConfig[writeindex].threshold == bd_month) + if (flag_sn == 1) { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } - else - { - yd_did_write_one(0xcf47, bd_month); - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold == bd_month) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + yd_did_write_one(0xcf47, bd_month); + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } - } - else - { - if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } else { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } - } - } - else if (writeConfig[writeindex].name == "生产年份") - { - if (flag_sn == 1) - { - if (writeConfig[writeindex].threshold == bd_year) - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } - else - { - yd_did_write_one(0xcf48, bd_year); - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; - } - } - else - { - if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } - else - { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; - } } - } - else if (writeConfig[writeindex].name == "流水号") - { - if (flag_sn == 1) + else if (writeConfig[writeindex].name == "生产年份") { - if (writeConfig[writeindex].threshold == bd_ls) + if (flag_sn == 1) { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + if (writeConfig[writeindex].threshold == bd_year) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + yd_did_write_one(0xcf48, bd_year); + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } else { - yd_did_write_one(0xcf4a, bd_ls); - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } } - else + else if (writeConfig[writeindex].name == "流水号") { - if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + if (flag_sn == 1) { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + if (writeConfig[writeindex].threshold == bd_ls) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + yd_did_write_one(0xcf4a, bd_ls); + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } else { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } } - } - else if (writeConfig[writeindex].name == "批次号") - { - if (flag_sn == 1) + else if (writeConfig[writeindex].name == "批次号") { - if (writeConfig[writeindex].threshold == bd_ls) + if (flag_sn == 1) { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + if (writeConfig[writeindex].threshold == bd_ls) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + yd_did_write_one(0xcf50, bd_ls); + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } else { - yd_did_write_one(0xcf50, bd_ls); - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } } else { - if (writeConfig[writeindex].threshold != null && writeConfig[writeindex].threshold != "") + if (writeConfig[writeindex].Svalue != null) { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + if (writeConfig[writeindex].threshold == writeConfig[writeindex].Svalue) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } else { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (writeConfig[writeindex].threshold != "" && writeConfig[writeindex].threshold != null) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + writeConfig[writeindex].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + writeConfig[writeindex].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } } } - } - else - { - if (writeConfig[writeindex].Svalue != null) + if (writeindex2 != -1) { - if (writeConfig[writeindex].threshold == writeConfig[writeindex].Svalue) + if (alm_writeConfig[writeindex2].name == "alm_蓝牙MAC地址") { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; - } - else - { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; - } - } - else - { - if (writeConfig[writeindex].threshold != "" && writeConfig[writeindex].threshold != null) - { - dataGridView2.Rows[i].Cells[2].Value = "pass"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; - writeConfig[writeindex].Bvalue = true; - smt_result *= 1; - write_result *= 1; + if (!alm_readConfig[21].Bvalue && checkBox1.Checked && !Closing && alm_writeConfig[writeindex2].Bvalue) + { + // string deviceName = myConfig[6].threshold; + // alm_writeConfig[writeindex2].threshold = "D4:A5:52:17:00:05"; + ulong btAddress = ulong.Parse(alm_writeConfig[writeindex2].threshold, System.Globalization.NumberStyles.HexNumber); + + Windows.Devices.Bluetooth.BluetoothLEDevice bluetoothLEDevice = + this.DeviceList.Where(u => u.BluetoothAddress == btAddress).FirstOrDefault(); + + + if (bluetoothLEDevice != null) + { + flag_ble = 1; + this.bleCore.StopBleDeviceWatcher(); + bleCore.StartMatching(bluetoothLEDevice); + this.bleCore.FindService(); + } + //两个蓝牙进行匹配 + } + if (flag_sn == 1) + { + if (alm_writeConfig[writeindex2].threshold == bd_mac) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + alm_writeConfig[writeindex2].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + yd_almdid_write_one(0xcf64, bd_mac); + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + alm_writeConfig[writeindex2].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } + } + else + { + if (alm_writeConfig[writeindex2].threshold != null && alm_writeConfig[writeindex2].threshold != "") + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + alm_writeConfig[writeindex2].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + alm_writeConfig[writeindex2].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } + } } else { - dataGridView2.Rows[i].Cells[2].Value = "fail"; - dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; - writeConfig[writeindex].Bvalue = false; - smt_result *= 0; - write_result *= 0; + if (alm_writeConfig[writeindex2].Svalue != null) + { + if (alm_writeConfig[writeindex2].threshold == alm_writeConfig[writeindex].Svalue) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + alm_writeConfig[writeindex2].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + alm_writeConfig[writeindex2].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } + } + else + { + if (alm_writeConfig[writeindex2].threshold != "" && alm_writeConfig[writeindex2].threshold != null) + { + dataGridView2.Rows[i].Cells[2].Value = "pass"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Green; + alm_writeConfig[writeindex2].Bvalue = true; + smt_result *= 1; + write_result *= 1; + } + else + { + dataGridView2.Rows[i].Cells[2].Value = "fail"; + dataGridView2.Rows[i].Cells[2].Style.BackColor = Color.Red; + alm_writeConfig[writeindex2].Bvalue = false; + smt_result *= 0; + write_result *= 0; + } + } } } } + } if (flag_heart == 0) @@ -2564,6 +2959,7 @@ namespace YD10测试机 dataGridView2.Rows[6].Cells[1].Value = writeConfig[14].threshold; dataGridView2.Rows[7].Cells[1].Value = writeConfig[13].threshold; dataGridView2.Rows[8].Cells[1].Value = writeConfig[12].threshold; + dataGridView2.Rows[9].Cells[1].Value = alm_writeConfig[4].threshold; if (jy_imei == readConfig[2].threshold && readConfig[2].threshold != "") { @@ -2685,6 +3081,32 @@ namespace YD10测试机 smt_result *= 0; } + + //"D4A5" + bd_year.Substring(1, 1) + bd_month.Substring(1, 1) + bd_day + bd_ls.Substring(2, 4) + if ( alm_writeConfig[4].threshold != "") + { + if (alm_writeConfig[4].threshold.Substring(0, 4) == "D4A5" && alm_writeConfig[4].threshold.Substring(4, 1) == jy_year.Substring(1, 1) && + alm_writeConfig[4].threshold.Substring(5, 1) == jy_month.Substring(1, 1) && alm_writeConfig[4].threshold.Substring(6, 2) == jy_ls.Substring(2, 4)) + { + dataGridView2.Rows[9].Cells[2].Value = "pass"; + dataGridView2.Rows[9].Cells[2].Style.BackColor = Color.Green; + smt_result *= 1; + } + else + { + dataGridView2.Rows[9].Cells[2].Value = "fail"; + dataGridView2.Rows[9].Cells[2].Style.BackColor = Color.Red; + smt_result *= 0; + } + } + else + { + dataGridView2.Rows[9].Cells[2].Value = "fail"; + dataGridView2.Rows[9].Cells[2].Style.BackColor = Color.Red; + smt_result *= 0; + } + + if (smt_result == 1) { string str_get_sn = "YD" + writeConfig[7].threshold.Substring(1, 1) + writeConfig[6].threshold.Substring(1, 1) + writeConfig[5].threshold + writeConfig[8].threshold.Substring(2, 4); @@ -2728,21 +3150,23 @@ namespace YD10测试机 object name = dataGridView2.Rows[rowIndex].Cells[0].Value; // 查找特定 value 对应的 name int index = Array.FindIndex(writeConfig, myUnitClass => myUnitClass.name == name.ToString()); - if (index!=0) { + if (index>=0) { UInt16 did = Convert.ToUInt16(writeConfig[index].DID, 16); // object cellValue = dataGridView2.Rows[rowIndex].Cells[1].Value; - string data = writeConfig[e.RowIndex].threshold; + //string data = writeConfig[e.RowIndex].threshold; + object cellValue = dataGridView2.Rows[rowIndex].Cells[1].Value; + string data = cellValue.ToString(); yd_did_write_one(did, data); writeConfig[rowIndex].threshold = ""; } int index2 = Array.FindIndex(alm_writeConfig, myUnitClass => myUnitClass.name == name.ToString()); - if (index2 != 0) + if (index2 >= 0) { - UInt16 did = Convert.ToUInt16(alm_writeConfig[index].DID, 16); - // object cellValue = dataGridView2.Rows[rowIndex].Cells[1].Value; - string data = alm_writeConfig[e.RowIndex].threshold; + UInt16 did = Convert.ToUInt16(alm_writeConfig[index2].DID, 16); + object cellValue = dataGridView2.Rows[rowIndex].Cells[1].Value; + string data = cellValue.ToString(); yd_almdid_write_one(did, data); - alm_writeConfig[rowIndex].threshold = ""; + alm_writeConfig[index2].threshold = ""; } //MessageBox.Show($"Button clicked in row {rowIndex + 1}"); // 行索引从 0 开始,显示时加 1 } @@ -2997,15 +3421,74 @@ namespace YD10测试机 } - string bd_wl = "", bd_cs = "", bd_year = "", bd_year2 = "", bd_month = "", bd_day = "", bd_day1 = "", bd_ls = ""; + string bd_wl = "", bd_cs = "", bd_year = "", bd_year2 = "", bd_month = "", bd_day = "", bd_day1 = "", bd_ls = "",bd_mac=" "; private void Form3_FormClosed(object sender, FormClosedEventArgs e) { + form1.ShowMessage(checkBox1.Checked, checkBox2.Checked, checkBox3.Checked, comboBox1.Text, comboBox2.Text); + + + this.Close(); // 退出整个应用程序 Application.Exit(); } + private void button1_Click(object sender, EventArgs e) + { + if (!serialPort.IsOpen) + { + txtStatus.Text = "请先打开串口!"; + return; + } + + + + if (button1.Text == "开始测试") + { + Closing = true; + this.bleCore.Dispose(); + //释放内存 + GC.Collect(); + + if (checkBox1.Checked && Closing) + { + Closing = false; + this.DeviceList.Clear(); + this.GattCharacteristics.Clear(); + this.GattDeviceServices.Clear(); + this.bleCore.StartBleDevicewatcher(); + } + + clean(); + out_time = 0; + label2.Text = "测试开始"; + //_yd_disconnet(); + flag_connet = 1; + button1.Text = "结束测试"; + } + else if (button1.Text == "结束测试") + { + flag_heart = 0; + _yd_disconnet(); + flag_connet = 0; + out_time = -1; + button1.Text = "开始测试"; + label2.Text = "测试已结束"; + } + + } + + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + + } + + private void textBox3_TextChanged(object sender, EventArgs e) + { + + } + private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { @@ -3145,7 +3628,10 @@ namespace YD10测试机 index = this.dataGridView2.Rows.Add(); dataGridView2.Rows[index].Cells[0].Value = "物料编码"; - dataGridView2.Rows[index].Cells[1].Value = writeConfig[12].threshold; + + index = this.dataGridView2.Rows.Add(); + dataGridView2.Rows[index].Cells[0].Value = "alm_蓝牙MAC地址"; + dataGridView2.Rows[index].Cells[1].Value = alm_writeConfig[4].threshold; } else @@ -3168,15 +3654,17 @@ namespace YD10测试机 private void Form3_FormClosing(object sender, FormClosingEventArgs e) { - JObject setData_jsonObject = new Newtonsoft.Json.Linq.JObject(); - setData_jsonObject.Add("打印机", comboBox1.Text); - setData_jsonObject.Add("张数", comboBox2.Text); - setData_jsonObject.Add("自动打印机", checkBox2.Checked); - setData_jsonObject.Add("自动蓝牙连接", checkBox1.Checked); - setData_jsonObject.Add("号码校验", checkBox3.Checked); - string config_file_str = setData_jsonObject.ToString(); - string savePath = Application.StartupPath + @"\YD07k配置.json"; - System.IO.File.WriteAllText(savePath, config_file_str, Encoding.UTF8); + + if (!Closing && checkBox1.Checked) + { + Closing = true; + this.bleCore.Dispose(); + //释放内存 + GC.Collect(); + } + + + } int flag_sn = 0; @@ -3190,6 +3678,7 @@ namespace YD10测试机 bd_month = textBox1.Text.Substring(24, 2); bd_day = textBox1.Text.Substring(26, 2); bd_ls = textBox1.Text.Substring(28, 6); + bd_mac = "D4A5" + bd_year.Substring(1, 1) + bd_month.Substring(1, 1) + bd_day + bd_ls.Substring(2, 4); //bd_sn= textBox1.Text.Substring(23, 1)+ textBox1.Text.Substring(25, 1)+ textBox1.Text.Substring(26, 2)+ textBox1.Text.Substring(31, 3); label5.Text = ""; flag_sn = 1; @@ -3204,6 +3693,7 @@ namespace YD10测试机 bd_day = ""; bd_day1 = ""; bd_ls = ""; + bd_mac = ""; //bd_sn = ""; flag_sn = 0; if (textBox1.Text.Length != 0) @@ -3247,7 +3737,7 @@ namespace YD10测试机 } - int out_time = -1, flag_result = 0; + int out_time = -1, flag_result = 0,flag_ble=0; private void clean() @@ -3255,12 +3745,27 @@ namespace YD10测试机 for (int i = 0; i < readConfig.Length; i++) { readConfig[i].threshold = ""; + readConfig[i].Ivalue = -1; + readConfig[i].Bvalue = false; } for (int i = 0; i < writeConfig.Length; i++) { writeConfig[i].threshold = ""; + writeConfig[i].Ivalue = -1; writeConfig[i].Bvalue = false; } + for (int i = 0; i < alm_readConfig.Length; i++) + { + alm_readConfig[i].threshold = ""; + alm_readConfig[i].Ivalue = -1; + alm_readConfig[i].Bvalue = false; + } + for (int i = 0; i < alm_writeConfig.Length; i++) + { + alm_writeConfig[i].threshold = ""; + alm_writeConfig[i].Ivalue = -1; + alm_writeConfig[i].Bvalue = false; + } this.Invoke(new Action(() => { label2.Text = "等待测试"; @@ -3272,6 +3777,7 @@ namespace YD10测试机 heart_out = 0; flag_dy = 0; flag_result = 0; + flag_ble = 0; flag_pass = "FAIL"; Heart = false; heart = false; @@ -3329,10 +3835,10 @@ namespace YD10测试机 _yd_connet(); } - if (flag_heart == 1 && flag_almconnet==0) //与IOT建立连接后开始alm建立连接 - { - _yd_alm_connet(); - } + //if (flag_heart == 1 && flag_almconnet==0) //与IOT建立连接后开始alm建立连接 + //{ + // _yd_alm_connet(); + //} if (time > 30 && flag_heart == 1) //3s发送一次心跳包(改为2s) { @@ -3340,11 +3846,11 @@ namespace YD10测试机 yd_heart(); } - if (alm_time > 30 && flag_almheart == 1) //3s发送一次心跳包(改为2s) - { - alm_time = 0; - yd_alm_heart(); - } + //if (alm_time > 30 && flag_almheart == 1) //3s发送一次心跳包(改为2s) + //{ + // alm_time = 0; + // yd_alm_heart(); + //} if (time_heart >= 8 && flag_heart == 1) //500ms来检测一次保活 { @@ -3374,32 +3880,32 @@ namespace YD10测试机 heart_out = 0; } - if (flag_almheart==1) { - if (!almHeart && almheart)//说明心跳断开一次 - { - almheart_out++; - if (almheart_out >= 10)//5S不回复说明设备已经离线 - { - //-----结束测试----- - flag_heart = 0; - flag_almheart = 0; - out_time = -1; - _yd_disconnet(); - flag_connet = 0; - flag_almconnet = 0; - //button1.Text = "开始测试"; - label2.Text = "alm设备已离线"; - - clean(); - } - } - else - { - almheart = almHeart; - almHeart = false; - almheart_out = 0; - } - } + //if (flag_almheart==1) { + // if (!almHeart && almheart)//说明心跳断开一次 + // { + // almheart_out++; + // if (almheart_out >= 10)//5S不回复说明设备已经离线 + // { + // //-----结束测试----- + // flag_heart = 0; + // flag_almheart = 0; + // out_time = -1; + // _yd_disconnet(); + // flag_connet = 0; + // flag_almconnet = 0; + // //button1.Text = "开始测试"; + // label2.Text = "alm设备已离线"; + + // clean(); + // } + // } + // else + // { + // almheart = almHeart; + // almHeart = false; + // almheart_out = 0; + // } + //} } @@ -3412,11 +3918,11 @@ namespace YD10测试机 label2.Text = "写入响应超时"; } } - if (flag_heart == 1 && flag_write == 0 && flag_almheart==1) + if (flag_heart == 1 && flag_write == 0 /*&& flag_almheart==1*/) { zd_test(did_i); did_i++; - if (did_i > 73) + if (did_i > 75) { did_i = 0; } diff --git a/YD10测试机/Form3.resx b/YD10测试机/Form3.resx index 92350c1..94e69e0 100644 --- a/YD10测试机/Form3.resx +++ b/YD10测试机/Form3.resx @@ -157,6 +157,1139 @@ 317, 17 - 55 + 66 + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAMMOAADDDgAAAAAAAAAA + AAD///////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/v7/+/v7//T09P/z8/P/8/Pz//Pz8//z8/P/9fX1//v7+/////////////////////////////// + //////////////39/f/y8vL/4+Pj/93d3f/e3t7/5ubm//b29v////////////////////////////// + ///39/f/6enp/+Hh4f/f39//397f/9/e3//f3t//397f/9/e3//f3t//397f/9/e3//f3t//397f/9/e + 3//f3t//397f/97e3v/d3d3/3d3d/93d3f/e3t7/3t7e/+Hh4f/r6+v/+vr6//7+/v////////////// + //////////////////////////////7+/v/y8vL/5eXl/9/f3//d3d3/3d3d/93d3f/d3d3/3d3d/97e + 3v/e3t7/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f + 3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/97e3v/f39//39/f/9/f3//f39//39/f/9/f + 3//f39//39/f/9/f3//f39//39/f/9/f3//g4OD/6enp//f39//+/v7///////////////////////// + ///////////////////////////////////////////////////u7u7/t7e3/5ycnP+ampr/mpqa/5mZ + mf+goKD/wsLC/+zs7P/9/f3/////////////////////////////////9PT0/7Kysv9jY2P/SEhI/0tL + S/9sbGz/r6+v/+3t7f/+/v7////////////+/v7/6+vr/7Kxsv9zc3P/VFRU/01NTf9NTE3/TU1N/01N + Tf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TExM/0pKSv9JSUn/SkpK/0tL + S/9NTU3/VlZW/39/f//T09P/+vr6///////////////////////////////////////6+vr/1tbW/5eX + l/9mZmb/TU1N/0hISP9ISEj/SEhI/0lJSf9KSkr/SkpK/0xMTP9NTU3/TU1N/01NTf9NTU3/TU1N/05O + Tv9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09P + T/9PT0//Tk5O/05OTv9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/1VV + Vf90dHT/s7Oz/+/v7//+/v7///////////////////////////////////////////////////////// + /////////////+vr6/+Ghob/Kioq/xgYGP8ZGRn/GRkZ/xsbG/85OTn/m5ub/+/v7/////////////// + ///////////////////t7e3/hISE/xoaGv8CAgL/BQUF/wwMDP84ODj/q6ur//X19f////////////Hw + 8f+dnJ3/MzIz/w4ODv8HBwf/BQUF/wUFBf8FBQX/BQUF/wUFBf8FBQX/BQUF/wUFBf8FBQX/BQUF/wUF + Bf8FBQX/BQUF/wUFBf8FBQX/BAQE/wQEBP8EBAT/BAQE/wUFBf8FBQX/ICAg/42Njf/u7u7///////// + /////////////////////////Pz8/8/Pz/9fX1//HR0d/wsLC/8FBQX/BAQE/wQEBP8DAwP/AwMD/wMD + A/8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BQUF/wUFBf8FBQX/BQUF/wUFBf8FBQX/BQUF/wUF + Bf8FBQX/BQUF/wUFBf8FBQX/BQUF/wUFBf8FBQX/BQUF/wUFBf8FBQX/BQUF/wQEBP8EBAT/BAQE/wQE + BP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BgYG/w0NDf86Ojr/sbGx//b29v////////////// + ////////////////////////////////////////////////////////+vr6/729vf84ODj/AAAA/wAA + AP8AAAD/AAAA/wMDA/9BQUH/xcXF//z8/P///////////////////////////+zs7P9+fn7/EhIS/wAA + AP8AAAD/AAAA/woKCv9iYmL/4+Pj////////////19fX/0lJSf8DAwP/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEB + Af8BAQH/AQEB/wAAAP8QEBD/eXl5/+rq6v/////////////////////////////////r6+v/f39//xcX + F/8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv8EBAT/BQUF/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQE + BP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQE + BP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE/wQE + BP8EBAT/AgIC/xEREf9tbW3/5eXl//////////////////////////////////////////////////// + ////////////////////////7Ozs/4iIiP8ZGRn/AAAA/wAAAP8AAAD/AAAA/xMTE/94eHj/5ubm//// + ////////////////////////7Ozs/35+fv8TExP/AAAA/wAAAP8AAAD/AgIC/z4+Pv/S0tL///////7+ + /v/CwsL/Jycn/wAAAP8AAAD/AAAA/wAAAP8BAQH/Dw8P/ysrK/8yMjL/MTEx/zExMf8yMjL/Kysr/w4O + Dv8BAQH/AAAA/wAAAP8AAAD/AAAA/wgICP8rKyv/Ozs7/zw8PP88PDz/Ozs7/0lJSf+bm5v/7+/v//// + /////////////////////////////9vb2/9KSkr/BAQE/wAAAP8AAAD/AAAA/wAAAP8ICAj/Li4u/0pK + Sv9OTk7/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01N + Tf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01N + Tf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/TU1N/01NTf9NTU3/UFBQ/319ff/j4+P///////// + ///////////////////////////////////////////////////////////////////+/v7/z8/P/0xM + TP8GBgb/AAAA/wAAAP8AAAD/AgIC/zAwMP+zs7P/+Pj4///////////////////////s7Oz/fn5+/xMT + E/8AAAD/AAAA/wAAAP8AAAD/LCws/8PDw//+/v7//f39/7u7u/8iIiL/AAAA/wAAAP8AAAD/AAAA/wQE + BP88PDz/sLCw/8zMzP/Jycn/ycnJ/8vLy/+vr6//PDw8/wQEBP8AAAD/AAAA/wAAAP8AAAD/HBwc/5iY + mP/R0dH/1NTU/9TU1P/U1NT/19fX/+jo6P/6+vr/////////////////////////////////0tLS/zQ0 + NP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFv+FhYX/1NTU/9/f3//e3t7/3t/e/+Dg4P/h4eH/4eHh/+Hh + 4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh + 4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh + 4f/g4OD/39/f/97e3v/e3t7/5eXl//n5+f////////////////////////////////////////////// + ///////////////////////////////////z8/P/nZ2d/yEhIf8AAAD/AAAA/wAAAP8AAAD/DAwM/2Fh + Yf/b29v//////////////////////+zs7P9+fn7/ExMT/wAAAP8AAAD/AAAA/wAAAP8nJyf/vb29//39 + /f/8/Pz/ubm5/yIiIv8AAAD/AAAA/wAAAP8AAAD/BQUF/0tLS//e3t7//////////////////////93d + 3f9MTEz/BQUF/wAAAP8AAAD/AAAA/wAAAP8iIiL/uLi4//z8/P////////////////////////////7+ + /v/////////////////////////////////S0tL/MzMz/wAAAP8AAAD/AAAA/wAAAP8AAAD/GRkZ/5qa + mv/29vb////////////9/f3/7u7u/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq + 6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq + 6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+7u7v/7+/v///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///c3Nz/YWFh/wsLC/8AAAD/AAAA/wAAAP8AAAD/ISEh/5ubm//y8vL/////////////////7Ozs/35+ + fv8TExP/AAAA/wAAAP8AAAD/AAAA/yUlJf+8vLz//f39//39/f+5ubn/IiIi/wAAAP8AAAD/AAAA/wAA + AP8FBQX/TExM/+Dg4P//////////////////////39/f/0xMTP8FBQX/AAAA/wAAAP8AAAD/AAAA/yIi + Iv+3t7f//Pz8/////////////////////////////////////////////////////////////////9PT + 0/83Nzf/AAAA/wAAAP8AAAD/AAAA/wAAAP8ZGRn/mJiY//Pz8////////////+Pj4/+FhYX/a2tr/21t + bf9tbW3/bW1t/21tbf9tbW3/bW1t/21tbf9tbW3/bW1t/21tbf9tbW3/bW1t/21tbf9tbW3/bW1t/21t + bf9tbW3/bW1t/21tbf9tbW3/bW1t/21tbf9tbW3/bW1t/21tbf9tbW3/bW1t/21tbf9tbW3/bW1t/21t + bf9ubm7/gICA/8LCwv/29vb///////////////////////////////////////////////////////// + //////////////////////////////////////////////n5+f+zs7P/Ly4v/wEBAf8AAAD/AAAA/wAA + AP8FBQX/SEhI/8rKyv/9/f3////////////s7Oz/fn5+/xMTE/8AAAD/AAAA/wAAAP8AAAD/JSUl/7u7 + u//9/f3//f39/7m5uf8iIiL/AAAA/wAAAP8AAAD/AAAA/wQEBP9HR0f/0NDQ//Pz8//w8PD/8PDw//Ly + 8v/Q0ND/R0dH/wUFBf8AAAD/AAAA/wAAAP8AAAD/ICAg/66urv/v7+//9PT0//Pz8//z8/P/9/f3//39 + /f/+/v7//v7+////////////////////////////1dXV/zs7O/8BAQH/AAAA/wAAAP8AAAD/AAAA/xkZ + Gf+YmJj/8/Pz////////////0dHR/zU1Nf8KCgr/Dg4O/w4ODv8ODg7/Dg4O/w4ODv8NDQ3/DQ0N/w0N + Df8NDQ3/DQ0N/w0NDf8NDQ3/Dg4O/w4ODv8ODg7/Dg4O/w4ODv8ODg7/Dg4O/w4ODv8NDQ3/DQ0N/w0N + Df8NDQ3/DQ0N/w0NDf8NDQ3/Dg4O/w4ODv8ODg7/Dg4O/w0NDf8YGBj/ZWVl/+Pj4/////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+fm5/94eHj/EhIS/wAAAP8AAAD/AAAA/wAAAP8VFRX/f39//+no6f///////////+zs + 7P9+fn7/ExMT/wAAAP8AAAD/AAAA/wAAAP8kJCT/u7u7//39/f/9/f3/ubm5/yIiIv8AAAD/AAAA/wAA + AP8AAAD/AwMD/ykpKf95eXn/jY2N/4uLi/+Li4v/jY2N/3l5ef8qKir/AwMD/wAAAP8AAAD/AAAA/wAA + AP8VFRX/bm5u/5iYmP+bm5v/mZmZ/5qamv+urq7/4+Pj//z8/P/+/v7///////////////////////// + ///W1tb/Pj4+/wICAv8AAAD/AAAA/wAAAP8AAAD/GRkZ/5iYmP/z8/P////////////Ozs7/KCgo/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP84ODj/2dnZ//////////////////////////////////////////////////// + /////////////////////////////////////////////////////////Pz8/8bGxv89PT3/AwMD/wAA + AP8AAAD/AAAA/wEBAf8zMzP/tra2//n5+f//////7Ozs/35+fv8SEhL/AAAA/wAAAP8AAAD/AAAA/yMj + I/+6urr//Pz8//39/f+5ubn/IiIi/wAAAP8AAAD/AAAA/wAAAP8AAAD/BgYG/xMTE/8WFhb/FRUV/xUV + Ff8WFhb/ExMT/wcHB/8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/8SEhL/GRkZ/xoaGv8ZGRn/FxcX/zAw + MP+cnJz/8fHx/////////////////////////////////9fX1/9BQUH/AgIC/wAAAP8AAAD/AAAA/wAA + AP8ZGRn/mJiY//Pz8////////////8/Pz/8qKir/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr/KSkp/zY2 + Nv83Nzf/Nzc3/zc3N/83Nzf/Ly8v/w4ODv8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv8VFRX/Ly8v/zU1 + Nf80NDT/NDQ0/zQ0NP8wMDD/Ghoa/wQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/zExMf/X19f///////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////7u7u/4yMjP8aGhr/AAAA/wAAAP8AAAD/AAAA/wwMDP9lZWX/3t7e//// + ///s7Oz/fn5+/xISEv8AAAD/AAAA/wAAAP8AAAD/IyMj/7m5uf/8/Pz//f39/7m5uf8iIiL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/DQ0N/319ff/r6+v///////////////////////// + ////////2NjY/0JCQv8DAwP/AAAA/wAAAP8AAAD/AAAA/xkZGf+YmJj/8/Pz////////////z8/P/yoq + Kv8AAAD/AAAA/wAAAP8AAAD/AAAA/yQkJP+jo6P/1dXV/9fX1//X19f/19fX/9ra2v+4uLj/NDQ0/wEB + Af8AAAD/AAAA/wAAAP8AAAD/CgoK/1RUVP+/v7//1tbW/9TU1P/U1NT/1tbW/8TExP9oaGj/Dw8P/wAA + AP8AAAD/AAAA/wAAAP8AAAD/MTEx/9fX1/////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7/09PT/1JS + Uv8HBwf/AAAA/wAAAP8AAAD/AAAA/yUlJf+hoaH/9fX1/+3t7f9+fn7/ExMT/wAAAP8AAAD/AAAA/wAA + AP8jIyP/uLi4//z8/P/8/Pz/ubm5/yEhIf8AAAD/AAAA/wAAAP8AAAD/AQEB/woKCv8UFBT/FhYW/xYW + Fv8WFhb/FhYW/xMTE/8HBwf/AQEB/wAAAP8AAAD/AAAA/wAAAP8FBQX/EhIS/xcXF/8YGBj/GBgY/xYW + Fv8oKCj/iYmJ/+3t7f/////////////////////////////////Y2Nj/Q0ND/wMDA/8AAAD/AAAA/wAA + AP8AAAD/GRkZ/5eXl//y8vL////////////Pz8//Kioq/wAAAP8AAAD/AAAA/wAAAP8AAAD/Kioq/8PD + w////////////////////////////93d3f8/Pz//AQEB/wAAAP8AAAD/AAAA/wAAAP8MDAz/ZmZm/+fn + 5///////////////////////7u7u/35+fv8SEhL/AAAA/wAAAP8AAAD/AAAA/wAAAP8wMDD/19fX//// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////29vb/ra2t/zU1Nf8DAwP/AAAA/wAAAP8AAAD/BQUF/01N + Tf/S0tL/6+vr/39/f/8TExP/AAAA/wAAAP8AAAD/AAAA/yMjI/+4uLj//Pz8//z8/P+5ubn/ISEh/wAA + AP8AAAD/AAAA/wAAAP8JCQn/QEBA/39/f/+MjIz/i4uL/4uLi/+NjY3/enp6/y0tLf8DAwP/AAAA/wAA + AP8AAAD/AAAA/xwcHP9zc3P/kpKS/5OTk/+Tk5P/kpKS/5qamv/Hx8f/9vb2//////////////////// + /////////////9jY2P9DQ0P/AwMD/wAAAP8AAAD/AAAA/wAAAP8YGBj/lZWV//Ly8v///////////8/P + z/8qKir/AAAA/wAAAP8AAAD/AAAA/wAAAP8qKir/wcHB//39/f//////////////////////2tra/z4+ + Pv8BAQH/AAAA/wAAAP8AAAD/AAAA/wwMDP9lZWX/5eXl///////////////////////s7Oz/fHx8/xIS + Ev8AAAD/AAAA/wAAAP8AAAD/AAAA/zAwMP/X19f///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///t7e3/nZ2d/0FBQf8cHBz/FhYW/xUVFf8XFxf/NjY2/6enp//h4eH/gICA/xMTE/8AAAD/AAAA/wAA + AP8AAAD/IyMj/7i4uP/8/Pz//Pz8/7m5uf8hISH/AAAA/wAAAP8AAAD/AAAA/w8PD/9vb2//29vb//Hx + 8f/v7+//7+/v//Ly8v/S0tL/TU1N/wYGBv8AAAD/AAAA/wAAAP8AAAD/Li4u/7y8vP/x8fH/8vLy//Ly + 8v/y8vL/8vLy//f39//9/f3/////////////////////////////////2NjY/0NDQ/8DAwP/AAAA/wAA + AP8AAAD/AAAA/xgYGP+VlZX/8vLy////////////z8/P/yoqKv8AAAD/AAAA/wAAAP8AAAD/AAAA/yoq + Kv/BwcH//f39///////////////////////a2tr/Pj4+/wEBAf8AAAD/AAAA/wAAAP8AAAD/DAwM/2Vl + Zf/l5eX//////////////////////+zs7P98fHz/EhIS/wAAAP8AAAD/AAAA/wAAAP8AAAD/MDAw/9fX + 1/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v/v7+//ysrK/6Ghof+NjY3/i4uL/5OT + k/+jo6P/z8/P/+Tk5P9/f3//ExMT/wAAAP8AAAD/AAAA/wAAAP8jIyP/uLi4//z8/P/8/Pz/ubm5/yEh + If8AAAD/AAAA/wAAAP8AAAD/EBAQ/3d3d//s7Oz//////////////////////+Hh4f9TU1P/BwcH/wAA + AP8AAAD/AAAA/wAAAP8wMDD/yMjI//////////////////////////////////////////////////// + ///////////////////Y2Nj/Q0ND/wMDA/8AAAD/AAAA/wAAAP8AAAD/GBgY/5WVlf/y8vL///////// + ///Pz8//Kioq/wAAAP8AAAD/AAAA/wAAAP8AAAD/Kioq/8LCwv///////////////////////////9zc + 3P8/Pz//AQEB/wAAAP8AAAD/AAAA/wAAAP8MDAz/ZWVl/+fn5///////////////////////7u7u/319 + ff8SEhL/AAAA/wAAAP8AAAD/AAAA/wAAAP8wMDD/19fX//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////+Pj4//Ly8v/y8vL/9PT0//f39//+/v7/7e3t/4CAgP8TExP/AAAA/wAA + AP8AAAD/AAAA/yMjI/+4uLj//Pz8//z8/P+5ubn/ISEh/wAAAP8AAAD/AAAA/wAAAP8QEBD/eHh4/+3t + 7f//////////////////////4uLi/1RUVP8HBwf/AAAA/wAAAP8AAAD/AAAA/zExMf/Jycn///////// + /////////////////////////////////////////////////////////////9fX1/9BQUH/AgIC/wAA + AP8AAAD/AAAA/wAAAP8YGBj/lZWV//Ly8v///////////8/Pz/8qKir/AAAA/wAAAP8AAAD/AAAA/wAA + AP8nJyf/s7Oz/+rq6v/t7e3/7Ozs/+zs7P/v7+//ysrK/zk5Of8BAQH/AAAA/wAAAP8AAAD/AAAA/wsL + C/9eXl7/1dXV//Dw8P/t7e3/7e3t//Dw8P/c3Nz/dHR0/xAQEP8AAAD/AAAA/wAAAP8AAAD/AAAA/zAw + MP/X19f///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v7/9vb2/+Xl5f/f39//39/f/9/f3//g4OD/4ODg/+Dg + 4P/g4OD/4ODg/+Hh4f/Pz8//b29v/xEREf8AAAD/AAAA/wAAAP8AAAD/IyMj/7i4uP/8/Pz//Pz8/7m5 + uf8hISH/AAAA/wAAAP8AAAD/AAAA/w4ODv9mZmb/ycnJ/93d3f/b29v/29vb/97e3v/AwMD/R0dH/wYG + Bv8AAAD/AAAA/wAAAP8AAAD/Kioq/66urv/e3t7/39/f/9/f3//f39//5eXl//b29v/+/v7///////// + ////////////////////////19fX/0BAQP8CAgL/AAAA/wAAAP8AAAD/AAAA/xgYGP+VlZX/8vLy//// + ////////z8/P/yoqKv8AAAD/AAAA/wAAAP8AAAD/AAAA/xUVFf9eXl7/fHx8/319ff99fX3/fX19/35+ + fv9ra2v/Hx8f/wEBAf8AAAD/AAAA/wAAAP8AAAD/BgYG/zQ0NP92dnb/hISE/4ODg/+Dg4P/hISE/3l5 + ef9AQED/CQkJ/wAAAP8AAAD/AAAA/wAAAP8AAAD/MDAw/9fX1/////////////////////////////// + //////////////////////////////////////////////////////////////////////////////j4 + +P/AwMD/a2tr/1JSUv9SUlL/UlJS/1JSUv9SUlL/UlJS/1JSUv9SUlL/U1NT/0xMTP8pKSn/BgYG/wAA + AP8AAAD/AAAA/wAAAP8jIyP/uLi4//z8/P/8/Pz/ubm5/yEhIf8AAAD/AAAA/wAAAP8AAAD/BQUF/yEh + If9BQUH/SEdI/0dHR/9HR0f/SEhI/z4+Pv8XFxf/AgIC/wAAAP8AAAD/AAAA/wAAAP8QEBD/QEBA/1FR + Uf9SUlL/UlJS/1JSUv9sbGz/wMDA//j4+P/////////////////////////////////X19f/QEBA/wIC + Av8AAAD/AAAA/wAAAP8AAAD/GBgY/5WVlf/y8vL////////////Pz8//Kioq/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AwMD/w0NDf8SEhL/EhIS/xISEv8SEhL/EhIS/w8PD/8EBAT/AAAA/wAAAP8AAAD/AAAA/wAA + AP8BAQH/CAgI/xEREf8TExP/ExMT/xMTE/8TExP/EhIS/wkJCf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA + AP8wMDD/19fX//////////////////////////////////////////////////////////////////// + ////////////////////////////////////////7Ozs/4SEhP8bGxv/BQUF/wcHB/8HBwf/BwcH/wYG + Bv8GBgb/BgYG/wYGBv8GBgb/BQUF/wMDA/8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI/+4uLj//Pz8//39 + /f+5ubn/IiIi/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/wEB + Af8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8EBAT/BQUF/wYGBv8GBgb/BAQE/xoaGv+EhIT/7e3t//// + /////////////////////////////9fX1/8+Pj7/AgIC/wAAAP8AAAD/AAAA/wAAAP8ZGRn/l5eX//Ly + 8v///////////8/Pz/8qKir/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zAwMP/X19f///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///o6Oj/cnJy/w4ODv8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv8CAgL/AgIC/wICAv8CAgL/AQEB/wAA + AP8AAAD/AAAA/wAAAP8AAAD/IyMj/7i4uP/8/Pz//f39/7q6uv8iIiL/AAAA/wAAAP8AAAD/AAAA/wAA + AP8CAgL/AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wQE + BP8GBgb/BgYG/wYGBv8DAwP/FxcX/39/f//s7Oz/////////////////////////////////1tbW/z4+ + Pv8CAgL/AAAA/wAAAP8AAAD/AAAA/xkZGf+YmJj/8/Pz////////////z8/P/yoqKv8AAAD/AAAA/wAA + AP8AAAD/AAAA/wYGBv8ZGRn/ICAg/yAgIP8gICD/ICAg/yEhIf8cHBz/CAgI/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AQEB/wgICP8RERH/ExMT/xISEv8SEhL/ExMT/xEREf8JCQn/AQEB/wAAAP8AAAD/AAAA/wAA + AP8AAAD/MDAw/9fX1/////////////////////////////////////////////////////////////// + /////////////////////////////////////////////+np6f9ycnL/Dw8P/wAAAP8AAAD/AAAA/wAA + AP8JCQn/MDAw/0RERP9FRUX/RkZG/z8/P/8eHh7/BAQE/wAAAP8AAAD/AAAA/wAAAP8jIyP/uLi4//z8 + /P/9/f3/urq6/yIiIv8AAAD/AAAA/wAAAP8AAAD/BQUF/yIiIv9CQkL/SEhI/0dHR/9HR0f/SEhI/z4+ + Pv8VFRX/AQEB/wAAAP8AAAD/AAAA/wAAAP8QEBD/QEBA/1JSUv9SUlL/UlJS/1FRUf9gYGD/rq6u//Pz + 8//////////////////////////////////V1dX/Ozs7/wEBAf8AAAD/AAAA/wAAAP8AAAD/GRkZ/5iY + mP/z8/P////////////Pz8//Kioq/wAAAP8AAAD/AAAA/wAAAP8AAAD/ICAg/4qKiv+zs7P/tLS0/7S0 + tP+0tLT/t7e3/5ubm/8uLi7/AQEB/wAAAP8AAAD/AAAA/wAAAP8GBgb/MzMz/3Nzc/+BgYH/gICA/4CA + gP+BgYH/dnZ2/z4+Pv8JCQn/AAAA/wAAAP8AAAD/AAAA/wAAAP8wMDD/19fX//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////6enp/3Nzc/8PDw//AAAA/wAAAP8AAAD/AAAA/xsbG/+Xl5f/1dXV/9ra2v/c3Nz/xsbG/1xc + XP8LCwv/AAAA/wAAAP8AAAD/AAAA/yMjI/+4uLj//Pz8//39/f+6urr/IiIi/wAAAP8AAAD/AAAA/wAA + AP8ODg7/Z2dn/8nJyf/d3d3/29vb/9vb2//e3t7/vr6+/0FBQf8EBAT/AAAA/wAAAP8AAAD/AAAA/yoq + Kv+urq7/39/f/+Hh4f/g4OD/4ODg/+Pj4//w8PD//Pz8/////////////////////////////////9XV + 1f86Ojr/AQEB/wAAAP8AAAD/AAAA/wAAAP8ZGRn/mJiY//Pz8////////////8/Pz/8qKir/AAAA/wAA + AP8AAAD/AAAA/wAAAP8sLCz/wMDA//n5+f/7+/v/+vr6//r6+v/+/v7/2NjY/0BAQP8CAgL/AAAA/wAA + AP8AAAD/AAAA/wsLC/9eXl7/1dXV/+/v7//s7Oz/7Ozs/+7u7v/a2tr/c3Nz/xAQEP8AAAD/AAAA/wAA + AP8AAAD/AAAA/zAwMP/X19f///////////////////////////////////////////////////////// + ///////////////////////////////////////////////////p6en/dHR0/w8PD/8AAAD/AAAA/wAA + AP8AAAD/Hx8f/7Kysv/8/Pz////////////p6en/bW1t/w0NDf8AAAD/AAAA/wAAAP8AAAD/IyMj/7m5 + uf/8/Pz//f39/7q6uv8iIiL/AAAA/wAAAP8AAAD/AAAA/xEREf95eXn/7e3t//////////////////// + ///g4OD/TExM/wUFBf8AAAD/AAAA/wAAAP8AAAD/MDAw/8jIyP////////////////////////////// + ////////////////////////////////////////1dXV/zo6Ov8BAQH/AAAA/wAAAP8AAAD/AAAA/xkZ + Gf+YmJj/8/Pz////////////z8/P/yoqKv8AAAD/AAAA/wAAAP8AAAD/AAAA/y0tLf/FxcX//v7+//// + ///////////////////d3d3/QUFB/wICAv8AAAD/AAAA/wAAAP8AAAD/DAwM/2ZmZv/n5+f///////// + /////////////+7u7v99fX3/EhIS/wAAAP8AAAD/AAAA/wAAAP8AAAD/MDAw/9fX1/////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////+np6f9zc3P/Dw8P/wAAAP8AAAD/AAAA/wAAAP8fHx//sLCw//n5+f///////////+fn + 5/9ra2v/DQ0N/wAAAP8AAAD/AAAA/wAAAP8jIyP/ubm5//z8/P/9/f3/u7u7/yIiIv8AAAD/AAAA/wAA + AP8AAAD/EBAQ/3h4eP/s7Oz//////////////////////9/f3/9MTEz/BQUF/wAAAP8AAAD/AAAA/wAA + AP8wMDD/xsbG//////////////////////////////////////////////////////////////////// + ///V1dX/Ojo6/wAAAP8AAAD/AAAA/wAAAP8AAAD/GBgY/5qamv/09PT////////////Pz8//Kioq/wAA + AP8AAAD/AAAA/wAAAP8AAAD/LS0t/8TExP/+/v7//////////////////////9zc3P9BQUH/AgIC/wAA + AP8AAAD/AAAA/wAAAP8LCwv/ZWVl/+Xl5f//////////////////////7Ozs/3x8fP8SEhL/AAAA/wAA + AP8AAAD/AAAA/wAAAP8wMDD/19fX//////////////////////////////////////////////////// + ////////////////////////////////////////////////////////6Ojo/3Jycv8PDw//AAAA/wAA + AP8AAAD/AAAA/x8fH/+wsLD/+fn5////////////5+fn/2tra/8NDQ3/AAAA/wAAAP8AAAD/AAAA/yQk + JP+6urr//f39//39/f+8vLz/IiIi/wAAAP8AAAD/AAAA/wAAAP8QEBD/cnJy/93d3f/z8/P/8fHx//Hx + 8f/09PT/0dHR/0dHR/8FBQX/AAAA/wAAAP8AAAD/AAAA/y4uLv++vr7/9PT0//X19f/09PT/9fX1//n4 + +f/+/v7//////////////////////////////////////9bW1v9CQkL/CwsL/wkJCf8KCgr/CgoK/wkJ + Cf8uLi7/r6+v//j4+P///////////8/Pz/8qKir/AAAA/wAAAP8AAAD/AAAA/wAAAP8tLS3/xMTE//7+ + /v//////////////////////3Nzc/0FBQf8CAgL/AAAA/wAAAP8AAAD/AAAA/wsLC/9lZWX/5eXl//// + ///////////////////s7Oz/fX19/xISEv8AAAD/AAAA/wAAAP8AAAD/AAAA/zAwMP/X19f///////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////q6ur/eXl5/xAQEP8AAAD/AAAA/wAAAP8AAAD/HBwc/6+vr//5+fn///////// + ///n5+f/a2tr/w0NDf8AAAD/AAAA/wAAAP8AAAD/JCQk/7u7u//9/f3//f39/7y8vP8iIiL/AAAA/wAA + AP8AAAD/AAAA/woKCv9ERET/hYWF/5KSkv+RkZH/kZGR/5KSkv99fX3/Kioq/wMDA/8AAAD/AAAA/wAA + AP8AAAD/Hh4e/3t7e/+enp7/n5+f/56env+goKD/tLO0/+Pj4//8/Pz///////////////////////// + ////////5OTk/4ODg/9fX1//Xl5e/15eXv9eXl7/ZGRk/4+Pj//g4OD//v7+////////////z8/P/yoq + Kv8AAAD/AAAA/wAAAP8AAAD/AAAA/y4uLv/FxcX//v7+///////////////////////c3Nz/QUFB/wIC + Av8AAAD/AAAA/wAAAP8AAAD/CwsL/2RkZP/i4uL//v7+//v7+//7+/v//v7+/+no6f97e3v/ERER/wAA + AP8AAAD/AAAA/wAAAP8AAAD/MDAw/9fX1/////////////////////////////////////////////// + //////////////////////////////////////////////////////////////T09P+qqqr/QkJC/yIi + Iv8hISH/ISEh/x4eHv88PDz/urq6//r6+v///////////+fn5/9ra2v/DQ0N/wAAAP8AAAD/AAAA/wAA + AP8mJib/vb29//39/f/+/v7/vb29/yMjI/8AAAD/AAAA/wAAAP8AAAD/AgIC/wsLC/8VFRX/FxcX/xcX + F/8XFxf/FxcX/xQUFP8HBwf/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/FRUV/xsbG/8bGxv/Gxsb/xkZ + Gf8xMDH/l5eX//Dw8P/////////////////////////////////6+vr/6enp/+Pj4//j4+P/4+Pj/+Pj + 4//l5eX/7u7u//v7+//////////////////Pz8//Kioq/wAAAP8AAAD/AAAA/wAAAP8AAAD/JSUl/5+f + n//Nzc3/zs7O/87Ozv/Ozs7/0dHR/7Gxsf81NTX/AgIC/wAAAP8AAAD/AAAA/wAAAP8ICAj/SkpK/6io + qP+8vLz/urq6/7q6uv+8vLz/rKys/1xbXP8NDQ3/AAAA/wAAAP8AAAD/AAAA/wAAAP8wMDD/19fX//// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7//f39/+7u7v/Kysr/tra2/7S0tP+0tLT/s7Oz/729vf/n5+f//f39//// + ////////5+fn/2tra/8NDQ3/AAAA/wAAAP8AAAD/AAAA/ygoKP+/v7///f39//7+/v/AwMD/JCQk/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wsLC/94eHj/6urq//////////////////// + /////////////////////////////////////////////////////////////////////////////8/P + z/8rKyv/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr/Kioq/zU1Nf82Njb/NTU1/zU1Nf82Njb/Li4u/w4O + Dv8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv8NDQ3/Hh4e/yIiIv8iIiL/IiIi/yIiIv8fHx//ERER/wMD + A/8AAAD/AAAA/wAAAP8AAAD/AAAA/zIyMv/Y2Nj///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///8/Pz/+/v7//z8/P/7+/v//Pz8///////////////////////o6Oj/bGxs/w0NDf8AAAD/AAAA/wAA + AP8AAAD/KCgo/7+/v//9/f3//////8rKyv8tLS3/AAAA/wAAAP8AAAD/AAAA/wAAAP8EBAT/ERER/xQU + FP8UFBT/FBQU/xQUFP8SEhL/CAgI/wEBAf8AAAD/AAAA/wAAAP8BAQH/CQkJ/xoaGv8eHh7/Hh4e/x4e + Hv8cHBz/Li4u/46Ojv/u7u7/////////////////////////////////+/v7/+7u7v/p6en/6enp/+np + 6f/p6en/6urq//Hx8f/8/Pz/////////////////0dHR/y8vL/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Pz8//9vb + 2/////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7/+/v7//Ly8v/w8PD/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx + 8f/x8fH/8/Pz/9ra2v9mZmb/DQ0N/wAAAP8AAAD/AAAA/wAAAP8jIyP/ubm5//v7+///////3d3d/1NT + U/8HBwf/AAAA/wAAAP8AAAD/AAAA/xISEv9bW1v/g4OD/4eHh/+Ghob/h4eH/3h4eP80NDT/BgYG/wAA + AP8AAAD/AAAA/wICAv8wMDD/lZWV/66urv+rq6v/q6ur/6qqqv+ysrL/19fX//j4+P////////////// + ///////////////////v7+//qKio/3p6ev9zc3P/dHR0/3R0dP94eHj/m5ub/9/f3//9/f3///////// + ///d3d3/VlZW/xQUFP8MDAz/DAwM/wwMDP8MDAz/DAwM/wwMDP8MDAz/DAwM/wwMDP8MDAz/DAwM/wsL + C/8EBAT/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/BgYG/wwMDP8NDQ3/DAwM/wwMDP8MDAz/DAwM/wwM + DP8MDAz/DAwM/wwMDP8MDAz/DQ0N/x4eHv91dXX/6Ojo//////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/l5eX/oKCg/46O + jv+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+RkZH/goKC/z09Pf8ICAj/AAAA/wAA + AP8AAAD/AAAA/x4eHv+oqKj/9/f3///////x8fH/lpaW/xwcHP8AAAD/AAAA/wAAAP8AAAD/Dw8P/21t + bf/Y2Nj/8PDw/+7u7v/x8fH/1dXV/1tbW/8KCgr/AAAA/wAAAP8AAAD/AwMD/0RERP/X19f//Pz8//j4 + +P/4+Pj/+Pj4//j4+P/7+/v//v7+//////////////////////////////////Hx8f+Xl5f/Jycn/w4O + Dv8PDw//Dw8P/w8PD/8pKSn/i4uL/+vr6/////////////T09P+8vLz/fn5+/2pqav9paWn/aWlp/2lp + af9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9qamr/XFxc/yMjI/8DAwP/AAAA/wAAAP8AAAD/AAAA/wgI + CP8zMzP/YWFh/2pqav9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9paWn/aWlp/2lpaf9vb2//jo6O/9LS + 0v/5+fn///////////////////////////////////////////////////////////////////////// + /////////////////////////////9TU1P9LS0v/FhYW/xUVFf8WFhb/FhYW/xYWFv8WFhb/FhYW/xYW + Fv8WFhb/FhYW/xYWFv8UFBT/CQkJ/wEBAf8AAAD/AAAA/wAAAP8AAAD/ERER/3l5ef/p6On///////// + ///V1dX/UFBQ/wcHB/8AAAD/AAAA/wAAAP8CAgL/NTU1/7q6uv/7+/v////////////m5ub/YWFh/woK + Cv8AAAD/AAAA/wAAAP8DAwP/RkZG/97e3v////////////////////////////////////////////// + /////////////////////////f39/8vLy/9AQED/AgIC/wAAAP8AAAD/AAAA/wEBAf83Nzf/uLi4//n5 + +f///////f39//f39//r6+v/5ubm/+bm5v/m5ub/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+np + 6f/Kysr/Tk5O/wcHB/8AAAD/AAAA/wAAAP8AAAD/EBAQ/29vb//V1dX/6Ojo/+bm5v/m5ub/5ubm/+bm + 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+jo6P/v7+//+/v7//7+/v////////////////////////////// + ////////////////////////////////////////////////////////////////////////5+fn/3d3 + d/8aGhr/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8DAwP/Ozs7/8HBwf/7+/v///////X19f+kpKT/JiYm/wAAAP8AAAD/AAAA/wAA + AP8NDQ3/ZWVl/97e3v///////////+fn5/9vb2//EBAQ/wAAAP8AAAD/AAAA/wQEBP9HR0f/3d3d//// + ////////////////////////////////////////////////////////////////////////8PDw/5OT + k/8fHx//AAAA/wAAAP8AAAD/AAAA/w0NDf9iYmL/29vb///////+/v7///////////////////////// + /////////////////////////////////////////////+Li4v9YWFj/CAgI/wAAAP8AAAD/AAAA/wAA + AP8RERH/fHx8/+7u7v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////7+/v/1NTU/4ODg/9KSkr/Ozs7/zo6Ov86Ojr/Ojo6/zo6 + Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zg4OP9LS0v/o6Kj//Ly + 8v///////////+Hh4f9ra2v/Dw8P/wAAAP8AAAD/AAAA/wAAAP8lJSX/o6Oj//T09P//////9fX1/7Oz + s/9WVlb/Ojo6/zo6Ov85OTn/PT09/3Fxcf/k5OT///////////////////////////////////////// + ////////////////////////////////////////29vb/2NjY/8PDw//AAAA/wAAAP8AAAD/AAAA/yEh + If+ampr/8fHx///////+/v7///////////////////////////////////////////////////////// + ////////4ODg/1RUVP8HBwf/AAAA/wAAAP8AAAD/AAAA/xEREf97e3v/6+vr//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///7+/v/7Ozs/97e3v/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ + 2f/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9vb2//p6en/+/v7////////////+vr6/7+/v/9AQED/CAgI/wEB + Af8BAQH/AAAA/woKCv9UVFT/1NTU//7+/v/+/v7/9PT0/+Hh4f/a2dr/2dnZ/9nZ2f/a2tr/5OTk//r6 + +v////////////////////////////////////////////////////////////////////////////// + ///6+vr/w8PD/09PT/8ODg7/AgIC/wEBAf8AAAD/BwcH/0lKSf/Ly8v//Pz8//////////////////// + ///////////////////////////////////////////////////j4+P/X19f/wkJCf8AAAD/AAAA/wAA + AP8AAAD/Dg4O/3l5ef/r6+v///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////8fHx/6ysrP9ZWVn/Ozs7/zw8PP8+PT7/PT09/1hYWP+7u7v/9/f3//// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////29vb/vLy8/2RkZP9AQED/Ozs7/zs7 + O/86Ojr/UVFR/66urv/08/T///////////////////////////////////////////////////////// + //////////////Hx8f+fn5//Pz8//yQkJP8jIyP/IyMj/yEhIf8yMjL/jIyM/+7u7v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7/8/Pz/97e + 3v/S0tL/1NTU/9bV1v/V1dX/2NjY/+vr6//8/Pz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/39/f/4+Pj/9bW1v/T09P/09PT/9PT0//W1tb/5+fn//r6+v////////////// + /////////////////////////////////////////////////////////f39/+3s7f/My8z/vb29/7u7 + u/+7u7v/u7u7/7+/v//a2tr/+fn5//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/9/f3//Pz8//z8/P/8/Pz//Pz8//39/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v////7///////7//v/+/////v/////////////////////////////////////////+/////v////7/ + ///+//////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////v/+//7/9/39/+v3/P/r9/v/+f39//7//v/+//////////// + ////////+/3+/+/4/P/q9vz/9/v9//7//v/+/////f////7///////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v///v7+//7+/v/+//7/+Pz+/+Hz + /P+24Pn/isjy/53P7//n9fr//v/9//7//v///////////////v/x+fz/s9r1/4jF8/+y2/j/4PL8//f8 + /v/9/v7//v7+///+///+//7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v/+/v7//P7+/+n2/P+84fn/db32/zee8/8gk/H/W7Hv/9jv+v/+//3///7///// + ///+///////+/+b0+v9/wPP/J5Xz/zWc8v91vvT/vuL5/+v2/P/8/v3///7+//7+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v/+/v7//v79//f8/f/X7fr/j8r0/0Ki + 8v8WjfX/BIX2/wOF9P9AofD/zer6//3//v/+/v////////7+/v/9//3/2vD6/16x7/8LifX/A4b2/xaP + 9P9GpvH/mM72/9zv+//5/f7//v////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////v///v7+//z+/v/w+f3/wuP5/2658v8llfL/B4b2/wCE+P8Ahfj/AYT1/zOZ7//D5fr//P/+//7/ + /////////v7+//3//v/R6/v/S6nw/waI9v8Ahfj/AIX3/wiI9P8rmPL/d77z/8jo+v/z+/7//v7+///+ + /v///v////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7+/v/9/v7/7Pf9/67b+P9TrPL/F4/z/wOF + 9/8BhPj/AYT4/wGF+P8Ag/X/LJfy/7zi+//7/v7////////////+/v7/+/7+/8jn+/9AovP/BIb2/wCF + +P8Ahfj/AIX3/wSG9v8ckfP/XrHz/7jf+f/v+f3//v7+///+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////+//7+ + /v/9/v7//P7+/+n1/P+k1Pj/RKTy/w6L8/8Chfb/AoX3/wGF9/8Bhff/AYX4/wCD9/8olvX/tN78//n9 + //////////////7////6/v7/weT6/zed8/8Dhfb/AYX4/wGF+P8Ahfj/AYX4/wKF9/8TjPX/Tqny/63Z + +P/t9/3//f7+//7+/v///v////7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7//v79//r+/P/k9fv/nND2/z2f8/8LifX/AYX3/wGF + 9/8Bhfj/AYX4/wGF+P8Bhfj/AIP3/yWV9f+v2/v/+Pz//////////////v////r+/v+/4vn/NJvy/wKE + 9v8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wKF+P8OivT/RaTz/6bV9//q9v3//f7+//7+///+/v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7/ + ///9/v7/5fT7/5jQ9v84n/L/CYj1/wGG9/8Bhfj/AYX3/wGF+P8Bhfj/AYX4/wGF+P8AhPf/JZX1/63Z + +v/3/P7/////////////////+v7//77i+f8ymvD/AYT2/wGF+P8Bhfj/AYX4/wGF+P8Bhfn/AYb4/wGF + +P8LifX/QKLy/6LU9//q9v3//v7///7+//////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v/+//7+/v/+/v7//P7+/+j2/P+d0fb/OJ7y/wiI9f8Bhff/AYX4/wGF + 9/8Bhff/AYX4/wGF+P8Bhfj/AYX4/wCE9/8llfX/rNn5//f8/v/////////////////6/v//vuL5/zKa + 8P8BhPb/AYX4/wGF+P8Bhfj/AYX4/wGF+f8Bhfj/AYX4/wGF+P8KifX/QKLy/6XV9//r9/3//f7+//7/ + /v////7////+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+//7//v79//3+ + /P/s+Pz/pdb4/z2g8/8JiPX/AIX3/wGF9/8AhPf/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIT3/yWV + 9f+u2vr/+Pz+//////////////////v+//+/4/n/NJvw/wKE9v8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Ahfj/AYb4/wKF+f8MifX/QqTy/6nZ+P/u+fz//v/+//7//v/+//7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////v/+/v3/8fn8/7Hb+P9FpPP/C4j2/wKF+P8Bhvf/AIX3/wCE + 9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Ag/f/Jpb1/7Hd/P/4/f7/////////////////+/7+/8Lk + +v84nfL/A4X2/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Chfn/AYb5/wGF9/8LivT/R6fz/7Lc + +P/y+v3//f////3//v/+//////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7+/v/+/v3//v79//X7 + /P+94fj/Uqry/w6K9f8Bhff/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wCD + 9v8pl/L/ueL7//r+/v////////////7+/v/8/v3/x+b7/z+h9P8Ehvf/AIX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AIX3/wGF9/8PivT/U6vy/77i+P/0+/3/+/78//3+/f////7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+//7+/f/5/Pz/y+j5/2Gy8P8UjfP/AoX3/wGF9/8BhPj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIP1/y2X8P/A5Pv//P/+/////////////v7+//3/ + /v/O6vv/SKby/waH9v8Ahfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8AhPj/AYT4/wKF + +P8UjfT/YbLw/8vo+P/4/fz//v79/////v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v7//P39/9rv + +v94vvP/HZDy/wKF9/8Bhfj/AYX3/wGF9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8AhPX/M5nv/8bm+v/8//7////+///////+/v7//v/+/9Tt+v9Qqu//CIj1/wCF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8BhPj/AYX5/wGF9/8bkPP/dr70/9nv+v/8/v3//v/+//// + /v////7///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7+/v/o9Pz/ksz1/yuY8v8Ehff/AYT5/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIX4/wOF9f8/ofH/zur7//3//v////7///////7+ + /v/+//7/2u/6/1uv7/8LifX/AIT4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wOF9/8ol/P/jsv1/+X1/P/8/v3//v79//7+/v////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////8vn9/63Z + +P8+ofH/CYf1/wCE+f8BhPj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Ahfj/B4j1/1Cs8v/X7vv////+/////v///////v7+//7//v/g8vv/bbjy/w+L9v8AhPf/AYX3/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8BhPj/AYT4/weH9f85n/L/ptf3/+/5 + /P/+/v7//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v///v7+//n8/f/G5fr/V67y/xCK9P8Bhfj/AYT5/wCF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX3/wCE9/8MivX/ZLTw/9/x+/////7////+//// + ///+/v7////+/+j1/P+CxPX/Fo/1/wCF9/8Bhvf/AIX3/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYT3/w2J9P9QqvP/weP5//f8/f///v7////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////+///7/v7/3PD7/3e+ + 9P8bkPP/Aob2/wGF9/8BhPj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhff/AIT4/xOM9v96vvP/5vT8/////v////7/////////////////8Pj9/5XN9v8fkvP/AIX2/wGG + 9/8Ahff/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wGE+P8BhPj/AYT3/xiO + 9P9wuvP/2O77//z+/v///v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v7+/+v3/P+az/b/LZny/wOG9f8Bhvf/AYX3/wGE+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGE+P8Ag/j/G5D2/5LM9v/u9/z//v/+//7/ + /v////////7////////3/P7/rNr5/ymW8f8Bhfb/AIX3/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8BhPj/AYT4/wGF+P8BhPj/BIX3/ymW8v+Sy/X/6vb8//7+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/v7//v7+///+/v/4/P7/vuL5/0qn + 8v8JiPT/AIX3/wGF9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wCE9v8llfL/qdj4//T7/f/+//7//v/+//////////////////z////C5Pr/OZ3x/wSF + 9v8Bhff/AIT3/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGE + +P8Chfj/CIf2/0Ci8f+03Pj/9fv9//7//v/+/////v////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v/+/v3//P39/9vv+v9xu/T/F4/0/wGF9/8Bhff/AYX3/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AoX1/zad8P/C5fr/+/7+//7+ + /v/+//7//////////////////////9Xs+/9PqfL/Coj1/wKF+P8BhPf/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Ahfn/EYz1/2O08//S6/v/+/7+//7/ + ///+//////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//3+/f/t+Pv/nNH1/yyY + 8v8Ehvb/AYb3/wGF9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + 9/8Bhff/AYX4/wCE+P8Ih/b/Uarz/9bu/P////7//v7+//7//v//////////////////////4/L8/2y5 + 9P8RjfX/AYT4/wCE9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Ahfj/AIb4/wCF+P8Chvf/JJXy/47J9f/o9fz//v////7//////////v////7///////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7/+f3+/8Tl+v9NqfH/Coj1/wGF+P8Bhvf/AYX3/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wGE+P8Bhfj/AIT3/xOM9f90vvX/5/T9//// + ///////////////////////////////////u9/z/jsr2/xyR9P8AhPf/AIT4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8JiPX/QqPx/7je + +P/2/P7////+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////7////+//////////7//v/i8/v/fMH0/xqQ + 9P8Bhff/AYX4/wGF+P8Bhff/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhff/AYT4/wGF+P8BhPf/I5Pz/5zS9v/z+v3///////////////////////////////////////f8 + /f+z3fn/LZjx/wGE9v8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AoX4/wKF+P8Chfj/AYT4/wGF+P8VjfT/a7j0/9jv+//9/v7///7////+//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////v////7/////////9fv9/6/c9/82nfL/BIb2/wCE9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF9/8Bhff/AYX4/wSF9v85nPP/w+T6//z/ + /v///////////////////////////////////////f/+/8/r+v9KpvH/B4f1/wCF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGE+P8BhPj/AYX4/wSG + 9/8rl/T/m9D3/+74/P/+//7//v7///7///////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//z+/v/X7vv/ZrXx/xCM + 8/8Ahff/AIT3/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Ahfj/DIr1/12v8v/d7/z///////////////////////////////////////// + //////7/4/P6/3S78v8SjfX/AIT4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX3/wGF9/8Bhff/AIX4/wuI9f9QqvL/yOf6//n9/f/+/v7//v7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7/7/j8/5zS9v8ql/L/A4b2/wKF9/8BhPf/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8BhPj/AYT4/wCE9/8ckfP/jcn1/+32 + /P///////////////////////////////////////////////v/y+vv/odP2/ySV8f8BhPb/AYX3/wGF + 9/8Bhfj/AYX3/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + 9/8Ahfj/AIT3/x2Q9P+Fw/T/5fT7//7//v/+//7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////7+//v9/v/O6fr/VKzy/wyJ + 9f8Bhff/AoX4/wGE9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/BIX1/zac8P+44Pn/9/z9/////v////////////////////////////// + /////////v7+//r9/f/I5vn/Q6Pv/weG9f8Bhfj/AYX3/wGF+P8Bhff/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF9/8Ahff/Bob2/z2h8v+64Pn/+Pz9//// + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////7/6/b8/4/K9v8ik/P/AYT2/wGF9/8Bhff/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGE+P8BhPj/AYT4/wCE+P8OivX/YbLy/9nv + +//9//3//v7+///////////////////////////////////////+/v7//v7+/+Ly+/9wuvP/E431/wGF + 9/8Chfj/AYX4/wGF9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX3/wCF9/8Ahff/Fo30/3W98//g8vv//v7+//7+/v/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////v9/v/G5vr/S6f0/wqI + 9f8Ahff/AYT4/wGE+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYT4/wGE+P8Bhff/AYX2/yKU8v+XzvX/7/j8//7//v/+/v7///////////////////////// + //////////////7+/v/+/v7/8/r9/6fW9/8ql/L/A4X2/wKF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wGE+P8Fhfb/Npzx/6/b + +P/1+/z//v79//7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7+/v////7/6fb8/4rJ9P8fkvT/AoX3/wGF+P8Ahff/AIX3/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8BhPj/AYX4/wGF+P8KiPT/SKbw/8bm + +f/6/f3//f7+//7+/v///////////////////////////////////////v7+//7+/v/9/v7/0uv7/1Sr + 8v8KifX/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGE+P8BhPj/AYT4/wCE+P8SjPT/arny/9zw+//9/v7//v7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////7+//r8/v/G5vr/S6jx/wqJ + 9f8Bhff/AYX4/wCF9/8Ahff/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wCE+P8Bhfn/AYX3/xuQ8/+DxPP/5/X7//7+/v/+/v7///////////////////////// + ///////////////////+/v///v/+/////v/u9/3/lMz2/yKU9P8Bhfb/AYX3/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX3/wGF9/8BhPj/AIX4/wKF + 9v8xm/H/rdv4//X7/f/+/v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7/6/X8/4zJ9v8fk/P/AYX3/wGG9/8Bhff/AYT4/wGE+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIX4/wCF+P8Hh/X/QqLw/7/i + +P/5/f3///7+//7+///////////////////////////////////////////////////////////+//v+ + /f/L6fr/Uavy/wuI9f8BhPf/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhff/AIT4/xKN9f9sufT/3fH8//7//v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////v9/v/L6Pr/UKry/wqJ + 9f8Ahff/AIX4/wGE+P8Bhff/AYX3/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX3/xyR8/+DxPT/5fX7//7//v/+/v7//v/+//////////////////// + /////////////////////////////////////////v/+/+34/f+Y0Pb/KJbz/wWF9/8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + 9/8AhPj/BIb1/zWc8v+z3fj/9/z+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////7vf8/5bO9v8jlfL/AYX2/wCE+P8AhPj/AYT4/wGF9/8Bhff/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wCE+P8LifX/T6nz/8bm + +v/5/f7//v7+//7+/v////7///////////////////////////////////////////////////////// + ///+//7/+/7+/9Xu+/9nt/P/FY31/wKF9/8Bhff/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIX3/wCE+P8AhPf/FY70/3a98//j8/v////+///+ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////3////U7Pr/XLDx/w2K + 9P8AhPj/AYX3/wGF9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/BIb2/zCa8v+e0vf/7/j9//7+/v/+/v////////////////////////// + //////////////////////////////////////////////3+/v/9//7/9fz9/7ng+P9HpfH/CYn1/wCF + 9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhff/AYX3/wCE+P8Fh/b/PaHx/77i+f/5/f7///7+///+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////9Pv+/6nY9/8tmfH/Aob1/wGF+P8Bhff/AYX3/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhff/AYT4/wGE+P8Ahff/AYX4/wOF9/8gkvP/fsD0/97w + +//9/v7//v7+//7+//////////////////////////////////////////////////////////////// + //////////////7////+//7/6/f8/5rP9f8vmvL/BIb1/wCF9/8Bhff/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF9/8Bhfj/AYX4/wCE+P8akPT/hcX0/+n1 + /P/+//7//v7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////v7+//7//v/h8/v/cbvz/xON + 9P8Ahff/AYX3/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + 9/8BhPj/AYT4/wCF9/8Chff/GY/0/2i18//O6Pr/+f39/////v///v////7///////////////////// + /////////////////////////////////////////////////////////////////v/8/v3/3vH7/4PE + 9P8llfL/A4X1/wGF9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AIX4/wiI9v9OqfP/zen7//v+/f/+//7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////+/v7/+v39/8Ll+f8/ofH/BYb1/wCE+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wGF9/8Ahff/AoX3/xiO9P9gsvT/w+T6//X7 + /f/+/v7///7//////v////7///////////////////////////////////////////////////////// + //////////////////////////////7+/v/5/f7/1e37/3a+9P8hk/P/A4X3/wCF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Ahfj/AYT2/yiW + 8v+i1Pj/8Pr8//7//v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7//v/t+Pz/ks32/x+S + 8/8AhPf/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8BhPj/AIT3/wKG9f8dkvT/Z7b0/8Tk+v/1+/3//f7+//7+/v///v/////+/////v////////////// + /////////////////////////////////////////////////////////////////////////v7///7/ + ///6/v7/0ez5/3S98/8hk/P/A4X2/wCE+P8BhPj/AYX4/wGF+P8Bhfj/AYT4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wCF9/8AhPf/Eoz1/2658//f8fv//v/+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////f/+/9nv+/9hs/P/DYr1/wCE+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIT4/wCE+P8FhvT/J5fx/3a+9P/O6fv/9/v+//7+ + /f/+/v3////+//////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v/5/f3/0ev6/3q/8/8nlvL/BYb1/wCE + +P8Bhfj/AYT4/wGE+P8BhPj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX3/wCF + 9/8Fhvb/QKPy/8Pl+v/7/v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////5/f3/vOH5/zme + 8/8Ehfb/AIX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF9/8BhPj/AYX3/wGF9/8Bhfj/AYT4/wCE + +P8Bhff/C4n1/zae8v+MyfT/2O/6//n9/v/+/v7//v7+///+/v////7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7//v/5/f7/2e77/4nH9P8znPL/Coj1/wGF9/8Bhfn/AYX5/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhff/AYX3/wCE9/8ilPP/nNH3//H5/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////+/4/P+Yzvb/IZP1/wCE+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX3/wGE+P8Bhff/AYX3/wGF+P8AhPj/AoX3/xaO8/9MqfL/pdb3/+T0+//7/v3//f7+//7+ + /////v////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////8/v7/4/P7/6HU + 9v9Kp/L/Fo31/wSF+P8Bhfn/AYX5/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AIT4/xKM9f9uufP/4vL8//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////3/L7/2q3 + 8v8SjPX/AYT4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX3/wCF9/8AhPf/AIT3/weH + 9f8nlvL/brnz/8Lj+f/v+f3//P7+//3+/v/+/v7//v7///7+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////+/v/9/v7/7vj8/8Hj+f9wufT/LJf1/wuI9v8Bhff/AIX3/wGE + +P8BhPj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/B4f2/0ek8f/M6Pr//P7+//7/ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////7////L6fv/RKPw/wiH9P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX3/wSG9v8UjfT/QaPy/5LM9v/Z7/v/+f3+/////v/+//7//v/+///+ + ///+/v///v////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////+///+ + /v////7/+f3+/9vv+/+d0Pb/UKrx/x6R8/8Hh/X/AYT4/wGE+f8Ahfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8ChPb/LJfx/6zZ9//1+v3//f7+//7//v////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////+P3+/7Db + +P8tmPH/A4X2/wGF+P8BhPf/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIb4/wGG9/8KivX/Kpjz/2u3 + 8/+43vn/6vb8//3+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////7//P79/+34/P/G5/r/hMX1/z+i + 8f8WjvT/BIX2/wCE9/8AhPf/AIT3/wCE9/8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wCD9/8bkPP/jMn2/+z3 + /P/9//7//v/+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////+/////v/w+f3/ks32/x6S9P8BhPf/AYX4/wCE9/8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wCF9/8Fh/b/G5Hz/0yo8f+Yz/X/2O37//b7/v/+/v7//v7///////////////////// + /v///v7//v7+//7+/v////7////+/////v/9/v7/+Pv9//H4/f/q9f3/4/L9/9rw/P/V7vv/0+37/9Pt + +//T7fv/1u77/9vw/P/h8v3/6fX9//D5/f/3/P3//f7+/////v////7//v7+///+/v///v7////+//// + /v////////////7+///9/v7//f/+//n9/v/l9fz/uN/5/3K69P8ym/L/D4v0/wKE9/8AhPj/AYX4/wGF + +P8Bhfj/AYX3/wGF+P8BhPj/AIP4/xGL9f9vufT/4vL8//7+/v/+/v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////7////+/+f1 + /P93v/X/FY72/wGE+P8Chfj/AYX4/wGF+P8Bhfj/AYX4/wCE9/8Ehvb/E430/zif8v9+wfT/xOT5/+33 + /P/9/v7////////////////////////////////////+///+/v/+/vz/+/78//T7/P/p9vz/3O/7/8nm + +v+w2vj/lMz3/37B9v9rt/b/Wa7y/02q7/9KqO//Sqfv/0uo7/9Qqu//Wa7x/2e29P97wfb/k833/67b + +P/K5/r/3vH7/+z3+//3/P3//f79/////f///v7///7+/////////////v////7///////////////// + ///2/P7/3PD7/6jX9/9is/P/Kpfz/w2J9f8Chff/AoX4/wGF+P8Bhff/AYX4/wGF+P8AhPj/CYj1/1as + 8f/W7fv//f7+//7+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////+////////3/H8/2Ky9P8Nivb/AYX4/wKG+P8Bhfj/AYX4/wCE + +P8Chff/Dov1/y+a8f9rufL/sd34/+Hz+//4/Pz//v79//7+/v////////////////////////////// + ///+//7/9fv8/+Tz+v/L6fn/q9n4/4TE9f9csPP/PqHz/yuY8/8fkvT/Fo72/w+M9v8JivX/Bon1/waH + 9v8Hh/b/B4j1/wmJ9f8KifX/DYv2/xSO9v8dkvT/Kpjy/0Ci8/9js/T/jsr1/7ff+P/W7vr/7Pf8//v9 + /v///////////////////////////////////////v////7////9/v7/8vr9/9Xs+v+d0vf/WK7z/ySV + 8/8KifX/AYX2/wCF9/8Bhfj/AYX4/wCF+P8FhvX/QqLw/8no+v/7/v3//v/+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////v7+//// + /v/W7vv/Uany/wiI9v8Ahfj/AYb3/wGF9/8Chfb/DYn1/ymW8/9gs/P/p9f3/9vw+v/1/P3//f/+//7+ + /f/+/v7//v7+///+///+/v7//v/+//7//v/6/f7/7Pf9/9Ps+/+q2Pf/eL7z/0mm8f8qmPP/F4/1/wuI + 9v8Ehvf/AYX3/wCF9v8Ahff/AIX4/wCF+P8Ahfj/AIT4/wCE+f8Bhfn/AYX5/wCF+P8AhPj/AIT4/wCE + 9/8Ahff/BIb3/w2K9v8bkfT/M5zx/1uw8v+Py/b/wOP6/+Hy/P/0+v3//f7+///+/v/+/v7//v7+//7+ + /////////v/+/////v////7//P79//D4/P/Q6vr/lc31/0+p8f8ekvP/B4f1/wCF9/8Ahfj/AYX4/wOG + 9f82nfP/vuL7//n9/v/+//7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////+/v3//f/9/9Ds+v9GpO//BYb1/wCE+P8Chfb/Dor1/ymX + 8/9dsPP/odP3/9fu+v/z+v3//v7+/////v////////////////////////////7//v/1+/3/4vL7/8Di + +v+Kxvb/Uarz/yuX8/8VjvX/B4j2/wGF9v8AhPf/AIT4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Ahfj/AIT3/wCE9/8Chfb/C4r1/xyS + 9P86n/P/brj0/6fW+P/U6/v/7vf9//v+/v////7///7+///////////////////////+/v7//v/+//r+ + /v/t9/z/yuf6/4vJ9f9IpfL/G5D1/waH9v8Bhfb/AoX1/zGa9P+53/v/+Pz+//7//v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////+/////v/////+//7+ + /f/9//3/zer6/0Gh7v8GhvT/D4v1/y2Y8v9gsfL/odT3/9Xt+//x+fz//P79//7////+/v///v7///7+ + //////7////+//7////1+/7/3PD7/6/b+P9yu/P/O5/x/xqQ9f8IiPf/AYT3/wCF+P8Ahfj/AYX3/wGF + 9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8AhPj/AIT3/wSH9v8RjPX/KZfy/1ar8v+UzPb/yuj6/+r2 + /P/6/f7////+//7+/v/+/v///v/////+///+//7/+/7+//z+/v/7/f7/6vb9/8Xm+v+GxfT/QqLy/xmP + 9P8HhvT/L5nz/7jf+v/3/f7//v/+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7////+//////7//v/9//z//v/S7fr/Wqzu/zec8f9ntfP/qNb3/9ju + +//y+v3//f7+/////v/+/v7//v/////////+/v///v79//z//f/0+/z/2+/7/6vX+P9ntvT/L5ry/xKN + 9P8EhfX/AIT3/wCE+P8Ahfj/AIX4/wCF9/8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wCF + 9/8Ahfj/AYX4/wCF9/8Chfb/Con1/x+T9P9Kp/P/iMf2/8Tk+v/o9fz/+Pz9//z+/f/+/v7///////7/ + ///9/////f////7+/v/+//7/+v3+/+j0/P++4fn/e7/1/z6f8P9LpvD/weP5//j9/f/+//7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v////7///7/ + /v/9//3//P/+/+n1/P+22vT/t974/9vv+//0+v3//v/+/////v/+/v7//v////7///////////////7/ + ///0/Pz/2/H6/6vZ9v9otvL/MZny/xGL9f8Chfb/AIT3/wCF9/8Ahff/AYT4/wCF+P8BhPj/AYT4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wGE+P8Bhff/AYX3/wGF+P8Ahfj/AIX2/weI + 9f8ckfT/R6Tz/4bE9f/C5Pn/5vX7//r9/v/////////////////////////////////+/v///v7///j7 + /f/j8fv/vN/3/63X8//g8fv/+v3+//7//v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////+/////v/////+//7+/v/9/v7/+/39//X5/P/4/P3//f/+//// + /v/+/////v/+//7////+/////v7//////v/6/f7/5PT8/7Xe+P9uu/P/MZzx/xGM8/8Dhvb/AIT4/wGF + +P8Bhfj/AIX3/wCF9/8BhPj/AIX4/wGE+P8BhPj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8BhPj/AoT4/wKF9/8Bhff/AIX4/wGF+P8Ahff/AIX4/wGE9/8Ih/X/HJDz/0al8f+Ix/X/yOf6/+34 + /f/7/v7////+//7//v/+//7////+//7//v/+/v///v7+//3+/f/4/Pz/8/n7//n8/f/9/v7//v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////+///+/v/+//7//v/+///////+/////v////7//v/8/v7/7ff9/8Tk + +v9/wvT/PKDy/xSO9P8Ehvb/AIX3/wGF+P8Bhfj/AIX4/wCF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + 9/8Bhff/AYX4/wCE9/8AhPb/B4f1/x6S9P9PqfP/k832/8/q+v/x+f3//f7+//7//v/+//7///////// + ///+//7//v7+//7+/v///////v////7////+//////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v/////+///+ + /v///v/////////////+//7/9Pv9/9Tt+v+WzvX/S6fy/xqQ9P8Fh/b/AYX3/wGF+P8Chfj/AoX4/wKF + +P8Ahfj/AIX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wGE+P8BhPj/AYT4/wGF+P8AhPj/AYT3/wqI + 9f8klPP/Wa/y/6LU9//a7/r/9vv7//7//v////7////////+///+/v///v/+/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////+//////7//v7+//3+/v/+//7/+v39/+P0+/+u2/f/YLTy/ySW + 8v8JiPX/AIT3/wCF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wCF+P8Ahfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8BhPj/AYT4/wGE+P8BhPj/AYX4/wCF+P8BhPj/A4T4/wOE9/8NivX/LJny/2m38v+z3Pf/5fT7//v9 + /v////7///7///7+///+//7////+//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+////+/39/+/4/P/H5/n/gMPz/zee8f8PjPP/AYX2/wCF+P8AhPj/AIT4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYT4/wGE + +f8Chfj/AYX4/wCE+P8Dhfb/Eoz0/zmd8f9+wfT/xOT5/+v2+//8/f7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////1+v3/xOP3/2Oz7/8fkfH/BoX2/wCF + +P8Ahff/AIX3/wCF+P8BhPj/AYT4/wGE+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Ahfj/AIT4/wGE+P8Ahfj/AIX5/wGF+v8BhPj/BYX1/x2R + 8f9br+7/tt3z//P6/P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////f7/f/J5ff/cbnw/zCZ8f8Si/X/BIb2/wCF9/8Ahfj/AYX4/wKE+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wCF + 9/8Ahff/AYX3/wCG9/8Bhfj/AoT5/wmH9/8aj/T/PZ/w/3/C8f/N6vn/9/z+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+////+/3+//L5/P/Y7vr/qtf3/224 + 9P85nvP/G5H2/wuJ9v8Dhfb/AIP3/wCE+P8AhPj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AIX4/wCE9/8BhPf/Bof2/xGM9v8mlfX/Tafz/4XE + 9f+94fj/4fP7//X8/v/9/v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////7////9/v///v7+//3+/f/0+vz/3/D7/7vg+f+Jx/X/VKzy/y6a8P8YkPP/Con1/wOF + 9v8AhPf/AIT3/wCE+P8BhPj/AYX4/wGF9/8Chff/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8BhPj/AYX3/wGF9/8Bhff/AYX4/wCE+P8AhPj/AIP4/wCE + 9v8FhvX/EYv1/yOT8/8/ovL/arj0/5/S+P/M6Pv/6fX8//j8/f/9/v7//v7+//7+//////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7////+/v7//v7+///+ + /v/+//7/+fz+/+z3/f/V7fv/sdz3/4bF9P9br/L/OJ7z/yKU9P8VjvX/C4n1/wWF9f8BhPb/AIT3/wCE + 9/8Ahff/AIX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF + +P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wGF+P8Bhfj/AYX4/wCE + +P8AhPf/AIX3/wCE9/8ChPb/BYb3/w2K9/8Zj/X/KJby/0Ok8f9suPP/mM/2/8Pk+f/g8vv/8vr9//z+ + /v////7///7+//7+/v/+/v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7//v/3/P3/6vX8/9jt + +/+/4/r/odP3/3zA9P9ZrvP/PqDx/yuY8v8dk/T/FI/0/w2K9f8HiPb/A4X2/wGE9v8AhPf/AIT3/wCD + +P8Ag/j/AIT3/wCE9/8AhPf/AIX3/wCF9/8Ahff/AIX4/wCF+P8AhPf/AIT4/wCE+P8AhPj/AIT4/wCE + +P8AhPf/AIT3/wCE9/8Ag/f/AIP2/wCE9v8Dhff/B4f3/w6L9v8Wj/b/IJP0/zCZ8f9Fo/L/YrT0/4fH + 9f+r2fj/yef6/9/x+//v+Pz/+/3+/////v////////////////////7///7////+/////v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////v///v7//v7+//r9/v/z+fz/6PT6/9nu+//H5/r/sd35/5bO + 9v99wvP/Y7Pw/06p8f86n/L/LZjy/yWV8/8ekvP/GJD1/xOO9v8QjPb/DYv2/wuL9f8Jivb/CIj2/weI + 9v8Hh/b/B4f2/weH9v8Hh/f/CIf3/wiI9/8Kivb/DYv2/w+M9v8TjvX/GI/0/x6S9P8llPP/LJjy/zqe + 8/9OqfL/Z7Xy/4PD9v+cz/f/uN75/83o+v/e8Pv/7Pf8//X7/f/6/f7//v/+//7+/v/+/v7//v7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////7+ + /v/+/v7///7+///+//////7////+//z+/v/4/P7/8fn9/+n1/P/g8fv/1+37/8vo+/+84fr/rNn5/5rQ + 9f+IyPT/e8L1/3K89v9puPX/YLT0/1mw9f9UrPb/Uar2/0+p9f9OqPT/T6j1/1Gp9f9Tq/X/V671/16y + 9f9ntvb/b7v2/3vB9v+Jx/X/mc/2/6zZ+f+84fr/y+j7/9ft/P/h8vz/6/b9//P5/f/5/P7//f7+//// + /v////7//v7+//3+/v/+/v7//v7+//7+/v/+/v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v////7////////////////+//// + /v////////////////////7//P/+//n9/f/2+/3/8fj8/+33+//p9fz/5/T8/+Ty/P/g8fz/3vD8/9zv + /P/a7/3/2O78/9ju/P/Z7vz/2u78/9zv+//d8Pz/4PH9/+Py/f/m8/z/6fX8/+z3/P/x+fz/9vv9//n9 + /f/9/v7///////////////////////////////////7////+///+//7//v7+///+/////v////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////7////9/v7//f7+///+ + /v////7//////////v////7////+/////v////7////+/////////////////////v////7////+//// + /v///////////////v////7////+/////v////7//v7+//7+/v////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////v////3////+/////v////7////+/////v////7////+/////v////7/ + //////////////7+///9/v///v7////+/////v///////////////////v////7////+/////v////7/ + ///+//////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + \ No newline at end of file diff --git a/YD10测试机/Form4.cs b/YD10测试机/Form4.cs index 22773d2..0c901aa 100644 --- a/YD10测试机/Form4.cs +++ b/YD10测试机/Form4.cs @@ -194,7 +194,7 @@ namespace YD10测试机 }; myUnitClass2[] readConfig = new myUnitClass2[31]; - myUnitClass2[] writeConfig = new myUnitClass2[15]; + myUnitClass2[] writeConfig = new myUnitClass2[17]; myUnitClass2[] alm_readConfig = new myUnitClass2[23]; myUnitClass2[] alm_writeConfig = new myUnitClass2[5]; @@ -513,6 +513,14 @@ namespace YD10测试机 writeConfig[14].name = "批次号"; writeConfig[14].status = true; + writeConfig[15].DID = "CF51"; + writeConfig[15].name = "GSENSOR旋转轴"; + writeConfig[15].status = true; + + writeConfig[16].DID = "CF52"; + writeConfig[16].name = "GSENSOR倾倒角度"; + writeConfig[16].status = true; + } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) diff --git a/YD10测试机/bin/Debug/YD07k参考信息.json b/YD10测试机/bin/Debug/YD07k参考信息.json index 19073ea..393a872 100644 --- a/YD10测试机/bin/Debug/YD07k参考信息.json +++ b/YD10测试机/bin/Debug/YD07k参考信息.json @@ -27,10 +27,10 @@ "外电电压值": "30(误差1)", "K线通讯状态": "1(不可更改)", "GSENSOR地址": null, - "六轴数据校准值": null, - "六轴传感器状态": null, - "音频文件状态": null, - "外电电平": null, + "六轴数据校准值": "有一个ffff就是不过", + "六轴传感器状态": "1(不可更改)", + "音频文件状态": "1(不可更改)", + "外电电平": "0(不可更改)", "硬件版本号": "12", "产品型号": "50", "产品识别码": "IOT", @@ -46,29 +46,29 @@ "物料编码": "(不填)", "供应商编码": "(不填)", "批次号": "(不填)", - "alm软件版本号": null, - "ACC1输出": null, - "ACC1预充": null, - "ACC2输出": null, - "ACC2预充": null, - "ACC1输入": null, - "机械钥匙": null, - "ACC2输入": null, - "右转向灯输入": null, - "蓝牙指示灯输出": null, - "双闪输出": null, - "轮动输入": null, - "左转向灯输入": null, - "MOTO_A输出": null, - "MOTO_B输出": null, - "锁电机输出": null, - "电磁阀输出": null, - "一键启动输入": null, - "坐垫感应输入": null, - "alm_外电电压值": null, - "alm_K线通讯": null, - "蓝牙连接": null, - "弹簧振子": null, + "alm软件版本号": "00.02", + "ACC1输出": "1(不可更改)", + "ACC1预充": "1(不可更改)", + "ACC2输出": "1(不可更改)", + "ACC2预充": "1(不可更改)", + "ACC1输入": "1(不可更改)", + "机械钥匙": "1(不可更改)", + "ACC2输入": "1(不可更改)", + "右转向灯输入": "1(不可更改)", + "蓝牙指示灯输出": "1(不可更改)", + "双闪输出": "1(不可更改)", + "轮动输入": "1(不可更改)", + "左转向灯输入": "1(不可更改)", + "MOTO_A输出": "1(不可更改)", + "MOTO_B输出": "1(不可更改)", + "锁电机输出": "1(不可更改)", + "电磁阀输出": "1(不可更改)", + "一键启动输入": "1(不可更改)", + "坐垫感应输入": "1(不可更改)", + "alm_外电电压值": "1(不可更改)", + "alm_K线通讯": "1(不可更改)", + "蓝牙连接": "1(不可更改)", + "弹簧振子": "1(不可更改)", "alm_外电电压AD比例值": null, "alm_音量等级": null, "alm_声音主题": null, diff --git a/YD10测试机/bin/Debug/YD07k配置.json b/YD10测试机/bin/Debug/YD07k配置.json deleted file mode 100644 index 8d453d6..0000000 --- a/YD10测试机/bin/Debug/YD07k配置.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "打印机": "", - "张数": "", - "自动打印机": true, - "自动蓝牙连接": true, - "号码校验": false -} \ No newline at end of file diff --git a/YD10测试机/bin/Debug/YD10参考信息.json b/YD10测试机/bin/Debug/YD10参考信息.json index fe91ac8..9ae8842 100644 --- a/YD10测试机/bin/Debug/YD10参考信息.json +++ b/YD10测试机/bin/Debug/YD10参考信息.json @@ -27,7 +27,7 @@ "外电电压值": "30(误差1)", "K线通讯状态": "1(不可更改)", "硬件版本号": "12", - "产品型号": "50", + "产品型号": "00", "产品识别码": "IOT", "产商识别码": "嘉为", "客户识别码": null, diff --git a/YD10测试机/bin/Debug/YD10日志/2025_4_7.CSV b/YD10测试机/bin/Debug/YD10日志/2025_4_7.CSV new file mode 100644 index 0000000..dff1436 --- /dev/null +++ b/YD10测试机/bin/Debug/YD10日志/2025_4_7.CSV @@ -0,0 +1,6 @@ + 2025/4/7 16:37:24,E-212,00.01,YD52170002,864979076757426,89860858102470401406,PASS + 2025/4/7 16:38:30,E-212,00.01,YD52170002,864979076757426,89860858102470401406,PASS + 2025/4/7 16:38:57,E-212,00.01,YD52170002,864979076757426,89860858102470401406,PASS + 2025/4/7 16:39:58,E-212,00.01,YD52170002,864979076757426,89860858102470401406,PASS + 2025/4/7 16:42:40,E-212,00.01,YD52170002,864979076757426,89860858102470401406,PASS + 2025/4/7 16:44:42,E-212,X000001,YD52170002,864979076757426,89860858102470401406,PASS diff --git a/YD10测试机/bin/Debug/YD10测试机.exe b/YD10测试机/bin/Debug/YD10测试机.exe index 1ba8ab8..e5841de 100644 Binary files a/YD10测试机/bin/Debug/YD10测试机.exe and b/YD10测试机/bin/Debug/YD10测试机.exe differ diff --git a/YD10测试机/bin/Debug/YD10测试机.pdb b/YD10测试机/bin/Debug/YD10测试机.pdb index b4bb53e..fa29a47 100644 Binary files a/YD10测试机/bin/Debug/YD10测试机.pdb and b/YD10测试机/bin/Debug/YD10测试机.pdb differ diff --git a/YD10测试机/bin/Debug/YD10配置.json b/YD10测试机/bin/Debug/YD10配置.json deleted file mode 100644 index 6bf6ddc..0000000 --- a/YD10测试机/bin/Debug/YD10配置.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "打印机": "", - "张数": "", - "自动打印机": true, - "号码校验": false -} \ No newline at end of file diff --git a/YD10测试机/bin/Debug/配置.json b/YD10测试机/bin/Debug/配置.json index ed763a2..c2028f4 100644 --- a/YD10测试机/bin/Debug/配置.json +++ b/YD10测试机/bin/Debug/配置.json @@ -1,6 +1,8 @@ { + "车型": "YD07k", "打印机": "导出为WPS PDF", "张数": "1", "自动打印机": true, + "自动蓝牙连接": true, "号码校验": false } \ No newline at end of file diff --git a/YD10测试机/bin/YD10&YD07K上位机临时V0.2.zip b/YD10测试机/bin/YD10&YD07K上位机临时V0.2.zip new file mode 100644 index 0000000..694b438 Binary files /dev/null and b/YD10测试机/bin/YD10&YD07K上位机临时V0.2.zip differ diff --git a/YD10测试机/bin/YD10&YD07K上位机临时V0.3.zip b/YD10测试机/bin/YD10&YD07K上位机临时V0.3.zip new file mode 100644 index 0000000..ffc6eb9 Binary files /dev/null and b/YD10测试机/bin/YD10&YD07K上位机临时V0.3.zip differ diff --git a/YD10测试机/bin/YD10&YD07K上位机临时V0.4.zip b/YD10测试机/bin/YD10&YD07K上位机临时V0.4.zip new file mode 100644 index 0000000..97db271 Binary files /dev/null and b/YD10测试机/bin/YD10&YD07K上位机临时V0.4.zip differ diff --git a/YD10测试机/bin/YD10&YD07K上位机临时V0.5.zip b/YD10测试机/bin/YD10&YD07K上位机临时V0.5.zip new file mode 100644 index 0000000..c7b877e Binary files /dev/null and b/YD10测试机/bin/YD10&YD07K上位机临时V0.5.zip differ diff --git a/YD10测试机/bin/YD10&YD07K上位机临时V0.6.zip b/YD10测试机/bin/YD10&YD07K上位机临时V0.6.zip new file mode 100644 index 0000000..f653ed0 Binary files /dev/null and b/YD10测试机/bin/YD10&YD07K上位机临时V0.6.zip differ diff --git a/YD10测试机/bin/YD10上位机V2.1-25.4.7.zip b/YD10测试机/bin/YD10上位机V2.1-25.4.7.zip new file mode 100644 index 0000000..b35eb3a Binary files /dev/null and b/YD10测试机/bin/YD10上位机V2.1-25.4.7.zip differ diff --git a/YD10测试机/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/YD10测试机/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index c3ca601..b4ea1ec 100644 Binary files a/YD10测试机/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/YD10测试机/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/YD10测试机/obj/Debug/YD10测试机.Form3.resources b/YD10测试机/obj/Debug/YD10测试机.Form3.resources index 6c05a97..c795599 100644 Binary files a/YD10测试机/obj/Debug/YD10测试机.Form3.resources and b/YD10测试机/obj/Debug/YD10测试机.Form3.resources differ diff --git a/YD10测试机/obj/Debug/YD10测试机.csproj.CoreCompileInputs.cache b/YD10测试机/obj/Debug/YD10测试机.csproj.CoreCompileInputs.cache index 54443b7..01458ee 100644 --- a/YD10测试机/obj/Debug/YD10测试机.csproj.CoreCompileInputs.cache +++ b/YD10测试机/obj/Debug/YD10测试机.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -80cfbf33494ef7ebc9674e6fc57c5dc51e43a69d +09981f47e9a0ec78680c73280e06f446dc9438e3 diff --git a/YD10测试机/obj/Debug/YD10测试机.csproj.FileListAbsolute.txt b/YD10测试机/obj/Debug/YD10测试机.csproj.FileListAbsolute.txt index a22902f..2fd1d65 100644 --- a/YD10测试机/obj/Debug/YD10测试机.csproj.FileListAbsolute.txt +++ b/YD10测试机/obj/Debug/YD10测试机.csproj.FileListAbsolute.txt @@ -12,3 +12,17 @@ C:\Users\Administrator\Documents\YD10测试机\YD10测试机\bin\Debug\YD10测 C:\Users\Administrator\Documents\YD10测试机\YD10测试机\obj\Debug\YD10测试机.csproj.CopyComplete C:\Users\Administrator\Documents\YD10测试机\YD10测试机\obj\Debug\YD10测试机.Form3.resources C:\Users\Administrator\Documents\YD10测试机\YD10测试机\obj\Debug\YD10测试机.Form4.resources +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\bin\Debug\YD10测试机.exe.config +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\bin\Debug\YD10测试机.exe +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\bin\Debug\YD10测试机.pdb +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.csproj.AssemblyReference.cache +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.Form1.resources +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.Form2.resources +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.Form3.resources +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.Form4.resources +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.Properties.Resources.resources +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.csproj.GenerateResource.cache +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.csproj.CoreCompileInputs.cache +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.csproj.CopyComplete +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.exe +C:\Users\Administrator\source\repos\YD10-YD07k_SMT\YD10测试机\obj\Debug\YD10测试机.pdb diff --git a/YD10测试机/obj/Debug/YD10测试机.csproj.GenerateResource.cache b/YD10测试机/obj/Debug/YD10测试机.csproj.GenerateResource.cache index d0df441..811596a 100644 Binary files a/YD10测试机/obj/Debug/YD10测试机.csproj.GenerateResource.cache and b/YD10测试机/obj/Debug/YD10测试机.csproj.GenerateResource.cache differ diff --git a/YD10测试机/obj/Debug/YD10测试机.exe b/YD10测试机/obj/Debug/YD10测试机.exe index 1ba8ab8..e5841de 100644 Binary files a/YD10测试机/obj/Debug/YD10测试机.exe and b/YD10测试机/obj/Debug/YD10测试机.exe differ diff --git a/YD10测试机/obj/Debug/YD10测试机.pdb b/YD10测试机/obj/Debug/YD10测试机.pdb index b4bb53e..fa29a47 100644 Binary files a/YD10测试机/obj/Debug/YD10测试机.pdb and b/YD10测试机/obj/Debug/YD10测试机.pdb differ diff --git a/YD10测试机/obj/YD10测试机.csproj.nuget.dgspec.json b/YD10测试机/obj/YD10测试机.csproj.nuget.dgspec.json index 57b3239..bd8128e 100644 --- a/YD10测试机/obj/YD10测试机.csproj.nuget.dgspec.json +++ b/YD10测试机/obj/YD10测试机.csproj.nuget.dgspec.json @@ -1,17 +1,17 @@ { "format": 1, "restore": { - "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\YD10测试机.csproj": {} + "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\YD10测试机.csproj": {} }, "projects": { - "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\YD10测试机.csproj": { + "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\YD10测试机.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\YD10测试机.csproj", + "projectUniqueName": "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\YD10测试机.csproj", "projectName": "YD10测试机", - "projectPath": "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\YD10测试机.csproj", + "projectPath": "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\YD10测试机.csproj", "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", - "outputPath": "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\obj\\", + "outputPath": "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\obj\\", "projectStyle": "PackageReference", "skipContentFileWrite": true, "configFilePaths": [ diff --git a/YD10测试机/obj/project.assets.json b/YD10测试机/obj/project.assets.json index a001771..a461951 100644 --- a/YD10测试机/obj/project.assets.json +++ b/YD10测试机/obj/project.assets.json @@ -610,11 +610,11 @@ "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\YD10测试机.csproj", + "projectUniqueName": "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\YD10测试机.csproj", "projectName": "YD10测试机", - "projectPath": "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\YD10测试机.csproj", + "projectPath": "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\YD10测试机.csproj", "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\", - "outputPath": "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\obj\\", + "outputPath": "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\obj\\", "projectStyle": "PackageReference", "skipContentFileWrite": true, "configFilePaths": [ diff --git a/YD10测试机/obj/project.nuget.cache b/YD10测试机/obj/project.nuget.cache index 8796f69..79873b0 100644 --- a/YD10测试机/obj/project.nuget.cache +++ b/YD10测试机/obj/project.nuget.cache @@ -1,8 +1,8 @@ { "version": 2, - "dgSpecHash": "/hxHqHvKBHnTl2nY1vWC4fuQQf174zQl3otU2850yc80/h+OrdqXX0C/e/FuA7cLxwkrBT9ct9texSHNfNfHoA==", + "dgSpecHash": "oCZi0SwUapJ7/sIPKtktKGcSfKEdxjkL1/MkxRHZ7xLAF4Wr93elWIo7bnFXSfg8wty9KDw6l7gk13hWtYE+QA==", "success": true, - "projectFilePath": "C:\\Users\\Administrator\\Documents\\YD10测试机\\YD10测试机\\YD10测试机.csproj", + "projectFilePath": "C:\\Users\\Administrator\\source\\repos\\YD10-YD07k_SMT\\YD10测试机\\YD10测试机.csproj", "expectedPackageFiles": [ "C:\\Users\\Administrator\\.nuget\\packages\\microsoft.windows.sdk.contracts\\10.0.26100.1742\\microsoft.windows.sdk.contracts.10.0.26100.1742.nupkg.sha512", "C:\\Users\\Administrator\\.nuget\\packages\\system.runtime.interopservices.windowsruntime\\4.3.0\\system.runtime.interopservices.windowsruntime.4.3.0.nupkg.sha512",