From 066686205cf5ae6a907e355696768f32b6614797 Mon Sep 17 00:00:00 2001 From: Moonbase Date: Mon, 8 Dec 2025 19:06:21 -0800 Subject: [PATCH] Slight UI Adjustments Add Profile Image Click Event Reimplement Chat Rooms --- QtCNETAPI/Events/RoomListEventArgs.cs | 1 + QtCNETAPI/Events/ServerMessageEventArgs.cs | 8 +- .../Services/GatewayService/GatewayService.cs | 4 +- .../CurrentProfileControl.Designer.cs | 2 + .../Controls/CurrentProfileControl.cs | 4 + .../Controls/MainTabControl.Designer.cs | 8 +- qtcnet-client/Controls/MainTabControl.resx | 696 +++++++++--------- qtcnet-client/Controls/MessageControl.cs | 2 + qtcnet-client/Controls/RoomControl.cs | 2 +- qtcnet-client/Forms/ChatRoomForm.cs | 125 +++- qtcnet-client/Forms/MainForm.Designer.cs | 1 + qtcnet-client/Forms/MainForm.cs | 474 ++++++------ qtcnet-client/QtCNETAppIconV2.ico | Bin 0 -> 4286 bytes qtcnet-client/qtcnet-client.csproj | 5 + 14 files changed, 744 insertions(+), 588 deletions(-) create mode 100644 qtcnet-client/QtCNETAppIconV2.ico diff --git a/QtCNETAPI/Events/RoomListEventArgs.cs b/QtCNETAPI/Events/RoomListEventArgs.cs index b259331..b8b680c 100644 --- a/QtCNETAPI/Events/RoomListEventArgs.cs +++ b/QtCNETAPI/Events/RoomListEventArgs.cs @@ -9,6 +9,7 @@ namespace QtCNETAPI.Events { public class RoomListEventArgs : EventArgs { + public required Room Room { get; set; } public required List UserList { get; set; } } } diff --git a/QtCNETAPI/Events/ServerMessageEventArgs.cs b/QtCNETAPI/Events/ServerMessageEventArgs.cs index de24b5e..d521442 100644 --- a/QtCNETAPI/Events/ServerMessageEventArgs.cs +++ b/QtCNETAPI/Events/ServerMessageEventArgs.cs @@ -1,13 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using QtCNETAPI.Models; namespace QtCNETAPI.Events { public class ServerMessageEventArgs : EventArgs { + public required User User { get; set; } + public required Room Room { get; set; } public required string Message { get; set; } } } diff --git a/QtCNETAPI/Services/GatewayService/GatewayService.cs b/QtCNETAPI/Services/GatewayService/GatewayService.cs index b58aea7..aec7a64 100644 --- a/QtCNETAPI/Services/GatewayService/GatewayService.cs +++ b/QtCNETAPI/Services/GatewayService/GatewayService.cs @@ -63,14 +63,14 @@ namespace QtCNETAPI.Services.GatewayService HubConnection = gwConBuilder.Build(); // register events - HubConnection.On("RoomMessage", (serverMessage) => OnRoomMessageReceived?.Invoke(this, new ServerMessageEventArgs { Message = serverMessage })); + HubConnection.On("RoomMessage", (user, msg, room) => OnRoomMessageReceived?.Invoke(this, new ServerMessageEventArgs { User = user, Room = room, Message = msg })); HubConnection.On("cf", (function) => OnClientFunctionReceived?.Invoke(this, new ClientFunctionEventArgs { Function = function })); HubConnection.On("ReceiveDirectMessage", (message, user) => OnDirectMessageReceived?.Invoke(this, new DirectMessageEventArgs { Message = message, User = user })); HubConnection.On("RefreshUserLists", () => OnRefreshUserListsReceived?.Invoke(this, EventArgs.Empty)); HubConnection.On("RefreshRoomList", () => OnRefreshRoomListReceived?.Invoke(this, EventArgs.Empty)); HubConnection.On("RefreshContactsList", () => OnRefreshContactsListReceived?.Invoke(this, EventArgs.Empty)); HubConnection.On("ReceiveServerConfig", (serverConfig) => OnServerConfigReceived?.Invoke(this, new ServerConfigEventArgs { ServerConfig = serverConfig })); - HubConnection.On>("RoomUserList", (userList) => OnRoomUserListReceived?.Invoke(this, new RoomListEventArgs { UserList = userList })); + HubConnection.On>("RoomUserList", (room, userList) => OnRoomUserListReceived?.Invoke(this, new RoomListEventArgs { Room = room, UserList = userList })); HubConnection.On("GuestJoin", (username) => OnGuestUserJoin?.Invoke(this, new GuestUserJoinEventArgs { Username = username })); HubConnection.On("RoomDeleted", () => OnRoomDeleted?.Invoke(this, EventArgs.Empty)); HubConnection.On("ForceSignOut", () => OnUserForceLogout?.Invoke(this, EventArgs.Empty)); diff --git a/qtcnet-client/Controls/CurrentProfileControl.Designer.cs b/qtcnet-client/Controls/CurrentProfileControl.Designer.cs index a521661..4939796 100644 --- a/qtcnet-client/Controls/CurrentProfileControl.Designer.cs +++ b/qtcnet-client/Controls/CurrentProfileControl.Designer.cs @@ -40,6 +40,7 @@ // // pbCurrentProfilePic // + pbCurrentProfilePic.Cursor = Cursors.Hand; pbCurrentProfilePic.Image = Properties.Resources.DefaultPfp; pbCurrentProfilePic.Location = new Point(3, 3); pbCurrentProfilePic.Name = "pbCurrentProfilePic"; @@ -47,6 +48,7 @@ pbCurrentProfilePic.SizeMode = PictureBoxSizeMode.Zoom; pbCurrentProfilePic.TabIndex = 0; pbCurrentProfilePic.TabStop = false; + pbCurrentProfilePic.Click += pbCurrentProfilePic_Click; // // llblSignOut // diff --git a/qtcnet-client/Controls/CurrentProfileControl.cs b/qtcnet-client/Controls/CurrentProfileControl.cs index 2e57a7b..6c67c9a 100644 --- a/qtcnet-client/Controls/CurrentProfileControl.cs +++ b/qtcnet-client/Controls/CurrentProfileControl.cs @@ -18,6 +18,8 @@ namespace qtcnet_client.Controls [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public Image ProfileImage { get; set; } = Resources.DefaultPfp; + public event EventHandler? OnProfileImageClicked; + public CurrentProfileControl() { InitializeComponent(); @@ -29,5 +31,7 @@ namespace qtcnet_client.Controls lblCurrencyAmount.Text = CurrencyCount.ToString(); pbCurrentProfilePic.Image = ProfileImage; } + + private void pbCurrentProfilePic_Click(object sender, EventArgs e) => OnProfileImageClicked?.Invoke(this, EventArgs.Empty); } } diff --git a/qtcnet-client/Controls/MainTabControl.Designer.cs b/qtcnet-client/Controls/MainTabControl.Designer.cs index f34d176..5908376 100644 --- a/qtcnet-client/Controls/MainTabControl.Designer.cs +++ b/qtcnet-client/Controls/MainTabControl.Designer.cs @@ -89,6 +89,7 @@ // // tlpContactsList // + tlpContactsList.BackColor = Color.White; tlpContactsList.ColumnCount = 1; tlpContactsList.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); tlpContactsList.Dock = DockStyle.Fill; @@ -117,6 +118,7 @@ // // tlpRoomsList // + tlpRoomsList.BackColor = Color.White; tlpRoomsList.ColumnCount = 1; tlpRoomsList.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); tlpRoomsList.Dock = DockStyle.Fill; @@ -143,7 +145,7 @@ // // lvUserList // - lvUserList.BorderStyle = BorderStyle.FixedSingle; + lvUserList.BorderStyle = BorderStyle.None; lvUserList.Location = new Point(3, 3); lvUserList.MultiSelect = false; lvUserList.Name = "lvUserList"; @@ -151,7 +153,7 @@ lvUserList.SmallImageList = ilStatusIcons; lvUserList.TabIndex = 0; lvUserList.UseCompatibleStateImageBehavior = false; - lvUserList.View = View.List; + lvUserList.View = View.SmallIcon; // // ilStatusIcons // @@ -179,6 +181,7 @@ // // lvGameList // + lvGameList.BorderStyle = BorderStyle.None; lvGameList.Dock = DockStyle.Fill; lvGameList.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point, 0); listViewItem1.ToolTipText = "Stock Market"; @@ -219,6 +222,7 @@ // // listView1 // + listView1.BorderStyle = BorderStyle.None; listView1.Dock = DockStyle.Fill; listView1.Location = new Point(3, 3); listView1.MultiSelect = false; diff --git a/qtcnet-client/Controls/MainTabControl.resx b/qtcnet-client/Controls/MainTabControl.resx index 231c789..fea561b 100644 --- a/qtcnet-client/Controls/MainTabControl.resx +++ b/qtcnet-client/Controls/MainTabControl.resx @@ -124,93 +124,93 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAAhQAAAJNU0Z0AUkBTAIBAQQB - AAGoAQABqAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/ + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA+hMAAAJNU0Z0AUkBTAIBAQQB + AAHIAQAByAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASD/ AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AC4AAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B 0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYB BwM0AVQDUQGiA14B0gNaAekDYAHoA10B0QNQAZ8DMQFNAwUBBhgAAwYBBwM0AVQDUQGiA14B0gNaAekD - YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA08B9QMkAfsDOQH+AzkB/gMkAfsDUwH0A2IB - 4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQBSAFaAUgB9QEhAVUBIQH7ARUBVQEVAf4BFQFVARUB/gEhAVUB - IQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAUgCWgH1ASECVQH7ARUCVQH+ARUCVQH+ASEC - VQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAkgBWgH1AiEBVQH7AhUBVQH+AhUBVQH+AiEB - VQH7A1MB9ANiAeEDUQGhAx4BKgwAAxsBJQNYAb0DWgHyAz0B/gMwAf8DOQH/AzwB/wM2Af8DKgH/AyQB - /wNAAf0DWwHwA1YBsgMaASMIAAMbASUDWAG9A1oB8gEVAV0BFQH+AQABVwEAAf8BAAFnAQAB/wEAAWwB - AAH/AQABYQEAAf8BAAFMAQAB/wEAAUABAAH/ASoBQAEqAf0BVwFeAVcB8ANWAbIBGQEaARkBIwgAAxsB - JQNYAb0DWgHyARUCXQH+AQACVwH/AQACZwH/AQACbAH/AQACYQH/AQACTAH/AQACQAH/ASoCQAH9AVcC - XgHwA1YBsgEZAhoBIwgAAxsBJQNYAb0DWgHyAhUBXQH+AgABVwH/AgABZwH/AgABbAH/AgABYQH/AgAB - TAH/AgABQAH/AioBQAH9AlcBXgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB - /wN1Af8DcQH/A2QB/wNMAf8DMQH/AzkB/gNfAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFTAW8BUwHzAQAB + YAHoA10B0QNQAZ8DMQFNAwUBBhQAAyABLQNUAasDWwHkA1YB9QMkAfsDPQH+Az0B/gMkAfsDUwH0A2IB + 4QNRAaEDHgEqEAADIAEtA1QBqwNbAeQBTAFaAUwB9QEhAVkBIQH7ARkBWQEZAf4BGQFZARkB/gEhAVkB + IQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAUwCWgH1ASECWQH7ARkCWQH+ARkCWQH+ASEC + WQH7A1MB9ANiAeEDUQGhAx4BKhAAAyABLQNUAasDWwHkAkwBWgH1AiEBWQH7AhkBWQH+AhkBWQH+AiEB + WQH7A1MB9ANiAeEDUQGhAx4BKgwAAxsBJQNYAb0DWgHyA0EB/gMwAf8DOQH/AzwB/wM2Af8DKgH/AyQB + /wNAAf0DXgHwA1YBsgMaASMIAAMbASUDWAG9A1oB8gEZAWEBGQH+AQABVwEAAf8BAAFnAQAB/wEAAWwB + AAH/AQABYQEAAf8BAAFMAQAB/wEAAUABAAH/ATIBQAEyAf0BWwFeAVsB8ANWAbIBGQEaARkBIwgAAxsB + JQNYAb0DWgHyARkCYQH+AQACVwH/AQACZwH/AQACbAH/AQACYQH/AQACTAH/AQACQAH/ATICQAH9AVsC + XgHwA1YBsgEZAhoBIwgAAxsBJQNYAb0DWgHyAhkBYQH+AgABVwH/AgABZwH/AgABbAH/AgABYQH/AgAB + TAH/AgABQAH/AjIBQAH9AlsBXgHwA1YBsgIZARoBIwQAAwMBBANSAaUDYAHzA0kB/wNVAf8DZQH/A3EB + /wN1Af8DcQH/A2QB/wNMAf8DMQH/Az0B/gNiAe4DUAGaAwMBBAMDAQQBUgFTAVIBpQFYAW8BWAHzAQAB ggEAAf8BAAGZAQAB/wEAAbYBAAH/AQABzAEAAf8BAAHTAQAB/wEAAcsBAAH/AQABswEAAf8BAAGIAQAB - /wEAAVcBAAH/ARUBVQEVAf4BXAFiAVwB7gNQAZoDAwEEAwMBBAFSAlMBpQFTAm8B8wEAAoIB/wEAApkB - /wEAArYB/wEAAswB/wEAAtMB/wEAAssB/wEAArMB/wEAAogB/wEAAlcB/wEVAlUB/gFcAmIB7gNQAZoD - AwEEAwMBBAJSAVMBpQJTAW8B8wIAAYIB/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB - /wIAAYgB/wIAAVcB/wIVAVUB/gJcAWIB7gNQAZoDAwEEAy0BRANgAegDeAH+A24B/wN7Af8DhQH/A4oB - /wOMAf8DigH/A4UB/wN2Af8DVwH/AzIB/wNAAf0DXgHdAyoBPwMtAUQBYAFpAWAB6AEVAYoBFQH+AQAB + /wEAAVcBAAH/ARkBWQEZAf4BYAFiAWAB7gNQAZoDAwEEAwMBBAFSAlMBpQFYAm8B8wEAAoIB/wEAApkB + /wEAArYB/wEAAswB/wEAAtMB/wEAAssB/wEAArMB/wEAAogB/wEAAlcB/wEZAlkB/gFgAmIB7gNQAZoD + AwEEAwMBBAJSAVMBpQJYAW8B8wIAAYIB/wIAAZkB/wIAAbYB/wIAAcwB/wIAAdMB/wIAAcsB/wIAAbMB + /wIAAYgB/wIAAVcB/wIZAVkB/gJgAWIB7gNQAZoDAwEEAy0BRANgAegDfAH+A24B/wN7Af8DhQH/A4oB + /wOMAf8DigH/A4UB/wN2Af8DVwH/AzIB/wNAAf0DXgHdAyoBPwMtAUQBYAFpAWAB6AEZAYIBGQH+AQAB xgEAAf8BAAHcAQAB/wEAAe4BAAH/AQAB+AEAAf8BAAH7AQAB/wEAAfkBAAH/AQAB7wEAAf8BAAHUAQAB - /wEAAZwBAAH/AQABWgEAAf8BKgFAASoB/QNeAd0DKgE/Ay0BRAFgAmkB6AEVAooB/gEAAsYB/wEAAtwB - /wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB/wEAApwB/wEAAloB/wEqAkAB/QNeAd0D - KgE/Ay0BRAJgAWkB6AIVAYoB/gIAAcYB/wIAAdwB/wIAAe4B/wIAAfgB/wIAAfsB/wIAAfkB/wIAAe8B - /wIAAdQB/wIAAZwB/wIAAVoB/wIqAUAB/QNeAd0DKgE/A04BlQN3AfgDfwH/A4UB/wOKAf8DjQH/A44B - /wOOAf8DjgH/A40B/wOJAf8DdwH/A00B/wMlAf8DWgHyA0oBiwNOAZUBPwGKAT8B+AEAAeUBAAH/AQAB + /wEAAZwBAAH/AQABWgEAAf8BMgFAATIB/QNeAd0DKgE/Ay0BRAFgAmkB6AEZAoIB/gEAAsYB/wEAAtwB + /wEAAu4B/wEAAvgB/wEAAvsB/wEAAvkB/wEAAu8B/wEAAtQB/wEAApwB/wEAAloB/wEyAkAB/QNeAd0D + KgE/Ay0BRAJgAWkB6AIZAYIB/gIAAcYB/wIAAdwB/wIAAe4B/wIAAfgB/wIAAfsB/wIAAfkB/wIAAe8B + /wIAAdQB/wIAAZwB/wIAAVoB/wIyAUAB/QNeAd0DKgE/A04BlQN3AfgDfwH/A4UB/wOKAf8DjQH/A44B + /wOOAf8DjgH/A40B/wOJAf8DdwH/A00B/wMlAf8DWgHyA0oBiwNOAZUBQwF+AUMB+AEAAeUBAAH/AQAB 7wEAAf8BAAH4AQAB/wEAAf0BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/gEAAf8BAAH2AQAB - /wEAAdUBAAH/AQABiwEAAf8BAAFBAQAB/wNaAfIDSgGLA04BlQE/AooB+AEAAuUB/wEAAu8B/wEAAvgB + /wEAAdUBAAH/AQABiwEAAf8BAAFBAQAB/wNaAfIDSgGLA04BlQFDAn4B+AEAAuUB/wEAAu8B/wEAAvgB /wEAAv0B/wEAA/8BAAP/AQAD/wEAAv4B/wEAAvYB/wEAAtUB/wEAAosB/wEAAkEB/wNaAfIDSgGLA04B - lQI/AYoB+AIAAeUB/wIAAe8B/wIAAfgB/wIAAf0B/wIAAv8CAAL/AgAC/wIAAf4B/wIAAfYB/wIAAdUB + lQJDAX4B+AIAAeUB/wIAAe8B/wIAAfgB/wIAAf0B/wIAAv8CAAL/AgAC/wIAAf4B/wIAAfYB/wIAAdUB /wIAAYsB/wIAAUEB/wNaAfIDSgGLA18B0wN+AfwDkwH/A44B/wONAf8DjgH/A44B/wOOAf8DjgH/A44B - /wONAf8DhQH/A2cB/wM0Af8DQQH5A1oBxAFbAV8BWwHTASsBtgErAfwBDgH7AQ4B/wEDAf0BAwH/AQAB + /wONAf8DhQH/A2cB/wM0Af8DQQH5A1oBxAFbAV8BWwHTASsBrgErAfwBDgH7AQ4B/wEDAf0BAwH/AQAB /gEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHvAQAB - /wEAAbkBAAH/AQABXQEAAf8BPgFBAT4B+QNaAcQBWwJfAdMBKwK2AfwBDgL7Af8BAwL9Af8BAAL+Af8B - AAP/AQAD/wEAA/8BAAP/AQAD/wEAAv0B/wEAAu8B/wEAArkB/wEAAl0B/wE+AkEB+QNaAcQCWwFfAdMC - KwG2AfwCDgH7Af8CAwH9Af8CAAH+Af8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf0B/wIAAe8B/wIAAbkB - /wIAAV0B/wI+AUEB+QNaAcQDbgH1A4AB/gOfAf8DkwH/A48B/wOOAf8DjgH/A44B/wOOAf8DjgH/A44B - /wOLAf8DdwH/A0gB/wNAAf0DYgHhAU0BfwFNAfUBOQHVATkB/gEnAf8BJwH/AQsB/wELAf8BAQH/AQEB - /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAfkBAAH/AQAB - 1gEAAf8BAAGBAQAB/wEqAUABKgH9A2IB4QFNAn8B9QE5AtUB/gEnA/8BCwP/AQED/wEAA/8BAAP/AQAD - /wEAA/8BAAP/AQAD/wEAAvkB/wEAAtYB/wEAAoEB/wEqAkAB/QNiAeECTQF/AfUCOQHVAf4CJwL/AgsC - /wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH5Af8CAAHWAf8CAAGBAf8CKgFAAf0DYgHhA3IB - 9gOEAf4DqwH/A5kB/wOQAf8DjgH/A44B/wOOAf8DjgH/A44B/wOOAf8DjQH/A38B/wNVAf8DQAH9A14B - 4gFIAX8BSAH2AVwB1QFcAf4BQgH/AUIB/wEZAf8BGQH/AQQB/wEEAf8BAAH/AQAB/wEAAf8BAAH/AQAB - /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH9AQAB/wEAAeQBAAH/AQABmAEAAf8BKgFAASoB - /QNeAeIBSAJ/AfYBXALVAf4BQgP/ARkD/wEEA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAL9Af8B - AALkAf8BAAKYAf8BKgJAAf0DXgHiAkgBfwH2AlwB1QH+AkIC/wIZAv8CBAL/AgAC/wIAAv8CAAL/AgAC - /wIAAv8CAAL/AgAB/QH/AgAB5AH/AgABmAH/AioBQAH9A14B4gNhAdYDgwH8A7gB/wOjAf8DkwH/A44B - /wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wOCAf8DXAH/A00B+gNaAccBXAFhAVwB1gFkAboBZAH8AV8B - /wFfAf8BLwH/AS8B/wEMAf8BDAH/AQEB/wEBAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB - /wEAAf8BAAH/AQAB/gEAAf8BAAHqAQAB/wEAAaUBAAH/ASkBTQEpAfoDWgHHAVwCYQHWAWQCugH8AV8D - /wEvA/8BDAP/AQED/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/gH/AQAC6gH/AQACpQH/ASkCTQH6A1oB - xwJcAWEB1gJkAboB/AJfAv8CLwL/AgwC/wIBAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf4B/wIAAeoB - /wIAAaUB/wIpAU0B+gNaAccDUAGaA4sB+QPFAf8DsgH/A5wB/wORAf8DjgH/A44B/wOOAf8DjgH/A48B - /wOOAf8DgwH/A2AB/wNaAfIDTAGQA1ABmgFqAZkBagH5AXwB/wF8Af8BUQH/AVEB/wEfAf8BHwH/AQcB - /wEHAf8BAQH/AQEB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wECAf8BAgH/AQIB/gECAf8BAAHrAQAB - /wEAAa0BAAH/AVoBawFaAfIDTAGQA1ABmgFqApkB+QF8A/8BUQP/AR8D/wEHA/8BAQP/AQAD/wEAA/8B - AAP/AQID/wECAv4B/wEAAusB/wEAAq0B/wFaAmsB8gNMAZADUAGaAmoBmQH5AnwC/wJRAv8CHwL/AgcC - /wIBAv8CAAL/AgAC/wIAAv8CAgL/AgIB/gH/AgAB6wH/AgABrQH/AloBawHyA0wBkAMvAUkDbAHrA6YB - /gPGAf8DrgH/A5wB/wOTAf8DkAH/A48B/wOQAf8DkwH/A5MB/wOFAf8DUQH9A2AB4AMtAUUDLwFJA2wB - 6wGAAdUBgAH+AX8B/wF/Af8BSQH/AUkB/wEfAf8BHwH/AQwB/wEMAf8BBQH/AQUB/wEDAf8BAwH/AQUB - /wEFAf8BCgH/AQoB/wEKAf4BCgH/AQEB7QEBAf8BKgG2ASoB/QFgAWYBYAHgAy0BRQMvAUkDbAHrAYAC - 1QH+AX8D/wFJA/8BHwP/AQwD/wEFA/8BAwP/AQUD/wEKA/8BCgL+Af8BAQLtAf8BKgK2Af0BYAJmAeAD - LQFFAy8BSQNsAesCgAHVAf4CfwL/AkkC/wIfAv8CDAL/AgUC/wIDAv8CBQL/AgoC/wIKAf4B/wIBAe0B - /wIqAbYB/QJgAWYB4AMtAUUDAwEEA1YBrgN2AfUD2QH/A8sB/wO3Af8DpwH/A50B/wOaAf8DnAH/A58B - /wObAf8DiQH/A2gB8ANSAaMDAwEEAwMBBANWAa4BbgF/AW4B9QGoAf8BqAH/AYkB/wGJAf8BXAH/AVwB - /wE3Af8BNwH/ASIB/wEiAf8BGwH/ARsB/wEfAf8BHwH/ASYB/wEmAf8BHQH/AR0B/wEFAfMBBQH/AVcB - aQFXAfADUgGjAwMBBAMDAQQDVgGuAW4CfwH1AagD/wGJA/8BXAP/ATcD/wEiA/8BGwP/AR8D/wEmA/8B - HQP/AQUC8wH/AVcCaQHwA1IBowMDAQQDAwEEA1YBrgJuAX8B9QKoAv8CiQL/AlwC/wI3Av8CIgL/AhsC - /wIfAv8CJgL/Ah0C/wIFAfMB/wJXAWkB8ANSAaMDAwEEBAADHAEnA10BxwN6AfYDtQH+A9cB/wPMAf8D - wgH/A7sB/wO3Af8DsQH/A4AB/gNoAfQDWQG8AxsBJggAAxwBJwNdAccBdQF/AXUB9gGNAdUBjQH+AaUB - /wGlAf8BiwH/AYsB/wF0Af8BdAH/AWYB/wFmAf8BXAH/AVwB/wFOAf8BTgH/AUUB1QFFAf4BUwF6AVMB - 9AFXAVkBVwG8AxsBJggAAxwBJwNdAccBdQJ/AfYBjQLVAf4BpQP/AYsD/wF0A/8BZgP/AVwD/wFOA/8B - RQLVAf4BUwJ6AfQBVwJZAbwDGwEmCAADHAEnA10BxwJ1AX8B9gKNAdUB/gKlAv8CiwL/AnQC/wJmAv8C - XAL/Ak4C/wJFAdUB/gJTAXoB9AJXAVkBvAMbASYMAAMhATADWQG2A2oB7gObAfoDvgH9A9QB/wPMAf8D - vgH9A4cB+QNsAesDVQGsAx8BLBAAAyEBMANZAbYBaAFsAWgB7gGBAaUBgQH6Aa4BwAGuAf0BnwH/AZ8B - /wGMAf8BjAH/AWEBwAFhAf0BaAGZAWgB+QFhAWwBYQHrA1UBrAMfASwQAAMhATADWQG2AWgCbAHuAYEC - pQH6Aa4CwAH9AZ8D/wGMA/8BYQLAAf0BaAKZAfkBYQJsAesDVQGsAx8BLBAAAyEBMANZAbYCaAFsAe4C - gQGlAfoCrgHAAf0CnwL/AowC/wJhAcAB/QJoAZkB+QJhAWwB6wNVAawDHwEsFAADBgEHAzYBWANVAawD - ZgHlA6kB/AOWAfsDZQHiA1MBpwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAX4BugF+AfwBcwGqAXMB - +wNlAeIDUwGnAzMBUQMGAQcYAAMGAQcDNgFYA1UBrANmAeUBfgK6AfwBcwKqAfsDZQHiA1MBpwMzAVED - BgEHGAADBgEHAzYBWANVAawDZgHlAn4BugH8AnMBqgH7A2UB4gNTAacDMwFRAwYBBwwAAUIBTQE+BwAB - PgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/+BAAHgAQcB4AEHAeABBwHgAQcBwAEDAcABAwHAAQMB - wAEDAYABAQGAAQEBgAEBAYABAVAAAYABAQGAAQEBgAEBAYABAQHAAQMBwAEDAcABAwHAAQMB4AEHAeAB - BwHgAQcB4AEHCw== + /wEAAbkBAAH/AQABXQEAAf8DQQH5A1oBxAFbAl8B0wErAq4B/AEOAvsB/wEDAv0B/wEAAv4B/wEAA/8B + AAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC7wH/AQACuQH/AQACXQH/A0EB+QNaAcQCWwFfAdMCKwGuAfwC + DgH7Af8CAwH9Af8CAAH+Af8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAf0B/wIAAe8B/wIAAbkB/wIAAV0B + /wNBAfkDWgHEA24B9QOAAf4DnwH/A5MB/wOPAf8DjgH/A44B/wOOAf8DjgH/A44B/wOOAf8DiwH/A3cB + /wNIAf8DQAH9A2IB4QFVAXMBVQH1AT0BzQE9Af4BJwH/AScB/wELAf8BCwH/AQEB/wEBAf8BAAH/AQAB + /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH5AQAB/wEAAdYBAAH/AQAB + gQEAAf8BMgFAATIB/QNiAeEBVQJzAfUBPQLNAf4BJwP/AQsD/wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD + /wEAA/8BAAL5Af8BAALWAf8BAAKBAf8BMgJAAf0DYgHhAlUBcwH1Aj0BzQH+AicC/wILAv8CAQL/AgAC + /wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAB+QH/AgAB1gH/AgABgQH/AjIBQAH9A2IB4QNrAfYDgAH+A6sB + /wOZAf8DkAH/A44B/wOOAf8DjgH/A44B/wOOAf8DjgH/A40B/wN/Af8DVQH/A0AB/QNeAeIBSAF5AUgB + 9gFgAc0BYAH+AUIB/wFCAf8BGQH/ARkB/wEEAf8BBAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB + /wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/QEAAf8BAAHkAQAB/wEAAZgBAAH/ATIBQAEyAf0DXgHiAUgC + eQH2AWACzQH+AUID/wEZA/8BBAP/AQAD/wEAA/8BAAP/AQAD/wEAA/8BAAP/AQAC/QH/AQAC5AH/AQAC + mAH/ATICQAH9A14B4gJIAXkB9gJgAc0B/gJCAv8CGQL/AgQC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC + /wIAAf0B/wIAAeQB/wIAAZgB/wIyAUAB/QNeAeIDYQHWA34B/AO4Af8DowH/A5MB/wOOAf8DjgH/A44B + /wOOAf8DjgH/A44B/wONAf8DggH/A1wB/wNNAfoDWgHHAVwBYQFcAdYBZAGyAWQB/AFfAf8BXwH/AS8B + /wEvAf8BDAH/AQwB/wEBAf8BAQH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAAH/AQAB + /wEAAf4BAAH/AQAB6gEAAf8BAAGlAQAB/wEtAU0BLQH6A1oBxwFcAmEB1gFkArIB/AFfA/8BLwP/AQwD + /wEBA/8BAAP/AQAD/wEAA/8BAAP/AQAD/wEAAv4B/wEAAuoB/wEAAqUB/wEtAk0B+gNaAccCXAFhAdYC + ZAGyAfwCXwL/Ai8C/wIMAv8CAQL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAH+Af8CAAHqAf8CAAGlAf8C + LQFNAfoDWgHHA1ABmgOHAfkDxQH/A7IB/wOcAf8DkQH/A44B/wOOAf8DjgH/A44B/wOPAf8DjgH/A4MB + /wNgAf8DWgHyA0wBkANQAZoBagGQAWoB+QF8Af8BfAH/AVEB/wFRAf8BHwH/AR8B/wEHAf8BBwH/AQEB + /wEBAf8BAAH/AQAB/wEAAf8BAAH/AQAB/wEAAf8BAgH/AQIB/wECAf4BAgH/AQAB6wEAAf8BAAGtAQAB + /wFaAWsBWgHyA0wBkANQAZoBagKQAfkBfAP/AVED/wEfA/8BBwP/AQED/wEAA/8BAAP/AQAD/wECA/8B + AgL+Af8BAALrAf8BAAKtAf8BWgJrAfIDTAGQA1ABmgJqAZAB+QJ8Av8CUQL/Ah8C/wIHAv8CAQL/AgAC + /wIAAv8CAAL/AgIC/wICAf4B/wIAAesB/wIAAa0B/wJaAWsB8gNMAZADLwFJA2wB6wOeAf4DxgH/A64B + /wOcAf8DkwH/A5AB/wOPAf8DkAH/A5MB/wOTAf8DhQH/A00B/QNgAeADLQFFAy8BSQNsAesBgAHNAYAB + /gF/Af8BfwH/AUkB/wFJAf8BHwH/AR8B/wEMAf8BDAH/AQUB/wEFAf8BAwH/AQMB/wEFAf8BBQH/AQoB + /wEKAf8BCgH+AQoB/wEBAe0BAQH/ATIBtgEyAf0BYAFmAWAB4AMtAUUDLwFJA2wB6wGAAs0B/gF/A/8B + SQP/AR8D/wEMA/8BBQP/AQMD/wEFA/8BCgP/AQoC/gH/AQEC7QH/ATICtgH9AWACZgHgAy0BRQMvAUkD + bAHrAoABzQH+An8C/wJJAv8CHwL/AgwC/wIFAv8CAwL/AgUC/wIKAv8CCgH+Af8CAQHtAf8CMgG2Af0C + YAFmAeADLQFFAwMBBANWAa4DbwH1A9kB/wPLAf8DtwH/A6cB/wOdAf8DmgH/A5wB/wOfAf8DmwH/A4kB + /wNoAfADUgGjAwMBBAMDAQQDVgGuAW4BcwFuAfUBqAH/AagB/wGJAf8BiQH/AVwB/wFcAf8BNwH/ATcB + /wEiAf8BIgH/ARsB/wEbAf8BHwH/AR8B/wEmAf8BJgH/AR0B/wEdAf8BBQHzAQUB/wFbAWgBWwHwA1IB + owMDAQQDAwEEA1YBrgFuAnMB9QGoA/8BiQP/AVwD/wE3A/8BIgP/ARsD/wEfA/8BJgP/AR0D/wEFAvMB + /wFbAmgB8ANSAaMDAwEEAwMBBANWAa4CbgFzAfUCqAL/AokC/wJcAv8CNwL/AiIC/wIbAv8CHwL/AiYC + /wIdAv8CBQHzAf8CWwFoAfADUgGjAwMBBAQAAxwBJwNdAccDdgH2A60B/gPXAf8DzAH/A8IB/wO7Af8D + twH/A7EB/wOAAf4DaAH0A1kBvAMbASYIAAMcAScDXQHHAXEBeQFxAfYBhQHNAYUB/gGlAf8BpQH/AYsB + /wGLAf8BdAH/AXQB/wFmAf8BZgH/AVwB/wFcAf8BTgH/AU4B/wFJAc0BSQH+AVMBdgFTAfQBVwFZAVcB + vAMbASYIAAMcAScDXQHHAXECeQH2AYUCzQH+AaUD/wGLA/8BdAP/AWYD/wFcA/8BTgP/AUkCzQH+AVMC + dgH0AVcCWQG8AxsBJggAAxwBJwNdAccCcQF5AfYChQHNAf4CpQL/AosC/wJ0Av8CZgL/AlwC/wJOAv8C + SQHNAf4CUwF2AfQCVwFZAbwDGwEmDAADIQEwA1kBtgNmAe4DkAH6A74B/QPUAf8DzAH/A74B/QODAfkD + bAHrA1UBrAMfASwQAAMhATADWQG2AWQBaAFkAe4BfQGdAX0B+gGuAb4BrgH9AZ8B/wGfAf8BjAH/AYwB + /wFdAb4BXQH9AWgBkAFoAfkBYQFsAWEB6wNVAawDHwEsEAADIQEwA1kBtgFkAmgB7gF9Ap0B+gGuAr4B + /QGfA/8BjAP/AV0CvgH9AWgCkAH5AWECbAHrA1UBrAMfASwQAAMhATADWQG2AmQBaAHuAn0BnQH6Aq4B + vgH9Ap8C/wKMAv8CXQG+Af0CaAGQAfkCYQFsAesDVQGsAx8BLBQAAwYBBwM2AVgDVQGsA2YB5QOdAfwD + kgH7A2UB4gNTAacDMwFRAwYBBxgAAwYBBwM2AVgDVQGsA2YB5QF+AbIBfgH8AWsBnQFrAfsDZQHiA1MB + pwMzAVEDBgEHGAADBgEHAzYBWANVAawDZgHlAX4CsgH8AWsCnQH7A2UB4gNTAacDMwFRAwYBBxgAAwYB + BwM2AVgDVQGsA2YB5QJ+AbIB/AJrAZ0B+wNlAeIDUwGnAzMBUQMGAQcMAAFCAU0BPgcAAT4DAAEoAwAB + QAMAASADAAEBAQABAQYAAQEWAAP/gQAB4AEHAeABBwHgAQcB4AEHAcABAwHAAQMBwAEDAcABAwGAAQEB + gAEBAYABAQGAAQFQAAGAAQEBgAEBAYABAQGAAQEBwAEDAcABAwHAAQMBwAEDAeABBwHgAQcB4AEHAeAB + Bws= @@ -220,176 +220,170 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAiicAAAJNU0Z0AUkBTAIBAQMB - AAEYAQABGAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6 - AAIxASwB5wEIAQoBAAH/AyoBQAwAAyoBQAM2AVcCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwC - QAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwCQAE/AWwC - QAE/AWwCOwE6AWIDMwFRAxgBIVQAA1UBogNhAcAgAANXAaYDXwG88AADIQEwAkYBRQGAFAABFQEfAQQB - /wENARUBAAH/AQgBCgEAAf8BCAEKAQAB/wwAAUYBRQFDAXoBYQFWAU0BpwGMAWUBRAHPAYwBZQFEAc8B - jAFlAUQBzwGMAWUBRAHPAYwBZQFEAc8BjAFlAUQBzwGMAWUBRAHPAYwBZQFEAc8BjAFlAUQBzwGMAWUB - RAHPAYwBZQFEAc8BjAFlAUQBzwGMAWUBRAHPAYwBZQFEAc8BjAFlAUQBzwGMAWcBRQHOAXIBXAFKAbsB - WQFSAUwBmwMqAUBUAANoAdADdQHuIAADagHUA3MB6eQAAkwBSgG/AQgBCgEAAf8BCAEKAQAB/wEIAQoB - AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8CTAFKAb8CTAFKAb8BQwF0AQcB/wFHAXcB - DAH/ASUBRwEAAf8BDgEZAQAB/wwAAU8BSwFJAYoBdAFfAUwBvQG+AW8BKAHqAb4BbwEoAeoBvgFvASgB - 6gG+AW8BKAHqAb4BbwEoAeoBvgFvASgB6gG+AW8BKAHqAb4BbwEoAeoBvgFvASgB6gG+AW8BKAHqAb4B - bwEoAeoBvgFvASgB6gG+AW8BKAHqAb4BbwEoAeoBvgFvASgB6gG7AW8BKAHpAZIBZwFAAdMBZwFZAU0B - rwEvAi4BSFQAA2gB0AN1Ae4gAANqAdQDcwHp4AABCAEKAQAB/wEQAR4BAAH/ASEBQQEAAf8BJwFLAQAB - /wEmAUoBAAH/ASEBQQEAAf8BEAEeAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEpAU4BAAH/AVoB - lgEQAf8BWgGcARAB/wFzAbYBJgH/ARgBLgEAAf8MAAFMAUoBRwGGAW8BXQFNAbcBrwFtATIB4wGvAW0B - MgHjAa8BbQEyAeMBrwFtATIB4wG2AW8BLgHmAckBcQEiAe0B2gF1ARcB9AHwAXcBBgH8Af8BeAEAAv8B - eAEAAf8B3gFxARQB9QG2AW8BLgHmAa8BbQEyAeMBrwFtATIB4wGvAW0BMgHjAa8BawEzAeIBiQFkAUQB - zQFjAVcBTQGqAi4BLQFGVAADaAHQA3UB7iAAA2oB1ANzAencAAEIAQoBAAH/AT0BcQECAf8BTAGGAQcB - /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BTAF/AQ8B/wE7AWcBCAH/ASEB - NAEIAf8BUwGOAQsB/wFaAZwBEAH/AXIBswEnAf8BUwGBARsB/xAAAysBQQE3AjYBWQFBAUABPwFuAUEB - QAE/AW4BQQFAAT8BbgFBAUABPwFuAUcBRQFEAXsBWwFTAUsBnwF9AWEBSQHFAcoBbwEhAe4B/wF4AQAC - /wF4AQAB/wGDAWQBSAHJAUcBRgFEAXwBQQFAAT8BbgFBAUABPwFuAUEBQAE/AW4BQQFAAT8BbQE8AjsB - YwMzAVIDGQEiVAADaAHQA3UB7iAAA2oB1ANzAenYAAEVASkBAAH/AUoBhAEEAf8BUgGMAQgB/wFSAYwB - CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8B - VgGQAQwB/wFaAZoBEAH/AVoBnAEQAf8BcgGpATAB/wEIAQoBAAH/AQgBCgEAAf8MAAMMARADEQEWAxUB - HAMVARwDFQEcAxUBHAMhATABPwE+AT0BaQFeAVUBTAGlAbUBbgEwAeUB/wF4AQAC/wF4AQAB/wFjAVcB - TQGqAyIBMQMVARwDFQEcAxUBHAMUARsDEwEZAxABFQMHAQlUAANoAdADdQHuIAADagHUA3MB6dQAARYB - JwECAf8BSQGAAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQsB - /wFSAYwBEAH/AVIBjAEQAf8BWAGSARAB/wFaAZQBEAH/AVoBmwEQAf8BWgGcARAB/wFcAZ4BEgH/ATsB - bQEDAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8IAAMFBAYECAEKAwgBCgMIAQoDCAEKAxcBHwI5ATgB - XQFZAVIBTAGeAa8BbQEyAeMB/wF4AQAC/wF4AQAB/wFeAVUBTAGjAxgBIQMIAQoDCAEKAwgBCgMIAQoD - BwEJAwYBBwMCAQNUAANoAdADdQHuIAADagHUA3MB6dAAAT0BQgE0Ad8BRwGAAQMB/wFSAYwBCAH/AVIB - jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB - /wFaAZQBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZgBEAH/ARYB - KgEAAf8BCAEKAQAB/wEIAQoBAAH/HAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgB - AAH/AVsBUwFLAZ8DEgEYcAADaAHQA3UB7iAAA2oB1ANzAenQAAEsAVABAAH/AUoBjAEAAf8BUgGMAQgB - /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEOAf8BVQGSARAB/wFaAZwBEAH/AVoB - nAEQAf8BWgGUARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB - /wFYAZIBFgH/ARABHgEAAf8BCAEKAQAB/xwAAxIBFwE2AjUBVgFYAVIBTAGaAasBbQE0AeEB/wF4AQAC - /wF4AQAB/wFbAVMBSwGfAxIBGHAAA2gB0AN1Ae4gAANqAdQDcwHp1AACSgFJAY8BMwFeAQAB/wFSAYwB - CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AX8BwAEzAf8BXwGeARcB/wEgAT8BAAH/AQgBCgEAAf8B - UgGMARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlQEXAf8BWgGUARgB/wFaAZQB - GAH/AVoBlAEYAf8BCAEKAQAB/wEIAQoBAAH/GAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgB - AAL/AXgBAAH/AVsBUwFLAZ8DEgEYFAAEAQMDAQQDBgQHAQkDBwEJAwQBBQQCBAEUAAMRARYDIQEvAyEB - LwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DagHZA3YB8QMhAS8DIQEvAyEBLwMhAS8DIQEvAyEB - LwMhAS8DIQEvA20B3AN1Ae0DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DDQERuAAB - QgF7AQAB/wFSAYwBCAH/AXsBxgEpAf8DMwFQBAADDAEQATkBawEAAf8BWgGcARAB/wFaAZwBEAH/AV0B - lwETAf8BVgGUAQwB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8BKQFQAQAB - /wEIAQoBAAH/GAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D - EgEYFAAEAgMJAQwDDwEUAxMBGgMSARgDCgENAwQBBQQBFAADcwHoA38B/wN/Af8DfwH/A38B/wN/Af8D + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAJiYAAAJNU0Z0AUkBTAIBAQMB + AAE4AQABOAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMAASADAAEBAQABIAYAAUB6 + AAJMAUsB5wEIAQoBAAH/AyoBQAwAAyoBQAM2AVcDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8B + bAM/AWwDPwFsAz8BbAM/AWwDPwFsAz8BbAM/AWwDPwFsAjsBOgFiAzMBUQMYASFUAANTAaIDWwHAIAAD + VAGmA1kBvPAAAyEBMANGAYAUAAEVAR8BBAH/AQ0BFQEAAf8BCAEKAQAB/wEIAQoBAAH/DAADRAF6A1MB + pwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgB + YQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoBzwFoAWEBWgHPAWgBYQFaAc8BaAFhAVoB + zwFnAWABWQHOAVoBWQFYAbsCUAFPAZsDKgFAVAADYQHQA20B7iAAA2IB1ANrAenkAANZAb8BCAEKAQAB + /wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wNZAb8DWQG/AUMB + dAEHAf8BRwF3AQwB/wElAUcBAAH/AQ4BGQEAAf8MAAJLAUoBigFdAVoBWAG9AY8BZwFFAeoBjwFnAUUB + 6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8B + ZwFFAeoBjwFnAUUB6gGPAWcBRQHqAY8BZwFFAeoBjwFnAUUB6gGPAWcBRQHqAYwBagFFAekBagFfAVgB + 0wFWAlUBrwMuAUhUAANhAdADbQHuIAADYgHUA2sB6eAAAQgBCgEAAf8BEAEeAQAB/wEhAUEBAAH/AScB + SwEAAf8BJgFKAQAB/wEhAUEBAAH/ARABHgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BKQFOAQAB + /wFaAZYBEAH/AVoBnAEQAf8BcwG2ASYB/wEYAS4BAAH/DAADSQGGAloBWAG3AYEBZQFQAeMBgQFlAVAB + 4wGBAWUBUAHjAYEBZQFQAeMBiAFqAU4B5gGdAWoBQAHtAbcBbwEsAfQB3AF3AQ4B/AH/AXgBAAL/AXgB + AAH/AbkBbgEpAfUBiAFqAU4B5gGBAWUBUAHjAYEBZQFQAeMBgQFlAVAB4wGAAWUBTwHiAWQBXgFZAc0C + VQFTAaoCLgEtAUZUAANhAdADbQHuIAADYgHUA2sB6dwAAQgBCgEAAf8BPQFxAQIB/wFMAYYBBwH/AVIB + jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFMAX8BDwH/ATsBZwEIAf8BIQE0AQgB + /wFTAY4BCwH/AVoBnAEQAf8BcgGzAScB/wFTAYEBGwH/EAADKwFBAzYBWQJAAT8BbgJAAT8BbgJAAT8B + bgJAAT8BbgNEAXsCUQFQAZ8BYAFdAVoBxQGcAWsBPQHuAf8BeAEAAv8BeAEAAf8BYwFfAVoByQNFAXwC + QAE/AW4CQAE/AW4CQAE/AW4DPwFtAzsBYwMzAVIDGQEiVAADYQHQA20B7iAAA2IB1ANrAenYAAEVASkB + AAH/AUoBhAEEAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8B + UgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BVgGQAQwB/wFaAZoBEAH/AVoBnAEQAf8BcgGpATAB/wEIAQoB + AAH/AQgBCgEAAf8MAAMMARADEQEWAxUBHAMVARwDFQEcAxUBHAMhATACPgE9AWkCUwFSAaUBhwFpAU0B + 5QH/AXgBAAL/AXgBAAH/AlUBUwGqAyIBMQMVARwDFQEcAxUBHAMUARsDEwEZAxABFQMHAQlUAANhAdAD + bQHuIAADYgHUA2sB6dQAARYBJwECAf8BSQGAAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB + CAH/AVIBjAEIAf8BUgGMAQsB/wFSAYwBEAH/AVIBjAEQAf8BWAGSARAB/wFaAZQBEAH/AVoBmwEQAf8B + WgGcARAB/wFcAZ4BEgH/ATsBbQEDAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8IAAMFBAYECAEKAwgB + CgMIAQoDCAEKAxcBHwI5ATgBXQNRAZ4BgQFlAVAB4wH/AXgBAAL/AXgBAAH/A1IBowMYASEDCAEKAwgB + CgMIAQoDCAEKAwcBCQMGAQcDAgEDVAADYQHQA20B7iAAA2IB1ANrAenQAAFUAVYBUAHfAUcBgAEDAf8B + UgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMARAB/wFSAYwB + EAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B + WgGYARAB/wEWASoBAAH/AQgBCgEAAf8BCAEKAQAB/xwAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC + /wF4AQAB/wJRAVABnwMSARhwAANhAdADbQHuIAADYgHUA2sB6dAAASwBUAEAAf8BSgGMAQAB/wFSAYwB + CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQ4B/wFVAZIBEAH/AVoBnAEQAf8B + WgGcARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQB + GAH/AVgBkgEWAf8BEAEeAQAB/wEIAQoBAAH/HAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgB + AAH/AlEBUAGfAxIBGHAAA2EB0ANtAe4gAANiAdQDawHp1AADSwGPATMBXgEAAf8BUgGMAQgB/wFSAYwB + CAH/AVIBjAEIAf8BUgGMARAB/wF/AcABMwH/AV8BngEXAf8BIAE/AQAB/wEIAQoBAAH/AVIBjAEQAf8B + WgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZUBFwH/AVoBlAEYAf8BWgGUARgB/wFaAZQB + GAH/AQgBCgEAAf8BCAEKAQAB/xgAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC/wF4AQAB/wJRAVAB + nwMSARgUAAQBAwMBBAMGBAcBCQMHAQkDBAEFBAIEARQAAxEBFgMhAS8DIQEvAyEBLwMhAS8DIQEvAyEB + LwMhAS8DIQEvAyEBLwNhAdkDcgHxAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DZgHcA20B + 7QMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMhAS8DIQEvAyEBLwMNARG4AAFCAXsBAAH/AVIBjAEIAf8B + ewHGASkB/wMzAVAEAAMMARABOQFrAQAB/wFaAZwBEAH/AVoBnAEQAf8BXQGXARMB/wFWAZQBDAH/AVoB + nAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGlARcB/wEpAVABAAH/AQgBCgEAAf8YAAMSARcD + NQFWA1ABmgF8AWcBUwHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAAEAgMJAQwDDwEUAxMBGgMSARgD + CgENAwQBBQQBFAADagHoA38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D fwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8D - fwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A2gBz7wAAQgBCgEAAf8MAAETASMB - AAH/AVoBlAEQAf8BWgGcARAB/wGUAdYBSgH/AQ0BEQECAf8BMQFaAQAB/wFaAZQBEgH/AVoBlAEYAf8B - WgGUARgB/wFjAZwBGAH/AWMBpQEXAf8BawGlASEB/wEQAR4BAAH/GAADEgEXATYCNQFWAVgBUgFMAZoB - qwFtATQB4QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8DEgEYFAADBQEGAx0BKQMwAUoCOwE9AWUCOwE8AWQD - KAE8AhUBFgEdAwYBCBQAAzwBZANNAY8DTQGPA00BjwNNAY8DTQGPA00BjwNNAY8DTQGPA00BjwNyAeoD - fAH4A00BjwNNAY8DTQGPA00BjwNNAY8DTQGPA00BjwNNAY8DdQHsA3YB9QNNAY8DTQGPA00BjwNNAY8D - TQGPA00BjwNNAY8DTQGPA00BjwM1AVaoAAI4ATQB3wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB - AAH/AQgBCgEAAf8BCAEKAQAB/wMzAVADOgFgAUsBhQEHAf8BWgGUARAB/wFaAZwBEAH/ATkBawEAAf8D - CQEMARABHgEAAf8BVAGOARIB/wFaAZQBGAH/AWMBnAEYAf8BYwGcARgB/wFjAaUBFwH/AXMBtAEpAf8B - EAEeAQAB/xgAAxIBFwE2AjUBVgFYAVIBTAGaAasBbQE0AeEB/wF4AQAC/wF4AQAB/wFbAVMBSwGfAxIB - GBQAAwkBDAMzAVACSgFSAZECSAGDAckCRgGFAcoCQwFGAXoDKQE9AwwBEDwAA2gB0AN1Ae4gAANqAdQD - cwHpzAABCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB - /wEIAQoBAAH/AQgBCgEAAf8BMwFfAQIB/wFaAZQBEAH/AVoBnAEQAf8BrQHnAWMB/wEQAR4BAAH/AQgB - CgEAAf8BFAEmAQAB/wFUAY4BEgH/AWIBmwEYAf8BYwGcARgB/wFjAaUBFwH/AWMBpQEXAf8BYwGcASEB - /wEYAS4BAAH/GAADEgEXATYCNQFWAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D - EgEYFAADCQELAy4DRwFLAYQCSQF8AcMCRQGGAcsCRwFMAYUDLgFHAw8BEzwAA2gB0AN1Ae4gAANqAdQD - cwHpyAABCAEKAQAB/wErAVIBAAH/AUEBcgEFAf8BSgGEAQYB/wFKAYQBBgH/AUoBhAEGAf8BQgFzAQYB - /wEpAVABAAH/ARABHgEAAf8BHwE6AQAB/wFVAY8BCwH/AVoBlQEQAf8BWgGcARAB/wHWAf8BjAH/ARAB - HgEAAf8BGAEuAQAB/wFCAXgBAwH/AVoBlAEYAf8BYgGbARgB/wFjAZwBGAH/AWMBpQEXAf8BYwGlARcB - /wFzAbQBKQH/ARABHgEAAf8YAAMSARcBNgI1AVYBWAFSAUwBmgGrAW0BNAHhAf8BeAEAAv8BeAEAAf8B - WwFTAUsBnwMSARgUAAMGAQgDJAE0AjwBPQFmAk0BYQGnAksBcAG4AkYBTAGDAzEBTQMPARQ8AANoAdAD - dQHuIAADagHUA3MB6cQAASgBTQEAAf8BTgGIAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB - CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBnAEQAf8B - YwGlARcB/wFCAXsBAAH/AUoBhAEGAf8BUgGMAQgB/wFaAZgBFAH/AVoBlAEYAf8BYwGcARgB/wFjAaUB - FwH/AWMBpQEXAf8BYwGlARcB/wGUAckBTQH/BAADEAEVAxoBJAMhAS8DEQEWBAIEAQMSARcBNgI1AVYB - WAFSAUwBmgGrAW0BNAHhAf8BeAEAAv8BeAEAAf8BWwFTAUsBnwMSARgUAAMDAQQDEwEZAyUBNgI7ATwB - ZAJBAUMBcgMzAVEDIQEvAwkBDDwAA2gB0AN1Ae4gAANqAdQDcwHpwAABKQFOAQIB/wFSAYwBCAH/AVIB - jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB - /wFSAYwBEAH/AVoBlAEQAf8BWgGVARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoB - lAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBnAEYAf8BYwGlARcB/wFjAaUBFwH/AWMBpQEXAf8BZQGgASEB - /wQAAx4BKwIxATABTAE8AjsBYwMiATEDBwEJAwQBBQMSARgDNgFXAVgBUgFMAZoBqwFtATQB4QH/AXgB - AAL/AXgBAAH/AVsBUwFLAZ8DEgEYHAADBwEJAxwBJwMjATICGQEaASMDDwEUAwQBBTwAA2gB0AN1Ae4g - AANqAdQDcwHpvAACRgFFAYABTgGIAQcB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIB - jAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB - /wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMB - oQEYAf8BYwGlARcB/wFjAaUBFwH/AXgBugEsAf8BCAEKAQAB/wQAAyQBNAFHAUYBRAF8AW8BXQFNAbcB - VQFQAUoBlAFBAUABPwFtAygBOwMfASwDOQFeAVgBUgFMAZoBqwFtATQB4QH/AXgBAAL/AXgBAAH/AVsB - UwFLAZ8DEgEYHAADEgEXAjwBPQFmAkkBTgGJAkABQQFvAy4BRwMOARI8AANoAdADdQHuIAADagHUA3MB - 6bwAATUBXgEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B - UgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8BWgGbARAB/wFaAZwB - EAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoBlAEYAf8BXQGXARgB/wFjAZwBGAH/AWMBpQEXAf8B - YwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToBXQFUAUwBogHtAXIBCQH7AboBbgEsAecBfgFiAUgB - xAFEAUMBQgF1AzEBTQFBAUABPwFuAVsBUwFLAZ8BrwFtATIB4wH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D - EgEYHAADGQEiAksBVQGVAkQBiQHNAkwBagGyAkMBRgF6Ax0BKQMGAQgEAgQBMAADaAHQA3UB7iAAA2oB - 1ANzAem8AAFKAYQBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFnAakB - FwH/AVIBjAEIAf8BSgGEAQYB/wFKAYQBBgH/AVIBjAEQAf8BWgGUARAB/wFaAZcBEAH/AVoBnAEQAf8B - WgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AV8BmAEYAf8BYwGeARgB/wFjAaUB - FwH/AWsBqQEdAf8BKQFQAQAB/wwAAyIBMQFWAVABSwGYAdcBcgEaAfMBzQFwAR0B8AG2AW8BLgHmAXoB - XwFJAcIBYwFXAU0BqgFhAVYBTQGnAXIBXgFKAbwBwgFyASkB6wH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D - EgEYHAADFAEbAkMBRQF3AkwBbQG2AkQBiQHNAk0BawGzAj8BQAFsAyYBOAMMAQ8DAgEDCAADAgEDAw0B - EQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERA2cB0wN1Ae8DDQERAw0BEQMNAREDDQERAw0B - EQMNAREDDQERAw0BEQNqAdcDcwHqAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAwQB - BZQAAUoBhAEGAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFpAaQBHgH/ASwBUAEDAf8B - CAEKAQAB/wE3AWEBBwH/AVIBjAEOAf8BUgGMARAB/wF/AcEBMgH/AU8BXgFBAdMBWAFhAUoBvwEvAVkB - AAH/AUQBegEFAf8BUAGKAQgB/wFaAZwBDgH/AVoBnAEQAf8BWgGcARAB/wFPAYYBEAH/AUQBdAEMAf8B - TwFSAUoBvxAAAhoBGQEjAUcBRQFEAXsBhQFkAUYBygGeAWkBOwHaAbsBcAEqAegBygFxASAB7wHFAXEB - JwHsAZgBaQE9AdYBmAFoAT0B2AHaAXUBFwH0Af8BeAEAAv8BeAEAAf8BWwFTAUsBnwMSARgcAAMPARMD - NAFTAkoBUwGSAkQBjAHPAkEBkwHUAk0BYgGoAkEBQwFyAyYBOAMUARsDBgEIAwIBAwNhAcIDfwH/A38B + fwH/A38B/wN/Af8DfwH/A2EBz7wAAQgBCgEAAf8MAAETASMBAAH/AVoBlAEQAf8BWgGcARAB/wGUAdYB + SgH/AQ0BEQECAf8BMQFaAQAB/wFaAZQBEgH/AVoBlAEYAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8B + awGlASEB/wEQAR4BAAH/GAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIB + GBQAAwUBBgMdASkDMAFKAjsBPAFlAjsBPAFkAygBPAIVARYBHQMGAQgUAAM8AWQDTAGPA0wBjwNMAY8D + TAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DagHqA3wB+ANMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8D + TAGPA28B7ANvAfUDTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DTAGPA0wBjwNMAY8DNQFWqAACUgFQAd8B + CAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8DMwFQAzoBYAFLAYUB + BwH/AVoBlAEQAf8BWgGcARAB/wE5AWsBAAH/AwkBDAEQAR4BAAH/AVQBjgESAf8BWgGUARgB/wFjAZwB + GAH/AWMBnAEYAf8BYwGlARcB/wFzAbQBKQH/ARABHgEAAf8YAAMSARcDNQFWA1ABmgF8AWcBUwHhAf8B + eAEAAv8BeAEAAf8CUQFQAZ8DEgEYFAADCQEMAzMBUAJMAU0BkQJaAWMByQJaAWQBygNEAXoDKQE9AwwB + EDwAA2EB0ANtAe4gAANiAdQDawHpzAABCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB + AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BMwFfAQIB/wFaAZQBEAH/AVoBnAEQAf8B + rQHnAWMB/wEQAR4BAAH/AQgBCgEAAf8BFAEmAQAB/wFUAY4BEgH/AWIBmwEYAf8BYwGcARgB/wFjAaUB + FwH/AWMBpQEXAf8BYwGcASEB/wEYAS4BAAH/GAADEgEXAzUBVgNQAZoBfAFnAVMB4QH/AXgBAAL/AXgB + AAH/AlEBUAGfAxIBGBQAAwkBCwMuAUcDSAGEAlkBYAHDAlgBZAHLA0kBhQMuAUcDDwETPAADYQHQA20B + 7iAAA2IB1ANrAenIAAEIAQoBAAH/ASsBUgEAAf8BQQFyAQUB/wFKAYQBBgH/AUoBhAEGAf8BSgGEAQYB + /wFCAXMBBgH/ASkBUAEAAf8BEAEeAQAB/wEfAToBAAH/AVUBjwELAf8BWgGVARAB/wFaAZwBEAH/AdYB + /wGMAf8BEAEeAQAB/wEYAS4BAAH/AUIBeAEDAf8BWgGUARgB/wFiAZsBGAH/AWMBnAEYAf8BYwGlARcB + /wFjAaUBFwH/AXMBtAEpAf8BEAEeAQAB/xgAAxIBFwM1AVYDUAGaAXwBZwFTAeEB/wF4AQAC/wF4AQAB + /wJRAVABnwMSARgUAAMGAQgDJAE0AzwBZgNTAacCWAFaAbgCRwFIAYMDMQFNAw8BFDwAA2EB0ANtAe4g + AANiAdQDawHpxAABKAFNAQAB/wFOAYgBBwH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B + UgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFjAaUB + FwH/AUIBewEAAf8BSgGEAQYB/wFSAYwBCAH/AVoBmAEUAf8BWgGUARgB/wFjAZwBGAH/AWMBpQEXAf8B + YwGlARcB/wFjAaUBFwH/AZQByQFNAf8EAAMQARUDGgEkAyEBLwMRARYEAgQBAxIBFwM1AVYDUAGaAXwB + ZwFTAeEB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgUAAMDAQQDEwEZAyUBNgI7ATwBZAJBAUIBcgMzAVED + IQEvAwkBDDwAA2EB0ANtAe4gAANiAdQDawHpwAABKQFOAQIB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB + /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoB + lAEQAf8BWgGVARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB + /wFjAZwBGAH/AWMBnAEYAf8BYwGlARcB/wFjAaUBFwH/AWMBpQEXAf8BZQGgASEB/wQAAx4BKwIxATAB + TAM7AWMDIgExAwcBCQMEAQUDEgEYAzYBVwNQAZoBfAFnAVMB4QH/AXgBAAL/AXgBAAH/AlEBUAGfAxIB + GBwAAwcBCQMcAScDIwEyAhkBGgEjAw8BFAMEAQU8AANhAdADbQHuIAADYgHUA2sB6bwAA0YBgAFOAYgB + BwH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B + UgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZcBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB + EAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBnAEYAf8BYwGhARgB/wFjAaUBFwH/AWMBpQEXAf8B + eAG6ASwB/wEIAQoBAAH/BAADJAE0A0UBfAJaAVgBtwNOAZQDPwFtAygBOwMfASwDOQFeA1ABmgF8AWcB + UwHhAf8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADEgEXAzwBZgNKAYkDQAFvAy4BRwMOARI8AANhAdAD + bQHuIAADYgHUA2sB6bwAATUBXgEHAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB + CAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBlAEQAf8B + WgGbARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZYBFgH/AVoBlAEYAf8BXQGXARgB/wFjAZwB + GAH/AWMBpQEXAf8BYwGlARcB/wFwAbMBIAH/ASsBUAEEAf8IAAMnAToCUwFRAaIB2QFqARUB+wGJAWoB + SwHnAV8BXAFaAcQCQwFCAXUDMQFNAkABPwFuAlEBUAGfAYEBZQFQAeMB/wF4AQAC/wF4AQAB/wJRAVAB + nwMSARgcAAMZASIDTgGVAlkBZAHNAlYBVwGyA0QBegMdASkDBgEIBAIEATAAA2EB0ANtAe4gAANiAdQD + awHpvAABSgGEAQYB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BZwGpARcB + /wFSAYwBCAH/AUoBhAEGAf8BSgGEAQYB/wFSAYwBEAH/AVoBlAEQAf8BWgGXARAB/wFaAZwBEAH/AVoB + nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBlAEYAf8BWgGUARgB/wFfAZgBGAH/AWMBngEYAf8BYwGlARcB + /wFrAakBHQH/ASkBUAEAAf8MAAMiATEDTgGYAbEBbwExAfMBpAFqATYB8AGIAWoBTgHmAV4BWgFXAcIC + VQFTAaoDUwGnAlkBVwG8AZcBbAFHAesB/wF4AQAC/wF4AQAB/wJRAVABnwMSARgcAAMUARsCQwFEAXcC + VgFZAbYCWQFkAc0CVgFYAbMDPwFsAyYBOAMMAQ8DAgEDCAADAgEDAw0BEQMNAREDDQERAw0BEQMNARED + DQERAw0BEQMNAREDDQERA18B0wNvAe8DDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQNiAdcD + agHqAw0BEQMNAREDDQERAw0BEQMNAREDDQERAw0BEQMNAREDDQERAwQBBZQAAUoBhAEGAf8BUgGMAQgB + /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFpAaQBHgH/ASwBUAEDAf8BCAEKAQAB/wE3AWEBBwH/AVIB + jAEOAf8BUgGMARAB/wF/AcEBMgH/AVsBXgFYAdMCWgFZAb8BLwFZAQAB/wFEAXoBBQH/AVABigEIAf8B + WgGcAQ4B/wFaAZwBEAH/AVoBnAEQAf8BTwGGARAB/wFEAXQBDAH/AVkBWgFZAb8QAAIaARkBIwNEAXsB + ZAFdAVoBygFzAWMBVwHaAY0BaQFHAegBnwFrAToB7wGWAW0BQwHsAW0BYwFXAdYBbQFiAVYB2AG3AW8B + LAH0Af8BeAEAAv8BeAEAAf8CUQFQAZ8DEgEYHAADDwETAzQBUwNNAZICWgFoAc8CWQFtAdQCUgFUAagC + QQFCAXIDJgE4AxQBGwMGAQgDAgEDA1sBwgN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B /wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B - /wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wN/Af8DbgHclAAB - SgGMAQAB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AWcBnQEnAf8BCAEKAQAB/wEKAQ8B - AAH/AUIBdwEDAf8BUgGMARAB/wFaAZwBEAH/ASUBQQEFAf8EAAM6AWABCAEKAQAB/wEIAQoBAAH/BAAC - RgFFAYACRgFFAYACRgFFAYAcAAMKAQ0DIgExAzQBVAFGAUQBQwF4AVsBUwFLAZ8BjAFlAUQBzwHJAXIB - IgHtAcUBcQEnAewBzQFwAR0B8AHtAXIBCQH7Af8BeAEAAv8BeAEAAf8BWwFTAUsBnwMSARgcAAMGAQgD - GAEhAzEBTQJKAVIBkQJMAXQBvQJCAY8B0QJJAXwBwwJMAV0BogI9AT4BZwIZARoBIwMMAQ8DQAFvA1oB - rQNaAa0DWgGtA1oBrQNaAa0DWgGtA1oBrQNaAa0DWgGtA3YB8AN9AfoDWgGtA1oBrQNaAa0DWgGtA1oB - rQNaAa0DWgGtA1oBrQN2AfEDfAH4A1oBrQNaAa0DWgGtA1oBrQNaAa0DWgGtA1oBrQNaAa0DWgGtA0cB - gZQAATsBbQECAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFTAY4BEAH/AQ8BGwEAAf8B - IwFDAQAB/wFSAYwBEAH/AVIBjAEQAf8BewG9ATAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoB - AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/KAADAwEEAwkBCwMiATEDOAFbAVYBUAFLAZcBhAFkAUcB - yAG1AW4BMAHlAeQBcgEUAfcB9gF1AQYB/QH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8DEgEYHAAEAQMCAQMD - FQEcAjUBNgFWAkkBUQGPAkcBhAHIAjQBpgHfAjIBrwHjAkwBXgGlAzQBUwMcAScoAANoAdADdQHuIAAD - agHUA3MB6bwAAQgBCgEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AU4B - ggEPAf8BSgGEAQYB/wFSAYwBEAH/AWMBpQEXAf8BCAEKAQAB/wEIAQoBAAH/ARMBIwEAAf8BQgFzAQYB - /wEgAT8BAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/yAABAEDAwEEAwwB - EAMYASADKQE9AT8CPgFqAW0BWwFLArUBbgEwAeUB5AFyARQB9wH/AXgBAAL/AXgBAAH/AVsBUwFLAZ8D - EgEYIAAEAQMHAQkDFAEbAyoBQAJCAUQBdgJNAWcBrwIoAbsB6QJCAY4B0AJLAVsBnwMzAVEoAANoAdAD - dQHuIAADagHUA3MB6cAAAUIBcwEGAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB - CAH/AVIBjAEQAf8BUgGMARAB/wFKAYQBBgH/ARABHgEAAf8BMQFaAQAB/wFNAYQBDQH/AVoBnAEQAf8B - WgGcARAB/wFSAYwBCAH/ARABHgEAAf8BCAEKAQAB/wEIAQoBAAH/AkYBRQGALAADAgEDAwsBDgMgAS4B - RAFDAUIBdgFqAVoBTgGxAaoBbQE1AeAB3wF1ARQB9gHnAXIBDwH5AVkBUwFMAZwDEgEXDAAEAQMMARAD - FwEfAx0BKAMdASgDDAEPCAADDwEUAiYBJwE5AkYBTAGDAjQBqwHhAiwBugHnAkABkAHSAj8BQQFuKAAD - aAHQA3UB7iAAA2oB1ANzAenEAAFJAYkBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B - UgGMARAB/wFSAYwBEAH/AVIBjAEQAf8BUgGMARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB - EAH/AVoBnAEQAf8BWgGUARgB/wFCAXMBBgH/AQoBDgEAAf8wAAQBAwMBBAMMAQ8DHgEqATsCOgFhAXEB - XQFLAbkBsAFrAS8B5AHKAW8BIQHuAVYBUAFLAZcDEgEXDAADAgEDAyEBLwI2ATcBWQJCAUQBdQJBAUMB - cwMeASsIAAMEAQUDDAEPAjgBOQFcAkUBjAHOAicBxQHsAiABygHvAkUBSQF/KAADaAHQA3UB7iAAA2oB - 1ANzAenIAAE6AWsBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEQAf8BUgGMARAB/wFaAZQB - EAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZQBGAH/AVoBlAEYAf8B - YwGlARcB/wEZASwBAwH/OAADAgEDAwgBCgMgAS0BQgFBAUABcQFSAU0BSgGRAVgBUgFMAZoCOwE6AWID - DAEPDAADAwEEAysBQQJDAUYBegJNAWEBpwJNAWUBrQM3AVoDGAEgAwkBCwMGAQcDDQERAjkBOgFfAkIB - jwHRAiABygHvAhoB1wHzAkUBSQGBKAADaAHQA3UB7iAAA2oB1ANzAenMAAEsAVUBAAH/AVIBjAEIAf8B - UgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwB - EAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/ASEBQQEAAf9AAAQCAwcBCQMQBBUBHAIWARUBHQMPARMD - AgEDDAADAwEEAzABSwJJAVEBjwJGAYUBygI4AaUB3gJKAVUBlAM0AVMDFQEcAw0BEQMeASsCQwFFAXcC - NAGmAd8CHQHUAfECKAG7AekCRAFHAXsoAANoAdADdQHuIAADagHUA3MB6cgAARIBIgEAAf8BTAGGAQYB - /wFSAYwBCAH/AVoBnAEQAf8BUAGKAQgB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoB - nAEQAf8BWgGcARAB/wFaAZwBEQH/AWkBqwEfAf8BCAEKAQAB/2wAAwIBAwMhAS8COgE7AWECTQFlAa0C - OwGeAdoCSgF3Ab8CSwFbAZ8CQwFGAXoCQQFDAXICRwFMAYUCTAFqAbICIgHJAe0COgGgAdsCTgFqAbED - OAFbKAADaAHQA3UB7iAAA2oB1ANzAenIAAEQAR4BAAH/AUgBfQEHAf8BWQGTARMB/wFVAYgBGAH/CAAB - IQFBAQAB/wFCAXsBAAH/AVIBjAEIAf8BVQGRAQgB/wE5AWYBBAH/ASoBMwEgAe94AAMGAQgDFwEfAkQB - RwF7AkcBfwHGAi8BsAHkAhcB2gH0AiEBygHuAiEBygHuAh0B1AHxAhQB3wH2AgYB8AH8AksBdgG+Aj4B - PwFrAyQBNCgAA2gB0AN1Ae4gAANqAdQDcwHp0AABHgE6AQAB/5wABAIDCQEMAyoDPwFBAW4CSgFVAZYC - TQFrAbMCSQF5AcECRgGAAccCRgGAAccCSwFxAbkCTQFeAaQCQAFCAXEDJQE2AxMBGSgAA2gB0AN1Ae4g - AANqAdQDcwHp/wB5AAQBAwsBDgMmATgDOQFeAkUBSAF9AkkBTwGLAkkBTgGJAj4BPwFrAyoBPwMXAR8D - AgEDLAADVQGiA2EBvyAAA1cBpgNfAbuoAAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIW - AAP/AQAD/wHHAgABBwL/Ac8B8wH/BAAC/wHPAYcCAAEHAv8BzwHzAf8EAAH/Af4BAAEHAgABBwL/Ac8B - 8wH/BAAB/wH8AQABBwIAAQcC/wHPAfMB/wQAAf8B+AEAAQ8CAAEHAv8BzwHzAf8EAAH/AfABAAEHAgAB - BwL/Ac8B8wH/BAAB/wHgAQABAwIAAQcC/wHPAfMB/wQAAf8BwAEAAQEB/AEDA/8BzwHzAf8EAAH/AcAB - AAEBAfwBAwP/Ac8B8wH/BAAB/wHgAgAB/AEDAeABHwgAAf8B/AEgAQAB/AEDAeABHwgAAf8B/gHgAQAB - /AEDAeABHwgAAf8BwAIAAfwBAwHgAR8B/wHPAfMB/wQAAf8BgAIAAfwBAwHgAR8B/wHPAfMB/wQAAf8D - AAH8AQMB4AEfAf8BzwHzAf8EAAH+AgABAQEAAQMB4AEfAf8BzwHzAf8EAAH8AgABAQEAAQMB+AEfAf8B - zwHzAf8EAAH4AgABAQEAAQMB+AEfAf8BzwHzAf8EAAH4AgABAwEAAQMB+AEDAf8BzwHzAf8EAAH4AgAB - BwEAAQMB+AEDCAAB+AIAAQ8BAAEDAfgJAAH4AQABRAF/AQABAwH4CQAB+AEAAQEB/wGAAQMB+AEAAf8B - zwHzAf8EAAH4AgABfwGAAQMB/AEAAf8BzwHzAf8EAAH8AgABfwHwAQMBgQGAAf8BzwHzAf8EAAH+AgAB - /wHwAQMBgQGAAf8BzwHzAf8EAAH/AgAB/wH8AQMBgAEAAf8BzwHzAf8EAAH/AYABAQH/Af4BAwGAAQAB - /wHPAfMB/wQAAf8BAAEDA/8BgAEAAf8BzwHzAf8EAAH/AQwBDwP/AcABAAH/Ac8B8wH/BAAB/wHfBP8B - wAEAAf8BzwHzAf8EAAb/AfABAQH/Ac8B8wH/BAAL + /wN/Af8DfwH/A38B/wN/Af8DfwH/A38B/wNmAdyUAAFKAYwBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB + CAH/AVIBjAEIAf8BZwGdAScB/wEIAQoBAAH/AQoBDwEAAf8BQgF3AQMB/wFSAYwBEAH/AVoBnAEQAf8B + JQFBAQUB/wQAAzoBYAEIAQoBAAH/AQgBCgEAAf8EAANGAYADRgGAA0YBgBwAAwoBDQMiATEDNAFUA0QB + eAJRAVABnwFoAWEBWgHPAZ0BagFAAe0BlgFtAUMB7AGkAWoBNgHwAdkBagEVAfsB/wF4AQAC/wF4AQAB + /wJRAVABnwMSARgcAAMGAQgDGAEhAzEBTQJMAU0BkQJYAV0BvQJZAWcB0QJZAWABwwJRAVMBogM9AWcC + GQEaASMDDAEPA0ABbwNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNsAfADfQH6A1UB + rQNVAa0DVQGtA1UBrQNVAa0DVQGtA1UBrQNVAa0DcgHxA3wB+ANVAa0DVQGtA1UBrQNVAa0DVQGtA1UB + rQNVAa0DVQGtA1UBrQNHAYGUAAE7AW0BAgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B + UwGOARAB/wEPARsBAAH/ASMBQwEAAf8BUgGMARAB/wFSAYwBEAH/AXsBvQEwAf8BCAEKAQAB/wEIAQoB + AAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/ygAAwMBBAMJAQsDIgExAzgB + WwJPAU4BlwFkAV8BWwHIAYcBaQFNAeUByAFvASUB9wHqAXEBDgH9Af8BeAEAAv8BeAEAAf8CUQFQAZ8D + EgEYHAAEAQMCAQMDFQEcAzUBVgJLAUwBjwJbAWQByAJQAXcB3wJQAYEB4wJSAVMBpQM0AVMDHAEnKAAD + YQHQA20B7iAAA2IB1ANrAem8AAEIAQoBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B + UgGMAQgB/wFOAYIBDwH/AUoBhAEGAf8BUgGMARAB/wFjAaUBFwH/AQgBCgEAAf8BCAEKAQAB/wETASMB + AAH/AUIBcwEGAf8BIAE/AQAB/wEIAQoBAAH/AQgBCgEAAf8BCAEKAQAB/wEIAQoBAAH/AQgBCgEAAf8g + AAQBAwMBBAMMARADGAEgAykBPQM+AWoCVwFWAbUBhwFpAU0B5QHIAW8BJQH3Af8BeAEAAv8BeAEAAf8C + UQFQAZ8DEgEYIAAEAQMHAQkDFAEbAyoBQANDAXYCVQFWAa8CRQGMAekCWAFoAdACUAFRAZ8DMwFRKAAD + YQHQA20B7iAAA2IB1ANrAenAAAFCAXMBBgH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8B + UgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BSgGEAQYB/wEQAR4BAAH/ATEBWgEAAf8BTQGEAQ0B/wFaAZwB + EAH/AVoBnAEQAf8BUgGMAQgB/wEQAR4BAAH/AQgBCgEAAf8BCAEKAQAB/wNGAYAsAAMCAQMDCwEOAyAB + LgNDAXYBWAFXAVUBsQF9AWYBUgHgAb4BcQElAfYB0wFqARwB+QJRAVABnAMSARcMAAQBAwwBEAMXAR8D + HQEoAx0BKAMMAQ8IAAMPARQCJgEnATkCRwFIAYMCUwF8AeECSwGJAecCWQFpAdICPwFAAW4oAANhAdAD + bQHuIAADYgHUA2sB6cQAAUkBiQEAAf8BUgGMAQgB/wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwB + EAH/AVIBjAEQAf8BUgGMARAB/wFSAYwBEAH/AVoBlAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8B + WgGcARAB/wFaAZQBGAH/AUIBcwEGAf8BCgEOAQAB/zAABAEDAwEEAwwBDwMeASoDOgFhAVsBWQFXAbkB + gQFnAUsB5AGcAWsBPQHuAk8BTgGXAxIBFwwAAwIBAwMhAS8DNgFZAkIBQwF1AkEBQgFzAx4BKwgAAwQB + BQMMAQ8DOAFcAlkBZwHOAkMBlgHsAjoBnwHvA0YBfygAA2EB0ANtAe4gAANiAdQDawHpyAABOgFrAQAB + /wFSAYwBCAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB/wFaAZQBEAH/AVoB + nAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/AWMBpQEXAf8BGQEsAQMB + /zgAAwIBAwMIAQoDIAEtAkEBQAFxAk0BTAGRA1ABmgI7AToBYgMMAQ8MAAMDAQQDKwFBA0QBegNTAacD + VQGtAzcBWgMYASADCQELAwYBBwMNAREDOQFfAlkBZwHRAjoBnwHvAjEBsQHzAkYBRwGBKAADYQHQA20B + 7iAAA2IB1ANrAenMAAEsAVUBAAH/AVIBjAEIAf8BUgGMAQgB/wFSAYwBEAH/AVIBjAEQAf8BWgGUARAB + /wFaAZQBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGUARgB/wFaAZQBGAH/ASEB + QQEAAf9AAAQCAwcBCQMQBBUBHAIWARUBHQMPARMDAgEDDAADAwEEAzADSwFMAY8CWgFkAcoCVAF3Ad4D + TgGUAzQBUwMVARwDDQERAx4BKwJDAUQBdwJQAXcB3wI3AasB8QJFAYwB6QNEAXsoAANhAdADbQHuIAAD + YgHUA2sB6cgAARIBIgEAAf8BTAGGAQYB/wFSAYwBCAH/AVoBnAEQAf8BUAGKAQgB/wFSAYwBEAH/AVoB + lAEQAf8BWgGcARAB/wFaAZwBEAH/AVoBnAEQAf8BWgGcARAB/wFaAZwBEQH/AWkBqwEfAf8BCAEKAQAB + /2wAAwIBAwMhAS8DOgFhA1UBrQJXAXMB2gJZAVwBvwJQAVEBnwNEAXoCQQFCAXIDSQGFAlYBVwGyAkAB + nQHtAlYBdQHbAlUBWAGxAzgBWygAA2EB0ANtAe4gAANiAdQDawHpyAABEAEeAQAB/wFIAX0BBwH/AVkB + kwETAf8BVQGIARgB/wgAASEBQQEAAf8BQgF7AQAB/wFSAYwBCAH/AVUBkQEIAf8BOQFmAQQB/wFAAUUB + OgHveAADBgEIAxcBHwNEAXsCWQFhAcYCSwGBAeQCLAG3AfQCPQGcAe4CPQGcAe4CNwGrAfECJQG+AfYC + DgHcAfwCWQFdAb4DPgFrAyQBNCgAA2EB0ANtAe4gAANiAdQDawHp0AABHgE6AQAB/5wABAIDCQEMAyoD + PwFAAW4DTgGWAlYBWAGzAlkBXgHBAlkBYAHHAlkBYAHHAlcBWwG5AlEBUgGkAkABQQFxAyUBNgMTARko + AANhAdADbQHuIAADYgHUA2sB6f8AeQAEAQMLAQ4DJgE4AzkBXgNGAX0CSgFLAYsDSgGJAz4BawMqAT8D + FwEfAwIBAywAA1MBogNaAb8gAANUAaYDWQG7qAABQgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEG + AAECFgAD/wEAA/8BxwIAAQcC/wHPAfMB/wQAAv8BzwGHAgABBwL/Ac8B8wH/BAAB/wH+AQABBwIAAQcC + /wHPAfMB/wQAAf8B/AEAAQcCAAEHAv8BzwHzAf8EAAH/AfgBAAEPAgABBwL/Ac8B8wH/BAAB/wHwAQAB + BwIAAQcC/wHPAfMB/wQAAf8B4AEAAQMCAAEHAv8BzwHzAf8EAAH/AcABAAEBAfwBAwP/Ac8B8wH/BAAB + /wHAAQABAQH8AQMD/wHPAfMB/wQAAf8B4AIAAfwBAwHgAR8IAAH/AfwBIAEAAfwBAwHgAR8IAAH/Af4B + 4AEAAfwBAwHgAR8IAAH/AcACAAH8AQMB4AEfAf8BzwHzAf8EAAH/AYACAAH8AQMB4AEfAf8BzwHzAf8E + AAH/AwAB/AEDAeABHwH/Ac8B8wH/BAAB/gIAAQEBAAEDAeABHwH/Ac8B8wH/BAAB/AIAAQEBAAEDAfgB + HwH/Ac8B8wH/BAAB+AIAAQEBAAEDAfgBHwH/Ac8B8wH/BAAB+AIAAQMBAAEDAfgBAwH/Ac8B8wH/BAAB + +AIAAQcBAAEDAfgBAwgAAfgCAAEPAQABAwH4CQAB+AEAAUQBfwEAAQMB+AkAAfgBAAEBAf8BgAEDAfgB + AAH/Ac8B8wH/BAAB+AIAAX8BgAEDAfwBAAH/Ac8B8wH/BAAB/AIAAX8B8AEDAYEBgAH/Ac8B8wH/BAAB + /gIAAf8B8AEDAYEBgAH/Ac8B8wH/BAAB/wIAAf8B/AEDAYABAAH/Ac8B8wH/BAAB/wGAAQEB/wH+AQMB + gAEAAf8BzwHzAf8EAAH/AQABAwP/AYABAAH/Ac8B8wH/BAAB/wEMAQ8D/wHAAQAB/wHPAfMB/wQAAf8B + 3wT/AcABAAH/Ac8B8wH/BAAG/wHwAQEB/wHPAfMB/wQACw== @@ -399,114 +393,114 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAHBkAAAJNU0Z0AUkBTAIBAQUB - AAGwAQABsAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAChkAAAJNU0Z0AUkBTAIBAQUB + AAHQAQAB0AEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAa AAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzABS8wAAzsB - YgNdAcUBcwJoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8B - awFAARoB/wFuAVABNgH/A2gB8ANaAbcDNAFUxAADNQFVA10BxwFxAW4BWgH1AbgBZQEbAf8BuQFYAQIB - /wHJAV8BAAH/AdgBZQEAAf8B3AFnAQAB/wHWAWQBAAH/AcMBXAEAAf8BogFMAQAB/wF8ATsBAwH/AW4B - RgEjAf8DaAHwA1oBtwMwAUrAAANcAcQBkAF8AVwB+AHUAXEBGAH/AdcBZQEAAf8B5QFsAQAB/wHyAXIB + YgNdAcUBawJoAfQBnwFlATEB/wGXAVMBFwH/AZYBSwEJAf8BkwFGAQEB/wGMAUMBAwH/AX0BQAELAf8B + awFAARoB/wFuAVABNgH/A2gB8ANaAbcDNAFUxAADNQFVA10BxwJuAVoB9QG4AWUBGwH/AbkBWAECAf8B + yQFfAQAB/wHYAWUBAAH/AdwBZwEAAf8B1gFkAQAB/wHDAVwBAAH/AaIBTAEAAf8BfAE7AQMB/wFuAUYB + IwH/A2gB8ANaAbcDMAFKwAADXAHEAYQBfAFcAfgB1AFxARgB/wHXAWUBAAH/AeUBbAEAAf8B8gFyAQAB + /wH6AXUBAAH/AfwBdgEAAf8B+gF2AQAB/wHzAXIBAAH/AeIBawEAAf8BvQFZAQAB/wGHAUABAAH/AXEB + SAEjAf8DaAHwA1YBq8AAAf4B3QHBAf8B7QGAASAB/wHtAXEBAgH/AfMBcwEAAf8B+gF2AQAB/wH+AXgB + AAL/AXsBCAL/AYgBJwL/AaIBUwH/Af4BgQEXAf8B/AF4AQQB/wHsAW8BAAH/AcEBWwEAAf8BhgFBAQMB + /wF4AVYBNgH/A2MB38AAAf8BsgFvAf8B/QGAAREB/wH8AXcBAQH/Af0BdwEAAv8BeAEAAv8BfwEPAv8B + kgE7Av8BswGDAv8B6gHgAv8BkAE9Av8BewEKAf8B/AF3AQAB/wHlAWwBAAH/AbEBVAEAAf8BhAFLARoB + /wNjAd/AAAH/AZoBQgL/AYMBFQH/Af4BegEEAv8BeAEAAv8BeAEAAv8BlQE/Av8BygGuAv8B2gHGAv8B + 7QHlAv8BlgFJAv8BfAENAf8B/gF4AQAB/wH0AXMBAAH/AdABYgEAAf8BmgFOAQoB/wFjAl0B38AAAf8B + lQE3Av8BiQEfAv8BfQEIAv8BeAEAAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BuQGUAv8B + hwEjAv8BeAEAAf8B+wF2AQAB/wHiAWoBAAH/Aa8BVAEDAf8BYwJdAd/AAAH/AaABSQL/AZIBMQL/AYEB + EQL/AXkBAwL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgBxQL/AcABnwL/AYkBJwL/AXgBAAH/Af4B + eAEAAf8B7AFvAQAB/wG/AVoBAgH/AWMCXQHfwAAB/wGzAW8C/wGeAUgC/wGIAR4C/wF8AQcC/wF4AQAC + /wGYAUMC/wHOAbQC/wHXAcAC/wHqAeAC/wGdAVcC/wF+AREC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AcsB + ZAEJAf8BYwFhAV0B38AAAf8BzAGfAv8BrAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8B + rgF4Av8BpQFXAv8BgQEXAv8BeQEEAv8BeAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfwAAB + /wHpAdUC/wG8AYEC/wGkAVQC/wGOASoC/wF/AQ0C/wF5AQIC/wF7AQkC/wGCAR0C/wF4AQAC/wF4AQAC + /wF4AQEC/wF6AQQC/wF6AQMB/wHzAXQBAwH/AeIBhAEyAf8DYwHfwAADXgHSAY8BiAF/AfkB/wG7AX0C + /wGjAVIC/wGQASwC/wGCARMC/wF9AQgC/wF6AQQC/wF5AQIC/wF6AQQC/wF9AQkC/wGAAQ8C/wF/AQ0B + /wH4AYYBIAH/AXQCaAH0A1gBuMAAAzwBZgNjAdUBiwF9AXwB+AH/Ab4BhQL/AaoBXwL/AZkBPgL/AY0B + JwL/AYYBGgL/AYMBFQL/AYUBGQL/AYoBIgL/AY0BKAL/AZMBMwH/AXEBbgFoAfUDXQHFAzYBWcQAA0IB + cgNjAdUBjwGKAYQB+QH/AckBmQL/AbwBfwL/Aa4BZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacB + WAH/AYsCfAH4A10BxwM7AWLMAAM8AWUDXgHSAf8B7wHgAv8B3AG8Av8BzQGfAv8BwQGKAv8BuwF/Av8B + vwGGAv8BzQGhAv8B6QHWAf8DXAHEAzUBVcgAA2cB7wJnAVkB7wFnAV0BWQHvAWcBWwFZAe8BZwFbAVkB + 7wFnAlkB7wFnAWQBWQHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvOAADMwFRA3AB + 9QMHAQkDKgE/A0UBfANZAbsDYwHfA2gB9AOAAf4DgQH/A4EB/wOBAf8DgAH+A2gB9ANjAd8DWgG6A0QB + egMnAToIAAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8DVQGsAzAB + SwgAA/gB/wG5AZUBPAH/AYMBfQFuAf8BhAF9AWwB/wGqAYQBJwH/AawBewEAAf8BzAG8AZQB/wN+Af8D + fgH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A44B/zgAAxIBGAM/AW0DQwF1A10BzAN8AfgDgQH/A4EB + /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN8AfgDVAGoBAADOwFiA10BxQFrAmgB + 9AGfAWUBMQH/AZcBUwEXAf8BlgFLAQkB/wGTAUYBAQH/AYwBQwEDAf8BfQFAAQsB/wFrAUABGgH/AW4B + UAE2Af8DaAHwA1oBtwM0AVQEAAT/AZcBiwFtAf8CgQGAAf8BggGBAYAB/wGYAYgBYAH/AcoBkAEAAf8B + 3QHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/zQAA18B0wM9AWcEAANqAe0D + fQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wNVAa8D + NQFVA10BxwJuAVoB9QG4AWUBGwH/AbkBWAECAf8ByQFfAQAB/wHYAWUBAAH/AdwBZwEAAf8B1gFkAQAB + /wHDAVwBAAH/AaIBTAEAAf8BfAE7AQMB/wFuAUYBIwH/A2gB8ANaAbcDMAFKBP8BhgGEAX0B/wOBAf8D + gQH/AYcBgwF6Af8BzwGUAQAB/wHeAcwBnwH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D + vAH/NAADWgHCAzQBUwQAA2MB3wNuAfUDgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A1UBrwNcAcQBhAF8AVwB+AHUAXEBGAH/AdcBZQEAAf8B5QFsAQAB/wHyAXIB AAH/AfoBdQEAAf8B/AF2AQAB/wH6AXYBAAH/AfMBcgEAAf8B4gFrAQAB/wG9AVkBAAH/AYcBQAEAAf8B - cQFIASMB/wNoAfADVgGrwAAB/gHdAcEB/wHtAYABIAH/Ae0BcQECAf8B8wFzAQAB/wH6AXYBAAH/Af4B - eAEAAv8BewEIAv8BiAEnAv8BogFTAf8B/gGBARcB/wH8AXgBBAH/AewBbwEAAf8BwQFbAQAB/wGGAUEB - AwH/AXgBVgE2Af8DYwHfwAAB/wGyAW8B/wH9AYABEQH/AfwBdwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C - /wGSATsC/wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcBAAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsB - GgH/A2MB38AAAf8BmgFCAv8BgwEVAf8B/gF6AQQC/wF4AQAC/wF4AQAC/wGVAT8C/wHKAa4C/wHaAcYC - /wHtAeUC/wGWAUkC/wF8AQ0B/wH+AXgBAAH/AfQBcwEAAf8B0AFiAQAB/wGaAU4BCgH/AWMCXQHfwAAB - /wGVATcC/wGJAR8C/wF9AQgC/wF4AQAC/wF4AQAC/wGoAVwC/wHgAc0C/wGhAWYC/wHYAcUC/wG5AZQC - /wGHASMC/wF4AQAB/wH7AXYBAAH/AeIBagEAAf8BrwFUAQMB/wFjAl0B38AAAf8BoAFJAv8BkgExAv8B - gQERAv8BeQEDAv8BeAEAAv8BqAFcAv8B4AHNAv8BoQFmAv8B2AHFAv8BwAGfAv8BiQEnAv8BeAEAAf8B - /gF4AQAB/wHsAW8BAAH/Ab8BWgECAf8BYwJdAd/AAAH/AbMBbwL/AZ4BSAL/AYgBHgL/AXwBBwL/AXgB + cQFIASMB/wNoAfADVgGrBP8BiwGGAXoB/wOBAf8DgQH/AY4BhgFxAf8BzwGUAQAB/wHeAcwBnyH/A8oB + /xAAAw0BEQM/AWwDUwGnAVwCWQG+AVgCVgGzAUgCRwGDAyEBMAQAA28B8wM6AWAIAAM2AVgDWwHAA24B + 9QOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A2gB9ANSAaQB/gHdAcEB + /wHtAYABIAH/Ae0BcQECAf8B8wFzAQAB/wH6AXYBAAH/Af4BeAEAAv8BewEIAv8BiAEnAv8BogFTAf8B + /gGBARcB/wH8AXgBBAH/AewBbwEAAf8BwQFbAQAB/wGGAUEBAwH/AXgBVgE2Af8DYwHfBP8BrAGWAWAB + /wGDAYIBfwH/AYUBggF9Af8BswGTAUQB/wHPAZQBAAH/Ad4BzAGfAf8DsAH/A7AB/wOwAf8DsAH/A7AB + /wOwAf8DsAH/A7AB/wOoAf8IAAMaASQDUgGgAmMBSAH2AaIBcwEAAf8BrgF8AQAB/wGwAX0BAAH/AagB + eAEAAf8BlQFqAQAB/wGAAW4BGgH+AVwCWQHGA1cBtQMWAR4IAAMCAQMDGgEjAzgBXANUAagDYgHXA3AB + 8QOAAf4DgQH/A4EB/wOBAf8DgQH9A2gB8ANhAdQDUwGlAzYBWQMYASAB/wGyAW8B/wH9AYABEQH/AfwB + dwEBAf8B/QF3AQAC/wF4AQAC/wF/AQ8C/wGSATsC/wGzAYMC/wHqAeAC/wGQAT0C/wF7AQoB/wH8AXcB + AAH/AeUBbAEAAf8BsQFUAQAB/wGEAUsBGgH/A2MB3wT/AdkBqgE3Af8BvgGYATgB/wHAAZgBNgH/AdwB + ogEUAf8BzwGUAQAB/wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/BAAD + IAEtAmMBWgHpAb8BiAEAAf8BzQGVAQoB/wGwAYgBJwH/AXMBZAE/Af8BTQFLAUcB/wFOAUsBQgH/AWYB + VwExAf8BmgF0ARcB/wGkAXYBAwH/AXABTwEAAf8DQwF2BAFEAAH/AZoBQgL/AYMBFQH/Af4BegEEAv8B + eAEAAv8BeAEAAv8BlQE/Av8BygGuAv8B2gHGAv8B7QHlAv8BlgFJAv8BfAENAf8B/gF4AQAB/wH0AXMB + AAH/AdABYgEAAf8BmgFOAQoB/wFjAl0B3wT/AeEBrgExAf8BvQGXATsB/wHAAZgBNQH/AeMBpQEKAf8B + zwGUAQAB/wHeAcwBnwH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DrwH/BAACYwFaAekB + 2QGaAQAB/wHaAaMBHAH/Ao4BjAH/A4oB/wOXAf8DmwH/A5EB/wN0Af8DSAH/AUMBQgE/Af8BtQGDAQcB + /wF6AVcBAAH/AzYBWAwAAwIBAwMIAQoDIQEvAzEBTgM9AWgDQwF2A0QBegNDAXUDPQFnAzEBTQMgAS4D + BwEJBAIEAAH/AZUBNwL/AYkBHwL/AX0BCAL/AXgBAAL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgB + xQL/AbkBlAL/AYcBIwL/AXgBAAH/AfsBdgEAAf8B4gFqAQAB/wGvAVQBAwH/AWMCXQHfBP8BuwGdAVMB + /wGIAYQBeQH/AYwBhQF0Af8BxAGZATAB/wHPAZQBAAH/Ad4BzAGfIf8DygH/A0MBdgHpAacBAgH/AekB + qwESAf8B0AHKAbsB/wOsAf8DXQH/A0wB/wNLAf8DRAH/Aw8B/wOzAf8DZgH/AVQBTAE6Af8BrgF9AQQB + /wNdAcwIAAMTARoDOQFdA1kBvANkAdsDagHtA2MB9gNfAfsDgQH9A18B+wNjAfYDZQHsA2MB2gNaAboD + OAFcAxMBGgH/AaABSQL/AZIBMQL/AYEBEQL/AXkBAwL/AXgBAAL/AagBXAL/AeABzQL/AaEBZgL/AdgB + xQL/AcABnwL/AYkBJwL/AXgBAAH/Af4BeAEAAf8B7AFvAQAB/wG/AVoBAgH/AWMCXQHfBP8BlAGKAXMB + /wOBAf8DgQH/AZoBigFjAf8BzwGUAQAB/wHeAcwBnwH/A9AB/wPQAf8D0AH/A9AB/wPQAf8D0AH/A9AB + /wPQAf8DtQH/AmoBYQHmAe0BrQEQAf8B9AHQAXYB/wP6Af8D+gH/A30B/wN/Af8DgAH/A4AB/wN+Af8D + hAH/A7sB/wNqAf8BqAGAARwB/wJjAUgB9gQAAxoBJANWAa4DaAH0A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DawHyA1IBoQH/AbMBbwL/AZ4BSAL/AYgBHgL/AXwBBwL/AXgB AAL/AZgBQwL/Ac4BtAL/AdcBwAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgBAAH/AfABcQEAAf8B - ywFkAQkB/wFjAWEBXQHfwAAB/wHMAZ8C/wGsAWMC/wGTATMC/wGBAREC/wF5AQIC/wGCARYC/wGaAUsC - /wGuAXgC/wGlAVcC/wGBARcC/wF5AQQC/wF4AQAC/wF4AQAB/wHwAXEBAAH/AdUBcQEXAf8CYwFdAd/A - AAH/AekB1QL/AbwBgQL/AaQBVAL/AY4BKgL/AX8BDQL/AXkBAgL/AXsBCQL/AYIBHQL/AXgBAAL/AXgB - AAL/AXgBAQL/AXoBBAL/AXoBAwH/AfMBdAEDAf8B4gGEATIB/wNjAd/AAANeAdIBlQGMAYMB+QH/AbsB - fQL/AaMBUgL/AZABLAL/AYIBEwL/AX0BCAL/AXoBBAL/AXkBAgL/AXoBBAL/AX0BCQL/AYABDwL/AX8B - DQH/AfgBhgEgAf8BeAFtAWgB9ANYAbjAAAM8AWYDYwHVAZUBhwF8AfgB/wG+AYUC/wGqAV8C/wGZAT4C - /wGNAScC/wGGARoC/wGDARUC/wGFARkC/wGKASIC/wGNASgC/wGTATMB/wF8AW4BaAH1A10BxQM2AVnE - AANCAXIDYwHVAZUBjgGIAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC - /wGnAVgB/wGVAX4BfAH4A10BxwM7AWLMAAM8AWUDXgHSAf8B7wHgAv8B3AG8Av8BzQGfAv8BwQGKAv8B - uwF/Av8BvwGGAv8BzQGhAv8B6QHWAf8DXAHEAzUBVcgAA2cB7wJnAVkB7wFnAV0BWQHvAWcBWwFZAe8B - ZwFbAVkB7wFnAlkB7wFnAWQBWQHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvA2cB7wNnAe8DZwHvOAAD - MwFRA3kB9QMHAQkDKgE/A0UBfANZAbsDYwHfA2gB9AOAAf4DgQH/A4EB/wOBAf8DgAH+A2gB9ANjAd8D - WgG6A0QBegMnAToIAAM3AVoDWAG4A2MB3wJjAV0B3wFiAl0B3wNdAd8DXQHfAWECXQHfA2MB3wNjAd8D - VQGsAzABSwgAA/gB/wG5AZUBPAH/AYMBfQFuAf8BhAF9AWwB/wGqAYQBJwH/AawBewEAAf8BzAG8AZQB - /wN+Af8DfgH/A34B/wN+Af8DfgH/A34B/wN+Af8DfgH/A44B/zgAAxIBGAM/AW0DQwF1A10BzAN8AfgD - gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN8AfgDVAGoBAADOwFiA10B - xQFzAmgB9AGfAWUBMQH/AZcBUwEXAf8BlgFLAQkB/wGTAUYBAQH/AYwBQwEDAf8BfQFAAQsB/wFrAUAB - GgH/AW4BUAE2Af8DaAHwA1oBtwM0AVQEAAT/AZcBiwFtAf8CgQGAAf8BggGBAYAB/wGYAYgBYAH/AcoB - kAEAAf8B3QHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A5MB/zQAA18B0wM9AWcE - AANqAe0DfQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB - /wNVAa8DNQFVA10BxwFxAW4BWgH1AbgBZQEbAf8BuQFYAQIB/wHJAV8BAAH/AdgBZQEAAf8B3AFnAQAB - /wHWAWQBAAH/AcMBXAEAAf8BogFMAQAB/wF8ATsBAwH/AW4BRgEjAf8DaAHwA1oBtwMwAUoE/wGGAYQB - fQH/A4EB/wOBAf8BhwGDAXoB/wHPAZQBAAH/Ad4BzAGfAf8D4AH/A+AB/wPgAf8D4AH/A+AB/wPgAf8D - 4AH/A+AB/wO8Af80AANaAcIDNAFTBAADYwHfA24B9QOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvA1wBxAGQAXwBXAH4AdQBcQEYAf8B1wFlAQAB/wHlAWwB - AAH/AfIBcgEAAf8B+gF1AQAB/wH8AXYBAAH/AfoBdgEAAf8B8wFyAQAB/wHiAWsBAAH/Ab0BWQEAAf8B - hwFAAQAB/wFxAUgBIwH/A2gB8ANWAasE/wGLAYYBegH/A4EB/wOBAf8BjgGGAXEB/wHPAZQBAAH/Ad4B - zAGfIf8DygH/EAADDQERAz8BbANTAacBXAJZAb4BWAJWAbMBSAJHAYMDIQEwBAADcwHzAzoBYAgAAzYB - WANbAcADbgH1A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DaAH0A1IB - pAH+Ad0BwQH/Ae0BgAEgAf8B7QFxAQIB/wHzAXMBAAH/AfoBdgEAAf8B/gF4AQAC/wF7AQgC/wGIAScC - /wGiAVMB/wH+AYEBFwH/AfwBeAEEAf8B7AFvAQAB/wHBAVsBAAH/AYYBQQEDAf8BeAFWATYB/wNjAd8E - /wGsAZYBYAH/AYMBggF/Af8BhQGCAX0B/wGzAZMBRAH/Ac8BlAEAAf8B3gHMAZ8B/wOwAf8DsAH/A7AB - /wOwAf8DsAH/A7AB/wOwAf8DsAH/A6gB/wgAAxoBJANSAaABZwFjAUgB9gGiAXMBAAH/Aa4BfAEAAf8B - sAF9AQAB/wGoAXgBAAH/AZUBagEAAf8BgAFqARYB/gFcAlkBxgNXAbUDFgEeCAADAgEDAxoBIwM4AVwD - VAGoA2IB1wNwAfEDgAH+A4EB/wOBAf8DgQH/A4EB/QNoAfADYQHUA1MBpQM2AVkDGAEgAf8BsgFvAf8B - /QGAAREB/wH8AXcBAQH/Af0BdwEAAv8BeAEAAv8BfwEPAv8BkgE7Av8BswGDAv8B6gHgAv8BkAE9Av8B - ewEKAf8B/AF3AQAB/wHlAWwBAAH/AbEBVAEAAf8BhAFLARoB/wNjAd8E/wHZAaoBNwH/Ab4BmAE4Af8B - wAGYATYB/wHcAaIBFAH/Ac8BlAEAAf8B3gHMAZ8B/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A5MB/wQAAyABLQJjAVoB6QG/AYgBAAH/Ac0BlQEKAf8BsAGIAScB/wFzAWQBPwH/AU0BSwFHAf8B - TgFLAUIB/wFmAVcBMQH/AZoBdAEXAf8BpAF2AQMB/wFwAU8BAAH/A0MBdgQBRAAB/wGaAUIC/wGDARUB - /wH+AXoBBAL/AXgBAAL/AXgBAAL/AZUBPwL/AcoBrgL/AdoBxgL/Ae0B5QL/AZYBSQL/AXwBDQH/Af4B - eAEAAf8B9AFzAQAB/wHQAWIBAAH/AZoBTgEKAf8BYwJdAd8E/wHhAa4BMQH/Ab0BlwE7Af8BwAGYATUB - /wHjAaUBCgH/Ac8BlAEAAf8B3gHMAZ8B/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A68B - /wQAAmMBWgHpAdkBmgEAAf8B2gGjARwB/wKOAYwB/wOKAf8DlwH/A5sB/wORAf8DdAH/A0gB/wFDAUIB - PwH/AbUBgwEHAf8BegFXAQAB/wM2AVgMAAMCAQMDCAEKAyEBLwMxAU4DPQFoA0MBdgNEAXoDQwF1Az0B - ZwMxAU0DIAEuAwcBCQQCBAAB/wGVATcC/wGJAR8C/wF9AQgC/wF4AQAC/wF4AQAC/wGoAVwC/wHgAc0C - /wGhAWYC/wHYAcUC/wG5AZQC/wGHASMC/wF4AQAB/wH7AXYBAAH/AeIBagEAAf8BrwFUAQMB/wFjAl0B - 3wT/AbsBnQFTAf8BiAGEAXkB/wGMAYUBdAH/AcQBmQEwAf8BzwGUAQAB/wHeAcwBnyH/A8oB/wNDAXYB - 6QGnAQIB/wHpAasBEgH/AdABygG7Af8DrAH/A10B/wNMAf8DSwH/A0QB/wMPAf8DswH/A2YB/wFUAUwB - OgH/Aa4BfQEEAf8DXQHMCAADEwEaAzkBXQNZAbwDZAHbA2oB7QNjAfYDXwH7A4EB/QNfAfsDYwH2A2UB - 7ANjAdoDWgG6AzgBXAMTARoB/wGgAUkC/wGSATEC/wGBAREC/wF5AQMC/wF4AQAC/wGoAVwC/wHgAc0C - /wGhAWYC/wHYAcUC/wHAAZ8C/wGJAScC/wF4AQAB/wH+AXgBAAH/AewBbwEAAf8BvwFaAQIB/wFjAl0B - 3wT/AZQBigFzAf8DgQH/A4EB/wGaAYoBYwH/Ac8BlAEAAf8B3gHMAZ8B/wPQAf8D0AH/A9AB/wPQAf8D - 0AH/A9AB/wPQAf8D0AH/A7UB/wJqAWEB5gHtAa0BEAH/AfQB0AF2Af8D+gH/A/oB/wN9Af8DfwH/A4AB - /wOAAf8DfgH/A4QB/wO7Af8DagH/AagBgAEcAf8BaQFjAUgB9gQAAxoBJANWAa4DaAH0A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DawHyA1IBoQH/AbMBbwL/AZ4BSAL/AYgB - HgL/AXwBBwL/AXgBAAL/AZgBQwL/Ac4BtAL/AdcBwAL/AeoB4AL/AZ0BVwL/AX4BEQL/AXgBAAL/AXgB - AAH/AfABcQEAAf8BywFkAQkB/wFjAWEBXQHfBP8BhgGDAX4B/wOBAf8DgQH/AYYBgwF7Af8BzwGUAQAB - /wHeAcwBnwH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/AWoBZwFiAe4B7wG0ASEB - /wH3AdwBlwn/A5EB/wOIAf8DhwH/A4cB/wOBAf8DVwH/A+YB/wOjAf8BtgGRATYB/wGFAWoBQAH5BAAD - VwGyA2UB5wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - VQGvAf8BzAGfAv8BrAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8BrgF4Av8BpQFXAv8B - gQEXAv8BeQEEAv8BeAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfBP8BiwGGAXkB/wOBAf8D - gQH/AY4BhgFxAf8BzwGUAQAB/wHeAcwBnwH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8D - oQH/A0sBjQHwAb4BPwH/AfQBzQFsIf8D+wH/A9AB/wHXAacBMQH/AmEBXQHRBAADbwHzA18B+wOBAf8D - gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8B6QHVAv8B - vAGBAv8BpAFUAv8BjgEqAv8BfwENAv8BeQECAv8BewEJAv8BggEdAv8BeAEAAv8BeAEAAv8BeAEBAv8B - egEEAv8BegEDAf8B8wF0AQMB/wHiAYQBMgH/A2MB3wT/AacBlAFnAf8BgwGCAX8B/wGFAYMBfgH/AbAB - lAFOAf8B0wGXAQIB/wHgAc4BnwH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8DwAH/AwcB - CQFqAWgBYgHuAfEBvAE7Af8B+gHqAcIB/wPcAf8DdwH/A2gB/wNoAf8DaAH/AzIJ/wHyAd0BqQH/AeoB - qQEIAf8DPgFqBAADZAHbA2gB9AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DVQGvA14B0gGVAYwBgwH5Af8BuwF9Av8BowFSAv8BkAEsAv8BggETAv8BfQEIAv8B - egEEAv8BeQECAv8BegEEAv8BfQEJAv8BgAEPAv8BfwENAf8B+AGGASAB/wF4AW0BaAH0A1gBuAT/AdcB - sQFSAf8BmgGPAXQB/wGgAZIBbQH/AeABrwE3Af8B5wGpARAB/wHrAdUBoAH/A4EB/wOBAf8DgQH/A4EB - /wOBAf8DgQH/A4EB/wOBAf8DkwH/BAADMwFRAWoCaAHwAfMBxgFYAf8B+gHnAbgW/wH+AfsB/wH5AeIB - qgH/Ae8BuAEtAf8DTgGWBAIEAAM8AWQDXwHJA30B+gOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D - gQH/A4EB/wOBAf8DgQH/A30B+gNVAaoDPAFmA2MB1QGVAYcBfAH4Af8BvgGFAv8BqgFfAv8BmQE+Av8B - jQEnAv8BhgEaAv8BgwEVAv8BhQEZAv8BigEiAv8BjQEoAv8BkwEzAf8BfAFuAWgB9QNdAcUDNgFZBP8B - 9AHNAWwB/wH0AcsBZgH/AfQBywFlAf8B9AHLAWUB/wHxAcEBSQH/AfkB4wGsAf8DiQH/A4kB/wOJAf8D - iQH/A4kB/wOJAf8DiQH/A4kB/wOaAf8IAAMiATEDXwHJAaABigFnAfoB8wHKAWUB/wH5AeEBpgH/AfsB - 7QHMAf8B+wHsAcgB/wH4Ad0BmwH/AcYBmAFnAf4CZQFeAeIDPQFoBAEIAAMGAQgDMQFMA1ABmwNlAewD - fQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wN9AfoDagHtA1ABmwMvAUkEAANCAXIDYwHVAZUB - jgGIAfkB/wHJAZkC/wG8AX8C/wGuAWYC/wGkAVMC/wGfAUoC/wGfAUsC/wGjAVEC/wGnAVgB/wGVAX4B - fAH4A10BxwM7AWIEAED/EAADDwETA0cBggNkAdsBtAGeAW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcD - OgFgA1EBnwNfAdMDZwHvA2MB9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC - /wHcAbwC/wHNAZ8C/wHBAYoC/wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4H - AAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B - /AIAAcABAwIAAf8B/AIAAYABAQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcAB - AQUAAQEBgAYAAQEHAAEBBwABAQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws= + ywFkAQkB/wFjAWEBXQHfBP8BhgGDAX4B/wOBAf8DgQH/AYYBgwF7Af8BzwGUAQAB/wHeAcwBnwH/A4EB + /wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DkwH/AWYBYwFiAe4B7wG0ASEB/wH3AdwBlwn/A5EB + /wOIAf8DhwH/A4cB/wOBAf8DVwH/A+YB/wOjAf8BtgGRATYB/wGBAWoBQQH5BAADVwGyA2UB5wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8BzAGfAv8B + rAFjAv8BkwEzAv8BgQERAv8BeQECAv8BggEWAv8BmgFLAv8BrgF4Av8BpQFXAv8BgQEXAv8BeQEEAv8B + eAEAAv8BeAEAAf8B8AFxAQAB/wHVAXEBFwH/AmMBXQHfBP8BiwGGAXkB/wOBAf8DgQH/AY4BhgFxAf8B + zwGUAQAB/wHeAcwBnwH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A6EB/wOhAf8DoQH/A0sBjQHwAb4B + PwH/AfQBzQFsIf8D+wH/A9AB/wHXAacBMQH/AmEBXQHRBAADbwHzA18B+wOBAf8DgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DVQGvAf8B6QHVAv8BvAGBAv8BpAFUAv8B + jgEqAv8BfwENAv8BeQECAv8BewEJAv8BggEdAv8BeAEAAv8BeAEAAv8BeAEBAv8BegEEAv8BegEDAf8B + 8wF0AQMB/wHiAYQBMgH/A2MB3wT/AacBlAFnAf8BgwGCAX8B/wGFAYMBfgH/AbABlAFOAf8B0wGXAQIB + /wHgAc4BnwH/A+cB/wPnAf8D5wH/A+cB/wPnAf8D5wH/A+cB/wPnAf8DwAH/AwcBCQFmAWQBYgHuAfEB + vAE7Af8B+gHqAcIB/wPcAf8DdwH/A2gB/wNoAf8DaAH/AzIJ/wHyAd0BqQH/AeoBqQEIAf8DPgFqBAAD + ZAHbA2gB9AOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + VQGvA14B0gGPAYgBfwH5Af8BuwF9Av8BowFSAv8BkAEsAv8BggETAv8BfQEIAv8BegEEAv8BeQECAv8B + egEEAv8BfQEJAv8BgAEPAv8BfwENAf8B+AGGASAB/wF0AmgB9ANYAbgE/wHXAbEBUgH/AZoBjwF0Af8B + oAGSAW0B/wHgAa8BNwH/AecBqQEQAf8B6wHVAaAB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + gQH/A5MB/wQAAzMBUQNoAfAB8wHGAVgB/wH6AecBuBb/Af4B+wH/AfkB4gGqAf8B7wG4AS0B/wNOAZYE + AgQAAzwBZANfAckDfQH6A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8DgQH/A4EB/wOBAf8D + fQH6A1UBqgM8AWYDYwHVAYsBfQF8AfgB/wG+AYUC/wGqAV8C/wGZAT4C/wGNAScC/wGGARoC/wGDARUC + /wGFARkC/wGKASIC/wGNASgC/wGTATMB/wFxAW4BaAH1A10BxQM2AVkE/wH0Ac0BbAH/AfQBywFmAf8B + 9AHLAWUB/wH0AcsBZQH/AfEBwQFJAf8B+QHjAawB/wOJAf8DiQH/A4kB/wOJAf8DiQH/A4kB/wOJAf8D + iQH/A5oB/wgAAyIBMQNfAckBmAF+AWcB+gHzAcoBZQH/AfkB4QGmAf8B+wHtAcwB/wH7AewByAH/AfgB + 3QGbAf8BvgGQAWsB/gJlAV4B4gM9AWgEAQgAAwYBCAMxAUwDUAGbA2UB7AN9AfoDgQH/A4EB/wOBAf8D + gQH/A4EB/wOBAf8DgQH/A30B+gNqAe0DUAGbAy8BSQQAA0IBcgNjAdUBjwGKAYQB+QH/AckBmQL/AbwB + fwL/Aa4BZgL/AaQBUwL/AZ8BSgL/AZ8BSwL/AaMBUQL/AacBWAH/AYsCfAH4A10BxwM7AWIEAED/EAAD + DwETA0cBggNkAdsBrAGSAW8B/ANnAeoDVAGoAygBOxwAAwUBBgMSARcDOgFgA1EBnwNfAdMDZwHvA2MB + 9gNiAe4DXgHSA1EBngM5AV8DEQEWAwUBBgwAAzwBZQNeAdIB/wHvAeAC/wHcAbwC/wHNAZ8C/wHBAYoC + /wG7AX8C/wG/AYYC/wHNAaEC/wHpAdYB/wNcAcQDNQFVCAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwAB + AQEAAQEGAAEBFgAD/wEAAcABAwYAAYABAWYAAYABAQYAAcABAwgAAf8B/AIAAcABAwIAAf8B/AIAAYAB + AQIAAf8B+QYAAf8B+QYAAfABEwYAAcABAwYAAYABAQL/BAABgAEBAcABAQUAAQEBgAYAAQEHAAEBBwAB + AQcAAQEGAAGAAQEGAAHAAQMCAAGAAQECAAHwAR8BwAEBAcABAws= diff --git a/qtcnet-client/Controls/MessageControl.cs b/qtcnet-client/Controls/MessageControl.cs index 18ae5e6..b4ef3de 100644 --- a/qtcnet-client/Controls/MessageControl.cs +++ b/qtcnet-client/Controls/MessageControl.cs @@ -33,5 +33,7 @@ namespace qtcnet_client.Controls Height = Math.Max(bottom, pbProfileImage.Bottom + 4); } + + public void ReloadProfileImage() => pbProfileImage.Image = ProfileImage; } } diff --git a/qtcnet-client/Controls/RoomControl.cs b/qtcnet-client/Controls/RoomControl.cs index 5560735..4f63800 100644 --- a/qtcnet-client/Controls/RoomControl.cs +++ b/qtcnet-client/Controls/RoomControl.cs @@ -42,7 +42,7 @@ namespace qtcnet_client.Controls { if (!_isHovering) { - lblRoomName.ForeColor = Color.White; + lblRoomName.ForeColor = Color.LightGray; _isHovering = true; } } diff --git a/qtcnet-client/Forms/ChatRoomForm.cs b/qtcnet-client/Forms/ChatRoomForm.cs index 339b1af..6d4cc0b 100644 --- a/qtcnet-client/Forms/ChatRoomForm.cs +++ b/qtcnet-client/Forms/ChatRoomForm.cs @@ -1,6 +1,12 @@ using qtcnet_client.Controls; using QtCNETAPI.Dtos.User; +using QtCNETAPI.Events; +using QtCNETAPI.Models; +using QtCNETAPI.Services.ApiService; +using QtCNETAPI.Services.GatewayService; using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; namespace qtcnet_client.Forms { public partial class ChatRoomForm : Form @@ -9,13 +15,20 @@ namespace qtcnet_client.Forms public string RoomId { get; set; } = string.Empty; [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public string RoomName { get; set; } = "Room"; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Dictionary UserProfileImages { get; set; } = []; public string SentMessage { get; private set; } = string.Empty; public event EventHandler? OnSend; public event EventHandler? OnClose; - public ChatRoomForm() + private readonly IGatewayService _gatewayService; + private readonly IApiService _apiService; + + public ChatRoomForm(IGatewayService gatewayService, IApiService apiService) { + _gatewayService = gatewayService; + _apiService = apiService; InitializeComponent(); } @@ -51,29 +64,55 @@ namespace qtcnet_client.Forms private void ChatRoomForm_FormClosed(object sender, FormClosedEventArgs e) { OnClose?.Invoke(this, EventArgs.Empty); - Close(); } - public void AddUsersToRoomList(List users) + public void AddUsersToRoomList(List users) { - lvUsers.SuspendLayout(); - - lvUsers.Items.Clear(); - - List lvis = []; - foreach (UserInformationDto user in users) + if(lvUsers.InvokeRequired) { - lvis.Add(new ListViewItem + lvUsers.Invoke(() => { - Tag = user.Id, - Text = user.Username, - ImageIndex = user.Status + lvUsers.SuspendLayout(); + + lvUsers.Items.Clear(); + + List lvis = []; + foreach (User user in users) + { + lvis.Add(new ListViewItem + { + Tag = user.Id, + Text = user.Username, + ImageIndex = user.Status + }); + } + + lvUsers.Items.AddRange([.. lvis.DistinctBy(u => u.Tag)]); + + lvUsers.ResumeLayout(true); }); } + else + { + lvUsers.SuspendLayout(); - lvUsers.Items.AddRange([.. lvis.DistinctBy(u => u.Tag)]); + lvUsers.Items.Clear(); - lvUsers.ResumeLayout(true); + List lvis = []; + foreach (User user in users) + { + lvis.Add(new ListViewItem + { + Tag = user.Id, + Text = user.Username, + ImageIndex = user.Status + }); + } + + lvUsers.Items.AddRange([.. lvis.DistinctBy(u => u.Tag)]); + + lvUsers.ResumeLayout(true); + } } public void AddUserToRoomList(UserInformationDto user) @@ -88,13 +127,65 @@ namespace qtcnet_client.Forms lvUsers.Items.Add(lvi); } + public async Task LoadProfileImage(MessageControl ctrl, string userId) + { + _ = Task.Run(async () => + { + var img = await AddUserProfileImageToDictionary(userId); + + if (img == null || ctrl.IsDisposed) + return; + + if (ctrl.InvokeRequired) + ctrl.Invoke(() => + { + ctrl.ProfileImage = img; + ctrl.ReloadProfileImage(); + }); + else + { + ctrl.ProfileImage = img; + ctrl.ReloadProfileImage(); + } + }); + } + + private async Task AddUserProfileImageToDictionary(string userId) + { + if(UserProfileImages.TryGetValue(userId, out var image)) + return image; + else + { + var _res = await _apiService.GetUserProfilePic(userId); + if (_res.Success && _res.Data != null) + { + using var ms = new MemoryStream(_res.Data); + Image img = Image.FromStream(ms); + UserProfileImages.Add(userId, img); + return UserProfileImages[userId]; + } + else + return default; + } + } + public void AddMessage(MessageControl messageCtrl) { messageCtrl.Width = flpMessages.ClientSize.Width - 10; messageCtrl.Margin = new Padding(0, 0, 0, 6); - flpMessages.Controls.Add(messageCtrl); - flpMessages.ScrollControlIntoView(messageCtrl); + if(flpMessages.InvokeRequired) + { + Invoke(() => + { + flpMessages.Controls.Add(messageCtrl); + flpMessages.ScrollControlIntoView(messageCtrl); + }); + } else + { + flpMessages.Controls.Add(messageCtrl); + flpMessages.ScrollControlIntoView(messageCtrl); + } } private bool ValidateChatBox() diff --git a/qtcnet-client/Forms/MainForm.Designer.cs b/qtcnet-client/Forms/MainForm.Designer.cs index e5a603f..95fd610 100644 --- a/qtcnet-client/Forms/MainForm.Designer.cs +++ b/qtcnet-client/Forms/MainForm.Designer.cs @@ -34,6 +34,7 @@ // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.White; ClientSize = new Size(403, 672); DoubleBuffered = true; FormBorderStyle = FormBorderStyle.FixedSingle; diff --git a/qtcnet-client/Forms/MainForm.cs b/qtcnet-client/Forms/MainForm.cs index 767aa35..3113949 100644 --- a/qtcnet-client/Forms/MainForm.cs +++ b/qtcnet-client/Forms/MainForm.cs @@ -1,14 +1,17 @@ using Krypton.Toolkit; +using Microsoft.AspNetCore.Mvc.Routing; using qtcnet_client.Controls; using qtcnet_client.Forms; using qtcnet_client.Model; +using qtcnet_client.Properties; using QtCNETAPI.Dtos.User; +using QtCNETAPI.Events; using QtCNETAPI.Models; using QtCNETAPI.Services; using QtCNETAPI.Services.ApiService; using QtCNETAPI.Services.GatewayService; -using System.Diagnostics; using System.Drawing.Drawing2D; +using System.Threading.Tasks; namespace qtcnet_client { @@ -93,9 +96,7 @@ namespace qtcnet_client if (_token != null) { // try it - var _refreshRes = await _apiService.RefreshLogin(_token); - if (_refreshRes.Success) - OnSuccessfulLoginRefresh(); + await LoginAsync(); } else LoginControl.ToggleControls(true); @@ -118,7 +119,7 @@ namespace qtcnet_client Controls.Remove(LoginControl); LoginControl?.Dispose(); LoginControl = null; - + // create register control RegisterControl = new() { @@ -211,99 +212,67 @@ namespace qtcnet_client { if (sender is LoginControl _senderCtrl) { - // login using function - var _loginRes = await OnSuccessfulLogin(new() { Email = _senderCtrl.Email, Password = _senderCtrl.Password, RememberMe = _senderCtrl.RememberMe }); - if(_loginRes) + // login using info + await LoginAsync(new() { Email = _senderCtrl.Email, Password = _senderCtrl.Password, RememberMe = _senderCtrl.RememberMe }); + } + } + + private async void MainTabControl_OnRoomControlDoubleClicked(object? sender, EventArgs e) + { + if (sender is RoomControl _roomCtrl) + { + if(OpenChatRoomForms.Count > 0) { - // pause ui - SuspendLayout(); + KryptonMessageBox.Show("Joining Multiple Rooms Is Currently Unsupported.", ":("); + return; + } - // remove and dispose login and branding controls - Controls.Remove(LoginControl); - Controls.Remove(BrandingControl); + // open the room form + ChatRoomForm _chatRoom = new(_gatewayService, _apiService) + { + RoomId = _roomCtrl.RoomId, + RoomName = _roomCtrl.RoomName, + }; + OpenChatRoomForms.Add(_chatRoom); - LoginControl?.Dispose(); - LoginControl = null; - BrandingControl?.Dispose(); - BrandingControl = null; + _chatRoom.OnSend += Chat_OnSend; + _chatRoom.OnClose += Chat_OnClose; - // set size to logged in size - Size = LoggedInSize; + _chatRoom.Show(); - // start gateway connection - var _gwRes = await SetupGatewayConnection(); - - if(_gwRes) + if (_roomCtrl.RoomId == "LOBBY") + await _gatewayService.JoinRoomAsync(); + else + { + // join the user to the room + await _gatewayService.JoinRoomAsync(new() // TODO - refactor this server side (its so bad) { - // setup current profile control based on current user - CurrentProfileControl = new() - { - Username = _apiService.CurrentUser!.Username, - CurrencyCount = _apiService.CurrentUser.CurrencyAmount, - Location = new(12, 12), - }; - - // get profile image for the current user - var _currentProfileImageRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id); - if (_currentProfileImageRes.Success && _currentProfileImageRes.Data != null) - { - using MemoryStream ms = new(_currentProfileImageRes.Data); - Image img = Image.FromStream(ms); - CurrentProfileControl.ProfileImage = img; - } - - // setup main tab control - MainTabControl = new() - { - Location = new(12, 91) - }; - - // get and set contacts - var _currentUserContacts = await _apiService.GetCurrentUserContacts(); - if (_currentUserContacts.Success && _currentUserContacts.Data != null) - await SetupContactsUI(_currentUserContacts.Data); - - // get and set user directory - var _currentUserDirectory = await _apiService.GetAllUsersAsync(); - if (_currentUserDirectory.Success && _currentUserDirectory.Data != null) - await SetupDirectoryUI(_currentUserDirectory.Data); - - // add controls to current form - Controls.Add(CurrentProfileControl); - Controls.Add(MainTabControl); - - ResumeLayout(true); - } - else - { - ResumeLayout(true); - KryptonMessageBox.Show("An Error Occured Trying To Connect To The Gateway. Please Try Again Later.", "Uh Oh.", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); - Application.Exit(); - } + Id = _roomCtrl.RoomId, + Name = _roomCtrl.Name, + }); } } } - private void MainTabControl_OnRoomControlDoubleClicked(object? sender, EventArgs e) + private async void Chat_OnSend(object? sender, EventArgs e) { - if (sender is RoomControl _) + if (sender is ChatRoomForm _chatRoom) { - + // send the message + await _gatewayService.PostMessageAsync(new() + { + Content = _chatRoom.SentMessage + }); } } - private void Chat_OnSend(object? sender, EventArgs e) - { - if (sender is ChatRoomForm _) - { - - } - } - - private void Chat_OnClose(object? sender, EventArgs e) + private async void Chat_OnClose(object? sender, EventArgs e) { if (sender is ChatRoomForm chatRoom) { + // leave whatever room the user is in + await _gatewayService.LeaveRoomAsync(); + OpenChatRoomForms.Remove(chatRoom); chatRoom.Dispose(); } @@ -331,33 +300,6 @@ namespace qtcnet_client throw new NotImplementedException(); } - private async Task PingAPI() - { - // ping it - var res = await _apiService.PingServerAsync(); - - // return result - return res.Success; - } - - private async Task SetupGatewayConnection() - { - // subscribe to gateway events - //_gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting; - //_gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected; - //_gatewayService.OnServerDisconnect += _gatewayService_OnServerDisconnect; - //_gatewayService.OnDirectMessageReceived += _gatewayService_OnDirectMessageReceived; - _gatewayService.OnRefreshUserListsReceived += _gatewayService_OnRefreshUserListReceived; - //_gatewayService.OnRefreshRoomListReceived += _gatewayService_OnRefreshRoomListReceived; - _gatewayService.OnRefreshContactsListReceived += _gatewayService_OnRefreshContactsListReceived; - //_gatewayService.OnServerConfigReceived += _gatewayService_OnServerConfigReceived; - //_gatewayService.OnUserForceLogout += _gatewayService_OnUserForceLogout; - - // start connection - await _gatewayService.StartAsync(); - return _gatewayService.HubConnection != null && _gatewayService.HubConnection.State == Microsoft.AspNetCore.SignalR.Client.HubConnectionState.Connected; - } - private void _gatewayService_OnUserForceLogout(object? sender, EventArgs e) { throw new NotImplementedException(); @@ -370,29 +312,26 @@ namespace qtcnet_client private async void _gatewayService_OnRefreshContactsListReceived(object? sender, EventArgs e) { - if(MainTabControl != null) - { - // get and set contacts - var _currentUserContacts = await _apiService.GetCurrentUserContacts(); - if (_currentUserContacts.Success && _currentUserContacts.Data != null) - await SetupContactsUI(_currentUserContacts.Data); - } + // get and set contacts + var _currentUserContacts = await _apiService.GetCurrentUserContacts(); + if (_currentUserContacts.Success && _currentUserContacts.Data != null) + await SetupContactsUI(_currentUserContacts.Data); } - private void _gatewayService_OnRefreshRoomListReceived(object? sender, EventArgs e) + private async void _gatewayService_OnRefreshRoomListReceived(object? sender, EventArgs e) { - throw new NotImplementedException(); + // get and set rooms + var _roomList = await _apiService.GetAllRoomsAsync(); + if (_roomList.Success && _roomList.Data != null) + await SetupRoomsUI(_roomList.Data); } private async void _gatewayService_OnRefreshUserListReceived(object? sender, EventArgs e) { - if(MainTabControl != null) - { - // get and set user directory - var _currentUserDirectory = await _apiService.GetAllUsersAsync(); - if (_currentUserDirectory.Success && _currentUserDirectory.Data != null) - await SetupDirectoryUI(_currentUserDirectory.Data); - } + // get and set user directory + var _currentUserDirectory = await _apiService.GetAllUsersAsync(); + if (_currentUserDirectory.Success && _currentUserDirectory.Data != null) + await SetupDirectoryUI(_currentUserDirectory.Data); } private void _gatewayService_OnServerDisconnect(object? sender, EventArgs e) @@ -415,6 +354,178 @@ namespace qtcnet_client throw new NotImplementedException(); } + private async Task PingAPI() + { + // ping it + var res = await _apiService.PingServerAsync(); + + // return result + return res.Success; + } + + private async Task LoginAsync(UserLoginDto? dto = null) + { + if (dto != null) + { + // attempt login using dto + var res = await _apiService.LoginAsync(dto); + + if (res.Success && res.Data != null && _apiService.CurrentUser != null) // "CurrentUser" should not be null on successful login but checking anyways + { + // store refresh token in credential store + _credentialService.SaveAccessToken(_apiService.CurrentUser.Username, res.Message); + } + else + { + KryptonMessageBox.Show(res.Message, "Login Error", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); + } + } + else + { + // use refresh token + var _token = _credentialService.GetAccessToken(); + if (_token != null) + { + var _res = await _apiService.RefreshLogin(_token); + if (!_res.Success) + LoginControl?.ToggleControls(true); + } + } + + if (_apiService.CurrentUser != null) + { + // sub to currentuser updates + _apiService.OnCurrentUserUpdate += _apiService_OnCurrentUserUpdate; + + // pause ui + SuspendLayout(); + + // remove and dispose login and branding controls + Controls.Remove(LoginControl); + Controls.Remove(BrandingControl); + + LoginControl?.Dispose(); + LoginControl = null; + BrandingControl?.Dispose(); + BrandingControl = null; + + // set size to logged in size + Size = LoggedInSize; + + // subscribe to gateway events + + //_gatewayService.OnServerReconnecting += _gatewayService_OnServerReconnecting; + //_gatewayService.OnServerReconnected += _gatewayService_OnServerReconnected; + //_gatewayService.OnServerDisconnect += _gatewayService_OnServerDisconnect; + //_gatewayService.OnDirectMessageReceived += _gatewayService_OnDirectMessageReceived; + _gatewayService.OnRoomMessageReceived += _gatewayService_OnRoomMessageReceived; + _gatewayService.OnRoomUserListReceived += _gatewayService_OnRoomUserListReceived; + _gatewayService.OnRefreshUserListsReceived += _gatewayService_OnRefreshUserListReceived; + //_gatewayService.OnRefreshRoomListReceived += _gatewayService_OnRefreshRoomListReceived; + _gatewayService.OnRefreshContactsListReceived += _gatewayService_OnRefreshContactsListReceived; + //_gatewayService.OnServerConfigReceived += _gatewayService_OnServerConfigReceived; + //_gatewayService.OnUserForceLogout += _gatewayService_OnUserForceLogout; + + // start connection + await _gatewayService.StartAsync(); + var _res = _gatewayService.HubConnection != null && _gatewayService.HubConnection.State == Microsoft.AspNetCore.SignalR.Client.HubConnectionState.Connected; + + if (_res) + { + // setup current profile control based on current user + CurrentProfileControl = new() + { + Username = _apiService.CurrentUser.Username, + CurrencyCount = _apiService.CurrentUser.CurrencyAmount, + Location = new(12, 12), + }; + + // get profile image for the current user + var _currentProfileImageRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id); + if (_currentProfileImageRes.Success && _currentProfileImageRes.Data != null) + { + using MemoryStream ms = new(_currentProfileImageRes.Data); + Image img = Image.FromStream(ms); + CurrentProfileControl.ProfileImage = img; + } + + // setup main tab control + MainTabControl = new() + { + Location = new(12, 91) + }; + + MainTabControl.OnRoomControlDoubleClicked += MainTabControl_OnRoomControlDoubleClicked; + MainTabControl.OnContactControlDoubleClicked += MainTabControl_OnContactControlDoubleClicked; + + // get and set contacts + var _currentUserContacts = await _apiService.GetCurrentUserContacts(); + if (_currentUserContacts.Success && _currentUserContacts.Data != null) + await SetupContactsUI(_currentUserContacts.Data); + + // get and set rooms + var _roomList = await _apiService.GetAllRoomsAsync(); + if (_roomList.Success && _roomList.Data != null) + await SetupRoomsUI(_roomList.Data); + + // get and set user directory + var _currentUserDirectory = await _apiService.GetAllUsersAsync(); + if (_currentUserDirectory.Success && _currentUserDirectory.Data != null) + await SetupDirectoryUI(_currentUserDirectory.Data); + + // add controls to current form + Controls.Add(CurrentProfileControl); + Controls.Add(MainTabControl); + + ResumeLayout(true); + } + else + { + ResumeLayout(true); + KryptonMessageBox.Show("An Error Occured Trying To Connect To The Gateway. Please Try Again Later.", "Uh Oh.", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); + Application.Exit(); + } + } + } + + private void _gatewayService_OnRoomUserListReceived(object? sender, EventArgs e) + { + if(e is RoomListEventArgs _args) + { + // get the open chat room form + var _chatRoom = OpenChatRoomForms.FirstOrDefault(e => e.RoomId == _args.Room.Id); + if(_chatRoom != null) + { + // the users to the list + _chatRoom.AddUsersToRoomList(_args.UserList); + } + } + } + + private async void _gatewayService_OnRoomMessageReceived(object? sender, EventArgs e) + { + if (e is ServerMessageEventArgs _args) + { + // get the open chat room form + var _chatRoom = OpenChatRoomForms.FirstOrDefault(e => e.RoomId == _args.Room.Id); + if(_chatRoom != null) + { + // build message control + MessageControl _msg = new() + { + Message = _args.Message, + Username = _args.User.Username + }; + + // add message + _chatRoom.AddMessage(_msg); + + if(_args.User.Id != "0") + await _chatRoom.LoadProfileImage(_msg, _args.User.Id); + } + } + } + private async Task SetupContactsUI(List data) { // build ctrl list @@ -430,11 +541,39 @@ namespace qtcnet_client MainTabControl?.AddContacts(_contactCtrls); } + private async Task SetupRoomsUI(List data) + { + List _roomCtrls = []; + + // before adding db rooms, add lobby + _roomCtrls.Add(new() + { + RoomId = "LOBBY", + RoomName = "Lobby", + IsUserCountVisible = false, + }); + + // build roomcontrol list + foreach (var room in data) + { + RoomControl _ctrl = new() + { + RoomId = room.Id, + RoomName = room.Name, + UserCount = room.UserCount, + }; + _roomCtrls.Add(_ctrl); + } + + // add to control + MainTabControl?.AddRooms(_roomCtrls); + } + private async Task SetupDirectoryUI(List data) { // build listviewitem list List _userViews = []; - foreach(var user in data) + foreach (var user in data) { ListViewItem lvi = new() { @@ -451,7 +590,7 @@ namespace qtcnet_client private async Task BuildContactControl(Contact contact) { - if(_apiService.CurrentUser != null) + if (_apiService.CurrentUser != null) { ServiceResponse user = null!; if (contact.OwnerId == _apiService.CurrentUser.Id) @@ -509,90 +648,5 @@ namespace qtcnet_client return default; } - - private async Task OnSuccessfulLogin(UserLoginDto dto) - { - // attempt login - var res = await _apiService.LoginAsync(dto); - - if (res.Success && res.Data != null && _apiService.CurrentUser != null) // "CurrentUser" should not be null on successful login but checking anyways - { - // store refresh token in credential store - _credentialService.SaveAccessToken(_apiService.CurrentUser.Username, res.Message); - - // sub to currentuser updates - _apiService.OnCurrentUserUpdate += _apiService_OnCurrentUserUpdate; - - return true; - } - else - { - KryptonMessageBox.Show(res.Message, "Login Error", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); - return false; - } - } - - private async void OnSuccessfulLoginRefresh() - { - if (_apiService.CurrentUser != null) - { - // remove and dispose login and branding controls - Controls.Remove(LoginControl); - Controls.Remove(BrandingControl); - - LoginControl?.Dispose(); - LoginControl = null; - BrandingControl?.Dispose(); - BrandingControl = null; - - // set size to logged in size - Size = LoggedInSize; - - // start gateway connection - var _gwRes = await SetupGatewayConnection(); - - if (_gwRes) - { - // setup current profile control based on current user - CurrentProfileControl = new() - { - Username = _apiService.CurrentUser!.Username, - CurrencyCount = _apiService.CurrentUser.CurrencyAmount, - Location = new(12, 12), - }; - - // get profile image for the current user - var _currentProfileImageRes = await _apiService.GetUserProfilePic(_apiService.CurrentUser.Id); - if (_currentProfileImageRes.Success && _currentProfileImageRes.Data != null) - { - using MemoryStream ms = new(_currentProfileImageRes.Data); - Image img = Image.FromStream(ms); - CurrentProfileControl.ProfileImage = img; - } - - // setup main tab control - MainTabControl = new() - { - Location = new(12, 91) - }; - - // add controls to current form - Controls.Add(CurrentProfileControl); - Controls.Add(MainTabControl); - - // get and set contacts - var _currentUserContacts = await _apiService.GetCurrentUserContacts(); - if (_currentUserContacts.Success && _currentUserContacts.Data != null) - await SetupContactsUI(_currentUserContacts.Data); - - // get and set user directory - var _currentUserDirectory = await _apiService.GetAllUsersAsync(); - if (_currentUserDirectory.Success && _currentUserDirectory.Data != null) - await SetupDirectoryUI(_currentUserDirectory.Data); - - ResumeLayout(true); - } - } - } } } diff --git a/qtcnet-client/QtCNETAppIconV2.ico b/qtcnet-client/QtCNETAppIconV2.ico new file mode 100644 index 0000000000000000000000000000000000000000..b58cb195d0f2b693a6148122f7ba97bee7af5953 GIT binary patch literal 4286 zcmeH~TWnNS6o&V-V1-uODAb4|L{JooCPYXenl_Rki5kO;@c|w%!3T{G8WRKY`e0Np ztEBBmj>1;tAwP^+|^OQ%y>S~_i~(<#gpnC1WPbI$b4bY`%0UPxTc zH|y-%T5IpU_CBXdIq)}szT&UiU!+vAQtBaqDpd+tuLW&)<{KCl|Nq`BE8yCul*#ST zOTmla4X_!!4qgC{fdZiWW@B!aE$DgRO>hznf@?r*T*Y$$`~+SDbHJ41Fvrh;-T?jv zF<|$Z?wPTj23(_Cz@&uzP40lM0GB~JUzzH|821t2p8aQGUr+>gf#h}0zs}L3&m4Wm@4LS^wV>-$6(eKL$?@qjQRS%UM6Ah4-y?{ zl}O)N89H4dp>zAByLPpfYhl~F9@u{nBnZo34Tu6AGwnx*Ji;~bI`5LuKYQg;_pcIaJ)r&h ztCveO&2lz4U&O5cwg(f)va4Mt#pB}fpK0dtS{g&yCv z?+J+xy2SU@BKUJ)y^ADp;%yo2sMq@)_m6h^A2{`)jJOY@ZJLgccG?k#ZSJgRZa)PQ zgk|t7;9W7%Kk|^a0!^E>e|On*={~SV#)iDun^Nt=@c+HI%EtXC`KJF-@FYkOmca_Z zGh+DPyV96{)x+Ap_J87C33nXB8OWF6<|>I@yCPxFQN1<;KYyT~8Jo6&eDpetu^%(z z>w)@yummIs%iuoX0otGMi~EuHZ91n}$9xQXj_5q(yt)rQBV)rpIbX9%_wPNrUZ0cB zU5j;@`#0)uK>j?g%i8WX)eJowBnZoZ?@HcLM!ef|ByjQ_#;(n|gwzR!%!n2vD+#lWFW(R$F_sjw*h4m({LSF_#upbGHtpoVyi}+0O5k zT98fue6R3ZE~BvBWFhn~AR95%!_HjOZbtuXwE96m0vf=L#t_5UI+2 zbM!D^T>P%!{|Sr1ba2CSzFxqVZRlLnm%h(ff3u1Hps{{}c_IxC5vAUXDOGY+sd*8l i3Q16@JmNFRg-(mr*BVPZv`4%0z7p}}io{B^*M9-fp;%x5 literal 0 HcmV?d00001 diff --git a/qtcnet-client/qtcnet-client.csproj b/qtcnet-client/qtcnet-client.csproj index 72b0a83..749567c 100644 --- a/qtcnet-client/qtcnet-client.csproj +++ b/qtcnet-client/qtcnet-client.csproj @@ -7,8 +7,13 @@ enable true enable + QtCNETAppIconV2.ico + + + +