From 83f3846ce6349aea987874238c6d46f67b8164ea Mon Sep 17 00:00:00 2001 From: Dimitrij Date: Fri, 3 May 2024 14:40:52 +0100 Subject: [PATCH] lib updates correct build number calculations - now its days from last release + hour + minute of build some changes to migrate to json schema + preparation of using db to save settings --- .../DSS/SecretServerInterface.cs | 8 +- ExternalConnectors/ExternalConnectors.csproj | 6 +- mRemoteNG/App/CompatibilityChecker.cs | 10 +- mRemoteNG/App/Export.cs | 14 +- mRemoteNG/App/Import.cs | 18 +- mRemoteNG/App/Info/ConnectionsFileInfo.cs | 2 +- mRemoteNG/App/Info/GeneralAppInfo.cs | 16 +- mRemoteNG/App/Info/UpdateChannelInfo.cs | 2 +- .../Initialization/ConnectionIconLoader.cs | 4 +- .../Initialization/MessageCollectorSetup.cs | 4 +- .../App/Initialization/StartupDataLogger.cs | 36 +-- mRemoteNG/App/Logger.cs | 4 +- mRemoteNG/App/ProgramRoot.cs | 16 +- mRemoteNG/App/Runtime.cs | 10 +- mRemoteNG/App/Screens.cs | 4 +- mRemoteNG/App/Startup.cs | 11 +- mRemoteNG/App/SupportedCultures.cs | 14 +- mRemoteNG/App/Update/AppUpdater.cs | 44 +-- mRemoteNG/App/Update/UpdateFile.cs | 14 +- mRemoteNG/App/Update/UpdateInfo.cs | 4 +- mRemoteNG/App/Windows.cs | 2 +- .../Config/Connections/CsvConnectionsSaver.cs | 8 +- .../Multiuser/SqlConnectionsUpdateChecker.cs | 14 +- .../Connections/SaveConnectionsOnEdit.cs | 2 +- .../Connections/SqlConnectionsLoader.cs | 32 +-- .../Config/Connections/SqlConnectionsSaver.cs | 28 +- .../Connections/XmlConnectionsLoader.cs | 8 +- .../Config/Connections/XmlConnectionsSaver.cs | 14 +- mRemoteNG/Config/CredentialHarvester.cs | 12 +- mRemoteNG/Config/CredentialRecordLoader.cs | 2 +- mRemoteNG/Config/CredentialRecordSaver.cs | 2 +- .../Config/CredentialRepositoryListLoader.cs | 2 +- .../Config/CredentialRepositoryListSaver.cs | 4 +- .../Config/DataProviders/FileBackupCreator.cs | 2 +- .../Config/DataProviders/FileBackupPruner.cs | 12 +- .../Config/DataProviders/FileDataProvider.cs | 4 +- .../Config/DataProviders/SqlDataProvider.cs | 26 +- .../DatabaseConnectionTester.cs | 2 +- .../DatabaseConnectorFactory.cs | 12 +- .../MSSqlDatabaseConnector.cs | 2 +- .../Config/Import/ActiveDirectoryImporter.cs | 8 +- .../Config/Import/MRemoteNGCsvImporter.cs | 10 +- .../Config/Import/MRemoteNGXmlImporter.cs | 10 +- mRemoteNG/Config/Import/PortScanImporter.cs | 8 +- .../Import/PuttyConnectionManagerImporter.cs | 12 +- .../Import/RemoteDesktopConnectionImporter.cs | 10 +- .../RemoteDesktopConnectionManagerImporter.cs | 12 +- .../Import/RemoteDesktopManagerImporter.cs | 10 +- mRemoteNG/Config/Import/SecureCRTImporter.cs | 10 +- .../Putty/AbstractPuttySessionsProvider.cs | 18 +- .../Config/Putty/PuttySessionsManager.cs | 20 +- .../Putty/PuttySessionsRegistryProvider.cs | 24 +- .../ConfConsEnsureConnectionsHaveIds.cs | 4 +- ...vConnectionsDeserializerMremotengFormat.cs | 28 +- ...CsvConnectionsSerializerMremotengFormat.cs | 10 +- .../CsvConnectionsDeserializerRdmFormat.cs | 76 +++--- .../Sql/DataTableDeserializer.cs | 24 +- .../Sql/DataTableSerializer.cs | 16 +- .../LocalConnectionPropertiesXmlSerializer.cs | 17 +- .../Sql/SqlDatabaseMetaDataRetriever.cs | 10 +- .../Xml/XmlConnectionNodeSerializer26.cs | 6 +- .../Xml/XmlConnectionNodeSerializer27.cs | 6 +- .../Xml/XmlConnectionNodeSerializer28.cs | 6 +- .../Xml/XmlConnectionSerializerFactory.cs | 4 +- .../Xml/XmlConnectionsDeserializer.cs | 57 ++-- .../Xml/XmlConnectionsDocumentCompiler.cs | 16 +- .../Xml/XmlConnectionsDocumentEncryptor.cs | 14 +- .../Xml/XmlConnectionsSerializer.cs | 19 +- .../Xml/XmlExtensions.cs | 14 +- .../Xml/XmlRootNodeSerializer.cs | 8 +- .../CredentialRepositoryListDeserializer.cs | 6 +- .../CredentialRepositoryListSerializer.cs | 8 +- ...XmlCredentialPasswordDecryptorDecorator.cs | 14 +- ...XmlCredentialPasswordEncryptorDecorator.cs | 12 +- .../XmlCredentialRecordDeserializer.cs | 8 +- .../XmlCredentialRecordSerializer.cs | 2 +- .../ActiveDirectoryDeserializer.cs | 24 +- .../MiscSerializers/PortScanDeserializer.cs | 12 +- .../PuttyConnectionManagerDeserializer.cs | 32 +-- .../RemoteDesktopConnectionDeserializer.cs | 16 +- ...oteDesktopConnectionManagerDeserializer.cs | 76 +++--- .../SecureCRTFileDeserializer.cs | 28 +- .../Versioning/SqlDatabaseVersionVerifier.cs | 4 +- .../Versioning/SqlVersion22To23Upgrader.cs | 2 +- .../Versioning/SqlVersion23To24Upgrader.cs | 2 +- .../Versioning/SqlVersion24To25Upgrader.cs | 2 +- .../Versioning/SqlVersion25To26Upgrader.cs | 2 +- .../Versioning/SqlVersion26To27Upgrader.cs | 2 +- .../Versioning/SqlVersion28To29Upgrader.cs | 6 +- .../Versioning/SqlVersion29To30Upgrader.cs | 6 +- .../Serializers/XmlConnectionsDecryptor.cs | 8 +- .../Config/Settings/DockPanelLayoutLoader.cs | 6 +- .../Config/Settings/DockPanelLayoutSaver.cs | 2 +- .../Settings/DockPanelLayoutSerializer.cs | 2 +- .../Config/Settings/ExternalAppsLoader.cs | 8 +- .../Config/Settings/ExternalAppsSaver.cs | 6 +- .../Providers/PortableSettingsProvider.cs | 16 +- mRemoteNG/Config/Settings/SettingsLoader.cs | 14 +- mRemoteNG/Config/Settings/SettingsSaver.cs | 8 +- .../Connection/AbstractConnectionRecord.cs | 4 +- mRemoteNG/Connection/ConnectionIcon.cs | 4 +- mRemoteNG/Connection/ConnectionInfo.cs | 32 +-- .../Connection/ConnectionInfoInheritance.cs | 24 +- mRemoteNG/Connection/ConnectionInitiator.cs | 66 ++--- mRemoteNG/Connection/ConnectionsService.cs | 26 +- mRemoteNG/Connection/DefaultConnectionInfo.cs | 20 +- .../DefaultConnectionInheritance.cs | 16 +- .../Http/Connection.Protocol.HTTPBase.cs | 33 ++- .../Connection/Protocol/IntegratedProgram.cs | 4 +- .../Connection.Protocol.PowerShell.cs | 6 +- mRemoteNG/Connection/Protocol/ProtocolBase.cs | 10 +- .../Connection/Protocol/ProtocolFactory.cs | 4 +- mRemoteNG/Connection/Protocol/ProtocolList.cs | 4 +- mRemoteNG/Connection/Protocol/PuttyBase.cs | 32 ++- .../RDP/AzureLoadBalanceInfoEncoder.cs | 2 +- .../Connection/Protocol/RDP/RdpProtocol.cs | 48 ++-- .../Connection/Protocol/RDP/RdpProtocol7.cs | 4 +- .../Connection/Protocol/RDP/RdpProtocol8.cs | 2 +- .../Protocol/RDP/RdpProtocolFactory.cs | 12 +- .../Protocol/VNC/Connection.Protocol.VNC.cs | 6 +- mRemoteNG/Connection/PuttySessionInfo.cs | 2 +- mRemoteNG/Connection/WebHelper.cs | 2 +- mRemoteNG/Container/ContainerInfo.cs | 76 +++--- .../CredentialDeletionMsgBoxConfirmer.cs | 4 +- .../CredentialDomainUserComparer.cs | 2 +- mRemoteNG/Credential/CredentialRecord.cs | 2 +- .../CredentialRecordTypeConverter.cs | 2 +- .../Credential/CredentialServiceFacade.cs | 4 +- .../Credential/CredentialServiceFactory.cs | 14 +- .../Credential/PlaceholderCredentialRecord.cs | 9 +- .../CompositeRepositoryUnlocker.cs | 20 +- .../CredentialRepositoryConfig.cs | 2 +- .../Repositories/CredentialRepositoryList.cs | 8 +- .../Repositories/XmlCredentialRepository.cs | 4 +- .../XmlCredentialRepositoryFactory.cs | 10 +- mRemoteNG/Messages/MessageCollector.cs | 6 +- .../DebugConsoleMessageWriter.cs | 2 +- .../NotificationPanelMessageWriter.cs | 2 +- mRemoteNG/Properties/AssemblyInfo.cs | 13 +- mRemoteNG/Properties/AssemblyInfo.tt | 26 +- mRemoteNG/PuTTYNG.exe | Bin 848896 -> 852480 bytes mRemoteNG/Resources/ImageConverter.cs | 2 +- .../Authentication/PasswordAuthenticator.cs | 6 +- mRemoteNG/Security/EncryptedSecureString.cs | 12 +- .../Factories/CryptoProviderFactory.cs | 38 +-- .../CryptoProviderFactoryFromSettings.cs | 2 +- .../Factories/CryptoProviderFactoryFromXml.cs | 6 +- .../KeyDerivation/Pkcs5S2KeyGenerator.cs | 8 +- .../PasswordIncludesLowerCaseConstraint.cs | 2 +- .../PasswordIncludesNumbersConstraint.cs | 2 +- ...wordIncludesSpecialCharactersConstraint.cs | 2 +- .../PasswordIncludesUpperCaseConstraint.cs | 2 +- mRemoteNG/Security/RandomGenerator.cs | 8 +- mRemoteNG/Security/SecureStringExtensions.cs | 6 +- .../AeadCryptographyProvider.cs | 60 ++-- .../LegacyRijndaelCryptographyProvider.cs | 32 +-- mRemoteNG/Themes/ExtendedColorPalette.cs | 6 +- .../Themes/MremoteNGPaletteManipulator.cs | 26 +- mRemoteNG/Themes/MremoteNGThemeBase.cs | 2 +- mRemoteNG/Themes/ThemeInfo.cs | 4 +- mRemoteNG/Themes/ThemeManager.cs | 44 +-- mRemoteNG/Themes/ThemeSerializer.cs | 20 +- mRemoteNG/Tools/ADhelper.cs | 2 +- mRemoteNG/Tools/Authenticode.cs | 26 +- .../Tools/Cmdline/CmdArgumentsInterpreter.cs | 10 +- .../Tools/Cmdline/CommandLineArguments.cs | 8 +- .../Cmdline/StartupArgumentsInterpreter.cs | 12 +- .../ConnectionsTreeToMenuItemsConverter.cs | 12 +- .../FullyObservableCollection.cs | 12 +- mRemoteNG/Tools/EnumWindows.cs | 10 +- mRemoteNG/Tools/Extensions.cs | 2 +- mRemoteNG/Tools/ExternalTool.cs | 10 +- mRemoteNG/Tools/ExternalToolArgumentParser.cs | 50 ++-- mRemoteNG/Tools/ExternalToolsService.cs | 2 +- mRemoteNG/Tools/ExternalToolsTypeConverter.cs | 11 +- mRemoteNG/Tools/IeBrowserEmulation.cs | 12 +- mRemoteNG/Tools/MiscTools.cs | 18 +- mRemoteNG/Tools/MouseClickSimulator.cs | 6 +- mRemoteNG/Tools/NotificationAreaIcon.cs | 6 +- mRemoteNG/Tools/Optional.cs | 12 +- mRemoteNG/Tools/PortScanner.cs | 58 ++-- mRemoteNG/Tools/ProcessController.cs | 30 +- mRemoteNG/Tools/PropertyGridCommandSite.cs | 32 +-- mRemoteNG/Tools/PuttyProcessController.cs | 2 +- mRemoteNG/Tools/ReconnectGroup.cs | 6 +- mRemoteNG/Tools/SSHTunnelTypeConverter.cs | 6 +- mRemoteNG/Tools/ScanHost.cs | 8 +- mRemoteNG/Tools/Tools.WindowPlacement.cs | 2 +- .../Tools/WindowsRegistry/WindowsRegistry.cs | 14 +- .../WindowsRegistryAdvanced.cs | 16 +- .../ClickHandlers/ExpandNodeClickHandler.cs | 2 +- .../TreeNodeCompositeClickHandler.cs | 2 +- .../Tree/ConnectionTreeDragAndDropHandler.cs | 14 +- mRemoteNG/Tree/ConnectionTreeModel.cs | 6 +- mRemoteNG/Tree/NodeSearcher.cs | 16 +- mRemoteNG/Tree/PreviousSessionOpener.cs | 6 +- .../Tree/PreviouslyOpenedFolderExpander.cs | 6 +- mRemoteNG/Tree/RootNodeExpander.cs | 2 +- .../SelectedConnectionDeletionConfirmer.cs | 10 +- .../Adapters/CredentialRecordListAdaptor.cs | 4 +- .../UI/Controls/ConnectionContextMenu.cs | 30 +- .../ConnectionInfoPropertyGrid.cs | 22 +- .../Controls/ConnectionTree/ConnectionTree.cs | 94 +++---- .../ConnectionTreeSearchTextFilter.cs | 4 +- .../UI/Controls/CredentialRecordComboBox.cs | 2 +- .../UI/Controls/CredentialRecordListBox.cs | 2 +- .../UI/Controls/CredentialRecordListView.cs | 20 +- .../Controls/CredentialRepositoryListView.cs | 8 +- .../UI/Controls/ExternalToolsToolStrip.cs | 10 +- .../FilteredPropertyGrid.cs | 54 ++-- .../FilteredPropertyGrid/ObjectWrapper.cs | 2 +- mRemoteNG/UI/Controls/MultiSshToolStrip.cs | 14 +- .../Controls/NewPasswordWithVerification.cs | 2 +- .../UI/Controls/PageSequence/PageSequence.cs | 8 +- mRemoteNG/UI/Controls/QuickConnectComboBox.cs | 18 +- .../UI/Controls/QuickConnectToolStrip.cs | 22 +- mRemoteNG/UI/Controls/mrngAdTree.cs | 16 +- mRemoteNG/UI/Controls/mrngCheckBox.cs | 10 +- mRemoteNG/UI/Controls/mrngComboBox.cs | 20 +- mRemoteNG/UI/Controls/mrngGroupBox.cs | 16 +- mRemoteNG/UI/Controls/mrngIpTextBox.cs | 6 +- mRemoteNG/UI/Controls/mrngLabel.cs | 2 +- mRemoteNG/UI/Controls/mrngListView.cs | 4 +- mRemoteNG/UI/Controls/mrngNumericUpDown.cs | 2 +- mRemoteNG/UI/Controls/mrngProgressBar.cs | 6 +- mRemoteNG/UI/Controls/mrngRadioButton.cs | 12 +- mRemoteNG/UI/Controls/mrngSearchBox.cs | 4 +- mRemoteNG/UI/DPI_Per_Monitor.cs | 6 +- mRemoteNG/UI/DialogFactory.cs | 6 +- mRemoteNG/UI/DisplayProperties.cs | 12 +- mRemoteNG/UI/FontOverrider.cs | 2 +- mRemoteNG/UI/FormExtensions.cs | 8 +- mRemoteNG/UI/Forms/FrmExport.cs | 10 +- mRemoteNG/UI/Forms/FrmInputBox.cs | 2 +- mRemoteNG/UI/Forms/FrmPassword.cs | 8 +- mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs | 5 +- mRemoteNG/UI/Forms/FrmUnhandledException.cs | 2 +- .../UI/Forms/OptionsPages/AdvancedPage.cs | 16 +- .../UI/Forms/OptionsPages/AppearancePage.cs | 2 +- mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs | 2 +- .../UI/Forms/OptionsPages/CredentialsPage.cs | 4 +- .../Forms/OptionsPages/NotificationsPage.cs | 6 +- .../UI/Forms/OptionsPages/SecurityPage.cs | 18 +- .../UI/Forms/OptionsPages/SqlServerPage.cs | 18 +- mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs | 22 +- .../UI/Forms/OptionsPages/UpdatesPage.cs | 18 +- mRemoteNG/UI/Forms/frmChoosePanel.cs | 8 +- mRemoteNG/UI/Forms/frmMain.cs | 62 ++--- mRemoteNG/UI/Forms/frmOptions.cs | 16 +- .../GdiPlusGraphicsProvider.cs | 4 +- mRemoteNG/UI/Menu/AdvancedWindowMenu.cs | 6 +- mRemoteNG/UI/Menu/msMain/FileMenu.cs | 8 +- mRemoteNG/UI/Menu/msMain/ViewMenu.cs | 6 +- mRemoteNG/UI/Panels/PanelAdder.cs | 32 +-- mRemoteNG/UI/StatusImageList.cs | 27 +- mRemoteNG/UI/Tabs/ConnectionTab.cs | 4 +- mRemoteNG/UI/Tabs/DockPaneStripNG.cs | 256 +++++++++--------- mRemoteNG/UI/Tabs/MremoteNGAutoHideStrip.cs | 126 ++++----- mRemoteNG/UI/Tabs/TabHelper.cs | 4 +- mRemoteNG/UI/TaskDialog/CommandButton.cs | 42 +-- mRemoteNG/UI/TaskDialog/cTaskDialog.cs | 12 +- mRemoteNG/UI/TaskDialog/frmTaskDialog.cs | 54 ++-- mRemoteNG/UI/TextBoxExtensions.cs | 6 +- .../UI/Window/ActiveDirectoryImportWindow.cs | 2 +- mRemoteNG/UI/Window/ConfigWindow.cs | 103 +++---- .../Window/ConnectionTreeWindow.Designer.cs | 2 +- mRemoteNG/UI/Window/ConnectionTreeWindow.cs | 27 +- mRemoteNG/UI/Window/ConnectionWindow.cs | 102 +++---- mRemoteNG/UI/Window/ErrorAndInfoWindow.cs | 6 +- mRemoteNG/UI/Window/ExternalToolsWindow.cs | 28 +- mRemoteNG/UI/Window/PortScanWindow.cs | 16 +- mRemoteNG/UI/Window/SSHTransferWindow.cs | 16 +- mRemoteNG/UI/Window/UltraVNCWindow.cs | 2 +- mRemoteNG/UI/Window/UpdateWindow.cs | 8 +- mRemoteNG/UI/WindowList.cs | 10 +- mRemoteNG/mRemoteNG.csproj | 20 +- .../Installer/Filters/Harvest_Filter.xslt | 2 +- .../Installer/Fragments/FilesFragment.wxs | 66 +++++ .../CredentialRepositoryListSteps.cs | 2 +- mRemoteNGSpecs/mRemoteNGSpecs.csproj | 16 +- mRemoteNGTests/ListViewTester.cs | 2 +- mRemoteNGTests/TestHelpers/Randomizer.cs | 2 +- .../Tools/Registry/WindowsRegistryKeyTests.cs | 40 ++- mRemoteNGTests/UI/Forms/OptionsFormTests.cs | 2 +- .../OptionsPages/OptionsAdvancedPageTests.cs | 6 +- .../OptionsAppearancePageTests.cs | 6 +- .../OptionsConnectionsPageTests.cs | 6 +- .../Forms/OptionsPages/OptionsSQLPageTests.cs | 6 +- .../OptionsStartupExitPageTests.cs | 6 +- .../OptionsPages/OptionsTabsPanelPageTests.cs | 6 +- .../OptionsPages/OptionsThemePageTests.cs | 6 +- .../OptionsPages/OptionsUpdatesPageTests.cs | 6 +- mRemoteNGTests/UI/WindowListTests.cs | 34 +-- mRemoteNGTests/mRemoteNGTests.csproj | 10 +- 294 files changed, 2216 insertions(+), 2174 deletions(-) diff --git a/ExternalConnectors/DSS/SecretServerInterface.cs b/ExternalConnectors/DSS/SecretServerInterface.cs index 1a6f3e37..4d9f0493 100644 --- a/ExternalConnectors/DSS/SecretServerInterface.cs +++ b/ExternalConnectors/DSS/SecretServerInterface.cs @@ -34,7 +34,7 @@ namespace ExternalConnectors.DSS try { // display gui and ask for data - SSConnectionForm f = new SSConnectionForm(); + SSConnectionForm f = new(); string? un = key.GetValue("Username") as string; f.tbUsername.Text = un ?? ""; f.tbPassword.Text = SSConnectionData.ssPassword; // in OTP refresh cases, this value might already be filled @@ -212,7 +212,7 @@ namespace ExternalConnectors.DSS private static string DecodePrivateKey(string encryptedPrivateKey, string password) { TextReader textReader = new StringReader(encryptedPrivateKey); - PemReader pemReader = new PemReader(textReader, new PasswordFinder(password)); + PemReader pemReader = new(textReader, new PasswordFinder(password)); AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject(); @@ -242,10 +242,10 @@ namespace ExternalConnectors.DSS // read private key pem string to rsacryptoserviceprovider public static RSACryptoServiceProvider ImportPrivateKey(string pem) { - PemReader pr = new PemReader(new StringReader(pem)); + PemReader pr = new(new StringReader(pem)); AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject(); RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private); - RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); + RSACryptoServiceProvider rsa = new(); rsa.ImportParameters(rsaParams); return rsa; } diff --git a/ExternalConnectors/ExternalConnectors.csproj b/ExternalConnectors/ExternalConnectors.csproj index ba51ca93..8d806aee 100644 --- a/ExternalConnectors/ExternalConnectors.csproj +++ b/ExternalConnectors/ExternalConnectors.csproj @@ -15,9 +15,9 @@ - - - + + + diff --git a/mRemoteNG/App/CompatibilityChecker.cs b/mRemoteNG/App/CompatibilityChecker.cs index 0ef443c9..cbaeeabc 100644 --- a/mRemoteNG/App/CompatibilityChecker.cs +++ b/mRemoteNG/App/CompatibilityChecker.cs @@ -35,13 +35,13 @@ namespace mRemoteNG.App if (!FipsPolicyEnabledForServer2003() && !FipsPolicyEnabledForServer2008AndNewer()) return; - var errorText = string.Format(Language.ErrorFipsPolicyIncompatible, GeneralAppInfo.ProductName); + string errorText = string.Format(Language.ErrorFipsPolicyIncompatible, GeneralAppInfo.ProductName); messageCollector.AddMessage(MessageClass.ErrorMsg, errorText, true); //About to pop up a message, let's not block it... FrmSplashScreenNew.GetInstance().Close(); - var ShouldIStayOrShouldIGo = CTaskDialog.MessageBox(Application.ProductName, Language.CompatibilityProblemDetected, errorText, "", "", Language.CheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.OkCancel, ESysIcons.Warning, ESysIcons.Warning); + DialogResult ShouldIStayOrShouldIGo = CTaskDialog.MessageBox(Application.ProductName, Language.CompatibilityProblemDetected, errorText, "", "", Language.CheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.OkCancel, ESysIcons.Warning, ESysIcons.Warning); if (CTaskDialog.VerificationChecked && ShouldIStayOrShouldIGo == DialogResult.OK) { messageCollector.AddMessage(MessageClass.ErrorMsg, "User requests that FIPS check be overridden", true); @@ -56,7 +56,7 @@ namespace mRemoteNG.App private static bool FipsPolicyEnabledForServer2003() { - var regKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa"); + RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa"); if (!(regKey?.GetValue("FIPSAlgorithmPolicy") is int fipsPolicy)) return false; return fipsPolicy != 0; @@ -64,7 +64,7 @@ namespace mRemoteNG.App private static bool FipsPolicyEnabledForServer2008AndNewer() { - var regKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy"); + RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy"); if (!(regKey?.GetValue("Enabled") is int fipsPolicy)) return false; return fipsPolicy != 0; @@ -77,7 +77,7 @@ namespace mRemoteNG.App if (!Settings.Default.CompatibilityWarnLenovoAutoScrollUtility) return; - var proccesses = new Process[] { }; + Process[] proccesses = new Process[] { }; try { proccesses = Process.GetProcessesByName("virtscrl"); diff --git a/mRemoteNG/App/Export.cs b/mRemoteNG/App/Export.cs index ecf935b8..49085581 100644 --- a/mRemoteNG/App/Export.cs +++ b/mRemoteNG/App/Export.cs @@ -25,9 +25,9 @@ namespace mRemoteNG.App { try { - var saveFilter = new SaveFilter(); + SaveFilter saveFilter = new(); - using (var exportForm = new FrmExport()) + using (FrmExport exportForm = new()) { if (selectedNode?.GetTreeNodeType() == TreeNodeType.Container) exportForm.SelectedFolder = selectedNode as ContainerInfo; @@ -81,9 +81,9 @@ namespace mRemoteNG.App switch (saveFormat) { case SaveFormat.mRXML: - var cryptographyProvider = new CryptoProviderFactoryFromSettings().Build(); - var rootNode = exportTarget.GetRootParent() as RootNodeInfo; - var connectionNodeSerializer = new XmlConnectionNodeSerializer28( + ICryptographyProvider cryptographyProvider = new CryptoProviderFactoryFromSettings().Build(); + RootNodeInfo rootNode = exportTarget.GetRootParent() as RootNodeInfo; + XmlConnectionNodeSerializer28 connectionNodeSerializer = new( cryptographyProvider, rootNode?.PasswordString .ConvertToSecureString() ?? @@ -102,8 +102,8 @@ namespace mRemoteNG.App throw new ArgumentOutOfRangeException(nameof(saveFormat), saveFormat, null); } - var serializedData = serializer.Serialize(exportTarget); - var fileDataProvider = new FileDataProvider(fileName); + string serializedData = serializer.Serialize(exportTarget); + FileDataProvider fileDataProvider = new(fileName); fileDataProvider.Save(serializedData); } catch (Exception ex) diff --git a/mRemoteNG/App/Import.cs b/mRemoteNG/App/Import.cs index d56e7d23..f25a19d0 100644 --- a/mRemoteNG/App/Import.cs +++ b/mRemoteNG/App/Import.cs @@ -19,13 +19,13 @@ namespace mRemoteNG.App { try { - using (var openFileDialog = new OpenFileDialog()) + using (OpenFileDialog openFileDialog = new()) { openFileDialog.CheckFileExists = true; openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); openFileDialog.Multiselect = true; - var fileTypes = new List(); + List fileTypes = new(); fileTypes.AddRange(new[] {Language.FilterAllImportable, "*.xml;*.rdp;*.rdg;*.dat;*.csv"}); fileTypes.AddRange(new[] {Language.FiltermRemoteXML, "*.xml"}); fileTypes.AddRange(new[] {Language.FiltermRemoteCSV, "*.csv"}); @@ -60,13 +60,13 @@ namespace mRemoteNG.App { using (Runtime.ConnectionsService.BatchedSavingContext()) { - using (var openFileDialog = new OpenFileDialog()) + using (OpenFileDialog openFileDialog = new()) { openFileDialog.CheckFileExists = true; openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); openFileDialog.Multiselect = false; - var fileTypes = new List(); + List fileTypes = new(); fileTypes.AddRange(new[] {Language.FiltermRemoteRemoteDesktopManagerCSV, "*.csv"}); openFileDialog.Filter = string.Join("|", fileTypes.ToArray()); @@ -74,7 +74,7 @@ namespace mRemoteNG.App if (openFileDialog.ShowDialog() != DialogResult.OK) return; - var importer = new RemoteDesktopManagerImporter(); + RemoteDesktopManagerImporter importer = new(); importer.Import(openFileDialog.FileName, importDestinationContainer); } } @@ -93,11 +93,11 @@ namespace mRemoteNG.App { using (connectionsService.BatchedSavingContext()) { - foreach (var fileName in filePaths) + foreach (string fileName in filePaths) { try { - var importer = BuildConnectionImporterFromFileExtension(fileName); + IConnectionImporter importer = BuildConnectionImporterFromFileExtension(fileName); importer.Import(fileName, importDestinationContainer); } catch (Exception ex) @@ -134,7 +134,7 @@ namespace mRemoteNG.App { using (Runtime.ConnectionsService.BatchedSavingContext()) { - var importer = new PortScanImporter(protocol); + PortScanImporter importer = new(protocol); importer.Import(hosts, importDestinationContainer); } } @@ -162,7 +162,7 @@ namespace mRemoteNG.App private static IConnectionImporter BuildConnectionImporterFromFileExtension(string fileName) { // TODO: Use the file contents to determine the file type instead of trusting the extension - var extension = Path.GetExtension(fileName) ?? ""; + string extension = Path.GetExtension(fileName) ?? ""; switch (extension.ToLowerInvariant()) { case ".xml": diff --git a/mRemoteNG/App/Info/ConnectionsFileInfo.cs b/mRemoteNG/App/Info/ConnectionsFileInfo.cs index ded493ff..e5c4efdf 100644 --- a/mRemoteNG/App/Info/ConnectionsFileInfo.cs +++ b/mRemoteNG/App/Info/ConnectionsFileInfo.cs @@ -9,6 +9,6 @@ namespace mRemoteNG.App.Info public static readonly string DefaultConnectionsPath = SettingsFileInfo.SettingsPath; public static readonly string DefaultConnectionsFile = "confCons.xml"; public static readonly string DefaultConnectionsFileNew = "confConsNew.xml"; - public static readonly Version ConnectionFileVersion = new Version(3, 0); + public static readonly Version ConnectionFileVersion = new(3, 0); } } \ No newline at end of file diff --git a/mRemoteNG/App/Info/GeneralAppInfo.cs b/mRemoteNG/App/Info/GeneralAppInfo.cs index 639922e1..1dff8218 100644 --- a/mRemoteNG/App/Info/GeneralAppInfo.cs +++ b/mRemoteNG/App/Info/GeneralAppInfo.cs @@ -18,25 +18,25 @@ namespace mRemoteNG.App.Info public const string UrlForum = "https://www.reddit.com/r/mRemoteNG"; public const string UrlBugs = "https://bugs.mremoteng.org"; public const string UrlDocumentation = "https://mremoteng.readthedocs.io/en/latest/"; - public static string ApplicationVersion = Application.ProductVersion; + public static readonly string ApplicationVersion = Application.ProductVersion; public static readonly string ProductName = Application.ProductName; public static readonly string Copyright = ((AssemblyCopyrightAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyCopyrightAttribute), false))?.Copyright; public static readonly string HomePath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location); //public static string ReportingFilePath = ""; - public static readonly string PuttyPath = HomePath + "\\PuTTYNG.exe"; + private static readonly string puttyPath = HomePath + "\\PuTTYNG.exe"; public static string UserAgent { get { - var details = new List - { + List details = + [ "compatible", OSVersion.Platform == PlatformID.Win32NT ? $"Windows NT {OSVersion.Version.Major}.{OSVersion.Version.Minor}" : OSVersion.VersionString - }; + ]; if (Is64BitProcess) { details.Add("WOW64"); @@ -44,15 +44,17 @@ namespace mRemoteNG.App.Info details.Add(Thread.CurrentThread.CurrentUICulture.Name); details.Add($".NET CLR {Environment.Version}"); - var detailsString = string.Join("; ", details.ToArray()); + string detailsString = string.Join("; ", [.. details]); return $"Mozilla/5.0 ({detailsString}) {ProductName}/{ApplicationVersion}"; } } + public static string PuttyPath => puttyPath; + public static Version GetApplicationVersion() { - System.Version.TryParse(ApplicationVersion, out var v); + _ = System.Version.TryParse(ApplicationVersion, out Version v); return v; } } diff --git a/mRemoteNG/App/Info/UpdateChannelInfo.cs b/mRemoteNG/App/Info/UpdateChannelInfo.cs index b1fe138f..8821337d 100644 --- a/mRemoteNG/App/Info/UpdateChannelInfo.cs +++ b/mRemoteNG/App/Info/UpdateChannelInfo.cs @@ -24,7 +24,7 @@ namespace mRemoteNG.App.Info public static Uri GetUpdateChannelInfo() { - var channel = IsValidChannel(Properties.OptionsUpdatesPage.Default.UpdateChannel) ? Properties.OptionsUpdatesPage.Default.UpdateChannel : STABLE; + string channel = IsValidChannel(Properties.OptionsUpdatesPage.Default.UpdateChannel) ? Properties.OptionsUpdatesPage.Default.UpdateChannel : STABLE; return GetUpdateTxtUri(channel); } diff --git a/mRemoteNG/App/Initialization/ConnectionIconLoader.cs b/mRemoteNG/App/Initialization/ConnectionIconLoader.cs index 1f27ba17..8548252b 100644 --- a/mRemoteNG/App/Initialization/ConnectionIconLoader.cs +++ b/mRemoteNG/App/Initialization/ConnectionIconLoader.cs @@ -24,9 +24,9 @@ namespace mRemoteNG.App.Initialization if (Directory.Exists(_path) == false) return; - foreach (var f in Directory.GetFiles(_path, "*.ico", SearchOption.AllDirectories)) + foreach (string f in Directory.GetFiles(_path, "*.ico", SearchOption.AllDirectories)) { - var fInfo = new FileInfo(f); + FileInfo fInfo = new(f); Array.Resize(ref ConnectionIcon.Icons, ConnectionIcon.Icons.Length + 1); ConnectionIcon.Icons.SetValue(fInfo.Name.Replace(".ico", ""), ConnectionIcon.Icons.Length - 1); } diff --git a/mRemoteNG/App/Initialization/MessageCollectorSetup.cs b/mRemoteNG/App/Initialization/MessageCollectorSetup.cs index 00602649..38c5215c 100644 --- a/mRemoteNG/App/Initialization/MessageCollectorSetup.cs +++ b/mRemoteNG/App/Initialization/MessageCollectorSetup.cs @@ -19,9 +19,9 @@ namespace mRemoteNG.App.Initialization IMessage[] messages = args.NewItems.Cast().ToArray(); - foreach (var printer in messageWriterList) + foreach (IMessageWriter printer in messageWriterList) { - foreach (var message in messages) + foreach (IMessage message in messages) { printer.Write(message); } diff --git a/mRemoteNG/App/Initialization/StartupDataLogger.cs b/mRemoteNG/App/Initialization/StartupDataLogger.cs index 33faa4ba..49e211c1 100644 --- a/mRemoteNG/App/Initialization/StartupDataLogger.cs +++ b/mRemoteNG/App/Initialization/StartupDataLogger.cs @@ -29,24 +29,24 @@ namespace mRemoteNG.App.Initialization private void LogSystemData() { - var osData = GetOperatingSystemData(); - var architecture = GetArchitectureData(); - var nonEmptyData = Array.FindAll(new[] {osData, architecture}, s => !string.IsNullOrEmpty(s)); - var data = string.Join(" ", nonEmptyData); + string osData = GetOperatingSystemData(); + string architecture = GetArchitectureData(); + string[] nonEmptyData = Array.FindAll(new[] {osData, architecture}, s => !string.IsNullOrEmpty(s)); + string data = string.Join(" ", nonEmptyData); _messageCollector.AddMessage(MessageClass.InformationMsg, data, true); } private string GetOperatingSystemData() { - var osVersion = string.Empty; - var servicePack = string.Empty; + string osVersion = string.Empty; + string servicePack = string.Empty; try { - foreach (var o in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem WHERE Primary=True") + foreach (ManagementBaseObject o in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem WHERE Primary=True") .Get()) { - var managementObject = (ManagementObject)o; + ManagementObject managementObject = (ManagementObject)o; osVersion = Convert.ToString(managementObject.GetPropertyValue("Caption"))?.Trim(); servicePack = GetOSServicePack(servicePack, managementObject); } @@ -56,13 +56,13 @@ namespace mRemoteNG.App.Initialization _messageCollector.AddExceptionMessage("Error retrieving operating system information from WMI.", ex); } - var osData = string.Join(" ", osVersion, servicePack); + string osData = string.Join(" ", osVersion, servicePack); return osData; } private string GetOSServicePack(string servicePack, ManagementObject managementObject) { - var servicePackNumber = Convert.ToInt32(managementObject.GetPropertyValue("ServicePackMajorVersion")); + int servicePackNumber = Convert.ToInt32(managementObject.GetPropertyValue("ServicePackMajorVersion")); if (servicePackNumber != 0) { servicePack = $"Service Pack {servicePackNumber}"; @@ -73,13 +73,13 @@ namespace mRemoteNG.App.Initialization private string GetArchitectureData() { - var architecture = string.Empty; + string architecture = string.Empty; try { - foreach (var o in new ManagementObjectSearcher("SELECT AddressWidth FROM Win32_Processor WHERE DeviceID=\'CPU0\'").Get()) + foreach (ManagementBaseObject o in new ManagementObjectSearcher("SELECT AddressWidth FROM Win32_Processor WHERE DeviceID=\'CPU0\'").Get()) { - var managementObject = (ManagementObject)o; - var addressWidth = Convert.ToInt32(managementObject.GetPropertyValue("AddressWidth")); + ManagementObject managementObject = (ManagementObject)o; + int addressWidth = Convert.ToInt32(managementObject.GetPropertyValue("AddressWidth")); architecture = $"{addressWidth}-bit"; } } @@ -93,7 +93,7 @@ namespace mRemoteNG.App.Initialization private void LogApplicationData() { - var data = $"{Application.ProductName} {Application.ProductVersion}"; + string data = $"{Application.ProductName} {Application.ProductVersion}"; if (Runtime.IsPortableEdition) data += $" {Language.PortableEdition}"; data += " starting."; @@ -102,19 +102,19 @@ namespace mRemoteNG.App.Initialization private void LogCmdLineArgs() { - var data = $"Command Line: {string.Join(" ", Environment.GetCommandLineArgs())}"; + string data = $"Command Line: {string.Join(" ", Environment.GetCommandLineArgs())}"; _messageCollector.AddMessage(MessageClass.InformationMsg, data, true); } private void LogClrData() { - var data = $"Microsoft .NET CLR {Environment.Version}"; + string data = $"Microsoft .NET CLR {Environment.Version}"; _messageCollector.AddMessage(MessageClass.InformationMsg, data, true); } private void LogCultureData() { - var data = $"System Culture: {Thread.CurrentThread.CurrentUICulture.Name}/{Thread.CurrentThread.CurrentUICulture.NativeName}"; + string data = $"System Culture: {Thread.CurrentThread.CurrentUICulture.Name}/{Thread.CurrentThread.CurrentUICulture.NativeName}"; _messageCollector.AddMessage(MessageClass.InformationMsg, data, true); } } diff --git a/mRemoteNG/App/Logger.cs b/mRemoteNG/App/Logger.cs index 5667b04c..59e9d6a0 100644 --- a/mRemoteNG/App/Logger.cs +++ b/mRemoteNG/App/Logger.cs @@ -12,7 +12,7 @@ namespace mRemoteNG.App [SupportedOSPlatform("windows")] public class Logger { - public static readonly Logger Instance = new Logger(); + public static readonly Logger Instance = new(); public ILog Log { get; private set; } @@ -43,7 +43,7 @@ namespace mRemoteNG.App IAppender[] appenders = repository.GetAppenders(); - foreach (var appender in appenders) + foreach (IAppender appender in appenders) { RollingFileAppender fileAppender = (RollingFileAppender)appender; if (fileAppender is not { Name: "LogFileAppender" }) continue; diff --git a/mRemoteNG/App/ProgramRoot.cs b/mRemoteNG/App/ProgramRoot.cs index 6b9c57db..c5891894 100644 --- a/mRemoteNG/App/ProgramRoot.cs +++ b/mRemoteNG/App/ProgramRoot.cs @@ -48,7 +48,7 @@ namespace mRemoteNG.App _frmSplashScreen = FrmSplashScreenNew.GetInstance(); - var targetScreen = Screen.PrimaryScreen; + Screen targetScreen = Screen.PrimaryScreen; Rectangle viewport = targetScreen.WorkingArea; _frmSplashScreen.Top = viewport.Top; @@ -70,7 +70,7 @@ namespace mRemoteNG.App private static void StartApplicationAsSingleInstance() { const string mutexID = "mRemoteNG_SingleInstanceMutex"; - _mutex = new Mutex(false, mutexID, out var newInstanceCreated); + _mutex = new Mutex(false, mutexID, out bool newInstanceCreated); if (!newInstanceCreated) { SwitchToCurrentInstance(); @@ -83,7 +83,7 @@ namespace mRemoteNG.App private static void SwitchToCurrentInstance() { - var singletonInstanceWindowHandle = GetRunningSingletonInstanceWindowHandle(); + IntPtr singletonInstanceWindowHandle = GetRunningSingletonInstanceWindowHandle(); if (singletonInstanceWindowHandle == IntPtr.Zero) return; if (NativeMethods.IsIconic(singletonInstanceWindowHandle) != 0) _ = NativeMethods.ShowWindow(singletonInstanceWindowHandle, (int)NativeMethods.SW_RESTORE); @@ -92,9 +92,9 @@ namespace mRemoteNG.App private static IntPtr GetRunningSingletonInstanceWindowHandle() { - var windowHandle = IntPtr.Zero; - var currentProcess = Process.GetCurrentProcess(); - foreach (var enumeratedProcess in Process.GetProcessesByName(currentProcess.ProcessName)) + IntPtr windowHandle = IntPtr.Zero; + Process currentProcess = Process.GetCurrentProcess(); + foreach (Process enumeratedProcess in Process.GetProcessesByName(currentProcess.ProcessName)) { if (enumeratedProcess.Id != currentProcess.Id && enumeratedProcess.MainModule.FileName == currentProcess.MainModule.FileName && @@ -119,7 +119,7 @@ namespace mRemoteNG.App if (FrmMain.Default.IsDisposed) return; - var window = new FrmUnhandledException(e.Exception, false); + FrmUnhandledException window = new(e.Exception, false); window.ShowDialog(FrmMain.Default); } @@ -129,7 +129,7 @@ namespace mRemoteNG.App //if (!FrmSplashScreenNew.GetInstance().IsDisposed) // FrmSplashScreenNew.GetInstance().Close(); - var window = new FrmUnhandledException(e.ExceptionObject as Exception, e.IsTerminating); + FrmUnhandledException window = new(e.ExceptionObject as Exception, e.IsTerminating); window.ShowDialog(FrmMain.Default); } } diff --git a/mRemoteNG/App/Runtime.cs b/mRemoteNG/App/Runtime.cs index 7b9c4d8e..8a060acb 100644 --- a/mRemoteNG/App/Runtime.cs +++ b/mRemoteNG/App/Runtime.cs @@ -58,7 +58,7 @@ namespace mRemoteNG.App public static void LoadConnectionsAsync() { - var t = new Thread(LoadConnectionsBGd); + Thread t = new(LoadConnectionsBGd); t.SetApartmentState(ApartmentState.STA); t.Start(); } @@ -77,7 +77,7 @@ namespace mRemoteNG.App /// public static void LoadConnections(bool withDialog = false) { - var connectionFileName = ""; + string connectionFileName = ""; try { @@ -86,7 +86,7 @@ namespace mRemoteNG.App if (withDialog) { - var loadDialog = DialogFactory.BuildLoadConnectionsDialog(); + OpenFileDialog loadDialog = DialogFactory.BuildLoadConnectionsDialog(); if (loadDialog.ShowDialog() != DialogResult.OK) return; @@ -120,7 +120,7 @@ namespace mRemoteNG.App if (Properties.OptionsDBsPage.Default.UseSQLServer) { MessageCollector.AddExceptionMessage(Language.LoadFromSqlFailed, ex); - var commandButtons = string.Join("|", Language._TryAgain, Language.CommandOpenConnectionFile, string.Format(Language.CommandExitProgram, Application.ProductName)); + string commandButtons = string.Join("|", Language._TryAgain, Language.CommandOpenConnectionFile, string.Format(Language.CommandExitProgram, Application.ProductName)); CTaskDialog.ShowCommandBox(Application.ProductName, Language.LoadFromSqlFailed, Language.LoadFromSqlFailedContent, MiscTools.GetExceptionMessageRecursive(ex), "", "", commandButtons, false, ESysIcons.Error, ESysIcons.Error); switch (CTaskDialog.CommandButtonResult) { @@ -152,7 +152,7 @@ namespace mRemoteNG.App Language.Exit }; - var answered = false; + bool answered = false; while (!answered) { try diff --git a/mRemoteNG/App/Screens.cs b/mRemoteNG/App/Screens.cs index 96485717..04d954c4 100644 --- a/mRemoteNG/App/Screens.cs +++ b/mRemoteNG/App/Screens.cs @@ -10,8 +10,8 @@ namespace mRemoteNG.App [SupportedOSPlatform("windows")] public static void SendFormToScreen(Screen screen) { - var frmMain = FrmMain.Default; - var wasMax = false; + FrmMain frmMain = FrmMain.Default; + bool wasMax = false; if (frmMain.WindowState == FormWindowState.Maximized) { diff --git a/mRemoteNG/App/Startup.cs b/mRemoteNG/App/Startup.cs index e130c19c..5ac62825 100644 --- a/mRemoteNG/App/Startup.cs +++ b/mRemoteNG/App/Startup.cs @@ -34,14 +34,10 @@ namespace mRemoteNG.App _connectionIconLoader = new ConnectionIconLoader(GeneralAppInfo.HomePath + "\\Icons\\"); } - static Startup() - { - } - public void InitializeProgram(MessageCollector messageCollector) { Debug.Print("---------------------------" + Environment.NewLine + "[START] - " + Convert.ToString(DateTime.Now, CultureInfo.InvariantCulture)); - var startupLogger = new StartupDataLogger(messageCollector); + StartupDataLogger startupLogger = new(messageCollector); startupLogger.LogStartupData(); CompatibilityChecker.CheckCompatibility(messageCollector); ParseCommandLineArgs(messageCollector); @@ -53,7 +49,7 @@ namespace mRemoteNG.App private static void ParseCommandLineArgs(MessageCollector messageCollector) { - var interpreter = new StartupArgumentsInterpreter(messageCollector); + StartupArgumentsInterpreter interpreter = new(messageCollector); interpreter.ParseArguments(Environment.GetCommandLineArgs()); } @@ -77,8 +73,7 @@ namespace mRemoteNG.App return; } - var nextUpdateCheck = - Convert.ToDateTime(Properties.OptionsUpdatesPage.Default.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(Convert.ToDouble(Properties.OptionsUpdatesPage.Default.CheckForUpdatesFrequencyDays)))); + DateTime nextUpdateCheck = Convert.ToDateTime(Properties.OptionsUpdatesPage.Default.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(Convert.ToDouble(Properties.OptionsUpdatesPage.Default.CheckForUpdatesFrequencyDays)))); if (!Properties.OptionsUpdatesPage.Default.UpdatePending && DateTime.UtcNow < nextUpdateCheck) { return; diff --git a/mRemoteNG/App/SupportedCultures.cs b/mRemoteNG/App/SupportedCultures.cs index 177f52b8..840ad058 100644 --- a/mRemoteNG/App/SupportedCultures.cs +++ b/mRemoteNG/App/SupportedCultures.cs @@ -24,11 +24,11 @@ namespace mRemoteNG.App private SupportedCultures() { - foreach (var CultureName in Properties.AppUI.Default.SupportedUICultures.Split(',')) + foreach (string CultureName in Properties.AppUI.Default.SupportedUICultures.Split(',')) { try { - var CultureInfo = new CultureInfo(CultureName.Trim()); + CultureInfo CultureInfo = new(CultureName.Trim()); Add(CultureInfo.Name, CultureInfo.TextInfo.ToTitleCase(CultureInfo.NativeName)); } catch (Exception ex) @@ -57,13 +57,13 @@ namespace mRemoteNG.App public static string get_CultureName(string CultureNativeName) { - var Names = new string[SingletonInstance.Count + 1]; - var NativeNames = new string[SingletonInstance.Count + 1]; + string[] Names = new string[SingletonInstance.Count + 1]; + string[] NativeNames = new string[SingletonInstance.Count + 1]; SingletonInstance.Keys.CopyTo(Names, 0); SingletonInstance.Values.CopyTo(NativeNames, 0); - for (var Index = 0; Index <= SingletonInstance.Count; Index++) + for (int Index = 0; Index <= SingletonInstance.Count; Index++) { if (NativeNames[Index] == CultureNativeName) { @@ -83,8 +83,8 @@ namespace mRemoteNG.App { get { - var ValueList = new List(); - foreach (var Value in SingletonInstance.Values) + List ValueList = new(); + foreach (string Value in SingletonInstance.Values) { ValueList.Add(Value); } diff --git a/mRemoteNG/App/Update/AppUpdater.cs b/mRemoteNG/App/Update/AppUpdater.cs index c33bb145..93d9a747 100644 --- a/mRemoteNG/App/Update/AppUpdater.cs +++ b/mRemoteNG/App/Update/AppUpdater.cs @@ -60,13 +60,13 @@ namespace mRemoteNG.App.Update private void SetDefaultProxySettings() { - var shouldWeUseProxy = Properties.OptionsUpdatesPage.Default.UpdateUseProxy; - var proxyAddress = Properties.OptionsUpdatesPage.Default.UpdateProxyAddress; - var port = Properties.OptionsUpdatesPage.Default.UpdateProxyPort; - var useAuthentication = Properties.OptionsUpdatesPage.Default.UpdateProxyUseAuthentication; - var username = Properties.OptionsUpdatesPage.Default.UpdateProxyAuthUser; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); - var password = cryptographyProvider.Decrypt(Properties.OptionsUpdatesPage.Default.UpdateProxyAuthPass, Runtime.EncryptionKey); + bool shouldWeUseProxy = Properties.OptionsUpdatesPage.Default.UpdateUseProxy; + string proxyAddress = Properties.OptionsUpdatesPage.Default.UpdateProxyAddress; + int port = Properties.OptionsUpdatesPage.Default.UpdateProxyPort; + bool useAuthentication = Properties.OptionsUpdatesPage.Default.UpdateProxyUseAuthentication; + string username = Properties.OptionsUpdatesPage.Default.UpdateProxyAuthUser; + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); + string password = cryptographyProvider.Decrypt(Properties.OptionsUpdatesPage.Default.UpdateProxyAuthPass, Runtime.EncryptionKey); SetProxySettings(shouldWeUseProxy, proxyAddress, port, useAuthentication, username, password); } @@ -132,19 +132,19 @@ namespace mRemoteNG.App.Update try { _getUpdateInfoCancelToken = new CancellationTokenSource(); - using var response = await _httpClient.GetAsync(CurrentUpdateInfo.DownloadAddress, HttpCompletionOption.ResponseHeadersRead, _getUpdateInfoCancelToken.Token); - var buffer = new byte[_bufferLength]; - var totalBytes = response.Content.Headers.ContentLength ?? 0; - var readBytes = 0L; + using HttpResponseMessage response = await _httpClient.GetAsync(CurrentUpdateInfo.DownloadAddress, HttpCompletionOption.ResponseHeadersRead, _getUpdateInfoCancelToken.Token); + byte[] buffer = new byte[_bufferLength]; + long totalBytes = response.Content.Headers.ContentLength ?? 0; + long readBytes = 0L; - await using (var httpStream = await response.Content.ReadAsStreamAsync(_getUpdateInfoCancelToken.Token)) + await using (Stream httpStream = await response.Content.ReadAsStreamAsync(_getUpdateInfoCancelToken.Token)) { - await using var fileStream = new FileStream(CurrentUpdateInfo.UpdateFilePath, FileMode.Create, + await using FileStream fileStream = new(CurrentUpdateInfo.UpdateFilePath, FileMode.Create, FileAccess.Write, FileShare.None, _bufferLength, true); while (readBytes <= totalBytes || !_getUpdateInfoCancelToken.IsCancellationRequested) { - var bytesRead = + int bytesRead = await httpStream.ReadAsync(buffer, 0, _bufferLength, _getUpdateInfoCancelToken.Token); if (bytesRead == 0) { @@ -156,13 +156,13 @@ namespace mRemoteNG.App.Update readBytes += bytesRead; - var percentComplete = (int)(readBytes * 100 / totalBytes); + int percentComplete = (int)(readBytes * 100 / totalBytes); progress.Report(percentComplete); } } #if !PORTABLE - var updateAuthenticode = new Authenticode(CurrentUpdateInfo.UpdateFilePath) + Authenticode updateAuthenticode = new(CurrentUpdateInfo.UpdateFilePath) { RequireThumbprintMatch = true, ThumbprintToMatch = CurrentUpdateInfo.CertificateThumbprint @@ -179,10 +179,10 @@ namespace mRemoteNG.App.Update } #endif - using var checksum = SHA512.Create(); - await using var stream = File.OpenRead(CurrentUpdateInfo.UpdateFilePath); - var hash = await checksum.ComputeHashAsync(stream); - var hashString = BitConverter.ToString(hash).Replace("-", "").ToUpperInvariant(); + using SHA512 checksum = SHA512.Create(); + await using FileStream stream = File.OpenRead(CurrentUpdateInfo.UpdateFilePath); + byte[] hash = await checksum.ComputeHashAsync(stream); + string hashString = BitConverter.ToString(hash).Replace("-", "").ToUpperInvariant(); if (!hashString.Equals(CurrentUpdateInfo.Checksum)) throw new Exception("SHA512 Hashes didn't match!"); } finally{ @@ -202,7 +202,7 @@ namespace mRemoteNG.App.Update _httpClient.Dispose(); } - var httpClientHandler = new HttpClientHandler(); + HttpClientHandler httpClientHandler = new(); if (_webProxy != null) { httpClientHandler.UseProxy = true; @@ -224,7 +224,7 @@ namespace mRemoteNG.App.Update try { _getUpdateInfoCancelToken = new CancellationTokenSource(); - var updateInfo = await _httpClient.GetStringAsync(UpdateChannelInfo.GetUpdateChannelInfo(), _getUpdateInfoCancelToken.Token); + string updateInfo = await _httpClient.GetStringAsync(UpdateChannelInfo.GetUpdateChannelInfo(), _getUpdateInfoCancelToken.Token); CurrentUpdateInfo = UpdateInfo.FromString(updateInfo); Properties.OptionsUpdatesPage.Default.CheckForUpdatesLastCheck = DateTime.UtcNow; diff --git a/mRemoteNG/App/Update/UpdateFile.cs b/mRemoteNG/App/Update/UpdateFile.cs index fae08418..e4b2f6f5 100644 --- a/mRemoteNG/App/Update/UpdateFile.cs +++ b/mRemoteNG/App/Update/UpdateFile.cs @@ -34,19 +34,19 @@ namespace mRemoteNG.App.Update // no separators means no valid update data... if (content.Trim().IndexOfAny(keyValueSeparators) == -1) return; - using (var sr = new StringReader(content)) + using (StringReader sr = new(content)) { string line; while ((line = sr.ReadLine()) != null) { - var trimmedLine = line.Trim(); + string trimmedLine = line.Trim(); if (trimmedLine.Length == 0) continue; if (trimmedLine.Substring(0, 1).IndexOfAny(commentCharacters) != -1) continue; - var parts = trimmedLine.Split(keyValueSeparators, 2); + string[] parts = trimmedLine.Split(keyValueSeparators, 2); if (parts.Length != 2) continue; @@ -68,13 +68,13 @@ namespace mRemoteNG.App.Update public Version GetVersion(string key = "Version") { - var value = GetString(key); + string value = GetString(key); return string.IsNullOrEmpty(value) ? null : new Version(value); } public Uri GetUri(string key) { - var value = GetString(key); + string value = GetString(key); return string.IsNullOrEmpty(value) ? null : new Uri(value); } @@ -85,8 +85,8 @@ namespace mRemoteNG.App.Update public string GetFileName() { - var value = GetString("dURL"); - var sv = value.Split('/'); + string value = GetString("dURL"); + string[] sv = value.Split('/'); return sv[sv.Length - 1]; } diff --git a/mRemoteNG/App/Update/UpdateInfo.cs b/mRemoteNG/App/Update/UpdateInfo.cs index 0d2ad4c6..33418b6c 100644 --- a/mRemoteNG/App/Update/UpdateInfo.cs +++ b/mRemoteNG/App/Update/UpdateInfo.cs @@ -22,14 +22,14 @@ namespace mRemoteNG.App.Update public static UpdateInfo FromString(string input) { - var newInfo = new UpdateInfo(); + UpdateInfo newInfo = new(); if (string.IsNullOrEmpty(input)) { newInfo.IsValid = false; } else { - var updateFile = new UpdateFile(input); + UpdateFile updateFile = new(input); newInfo.Version = updateFile.GetVersion(); newInfo.DownloadAddress = updateFile.GetUri("dURL"); newInfo.ChangeLogAddress = updateFile.GetUri("clURL"); diff --git a/mRemoteNG/App/Windows.cs b/mRemoteNG/App/Windows.cs index 283a17f1..d026d3af 100644 --- a/mRemoteNG/App/Windows.cs +++ b/mRemoteNG/App/Windows.cs @@ -34,7 +34,7 @@ namespace mRemoteNG.App { try { - var dockPanel = FrmMain.Default.pnlDock; + WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel = FrmMain.Default.pnlDock; // ReSharper disable once SwitchStatementMissingSomeCases switch (windowType) { diff --git a/mRemoteNG/Config/Connections/CsvConnectionsSaver.cs b/mRemoteNG/Config/Connections/CsvConnectionsSaver.cs index 01790264..51a922e4 100644 --- a/mRemoteNG/Config/Connections/CsvConnectionsSaver.cs +++ b/mRemoteNG/Config/Connections/CsvConnectionsSaver.cs @@ -27,10 +27,10 @@ namespace mRemoteNG.Config.Connections public void Save(ConnectionTreeModel connectionTreeModel, string propertyNameTrigger = "") { - var csvConnectionsSerializer = - new CsvConnectionsSerializerMremotengFormat(_saveFilter, Runtime.CredentialProviderCatalog); - var dataProvider = new FileDataProvider(_connectionFileName); - var csvContent = csvConnectionsSerializer.Serialize(connectionTreeModel); + CsvConnectionsSerializerMremotengFormat csvConnectionsSerializer = + new(_saveFilter, Runtime.CredentialProviderCatalog); + FileDataProvider dataProvider = new(_connectionFileName); + string csvContent = csvConnectionsSerializer.Serialize(connectionTreeModel); dataProvider.Save(csvContent); } } diff --git a/mRemoteNG/Config/Connections/Multiuser/SqlConnectionsUpdateChecker.cs b/mRemoteNG/Config/Connections/Multiuser/SqlConnectionsUpdateChecker.cs index 15e7c432..8dad417f 100644 --- a/mRemoteNG/Config/Connections/Multiuser/SqlConnectionsUpdateChecker.cs +++ b/mRemoteNG/Config/Connections/Multiuser/SqlConnectionsUpdateChecker.cs @@ -29,7 +29,7 @@ namespace mRemoteNG.Config.Connections.Multiuser { RaiseUpdateCheckStartedEvent(); ConnectToSqlDb(); - var updateIsAvailable = DatabaseIsMoreUpToDateThanUs(); + bool updateIsAvailable = DatabaseIsMoreUpToDateThanUs(); if (updateIsAvailable) RaiseConnectionsUpdateAvailableEvent(); RaiseUpdateCheckFinishedEvent(updateIsAvailable); @@ -38,7 +38,7 @@ namespace mRemoteNG.Config.Connections.Multiuser public void IsUpdateAvailableAsync() { - var thread = new Thread(() => IsUpdateAvailable()); + Thread thread = new(() => IsUpdateAvailable()); thread.SetApartmentState(ApartmentState.STA); thread.Start(); } @@ -57,14 +57,14 @@ namespace mRemoteNG.Config.Connections.Multiuser private bool DatabaseIsMoreUpToDateThanUs() { - var lastUpdateInDb = GetLastUpdateTimeFromDbResponse(); - var amTheLastoneUpdated = CheckIfIAmTheLastOneUpdated(lastUpdateInDb); + DateTime lastUpdateInDb = GetLastUpdateTimeFromDbResponse(); + bool amTheLastoneUpdated = CheckIfIAmTheLastOneUpdated(lastUpdateInDb); return (lastUpdateInDb > LastUpdateTime && !amTheLastoneUpdated); } private bool CheckIfIAmTheLastOneUpdated(DateTime lastUpdateInDb) { - DateTime lastSqlUpdateWithoutMilliseconds = new DateTime(LastUpdateTime.Ticks - (LastUpdateTime.Ticks % TimeSpan.TicksPerSecond), LastUpdateTime.Kind); + DateTime lastSqlUpdateWithoutMilliseconds = new(LastUpdateTime.Ticks - (LastUpdateTime.Ticks % TimeSpan.TicksPerSecond), LastUpdateTime.Kind); return lastUpdateInDb == lastSqlUpdateWithoutMilliseconds; } @@ -104,7 +104,7 @@ namespace mRemoteNG.Config.Connections.Multiuser private void RaiseUpdateCheckFinishedEvent(bool updateAvailable) { - var args = new ConnectionsUpdateCheckFinishedEventArgs {UpdateAvailable = updateAvailable}; + ConnectionsUpdateCheckFinishedEventArgs args = new() { UpdateAvailable = updateAvailable}; UpdateCheckFinished?.Invoke(this, args); } @@ -113,7 +113,7 @@ namespace mRemoteNG.Config.Connections.Multiuser private void RaiseConnectionsUpdateAvailableEvent() { Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Remote connection update is available"); - var args = new ConnectionsUpdateAvailableEventArgs(_dbConnector, _lastDatabaseUpdateTime); + ConnectionsUpdateAvailableEventArgs args = new(_dbConnector, _lastDatabaseUpdateTime); ConnectionsUpdateAvailable?.Invoke(this, args); } diff --git a/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs b/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs index 2e5e1cce..2112d7e0 100644 --- a/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs +++ b/mRemoteNG/Config/Connections/SaveConnectionsOnEdit.cs @@ -27,7 +27,7 @@ namespace mRemoteNG.Config.Connections connectionsLoadedEventArgs.NewConnectionTreeModel.CollectionChanged += ConnectionTreeModelOnCollectionChanged; connectionsLoadedEventArgs.NewConnectionTreeModel.PropertyChanged += ConnectionTreeModelOnPropertyChanged; - foreach (var oldTree in connectionsLoadedEventArgs.PreviousConnectionTreeModel) + foreach (Tree.ConnectionTreeModel oldTree in connectionsLoadedEventArgs.PreviousConnectionTreeModel) { oldTree.CollectionChanged -= ConnectionTreeModelOnCollectionChanged; oldTree.PropertyChanged -= ConnectionTreeModelOnPropertyChanged; diff --git a/mRemoteNG/Config/Connections/SqlConnectionsLoader.cs b/mRemoteNG/Config/Connections/SqlConnectionsLoader.cs index 5a2d5d9b..5b2936b0 100644 --- a/mRemoteNG/Config/Connections/SqlConnectionsLoader.cs +++ b/mRemoteNG/Config/Connections/SqlConnectionsLoader.cs @@ -37,39 +37,39 @@ namespace mRemoteNG.Config.Connections public ConnectionTreeModel Load() { - var connector = DatabaseConnectorFactory.DatabaseConnectorFromSettings(); - var dataProvider = new SqlDataProvider(connector); - var metaDataRetriever = new SqlDatabaseMetaDataRetriever(); - var databaseVersionVerifier = new SqlDatabaseVersionVerifier(connector); - var cryptoProvider = new LegacyRijndaelCryptographyProvider(); - var metaData = metaDataRetriever.GetDatabaseMetaData(connector) ?? HandleFirstRun(metaDataRetriever, connector); - var decryptionKey = GetDecryptionKey(metaData); + IDatabaseConnector connector = DatabaseConnectorFactory.DatabaseConnectorFromSettings(); + SqlDataProvider dataProvider = new(connector); + SqlDatabaseMetaDataRetriever metaDataRetriever = new(); + SqlDatabaseVersionVerifier databaseVersionVerifier = new(connector); + LegacyRijndaelCryptographyProvider cryptoProvider = new(); + SqlConnectionListMetaData metaData = metaDataRetriever.GetDatabaseMetaData(connector) ?? HandleFirstRun(metaDataRetriever, connector); + Optional decryptionKey = GetDecryptionKey(metaData); if (!decryptionKey.Any()) throw new Exception("Could not load SQL connections"); databaseVersionVerifier.VerifyDatabaseVersion(metaData.ConfVersion); - var dataTable = dataProvider.Load(); - var deserializer = new DataTableDeserializer(cryptoProvider, decryptionKey.First()); - var connectionTree = deserializer.Deserialize(dataTable); + System.Data.DataTable dataTable = dataProvider.Load(); + DataTableDeserializer deserializer = new(cryptoProvider, decryptionKey.First()); + ConnectionTreeModel connectionTree = deserializer.Deserialize(dataTable); ApplyLocalConnectionProperties(connectionTree.RootNodes.First(i => i is RootNodeInfo)); return connectionTree; } private Optional GetDecryptionKey(SqlConnectionListMetaData metaData) { - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); - var cipherText = metaData.Protected; - var authenticator = new PasswordAuthenticator(cryptographyProvider, cipherText, AuthenticationRequestor); - var authenticated = authenticator.Authenticate(new RootNodeInfo(RootNodeType.Connection).DefaultPassword.ConvertToSecureString()); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); + string cipherText = metaData.Protected; + PasswordAuthenticator authenticator = new(cryptographyProvider, cipherText, AuthenticationRequestor); + bool authenticated = authenticator.Authenticate(new RootNodeInfo(RootNodeType.Connection).DefaultPassword.ConvertToSecureString()); return authenticated ? authenticator.LastAuthenticatedPassword : Optional.Empty; } private void ApplyLocalConnectionProperties(ContainerInfo rootNode) { - var localPropertiesXml = _dataProvider.Load(); - var localConnectionProperties = _localConnectionPropertiesDeserializer.Deserialize(localPropertiesXml); + string localPropertiesXml = _dataProvider.Load(); + IEnumerable localConnectionProperties = _localConnectionPropertiesDeserializer.Deserialize(localPropertiesXml); rootNode .GetRecursiveChildList() diff --git a/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs b/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs index bb379ccc..0a0657cf 100644 --- a/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs +++ b/mRemoteNG/Config/Connections/SqlConnectionsSaver.cs @@ -38,7 +38,7 @@ namespace mRemoteNG.Config.Connections public void Save(ConnectionTreeModel connectionTreeModel, string propertyNameTrigger = "") { - var rootTreeNode = connectionTreeModel.RootNodes.OfType().First(); + RootNodeInfo rootTreeNode = connectionTreeModel.RootNodes.OfType().First(); UpdateLocalConnectionProperties(rootTreeNode); @@ -54,12 +54,12 @@ namespace mRemoteNG.Config.Connections return; } - using (var dbConnector = DatabaseConnectorFactory.DatabaseConnectorFromSettings()) + using (IDatabaseConnector dbConnector = DatabaseConnectorFactory.DatabaseConnectorFromSettings()) { dbConnector.Connect(); - var databaseVersionVerifier = new SqlDatabaseVersionVerifier(dbConnector); - var metaDataRetriever = new SqlDatabaseMetaDataRetriever(); - var metaData = metaDataRetriever.GetDatabaseMetaData(dbConnector); + SqlDatabaseVersionVerifier databaseVersionVerifier = new(dbConnector); + SqlDatabaseMetaDataRetriever metaDataRetriever = new(); + SqlConnectionListMetaData metaData = metaDataRetriever.GetDatabaseMetaData(dbConnector); if (!databaseVersionVerifier.VerifyDatabaseVersion(metaData.ConfVersion)) { @@ -93,7 +93,7 @@ namespace mRemoteNG.Config.Connections private void UpdateLocalConnectionProperties(ContainerInfo rootNode) { - var a = rootNode.GetRecursiveChildList().Select(info => new LocalConnectionPropertiesModel + IEnumerable a = rootNode.GetRecursiveChildList().Select(info => new LocalConnectionPropertiesModel { ConnectionId = info.ConstantID, Connected = info.OpenConnections.Count > 0, @@ -101,7 +101,7 @@ namespace mRemoteNG.Config.Connections Favorite = info.Favorite, }); - var serializedProperties = _localPropertiesSerializer.Serialize(a); + string serializedProperties = _localPropertiesSerializer.Serialize(a); _dataProvider.Save(serializedProperties); Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, "Saved local connection properties"); } @@ -109,13 +109,13 @@ namespace mRemoteNG.Config.Connections private void UpdateRootNodeTable(RootNodeInfo rootTreeNode, IDatabaseConnector databaseConnector) { // TODO: use transaction, but method not used at all? - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); string strProtected; if (rootTreeNode != null) { if (rootTreeNode.Password) { - var password = rootTreeNode.PasswordString.ConvertToSecureString(); + System.Security.SecureString password = rootTreeNode.PasswordString.ConvertToSecureString(); strProtected = cryptographyProvider.Encrypt("ThisIsProtected", password); } else @@ -128,7 +128,7 @@ namespace mRemoteNG.Config.Connections strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey); } - var dbQuery = databaseConnector.DbCommand("TRUNCATE TABLE tblRoot"); + System.Data.Common.DbCommand dbQuery = databaseConnector.DbCommand("TRUNCATE TABLE tblRoot"); dbQuery.ExecuteNonQuery(); if (rootTreeNode != null) @@ -148,11 +148,11 @@ namespace mRemoteNG.Config.Connections private void UpdateConnectionsTable(RootNodeInfo rootTreeNode, IDatabaseConnector databaseConnector) { - SqlDataProvider dataProvider = new SqlDataProvider(databaseConnector); + SqlDataProvider dataProvider = new(databaseConnector); DataTable currentDataTable = dataProvider.Load(); - LegacyRijndaelCryptographyProvider cryptoProvider = new LegacyRijndaelCryptographyProvider(); - DataTableSerializer serializer = new DataTableSerializer(_saveFilter, cryptoProvider, rootTreeNode.PasswordString.ConvertToSecureString()); + LegacyRijndaelCryptographyProvider cryptoProvider = new(); + DataTableSerializer serializer = new(_saveFilter, cryptoProvider, rootTreeNode.PasswordString.ConvertToSecureString()); serializer.SetSourceDataTable(currentDataTable); DataTable dataTable = serializer.Serialize(rootTreeNode); @@ -163,7 +163,7 @@ namespace mRemoteNG.Config.Connections private void UpdateUpdatesTable(IDatabaseConnector databaseConnector) { // TODO: use transaction - var dbQuery = databaseConnector.DbCommand("TRUNCATE TABLE tblUpdate"); + System.Data.Common.DbCommand dbQuery = databaseConnector.DbCommand("TRUNCATE TABLE tblUpdate"); dbQuery.ExecuteNonQuery(); dbQuery = databaseConnector.DbCommand("INSERT INTO tblUpdate (LastUpdate) VALUES('" + MiscTools.DBDate(DateTime.Now.ToUniversalTime()) + "')"); dbQuery.ExecuteNonQuery(); diff --git a/mRemoteNG/Config/Connections/XmlConnectionsLoader.cs b/mRemoteNG/Config/Connections/XmlConnectionsLoader.cs index 37680c90..a6aa0170 100644 --- a/mRemoteNG/Config/Connections/XmlConnectionsLoader.cs +++ b/mRemoteNG/Config/Connections/XmlConnectionsLoader.cs @@ -27,15 +27,15 @@ namespace mRemoteNG.Config.Connections public ConnectionTreeModel Load() { - var dataProvider = new FileDataProvider(_connectionFilePath); - var xmlString = dataProvider.Load(); - var deserializer = new XmlConnectionsDeserializer(PromptForPassword); + FileDataProvider dataProvider = new(_connectionFilePath); + string xmlString = dataProvider.Load(); + XmlConnectionsDeserializer deserializer = new(PromptForPassword); return deserializer.Deserialize(xmlString); } private Optional PromptForPassword() { - var password = MiscTools.PasswordDialog(Path.GetFileName(_connectionFilePath), false); + Optional password = MiscTools.PasswordDialog(Path.GetFileName(_connectionFilePath), false); return password; } } diff --git a/mRemoteNG/Config/Connections/XmlConnectionsSaver.cs b/mRemoteNG/Config/Connections/XmlConnectionsSaver.cs index af39698f..c213b28e 100644 --- a/mRemoteNG/Config/Connections/XmlConnectionsSaver.cs +++ b/mRemoteNG/Config/Connections/XmlConnectionsSaver.cs @@ -30,15 +30,15 @@ namespace mRemoteNG.Config.Connections { try { - var cryptographyProvider = new CryptoProviderFactoryFromSettings().Build(); - var serializerFactory = new XmlConnectionSerializerFactory(); - - var xmlConnectionsSerializer = serializerFactory.Build(cryptographyProvider, connectionTreeModel, _saveFilter, Properties.OptionsSecurityPage.Default.EncryptCompleteConnectionsFile); + ICryptographyProvider cryptographyProvider = new CryptoProviderFactoryFromSettings().Build(); + XmlConnectionSerializerFactory serializerFactory = new(); - var rootNode = connectionTreeModel.RootNodes.OfType().First(); - var xml = xmlConnectionsSerializer.Serialize(rootNode); + Serializers.ISerializer xmlConnectionsSerializer = serializerFactory.Build(cryptographyProvider, connectionTreeModel, _saveFilter, Properties.OptionsSecurityPage.Default.EncryptCompleteConnectionsFile); - var fileDataProvider = new FileDataProviderWithRollingBackup(_connectionFileName); + RootNodeInfo rootNode = connectionTreeModel.RootNodes.OfType().First(); + string xml = xmlConnectionsSerializer.Serialize(rootNode); + + FileDataProviderWithRollingBackup fileDataProvider = new(_connectionFileName); fileDataProvider.Save(xml); } catch (Exception ex) diff --git a/mRemoteNG/Config/CredentialHarvester.cs b/mRemoteNG/Config/CredentialHarvester.cs index 26a0cd37..acf56c3f 100644 --- a/mRemoteNG/Config/CredentialHarvester.cs +++ b/mRemoteNG/Config/CredentialHarvester.cs @@ -17,19 +17,19 @@ namespace mRemoteNG.Config // maps a connectioninfo (by its id) to the credential object that was harvested public Dictionary ConnectionToCredentialMap { get; } = - new Dictionary(); + []; public IEnumerable Harvest(XDocument xDocument, SecureString decryptionKey) { if (xDocument == null) throw new ArgumentNullException(nameof(xDocument)); - var cryptoProvider = new CryptoProviderFactoryFromXml(xDocument.Root).Build(); + ICryptographyProvider cryptoProvider = new CryptoProviderFactoryFromXml(xDocument.Root).Build(); - foreach (var element in xDocument.Descendants("Node")) + foreach (XElement element in xDocument.Descendants("Node")) { if (!EntryHasSomeCredentialData(element)) continue; - var newCredential = BuildCredential(element, cryptoProvider, decryptionKey); + ICredentialRecord newCredential = BuildCredential(element, cryptoProvider, decryptionKey); Guid connectionId; Guid.TryParse(element.Attribute("Id")?.Value, out connectionId); @@ -40,7 +40,7 @@ namespace mRemoteNG.Config if (ConnectionToCredentialMap.Values.Contains(newCredential, _credentialComparer)) { - var existingCredential = ConnectionToCredentialMap.Values.First(record => _credentialComparer.Equals(newCredential, record)); + ICredentialRecord existingCredential = ConnectionToCredentialMap.Values.First(record => _credentialComparer.Equals(newCredential, record)); ConnectionToCredentialMap.Add(connectionId, existingCredential); } else @@ -52,7 +52,7 @@ namespace mRemoteNG.Config private ICredentialRecord BuildCredential(XElement element, ICryptographyProvider cryptographyProvider, SecureString decryptionKey) { - var credential = new CredentialRecord + CredentialRecord credential = new() { Title = $"{element.Attribute("Username")?.Value}\\{element.Attribute("Domain")?.Value}", Username = element.Attribute("Username")?.Value, diff --git a/mRemoteNG/Config/CredentialRecordLoader.cs b/mRemoteNG/Config/CredentialRecordLoader.cs index f74525bd..e39ee4b0 100644 --- a/mRemoteNG/Config/CredentialRecordLoader.cs +++ b/mRemoteNG/Config/CredentialRecordLoader.cs @@ -27,7 +27,7 @@ namespace mRemoteNG.Config public IEnumerable Load(SecureString key) { - var serializedCredentials = _dataProvider.Load(); + string serializedCredentials = _dataProvider.Load(); return _deserializer.Deserialize(serializedCredentials, key); } } diff --git a/mRemoteNG/Config/CredentialRecordSaver.cs b/mRemoteNG/Config/CredentialRecordSaver.cs index 9a9b52d7..6167ba19 100644 --- a/mRemoteNG/Config/CredentialRecordSaver.cs +++ b/mRemoteNG/Config/CredentialRecordSaver.cs @@ -26,7 +26,7 @@ namespace mRemoteNG.Config public void Save(IEnumerable credentialRecords, SecureString key) { - var serializedCredentials = _serializer.Serialize(credentialRecords, key); + string serializedCredentials = _serializer.Serialize(credentialRecords, key); _dataProvider.Save(serializedCredentials); } } diff --git a/mRemoteNG/Config/CredentialRepositoryListLoader.cs b/mRemoteNG/Config/CredentialRepositoryListLoader.cs index c332b195..54e43932 100644 --- a/mRemoteNG/Config/CredentialRepositoryListLoader.cs +++ b/mRemoteNG/Config/CredentialRepositoryListLoader.cs @@ -26,7 +26,7 @@ namespace mRemoteNG.Config [SupportedOSPlatform("windows")] public IEnumerable Load() { - var data = _dataProvider.Load(); + string data = _dataProvider.Load(); return _deserializer.Deserialize(data); } } diff --git a/mRemoteNG/Config/CredentialRepositoryListSaver.cs b/mRemoteNG/Config/CredentialRepositoryListSaver.cs index 6a4a549d..a10bd534 100644 --- a/mRemoteNG/Config/CredentialRepositoryListSaver.cs +++ b/mRemoteNG/Config/CredentialRepositoryListSaver.cs @@ -20,8 +20,8 @@ namespace mRemoteNG.Config public void Save(IEnumerable repositories, string propertyNameTrigger = "") { - var serializer = new CredentialRepositoryListSerializer(); - var data = serializer.Serialize(repositories); + CredentialRepositoryListSerializer serializer = new(); + string data = serializer.Serialize(repositories); _dataProvider.Save(data); } } diff --git a/mRemoteNG/Config/DataProviders/FileBackupCreator.cs b/mRemoteNG/Config/DataProviders/FileBackupCreator.cs index 7cdf54f7..2c1b4a17 100644 --- a/mRemoteNG/Config/DataProviders/FileBackupCreator.cs +++ b/mRemoteNG/Config/DataProviders/FileBackupCreator.cs @@ -17,7 +17,7 @@ namespace mRemoteNG.Config.DataProviders if (WeDontNeedToBackup(fileName)) return; - var backupFileName = + string backupFileName = string.Format(Properties.OptionsBackupPage.Default.BackupFileNameFormat, fileName, DateTime.Now); File.Copy(fileName, backupFileName); } diff --git a/mRemoteNG/Config/DataProviders/FileBackupPruner.cs b/mRemoteNG/Config/DataProviders/FileBackupPruner.cs index 7955455d..8e6c3283 100644 --- a/mRemoteNG/Config/DataProviders/FileBackupPruner.cs +++ b/mRemoteNG/Config/DataProviders/FileBackupPruner.cs @@ -7,23 +7,23 @@ namespace mRemoteNG.Config.DataProviders { public void PruneBackupFiles(string filePath, int maxBackupsToKeep) { - var fileName = Path.GetFileName(filePath); - var directoryName = Path.GetDirectoryName(filePath); + string fileName = Path.GetFileName(filePath); + string directoryName = Path.GetDirectoryName(filePath); if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(directoryName)) return; - var searchPattern = string.Format(Properties.OptionsBackupPage.Default.BackupFileNameFormat, fileName, "*"); - var files = Directory.GetFiles(directoryName, searchPattern); + string searchPattern = string.Format(Properties.OptionsBackupPage.Default.BackupFileNameFormat, fileName, "*"); + string[] files = Directory.GetFiles(directoryName, searchPattern); if (files.Length <= maxBackupsToKeep) return; - var filesToDelete = files + System.Collections.Generic.IEnumerable filesToDelete = files .OrderByDescending(s => s) .Skip(maxBackupsToKeep); - foreach (var file in filesToDelete) + foreach (string file in filesToDelete) { File.Delete(file); } diff --git a/mRemoteNG/Config/DataProviders/FileDataProvider.cs b/mRemoteNG/Config/DataProviders/FileDataProvider.cs index dcf0f949..c741c603 100644 --- a/mRemoteNG/Config/DataProviders/FileDataProvider.cs +++ b/mRemoteNG/Config/DataProviders/FileDataProvider.cs @@ -18,7 +18,7 @@ namespace mRemoteNG.Config.DataProviders public virtual string Load() { - var fileContents = ""; + string fileContents = ""; try { if (!File.Exists(FilePath)) @@ -70,7 +70,7 @@ namespace mRemoteNG.Config.DataProviders private void CreateMissingDirectories() { - var dirname = Path.GetDirectoryName(FilePath); + string dirname = Path.GetDirectoryName(FilePath); if (dirname == null) return; Directory.CreateDirectory(dirname); } diff --git a/mRemoteNG/Config/DataProviders/SqlDataProvider.cs b/mRemoteNG/Config/DataProviders/SqlDataProvider.cs index 3266b37c..121c873a 100644 --- a/mRemoteNG/Config/DataProviders/SqlDataProvider.cs +++ b/mRemoteNG/Config/DataProviders/SqlDataProvider.cs @@ -20,12 +20,12 @@ namespace mRemoteNG.Config.DataProviders public DataTable Load() { - var dataTable = new DataTable(); - var dbQuery = DatabaseConnector.DbCommand("SELECT * FROM tblCons ORDER BY PositionID ASC"); + DataTable dataTable = new(); + System.Data.Common.DbCommand dbQuery = DatabaseConnector.DbCommand("SELECT * FROM tblCons ORDER BY PositionID ASC"); DatabaseConnector.AssociateItemToThisConnector(dbQuery); if (!DatabaseConnector.IsConnected) OpenConnection(); - var dbDataReader = dbQuery.ExecuteReader(CommandBehavior.CloseConnection); + System.Data.Common.DbDataReader dbDataReader = dbQuery.ExecuteReader(CommandBehavior.CloseConnection); if (dbDataReader.HasRows) dataTable.Load(dbDataReader); @@ -47,16 +47,18 @@ namespace mRemoteNG.Config.DataProviders { SqlConnection sqlConnection = (SqlConnection)DatabaseConnector.DbConnection(); using SqlTransaction transaction = sqlConnection.BeginTransaction(System.Data.IsolationLevel.Serializable); - using SqlCommand sqlCommand = new SqlCommand(); + using SqlCommand sqlCommand = new(); sqlCommand.Connection = sqlConnection; sqlCommand.Transaction = transaction; sqlCommand.CommandText = "SELECT * FROM tblCons"; - using SqlDataAdapter dataAdapter = new SqlDataAdapter(); + using SqlDataAdapter dataAdapter = new(); dataAdapter.SelectCommand = sqlCommand; - SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter); - // Avoid optimistic concurrency, check if it is necessary. - builder.ConflictOption = ConflictOption.OverwriteChanges; + SqlCommandBuilder builder = new(dataAdapter) + { + // Avoid optimistic concurrency, check if it is necessary. + ConflictOption = ConflictOption.OverwriteChanges + }; dataAdapter.UpdateCommand = builder.GetUpdateCommand(); dataAdapter.DeleteCommand = builder.GetDeleteCommand(); @@ -66,15 +68,15 @@ namespace mRemoteNG.Config.DataProviders } else if (DatabaseConnector.GetType() == typeof(MySqlDatabaseConnector)) { - var dbConnection = (MySqlConnection) DatabaseConnector.DbConnection(); + MySqlConnection dbConnection = (MySqlConnection) DatabaseConnector.DbConnection(); using MySqlTransaction transaction = dbConnection.BeginTransaction(System.Data.IsolationLevel.Serializable); - using MySqlCommand sqlCommand = new MySqlCommand(); + using MySqlCommand sqlCommand = new(); sqlCommand.Connection = dbConnection; sqlCommand.Transaction = transaction; sqlCommand.CommandText = "SELECT * FROM tblCons"; - using MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sqlCommand); + using MySqlDataAdapter dataAdapter = new(sqlCommand); dataAdapter.UpdateBatchSize = 1000; - using MySqlCommandBuilder cb = new MySqlCommandBuilder(dataAdapter); + using MySqlCommandBuilder cb = new(dataAdapter); dataAdapter.Update(dataTable); transaction.Commit(); } diff --git a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs index 21562673..2689834e 100644 --- a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs +++ b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectionTester.cs @@ -17,7 +17,7 @@ namespace mRemoteNG.Config.DatabaseConnectors string username, string password) { - using (var dbConnector = DatabaseConnectorFactory.DatabaseConnector(type, server, database, username, password)) + using (IDatabaseConnector dbConnector = DatabaseConnectorFactory.DatabaseConnector(type, server, database, username, password)) { try { diff --git a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs index 46192007..da82f501 100644 --- a/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs +++ b/mRemoteNG/Config/DatabaseConnectors/DatabaseConnectorFactory.cs @@ -10,12 +10,12 @@ namespace mRemoteNG.Config.DatabaseConnectors public static IDatabaseConnector DatabaseConnectorFromSettings() { // TODO: add custom port handling? - var sqlType = Properties.OptionsDBsPage.Default.SQLServerType; - var sqlHost = Properties.OptionsDBsPage.Default.SQLHost; - var sqlCatalog = Properties.OptionsDBsPage.Default.SQLDatabaseName; - var sqlUsername = Properties.OptionsDBsPage.Default.SQLUser; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); - var sqlPassword = cryptographyProvider.Decrypt(Properties.OptionsDBsPage.Default.SQLPass, Runtime.EncryptionKey); + string sqlType = Properties.OptionsDBsPage.Default.SQLServerType; + string sqlHost = Properties.OptionsDBsPage.Default.SQLHost; + string sqlCatalog = Properties.OptionsDBsPage.Default.SQLDatabaseName; + string sqlUsername = Properties.OptionsDBsPage.Default.SQLUser; + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); + string sqlPassword = cryptographyProvider.Decrypt(Properties.OptionsDBsPage.Default.SQLPass, Runtime.EncryptionKey); return DatabaseConnector(sqlType, sqlHost, sqlCatalog, sqlUsername, sqlPassword); } diff --git a/mRemoteNG/Config/DatabaseConnectors/MSSqlDatabaseConnector.cs b/mRemoteNG/Config/DatabaseConnectors/MSSqlDatabaseConnector.cs index a93fbfb2..4d72022d 100644 --- a/mRemoteNG/Config/DatabaseConnectors/MSSqlDatabaseConnector.cs +++ b/mRemoteNG/Config/DatabaseConnectors/MSSqlDatabaseConnector.cs @@ -54,7 +54,7 @@ namespace mRemoteNG.Config.DatabaseConnectors private void BuildDbConnectionStringWithCustomCredentials() { string[] hostParts = _dbHost.Split(new char[] { ':' }, 2); - var _dbPort = (hostParts.Length == 2) ? hostParts[1] : "1433"; + string _dbPort = (hostParts.Length == 2) ? hostParts[1] : "1433"; _dbConnectionString = new SqlConnectionStringBuilder { diff --git a/mRemoteNG/Config/Import/ActiveDirectoryImporter.cs b/mRemoteNG/Config/Import/ActiveDirectoryImporter.cs index 7cea15ec..0ed5030a 100644 --- a/mRemoteNG/Config/Import/ActiveDirectoryImporter.cs +++ b/mRemoteNG/Config/Import/ActiveDirectoryImporter.cs @@ -21,11 +21,11 @@ namespace mRemoteNG.Config.Import try { ldapPath.ThrowIfNullOrEmpty(nameof(ldapPath)); - var deserializer = new ActiveDirectoryDeserializer(ldapPath, importSubOu); - var connectionTreeModel = deserializer.Deserialize(); - var importedRootNode = connectionTreeModel.RootNodes.First(); + ActiveDirectoryDeserializer deserializer = new(ldapPath, importSubOu); + Tree.ConnectionTreeModel connectionTreeModel = deserializer.Deserialize(); + ContainerInfo importedRootNode = connectionTreeModel.RootNodes.First(); if (importedRootNode == null) return; - var childrenToAdd = importedRootNode.Children.ToArray(); + Connection.ConnectionInfo[] childrenToAdd = importedRootNode.Children.ToArray(); destinationContainer.AddChildRange(childrenToAdd); } catch (Exception ex) diff --git a/mRemoteNG/Config/Import/MRemoteNGCsvImporter.cs b/mRemoteNG/Config/Import/MRemoteNGCsvImporter.cs index 550a0f8d..0c3138cb 100644 --- a/mRemoteNG/Config/Import/MRemoteNGCsvImporter.cs +++ b/mRemoteNG/Config/Import/MRemoteNGCsvImporter.cs @@ -24,12 +24,12 @@ namespace mRemoteNG.Config.Import Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"Unable to import file. File does not exist. Path: {filePath}"); - var dataProvider = new FileDataProvider(filePath); - var xmlString = dataProvider.Load(); - var xmlConnectionsDeserializer = new CsvConnectionsDeserializerMremotengFormat(); - var connectionTreeModel = xmlConnectionsDeserializer.Deserialize(xmlString); + FileDataProvider dataProvider = new(filePath); + string xmlString = dataProvider.Load(); + CsvConnectionsDeserializerMremotengFormat xmlConnectionsDeserializer = new(); + Tree.ConnectionTreeModel connectionTreeModel = xmlConnectionsDeserializer.Deserialize(xmlString); - var rootImportContainer = new ContainerInfo {Name = Path.GetFileNameWithoutExtension(filePath)}; + ContainerInfo rootImportContainer = new() { Name = Path.GetFileNameWithoutExtension(filePath)}; rootImportContainer.AddChildRange(connectionTreeModel.RootNodes.First().Children.ToArray()); destinationContainer.AddChild(rootImportContainer); } diff --git a/mRemoteNG/Config/Import/MRemoteNGXmlImporter.cs b/mRemoteNG/Config/Import/MRemoteNGXmlImporter.cs index 328924b5..a034df09 100644 --- a/mRemoteNG/Config/Import/MRemoteNGXmlImporter.cs +++ b/mRemoteNG/Config/Import/MRemoteNGXmlImporter.cs @@ -26,12 +26,12 @@ namespace mRemoteNG.Config.Import Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"Unable to import file. File does not exist. Path: {fileName}"); - var dataProvider = new FileDataProvider(fileName); - var xmlString = dataProvider.Load(); - var xmlConnectionsDeserializer = new XmlConnectionsDeserializer(); - var connectionTreeModel = xmlConnectionsDeserializer.Deserialize(xmlString, true); + FileDataProvider dataProvider = new(fileName); + string xmlString = dataProvider.Load(); + XmlConnectionsDeserializer xmlConnectionsDeserializer = new(); + Tree.ConnectionTreeModel connectionTreeModel = xmlConnectionsDeserializer.Deserialize(xmlString, true); - var rootImportContainer = new ContainerInfo {Name = Path.GetFileNameWithoutExtension(fileName)}; + ContainerInfo rootImportContainer = new() { Name = Path.GetFileNameWithoutExtension(fileName)}; rootImportContainer.AddChildRange(connectionTreeModel.RootNodes.First().Children.ToArray()); destinationContainer.AddChild(rootImportContainer); } diff --git a/mRemoteNG/Config/Import/PortScanImporter.cs b/mRemoteNG/Config/Import/PortScanImporter.cs index d76f931d..0021f9aa 100644 --- a/mRemoteNG/Config/Import/PortScanImporter.cs +++ b/mRemoteNG/Config/Import/PortScanImporter.cs @@ -21,12 +21,12 @@ namespace mRemoteNG.Config.Import public void Import(IEnumerable hosts, ContainerInfo destinationContainer) { - var deserializer = new PortScanDeserializer(_targetProtocolType); - var connectionTreeModel = deserializer.Deserialize(hosts); + PortScanDeserializer deserializer = new(_targetProtocolType); + Tree.ConnectionTreeModel connectionTreeModel = deserializer.Deserialize(hosts); - var importedRootNode = connectionTreeModel.RootNodes.First(); + ContainerInfo importedRootNode = connectionTreeModel.RootNodes.First(); if (importedRootNode == null) return; - var childrenToAdd = importedRootNode.Children.ToArray(); + Connection.ConnectionInfo[] childrenToAdd = importedRootNode.Children.ToArray(); destinationContainer.AddChildRange(childrenToAdd); } } diff --git a/mRemoteNG/Config/Import/PuttyConnectionManagerImporter.cs b/mRemoteNG/Config/Import/PuttyConnectionManagerImporter.cs index f04a5bff..26bff6ed 100644 --- a/mRemoteNG/Config/Import/PuttyConnectionManagerImporter.cs +++ b/mRemoteNG/Config/Import/PuttyConnectionManagerImporter.cs @@ -12,15 +12,15 @@ namespace mRemoteNG.Config.Import { public void Import(string filePath, ContainerInfo destinationContainer) { - var dataProvider = new FileDataProvider(filePath); - var xmlContent = dataProvider.Load(); + FileDataProvider dataProvider = new(filePath); + string xmlContent = dataProvider.Load(); - var deserializer = new PuttyConnectionManagerDeserializer(); - var connectionTreeModel = deserializer.Deserialize(xmlContent); + PuttyConnectionManagerDeserializer deserializer = new(); + Tree.ConnectionTreeModel connectionTreeModel = deserializer.Deserialize(xmlContent); - var importedRootNode = connectionTreeModel.RootNodes.First(); + ContainerInfo importedRootNode = connectionTreeModel.RootNodes.First(); if (importedRootNode == null) return; - var childrenToAdd = importedRootNode.Children.ToArray(); + Connection.ConnectionInfo[] childrenToAdd = importedRootNode.Children.ToArray(); destinationContainer.AddChildRange(childrenToAdd); } } diff --git a/mRemoteNG/Config/Import/RemoteDesktopConnectionImporter.cs b/mRemoteNG/Config/Import/RemoteDesktopConnectionImporter.cs index e0ee66a9..ab45962e 100644 --- a/mRemoteNG/Config/Import/RemoteDesktopConnectionImporter.cs +++ b/mRemoteNG/Config/Import/RemoteDesktopConnectionImporter.cs @@ -13,13 +13,13 @@ namespace mRemoteNG.Config.Import { public void Import(string fileName, ContainerInfo destinationContainer) { - var dataProvider = new FileDataProvider(fileName); - var content = dataProvider.Load(); + FileDataProvider dataProvider = new(fileName); + string content = dataProvider.Load(); - var deserializer = new RemoteDesktopConnectionDeserializer(); - var connectionTreeModel = deserializer.Deserialize(content); + RemoteDesktopConnectionDeserializer deserializer = new(); + Tree.ConnectionTreeModel connectionTreeModel = deserializer.Deserialize(content); - var importedConnection = connectionTreeModel.RootNodes.First().Children.First(); + Connection.ConnectionInfo importedConnection = connectionTreeModel.RootNodes.First().Children.First(); if (importedConnection == null) return; importedConnection.Name = Path.GetFileNameWithoutExtension(fileName); diff --git a/mRemoteNG/Config/Import/RemoteDesktopConnectionManagerImporter.cs b/mRemoteNG/Config/Import/RemoteDesktopConnectionManagerImporter.cs index f13b5e7d..1cc40d07 100644 --- a/mRemoteNG/Config/Import/RemoteDesktopConnectionManagerImporter.cs +++ b/mRemoteNG/Config/Import/RemoteDesktopConnectionManagerImporter.cs @@ -12,15 +12,15 @@ namespace mRemoteNG.Config.Import { public void Import(string filePath, ContainerInfo destinationContainer) { - var dataProvider = new FileDataProvider(filePath); - var fileContent = dataProvider.Load(); + FileDataProvider dataProvider = new(filePath); + string fileContent = dataProvider.Load(); - var deserializer = new RemoteDesktopConnectionManagerDeserializer(); - var connectionTreeModel = deserializer.Deserialize(fileContent); + RemoteDesktopConnectionManagerDeserializer deserializer = new(); + Tree.ConnectionTreeModel connectionTreeModel = deserializer.Deserialize(fileContent); - var importedRootNode = connectionTreeModel.RootNodes.First(); + ContainerInfo importedRootNode = connectionTreeModel.RootNodes.First(); if (importedRootNode == null) return; - var childrenToAdd = importedRootNode.Children.ToArray(); + Connection.ConnectionInfo[] childrenToAdd = importedRootNode.Children.ToArray(); destinationContainer.AddChildRange(childrenToAdd); } } diff --git a/mRemoteNG/Config/Import/RemoteDesktopManagerImporter.cs b/mRemoteNG/Config/Import/RemoteDesktopManagerImporter.cs index 1190132c..94aac8e9 100644 --- a/mRemoteNG/Config/Import/RemoteDesktopManagerImporter.cs +++ b/mRemoteNG/Config/Import/RemoteDesktopManagerImporter.cs @@ -27,15 +27,15 @@ namespace mRemoteNG.Config.Import if (!File.Exists(filePath)) Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"Unable to import file. File does not exist. Path: {filePath}"); - var dataProvider = new FileDataProvider(filePath); - var csvString = dataProvider.Load(); + FileDataProvider dataProvider = new(filePath); + string csvString = dataProvider.Load(); if (!string.IsNullOrEmpty(csvString)) { - var csvDeserializer = new CsvConnectionsDeserializerRdmFormat(); - var connectionTreeModel = csvDeserializer.Deserialize(csvString); + CsvConnectionsDeserializerRdmFormat csvDeserializer = new(); + Tree.ConnectionTreeModel connectionTreeModel = csvDeserializer.Deserialize(csvString); - var rootContainer = new ContainerInfo { Name = Path.GetFileNameWithoutExtension(filePath) }; + ContainerInfo rootContainer = new() { Name = Path.GetFileNameWithoutExtension(filePath) }; rootContainer.AddChildRange(connectionTreeModel.RootNodes); destinationContainer.AddChild(rootContainer); } diff --git a/mRemoteNG/Config/Import/SecureCRTImporter.cs b/mRemoteNG/Config/Import/SecureCRTImporter.cs index c200c2cf..eae48b77 100644 --- a/mRemoteNG/Config/Import/SecureCRTImporter.cs +++ b/mRemoteNG/Config/Import/SecureCRTImporter.cs @@ -31,12 +31,12 @@ namespace mRemoteNG.Config.Import $"Unable to import file. File does not exist. Path: {fileName}"); - var dataProvider = new FileDataProvider(fileName); - var content = dataProvider.Load(); - var deserializer = new SecureCRTFileDeserializer(); - var connectionTreeModel = deserializer.Deserialize(content); + FileDataProvider dataProvider = new(fileName); + string content = dataProvider.Load(); + SecureCRTFileDeserializer deserializer = new(); + ConnectionTreeModel connectionTreeModel = deserializer.Deserialize(content); - var rootImportContainer = new ContainerInfo { Name = Path.GetFileNameWithoutExtension(fileName) }; + ContainerInfo rootImportContainer = new() { Name = Path.GetFileNameWithoutExtension(fileName) }; rootImportContainer.AddChildRange(connectionTreeModel.RootNodes.First().Children.ToArray()); destinationContainer.AddChild(rootImportContainer); } diff --git a/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs b/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs index e4529455..da18622d 100644 --- a/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs +++ b/mRemoteNG/Config/Putty/AbstractPuttySessionsProvider.cs @@ -24,15 +24,15 @@ namespace mRemoteNG.Config.Putty public virtual IEnumerable GetSessions() { - var sessionNamesFromProvider = GetSessionNames(true); + string[] sessionNamesFromProvider = GetSessionNames(true); - foreach (var sessionName in GetSessionNamesToAdd(sessionNamesFromProvider)) + foreach (string sessionName in GetSessionNamesToAdd(sessionNamesFromProvider)) { - var sessionInfo = GetSession(sessionName); + PuttySessionInfo sessionInfo = GetSession(sessionName); AddSession(sessionInfo); } - foreach (var session in GetSessionToRemove(sessionNamesFromProvider)) + foreach (PuttySessionInfo session in GetSessionToRemove(sessionNamesFromProvider)) { RemoveSession(session); } @@ -44,18 +44,18 @@ namespace mRemoteNG.Config.Putty private IEnumerable GetSessionNamesToAdd(IEnumerable sessionNamesFromProvider) { if (sessionNamesFromProvider == null) { return Enumerable.Empty(); } - var currentlyKnownSessionNames = Sessions.Select(session => session.Name); - var sessionNamesToAdd = sessionNamesFromProvider.Except(currentlyKnownSessionNames); + IEnumerable currentlyKnownSessionNames = Sessions.Select(session => session.Name); + IEnumerable sessionNamesToAdd = sessionNamesFromProvider.Except(currentlyKnownSessionNames); return sessionNamesToAdd; } private IEnumerable GetSessionToRemove(IEnumerable sessionNamesFromProvider) { if (sessionNamesFromProvider == null) return Enumerable.Empty(); - var currentlyKnownSessionNames = Sessions.Select(session => session.Name); - var normalizedSessionNames = + IEnumerable currentlyKnownSessionNames = Sessions.Select(session => session.Name); + IEnumerable normalizedSessionNames = sessionNamesFromProvider.Select(name => WebUtility.UrlDecode(name)); - var sessionNamesToRemove = currentlyKnownSessionNames.Except(normalizedSessionNames); + IEnumerable sessionNamesToRemove = currentlyKnownSessionNames.Except(normalizedSessionNames); return Sessions.Where(session => sessionNamesToRemove.Contains(session.Name)); } diff --git a/mRemoteNG/Config/Putty/PuttySessionsManager.cs b/mRemoteNG/Config/Putty/PuttySessionsManager.cs index 32154881..0793b30f 100644 --- a/mRemoteNG/Config/Putty/PuttySessionsManager.cs +++ b/mRemoteNG/Config/Putty/PuttySessionsManager.cs @@ -14,11 +14,11 @@ namespace mRemoteNG.Config.Putty { public static PuttySessionsManager Instance { get; } = new PuttySessionsManager(); - private readonly List _providers = new List(); + private readonly List _providers = []; public IEnumerable Providers => _providers; - public List RootPuttySessionsNodes { get; } = new List(); + public List RootPuttySessionsNodes { get; } = []; private PuttySessionsManager() { @@ -30,7 +30,7 @@ namespace mRemoteNG.Config.Putty public void AddSessions() { - foreach (var provider in Providers) + foreach (AbstractPuttySessionsProvider provider in Providers) { AddSessionsFromProvider(provider); } @@ -40,7 +40,7 @@ namespace mRemoteNG.Config.Putty { puttySessionProvider.ThrowIfNull(nameof(puttySessionProvider)); - var rootTreeNode = puttySessionProvider.RootInfo; + RootPuttySessionsNodeInfo rootTreeNode = puttySessionProvider.RootInfo; puttySessionProvider.GetSessions(); if (!RootPuttySessionsNodes.Contains(rootTreeNode) && rootTreeNode.HasChildren()) @@ -50,7 +50,7 @@ namespace mRemoteNG.Config.Putty public void StartWatcher() { - foreach (var provider in Providers) + foreach (AbstractPuttySessionsProvider provider in Providers) { provider.StartWatcher(); provider.PuttySessionChanged += PuttySessionChanged; @@ -59,7 +59,7 @@ namespace mRemoteNG.Config.Putty public void StopWatcher() { - foreach (var provider in Providers) + foreach (AbstractPuttySessionsProvider provider in Providers) { provider.StopWatcher(); provider.PuttySessionChanged -= PuttySessionChanged; @@ -79,7 +79,7 @@ namespace mRemoteNG.Config.Putty public void AddProviders(IEnumerable newProviders) { - foreach (var provider in newProviders) + foreach (AbstractPuttySessionsProvider provider in newProviders) AddProvider(provider); } @@ -105,8 +105,8 @@ namespace mRemoteNG.Config.Putty private string[] GetSessionNames(bool raw = false) { - var sessionNames = new List(); - foreach (var provider in Providers) + List sessionNames = new(); + foreach (AbstractPuttySessionsProvider provider in Providers) { if (!IsProviderEnabled(provider)) { @@ -121,7 +121,7 @@ namespace mRemoteNG.Config.Putty private bool IsProviderEnabled(AbstractPuttySessionsProvider puttySessionsProvider) { - var enabled = true; + bool enabled = true; if (!(puttySessionsProvider is PuttySessionsRegistryProvider)) enabled = false; return enabled; diff --git a/mRemoteNG/Config/Putty/PuttySessionsRegistryProvider.cs b/mRemoteNG/Config/Putty/PuttySessionsRegistryProvider.cs index e079d562..e8eb6bb2 100644 --- a/mRemoteNG/Config/Putty/PuttySessionsRegistryProvider.cs +++ b/mRemoteNG/Config/Putty/PuttySessionsRegistryProvider.cs @@ -24,11 +24,11 @@ namespace mRemoteNG.Config.Putty public override string[] GetSessionNames(bool raw = false) { - var sessionsKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey); + RegistryKey sessionsKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey); if (sessionsKey == null) return Array.Empty(); - var sessionNames = new List(); - foreach (var sessionName in sessionsKey.GetSubKeyNames()) + List sessionNames = new(); + foreach (string sessionName in sessionsKey.GetSubKeyNames()) { sessionNames.Add(raw ? sessionName : WebUtility.UrlDecode(sessionName.Replace("+", "%2B"))); @@ -47,13 +47,13 @@ namespace mRemoteNG.Config.Putty if (string.IsNullOrEmpty(sessionName)) return null; - var sessionsKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey); - var sessionKey = sessionsKey?.OpenSubKey(sessionName); + RegistryKey sessionsKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey); + RegistryKey sessionKey = sessionsKey?.OpenSubKey(sessionName); if (sessionKey == null) return null; sessionName = WebUtility.UrlDecode(sessionName.Replace("+", "%2B")); - var sessionInfo = new PuttySessionInfo + PuttySessionInfo sessionInfo = new() { PuttySession = sessionName, Name = sessionName, @@ -62,7 +62,7 @@ namespace mRemoteNG.Config.Putty }; - var protocol = string.IsNullOrEmpty(sessionKey.GetValue("Protocol")?.ToString()) + string protocol = string.IsNullOrEmpty(sessionKey.GetValue("Protocol")?.ToString()) ? "ssh" : sessionKey.GetValue("Protocol").ToString(); @@ -77,7 +77,7 @@ namespace mRemoteNG.Config.Putty case "serial": return null; case "ssh": - int.TryParse(sessionKey.GetValue("SshProt")?.ToString(), out var sshVersion); + int.TryParse(sessionKey.GetValue("SshProt")?.ToString(), out int sshVersion); /* Per PUTTY.H in PuTTYNG & PuTTYNG Upstream (PuTTY proper currently) * expect 0 for SSH1, 3 for SSH2 ONLY * 1 for SSH1 with a 2 fallback @@ -94,7 +94,7 @@ namespace mRemoteNG.Config.Putty return null; } - int.TryParse(sessionKey.GetValue("PortNumber")?.ToString(), out var portNumber); + int.TryParse(sessionKey.GetValue("PortNumber")?.ToString(), out int portNumber); if (portNumber == default(int)) sessionInfo.SetDefaultPort(); else @@ -109,13 +109,13 @@ namespace mRemoteNG.Config.Putty try { - var keyName = string.Join("\\", CurrentUserSid, PuttySessionsKey).Replace("\\", "\\\\"); - var sessionsKey = Registry.Users.OpenSubKey(keyName); + string keyName = string.Join("\\", CurrentUserSid, PuttySessionsKey).Replace("\\", "\\\\"); + RegistryKey sessionsKey = Registry.Users.OpenSubKey(keyName); if (sessionsKey == null) { Registry.Users.CreateSubKey(keyName); } - var query = new WqlEventQuery($"SELECT * FROM RegistryTreeChangeEvent WHERE Hive = \'HKEY_USERS\' AND RootPath = \'{keyName}\'"); + WqlEventQuery query = new($"SELECT * FROM RegistryTreeChangeEvent WHERE Hive = \'HKEY_USERS\' AND RootPath = \'{keyName}\'"); _eventWatcher = new ManagementEventWatcher(query); _eventWatcher.EventArrived += OnManagementEventArrived; _eventWatcher.Start(); diff --git a/mRemoteNG/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs b/mRemoteNG/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs index 085d948a..8ece7c94 100644 --- a/mRemoteNG/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs +++ b/mRemoteNG/Config/Serializers/ConfConsEnsureConnectionsHaveIds.cs @@ -8,10 +8,10 @@ namespace mRemoteNG.Config.Serializers { public void EnsureElementsHaveIds(XDocument xdoc) { - foreach (var element in xdoc.Descendants("Node")) + foreach (XElement element in xdoc.Descendants("Node")) { if (element.Attribute("Id") != null) continue; - var id = Guid.NewGuid(); + Guid id = Guid.NewGuid(); element.Add(new XAttribute("Id", id)); } } diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs index a3a269a2..f7416c8a 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs @@ -18,34 +18,34 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv { public ConnectionTreeModel Deserialize(string serializedData) { - var lines = serializedData.Split(new[] {"\r\n", "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries); - var csvHeaders = new List(); + string[] lines = serializedData.Split(new[] {"\r\n", "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries); + List csvHeaders = new(); // used to map a connectioninfo to it's parent's GUID - var parentMapping = new Dictionary(); + Dictionary parentMapping = new(); - for (var lineNumber = 0; lineNumber < lines.Length; lineNumber++) + for (int lineNumber = 0; lineNumber < lines.Length; lineNumber++) { - var line = lines[lineNumber].Split(';'); + string[] line = lines[lineNumber].Split(';'); if (lineNumber == 0) csvHeaders = line.ToList(); else { - var connectionInfo = ParseConnectionInfo(csvHeaders, line); + ConnectionInfo connectionInfo = ParseConnectionInfo(csvHeaders, line); parentMapping.Add(connectionInfo, line[csvHeaders.IndexOf("Parent")]); } } - var root = CreateTreeStructure(parentMapping); - var connectionTreeModel = new ConnectionTreeModel(); + RootNodeInfo root = CreateTreeStructure(parentMapping); + ConnectionTreeModel connectionTreeModel = new(); connectionTreeModel.AddRootNode(root); return connectionTreeModel; } private RootNodeInfo CreateTreeStructure(Dictionary parentMapping) { - var root = new RootNodeInfo(RootNodeType.Connection); + RootNodeInfo root = new(RootNodeType.Connection); - foreach (var node in parentMapping) + foreach (KeyValuePair node in parentMapping) { // no parent mapped, add to root if (string.IsNullOrEmpty(node.Value)) @@ -55,7 +55,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv } // search for parent in the list by GUID - var parent = parentMapping + ContainerInfo parent = parentMapping .Keys .OfType() .FirstOrDefault(info => info.ConstantID == node.Value); @@ -75,15 +75,15 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv private ConnectionInfo ParseConnectionInfo(IList headers, string[] connectionCsv) { - var nodeType = headers.Contains("NodeType") + TreeNodeType nodeType = headers.Contains("NodeType") ? (TreeNodeType)Enum.Parse(typeof(TreeNodeType), connectionCsv[headers.IndexOf("NodeType")], true) : TreeNodeType.Connection; - var nodeId = headers.Contains("Id") + string nodeId = headers.Contains("Id") ? connectionCsv[headers.IndexOf("Id")] : Guid.NewGuid().ToString(); - var connectionRecord = nodeType == TreeNodeType.Connection + ConnectionInfo connectionRecord = nodeType == TreeNodeType.Connection ? new ConnectionInfo(nodeId) : new ContainerInfo(nodeId); diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs index ee56c475..c3cdba5e 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs @@ -34,14 +34,14 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv { connectionTreeModel.ThrowIfNull(nameof(connectionTreeModel)); - var rootNode = connectionTreeModel.RootNodes.First(node => node is RootNodeInfo); + ContainerInfo rootNode = connectionTreeModel.RootNodes.First(node => node is RootNodeInfo); return Serialize(rootNode); } public string Serialize(ConnectionInfo serializationTarget) { serializationTarget.ThrowIfNull(nameof(serializationTarget)); - var sb = new StringBuilder(); + StringBuilder sb = new(); WriteCsvHeader(sb); SerializeNodesRecursive(serializationTarget, sb); @@ -81,10 +81,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv private void SerializeNodesRecursive(ConnectionInfo node, StringBuilder sb) { - var nodeAsContainer = node as ContainerInfo; + ContainerInfo nodeAsContainer = node as ContainerInfo; if (nodeAsContainer != null) { - foreach (var child in nodeAsContainer.Children) + foreach (ConnectionInfo child in nodeAsContainer.Children) { SerializeNodesRecursive(child, sb); } @@ -272,7 +272,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv private string FormatForCsv(object value) { - var cleanedString = value.ToString().Replace(";", ""); + string cleanedString = value.ToString().Replace(";", ""); return cleanedString + ";"; } } diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs index 99aca4f1..15b813da 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Csv/RemoteDesktopManager/CsvConnectionsDeserializerRdmFormat.cs @@ -24,15 +24,15 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopMa public CsvConnectionsDeserializerRdmFormat() { - _connectionTypes = new List - { + _connectionTypes = + [ new(ProtocolType.RDP, "RDP (Microsoft Remote Desktop)", 3389, "Remote Desktop"), new(ProtocolType.SSH2, "SSH Shell", 22, "SSH") - }; + ]; - _groups = new HashSet(); + _groups = []; - Containers = new List(); + Containers = []; } private List Containers { get; } @@ -44,42 +44,42 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopMa /// public ConnectionTreeModel Deserialize(string serializedData) { - var lines = serializedData.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); - var csvHeaders = new List(); + string[] lines = serializedData.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); + List csvHeaders = new(); - var connections = new List<(ConnectionInfo, string)>(); // (ConnectionInfo, group) + List<(ConnectionInfo, string)> connections = new(); // (ConnectionInfo, group) - for (var lineNumber = 0; lineNumber < lines.Length; lineNumber++) + for (int lineNumber = 0; lineNumber < lines.Length; lineNumber++) { - var line = lines[lineNumber].Split(','); + string[] line = lines[lineNumber].Split(','); if (lineNumber == 0) { csvHeaders = line.ToList(); } else { - var (connectionInfo, group) = ParseConnectionInfo(csvHeaders, line); + (ConnectionInfo connectionInfo, string group) = ParseConnectionInfo(csvHeaders, line); if (connectionInfo == default) continue; connections.Add((connectionInfo, group)); } } - var connectionTreeModel = new ConnectionTreeModel(); - var unsortedConnections = new ContainerInfo { Name = "Unsorted" }; + ConnectionTreeModel connectionTreeModel = new(); + ContainerInfo unsortedConnections = new() { Name = "Unsorted" }; - foreach (var containerInfo in Containers) connectionTreeModel.AddRootNode(containerInfo); + foreach (ContainerInfo containerInfo in Containers) connectionTreeModel.AddRootNode(containerInfo); - var allChildren = Containers.SelectMany(x => x.GetRecursiveChildList().Select(y => (ContainerInfo)y)).ToList(); + List allChildren = Containers.SelectMany(x => x.GetRecursiveChildList().Select(y => (ContainerInfo)y)).ToList(); - foreach (var (connection, path) in connections) + foreach ((ConnectionInfo connection, string path) in connections) if (string.IsNullOrEmpty(path)) { unsortedConnections.AddChild(connection); } else { - var container = allChildren.FirstOrDefault(x => x.ConstantID == path); + ContainerInfo container = allChildren.FirstOrDefault(x => x.ConstantID == path); if (container == default) continue; container.AddChild(connection); @@ -101,30 +101,30 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopMa { if (headers.Count != connectionCsv.Count) return default; - var hostString = connectionCsv[headers.IndexOf("Host")].Trim(); + string hostString = connectionCsv[headers.IndexOf("Host")].Trim(); if (string.IsNullOrEmpty(hostString)) return default; - var hostType = Uri.CheckHostName(hostString); + UriHostNameType hostType = Uri.CheckHostName(hostString); if (hostType == UriHostNameType.Unknown) return default; - var connectionTypeString = connectionCsv[headers.IndexOf("ConnectionType")]; + string connectionTypeString = connectionCsv[headers.IndexOf("ConnectionType")]; if (string.IsNullOrEmpty(connectionTypeString)) return default; - var connectionType = _connectionTypes.FirstOrDefault(x => x.Name == connectionTypeString); + RemoteDesktopManagerConnectionInfo connectionType = _connectionTypes.FirstOrDefault(x => x.Name == connectionTypeString); if (connectionType == default) return default; - var portString = connectionCsv[headers.IndexOf("Port")] ?? connectionType.Port.ToString(); - if (!int.TryParse(portString, out var port)) port = connectionType.Port; + string portString = connectionCsv[headers.IndexOf("Port")] ?? connectionType.Port.ToString(); + if (!int.TryParse(portString, out int port)) port = connectionType.Port; - var name = connectionCsv[headers.IndexOf("Name")]; - var description = connectionCsv[headers.IndexOf("Description")]; - var group = connectionCsv[headers.IndexOf("Group")]; + string name = connectionCsv[headers.IndexOf("Name")]; + string description = connectionCsv[headers.IndexOf("Description")]; + string group = connectionCsv[headers.IndexOf("Group")]; - var username = connectionCsv[headers.IndexOf("CredentialUserName")]; - var domain = connectionCsv[headers.IndexOf("CredentialDomain")]; - var password = connectionCsv[headers.IndexOf("CredentialPassword")]; + string username = connectionCsv[headers.IndexOf("CredentialUserName")]; + string domain = connectionCsv[headers.IndexOf("CredentialDomain")]; + string password = connectionCsv[headers.IndexOf("CredentialPassword")]; - var connectionInfo = new ConnectionInfo(Guid.NewGuid().ToString()) + ConnectionInfo connectionInfo = new(Guid.NewGuid().ToString()) { Name = name, Hostname = hostString, @@ -140,10 +140,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopMa if (!string.IsNullOrEmpty(group)) if (group.Contains('\\')) { - var groupParts = group.Split('\\').ToList(); - var parentContainerName = groupParts[0]; + List groupParts = group.Split('\\').ToList(); + string parentContainerName = groupParts[0]; - var parentContainer = Containers.FirstOrDefault(x => x.Name == parentContainerName); + ContainerInfo parentContainer = Containers.FirstOrDefault(x => x.Name == parentContainerName); if (parentContainer == default) { parentContainer = new ContainerInfo(group) { Name = parentContainerName }; @@ -168,13 +168,13 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopMa { if (_groups.Contains(group)) return; - var groupCount = groupParts.Count; + int groupCount = groupParts.Count; while (groupCount > 0) { - var childName = groupParts[0]; - var newContainer = new ContainerInfo(group) { Name = childName }; + string childName = groupParts[0]; + ContainerInfo newContainer = new(group) { Name = childName }; - var childrenNames = parentContainer.GetRecursiveChildList().Select(x => x.Name).ToList(); + List childrenNames = parentContainer.GetRecursiveChildList().Select(x => x.Name).ToList(); if (!childrenNames.Any()) { groupCount = AddChild(parentContainer, newContainer, groupCount); @@ -184,7 +184,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Csv.RemoteDesktopMa if (groupParts.Count > 1) { - var childContainer = (ContainerInfo)parentContainer.Children.FirstOrDefault(x => x.Name == childName); + ContainerInfo childContainer = (ContainerInfo)parentContainer.Children.FirstOrDefault(x => x.Name == childName); if (childContainer == default) { groupCount = AddChild(parentContainer, newContainer, groupCount); diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableDeserializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableDeserializer.cs index f2f92b07..e664c7f3 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableDeserializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableDeserializer.cs @@ -33,15 +33,15 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql public ConnectionTreeModel Deserialize(DataTable table) { - var connectionList = CreateNodesFromTable(table); - var connectionTreeModel = CreateNodeHierarchy(connectionList, table); + List connectionList = CreateNodesFromTable(table); + ConnectionTreeModel connectionTreeModel = CreateNodeHierarchy(connectionList, table); Runtime.ConnectionsService.IsConnectionsFileLoaded = true; return connectionTreeModel; } private List CreateNodesFromTable(DataTable table) { - var nodeList = new List(); + List nodeList = new(); foreach (DataRow row in table.Rows) { // ReSharper disable once SwitchStatementMissingSomeCases @@ -61,16 +61,16 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql private ConnectionInfo DeserializeConnectionInfo(DataRow row) { - var connectionId = row["ConstantID"] as string ?? Guid.NewGuid().ToString(); - var connectionInfo = new ConnectionInfo(connectionId); + string connectionId = row["ConstantID"] as string ?? Guid.NewGuid().ToString(); + ConnectionInfo connectionInfo = new(connectionId); PopulateConnectionInfoFromDatarow(row, connectionInfo); return connectionInfo; } private ContainerInfo DeserializeContainerInfo(DataRow row) { - var containerId = row["ConstantID"] as string ?? Guid.NewGuid().ToString(); - var containerInfo = new ContainerInfo(containerId); + string containerId = row["ConstantID"] as string ?? Guid.NewGuid().ToString(); + ContainerInfo containerInfo = new(containerId); PopulateConnectionInfoFromDatarow(row, containerInfo); return containerInfo; } @@ -258,8 +258,8 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql private ConnectionTreeModel CreateNodeHierarchy(List connectionList, DataTable dataTable) { - var connectionTreeModel = new ConnectionTreeModel(); - var rootNode = new RootNodeInfo(RootNodeType.Connection, "0") + ConnectionTreeModel connectionTreeModel = new(); + RootNodeInfo rootNode = new(RootNodeType.Connection, "0") { PasswordString = _decryptionKey.ConvertToUnsecureString() }; @@ -267,9 +267,9 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql foreach (DataRow row in dataTable.Rows) { - var id = (string)row["ConstantID"]; - var connectionInfo = connectionList.First(node => node.ConstantID == id); - var parentId = (string)row["ParentID"]; + string id = (string)row["ConstantID"]; + ConnectionInfo connectionInfo = connectionList.First(node => node.ConstantID == id); + string parentId = (string)row["ParentID"]; if (parentId == "0" || connectionList.All(node => node.ConstantID != parentId)) rootNode.AddChild(connectionInfo); else diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableSerializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableSerializer.cs index 1c9096e3..d96e89f3 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableSerializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/DataTableSerializer.cs @@ -21,7 +21,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql private readonly SecureString _encryptionKey; private DataTable _dataTable; private DataTable _sourceDataTable; - private readonly Dictionary _sourcePrimaryKeyDict = new Dictionary(); + private readonly Dictionary _sourcePrimaryKeyDict = []; private const string TABLE_NAME = "tblCons"; private readonly SaveFilter _saveFilter; private int _currentNodeIndex; @@ -69,7 +69,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql List entryToDelete = _sourcePrimaryKeyDict.Keys.ToList(); - foreach (var entry in entryToDelete) + foreach (string entry in entryToDelete) { _dataTable.Rows.Find(entry)?.Delete(); } @@ -277,7 +277,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql SerializeConnectionInfo(connectionInfo); } - var containerInfo = connectionInfo as ContainerInfo; + ContainerInfo containerInfo = connectionInfo as ContainerInfo; if (containerInfo == null) return; foreach (ConnectionInfo child in containerInfo.Children) @@ -288,7 +288,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql private bool IsRowUpdated(ConnectionInfo connectionInfo, DataRow dataRow) { - var isFieldNotChange = dataRow["Name"].Equals(connectionInfo.Name) && + bool isFieldNotChange = dataRow["Name"].Equals(connectionInfo.Name) && dataRow["Type"].Equals(connectionInfo.GetTreeNodeType().ToString()) && dataRow["ParentID"].Equals(connectionInfo.Parent?.ConstantID ?? "") && dataRow["PositionID"].Equals(_currentNodeIndex) && @@ -370,7 +370,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql isFieldNotChange = isFieldNotChange && dataRow["VNCViewOnly"].Equals(connectionInfo.VNCViewOnly); isFieldNotChange = isFieldNotChange && dataRow["VmId"].Equals(connectionInfo.VmId); - var isInheritanceFieldNotChange = false; + bool isInheritanceFieldNotChange = false; if (_saveFilter.SaveInheritance) { isInheritanceFieldNotChange = @@ -519,7 +519,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql dataRow["InheritVNCViewOnly"].Equals(false); } - var pwd = dataRow["Password"].Equals(_saveFilter.SavePassword ? _cryptographyProvider.Encrypt(connectionInfo.Password, _encryptionKey) : "") && + bool pwd = dataRow["Password"].Equals(_saveFilter.SavePassword ? _cryptographyProvider.Encrypt(connectionInfo.Password, _encryptionKey) : "") && dataRow["VNCProxyPassword"].Equals(_cryptographyProvider.Encrypt(connectionInfo.VNCProxyPassword, _encryptionKey)) && dataRow["RDGatewayPassword"].Equals(_cryptographyProvider.Encrypt(connectionInfo.RDGatewayPassword, _encryptionKey)); return !(pwd && isFieldNotChange && isInheritanceFieldNotChange); @@ -528,7 +528,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql private void SerializeConnectionInfo(ConnectionInfo connectionInfo) { _currentNodeIndex++; - var isNewRow = false; + bool isNewRow = false; DataRow dataRow = _dataTable.Rows.Find(connectionInfo.ConstantID); if (dataRow == null) { @@ -540,7 +540,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql { _sourcePrimaryKeyDict.Remove(connectionInfo.ConstantID); } - var tmp = IsRowUpdated(connectionInfo, dataRow); + bool tmp = IsRowUpdated(connectionInfo, dataRow); if (!tmp) { return; diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/LocalConnectionPropertiesXmlSerializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/LocalConnectionPropertiesXmlSerializer.cs index 83dd9cd1..fa689a22 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/LocalConnectionPropertiesXmlSerializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/LocalConnectionPropertiesXmlSerializer.cs @@ -16,15 +16,15 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql public string Serialize(IEnumerable models) { - var localConnections = models + IEnumerable localConnections = models .Select(m => new XElement("Node", new XAttribute("ConnectionId", m.ConnectionId), new XAttribute("Connected", m.Connected), new XAttribute("Expanded", m.Expanded), new XAttribute("Favorite", m.Favorite))); - var root = new XElement("LocalConnections", localConnections); - var xdoc = new XDocument(new XDeclaration("1.0", "utf-8", null), root); + XElement root = new("LocalConnections", localConnections); + XDocument xdoc = new(new XDeclaration("1.0", "utf-8", null), root); return WriteXmlToString(xdoc); } @@ -33,7 +33,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql if (string.IsNullOrWhiteSpace(serializedData)) return Enumerable.Empty(); - var xdoc = XDocument.Parse(serializedData); + XDocument xdoc = XDocument.Parse(serializedData); return xdoc .Descendants("Node") .Where(e => e.Attribute("ConnectionId") != null) @@ -49,14 +49,13 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql private static string WriteXmlToString(XNode xmlDocument) { string xmlString; - var xmlWriterSettings = new XmlWriterSettings - {Indent = true, IndentChars = " ", Encoding = Encoding.UTF8}; - var memoryStream = new MemoryStream(); - using (var xmlTextWriter = XmlWriter.Create(memoryStream, xmlWriterSettings)) + XmlWriterSettings xmlWriterSettings = new() { Indent = true, IndentChars = " ", Encoding = Encoding.UTF8}; + MemoryStream memoryStream = new(); + using (XmlWriter xmlTextWriter = XmlWriter.Create(memoryStream, xmlWriterSettings)) { xmlDocument.WriteTo(xmlTextWriter); xmlTextWriter.Flush(); - var streamReader = new StreamReader(memoryStream, Encoding.UTF8, true); + StreamReader streamReader = new(memoryStream, Encoding.UTF8, true); memoryStream.Seek(0, SeekOrigin.Begin); xmlString = streamReader.ReadToEnd(); } diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/SqlDatabaseMetaDataRetriever.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/SqlDatabaseMetaDataRetriever.cs index 41d52f77..d900a959 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/SqlDatabaseMetaDataRetriever.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Sql/SqlDatabaseMetaDataRetriever.cs @@ -71,7 +71,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql { // TODO: use transaction - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); string strProtected; @@ -93,7 +93,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey); } - var cmd = databaseConnector.DbCommand("TRUNCATE TABLE tblRoot"); + DbCommand cmd = databaseConnector.DbCommand("TRUNCATE TABLE tblRoot"); cmd.ExecuteNonQuery(); if (rootTreeNode != null) @@ -118,9 +118,9 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Sql try { // ANSI SQL way. Works in PostgreSQL, MSSQL, MySQL. - var database_name = Properties.OptionsDBsPage.Default.SQLDatabaseName; - var cmd = databaseConnector.DbCommand("select case when exists((select * from information_schema.tables where table_name = '" + tableName + "' and table_schema='"+ database_name + "')) then 1 else 0 end"); - var cmdResult = Convert.ToInt16(cmd.ExecuteScalar()); + string database_name = Properties.OptionsDBsPage.Default.SQLDatabaseName; + DbCommand cmd = databaseConnector.DbCommand("select case when exists((select * from information_schema.tables where table_name = '" + tableName + "' and table_schema='"+ database_name + "')) then 1 else 0 end"); + short cmdResult = Convert.ToInt16(cmd.ExecuteScalar()); exists = (cmdResult == 1); } catch diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer26.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer26.cs index 184d1a74..42a15cf1 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer26.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer26.cs @@ -34,7 +34,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public XElement Serialize(ConnectionInfo connectionInfo) { - var element = new XElement(XName.Get("Node", "")); + XElement element = new(XName.Get("Node", "")); SetElementAttributes(element, connectionInfo); SetInheritanceAttributes(element, connectionInfo); return element; @@ -42,7 +42,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private void SetElementAttributes(XContainer element, ConnectionInfo connectionInfo) { - var nodeAsContainer = connectionInfo as ContainerInfo; + ContainerInfo nodeAsContainer = connectionInfo as ContainerInfo; element.Add(new XAttribute("Name", connectionInfo.Name)); element.Add(new XAttribute("Type", connectionInfo.GetTreeNodeType().ToString())); if (nodeAsContainer != null) @@ -141,7 +141,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { if (_saveFilter.SaveInheritance) { - var inheritance = connectionInfo.Inheritance; + ConnectionInfoInheritance inheritance = connectionInfo.Inheritance; if (inheritance.CacheBitmaps) element.Add(new XAttribute("InheritCacheBitmaps", inheritance.CacheBitmaps.ToString().ToLowerInvariant())); diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs index 2a2d59f5..2c35b27b 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer27.cs @@ -30,7 +30,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public XElement Serialize(ConnectionInfo connectionInfo) { - var element = new XElement(XName.Get("Node", "")); + XElement element = new(XName.Get("Node", "")); SetElementAttributes(element, connectionInfo); SetInheritanceAttributes(element, connectionInfo); return element; @@ -38,7 +38,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private void SetElementAttributes(XContainer element, ConnectionInfo connectionInfo) { - var nodeAsContainer = connectionInfo as ContainerInfo; + ContainerInfo nodeAsContainer = connectionInfo as ContainerInfo; element.Add(new XAttribute("Name", connectionInfo.Name)); element.Add(new XAttribute("VmId", connectionInfo.VmId)); element.Add(new XAttribute("UseVmId", connectionInfo.UseVmId)); @@ -162,7 +162,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { if (_saveFilter.SaveInheritance) { - var inheritance = connectionInfo.Inheritance; + ConnectionInfoInheritance inheritance = connectionInfo.Inheritance; if (inheritance.CacheBitmaps) element.Add(new XAttribute("InheritCacheBitmaps", inheritance.CacheBitmaps.ToString().ToLowerInvariant())); diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer28.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer28.cs index 76f845ad..4fa111f9 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer28.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionNodeSerializer28.cs @@ -30,7 +30,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public XElement Serialize(ConnectionInfo connectionInfo) { - var element = new XElement(XName.Get("Node", "")); + XElement element = new(XName.Get("Node", "")); SetElementAttributes(element, connectionInfo); SetInheritanceAttributes(element, connectionInfo); return element; @@ -38,7 +38,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private void SetElementAttributes(XContainer element, ConnectionInfo connectionInfo) { - var nodeAsContainer = connectionInfo as ContainerInfo; + ContainerInfo nodeAsContainer = connectionInfo as ContainerInfo; element.Add(new XAttribute("Name", connectionInfo.Name)); element.Add(new XAttribute("VmId", connectionInfo.VmId)); element.Add(new XAttribute("UseVmId", connectionInfo.UseVmId)); @@ -163,7 +163,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { if (!_saveFilter.SaveInheritance) return; - var inheritance = connectionInfo.Inheritance; + ConnectionInfoInheritance inheritance = connectionInfo.Inheritance; if (inheritance.CacheBitmaps) element.Add(new XAttribute("InheritCacheBitmaps", inheritance.CacheBitmaps.ToString().ToLowerInvariant())); diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs index 9c6119b3..7556ef31 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs @@ -16,12 +16,12 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml SaveFilter saveFilter = null, bool useFullEncryption = false) { - var encryptionKey = connectionTreeModel + System.Security.SecureString encryptionKey = connectionTreeModel .RootNodes.OfType() .First().PasswordString .ConvertToSecureString(); - var connectionNodeSerializer = new XmlConnectionNodeSerializer28( + XmlConnectionNodeSerializer28 connectionNodeSerializer = new( cryptographyProvider, encryptionKey, saveFilter ?? new SaveFilter()); diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs index bb51fac8..2a19f4d4 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs @@ -23,7 +23,7 @@ using System.Runtime.Versioning; namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { [SupportedOSPlatform("windows")] - public class XmlConnectionsDeserializer : IDeserializer + public class XmlConnectionsDeserializer(Func> authenticationRequestor = null) : IDeserializer { private XmlDocument _xmlDocument; private double _confVersion; @@ -32,12 +32,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private const double MaxSupportedConfVersion = 2.8; private readonly RootNodeInfo _rootNodeInfo = new(RootNodeType.Connection); - public Func> AuthenticationRequestor { get; set; } - - public XmlConnectionsDeserializer(Func> authenticationRequestor = null) - { - AuthenticationRequestor = authenticationRequestor; - } + public Func> AuthenticationRequestor { get; set; } = authenticationRequestor; public ConnectionTreeModel Deserialize(string xml) { @@ -52,16 +47,16 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml LoadXmlConnectionData(xml); ValidateConnectionFileVersion(); - var rootXmlElement = _xmlDocument.DocumentElement; + XmlElement rootXmlElement = _xmlDocument.DocumentElement; InitializeRootNode(rootXmlElement); CreateDecryptor(_rootNodeInfo, rootXmlElement); - var connectionTreeModel = new ConnectionTreeModel(); + ConnectionTreeModel connectionTreeModel = new(); connectionTreeModel.AddRootNode(_rootNodeInfo); if (_confVersion > 1.3) { - var protectedString = _xmlDocument.DocumentElement?.Attributes["Protected"]?.Value; + string protectedString = _xmlDocument.DocumentElement?.Attributes["Protected"]?.Value; if (!_decryptor.ConnectionsFileIsAuthentic(protectedString, _rootNodeInfo.PasswordString.ConvertToSecureString())) { return null; @@ -70,10 +65,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml if (_confVersion >= 2.6) { - var fullFileEncryptionValue = rootXmlElement.GetAttributeAsBool("FullFileEncryption"); + bool fullFileEncryptionValue = rootXmlElement.GetAttributeAsBool("FullFileEncryption"); if (fullFileEncryptionValue) { - var decryptedContent = _decryptor.Decrypt(rootXmlElement.InnerText); + string decryptedContent = _decryptor.Decrypt(rootXmlElement.InnerText); rootXmlElement.InnerXml = decryptedContent; } } @@ -118,28 +113,14 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private void ShowIncompatibleVersionDialogBox() { - CTaskDialog.ShowTaskDialogBox( - FrmMain.Default, - Application.ProductName, - "Incompatible connection file format", - $"The format of this connection file is not supported. Please upgrade to a newer version of {Application.ProductName}.", - string - .Format("{1}{0}File Format Version: {2}{0}Highest Supported Version: {3}", - Environment.NewLine, - ConnectionFileName, _confVersion, MaxSupportedConfVersion), - "", - "", - "", - "", - ETaskDialogButtons.Ok, - ESysIcons.Error, - ESysIcons.Error - ); + CTaskDialog.ShowTaskDialogBox(FrmMain.Default, Application.ProductName, "Incompatible connection file format", $"The format of this connection file is not supported. Please upgrade to a newer version of {Application.ProductName}.", + string .Format("{1}{0}File Format Version: {2}{0}Highest Supported Version: {3}", Environment.NewLine, ConnectionFileName, _confVersion, MaxSupportedConfVersion), + "", "", "", "", ETaskDialogButtons.Ok, ESysIcons.Error, ESysIcons.Error); } private void InitializeRootNode(XmlElement connectionsRootElement) { - var rootNodeName = connectionsRootElement?.Attributes["Name"]?.Value.Trim(); + string rootNodeName = connectionsRootElement?.Attributes["Name"]?.Value.Trim(); _rootNodeInfo.Name = rootNodeName; } @@ -147,9 +128,9 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { if (_confVersion >= 2.6) { - var engine = connectionsRootElement.GetAttributeAsEnum("EncryptionEngine"); - var mode = connectionsRootElement.GetAttributeAsEnum("BlockCipherMode"); - var keyDerivationIterations = connectionsRootElement.GetAttributeAsInt("KdfIterations"); + BlockCipherEngines engine = connectionsRootElement.GetAttributeAsEnum("EncryptionEngine"); + BlockCipherModes mode = connectionsRootElement.GetAttributeAsEnum("BlockCipherMode"); + int keyDerivationIterations = connectionsRootElement.GetAttributeAsInt("KdfIterations"); _decryptor = new XmlConnectionsDecryptor(engine, mode, rootNodeInfo) { @@ -173,17 +154,17 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml if (!parentXmlNode.HasChildNodes) return; foreach (XmlNode xmlNode in parentXmlNode.ChildNodes) { - var nodeType = xmlNode.GetAttributeAsEnum("Type", TreeNodeType.Connection); + TreeNodeType nodeType = xmlNode.GetAttributeAsEnum("Type", TreeNodeType.Connection); // ReSharper disable once SwitchStatementMissingSomeCases switch (nodeType) { case TreeNodeType.Connection: - var connectionInfo = GetConnectionInfoFromXml(xmlNode); + ConnectionInfo connectionInfo = GetConnectionInfoFromXml(xmlNode); parentContainer.AddChild(connectionInfo); break; case TreeNodeType.Container: - var containerInfo = new ContainerInfo(); + ContainerInfo containerInfo = new(); if (_confVersion >= 0.9) containerInfo.CopyFrom(GetConnectionInfoFromXml(xmlNode)); @@ -210,10 +191,10 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml if (xmlnode?.Attributes == null) return null; - var connectionId = xmlnode.GetAttributeAsString("Id"); + string connectionId = xmlnode.GetAttributeAsString("Id"); if (string.IsNullOrWhiteSpace(connectionId)) connectionId = Guid.NewGuid().ToString(); - var connectionInfo = new ConnectionInfo(connectionId); + ConnectionInfo connectionInfo = new(connectionId); try { diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs index 50569261..1444ee8e 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs @@ -26,19 +26,19 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public XDocument CompileDocument(ConnectionTreeModel connectionTreeModel, bool fullFileEncryption) { - var rootNodeInfo = GetRootNodeFromConnectionTreeModel(connectionTreeModel); + RootNodeInfo rootNodeInfo = GetRootNodeFromConnectionTreeModel(connectionTreeModel); return CompileDocument(rootNodeInfo, fullFileEncryption); } public XDocument CompileDocument(ConnectionInfo serializationTarget, bool fullFileEncryption) { - var rootNodeInfo = GetRootNodeFromConnectionInfo(serializationTarget); + RootNodeInfo rootNodeInfo = GetRootNodeFromConnectionInfo(serializationTarget); _encryptionKey = rootNodeInfo.PasswordString.ConvertToSecureString(); - var rootElement = CompileRootNode(rootNodeInfo, fullFileEncryption); + XElement rootElement = CompileRootNode(rootNodeInfo, fullFileEncryption); CompileRecursive(serializationTarget, rootElement); - var xmlDeclaration = new XDeclaration("1.0", "utf-8", null); - var xmlDocument = new XDocument(xmlDeclaration, rootElement); + XDeclaration xmlDeclaration = new("1.0", "utf-8", null); + XDocument xmlDocument = new(xmlDeclaration, rootElement); if (fullFileEncryption) xmlDocument = new XmlConnectionsDocumentEncryptor(_cryptographyProvider).EncryptDocument(xmlDocument, _encryptionKey); return xmlDocument; @@ -46,7 +46,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private void CompileRecursive(ConnectionInfo serializationTarget, XContainer parentElement) { - var newElement = parentElement; + XContainer newElement = parentElement; if (serializationTarget is not RootNodeInfo) { newElement = CompileConnectionInfoNode(serializationTarget); @@ -54,7 +54,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml } if (serializationTarget is not ContainerInfo serializationTargetAsContainer) return; - foreach (var child in serializationTargetAsContainer.Children.ToArray()) + foreach (ConnectionInfo child in serializationTargetAsContainer.Children.ToArray()) CompileRecursive(child, newElement); } @@ -74,7 +74,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private XElement CompileRootNode(RootNodeInfo rootNodeInfo, bool fullFileEncryption) { - var rootNodeSerializer = new XmlRootNodeSerializer(); + XmlRootNodeSerializer rootNodeSerializer = new(); return rootNodeSerializer.SerializeRootNodeInfo(rootNodeInfo, _cryptographyProvider, _connectionNodeSerializer.Version, fullFileEncryption); } diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentEncryptor.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentEncryptor.cs index c254a674..fbdcab1a 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentEncryptor.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentEncryptor.cs @@ -15,30 +15,30 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public XDocument EncryptDocument(XDocument documentToEncrypt, SecureString encryptionKey) { - var contentToEncrypt = GetContentToEncrypt(documentToEncrypt.Root); - var encryptedContent = _cryptographyProvider.Encrypt(contentToEncrypt, encryptionKey); - var encryptedDocument = ReplaceInnerXml(documentToEncrypt, encryptedContent); + string contentToEncrypt = GetContentToEncrypt(documentToEncrypt.Root); + string encryptedContent = _cryptographyProvider.Encrypt(contentToEncrypt, encryptionKey); + XDocument encryptedDocument = ReplaceInnerXml(documentToEncrypt, encryptedContent); return encryptedDocument; } private string GetContentToEncrypt(XNode element) { - var reader = element.CreateReader(); + System.Xml.XmlReader reader = element.CreateReader(); reader.MoveToContent(); return reader.ReadInnerXml(); } private XDocument ReplaceInnerXml(XDocument originalDocument, string newContent) { - var newRootElement = ShallowCloneRootNode(originalDocument.Root); + XElement newRootElement = ShallowCloneRootNode(originalDocument.Root); newRootElement.SetValue(newContent); return new XDocument(newRootElement); } private XElement ShallowCloneRootNode(XElement originalElement) { - var newElement = new XElement(originalElement.Name); - foreach (var attribute in originalElement.Attributes()) + XElement newElement = new(originalElement.Name); + foreach (XAttribute attribute in originalElement.Attributes()) newElement.Add(new XAttribute(attribute)); return newElement; } diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsSerializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsSerializer.cs index 94bdd1c1..7823e091 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsSerializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsSerializer.cs @@ -32,7 +32,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public string Serialize(ConnectionTreeModel connectionTreeModel) { - var rootNode = (RootNodeInfo)connectionTreeModel.RootNodes.First(node => node is RootNodeInfo); + RootNodeInfo rootNode = (RootNodeInfo)connectionTreeModel.RootNodes.First(node => node is RootNodeInfo); return SerializeConnectionsData(rootNode); } @@ -43,12 +43,12 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private string SerializeConnectionsData(ConnectionInfo serializationTarget) { - var xml = ""; + string xml = ""; try { - var documentCompiler = - new XmlConnectionsDocumentCompiler(_cryptographyProvider, _connectionNodeSerializer); - var xmlDocument = documentCompiler.CompileDocument(serializationTarget, UseFullEncryption); + XmlConnectionsDocumentCompiler documentCompiler = + new(_cryptographyProvider, _connectionNodeSerializer); + XDocument xmlDocument = documentCompiler.CompileDocument(serializationTarget, UseFullEncryption); xml = WriteXmlToString(xmlDocument); } catch (Exception ex) @@ -62,14 +62,13 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private static string WriteXmlToString(XNode xmlDocument) { string xmlString; - var xmlWriterSettings = new XmlWriterSettings - {Indent = true, IndentChars = " ", Encoding = Encoding.UTF8}; - var memoryStream = new MemoryStream(); - using (var xmlTextWriter = XmlWriter.Create(memoryStream, xmlWriterSettings)) + XmlWriterSettings xmlWriterSettings = new() { Indent = true, IndentChars = " ", Encoding = Encoding.UTF8}; + MemoryStream memoryStream = new(); + using (XmlWriter xmlTextWriter = XmlWriter.Create(memoryStream, xmlWriterSettings)) { xmlDocument.WriteTo(xmlTextWriter); xmlTextWriter.Flush(); - var streamReader = new StreamReader(memoryStream, Encoding.UTF8, true); + StreamReader streamReader = new(memoryStream, Encoding.UTF8, true); memoryStream.Seek(0, SeekOrigin.Begin); xmlString = streamReader.ReadToEnd(); } diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs index 55e2411a..1ea6b415 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlExtensions.cs @@ -7,28 +7,28 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml { public static string GetAttributeAsString(this XmlNode xmlNode, string attribute, string defaultValue = "") { - var value = xmlNode?.Attributes?[attribute]?.Value; + string value = xmlNode?.Attributes?[attribute]?.Value; return value ?? defaultValue; } public static bool GetAttributeAsBool(this XmlNode xmlNode, string attribute, bool defaultValue = false) { - var value = xmlNode?.Attributes?[attribute]?.Value; + string value = xmlNode?.Attributes?[attribute]?.Value; if (string.IsNullOrWhiteSpace(value)) return defaultValue; - return bool.TryParse(value, out var valueAsBool) + return bool.TryParse(value, out bool valueAsBool) ? valueAsBool : defaultValue; } public static int GetAttributeAsInt(this XmlNode xmlNode, string attribute, int defaultValue = 0) { - var value = xmlNode?.Attributes?[attribute]?.Value; + string value = xmlNode?.Attributes?[attribute]?.Value; if (string.IsNullOrWhiteSpace(value)) return defaultValue; - return int.TryParse(value, out var valueAsBool) + return int.TryParse(value, out int valueAsBool) ? valueAsBool : defaultValue; } @@ -36,11 +36,11 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public static T GetAttributeAsEnum(this XmlNode xmlNode, string attribute, T defaultValue = default) where T : struct { - var value = xmlNode?.Attributes?[attribute]?.Value; + string value = xmlNode?.Attributes?[attribute]?.Value; if (string.IsNullOrWhiteSpace(value)) return defaultValue; - return Enum.TryParse(value, true, out var valueAsEnum) + return Enum.TryParse(value, true, out T valueAsEnum) ? valueAsEnum : defaultValue; } diff --git a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs index 8c6e4d39..12dc9415 100644 --- a/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs +++ b/mRemoteNG/Config/Serializers/ConnectionSerializers/Xml/XmlRootNodeSerializer.cs @@ -12,7 +12,7 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml public XElement SerializeRootNodeInfo(RootNodeInfo rootNodeInfo, ICryptographyProvider cryptographyProvider, Version version, bool fullFileEncryption = false) { XNamespace xmlNamespace = "http://mremoteng.org"; - var element = new XElement(xmlNamespace + "Connections"); + XElement element = new(xmlNamespace + "Connections"); element.Add(new XAttribute(XNamespace.Xmlns + "mrng", xmlNamespace)); element.Add(new XAttribute(XName.Get("Name"), rootNodeInfo.Name)); element.Add(new XAttribute(XName.Get("Export"), "false")); @@ -27,9 +27,9 @@ namespace mRemoteNG.Config.Serializers.ConnectionSerializers.Xml private XAttribute CreateProtectedAttribute(RootNodeInfo rootNodeInfo, ICryptographyProvider cryptographyProvider) { - var attribute = new XAttribute(XName.Get("Protected"), ""); - var plainText = rootNodeInfo.Password ? "ThisIsProtected" : "ThisIsNotProtected"; - var encryptionPassword = rootNodeInfo.PasswordString.ConvertToSecureString(); + XAttribute attribute = new(XName.Get("Protected"), ""); + string plainText = rootNodeInfo.Password ? "ThisIsProtected" : "ThisIsNotProtected"; + System.Security.SecureString encryptionPassword = rootNodeInfo.PasswordString.ConvertToSecureString(); attribute.Value = cryptographyProvider.Encrypt(plainText, encryptionPassword); return attribute; } diff --git a/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs b/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs index d97d2789..077307e8 100644 --- a/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs +++ b/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs @@ -30,9 +30,9 @@ namespace mRemoteNG.Config.Serializers.CredentialProviderSerializer public IEnumerable Deserialize(string xml) { if (string.IsNullOrEmpty(xml)) return new ICredentialRepository[0]; - var xdoc = XDocument.Parse(xml); - var repoEntries = xdoc.Descendants("CredentialRepository"); - var xmlRepoFactory = new XmlCredentialRepositoryFactory(_serializer, _deserializer); + XDocument xdoc = XDocument.Parse(xml); + IEnumerable repoEntries = xdoc.Descendants("CredentialRepository"); + XmlCredentialRepositoryFactory xmlRepoFactory = new(_serializer, _deserializer); return repoEntries.Select(xmlRepoFactory.Build); } } diff --git a/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListSerializer.cs b/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListSerializer.cs index ea755999..d1ee7009 100644 --- a/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListSerializer.cs +++ b/mRemoteNG/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListSerializer.cs @@ -11,8 +11,8 @@ namespace mRemoteNG.Config.Serializers.CredentialProviderSerializer { public string Serialize(IEnumerable credentialProviderCatalog) { - var xmlDocument = new XDocument(new XDeclaration("1.0", "utf-8", null)); - var rootElement = new XElement("CredentialRepositories", + XDocument xmlDocument = new(new XDeclaration("1.0", "utf-8", null)); + XElement rootElement = new("CredentialRepositories", from provider in credentialProviderCatalog select new XElement("CredentialRepository", new XAttribute("Id", provider.Config.Id), @@ -22,8 +22,8 @@ namespace mRemoteNG.Config.Serializers.CredentialProviderSerializer ) ); xmlDocument.Add(rootElement); - var declaration = xmlDocument.Declaration.ToString(); - var documentBody = xmlDocument.ToString(); + string declaration = xmlDocument.Declaration.ToString(); + string documentBody = xmlDocument.ToString(); return string.Concat(declaration, Environment.NewLine, documentBody); } } diff --git a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordDecryptorDecorator.cs b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordDecryptorDecorator.cs index 73e13d60..540be8cf 100644 --- a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordDecryptorDecorator.cs +++ b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordDecryptorDecorator.cs @@ -25,21 +25,21 @@ namespace mRemoteNG.Config.Serializers.CredentialSerializer public IEnumerable Deserialize(string xml, SecureString key) { - var decryptedXml = DecryptPasswords(xml, key); + string decryptedXml = DecryptPasswords(xml, key); return _baseDeserializer.Deserialize(decryptedXml); } private string DecryptPasswords(string xml, SecureString key) { if (string.IsNullOrEmpty(xml)) return xml; - var xdoc = XDocument.Parse(xml); - var cryptoProvider = new CryptoProviderFactoryFromXml(xdoc.Root).Build(); + XDocument xdoc = XDocument.Parse(xml); + ICryptographyProvider cryptoProvider = new CryptoProviderFactoryFromXml(xdoc.Root).Build(); DecryptAuthHeader(xdoc.Root, cryptoProvider, key); - foreach (var credentialElement in xdoc.Descendants()) + foreach (XElement credentialElement in xdoc.Descendants()) { - var passwordAttribute = credentialElement.Attribute("Password"); + XAttribute passwordAttribute = credentialElement.Attribute("Password"); if (passwordAttribute == null) continue; - var decryptedPassword = cryptoProvider.Decrypt(passwordAttribute.Value, key); + string decryptedPassword = cryptoProvider.Decrypt(passwordAttribute.Value, key); passwordAttribute.SetValue(decryptedPassword); } @@ -48,7 +48,7 @@ namespace mRemoteNG.Config.Serializers.CredentialSerializer private void DecryptAuthHeader(XElement rootElement, ICryptographyProvider cryptographyProvider, SecureString key) { - var authAttribute = rootElement.Attribute("Auth"); + XAttribute authAttribute = rootElement.Attribute("Auth"); if (authAttribute == null) throw new EncryptionException("Could not find Auth header in the XML repository root element."); cryptographyProvider.Decrypt(authAttribute.Value, key); diff --git a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordEncryptorDecorator.cs b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordEncryptorDecorator.cs index 1719e94d..700ce535 100644 --- a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordEncryptorDecorator.cs +++ b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialPasswordEncryptorDecorator.cs @@ -29,20 +29,20 @@ namespace mRemoteNG.Config.Serializers.CredentialSerializer if (credentialRecords == null) throw new ArgumentNullException(nameof(credentialRecords)); - var baseReturn = _baseSerializer.Serialize(credentialRecords); - var encryptedReturn = EncryptPasswordAttributes(baseReturn, key); + string baseReturn = _baseSerializer.Serialize(credentialRecords); + string encryptedReturn = EncryptPasswordAttributes(baseReturn, key); return encryptedReturn; } private string EncryptPasswordAttributes(string xml, SecureString encryptionKey) { - var xdoc = XDocument.Parse(xml); + XDocument xdoc = XDocument.Parse(xml); SetEncryptionAttributes(xdoc, encryptionKey); - foreach (var element in xdoc.Descendants()) + foreach (XElement element in xdoc.Descendants()) { - var passwordAttribute = element.Attribute("Password"); + XAttribute passwordAttribute = element.Attribute("Password"); if (passwordAttribute == null) continue; - var encryptedPassword = _cryptographyProvider.Encrypt(passwordAttribute.Value, encryptionKey); + string encryptedPassword = _cryptographyProvider.Encrypt(passwordAttribute.Value, encryptionKey); passwordAttribute.Value = encryptedPassword; } diff --git a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs index a2a45ce1..cd4d521b 100644 --- a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs +++ b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordDeserializer.cs @@ -14,11 +14,11 @@ namespace mRemoteNG.Config.Serializers.CredentialSerializer public IEnumerable Deserialize(string xml) { if (string.IsNullOrEmpty(xml)) return new ICredentialRecord[0]; - var xdoc = XDocument.Parse(xml); - var rootElement = xdoc.Root; + XDocument xdoc = XDocument.Parse(xml); + XElement rootElement = xdoc.Root; ValidateSchemaVersion(rootElement); - var credentials = from element in xdoc.Descendants("Credential") + IEnumerable credentials = from element in xdoc.Descendants("Credential") select new CredentialRecord(Guid.Parse(element.Attribute("Id")?.Value ?? Guid.NewGuid().ToString())) { @@ -32,7 +32,7 @@ namespace mRemoteNG.Config.Serializers.CredentialSerializer private void ValidateSchemaVersion(XElement rootElement) { - var docSchemaVersion = rootElement?.Attribute("SchemaVersion")?.Value; + string docSchemaVersion = rootElement?.Attribute("SchemaVersion")?.Value; if (docSchemaVersion != SchemaVersion) throw new Exception($"The schema version of this document is not supported by this class. Document Version: {docSchemaVersion} Supported Version: {SchemaVersion}"); } diff --git a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordSerializer.cs b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordSerializer.cs index 77319073..7a21c3a8 100644 --- a/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordSerializer.cs +++ b/mRemoteNG/Config/Serializers/CredentialSerializer/XmlCredentialRecordSerializer.cs @@ -13,7 +13,7 @@ namespace mRemoteNG.Config.Serializers.CredentialSerializer public string Serialize(IEnumerable credentialRecords) { - var xdoc = new XDocument( + XDocument xdoc = new( new XElement("Credentials", new XAttribute("SchemaVersion", Version.ToString(2)), from r in credentialRecords diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs index 345a4610..d7d53824 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/ActiveDirectoryDeserializer.cs @@ -28,8 +28,8 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers public ConnectionTreeModel Deserialize() { - var connectionTreeModel = new ConnectionTreeModel(); - var root = new RootNodeInfo(RootNodeType.Connection); + ConnectionTreeModel connectionTreeModel = new(); + RootNodeInfo root = new(RootNodeType.Connection); connectionTreeModel.AddRootNode(root); ImportContainers(_ldapPath, root); @@ -39,10 +39,10 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private void ImportContainers(string ldapPath, ContainerInfo parentContainer) { - var match = Regex.Match(ldapPath, "ou=([^,]*)", RegexOptions.IgnoreCase); - var name = match.Success ? match.Groups[1].Captures[0].Value : Language.ActiveDirectory; + Match match = Regex.Match(ldapPath, "ou=([^,]*)", RegexOptions.IgnoreCase); + string name = match.Success ? match.Groups[1].Captures[0].Value : Language.ActiveDirectory; - var newContainer = new ContainerInfo {Name = name}; + ContainerInfo newContainer = new() { Name = name}; parentContainer.AddChild(newContainer); ImportComputers(ldapPath, newContainer); @@ -53,17 +53,17 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers try { const string ldapFilter = "(|(objectClass=computer)(objectClass=organizationalUnit))"; - using (var ldapSearcher = new DirectorySearcher()) + using (DirectorySearcher ldapSearcher = new()) { ldapSearcher.SearchRoot = new DirectoryEntry(ldapPath); ldapSearcher.Filter = ldapFilter; ldapSearcher.SearchScope = SearchScope.OneLevel; ldapSearcher.PropertiesToLoad.AddRange(new[] {"securityEquals", "cn", "objectClass"}); - var ldapResults = ldapSearcher.FindAll(); + SearchResultCollection ldapResults = ldapSearcher.FindAll(); foreach (SearchResult ldapResult in ldapResults) { - using (var directoryEntry = ldapResult.GetDirectoryEntry()) + using (DirectoryEntry directoryEntry = ldapResult.GetDirectoryEntry()) { if (directoryEntry.Properties["objectClass"].Contains("organizationalUnit")) { @@ -88,11 +88,11 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private void DeserializeConnection(DirectoryEntry directoryEntry, ContainerInfo parentContainer) { - var displayName = Convert.ToString(directoryEntry.Properties["cn"].Value); - var description = Convert.ToString(directoryEntry.Properties["Description"].Value); - var hostName = Convert.ToString(directoryEntry.Properties["dNSHostName"].Value); + string displayName = Convert.ToString(directoryEntry.Properties["cn"].Value); + string description = Convert.ToString(directoryEntry.Properties["Description"].Value); + string hostName = Convert.ToString(directoryEntry.Properties["dNSHostName"].Value); - var newConnectionInfo = new ConnectionInfo + ConnectionInfo newConnectionInfo = new() { Name = displayName, Hostname = hostName, diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs index 0628ce6f..2fce4105 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/PortScanDeserializer.cs @@ -21,11 +21,11 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers public ConnectionTreeModel Deserialize(IEnumerable scannedHosts) { - var connectionTreeModel = new ConnectionTreeModel(); - var root = new RootNodeInfo(RootNodeType.Connection); + ConnectionTreeModel connectionTreeModel = new(); + RootNodeInfo root = new(RootNodeType.Connection); connectionTreeModel.AddRootNode(root); - foreach (var host in scannedHosts) + foreach (ScanHost host in scannedHosts) ImportScannedHost(host, root); return connectionTreeModel; @@ -33,8 +33,8 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private void ImportScannedHost(ScanHost host, ContainerInfo parentContainer) { - var finalProtocol = default(ProtocolType); - var protocolValid = true; + ProtocolType finalProtocol = default(ProtocolType); + bool protocolValid = true; switch (_targetProtocolType) { @@ -72,7 +72,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers } if (!protocolValid) return; - var newConnectionInfo = new ConnectionInfo + ConnectionInfo newConnectionInfo = new() { Name = host.HostNameWithoutDomain, Hostname = host.HostName, diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/PuttyConnectionManagerDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/PuttyConnectionManagerDeserializer.cs index bb55a58b..495c370c 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/PuttyConnectionManagerDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/PuttyConnectionManagerDeserializer.cs @@ -15,16 +15,16 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers { public ConnectionTreeModel Deserialize(string puttycmConnectionsXml) { - var connectionTreeModel = new ConnectionTreeModel(); - var root = new RootNodeInfo(RootNodeType.Connection); + ConnectionTreeModel connectionTreeModel = new(); + RootNodeInfo root = new(RootNodeType.Connection); connectionTreeModel.AddRootNode(root); - var xmlDocument = new XmlDocument(); + XmlDocument xmlDocument = new(); xmlDocument.LoadXml(puttycmConnectionsXml); - var configurationNode = xmlDocument.SelectSingleNode("/configuration"); + XmlNode configurationNode = xmlDocument.SelectSingleNode("/configuration"); - var rootNodes = configurationNode?.SelectNodes("./root"); + XmlNodeList rootNodes = configurationNode?.SelectNodes("./root"); if (rootNodes == null) return connectionTreeModel; foreach (XmlNode rootNode in rootNodes) { @@ -38,9 +38,9 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers { VerifyNodeType(xmlNode); - var newContainer = ImportContainer(xmlNode, parentContainer); + ContainerInfo newContainer = ImportContainer(xmlNode, parentContainer); - var childNodes = xmlNode.SelectNodes("./*"); + XmlNodeList childNodes = xmlNode.SelectNodes("./*"); if (childNodes == null) return; foreach (XmlNode childNode in childNodes) { @@ -60,7 +60,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private void VerifyNodeType(XmlNode xmlNode) { - var xmlNodeType = xmlNode?.Attributes?["type"].Value; + string xmlNodeType = xmlNode?.Attributes?["type"].Value; switch (xmlNode?.Name) { case "root": @@ -86,7 +86,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private ContainerInfo ImportContainer(XmlNode containerNode, ContainerInfo parentContainer) { - var containerInfo = new ContainerInfo + ContainerInfo containerInfo = new() { Name = containerNode.Attributes?["name"].Value, IsExpanded = bool.Parse(containerNode.Attributes?["expanded"].InnerText ?? "false") @@ -97,22 +97,22 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private void ImportConnection(XmlNode connectionNode, ContainerInfo parentContainer) { - var connectionNodeType = connectionNode.Attributes?["type"].Value; + string connectionNodeType = connectionNode.Attributes?["type"].Value; if (string.Compare(connectionNodeType, "PuTTY", StringComparison.OrdinalIgnoreCase) != 0) throw (new FileFormatException($"Unrecognized connection node type ({connectionNodeType}).")); - var connectionInfo = ConnectionInfoFromXml(connectionNode); + ConnectionInfo connectionInfo = ConnectionInfoFromXml(connectionNode); parentContainer.AddChild(connectionInfo); } private ConnectionInfo ConnectionInfoFromXml(XmlNode xmlNode) { - var connectionInfoNode = xmlNode.SelectSingleNode("./connection_info"); + XmlNode connectionInfoNode = xmlNode.SelectSingleNode("./connection_info"); - var name = connectionInfoNode?.SelectSingleNode("./name")?.InnerText; - var connectionInfo = new ConnectionInfo {Name = name}; + string name = connectionInfoNode?.SelectSingleNode("./name")?.InnerText; + ConnectionInfo connectionInfo = new() { Name = name}; - var protocol = connectionInfoNode?.SelectSingleNode("./protocol")?.InnerText; + string protocol = connectionInfoNode?.SelectSingleNode("./protocol")?.InnerText; switch (protocol?.ToLowerInvariant()) { case "telnet": @@ -131,7 +131,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers // ./commandline connectionInfo.Description = connectionInfoNode.SelectSingleNode("./description")?.InnerText; - var loginNode = xmlNode.SelectSingleNode("./login"); + XmlNode loginNode = xmlNode.SelectSingleNode("./login"); connectionInfo.Username = loginNode?.SelectSingleNode("login")?.InnerText; connectionInfo.Password = loginNode?.SelectSingleNode("password")?.InnerText; // ./prompt diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs index 95c9734f..be3950fe 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs @@ -14,20 +14,20 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers public ConnectionTreeModel Deserialize(string rdcFileContent) { - var connectionTreeModel = new ConnectionTreeModel(); - var root = new RootNodeInfo(RootNodeType.Connection); + ConnectionTreeModel connectionTreeModel = new(); + RootNodeInfo root = new(RootNodeType.Connection); connectionTreeModel.AddRootNode(root); - var connectionInfo = new ConnectionInfo(); - foreach (var line in rdcFileContent.Split(Environment.NewLine.ToCharArray())) + ConnectionInfo connectionInfo = new(); + foreach (string line in rdcFileContent.Split(Environment.NewLine.ToCharArray())) { - var parts = line.Split(new[] { ':' }, 3); + string[] parts = line.Split(new[] { ':' }, 3); if (parts.Length < 3) { continue; } - var key = parts[0].Trim(); - var value = parts[2].Trim(); + string key = parts[0].Trim(); + string value = parts[2].Trim(); SetConnectionInfoParameter(connectionInfo, key, value); } @@ -43,7 +43,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers switch (key.ToLower()) { case "full address": - var uri = new Uri("dummyscheme" + Uri.SchemeDelimiter + value); + Uri uri = new("dummyscheme" + Uri.SchemeDelimiter + value); if (!string.IsNullOrEmpty(uri.Host)) connectionInfo.Hostname = uri.Host; if (uri.Port != -1) diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs index 45af0013..e6c56970 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs @@ -22,18 +22,18 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers public ConnectionTreeModel Deserialize(string rdcmConnectionsXml) { - var connectionTreeModel = new ConnectionTreeModel(); - var root = new RootNodeInfo(RootNodeType.Connection); + ConnectionTreeModel connectionTreeModel = new(); + RootNodeInfo root = new(RootNodeType.Connection); - var xmlDocument = new XmlDocument(); + XmlDocument xmlDocument = new(); xmlDocument.LoadXml(rdcmConnectionsXml); - var rdcManNode = xmlDocument.SelectSingleNode("/RDCMan"); + XmlNode rdcManNode = xmlDocument.SelectSingleNode("/RDCMan"); VerifySchemaVersion(rdcManNode); VerifyFileVersion(rdcManNode); - var fileNode = rdcManNode?.SelectSingleNode("./file"); + XmlNode fileNode = rdcManNode?.SelectSingleNode("./file"); ImportFileOrGroup(fileNode, root); connectionTreeModel.AddRootNode(root); @@ -42,7 +42,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private static void VerifySchemaVersion(XmlNode rdcManNode) { - if (!int.TryParse(rdcManNode?.Attributes?["schemaVersion"]?.Value, out var version)) + if (!int.TryParse(rdcManNode?.Attributes?["schemaVersion"]?.Value, out int version)) throw new FileFormatException("Could not find schema version attribute."); if (version != 1 && version != 3) @@ -55,10 +55,10 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private static void VerifyFileVersion(XmlNode rdcManNode) { - var versionAttribute = rdcManNode?.Attributes?["programVersion"]?.Value; + string versionAttribute = rdcManNode?.Attributes?["programVersion"]?.Value; if (versionAttribute != null) { - var version = new Version(versionAttribute); + Version version = new(versionAttribute); if (!(version == new Version(2, 7)) && !(version == new Version(2, 83))) { throw new FileFormatException($"Unsupported file version ({version})."); @@ -66,10 +66,10 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers } else { - var versionNode = rdcManNode?.SelectSingleNode("./version")?.InnerText; + string versionNode = rdcManNode?.SelectSingleNode("./version")?.InnerText; if (versionNode != null) { - var version = new Version(versionNode); + Version version = new(versionNode); if (!(version == new Version(2, 2))) { throw new FileFormatException($"Unsupported file version ({version})."); @@ -84,9 +84,9 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private static void ImportFileOrGroup(XmlNode xmlNode, ContainerInfo parentContainer) { - var newContainer = ImportContainer(xmlNode, parentContainer); + ContainerInfo newContainer = ImportContainer(xmlNode, parentContainer); - var childNodes = xmlNode.SelectNodes("./group|./server"); + XmlNodeList childNodes = xmlNode.SelectNodes("./group|./server"); if (childNodes == null) return; foreach (XmlNode childNode in childNodes) { @@ -111,8 +111,8 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers containerPropertiesNode = containerPropertiesNode.SelectSingleNode("./properties"); } - var newContainer = new ContainerInfo(); - var connectionInfo = ConnectionInfoFromXml(containerPropertiesNode); + ContainerInfo newContainer = new(); + ConnectionInfo connectionInfo = ConnectionInfoFromXml(containerPropertiesNode); newContainer.CopyFrom(connectionInfo); if (_schemaVersion == 3) @@ -121,7 +121,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers containerPropertiesNode = containerPropertiesNode.SelectSingleNode("./properties"); } newContainer.Name = containerPropertiesNode?.SelectSingleNode("./name")?.InnerText ?? Language.NewFolder; - if (bool.TryParse(containerPropertiesNode?.SelectSingleNode("./expanded")?.InnerText, out var expanded)) + if (bool.TryParse(containerPropertiesNode?.SelectSingleNode("./expanded")?.InnerText, out bool expanded)) newContainer.IsExpanded = expanded; parentContainer.AddChild(newContainer); return newContainer; @@ -129,15 +129,15 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private static void ImportServer(XmlNode serverNode, ContainerInfo parentContainer) { - var newConnectionInfo = ConnectionInfoFromXml(serverNode); + ConnectionInfo newConnectionInfo = ConnectionInfoFromXml(serverNode); parentContainer.AddChild(newConnectionInfo); } private static ConnectionInfo ConnectionInfoFromXml(XmlNode xmlNode) { - var connectionInfo = new ConnectionInfo {Protocol = ProtocolType.RDP}; + ConnectionInfo connectionInfo = new() { Protocol = ProtocolType.RDP}; - var propertiesNode = xmlNode.SelectSingleNode("./properties"); + XmlNode propertiesNode = xmlNode.SelectSingleNode("./properties"); if (_schemaVersion == 1) propertiesNode = xmlNode; // Version 2.2 defines the container name at the root instead @@ -145,7 +145,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Hostname = propertiesNode?.SelectSingleNode("./name")?.InnerText ?? ""; - var connectionDisplayName = propertiesNode?.SelectSingleNode("./displayName")?.InnerText; + string connectionDisplayName = propertiesNode?.SelectSingleNode("./displayName")?.InnerText; connectionInfo.Name = !string.IsNullOrWhiteSpace(connectionDisplayName) ? connectionDisplayName : string.IsNullOrWhiteSpace(connectionInfo.Hostname) @@ -154,12 +154,12 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Description = propertiesNode?.SelectSingleNode("./comment")?.InnerText ?? string.Empty; - var logonCredentialsNode = xmlNode.SelectSingleNode("./logonCredentials"); + XmlNode logonCredentialsNode = xmlNode.SelectSingleNode("./logonCredentials"); if (logonCredentialsNode?.Attributes?["inherit"]?.Value == "None") { connectionInfo.Username = logonCredentialsNode.SelectSingleNode("userName")?.InnerText ?? string.Empty; - var passwordNode = logonCredentialsNode.SelectSingleNode("./password"); + XmlNode passwordNode = logonCredentialsNode.SelectSingleNode("./password"); if (_schemaVersion == 1) // Version 2.2 allows clear text passwords { connectionInfo.Password = passwordNode?.Attributes?["storeAsClearText"]?.Value == "True" @@ -180,14 +180,14 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Inheritance.Domain = true; } - var connectionSettingsNode = xmlNode.SelectSingleNode("./connectionSettings"); + XmlNode connectionSettingsNode = xmlNode.SelectSingleNode("./connectionSettings"); if (connectionSettingsNode?.Attributes?["inherit"]?.Value == "None") { - if (bool.TryParse(connectionSettingsNode.SelectSingleNode("./connectToConsole")?.InnerText, out var useConsole)) + if (bool.TryParse(connectionSettingsNode.SelectSingleNode("./connectToConsole")?.InnerText, out bool useConsole)) connectionInfo.UseConsoleSession = useConsole; connectionInfo.RDPStartProgram = connectionSettingsNode.SelectSingleNode("./startProgram")?.InnerText ?? string.Empty; connectionInfo.RDPStartProgramWorkDir = connectionSettingsNode.SelectSingleNode("./startProgramWorkDir")?.InnerText ?? string.Empty; - if (int.TryParse(connectionSettingsNode.SelectSingleNode("./port")?.InnerText, out var port)) + if (int.TryParse(connectionSettingsNode.SelectSingleNode("./port")?.InnerText, out int port)) connectionInfo.Port = port; } else @@ -196,7 +196,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Inheritance.Port = true; } - var gatewaySettingsNode = xmlNode.SelectSingleNode("./gatewaySettings"); + XmlNode gatewaySettingsNode = xmlNode.SelectSingleNode("./gatewaySettings"); if (gatewaySettingsNode?.Attributes?["inherit"]?.Value == "None") { connectionInfo.RDGatewayUsageMethod = @@ -206,7 +206,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.RDGatewayHostname = gatewaySettingsNode.SelectSingleNode("./hostName")?.InnerText ?? string.Empty; connectionInfo.RDGatewayUsername = gatewaySettingsNode.SelectSingleNode("./userName")?.InnerText ?? string.Empty; - var passwordNode = gatewaySettingsNode.SelectSingleNode("./password"); + XmlNode passwordNode = gatewaySettingsNode.SelectSingleNode("./password"); connectionInfo.RDGatewayPassword = passwordNode?.Attributes?["storeAsClearText"]?.Value == "True" ? passwordNode.InnerText : DecryptRdcManPassword(passwordNode?.InnerText); @@ -225,11 +225,11 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Inheritance.RDGatewayDomain = true; } - var remoteDesktopNode = xmlNode.SelectSingleNode("./remoteDesktop"); + XmlNode remoteDesktopNode = xmlNode.SelectSingleNode("./remoteDesktop"); if (remoteDesktopNode?.Attributes?["inherit"]?.Value == "None") { connectionInfo.Resolution = - Enum.TryParse(remoteDesktopNode.SelectSingleNode("./size")?.InnerText.Replace(" ", ""), true, out var rdpResolution) + Enum.TryParse(remoteDesktopNode.SelectSingleNode("./size")?.InnerText.Replace(" ", ""), true, out RDPResolutions rdpResolution) ? rdpResolution : RDPResolutions.FitToWindow; @@ -243,7 +243,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Resolution = RDPResolutions.Fullscreen; } - if (Enum.TryParse(remoteDesktopNode.SelectSingleNode("./colorDepth")?.InnerText, true, out var rdpColors)) + if (Enum.TryParse(remoteDesktopNode.SelectSingleNode("./colorDepth")?.InnerText, true, out RDPColors rdpColors)) connectionInfo.Colors = rdpColors; } else @@ -252,7 +252,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Inheritance.Colors = true; } - var localResourcesNode = xmlNode.SelectSingleNode("./localResources"); + XmlNode localResourcesNode = xmlNode.SelectSingleNode("./localResources"); if (localResourcesNode?.Attributes?["inherit"]?.Value == "None") { // ReSharper disable once SwitchStatementMissingSomeCases @@ -293,19 +293,19 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers } // ./redirectClipboard - if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectDrives")?.InnerText, out var redirectDisks)) + if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectDrives")?.InnerText, out bool redirectDisks)) connectionInfo.RedirectDiskDrives = redirectDisks ? RDPDiskDrives.Local : RDPDiskDrives.None; - if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectPorts")?.InnerText, out var redirectPorts)) + if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectPorts")?.InnerText, out bool redirectPorts)) connectionInfo.RedirectPorts = redirectPorts; - if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectPrinters")?.InnerText, out var redirectPrinters)) + if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectPrinters")?.InnerText, out bool redirectPrinters)) connectionInfo.RedirectPrinters = redirectPrinters; - if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectSmartCards")?.InnerText, out var redirectSmartCards)) + if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectSmartCards")?.InnerText, out bool redirectSmartCards)) connectionInfo.RedirectSmartCards = redirectSmartCards; - if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectClipboard")?.InnerText, out var redirectClipboard)) + if (bool.TryParse(localResourcesNode?.SelectSingleNode("./redirectClipboard")?.InnerText, out bool redirectClipboard)) connectionInfo.RedirectClipboard = redirectClipboard; } else @@ -319,7 +319,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers connectionInfo.Inheritance.RedirectClipboard = true; } - var securitySettingsNode = xmlNode.SelectSingleNode("./securitySettings"); + XmlNode securitySettingsNode = xmlNode.SelectSingleNode("./securitySettings"); if (securitySettingsNode?.Attributes?["inherit"]?.Value == "None") { // ReSharper disable once SwitchStatementMissingSomeCases @@ -358,9 +358,9 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers try { - var plaintextData = ProtectedData.Unprotect(Convert.FromBase64String(ciphertext), new byte[] { }, + byte[] plaintextData = ProtectedData.Unprotect(Convert.FromBase64String(ciphertext), new byte[] { }, DataProtectionScope.LocalMachine); - var charArray = Encoding.Unicode.GetChars(plaintextData); + char[] charArray = Encoding.Unicode.GetChars(plaintextData); return new string(charArray); } catch (Exception /*ex*/) diff --git a/mRemoteNG/Config/Serializers/MiscSerializers/SecureCRTFileDeserializer.cs b/mRemoteNG/Config/Serializers/MiscSerializers/SecureCRTFileDeserializer.cs index ae9f54e9..6aa4a74d 100644 --- a/mRemoteNG/Config/Serializers/MiscSerializers/SecureCRTFileDeserializer.cs +++ b/mRemoteNG/Config/Serializers/MiscSerializers/SecureCRTFileDeserializer.cs @@ -18,14 +18,14 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers public ConnectionTreeModel Deserialize(string content) { - var connectionTreeModel = new ConnectionTreeModel(); - var root = new RootNodeInfo(RootNodeType.Connection); + ConnectionTreeModel connectionTreeModel = new(); + RootNodeInfo root = new(RootNodeType.Connection); connectionTreeModel.AddRootNode(root); - var xmlDocument = new XmlDocument(); + XmlDocument xmlDocument = new(); xmlDocument.LoadXml(content); - var sessionsNode = xmlDocument.SelectSingleNode("/VanDyke/key[@name=\"Sessions\"]"); + XmlNode sessionsNode = xmlDocument.SelectSingleNode("/VanDyke/key[@name=\"Sessions\"]"); ImportRootOrContainer(sessionsNode, root); @@ -34,17 +34,17 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private void ImportRootOrContainer(XmlNode rootNode, ContainerInfo parentContainer) { - var newContainer = ImportContainer(rootNode, parentContainer); + ContainerInfo newContainer = ImportContainer(rootNode, parentContainer); if (rootNode.ChildNodes.Count == 0) return; foreach (XmlNode child in rootNode.ChildNodes) { - var name = child.Attributes["name"].Value; + string name = child.Attributes["name"].Value; if (name == "Default" || name == "Default_LocalShell") continue; - var nodeType = GetFolderOrSession(child); + SecureCRTNodeType nodeType = GetFolderOrSession(child); switch (nodeType) { case SecureCRTNodeType.folder: @@ -59,7 +59,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private void ImportConnection(XmlNode childNode, ContainerInfo parentContainer) { - var connectionInfo = ConnectionInfoFromXml(childNode); + ConnectionInfo connectionInfo = ConnectionInfoFromXml(childNode); if (connectionInfo == null) return; @@ -68,7 +68,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private ContainerInfo ImportContainer(XmlNode containerNode, ContainerInfo parentContainer) { - var containerInfo = new ContainerInfo + ContainerInfo containerInfo = new() { Name = containerNode.Attributes["name"].InnerText }; @@ -86,7 +86,7 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private ConnectionInfo ConnectionInfoFromXml(XmlNode xmlNode) { - var connectionInfo = new ConnectionInfo(); + ConnectionInfo connectionInfo = new(); try { connectionInfo.Name = xmlNode.Attributes["name"].InnerText; @@ -131,11 +131,11 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private ProtocolType GetProtocolFromNode(XmlNode xmlNode) { - var protocolNode = xmlNode.SelectSingleNode("string[@name=\"Protocol Name\"]"); + XmlNode protocolNode = xmlNode.SelectSingleNode("string[@name=\"Protocol Name\"]"); if (protocolNode == null) throw new FileFormatException($"Protocol node not found"); - var protocolText = protocolNode.InnerText.ToUpper(); + string protocolText = protocolNode.InnerText.ToUpper(); switch (protocolText) { case "RDP": @@ -157,8 +157,8 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers private string GetDescriptionFromNode(XmlNode xmlNode) { - var description = string.Empty; - var descNode = xmlNode.SelectSingleNode("array[@name=\"Description\"]"); + string description = string.Empty; + XmlNode descNode = xmlNode.SelectSingleNode("array[@name=\"Description\"]"); foreach(XmlNode n in descNode.ChildNodes) { description += n.InnerText + " "; diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs b/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs index 78581383..8d883fc4 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlDatabaseVersionVerifier.cs @@ -11,7 +11,7 @@ namespace mRemoteNG.Config.Serializers.Versioning [SupportedOSPlatform("windows")] public class SqlDatabaseVersionVerifier { - private readonly Version _currentSupportedVersion = new Version(3, 0); + private readonly Version _currentSupportedVersion = new(3, 0); private readonly IDatabaseConnector _databaseConnector; @@ -31,7 +31,7 @@ namespace mRemoteNG.Config.Serializers.Versioning return true; } - var dbUpgraders = new IVersionUpgrader[] + IVersionUpgrader[] dbUpgraders = new IVersionUpgrader[] { new SqlVersion22To23Upgrader(_databaseConnector), new SqlVersion23To24Upgrader(_databaseConnector), diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlVersion22To23Upgrader.cs b/mRemoteNG/Config/Serializers/Versioning/SqlVersion22To23Upgrader.cs index 591417a0..c161ab96 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlVersion22To23Upgrader.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlVersion22To23Upgrader.cs @@ -32,7 +32,7 @@ ADD EnableFontSmoothing bit NOT NULL DEFAULT 0, InheritEnableFontSmoothing bit NOT NULL DEFAULT 0, InheritEnableDesktopComposition bit NOT NULL DEFAULT 0;"; - var dbCommand = _databaseConnector.DbCommand(sqlText); + System.Data.Common.DbCommand dbCommand = _databaseConnector.DbCommand(sqlText); dbCommand.ExecuteNonQuery(); diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlVersion23To24Upgrader.cs b/mRemoteNG/Config/Serializers/Versioning/SqlVersion23To24Upgrader.cs index 87480695..ea4e5be2 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlVersion23To24Upgrader.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlVersion23To24Upgrader.cs @@ -30,7 +30,7 @@ ALTER TABLE tblCons ADD UseCredSsp bit NOT NULL DEFAULT 1, InheritUseCredSsp bit NOT NULL DEFAULT 0;"; - var dbCommand = _databaseConnector.DbCommand(sqlText); + System.Data.Common.DbCommand dbCommand = _databaseConnector.DbCommand(sqlText); dbCommand.ExecuteNonQuery(); diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlVersion24To25Upgrader.cs b/mRemoteNG/Config/Serializers/Versioning/SqlVersion24To25Upgrader.cs index 6d2e234d..e4de34c1 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlVersion24To25Upgrader.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlVersion24To25Upgrader.cs @@ -31,7 +31,7 @@ ADD LoadBalanceInfo varchar (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, AutomaticResize bit NOT NULL DEFAULT 1, InheritLoadBalanceInfo bit NOT NULL DEFAULT 0, InheritAutomaticResize bit NOT NULL DEFAULT 0;"; - var dbCommand = _databaseConnector.DbCommand(sqlText); + System.Data.Common.DbCommand dbCommand = _databaseConnector.DbCommand(sqlText); dbCommand.ExecuteNonQuery(); return new Version(2, 5); diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlVersion25To26Upgrader.cs b/mRemoteNG/Config/Serializers/Versioning/SqlVersion25To26Upgrader.cs index 2a71d625..59af6903 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlVersion25To26Upgrader.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlVersion25To26Upgrader.cs @@ -35,7 +35,7 @@ ADD RDPMinutesToIdleTimeout int NOT NULL DEFAULT 0, InheritSoundQuality bit NOT NULL DEFAULT 0; UPDATE tblRoot SET ConfVersion='2.6'"; - var dbCommand = _databaseConnector.DbCommand(sqlText); + System.Data.Common.DbCommand dbCommand = _databaseConnector.DbCommand(sqlText); dbCommand.ExecuteNonQuery(); return new Version(2, 6); diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlVersion26To27Upgrader.cs b/mRemoteNG/Config/Serializers/Versioning/SqlVersion26To27Upgrader.cs index 34e6a5e0..4ae9b8c7 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlVersion26To27Upgrader.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlVersion26To27Upgrader.cs @@ -44,7 +44,7 @@ ADD RedirectClipboard bit NOT NULL, InheritUseEnhancedMode bit NOT NULL; UPDATE tblRoot SET ConfVersion='2.7'"; - var dbCommand = _databaseConnector.DbCommand(sqlText); + System.Data.Common.DbCommand dbCommand = _databaseConnector.DbCommand(sqlText); dbCommand.ExecuteNonQuery(); } catch (SqlException) diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlVersion28To29Upgrader.cs b/mRemoteNG/Config/Serializers/Versioning/SqlVersion28To29Upgrader.cs index f7fe8a96..32eae44b 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlVersion28To29Upgrader.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlVersion28To29Upgrader.cs @@ -10,7 +10,7 @@ namespace mRemoteNG.Config.Serializers.Versioning [SupportedOSPlatform("windows")] public class SqlVersion28To29Upgrader : IVersionUpgrader { - private readonly Version _version = new Version(2, 9); + private readonly Version _version = new(2, 9); private readonly IDatabaseConnector _databaseConnector; public SqlVersion28To29Upgrader(IDatabaseConnector databaseConnector) @@ -91,7 +91,7 @@ ALTER TABLE tblRoot ALTER COLUMN [ConfVersion] VARCHAR(15) NOT NULL; const string msSqlUpdate = @"UPDATE tblRoot SET ConfVersion=@confVersion;"; - using (var sqlTran = _databaseConnector.DbConnection().BeginTransaction(System.Data.IsolationLevel.Serializable)) + using (DbTransaction sqlTran = _databaseConnector.DbConnection().BeginTransaction(System.Data.IsolationLevel.Serializable)) { DbCommand dbCommand; if (_databaseConnector.GetType() == typeof(MSSqlDatabaseConnector)) @@ -114,7 +114,7 @@ ALTER TABLE tblRoot ALTER COLUMN [ConfVersion] VARCHAR(15) NOT NULL; { throw new Exception("Unknown database back-end"); } - var pConfVersion = dbCommand.CreateParameter(); + DbParameter pConfVersion = dbCommand.CreateParameter(); pConfVersion.ParameterName = "confVersion"; pConfVersion.Value = _version.ToString(); pConfVersion.DbType = System.Data.DbType.String; diff --git a/mRemoteNG/Config/Serializers/Versioning/SqlVersion29To30Upgrader.cs b/mRemoteNG/Config/Serializers/Versioning/SqlVersion29To30Upgrader.cs index b06f03bc..185fb08a 100644 --- a/mRemoteNG/Config/Serializers/Versioning/SqlVersion29To30Upgrader.cs +++ b/mRemoteNG/Config/Serializers/Versioning/SqlVersion29To30Upgrader.cs @@ -10,7 +10,7 @@ namespace mRemoteNG.Config.Serializers.Versioning [SupportedOSPlatform("windows")] public class SqlVersion29To30Upgrader : IVersionUpgrader { - private readonly Version _version = new Version(3, 0); + private readonly Version _version = new(3, 0); private readonly IDatabaseConnector _databaseConnector; public SqlVersion29To30Upgrader(IDatabaseConnector databaseConnector) @@ -157,7 +157,7 @@ ALTER TABLE tblCons ADD `UserViaAPI` varchar(512) NOT NULL; const string msSqlUpdate = @"UPDATE tblRoot SET ConfVersion=@confVersion;"; - using (var sqlTran = _databaseConnector.DbConnection().BeginTransaction(System.Data.IsolationLevel.Serializable)) + using (DbTransaction sqlTran = _databaseConnector.DbConnection().BeginTransaction(System.Data.IsolationLevel.Serializable)) { DbCommand dbCommand; if (_databaseConnector.GetType() == typeof(MSSqlDatabaseConnector)) @@ -180,7 +180,7 @@ ALTER TABLE tblCons ADD `UserViaAPI` varchar(512) NOT NULL; { throw new Exception("Unknown database back-end"); } - var pConfVersion = dbCommand.CreateParameter(); + DbParameter pConfVersion = dbCommand.CreateParameter(); pConfVersion.ParameterName = "confVersion"; pConfVersion.Value = _version.ToString(); pConfVersion.DbType = System.Data.DbType.String; diff --git a/mRemoteNG/Config/Serializers/XmlConnectionsDecryptor.cs b/mRemoteNG/Config/Serializers/XmlConnectionsDecryptor.cs index 6a613a93..1c9b47ac 100644 --- a/mRemoteNG/Config/Serializers/XmlConnectionsDecryptor.cs +++ b/mRemoteNG/Config/Serializers/XmlConnectionsDecryptor.cs @@ -49,7 +49,7 @@ namespace mRemoteNG.Config.Serializers if (string.IsNullOrEmpty(xml)) return ""; if (xml.Contains("")) return xml; - var decryptedContent = ""; + string decryptedContent = ""; bool notDecr; try @@ -84,7 +84,7 @@ namespace mRemoteNG.Config.Serializers public bool ConnectionsFileIsAuthentic(string protectedString, SecureString password) { - var connectionsFileIsNotEncrypted = false; + bool connectionsFileIsNotEncrypted = false; try { connectionsFileIsNotEncrypted = _cryptographyProvider.Decrypt(protectedString, _rootNodeInfo.PasswordString.ConvertToSecureString()) == "ThisIsNotProtected"; @@ -98,8 +98,8 @@ namespace mRemoteNG.Config.Serializers private bool Authenticate(string cipherText, SecureString password) { - var authenticator = new PasswordAuthenticator(_cryptographyProvider, cipherText, AuthenticationRequestor); - var authenticated = authenticator.Authenticate(password); + PasswordAuthenticator authenticator = new(_cryptographyProvider, cipherText, AuthenticationRequestor); + bool authenticated = authenticator.Authenticate(password); if (!authenticated) return false; diff --git a/mRemoteNG/Config/Settings/DockPanelLayoutLoader.cs b/mRemoteNG/Config/Settings/DockPanelLayoutLoader.cs index 9318244c..c775aab4 100644 --- a/mRemoteNG/Config/Settings/DockPanelLayoutLoader.cs +++ b/mRemoteNG/Config/Settings/DockPanelLayoutLoader.cs @@ -33,15 +33,15 @@ namespace mRemoteNG.Config.Settings { while (_mainForm.pnlDock.Contents.Count > 0) { - var dc = (DockContent)_mainForm.pnlDock.Contents[0]; + DockContent dc = (DockContent)_mainForm.pnlDock.Contents[0]; dc.Close(); } #if !PORTABLE - var oldPath = + string oldPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\" + GeneralAppInfo.ProductName + "\\" + SettingsFileInfo.LayoutFileName; #endif - var newPath = SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.LayoutFileName; + string newPath = SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.LayoutFileName; if (File.Exists(newPath)) { _mainForm.pnlDock.LoadFromXml(newPath, GetContentFromPersistString); diff --git a/mRemoteNG/Config/Settings/DockPanelLayoutSaver.cs b/mRemoteNG/Config/Settings/DockPanelLayoutSaver.cs index e2f949c8..55cc4e7b 100644 --- a/mRemoteNG/Config/Settings/DockPanelLayoutSaver.cs +++ b/mRemoteNG/Config/Settings/DockPanelLayoutSaver.cs @@ -37,7 +37,7 @@ namespace mRemoteNG.Config.Settings Directory.CreateDirectory(SettingsFileInfo.SettingsPath); } - var serializedLayout = _dockPanelSerializer.Serialize(FrmMain.Default.pnlDock); + string serializedLayout = _dockPanelSerializer.Serialize(FrmMain.Default.pnlDock); _dataProvider.Save(serializedLayout); } catch (Exception ex) diff --git a/mRemoteNG/Config/Settings/DockPanelLayoutSerializer.cs b/mRemoteNG/Config/Settings/DockPanelLayoutSerializer.cs index e8e4be84..1d8f563e 100644 --- a/mRemoteNG/Config/Settings/DockPanelLayoutSerializer.cs +++ b/mRemoteNG/Config/Settings/DockPanelLayoutSerializer.cs @@ -17,7 +17,7 @@ namespace mRemoteNG.Config.Settings throw new ArgumentNullException(nameof(dockPanel)); XDocument xdoc; - using (var memoryStream = new MemoryStream()) + using (MemoryStream memoryStream = new()) { dockPanel.SaveAsXml(memoryStream, Encoding.UTF8); memoryStream.Position = 0; diff --git a/mRemoteNG/Config/Settings/ExternalAppsLoader.cs b/mRemoteNG/Config/Settings/ExternalAppsLoader.cs index c403cfed..eaa6d11e 100644 --- a/mRemoteNG/Config/Settings/ExternalAppsLoader.cs +++ b/mRemoteNG/Config/Settings/ExternalAppsLoader.cs @@ -36,11 +36,11 @@ namespace mRemoteNG.Config.Settings public void LoadExternalAppsFromXML() { #if !PORTABLE - var oldPath = + string oldPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), GeneralAppInfo.ProductName, SettingsFileInfo.ExtAppsFilesName); #endif - var newPath = Path.Combine(SettingsFileInfo.SettingsPath, SettingsFileInfo.ExtAppsFilesName); - var xDom = new XmlDocument(); + string newPath = Path.Combine(SettingsFileInfo.SettingsPath, SettingsFileInfo.ExtAppsFilesName); + XmlDocument xDom = new(); if (File.Exists(newPath)) { _messageCollector.AddMessage(MessageClass.InformationMsg, $"Loading External Apps from: {newPath}", @@ -69,7 +69,7 @@ namespace mRemoteNG.Config.Settings foreach (XmlElement xEl in xDom.DocumentElement.ChildNodes) { - var extA = new ExternalTool + ExternalTool extA = new() { DisplayName = xEl.Attributes["DisplayName"].Value, FileName = xEl.Attributes["FileName"].Value, diff --git a/mRemoteNG/Config/Settings/ExternalAppsSaver.cs b/mRemoteNG/Config/Settings/ExternalAppsSaver.cs index 5acc00df..07c5d792 100644 --- a/mRemoteNG/Config/Settings/ExternalAppsSaver.cs +++ b/mRemoteNG/Config/Settings/ExternalAppsSaver.cs @@ -22,8 +22,8 @@ namespace mRemoteNG.Config.Settings Directory.CreateDirectory(SettingsFileInfo.SettingsPath); } - var xmlTextWriter = - new XmlTextWriter(SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.ExtAppsFilesName, + XmlTextWriter xmlTextWriter = + new(SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.ExtAppsFilesName, Encoding.UTF8) { Formatting = Formatting.Indented, @@ -33,7 +33,7 @@ namespace mRemoteNG.Config.Settings xmlTextWriter.WriteStartDocument(); xmlTextWriter.WriteStartElement("Apps"); - foreach (var extA in externalTools) + foreach (ExternalTool extA in externalTools) { xmlTextWriter.WriteStartElement("App"); xmlTextWriter.WriteAttributeString("DisplayName", "", extA.DisplayName); diff --git a/mRemoteNG/Config/Settings/Providers/PortableSettingsProvider.cs b/mRemoteNG/Config/Settings/Providers/PortableSettingsProvider.cs index fa79921f..ec29bf76 100644 --- a/mRemoteNG/Config/Settings/Providers/PortableSettingsProvider.cs +++ b/mRemoteNG/Config/Settings/Providers/PortableSettingsProvider.cs @@ -115,7 +115,7 @@ namespace mRemoteNG.Config.Settings.Providers public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection) { - var values = new SettingsPropertyValueCollection(); + SettingsPropertyValueCollection values = new(); foreach (SettingsProperty property in collection) { @@ -130,9 +130,9 @@ namespace mRemoteNG.Config.Settings.Providers private void SetValue(SettingsPropertyValue propertyValue) { - var targetNode = IsGlobal(propertyValue.Property) ? _globalSettingsNode : _localSettingsNode; + XmlNode targetNode = IsGlobal(propertyValue.Property) ? _globalSettingsNode : _localSettingsNode; - var settingNode = targetNode.SelectSingleNode($"setting[@name='{propertyValue.Name}']"); + XmlNode settingNode = targetNode.SelectSingleNode($"setting[@name='{propertyValue.Name}']"); if (settingNode != null) settingNode.InnerText = propertyValue.SerializedValue.ToString(); @@ -140,7 +140,7 @@ namespace mRemoteNG.Config.Settings.Providers { settingNode = _rootDocument.CreateElement("setting"); - var nameAttribute = _rootDocument.CreateAttribute("name"); + XmlAttribute nameAttribute = _rootDocument.CreateAttribute("name"); nameAttribute.Value = propertyValue.Name; settingNode.Attributes?.Append(nameAttribute); @@ -152,8 +152,8 @@ namespace mRemoteNG.Config.Settings.Providers private string GetValue(SettingsProperty property) { - var targetNode = IsGlobal(property) ? _globalSettingsNode : _localSettingsNode; - var settingNode = targetNode.SelectSingleNode($"setting[@name='{property.Name}']"); + XmlNode targetNode = IsGlobal(property) ? _globalSettingsNode : _localSettingsNode; + XmlNode settingNode = targetNode.SelectSingleNode($"setting[@name='{property.Name}']"); if (settingNode == null) return property.DefaultValue != null ? property.DefaultValue.ToString() : string.Empty; @@ -174,7 +174,7 @@ namespace mRemoteNG.Config.Settings.Providers private XmlNode GetSettingsNode(string name) { - var settingsNode = _rootNode.SelectSingleNode(name); + XmlNode settingsNode = _rootNode.SelectSingleNode(name); if (settingsNode != null) return settingsNode; settingsNode = _rootDocument.CreateElement(name); @@ -185,7 +185,7 @@ namespace mRemoteNG.Config.Settings.Providers private static XmlDocument GetBlankXmlDocument() { - var blankXmlDocument = new XmlDocument(); + XmlDocument blankXmlDocument = new(); blankXmlDocument.AppendChild(blankXmlDocument.CreateXmlDeclaration("1.0", "utf-8", string.Empty)); blankXmlDocument.AppendChild(blankXmlDocument.CreateElement(_rootNodeName)); diff --git a/mRemoteNG/Config/Settings/SettingsLoader.cs b/mRemoteNG/Config/Settings/SettingsLoader.cs index 13e35dde..29e3ae0a 100644 --- a/mRemoteNG/Config/Settings/SettingsLoader.cs +++ b/mRemoteNG/Config/Settings/SettingsLoader.cs @@ -108,8 +108,8 @@ namespace mRemoteNG.Config.Settings // Make sure the form is visible on the screen const int minHorizontal = 300; const int minVertical = 150; - var screenBounds = Screen.FromHandle(MainForm.Handle).Bounds; - var newBounds = MainForm.Bounds; + Rectangle screenBounds = Screen.FromHandle(MainForm.Handle).Bounds; + Rectangle newBounds = MainForm.Bounds; if (newBounds.Right < screenBounds.Left + minHorizontal) newBounds.X = screenBounds.Left + minHorizontal - newBounds.Width; @@ -198,7 +198,7 @@ namespace mRemoteNG.Config.Settings /// private void ResetAllToolbarLocations() { - var tempToolStrip = new ToolStripPanel(); + ToolStripPanel tempToolStrip = new(); tempToolStrip.Join(_mainMenu); tempToolStrip.Join(_quickConnectToolStrip); tempToolStrip.Join(_externalToolsToolStrip); @@ -208,7 +208,7 @@ namespace mRemoteNG.Config.Settings private void AddMainMenuPanel() { SetToolstripGripStyle(_mainMenu); - var toolStripPanel = ToolStripPanelFromString("top"); + ToolStripPanel toolStripPanel = ToolStripPanelFromString("top"); toolStripPanel.Join(_mainMenu, new Point(3, 0)); } @@ -216,7 +216,7 @@ namespace mRemoteNG.Config.Settings { SetToolstripGripStyle(_quickConnectToolStrip); _quickConnectToolStrip.Visible = Properties.Settings.Default.QuickyTBVisible; - var toolStripPanel = ToolStripPanelFromString(Properties.Settings.Default.QuickyTBParentDock); + ToolStripPanel toolStripPanel = ToolStripPanelFromString(Properties.Settings.Default.QuickyTBParentDock); toolStripPanel.Join(_quickConnectToolStrip, Properties.Settings.Default.QuickyTBLocation); } @@ -224,7 +224,7 @@ namespace mRemoteNG.Config.Settings { SetToolstripGripStyle(_externalToolsToolStrip); _externalToolsToolStrip.Visible = Properties.Settings.Default.ExtAppsTBVisible; - var toolStripPanel = ToolStripPanelFromString(Properties.Settings.Default.ExtAppsTBParentDock); + ToolStripPanel toolStripPanel = ToolStripPanelFromString(Properties.Settings.Default.ExtAppsTBParentDock); toolStripPanel.Join(_externalToolsToolStrip, Properties.Settings.Default.ExtAppsTBLocation); } @@ -232,7 +232,7 @@ namespace mRemoteNG.Config.Settings { SetToolstripGripStyle(_multiSshToolStrip); _multiSshToolStrip.Visible = Properties.Settings.Default.MultiSshToolbarVisible; - var toolStripPanel = ToolStripPanelFromString(Properties.Settings.Default.MultiSshToolbarParentDock); + ToolStripPanel toolStripPanel = ToolStripPanelFromString(Properties.Settings.Default.MultiSshToolbarParentDock); toolStripPanel.Join(_multiSshToolStrip, Properties.Settings.Default.MultiSshToolbarLocation); } diff --git a/mRemoteNG/Config/Settings/SettingsSaver.cs b/mRemoteNG/Config/Settings/SettingsSaver.cs index b4ce6173..56e87aed 100644 --- a/mRemoteNG/Config/Settings/SettingsSaver.cs +++ b/mRemoteNG/Config/Settings/SettingsSaver.cs @@ -17,7 +17,7 @@ namespace mRemoteNG.Config.Settings { try { - var windowPlacement = new WindowPlacement(FrmMain.Default); + WindowPlacement windowPlacement = new(FrmMain.Default); if (frmMain.WindowState == FormWindowState.Minimized & windowPlacement.RestoreToMaximized) { frmMain.Opacity = 0; @@ -110,8 +110,8 @@ namespace mRemoteNG.Config.Settings private static void SaveDockPanelLayout() { - var panelLayoutXmlFilePath = SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.LayoutFileName; - var panelLayoutSaver = new DockPanelLayoutSaver( + string panelLayoutXmlFilePath = SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.LayoutFileName; + DockPanelLayoutSaver panelLayoutSaver = new( new DockPanelLayoutSerializer(), new FileDataProvider(panelLayoutXmlFilePath) ); @@ -120,7 +120,7 @@ namespace mRemoteNG.Config.Settings private static void SaveExternalApps() { - var externalAppsSaver = new ExternalAppsSaver(); + ExternalAppsSaver externalAppsSaver = new(); externalAppsSaver.Save(Runtime.ExternalToolsService.ExternalTools); } } diff --git a/mRemoteNG/Connection/AbstractConnectionRecord.cs b/mRemoteNG/Connection/AbstractConnectionRecord.cs index 7d3dd58e..5d024029 100644 --- a/mRemoteNG/Connection/AbstractConnectionRecord.cs +++ b/mRemoteNG/Connection/AbstractConnectionRecord.cs @@ -128,8 +128,8 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionDescription))] public virtual string Description { - get => GetPropertyValue("Description", _description); - set => SetField(ref _description, value, "Description"); + get => GetPropertyValue(nameof(Description), _description); + set => SetField(ref _description, value, nameof(Description)); } [LocalizedAttributes.LocalizedCategory(nameof(Language.Display)), diff --git a/mRemoteNG/Connection/ConnectionIcon.cs b/mRemoteNG/Connection/ConnectionIcon.cs index bbaa0d48..9d41e738 100644 --- a/mRemoteNG/Connection/ConnectionIcon.cs +++ b/mRemoteNG/Connection/ConnectionIcon.cs @@ -31,11 +31,11 @@ namespace mRemoteNG.Connection { try { - var iconPath = $"{GeneralAppInfo.HomePath}\\Icons\\{iconName}.ico"; + string iconPath = $"{GeneralAppInfo.HomePath}\\Icons\\{iconName}.ico"; if (System.IO.File.Exists(iconPath)) { - var nI = new System.Drawing.Icon(iconPath); + System.Drawing.Icon nI = new(iconPath); return nI; } } diff --git a/mRemoteNG/Connection/ConnectionInfo.cs b/mRemoteNG/Connection/ConnectionInfo.cs index 33bc5b9d..f6538436 100644 --- a/mRemoteNG/Connection/ConnectionInfo.cs +++ b/mRemoteNG/Connection/ConnectionInfo.cs @@ -84,7 +84,7 @@ namespace mRemoteNG.Connection public virtual ConnectionInfo Clone() { - var newConnectionInfo = new ConnectionInfo(); + ConnectionInfo newConnectionInfo = new(); newConnectionInfo.CopyFrom(this); return newConnectionInfo; } @@ -96,16 +96,16 @@ namespace mRemoteNG.Connection /// public void CopyFrom(ConnectionInfo sourceConnectionInfo) { - var properties = GetType().BaseType?.GetProperties().Where(prop => prop.CanRead && prop.CanWrite); + IEnumerable properties = GetType().BaseType?.GetProperties().Where(prop => prop.CanRead && prop.CanWrite); if (properties == null) return; - foreach (var property in properties) + foreach (PropertyInfo property in properties) { if (property.Name == nameof(Parent)) continue; - var remotePropertyValue = property.GetValue(sourceConnectionInfo, null); + object remotePropertyValue = property.GetValue(sourceConnectionInfo, null); property.SetValue(this, remotePropertyValue, null); } - var clonedInheritance = sourceConnectionInfo.Inheritance.Clone(this); + ConnectionInfoInheritance clonedInheritance = sourceConnectionInfo.Inheritance.Clone(this); Inheritance = clonedInheritance; } @@ -134,14 +134,14 @@ namespace mRemoteNG.Connection protected virtual IEnumerable GetProperties(string[] excludedPropertyNames) { - var properties = typeof(ConnectionInfo).GetProperties(); - var filteredProperties = properties.Where((prop) => !excludedPropertyNames.Contains(prop.Name)); + PropertyInfo[] properties = typeof(ConnectionInfo).GetProperties(); + IEnumerable filteredProperties = properties.Where((prop) => !excludedPropertyNames.Contains(prop.Name)); return filteredProperties; } public virtual IEnumerable GetSerializableProperties() { - var excludedProperties = new[] + string[] excludedProperties = new[] { "Parent", "Name", "Hostname", "Port", "Inheritance", "OpenConnections", "IsContainer", "IsDefault", "PositionID", "ConstantID", "TreeNode", "IsQuickConnect", "PleaseConnect" @@ -192,8 +192,8 @@ namespace mRemoteNG.Connection if (!ShouldThisPropertyBeInherited(propertyName)) return value; - var couldGetInheritedValue = - TryGetInheritedPropertyValue(propertyName, out var inheritedValue); + bool couldGetInheritedValue = + TryGetInheritedPropertyValue(propertyName, out TPropertyType inheritedValue); return couldGetInheritedValue ? inheritedValue @@ -215,9 +215,9 @@ namespace mRemoteNG.Connection private bool IsInheritanceTurnedOnForThisProperty(string propertyName) { - var inheritType = Inheritance.GetType(); - var inheritPropertyInfo = inheritType.GetProperty(propertyName); - var inheritPropertyValue = inheritPropertyInfo != null && Convert.ToBoolean(inheritPropertyInfo.GetValue(Inheritance, null)); + Type inheritType = Inheritance.GetType(); + PropertyInfo inheritPropertyInfo = inheritType.GetProperty(propertyName); + bool inheritPropertyValue = inheritPropertyInfo != null && Convert.ToBoolean(inheritPropertyInfo.GetValue(Inheritance, null)); return inheritPropertyValue; } @@ -225,8 +225,8 @@ namespace mRemoteNG.Connection { try { - var connectionInfoType = Parent.GetType(); - var parentPropertyInfo = connectionInfoType.GetProperty(propertyName); + Type connectionInfoType = Parent.GetType(); + PropertyInfo parentPropertyInfo = connectionInfoType.GetProperty(propertyName); if (parentPropertyInfo == null) throw new NullReferenceException( $"Could not retrieve property data for property '{propertyName}' on parent node '{Parent?.Name}'" @@ -402,7 +402,7 @@ namespace mRemoteNG.Connection private void SetNewOpenConnectionList() { - OpenConnections = new ProtocolList(); + OpenConnections = []; OpenConnections.CollectionChanged += (sender, args) => RaisePropertyChangedEvent(this, new PropertyChangedEventArgs("OpenConnections")); } diff --git a/mRemoteNG/Connection/ConnectionInfoInheritance.cs b/mRemoteNG/Connection/ConnectionInfoInheritance.cs index 617f28d5..1c0e2281 100644 --- a/mRemoteNG/Connection/ConnectionInfoInheritance.cs +++ b/mRemoteNG/Connection/ConnectionInfoInheritance.cs @@ -527,7 +527,7 @@ namespace mRemoteNG.Connection public ConnectionInfoInheritance Clone(ConnectionInfo parent) { - var newInheritance = (ConnectionInfoInheritance)MemberwiseClone(); + ConnectionInfoInheritance newInheritance = (ConnectionInfoInheritance)MemberwiseClone(); newInheritance.Parent = parent; return newInheritance; } @@ -567,15 +567,15 @@ namespace mRemoteNG.Connection private bool EverythingIsInherited() { - var inheritanceProperties = GetProperties(); - var everythingInherited = inheritanceProperties.All((p) => (bool)p.GetValue(this, null)); + IEnumerable inheritanceProperties = GetProperties(); + bool everythingInherited = inheritanceProperties.All((p) => (bool)p.GetValue(this, null)); return everythingInherited; } public IEnumerable GetProperties() { - var properties = typeof(ConnectionInfoInheritance).GetProperties(); - var filteredProperties = properties.Where(FilterProperty); + PropertyInfo[] properties = typeof(ConnectionInfoInheritance).GetProperties(); + IEnumerable filteredProperties = properties.Where(FilterProperty); return filteredProperties; } @@ -596,20 +596,20 @@ namespace mRemoteNG.Connection private bool FilterProperty(PropertyInfo propertyInfo) { - var exclusions = new[] + string[] exclusions = new[] { nameof(EverythingInherited), nameof(Parent), nameof(InheritanceActive) }; - var valueShouldNotBeFiltered = !exclusions.Contains(propertyInfo.Name); + bool valueShouldNotBeFiltered = !exclusions.Contains(propertyInfo.Name); return valueShouldNotBeFiltered; } private void SetAllValues(bool value) { - var properties = GetProperties(); - foreach (var property in properties) + IEnumerable properties = GetProperties(); + foreach (PropertyInfo property in properties) { if (property.PropertyType.Name == typeof(bool).Name) property.SetValue(this, value, null); @@ -618,10 +618,10 @@ namespace mRemoteNG.Connection private void SetAllValues(ConnectionInfoInheritance otherInheritanceObject) { - var properties = GetProperties(); - foreach (var property in properties) + IEnumerable properties = GetProperties(); + foreach (PropertyInfo property in properties) { - var newPropertyValue = property.GetValue(otherInheritanceObject, null); + object newPropertyValue = property.GetValue(otherInheritanceObject, null); property.SetValue(this, newPropertyValue, null); } } diff --git a/mRemoteNG/Connection/ConnectionInitiator.cs b/mRemoteNG/Connection/ConnectionInitiator.cs index b1382373..ef3aa102 100644 --- a/mRemoteNG/Connection/ConnectionInitiator.cs +++ b/mRemoteNG/Connection/ConnectionInitiator.cs @@ -19,18 +19,18 @@ namespace mRemoteNG.Connection [SupportedOSPlatform("windows")] public class ConnectionInitiator : IConnectionInitiator { - private readonly PanelAdder _panelAdder = new PanelAdder(); - private readonly List _activeConnections = new List(); + private readonly PanelAdder _panelAdder = new(); + private readonly List _activeConnections = []; public IEnumerable ActiveConnections => _activeConnections; public bool SwitchToOpenConnection(ConnectionInfo connectionInfo) { - var interfaceControl = FindConnectionContainer(connectionInfo); + InterfaceControl interfaceControl = FindConnectionContainer(connectionInfo); if (interfaceControl == null) return false; - var connT = (ConnectionTab)interfaceControl.FindForm(); + ConnectionTab connT = (ConnectionTab)interfaceControl.FindForm(); connT?.Focus(); - var findForm = (ConnectionTab)interfaceControl.FindForm(); + ConnectionTab findForm = (ConnectionTab)interfaceControl.FindForm(); findForm?.Show(findForm.DockPanel); return true; } @@ -43,7 +43,7 @@ namespace mRemoteNG.Connection if (containerInfo == null || containerInfo.Children.Count == 0) return; - foreach (var child in containerInfo.Children) + foreach (ConnectionInfo child in containerInfo.Children) { if (child is ContainerInfo childAsContainer) OpenConnection(childAsContainer, force, conForm); @@ -98,16 +98,16 @@ namespace mRemoteNG.Connection return; } - var protocolFactory = new ProtocolFactory(); - var connectionPanel = SetConnectionPanel(connectionInfo, force); + ProtocolFactory protocolFactory = new(); + string connectionPanel = SetConnectionPanel(connectionInfo, force); if (string.IsNullOrEmpty(connectionPanel)) return; - var connectionForm = SetConnectionForm(conForm, connectionPanel); + ConnectionWindow connectionForm = SetConnectionForm(conForm, connectionPanel); Control connectionContainer = null; // Handle connection through SSH tunnel: // in case of connection through SSH tunnel, connectionInfo gets cloned, so that modification of its name, hostname and port do not modify the original connection info // connectionInfoOriginal points to the original connection info in either case, for where its needed later on. - var connectionInfoOriginal = connectionInfo; + ConnectionInfo connectionInfoOriginal = connectionInfo; ConnectionInfo connectionInfoSshTunnel = null; // SSH tunnel connection info will be set if SSH tunnel connection is configured, can be found and connected. if (!string.IsNullOrEmpty(connectionInfoOriginal.SSHTunnelConnectionName)) { @@ -121,9 +121,9 @@ namespace mRemoteNG.Connection Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, $"SSH Tunnel connection '{connectionInfoOriginal.SSHTunnelConnectionName}' configured for '{connectionInfoOriginal.Name}' found. Finding free local port for use as local tunnel port ..."); // determine a free local port to use as local tunnel port - var l = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Loopback, 0); + System.Net.Sockets.TcpListener l = new(System.Net.IPAddress.Loopback, 0); l.Start(); - var localSshTunnelPort = ((System.Net.IPEndPoint)l.LocalEndpoint).Port; + int localSshTunnelPort = ((System.Net.IPEndPoint)l.LocalEndpoint).Port; l.Stop(); Runtime.MessageCollector.AddMessage(MessageClass.DebugMsg, $"{localSshTunnelPort} will be used as local tunnel port. Establishing SSH connection to '{connectionInfoSshTunnel.Hostname}' with additional tunnel options for target connection ..."); @@ -139,7 +139,7 @@ namespace mRemoteNG.Connection connectionInfo.Port = localSshTunnelPort; // connect the SSH connection to setup the tunnel - var protocolSshTunnel = protocolFactory.CreateProtocol(connectionInfoSshTunnel); + ProtocolBase protocolSshTunnel = protocolFactory.CreateProtocol(connectionInfoSshTunnel); if (!(protocolSshTunnel is PuttyBase puttyBaseSshTunnel)) { Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, @@ -173,8 +173,8 @@ namespace mRemoteNG.Connection "Putty started for SSH connection for tunnel. Waiting for local tunnel port to become available ..."); // wait until SSH tunnel connection is ready, by checking if local port can be connected to, but max 60 sec. - var testsock = new System.Net.Sockets.Socket(System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); - var stopwatch = System.Diagnostics.Stopwatch.StartNew(); + System.Net.Sockets.Socket testsock = new(System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp); + System.Diagnostics.Stopwatch stopwatch = System.Diagnostics.Stopwatch.StartNew(); while (stopwatch.ElapsedMilliseconds < 60000) { // confirm that SSH connection is still active @@ -218,7 +218,7 @@ namespace mRemoteNG.Connection protocolSshTunnel.InterfaceControl.Hide(); } - var newProtocol = protocolFactory.CreateProtocol(connectionInfo); + ProtocolBase newProtocol = protocolFactory.CreateProtocol(connectionInfo); SetConnectionFormEventHandlers(newProtocol, connectionForm); SetConnectionEventHandlers(newProtocol); // in case of connection through SSH tunnel the container is already defined and must be use, else it needs to be created here @@ -258,7 +258,7 @@ namespace mRemoteNG.Connection private ConnectionInfo getSSHConnectionInfoByName(IEnumerable rootnodes, string SSHTunnelConnectionName) { ConnectionInfo result = null; - foreach (var node in rootnodes) + foreach (ConnectionInfo node in rootnodes) { if (node is ContainerInfo container) { @@ -277,24 +277,24 @@ namespace mRemoteNG.Connection private static void StartPreConnectionExternalApp(ConnectionInfo connectionInfo) { if (connectionInfo.PreExtApp == "") return; - var extA = Runtime.ExternalToolsService.GetExtAppByName(connectionInfo.PreExtApp); + Tools.ExternalTool extA = Runtime.ExternalToolsService.GetExtAppByName(connectionInfo.PreExtApp); extA?.Start(connectionInfo); } private static InterfaceControl FindConnectionContainer(ConnectionInfo connectionInfo) { if (connectionInfo.OpenConnections.Count <= 0) return null; - for (var i = 0; i <= Runtime.WindowList.Count - 1; i++) + for (int i = 0; i <= Runtime.WindowList.Count - 1; i++) { // the new structure is ConnectionWindow.Controls[0].ActiveDocument.Controls[0] // DockPanel InterfaceControl if (!(Runtime.WindowList[i] is ConnectionWindow connectionWindow)) continue; if (connectionWindow.Controls.Count < 1) continue; if (!(connectionWindow.Controls[0] is DockPanel cwDp)) continue; - foreach (var dockContent in cwDp.Documents) + foreach (IDockContent dockContent in cwDp.Documents) { - var tab = (ConnectionTab)dockContent; - var ic = InterfaceControl.FindInterfaceControl(tab); + ConnectionTab tab = (ConnectionTab)dockContent; + InterfaceControl ic = InterfaceControl.FindInterfaceControl(tab); if (ic == null) continue; if (ic.Info == connectionInfo || ic.OriginalInfo == connectionInfo) return ic; @@ -309,7 +309,7 @@ namespace mRemoteNG.Connection if (connectionInfo.Panel != "" && !force.HasFlag(ConnectionInfo.Force.OverridePanel) && !Properties.OptionsTabsPanelsPage.Default.AlwaysShowPanelSelectionDlg) return connectionInfo.Panel; - var frmPnl = new FrmChoosePanel(); + FrmChoosePanel frmPnl = new(); return frmPnl.ShowDialog() == DialogResult.OK ? frmPnl.Panel : null; @@ -317,7 +317,7 @@ namespace mRemoteNG.Connection private ConnectionWindow SetConnectionForm(ConnectionWindow conForm, string connectionPanel) { - var connectionForm = conForm ?? Runtime.WindowList.FromString(connectionPanel) as ConnectionWindow; + ConnectionWindow connectionForm = conForm ?? Runtime.WindowList.FromString(connectionPanel) as ConnectionWindow; if (connectionForm == null) connectionForm = _panelAdder.AddPanel(connectionPanel); @@ -334,7 +334,7 @@ namespace mRemoteNG.Connection if (connectionInfo.Protocol != ProtocolType.IntApp) return connectionContainer; - var extT = Runtime.ExternalToolsService.GetExtAppByName(connectionInfo.ExtApp); + Tools.ExternalTool extT = Runtime.ExternalToolsService.GetExtAppByName(connectionInfo.ExtApp); if (extT == null) return connectionContainer; @@ -372,8 +372,8 @@ namespace mRemoteNG.Connection { try { - var prot = (ProtocolBase)sender; - var msgClass = MessageClass.InformationMsg; + ProtocolBase prot = (ProtocolBase)sender; + MessageClass msgClass = MessageClass.InformationMsg; if (prot.InterfaceControl.Info.Protocol == ProtocolType.RDP) { @@ -383,7 +383,7 @@ namespace mRemoteNG.Connection } } - var strHostname = prot.InterfaceControl.OriginalInfo.Hostname; + string strHostname = prot.InterfaceControl.OriginalInfo.Hostname; if (prot.InterfaceControl.SSHTunnelInfo != null) { strHostname += " via SSH Tunnel " + prot.InterfaceControl.SSHTunnelInfo.Name; @@ -405,7 +405,7 @@ namespace mRemoteNG.Connection { try { - var prot = (ProtocolBase)sender; + ProtocolBase prot = (ProtocolBase)sender; Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, Language.ConnenctionCloseEvent, true); string connDetail; @@ -426,7 +426,7 @@ namespace mRemoteNG.Connection _activeConnections.Remove(prot.InterfaceControl.Info.ConstantID); if (prot.InterfaceControl.Info.PostExtApp == "") return; - var extA = Runtime.ExternalToolsService.GetExtAppByName(prot.InterfaceControl.Info.PostExtApp); + Tools.ExternalTool extA = Runtime.ExternalToolsService.GetExtAppByName(prot.InterfaceControl.Info.PostExtApp); extA?.Start(prot.InterfaceControl.OriginalInfo); } catch (Exception ex) @@ -437,7 +437,7 @@ namespace mRemoteNG.Connection private static void Prot_Event_Connected(object sender) { - var prot = (ProtocolBase)sender; + ProtocolBase prot = (ProtocolBase)sender; Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, Language.ConnectionEventConnected, true); Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, @@ -452,9 +452,9 @@ namespace mRemoteNG.Connection { try { - var prot = (ProtocolBase)sender; + ProtocolBase prot = (ProtocolBase)sender; - var msg = string.Format( + string msg = string.Format( Language.ConnectionEventErrorOccured, errorMessage, prot.InterfaceControl.OriginalInfo.Hostname, diff --git a/mRemoteNG/Connection/ConnectionsService.cs b/mRemoteNG/Connection/ConnectionsService.cs index 915189ba..3439a91e 100644 --- a/mRemoteNG/Connection/ConnectionsService.cs +++ b/mRemoteNG/Connection/ConnectionsService.cs @@ -25,7 +25,7 @@ namespace mRemoteNG.Connection [SupportedOSPlatform("windows")] public class ConnectionsService { - private static readonly object SaveLock = new object(); + private static readonly object SaveLock = new(); private readonly PuttySessionsManager _puttySessionsManager; private readonly IDataProvider _localConnectionPropertiesDataProvider; private readonly LocalConnectionPropertiesXmlSerializer _localConnectionPropertiesSerializer; @@ -54,7 +54,7 @@ namespace mRemoteNG.Connection try { filename.ThrowIfNullOrEmpty(nameof(filename)); - var newConnectionsModel = new ConnectionTreeModel(); + ConnectionTreeModel newConnectionsModel = new(); newConnectionsModel.AddRootNode(new RootNodeInfo(RootNodeType.Connection)); SaveConnections(newConnectionsModel, false, new SaveFilter(), filename, true); LoadConnections(false, false, filename); @@ -69,27 +69,27 @@ namespace mRemoteNG.Connection { try { - var uriBuilder = new UriBuilder + UriBuilder uriBuilder = new() { Scheme = "dummyscheme" }; if (connectionString.Contains("@")) { - var x = connectionString.Split('@'); + string[] x = connectionString.Split('@'); uriBuilder.UserName = x[0]; connectionString = x[1]; } if (connectionString.Contains(":")) { - var x = connectionString.Split(':'); + string[] x = connectionString.Split(':'); connectionString = x[0]; uriBuilder.Port = Convert.ToInt32(x[1]); } uriBuilder.Host = connectionString; - var newConnectionInfo = new ConnectionInfo(); + ConnectionInfo newConnectionInfo = new(); newConnectionInfo.CopyFrom(DefaultConnectionInfo.Instance); newConnectionInfo.Name = Properties.OptionsTabsPanelsPage.Default.IdentifyQuickConnectTabs @@ -132,14 +132,14 @@ namespace mRemoteNG.Connection /// public void LoadConnections(bool useDatabase, bool import, string connectionFileName) { - var oldConnectionTreeModel = ConnectionTreeModel; - var oldIsUsingDatabaseValue = UsingDatabase; + ConnectionTreeModel oldConnectionTreeModel = ConnectionTreeModel; + bool oldIsUsingDatabaseValue = UsingDatabase; - var connectionLoader = useDatabase + IConnectionsLoader connectionLoader = useDatabase ? (IConnectionsLoader)new SqlConnectionsLoader(_localConnectionPropertiesSerializer, _localConnectionPropertiesDataProvider) : new XmlConnectionsLoader(connectionFileName); - var newConnectionTreeModel = connectionLoader.Load(); + ConnectionTreeModel newConnectionTreeModel = connectionLoader.Load(); if (useDatabase) LastSqlUpdate = DateTime.Now.ToUniversalTime(); @@ -248,7 +248,7 @@ namespace mRemoteNG.Connection bool previouslyUsingDatabase = UsingDatabase; - var saver = useDatabase + ISaver saver = useDatabase ? (ISaver)new SqlConnectionsSaver(saveFilter, _localConnectionPropertiesSerializer, _localConnectionPropertiesDataProvider) : new XmlConnectionsSaver(connectionFileName, saveFilter); @@ -287,7 +287,7 @@ namespace mRemoteNG.Connection return; } - var t = new Thread(() => + Thread t = new(() => { lock (SaveLock) { @@ -338,7 +338,7 @@ namespace mRemoteNG.Connection private string GetDefaultStartupConnectionFileNameNormalEdition() { - var appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.ProductName, ConnectionsFileInfo.DefaultConnectionsFile); + string appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.ProductName, ConnectionsFileInfo.DefaultConnectionsFile); return File.Exists(appDataPath) ? appDataPath : GetDefaultStartupConnectionFileNamePortableEdition(); } diff --git a/mRemoteNG/Connection/DefaultConnectionInfo.cs b/mRemoteNG/Connection/DefaultConnectionInfo.cs index ebe86d79..30c425cc 100644 --- a/mRemoteNG/Connection/DefaultConnectionInfo.cs +++ b/mRemoteNG/Connection/DefaultConnectionInfo.cs @@ -24,17 +24,17 @@ namespace mRemoteNG.Connection if (propertyNameMutator == null) propertyNameMutator = a => a; - var connectionProperties = GetSerializableProperties(); - foreach (var property in connectionProperties) + System.Collections.Generic.IEnumerable connectionProperties = GetSerializableProperties(); + foreach (System.Reflection.PropertyInfo property in connectionProperties) { try { - var expectedPropertyName = propertyNameMutator(property.Name); - var propertyFromSource = typeof(TSource).GetProperty(expectedPropertyName); + string expectedPropertyName = propertyNameMutator(property.Name); + System.Reflection.PropertyInfo propertyFromSource = typeof(TSource).GetProperty(expectedPropertyName); if (propertyFromSource == null) throw new SettingsPropertyNotFoundException($"No property with name '{expectedPropertyName}' found."); - var valueFromSource = propertyFromSource.GetValue(sourceInstance, null); + object valueFromSource = propertyFromSource.GetValue(sourceInstance, null); if (property.PropertyType.IsEnum) { @@ -56,20 +56,20 @@ namespace mRemoteNG.Connection if (propertyNameMutator == null) propertyNameMutator = (a) => a; - var connectionProperties = GetSerializableProperties(); + System.Collections.Generic.IEnumerable connectionProperties = GetSerializableProperties(); - foreach (var property in connectionProperties) + foreach (System.Reflection.PropertyInfo property in connectionProperties) { try { - var expectedPropertyName = propertyNameMutator(property.Name); - var propertyFromDestination = typeof(TDestination).GetProperty(expectedPropertyName); + string expectedPropertyName = propertyNameMutator(property.Name); + System.Reflection.PropertyInfo propertyFromDestination = typeof(TDestination).GetProperty(expectedPropertyName); if (propertyFromDestination == null) throw new SettingsPropertyNotFoundException($"No property with name '{expectedPropertyName}' found."); // ensure value is of correct type - var value = Convert.ChangeType(property.GetValue(Instance, null), propertyFromDestination.PropertyType); + object value = Convert.ChangeType(property.GetValue(Instance, null), propertyFromDestination.PropertyType); propertyFromDestination.SetValue(destinationInstance, value, null); } diff --git a/mRemoteNG/Connection/DefaultConnectionInheritance.cs b/mRemoteNG/Connection/DefaultConnectionInheritance.cs index acd08f59..13ce8b87 100644 --- a/mRemoteNG/Connection/DefaultConnectionInheritance.cs +++ b/mRemoteNG/Connection/DefaultConnectionInheritance.cs @@ -24,17 +24,17 @@ namespace mRemoteNG.Connection public void LoadFrom(TSource sourceInstance, Func propertyNameMutator = null) { if (propertyNameMutator == null) propertyNameMutator = a => a; - var inheritanceProperties = GetProperties(); - foreach (var property in inheritanceProperties) + System.Collections.Generic.IEnumerable inheritanceProperties = GetProperties(); + foreach (System.Reflection.PropertyInfo property in inheritanceProperties) { - var propertyFromSettings = typeof(TSource).GetProperty(propertyNameMutator(property.Name)); + System.Reflection.PropertyInfo propertyFromSettings = typeof(TSource).GetProperty(propertyNameMutator(property.Name)); if (propertyFromSettings == null) { Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, $"DefaultConInherit-LoadFrom: Could not load {property.Name}", true); continue; } - var valueFromSettings = propertyFromSettings.GetValue(sourceInstance, null); + object valueFromSettings = propertyFromSettings.GetValue(sourceInstance, null); property.SetValue(Instance, valueFromSettings, null); } } @@ -43,11 +43,11 @@ namespace mRemoteNG.Connection Func propertyNameMutator = null) { if (propertyNameMutator == null) propertyNameMutator = a => a; - var inheritanceProperties = GetProperties(); - foreach (var property in inheritanceProperties) + System.Collections.Generic.IEnumerable inheritanceProperties = GetProperties(); + foreach (System.Reflection.PropertyInfo property in inheritanceProperties) { - var propertyFromSettings = typeof(TDestination).GetProperty(propertyNameMutator(property.Name)); - var localValue = property.GetValue(Instance, null); + System.Reflection.PropertyInfo propertyFromSettings = typeof(TDestination).GetProperty(propertyNameMutator(property.Name)); + object localValue = property.GetValue(Instance, null); if (propertyFromSettings == null) { Runtime.MessageCollector?.AddMessage(Messages.MessageClass.ErrorMsg, $"DefaultConInherit-SaveTo: Could not load {property.Name}", true); diff --git a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs index 103c94e6..7e2ee4e8 100644 --- a/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs +++ b/mRemoteNG/Connection/Protocol/Http/Connection.Protocol.HTTPBase.cs @@ -1,11 +1,14 @@ using System; using System.Windows.Forms; using Microsoft.Web.WebView2.WinForms; +using Microsoft.Web.WebView2.Core; using mRemoteNG.Tools; using mRemoteNG.App; using mRemoteNG.UI.Tabs; using mRemoteNG.Resources.Language; using System.Runtime.Versioning; +using System.Windows.Forms.VisualStyles; + namespace mRemoteNG.Connection.Protocol.Http { @@ -29,7 +32,7 @@ namespace mRemoteNG.Connection.Protocol.Http { if (renderingEngine == RenderingEngine.EdgeChromium) { - Control = new WebView2() + Control = new Microsoft.Web.WebView2.WinForms.WebView2() { Dock = DockStyle.Fill, }; @@ -64,13 +67,12 @@ namespace mRemoteNG.Connection.Protocol.Http if (InterfaceControl.Info.RenderingEngine == RenderingEngine.EdgeChromium) { - var edge = (WebView2)_wBrowser; - + Microsoft.Web.WebView2.WinForms.WebView2 edge = (Microsoft.Web.WebView2.WinForms.WebView2)_wBrowser; edge.CoreWebView2InitializationCompleted += Edge_CoreWebView2InitializationCompleted; } else { - var objWebBrowser = (WebBrowser)_wBrowser; + WebBrowser objWebBrowser = (WebBrowser)_wBrowser; objWebBrowser.ScrollBarsEnabled = true; // http://stackoverflow.com/questions/4655662/how-to-ignore-script-errors-in-webbrowser @@ -95,11 +97,12 @@ namespace mRemoteNG.Connection.Protocol.Http { if (InterfaceControl.Info.RenderingEngine == RenderingEngine.EdgeChromium) { - ((WebView2)_wBrowser).Source = new Uri(GetUrl()); + ((Microsoft.Web.WebView2.WinForms.WebView2)_wBrowser).Source = new Uri(GetUrl()); } else { ((WebBrowser)_wBrowser).Navigate(GetUrl()); + } base.Connect(); @@ -112,6 +115,12 @@ namespace mRemoteNG.Connection.Protocol.Http } } + private void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e) + { + // Suppress the popup (prevent it from opening in a new window) + e.Handled = true; + } + #endregion #region Private Methods @@ -120,15 +129,19 @@ namespace mRemoteNG.Connection.Protocol.Http { try { - var strHost = InterfaceControl.Info.Hostname; + string strHost = InterfaceControl.Info.Hostname; if (InterfaceControl.Info.Port != defaultPort) { if (strHost.EndsWith("/")) - strHost = strHost.Substring(0, strHost.Length - 1); + { + strHost = strHost[..^1]; + } if (strHost.Contains(httpOrS + "://") == false) + { strHost = httpOrS + "://" + strHost; + } strHost = strHost + ":" + InterfaceControl.Info.Port; } @@ -161,7 +174,7 @@ namespace mRemoteNG.Connection.Protocol.Http private void WBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) { - if (!(_wBrowser is WebBrowser objWebBrowser)) return; + if (_wBrowser is not WebBrowser objWebBrowser) return; // This can only be set once the WebBrowser control is shown, it will throw a COM exception otherwise. objWebBrowser.AllowWebBrowserDrop = false; @@ -173,11 +186,11 @@ namespace mRemoteNG.Connection.Protocol.Http { try { - if (!(InterfaceControl.Parent is ConnectionTab tabP)) return; + if (InterfaceControl.Parent is not ConnectionTab tabP) return; string shortTitle; if (((WebBrowser)_wBrowser).DocumentTitle.Length >= 15) { - shortTitle = ((WebBrowser)_wBrowser).DocumentTitle.Substring(0, 10) + "..."; + shortTitle = ((WebBrowser)_wBrowser).DocumentTitle[..10] + "..."; } else { diff --git a/mRemoteNG/Connection/Protocol/IntegratedProgram.cs b/mRemoteNG/Connection/Protocol/IntegratedProgram.cs index 3a291408..26243bf4 100644 --- a/mRemoteNG/Connection/Protocol/IntegratedProgram.cs +++ b/mRemoteNG/Connection/Protocol/IntegratedProgram.cs @@ -66,7 +66,7 @@ namespace mRemoteNG.Connection.Protocol return false; } - var argParser = new ExternalToolArgumentParser(_externalTool.ConnectionInfo); + ExternalToolArgumentParser argParser = new(_externalTool.ConnectionInfo); _process = new Process { StartInfo = @@ -84,7 +84,7 @@ namespace mRemoteNG.Connection.Protocol _process.Start(); _process.WaitForInputIdle(Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000); - var startTicks = Environment.TickCount; + int startTicks = Environment.TickCount; while (_handle.ToInt32() == 0 & Environment.TickCount < startTicks + Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000) { diff --git a/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs b/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs index 52ad93de..9cc822e9 100644 --- a/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs +++ b/mRemoteNG/Connection/Protocol/PowerShell/Connection.Protocol.PowerShell.cs @@ -191,9 +191,9 @@ namespace mRemoteNG.Connection.Protocol.PowerShell // Setup process for script with arguments //* The -NoProfile parameter would be a valuable addition but should be able to be deactivated. - var arguments = $@"-NoExit -Command ""& {{ {psScriptBlock} }}"" -Hostname ""'{_connectionInfo.Hostname}'"" -Username ""'{psUsername}'"" -Password ""'{_connectionInfo.Password}'"" -LoginAttempts {psLoginAttempts}"; - var hostname = _connectionInfo.Hostname.Trim().ToLower(); - var useLocalHost = hostname == "" || hostname.Equals("localhost"); + string arguments = $@"-NoExit -Command ""& {{ {psScriptBlock} }}"" -Hostname ""'{_connectionInfo.Hostname}'"" -Username ""'{psUsername}'"" -Password ""'{_connectionInfo.Password}'"" -LoginAttempts {psLoginAttempts}"; + string hostname = _connectionInfo.Hostname.Trim().ToLower(); + bool useLocalHost = hostname == "" || hostname.Equals("localhost"); if (useLocalHost) { arguments = $@"-NoExit"; diff --git a/mRemoteNG/Connection/Protocol/ProtocolBase.cs b/mRemoteNG/Connection/Protocol/ProtocolBase.cs index cf63bc0e..49d0fafe 100644 --- a/mRemoteNG/Connection/Protocol/ProtocolBase.cs +++ b/mRemoteNG/Connection/Protocol/ProtocolBase.cs @@ -62,7 +62,7 @@ namespace mRemoteNG.Connection.Protocol public ConnectionInfo.Force Force { get; set; } - protected readonly System.Timers.Timer tmrReconnect = new System.Timers.Timer(5000); + protected readonly System.Timers.Timer tmrReconnect = new(5000); protected ReconnectGroup ReconnectGroup; protected ProtocolBase(string name) @@ -145,7 +145,7 @@ namespace mRemoteNG.Connection.Protocol public virtual void Close() { - var t = new Thread(CloseBG); + Thread t = new(CloseBG); t.SetApartmentState(ApartmentState.STA); t.IsBackground = true; t.Start(); @@ -208,7 +208,7 @@ namespace mRemoteNG.Connection.Protocol } if (_interfaceControl.InvokeRequired) { - var s = new DisposeInterfaceCB(DisposeInterface); + DisposeInterfaceCB s = new(DisposeInterface); _interfaceControl.Invoke(s); } else @@ -227,7 +227,7 @@ namespace mRemoteNG.Connection.Protocol if (_interfaceControl.Parent.InvokeRequired) { - var s = new SetTagToNothingCB(SetTagToNothing); + SetTagToNothingCB s = new(SetTagToNothing); _interfaceControl.Parent.Invoke(s); } else @@ -245,7 +245,7 @@ namespace mRemoteNG.Connection.Protocol if (Control.InvokeRequired) { - var s = new DisposeControlCB(DisposeControl); + DisposeControlCB s = new(DisposeControl); Control.Invoke(s); } else diff --git a/mRemoteNG/Connection/Protocol/ProtocolFactory.cs b/mRemoteNG/Connection/Protocol/ProtocolFactory.cs index 165bef1c..820724f8 100644 --- a/mRemoteNG/Connection/Protocol/ProtocolFactory.cs +++ b/mRemoteNG/Connection/Protocol/ProtocolFactory.cs @@ -15,7 +15,7 @@ namespace mRemoteNG.Connection.Protocol [SupportedOSPlatform("windows")] public class ProtocolFactory { - private readonly RdpProtocolFactory _rdpProtocolFactory = new RdpProtocolFactory(); + private readonly RdpProtocolFactory _rdpProtocolFactory = new(); public ProtocolBase CreateProtocol(ConnectionInfo connectionInfo) { @@ -23,7 +23,7 @@ namespace mRemoteNG.Connection.Protocol switch (connectionInfo.Protocol) { case ProtocolType.RDP: - var rdp = _rdpProtocolFactory.Build(connectionInfo.RdpVersion); + RdpProtocol rdp = _rdpProtocolFactory.Build(connectionInfo.RdpVersion); rdp.LoadBalanceInfoUseUtf8 = Properties.OptionsAdvancedPage.Default.RdpLoadBalanceInfoUseUtf8; return rdp; case ProtocolType.VNC: diff --git a/mRemoteNG/Connection/Protocol/ProtocolList.cs b/mRemoteNG/Connection/Protocol/ProtocolList.cs index 4acba4ec..4b49eedc 100644 --- a/mRemoteNG/Connection/Protocol/ProtocolList.cs +++ b/mRemoteNG/Connection/Protocol/ProtocolList.cs @@ -12,7 +12,7 @@ namespace mRemoteNG.Connection.Protocol { get { - var @base = index as ProtocolBase; + ProtocolBase @base = index as ProtocolBase; if (@base != null) return @base; if (index is int) @@ -32,7 +32,7 @@ namespace mRemoteNG.Connection.Protocol public void AddRange(ProtocolBase[] cProt) { - foreach (var cP in cProt) + foreach (ProtocolBase cP in cProt) { List.Add(cP); } diff --git a/mRemoteNG/Connection/Protocol/PuttyBase.cs b/mRemoteNG/Connection/Protocol/PuttyBase.cs index cb139161..2de96413 100644 --- a/mRemoteNG/Connection/Protocol/PuttyBase.cs +++ b/mRemoteNG/Connection/Protocol/PuttyBase.cs @@ -24,7 +24,7 @@ namespace mRemoteNG.Connection.Protocol { private const int IDM_RECONF = 0x50; // PuTTY Settings Menu ID private bool _isPuttyNg; - private readonly DisplayProperties _display = new DisplayProperties(); + private readonly DisplayProperties _display = new(); #region Public Properties @@ -63,7 +63,7 @@ namespace mRemoteNG.Connection.Protocol string data = (string)oData; string random = data[..8]; string password = data[8..]; - var server = new NamedPipeServerStream($"mRemoteNGSecretPipe{random}"); + NamedPipeServerStream server = new($"mRemoteNGSecretPipe{random}"); server.WaitForConnection(); StreamWriter writer = new(server); writer.Write(password); @@ -88,7 +88,7 @@ namespace mRemoteNG.Connection.Protocol } }; - var arguments = new CommandLineArguments { EscapeForShell = false }; + CommandLineArguments arguments = new() { EscapeForShell = false }; arguments.Add("-load", InterfaceControl.Info.PuttySession); @@ -99,10 +99,10 @@ namespace mRemoteNG.Connection.Protocol if (PuttyProtocol == Putty_Protocol.ssh) { - var username = InterfaceControl.Info?.Username ?? ""; - var password = InterfaceControl.Info?.Password ?? ""; - var domain = InterfaceControl.Info?.Domain ?? ""; - var UserViaAPI = InterfaceControl.Info?.UserViaAPI ?? ""; + string username = InterfaceControl.Info?.Username ?? ""; + string password = InterfaceControl.Info?.Password ?? ""; + string domain = InterfaceControl.Info?.Domain ?? ""; + string UserViaAPI = InterfaceControl.Info?.UserViaAPI ?? ""; string privatekey = ""; // access secret server api if necessary @@ -116,8 +116,10 @@ namespace mRemoteNG.Connection.Protocol { optionalTemporaryPrivateKeyPath = Path.GetTempFileName(); File.WriteAllText(optionalTemporaryPrivateKeyPath, privatekey); - FileInfo fileInfo = new FileInfo(optionalTemporaryPrivateKeyPath); - fileInfo.Attributes = FileAttributes.Temporary; + FileInfo fileInfo = new(optionalTemporaryPrivateKeyPath) + { + Attributes = FileAttributes.Temporary + }; } } catch (Exception ex) @@ -160,7 +162,7 @@ namespace mRemoteNG.Connection.Protocol { if (Properties.OptionsCredentialsPage.Default.EmptyCredentials == "custom") { - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); password = cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey); } } @@ -178,7 +180,7 @@ namespace mRemoteNG.Connection.Protocol { string random = string.Join("", Guid.NewGuid().ToString("n").Take(8).Select(o => o)); // write data to pipe - var thread = new Thread(new ParameterizedThreadStart(CreatePipe)); + Thread thread = new(new ParameterizedThreadStart(CreatePipe)); thread.Start($"{random}{password}"); // start putty with piped password arguments.Add("-pwfile", $"\\\\.\\PIPE\\mRemoteNGSecretPipe{random}"); @@ -216,7 +218,7 @@ namespace mRemoteNG.Connection.Protocol PuttyProcess.Start(); PuttyProcess.WaitForInputIdle(Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000); - var startTicks = Environment.TickCount; + int startTicks = Environment.TickCount; while (PuttyHandle.ToInt32() == 0 & Environment.TickCount < startTicks + Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000) { @@ -249,7 +251,7 @@ namespace mRemoteNG.Connection.Protocol if (!string.IsNullOrEmpty(InterfaceControl.Info?.OpeningCommand)) { NativeMethods.SetForegroundWindow(PuttyHandle); - var finalCommand = InterfaceControl.Info.OpeningCommand.TrimEnd() + "\n"; + string finalCommand = InterfaceControl.Info.OpeningCommand.TrimEnd() + "\n"; SendKeys.SendWait(finalCommand); } @@ -299,8 +301,8 @@ namespace mRemoteNG.Connection.Protocol } else { - var scaledFrameBorderHeight = _display.ScaleHeight(SystemInformation.FrameBorderSize.Height); - var scaledFrameBorderWidth = _display.ScaleWidth(SystemInformation.FrameBorderSize.Width); + int scaledFrameBorderHeight = _display.ScaleHeight(SystemInformation.FrameBorderSize.Height); + int scaledFrameBorderWidth = _display.ScaleWidth(SystemInformation.FrameBorderSize.Width); NativeMethods.MoveWindow(PuttyHandle, -scaledFrameBorderWidth, -(SystemInformation.CaptionHeight + scaledFrameBorderHeight), diff --git a/mRemoteNG/Connection/Protocol/RDP/AzureLoadBalanceInfoEncoder.cs b/mRemoteNG/Connection/Protocol/RDP/AzureLoadBalanceInfoEncoder.cs index 1f7a2e38..7605a468 100644 --- a/mRemoteNG/Connection/Protocol/RDP/AzureLoadBalanceInfoEncoder.cs +++ b/mRemoteNG/Connection/Protocol/RDP/AzureLoadBalanceInfoEncoder.cs @@ -33,7 +33,7 @@ namespace mRemoteNG.Connection.Protocol.RDP loadBalanceInfo += " "; loadBalanceInfo += "\r\n"; - var bytes = Encoding.UTF8.GetBytes(loadBalanceInfo); + byte[] bytes = Encoding.UTF8.GetBytes(loadBalanceInfo); return Encoding.Unicode.GetString(bytes); } } diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs index e660256d..ffcea237 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs @@ -292,7 +292,7 @@ namespace mRemoteNG.Connection.Protocol.RDP { try { - using var control = CreateActiveXRdpClientControl(); + using AxHost control = CreateActiveXRdpClientControl(); control.CreateControl(); return true; } @@ -308,12 +308,12 @@ namespace mRemoteNG.Connection.Protocol.RDP protected static class Versions { // https://en.wikipedia.org/wiki/Remote_Desktop_Protocol - public static readonly Version RDC60 = new Version(6, 0, 6000); - public static readonly Version RDC61 = new Version(6, 0, 6001); - public static readonly Version RDC70 = new Version(6, 1, 7600); - public static readonly Version RDC80 = new Version(6, 2, 9200); - public static readonly Version RDC81 = new Version(6, 3, 9600); - public static readonly Version RDC100 = new Version(10, 0, 0); + public static readonly Version RDC60 = new(6, 0, 6000); + public static readonly Version RDC61 = new(6, 0, 6001); + public static readonly Version RDC70 = new(6, 1, 7600); + public static readonly Version RDC80 = new(6, 2, 9200); + public static readonly Version RDC81 = new(6, 3, 9600); + public static readonly Version RDC100 = new(10, 0, 0); } private void SetRdpClientProperties() @@ -433,10 +433,10 @@ namespace mRemoteNG.Connection.Protocol.RDP { _rdpClient.TransportSettings2.GatewayCredSharing = 0; - var gwu = connectionInfo.RDGatewayUsername; - var gwp = connectionInfo.RDGatewayPassword; - var gwd = connectionInfo.RDGatewayDomain; - var pkey = ""; + string gwu = connectionInfo.RDGatewayUsername; + string gwp = connectionInfo.RDGatewayPassword; + string gwd = connectionInfo.RDGatewayDomain; + string pkey = ""; // access secret server api if necessary if (InterfaceControl.Info.RDGatewayExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer) @@ -521,11 +521,11 @@ namespace mRemoteNG.Connection.Protocol.RDP return; } - var userName = connectionInfo?.Username ?? ""; - var password = connectionInfo?.Password ?? ""; - var domain = connectionInfo?.Domain ?? ""; - var userViaApi = connectionInfo?.UserViaAPI ?? ""; - var pkey = ""; + string userName = connectionInfo?.Username ?? ""; + string password = connectionInfo?.Password ?? ""; + string domain = connectionInfo?.Domain ?? ""; + string userViaApi = connectionInfo?.UserViaAPI ?? ""; + string pkey = ""; // access secret server api if necessary if (InterfaceControl.Info.ExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer) @@ -576,7 +576,7 @@ namespace mRemoteNG.Connection.Protocol.RDP { if (Properties.OptionsCredentialsPage.Default.DefaultPassword != "") { - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); _rdpClient.AdvancedSettings2.ClearTextPassword = cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey); } } @@ -644,7 +644,7 @@ namespace mRemoteNG.Connection.Protocol.RDP break; default: { - var resolution = connectionInfo.Resolution.GetResolutionRectangle(); + System.Drawing.Rectangle resolution = connectionInfo.Resolution.GetResolutionRectangle(); _rdpClient.DesktopWidth = resolution.Width; _rdpClient.DesktopHeight = resolution.Height; break; @@ -697,7 +697,7 @@ namespace mRemoteNG.Connection.Protocol.RDP _rdpClient.AdvancedSettings2.RedirectDrives = true; else if (RDPDiskDrives.Custom == connectionInfo.RedirectDiskDrives) { - var rdpNS5 = (IMsRdpClientNonScriptable5)((AxHost)Control).GetOcx(); + IMsRdpClientNonScriptable5 rdpNS5 = (IMsRdpClientNonScriptable5)((AxHost)Control).GetOcx(); for (uint i = 0; i < rdpNS5.DriveCollection.DriveCount; i++) { IMsRdpDrive drive = rdpNS5.DriveCollection.DriveByIndex[i]; @@ -707,7 +707,7 @@ namespace mRemoteNG.Connection.Protocol.RDP else { // Local Drives - var rdpNS5 = (IMsRdpClientNonScriptable5)((AxHost)Control).GetOcx(); + IMsRdpClientNonScriptable5 rdpNS5 = (IMsRdpClientNonScriptable5)((AxHost)Control).GetOcx(); for (uint i = 0; i < rdpNS5.DriveCollection.DriveCount; i++) { IMsRdpDrive drive = rdpNS5.DriveCollection.DriveByIndex[i]; @@ -733,7 +733,7 @@ namespace mRemoteNG.Connection.Protocol.RDP { try { - var pFlags = 0; + int pFlags = 0; if (connectionInfo.DisplayThemes == false) pFlags += (int)RDPPerformanceFlags.DisableThemes; @@ -829,7 +829,7 @@ namespace mRemoteNG.Connection.Protocol.RDP private void RDPEvent_OnFatalError(int errorCode) { - var errorMsg = RdpErrorCodes.GetError(errorCode); + string errorMsg = RdpErrorCodes.GetError(errorCode); Event_ErrorOccured(this, errorMsg, errorCode); } @@ -838,7 +838,7 @@ namespace mRemoteNG.Connection.Protocol.RDP const int UI_ERR_NORMAL_DISCONNECT = 0xB08; if (discReason != UI_ERR_NORMAL_DISCONNECT) { - var reason = _rdpClient.GetErrorDescription((uint)discReason, (uint)_rdpClient.ExtendedDisconnectReason); + string reason = _rdpClient.GetErrorDescription((uint)discReason, (uint)_rdpClient.ExtendedDisconnectReason); Event_Disconnected(this, reason, discReason); } @@ -917,7 +917,7 @@ namespace mRemoteNG.Connection.Protocol.RDP { try { - var srvReady = PortScanner.IsPortOpen(connectionInfo.Hostname, Convert.ToString(connectionInfo.Port)); + bool srvReady = PortScanner.IsPortOpen(connectionInfo.Hostname, Convert.ToString(connectionInfo.Port)); ReconnectGroup.ServerReady = srvReady; diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs index d08c1326..06d1362f 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol7.cs @@ -40,8 +40,8 @@ namespace mRemoteNG.Connection.Protocol.RDP if (connectionInfo.RDGatewayUseConnectionCredentials == RDGatewayUseConnectionCredentials.AccessToken) { - var authToken = connectionInfo.RDGatewayAccessToken; - var encryptedAuthToken = RdGatewayAccessTokenHelper.EncryptAuthCookieString(authToken); + string authToken = connectionInfo.RDGatewayAccessToken; + string encryptedAuthToken = RdGatewayAccessTokenHelper.EncryptAuthCookieString(authToken); RdpClient7.TransportSettings3.GatewayEncryptedAuthCookie = encryptedAuthToken; RdpClient7.TransportSettings3.GatewayEncryptedAuthCookieSize = (uint)encryptedAuthToken.Length; RdpClient7.TransportSettings3.GatewayCredsSource = 5; diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs index 5890fae0..001eb30a 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol8.cs @@ -96,7 +96,7 @@ namespace mRemoteNG.Connection.Protocol.RDP try { - var size = Fullscreen + Size size = Fullscreen ? Screen.FromControl(Control).Bounds.Size : Control.Size; diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocolFactory.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocolFactory.cs index b9c3142a..93abeeb2 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocolFactory.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocolFactory.cs @@ -33,14 +33,14 @@ namespace mRemoteNG.Connection.Protocol.RDP private RdpProtocol BuildHighestSupportedVersion() { - var versions = Enum.GetValues(typeof(RdpVersion)) + IEnumerable versions = Enum.GetValues(typeof(RdpVersion)) .OfType() .Except(new[] { RdpVersion.Highest }) .Reverse(); - foreach (var version in versions) + foreach (RdpVersion version in versions) { - var rdp = Build(version); + RdpProtocol rdp = Build(version); if (rdp.RdpVersionSupported()) return rdp; } @@ -50,12 +50,12 @@ namespace mRemoteNG.Connection.Protocol.RDP public List GetSupportedVersions() { - var versions = Enum.GetValues(typeof(RdpVersion)) + IEnumerable versions = Enum.GetValues(typeof(RdpVersion)) .OfType() .Except(new[] { RdpVersion.Highest }); - var supportedVersions = new List(); - foreach (var version in versions) + List supportedVersions = new(); + foreach (RdpVersion version in versions) { if (Build(version).RdpVersionSupported()) supportedVersions.Add(version); diff --git a/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs b/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs index 971e2d93..dc75dc4c 100644 --- a/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs +++ b/mRemoteNG/Connection/Protocol/VNC/Connection.Protocol.VNC.cs @@ -22,7 +22,7 @@ namespace mRemoteNG.Connection.Protocol.VNC private ConnectionInfo _info; private static bool _isConnectionSuccessful; private static Exception _socketexception; - private static readonly ManualResetEvent TimeoutObject = new ManualResetEvent(false); + private static readonly ManualResetEvent TimeoutObject = new(false); #endregion @@ -160,7 +160,7 @@ namespace mRemoteNG.Connection.Protocol.VNC private static bool TestConnect(string hostName, int port, int timeoutMSec) { - var tcpclient = new TcpClient(); + TcpClient tcpclient = new(); TimeoutObject.Reset(); tcpclient.BeginConnect(hostName, port, CallBackMethod, tcpclient); @@ -183,7 +183,7 @@ namespace mRemoteNG.Connection.Protocol.VNC try { _isConnectionSuccessful = false; - var tcpclient = asyncresult.AsyncState as TcpClient; + TcpClient tcpclient = asyncresult.AsyncState as TcpClient; if (tcpclient?.Client == null) return; diff --git a/mRemoteNG/Connection/PuttySessionInfo.cs b/mRemoteNG/Connection/PuttySessionInfo.cs index cdab5428..ffcf8ed3 100644 --- a/mRemoteNG/Connection/PuttySessionInfo.cs +++ b/mRemoteNG/Connection/PuttySessionInfo.cs @@ -63,7 +63,7 @@ namespace mRemoteNG.Connection { try { - var puttyProcess = new PuttyProcessController(); + PuttyProcessController puttyProcess = new(); if (!puttyProcess.Start()) { return; diff --git a/mRemoteNG/Connection/WebHelper.cs b/mRemoteNG/Connection/WebHelper.cs index 5b6ae799..9da9d12e 100644 --- a/mRemoteNG/Connection/WebHelper.cs +++ b/mRemoteNG/Connection/WebHelper.cs @@ -10,7 +10,7 @@ namespace mRemoteNG.Connection { public static void GoToUrl(string url) { - var connectionInfo = new ConnectionInfo(); + ConnectionInfo connectionInfo = new(); connectionInfo.CopyFrom(DefaultConnectionInfo.Instance); connectionInfo.Name = ""; diff --git a/mRemoteNG/Container/ContainerInfo.cs b/mRemoteNG/Container/ContainerInfo.cs index 473f9833..5ed0f2a8 100644 --- a/mRemoteNG/Container/ContainerInfo.cs +++ b/mRemoteNG/Container/ContainerInfo.cs @@ -16,7 +16,7 @@ namespace mRemoteNG.Container { private bool _isExpanded; - [Browsable(false)] public List Children { get; } = new List(); + [Browsable(false)] public List Children { get; } = []; [Category(""), Browsable(false), ReadOnly(false), Bindable(false), DefaultValue(""), DesignOnly(false)] public bool IsExpanded @@ -60,7 +60,7 @@ namespace mRemoteNG.Container public void AddChildAbove(ConnectionInfo newChildItem, ConnectionInfo reference) { - var newChildIndex = Children.IndexOf(reference); + int newChildIndex = Children.IndexOf(reference); if (newChildIndex < 0) newChildIndex = Children.Count; AddChildAt(newChildItem, newChildIndex); @@ -68,7 +68,7 @@ namespace mRemoteNG.Container public void AddChildBelow(ConnectionInfo newChildItem, ConnectionInfo reference) { - var newChildIndex = Children.IndexOf(reference) + 1; + int newChildIndex = Children.IndexOf(reference) + 1; if (newChildIndex > Children.Count || newChildIndex < 1) newChildIndex = Children.Count; AddChildAt(newChildItem, newChildIndex); @@ -86,7 +86,7 @@ namespace mRemoteNG.Container public void AddChildRange(IEnumerable newChildren) { - foreach (var child in newChildren) + foreach (ConnectionInfo child in newChildren) { AddChild(child); } @@ -103,7 +103,7 @@ namespace mRemoteNG.Container public void RemoveChildRange(IEnumerable removalTargets) { - foreach (var child in removalTargets) + foreach (ConnectionInfo child in removalTargets) { RemoveChild(child); } @@ -111,7 +111,7 @@ namespace mRemoteNG.Container public void SetChildPosition(ConnectionInfo child, int newIndex) { - var originalIndex = Children.IndexOf(child); + int originalIndex = Children.IndexOf(child); if (originalIndex < 0 || originalIndex == newIndex || newIndex < 0) return; Children.Remove(child); if (newIndex > Children.Count) newIndex = Children.Count; @@ -121,14 +121,14 @@ namespace mRemoteNG.Container public void SetChildAbove(ConnectionInfo childToPromote, ConnectionInfo reference) { - var newIndex = GetNewChildIndexAboveReference(childToPromote, reference); + int newIndex = GetNewChildIndexAboveReference(childToPromote, reference); SetChildPosition(childToPromote, newIndex); } private int GetNewChildIndexAboveReference(ConnectionInfo childToPromote, ConnectionInfo reference) { - var originalIndex = Children.IndexOf(childToPromote); - var newIndex = Children.IndexOf(reference); + int originalIndex = Children.IndexOf(childToPromote); + int newIndex = Children.IndexOf(reference); if (originalIndex < newIndex) newIndex -= 1; return newIndex < 0 ? 0 : newIndex; @@ -136,14 +136,14 @@ namespace mRemoteNG.Container public void SetChildBelow(ConnectionInfo childToPromote, ConnectionInfo reference) { - var newIndex = GetNewChildIndexBelowReference(childToPromote, reference); + int newIndex = GetNewChildIndexBelowReference(childToPromote, reference); SetChildPosition(childToPromote, newIndex); } private int GetNewChildIndexBelowReference(ConnectionInfo childToPromote, ConnectionInfo reference) { - var originalIndex = Children.IndexOf(childToPromote); - var newIndex = Children.IndexOf(reference); + int originalIndex = Children.IndexOf(childToPromote); + int newIndex = Children.IndexOf(reference); if (originalIndex > newIndex) newIndex += 1; return newIndex < 0 ? 0 : newIndex; @@ -151,13 +151,13 @@ namespace mRemoteNG.Container public void PromoteChild(ConnectionInfo child) { - var originalIndex = Children.IndexOf(child); + int originalIndex = Children.IndexOf(child); SetChildPosition(child, originalIndex - 1); } public void DemoteChild(ConnectionInfo child) { - var originalIndex = Children.IndexOf(child); + int originalIndex = Children.IndexOf(child); SetChildPosition(child, originalIndex + 1); } @@ -169,7 +169,7 @@ namespace mRemoteNG.Container public void SortOn(Func propertyToCompare, ListSortDirection sortDirection = ListSortDirection.Ascending) where TProperty : IComparable { - var connectionComparer = new ConnectionInfoComparer(propertyToCompare) + ConnectionInfoComparer connectionComparer = new(propertyToCompare) { SortDirection = sortDirection }; @@ -185,7 +185,7 @@ namespace mRemoteNG.Container public void SortOnRecursive(Func propertyToCompare, ListSortDirection sortDirection = ListSortDirection.Ascending) where TProperty : IComparable { - foreach (var child in Children.OfType()) + foreach (ContainerInfo child in Children.OfType()) child.SortOnRecursive(propertyToCompare, sortDirection); SortOn(propertyToCompare, sortDirection); } @@ -193,13 +193,13 @@ namespace mRemoteNG.Container // Deep clone, recursive public override ConnectionInfo Clone() { - var newContainer = new ContainerInfo(); + ContainerInfo newContainer = new(); newContainer.CopyFrom(this); - newContainer.OpenConnections = new ProtocolList(); + newContainer.OpenConnections = []; newContainer.Inheritance = Inheritance.Clone(newContainer); - foreach (var child in Children.ToArray()) + foreach (ConnectionInfo child in Children.ToArray()) { - var newChild = child.Clone(); + ConnectionInfo newChild = child.Clone(); newChild.RemoveParent(); newContainer.AddChild(newChild); } @@ -215,11 +215,11 @@ namespace mRemoteNG.Container public IEnumerable GetRecursiveChildList() { - var childList = new List(); - foreach (var child in Children) + List childList = new(); + foreach (ConnectionInfo child in Children) { childList.Add(child); - var childContainer = child as ContainerInfo; + ContainerInfo childContainer = child as ContainerInfo; if (childContainer != null) childList.AddRange(GetRecursiveChildList(childContainer)); } @@ -229,11 +229,11 @@ namespace mRemoteNG.Container private IEnumerable GetRecursiveChildList(ContainerInfo container) { - var childList = new List(); - foreach (var child in container.Children) + List childList = new(); + foreach (ConnectionInfo child in container.Children) { childList.Add(child); - var childContainer = child as ContainerInfo; + ContainerInfo childContainer = child as ContainerInfo; if (childContainer != null) childList.AddRange(GetRecursiveChildList(childContainer)); } @@ -243,12 +243,12 @@ namespace mRemoteNG.Container public IEnumerable GetRecursiveFavoriteChildList() { - var childList = new List(); - foreach (var child in Children) + List childList = new(); + foreach (ConnectionInfo child in Children) { if (child.Favorite && child.GetTreeNodeType() == TreeNodeType.Connection) childList.Add(child); - var childContainer = child as ContainerInfo; + ContainerInfo childContainer = child as ContainerInfo; if (childContainer != null) childList.AddRange(GetRecursiveFavoritChildList(childContainer)); } @@ -261,9 +261,9 @@ namespace mRemoteNG.Container /// public void ApplyConnectionPropertiesToChildren() { - var children = GetRecursiveChildList(); + IEnumerable children = GetRecursiveChildList(); - foreach (var child in children) + foreach (ConnectionInfo child in children) { child.CopyFrom(this); } @@ -275,9 +275,9 @@ namespace mRemoteNG.Container /// public void ApplyInheritancePropertiesToChildren() { - var children = GetRecursiveChildList(); + IEnumerable children = GetRecursiveChildList(); - foreach (var child in children) + foreach (ConnectionInfo child in children) { child.Inheritance = Inheritance.Clone(child); } @@ -285,12 +285,12 @@ namespace mRemoteNG.Container private IEnumerable GetRecursiveFavoritChildList(ContainerInfo container) { - var childList = new List(); - foreach (var child in container.Children) + List childList = new(); + foreach (ConnectionInfo child in container.Children) { if (child.Favorite && child.GetTreeNodeType() == TreeNodeType.Connection) childList.Add(child); - var childContainer = child as ContainerInfo; + ContainerInfo childContainer = child as ContainerInfo; if (childContainer != null) childList.AddRange(GetRecursiveFavoritChildList(childContainer)); } @@ -300,7 +300,7 @@ namespace mRemoteNG.Container protected virtual void SubscribeToChildEvents(ConnectionInfo child) { child.PropertyChanged += RaisePropertyChangedEvent; - var childAsContainer = child as ContainerInfo; + ContainerInfo childAsContainer = child as ContainerInfo; if (childAsContainer == null) return; childAsContainer.CollectionChanged += RaiseCollectionChangedEvent; } @@ -308,7 +308,7 @@ namespace mRemoteNG.Container protected virtual void UnsubscribeToChildEvents(ConnectionInfo child) { child.PropertyChanged -= RaisePropertyChangedEvent; - var childAsContainer = child as ContainerInfo; + ContainerInfo childAsContainer = child as ContainerInfo; if (childAsContainer == null) return; childAsContainer.CollectionChanged -= RaiseCollectionChangedEvent; } diff --git a/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs b/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs index eaad2edf..366423d1 100644 --- a/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs +++ b/mRemoteNG/Credential/CredentialDeletionMsgBoxConfirmer.cs @@ -23,7 +23,7 @@ namespace mRemoteNG.Credential public bool Confirm(IEnumerable confirmationTargets) { - var targetsArray = confirmationTargets.ToArray(); + ICredentialRecord[] targetsArray = confirmationTargets.ToArray(); if (targetsArray.Length == 0) return false; if (targetsArray.Length > 1) return PromptUser(string.Format("Are you sure you want to delete these {0} selected credentials?", targetsArray.Length)); @@ -32,7 +32,7 @@ namespace mRemoteNG.Credential private bool PromptUser(string promptMessage) { - var msgBoxResponse = _confirmationFunc.Invoke(promptMessage, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + DialogResult msgBoxResponse = _confirmationFunc.Invoke(promptMessage, Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question); return msgBoxResponse == DialogResult.Yes; } } diff --git a/mRemoteNG/Credential/CredentialDomainUserComparer.cs b/mRemoteNG/Credential/CredentialDomainUserComparer.cs index f0c21d2f..436b3687 100644 --- a/mRemoteNG/Credential/CredentialDomainUserComparer.cs +++ b/mRemoteNG/Credential/CredentialDomainUserComparer.cs @@ -8,7 +8,7 @@ namespace mRemoteNG.Credential { public int Compare(ICredentialRecord x, ICredentialRecord y) { - var comparer = new CaseInsensitiveComparer(); + CaseInsensitiveComparer comparer = new(); return comparer.Compare($"{x.Domain}\\{x.Username}", $"{y.Domain}\\{y.Username}"); } diff --git a/mRemoteNG/Credential/CredentialRecord.cs b/mRemoteNG/Credential/CredentialRecord.cs index e0e77edb..60773ba0 100644 --- a/mRemoteNG/Credential/CredentialRecord.cs +++ b/mRemoteNG/Credential/CredentialRecord.cs @@ -9,7 +9,7 @@ namespace mRemoteNG.Credential { private string _title = "New Credential"; private string _username = ""; - private SecureString _password = new SecureString(); + private SecureString _password = new(); private string _domain = ""; public Guid Id { get; } = Guid.NewGuid(); diff --git a/mRemoteNG/Credential/CredentialRecordTypeConverter.cs b/mRemoteNG/Credential/CredentialRecordTypeConverter.cs index dca247a7..50d32b2b 100644 --- a/mRemoteNG/Credential/CredentialRecordTypeConverter.cs +++ b/mRemoteNG/Credential/CredentialRecordTypeConverter.cs @@ -33,7 +33,7 @@ namespace mRemoteNG.Credential public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (!(value is Guid)) return base.ConvertFrom(context, culture, value); - var matchedCredentials = Runtime.CredentialProviderCatalog.GetCredentialRecords() + ICredentialRecord[] matchedCredentials = Runtime.CredentialProviderCatalog.GetCredentialRecords() .Where(record => record.Id.Equals(value)).ToArray(); return matchedCredentials.Any() ? matchedCredentials.First() : null; } diff --git a/mRemoteNG/Credential/CredentialServiceFacade.cs b/mRemoteNG/Credential/CredentialServiceFacade.cs index af8ae83c..aeba2a0c 100644 --- a/mRemoteNG/Credential/CredentialServiceFacade.cs +++ b/mRemoteNG/Credential/CredentialServiceFacade.cs @@ -35,7 +35,7 @@ namespace mRemoteNG.Credential public void LoadRepositoryList() { - foreach (var repository in _loader.Load()) + foreach (ICredentialRepository repository in _loader.Load()) { _repositoryList.AddProvider(repository); } @@ -80,7 +80,7 @@ namespace mRemoteNG.Credential CollectionUpdatedEventArgs collectionUpdatedEventArgs) { - var repo = sender as ICredentialRepository; + ICredentialRepository repo = sender as ICredentialRepository; repo?.SaveCredentials(repo.Config.Key); } diff --git a/mRemoteNG/Credential/CredentialServiceFactory.cs b/mRemoteNG/Credential/CredentialServiceFactory.cs index 671c4c51..f6ef147c 100644 --- a/mRemoteNG/Credential/CredentialServiceFactory.cs +++ b/mRemoteNG/Credential/CredentialServiceFactory.cs @@ -16,14 +16,14 @@ namespace mRemoteNG.Credential // When we get a true CompositionRoot we can move this to that class. We should only require 1 instance of this service at a time public CredentialServiceFacade Build() { - var cryptoFromSettings = new CryptoProviderFactoryFromSettings(); - var credRepoSerializer = new XmlCredentialPasswordEncryptorDecorator(cryptoFromSettings.Build(), new XmlCredentialRecordSerializer()); - var credRepoDeserializer = new XmlCredentialPasswordDecryptorDecorator(new XmlCredentialRecordDeserializer()); + CryptoProviderFactoryFromSettings cryptoFromSettings = new(); + XmlCredentialPasswordEncryptorDecorator credRepoSerializer = new(cryptoFromSettings.Build(), new XmlCredentialRecordSerializer()); + XmlCredentialPasswordDecryptorDecorator credRepoDeserializer = new(new XmlCredentialRecordDeserializer()); - var credentialRepoListPath = Path.Combine(SettingsFileInfo.SettingsPath, "credentialRepositories.xml"); - var repoListDataProvider = new FileDataProvider(credentialRepoListPath); - var repoListLoader = new CredentialRepositoryListLoader(repoListDataProvider, new CredentialRepositoryListDeserializer(credRepoSerializer, credRepoDeserializer)); - var repoListSaver = new CredentialRepositoryListSaver(repoListDataProvider); + string credentialRepoListPath = Path.Combine(SettingsFileInfo.SettingsPath, "credentialRepositories.xml"); + FileDataProvider repoListDataProvider = new(credentialRepoListPath); + CredentialRepositoryListLoader repoListLoader = new(repoListDataProvider, new CredentialRepositoryListDeserializer(credRepoSerializer, credRepoDeserializer)); + CredentialRepositoryListSaver repoListSaver = new(repoListDataProvider); return new CredentialServiceFacade(Runtime.CredentialProviderCatalog, repoListLoader, repoListSaver); } diff --git a/mRemoteNG/Credential/PlaceholderCredentialRecord.cs b/mRemoteNG/Credential/PlaceholderCredentialRecord.cs index 7a7710b0..18d5eb2c 100644 --- a/mRemoteNG/Credential/PlaceholderCredentialRecord.cs +++ b/mRemoteNG/Credential/PlaceholderCredentialRecord.cs @@ -9,11 +9,11 @@ using mRemoteNG.Resources.Language; namespace mRemoteNG.Credential { [SupportedOSPlatform("windows")] - public class PlaceholderCredentialRecord : ICredentialRecord + public class PlaceholderCredentialRecord(IEnumerable id) : ICredentialRecord { public event PropertyChangedEventHandler PropertyChanged; - public Guid Id { get; } + public Guid Id { get; } = id.FirstOrDefault(); [ReadOnly(true)] public string Title { get; set; } = Language.CredentialUnavailable; @@ -23,11 +23,6 @@ namespace mRemoteNG.Credential [ReadOnly(true)] public string Domain { get; set; } = Language.CredentialUnavailable; - public PlaceholderCredentialRecord(IEnumerable id) - { - Id = id.FirstOrDefault(); - } - public override string ToString() => Language.CredentialUnavailable; } } \ No newline at end of file diff --git a/mRemoteNG/Credential/Repositories/CompositeRepositoryUnlocker.cs b/mRemoteNG/Credential/Repositories/CompositeRepositoryUnlocker.cs index 79dd9572..9f4a5871 100644 --- a/mRemoteNG/Credential/Repositories/CompositeRepositoryUnlocker.cs +++ b/mRemoteNG/Credential/Repositories/CompositeRepositoryUnlocker.cs @@ -7,7 +7,7 @@ namespace mRemoteNG.Credential.Repositories { public class CompositeRepositoryUnlocker { - private readonly List _repositories = new List(); + private readonly List _repositories = []; public IEnumerable Repositories => _repositories; public ICredentialRepository SelectedRepository { get; set; } @@ -33,7 +33,7 @@ namespace mRemoteNG.Credential.Repositories private ICredentialRepository GetNextLockedRepo() { - var newOrder = OrderListForNextLockedRepo(); + IList newOrder = OrderListForNextLockedRepo(); return newOrder.Any() ? newOrder.First() : null; } @@ -41,9 +41,9 @@ namespace mRemoteNG.Credential.Repositories { if (_repositories.Count == 0) return new List(); - var reorderedList = new List(); - var itemsAfterCurrent = BuildListOfItemsAfterCurrent(); - var itemsBeforeAndIncludingCurrent = BuildListOfItemsBeforeAndIncludingCurrent(); + List reorderedList = new(); + IList itemsAfterCurrent = BuildListOfItemsAfterCurrent(); + IList itemsBeforeAndIncludingCurrent = BuildListOfItemsBeforeAndIncludingCurrent(); reorderedList.AddRange(itemsAfterCurrent.Where(repository => !repository.IsLoaded)); reorderedList.AddRange(itemsBeforeAndIncludingCurrent.Where(repository => !repository.IsLoaded)); return reorderedList; @@ -51,23 +51,23 @@ namespace mRemoteNG.Credential.Repositories private IList BuildListOfItemsAfterCurrent() { - var lastListIndex = _repositories.Count - 1; - var newListStartIndex = GetNewListStartIndex(); + int lastListIndex = _repositories.Count - 1; + int newListStartIndex = GetNewListStartIndex(); if (newListStartIndex > lastListIndex) newListStartIndex--; - var countToEndOfList = _repositories.Count - newListStartIndex; + int countToEndOfList = _repositories.Count - newListStartIndex; return _repositories.GetRange(newListStartIndex, countToEndOfList); } private IList BuildListOfItemsBeforeAndIncludingCurrent() { - var newListStartIndex = GetNewListStartIndex(); + int newListStartIndex = GetNewListStartIndex(); return _repositories.GetRange(0, newListStartIndex); } private int GetNewListStartIndex() { - var currentItemIndex = _repositories.IndexOf(SelectedRepository); + int currentItemIndex = _repositories.IndexOf(SelectedRepository); return currentItemIndex + 1; } } diff --git a/mRemoteNG/Credential/Repositories/CredentialRepositoryConfig.cs b/mRemoteNG/Credential/Repositories/CredentialRepositoryConfig.cs index a2e6703d..c4981b39 100644 --- a/mRemoteNG/Credential/Repositories/CredentialRepositoryConfig.cs +++ b/mRemoteNG/Credential/Repositories/CredentialRepositoryConfig.cs @@ -8,7 +8,7 @@ namespace mRemoteNG.Credential.Repositories { private string _title = "New Credential Repository"; private string _source = ""; - private SecureString _key = new SecureString(); + private SecureString _key = new(); private string _typeName = ""; private bool _loaded; diff --git a/mRemoteNG/Credential/Repositories/CredentialRepositoryList.cs b/mRemoteNG/Credential/Repositories/CredentialRepositoryList.cs index a3305d2e..6d82601e 100644 --- a/mRemoteNG/Credential/Repositories/CredentialRepositoryList.cs +++ b/mRemoteNG/Credential/Repositories/CredentialRepositoryList.cs @@ -8,7 +8,7 @@ namespace mRemoteNG.Credential.Repositories { public class CredentialRepositoryList : ICredentialRepositoryList { - private readonly List _credentialProviders = new List(); + private readonly List _credentialProviders = []; public IEnumerable CredentialProviders => _credentialProviders; @@ -38,8 +38,8 @@ namespace mRemoteNG.Credential.Repositories public IEnumerable GetCredentialRecords() { - var list = new List(); - foreach (var repository in CredentialProviders) + List list = new(); + foreach (ICredentialRepository repository in CredentialProviders) { list.AddRange(repository.CredentialRecords); } @@ -79,7 +79,7 @@ namespace mRemoteNG.Credential.Repositories private void OnRepoConfigChanged(object sender, EventArgs args) { - var repo = sender as ICredentialRepository; + ICredentialRepository repo = sender as ICredentialRepository; if (repo == null) return; RaiseRepositoriesUpdatedEvent(ActionType.Updated, new[] {repo}); } diff --git a/mRemoteNG/Credential/Repositories/XmlCredentialRepository.cs b/mRemoteNG/Credential/Repositories/XmlCredentialRepository.cs index ebb20073..7836e3f9 100644 --- a/mRemoteNG/Credential/Repositories/XmlCredentialRepository.cs +++ b/mRemoteNG/Credential/Repositories/XmlCredentialRepository.cs @@ -39,8 +39,8 @@ namespace mRemoteNG.Credential.Repositories public void LoadCredentials(SecureString key) { - var credentials = _credentialRecordLoader.Load(key); - foreach (var newCredential in credentials) + IEnumerable credentials = _credentialRecordLoader.Load(key); + foreach (ICredentialRecord newCredential in credentials) { if (ThisIsADuplicateCredentialRecord(newCredential)) continue; CredentialRecords.Add(newCredential); diff --git a/mRemoteNG/Credential/Repositories/XmlCredentialRepositoryFactory.cs b/mRemoteNG/Credential/Repositories/XmlCredentialRepositoryFactory.cs index 3ea4c44f..2d8d4187 100644 --- a/mRemoteNG/Credential/Repositories/XmlCredentialRepositoryFactory.cs +++ b/mRemoteNG/Credential/Repositories/XmlCredentialRepositoryFactory.cs @@ -33,11 +33,11 @@ namespace mRemoteNG.Credential.Repositories public ICredentialRepository Build(XElement repositoryXElement) { - var stringId = repositoryXElement.Attribute("Id")?.Value; + string stringId = repositoryXElement.Attribute("Id")?.Value; Guid id; Guid.TryParse(stringId, out id); if (id.Equals(Guid.Empty)) id = Guid.NewGuid(); - var config = new CredentialRepositoryConfig(id) + CredentialRepositoryConfig config = new(id) { TypeName = repositoryXElement.Attribute("TypeName")?.Value, Title = repositoryXElement.Attribute("Title")?.Value, @@ -48,9 +48,9 @@ namespace mRemoteNG.Credential.Repositories private ICredentialRepository BuildXmlRepo(ICredentialRepositoryConfig config) { - var dataProvider = new FileDataProvider(config.Source); - var saver = new CredentialRecordSaver(dataProvider, _serializer); - var loader = new CredentialRecordLoader(dataProvider, _deserializer); + FileDataProvider dataProvider = new(config.Source); + CredentialRecordSaver saver = new(dataProvider, _serializer); + CredentialRecordLoader loader = new(dataProvider, _deserializer); return new XmlCredentialRepository(config, saver, loader); } } diff --git a/mRemoteNG/Messages/MessageCollector.cs b/mRemoteNG/Messages/MessageCollector.cs index 6840845e..488f4b39 100644 --- a/mRemoteNG/Messages/MessageCollector.cs +++ b/mRemoteNG/Messages/MessageCollector.cs @@ -23,7 +23,7 @@ namespace mRemoteNG.Messages public void AddMessage(MessageClass messageClass, string messageText, bool onlyLog = false) { - var message = new Message(messageClass, messageText, onlyLog); + Message message = new(messageClass, messageText, onlyLog); AddMessage(message); } @@ -34,8 +34,8 @@ namespace mRemoteNG.Messages public void AddMessages(IEnumerable messages) { - var newMessages = new List(); - foreach (var message in messages) + List newMessages = new(); + foreach (IMessage message in messages) { if (_messageList.Contains(message)) continue; _messageList.Add(message); diff --git a/mRemoteNG/Messages/MessageWriters/DebugConsoleMessageWriter.cs b/mRemoteNG/Messages/MessageWriters/DebugConsoleMessageWriter.cs index c168e39f..15523ee6 100644 --- a/mRemoteNG/Messages/MessageWriters/DebugConsoleMessageWriter.cs +++ b/mRemoteNG/Messages/MessageWriters/DebugConsoleMessageWriter.cs @@ -6,7 +6,7 @@ namespace mRemoteNG.Messages.MessageWriters { public void Write(IMessage message) { - var textToPrint = $"{message.Class}: {message.Text}"; + string textToPrint = $"{message.Class}: {message.Text}"; Debug.Print(textToPrint); } } diff --git a/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs b/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs index a1cf6d03..8395cde9 100644 --- a/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs +++ b/mRemoteNG/Messages/MessageWriters/NotificationPanelMessageWriter.cs @@ -18,7 +18,7 @@ namespace mRemoteNG.Messages.MessageWriters public void Write(IMessage message) { - var lvItem = new NotificationMessageListViewItem(message); + NotificationMessageListViewItem lvItem = new(message); AddToList(lvItem); } diff --git a/mRemoteNG/Properties/AssemblyInfo.cs b/mRemoteNG/Properties/AssemblyInfo.cs index ff71434c..47c81ac6 100644 --- a/mRemoteNG/Properties/AssemblyInfo.cs +++ b/mRemoteNG/Properties/AssemblyInfo.cs @@ -1,7 +1,10 @@ +// +// This code was generated by a script. Any changes made manually will be lost +// the next time this code is regenerated. +// + using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using System.Resources; // General Information @@ -15,10 +18,10 @@ using System.Resources; [assembly: AssemblyCulture("")] // Version information -[assembly: AssemblyVersion("1.77.3.1829")] -[assembly: AssemblyFileVersion("1.77.3.1829")] +[assembly: AssemblyVersion("1.77.3.1749")] +[assembly: AssemblyFileVersion("1.77.3.1749")] [assembly: NeutralResourcesLanguageAttribute("en-US")] -[assembly: AssemblyInformationalVersion("1.77.3 (Nightly Build 1829)")] +[assembly: AssemblyInformationalVersion("1.77.3 (Nightly Build 1749)")] // Logging [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")] diff --git a/mRemoteNG/Properties/AssemblyInfo.tt b/mRemoteNG/Properties/AssemblyInfo.tt index 99b07ca0..599dc568 100644 --- a/mRemoteNG/Properties/AssemblyInfo.tt +++ b/mRemoteNG/Properties/AssemblyInfo.tt @@ -1,25 +1,12 @@ <#@ template debug="true" hostspecific="true" language="C#" #> + <#@ output extension=".cs" #> -<#@ import namespace="System.IO" #> -<#@ import namespace="System.Text.RegularExpressions" #> -<# - string output = File.ReadAllText(this.Host.ResolvePath("AssemblyInfo.cs")); - Regex pattern = new Regex("AssemblyVersion\\(\"(?\\d+)\\.(?\\d+)\\.(?\\d+)\\.(?\\d+)\"\\)"); - MatchCollection matches = pattern.Matches(output); - if( matches.Count == 1 ) - { - major = Convert.ToInt32(matches[0].Groups["major"].Value); - minor = Convert.ToInt32(matches[0].Groups["minor"].Value); - revision = Convert.ToInt32(matches[0].Groups["revision"].Value); - build = Convert.ToInt32(matches[0].Groups["build"].Value); - if( this.Host.ResolveParameterValue("-","-","BuildConfiguration") == "Release" || this.Host.ResolveParameterValue("-","-","BuildConfiguration") == "Release Installer" ) - build++; - } -#> +// +// This code was generated by a script. Any changes made manually will be lost +// the next time this code is regenerated. +// using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using System.Resources; // General Information @@ -42,9 +29,10 @@ using System.Resources; [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")] <#+ + //build is a days from date of last release + curent hour + curent minute of build int major = 1; int minor = 77; int revision = 3; - int build = 0; string channel = "Nightly Build"; + int build = (int)(DateTime.UtcNow - new DateTime(2019, 9, 2)).TotalDays + DateTime.UtcNow.Hour + DateTime.UtcNow.Minute; #> \ No newline at end of file diff --git a/mRemoteNG/PuTTYNG.exe b/mRemoteNG/PuTTYNG.exe index 7a40337082c46ee6bd51c17a06cd90c91e6dc655..a45bc9b0d4fa748d31212fa599be9a35d8621580 100644 GIT binary patch literal 852480 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%0AoPrv4 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

5q4i!t1q)=uY}uQ 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

    CJ*H=9dp+*!*qlBbnGpvB`v3 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%0Dp}pXOuRC9mJ6^D=tm6?$HG zgldkz(vMEj#kIB{B$XXEr{8uFo>OAeh^`h@+IC%>4nnR_!P7Lb2P`@p;Bh5P$;OiQ zp(D-ieoM>DW95y-93ZL)-a4HhY$*ixtmqS)xHEaadF-pks-^63L|7;hZc0Zm)_{ek zViSMb)-pI-YjcZa-Pc%k7UdXQpOO&s#Ob#dH*|3P(}L;`F`H8NiqO66#f48FYDP^+ z?9N8oG3Kkt$1J*8M6!+po;>q(9BuF<%rnwH#o|*gUW3zKXDY9}u9h=bLS1&-FSPb< zyck;+^>t>_t4M7#lit=dX*VxDZ~yIxSKC@*lI(qqc>Q%bUztr<$&S-H4sRpWOHA|} z-$RZ)7yd_>5Xki=?&F;n4phUW(^zvSet?&n#ToP2dsJH` zZaGQ3>m(kchZ65DCtekPy569*uEZ6YPtFCd#BfPLn#51RBqXT_1y0tWW!WR?jyXoR zOKgcWR7Xnu89#+E!43GGxP{UV-TP(ST}sg0o!FjnyAm6fdmn|5S_Lx(ZHuF9TtZON~zMJ;LF9+E>lWzt6To2ix#K=!wH zrjpzLCeyHF3c>w7!=Vog-ThP+Y0X5C_5zV2# zWYudbS(vnx;ng!pQ~dzbUFVYc3Ynxr57gOZ5yh`p=DCaO>`oIkK-LY+x|&%Q=ICya zD-b^9t=W3nX1TLOkZT?{x6;?25MF&Qq5?&6g6K^s*volabmIJaTDj}0>E*7b>T;J+ zQ|@Y=S?*fGQ^38<73$zxDuW-LuMF+w0M< z6C}@NI{wt#%3WiZmbkm9%CjPH@x)+tZs=i(Bx{c@m++6N@n6#64{z2H8r1=r~J@wUc*YI1) zUGMY!fM@g9%3UMzE9SkAHmLh%xoaBjQ$c#&7EYH8?bm;RZ|Km0Lx-MX3>`YuKXeek zLx=V~^|ZpG)4gXD4<0)7%(I5zbM`ssmJA(w9_@01Jd3_gAMq^WiScaU+0XMn&mo?( z763EPJlwbNzK7>oo&!7u-zayT%G1SD!}BekZ!V+_cwfR}@$?5?mpgB;jGMs>oc@EI zzX86%15X)j4E7Il{s7eZD>^+L>9gKvIDdl&7dwCD4YU!@w|S&}p5Wcd^Eyw0XU?~@ zf3x%6$oqB2E%D{~$oam4{(6e%rT-{*ZQ*%==Z`#(^8B3VH6B;N=lgTJ@|=kI*#w?G zYuDb&{a2nZFDZB3$#Y|f`Ns1lo~wEO%Dh?6`!$~IUp9+em%BifkyAi!=>N>^`CQTa zti7H&ordvTV9oxCZms{ne@cDVXBLsScKdhBT??2qxAVLQyt8gEciq5qAJ2P){fPH- zJiq1f@jaX8yF8cQ!MNu+o%Lz~&l;Xap2a+?34fSpCE@q-tmk>1weLNipW}X&=g&MJ z@SNc3Pa0>w4jt+&qDPFHhw=uoEXnP(|CGnNS}&XV)e3QXkw zG3Pd~{n`tH_9&f^=`eZA{o+c@#Bd2Y(!tH)LSrg2uYS2bJV&nMPVKguN4i0__cs>A zuH{N`q18N`?{SsIjRh#;Ef(#b#n}2-^B~<>w>I#Mgc_*xVZVjF;n~b3qtHcx*H+vT z8*>*XbOPU#?3!*Qa3Y}?K53pl$|KvX*;N>LZTUONN^84Z@ISQog!LLm+49Zp?!Cui z*SP~9uJ~fCa3d;)1HV*x3?`4NbRK@42gYwdT>cLAKnu>~KvS`?dJ((hyl~SH*Zk`- zaA5!J8fgd5+!w;nC^liJXqLXR)GVKF``ceqbhn)Q)uKGF(%aSIy#5m!IJOa&8;HV1fk}8*|@7Evsz$5A=A;PrA8=R zI_zlsv8H$}znJ%#(;Xa(A=4t1{%`>YC410&9o0Y8-mLDQ;zq6eX9E~78^2%{bGkF? zdSx>{iy?neX^Yo+`Klp46kIl6kfu4xrQ=PFahx$1*D z+fy^*(q)wEZ= zy@v;wwWLl1I2_k2rfyNbNJ zd~lt$L1r^5lm}Ywy4kastO|$BQG=k{U!}j1^yz7nSz-uB^Nx@9ue1H%Wqhd#AnmK} zN>#TgbQ9fuB$iGWT?N`TCgT!C71~dUisH;#%(dStR5_$UQvHp7ewl!aZtki~r42Ux z=sKFI$=AMr(arVteSD1Hzvw1yTEV!ta)52(wdkh$_WkzlI`EE6;0b%71l}QmH|Rje zk_Rb2v8PI4qXb@s%Y3nH{C?{lLXKbB!JL#UQ{4+Q_oHhX9sz!xwLS9&(K6I+bt}(W z`zpSz>ciYGXF=WQu(vCBV1Tp?t^4GobQm{oX;_`j-HeQ?AP4AO=^IqQE*}tGE3jHPN*4z_i7gm05Lx+e=u#Lq$DJ z&D=3ettZk=hnVm2%5GJQ{m%V|+J^i1c3^#!{&hSU(%tqN)!%fM=sxb|4re7QtMeOQ zvMLXm9r)DYuiw@p|cUpZ$KV1FNt#MI(0b>_s=%*q;#Gw({o`Ndvd7 z{I+ZyN=Ik7>4ZeNsmA`DitN2-^k~(xaMN*D@bt8K8haVZRl1#|3pX8h1xJof#U7c&G+bMsJAT(NjuuAq zC$rqrKg}swbsB%4w(eq&()m!N0nvm1I(u%r>{b4>c@}$MCd$R}mFl9_ewp3Zl95Zf z7K@9&_{!bdfg(mlZP#33J%;pnW=RS4LqFj$wZVs*QZ5wDV#MRkCE~&QFV%4czYyNK zj5c?L25Z}nn$OfyBEtY9Cz{Wc?1#QbBDpW^Xj9rw9XpZ1OVXAhF%hY3MTXAmX(BR^ z&L~VFn202!xX!3f+ljOm^DBaGmZhPd{B_!!JmY+ONjb%pP^kwRDeR#$WV;DV6)i6)rr4D(A2m01fZA#`L4Q>Zm_}5c{e>*5 z{aR0B$UCl0cBSALM+sv*ypOh!CXB9Ctl+k{RonD5YJPW*Y%>7L{={BkZk0UpumDyB zbwrcwN42FJg%+u6C~JZFlu;gPSLpoG`%XGTC%^P?8Jiw17k|od@hNnGai@oi9wKC# z88sOnT|y>*J(w{Ac#^@q>FgeZS&v|qX^$~2uzpi~aIc zStdNzj!!ksvszecjEy62V(8U_2E4x3-WB;)oj)HNxOM)(Ui28w@LPMWD!<%za*Tlq z(Ywk&cD3N+y+`8l%F>{E`!cw7l%lt`r_|60yH(FZ+*N)#L)Ai~)DsbIy(Kt$d&4Vca z;RvL$D(gO(eAXjjelZ&uoofenh0X}9loMIVu;vs7?i+>EXn7xISp629%$hV-7kDYF zPTBf6zA}y3Azf8{G;235@Itf+Jz+-m{w$&=I(O$Dw}-UAf18{_>96!4f3y+$sHGVB zP&Vt}%?jb4wOn8tjsl%8oCT608s6+7xERvWDsM(JwA4rbWK93wpaYhAt?p=(&)&m_ zHBi)Lkz(9RwdkDL5c8%Nh%gPF+MAAn*-MEb)_-EM8fke-Y_VY2{+ogBrox81GAVbf zlq@SV>nT;rn&cPcr{2D4qUiV8Z?{}75O-DhT&Wp_wW6*5Q~_<}Jpjs5n_4OS+SJMg z6qH)&;n$jbJb5#l>=4xX{N)Nsj4@$`)LXbgD5H}L*#ORmRW`TVnpqf|jnN&ksyJ!T zK}*ak4mxfo-Jw5`3z*P+Z*;x~NuIXJ#ckL>pX`_Nx1WNZUBLC)ZMbN5U0-myGTj8x zO#N30>xq3P5I0r}qJnjYv^b63A)n$Uot>hQa zG1N4t+|IS-)3u%vgr{#J@uVJ`&ExdTvY`k=h)aIYz3&mJIP33kOf!N)Su*k)D9GF~dy5GMJu z6X84=&E};t5t{gw@#C}4cOv-FboY*Ue62_gMJ#E+O-yYRSshTD!#F4DbA5N@K`NxOD#$|nM^wQ8{MH3$oIHMy!=XRd0T2l z(6MFG%3nIRe9s^Eh!ANcy1da}Og}LM?6_J1@p7U4`9`Olu9d$KpRSb+;t^FFR#e$_ zX4AvVegpAE7BC0jaFBrBsK(b$SICdG+M$b_k=iKhyTwUP+B8cH(S~}Q9p1r5z_Kyx zt5CDx#euDIs0e)#L%;%89a39e+JpjjL-DY`h=3rgO4mw7f^;y&;KIOGK?+0j!dvA8 zL4DMLgVYXo*``hwK~5rqiC}-I=Sk$3r}Z>epFN3aoHA3~Wh(XQfvsb4gih&NsXUzE zc4bdMj*Wq>K>>$sl!bvy0YhO=!7p+wKflhN1>H_Vu&7YSaoZOG11%k0DM=lCLhz?K zqNLszenuVT>W#>Iz;89@h#VO$uZY(#<Fyn}`u9#XEfL{7}F7o0|~%P=!hj zax)8E(Y#B_oNsNH@GH$!AET9vVMwz*|Ng_}qz^Bt_*WQ$ebePX(@l=9;4`{D&CjX& zh=fV#C*;gq=iI)1*ntThp>qM#JaBHjKzbAl81e$^*({11rS*w+Xu<&}nh`Gm5Q!$Q zUeUTI9CD)djTZ<(mT2UJz zfEvDz3E`kIKMwMUDD-*2E$vq2F*fe%JWyc1d)0s)pnuUBo@fEb{jTPtVd5EgKF)9R zQISepQeZCk<{^E3RL+FzD?fRre3j@gPtqq}F3*xt#O%|wxcTVt5}J5$^U(|CJ*fHU zI)ay+I)Ag6l%)9in_-HJBi1a23`$e1m`lfD&miS@-F69{t`E@9xx!dEhOGwg6F}5L zMBFFHA$W>JQvc%Nmq+LmQk_xogcspf9PKySyEU}w6W3fwhch%iajbv=PqS) z&J`@N@>82OI(ciQ*4P-tO^Zp>r#;l zt^67b+QS$L^mMf<-|)5_DsYswW;c#l>#DPX=rs5&)}{HKHCF2$d`IA@x@OjFN$Brt zRVj34Zk3lvH*Isl8B%rvSsVRhm4g0|w@tm1w`zs`7&Hx@5#FX%5}p#DEEAoco#^Hz z>i1{ms|_9sN!l(zaoR3`q3i{(QbppCw!X0eIrDIt6CE{nR*6 zs{z`C>xjwz8f%a?_BhL$SPTItUl4jRf}{vCg%D&kA;;Oz(n~!jX0`asdjC}<3VW~j zr2});d&agNzly*zMe6nclG@dIirS#Xszl~^t>_u(Q=a3iYcKbXpXd$U(q7(g{KS5t zh3)12$4~4Zn%7=FVEn`ZA;Nv*C;CD&+RF!ypExj7)n0ze_=%^4u52$i#!oatmt!pp zGlmyi<(|=%g+FCB8=;{K*IMO%>sCKl+ga>Nr^Y5Gh8?5yhHJkJJ4PuO z7r)TCsZBBvpK0Nv<*m&%yo^e$GuWfy6;PhmS+1>5v_1N3f=9oFz*y^gT=It~WV|(f zoHu5^gj^^X^(I;07rD_Lvq{eM=mzA9oVKf5A5|u8+muOT`!|ymW~UmCrAl(79>H&8 z{qQzxQwN`^B2jv6?HKX0d2~V374@4J;MvtGD35zYr)r=Ydue~CaRei3dsOm)zsKo> zr9$P631x*O=`i~zIYHP>@##XMtx{mU6X(vHIP~y58eGoC(qH;ZsQ!F~n+jd?=x@TW zqI7(Y^!1m?NLj}xaqHV!UnHu1iOx{QNU2Db8fyeqHd>nbE&VGVE4~&iGrKPiexcNs z;K(nSu%aubuwJYMw916EZ$L#Lm6A-3^mVCX#^EpMbz&VEjqZ4c@##{DDm$G-U(6;d z{kzJ#maG8{n5UDP%=AaK{wN*n5%7eYVYEm!FFFH{;AnMIpqQle(b!h8{vHyBY1_91 zCU47IM&x5ks<$UA5!4<)N>xRU(%4v8IC|&UHIg`<8HS>pLTSq>b}xgT`5kxiL*K9y znP`%Z-f3)nK?6sNx)oUIVg;-$FlkCy7VK@R8n8N{cJeN;6Q7WC@v8#NRexL@WH zd=A{D`@mC-$Y!}3&zQPit~a+{qk9C&j>tL!)cO0k*?o@D`aM1o5cmA2lFUBDI`mOr zZ*UYH+1C0b6{k9qjarGyGM(JkTCUxCkcI~KsDCDbTm&J5g=-H#R_@CCA+m!!pWqJs z2w51O_jx|xX{6j3&%-=F|gE!lS?fvv;*hM)xXR5 zrNh*c+&jJyH#<4dD!mZ;gup@JO$O*0>fjI>W8JCo`klt6=~H~kVL9KcruaZrlY@GC zF=ebyC%?DJ=*&{r?-@G15;6yRCj^15v;Ip;lM9Zgf%pchyrBW3JItdc^XS02FKCRn zX@Ie<_{(D?aX+{%x~NV4_)NC$GPWJ^OYR z`^rO1Wr!lj$rUKzK2?cO3B-B$n#_PREKu&?AUSvY8{7b2lPa3N00J3CS^brVMt8Kl z1^ojc7ol0B%w1E{@HiGY$=!Of4%3SEATCLpFAg`We1otYhES<=grYAG%Nj3`W1;Mp zvH&f*q%L}eE+aY_jW1AReB8XPsY?~LeO<1>9|UG#b=B0xD-VhzUU?X}go#T-vedsX zOMT`0@YK1y{NRzJR>(i1D>~CV0s}}0y4VHL+X_ej1_I~&dG=X9fn4H1l^r4qzDZg5 zz^eowUp%UznG))vmCxBn1F+V^@&&o|20lQgAkuh7?@SIhQ|?fo*v$N-fzBy(^xWGS z^HobTr$!-Vt}3a-@s&%hx-@Umf*VD8Y=d}L!#Tzgjz9hF!p8B2{y6&iB^+JWhEx3WW zi*XCqAN6i<&wb%iW~!=&v|qKaz0%*-EU9EQZI&eMmBn4n&*5;lHA}KI4*OZ{{ltlE zeM@___s=r*UDu<%D?F&aqQ0Z-<@41tn5nKi_+D~HZgXpV_22aO$ei-8?p6L%pHe;s zNGl8FG*aQ2)$mIy>wuFg+L7D#?%;2eTRyY?pJeObd%UebdHJkQl$bb0^O`$Fr3Q z<~F8I+Hgz1^aR>*?^F=w)Ek09Gfnyi3mg6;6FB@nW|s~MFB{`RaZjeY_NuwePxwkN zVrf|HMvNSy)+c4Xks+@@Og@oXQeyv5*&^0f`m#eJr$0WsK1NP`Za+zVzMcX3B=uR4 z3G7uL>iUgL*y2oGEB&ca*@~u$vi+(n^`Dvf_wUxP8$Qldly`doDWXS28L_Fe=tM zi|H&T=iXykP`=GlU1e2oc2?6jfoA!qLo*p@tkAFO?BxjLL@P?bbi}0eGoJg|J?gxh zm5!Io!9GC;&YV@(;KScO^=uglzT~AE{!Ph;Bd=~APRO=V{1{W?HP-ec`{5T%MY~O1 z!&pi42Q_*yX-dOebDt}#t4WR4EnjE9Iv609IQydgKFo*ArZ`zKQwsl|Z;BV>Y>I<> zZi@ZeD~}9ww^hE7^mbLgASC3IZj9lk7hJ)L`isQ(eFqEP`g{=MyL*OXb# zH}W(-wI41SwtQIZj-LCW?`VOvDzwRgYAakatnnSVE*=D~3u_<{Bl4LPRjNOfkH*U#LaRvpPsqHBB2=QlI^gPqwQ8T_zg$My*gFqaK?Z4Prz3H8}5#}yg~ z#$4_SlijTba9|i@9_thQwRy}P`bqfqi(H{+laJ{6KZ{~N9brj+lm)P&7l42NGyp9x z#*soJ1;pSNo)sWL)4$IvITo6p1IzCOmMsdFSCUUXD|L`mhDy~houDs{S-N^MiG_QA znN(~MvRtVvQm_m+XZ)r|?!VxJzMSgS_p08uPpe+G{ab*H_MgT} zP~y*O{w}HVf2t~PNj~bVzyG%RZ~E_S^Iy{ozK=8TZN59b-dh7?eB3_V_3VQRCPu~P z8eB%@_D=)O9M>oKo8&L`i2khhdi!t|o{>G_u`ZJ}qM;x&sT5SNs}Y+VD64j#&|5l^ zxoninDwS?TDGq}KTWH=)GS@v+Mr@=>e}{Z!(y$F{se{^h- za+!df-ft;bojJ=IS_NntNtPcq8GD=^`h=dBb_i}#EwD5B^K4=Ysz$#|H7>)(%u&{O8^Ko(E_>|e&iwH_;X$>03}?c*%@Qq?NcS@K7x8dhb- zXUF$4@bsl)QNz4=_ewneX9bCM>d_B{G-*^9Ge&1n|yjc zHpuC?hP9a-y_pq}{OphZd?NMv#_te;*E#=9?>T-OnlriQzY%^0@)`r7)~Ja*7YY*qQAQ}wCE z9{X-47CRfq<&o;<$!XRUKjMKthSJhe;4OQF;gLUC#rN%g0e_mhKl&Q6uveq5&-w``cPT4c#<+3f2w_W^oz z{ws%QO!i|R41_@xH(5G=8HZ_y5#V)p_VMiOH$BVFzSL8d9K~<`cSd4vb@>HWsdPFi z>zE>MNaxSMf5qRi>x9Oyt~@SlEv4yIa8UBSj*M2? zqJ@qzKP11R5CT~V>gWz4&jk@oRYp;|@XmiW-oQp#aIe zrUt>lq9J5q#RXqb#HE++(nz#?f&R*E^39G{PM0#Cgw$v*ALd10%5_L!=o42B$Bpa` zFk=`aBsyueCsj49Ck@w0pISQHo`qCgYUxOOs*;X#Xq`^DI*KfE#i}O6tA^1)t{O)M zSc~~1i!fGvsVQxj8Vkc7J@6f zC_k~7S9nFCD|kt6@;oQ`j=)U6F>|J0K^3h=m{kF$f#?a@UX{z`2oVchkyn=$TQhwq zjR@>DW^f1vc>5+NS6v06Y@0if9Xy`=k8~e6-}5aRebWcgP+{ygFD#tEd`_&z(NK5L z5b?}Ybo9{JWIleKfAue9i7!|PP9M5JAxMJ%NNeq7c|e;_Dl|zGMl;1U!C|D--1Rum7@nNzwY$EdhDmMzR+cHy z3J*l#tLm)F7BDIrZX~2W^?E~4-aopL(ZWZI`dFYp?ol5y@KUc^10}}1-ixpI=BF`m^svae+}v@^?(NbM1X4EfDY9>aJA9_qd&rg zp|yiMtdz!G*2==zJom!2?B^bK$Llz*K!1xiv9Njh&Hq?uM+V|uDc;(Ll&gxf}L^UM29xt5YgdK_XR{fJ?r%3)UlMG6)GgJ z=4@Wd*MXw0LC$_z80s1X8BKqqf5t1|^d{x0o>A)+2YkO(J%oA2VUQ{0Qd??l%&&zr z0S3g3V59Rx)~+szPVrdP!=h7YWx;}~Qs@So=Ck_FrYgj);g(yhykEnPCdKNBR`{$J zqt!5Ggyk&!7;r%DqE*_p!U8%4K`2;2%(*7NdE(sVjP7@%A)hip3Cfi`1(DoyRXRzA zhNQLDRh!R^BxjlNeCrkC$?D@r5}n8TSlc`8bGc!czgZzM}_h;w@Pfz$Kn(~*C!uNVF0?qr&iwv7b{9bhwD751>d8) zL3Tuu78WK}bdDXZK9s4;M06KX7ceN91msken8{>Jg-XZ`DV&BKq?Ja36{a|0WSNr> zO(T4^Om-h0fg4+ac<^wuV-U%SoeBvqU^ndUm66ItwdYn6k%G-}KF#5-@bx^b>-lFM z9F9CpymG(vh`t$X%>Z?No9+w<@>S)RlesI~qX%+(v`Tuk>3tyCuh@83>oSvlP!Z5{ zfK_%g7pG{XZnZA3_EjE-Xt;U@IWnyd)Ap>p)|i*9=`VSrNWC*(s}EZ9e1YwuGvR9< za~qF##5|P@U|0VB{CCK8o=;46AGc=sW94#-(s(jHIofpm!6QvvOh2q{R_-4+$JcZ! z_bdq${}Gk@L79?$M(l`I9{|yz?^K;YfCl!X1EO=^hMJIONIKPV_>#Aa0?%p$w*j@B z)}$(oDa6eK)kBO`SJ9=h$@%UopRG9J*F72{v*7lvC``FP*hm z3BHV|6ny0lBKjTvFG=86vM#8J`{WKaot(Lzp5;dpj8vwV*@3|jnI7BoJO6%eKDI-S zN#ni9SUIG|=Q;nK9@NAdal)z`!bBbzcF`e%j}~$TAv^DC8V)R1iwK4LfLL;|UR3$K zeprojv%+We>IJE9N$>ieL7(N;w>SS*t>;aQRE~RvP~>+wjMn{D7Xu|$<8JqsA!v1U z#CB(Wzt00M`*O7MMGh7qD(9qf_wt9>hRRPY{=$1n1I72K?PpWx?Mx$mYvE^DeZ zvbY>}HJ7^6JnF;hjBp9S?2cC+kl~_n@*3-7P-|iQA`lR*+;6nJBRQS@1fwI_XW?3_ z>22(lW`-P^e@E=9Nrm>rDh2c3JqxYvMP5LWlYu2Eb0S+!_K019qf3@XQp<-r^k-wE z=ZYGk++w3J)PH6qwc>9?lLgymoWC#GJwVY`rA=MCJY)M$&JWr7O*T`iy?|3gk(g3) z(g(d9A*v97Oj=C`CJX#c2aL$obdFWIKY6ZI{r-rT+Y4e#-EEUDNfGTsqDe@fZBl=0 z?%OrAqg36h+*d0!AK_|Sl{>%z@}gs@q&?3~zlg>P4z(|i{taWpzGh{Hb}uuP@xcHW zc>)osT+XGmG$ngZtwV%QU15LWcLkjLh;TLzW@MlXrqg+S(ua}o8V(~uTTd-5vHuFk zyUu=}U!CWdoIL#?6;EAHW;_2_pbG2c4Fw`TSws?CahZgiDtl1~fRE{mAS#!Euw%Ql z4>Y*BFPznJWPc8QL9vid7V4bGy%w7^8Ps?JyP9+k+@9FQ!rH5}OnlZLKL^vm9w)jr z)tkSAG<%JQd!_+Cg}4d-p93%k;3>%;t7d=l!n>+L5MY*&TM7@P`5ylCsr!xj^N>np zNfeod53RBxyg00KZ|95eoM3*!D5t}EL8#k9)-5u9E&33CmLHv9?{5pe$)IJS2WhfXH5O()c+ku76QS(=)I2<45RHlOQoC4{U)75 zfXrjV$=p)eCV$1IV;-gKoeT_1L5_%+zif!LxR{+bVv~=vjyx=RTD2u8a>&^3$mt_?@lEiX2vnM?}`jI|7p?HEXuQ!}8Tf zjTJehLR29tM<-OklFa>-I9~)u^>P30JDubHcw-Z$3RJceJ<;c-?V=HBN700HA-jsX z!jBl>xwyKNMQfMUcS={}A!49yy06iSE(bXh`+r-GNWXNE5gCbBcm+(B30BuLF1%30 zzcA1lJUyNP8-y0F`d$gt#?VomilOeIpeFw-f8S5-7tuID9L!xSRIgwt^$ z@mgwd_h7%)3h!ODwt^Ly1za%?@DJ880PGVg%&iDjNc>iZcpy&Tl2FY5scK5-Cj8PJ z@H5=h(|VnZ3Z(f?^p)m2QIKuEI~jbyF6Zce9HWiMZKO#(EdxQA#F`pyw0zYmDczt_ zQgu#A<)2+raqp4_o+Qtsth#CF|AzZBpns8LM-S+qA&s;MG_p*K{5U7ib~@W!0Y5G? ztUPL1^-;shlWmtpI%kO+`od=n!7H7(&&zztYs^GfP2R1VygR4K;j60QQq2G#=?czD zJuSdc2$ocW_GIR5X(SU<;SjM-!7G&f<{FnHxkp>IC&(Uq``ReCXU4I4=8`RtzAwOhjX}KolCTVbX=AMKYuVa%b6J0LNTjg35q~gRG~T&iZ(U zlSHj`F3=shHM?XK>Gcxg=N7F1k@&IXpvR^Wd4P}f_*jMeGdkewLr&5GB8_Z)w}kPj zBpnw`f!KB(d&>hLeKo1uI3m^1Y;{NWbD1~t1TCO(z|kG?$mUGT{K|1X^Bm0)k8E&0 z7sex<%Gnj^koVZho<-+!7aWC;+-5f02mM$hEu>rdN_9an<7!NKXC(QE*DQ^lVJ|liwuj1NQSZW1}jwX7e`} zE?juz=Qj|i^H`oDXXI~heqI2RO4K;3hlZ`jZbcb@UfZohb?j>Qzs1cPdzSe2=;Kis znN?drc#DV@vOoQh-*}%O7|$?VR{oEc;e1S313zlS74Or+?*lx>Mr)g-*l3D$V&}Ww z0bHjvMPyOA<9*tQ#58j?NM_N2VSecyU9aKmaZgRdUrt6eQVa*YPTUqxpp_;hpsoMEP6VO zmX~p`6c6LJ{bUi6IAqj!Fv2vC0h&j2p2xYd=}b2?Hu+7Yz%R5E5U}*@mpSKC33WU< zolQ^AVRbxF@_$Z5Q0MhIF$bS4rT}j}t?E?c6?)K&VvtsEto%6F=9Bqmr`N3Ve-JD8 zm{o;+qw|JTaJf8MSHhy0sjrEQnGyMfdU27G8h)6q;WtFg0xU)%pQMJV#a{bs7eWlF z?_jNA*EvaD-~09Ft?TBTm?x|2y;93s*#@nvebz*O!$6^1M#A{U$_;cb<4BV>q7xx^ z#Usn`lF=TIwBXXz2<16j$e5GgSLBEa-R+jje=AFwEBf>kLx>ph>KPQ=v&}zz3DTjZ*qAm=b3zfT|L7y88|*6nbn^Q~g*W#h?R`M*>2CgaHup)o}ydX|ct{|dBd z6@29HX(Dj`cI&kfotDbj?D!-<9(9|Y!$2)aDF-hd@N+2(yheOOvBXCr()O_Ql9k&3Xe>V98nMS1 zelQjp#?meN^9ZRK77Ld!8gPaW;B9t!akk0g&iesD(H0tC+b_YwIm5jRcg;OG-js;b zGoE8h|0pTsDzQ!>5yqA#10OWrFOEMM!(UuzEZI-~V@nShe)Zu|A8?D`4Sd*iUd;2+ zh(E;cRW&TUllDft=&-;Jqq-9=IT~O7p~rT3Q)H2iFhN!xmjQh2tK2`X(AYh*-*@#t)JnehV8q zGKr_869YP8Muxv7G7@fSG!`T)PUQRo#cp0!Y`=UEVFD4XmdJF87dfb7yv-|do*)=d z4L2R??DiX*c9ch-mJDKrAL;y1CL5b@Nz5m?6v=e7T8d><2Hv=nvl z%5RB1z{>$alIa-`k@BMIH*jRh`7za8`Fk~tf&Rwy{#DZQM;bqjDzMqA)ms`*?-oYO z5*pKbTAGY0dF#-IcQTFApc=)xSL!D1n$F^00h3uM%|Uxbb<&Hf2F~*+0SXX#2EbFfJ=Njd-J~ zo7<}CiUmeQmnFG>mZ=W0_N&HL+peVR{?bbD5=n5p&%^>HB!8cGC5W1@qe;}o9%mK1g zJTIg2nFV-`*b$H1$cM%PZo(yS!3i=Po(LOMOh%|~bk5!~6*Ekc$O67JUu2Oh|APk7 z>LE-;N1T9B0wW|EX^`}=OH@fYmHqQu>3oGBrSh^OQdsn9fvGI|yrhgr1T3c;#J?tI zH0R}=SJSWo&Y^1AoV?q~J7<{wU*6sYJgVwy{GKF37+_!q4H`9StY~S8iV!O}(FVu` zk;`CYLRBtWq^IMhG|T|4T!O<$hQnBVmDaY{Vzqs3wJo+vgQ5Z=!Alh{wW!omU)ydP z+D1hTN}2Ds);VV;LEHEL|DNaj(45(qwbx#I?X}ll`>tf0A-u%oNu__k95raYxyrY> zvV$F9x&z^Iw^g-|*vSJB_1ko6$tknhv%hEJu`$onW}EN^YLs%`u5}TPTb?bh;e2+2gAjIt^IuAJLYcPq+-A<(G&Nxktp6 ztKMi5ptm)hv={$-4!hV2nW=lvpJH!&;@ng&yrkS3jjitveMP4hHknpC$yfVJ+v+Yp z&)(C6xx^tRm+Z_w>DS(q1k0heGRg1 zx1egtKby^Fye_AHfzxAiVE>6ol*gZfLN!0-%~Ci;IUH?icfle@U*?p8%(~suh_??A z-B{u+FH_H%?5jkG{rWt=j^ysa<+dmZ%%}qHAr3dcE?RO(55lVUFJpSZBg~xakYjhX z-h4LNW-A4T9z7L~92DpdZMy8NX_(al;P5LJHFrNP*njiaLa{6MSN6c(L+AYpemcb# z(c``^Pw6ElAur_&o5ILhb_&f#^!T*wlwv0}lXAXk*=0o>22o+oX0@^w44W1;1OEu4 zc2v#lsQ-I%?*4TsSNrB+Ohl(QNNXQotqS!AB4w&N(N1$>mp5x`&7`j&8%LM9x^o5r zuA++KbQpX!E|^pD_Ic$(VQuOnT9$E_a;cdV}-h5DwGaZmi2w4luT|K(JSV8~XA%<6$P3SMQqo&aqfb5b;Zy}gnQWMdX%Pz^^uQ~3|+12LNU!j&vg;;{F(H^k(WY(3D)J|{YO9#}E4&xB2Voj?j4DD&E zQ`sWyj+u`gT@GMJx`MA;Ym)L4z0u!a27B*Xqs?`sE8T1|*`c_ow~lm`i|XIk;4mQa zH7FR|8a!qG*!*BnJqyIX;u%LC8v37kzIAsgA_zLHfh ztkJ=CI>7k3B<~h58BwmV*dUFw7Dld%B|n$v+GS8 zTd>`cV-MQcnc{Nt7}_eJp+H+`{kpuk#`bH^pxa-Ifw0ug_bX^`D@-aFj>cbg)-miOcMCm=Mk#NHt_7Hj@tG&ZYx= zqfMEt{N{$taQJpge255s?h%2>JtA?kW7j!4pfof@w5wUN$`J+os!Dg_h|7RvWv7!H z{;fZVbo$vwLHhJFi$7kgfBx&UA}? z_x&WYU&!ekt-Wr&_*B*+O<{Ld?3Sf6d$ETO_H3q(ooO_C8}m5!#Jy}Yn7k|XkD}y1 z9ANvY471BwKWH*V&J?d*%Py+W%5TC;T>|(zj?}pDAm*TR%rj36=2|LJYg$lmzRK1yxITB)XH^Lo6)m{H8{Ght5qu@LMTH7XV^()&|+V z>z-=9=o)8P#kw~yNdb{^nW!`VhmPj%*vp$`e;DiAv~R3$-=BB`>+P|=-}BeRq|eX) zGS+va(e)MGEZi)uzm7qF-6(1Q7aZIEOO^&&m)H1cfY0SMz}3ApKw}MqB%1!?y*2^K z`VFf#vTvt3_XU%EnAsb-@^~c<)(IkQ{1|n?2o@=te*35;O{Z4Q33cFZo%QwspMc5?1r&XsH2ZW$iKEz-@wII zrPcL;ABnTDBZ>S{2dtipN1Xj-g($W4sBAmSEWQ8YTfh)n^`Q2ztq;Ge*DI~(XZ9>T zg5fTDt>9N^@RMlgVAMm)z`AbrW1yER$T%R*}9emdg5QEcZ(8f_=p2 zhRj!grvAR%E1CMcbkCu4M^4YfKdh^^0|)8=sAW!$t*MK6Afx?F;cd{~!`}Pk{oGwf z;d2+fBRMD6lWGsCoSg9N!eiHWH8-&jmqU98fPk8nf&bzUP&#&eV|<AT13rc}rC4ViojQD7^#T&P!dqN8*!L>N>G3(djmXY`PBp8|}~^G5MSw4;v`B zv;Hj=<7{6L7Zc>NMBb6M_}-_dxke*b^X?Vo_61kK)OdOBwfKqmstCVk$zFhaMd-5W z#Uzpa7(-BS2xdn*LBI^+v+9za+~SLWj_q;a$)=<9CbU`~)qJnW19g|J-%Isb50i7$ z%ws2qHgi-68acfY0)ZC+%1+*Ecd>!C_x`wS`UbKT@d1y>w@45_A{p8G=e_RMp8ot3 zVQ|^$`G7}WvnTIHF!ktNXwqxLcZpap>S%}Y^N=xu5#2igmU(J$XW_KOJimm%Z>6Xn_tmK7e`s&FKszH*)MhR zB%DPpr*PK9toRN0uIs+u(wX}c)ZonhVyG5$nV=y(MLrU>f_G6t9EY^FXx+WTre8Kv za&qJdMUsnChsm=qN7Na>+4DZH^45#HD2Fe3oF#YVTH=ugYhgt=x7l(GY5o%$e09uJ z&y#AFqq-&8`9<-IV&*fwLYfu9ihl@v%!)#onZ5@*YL7JoH|;eFaZJHM-*HW5;_uWt zkTZvRf(M>ivROK)SWG8Jb-0f{$w>b6K%D0>-kY}GIi%aDb-=VVQ2Wsty8hep0R<`Ky%q?hKq`dTgt zl`S@Q+9|?b04}$r<;GNM+)}0mq;EERglN@C)0){$Askpdn;8~Dv+Ist(K(N;D!INV~5SiN>%s1+rvoE(+2pQFQa-k0&-^L%z}$?M8fhufn| zLg{b?};-q6s=oW@z^f1bs@I z+gXuduBf22)12zgN=XShjZmG zIW=<{&k<@Dj((EymtOT5cDqi5#o5D^l~DHYYzfv&@uA^DvWNR!VZt zGz>MjvRuU@U(mxjem0h(b?)dZeNhD$oAgrX;9qgzAhKDoeop-n%6>mdT3ci$a?`qB)ZtE$*Cs*)V5Ea3)F|#*FKsL3usX*ilfQgA*k2P$O(%lkhNNo#7 z-fQ{is5gl}!-==cRsa(DsAaH#ZI5&>2-sf=q&_ZAjIpy)Z;1Q_sl!E&?j}#Y_D=5Q znP$C;H}{BCrWvku@ZMZT6Ua6kNtk+ED%_Vmi+e-PP@611-tI{4>xxn+)Q!~zil{kt zy_{SsBS%bOl@vQG3E2uLSoX^iyVS=;$@8=I2Opb($MUV0bbtQ-QKr#FjA#-Zh(DMO zUfxzWuodSA{I2L6XX`HX(58yfByF<%n(P-nk_A5{S$6!sRQIffeI7fPtg;h}+O8h* zkV95R$!e4$gd8p>`bCyjaCrXB#6-B%Fz+6bgL#>{fe&r?JT9pCbv7$SEu1DC{;X4Y z#vKmx7?z7D7IwW;i(n1iGKP|Yc^GBi+=KVqqD@X4(i&(ozhLHxAs9^8mX*4Bm~YwO z)Xo0lVK0{5|!i-hh6jv*$Y3JE@GXErlS4$>Vn#`5DD23fC-rS<0=2ADnwDRH- z>}GoEvoX~j5_=iP_0%JC?w8xKs<>PkjHUK#&!-`J+^3U z&A>!=P5;EfUsbl9!1j&RgY7O1ls(N&>=Hd<|E&{$bXep_%&BUV)>>+9lK* z=?^&N-5}>V>G+@RBh2t;>-R+E`j??*za9k*Fu^9ikN+e%yyi*3&p0V50p=lkN_z7O zvsj0bWwg_%wUWFg*?kTYxt*^6gb(+evK1S<^F+I$GG@)`GY*gnwM_l`x(N@5or0}E zGjXRz%#?|a=Fq#(qwH^y!cmPf=QzuZaAO^LUvWUDo_g2^SO&3?Z?ekVHaqCt-s16dN6?_gx zb3FP3iYWAa=VVFLZ1||u?Sc1@r`rP?oZ16-l#JtD1goX1NSXkYl%FlabX9t?h zTOSouOtCe? z89brT?a*Fgo;sK>rC{+cz`$j!H~tzt7R`Ei_^xS87zfP7lBMa`E(HjSB}#g+X~zze zozL>1Oeo7Waz#9S$qs6Og1xL&ZNDOH5XVbv&1SOm(gsI9rLKm^yk;X0LkFYg%Lt3; z@0m|Y&0Uk?B8VaJ^BhKPfm?Y-afv54nHG^KH{@#VV8hU{;5-`v{bWx^Ww^p(?FNg~ zi@s_UAS2O`sy}+&r=aT{Xwj|CT?((7pVG6~-LcHl-R2i^Z^9mGX!QWzuvs|}scf6P zV|;e$-ptHht%uJJrB5elb;+nhZS`-;iMIP;3QI}jxv+yv8T5XPt?Nmj>K?La5wBB> z?oZnvny!$aqUF%R{O*36lQ$u z$h%Z7C^$U)-Odrtq_KiWP4$0?p~pmCXZh;-H+5tD&icJ)*PNXQwAKIN32De&*mRy< zznfPU>^-adW|wo@@bg@`V7`GN?Kqpv#j8twQ^1oxw0y5UbCCk2f2>Nemjr74jwmQYF$OX-_i5?x@<+i6fYuejr|S`7~iB3=DgP45gn& zIJkpKx~r?qit)Ymkr-$3E1S)3o#PF}uWD{<7-6>Kix=ZO-+YB-xcKbmOhdJ~TAXum zjyBV9%ATZ#njW`MP~XhRGXkgcHouge6I@8f{Wm;?8_q7G!>fh=Jg(VDTM;{Wg8b}k zDv7e9zZ{3&@9@nJjq_!e58c@~jPp`}U}tc&(^LqRSH;>I zN0`A%FwXPMraeM%EYnzR9uVgooTJSKoSDX&)Q&pnK~zdJ?K7ACXCquhY-B$Zi;20PKr) zmfol*;1LBp0wBtl|BtBgp>N({L3?W-u6`7K&pWT%sxmT`D9KEy@rZNur;wLzpeaY? zkX)(LfA#NZm9oh{dkSqWG02Y=NgyHazwsXm^?_90lT=r=}eteIi|k3|IxWs%e_pEGn;6s`FSmM zpr@9S7m*VE+1b!^q2S_9!f^V{Z=A%CmZ@(U50#A9{^)f<1`5Pj>`1xqP2{+o%4iqY$2fk8BlJXH&hDkUmxNYj#k;9>{R!I5xAD`u z?0gQFp`ZrE3?m1TEO)&pUStJ-Afvp|y@Fepantey5|qZ=`35h6#+*wGOILS(GL2+H z!}w;em^jSrKp6(SQW5bsiYT6gewM?@2Wcm^Ae5#}{mt|)1V$4ZnOWxo@ zF{ykmn*VrUvUJ5$QoF6oSPOqDRL?3`_mI%4s|gCNJQw34WjNm%3att-+<+e=PISy3 zew->egDME6CrO^4s0J`-cp&b#{4j`PuK}%$Q3zak%(A-BtpfpY)(=!T{G*W#<~4kc zsK&^$x|aR>JIUB?K&IFZ6K9XeT&KYMUm@HPvhCo2Df=HKgi2*Y?^O_v(1@WB6=y?j z>yo0}z)*Ue`b2aXS`;TIev;FwkjFV+dq{jcJ_I3NsOb+58n24g96f*hk=bq^t!m9_9UwXDt;x)s&nbJ|Bi;-`NK z*<e|BQ0JlOVFaEp;CU?k|kYNxyKZLkrx(PIZfymB3I49fZVUV z6{aWRGN0gxhq8Iix3J}yZf z=d`WSPWb-+hO4QMPu5@>)){WFTs@!qm>Y5BI(JgAqfcHK7Fm)dsGSXyiuSkQI7fyH zp_LVwLMhXd5F>^8g}Q9R1oRGi&a^&4|0!y&JkwCyRuRZGAPjj0b=s#CzdwfMN19iF zY<&CskOLS*V*f>B&CaT|Kh7-W;j_G~PWcop7YP&ldUbv>_%M<^HlBhGENE1x;pH{z z$C9$-QgrI-vLd^*wf%SG>Pv>~R(bMm#p1wz$Vj%dZf|Y<=!>CSWj3~Ru8jPSQ#HsQ z0#So|pt^HlUj4~?jZh5#{x{w1wuQVxfUb^)Iw1jtC2DJC*im69wDdSuU|mg1zcgv^ zINwPAiujwyUn_t5E}uTi*Xu>T68D+D|4)CUuRN=4oNvi-<9t8iZ!muYhCq|^NT5eh z$$P+j{dgx%;w6puD_uVQz1U;avKoEfxQ1B?E{bp_2ge4P9dsw1dDty672}ObLq~r$ z$C-;ui-Eq23K;&J{UM5{{$2J*l-gVd*%{KIWBV|MD|%##sdT0Ze!_7(z)Rj5el+>G z-Z9_9K4IH@FMI8i#GMIoj8+-as~yTpHOQRNg1JKOpkOl&>s$7AdvaK=;^3ZJ&V7X2 z>ff`sssBTJTif)5+x}MGHo2RKZTri2)_3LFroY=(f2eKp2dy8;hLhuwD`%Xw80z!$ z3Gsen3#kG7M-F6RZjrf|TW`pHB*#9W2Y**j4mPzOu59VkdU)BwIv!eVJ-nf%&My8p z(*GH|c=cV0y|Dm6_{eD%h`j-ytXGp9s?%W&MNn-nML6ZKP)1 zo(-4!mhzTQ=Kwr=@hlr`@3MCe--eD^{_5qju=kBGGKIg`$MdF zh+A&Nj+w<+*Qj0=Ts_;_ZBN+O9ko>_P!3wj%>7*H-s47U_&-hN6ySNdIXj+tqa%?~ z3+Kc+EWN;=8D*A`N!*_sl^O5PEeMz!#akp^4vYrPtb8o*1%%Did~7(kpxo5vW6N_3 z%FOwAQ#&SP#+Pw@W&IJxWSQ|pGYf`wFz(|YO|*tpz{z2I{7@Fh{YGvJLOSVsLz{N7 z7s~c!cu#{{0E27C(U9x~!&s4I8x=_+ueCfQ7hEKUGBLs<6m~xq$yfIM^iT=~ekMb} zaj9(*1LWHrCG8o_MVxfu9FfJi@{iowIYbsM{9KR2vkVLTW;M4{V1_ldrA8yd=6cp? zNAcc-e@xS`g*8Ht9bB8OUh84pS?u>EPU|R@=|oP;l>v}ivi8Vv$^Kl^yt;01uFXGq zT%>7O%hT4{&oN(QJ`x+HNsg7<$s;@K2k@$L;tG4vL`7%^Z>JDGU%4-FoTOJ81gOp5 zzw`5}Co_$gIP<50f!rcBC?79zgU%8{KHPKi*3WEfs~^B*`GccghUCz#KalQeP!H@% z@k!*`&mJFKJt>@H2ZSwU#oHDv=E(cF$nKWsrEXXd3$2_9f>AGLriazO86Q04FDgn* zrq-U2J=HYplI=))hAE5Da$doa_ejmtcm3f~AMYDKO7 zwiC@Nc0JvKGk3Wb;F7M;ra|1kc}p9yTqbLCCvhVO4N5vz8!r z2_CnXR}CWVlN7w~1nY0B5QFVI^m^QKlZ-t0Y)?42V%u9}#k*FaRksk58=7se94CSwN_|wE=)d`cqvZ9G zKiRbT5U$Qig_sZBm@%8XC1zwH=CB)c`sR-$hI^1aY#+NZeKsG#l`SjD^p~MsUHQRE zGT-0L2jD9t>#5|*$~u(3N~j$@*t2w@RdR}Vbx;e~dblVtsP%AhqF?J_e<=N9VnV+O zK7Jcz2RYlx_TMdd4=ua!7%YpF)|%GpnQyV{WZQ1%z&mA|rNjhrbQM%#F1*G_tGZfM|dt zq7Dwh93*gH_j_z#SZm)}L$W7Z3AFudv%F^3Fx0MV^Q%Va7JU%X{?FdC?SK6C9o>Ip zugdgpdG>?}*vZ|IXBVD~Zs>4&z?bjwy)WbUZiIWX={%lnQb$N(r~I8{CNsHWjGr#O z#7AFT@HH+e&#ZYZ3IUlduU)~W7M7leAM^}R&_Sg=*|_U{(6iHDT4a}Gs@FD*i!2(pV1Oc4 z6mQE_sgpJy$yRJs$>fy>dba>QYGTx*5bYEAv+V&I>BW?c>+GL8+&|fe6Jv>S`u^6U zVJ&ZvF{Ij)4`inKk(fon)jyOzYjur0iaip(lUJ7aJg0YOYmZ!-8hu>yWVRB$&zdy} zCmVa_J7gBRrGk3w+_bu45D&v&^l@m@i=l>HtG9tRwXcXbsxxC@$UE#$_t}ZHM<|J0 zdr_ZTy-M<;UzGv{H)hM6^0*|kiF7J^;ff;L7L=v7`?*lNHg(Z)q4d2{!fh=FR!<+W zI+?SR2QPXrv}tE()3c#QF8Ax1Y0yTpT>^L+f)`&Pbuew7X@#js8hhWGDnWEC`z*9TRQa5%LB{y{_IHX}> z>IQu&W!Z@R(kHwz zvbX1g0P-#au0J2dw%g^V#F+YUyBKQvpt@@~yFb$Z$#{SlyH?*SOz*gL7+?9vB8#ma z_m!ZXbvw_e$qwtdwaSI)xOGI{RqeWDZeb?PsL7je^V=2eS${iyer9GM+muUvbX;gv zF%Y3mx6HvpV;-uGA15m==38C2b3~h;?u~h>GJ3|`&~=G?ylcy@zIx|~qffOySJZi- z8^T^Dht~Q4sC@;1695p=ccLYnWTgFg>7r{=PiRTF)eDH!6Iz($WwjZ_lwu4mO;E#j3x3#C4eQ)2^9*wRbvxy{n3F|M`$xUmIRItcE>$5r zu^arEiuTmffSXndpX}@Kt*5|OY?QBchPWLtCo`W z1Dl8uZ^|lGf(AL%^mX$&w#@rkW0Bh~xS_q=`XEo}hYqy2#!0)_|2}HUT9*gh z)w4wAoP|eoYY(3_&i9wI$N7FfY@BcJXUF;e#P1>g{*Idoqf+e5qT&)=EoY&;&)V~W zy_~SzQf@r%0%BsWvtv;nmT-3sQx7fC0FCM?8r9zJNxkwgv`%0lVf44W6{g|?mwT7i=D_W%Fog5rw$KH_DyvM6N5WXP8|*>8T$rh*ItN8o|*61{WJdW+B3Tgx!*JD znUOD(Tyk4WZfk|uHXWR2tJ~~BQe^+HiaIM;SwF$!s*nCC5$Grll7KsBU#54peq+SRI(EoM#Je)lCu!EAh_JfeR~Xjd6GPICx9+2=p6byj2?Y2 zkNJ*6nw&j%)rUgTtF+(4wdpCfF@ za6?4d-SV>4dhR%OqxF^ESB(RibF>`+0zxY-Nc`}Rr{q$9WlzOBV){;tEIp9ylUaJ8QwQ`Ju{orspIRWs zw~Kg%BF`}+ zz)%j}>dCUyYvL69*HUk82N!uEG09%Qq!>1DXUXdN0plXm!!6s{Ey?TzM;Z~xvz_(1 z#v|F~M<&|U4mSG*nwsECo=b8B^N;qgMQx^zo{%_^9eTkg^E3JjIo#c3HsE4}q9y+D zty2!A{^IX^tx$Az!GBfuJP*axztn?$tOZ(~w^Prie8g&?v8~|#=r5MW8&GD7o!_LgPk8S zQ?-I)XItI-#dXW#_r57ykj;uRZaqz)#9}TXxBzI%G9FYf@|^i}UD$SHbZ0$>DB{lj zS8{WOx|+;&Uqcv{B8tuC4H|IN@{JfLW5#Q&JL%YC=7JWn@~Y(OhK^d%vA)Dv&E}U1 zTIqmV)_Mi)ub>rx(RcZ*`v|n2m(LzPP3Gg9$f+y-4F;y>Ynpz3?KsZN5*h!hb&#K! zx$vvN#KL4aikDgv&GtfWALh|J(T_Y5TaqkIEiPM}=-7qyaHC-0IRI-lm27?j0+(M0h>tI@eBF}v zCNj2$;j~7}$4Ptm2APh4%kwo=E#hO<5>1IFX{ymm?gWbBGm|{h5&}_TYCQiE@fVva z&)+8gB2(e{@4|1b5aRlIL0US^sW|?1>plQtW($H(#t#eh7CxL;fxOg?C`J33q<-$Y ze9?9jPto>j!aKlf`3{q;NBs%7&5y`5RGEjq!+OyMVl(VcOmMZ5 z9jmgZjIg#yP~GiE%$$5!+)qF^kN4&ljyB&QUA#ngEdFw?v{Mp|R)8bs2TlNTNSGvX zHhQeQfI*OK4ycNn2&wHU9EuCF{c$JT9Pm}!4OKhqijMmB2LW`8LLvU~ZwgUTD8vC+ zW*vl=Qixy5c@U=%;g7Ts2hH~jVbxApw^@}BbLe&pwgFr`WI@4R`*OZuMHJ(pdAbl# zEafr}OTZKs^+%8)A-sktrC>^_Y8u-gj2~P~pEgue&@of0mYwCzk5Fh1LX3?}sao=W zX9&<~W*D#zKk}^j*W$eM=(Txg?m8<<8Lav8S>>2f3bPm^UuI<$wNx!S6+}d zt2Tivir;A6g`?SAM?rb;!KF2OSG_vVD6FuBm&bCqOVZpXXKKuAI zWk#62s8CDS61q&39NhAB5got5@*k1%luLQ;5E{-cKnx{{#yMIc4k>LDSS2^Zi@e(- z`mU~>F|er!{VX8g5jCqK3 z8t#%lYo_d)_=3aL%01z&E{mK^=#rgpwW|6vi)JK19ZjpZ$G zbM*@6_il#w^;n}!v#*W#Kad1T&V4qUFXm&oDXpaCe+W9_Fjr}0?8S>>*z24(RnD&fUmc+NStxDuU+onrR)#qWPqoNE$QqvyyG49IMLz)Al#1SNj|Jj1EOO zaYD`63(7Ldty09y(uX0fK5|;}LZ}!D75tnd^&wK8+cerYQONr~FRG_@@`eu&rOaqC zgk+WqOyHp+Il{E9m>HXEWz?Jg5xk0=7E1quAi$2(nwKh=V$a;2t*(t(-xdzw_XxQgW*fp>%Hik2g_8GOEHC zFfaA+1La#U`BHIJ(r}y^CD2GA?sG2@{%1+d#({Uah=%i!Fr23yMitiIb1F0`^+XFK2pnGue<1fkdOHl4R1ot_b zzaBtPiQVMl;aQ)poEv#R^cO1j!S_P58Uycz2K$FvdrPEa-=s*wE)qFX4$3?+Uw4tP z?Iby#Om@LiDB)=87mH#XPts1jb1*k^(3$U@8u-J^_3wqM>g60IyHB;0e}>C3b9$Q; z0fWWusmoo&dF`6-FND|jGO7EMIlLA&f4&F)QlByNrpIA-{zwB4IV@Gsk5FqdbDtjC zhoL={w^P5!l&-k;#6RRm9{vZsme~{k*#uH$ivP-=3jVtPj9<)+E9t^>i{x2!^X&~N zxv2~i19a4zc5}b$@pj{AnJLtJ0iL3;%x7ePo z)#6Zg8G*1VW=1KBs>;&dv(?XQoa z|5n&Mv4 z?%8S0X1+?w=hKp}lThV5b>NDg`lX;;l-N-Ed5{RfgB^mwm#nt}{)wVH&Vj6WZL|5{ zhfq~e0*9uH5~y_B?=U5`(0(7{z604PZG{~qh9<;0BeM}Cs6Nc9G2*?aH_jg^&N3J0 zs}!}TPMGQ9BzkB4gR1);ItJt-7etJ%(a?VTb&lS1Y<_!>39n>+f`SfHI?9`*r2cqq zXR%Q8Yp1i!>xu(`W4jKma_V~;);$l8(#-z&1H_cW?9{T1iH=}Evv4m%p?;{|o#Vqr zk(&eTrCwAe`{w=zpY7(+k>bRu*@j$X7stu!k2nLlC4ZYe3vi$A7n!E5@5_u>V1R^* zVuYQMn=xy2)qx|9&*d7qL)kH4?8EEDEoWQR(BQ~*IrZQ)ZVwFO zukV73Wj@&dNF@oWlk;-(qq+Hv`Dywmi2iY69Q`?FLX<-UZw)_Ha=}>d+p?2B@y*bb zJpmy|D1>&;xdl)fBtQiqF^H^P%px(=UX+CNK5ILNLrOv^rz z#ws4MnU^QMw@PUoEyI+W_7oO^#ctxDSwh)KE!Nt*@RzGh3H&|e!#noCjn_M?WgK+jZ0v++Y?|4pl$A$VNnI&ZDsHW3=omR7YX)}}`{(nK=n5zNMD2=M zw-{yiLX&Qzenp8>6SU`T|ze2nCM zhc=2z1mO#Gd;x21=|rD-Aq7G7LrrEbeQ=ENHfNzp1b~xjrlyje-p>N`MU`0@j*HI1 z+?_!5u%kOEg9;CAt3 zMa)bEPKHvA3V*)Bi`tp_6vJFC#W~nT?D>O!f8U98o0D&0dQ(Oe>(we zQl713M|sMd&8-`}@(lQt@^Idp8pDLD+SDZgu#g!R~#c(V~l{$$g?*i`fIN_lX|r?8B<`3!?j^*>(M` znC-e%##*B7g)JU^^^QAsGB;MzF@rm52FOz%lgnUprjg}>L|?krb?h>bOI4r5Eayge zrTTxA>avYRvm7$rR^!N*iq{NFCa;C>C(4?N_T#b1?L zl-@2`mn({iJy7JwlkjgQ>c1)erI_h=hXBh>SbZNuz4|(ji_eIe_x}qE{!I-Jt$T{< zjLZ_t=jFV8&}&4-Tqk4Esj4r6SGh8_i1A?%xurd$2($`N=6xcI1kr1GM7@M;cIs$x z@>EEp--n8&R5z z#BtoDchNZaKH}}g2+=#EwxU0_rgm`+Nm2yb3X;y8e6yg7Ph#Ex6CMFU+{<_R>N=07 zp}Ka>AxADTZ6GOw9YK98%9}QpN7-_b1DCQiES3UXm9K8K$(NNe-?*$C3x}!|%LD8A zew8*6Ljh4k=pJGtmxR*S!Wc2batq7NOLJ8yWhZYxZo>#ed?)*jiXSV(Pk zfXmE%4lpI{`&hX^a&cMFV-*4^+zQpd4p=ZVv&?*NhN5+?rcx0IGp z(NSL}w3)B4l0yr#_oyj`aV6&R_Qh)Q$UOThk`kKd^LMzdLh4`I{9T$=Qrl>tvkbv6 zz)k(WW+~QMozid#U&s%br#)@=L^My) zBeYJ{0PIbb+b`t2Zs>^t)2uC!#~9Dt!1ZscQ4#~W*yJ1yo*d{b9<^0wG0V+;XjZl~ zHF+3APtYYEF#}Z>l*0r^$ak$i>7tX7?>GN9`3|lX0#1f+pK6LMs)V!bRWc(PPFl56(ItaRIZ6G!(|=LcVQ_gZ9miG#0d^ zS?jv8YZ)|~ZH`iHU4D))F`1UJZ5GD$4*GuF7ofAV^<_~rX`1fom88+auDNh7VBh8kWw!+_Oy;bC! zSTO?QEVF!{+ErEfsHC!A_&;TEaa(CDpYPdpLNT*%fr^{cj9sp{_Jel6Tp=n(H*(e# zA1LI$c$-K~bBsGt%)L-Z5BeZwWOcWlIW~Mx(2H z=zM0K0G3!$2XK`FR(4)wmZ~e9kCMB1L)xpDYn`ahA!Y`y_7c!Y{}LWkALeX8>&3e+ zyi7JXm-&fEEQ^;~a~$NKchaSnhD+mptu_sW3;{EPh>HiT2OUVCLJAp&t`dO>lcsMz z8anz&nm3%d&N8#xakZBc3}^r{$iFYXLk(p`iPPhKtlbXgp8$!JIVk%8S4#_t`>lgc z^eRELH0%%6%`B7KY5LAq-tML^VM&P70itC~l9v#5gJUev(ob~m#&l}tcdB93I%A31 zY|@ehqfTUdAyVaCm$g~bmKhyc4+y27gXX4qoz!ustRFdxqGjd@C_pGXgnW)R%DSk1 z+Y!ujck5?*d!lSwZc{fQfNezwD_B^TNRL*wyu!$Zh16Q#JT@P%Bo8`=;0O8i^rx@v zOV=Msl#ZE9H^W)2qyCn+ItN@1EVws>J;8!}9EOV&-o$8%3 z?;r)ts&(c;YLpXV8J&RYa)9qwV3;LcgeuJN#NpC(wgm!~PAw^65W?Uwu4&z3S9>>S!OAUr#v!1%BOv89>hx zSE_%E{zol+l3ziU={&y_c(DTa;8!!{qjI7St}peBhF`K65cg#pDx&7Lw;1s(tTGF~ zCi-SRUzz~YTu{Mz{p%Y1nWdb(NPabPVe$lqN@^AUbeiVo>cYq(`o0cYzX&P!(NQXX z&VrSWHke((dQxL$uKF%byoPRJJhVn;S1d6a@=Y37p)|d=yW>BO z2|b&RbL;7?4D>=%UkOcp%YGl!T;#AFt7rLxoE(TOs$ddT@1#ZVGj;O5!}ENPz+gqz zvR5|_lMULKi*w;jVt_qW?me3kc{h0l49eCIU@j{x?de@9by!w6SCg!D=>T>Kwu;pz z{9J@Xg!v{lKp4Sa|M{gF(beZ`&qOP=CD)X|UAPNCiPPeCq;o=my z$ngMX^@RTjlH3s^)8Dt9CAOCcS(~|jT8YoiU;~IHgS#{X(u5ST*NaCMm4(tD!#ml9 zBNLxNGi7Q|<~kDn=oMs?43kr&k*fJA31a4VIx>-pN#8|)QgnWkCYH()-D<88O~h>@ z1DL`bz!FQd3H{Tp^yCRm=IzUbB{jNw;+aAs28r`yW}$~ZF_b|>*qp$$qE!AbrYHi| zQ#G0QQcsgv2Qn%kW)86CfWze-`_ny4q4X2~g1_c^2QuG!%aa3j7-23~+#V$bjqsmc z=!?{Wu&zh(a?+J-LLbp&Ixa$1N61#iX0GWpKls?46g5vU55x^II_~ z(BQsJ9N_9`)TKCc536bMlj4_A&|;n<>^8N+HugW0oUQcCl$)cY)jq}Yu4B{nUEqk% zjo)O+B3{h=3D(5D?fsd)<|PFlD(QB5>E_fI(#_ZPG2Z8rbaQDK?w0>dqu)GDo{HbP zpG>&lo6^P4j$Z<0=BG-}1S-?qO_-}Wk?AoZ9e|@si`JIDhQ4iORoqgp^r%>H1Y@ueqbQ|}P zd5EIs3m3wjSXHC$K=uo!hN@cjbVn|hvV?AtvA!&0)ucV*rsj$B_wPZRRfEqgVm2R& zz!=X7vME($$~NVM`Rx}pBiYUEzdhGb#X$t#qm;m<-BGJhYjdU6n$5XXZKfe8(%=dM zM?tw6sW~&Y(mW(YFGY!0i+De3k#l<;A8B3IS{!amc)bQ$@#NUtOseeE3T`hjm9L?H zeP#^Vi##`*^VG#T2Whv~22hamb=F24F>@TW2qBriBA6mX<~(o-W|6`(aW|X4Um&<@ zdty-WTX(Uvb#|GR3$1Q?j)`{E4ug@t82{MgzB0V!vHJ~lg)WaEu zZF>NAxtdbNS3#SSJwL17WMa>@@h`pq;q z&v*;tezpk9o3J#UXna8~d5|)k@A+@ARtiBy=5#M)zIB&`_{=~rB%woCD+O}XJ<2Wo z{3#UXL4hoW*ey6><^gKnx<$ZVQm{Gh!JFO0TJH!f_x`dI+8-3?f5B%xL8?|Ryb3kad$;YYV(?#pA0vSt{cZ|%_xJI(S-deBOUq$x% zrl$G&F%WaDc7+(D1WvG?7sTCsnoOw_-9HGw9u{x{AENV!-$+)&3W$aR6JKOi^Aj^& zgvW0%{R+`hiJoiC(dd^5PwluOev|p@`FUDf1){}TqY%FY!jd(2^K=2?K7p8LZB&S? zWO1|kNg;ZdL|%`t*<)$0P#>zz zHx?NkCQ0UUyrD)DU5Hd$QJj_~ABP=3LZPuYQ5$%XDf80Lm!v-9_xwx5Uu+JJaNEE> zW|`u%%{!joIn5zJC7c#mkAwaG7!u62#YJi#^8j7M4|skT@%KHyBA#Px&##E@cMvD6 zEsFRO5L>%(S_kCg6y$Z)>YOcu?8$CwoZ~!18>YjNZb39RKHmz2g~C5mJZl6__axu% z1n~^jwbsKpVkWINjI{G2 z^HUFSmxJiLo`1LaCz_1sS44XqMAumd6j4ncQK^~Z0s04%u#bs){;>G{rq=V9iNC~* z@cb3xFE*8)f2jD2OxW{}5Wmm(JpX9%UuL?_bvd9_Q!9afBs+?O`^VKZn-Ld89UkC( z2hndl|4Q*sGXL%Q714SLET$DcsEDovk+mDA)g>S2q@~mUVE!upuXyQ?00E)Ro_M0{JX^OGdFvFBmS?O>pj2n zPL6ld!CY(kj+e5XCL|2QX-$%kbDDIsqaWej0&@2b6MjIrwNKQ_0L5P! zjVFvRpOxqog)ig8)}5N-e-I90!ui#T8SfOiZKo2O=dVSZm}l`z;%|T(eG>8E8 zfaY3l3Uoa{?!fm!0!(C<%wojclXmA&2+n(7#WI*#@r+m&a`-SUp8YDh1V1m;(Du0A&wFipKDG$2Elx*TBH9c(bt*oVR`&l z6OPC%*66K@IO^8cdcsWhYPYuZ)c0~U5Bu@I#PrJ!Vy$=N;~eT9s(s5aRp`a$+vK38 z`aiWE}~KGH_5edADmdJ6m|t4 zFkza7G!^GiXfX_kncxhVUv@Ht*2>3;`fpY2avEPP$#OT7c-#!^mEQ!CAiN1{1`h0F zVc1fiuh#tK?0o4I=Bt*a5WgTfHPGW|YK>+!iF)p1HWpH~3FbxCdQG*MR8~7q_f-4@ zG0u$mdmNR2Uu0bv6bB0jk)w#jY<0q&Xbp8F=jfppeRPUYTMVb6rN>GAji9jZcj{+o zftCuup`}_=9Z-~$T((|KnAwc{3R`=ez@G=E7>BEV5tHdRW|Oh5UOvl};rZ4Y!RR+z zy^y5!Fd^1Yq(&cb10A8=E07Ejtphlk%`EBQz9(QS0ds}6tOA(1RuwCx?!Mh!9oKQftLlDik_V5!kZz-|T85NoL zhPvg0!KVV_GyA-dn=G-9th~#hej{K% z60lQ01=TQxxkF%TaasxaIHcaB${T66zALH!cxIl|B>+LjotpN)!D?-lWX_@cMN;f; z@ee&cANU#3&fEmlZSDsRO&%FDS;e?v3`H9OC{4YNANCi(qfBWWsp_a5A(K6JsW|0A zL;Bn42Kv?O)G%}1 zS6#HL0wE(s3n(dnqaHF1{`@4_8=ny-6d)H^mcosc1}pPvOy{{XTjniAJi)pF2eUgAD}VrCq;tlNeD83l;v1!APNPa!Hbw=1mw z5};89pkO6H)m9}xG4nCuUK0+fn{rPOh+>mF!x4EaD*ht#PtSiferuhe-RlKuA7lw! z2^P~595M4PYR%Oo8wfC8qoSOOwsr{yy~MzrL?wtax#n_I^==6_d^n#1XPioHHa~_k znc81Ub|NR&@ylf5#mI@Iz_zVBL(&X{am-O& zrrN{mqWA^8BT=U}DCYNJCe>a@_jaXZHI#IF)OAd{o2>bo?lDalD5U#YKHY{-ONVix z=~9|5=q(bM1pxP?>_)3q;hv+!j+lk>Vz!8a=#tq4w%D~@KqIl*0Ja|F(`5G3@T_+6 zn?m57(%juHIG}Vf1S&QEI^C53omM#rJj+AZTY=9=_3l$~sdUWFOG`meO}I5fK2BDb zfHmG1A$|lru2Q?2Xr^;+P!vnaDjqQ3E<~@F==s*e8a+!XnPBb1XC0A`gZD40m%Sn6 z4426G7p%aUq%JZIUP!eSmJrsDypW`&6D=j?Gj52}5tR#ANgPn>Q+m!4a|W*>qL(*Y zM5VVrIf9>1-C?VZU+X^kIJ8_TdRgoUiuuB6!Y&NgeTA{5HGjlfe&H?kMyXH<^0 zRnqU}!~HqZ)(?pPNFlIK9_b$Q4aHO&jbCJL>V?!l6r>}O{W2U)W*Ugi`fp2Tt-A@S z`}!BAS;L4lA53Gz0d4GGQ=|n}QO+WBhKsBj_6+e5*9p#u>Erpe7n>x3ek#qwD(?3Mt1>lI>R)HQO`U4c0JC_B>L>LWnd)AOFl2 zfO|sDwMHmh87+fVk9?E8Q<2v81Z}aZ6?8wcpe?+ypbgeRI_JlaL9WuKQmSF3K&lVAkQj-p)3l$8TKWwhgr;tghY5)=1q%}cPOo37-MV*4dp223!r=?hA zU7;x|yc9cYtC;`uQXOYXdZn5p`Jlh7#hU6bT7{KyDdHR0R$Aoy1jc8c_58|$BJ-%{ z*CPKvyq$e~l*P69catS7u&_ZAO*LxNXsKY01QiI>@Uj7wmxaIvUwF|XeHv|Vgk3;| z7`q8(d0b0xwb$EPtJU7x)>e8&1z&^E1T3}jrAn)9vC?*EsODCRL6QA^&zWbl3EF%0 zpC5d(&-2Wjc{_9F%$YN1&WtcW&VFl?+a%EdX4yTO@gjyVIt{T`&o}pC(MQfGIELu% z%UL)LiJw*=*<0a|RHBkxk|gzJ%o3tuzN2}>%%zIH znIB2`ve5YnB)lY-aK0qG##yEbkJE&>Bormld(wzCggXz)k44r-8Dq~8LoR__E}JBm zmCg>$WjEoDgg8dOuLHr(cG8%aPUx+$rbsx2pOXrIn-qv-&JF?k=`lddoQVpQkZg~| zh43UME7g&p{~)Pyiu0W7NCSN=&4!F|)=EgZneBzxIlV~&^XieLwG2P=BebPms#m#5 zm&$D}&V$4|o&40A-7-7xlW$$b+rZVr00b*s(m!wJd|V3VWlb?gQmDRTWHv>qIr-yKtZ{;)q*XpiA>}$1`rRbBS<0)^ z%n$xX%lN)mz7TBO^#HAA01Nx8TcZkl2m<)R`BlUVUM0b|#)eF|u?x zTZ^lhL!|_m;V9E=o%tHnhJcSNLvOW)fAUy+baBm3> z%5qYcHXws4Y?KxWbDQDp0LJN-AB&k^z`d1XCu(+W(gg>Ju7^9GBgnmj>=;|hI*-#K zF}{Eh84?w|IHf>2)%mvj?of9Zv4bk-RMjkQq7L}_%6ZDXq z&pfJ7+Q$m@WoNTO;Sr5$;2BMr(&LbWvscOpeqIW$reG?p#AQR?h9c`xnwo2J`IQ38 zlv%+8doc2=Kg-nQqL)ha)lOWahuPxlKWoZ!5cdkiSDmL6;sD{!0bZTJxxE!xEybQJ zoJVu}|^p z?2{kcS{Z+;7^*+T#B&LaBwX$s(S#Ev-&4(kTy#+d(XezLF>|uydnK<<6F;@)?>aiC zIrmD?Q@QXvg@K($3qzWb`it8s(QoiWZU^OYty6KHWI9f|_H^^+a6yKGE+pJ>_^Frw z*EmfIR|s5k$5Q7ZiQOYVwh|+S*?TLdyU9fP-5KT^`kLi;dnLDJ6y2kF#pyYxa141& zPOLpi#4BWub-3y$DO4B#>_BUS3lZ(R%_muLEom)?+{*pjtSUy+(I(mbkg ziYtM0W(qLOR30mxyEV<5^p&X9+XUbZernAZguyYeb0G&{a`ng4$}eh;+J+vYDLFV+ zN*+Zeozc8H6XnO|^O&;I8CZnkCVD(6of#6jkRS0b@Fh-En;iZwp$a$=&efIpFaa>q3CMD&VdB;9pLL_r3DHDHk|a#_z*qC;DD8^cu4T2xOW) zJn&~j+0G^@a{Vz75cdTFF*O%Hk-|sWC$w%h= z3pBsBxsbL1_s;pZGcI(_pGHU7dEA@x1IMJ$PJNh0K#KKtFt8Yqc|SK8sxOkk5Y%CS zb8|)k@B(5-L6i>_5K06=TIq#aY2k-4^Y17ObmJ>mO{*-ZGk=8`JOb287AW;!r3p$Q z!#aI~40B0G!d4nI_X&`Q*qCOmGR@}{S`?S3el*=wrlhr+E>FipS*oUx_WI1bh_*VW zZg5%!g+B9UHsmYLMjP_$Y{+%aU4(G{%?s#LF>g%8Eq$kIipV|B+?h?;tHMiWLwZ$s z*Jnel3NL1s_RIZVse_mM@#LPlAXS6wgP$nto2g90EY=3=T9BLgz@@W;RL(wrYR!uz za(d)jB@P?7R@mv2(v97wd$7{&olsHPg%nnVrhObQF|!hZN={fq6z?Zt0iR9t(E8)2(0!X^HcMfL)%;s$`tjYK>FD zOU!f%%zR#*xct}#{Y3esY~egBsY^9=^jlPRtxb({c1pit*=@&b!L*4z|5(?|gp8=Qr_uwO4FJ|!it2PTKb zW(&5=xm&>w)9ucq0=6WV)eZ}Ty@JC0MqsuGOjWL*%zq0^H`8CPR%M<~V)LieIh3*N+s7MqXm(pGu2m&KAk$ zm0VtnBrk92`r<&THhEQ>c74s}^@h!BrPHl>{fNBm()D`^#?p1NxuahS-$X6_YNv!3 z`~^vhk-kfO<}2A0Q_R)!vww3&u0%>>}!jF-_JGb~Vpvs8gL(dX)@ zwmQ?W)EuX98y5oSSh(fRT7_#>5-MYM9QI$HMk?Ga3({<7aQ18npU!Q7JDd5bHO;~| zcFMOZcWmIfjBPsB?Y8TkZ$Sz5GU?(Ff$%^SseT_x;H@p$kgJ^@37KR#o2)Q)UpX|1 zKv8X!@e(s<>7X7*WzKPAy$advC;Lz??ISo)tH$ZGGdmgXj|bdCVwlz&0c zbB!{kZ~a7bgT7{oX&mXWZP=@lBz78)^ueudsGh1O8$Lt5xxmGsK$W#)Q4 z;PuN>0^>Ko%zp2XZ=aEa)zY_WPhVeSevl zIDw0#v2(Oi^Xq4rYjO}JL^0WqRETpFB74G)qhp*8<4m*ozX`WAfeen7)_Oh;her`t z@L0_OcJt>m^@R1?r(m<5r#oZ>`sB;+7{p_~{&6y2tc~s0KE9BFlU=^}@MM=i9^@x6 zqPDA`-j9F1JmBY@CJ^GGri9EnzSnzho4cySR}L{hJ5^&ija-6CmqvS4JHAe~sd|rZ zzeh#*%*OVp)rrRTXYecE>ZoLt)m*|r_muQlcUT64U%W}LJ}8xpQnCxO@_lw})H zTmG*av0rN^M}$lC7{Gw5UbH=;5Z+xLW@?XR4F73-o~W;=Cg_jTz)IgM^A zsSl5d)ZBCHHcn0|KE+0#b*&Mz{#3XLelmWQ))e4FWN6dj*}ON&yT3Z;_U*Ov!It_) z`N~OhDDt&2y}nWEHP_{utGIo8m@;Rap{U3nVXWfhtxQF7M7Yj;$70NjRL9aOsr1xP zRS$8^7Z)x#8a!IcFyZ$0$dTn-J2`oFdt@-@XX#j}DXtjT;EFMSMTv7~Z*@2I zt?q_t=LhA|(+Fp}X*Los^g7u9fJL!_{k3z^$Fv(G*0 zHGRKrg{8jiiYtm367>bxTQDU;KxCM_Ddcy%<0s25REcBgf2SI@?QG8KeAkdN}f47s6Qew~Iw=c$^JoOjGLjz}*GxwA*6uLy8uaNrwLs$N^$y~M(6 zg>3uEY!ju^f(CQGzU>La&3wfQHC2SXBFkPFYl-s?eo*>{ZD?rz}JUF z`r~ha5nt`gxk%{W9xX5R zk@8;q;=gFmSXWB5xsIkduhf5CoXjuKM?d_1<|E~O>0g!CAAiyeo8QPxqMTeghYP-T z!7TdY>x5i>blfprvLRB^%56mNUaf89P;Yz9SfLO*bjTl13b>q5e|{}5-B8Fu<2rK< zZH8*x&MyCysuQ?bZ#s?xHoCrz8-`5?Cd#=p{kRRY{S#*R6D7&^JY4oQ@50~KE-nph z*|mfNr{vB>tvfTxUH;yHC4A>PCO2N0yj(mX#VTLN%a!2TWo~tFLxOv~ zf-V<-iWCqWb$CNj80Ub;j~gC8X@h^_xp5BlC;T-NIupYucfHm0{<-n}8~k0}&u~Kb z=H^53;4MexEq;1c;>g;QDQ7D8A>!XUm5_VJtA4xU2e>iWrfi&-?fTM(T)qCxj`yJ8 z|6&w5eelnC|BtIa&3Ko|njv4gD~3bF@k7GvWngo;VUxCfD*kI*Q|o$gu+TILUX2@s zHTn#i2A<-iBQze5t?O?Gocs1xm$+l^5x@BJh;<9#Imx!89CBX0n2VH4?w#V}%Jjz3 zjVEREuc^R^pg9v@TyzG+J@)}Q_gy4qtQu=V`W$BhlH0l-3hOG)tQy%B%&eN&l`oKg zV?jVl&a?A^Ymk8WkNp~+hBLyrcN17=+WEyHBSIVv<<`+7RYSsGL%z!_!SCnF(5e%} zyZ)smnX#MPz|S+Ccz6m_tqiT$pII3+8%Ud3S!BMZ&k}PZ&sr1bmnqXuxcDWW^1Ug( z|MdP+Je&Euoj>SV?<)-Igo8i14`r@GXstSR5$!*qhk| zfeT@*GDD&}Omil>Mm5BW*#8v%v zW$~zA=67s+GjDDbl8>4fw@UVUN$BKYYV5#_zc1_W!~e7NuKe;c^6EqH!v8sA;#D)p zZ2Iu$9H;zv{wxziZv5-qHw`3J(8tK+;)jCXTUD4w*(bNDm6&g_E9lO~0!e0<)Wp_I z4fjEYQUlwk2ho>?w(TuEhdYdY9n)crXfLOSWZIt2jqOF4HMtRxQsj1YOfQqz{th#} z{&^Jiff+1+1*AiM(0>N)!y?=oXmwQEUZ_^|Z`bw2EPK&W<)KlBH^QAZ_~B1O;Y!1n zY!Ti=V_{2)L4A2u{^YLT2=06FkmWhbkAqtgHGQ=k#P3^i(+B6KC;K;C?oZG2bBnRN zv-$Nz7c8rnfA^6`0>Ynu1jp;sUnfV+dz>;+O6!$Bn4iz|$^25;W?%dCW4}ttc*2cj zc0$9gdC<&|0$>fEzym>iivm1?*nm&bS;!g~wSoTDCFQBb86L+ z(QBVy>~<`%2(|pfql)i+RtOU2fefkB;_SmLcbGTK4>&p^qd31~s#1)(g8*qlYN`&| zsg_D`&Mt&B6-9+S`VZM{XOjB@92tyr!!l~e-YHO3FEVPM&u`C-+LInroWQ(Nr3FZ$ z1N+Lo)R$uA{~+m_pB|xWW{K>Wno%wkLVQf3sjU12jSGb3L~mX$`IgZ0?KS0oj~JUK zmE1HFUxqCQs7sym3X-O|YcPh^`*>q7<~H8NiBBeeL(DyY+0|@7brVyUdDZb%^Sr<3 z#+g1o3iacN{V3B99~l!fRzCvvW14;h?Z-m>2-y!uKMM6@@%=?S+XqP1{7azOjsa4P z{OcGXW!N_FiSZ|fh#SQ2Gou~m2%h>zIYhR| zX8Quwl9V z=Li=*1hH3^a9KyPc*zt?zc6hM$rLw18_Av<@pBsqZWW-aZT0@}lx^Bfp+jtpI=qia1ua7z_Xl2z7aQOx|{R87=xs#S_0f4M)zog|3hMu=jIo@*#XrrbbEBhae` z7{(y@2*|HIgo24h+r4=J?Sc2>mU^l;A104huPElUo>pRS-%2pH(ycNsQ>B|k7x42M zvRLG05u^il$XzF?pZh2%eTx9v5!au9sc)^U9$OCGP@+CoY)M5^`ZO2*Q}qbqnOq>y z0*zac(fvT0AMwdTt%1GoK&F$1db%C*zXf(g+@k#rrxb{M4?VgwknlooG*tDx_PLOF z)$`%+<>)+HOAmflsA}gbp$^uiZSU>r9S&LkEf?gm6+dd|XwdG~1xFRjOV#shKYMej zTTnG{#i^@{SP8gu0#(~qjHueVL~^0`mMCG#i?_I?yyT>E()tpkouxwAKlU?wR`Yhh z1e@>h37y?Pl8;Pr942|c6eVN$d8My} zR81)P+~8!};Hu|VP0W^IZUL5Q(k+l2>B2(x^Gii4^78U~#X~EJ)+J-wz?um0<2L#G zh~)pey;qaG4<2jz?8RfYy~t_#J=$3J*Q0hO^3!YlaDHJ#ubfQVS^II%nYK*$5F9Ar zYLBNHgQ?je^KWkp0*b1-<3l(POWmPE?h)%n&>W4&p2KU=xfySqGv74?jj#Jd(TmF5 z)JtHBvOY{-=yB*+&={+$JcPTmUGb^2HB()6LvO zvr?u-galSme)9;;72*ipH<5H5HCifofxDiZ)Ev2rB{`{rNQCLk`PIDWK)p}P!2x@! z!j@^vTfAh^_SE^gn&d*WLo>_oyjqy^qz1Es%oS1tnJZ+P;P(^O!D}%K=~RVRTDA(k zpSoU)1Tzf*Ok#YlZ9#8mQ6sllsywC*e|6Pvo;y?;7t5^Rp0xWVqNOcWEGTfN;B5GX zltyPdGv`Z~>HLh6WJj22_eu;u$hC6ZMqM29So%cx)%eh^tq0_RFw|z|H3>#VE+-)Ph zV(yHX)5-^JO%k9n-ONI=Ub)oo!rTpDc%do)N=#dQ*tabmW?@x2z5Zk zC_zZ3xEm-Q2RvYKG|YVNUjZMqz&$zOun~o=VkT7iE3@Z2y?DtEa>Y-mK9G*E9n11_ zH}KkMnadDcSVl;*d`3)Rh(P+LK1V2mUMrNQ9h6f{vNR_4qXM+%FZU_igocFfqMpiK z`Lhl_ap`62$GO{{ef1Y#8Jm3B_uik}ZQPdN{$s0zzxP+X4=?C(x4-wMyVLz0!q5`} z_uilKUr@K+J*3D#yd>GlHG27bh+aHmSN`@ZM!Xn)sB_4+zYWROM9QBuU+M1zZ#5<} z`IUs2ihD%sU&X8hUj6S$B}oC;!`z26M5p6d}sXX*V*30|~c^!Hi*>ecUNPx#Uz%la277Z7`S zcTqN&&Q|(9X`8#V`hIyby$o?mCSB??=Tn!-ziyEXL~hTN{Sa2XHaZbht>)q1tJq>| zoa>Lq(MT6n0|Xz5)69I-9>=0=<9n(bwkY#BvbMLS?dB8f8*S(0Fr`t_9OGAPBqn5g z@;viTVb;v2|9xLTRu9}KlN}sn0==odjO;SY-8P94nN?*Vvd)Y-C?%@Z ziQKh?6-}A>*>K$ks58ZM0t%c|P1#%&6Ce>M@88fBXqkxL@;UEsLe_y9s2jWTsUVaP zR`Ub)dd|{5(7dw^@t#8e>x%qYC(-9YfV!0;(P4N8ea$|9`euB;_k2bNwgCV~ydi8qN8n{kp=CGOYeQYU;z%OwJ!@ zl&sdeO#4CD0ZNnjwPuuX-fjW73KZeWy`DH`A)KaPRJVL1!)5<8AbLPrU8Z5Qx#>;i zo>d+3L3L&rdD91y`V5$q274XHNYG z)R0@Q=;*_v5#3ERMNtgYMI=^Eh1mKQ%B0(2gOc^ z!A>&sz&n~s_umobX7$V!{dUwG!TN*}K>jS)x-(ID!$PQ(LFx7|@m)tch8*{kejpr* z3t4(bP2~`!1Xa8(K|wPvBpTu|{9;e!H8FY9SYP4(9uYZ00d)hQ4lyw#_TF*7)q!jIgib_Z6`p+aJOnu&8nyN8`Wd&mZ9r zmyoOQ*MDGg3+CvsE}2d$(Ot+CG>T|8^vxMOIq#=c;9jiklxF##7GdurXMVu?gu6Vh zwtX$2(%B~vZvMb-kVZ!6bT;}ZFPD{aH1bn^#ywJH=3&4QBlMOk_m}QKtlGG>$t*Ek)XknHoNG_ao?Aow@#x!rrT4#=UnW z$PEdDe<#;Eyt0R-sZ+5P@m1Z#!qfJ;JlG+G@4S) zRE|q~e%7Cq+M_=wKPF{ls2lYS=5sG?u$jvp1ba05MXv+RdARH;x>UZoQ8Mr{`zr6X zW}N0wjYaVj*&KAn*-P2k!|&zH!V2B-Dmc_Chcu|It!Hb z%svsI+!5+p^OVBveJl%?b;w=>oD+zEl5+V`ym*J@Oz;o31t0}?AwQ-%AY>&OfqfA2 zWqku7(OzsX!#sU7`QRT~dV`FF)3bMLCTjWjW+9#VK*0|9@3d-yYe|41b9?nzKbJu( zE>kngvQ;^U!WHK_i*bLVbmv`C<1O+d)lN+f(WB))GxzsWQSKez`6`>X3A78NIb-!C zA5b;OhdiA&DSlbKNx#Bx<0_Z1@|XWVJBEa=H>jfM;YRdNrCnaWhdI(NZ z25d^9cTHSk{_&e*i(RORpRkGZNGuY(B<=vz7AyFyO*NF7eL#Vbk1#;tPqTteH;ncr zMus1|d)IWzP=+C}?s z=Ij?5*?wWyayG_om2!wVzI`$lnN9MQY?~i7Kl__@R+f2E2=x=@nQTAc)>Od5PPN1% zzeu^%jyHNeYQ8v58%SV!eKYwH#eGkcbVg`uyurst@Omw^Elyo2YlugqvpVV zZ9%f}fGIS3k#YLGHq0syuDJK3Ix28M4 zacN!D4Z4$qn)ed9fV470#79B}Ke|6{?&oeDjJQSr<3l0U!;~#zanQWakqh3BxQU*a z`RPr3Y}jKGY}(-*!7S>|WEOAeW2UF=XVa*h+I>E1&S?-?Of0re<0hylI=^#q_NL6| z=SH3D=xB4|K*h1QD{9kc8mi4p<8?ae)0aXs+4w>;<$`1TIv4L&@AJ}m^^yHl4SLSg z!w9VWBVOho24Nw5k&TI}0Zbk8-a7%E%5`(t7n^M*#M~;qB#h}TwBzd6p9M}UYAJYX zCqb>r7kN!5g@mFVQ@MPUiv^Oe@Fo8`l6&k6{1DPgC-34jYQCiJ59#|Ayw^99X-9Gg z0i7>Q@uj}AlQ;Z*2|}t;@5DUWn4R1qR zSqp(Bi!0l5W}V<)<&k8&!9R8(1+rwAezmlebwwOIkAT_9Yz`42nwwd&yHYdJlGLE6 zSrk|L%B-4i{=|k`X4RGGcjYp-dnTewa=ed`QZr+2)U7Vm5s_?+5*O_aEz?l9 zW*US_uCH4J-0O?4h!-r{9|bYTkgL!a zi!p1E=HBWtkfGdn)g3iubETM&d#eydtqxeKN0eE9qO9wpEFC?9o8E0!5M~K(b$9En zTS#J-5X51T)?4N1Dy*5pDbMmd6R${q!51Gz&!pE2X)&Cm=IL?Z@AiXyib%IB9hDe8qo6rt?S2xy2<8an9v$uJU_oNZnxbqw&;fv@@L`WE)W)3=(Y+U zOGTHZ8XQU(MhUTb6fse%BdZvz&%j;;eu@zYz*#F8&k)4DU2sR*1+G86;NU!`iSa@X zFg`bOP};U{~6%vXfQA{)5(oqj3Oj)$+@!4d$D{k`|G6_ z{#fMUTa*Ad7+?H^rmec*#^KghX`T<$E7`DjFOF`31KiBTaTjmXMrJd!{FL~ z@>rQXpJ}?GOzs%-04dMf1E*I{?3iA(0}&*a=5jGL`oVIxqJ4U`9|PLV>V=ur^UYUQ zz)m<9RFWD9HVV_X_D~Pj_z4~N!Q@3g;JNwl+tOKyQ2X?8{*LKaN@dNzR|>}}VSzY3 zpkr&94suqm$7MsDELx8zr2ZV|Ugo2Ezs#wAi7Biv7gOFJ!T0s5Ww}_mi>#9$XKMPD>FH&X3Fu?>Uxvsf`)rcq z1-0g&664m7(yM#^yak`nF*^H5Zp>8v%EX<;lJ;U_dj zZC^XYT*TLO^Eh98NQc;-__oTAQ^NIIs1T=zxI?nTSN-A?-xFmQU&1wVrTo(C(ePu_ z$4R#e0vg&dVN59#G({x0{7{9df9|DL;tHv}=^|hJINCVk$N(12zv93U4Nn#5tYOE8 zFasUZs{(10@hq1N;i%(a={LMfD?g{jFp)lCle=SDgC@Cy); zOyae5>1XcZS;u`ssxYS`uC6oxJfFUsT_H?>(fK=Q@g%C?{jWufiV(?-U8j6rg-Ex6 zYp{btMdky9l{=QPBN`8GtXW#b57mHY1yJ7K-i4(2J z8#Slc8rd2K#Jbr7NX!i}s)ON5n!M z@g9Gv9t|D`Y24rmeP_x2*FukdY6!gauM>TEiqB@8zFlOgR72E$Vi%XbU3w_{iRdhX zk{2y@AC90}h4u99(x*%VsTnie+hz7;6_A>YU~S(E7pEp)*N=tS`o`Q%GWEwCS&BqE zn&d02A3mj20%bQfj`oFHR>-zW<5KQ?eTf0(Yy&Q{>WHaP z&5Q_8gOiOFzV=Aa9}n>BORpD%AmO9mF}@!{@2T~YxoJi+c0b zRGp^CB7%0HnnllCf&Y)&{Kz(Yfp9xHs=yts^=G9n;p)Mj)FtJqDI-&tbIl(wWelj) zlnSZ#DQFDgIpAqvWoEzhvV=Ozxp(gj-p~~8R_$#lnywiatv^R%|7KOqOs>)T(Gu|6 zJ^`a7U}v9zvnAm1J^`mnz<=ce>gqo$A$R0L>Q9z{WS@YM60o9A!08h3KQh;RWoGXn0;LqCG7h#as(GM%G0y4Mjx44INF_Ej;_R=9jHsqs1PP~kL(++ zL-R2MnKer*WTefnHQ&Qw39JYmPK)=JD~&32mS#&!-?LArq0_bN(~U)L=e%6E z-}upPSL9IL;cxaP>R(-|n57z$Pw7`z>elsD89a~tBv-5H)QTGSuNeN25X%K!bPw~g zkm%iynwq(?3vZLyZRWTf=VB_5fkMqmuOu+(eavR!CpwritKyke4QL>kq>#7k%!)>-ZB`$j zWy$a>xK&6_GZdODNSVp%uD&%GKgPQ%g)DHXA`lggp)!O>N@h#+W5>{a|r4d z3H(sJoM4lu>-k_+ccQqxz*p16;v$53(}T<8^3p&GXHcDzWL8mK%5RDfsvceEFCpYd zZ4`hlhf@BnQUb?_!WX}=IMrt})ssJ&9;-`|YoY;Gy8W1YpZMH-bUAv292D)9y~gCT z!i;>0K~2x9d;0_P*Y2~B85M(RTTYl}!P(@a= zf$A}dKq!UVnb%z}+|X9*vTCnd5+wiJ^&V=d^Fud!kxIWrcBp_MU@DOPEBap9+n*;g z^eoLZk;q&j>jfouT`UAMFCIhA6Hpc(L(V_^Y~QZ`?M&(VsolpATZK}A*Z$-)DqfGP}rg{tyr za^gT=e3CnD;8J9OV{%{n(cHJb;N_l>BW@gS!E#VD$wOfr9~dwT)hs(OHQBMOYH?ug zJxf@iO(Tr)uQAqAp_l%X2gF{GC6t_kc}m)TvYcbX?)WyEB*J?_Y?h99mLhbT@4RfA zD{+j6pwmETH1jg)m(}Or-%PMsO(v4A09yhqr$INTuGw+{(t$fSVT!v{3>w2NZ$nz? zNOzRp?1|PncL9M-0Y=oFzSB3eNP*U?;*|RzD@F&9Jp^YPsfMHs?_A*^82>%#V+*n)MPAQ_lQ+yPn~%f<6B5a z#NRsGkH_?WW2Z&7&=%ADAD@v=mV*aO{D8(NvV4LpWVrjJjjXw69l5r9S+(;9MRE~# zApbneCh3W%q;8E%GcP*_HL_+bufaRY$4bzco9^h0%WNYZhl4T9XaCcl>|sc z*Z$A4$q38&Sgq6PVtc=X7+dcn0(1W|@IeVBGv&jvAEWi-I{PtAKN{@EmHH94A94Ly zV?UbpW37JN-^8P%Cb;*lDY6B)Ngsuq{vuyRzJ2m2+4LuQloq}zkFo}hE8nYuBlqgp z=#BbS(FsU>g@{hi>sC$B9hX{n0Od-!xk_l-l3x5;_t)vU{tf=gY7O*!%dW=DHcSg= zCQgWlCtevJcyY_Fo8RfGVb+_{w03;v%J=|68ZW4u>)b)j%@QHV9!suoDH|;5L#}f% zn5#3F@(bZZHcE{3*byrIVd>M-2G+yPKNIv@tg{XYICqn^;GU7{Ge@8^o18T-U0|sS z-2eY4AU}SNpcv}hXBSlFFG0Xac$cq>x{An)MyxSNSJD8VVu${eciG!5lo!u;fP9x~ z1iP zwRFo~D%f?|mTq~>o0Lx+AOQh6d&~S;1WwvgCXWlYbW4JBCxry$j7h`fQ9Nn5JO*wF zMu{7-rA;71TUzBYU`sU*Och@`nbp98LNOf+uuw{0?+>3^?aPwt3%I%&OiS(jFE%NE z`m5rg&)G_uVWfZbI9#G2T~j~;Hk2~OGDi=RIIO9swvdd>WaY^jsXll~miEWA53 z1b=pm3x!_?Q_(;#0P)EK3!x>}fw7KAr&Q9dkml^BIqod>R9@+b?67UxOr%fZ+K5Zf z+B-KD*~u=<+;n7jM?_ERr6NzIXKf~+tt0ZFK&K*`(lxjeV^)5!Bl3`7BT64xM>OLj zMI0WJosv|dd%*ETvLY))35-t)PALc@M%|w%r?Uo)#|1%i91t|R5kssVMObIt4tLgp zA=^-#?SyTAJK>fN-@m_UfjJ81k?yP;3FSd{A$ez?JIScZJ9=ZrO|5T8;?jRLk&@<$@_!75c zt5*3<>Mpf)|3NjizL6eIPiTdE`d8SVo}j|wLgqzZwzkyemxaO>&;-8tSi%U&dd^ zy^u~Fs3VYFiJBnz5!NTP!l_N(@PG4`G61`?AxF+-L`!|&gH#AC&g9;JII`wgY~qEuvG@BZXoX^l|5Ar1>tIcg*H%rW)@ zk_=^i#?RpFrZsu8QeybMLWomE$zgLKBJcvaK@wh@1sat}6*w^~2J&b7RwIDN?V%$j& zf)w}UhxiqBYoXb<$?KUy>6t|7yeN(pPgS8B(tI{cJ|{{( zcYj;3WpseSVqLq3`FcauZr{GI&9 zOp`7LioEK}(CAZazJkA^;GGISw;%X`{@}0tRC3>;;B5+idOvX4e(aO`4*+*&%%d)} zm|IG#hh=R)lydnoUrWdfL7w{Bk(?VOy)$}W) zq2;B-;3bRGQ-XbJbAr?+3pW9{c~SGS9uAPx1#^1KdIvZen^bCov&GBzcQ%kpoz0;p+TE2`Q*(K~5yt*ELVF$aW__iD&<3-!I6keu}vGy^; zKCZKmjrQ??eLQ6!#y$!!mvqh}VB8rumo;Gp0lg}b{oi@y!;JH2Z{&mhA{&WZzHtS$ zxPiYr`MX^Vh`Rt^D22pXDbZ7^v)UAq1-g3)Uu7?h^TJ)HV!V3i5G1 z0t;Nr@a6(pL#=Ay1 za@ZZl)X3g%JM!(YR4iMjCv&G(;iL?I0N!{!X1Hhh)q-mVSbjC}kBri8%dcjadDWN0 z=_1byR4>0`LtPv@jKSz>Ad{Z9Bg?Pe@x@0Z-|@!>@{^d^HEc^Ei0>-#ynAJer_l)U z5_7~VzcGJgW<{Ycrw=YLTh0`AhJKbO_Q`sjF3YUAxIsIyl?;13(Y*Te54}xP@DKlj zgy6!N1}rC!Kw5ZbGTVQmWIXXN($J`E_FVQAL`0S=BHIprW?}3S-~PKG#MV=4r0^>OsMynjZ3qx5>7_;Afta z%8DrlWahq_zQn&FZ;Gy9UrbL4;HUPs=ZOnHHYEJmRR6X&gF|-ml9zqS*B9JVv^)S* z`cm=rv!cY)r?~#Af<$3*n-os?%6F3QABmr{!9SrOaYOR`596n!zL`+tPh6LL|7g5; z!{odPHF=38$@eqy;D*Wh6Ke7k^K`ipA1Z6_VY;#Q15=RWm6`tu46p`Q2-wEuIsQD)^wdNiDEMbNOHF+ua zZpO4(HqtvOD?L=?)-zCs2sf+(j9(ctJ={shoPac!mny&ugk9i#7tePhn$)HjhD15< zc`aZC!|vaEMJh-%w}qQ`Lor*|)Lw#o^NOy|3MULtoY?#l{wSmV33G9RiZjaOwme+0 z?W@fB3-w*h84bTIAH1GVa4}Piy;TG8ssWnexFD!Z<>RLuX)I9Oq0a96- zQK8L1ya_iCkY*Ik*Jgae8iiXrAs_C46@%ogD(PvVD9!w3Etf6$aPxNv+*J?&7oSqY!YsP~P%z=>aE;PR?lQQbeFL)w9X+6r^c9Gqe zbQE-hv%bQ)&Ht7IZ;(S@k}k9&Z0fsXVZ^DH(fpc6{xAT42{U-buSZ+z(Q1vlQhzb^ z225;oQ!NYmwLNy4T7A-EiNVj#ht|{{AWPeykSG%2j+Xi4D6-c6TcqDV9hoOWHodG9 zx~6?}Az*mkxX`3uRdTC5lzCK8Y0iPIyNX~PQ?QJ25QTJD<*%+V&J~s-OpIg}skpD7NQX>(rwYDIO|rzMkh3O8qZbeb9tF_zmt(gfUMMezPqv`CJ~o*q7f3 zUYC;cE{09ll&yPY^t68peid%nj5g2a(Mn?5xOb=?)GcHDPNF~M7!S8BB~h*UjOG$Z zwakpH@N-f9*REyQ|nut_k|W%`V>- zKfk6l4?k0+&f`91o#n7;t=?bNTj%#7=_h88k4yJY<9xXP6ZL=m!mUwB)c#4w@ui-E zDrPpY;bfa5_VAXLS8rWro1*+T+|o*|`tabjy*zj?bKc6W3$W@ zqKKIRcGpYCa^_JX6!Q;u=3HfK3`O_5!p-($tmN}1%*4yA-|4aJpx+^`M`Gsg)3i%s zjF=yrhsnY=?M%JdM26|zTjREA9)I{`^$oXNMftU6R<6Ww^K63BksXwJR&S|XPbrl@ zzqjO{97Cx z0N;k$dE)kaM-jT7bgg-fZ97*dLo&C`okm5yq4+p*-_{3gbFKVP)`xbBdTCeq=aAa{ zq80FHD%^4tAGPL7Of$XMb_j}@X6`)}E^;MB>x3U}okN7#{Tfy2PCY8*nVzkDV=l^Oyu#**)=-dbUS*xqDLI z6}clEdC`4dH#3^(@$7yE-h@WI;Pt9KW1DV~ff7x(MD3$o9<}awWfq$|4`tJs6KSsE zwelrS=HV?5ef7#f%S+*w-(Zh+%Lg*oB}(SXhR36lN#;?>!<=|}fI1f@GkH(mb^WEj zEels%>I+ZbBNrA7agVmQd=(&H*CKPARKLenVE}btdNt~|pFwLGor+`T`}!`di1ixp zu8LAp`HGln`A-RuPWJ-h1Yliev-dYWExjSuKKZhn(V2NvBsV0&N2Sp*R`eHRXyO*c z^f)}iB8QMT2=u-GAlCxfFd%}XG75kt4jFfy01Cw#9!<1U-GED+<2ay8JDZ-?28lO? z2A$yo;_|$_@r?A-4U`prY})yoqfX#%&h?sK-}7Mx-{+xZM_$#+^0jZd+OO%f0-kF7 z>yyz7I&+;7x0WG%J=+P%aVCYiJ#v^^AKJEVME4t>_IxTWQtAFth{>#-#r)yv7igjK zavTJxK%fWOgC25M1}t&dUg0>CHoioi+q! zG&-AAI}>_#51+L2AP?HS{~6%yGC|e{dRa%%-14?`xiE`Ei2>?<5UcqT3>odgOqL6r zA7qHI8riT1wa9(g7>j1&KY7N?yT6pSj^ym&vHI-fff;=l2O$;*MfkYgA&YEG``CkG zLkDZ>EvZGFY)zR#9OSHLMN)_x+LM(`Q8*7uoaN4Ha}zt}QmLId8d=HI3WJpux$Xe2 zjapeZd35lxplfJYU(mU|p!xCelNEIkL!z^?ZT~lr@`d}=ng2q2>T$oB1ZEc<*jInT zdGPg?H@y?UxiVx;@~`}|oo6n8UT1*hx~Gr@M-XS5xSb?k6Y=_z z`IL)+aLXz- z_ybU2Zuz~A;)t_N>ekAr_`e;fPc4$)PNF(Z%+{iJW0zkh(h*t`E9W&|f&lSS zvBik~!pfiXAxtV&=tiEBtM7h@(?6*(r(`zyJ^FlOmZi^+3{Pzx3Zo}wjBXWb3`c&; zRL{mKXXbW8^{R`MP5%*;foGW3otnMf`-1w%u(u}5y&JqD?8xpN-`I1ZWx~Eg4&QLX z4hMG~k#5?`_O=)%v&VbH#P3pdJS+<7F~hLo}a7(5P#zkUlZcsD)Nc%J$R574V)*a{Qo z+ZMkxDuJ*^CKpphRoT8xc8JrDs-tUvJ=e6h6SPiFKu%AsJ6N?Y6uu3AHJsPNgzP%v zi0D;SW)j_IAz|WnC#rElAs5w3O4vk=>o#LQCaz4wICkX0OP9)gfxpLJQ3F)HJ+eJ? z@f{z7@0wnGPY2(zuTuj+PsxIM`1YW{cR*u~!M7KkpW#G=`3GgvvYhFqQW*8I%BE*N z3rfYS%@g00>e!qHqg!FipC0_2d#T+SEKBxGVAK3i{Djtlvw@#(QhgI7UQ(s)qV03d z^@LO4#InQz?%!05s(p*tM?!J2I&b($q5lMyO{uSnxFF;yW^6Td{#M_DOFrqG5pF3W zMVIH}UkudG3qp6@G8M=_&GG-E{i6X@l{%t#MiP{;REoP2S*lUuLCx zs?=xVm5IR{F7tCSNB-mu+b6f?P2swawuEsP9pqx6x$SxA!?ugAJb75K3tQ^xifnD5 z5$^U+q5r`Ld7iUIny&84(Tz>4H4S78r(>JNT=VbRAAb-DYY$9Mwl7}~x4ghGseNW9 z>C99Crbhe4rlt0owGwu2Hca+ijGu|q?ZJ8Yx^9H8RUSTuG#x%C-2Cq{*gs%tInG_w z-8%F91MJ5K#9CUM{vU{%YtF(UkA6*s{8!&5Z7r%iv|)~aI!nSAz(%dv_FQjuANz(@ z_gt-RwyP80bk}u1vs)Tz?i5&RYi{F3xCHd|0d=S|qwEa0|L=TleF)%B-sAToPfEV) zWVWk(-CZ4|5i18i(?c#@E{9UXj|~q$Hrc=JPr)G^UY?wneaY9CwTsg=N2)qk*Vzr0 zP{t(Z zhrNtdT>gBYyjOU6*K6K8+5`=wt!mwyD?R?2JTSJeylj~bI7V156)QC{1ln_-7(jFk zJjk{q1`sO?Q<1&*i8Vwju{*U6+ZWjjVPZGtm#|*z?#<3#;TF!6`sQ&phRG!Mnj7koh9_)tMWDWv&>mS z#gVlGRH90K0!&UynrJd}tFl!(RMW7E1q&W|j4l1zPi z-16vUjBR+b)qtjC;`eQl!` z&Cu*ux5?v`iZFFm9Zg(4KC*|KK@z(auNN-0czyQae7vZYN{*ZLwM1Tj#48rnMW(Y} z{Hd0R`@emO5wQ;6SlMa#Hi>n7cYUTqYUWeic7*^+{xZ|ylNGTmdyer_qUQHHYy&R) z^Pb#VKGmWg{=mip;UZ~^NJ@v(9XJT3XI6 zkjKpJz2l)mNgE&CLiB3NP=8u>Cq08)AsgIp!DB6**A$Ll6G|k6#CvMZNtUZHKYbA& zYlY^Q8)SiUM3ngm@rCI~=koBY5u7zeW9aoe`P*w&qcy^hhoA&w#ZGLzLMH#q`K0S) zJ-$TnS@^6_sHmQr#d$QF!22USVJ(#LCCZTJAK_~do5)|-T!}di1```~NnYACF~2N5 zHb2}V=U14mYcxKVN??8=Ao((zH+`Wj-10{X>I-nB55R^38a8YqP~vh#pztMrh=$X? zR06m8Bcy#JB75b>$WON!|2v^(JU_l+KF@0{bZC$LWfBYsbK;xYKAilQLG$K=Jp#SQ zyvq~+aZgECg|^J6EnP5v?r4o4&zuXYxaR8N|B+a|o-I`%CUzEeJHO5CS(1V6e8~_1!Pu*%tdcdH*QqeW6tNzjg^5iRs}C@ z5fz`iGaPw-?pCow3Qya~h6#{n(q0`5QD-UZEORdBCu(W(g%r+tJ*|T7c8cc~`_Ia| zhnNY(jIYNXBU`5P+}Wj>7a?Xj9f;abjN{Drb+#xvhKfm_Jg_Fm&sB01X3pdjs1KwT zJ(OZ48MA0jMeeT5q}FXpE!vz)JY|}s)b5VRy_5ijZAnEorX#JFzhAwX34$VR=&4hY2W0myNhC{IobhB5 z55+`t7mA`_dC*M5?Gjyympl-aNjzZQN@}m6rd;>crbZlgI+CuyCKJ(94wlY0yP4Ne z7w(Cr7TxP!JeJdGxU-GAh3*s%lSj)|{K{R_ z=C0dRKZ*0!_Pk9OQp7%6s7?>#C=?)CQhDgv+bB1=Jrq8*nSx}s7glNvM>_DmG41?) zQD>vp?34X$i?@=Z9ZlCk3C_Zp9F5=3S%)iIOP7$u2(qz+#~<}^wXqTVB3-^WNl zS-Pf|KsC<$(o2qpXZ{h>q}sXB)U1%%OM5s{TvlhkKSQXa6q{Bg?>zUt5RY5Iy?SQFL8{^Jg3gA0@3u;kPbr5zc$$+crl>f-58` zciws_DGd5qWM)Vmdt7$hQtNhbXiS9V zA3FrMGX!7BX9(U~k{yC|W*Q0d-|aI5W&EA096H!FL&l#LrsHqRyEchJ?DQ^++p=w!t0up{ozcKWF`w+ZfgZ?d?;oH^nD7*$=Vtf`+)7)pO=wXxk+ zc``HhakFQ$mKtDnwc;K8sqzVRSegT#=`(qtgh44hP47k3m;VH*%H{s1@5vMBZu$F+!r|T{6*)rd;82%A;@L zZbAJi&JH9Os^C_0Mj&YZzP4{g{-|HUTC?io>LJTD&WBtGXVkMl2BygDEDC9+;e+xJ zLG*GMJBM*(g%e86Wqk`n>@m|cv`pHc=t=pBFz0DdIW)dxv4*Hp&iP@lTGU8Yd)fEb zZWTgH_xvI|ql{=hzl zQe8B)=z!IdV4Q@8sm0lU}5@ey!}rtw_&#I|zEzsWDt@0hlJ0_(p@?{;bqC0-7N$(@;7-WSDq zc#0mo;al?|z09Y-_;*>61QzYTZPS3h*ToAxh$zV!Xfyo38Ab?Xh^eN9-8d?Rm@St8 z2YjhHpe{cC%WVe4*ExkJO@*az`lc%Tn{E#Hu<@=7xjRR3v)i0t)$=R4a5ZF>-hn~h z^dRZ|pvsEGloyji3eD*hA#ZY9#Vzfdp9KO}-UUsK!?~jg1P-U+PScfg zIAf*V-eU2uegW9{jd|ATrsrg7yFJ%Ke%8N~%?=y<(4-*xbU9qUI{6T?4D$8BhQc}S?GjZD-)ee)aQq9m94_Q@WvF%jc_kT5)%B8d z8T%ZYU^Ys_nK17ihiiZG=(|TaSQwhft6>;!ZZ_a_+Rtv`i(TjOoQv9z7%Fx zQ^fV~YX?pe?5?_v)0u+O0OL+k`Xp0cof+^`L1~eP(JUK@1ow;GgfvFxTh#ppa(PfUcID1FyqW+iRPl>}7dlRd#6+8Waifx3J4dUNHy8QhgRnKH2bf^6DFlZh?P3e@~SnW%#A6<>|{SNuwc*az|E9ARbz9o5T{aE>q=itZ5 z_cHm8juiNb@;#sL)cR^(sbk0b8NA59j`h>3^~Kg&)}&~NOQDj1?wnGDtMFDe56Z-c zCT}kFaU}W(ox>q$3B^NlV5!jgYO<&^-w4YhD0>jZV?e?`76ikO<%J)+#J_ECaL6`Z z^0F`a`qHahu>26`tL}5K&21*gC3P}M7PijK-}bkX*2(_X;eCNU{+ac3;*(y-xhEbe z&ci^*DWY=j#f6#kOzbVW`C{phr6Wpn#B)sgHi+1!cXnQpO?r|hJyVmG^h>HOqpN=bh(W+oE=kDDM5 z)`BrpNQ_$>bcb+I1n=1HbN+QlM!nY;t&`;<9uK+0#ad@&P!w*Jy{;k68xKpBCZZc@ z5zA(8WScv6_)`;QPiuDG`8;#x%$YN1&YZ#N9*r}G)>ukg z3@2wO4Ceq5AK8HpOEwo$_v+@-+_-~Z-jlju6&gSmp{&r$a0Q1k`%cI%@kd)H=mom-wS*Ho`{= z=5zaLZniO$XmvXyFLT0&CyFu7l}iVV;i|~dK^;sZ-c%7q4j!~Z%DtX!wLB-{DPy8L zH2}>0QFiNy-n?OIu{=#T$v^Zj<)2~J&jfgRu?0!CG&h)fbF@60M=j;J2En_>eN-tMVE%O7;7N&OM^Z>F4Z|j z$~!Nh?zZdDDW~+-k?gSFE~!~(C!69V#T0S78QtqZd}_(#2^Uh2zV9qAr*&H^Tz2{i(F1YO2vIjC4_FUQbDLg)nM{5NOU9 zXqL#gic>NzDe^Z?DanDGXUhi|1wzUo69Fx;f^W;85j$4y(#%I;?QIZEj9&J*U)?`e z=3{iD-CwuNGmtlzd+VL~T^zXG>D~OU zckJ7&pX-R8@1s-JG7fhtkx5V{Vzz_B_6wm=_=+D-dp^tI>|m-3s+aV258kgyUPBXl z4ynsEbk!M}ogJMk-GH6VB49kErQ4|lsgm&%ekH~?E{q~W>LuY0Cz%WV^xdeUUOigc ze2*S101vDRcv28)ffM?TdL}v=G`{-omvm+xx@2>2W!4krk6M$PdUr9c{+2t6p^Qfg z`a9CpcH%FyasA6;yov`dc|$JVxPi~uuh;Px*NmRnzTdBiC?2K0gDqO zkNJ{RqyD;(p6_J@%-;=q1MkXphF(_I(yT$B7rVMGIO)5<_>zY4&+No4AuPw3 z$AW8d@oBK~lzM=Dq-#b`0;$N>j!jjK0Gc9}c z|AW1E4ik|}zq~h|X+QOCzc}89Bs4rDIpIO=Zl8sS6)5DfCl=WmE8i6_OSC7QujoVU zX!l*-B~=)9dpFmwy{^Q;HS7j{s??oOq)c;*w&ff^{enrBi0l!8LKLrvBHgO`+fel( znRO9gb183d^{Dw;j^$##w?WWJ2^CJ3JWMflgDmFOK{YBd(R=Xh+H_XOFMg_7OXnYu zps7#vwBL~_F~MW*u40cV@|XM&5XbL5R5sakRElDEFv1U1c2!ZSH+*IwptW+gG}jR4mvH)V|P8qg2RbstkkDQ0~9`uWC!qOsj}duTi80LxL0 zWy^x5f6Nptin0ZS9=be(8rOva)Mx80SWK?qO2~sQ*WS>P!og1;B z4peiSKpzPCs+0>d$6X(vE>!*fKIN-K))y$a*rzF2yS`-=M8|By7Cq{#J=2&a^)}e` zPNQBu)gJ+54UwMeK>ctsLaF&yP<>mvB_P5G4%$%a+HSCGJC)kNTVbLqR_jysM+Gq~ z`G*lx1_}mr_hoS|&~u^dd@@(5^~r0r6w-!%43n7&)v?|mlHOhM2@@uAPbj!Vm(t!obIUj z#{x16TD;f;#k|u3MhEEXypjxB*a-);gcGgHazB)Z!y>tsa%S)T{Vx`Tqe zN)4bFL3KWj!%IYoEW%S{qv{myLRT?Qb!!2l#UKJ&DbF6n&BUNuFW)5|qs10=xEeC7 zdU{$9Ln=ZY%vj!s)2fJ}cHh94u}t8{*uom-4RfeVhLApL15W0C)(i+@o<-`N^6UfW z0Xsjl$4*ogd5oP!TH`I!(yujX)MjP!J?z8f_P*P_&c zZ_@4rTU~_dZp6qcY%-JW@hZ} zWH4L(&$qOtOr3+bf+Bm+C?6n#5c4)RRjH?|sa2=|1GwZ0&?C*=tEYy$a}02?QZ*l9 zaN}ipvHAEP69cz{>K>|$mF0rX5QZa3grfL~m1Qq2&2BEsS1oV@nS$M#n*Z?)&Xe)NoM_@sZ{rHq0bU4odzUp50@y0`6WF+H+vEUd9$Vau$fXdh9Btu{ zoTkh%YylXE+h7H7Kzm%#M#^JawlVDLAcP=t0zE`s%0f*r>%1>b2T*RoNThW#okw zL|+!@9FbGomn2o2QI2sU+^R#pCOPck5np@i(Yu9wyVXo#YURQ=STOW@m}9i0I#-|G zIV1+R+<%iBe&yM$ZN3;P4R&sNUAkL1y!a~29cAqbza|s3`ixzWsmbm%I;^t%_+}>Ar)>RVEK-rvyGG7neT2phWNF zk{x?vR0=HgIU^UJw8ZbM5}oB_n>m9bX&;OhWOB-veMlYt zo+e_^g`TkE)%+-{D#(1wVLsiviaJpz?q&9%B(I8{#-o32B_3yciB{#L?Ufb=N zE%jzsjo1-BRjtsCxVx^fd;h*p^pJL5m5rQ-5GtzF-8v(xOr{$atlcbzqJxo#0q5o= z=H@2m<|HCR6Okd9g{Y%PfN8J#6-#wBTc*SD1)Lilm_cNDw;37f;w^3U7N2rBA5uTR zT>vU(^6@nA6MR&u?(dSf^sqS>r^Z3O0d0~I<(Va4e4LNnU}a2i2WNmkb^9euDG3z*P3q=M0>*@A_JW>Oe z6I6vdkQ-E2=|Fx^eOKox2&x=n(v(@Z1=S5)j*RXc$Nfd&Z_{BD?)ruKj+x;bgaGDc zr{n~PG%+vN9vtPRqfE#45=#YLk|z|=R+4Y8ruKZX-xGq1Z`RE6N~W=9xoCMU+jRA` zG|S$UyV+PRg;WioR%e9Nef%2x(d&fNAMYUOL4ppc4uZgCjFgGYbC5_Ah1GY6G;xEq zW2jP>>3(>i0^MW{(i1{Sm72a%OM_PI+Ibp$j#tHQe?I)AFu_C;C2_2l`@bX$yYUFS zd5@my^B8Uo;BLKPBj0iZpy3$;>LXSmfuvijHd_R~3L8G89c1NUmaKe(B`ah9rI)RI z_+ke4=xT-8iWJgyhsO7bT-Aa|{fae){%AJxw5&H(u#p_iM*Lr9BlB|A{VRkR@8K^E z(2YrDX`K^&N3wH`Jcp1de3#0Li|IPEtcld#A(G?vr2S^ScA?TNo&H$(!CtMo(1Ug@ z#E<)Ibt`*PJ(Sp&5vAEBTIiohxbLWmVAeZo-u9Y~aBI&5HUV6(S1*xI?y}K&X)31D>bDw@in+aulTd?06ISaPRoXuh@#NZCq8xwoYvFRUv%6$OM2kK-nIN|Ar zUHIZ5Uu=HXKbl$%r+DWorvYJRv9;vtCmR~O; zgE*G84_cn$J5_pIZ|TS@c8v{GZy&TgXtyN9ta4KzCeM>@v#Zj{U$83?Jn8c!9W#Q` zX(uY_hb?&mRPQ;=$q!qOnHo|?;m5M$u}7g%-Y=U0i%{>14hElo`XuMfv~wE!q72+t zy+9od=th3fhw>K?XQtb$Rf!01yux^L>GFV#tNL`ECVkQ2e#D5^kLvf$@x0S_wy{HU zsXfW$u-kH@RzJ!u8Jedn^6b=kHumP(D6ZC8n@bNiyc^LM$iF94#IdrrW`2eb7I5Bk zWSx8#tgx}H!T%}59cpcA!T3=*fk$96aq()&eE~_tymt|;0l*91$V;YI3yc`?z1CTvsGd9>2kMRW_c$T_IgXWfl6`WLC zxi1PDtI4fC)ntm_ zzrSpFq=(V@IP;{VGgBN+f@tnMlId_NQ^$!z$nA7&e)K}6ubTHBA^mu0V4`D`{0Zl4 z`N0!y?GD6Fml*ZNl70@I0c`0!k^Sxcib#=E>&A^O?=K!*bk{9HMdP7kV?X3&6y2Rh zMfkU%E~?Ro^!D0duRqYk;v&2FZ6`0Da-T2bk)D6n$@BMaN&4iU^cC}q{_G^(>8-!8 zHF@*M>Xfusu3dzNa4mp;$^L$AU;9b?!K~k856Tp$FaO8}>^Gl#)Bc({~JdBUZ$NB{Q*G zarS3_HfZ}eot91`;4^xV{aDDzVuQ>Qi?-tRfmA-KS>Mac`pqf`&z^JaClm8}s*Avs zdIa?_?c2P(v31+3Z^OkhKIa;1(m(Gs)}?=P;X1wSO~(54)FH-( z^v{cJQzE;eGkYKW`)u#|uYUG+*RaA@y9%|DLDyjM?RyEl#%4=_pt|ojn$Eo2I-<2b zXrH{>&gkm5B_X|XVcgK>&TyKp*s_P^KuQ!&f6<5byftu`D^dE^+2K*m8A#U;uR}ht zncELg;M>eif`$U%>S2QO_qC3cV~+k)zhK=%Smco5@XT1Vo3UeeI^*v4dLc!pGuG@O zO0N;dUj(0;Wo)9R)WW02OtbDk$-c835-1a z>>+!075v;Kl-`+W;6bx*A^NCgIPigd%}bTVsiRd*o71Bc>Q~rN%0^KqqTm zRu(on$lCHaTI3w#gH)DgI}7q7H|}F~?$}&+3~LZsv$;-I@J-q6G7324_G|Cky$qB2 zAk*4@Z?7B_^Kb;Lorx2>ABW%W*bsIo&M{o3&KBz(s(Ty9cVx48R;qj<(7>srJdVPh zfHC*v#ebMyT=)&`W3Me|>{uMoAm?q=(4RXItV59C!0PiYOk@cLlX65lO&F*8 zJD&eQZQS3TUbRM|4ZkgU!O#4td4kqWN(S>#-vZer#~NPH%#oM@8XBBz2sDjiE3Yr4 zoY*CM{E!Yg?#02Jet%HTIK%e-(G%@-hUY{(FA5h&JKd4#(N?V4pRSOO;*3K*#9}QW zW6eW|rK1;P9g(QXQ`c{1Bf(?s&QzUwUEUKTutfKuq)%%z@;&VpPPZ^N)xvqn7Ut4I zqGqtV)s)$S9}gizi(ZZt4{=7$W($>J%#vJK&P+w=Mjp8^lip)%{IuJJ#6Y>-CxpnW zaG3acL&;lYTwRi_<=mg>%iQs~ncM&6f*I$rURU5S!K02m?vhc$|DapFJN8Rc<;^ej^#9W-k49et}>uG2(G*9lGuW-SmP9E?& z1Y3rM9nB!@uC~H1!nt5ME`6PbIv;4xdJNryb5B zyw47ETchQ$9X^Aw=N=0NFX3D}>?1tH4i6wa&JLeRc$OVLi|_(FoK3jd4i6-})()Rd zc&8mchwuSAoI|+B4xdXndyWOe`Gkw?a4zAAcK8CqbL{YigzN3_MTFPc;XJ}y?eN8f zciG`f2rD~$DdDVpt+w(B7uey;2p8GmD+o`s!v%!r*x@S)FSEmb!t3pD8R1qtJg#Lw zp%<6^5bpw|uk=!|&@bG^JZ42w1_-#O_oJW6OyYj7OQ0_$*kr0mYI4v#?hS2 zCH|y%wFE49a8`xx!ezAz1VOL9-Q12K< zk6x5k)9$pI^6k=6)5^4(#-?go)~BXRIQ|ou1P)KKbjyB1>Fwo3u1@7DPUfP-hGZKp zcl4?E;Y&XYjxfi=t3 zvWNI|Sc~m=#{(zEkFn$P`o!OC#~1gB577E7;sh_1gcsQ1$%I$g;oAsrw8OU(?y$pm z5I$&!rxVVaXVo)<@L)SUlkiwOJd5ybJA5bMhwSjz39qulcM;xbhiA9!BGiks-YKo; zmxqVk+Q$?lfH?lWBpDwwI4NJI$!GB~v)aaFIoiienLCBcQsbw!J67tz?AVxMYrPhE zjs3uF$RjxXb;t_Wd&$9SKPWrh`w?k{)ni@LwD{;zhojP*sY$voTK zD_8l=TXKWA+MeKP`T4WYKFi}7pM8Mv|H&WzRqc#L4#(YMpUf$JPjNuy>4W8LxjEmB zE71b|USNr55Vzq`GPy8Bt$0f}F3v;ST+w?EJ0tJoB@_*RRhzrWq5gXT`#ue)Xj>{Z zq`nXxxI*RY6H#;qICd`NWS`f(48r?-cU z>@Z3pS4d?^=F(h!7U^ver-!Dae!(2{X&(?a3M3nf|G&MBL=%t?Hnw~Du$nd=k|-zd z+Yn`z55X!QHRLy}W?0T%Tt#}zGX8igUI`eh?Ft?xH``%!UKx=qtjvZdVpYD7w3can zpfk)}fbXB3zD`m4v=r5(;yQ(lq%?&38pyOZvir!8BGhE9^Q~GhlUir-kydNHRf#iF zWDKPt>DlqUU+P&GQHX4m+eIeSmFxLwnZ=*3@hSAQNjZ&ML)le5|K+OI>Z*oN)!+xE z4h>Fs4?h9(jcP}wTBOS`tla|4{d~zoqospQcXL3`GC}oiL>ptNpt@g3mFp^tz=hLl zKT#MNX3UaQYWSMeH;*U5?QeO1hz*Z=NTjIjB_L-Eg9n|m>E)c@QvAObc7>(krA*nl}V<;RGuO$4;D4z zOn<+&%sFfp58?Q+ch&^C-VtJ2X$N&dN-)15-xKGf=C_Lv`p|`*a2Lw6r3Ai(2j+?W zTUvEYcSttV3x`PuJ&0<~$a!4e5lzXNX2Y)!^X5T7GTcUnE?;^~^Nm6%SsD_G`WGM1 zpjGd~q5`Rw0auq(h8s;J7XBV4qMrPOZ`g>I55zD3W#86g+U}5Z9$OU98y{=E@kHA; znH4g(({Bcv6+^xhGd2~&mYx;NtQePy(Yh9PT|*%&^qv==p^py}H3h2wy&}3e_zQ@A z*Q@Bk;xy!2+AsemIoU0^TI_hkH$>HW-iA*JVvW0rAF&_OelB15*y?AyzeA$i{c=#v z&n77+-pM-9-niA0XLRpHiM0uKlBfx&P25&COFQU+ck^!CvwAo06rZi7uh~9ZOMj;W zv0zK|^M2lCQz^FibBBW~+$+WtHeb1nv%dNV`{Am(yLbynw~j#_@tcpuDz>^_;{=Aq zr=m6H->Ejx=a_$=mdzv=dZ~Tw#k}33Lv83aB|<(4P=b5I`=YIbWBy(A;%CGrYFZOD zyQCM}pHB7SUz`a@FaE{L4s;=2cQ9JF-w{5K`*&7ur9S0E8{R6avOID}>smdvImYwU zXynwQKHSHj6gM@4yUZD_=EU=Q%(3Tn%S+r9`(v35?CGYnYBF{!xGSIwKp0hSP`XQn zcj4ctqLq6MGj>I{_qcu+tJ__vu4&a$M$ErwM7y_<<70=wwl46uHTuN z@##CO;?rAi=I&JP`vMx7{tor^IU18*UnXm$ z*H`BA4k-40>a8ow!y#pHo;j%?Hm(5dfdUZ79jaaGYtM_GHYTTRa2Y8PM+_wWWFA|z6mGK_r*W$`V2eYr6Xuto!$g7TSUt@S#2MMNjl1M8+|vz=^-+DUmkdT?SI|G`)a zM|JfJ!Cj*m$^_#j%x2WOC1cTH9umCBy94u5y|)%pKc1ea*KxIog=o;d;&X`mm$ufaU$cEIGg$a=z)o zv5u&ace-9-Z9G8d7z3%B?bc2)Mh6&4@u+oA$O`j1w|AJy(b`Ryh0j0Pz%@?f9JLDz z;=|6FiFpAvDl7%u)}x`ft8aE$RM|@)vOa3%qcf>|MDn(jk9S^&XIy_?AYL{&pblXE zhsgV-9j`90g22Tt9+5phX-IpSTTof4=6;RVCb^kyF|0t_W8U^MYgb;TcjdY+U7n3q zDbtBerX{PO(fIs>R$F-BNVQ9tl5h-b4=?y-WJ2aB!O7y$ zHag~5wP|#4_Ma84!$xaB^|!6)HPVO`-6PR+t>{h3=)}Oh9gKw^*TjPf7`sV``FqrV z->r|6CaRBqB+T75Iq4-fLN+|nwgx$Ndi^fOw_+L;ni8@sBOlN0L zrHWH|k} z6&s^RJ@Y(TXyd~Sc3_Q=X=a$k`8eU@3P5Yjzgld%m(#B4I#N6od+vt`^E6q*`9M)$ zw~JOJ2F~8ku@c)J|N42jl!JAzi}}~9%-LE}i}}~JXG%{KHLFPx8SV>x|4v^Gd=zm| z7Tl|_HZc7i?fz8)W@?`JJ4BY7>sCvzk;*Xc6(pMe)$tjt5;YsSeBxh6dv5h?Z3P5(M`fXfxAG;c$wCN^KXjRZHU!&v=`fA@TQa)yeTRFZW4JoQM1VBjXWFsIh#svL8 z$5sI>SySw4bHI_Chh~H?qyM14+HImt*%&X~h^&^&hEhUm{I4~u?>bEoGE#qFh83%5 z<_JqLu>`5pQTXO(H5=tEJA`&eTXN*AU+*3)O=J zyW`x2Z}N7ah3|8T5%Sv}t5}tyz{`OH3jB|l){`Pdd;SgTJ;YgvuRXIlkAx*ry;cSA1HqmluBj_lzE%7l*KL6R<>D5~MLnQUSAw)AQ&M|D z&VnB?II*cM@n9fY+X4Z$GPvRE86<*KAOl(3!3?*?jEVtc10tXLC2l_Lkqa_gL=?;P zZXSn)(K7MT^YEV}(%+0k#}$=j2y19n#wBW6V*ZuU)_yVn8ud7n7;=+s1-nsfPk5lq z-)iDU*VYW^TWCb5$LYYbgi>OXgrqjz@+ zrtID2*>4Nw3K_^I(q!Y@6PtmFzAhQ|Mvo2kHXf%ZvXAUKBYJG0w_!4 zfk<&kal=+xZ1aEW?7B93EHiRtw0mHrKf;tVe4*s?HlkC3hj%+_POY!|liejzZ%OJ0w5XM3YpNLY5SpRj3p_$JK@I?p81*Z{Gar8^Tt)Vuh|G)o0^Zi`Zx zSUGB4k@>zQBN*M}?Rrx-l-`C$pcYKX?J8pz39=-trV7gUkufIN<;~KyRu$hfRtt4g zV2L)-(^pA#Q+dgzraf$BxVuk=#9wS!9Cn7%J{kUEXE6QUoY%~A7b8rz`9F4|0BaE0 zD7h`)oUCY^fO4IBk0(n7bbo{NJS88kNM_5mA(nSnzuZN`&Zalp_qJ#Lj+Wx$3zqG# zA3I%$4I8~F$zAv;dl$aC5AYY;)r^wz;cb2J=t{z3?a{lmtsp08_8$GfdlqVX_bb-@ zKwOlzHE{PVRAn}`(zp1w_52N4KH%Z0Lu~slyna_Xqn+19k7idpyd{6c(RaWqVZM{h z9C@3H>g(=vg!SD$v6-*0D{_P@O#hU`W;^oRkj{yCxLiQCD1~R%e*J zhAMlRZteDlEnTIWk`G@ADtV(1=4AnAHH%K4c9R!<8eW&$c|f2HI1?c}O83Oay$-N| zYQCd>4=5p(`Js#s*O((`44*M8d`i)bIo^h6Dabj%(8yfCPul$VIj!KA_BW~w#>KYPJXDF_ zLNVmQ6q98;<=ixsM+fAUAP=sXEWd)uO4xtUUOj_#Hdh021v=uj`I&bMXU3lWHLTft zk7jj|)c#Im>*|wW>$Y2^)0;bJUsY)KnZ%ZbD9U^ZQJ1HcIWJje7Bw*CP6R;jm&AFv zzVdBOz#8A%AO_&kMF#9nF7KOVQy7oaA*w(@Y^o>vxu@3iq6o=+1kHJJ6zSq^#K%6X z^$hyN3{4Z;X*0t$H-E&(-l!;a2fc1Z4H}mpAM1Xu1F<4r^r*jIsPWAiFV_nELjvmTOY8yQ(D5+%2EL1gXb-K#Wr1oTJ7dFB z29ZNzyTw(SQV$%$=fcI7dI!GDC7TlJM$p4>A@PFDDE(ejPz?qoj@xE%Gx}o5!HdB2 zk~#J-lX|nQt4qD}|AhB&scr!%}mxnnhX?k&bqUObtCOGcORqq(i+> zC5YlEZ5j^0>lfaE-`y>4GO>MqmHLo|8CI>hbAR@k**@qMb|ar5N5slo7atYktGm=V z59!a6(N@VCqzwQl3)_)*gQdJ#GL250D$Fh)(X}hHy|jh0td~R3ayGtNhZDt}=Fw_Y z1yAQ%6oHe~L!eP=;3W+qh>psD>KFwX(mRAo5~g-Ek8{hB!5_H5$-6sKcP5>`+PXiS z!RFuxwi)kjg5q;c&yg|g$p)aWlZ~7Y9j8`Rur7h2kh&7A0Jg@)bd8PSX4MoBKafV* zs2%NseylLtNj)mZoT{lZ&sZK<~t(wN@`zEU#JJm%Y z3nuQbbWmKninF>JpBT2zo1z!UM5Z~RS2tse%bEbJqcvMtE*UB}rFmu(J?PX{bDZ$8 zb7pcugY9wh3Ea2;#4LoD3SVPX>;-a%9cxVx;csGiafpFIKR61?&|ynInExR)h<@;) z*b1RwP7!01hAu7lp)Nd(QmT2<9QBSS^rWuP=9h~{OESmrBJo*dvMEI-LL(I&sVzZL zlLSfhIX+aW82f0D%Sf%^l7JXVVL>6A=AHTukSwOCDI%E3h#8drl69%bXo<2e3B5BE z6V)%8Wdi0yihh~Fj;f{8bJ5P`G|$-8m3AG>dOH?*aIEWB`D88G$<1lK1a7_1@46$k{Oj{4dH z$IRQq7l`y4Imax`kNJ1E`;{cgdhBUH*32Wi-M?Gn?DdCz5ZY~>qnI4(Pm}Eq{(gyG zuH*hGNP7smkK-SmMYVTPIdOajqI%T(tUiOYFNOHz;OzZU%)wNQtuEAqGb?>?_Vy0W z-t@t#*b6RAr)b8)r+?<3<6t3)aH&k+3FiC`rdwnjgkIDam3GGtYu4%OI<4KmR}j(W z-oO2n;N}+eMe7P{CA_b?|&J+A{o8;Nht2qQ0URq2WIx@eNB(vm3s6JwEGVV zfHHcsrSOf(!q-||U@Y`_9*|tNY;dr5Jl9B>{>d_5H0tsEcjK31d_pBB8N#LhPpmTb zct_g~Bx-WhwsKL-w(u8bsxy!tJy_JMkF|~A{BnMBb+mg@_-oPbyS)vv6Jqb6VNUKH zzVoKVUfTUV(iKuC@zZ;1Ua9ZEYF*_!h^4a8shcd~o@kDEFnaq3`qaEbpPGN*IZXn; zBl0w6pYkrRql~Q)<8@rlJ479*)>O#89ZQ8?wO3C{5!j>8!zLCz|O#dO%e;7qX z!p~*#19t;B#79alc-QAAk5&Q z*npUJ0;xMa#@dmO_mP=(xI5E2tJWvFcgVKeYK|?CoaX-G6hw$RpwBU9Sex@n*5*85 zmgNm9%jGA>#ZO`wXHv*E>Vh{dDT3OQTl5#}v=EV~!2|p8-GEy`ecYiBpHZp)GC_Le z?)(;~RB0RYp47&?_Eo9R(>aa|#%frHjEZNPj!fwTf(m!^lVep8**I7|%OlcVM|`Rrw438mYvnRy zSotSgC#<-8Pu%ZT%LL=oV;5wgyE)G(^(yB~7Xc~xx~W{;X6FaF;8wc^47t1ukF< z2kI}tQNiCAK|A;{-{~H)-TTNZX)RqLEur_$;fsz7hRA z5%w%CbKN+`6`3Y}L<`mH^(h$7l1t(>=u8dhG}@Zg=0DdNP}2wWgHda2LFVoKuK>|q z!$Os6Rd30+C+gl=SZwbvBhvXx_{Av6>}?#%Vx7Y9KjG4J`%4)98kq#c+57_6X6bSY z!yo-w=m7k(IS}L6LEU927C=9H7z0oPs?CQsgmT9hrTS9>RAz-Cle3boQ2j$0iBrP^ zl0XV*opb0hV*4QT4|sbwGnS5ZCPtnf?r**}@>DLvIVYBzMd|2T3ySz9{COyVL>u zy=dgs$h+cE**L_^F`B72WgwOC&kd@Tq%rl?>QjVjg=L>7lO?7<@irPhEnb(~o(akv zUDc9tQZmKc@TgE4nMd|U34@b~Acg$7)a{7R$id54%^YGV&X+2;n&KHRiBa21t@&BA zQ1b#2{bGp*NcXS;cARh{Rq4q2Gyoh^-SXyQev1E@#ui9s*#F+>tVcG zU-VIl*(7shODo-%2Vny$Hbv9ZOzYOHrPI-xKYKPkhEUL3+n4!2oDD7Z7~%F~#@b56 z@CC+CQ&t0_!(zIN^xiC!IwvF6`o`zhII%jRbx<5wENZnJK#{nUkeZl*?(uz?q( z5<7=_%!)^^>TQ&_owtl!La*B`{ozvIjRPY8*?+sYVYZYUt4sc$%M6h+6Tey+kIA{=-G(Q#hoE0Z8k}a}(g+Gx08~(yWzFNODoNl94;5;P_&MzLc z;FN8&z1j4KRXLwt6!-pH7c zu|_I&r($S(oy2_dvm}W~+j+(YiJYF+cBS3+3wGQ0r`n!wB;%&{w*8HeaX_m0VY1!` znCO<6=2Q%r$chnDlZpYFJc*f|jM13z8AB!VjhlNhv17i42~oMp82%OAyhY(x7|FOd ztT@5Mbs@u$DzZ}b<}I$stEaH>ki>`6sy6JZx7bz7d4aClCXZzN+*I}6MvFYQN>x8w zpCpglLPm$gJerDuJoZUUV=4xu9FmxMsTh#bBQbZTVn9mPQeq}0V>D8VjU0)5aZE2# zeow14y`A`H*y=>94bbUHfGnKm zQRaY@`E6R6Emj%pWQFzK$QzHmzXc6eNgpSY8|k3YPJb*tJ$exBJC~=f zZ<#&bAzKFWCjP`7?^1cPG=cMiKOv=#=niL{-x}S2d}gus@MV^E*B4zA;Ut!43*;G7 z!ee6P6v1O1uIkb%=&>t^yo~=fUAR{$0zSl4vv{2?;v~Pj`+OfXxoB(2H^3Y0)$rav zDyiW;B%1e|cL^2XCQs{d#8FG+3~^D-F2R$x4CP~1%T?A_0be{U674Ro8CZR*CF4#b zE+u&h${v>uU?iLS^LT-YHFZ!_opQg#p#t4*nEwW`h6n1_@Fl`CtD}M>XrvUxF#v& zcK7?=<-6ewhZjeGdzJ z<=Mq;>%k#spsajcrTM`QjT(BcPD2w-_to>m<#(d`x&AFyKjqi-FR=Dy6e)oXfXzhB zL#kPlni}Xm5mtrQ*XY#fww;2M@GVt^?+$;Wm0-<~P+`Jsl4w^u?`6E3K~eeQ#m55m zFQ#P)BO7fWIznfEV9(6NW=U3;(g@Yxp4hxrKC?AAV^a-=yLIb9b*xC|OKLA$+>Mcr=(bQ0#*+SC+tr%|)uz1|g1v87>S#otj6!oa;N!kH2g#e`{; z_>}RkaB*_xZTKO%>Gg%9eg#KCtx`h8#QIBi}xrh%d~k<|f=dnY`Q(U+!kFi&CPt zLu|;`qh1WDAHSVJc()FJpKx?%QM>;TK%oT7cSJ^$7Ep6O%y1apRL-NtYm?PKO7$Tl zJ5H0!l5tUqQ*kba$u@Uk4)1Sz*p$bbS_QF2_?GDA8bPwZAS<+E86|BaaI>=F-7f>%; z3~dMZFlXcLx1@u^GrcQB`Da#ah`WEUV_e=9tpr-~_|x7b?^H-=#O^vz><98?zA|Dv z?(vuF@OBKP(2m>$ZPCNSB&)&$8H7vssL#K{Lu}lSedYZOx>Nw(3TA@nQWl zIIyJ0N&X&VHl40!Lbs5T*t|*q-N;|gX*UGanR*TexKbGM4rm%e7Io8NJjtsoZxH^t zM_tTs{0XTRY__|!TcazCkv1mpy7@#*_Pl6e(k`)0Duh^P!(hBVU47~vb^$$SUc<$P z7zWj)r!z=$RlDCSQoA_TVQnh>y?Vl~z3@%hG~RtTo7)D^2Zommc9u4rEo0H_J~jHe zZ=Np|DT6h{J>cf(=XnpkW%~ETE7p(jZ>T#R(ld{OOdg2pI)&klmG6z!?g>@rB{pkh z_kT~wRUZ}H2MO?66!vL$+CTQC(!@s0*h&x7-=Ir9Gxp6np17{H@J&iLm%b63y0s@?nN6t0&NL`O5>sm=&XUqscT+U^<$7P@MV z==wOL7|d-ZkK|Xy#V3-;+btG}7!!4}v(H?7F_~OXk7Tks`jmgn&M-<^^ftPeF_$JgAAuMddIsLq7>v)z1D}FaXE-aWT#-wSP2}s!GV0~0pRt-B zbqez!fb!3Ij~)(j$>0(r0*)EIn>9+!y_NBWLqh7?J#I&}$6|&!&9CRv)Kh)?ezDb@ zm2fi~WrACz6jC$D!FoeXi1*0d92Vq3MOo_ZjU0#Umd2M|FO*UYqyj=+HCZhZja~;b zQh{Tk0R2!1Y_C;Vru(6C5wH@f0`d`ZCt^-%p-iF!zoPHZ-tNc)ObDyG@>!N5l^OzX%CV?H+ zVzX77MkD96XG+B>p7z?WEkvZVKjD3+Se3yZPc;H`p>rR!ZFLi)VoXAd?xSG&UJLe^ zQx(x6dfcutA*3KAimAVC)Mu9N<(UC7>RSZ4@j8+wG1o7sw019=)>$$R`GwXvoeG{a|8E-d8^LWY5$8pyaXTJ25i>AGk_k>sC~C^CB+XYx2# zI<2IP2mO+;T-NFBof${|Q2&9mdAXA@YF_T(Z}r6%Mcm!ql))!b*z)nT#x)34iX>_= z=*F+nS^``8uM-t8mI+WH0ZQbQif>XiX-6i~4oB`e(PJ6mis&&;tW&4ymT;g~AQ`{7R(JRE-$;h+PO(-~Z!<;X<$GdHc>q}%U!Kno zrv~hyD86s5+aUfh2@$;!|s(rp5~@2$=Zb- z_a37|axY5euF<)DBuI9H4UN#Zv0pOXW`P(*)J$v^kd#OBkeqf6pwLJ41@=_?MVY1? z8BlfRzeHsoK7FIJxoInC>pTa<;uGEaIF%2`yAz4TG3t62l|_DU!#$@s99Pd}9UAo% zwR)G_|37-NtofCmEY0%6WQhe+^UP$YDvOAAo9F9%3<3A*IaD@EmPhZBYpwFrp4a8a z$`9qopR|1ELC)HOY9C~5Q`ynO|Axx;OG0L}+Z!33BxFt6Lde<1%Ev(3WkdA1R%l^4 z%UCOM10+ty#`6t5Hu56x8Q#XX&Vo(c_F>Otf;8efns-&)a!|dY;^%;|o15c-ZP2;K~Zb!(HqIkdK9I>A*BON2d zcGuq-h3K|}(xkWX6zNtIl%0tGfFlhi5@ef*WyEgz@{R7q=GmmF8DGeHql1rp?iQvo zl0$>fWCmHWqsX8=E}Bi8hx15=-2W}zjXBE=W|Nc?3x3YSelJ6+>lvXJISI;=vj8LX z#t`+DjClWnKbobxVY)iol%p(-j_RSI*fvbH6KeL=(xvQJ(;U9!Mtv0I6}}m(-5ZMXI`iLA!mg`11DlE!1NxHne5J54^-T}gzUL-=oS zg5!G?)6)_0H!{F1-(7;mTy*SHJi&iUhB|}lf}cy2UL(ba7-bGi5=#DAfl*8w61dLKT_@YFAI zyS_-p zLG{efQdr-~&FXZlgG)J9`7gO}U33OGkKAc&6bM{41jl9y1Ze_-?Bj;oc(bOKIo4Ug zO;0S9)fdUtbC=Zd@>TRAsFao>vn`hB>>6(Lkl1yJk^4RJ{7CZ9(?@70q#nOQ*o3cZ zpiwM|b#`J6i9lMvO*2(*;~}h`Y!bK`89x=jm-y&5Sp;Fsa*L~eo2E!5r3N@0MR9>(Rp2~NImT|QKXk} zyh^5H%&L8jRPbL?K~VkaS27^HdEOe}Xu0VjDxunSYPr5lg1^pA5%Gg+8#0wG{J@)Q@=a{crzT^Uv{XV%aD$`}yh&Ti6qwrvlS6$}fpP(vFKu;B+v24* zS$CnEGOfM5ya{y+pKL6=4P$h?)MN>$kKToZttD&p6hEXTI@T+l2CC9}xB-3+UpB=L z#D(VX;+08-=b+artJG*D-72;EG69{(Q*o-h(WxJBh1XsZg*7$)h!Hjl9-)I@FVLto zwb+@}$>A5<+g8EiI77-KAN2?#ZnW~f zQl7Wrbxkx{7WFo6mybHU;9t(*%KIH!X10u`x!q*xCI86^MAL2l9;b0|6|Rc3pl~IF zseT1%YufqQ9oC$_!k*J|!$&rOcm719#$uNuas}1Do{}idE>Amn;>1m{%TIX!P)j@B z#t{@Uvc6BJOOuU_)QwrwS4;CUeY1@M$&@FVf@(Yn0o`p{=yrDcwD8``=@T^#^6nSg ziQ?>D-oEL_QYhO3_OGBOsK)dHJ40YP8E-F50*msaTSjrsgT1qImiTYUTpWXSk7nK7Y&8qEzY(TxS$w2r1Qv2x2r;2Q0BmHM#6MuQ*6C$SJ1K`rZ_X_ zFZ-%}0gb5|3MAR`(zQaE9X4lHKe|c!Q(UFKrvq&0Wpx~=hdc38!Ga#{T=A!JG7P#T zL4;dx#pV&)O!`zijo|`G-m&Mw~Vp`)O8#tiqPL|r9OK~?o%x|Oyj z>729kJcR3LcY(Lj15!2NP5xK}W(aSu5FYZPxAAu(-OrV&^S4XwPVAdTCp1sCP-Zlf zENY5OR1{7X55l9pqLlb4lMOE=Ye|Ndwi>9Wx|8}SP_Fu1gefqCb{ikXA&$sSB<6-xI zHL6m^C`-o7=TvV`kreSIpz5@_L{@a$Scv45NWfYdJlIpZnR=PVI*KMc>riVc$nEN# z?rLi>wlwexDmFHeQEj|fD#mbkn7YiWShl;jl_79q)5c=F#@Z@dQYD%t;5$*LtQE zYUJpkz0qU7+RQCp=%CAE{x13fVrC|BsN>8X-tryjwfA@P?JdXs=$;YpKja?qc3qCq zO}j=hoZQ$;7ZX#tJB8jQYs69SibYhla>TJnK5R0vSwOQVI_O6%$H{M{de0ijt{c^* zFe|af+!H`^`Vr(M!iy^RP^!XRornKn;k+Www+?~xj}_XfMb^${)2Z*s`mx)*@JES6 z83hHx+P!rT8#!$3WxI2Ip3rNdx_YV>Bs+6Jir!%CUXR@Uu<)gyz!!|Mc5 zq{_`qEBDvOfDirn&K#p2IFid%4|gR6afhoQV_TmJ8|anppizrcU&EB>y!~HtTJ}Pb z%V8J@`JxZL3JDyFNU1@0tYx4%urw6XS?8g@B@$No=UG=$nVzsSi3X-YyhR4o_nr_T zd6==5rA_L6^9rd~oYGrIM)%l70?M#+=Gi&d_sKaX3BfoxqExj+XXrfz%}Z5vfnC*H zc%^==>|ZXMd^}Noj$Pqu zT_J4K@_=Q8C95l$_47(=nZ7JZOx@M}wUF~1)Sjf{rydoc^Q@5^4gi zeE^l8OqjVr61=$gDd*@c@;5)1^}^)JO+yu@cAXAC@>idA!8&(%KS7 z#`j9_$a(UA&XY%frPz$Gl>4h>cC9S@Nr~ghH6@P6o-T2``^^8|m#8%oT}mz$0b6)^oL4 z<_@yX+NVf|EY}e7NXhUIndkTkOw7+xFFm4X$c&ju3wPW8t6pZEiFTB0sJ?VB_&Plc zQvkUyi+7gNL&@WSECd`($!v$=NeHd_xX*!g29DmbznZ>7UJXi5$6vjE(k=Gzdggch zVMEr3_M6AbY>zEntN*U!ue#`SS?y17sX+aeVxnW4`CL7ai$R71BMN!VZePzqm~_X}Ak;tM8x*u7;`k z)b4*GzOWt1Lfdk!ZEt2y%H^Kzsq&65m!3gpNF6;ZS>Vau0+ByS4S(S*gNF#nc48q@ z@F#{~({GZEIs&qoe$ApdYb7b?1XN)^rv_u98n2_pSfW#MEu~J$A5cS*36ej$(1IeM z&P_&3{(!oT{E3<=>J=;sxkh6(K+_okE!GEB?6c!M15ijW^g`W>d!aG#1F>q~lJOS= zM?rNi=RCkH3)xH=iT@~}{X8_64qq%h04 zq5e|A=v%Fwb+Xnhr5-nh>gG5iS=@jTAT@1D=|hyJrgpyp5P*uY-4u2HCjy(N%|Fdq zUw5k`QV>+eJ`HYrf9dy3U3}D&1jACJ6xC5dbqLjr*|d^~l$C&xlMiybls(TMR#~g< zSUQ4v64}%l7upN1wqWZom0I;Dr@M>?m;R$iUE%Y2TnDEqVtl$9gpZBk3!v09z4O^@ zCpw`2$i?Qp*UQB|Tb|-#_IyZe7LAg+j}5d;`yiWDkPy?F+4{QObQOH>QpYi8BR*;T zm!ubub!(aJctO0bp4*|dJ!;;WjNM)gJYv&5?T(EA?uGC>iq-+S`WWl=Q+Rn0!B(-%}<5P*NhC*@TpHm;INy5cZyc@0_{Um=&L zP_F}me`>_2cQ8*}&C1V^ znp1tTaT{WRjb`y$hSSTVn#mFMFrrB~to-#0p20i#;@T`ny~8nYKy@N9cW7JjGY(aI zk&L7#ncKQgCDc%OgvVZ1s>eAWA)N*;ucvgCchwGd!Bxyja}1s={5sPDoryF1$X{>o zYtkz1%i}1XrDHu$(M<36RA2KH9d!c2EO^_BTkSPV=l3iv&1xRAzHQ9gPLOk2;{Ks( zcD4Y1!qSw6@1@1-?JiMX_;s{yE$*GFLMszBTUB?dzVt|^Zj{frg-dkDD^{8Bv^Wqy z7axDIFr(6Du$p%sv<3iutnI(}S{l`I$@7|! zFOgOzWpgwqj2U{KaXV6q9uIl^6&$whm$y#NXCHBD(mw0B`xx z5aSUyM-;5{N4mDMSc;Zt$Y2#nN;3$tw*z`XCoVMblbbdc%zfrTzCAlf8 z*ZqSf?njgm+}ijQG~yK%@v3n&Ots3KnQiX)YWFI)1EGM*Ux%`A%Lw>~2h=CV7_*WF-^!AXYT7kf__f+u4FSGJ6TRNxL5+9l8Z(%^+p zEcuO8$qY(6Cdom$O3SADk3A5O|otmvTX)zO{t?CYF2T&}5XFLfXyl0U>b!RX|pvF%U*_Z#wLQHU?8r<*aqtOV-Y4I&13U`jsqDV&*4_-^d*HeN7$;t?d!4WYsUsLGCM} zlKO?rG8e#l8?WTEjYZw8*EmjbtJG7E(YLIr!s=_Y#rvD6ZbG)RN|ot~b2<-zKnJTl3e@PQS3fTlBBK0hIt==nhB6}_KAd9rN*Pu?-V&xFsl|a@t_BQj@Dt7AEwOY zM5M>$K$Go=cBSL1UwEz~a@#0bZ0oAPffFwkFKEtldXAvL(>2O0VSYz$h<3PRCD}G8 zV&+w)zH`jVa-L-IM9y083_ld@@Kljc&CqFXnhPi@-M!K*?F!vBG-DGma|SPDiddQ8(VrF>XR8N4*9&i!ydbZW8(wXh zOX{{wwZhuly85-umdp_kkLg~7SVolr{QD$XYhQdK=>i#-S@wnwwE|Q;J=ZtlsKCC@8|p{bB_7ObYnXpxAE8@W-+)r zj9Ck(8=w9_3$X3~kGHoEjHaOA=v~)aAROYD=1pT zZM07jb^+yUakC*em&H64Ev;y2t1WG*QV|5f7?fu5tD?0Qg(|kF6GJss#GvTDzcX`p zvq9QE?;r1rZtmQ<^LggXnKNh3oD-9|I1u`x?9)ilbPj&!$~@{K&W%E@t>wJrsk3;Y zpH|s5i49SKw?EG+8=Z{R5gsR5*W|MOv3jY2aJ`{@JEVw7`uvE^Wo*X~t1OVv_1tJ( zl3Cat`m^*3sT@v1%tabZE)epP;Uu`7RS}gME9$biX~VyXc{~UT7A@?`-2dx^=YHEe z&osB)uy0i9DX#F$?Q`R1=8=o?Z#=EVsby$OcLq1z-qy9u!5Wmxa+oKJ2f`=xs|f_u z(@SN{Py-35>yU)Y1*R9+JS60>;a?~u)F_)#mVMJdJhBxlqC&M>2gU8PdRYg(5`0z% zUzgyMI=D-MQ(13n$yhEg*S;-SJ%q|nWxsku)|X557ugfP@1&jc0rP#uZn6n=e?ELh ztT{m2U6B)IuWlwXhs%;c{-LTgACkD$OPIabrL=&2i6yzQc6a0>yM8+9uBT!)%7=^e ziMw4ti8vGWemZJOChE`WC@~~pQZ<La5Pmf$BkI9h_0 zm_bTyase(i7$J601>X~qK#{J5eNYyY3Vy^6+-_Lp#8!78?)?Hn*tU)_zwk_HRNWT@W2&F8 zE{IH{TN5rEPl7QYOD~p9Coeki1-rFcu8RkDKNGQC%#c7;mHN$MzRww~w)+JC7hC}4 z=#XXS5C$WAVdpqJ*dC95A|{NC$)Y!5E&{2`LIn>)0LXVrf0PJ3OwiTt zVbYAXV-J%mI^XR|=Xj!fj`O4Q`v9Pylf#twQups7jl_!rpAVG{DY12>f$)u?ebVB; zf;hUxe;UD#JeEsU@fO>bD!H45(8hOPOM|<$l-+Z;kDNL4rM0w=tD)4ZN`WNXmaL|q z6v};s;^(J}{~^W0{KU2j7-;R^(P?ZGTSYbM;jS8M@}KTWH5}5c5kvmKJHE(IUe;c8Xv58 zs;#H2kw?_KJcDYFyy;e}T?Fm20m+#3L2yTJJO;pO#aaLz_ZdZ1at?DmpndtNcihgn zzj2u!n50f8IUV#&Z0KatL}t_uPFMr`cdO1o2avAXCF2~E?Wqj~ zbVl9Mi>}2a$W4XXeEi2HWvR)l(p!I^Y3*-ZSil~v9}>?oI}6F2e&6z0|U@&szR4Y7@s0x2H%dD#$G5j3|?jhd&w z!NhxN^PSC(eXo>icVL<6DtxYbN~^R3_LnJN%Mj+|s(0^_F)nD0Jwb^$sSv7NqsE_+ znOGCQpoC*htV`ts6Dyy602G$>d_$o?{bMMZ9h0B~^(&-16-9$Y&`?p3BaigwfGXu9 zbTPVBdgKa^u2GMnjq!izgg2`bg}M`kc5DE(CjGLb;5wi(j|1|snHl4}cC1L?G2dec zya{Z4vGGJK80*W3z}409jWdw_1W%V3dNgNnBK9T8h?3Mi4x2}(JW?BGkR=f_ zB*-%f1R(-d!Ru<&$N2)wYlKDrnB`{Jp=24XCD&&oYVLT){<(j@J$k+E`D#AwVzDky zOnuLQFq}gzT^OW(@vcb0kXA(c+GQQq!q~c0Sw}^2M9tositJa_TnT`~iEfqlxx%%! zZcbu@Ea3s}NBLh5&HBaFu3$iI(f6s!j+^Ua!oh z)@qLOnLu(Xz@2HAS!=DyN80=0+f!P-+&nrNu89Q_F4MmAdP`D!8H2uCVnU-w$LS9oJF;?Ploy*9+h z6j5B(v2e4g$kYwmkDHDSZP7NDRVy`Tpz1iAdw%yyRo8`@+F8}TcpQ~8xgDIzjYzv2 z?WGF75YQDFcBlPTXD}!aiYnv4PBF9+*ahqkRd@u9?hMi^^)6RFSgzZIeW+6RiZVQe z9n**2wh0;qLaWGRN=^8mK#AwdQw1Lk_5duvbgO-71WpK&H()H|HuIR ze>_mwQLgY*TQg3k$Uth=fQ0|y(2<{Ajc&90$0=E5CwmM3bJU0~(G_%!=+dqVE|v**TBG+!CMDA`+h zN&FYAXf5Ej_3Fhi!O5q-)^k85j z*v(*f*orMDGS)eJZb7I9IE6Md2B8*EDzmF>jmgsKc2LZ4Dy#t~W(&L^^qpaWUU%jv zixGq3>V+Q}3lm&50z~13?$*yE>Mox4PJ?;OJRp6w=2)fzuy1lf%el2?(rPY9C;A2# zbgLwq0GkFEBwRmb8ZJmDKZ*+)MPkDRO(Cfr>3}RwBE*s$;9Ir?r|y`Jyyu6hR0U~^b&}cp zp++6*w(WqIK@-dLvWwOC7IBD z4s_eM{Ob<-!TzI9jwU3@-dn(;w(SSmcQk-SY2r>2xs^Ld@BGt;Vi2OxS`z7*?4+pb zmO|e+Z-2^{r)Ru*do0;owpGqfM^>e$4+?bBPA2FlTlH~fGO0hXbjv{Fh7G zncgQEwgg-c-+UDuMvWEQ#vrI%&7Q!l?T{hy#sA166I;+pNH(AX$ew9H+UuE{a6o-h zcnuK6j_EC3%+G#+BYUmhC$KrKQIk&;B-12l%D>2!#q~HOsFdi~h+e+BQPgP1blDi4 zE(lHkrD^^N8q8YnPqw(d3w6OqGz*{$PRXsPtb#M5;rHbOJIS8mDcyIH_uOe9)Z|q0 zN=i7@G=#cC^LtL(0w?V+yQS5l&{;yx(olI8bk?9j#jH}(O}VjmaaPZQGHnX4kX0Fx z;BKef@w!~CT}C$r;OQ%JnW8fQ|G2pe;B#hafSdATEqSdm89|JI)c#dE<>}f6CVP(p zbPf`&eXY!O(hFs-Tiz&hHS?Rhv&^+KS>|%}{QvWx`~R!TdSnXD$%Kv-@N_$Wu&3p5 z$fAXY)xlOjCXkm2KBlR-Z_@-I3a9uKs4CVFPuxQbrf$UU_UgZ(?h01@0 zqPTut?~X0$a5eZ-;hQt52%H(3Vv-Cy1fMi=UdQ4KV##&d{*v80P@89a{wVBgYS#4X z)MPn4PAu_2=<RPs}Azy7_ zYF@xs{-S;33~>tc6cW>b+HpPXLt5rNu?(Yq*Q1?Pft*_snh%qY+D6i@Wd>BT80V%fRg&C*~(_H`b6t|!(e)~kCI_riMhvp5=( z2&`8hJ`%pPvB#)hk@MK3hA(Iw>mF6%j+`1h{B`*B#<4v{RrH7)7dxB^=QWPa8C8)J z_F^b+r<+nScb6smm2SxV^Lsy!HV6!g5HI-bsECtect1hv(OtR4q>mk##1V~p{8Lt! z-7Ho*~G@v^6%54 z0smfW+TOs>J*q$_5{2|jnoz2TZ#j;oY8g5d4u1_^mK@DO^xbJA!sd z>^ZRiFMt4wn;ZMOukUV=kJqSAxX&fMzIuyC1ZmvOXnMlLjG*VdzWXEqh=@&nb9Qiv z0FAM$m$8G#MM@0=9ZAo4!#$@%fYu8Ia{|`gj;Vgtn`f|$aUIy0Q|=4g-C+`2USO{zkkcwqLkky z<7F9Yd!GT4G7vAQTlBzt@P3u_Lxkm^#aAa5Zp1#CFTRdYjhdyAs1qdpLd_tonfRJ& z%fH{6tkhU8xI_6zc`)Wq7dsi_kk3wVyuyT}*oMaD@Z}vEu zQ&kPlX>?02h{hRo02<%37;lexbNbk$A8cZc!tvGepI+qx&gH`mUsqEdx<=ZJj{nj_ zLhuSQ=e122Fi3~?mATI1x#u18l<=9vrAeO9i^-yI^hr%(q8oe7y(+-v!-M`cY!8dE zUCL=h_yY8e+`;Qo;SrwH@Db|!;F*~vl_bGFL~bmZPs-xmvpLg6j9;6dDCLmk67@6g z>xi-x_or(-R_{daj}ji-7`svMMM>>OYnJB*%X>Y<5p9gz2khP;CkeVyG>xBLInT1o zLb9Kv{E;vn!EFwh>7e``lzrSm0bA~DFg zC3ubmH|z(c5@oaWHQY;xv3tXGn@hLs?nXumeJfUwL|?!)s?*1=s;5(xKi_@>7xnhr z*9EH7zV#F++r->Kt%%JuzZT4SPFJ==zV!}>lC#}W6SVt7qv=~OMkMD&IZwqaJTBqI zQPwUx08xb!=Db}zt#IMC^mSl5el$6d^<(J)Idsf65m_UKNaLdgv4MSjunrVi@%?(& zKER3}(1C$gyh8^DTXAIaBpzbL_v*lKE52I?Mp$upH9nPC@lG8mx8etNV4M}-r32Sk z@qIcFu;MT2fY*xW=}L30I2s+PgnqT+BB~WWaoT7renh9tx8fe1Kwho5K33F;YmX0D z4-Vl|GLA-smiZ*(g_#h0S0~P#PO@fQvXN!!_|!%zLk-|%SgJLCJuhys-+FoyAxx{p z13bIzsiZbao75jkZgN_6Uri;(TKUy<`LK=;R{2+}ncTK+zBTEqHO4H>JjAlLZn1g4 zRo+eRC*AgPo!^R=P)Z^`fWLu+ezC+RCYRX8-slh|U)_U(a^bI5+Y7&1lZfvSNNgNu za>&Da`WkuJ;8y+9dBT+reN1iKN%GW2$&}hSkUy!7Qkk0baeCI*m?DSnp#i#7mAoNM z4_i#rhNc^bzwh)nUtHuFwual#J<0N?_tHvN!-E3RHnFc{C!`|#KB?47jF7+g4VRdN zU>>p=4Qf-s$gtOA>on#Ee_A2}T`5x?3N&}RQj~eywfwV0ut$kM&x;8pr0^_X&+@=+PdvXM17GPPYwV5>_`S>?@5O2F5p$qwPmhuqIZe z))0H6rY&Q0r4W!r=u<xydv-cDN5=}~B31@Rr>*o5O$Xb!w_{?; zbWEAIP18Rq4~-y6lh^i!Nn@4ih_XEUL7{f&?0(CR3x#MFuF_5jm1ys0`&Ty)miGy3 zEIrB0Tz6)imCzGdUCZ3jEM>UFep)Cc{BmDVLkL1@qfiR9t=+-;a87G)cehdk%9qX` z*(rS9uLMs1hwTY#|3jU7zU$P9J0Q}_A&?k6&DcBjeCCJ}x;5hw-3(!qy_^XhKYMrk z*}^KopC*u~aSlFA&E5x!kH-mZft6zoZ%CDSj%w{q>6#;rMw?ArULA0YLElvP<<C?(# zYS|O|zT|kEu+HGOj^DHVcJup?-w}TO+cNra$Ye$OQ>!@%qt$ai!eQYFTf(Qa;3xeZ zvU^MVMNbGhufO94=hm6<9wtYfupgVEq*Kr10Vk*r$mALZcONk7p|7oJQ>X*XwY78! z!tZ77cg0?{v0vB+J4<)T(bujQ z0mRW;hG)K+AZyp~^K{{n-+pt~AXD}my~fPhQPA$%JKQVeb_@69&kYewxqZbP0vulqJ+Q=JUq z=WX40A_iJnM+b9nhX3Gh{94(%m^>Sxn8?O6yO+$qXlBzN{#oW4%x@aMoCD@5;R%Gn zXVF(*dW9pxTYhX2UbI;&sh~`KPbR^n-(<~U`+hmCOVrCjUbaj{?>~y93cG#)IGwB? z$Y1$~_rm$?%^gjT)IBf(1OUFhyo1}AL}ioHdpf(QkfD&5|bF`MaQeeQ)M(T zQ8m|!%t8PLao6>!)u>Tz3GhceLaBjoGdt{hnH>Rj+P4Hwx%vv5DNy_&Bqn%e@={Qt zoB~piFMcysa>B(dvHZ&NBNysChplI4D$+ACS#FWMX7X2K&2fY@Z=9$4y2RuTe(E}? z6SuO&&2(u#_i@;-vu|322i=qG6#@tS=_-zct}2op6zBGMzD&8f;?K1uU!ClWLa&Q5 z*lk?uN>A+@Pta}WDvvN6u|*wHoCa%RLWk3S?YS0U3z!jd#fp1cIy|QjO4%leDiOf_ z(Wefy!*|*D50UmiYp)p2^PKJUF?<0I1tLe7{;3mp;Ee2V)AoG=CEW-6G}Cu+&-sk~ z+}^PjQcI88i=;f+?~8=i8-IR&|D}gTyt||qV%oy?o?D=kE_?g-eV#%5=`k{Ao|Dz% zbS1r;&eC^oVzkhAF5Cm%k+9Ks&Z!k$E^jg>oVOZv@)S^g4mTzLB!RN>q^oH%bb36x)uR)-X;#@d+dnX9xofyN$4)*z18Spd zkL@T&>62oF$4JHm;5vjKWdV{-lPp19k7|AIfPpdDO}55lua3VL8fL{rK&8eKv?mO< z(N>dp>s}F43cT$O%XSgo+`yk?>KPOfrq2_1VOdz9J%7#dq!q zjOH<@IiD=wZ<+of`n5wM;yQiqS&8}(&`4HH9n56KRlTe?E_MG_nW#tyrafmS$6x+s z7J`=WmEr~E{VzZVJ$aZf_VxjNM!O^5KD518xU0P3PI+u%U8*9hJhF2u8a(z8J?m;}YI z%teyKbq73o@5=cix>chdCt?>#4gI7B=$SYE+WfqwU+8J>wO>Fvw6wjqndq+;|7lLI z?;n=R?3hr90X^y8*>+5*WbvPTWpCIoY=74?h(A3BL2UZY>9zFZyz@|650!jc#{Bwx zv!-)aOvXs_kQt<+ze^8@XuM0lBA#F3vt<28_8u4hU#5RNqyxw^M8F_&7k`u~39yj2 zi0r}k4-Q&!CNNv$=%Ud8Xh@Cq;C$XKnXRetsY(CCEoI|f%`&7(|Js2o$MaZM#KV42 zN*~64p{BN=S}j9X2Ex&kd3UA;ARj4nCCfKHJnLRev)?MAkc6g5Xu5=|B{W4sS4k)! zp(`acPC}PTs6;}8B-C&vp|f;cIiZtv=nsUBi>3O`=_9YS&sBlZyMDgqw@dpsF4V0{ z#^p^u+Mm|co)T2=Xc+{HTZFB4&pF5237xz=vAopMLCWa0@O3+#-(M%0acfYm9yVFU zR^PHXk#w_!Zrc93WO;n=q`PR(4{Fb?R-=&@f*efCo1Jen=JKt|d6_CN<<8516}(*T zygc#0yj5E<9eT=uB4`Kvv-T5Uf7W=8EY@s+`)VIB`5#U`M0~m=Z|a_tsh<-$3yqXD9c#1pK4lV8X__A=Y17L#BJSPIwFlM)*bOJ{|;f@ z8GrP@v^Vl^K=|YL|04+fQHVj*RJZV7x}&h$hjxbqN&3)W2W%G{Gx3M0B{)CvtCOF-Ra(um3f|Lla&p3R!! zo?M3;c|#Tq{-SR@Y>!MtYg#n^+T!m*PVMl6dlCK_`ZZ!$YUCA*hc-^LInT2_o6)eX zQm0A>CmOo7r4j@-lfGd}Zt)ch|7uTTRjn(dz~bEtA9tvNRE)nBcXr*8IENrlxga(U zjo#P8-ksFgFOB_t&z3yCowg_ToCm(k|7t8b#F`v!0-ZgNr)Cv$zhpn{m>dNhcJAX9 zw4)U+x%ktC@8~3UNs&lL(IlzOPG^$2D@gZNESVeoy--be#lk;6Sm*b6WhZ?0C0O&!~oXa|z8(U0$s|(Yn4~NToE4D~V3Vx3c5i zY5K{jb?gUGccdN-@uy`@I_0U`{tOZ7Ffw*45~YySV+%X;+3BUiodx{zwa6j=e$8^U zUu6b7;aQUKEXAC^7KM(S;+Z?dUKADjgd?20$Rr`x;fW)kouXMavQMjLEeH*z=KX@64vcLuIam zpCKFMw~yZ&{9fYsEWgeCzUJp8%?bSae2%^x&!6%83%_;z{?6}XenXChb0vzof;O_LGt=vFrc^1>{7rRMc6WGeq(y zbwPqO!niwIUh0Q!4F=3Xq*>&Sv-=0rC#!fD%%qhp(q56*w5}3aQ@!k91FAP#KAe$D zZmkD?GK7nlSo2<~EnK6$pV%U)boM?;yQ1$yuQh+T`zmgOam@s-Q-2AT>nn4VPcoym-;zC{f^X*6@oPq zoLit)>1Uy8(gn%7h!ETKWDNJ1q#$EH=!ZJ5aQ|wCPP;~@l}id}zq@HMY3+L9hfUN+ zuQ*X_Gf{g?6tZ8U)XTg%vXV6L-g?Zr4m+J5nPQSADz#|{QL1exd9^#A5nMf{ z5anXuJ%8)N-@0qh=Kf{?F4lL?O**0+`ak9ih?(!6GYI9Q-SL9RL%VbR4FO<+;A*|HD^ED#72KC7*8Au&GPZJ~W=v-g? z0A)L|uady-O!^NED}L~pD``w*%j?iyh{NmQvfndnZIKgpbTe0g|dcZ#zSKk&5u z2Ut4~6enlDY9pC<62Hsj|{W~XZgo1Gx^3h9DzI?Yl z{hUwVHJ|?6^{M<6kVq2Qo*YM4`!8Q3RM#03*E1!GtnyPjtx2aGiGA#jthN{JGvihh z%KJScsm#vY8kDw$7rbrVWm(HN-Ci-3-uy>Pz#Sxn7AND-7d%^+u5vO9e zqecU;9e3V_oPaQ0ysgrXsETpNr|=?%E#O-^S7($+)fupKH{6|0`j( z^@P7qJadj3w`gNKtoA#(?fEQ8svZ1SlPM^+V{kI(A@E5qEXj#XwfdTyFEm-y(@GH$ zafia*j)ym2-7F?TOrf3rsxVZyKYFzbi|}g(>C}#nM#iVg5p}Yef!xU}3aGyH1K@30 zNP{fx#RrIK_bC9Y?QNQ@KP8QWA37;eP=m@BrP~D^|QE1azVLF9cK&<2DY8H1kH6Go1gwC4Jxqk-{Ij1Oy zrEp=8> z{ZZO~xoVU9kEXm8oP7)IJNtycg|sK!KcKe$1F)<6Iz6uTn*~YbEX?*Fl&v2oCIOXh zNJQ(FiKX)6L7tP+vFyoP2`cl!ylqr|-wjbk?%S}ER~RK1?(gSwtvbcN%bBj*&Vh05)(0_U0`!1sam}{M9c^m>pJj-B@31_b+Hkz zHb5Ti2^awP*qzqo4p|(+Cx;F~kwkazK6C+qjgvk!90H&&kt&1gyIe-J@!&!A=;KY1 zvzUB+^QcrC?qVLykkmOQ^sd+63Mg(s@ z64D)di9D8e+omQwM}!!7F6Y`S)VS>u$%WTg?G#6Sq>yXSe6C-n&9LURttH8ri=mSk z&ViF1bCxg>@%GOV**pUo7iPd0|2wbtib*o`&-?1$qtC`;nB`xa@UKBbc@5H00Y%ck zP9Bzjz1r6#z*w&eR%k>W-9HkM*TeV7$gR&FxyV%G_GkrIrkfxC93s3zqy}aI%z2*f z*4Un%&N4W+sahQm@wY3QVvhTiv&RU<8l0>b#SJF6tF>aKt8FMf2(AAE13ENa_W6_@ z+9gqEN>osd8&5rRn_BDhdAikAS4lyIZJ+0owNui4&Yd*ftd9QPn$mhmz0l~GT zEPUC84+*^LPL*qU>KtGEaqfMJUH`jr-ew%~9S!i$NXn&imio3rOjcj`EG7Bs?mJNm z@cHVt66nT`jd>G3Z^_xdy77gimb;I!&dI)ISIGs_P0`&Km5cPXg~x^cVe!WNiN5=m z4KiQHU97(jkw*p%K6w8aXt4bBEKEr}R75XS^U(ULfZ}ora+B|ym)vjlz^T+4!tT7f89t4v$WLJL1$`p$7QCSif zRF5+Zns8#Ysx<*c(0T{!Sa6Kz#ZUu@#aL>+G*#P6J(D9$dxgBB#f+)cS6CR#yXjAC z$8d4;kc0W8)sk7fJ+$j%9<4FcbXf2-m#@2}9j|tMnVb32Azz;C`ZAR-jT62!a1mDI zd0+fX20$<%`W_fC3>_n3im?~O%}bO=pvu;w4&U*;V^=cjZx(^XxO3rtWtgD0GIE>5 z<#6;YH}~)_BX?DbIg_On?dUzr$Gggfu(J>0le$S1_$3=ewdWVol{~9nXVQ`E!+pfs z{fys&J3Pvz6L}lGqkNH5xe0Yb<2d)IYu%Clv6ddOWDhKn?H|_C-cw(WU{qIbZC%Wdz{dObrRXp!;+Z>nTxY z79|nCfUi195y+OSK8H!*+%+^>`f;lCLrCWFpMI4x{3e}A=ImuIRjZdSketWD@m-(D z!9m-}Faxm`)Uy#jzeBlZoMc^oA#ta>DSND@vn_YVY9o5-)DmqLl7o#6cz^%F22Ft4 zzn#nxYFw=X|F-T))SXzox<>sIH6G0?`0C_fhjmRaPBUax^T1u4l#bE9pNKIAi(`vh zT;Xqrwz1F&qW<;o+Mp=<{ivTDwKnF}$lO(R>59T*Yt*fr^$IoVwBJ$>khfaa6fNF} zE-X&~e!O$$_ znUPl-<(Z<#4DWE~A7yDy-ztqIxs_32(GM=;a9>CD1;uED@R097+ibnw2+`~0P0!!e zI*{Y5`?U_ZBd3KPrfjvIBXefVn=r+p{Y12F)ZcqY`i6?u^SVgC(#A)1pjYJl&?Ms3 ze90#m`oj*EAML+X?srg>IDB!kdBP`#Fr&qdc-gB($(NdpR&;J?n-p|}e6?eCD)N)tyh&jZ(`G4Ys` z@{e~*i@!lBAC+iBDR&2iQa+fDFof+4#*M29h6j@J*?#VqamAlYp-`H(M&ZC`2{xW> zS~y;}FgLVZ;`&RRU|P?Q^cJoCywF}jpF^8qwzc}(U4d5rhnxYn@jKvBZ(OWLSICp79oo|l z=o2u`CqmnXfXR`)_{37{VGO`%PF^^k_|n}zTQ3*R$9uCsw!7OWhX&J7=i}V$j~}|* zM}*3|K7J?rW1GAEw9urkkE6{;&i81X|8069JqV})y2Y9b$axkbSZmq=L*1gyEdugJ z|CbH*uM%qXw>Q*tc`_C58(s9FE9_`}N1L}xvWEIU%cp|qqBd9f1Y7$OH>z-pGYLho zKtdF0Q{gkBiw2I9TijP~F4EfM_5YMF9N1*AEZQtl%#~jQ+-NguyS&7I zDv%bB@|rU8(poQHKxx5FNC_CID=DEU5n7%cFie}`a-AOhciQzPGc-d`;hcII?you^>16PbPv*srq68pSx{+vbH^Ssku?MD%ENSTLCF#M<5N{vtjkjSjx~r zXOlUyldD#J&X%OzSQuHZ@;+qF!J*epU=Nb!U{0qHvZl0fi}PLqv^Ik8yF0)Ru(e*s z!QEC)IMzIZuM804BL+w$J-onD@}g;uFAjC@4n$kai=44YR5Y||>f}a}S3XeMEOWas zwF#CorGE4Wp(F>@)gS2f*3w!3J+SXxbWC6`lxRaS4X|&^L!588|-mdINCC3LPrg1kOKem(+vC_%zoq|aAOJ^L-itvqjBR|C6hx$mU~4#aXh)oy+9ZOx&~iyy zE=hyx2MB9ef5hw*a%Erq4Ny7SEOIu+>MKe|9#WiHxHCRxGYj|2?+G%>D{T@>hE5&Y z#q7Sv^~j`G@2UfuD^%9*tkqju6i|nLA_X`uX1lH4(@y{_U90!$yz13EU&l+uX2~87 zE}13U?o^jkQ^LQmYoQJx=hCvwuecS$@S0~ zfc?-Y>2GdZ9chrkZs5xX^JOnz$Sqe54aY2ZAAkL*H0$U571Hw)p0OQ8jyR%i_oo0M zvM;nx%Kw2W<$hg$UOLG}lKlIbai_-dZ}1W~OLX?ksLDjhu4~Rb5B`pyAkE1#6EJze zO(<-pb170!6Hq&wcCu3+^okMAI5XsI_%b*H^;^m~R52u)+O!jBaJks{>`KhftqJ#5 zQ>muCr#kmeDw+s6%e6~AG1XI~Q?Ztw9N!O;cFdG^Og_Sf;{-IDs_Y5-Q*#^a9>%~Z zwxOUs#%hv57-3|$$1a60*@G+KM>HJHw)AI7cg%I$}r`wccyR7 zdrYxK_ykIele!Pt!F4iZAMqE$p(Ra2*po$@WsPQPy{2iRmi%LrNA@EX9%Q50Ypr|~ zPa*$yxjo5QZtnzLMecmZezV$^OFL&ckyDBM_d~xJ?%)_J(5(_}hF^3ny&lr zlT=#vn~qSb-pyY{oc?ac;=AX|+<|V2fUR1M*Mzof^^(I51Soo=H$hY>t{fdcKU61e z4={0%wI4zL;r|DFd9Gu~uKX%pV1C;@9c-G#HT-;8VRf(UoeAy1n>~ny>}r3avWK<8 z!+a~=<%=I=9gU9cg(#GOuesFCd0PA(!uI{T?c00AJ{I#6?&2PppV;mZ3ltxV`H9q# z@R&yTs2;w!c>0T_z6xK|Sn3`%*6oY0(Gg;XqO`}Tv81?1N2J2JjiouG#^(6qi=_g? z5IGkct~M7No&a8%iw#zN9<59?%U{UUgiPBu$PRQ(q-f^E@A9m9QjO_v|@#2e^ zG}J(Qpv&qGCYxSaLo^6V5o^{}he0kJZm)FJj>&ALmhkrp2>NQ#Y4J?3mDu@`qG zR%P~MgU;;1?d@$gfDKKR@hksbW-g4}$5htag+#qf5;LjuN9q~7LLtKJNVMh8P-ItQc&|EQ7%wB05ptrKFB(^XRE+f1K{e2F&8 zUJddtFH5vWT)lk_ zsBK*layZWY@1rArnvO7?JB`kTRtYRhf8)%T5wxFG&z#KnXI9nbsMme8ty5PbE2^4A zDQu4ZNi@Jt=7?&EIcHx5cYePdZkTiSH~$9kCajWkc8{;_DoR7K&lgvSGlpSs_Mo&f zws=>M*&Nrtu8x~4SOeZ3w7-zkI<3O-2x;M*ZVTmYqM1Jhv0#~=lfB_l$8xaTHR`t= zx(Mf3?sk*X zE4uiI3zcUPG&=m=Btb2l6m$wb3aI?Ybt_scj<}OKas*SY{(vbvte1oQFp24_mD!}> z(YW)aKqG05Th;&C8M;M#HK}Wx3hG1`f5z9Z zz_|Cw$hzl?hu9$0YLZc{hMtreqf4ncnKPSKifHxlOBsHglRs^CB6Ik640&4T9yz8k zEct;vdxsc9oVh}p%_akP(zIF_jx@1#5V~6ZT~ocLZ%W%OwEi?s{jUbwU2Hdx0k#Z@ zi~}O9xM-tjbP~7$VPAZa;BCGtjGLsHunb_kIy9; zYf3WbSAxg!g%pY0W+kZnqEKCf%Kho7?Oz$|JjoYdCG(d1+&X2odQY1vWIO7sQ*Q|{ z*Ezsk_hL6-4wi!9RRvk{jseWyk@;v~o|4D_b0?&u_GDFw*aJ^m%)@H+0Afof;tZky zS{sZ$HczqGE+i)#?)HS`fZi_k4l4DamGk-?0s=!i0;<>Tnv8sNEWSEZ>IN=yq*$#! zI{v?m#RBM^GZxXsU!e}9r-+HUzr%6tr7-3cGY%5Mh|?!__4WwsZ8D_WRy-^!V@_G$g%I zt`$d(M%BrY2^;_K`Vs=31dX)&tiQnv1Htb+pFt_?7YEeyjWR~Z+ANMrT@41x9D`pocI@4zx;&|)Dq3m{rIn6Iif3BGKD_oOksrDe)28_8eo<0 z)%3S(%O48d1FB`wDbzlMRBat3&`aBGP3DLOWLga*Ph{K|P_eG{ENX=kM4KO#VGo}k zUA$6MNYb9PXa6o+L&IousWD0LR0Bv{Ov|2Hps6ln|430zJx59J%6EFw5+z*Bbw8jB zpCu-^Rco8G#w`>{YQxXa}G-Go=*47i#`)rkZLLaIr4LY}wOzh>W)%T>4+zOx8gzC>5P`{ump{&@B(aD?u zXyL%tL5EA!bV&i=-n1O4XW{Caq1 z(HmOyo9wf{&`$U$iLO|ejSHc{P&r6-K;~a&)SZ?+@aBJSS%~~?CA2KGiV%dU*Re{f z`ahJUy~-atB7HoU8IwjpcWwWWc%-MN0K++q84?O`-Ywmkr%^jSM>sEke>aWR3I;H1 z_6z3RJnTEu#bK<;5})vfP&P zU5vRgbFq_>sK7kpTdyLVtsw2sb=tgd+*c4gcwEsfEliY>YC-oBrMwz7cMa%;+ttpc zhedV6w``33t-FZ7iBkBXlYGlWI)L`mfuZH1{j`}!$oo6o3(U(6AtwIlXi~p^}i>bxX=5Fyn zlK6)t{-tj5cS(G`#P91Ce>3szcZ7~~i<}^lQ$q!4ad!1|ghW<`hIETOMgIedJTWP6FIpmIx!yxNOG<-8IdRIl751UEOfD33dpXk(0{#Gu+jY{H)( zV1R?_C0;ndzea!gnNB|dfgVm8L*pPW>sL~XIvGQZHEJmbA0U%lZkgG1+9l<#Vf@DP z`yRgq{O;xVJATjc+rzJeUrz?|RDLD=T<#t@o}RsW=XU+`_UYTN%Q%F&|036QqR&jF zVpq67m~~^)C4Cjo!_~oBk66}7{7kN4RD<8TgTmJDAUVzUZR*(mK7V)g>+o&z_a&?Y z{RmX|>re>>n2jzdU)<`uyGiman?zA;3Xc=k=eVCqf!_9h>U;Fo(%))5)#{J0==fkT z^`sBIGVQq=t{>XMBMlTYf8JnD%N<%hs(nCsn2exmxltN{GD7$JM%*7V z{`P{n-1Edf^w`gCSKfxw9`>^hRXN*L-u4d*8cN*_$H$%-PQ5M&#}9ZKMU#QxPS=g6 zWs(4yD^3XXN{qNTXlWnxYL14$G5wiN&W{}^;v#+_Eh#XUuO6lzIi!3O?#;jm>m%H8 zP{W?*;s?&BtO*AjCZyEUkL!gQ(XD7ub*M2?%QI^QkeI2(1BE-%PYoo}S|*XU{#zY1 zX9MbEJ$iC>hC)F66Q{_MNivz2x84^sVH zSzh~LiM7+dYB(n@c*xq$u}7Xb=_QB1(>dJGWLyo@-6)jZ`RCF}|9(Vzy*Ce_IIQjJ zH2OXn^#CLNEg;{nQvIn%WHVyk3WJ`ys)NU@ip`k=w5Rm6*0ovGw)u97vLpKf`WoWz zr)fOb&OYi|`JB2;+;whZcf=eDgm#ixt-W73@F&ICh+6%ktT_3xXV#Dy68|G7Pp-P# z$s_sart`bDkv}B)6U##64=DRg&F{BQl{&*`OX_i?#>ul(HAa#;Rb67L;-JW`m@0se zxnSS!Z6fw&O^{r)GqBS6EvKWN^uI@iz6sdmf` zVT`pSa}Nw9NO~Srb4H94qG)tHuM&Sd@7>m_J- zXz41t98KLZBz4E&K)A0ubE>o^ciMC6Jq>q4q>mjKECw(9%Jy>*+K~`rMMz9Ac(E6o z&SKsdx+j+$3l2r4z&z)=1HwBQ18dRiN&jvMCH?#4fzBL%DJC=;=;MEjb%QQ(ed
    It+E1y6XFu_GI{%JlGTKZs~R6 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%0DFt<=LnE~6T^@{t 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�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%0Dq&sk8>F66qUH{T5{M{dxg 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
    v`_)1_Q-v6x}_G~ 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 internal static Icon GetImageAsIcon(Bitmap bitmap) { - var icon = Icon.FromHandle(bitmap.GetHicon()); + Icon icon = Icon.FromHandle(bitmap.GetHicon()); return icon; } diff --git a/mRemoteNG/Security/Authentication/PasswordAuthenticator.cs b/mRemoteNG/Security/Authentication/PasswordAuthenticator.cs index 8c105cd7..be15b1fa 100644 --- a/mRemoteNG/Security/Authentication/PasswordAuthenticator.cs +++ b/mRemoteNG/Security/Authentication/PasswordAuthenticator.cs @@ -25,8 +25,8 @@ namespace mRemoteNG.Security.Authentication public bool Authenticate(SecureString password) { - var authenticated = false; - var attempts = 0; + bool authenticated = false; + int attempts = 0; while (!authenticated && attempts < MaxAttempts) { try @@ -37,7 +37,7 @@ namespace mRemoteNG.Security.Authentication } catch { - var providedPassword = _authenticationRequestor(); + Optional providedPassword = _authenticationRequestor(); if (!providedPassword.Any()) return false; diff --git a/mRemoteNG/Security/EncryptedSecureString.cs b/mRemoteNG/Security/EncryptedSecureString.cs index 1bf59ea9..f2350b6b 100644 --- a/mRemoteNG/Security/EncryptedSecureString.cs +++ b/mRemoteNG/Security/EncryptedSecureString.cs @@ -32,24 +32,24 @@ namespace mRemoteNG.Security public string GetClearTextValue() { - var encryptedText = _secureString.ConvertToUnsecureString(); - var clearText = _cryptographyProvider.Decrypt(encryptedText, MachineKey); + string encryptedText = _secureString.ConvertToUnsecureString(); + string clearText = _cryptographyProvider.Decrypt(encryptedText, MachineKey); return clearText; } public void SetValue(string value) { - var cipherText = _cryptographyProvider.Encrypt(value, MachineKey); + string cipherText = _cryptographyProvider.Encrypt(value, MachineKey); _secureString = cipherText.ConvertToSecureString(); } private static SecureString GenerateNewMachineKey(int keySize) { - var random = new SecureRandom(); + SecureRandom random = new(); random.SetSeed(random.GenerateSeed(128)); - var machineKeyString = ""; - for (var x = 0; x < keySize; x++) + string machineKeyString = ""; + for (int x = 0; x < keySize; x++) { machineKeyString += (char)random.Next(33, 126); } diff --git a/mRemoteNG/Security/Factories/CryptoProviderFactory.cs b/mRemoteNG/Security/Factories/CryptoProviderFactory.cs index 4dfd9bdb..8382969b 100644 --- a/mRemoteNG/Security/Factories/CryptoProviderFactory.cs +++ b/mRemoteNG/Security/Factories/CryptoProviderFactory.cs @@ -12,7 +12,7 @@ namespace mRemoteNG.Security.Factories public CryptoProviderFactory(BlockCipherEngines engine, BlockCipherModes mode) { - var cipherEngine = ChooseBlockCipherEngine(engine); + IBlockCipher cipherEngine = ChooseBlockCipherEngine(engine); _aeadBlockCipher = ChooseBlockCipherMode(mode, cipherEngine); } @@ -21,34 +21,26 @@ namespace mRemoteNG.Security.Factories return new AeadCryptographyProvider(_aeadBlockCipher); } - private IBlockCipher ChooseBlockCipherEngine(BlockCipherEngines engine) + private static IBlockCipher ChooseBlockCipherEngine(BlockCipherEngines engine) { - switch (engine) + return engine switch { - case BlockCipherEngines.AES: - return new AesEngine(); - case BlockCipherEngines.Twofish: - return new TwofishEngine(); - case BlockCipherEngines.Serpent: - return new SerpentEngine(); - default: - throw new ArgumentOutOfRangeException(nameof(engine), engine, null); - } + BlockCipherEngines.AES => new AesEngine(), + BlockCipherEngines.Twofish => new TwofishEngine(), + BlockCipherEngines.Serpent => new SerpentEngine(), + _ => throw new ArgumentOutOfRangeException(nameof(engine), engine, null), + }; } - private IAeadBlockCipher ChooseBlockCipherMode(BlockCipherModes mode, IBlockCipher blockCipher) + private static IAeadBlockCipher ChooseBlockCipherMode(BlockCipherModes mode, IBlockCipher blockCipher) { - switch (mode) + return mode switch { - case BlockCipherModes.GCM: - return new GcmBlockCipher(blockCipher); - case BlockCipherModes.CCM: - return new CcmBlockCipher(blockCipher); - case BlockCipherModes.EAX: - return new EaxBlockCipher(blockCipher); - default: - throw new ArgumentOutOfRangeException(nameof(mode), mode, null); - } + BlockCipherModes.GCM => new GcmBlockCipher(blockCipher), + BlockCipherModes.CCM => new CcmBlockCipher(blockCipher), + BlockCipherModes.EAX => new EaxBlockCipher(blockCipher), + _ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null), + }; } } } \ No newline at end of file diff --git a/mRemoteNG/Security/Factories/CryptoProviderFactoryFromSettings.cs b/mRemoteNG/Security/Factories/CryptoProviderFactoryFromSettings.cs index a291e878..4199a7fb 100644 --- a/mRemoteNG/Security/Factories/CryptoProviderFactoryFromSettings.cs +++ b/mRemoteNG/Security/Factories/CryptoProviderFactoryFromSettings.cs @@ -6,7 +6,7 @@ namespace mRemoteNG.Security.Factories { public ICryptographyProvider Build() { - var provider = + ICryptographyProvider provider = new CryptoProviderFactory(Properties.OptionsSecurityPage.Default.EncryptionEngine, Properties.OptionsSecurityPage.Default.EncryptionBlockCipherMode).Build(); provider.KeyDerivationIterations = Properties.OptionsSecurityPage.Default.EncryptionKeyDerivationIterations; return provider; diff --git a/mRemoteNG/Security/Factories/CryptoProviderFactoryFromXml.cs b/mRemoteNG/Security/Factories/CryptoProviderFactoryFromXml.cs index 2241627e..bb9b3e3b 100644 --- a/mRemoteNG/Security/Factories/CryptoProviderFactoryFromXml.cs +++ b/mRemoteNG/Security/Factories/CryptoProviderFactoryFromXml.cs @@ -23,13 +23,13 @@ namespace mRemoteNG.Security.Factories ICryptographyProvider cryptoProvider; try { - var engine = (BlockCipherEngines)Enum.Parse(typeof(BlockCipherEngines), + BlockCipherEngines engine = (BlockCipherEngines)Enum.Parse(typeof(BlockCipherEngines), _element?.Attribute("EncryptionEngine")?.Value ?? ""); - var mode = (BlockCipherModes)Enum.Parse(typeof(BlockCipherModes), + BlockCipherModes mode = (BlockCipherModes)Enum.Parse(typeof(BlockCipherModes), _element?.Attribute("BlockCipherMode")?.Value ?? ""); cryptoProvider = new CryptoProviderFactory(engine, mode).Build(); - var keyDerivationIterations = int.Parse(_element?.Attribute("KdfIterations")?.Value ?? ""); + int keyDerivationIterations = int.Parse(_element?.Attribute("KdfIterations")?.Value ?? ""); cryptoProvider.KeyDerivationIterations = keyDerivationIterations; } catch (Exception) diff --git a/mRemoteNG/Security/KeyDerivation/Pkcs5S2KeyGenerator.cs b/mRemoteNG/Security/KeyDerivation/Pkcs5S2KeyGenerator.cs index c34bfc3e..85ff6efb 100644 --- a/mRemoteNG/Security/KeyDerivation/Pkcs5S2KeyGenerator.cs +++ b/mRemoteNG/Security/KeyDerivation/Pkcs5S2KeyGenerator.cs @@ -23,13 +23,13 @@ namespace mRemoteNG.Security.KeyDerivation public byte[] DeriveKey(string password, byte[] salt) { - var passwordInBytes = PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()); + byte[] passwordInBytes = PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()); - var keyGenerator = new Pkcs5S2ParametersGenerator(); + Pkcs5S2ParametersGenerator keyGenerator = new(); keyGenerator.Init(passwordInBytes, salt, _iterations); - var keyParameter = (KeyParameter)keyGenerator.GenerateDerivedMacParameters(_keyBitSize); - var keyBytes = keyParameter.GetKey(); + KeyParameter keyParameter = (KeyParameter)keyGenerator.GenerateDerivedMacParameters(_keyBitSize); + byte[] keyBytes = keyParameter.GetKey(); return keyBytes; } } diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs index e1f76978..d7d8c98b 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesLowerCaseConstraint.cs @@ -22,7 +22,7 @@ namespace mRemoteNG.Security.PasswordCreation public bool Validate(SecureString password) { - var regex = new Regex(@"[a-z]"); + Regex regex = new(@"[a-z]"); return regex.Matches(password.ConvertToUnsecureString()).Count >= _minimumCount; } } diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs index f3ddee22..09911f86 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesNumbersConstraint.cs @@ -22,7 +22,7 @@ namespace mRemoteNG.Security.PasswordCreation public bool Validate(SecureString password) { - var regex = new Regex(@"\d"); + Regex regex = new(@"\d"); return regex.Matches(password.ConvertToUnsecureString()).Count >= _minimumCount; } } diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs index ea816131..bc9b965d 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesSpecialCharactersConstraint.cs @@ -36,7 +36,7 @@ namespace mRemoteNG.Security.PasswordCreation public bool Validate(SecureString password) { - var regex = new Regex($"[{string.Concat(SpecialCharacters)}]"); + Regex regex = new($"[{string.Concat(SpecialCharacters)}]"); return regex.Matches(password.ConvertToUnsecureString()).Count >= _minimumCount; } } diff --git a/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs b/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs index 0e45c71d..5db42fd5 100644 --- a/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs +++ b/mRemoteNG/Security/PasswordCreation/PasswordIncludesUpperCaseConstraint.cs @@ -22,7 +22,7 @@ namespace mRemoteNG.Security.PasswordCreation public bool Validate(SecureString password) { - var regex = new Regex(@"[A-Z]"); + Regex regex = new(@"[A-Z]"); return regex.Matches(password.ConvertToUnsecureString()).Count >= _minimumCount; } } diff --git a/mRemoteNG/Security/RandomGenerator.cs b/mRemoteNG/Security/RandomGenerator.cs index 7687080a..75530b81 100644 --- a/mRemoteNG/Security/RandomGenerator.cs +++ b/mRemoteNG/Security/RandomGenerator.cs @@ -11,13 +11,13 @@ namespace mRemoteNG.Security if (length < 0) throw new ArgumentException($"{nameof(length)} must be a positive integer"); - var randomGen = new SecureRandom(); - var stringBuilder = new StringBuilder(); + SecureRandom randomGen = new(); + StringBuilder stringBuilder = new(); const string availableChars = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+|[]{};:',./<>?"; - for (var x = 0; x < length; x++) + for (int x = 0; x < length; x++) { - var randomIndex = randomGen.Next(availableChars.Length - 1); + int randomIndex = randomGen.Next(availableChars.Length - 1); stringBuilder.Append(availableChars[randomIndex]); } diff --git a/mRemoteNG/Security/SecureStringExtensions.cs b/mRemoteNG/Security/SecureStringExtensions.cs index 122aee24..b8c08d81 100644 --- a/mRemoteNG/Security/SecureStringExtensions.cs +++ b/mRemoteNG/Security/SecureStringExtensions.cs @@ -19,7 +19,7 @@ namespace mRemoteNG.Security if (securePassword == null) throw new ArgumentNullException(nameof(securePassword)); - var unmanagedString = IntPtr.Zero; + IntPtr unmanagedString = IntPtr.Zero; try { unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(securePassword); @@ -36,8 +36,8 @@ namespace mRemoteNG.Security if (unsecuredPassword == null) throw new ArgumentNullException(nameof(unsecuredPassword)); - var secureString = new SecureString(); - foreach (var character in unsecuredPassword.ToCharArray()) + SecureString secureString = new(); + foreach (char character in unsecuredPassword.ToCharArray()) secureString.AppendChar(character); // ReSharper disable once RedundantAssignment unsecuredPassword = null; diff --git a/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs b/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs index d536f317..0838562d 100644 --- a/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs +++ b/mRemoteNG/Security/SymmetricEncryption/AeadCryptographyProvider.cs @@ -48,7 +48,7 @@ namespace mRemoteNG.Security.SymmetricEncryption { get { - var cipherEngine = _aeadBlockCipher.AlgorithmName.Split('/')[0]; + string cipherEngine = _aeadBlockCipher.AlgorithmName.Split('/')[0]; return (BlockCipherEngines)Enum.Parse(typeof(BlockCipherEngines), cipherEngine); } } @@ -57,7 +57,7 @@ namespace mRemoteNG.Security.SymmetricEncryption { get { - var cipherMode = _aeadBlockCipher.AlgorithmName.Split('/')[1]; + string cipherMode = _aeadBlockCipher.AlgorithmName.Split('/')[1]; return (BlockCipherModes)Enum.Parse(typeof(BlockCipherModes), cipherMode); } } @@ -96,7 +96,7 @@ namespace mRemoteNG.Security.SymmetricEncryption public string Encrypt(string plainText, SecureString encryptionKey) { - var encryptedText = SimpleEncryptWithPassword(plainText, encryptionKey.ConvertToUnsecureString()); + string encryptedText = SimpleEncryptWithPassword(plainText, encryptionKey.ConvertToUnsecureString()); return encryptedText; } @@ -105,8 +105,8 @@ namespace mRemoteNG.Security.SymmetricEncryption if (string.IsNullOrEmpty(secretMessage)) return ""; //throw new ArgumentException(@"Secret Message Required!", nameof(secretMessage)); - var plainText = _encoding.GetBytes(secretMessage); - var cipherText = SimpleEncryptWithPassword(plainText, password, nonSecretPayload); + byte[] plainText = _encoding.GetBytes(secretMessage); + byte[] cipherText = SimpleEncryptWithPassword(plainText, password, nonSecretPayload); return Convert.ToBase64String(cipherText); } @@ -123,14 +123,14 @@ namespace mRemoteNG.Security.SymmetricEncryption throw new ArgumentException(@"Secret Message Required!", nameof(secretMessage)); //Use Random Salt to minimize pre-generated weak password attacks. - var salt = GenerateSalt(); + byte[] salt = GenerateSalt(); //Generate Key - var keyDerivationFunction = new Pkcs5S2KeyGenerator(KeyBitSize, KeyDerivationIterations); - var key = keyDerivationFunction.DeriveKey(password, salt); + Pkcs5S2KeyGenerator keyDerivationFunction = new(KeyBitSize, KeyDerivationIterations); + byte[] key = keyDerivationFunction.DeriveKey(password, salt); //Create Full Non Secret Payload - var payload = new byte[salt.Length + nonSecretPayload.Length]; + byte[] payload = new byte[salt.Length + nonSecretPayload.Length]; Array.Copy(nonSecretPayload, payload, nonSecretPayload.Length); Array.Copy(salt, 0, payload, nonSecretPayload.Length, salt.Length); @@ -150,20 +150,20 @@ namespace mRemoteNG.Security.SymmetricEncryption nonSecretPayload ??= ""u8.ToArray(); //Using random nonce large enough not to repeat - var nonce = new byte[NonceBitSize / 8]; + byte[] nonce = new byte[NonceBitSize / 8]; _random.NextBytes(nonce, 0, nonce.Length); - var parameters = new AeadParameters(new KeyParameter(key), MacBitSize, nonce, nonSecretPayload); + AeadParameters parameters = new(new KeyParameter(key), MacBitSize, nonce, nonSecretPayload); _aeadBlockCipher.Init(true, parameters); //Generate Cipher Text With Auth Tag - var cipherText = new byte[_aeadBlockCipher.GetOutputSize(secretMessage.Length)]; - var len = _aeadBlockCipher.ProcessBytes(secretMessage, 0, secretMessage.Length, cipherText, 0); + byte[] cipherText = new byte[_aeadBlockCipher.GetOutputSize(secretMessage.Length)]; + int len = _aeadBlockCipher.ProcessBytes(secretMessage, 0, secretMessage.Length, cipherText, 0); _aeadBlockCipher.DoFinal(cipherText, len); //Assemble Message - var combinedStream = new MemoryStream(); - using (var binaryWriter = new BinaryWriter(combinedStream)) + MemoryStream combinedStream = new(); + using (BinaryWriter binaryWriter = new(combinedStream)) { //Prepend Authenticated Payload binaryWriter.Write(nonSecretPayload); @@ -179,7 +179,7 @@ namespace mRemoteNG.Security.SymmetricEncryption public string Decrypt(string cipherText, SecureString decryptionKey) { - var decryptedText = SimpleDecryptWithPassword(cipherText, decryptionKey); + string decryptedText = SimpleDecryptWithPassword(cipherText, decryptionKey); return decryptedText; } @@ -188,8 +188,8 @@ namespace mRemoteNG.Security.SymmetricEncryption if (string.IsNullOrWhiteSpace(encryptedMessage)) return ""; //throw new ArgumentException(@"Encrypted Message Required!", nameof(encryptedMessage)); - var cipherText = Convert.FromBase64String(encryptedMessage); - var plainText = SimpleDecryptWithPassword(cipherText, decryptionKey.ConvertToUnsecureString(), nonSecretPayloadLength); + byte[] cipherText = Convert.FromBase64String(encryptedMessage); + byte[] plainText = SimpleDecryptWithPassword(cipherText, decryptionKey.ConvertToUnsecureString(), nonSecretPayloadLength); return plainText == null ? null : _encoding.GetString(plainText); } @@ -203,12 +203,12 @@ namespace mRemoteNG.Security.SymmetricEncryption throw new ArgumentException(@"Encrypted Message Required!", nameof(encryptedMessage)); //Grab Salt from Payload - var salt = new byte[SaltBitSize / 8]; + byte[] salt = new byte[SaltBitSize / 8]; Array.Copy(encryptedMessage, nonSecretPayloadLength, salt, 0, salt.Length); //Generate Key - var keyDerivationFunction = new Pkcs5S2KeyGenerator(KeyBitSize, KeyDerivationIterations); - var key = keyDerivationFunction.DeriveKey(password, salt); + Pkcs5S2KeyGenerator keyDerivationFunction = new(KeyBitSize, KeyDerivationIterations); + byte[] key = keyDerivationFunction.DeriveKey(password, salt); return SimpleDecrypt(encryptedMessage, key, salt.Length + nonSecretPayloadLength); } @@ -222,25 +222,25 @@ namespace mRemoteNG.Security.SymmetricEncryption if (encryptedMessage == null || encryptedMessage.Length == 0) throw new ArgumentException(@"Encrypted Message Required!", nameof(encryptedMessage)); - var cipherStream = new MemoryStream(encryptedMessage); - using var cipherReader = new BinaryReader(cipherStream); + MemoryStream cipherStream = new(encryptedMessage); + using BinaryReader cipherReader = new(cipherStream); //Grab Payload - var nonSecretPayload = cipherReader.ReadBytes(nonSecretPayloadLength); + byte[] nonSecretPayload = cipherReader.ReadBytes(nonSecretPayloadLength); //Grab Nonce - var nonce = cipherReader.ReadBytes(NonceBitSize / 8); + byte[] nonce = cipherReader.ReadBytes(NonceBitSize / 8); - var parameters = new AeadParameters(new KeyParameter(key), MacBitSize, nonce, nonSecretPayload); + AeadParameters parameters = new(new KeyParameter(key), MacBitSize, nonce, nonSecretPayload); _aeadBlockCipher.Init(false, parameters); //Decrypt Cipher Text - var cipherText = + byte[] cipherText = cipherReader.ReadBytes(encryptedMessage.Length - nonSecretPayloadLength - nonce.Length); - var plainText = new byte[_aeadBlockCipher.GetOutputSize(cipherText.Length)]; + byte[] plainText = new byte[_aeadBlockCipher.GetOutputSize(cipherText.Length)]; try { - var len = _aeadBlockCipher.ProcessBytes(cipherText, 0, cipherText.Length, plainText, 0); + int len = _aeadBlockCipher.ProcessBytes(cipherText, 0, cipherText.Length, plainText, 0); _aeadBlockCipher.DoFinal(plainText, len); } catch (InvalidCipherTextException e) @@ -253,7 +253,7 @@ namespace mRemoteNG.Security.SymmetricEncryption private byte[] GenerateSalt() { - var salt = new byte[SaltBitSize / 8]; + byte[] salt = new byte[SaltBitSize / 8]; _random.NextBytes(salt); return salt; } diff --git a/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs b/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs index 220c97ee..2c08f802 100644 --- a/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs +++ b/mRemoteNG/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs @@ -33,26 +33,26 @@ namespace mRemoteNG.Security.SymmetricEncryption try { - using var aes = Aes.Create(); + using Aes aes = Aes.Create(); aes.BlockSize = BlockSizeInBytes * 8; - using (var md5 = MD5.Create()) + using (MD5 md5 = MD5.Create()) { - var key = md5.ComputeHash(Encoding.UTF8.GetBytes(strSecret.ConvertToUnsecureString())); + byte[] key = md5.ComputeHash(Encoding.UTF8.GetBytes(strSecret.ConvertToUnsecureString())); aes.Key = key; aes.GenerateIV(); } - using var ms = new MemoryStream(); + using MemoryStream ms = new(); ms.Write(aes.IV, 0, BlockSizeInBytes); - using var cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write); - var data = Encoding.UTF8.GetBytes(strToEncrypt); + using CryptoStream cs = new(ms, aes.CreateEncryptor(), CryptoStreamMode.Write); + byte[] data = Encoding.UTF8.GetBytes(strToEncrypt); cs.Write(data, 0, data.Length); cs.FlushFinalBlock(); - var encdata = ms.ToArray(); + byte[] encdata = ms.ToArray(); return Convert.ToBase64String(encdata); } @@ -71,26 +71,26 @@ namespace mRemoteNG.Security.SymmetricEncryption try { - using var aes = Aes.Create(); + using Aes aes = Aes.Create(); aes.BlockSize = BlockSizeInBytes * 8; - using (var md5 = MD5.Create()) + using (MD5 md5 = MD5.Create()) { - var key = md5.ComputeHash(Encoding.UTF8.GetBytes(password.ConvertToUnsecureString())); + byte[] key = md5.ComputeHash(Encoding.UTF8.GetBytes(password.ConvertToUnsecureString())); aes.Key = key; } - var ciphertext = Convert.FromBase64String(ciphertextBase64); + byte[] ciphertext = Convert.FromBase64String(ciphertextBase64); - using var ms = new MemoryStream(ciphertext); + using MemoryStream ms = new(ciphertext); - var iv = new byte[BlockSizeInBytes]; + byte[] iv = new byte[BlockSizeInBytes]; ms.Read(iv, 0, iv.Length); aes.IV = iv; - using var cryptoStream = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Read); - using var streamReader = new StreamReader(cryptoStream, Encoding.UTF8, true); - var plaintext = streamReader.ReadToEnd(); + using CryptoStream cryptoStream = new(ms, aes.CreateDecryptor(), CryptoStreamMode.Read); + using StreamReader streamReader = new(cryptoStream, Encoding.UTF8, true); + string plaintext = streamReader.ReadToEnd(); return plaintext; } diff --git a/mRemoteNG/Themes/ExtendedColorPalette.cs b/mRemoteNG/Themes/ExtendedColorPalette.cs index f8bbe1d7..dbb42004 100644 --- a/mRemoteNG/Themes/ExtendedColorPalette.cs +++ b/mRemoteNG/Themes/ExtendedColorPalette.cs @@ -35,9 +35,9 @@ namespace mRemoteNG.Themes public ExtendedColorPalette() { - ExtColorPalette = new Dictionary(); + ExtColorPalette = []; DefaultColorPalette = - new Dictionary(); // If this is the default palette, it will not have a default-default palette + []; // If this is the default palette, it will not have a default-default palette } #endregion @@ -59,7 +59,7 @@ namespace mRemoteNG.Themes /// public Color getColor(string colorKey) { - var retColor = ExtColorPalette.ContainsKey(colorKey) ? ExtColorPalette[colorKey] : Color.Empty; + Color retColor = ExtColorPalette.ContainsKey(colorKey) ? ExtColorPalette[colorKey] : Color.Empty; //Invisible colors are not good, might indicate missing color from the palette as is represented by 00000000 if (retColor != Color.Empty && retColor.A != 0) return retColor; if (DefaultColorPalette != null) diff --git a/mRemoteNG/Themes/MremoteNGPaletteManipulator.cs b/mRemoteNG/Themes/MremoteNGPaletteManipulator.cs index 13a8e1c1..7ada852e 100644 --- a/mRemoteNG/Themes/MremoteNGPaletteManipulator.cs +++ b/mRemoteNG/Themes/MremoteNGPaletteManipulator.cs @@ -26,17 +26,17 @@ namespace mRemoteNG.Themes //Load the colors for the mRemoteNG own components as Dockpanel only have a menus and docks palette public ExtendedColorPalette getColors() { - var newPalette = new ExtendedColorPalette(); + ExtendedColorPalette newPalette = new(); newPalette.setDefault(_defaultPalette); - var resourceSet = ColorMapTheme.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true); + System.Resources.ResourceSet resourceSet = ColorMapTheme.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true); // foreach (DictionaryEntry entry in resourceSet) { - var colorName = entry.Key.ToString(); - var xmlQueryPath = entry.Value.ToString(); + string colorName = entry.Key.ToString(); + string xmlQueryPath = entry.Value.ToString(); if (_xml.DocumentElement == null) continue; - var colorNodeList = _xml.DocumentElement.FirstChild.SelectNodes(xmlQueryPath); - var color = colorNodeList != null && colorNodeList.Count > 0 ? colorNodeList[0].Value : null; + XmlNodeList colorNodeList = _xml.DocumentElement.FirstChild.SelectNodes(xmlQueryPath); + string color = colorNodeList != null && colorNodeList.Count > 0 ? colorNodeList[0].Value : null; if (color != null) { newPalette.addColor(colorName, ColorTranslator.FromHtml($"#{color}")); @@ -54,21 +54,21 @@ namespace mRemoteNG.Themes /// public byte[] mergePalette(ExtendedColorPalette colorPalette) { - var resourceSet = ColorMapTheme.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true); + System.Resources.ResourceSet resourceSet = ColorMapTheme.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true); foreach (DictionaryEntry entry in resourceSet) { - var colorName = entry.Key.ToString(); - var xmlQueryPath = entry.Value.ToString(); - var colorNodeList = _xml.DocumentElement?.FirstChild.SelectNodes(xmlQueryPath); + string colorName = entry.Key.ToString(); + string xmlQueryPath = entry.Value.ToString(); + XmlNodeList colorNodeList = _xml.DocumentElement?.FirstChild.SelectNodes(xmlQueryPath); if (colorNodeList == null || colorNodeList.Count <= 0) continue; - var paletteColor = colorPalette.getColor(colorName); + Color paletteColor = colorPalette.getColor(colorName); colorNodeList[0].Value = $"FF{paletteColor.R:X2}{paletteColor.G:X2}{paletteColor.B:X2}"; } - var ms = new MemoryStream(); + MemoryStream ms = new(); _xml.Save(ms); - var bytes = ms.ToArray(); + byte[] bytes = ms.ToArray(); return bytes; } diff --git a/mRemoteNG/Themes/MremoteNGThemeBase.cs b/mRemoteNG/Themes/MremoteNGThemeBase.cs index 5ed16477..c948498e 100644 --- a/mRemoteNG/Themes/MremoteNGThemeBase.cs +++ b/mRemoteNG/Themes/MremoteNGThemeBase.cs @@ -33,7 +33,7 @@ namespace mRemoteNG.Themes { public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) { - var activeDocumentBounds = (dockPanel?.ActiveDocument as ConnectionTab)?.Bounds; + Rectangle? activeDocumentBounds = (dockPanel?.ActiveDocument as ConnectionTab)?.Bounds; return new FloatWindowNG(dockPanel, pane, activeDocumentBounds ?? bounds); } diff --git a/mRemoteNG/Themes/ThemeInfo.cs b/mRemoteNG/Themes/ThemeInfo.cs index 41e55aad..e6326dff 100644 --- a/mRemoteNG/Themes/ThemeInfo.cs +++ b/mRemoteNG/Themes/ThemeInfo.cs @@ -60,13 +60,13 @@ namespace mRemoteNG.Themes public object Clone() { - var extPalette = new ExtendedColorPalette + ExtendedColorPalette extPalette = new() { ExtColorPalette = _extendedPalette.ExtColorPalette.ToDictionary(entry => entry.Key, entry => entry.Value), DefaultColorPalette = _extendedPalette.DefaultColorPalette }; - var clonedObj = new ThemeInfo(_name, _theme, _URI, _version, extPalette) + ThemeInfo clonedObj = new(_name, _theme, _URI, _version, extPalette) { IsExtendable = IsExtendable, IsThemeBase = IsThemeBase diff --git a/mRemoteNG/Themes/ThemeManager.cs b/mRemoteNG/Themes/ThemeManager.cs index de273d89..adef43f1 100644 --- a/mRemoteNG/Themes/ThemeManager.cs +++ b/mRemoteNG/Themes/ThemeManager.cs @@ -85,9 +85,9 @@ namespace mRemoteNG.Themes Directory.CreateDirectory(themePath); } - var orig = new DirectoryInfo(App.Info.SettingsFileInfo.InstalledThemeFolder); - var files = orig.GetFiles(); - foreach (var file in files) + DirectoryInfo orig = new(App.Info.SettingsFileInfo.InstalledThemeFolder); + FileInfo[] files = orig.GetFiles(); + foreach (FileInfo file in files) { if (!File.Exists(Path.Combine(themePath, file.Name))) file.CopyTo(Path.Combine(themePath, file.Name), true); @@ -109,7 +109,7 @@ namespace mRemoteNG.Themes { if (ThemeDirExists()) { - var defaultThemeURL = $"{themePath}\\vs2015light.vstheme"; + string defaultThemeURL = $"{themePath}\\vs2015light.vstheme"; if (!File.Exists($"{themePath}\\vs2015light.vstheme")) { @@ -121,7 +121,7 @@ namespace mRemoteNG.Themes //First we load the default base theme, its vs2015lightNG //the true "default" in DockPanelSuite built-in VS2015LightTheme named "vs2015Light" //hence the *NG suffix for this one... - var defaultTheme = ThemeSerializer.LoadFromXmlFile(defaultThemeURL); + ThemeInfo defaultTheme = ThemeSerializer.LoadFromXmlFile(defaultThemeURL); defaultTheme.Name = $"{defaultTheme.Name}NG"; return defaultTheme; } @@ -138,7 +138,7 @@ namespace mRemoteNG.Themes public List LoadThemes() { if (themes != null) return themes.Values.OfType().ToList(); - themes = new Hashtable(); + themes = []; if (themePath == null) return themes.Values.OfType().ToList(); try @@ -146,18 +146,18 @@ namespace mRemoteNG.Themes //Check that theme folder exist before trying to load themes if (ThemeDirExists()) { - var themeFiles = Directory.GetFiles(themePath, "*.vstheme"); + string[] themeFiles = Directory.GetFiles(themePath, "*.vstheme"); //First we load the default base theme, its vs2015lightNG - var defaultTheme = LoadDefaultTheme(); + ThemeInfo defaultTheme = LoadDefaultTheme(); themes.Add(defaultTheme.Name, defaultTheme); //Then the rest - foreach (var themeFile in themeFiles) + foreach (string themeFile in themeFiles) { // Skip the default theme here, since it will get loaded again without the *NG below... if (themeFile.Contains("vs2015light.vstheme")) continue; //filter default one - var extTheme = ThemeSerializer.LoadFromXmlFile(themeFile, defaultTheme); + ThemeInfo extTheme = ThemeSerializer.LoadFromXmlFile(themeFile, defaultTheme); if (extTheme.Theme == null || themes.ContainsKey(extTheme.Name)) continue; if (extTheme.Name.Equals("darcula") || extTheme.Name.Equals("vs2015blue") || @@ -170,27 +170,27 @@ namespace mRemoteNG.Themes //Load the embedded themes, extended palettes are taken from the vs2015 themes, trying to match the color theme // 2012 - var vs2012Light = new ThemeInfo("vs2012Light", new VS2012LightTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2012, ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); + ThemeInfo vs2012Light = new("vs2012Light", new VS2012LightTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2012, ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); themes.Add(vs2012Light.Name, vs2012Light); - var vs2012Dark = new ThemeInfo("vs2012Dark", new VS2012DarkTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2012, ((ThemeInfo)themes["vs2015darkNG"]).ExtendedPalette); + ThemeInfo vs2012Dark = new("vs2012Dark", new VS2012DarkTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2012, ((ThemeInfo)themes["vs2015darkNG"]).ExtendedPalette); themes.Add(vs2012Dark.Name, vs2012Dark); - var vs2012Blue = new ThemeInfo("vs2012Blue", new VS2012BlueTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2012, ((ThemeInfo)themes["vs2015blueNG"]).ExtendedPalette); + ThemeInfo vs2012Blue = new("vs2012Blue", new VS2012BlueTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2012, ((ThemeInfo)themes["vs2015blueNG"]).ExtendedPalette); themes.Add(vs2012Blue.Name, vs2012Blue); // 2013 - var vs2013Light = new ThemeInfo("vs2013Light", new VS2013LightTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2013, ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); + ThemeInfo vs2013Light = new("vs2013Light", new VS2013LightTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2013, ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); themes.Add(vs2013Light.Name, vs2013Light); - var vs2013Dark = new ThemeInfo("vs2013Dark", new VS2013DarkTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2013, ((ThemeInfo)themes["vs2015darkNG"]).ExtendedPalette); + ThemeInfo vs2013Dark = new("vs2013Dark", new VS2013DarkTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2013, ((ThemeInfo)themes["vs2015darkNG"]).ExtendedPalette); themes.Add(vs2013Dark.Name, vs2013Dark); - var vs2013Blue = new ThemeInfo("vs2013Blue", new VS2013BlueTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2013, ((ThemeInfo)themes["vs2015blueNG"]).ExtendedPalette); + ThemeInfo vs2013Blue = new("vs2013Blue", new VS2013BlueTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2013, ((ThemeInfo)themes["vs2015blueNG"]).ExtendedPalette); themes.Add(vs2013Blue.Name, vs2013Blue); // 2015 - var vs2015Light = new ThemeInfo("vs2015Light", new VS2015LightTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2015, ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); + ThemeInfo vs2015Light = new("vs2015Light", new VS2015LightTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2015, ((ThemeInfo)themes["vs2015lightNG"]).ExtendedPalette); themes.Add(vs2015Light.Name, vs2015Light); - var vs2015Dark = new ThemeInfo("vs2015Dark", new VS2015DarkTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2015, ((ThemeInfo)themes["vs2015darkNG"]).ExtendedPalette); + ThemeInfo vs2015Dark = new("vs2015Dark", new VS2015DarkTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2015, ((ThemeInfo)themes["vs2015darkNG"]).ExtendedPalette); themes.Add(vs2015Dark.Name, vs2015Dark); - var vs2015Blue = new ThemeInfo("vs2015Blue", new VS2015BlueTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2015, ((ThemeInfo)themes["vs2015blueNG"]).ExtendedPalette); + ThemeInfo vs2015Blue = new("vs2015Blue", new VS2015BlueTheme(), "", VisualStudioToolStripExtender.VsVersion.Vs2015, ((ThemeInfo)themes["vs2015blueNG"]).ExtendedPalette); themes.Add(vs2015Blue.Name, vs2015Blue); } } @@ -211,7 +211,7 @@ namespace mRemoteNG.Themes public ThemeInfo addTheme(ThemeInfo baseTheme, string newThemeName) { if (themes.Contains(newThemeName)) return null; - var modifiedTheme = (ThemeInfo)baseTheme.Clone(); + ThemeInfo modifiedTheme = (ThemeInfo)baseTheme.Clone(); modifiedTheme.Name = newThemeName; modifiedTheme.IsExtendable = true; modifiedTheme.IsThemeBase = false; @@ -247,7 +247,7 @@ namespace mRemoteNG.Themes { if (themes.Contains(name)) return false; - var badChars = Path.GetInvalidFileNameChars(); + char[] badChars = Path.GetInvalidFileNameChars(); return name.IndexOfAny(badChars) == -1; } @@ -308,7 +308,7 @@ namespace mRemoteNG.Themes // Default accordingly... if (value == null) { - var changed = !Properties.OptionsThemePage.Default.ThemeName.Equals(DefaultTheme.Name); + bool changed = !Properties.OptionsThemePage.Default.ThemeName.Equals(DefaultTheme.Name); Properties.OptionsThemePage.Default.ThemeName = DefaultTheme.Name; _activeTheme = DefaultTheme; diff --git a/mRemoteNG/Themes/ThemeSerializer.cs b/mRemoteNG/Themes/ThemeSerializer.cs index d86f8fea..b483e2f1 100644 --- a/mRemoteNG/Themes/ThemeSerializer.cs +++ b/mRemoteNG/Themes/ThemeSerializer.cs @@ -16,9 +16,9 @@ namespace mRemoteNG.Themes /// public static void SaveToXmlFile(ThemeInfo themeToSave, ThemeInfo baseTheme) { - var oldURI = baseTheme.URI; - var directoryName = Path.GetDirectoryName(oldURI); - var toSaveURI = directoryName + Path.DirectorySeparatorChar + themeToSave.Name + ".vstheme"; + string oldURI = baseTheme.URI; + string directoryName = Path.GetDirectoryName(oldURI); + string toSaveURI = directoryName + Path.DirectorySeparatorChar + themeToSave.Name + ".vstheme"; File.Copy(baseTheme.URI, toSaveURI); themeToSave.URI = toSaveURI; } @@ -34,9 +34,9 @@ namespace mRemoteNG.Themes /// public static void UpdateThemeXMLValues(ThemeInfo themeToUpdate) { - var bytesIn = File.ReadAllBytes(themeToUpdate.URI); - var manipulator = new MremoteNGPaletteManipulator(bytesIn, themeToUpdate.ExtendedPalette); - var bytesOut = manipulator.mergePalette(themeToUpdate.ExtendedPalette); + byte[] bytesIn = File.ReadAllBytes(themeToUpdate.URI); + MremoteNGPaletteManipulator manipulator = new(bytesIn, themeToUpdate.ExtendedPalette); + byte[] bytesOut = manipulator.mergePalette(themeToUpdate.ExtendedPalette); File.WriteAllBytes(themeToUpdate.URI, bytesOut); } @@ -48,13 +48,13 @@ namespace mRemoteNG.Themes /// public static ThemeInfo LoadFromXmlFile(string filename, ThemeInfo defaultTheme = null) { - var bytes = File.ReadAllBytes(filename); + byte[] bytes = File.ReadAllBytes(filename); //Load the dockpanel part - var themeBaseLoad = new MremoteNGThemeBase(bytes); + MremoteNGThemeBase themeBaseLoad = new(bytes); //Load the mremote part //Cause we cannot default the theme for the default theme - var extColorLoader = new MremoteNGPaletteManipulator(bytes, defaultTheme?.ExtendedPalette); - var loadedTheme = new ThemeInfo(Path.GetFileNameWithoutExtension(filename), themeBaseLoad, filename, + MremoteNGPaletteManipulator extColorLoader = new(bytes, defaultTheme?.ExtendedPalette); + ThemeInfo loadedTheme = new(Path.GetFileNameWithoutExtension(filename), themeBaseLoad, filename, VisualStudioToolStripExtender.VsVersion.Vs2015, extColorLoader.getColors()); if (new[] {"darcula", "vs2015blue", "vs2015dark", "vs2015light"}.Contains( Path diff --git a/mRemoteNG/Tools/ADhelper.cs b/mRemoteNG/Tools/ADhelper.cs index a623d5b4..a9e572b0 100644 --- a/mRemoteNG/Tools/ADhelper.cs +++ b/mRemoteNG/Tools/ADhelper.cs @@ -13,7 +13,7 @@ namespace mRemoteNG.Tools public AdHelper(string domain) { - Children = new Hashtable(); + Children = []; Domain = domain; } diff --git a/mRemoteNG/Tools/Authenticode.cs b/mRemoteNG/Tools/Authenticode.cs index 0a29a56f..f6f904cf 100644 --- a/mRemoteNG/Tools/Authenticode.cs +++ b/mRemoteNG/Tools/Authenticode.cs @@ -26,11 +26,11 @@ namespace mRemoteNG.Tools public StatusValue Verify() { - var trustFileInfoPointer = default(IntPtr); - var trustDataPointer = default(IntPtr); + IntPtr trustFileInfoPointer = default(IntPtr); + IntPtr trustDataPointer = default(IntPtr); try { - var fileInfo = new FileInfo(FilePath); + FileInfo fileInfo = new(FilePath); if (!fileInfo.Exists) { Status = StatusValue.FileNotExist; @@ -49,8 +49,8 @@ namespace mRemoteNG.Tools Status = StatusValue.NoThumbprintToMatch; return Status; } - - var certificate2 = new X509Certificate2(X509Certificate.CreateFromSignedFile(FilePath)); + + X509Certificate2 certificate2 = new(X509Certificate.CreateFromSignedFile(FilePath)); _thumbprint = certificate2.Thumbprint; if (_thumbprint != ThumbprintToMatch) { @@ -59,12 +59,12 @@ namespace mRemoteNG.Tools } } - var trustFileInfo = new NativeMethods.WINTRUST_FILE_INFO {pcwszFilePath = FilePath}; + NativeMethods.WINTRUST_FILE_INFO trustFileInfo = new() { pcwszFilePath = FilePath}; trustFileInfoPointer = Marshal.AllocCoTaskMem(Marshal.SizeOf(trustFileInfo)); Marshal.StructureToPtr(trustFileInfo, trustFileInfoPointer, false); - var trustData = new NativeMethods.WINTRUST_DATA - { + NativeMethods.WINTRUST_DATA trustData = new() + { dwUIChoice = (uint) Display, fdwRevocationChecks = NativeMethods.WTD_REVOKE_WHOLECHAIN, dwUnionChoice = NativeMethods.WTD_CHOICE_FILE, @@ -76,7 +76,7 @@ namespace mRemoteNG.Tools trustDataPointer = Marshal.AllocCoTaskMem(Marshal.SizeOf(trustData)); Marshal.StructureToPtr(trustData, trustDataPointer, false); - var windowHandle = DisplayParentForm?.Handle ?? IntPtr.Zero; + IntPtr windowHandle = DisplayParentForm?.Handle ?? IntPtr.Zero; _trustProviderErrorCode = NativeMethods.WinVerifyTrust(windowHandle, NativeMethods.WINTRUST_ACTION_GENERIC_VERIFY_V2, trustDataPointer); @@ -104,11 +104,11 @@ namespace mRemoteNG.Tools if (ex is CryptographicException) { - var hResultProperty = + PropertyInfo hResultProperty = ex.GetType().GetProperty("HResult", BindingFlags.NonPublic | BindingFlags.Instance); if (hResultProperty != null) { - var hResult = Convert.ToInt32(hResultProperty.GetValue(ex, null)); + int hResult = Convert.ToInt32(hResultProperty.GetValue(ex, null)); if (hResult == NativeMethods.CRYPT_E_NO_MATCH) { Status = StatusValue.NoSignature; @@ -175,7 +175,7 @@ namespace mRemoteNG.Tools */ return $"The thumbprint does not match. {_thumbprint} {(char) 0x2260} {ThumbprintToMatch}."; case StatusValue.TrustProviderError: - var ex = new Win32Exception(_trustProviderErrorCode); + Win32Exception ex = new(_trustProviderErrorCode); return $"The trust provider returned an error. {ex.Message}"; case StatusValue.UnhandledException: return $"An unhandled exception occurred. {Exception.Message}"; @@ -273,7 +273,7 @@ namespace mRemoteNG.Tools public const int TRUST_E_NOSIGNATURE = unchecked ((int) 0x800B0100); public static readonly Guid WINTRUST_ACTION_GENERIC_VERIFY_V2 = - new Guid("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}"); + new("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}"); public const uint WTD_CHOICE_FILE = 1; public const uint WTD_DISABLE_MD2_MD4 = 0x2000; diff --git a/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs b/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs index 3800105b..09f6c458 100644 --- a/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs +++ b/mRemoteNG/Tools/Cmdline/CmdArgumentsInterpreter.cs @@ -29,9 +29,9 @@ namespace mRemoteNG.Tools.Cmdline public CmdArgumentsInterpreter(IEnumerable args) { - _parameters = new StringDictionary(); - var spliter = new Regex("^-{1,2}|^/|=|:", RegexOptions.IgnoreCase | RegexOptions.Compiled); - var remover = new Regex("^[\'\"]?(.*?)[\'\"]?$", RegexOptions.IgnoreCase | RegexOptions.Compiled); + _parameters = []; + Regex spliter = new("^-{1,2}|^/|=|:", RegexOptions.IgnoreCase | RegexOptions.Compiled); + Regex remover = new("^[\'\"]?(.*?)[\'\"]?$", RegexOptions.IgnoreCase | RegexOptions.Compiled); string parameter = null; // Valid parameters forms: @@ -40,10 +40,10 @@ namespace mRemoteNG.Tools.Cmdline try { - foreach (var txt in args) + foreach (string txt in args) { // Look for new parameters (-,/ or --) and a possible enclosed value (=,:) - var Parts = spliter.Split(txt, 3); + string[] Parts = spliter.Split(txt, 3); switch (Parts.Length) { case 1: diff --git a/mRemoteNG/Tools/Cmdline/CommandLineArguments.cs b/mRemoteNG/Tools/Cmdline/CommandLineArguments.cs index 43d5589e..a380291d 100644 --- a/mRemoteNG/Tools/Cmdline/CommandLineArguments.cs +++ b/mRemoteNG/Tools/Cmdline/CommandLineArguments.cs @@ -7,7 +7,7 @@ namespace mRemoteNG.Tools.Cmdline // Adapted from http://qntm.org/cmd public class CommandLineArguments { - protected List Arguments = new List(); + protected List Arguments = []; public bool EscapeForShell { get; set; } @@ -20,7 +20,7 @@ namespace mRemoteNG.Tools.Cmdline public void Add(params string[] argumentArray) { - foreach (var argument in argumentArray) + foreach (string argument in argumentArray) { Add(argument); } @@ -33,7 +33,7 @@ namespace mRemoteNG.Tools.Cmdline public override string ToString() { - var argList = Arguments.Select(argument => ProcessArgument(argument, EscapeForShell)); + IEnumerable argList = Arguments.Select(argument => ProcessArgument(argument, EscapeForShell)); return string.Join(" ", argList.ToArray()); } @@ -94,7 +94,7 @@ namespace mRemoteNG.Tools.Cmdline protected static string ProcessArgument(Argument argument, bool escapeForShell = false) { - var text = argument.Text; + string text = argument.Text; if (argument.IsFileName) { diff --git a/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs b/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs index 16b5ebf7..2b7984d5 100644 --- a/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs +++ b/mRemoteNG/Tools/Cmdline/StartupArgumentsInterpreter.cs @@ -32,7 +32,7 @@ namespace mRemoteNG.Tools.Cmdline try { - var args = new CmdArgumentsInterpreter(cmdlineArgs); + CmdArgumentsInterpreter args = new(cmdlineArgs); ParseResetPositionArg(args); ParseResetPanelsArg(args); @@ -51,10 +51,10 @@ namespace mRemoteNG.Tools.Cmdline if (args["resetpos"] == null && args["rp"] == null && args["reset"] == null) return; _messageCollector.AddMessage(MessageClass.DebugMsg, "Cmdline arg: Resetting window positions."); Properties.App.Default.MainFormKiosk = false; - var newWidth = 900; - var newHeight = 600; - var newX = Screen.PrimaryScreen.WorkingArea.Width / 2 - newWidth / 2; - var newY = Screen.PrimaryScreen.WorkingArea.Height / 2 - newHeight / 2; + int newWidth = 900; + int newHeight = 600; + int newX = Screen.PrimaryScreen.WorkingArea.Width / 2 - newWidth / 2; + int newY = Screen.PrimaryScreen.WorkingArea.Height / 2 - newHeight / 2; Properties.App.Default.MainFormLocation = new Point(newX, newY); Properties.App.Default.MainFormSize = new Size(newWidth, newHeight); Properties.App.Default.MainFormState = FormWindowState.Normal; @@ -84,7 +84,7 @@ namespace mRemoteNG.Tools.Cmdline private void ParseCustomConnectionPathArg(CmdArgumentsInterpreter args) { - var consParam = ""; + string consParam = ""; if (args["cons"] != null) consParam = "cons"; if (args["c"] != null) diff --git a/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs b/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs index a72bb30e..fd07ba5b 100644 --- a/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs +++ b/mRemoteNG/Tools/ConnectionsTreeToMenuItemsConverter.cs @@ -19,13 +19,13 @@ namespace mRemoteNG.Tools public IEnumerable CreateToolStripDropDownItems(ConnectionTreeModel connectionTreeModel) { - var rootNodes = connectionTreeModel.RootNodes; + List rootNodes = connectionTreeModel.RootNodes; return CreateToolStripDropDownItems(rootNodes); } public IEnumerable CreateToolStripDropDownItems(IEnumerable nodes) { - var dropDownList = new List(); + List dropDownList = new(); try { dropDownList.AddRange(nodes.Select(CreateMenuItem)); @@ -40,22 +40,22 @@ namespace mRemoteNG.Tools private void AddSubMenuNodes(IEnumerable nodes, ToolStripDropDownItem toolStripMenuItem) { - foreach (var connectionInfo in nodes) + foreach (ConnectionInfo connectionInfo in nodes) { - var newItem = CreateMenuItem(connectionInfo); + ToolStripDropDownItem newItem = CreateMenuItem(connectionInfo); toolStripMenuItem.DropDownItems.Add(newItem); } } private ToolStripDropDownItem CreateMenuItem(ConnectionInfo node) { - var menuItem = new ToolStripMenuItem + ToolStripMenuItem menuItem = new() { Text = node.Name, Tag = node }; - var nodeAsContainer = node as ContainerInfo; + ContainerInfo nodeAsContainer = node as ContainerInfo; if (nodeAsContainer != null) { menuItem.Image = Properties.Resources.FolderClosed_16x; diff --git a/mRemoteNG/Tools/CustomCollections/FullyObservableCollection.cs b/mRemoteNG/Tools/CustomCollections/FullyObservableCollection.cs index c1b44ce4..230585e2 100644 --- a/mRemoteNG/Tools/CustomCollections/FullyObservableCollection.cs +++ b/mRemoteNG/Tools/CustomCollections/FullyObservableCollection.cs @@ -46,10 +46,10 @@ namespace mRemoteNG.Tools.CustomCollections /// public void AddRange(IEnumerable items) { - var itemsAsList = items.ToList(); + List itemsAsList = items.ToList(); _eventsAllowed = false; - foreach (var item in itemsAsList) + foreach (T item in itemsAsList) Add(item); _eventsAllowed = true; @@ -65,7 +65,7 @@ namespace mRemoteNG.Tools.CustomCollections public bool Remove(T item) { - var worked = _list.Remove(item); + bool worked = _list.Remove(item); if (!worked) return worked; UnsubscribeFromChildEvents(item); RaiseCollectionChangedEvent(ActionType.Removed, new[] {item}); @@ -74,7 +74,7 @@ namespace mRemoteNG.Tools.CustomCollections public void RemoveAt(int index) { - var item = _list[index]; + T item = _list[index]; _list.RemoveAt(index); UnsubscribeFromChildEvents(item); RaiseCollectionChangedEvent(ActionType.Removed, new[] {item}); @@ -82,9 +82,9 @@ namespace mRemoteNG.Tools.CustomCollections public void Clear() { - var oldItems = _list.ToArray(); + T[] oldItems = _list.ToArray(); _list.Clear(); - foreach (var item in oldItems) + foreach (T item in oldItems) UnsubscribeFromChildEvents(item); RaiseCollectionChangedEvent(ActionType.Removed, oldItems); } diff --git a/mRemoteNG/Tools/EnumWindows.cs b/mRemoteNG/Tools/EnumWindows.cs index d550fe13..19ab7f36 100644 --- a/mRemoteNG/Tools/EnumWindows.cs +++ b/mRemoteNG/Tools/EnumWindows.cs @@ -8,10 +8,10 @@ namespace mRemoteNG.Tools { public List EnumWindows_Renamed() { - var handleList = new List(); + List handleList = new(); HandleLists.Add(handleList); - var handleIndex = (IntPtr)HandleLists.IndexOf(handleList); + IntPtr handleIndex = (IntPtr)HandleLists.IndexOf(handleList); NativeMethods.EnumWindows(EnumCallback, handleIndex); HandleLists.Remove(handleList); @@ -20,17 +20,17 @@ namespace mRemoteNG.Tools public List EnumChildWindows(IntPtr hWndParent) { - var handleList = new List(); + List handleList = new(); HandleLists.Add(handleList); - var handleIndex = (IntPtr)HandleLists.IndexOf(handleList); + IntPtr handleIndex = (IntPtr)HandleLists.IndexOf(handleList); NativeMethods.EnumChildWindows(hWndParent, EnumCallback, handleIndex); HandleLists.Remove(handleList); return handleList; } - private readonly List> HandleLists = new List>(); + private readonly List> HandleLists = []; private bool EnumCallback(int hwnd, int lParam) { diff --git a/mRemoteNG/Tools/Extensions.cs b/mRemoteNG/Tools/Extensions.cs index 8f13b29a..27628dc9 100644 --- a/mRemoteNG/Tools/Extensions.cs +++ b/mRemoteNG/Tools/Extensions.cs @@ -64,7 +64,7 @@ namespace mRemoteNG.Tools { collection = collection.ToList(); - foreach (var item in collection) + foreach (T item in collection) action(item); return collection; diff --git a/mRemoteNG/Tools/ExternalTool.cs b/mRemoteNG/Tools/ExternalTool.cs index efb15772..8c86eea8 100644 --- a/mRemoteNG/Tools/ExternalTool.cs +++ b/mRemoteNG/Tools/ExternalTool.cs @@ -142,7 +142,7 @@ namespace mRemoteNG.Tools private void StartExternalProcess() { - var process = new Process(); + Process process = new(); SetProcessProperties(process, ConnectionInfo); process.Start(); @@ -154,7 +154,7 @@ namespace mRemoteNG.Tools private void SetProcessProperties(Process process, ConnectionInfo startConnectionInfo) { - var argParser = new ExternalToolArgumentParser(startConnectionInfo); + ExternalToolArgumentParser argParser = new(startConnectionInfo); process.StartInfo.UseShellExecute = true; process.StartInfo.FileName = argParser.ParseArguments(FileName); process.StartInfo.Arguments = argParser.ParseArguments(Arguments); @@ -166,7 +166,7 @@ namespace mRemoteNG.Tools { try { - var newConnectionInfo = BuildConnectionInfoForIntegratedApp(); + ConnectionInfo newConnectionInfo = BuildConnectionInfoForIntegratedApp(); Runtime.ConnectionInitiator.OpenConnection(newConnectionInfo); } catch (Exception ex) @@ -177,14 +177,14 @@ namespace mRemoteNG.Tools private ConnectionInfo BuildConnectionInfoForIntegratedApp() { - var newConnectionInfo = GetAppropriateInstanceOfConnectionInfo(); + ConnectionInfo newConnectionInfo = GetAppropriateInstanceOfConnectionInfo(); SetConnectionInfoFields(newConnectionInfo); return newConnectionInfo; } private ConnectionInfo GetAppropriateInstanceOfConnectionInfo() { - var newConnectionInfo = ConnectionInfo == null ? new ConnectionInfo() : ConnectionInfo.Clone(); + ConnectionInfo newConnectionInfo = ConnectionInfo == null ? new ConnectionInfo() : ConnectionInfo.Clone(); return newConnectionInfo; } diff --git a/mRemoteNG/Tools/ExternalToolArgumentParser.cs b/mRemoteNG/Tools/ExternalToolArgumentParser.cs index fe96c392..253c5360 100644 --- a/mRemoteNG/Tools/ExternalToolArgumentParser.cs +++ b/mRemoteNG/Tools/ExternalToolArgumentParser.cs @@ -21,35 +21,35 @@ namespace mRemoteNG.Tools public string ParseArguments(string input) { - var replacements = BuildReplacementList(input); - var result = PerformReplacements(input, replacements); + List replacements = BuildReplacementList(input); + string result = PerformReplacements(input, replacements); return result; } private List BuildReplacementList(string input) { - var index = 0; - var replacements = new List(); + int index = 0; + List replacements = new(); do { - var tokenStart = input.IndexOf("%", index, StringComparison.InvariantCulture); + int tokenStart = input.IndexOf("%", index, StringComparison.InvariantCulture); if (tokenStart == -1) break; - var tokenEnd = input.IndexOf("%", tokenStart + 1, StringComparison.InvariantCulture); + int tokenEnd = input.IndexOf("%", tokenStart + 1, StringComparison.InvariantCulture); if (tokenEnd == -1) break; - var tokenLength = tokenEnd - tokenStart + 1; - var variableNameStart = tokenStart + 1; - var variableNameLength = tokenLength - 2; - var isEnvironmentVariable = false; - var variableName = ""; + int tokenLength = tokenEnd - tokenStart + 1; + int variableNameStart = tokenStart + 1; + int variableNameLength = tokenLength - 2; + bool isEnvironmentVariable = false; + string variableName = ""; if (tokenStart > 0) { - var tokenStartPrefix = input.Substring(tokenStart - 1, 1).ToCharArray()[0]; - var tokenEndPrefix = input.Substring(tokenEnd - 1, 1).ToCharArray()[0]; + char tokenStartPrefix = input.Substring(tokenStart - 1, 1).ToCharArray()[0]; + char tokenEndPrefix = input.Substring(tokenEnd - 1, 1).ToCharArray()[0]; if (tokenStartPrefix == '\\' && tokenEndPrefix == '\\') { @@ -79,9 +79,9 @@ namespace mRemoteNG.Tools } } - var token = input.Substring(tokenStart, tokenLength); + string token = input.Substring(tokenStart, tokenLength); - var escape = DetermineEscapeType(token); + EscapeType escape = DetermineEscapeType(token); if (escape != EscapeType.All) { @@ -98,13 +98,13 @@ namespace mRemoteNG.Tools variableName = input.Substring(variableNameStart, variableNameLength); - var replacementValue = token; + string replacementValue = token; if (!isEnvironmentVariable) { replacementValue = GetVariableReplacement(variableName, token); } - var haveReplacement = false; + bool haveReplacement = false; if (replacementValue != token) { @@ -119,7 +119,7 @@ namespace mRemoteNG.Tools if (haveReplacement) { - var trailing = tokenEnd + 2 <= input.Length + char trailing = tokenEnd + 2 <= input.Length ? input.Substring(tokenEnd + 1, 1).ToCharArray()[0] : '\0'; @@ -147,8 +147,8 @@ namespace mRemoteNG.Tools private EscapeType DetermineEscapeType(string token) { - var escape = EscapeType.All; - var prefix = token[1]; + EscapeType escape = EscapeType.All; + char prefix = token[1]; switch (prefix) { case '-': @@ -164,7 +164,7 @@ namespace mRemoteNG.Tools private string GetVariableReplacement(string variable, string original) { - var replacement = ""; + string replacement = ""; if (_connectionInfo == null) return replacement; switch (variable.ToLowerInvariant()) { @@ -217,19 +217,19 @@ namespace mRemoteNG.Tools private string PerformReplacements(string input, List replacements) { int index; - var result = input; + string result = input; for (index = result.Length; index >= 0; index--) { - foreach (var replacement in replacements) + foreach (Replacement replacement in replacements) { if (replacement.Start != index) { continue; } - var before = result.Substring(0, replacement.Start); - var after = result.Substring(replacement.Start + replacement.Length); + string before = result.Substring(0, replacement.Start); + string after = result.Substring(replacement.Start + replacement.Length); result = before + replacement.Value + after; } } diff --git a/mRemoteNG/Tools/ExternalToolsService.cs b/mRemoteNG/Tools/ExternalToolsService.cs index f2742d7b..eeda1cd5 100644 --- a/mRemoteNG/Tools/ExternalToolsService.cs +++ b/mRemoteNG/Tools/ExternalToolsService.cs @@ -7,7 +7,7 @@ namespace mRemoteNG.Tools [SupportedOSPlatform("windows")] public class ExternalToolsService { - public FullyObservableCollection ExternalTools { get; set; } = new FullyObservableCollection(); + public FullyObservableCollection ExternalTools { get; set; } = []; public ExternalTool GetExtAppByName(string name) { diff --git a/mRemoteNG/Tools/ExternalToolsTypeConverter.cs b/mRemoteNG/Tools/ExternalToolsTypeConverter.cs index 658413e2..3c5d8f5d 100644 --- a/mRemoteNG/Tools/ExternalToolsTypeConverter.cs +++ b/mRemoteNG/Tools/ExternalToolsTypeConverter.cs @@ -11,12 +11,13 @@ namespace mRemoteNG.Tools { get { - var externalToolList = new List(); + List externalToolList = new() + { + // Add a blank entry to signify that no external tool is selected + string.Empty + }; - // Add a blank entry to signify that no external tool is selected - externalToolList.Add(string.Empty); - - foreach (var externalTool in App.Runtime.ExternalToolsService.ExternalTools) + foreach (ExternalTool externalTool in App.Runtime.ExternalToolsService.ExternalTools) { externalToolList.Add(externalTool.DisplayName); } diff --git a/mRemoteNG/Tools/IeBrowserEmulation.cs b/mRemoteNG/Tools/IeBrowserEmulation.cs index 37e2c7a2..ee731237 100644 --- a/mRemoteNG/Tools/IeBrowserEmulation.cs +++ b/mRemoteNG/Tools/IeBrowserEmulation.cs @@ -19,7 +19,7 @@ namespace mRemoteNG.Tools { if (Environment.Is64BitOperatingSystem) { - using (var key = Registry.CurrentUser.CreateSubKey( + using (RegistryKey key = Registry.CurrentUser.CreateSubKey( string .Concat("Software\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), @@ -30,7 +30,7 @@ namespace mRemoteNG.Tools } - using (var key = Registry.CurrentUser.CreateSubKey( + using (RegistryKey key = Registry.CurrentUser.CreateSubKey( string .Concat("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\", feature), @@ -74,7 +74,7 @@ namespace mRemoteNG.Tools // http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx // FeatureControl settings are per-process - var fileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); + string fileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName); // make sure the control is not running inside Visual Studio Designer if (string.Compare(fileName, "devenv.exe", StringComparison.OrdinalIgnoreCase) == 0 || @@ -157,16 +157,16 @@ namespace mRemoteNG.Tools { // https://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx - var browserVersion = 9; + int browserVersion = 9; // default to IE9. - using (var ieKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer", + using (RegistryKey ieKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer", RegistryKeyPermissionCheck.ReadSubTree, RegistryRights.QueryValues)) { if (ieKey != null) { - var version = ieKey.GetValue("svcVersion"); + object version = ieKey.GetValue("svcVersion"); if (null == version) { version = ieKey.GetValue("Version"); diff --git a/mRemoteNG/Tools/MiscTools.cs b/mRemoteNG/Tools/MiscTools.cs index 15bd6e21..7eba7e4a 100644 --- a/mRemoteNG/Tools/MiscTools.cs +++ b/mRemoteNG/Tools/MiscTools.cs @@ -48,7 +48,7 @@ namespace mRemoteNG.Tools //if (PresentationSource.FromVisual(splash)) // splash.Close(); - var passwordForm = new FrmPassword(passwordName, verify); + FrmPassword passwordForm = new(passwordName, verify); return passwordForm.GetKey(); } @@ -131,9 +131,9 @@ namespace mRemoteNG.Tools private static string GetExceptionMessageRecursive(Exception ex, string separator) { - var message = ex.Message; + string message = ex.Message; if (ex.InnerException == null) return message; - var innerMessage = GetExceptionMessageRecursive(ex.InnerException, separator); + string innerMessage = GetExceptionMessageRecursive(ex.InnerException, separator); message = String.Join(separator, message, innerMessage); return message; } @@ -145,7 +145,7 @@ namespace mRemoteNG.Tools { if (sender != null) { - var bmp = new Bitmap(sender.Width, sender.Height, PixelFormat.Format32bppRgb); + Bitmap bmp = new(sender.Width, sender.Height, PixelFormat.Format32bppRgb); Graphics g = Graphics.FromImage(bmp); g.CopyFromScreen(sender.PointToScreen(System.Drawing.Point.Empty), System.Drawing.Point.Empty, bmp.Size, CopyPixelOperation.SourceCopy); return bmp; @@ -179,8 +179,8 @@ namespace mRemoteNG.Tools Type destType) { if (value == null) return null; - var fi = _enumType.GetField(Enum.GetName(_enumType, value)); - var dna = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute)); + System.Reflection.FieldInfo fi = _enumType.GetField(Enum.GetName(_enumType, value)); + DescriptionAttribute dna = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute)); return dna != null ? dna.Description : value.ToString(); } @@ -192,9 +192,9 @@ namespace mRemoteNG.Tools public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { - foreach (var fi in _enumType.GetFields()) + foreach (System.Reflection.FieldInfo fi in _enumType.GetFields()) { - var dna = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute)); + DescriptionAttribute dna = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute)); if (dna != null && (string)value == dna.Description) { @@ -256,7 +256,7 @@ namespace mRemoteNG.Tools { bool[] bools = {true, false}; - var svc = new StandardValuesCollection(bools); + StandardValuesCollection svc = new(bools); return svc; } diff --git a/mRemoteNG/Tools/MouseClickSimulator.cs b/mRemoteNG/Tools/MouseClickSimulator.cs index ca65b6b0..49fbc4d1 100644 --- a/mRemoteNG/Tools/MouseClickSimulator.cs +++ b/mRemoteNG/Tools/MouseClickSimulator.cs @@ -12,9 +12,9 @@ namespace mRemoteNG.Tools public static void Click(Control controlToClick, Point currentMousePosition) { // Simulate a mouse event since one wasn't generated by Windows - var clientMousePosition = controlToClick.PointToClient(currentMousePosition); - var tempWLow = clientMousePosition.X; - var tempWHigh = clientMousePosition.Y; + Point clientMousePosition = controlToClick.PointToClient(currentMousePosition); + int tempWLow = clientMousePosition.X; + int tempWHigh = clientMousePosition.Y; NativeMethods.SendMessage(controlToClick.Handle, NativeMethods.WM_LBUTTONDOWN, (IntPtr)NativeMethods.MK_LBUTTON, (IntPtr)NativeMethods.MAKELPARAM(ref tempWLow, ref tempWHigh)); diff --git a/mRemoteNG/Tools/NotificationAreaIcon.cs b/mRemoteNG/Tools/NotificationAreaIcon.cs index 719ba217..205207bc 100644 --- a/mRemoteNG/Tools/NotificationAreaIcon.cs +++ b/mRemoteNG/Tools/NotificationAreaIcon.cs @@ -32,9 +32,9 @@ namespace mRemoteNG.Tools Image = Properties.Resources.ASPWebSite_16x }; - var cMenSep1 = new ToolStripSeparator(); + ToolStripSeparator cMenSep1 = new(); - var cMenExit = new ToolStripMenuItem {Text = Language.Exit}; + ToolStripMenuItem cMenExit = new() { Text = Language.Exit}; cMenExit.Click += cMenExit_Click; _cMen = new ContextMenuStrip @@ -82,7 +82,7 @@ namespace mRemoteNG.Tools { if (e.Button != MouseButtons.Right) return; _cMenCons.DropDownItems.Clear(); - var menuItemsConverter = new ConnectionsTreeToMenuItemsConverter + ConnectionsTreeToMenuItemsConverter menuItemsConverter = new() { MouseUpEventHandler = ConMenItem_MouseUp }; diff --git a/mRemoteNG/Tools/Optional.cs b/mRemoteNG/Tools/Optional.cs index 37080bb9..46e4ebf9 100644 --- a/mRemoteNG/Tools/Optional.cs +++ b/mRemoteNG/Tools/Optional.cs @@ -53,7 +53,7 @@ namespace mRemoteNG.Tools /// /// Returns an empty /// - public static Optional Empty => new Optional(); + public static Optional Empty => new(); #region IEnumerable @@ -81,8 +81,8 @@ namespace mRemoteNG.Tools /// public int CompareTo(Optional other) { - var otherHasAnything = other.Any(); - var thisHasAnything = _optional.Length > 0; + bool otherHasAnything = other.Any(); + bool thisHasAnything = _optional.Length > 0; // both are empty, equivalent value if (!thisHasAnything && !otherHasAnything) @@ -109,7 +109,7 @@ namespace mRemoteNG.Tools if (ReferenceEquals(this, obj)) return true; - var objAsOptional = obj as Optional; + Optional objAsOptional = obj as Optional; if (objAsOptional != null) return Equals(objAsOptional); @@ -121,8 +121,8 @@ namespace mRemoteNG.Tools private bool Equals(Optional other) { - var otherObj = other.FirstOrDefault(); - var thisObj = _optional.FirstOrDefault(); + T otherObj = other.FirstOrDefault(); + T thisObj = _optional.FirstOrDefault(); if (thisObj == null && otherObj == null) return true; if (thisObj == null) diff --git a/mRemoteNG/Tools/PortScanner.cs b/mRemoteNG/Tools/PortScanner.cs index a3cd6b9c..4ec5f7eb 100644 --- a/mRemoteNG/Tools/PortScanner.cs +++ b/mRemoteNG/Tools/PortScanner.cs @@ -16,10 +16,10 @@ namespace mRemoteNG.Tools [SupportedOSPlatform("windows")] public class PortScanner { - private readonly List _ipAddresses = new List(); - private readonly List _ports = new List(); + private readonly List _ipAddresses = []; + private readonly List _ports = []; private Thread _scanThread; - private readonly List _scannedHosts = new List(); + private readonly List _scannedHosts = []; private readonly int _timeoutInMilliseconds; #region Public Methods @@ -31,11 +31,11 @@ namespace mRemoteNG.Tools int timeoutInMilliseconds = 5000, bool checkDefaultPortsOnly = false) { - var ipAddressStart = IpAddressMin(ipAddress1, ipAddress2); - var ipAddressEnd = IpAddressMax(ipAddress1, ipAddress2); + IPAddress ipAddressStart = IpAddressMin(ipAddress1, ipAddress2); + IPAddress ipAddressEnd = IpAddressMax(ipAddress1, ipAddress2); - var portStart = Math.Min(port1, port2); - var portEnd = Math.Max(port1, port2); + int portStart = Math.Min(port1, port2); + int portEnd = Math.Max(port1, port2); // if only one port was specified, just scan the one port... if (portStart == 0) @@ -55,7 +55,7 @@ namespace mRemoteNG.Tools }); else { - for (var port = portStart; port <= portEnd; port++) + for (int port = portStart; port <= portEnd; port++) { _ports.Add(port); } @@ -80,7 +80,7 @@ namespace mRemoteNG.Tools public void StopScan() { - foreach (var p in _pings) + foreach (Ping p in _pings) { p.SendAsyncCancel(); } @@ -93,7 +93,7 @@ namespace mRemoteNG.Tools { try { - var tcpClient = new TcpClient(hostname, Convert.ToInt32(port)); + TcpClient tcpClient = new(hostname, Convert.ToInt32(port)); tcpClient.Close(); return true; } @@ -108,7 +108,7 @@ namespace mRemoteNG.Tools #region Private Methods private int _hostCount; - private readonly List _pings = new List(); + private readonly List _pings = []; private void ScanAsync() { @@ -116,11 +116,11 @@ namespace mRemoteNG.Tools { _hostCount = 0; Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Tools.PortScan: Starting scan of {_ipAddresses.Count} hosts...", true); - foreach (var ipAddress in _ipAddresses) + foreach (IPAddress ipAddress in _ipAddresses) { RaiseBeginHostScanEvent(ipAddress); - var pingSender = new Ping(); + Ping pingSender = new(); _pings.Add(pingSender); try @@ -146,11 +146,11 @@ namespace mRemoteNG.Tools private void PingSender_PingCompleted(object sender, PingCompletedEventArgs e) { // used for clean up later... - var p = (Ping)sender; + Ping p = (Ping)sender; // UserState is the IP Address - var ip = e.UserState.ToString(); - var scanHost = new ScanHost(ip); + string ip = e.UserState.ToString(); + ScanHost scanHost = new(ip); _hostCount++; Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, @@ -195,12 +195,12 @@ namespace mRemoteNG.Tools scanHost.HostName = scanHost.HostIp; } - foreach (var port in _ports) + foreach (int port in _ports) { bool isPortOpen; try { - var tcpClient = new TcpClient(ip, port); + TcpClient tcpClient = new(ip, port); isPortOpen = true; scanHost.OpenPorts.Add(port); tcpClient.Close(); @@ -253,7 +253,7 @@ namespace mRemoteNG.Tools p.PingCompleted -= PingSender_PingCompleted; p.Dispose(); - var h = string.IsNullOrEmpty(scanHost.HostName) ? "HostNameNotFound" : scanHost.HostName; + string h = string.IsNullOrEmpty(scanHost.HostName) ? "HostNameNotFound" : scanHost.HostName; Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Tools.PortScan: Scan of {scanHost.HostIp} ({h}) complete.", true); @@ -266,16 +266,16 @@ namespace mRemoteNG.Tools private static IEnumerable IpAddressArrayFromRange(IPAddress ipAddress1, IPAddress ipAddress2) { - var startIpAddress = IpAddressMin(ipAddress1, ipAddress2); - var endIpAddress = IpAddressMax(ipAddress1, ipAddress2); + IPAddress startIpAddress = IpAddressMin(ipAddress1, ipAddress2); + IPAddress endIpAddress = IpAddressMax(ipAddress1, ipAddress2); - var startAddress = IpAddressToInt32(startIpAddress); - var endAddress = IpAddressToInt32(endIpAddress); - var addressCount = endAddress - startAddress; + int startAddress = IpAddressToInt32(startIpAddress); + int endAddress = IpAddressToInt32(endIpAddress); + int addressCount = endAddress - startAddress; - var addressArray = new IPAddress[addressCount + 1]; - var index = 0; - for (var address = startAddress; address <= endAddress; address++) + IPAddress[] addressArray = new IPAddress[addressCount + 1]; + int index = 0; + for (int address = startAddress; address <= endAddress; address++) { addressArray[index] = IpAddressFromInt32(address); index++; @@ -306,7 +306,7 @@ namespace mRemoteNG.Tools throw (new ArgumentException("ipAddress")); } - var addressBytes = ipAddress.GetAddressBytes(); // in network order (big-endian) + byte[] addressBytes = ipAddress.GetAddressBytes(); // in network order (big-endian) if (BitConverter.IsLittleEndian) { Array.Reverse(addressBytes); // to host order (little-endian) @@ -319,7 +319,7 @@ namespace mRemoteNG.Tools private static IPAddress IpAddressFromInt32(int ipAddress) { - var addressBytes = BitConverter.GetBytes(ipAddress); // in host order + byte[] addressBytes = BitConverter.GetBytes(ipAddress); // in host order if (BitConverter.IsLittleEndian) { Array.Reverse(addressBytes); // to network order (big-endian) diff --git a/mRemoteNG/Tools/ProcessController.cs b/mRemoteNG/Tools/ProcessController.cs index de655f2e..ecfa6921 100644 --- a/mRemoteNG/Tools/ProcessController.cs +++ b/mRemoteNG/Tools/ProcessController.cs @@ -35,11 +35,11 @@ namespace mRemoteNG.Tools if (Handle == IntPtr.Zero) return false; - var controlHandle = GetControlHandle(className, text); + IntPtr controlHandle = GetControlHandle(className, text); if (controlHandle == IntPtr.Zero) return false; - var nCmdShow = visible ? NativeMethods.SW_SHOW : NativeMethods.SW_HIDE; + uint nCmdShow = visible ? NativeMethods.SW_SHOW : NativeMethods.SW_HIDE; NativeMethods.ShowWindow(controlHandle, (int)nCmdShow); return true; } @@ -49,11 +49,11 @@ namespace mRemoteNG.Tools if (Process == null || Process.HasExited || Handle == IntPtr.Zero) return false; - var controlHandle = GetControlHandle(className, oldText); + IntPtr controlHandle = GetControlHandle(className, oldText); if (controlHandle == IntPtr.Zero) return false; - var result = NativeMethods.SendMessage(controlHandle, NativeMethods.WM_SETTEXT, (IntPtr)0, + IntPtr result = NativeMethods.SendMessage(controlHandle, NativeMethods.WM_SETTEXT, (IntPtr)0, new StringBuilder(newText)); return result.ToInt32() == NativeMethods.TRUE; } @@ -63,11 +63,11 @@ namespace mRemoteNG.Tools if (Process == null || Process.HasExited || Handle == IntPtr.Zero) return false; - var listBoxHandle = GetControlHandle("ListBox"); + IntPtr listBoxHandle = GetControlHandle("ListBox"); if (listBoxHandle == IntPtr.Zero) return false; - var result = NativeMethods.SendMessage(listBoxHandle, NativeMethods.LB_SELECTSTRING, (IntPtr)(-1), + IntPtr result = NativeMethods.SendMessage(listBoxHandle, NativeMethods.LB_SELECTSTRING, (IntPtr)(-1), new StringBuilder(itemText)); return result.ToInt32() != NativeMethods.LB_ERR; } @@ -77,11 +77,11 @@ namespace mRemoteNG.Tools if (Process == null || Process.HasExited || Handle == IntPtr.Zero) return false; - var buttonHandle = GetControlHandle("Button", text); + IntPtr buttonHandle = GetControlHandle("Button", text); if (buttonHandle == IntPtr.Zero) return false; - var buttonControlId = NativeMethods.GetDlgCtrlID(buttonHandle); + int buttonControlId = NativeMethods.GetDlgCtrlID(buttonHandle); NativeMethods.SendMessage(Handle, NativeMethods.WM_COMMAND, (IntPtr)buttonControlId, buttonHandle); return true; @@ -98,9 +98,9 @@ namespace mRemoteNG.Tools #region Protected Fields - private readonly Process Process = new Process(); + private readonly Process Process = new(); private IntPtr Handle = IntPtr.Zero; - private List Controls = new List(); + private List Controls = []; #endregion @@ -115,7 +115,7 @@ namespace mRemoteNG.Tools Process.WaitForInputIdle(Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000); Handle = IntPtr.Zero; - var startTicks = Environment.TickCount; + int startTicks = Environment.TickCount; while (Handle == IntPtr.Zero && Environment.TickCount < startTicks + (Properties.OptionsAdvancedPage.Default.MaxPuttyWaitTime * 1000)) { @@ -137,13 +137,13 @@ namespace mRemoteNG.Tools if (Controls.Count == 0) { - var windowEnumerator = new EnumWindows(); + EnumWindows windowEnumerator = new(); Controls = windowEnumerator.EnumChildWindows(Handle); } - var stringBuilder = new StringBuilder(); - var controlHandle = IntPtr.Zero; - foreach (var control in Controls) + StringBuilder stringBuilder = new(); + IntPtr controlHandle = IntPtr.Zero; + foreach (IntPtr control in Controls) { NativeMethods.GetClassName(control, stringBuilder, stringBuilder.Capacity); if (stringBuilder.ToString() != className) continue; diff --git a/mRemoteNG/Tools/PropertyGridCommandSite.cs b/mRemoteNG/Tools/PropertyGridCommandSite.cs index 8dfb7043..ad176133 100644 --- a/mRemoteNG/Tools/PropertyGridCommandSite.cs +++ b/mRemoteNG/Tools/PropertyGridCommandSite.cs @@ -20,29 +20,29 @@ namespace mRemoteNG.Tools { get { - var objectVerbs = new DesignerVerbCollection(); + DesignerVerbCollection objectVerbs = new(); // ReSharper disable VBPossibleMistakenCallToGetType.2 - var methods = TheObject.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance); + MethodInfo[] methods = TheObject.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance); // ReSharper restore VBPossibleMistakenCallToGetType.2 - foreach (var method in methods) + foreach (MethodInfo method in methods) { - var commandAttributes = method.GetCustomAttributes(typeof(CommandAttribute), true); + object[] commandAttributes = method.GetCustomAttributes(typeof(CommandAttribute), true); if (commandAttributes.Length == 0) { continue; } - var commandAttribute = (CommandAttribute)commandAttributes[0]; + CommandAttribute commandAttribute = (CommandAttribute)commandAttributes[0]; if (!commandAttribute.Command) { continue; } - var displayName = method.Name; - var displayNameAttributes = method.GetCustomAttributes(typeof(DisplayNameAttribute), true); + string displayName = method.Name; + object[] displayNameAttributes = method.GetCustomAttributes(typeof(DisplayNameAttribute), true); if (displayNameAttributes.Length != 0) { - var displayNameAttribute = (DisplayNameAttribute)displayNameAttributes[0]; + DisplayNameAttribute displayNameAttribute = (DisplayNameAttribute)displayNameAttributes[0]; if (!string.IsNullOrEmpty(displayNameAttribute.DisplayName)) { displayName = displayNameAttribute.DisplayName; @@ -58,34 +58,34 @@ namespace mRemoteNG.Tools private void VerbEventHandler(object sender, EventArgs e) { - var verb = sender as DesignerVerb; + DesignerVerb verb = sender as DesignerVerb; if (verb == null) { return; } // ReSharper disable VBPossibleMistakenCallToGetType.2 - var methods = TheObject.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance); + MethodInfo[] methods = TheObject.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance); // ReSharper restore VBPossibleMistakenCallToGetType.2 - foreach (var method in methods) + foreach (MethodInfo method in methods) { - var commandAttributes = method.GetCustomAttributes(typeof(CommandAttribute), true); + object[] commandAttributes = method.GetCustomAttributes(typeof(CommandAttribute), true); if (commandAttributes.Length == 0) { continue; } - var commandAttribute = (CommandAttribute)commandAttributes[0]; + CommandAttribute commandAttribute = (CommandAttribute)commandAttributes[0]; if (!commandAttribute.Command) { continue; } - var displayName = method.Name; - var displayNameAttributes = method.GetCustomAttributes(typeof(DisplayNameAttribute), true); + string displayName = method.Name; + object[] displayNameAttributes = method.GetCustomAttributes(typeof(DisplayNameAttribute), true); if (displayNameAttributes.Length != 0) { - var displayNameAttribute = (DisplayNameAttribute)displayNameAttributes[0]; + DisplayNameAttribute displayNameAttribute = (DisplayNameAttribute)displayNameAttributes[0]; if (!string.IsNullOrEmpty(displayNameAttribute.DisplayName)) { displayName = displayNameAttribute.DisplayName; diff --git a/mRemoteNG/Tools/PuttyProcessController.cs b/mRemoteNG/Tools/PuttyProcessController.cs index 52b17df1..91109669 100644 --- a/mRemoteNG/Tools/PuttyProcessController.cs +++ b/mRemoteNG/Tools/PuttyProcessController.cs @@ -9,7 +9,7 @@ namespace mRemoteNG.Tools { public bool Start(CommandLineArguments arguments = null) { - var filename = Properties.OptionsAdvancedPage.Default.UseCustomPuttyPath ? Properties.OptionsAdvancedPage.Default.CustomPuttyPath : App.Info.GeneralAppInfo.PuttyPath; + string filename = Properties.OptionsAdvancedPage.Default.UseCustomPuttyPath ? Properties.OptionsAdvancedPage.Default.CustomPuttyPath : App.Info.GeneralAppInfo.PuttyPath; return Start(filename, arguments); } } diff --git a/mRemoteNG/Tools/ReconnectGroup.cs b/mRemoteNG/Tools/ReconnectGroup.cs index fae084d4..7dbd0fa3 100644 --- a/mRemoteNG/Tools/ReconnectGroup.cs +++ b/mRemoteNG/Tools/ReconnectGroup.cs @@ -32,7 +32,7 @@ namespace mRemoteNG.Tools { if (pbServerStatus.InvokeRequired) { - var d = new SetStatusImageCB(SetStatusImage); + SetStatusImageCB d = new(SetStatusImage); ParentForm?.Invoke(d, new object[] {Img}); } else @@ -64,7 +64,7 @@ namespace mRemoteNG.Tools { if (chkReconnectWhenReady.InvokeRequired) { - var d = new SetCheckboxCB(SetCheckbox); + SetCheckboxCB d = new(SetCheckbox); ParentForm?.Invoke(d, new object[] {Val}); } else @@ -114,7 +114,7 @@ namespace mRemoteNG.Tools { if (InvokeRequired) { - var d = new DisposeReconnectGroupCB(DisposeReconnectGroup); + DisposeReconnectGroupCB d = new(DisposeReconnectGroup); ParentForm?.Invoke(d); } else diff --git a/mRemoteNG/Tools/SSHTunnelTypeConverter.cs b/mRemoteNG/Tools/SSHTunnelTypeConverter.cs index f537cc3e..e94d93b1 100644 --- a/mRemoteNG/Tools/SSHTunnelTypeConverter.cs +++ b/mRemoteNG/Tools/SSHTunnelTypeConverter.cs @@ -15,7 +15,7 @@ namespace mRemoteNG.Tools { get { - var sshTunnelList = new List {string.Empty}; + List sshTunnelList = new() { string.Empty}; // Add a blank entry to signify that no external tool is selected sshTunnelList.AddRange(GetSshConnectionNames(Runtime.ConnectionsService.ConnectionTreeModel.RootNodes)); @@ -26,8 +26,8 @@ namespace mRemoteNG.Tools // recursively traverse the connection tree to find all ConnectionInfo s of type SSH private static IEnumerable GetSshConnectionNames(IEnumerable rootnodes) { - var result = new List(); - foreach (var node in rootnodes) + List result = new(); + foreach (ConnectionInfo node in rootnodes) if (node is ContainerInfo container) { result.AddRange(GetSshConnectionNames(container.Children)); diff --git a/mRemoteNG/Tools/ScanHost.cs b/mRemoteNG/Tools/ScanHost.cs index 6c77f027..5fe506ad 100644 --- a/mRemoteNG/Tools/ScanHost.cs +++ b/mRemoteNG/Tools/ScanHost.cs @@ -58,8 +58,8 @@ namespace mRemoteNG.Tools public ScanHost(string host) { HostIp = host; - OpenPorts = new ArrayList(); - ClosedPorts = new ArrayList(); + OpenPorts = []; + ClosedPorts = []; } public override string ToString() @@ -107,7 +107,7 @@ namespace mRemoteNG.Tools { get { - var strOpen = ""; + string strOpen = ""; foreach (int p in OpenPorts) { strOpen += p + ", "; @@ -121,7 +121,7 @@ namespace mRemoteNG.Tools { get { - var strClosed = ""; + string strClosed = ""; foreach (int p in ClosedPorts) { strClosed += p + ", "; diff --git a/mRemoteNG/Tools/Tools.WindowPlacement.cs b/mRemoteNG/Tools/Tools.WindowPlacement.cs index 3c07d2f8..1a5721ff 100644 --- a/mRemoteNG/Tools/Tools.WindowPlacement.cs +++ b/mRemoteNG/Tools/Tools.WindowPlacement.cs @@ -60,7 +60,7 @@ namespace mRemoteNG.Tools throw (new NullReferenceException("WindowPlacement.Form is not set.")); } - NativeMethods.WINDOWPLACEMENT windowPlacement = new NativeMethods.WINDOWPLACEMENT(); + NativeMethods.WINDOWPLACEMENT windowPlacement = new(); windowPlacement.length = (uint)Marshal.SizeOf(windowPlacement); try { diff --git a/mRemoteNG/Tools/WindowsRegistry/WindowsRegistry.cs b/mRemoteNG/Tools/WindowsRegistry/WindowsRegistry.cs index 45c2d95f..c7c00f8e 100644 --- a/mRemoteNG/Tools/WindowsRegistry/WindowsRegistry.cs +++ b/mRemoteNG/Tools/WindowsRegistry/WindowsRegistry.cs @@ -27,7 +27,7 @@ namespace mRemoteNG.Tools.WindowsRegistry throw new ArgumentException("Unknown or unsupported RegistryHive value.", nameof(hive)); path.ThrowIfNull(nameof(path)); - using (var key = OpenSubKey(hive, path)) + using (DisposableOptional key = OpenSubKey(hive, path)) { return key.Any() ? key.First().GetSubKeyNames() @@ -62,12 +62,12 @@ namespace mRemoteNG.Tools.WindowsRegistry path.ThrowIfNull(nameof(path)); name.ThrowIfNull(nameof(name)); - using (var key = OpenSubKey(hive, path)) + using (DisposableOptional key = OpenSubKey(hive, path)) { if (!key.Any()) return null; - var keyValue = key.First().GetValue(name); + object keyValue = key.First().GetValue(name); if (keyValue == null) return null; @@ -87,7 +87,7 @@ namespace mRemoteNG.Tools.WindowsRegistry /// The boolean value of the specified property or the default value if not found or cannot be parsed. public bool GetBoolValue(RegistryHive hive, string path, string propertyName, bool defaultValue = false) { - var value = GetPropertyValue(hive, path, propertyName); + string value = GetPropertyValue(hive, path, propertyName); if (!string.IsNullOrEmpty(value)) { @@ -110,7 +110,7 @@ namespace mRemoteNG.Tools.WindowsRegistry /// The DWORD value from the Registry, or the specified default value. public int GetDwordValue(RegistryHive hive, string path, string propertyName, int defaultValue = 0) { - var value = GetPropertyValue(hive, path, propertyName); + string value = GetPropertyValue(hive, path, propertyName); if (int.TryParse(value, out int intValue)) { @@ -153,7 +153,7 @@ namespace mRemoteNG.Tools.WindowsRegistry { if (subKey != null) { - var value = subKey.GetValue(key.Name); + object value = subKey.GetValue(key.Name); if (value != null) key.Value = value.ToString(); @@ -177,7 +177,7 @@ namespace mRemoteNG.Tools.WindowsRegistry throw new ArgumentException("Unknown or unsupported RegistryHive value.", nameof(hive)); path.ThrowIfNull(nameof(path)); - List list = new List(); + List list = []; using (RegistryKey baseKey = RegistryKey.OpenBaseKey(hive, RegistryView.Default), key = baseKey.OpenSubKey(path)) { if (key != null) diff --git a/mRemoteNG/Tools/WindowsRegistry/WindowsRegistryAdvanced.cs b/mRemoteNG/Tools/WindowsRegistry/WindowsRegistryAdvanced.cs index 92842956..d019d0a3 100644 --- a/mRemoteNG/Tools/WindowsRegistry/WindowsRegistryAdvanced.cs +++ b/mRemoteNG/Tools/WindowsRegistry/WindowsRegistryAdvanced.cs @@ -23,7 +23,7 @@ namespace mRemoteNG.Tools.WindowsRegistry public WindowsRegistryKeyInteger GetInteger(RegistryHive hive, string path, string propertyName, int? defaultValue = null) { // Retrieve the Windows Registry key - var key = GetWindowsRegistryKey(hive, path, propertyName); + WindowsRegistryKey key = GetWindowsRegistryKey(hive, path, propertyName); // Create a WindowsRegistryKeyInteger instance and initialize it from the retrieved key WindowsRegistryKeyInteger IntKey = new(); @@ -45,7 +45,7 @@ namespace mRemoteNG.Tools.WindowsRegistry public WindowsRegistryKeyString GetString(RegistryHive hive, string path, string propertyName, string defaultValue = null) { // Retrieve the Windows Registry key - var key = GetWindowsRegistryKey(hive, path, propertyName); + WindowsRegistryKey key = GetWindowsRegistryKey(hive, path, propertyName); // Create a WindowsRegistryKeyString instance and initialize it from the retrieved key WindowsRegistryKeyString StrKey = new(); @@ -66,12 +66,14 @@ namespace mRemoteNG.Tools.WindowsRegistry public WindowsRegistryKeyString GetStringValidated(RegistryHive hive, string path, string propertyName, string[] allowedValues, bool caseSensitive = false, string defaultValue = null) { // Retrieve the Windows Registry key - var key = GetWindowsRegistryKey(hive, path, propertyName); + WindowsRegistryKey key = GetWindowsRegistryKey(hive, path, propertyName); // Create a WindowsRegistryKeyString instance and initialize it from the retrieved key - WindowsRegistryKeyString StrKey = new(); - StrKey.AllowedValues = allowedValues; - StrKey.IsCaseSensitiveValidation = caseSensitive; + WindowsRegistryKeyString StrKey = new() + { + AllowedValues = allowedValues, + IsCaseSensitiveValidation = caseSensitive + }; StrKey.ConvertFromWindowsRegistryKey(key, defaultValue); return StrKey; @@ -102,7 +104,7 @@ namespace mRemoteNG.Tools.WindowsRegistry public WindowsRegistryKeyBoolean GetBoolean(RegistryHive hive, string path, string propertyName, bool? defaultValue = null) { // Retrieve the Windows Registry key - var key = GetWindowsRegistryKey(hive, path, propertyName); + WindowsRegistryKey key = GetWindowsRegistryKey(hive, path, propertyName); // Create a WindowsRegistryKeyBoolean instance and initialize it from the retrieved key WindowsRegistryKeyBoolean boolKey = new (); diff --git a/mRemoteNG/Tree/ClickHandlers/ExpandNodeClickHandler.cs b/mRemoteNG/Tree/ClickHandlers/ExpandNodeClickHandler.cs index 41b14f13..7e7977c3 100644 --- a/mRemoteNG/Tree/ClickHandlers/ExpandNodeClickHandler.cs +++ b/mRemoteNG/Tree/ClickHandlers/ExpandNodeClickHandler.cs @@ -19,7 +19,7 @@ namespace mRemoteNG.Tree.ClickHandlers public void Execute(ConnectionInfo clickedNode) { - var clickedNodeAsContainer = clickedNode as ContainerInfo; + ContainerInfo clickedNodeAsContainer = clickedNode as ContainerInfo; if (clickedNodeAsContainer == null) return; _connectionTree.ToggleExpansion(clickedNodeAsContainer); } diff --git a/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs b/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs index 327b0bde..34ee9bc9 100644 --- a/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs +++ b/mRemoteNG/Tree/ClickHandlers/TreeNodeCompositeClickHandler.cs @@ -15,7 +15,7 @@ namespace mRemoteNG.Tree.ClickHandlers { if (clickedNode == null) throw new ArgumentNullException(nameof(clickedNode)); - foreach (var handler in ClickHandlers) + foreach (ITreeNodeClickHandler handler in ClickHandlers) { handler.Execute(clickedNode); } diff --git a/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs b/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs index a70d802a..480aa010 100644 --- a/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs +++ b/mRemoteNG/Tree/ConnectionTreeDragAndDropHandler.cs @@ -23,7 +23,7 @@ namespace mRemoteNG.Tree public void HandleEvent_ModelDropped(object sender, ModelDropEventArgs e) { if (!(e.TargetModel is ConnectionInfo dropTarget)) return; - foreach(var dropSource in e.SourceModels.Cast()) + foreach(ConnectionInfo dropSource in e.SourceModels.Cast()) { DropModel(dropSource, dropTarget, e.DropTargetLocation); } @@ -76,9 +76,9 @@ namespace mRemoteNG.Tree _enableFeedback = true; _currentFeedbackColor = DropDeniedFeedbackColor; _infoMessage = null; - foreach (var dropSource in e.SourceModels.Cast()) + foreach (ConnectionInfo dropSource in e.SourceModels.Cast()) { - var dropTarget = e.TargetModel as ConnectionInfo; + ConnectionInfo dropTarget = e.TargetModel as ConnectionInfo; e.Effect = CanModelDrop(dropSource, dropTarget, e.DropTargetLocation); e.InfoMessage = _infoMessage; @@ -92,7 +92,7 @@ namespace mRemoteNG.Tree ConnectionInfo dropTarget, DropTargetLocation dropTargetLocation) { - var dragDropEffect = DragDropEffects.None; + DragDropEffects dragDropEffect = DragDropEffects.None; if (!NodeIsDraggable(dropSource)) { _infoMessage = Language.NodeNotDraggable; @@ -115,7 +115,7 @@ namespace mRemoteNG.Tree private DragDropEffects HandleCanDropOnItem(ConnectionInfo dropSource, ConnectionInfo dropTarget) { - var dragDropEffect = DragDropEffects.None; + DragDropEffects dragDropEffect = DragDropEffects.None; if (dropTarget is ContainerInfo && !(dropTarget is RootPuttySessionsNodeInfo)) { if (!IsValidDrag(dropSource, dropTarget)) return dragDropEffect; @@ -132,7 +132,7 @@ namespace mRemoteNG.Tree private DragDropEffects HandleCanDropBetweenItems(ConnectionInfo dropSource, ConnectionInfo dropTarget) { - var dragDropEffect = DragDropEffects.None; + DragDropEffects dragDropEffect = DragDropEffects.None; if (AncestorDraggingOntoChild(dropSource, dropTarget)) _infoMessage = Language.NodeCannotDragParentOnChild; else if (dropTarget is PuttySessionInfo || dropTarget is RootNodeInfo) @@ -148,7 +148,7 @@ namespace mRemoteNG.Tree private bool IsValidDrag(ConnectionInfo dropSource, ConnectionInfo dropTarget) { - var validDrag = false; + bool validDrag = false; if (NodeDraggingOntoSelf(dropSource, dropTarget)) _infoMessage = Language.NodeCannotDragOnSelf; else if (AncestorDraggingOntoChild(dropSource, dropTarget)) diff --git a/mRemoteNG/Tree/ConnectionTreeModel.cs b/mRemoteNG/Tree/ConnectionTreeModel.cs index 676ef130..95f9a53e 100644 --- a/mRemoteNG/Tree/ConnectionTreeModel.cs +++ b/mRemoteNG/Tree/ConnectionTreeModel.cs @@ -13,7 +13,7 @@ namespace mRemoteNG.Tree [SupportedOSPlatform("windows")] public sealed class ConnectionTreeModel : INotifyCollectionChanged, INotifyPropertyChanged { - public List RootNodes { get; } = new List(); + public List RootNodes { get; } = []; public void AddRootNode(ContainerInfo rootNode) { @@ -39,8 +39,8 @@ namespace mRemoteNG.Tree public IReadOnlyList GetRecursiveChildList() { - var list = new List(); - foreach (var rootNode in RootNodes) + List list = new(); + foreach (ContainerInfo rootNode in RootNodes) { list.AddRange(GetRecursiveChildList(rootNode)); } diff --git a/mRemoteNG/Tree/NodeSearcher.cs b/mRemoteNG/Tree/NodeSearcher.cs index 655ab8bc..51782f9e 100644 --- a/mRemoteNG/Tree/NodeSearcher.cs +++ b/mRemoteNG/Tree/NodeSearcher.cs @@ -24,9 +24,9 @@ namespace mRemoteNG.Tree { ResetMatches(); if (searchText == "") return Matches; - var nodes = _connectionTreeModel.GetRecursiveChildList(); - var searchTextLower = searchText.ToLowerInvariant(); - foreach (var node in nodes) + IReadOnlyList nodes = _connectionTreeModel.GetRecursiveChildList(); + string searchTextLower = searchText.ToLowerInvariant(); + foreach (ConnectionInfo node in nodes) { if (node.Name.ToLowerInvariant().Contains(searchTextLower) || node.Description.ToLowerInvariant().Contains(searchTextLower) || @@ -41,7 +41,7 @@ namespace mRemoteNG.Tree public ConnectionInfo NextMatch() { - var currentMatchIndex = Matches.IndexOf(CurrentMatch); + int currentMatchIndex = Matches.IndexOf(CurrentMatch); if (!CurrentMatchIsTheLastMatchInTheList()) CurrentMatch = Matches[currentMatchIndex + 1]; return CurrentMatch; @@ -49,13 +49,13 @@ namespace mRemoteNG.Tree private bool CurrentMatchIsTheLastMatchInTheList() { - var currentMatchIndex = Matches.IndexOf(CurrentMatch); + int currentMatchIndex = Matches.IndexOf(CurrentMatch); return currentMatchIndex >= Matches.Count - 1; } public ConnectionInfo PreviousMatch() { - var currentMatchIndex = Matches.IndexOf(CurrentMatch); + int currentMatchIndex = Matches.IndexOf(CurrentMatch); if (!CurrentMatchIsTheFirstMatchInTheList()) CurrentMatch = Matches[currentMatchIndex - 1]; return CurrentMatch; @@ -63,13 +63,13 @@ namespace mRemoteNG.Tree private bool CurrentMatchIsTheFirstMatchInTheList() { - var currentMatchIndex = Matches.IndexOf(CurrentMatch); + int currentMatchIndex = Matches.IndexOf(CurrentMatch); return currentMatchIndex <= 0; } private void ResetMatches() { - Matches = new List(); + Matches = []; CurrentMatch = null; } } diff --git a/mRemoteNG/Tree/PreviousSessionOpener.cs b/mRemoteNG/Tree/PreviousSessionOpener.cs index 111fe87f..903c5306 100644 --- a/mRemoteNG/Tree/PreviousSessionOpener.cs +++ b/mRemoteNG/Tree/PreviousSessionOpener.cs @@ -21,15 +21,15 @@ namespace mRemoteNG.Tree public void Execute(IConnectionTree connectionTree) { - var connectionInfoList = connectionTree.GetRootConnectionNode().GetRecursiveChildList() + System.Collections.Generic.IEnumerable connectionInfoList = connectionTree.GetRootConnectionNode().GetRecursiveChildList() .Where(node => !(node is ContainerInfo)); - var previouslyOpenedConnections = connectionInfoList + System.Collections.Generic.IEnumerable previouslyOpenedConnections = connectionInfoList .Where(item => item.PleaseConnect && //ignore items that have already connected !_connectionInitiator.ActiveConnections.Contains(item.ConstantID)); - foreach (var connectionInfo in previouslyOpenedConnections) + foreach (ConnectionInfo connectionInfo in previouslyOpenedConnections) { _connectionInitiator.OpenConnection(connectionInfo); } diff --git a/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs b/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs index 6ba25e52..d4099ba2 100644 --- a/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs +++ b/mRemoteNG/Tree/PreviouslyOpenedFolderExpander.cs @@ -11,10 +11,10 @@ namespace mRemoteNG.Tree { public void Execute(IConnectionTree connectionTree) { - var rootNode = connectionTree.GetRootConnectionNode(); - var containerList = connectionTree.ConnectionTreeModel.GetRecursiveChildList(rootNode) + Root.RootNodeInfo rootNode = connectionTree.GetRootConnectionNode(); + System.Collections.Generic.IEnumerable containerList = connectionTree.ConnectionTreeModel.GetRecursiveChildList(rootNode) .OfType(); - var previouslyExpandedNodes = containerList.Where(container => container.IsExpanded); + System.Collections.Generic.IEnumerable previouslyExpandedNodes = containerList.Where(container => container.IsExpanded); connectionTree.ExpandedObjects = previouslyExpandedNodes; connectionTree.InvokeRebuildAll(true); } diff --git a/mRemoteNG/Tree/RootNodeExpander.cs b/mRemoteNG/Tree/RootNodeExpander.cs index ec6010af..66d69d49 100644 --- a/mRemoteNG/Tree/RootNodeExpander.cs +++ b/mRemoteNG/Tree/RootNodeExpander.cs @@ -7,7 +7,7 @@ namespace mRemoteNG.Tree { public void Execute(IConnectionTree connectionTree) { - var rootConnectionNode = connectionTree.GetRootConnectionNode(); + Root.RootNodeInfo rootConnectionNode = connectionTree.GetRootConnectionNode(); connectionTree.InvokeExpand(rootConnectionNode); } } diff --git a/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs b/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs index 04bc87e3..cbbf23fd 100644 --- a/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs +++ b/mRemoteNG/Tree/SelectedConnectionDeletionConfirmer.cs @@ -22,7 +22,7 @@ namespace mRemoteNG.Tree if (deletionTarget == null) return false; - var deletionTargetAsContainer = deletionTarget as ContainerInfo; + ContainerInfo deletionTargetAsContainer = deletionTarget as ContainerInfo; if (deletionTargetAsContainer != null) return deletionTargetAsContainer.HasChildren() ? UserConfirmsNonEmptyFolderDeletion(deletionTargetAsContainer) @@ -32,25 +32,25 @@ namespace mRemoteNG.Tree private bool UserConfirmsEmptyFolderDeletion(AbstractConnectionRecord deletionTarget) { - var messagePrompt = string.Format(Language.ConfirmDeleteNodeFolder, deletionTarget.Name); + string messagePrompt = string.Format(Language.ConfirmDeleteNodeFolder, deletionTarget.Name); return PromptUser(messagePrompt); } private bool UserConfirmsNonEmptyFolderDeletion(AbstractConnectionRecord deletionTarget) { - var messagePrompt = string.Format(Language.ConfirmDeleteNodeFolderNotEmpty, deletionTarget.Name); + string messagePrompt = string.Format(Language.ConfirmDeleteNodeFolderNotEmpty, deletionTarget.Name); return PromptUser(messagePrompt); } private bool UserConfirmsConnectionDeletion(AbstractConnectionRecord deletionTarget) { - var messagePrompt = string.Format(Language.ConfirmDeleteNodeConnection, deletionTarget.Name); + string messagePrompt = string.Format(Language.ConfirmDeleteNodeConnection, deletionTarget.Name); return PromptUser(messagePrompt); } private bool PromptUser(string promptMessage) { - var msgBoxResponse = _confirmationFunc(promptMessage); + DialogResult msgBoxResponse = _confirmationFunc(promptMessage); return msgBoxResponse == DialogResult.Yes; } } diff --git a/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs b/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs index 38a26569..472b7b9b 100644 --- a/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs +++ b/mRemoteNG/UI/Controls/Adapters/CredentialRecordListAdaptor.cs @@ -23,9 +23,9 @@ namespace mRemoteNG.UI.Controls.Adapters _editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; if (_editorService == null) return value; - var credentialManager = Runtime.CredentialProviderCatalog; + Credential.ICredentialRepositoryList credentialManager = Runtime.CredentialProviderCatalog; - var listBox = new CredentialRecordListBox(credentialManager.GetCredentialRecords()); + CredentialRecordListBox listBox = new(credentialManager.GetCredentialRecords()); listBox.SelectedValueChanged += ListBoxOnSelectedValueChanged; _editorService.DropDownControl(listBox); diff --git a/mRemoteNG/UI/Controls/ConnectionContextMenu.cs b/mRemoteNG/UI/Controls/ConnectionContextMenu.cs index dccb95f2..0538e945 100644 --- a/mRemoteNG/UI/Controls/ConnectionContextMenu.cs +++ b/mRemoteNG/UI/Controls/ConnectionContextMenu.cs @@ -575,7 +575,7 @@ namespace mRemoteNG.UI.Controls _cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = false; _cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = false; - var hasOpenConnections = containerInfo.Children.Any(child => child.OpenConnections.Count > 0); + bool hasOpenConnections = containerInfo.Children.Any(child => child.OpenConnections.Count > 0); _cMenTreeDisconnect.Enabled = hasOpenConnections; _cMenTreeToolsTransferFile.Enabled = false; @@ -655,7 +655,7 @@ namespace mRemoteNG.UI.Controls { foreach (ToolStripItem item in items) { - var menuItem = item as ToolStripMenuItem; + ToolStripMenuItem menuItem = item as ToolStripMenuItem; if (menuItem == null) { continue; @@ -677,7 +677,7 @@ namespace mRemoteNG.UI.Controls foreach (ExternalTool extA in Runtime.ExternalToolsService.ExternalTools) { - var menuItem = new ToolStripMenuItem + ToolStripMenuItem menuItem = new() { Text = extA.DisplayName, Tag = extA, @@ -699,7 +699,7 @@ namespace mRemoteNG.UI.Controls private void ResetExternalAppMenu() { if (_cMenTreeToolsExternalApps.DropDownItems.Count <= 0) return; - for (var i = _cMenTreeToolsExternalApps.DropDownItems.Count - 1; i >= 0; i--) + for (int i = _cMenTreeToolsExternalApps.DropDownItems.Count - 1; i >= 0; i--) _cMenTreeToolsExternalApps.DropDownItems[i].Dispose(); _cMenTreeToolsExternalApps.DropDownItems.Clear(); @@ -709,7 +709,7 @@ namespace mRemoteNG.UI.Controls private void OnConnectClicked(object sender, EventArgs e) { - var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; + ContainerInfo selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; if (selectedNodeAsContainer != null) Runtime.ConnectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.DoNotJump); else @@ -718,7 +718,7 @@ namespace mRemoteNG.UI.Controls private void OnConnectToConsoleSessionClicked(object sender, EventArgs e) { - var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; + ContainerInfo selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; if (selectedNodeAsContainer != null) Runtime.ConnectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.UseConsoleSession | @@ -732,7 +732,7 @@ namespace mRemoteNG.UI.Controls private void OnDontConnectToConsoleSessionClicked(object sender, EventArgs e) { - var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; + ContainerInfo selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; if (selectedNodeAsContainer != null) Runtime.ConnectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.DontUseConsoleSession | @@ -745,7 +745,7 @@ namespace mRemoteNG.UI.Controls private void OnConnectInFullscreenClicked(object sender, EventArgs e) { - var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; + ContainerInfo selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; if (selectedNodeAsContainer != null) Runtime.ConnectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.Fullscreen | ConnectionInfo.Force.DoNotJump); @@ -756,7 +756,7 @@ namespace mRemoteNG.UI.Controls private void OnConnectWithNoCredentialsClick(object sender, EventArgs e) { - var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; + ContainerInfo selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; if (selectedNodeAsContainer != null) Runtime.ConnectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.NoCredentials); else @@ -765,7 +765,7 @@ namespace mRemoteNG.UI.Controls private void OnChoosePanelBeforeConnectingClicked(object sender, EventArgs e) { - var selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; + ContainerInfo selectedNodeAsContainer = _connectionTree.SelectedNode as ContainerInfo; if (selectedNodeAsContainer != null) Runtime.ConnectionInitiator.OpenConnection(selectedNodeAsContainer, ConnectionInfo.Force.OverridePanel | @@ -778,7 +778,7 @@ namespace mRemoteNG.UI.Controls private void ConnectWithOptionsViewOnlyOnClick(object sender, EventArgs e) { - var connectionTarget = _connectionTree.SelectedNode as ContainerInfo + ConnectionInfo connectionTarget = _connectionTree.SelectedNode as ContainerInfo ?? _connectionTree.SelectedNode; Runtime.ConnectionInitiator.OpenConnection(connectionTarget, ConnectionInfo.Force.ViewOnly); } @@ -793,12 +793,12 @@ namespace mRemoteNG.UI.Controls try { if (connectionInfo == null) return; - var nodeAsContainer = connectionInfo as ContainerInfo; + ContainerInfo nodeAsContainer = connectionInfo as ContainerInfo; if (nodeAsContainer != null) { - foreach (var child in nodeAsContainer.Children) + foreach (ConnectionInfo child in nodeAsContainer.Children) { - for (var i = 0; i <= child.OpenConnections.Count - 1; i++) + for (int i = 0; i <= child.OpenConnections.Count - 1; i++) { child.OpenConnections[i].Disconnect(); } @@ -806,7 +806,7 @@ namespace mRemoteNG.UI.Controls } else { - for (var i = 0; i <= connectionInfo.OpenConnections.Count - 1; i++) + for (int i = 0; i <= connectionInfo.OpenConnections.Count - 1; i++) { connectionInfo.OpenConnections[i].Disconnect(); } diff --git a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs index 2a1d1faf..7a354509 100644 --- a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs +++ b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs @@ -24,7 +24,7 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid [SupportedOSPlatform("windows")] public partial class ConnectionInfoPropertyGrid : FilteredPropertyGrid.FilteredPropertyGrid { - private readonly Dictionary> _propertyCache = new Dictionary>(); + private readonly Dictionary> _propertyCache = []; private ConnectionInfo _selectedConnectionInfo; private PropertyMode _propertyMode; @@ -150,7 +150,7 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid .Select(property => property.Name) .ToArray(); - var strHide = new List(); + List strHide = new(); if (PropertyMode == PropertyMode.Connection) { @@ -198,11 +198,11 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid private IEnumerable GetPropertiesForGridObject(object currentGridObject) { - if (_propertyCache.TryGetValue(currentGridObject.GetType(), out var properties)) + if (_propertyCache.TryGetValue(currentGridObject.GetType(), out IEnumerable properties)) return properties; - var type = currentGridObject.GetType(); - var props = type.GetProperties(); + Type type = currentGridObject.GetType(); + PropertyInfo[] props = type.GetProperties(); _propertyCache.Add(type, props); return props; @@ -219,7 +219,7 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid private List SpecialExternalAddressProviderExclusions() { - var strHide = new List(); + List strHide = new(); // aws if (SelectedConnectionInfo.ExternalAddressProvider != ExternalAddressProvider.AmazonWebServices) @@ -232,7 +232,7 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid private List SpecialExternalCredentialProviderExclusions() { - var strHide = new List(); + List strHide = new(); if (SelectedConnectionInfo.ExternalCredentialProvider == ExternalCredentialProvider.None) { @@ -253,7 +253,7 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid /// private List SpecialRdpExclusions() { - var strHide = new List(); + List strHide = new(); if (SelectedConnectionInfo.RDPMinutesToIdleTimeout <= 0) { @@ -322,7 +322,7 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid private List SpecialVncExclusions() { - var strHide = new List(); + List strHide = new(); if (SelectedConnectionInfo.VNCAuthMode == ProtocolVNC.AuthMode.AuthVNC) { strHide.Add(nameof(AbstractConnectionRecord.Username)); @@ -372,8 +372,8 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid if (rootInfo.Password) { - var passwordName = Properties.OptionsDBsPage.Default.UseSQLServer ? Language.SQLServer.TrimEnd(':') : Path.GetFileName(Runtime.ConnectionsService.GetStartupConnectionFileName()); - var password = MiscTools.PasswordDialog(passwordName); + string passwordName = Properties.OptionsDBsPage.Default.UseSQLServer ? Language.SQLServer.TrimEnd(':') : Path.GetFileName(Runtime.ConnectionsService.GetStartupConnectionFileName()); + Optional password = MiscTools.PasswordDialog(passwordName); // operation cancelled, dont set a password if (!password.Any() || password.First().Length == 0) diff --git a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs index ee944438..169d27d1 100644 --- a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs +++ b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTree.cs @@ -25,13 +25,12 @@ namespace mRemoteNG.UI.Controls.ConnectionTree [SupportedOSPlatform("windows")] public partial class ConnectionTree : TreeListView, IConnectionTree { - private readonly ConnectionTreeDragAndDropHandler _dragAndDropHandler = new ConnectionTreeDragAndDropHandler(); + private readonly ConnectionTreeDragAndDropHandler _dragAndDropHandler = new(); private readonly PuttySessionsManager _puttySessionsManager = PuttySessionsManager.Instance; - private readonly StatusImageList _statusImageList = new StatusImageList(); + private readonly StatusImageList _statusImageList = new(); private ThemeManager _themeManager; - private readonly ConnectionTreeSearchTextFilter _connectionTreeSearchTextFilter = - new ConnectionTreeSearchTextFilter(); + private readonly ConnectionTreeSearchTextFilter _connectionTreeSearchTextFilter = new(); private bool _nodeInEditMode; private bool _allowEdit; @@ -44,13 +43,11 @@ namespace mRemoteNG.UI.Controls.ConnectionTree public IConfirm NodeDeletionConfirmer { get; set; } = new AlwaysConfirmYes(); - public IEnumerable PostSetupActions { get; set; } = new IConnectionTreeDelegate[0]; + public IEnumerable PostSetupActions { get; set; } = Array.Empty(); - public ITreeNodeClickHandler DoubleClickHandler { get; set; } = - new TreeNodeCompositeClickHandler(); + public ITreeNodeClickHandler DoubleClickHandler { get; set; } = new TreeNodeCompositeClickHandler(); - public ITreeNodeClickHandler SingleClickHandler { get; set; } = - new TreeNodeCompositeClickHandler(); + public ITreeNodeClickHandler SingleClickHandler { get; set; } = new TreeNodeCompositeClickHandler(); public ConnectionTreeModel ConnectionTreeModel { @@ -58,8 +55,10 @@ namespace mRemoteNG.UI.Controls.ConnectionTree set { if (_connectionTreeModel == value) + { return; - + } + UnregisterModelUpdateHandlers(_connectionTreeModel); _connectionTreeModel = value; PopulateTreeView(value); @@ -86,7 +85,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree if (!_themeManager.ActiveAndExtended) return; - var themePalette = _themeManager.ActiveTheme.ExtendedPalette; + ExtendedColorPalette themePalette = _themeManager.ActiveTheme.ExtendedPalette; BackColor = themePalette.getColor("TreeView_Background"); ForeColor = themePalette.getColor("TreeView_Foreground"); @@ -131,7 +130,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree { CanExpandGetter = item => { - var itemAsContainer = item as ContainerInfo; + ContainerInfo itemAsContainer = item as ContainerInfo; return itemAsContainer?.Children.Count > 0; }; ChildrenGetter = item => ((ContainerInfo)item).Children; @@ -149,20 +148,20 @@ namespace mRemoteNG.UI.Controls.ConnectionTree { Collapsed += (sender, args) => { - if (!(args.Model is ContainerInfo container)) return; + if (args.Model is not ContainerInfo container) return; container.IsExpanded = false; AutoResizeColumn(Columns[0]); }; Expanded += (sender, args) => { - if (!(args.Model is ContainerInfo container)) return; + if (args.Model is not ContainerInfo container) return; container.IsExpanded = true; AutoResizeColumn(Columns[0]); }; - SelectionChanged += tvConnections_AfterSelect; + SelectionChanged += TvConnections_AfterSelect; MouseDoubleClick += OnMouse_DoubleClick; MouseClick += OnMouse_SingleClick; - CellToolTipShowing += tvConnections_CellToolTipShowing; + CellToolTipShowing += TvConnections_CellToolTipShowing; ModelCanDrop += _dragAndDropHandler.HandleEvent_ModelCanDrop; ModelDropped += _dragAndDropHandler.HandleEvent_ModelDropped; BeforeLabelEdit += OnBeforeLabelEdit; @@ -180,23 +179,19 @@ namespace mRemoteNG.UI.Controls.ConnectionTree return; } - var longestIndentationAndTextWidth = int.MinValue; - var horizontalScrollOffset = LowLevelScrollPosition.X; + int longestIndentationAndTextWidth = int.MinValue; + int horizontalScrollOffset = LowLevelScrollPosition.X; const int padding = 10; - for (var i = 0; i < Items.Count; i++) + for (int i = 0; i < Items.Count; i++) { - var rowIndentation = Items[i].Position.X; - var rowTextWidth = TextRenderer.MeasureText(Items[i].Text, Font).Width; + int rowIndentation = Items[i].Position.X; + int rowTextWidth = TextRenderer.MeasureText(Items[i].Text, Font).Width; - longestIndentationAndTextWidth = - Math.Max(rowIndentation + rowTextWidth, longestIndentationAndTextWidth); + longestIndentationAndTextWidth = Math.Max(rowIndentation + rowTextWidth, longestIndentationAndTextWidth); } - column.Width = longestIndentationAndTextWidth + - SmallImageSize.Width + - horizontalScrollOffset + - padding; + column.Width = longestIndentationAndTextWidth + SmallImageSize.Width + horizontalScrollOffset + padding; } private void PopulateTreeView(ConnectionTreeModel newModel) @@ -235,7 +230,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree { // for some reason property changed events are getting triggered twice for each changed property. should be just once. cant find source of duplication // Removed "TO DO" from above comment. Per #142 it apperas that this no longer occurs with ObjectListView 2.9.1 - var property = propertyChangedEventArgs.PropertyName; + string property = propertyChangedEventArgs.PropertyName; if (property != nameof(ConnectionInfo.Name) && property != nameof(ConnectionInfo.OpenConnections) && property != nameof(ConnectionInfo.Icon)) @@ -243,7 +238,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree return; } - if (!(sender is ConnectionInfo senderAsConnectionInfo)) + if (sender is not ConnectionInfo senderAsConnectionInfo) return; RefreshObject(senderAsConnectionInfo); @@ -252,7 +247,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree private void ExecutePostSetupActions() { - foreach (var action in PostSetupActions) + foreach (IConnectionTreeDelegate action in PostSetupActions) { action.Execute(this); } @@ -324,8 +319,8 @@ namespace mRemoteNG.UI.Controls.ConnectionTree ConnectionInfo parentNode = SelectedNode ?? GetRootConnectionNode(); DefaultConnectionInfo.Instance.SaveTo(newNode); DefaultConnectionInheritance.Instance.SaveTo(newNode.Inheritance); - var selectedContainer = parentNode as ContainerInfo; - var parent = selectedContainer ?? parentNode?.Parent; + ContainerInfo selectedContainer = parentNode as ContainerInfo; + ContainerInfo parent = selectedContainer ?? parentNode?.Parent; newNode.SetParent(parent); Expand(parent); SelectObject(newNode, true); @@ -339,11 +334,11 @@ namespace mRemoteNG.UI.Controls.ConnectionTree if (SelectedNode == null) return; - var selectedNodeType = SelectedNode.GetTreeNodeType(); + TreeNodeType selectedNodeType = SelectedNode.GetTreeNodeType(); if (selectedNodeType != TreeNodeType.Connection && selectedNodeType != TreeNodeType.Container) return; - var newNode = SelectedNode.Clone(); + ConnectionInfo newNode = SelectedNode.Clone(); SelectedNode.Parent.AddChildBelow(newNode, SelectedNode); newNode.Parent.SetChildBelow(newNode, SelectedNode); } @@ -372,7 +367,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree if (SelectedNode == null) return; - var textToCopy = SelectedNode.IsContainer ? SelectedNode.Name : SelectedNode.Hostname; + string textToCopy = SelectedNode.IsContainer ? SelectedNode.Name : SelectedNode.Hostname; if (string.IsNullOrEmpty(textToCopy)) return; @@ -382,8 +377,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree public void SortRecursive(ConnectionInfo sortTarget, ListSortDirection sortDirection) { - if (sortTarget == null) - sortTarget = GetRootConnectionNode(); + sortTarget ??= GetRootConnectionNode(); Runtime.ConnectionsService.BeginBatchingSaves(); @@ -429,8 +423,8 @@ namespace mRemoteNG.UI.Controls.ConnectionTree { // disable filtering if necessary. prevents RefreshObjects from // throwing an exception - var filteringEnabled = IsFiltering; - var filter = ModelFilter; + bool filteringEnabled = IsFiltering; + IModelFilter filter = ModelFilter; if (filteringEnabled) { ResetColumnFiltering(); @@ -451,7 +445,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree AutoResizeColumn(Columns[0]); } - private void tvConnections_AfterSelect(object sender, EventArgs e) + private void TvConnections_AfterSelect(object sender, EventArgs e) { try { @@ -459,9 +453,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree } catch (Exception ex) { - Runtime.MessageCollector.AddExceptionStackTrace( - "tvConnections_AfterSelect (UI.Window.ConnectionTreeWindow) failed", - ex); + Runtime.MessageCollector.AddExceptionStackTrace("tvConnections_AfterSelect (UI.Window.ConnectionTreeWindow) failed", ex); } } @@ -469,9 +461,8 @@ namespace mRemoteNG.UI.Controls.ConnectionTree { if (mouseEventArgs.Clicks < 2) return; // ReSharper disable once NotAccessedVariable - OLVColumn column; - var listItem = GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out column); - if (!(listItem?.RowObject is ConnectionInfo clickedNode)) return; + OLVListItem listItem = GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out _); + if (listItem?.RowObject is not ConnectionInfo clickedNode) return; DoubleClickHandler.Execute(clickedNode); } @@ -479,13 +470,12 @@ namespace mRemoteNG.UI.Controls.ConnectionTree { if (mouseEventArgs.Clicks > 1) return; // ReSharper disable once NotAccessedVariable - OLVColumn column; - var listItem = GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out column); - if (!(listItem?.RowObject is ConnectionInfo clickedNode)) return; + OLVListItem listItem = GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out _); + if (listItem?.RowObject is not ConnectionInfo clickedNode) return; SingleClickHandler.Execute(clickedNode); } - private void tvConnections_CellToolTipShowing(object sender, ToolTipShowingEventArgs e) + private void TvConnections_CellToolTipShowing(object sender, ToolTipShowingEventArgs e) { try { @@ -496,7 +486,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree return; } - var nodeProducingTooltip = (ConnectionInfo)e.Model; + ConnectionInfo nodeProducingTooltip = (ConnectionInfo)e.Model; e.Text = nodeProducingTooltip.Description; } catch (Exception ex) @@ -509,7 +499,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree private void OnBeforeLabelEdit(object sender, LabelEditEventArgs e) { - if (_nodeInEditMode || !(sender is ConnectionTree)) + if (_nodeInEditMode || sender is not ConnectionTree) return; if (!_allowEdit || SelectedNode is PuttySessionInfo || SelectedNode is RootPuttySessionsNodeInfo) diff --git a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs index f137de52..c0195d7f 100644 --- a/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs +++ b/mRemoteNG/UI/Controls/ConnectionTree/ConnectionTreeSearchTextFilter.cs @@ -15,7 +15,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree /// always be included in the output, regardless of matching /// the desired . /// - public List SpecialInclusionList { get; } = new List(); + public List SpecialInclusionList { get; } = []; public bool Filter(object modelObject) { @@ -25,7 +25,7 @@ namespace mRemoteNG.UI.Controls.ConnectionTree if (SpecialInclusionList.Contains(objectAsConnectionInfo)) return true; - var filterTextLower = FilterText.ToLowerInvariant(); + string filterTextLower = FilterText.ToLowerInvariant(); return objectAsConnectionInfo.Name.ToLowerInvariant().Contains(filterTextLower) || objectAsConnectionInfo.Hostname.ToLowerInvariant().Contains(filterTextLower) || diff --git a/mRemoteNG/UI/Controls/CredentialRecordComboBox.cs b/mRemoteNG/UI/Controls/CredentialRecordComboBox.cs index 143ca850..5eb4a038 100644 --- a/mRemoteNG/UI/Controls/CredentialRecordComboBox.cs +++ b/mRemoteNG/UI/Controls/CredentialRecordComboBox.cs @@ -18,7 +18,7 @@ namespace mRemoteNG.UI.Controls { if (credentialRecords == null) return; Items.Clear(); - foreach (var credential in credentialRecords) + foreach (ICredentialRecord credential in credentialRecords) Items.Add(credential); } } diff --git a/mRemoteNG/UI/Controls/CredentialRecordListBox.cs b/mRemoteNG/UI/Controls/CredentialRecordListBox.cs index e3c46f7c..4db8dbb6 100644 --- a/mRemoteNG/UI/Controls/CredentialRecordListBox.cs +++ b/mRemoteNG/UI/Controls/CredentialRecordListBox.cs @@ -33,7 +33,7 @@ namespace mRemoteNG.UI.Controls Items.Add(NoneSelection); Items.Add(AddNewSelection); - foreach (var credential in listOfCredentialRecords) + foreach (ICredentialRecord credential in listOfCredentialRecords) { Items.Add(credential); } diff --git a/mRemoteNG/UI/Controls/CredentialRecordListView.cs b/mRemoteNG/UI/Controls/CredentialRecordListView.cs index c51cea3a..5c78f50c 100644 --- a/mRemoteNG/UI/Controls/CredentialRecordListView.cs +++ b/mRemoteNG/UI/Controls/CredentialRecordListView.cs @@ -62,10 +62,10 @@ namespace mRemoteNG.UI.Controls private void SetObjectList() { - var objects = new Dictionary(); - foreach (var repository in _credentialRepositoryList.CredentialProviders) + Dictionary objects = new(); + foreach (ICredentialRepository repository in _credentialRepositoryList.CredentialProviders) { - foreach (var credential in repository.CredentialRecords) + foreach (ICredentialRecord credential in repository.CredentialRecords) objects.Add(credential, repository); } @@ -81,37 +81,37 @@ namespace mRemoteNG.UI.Controls private object CredentialIdAspectGetter(object rowObject) { - var keyValuePair = CastRowObject(rowObject); + KeyValuePair keyValuePair = CastRowObject(rowObject); return keyValuePair.Key.Id; } private object CredentialTitleAspectGetter(object rowObject) { - var keyValuePair = CastRowObject(rowObject); + KeyValuePair keyValuePair = CastRowObject(rowObject); return keyValuePair.Key.Title; } private object CredentialUsernameAspectGetter(object rowObject) { - var keyValuePair = CastRowObject(rowObject); + KeyValuePair keyValuePair = CastRowObject(rowObject); return keyValuePair.Key.Username; } private object CredentialDomainAspectGetter(object rowObject) { - var keyValuePair = CastRowObject(rowObject); + KeyValuePair keyValuePair = CastRowObject(rowObject); return keyValuePair.Key.Domain; } private object CredentialSourceAspectGetter(object rowObject) { - var keyValuePair = CastRowObject(rowObject); + KeyValuePair keyValuePair = CastRowObject(rowObject); return keyValuePair.Value.Config.Source; } private object RepoTitleAspectGetter(object rowObject) { - var keyValuePair = CastRowObject(rowObject); + KeyValuePair keyValuePair = CastRowObject(rowObject); return keyValuePair.Value.Config.Title; } @@ -119,7 +119,7 @@ namespace mRemoteNG.UI.Controls { if (!(model is KeyValuePair)) return default(KeyValuePair); - var keyValuePair = (KeyValuePair)model; + KeyValuePair keyValuePair = (KeyValuePair)model; return keyValuePair; } diff --git a/mRemoteNG/UI/Controls/CredentialRepositoryListView.cs b/mRemoteNG/UI/Controls/CredentialRepositoryListView.cs index 5225eb8b..0c8336f7 100644 --- a/mRemoteNG/UI/Controls/CredentialRepositoryListView.cs +++ b/mRemoteNG/UI/Controls/CredentialRepositoryListView.cs @@ -38,7 +38,7 @@ namespace mRemoteNG.UI.Controls public void RefreshObjects() { - var repos = CredentialRepositoryList.CredentialProviders.ToList(); + List repos = CredentialRepositoryList.CredentialProviders.ToList(); objectListView1.RefreshObjects(repos); } @@ -61,7 +61,7 @@ namespace mRemoteNG.UI.Controls private void SetListObjects(IEnumerable repositories) { - var filteredRepositories = RepositoryFilter == null ? repositories : repositories.Where(RepositoryFilter); + IEnumerable filteredRepositories = RepositoryFilter == null ? repositories : repositories.Where(RepositoryFilter); objectListView1.SetObjects(filteredRepositories); } @@ -69,8 +69,8 @@ namespace mRemoteNG.UI.Controls { if (mouseEventArgs.Clicks < 2) return; OLVColumn column; - var listItem = objectListView1.GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out column); - var clickedNode = listItem.RowObject as ICredentialRepository; + OLVListItem listItem = objectListView1.GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out column); + ICredentialRepository clickedNode = listItem.RowObject as ICredentialRepository; if (clickedNode == null) return; DoubleClickHandler?.Invoke(clickedNode); } diff --git a/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs b/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs index fdb7d190..26af61e8 100644 --- a/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs +++ b/mRemoteNG/UI/Controls/ExternalToolsToolStrip.cs @@ -68,14 +68,14 @@ namespace mRemoteNG.UI.Controls { SuspendLayout(); - for (var index = Items.Count - 1; index >= 0; index--) + for (int index = Items.Count - 1; index >= 0; index--) Items[index].Dispose(); Items.Clear(); - foreach (var tool in Runtime.ExternalToolsService.ExternalTools) + foreach (ExternalTool tool in Runtime.ExternalToolsService.ExternalTools) { if (!tool.ShowOnToolbar) continue; - var button = (ToolStripButton)Items.Add(tool.DisplayName, tool.Image, TsExtAppEntry_Click); + ToolStripButton button = (ToolStripButton)Items.Add(tool.DisplayName, tool.Image, TsExtAppEntry_Click); if (CMenToolbarShowText.Checked) button.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; else @@ -98,9 +98,9 @@ namespace mRemoteNG.UI.Controls private static void TsExtAppEntry_Click(object sender, EventArgs e) { - var extA = (ExternalTool)((ToolStripButton)sender).Tag; + ExternalTool extA = (ExternalTool)((ToolStripButton)sender).Tag; - var selectedTreeNode = Windows.TreeForm.SelectedNode; + Connection.ConnectionInfo selectedTreeNode = Windows.TreeForm.SelectedNode; if (selectedTreeNode != null && selectedTreeNode.GetTreeNodeType() == TreeNodeType.Connection || selectedTreeNode.GetTreeNodeType() == TreeNodeType.PuttySession) extA.Start(selectedTreeNode); diff --git a/mRemoteNG/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs b/mRemoteNG/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs index 80e3ae41..fc8bcc97 100644 --- a/mRemoteNG/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs +++ b/mRemoteNG/UI/Controls/FilteredPropertyGrid/FilteredPropertyGrid.cs @@ -16,7 +16,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// Contain a reference to the collection of properties to show in the parent PropertyGrid. /// /// By default, m_PropertyDescriptors contain all the properties of the object. - readonly List _propertyDescriptors = new List(); + readonly List _propertyDescriptors = []; /// /// Contain a reference to the array of properties to display in the PropertyGrid. @@ -125,7 +125,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid } else if (_mWrapper.SelectedObject != value) { - var needrefresh = value?.GetType() != _mWrapper.SelectedObject?.GetType(); + bool needrefresh = value?.GetType() != _mWrapper.SelectedObject?.GetType(); _mWrapper.SelectedObject = value ?? new object(); if (needrefresh) RefreshProperties(); @@ -140,12 +140,12 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid public List GetVisibleGridItems() { - var gridRoot = SelectedGridItem; + GridItem gridRoot = SelectedGridItem; while (gridRoot.GridItemType != GridItemType.Root) { gridRoot = gridRoot.Parent; } - return GetVisibleGridItemsRecursive(gridRoot, new List()); + return GetVisibleGridItemsRecursive(gridRoot, []); } private List GetVisibleGridItemsRecursive(GridItem item, List gridItems) @@ -166,12 +166,12 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid public GridItem FindPreviousGridItemProperty(GridItem startItem) { - var gridItems = GetVisibleGridItems(); + List gridItems = GetVisibleGridItems(); if (gridItems.Count == 0 || startItem == null) return null; - var startIndex = gridItems.IndexOf(startItem); + int startIndex = gridItems.IndexOf(startItem); if (startItem.GridItemType == GridItemType.Property) { startIndex--; @@ -181,9 +181,9 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid } } - var previousIndex = 0; - var previousIndexValid = false; - for (var index = startIndex; index >= 0; index--) + int previousIndex = 0; + bool previousIndexValid = false; + for (int index = startIndex; index >= 0; index--) { if (gridItems[index].GridItemType != GridItemType.Property) continue; previousIndex = index; @@ -194,7 +194,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid if (previousIndexValid) return gridItems[previousIndex]; - for (var index = gridItems.Count - 1; index >= startIndex + 1; index--) + for (int index = gridItems.Count - 1; index >= startIndex + 1; index--) { if (gridItems[index].GridItemType != GridItemType.Property) continue; previousIndex = index; @@ -207,12 +207,12 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid public GridItem FindNextGridItemProperty(GridItem startItem) { - var gridItems = GetVisibleGridItems(); + List gridItems = GetVisibleGridItems(); if (gridItems.Count == 0 || startItem == null) return null; - var startIndex = gridItems.IndexOf(startItem); + int startIndex = gridItems.IndexOf(startItem); if (startItem.GridItemType == GridItemType.Property) { startIndex++; @@ -222,9 +222,9 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid } } - var nextIndex = 0; - var nextIndexValid = false; - for (var index = startIndex; index <= gridItems.Count - 1; index++) + int nextIndex = 0; + bool nextIndexValid = false; + for (int index = startIndex; index <= gridItems.Count - 1; index++) { if (gridItems[index].GridItemType != GridItemType.Property) continue; nextIndex = index; @@ -235,7 +235,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid if (nextIndexValid) return gridItems[nextIndex]; - for (var index = 0; index <= startIndex - 1; index++) + for (int index = 0; index <= startIndex - 1; index++) { if (gridItems[index].GridItemType != GridItemType.Property) continue; nextIndex = index; @@ -253,7 +253,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// public void SelectNextGridItem() { - var nextGridItem = FindNextGridItemProperty(SelectedGridItem); + GridItem nextGridItem = FindNextGridItemProperty(SelectedGridItem); if (nextGridItem != null) SelectedGridItem = nextGridItem; } @@ -265,7 +265,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// public void SelectPreviousGridItem() { - var previousGridItem = FindPreviousGridItemProperty(SelectedGridItem); + GridItem previousGridItem = FindPreviousGridItemProperty(SelectedGridItem); if (previousGridItem != null) SelectedGridItem = previousGridItem; } @@ -277,7 +277,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// public void SelectGridItem(string propertyName) { - var item = GetVisibleGridItems() + GridItem item = GetVisibleGridItems() .FirstOrDefault(gridItem => gridItem.PropertyDescriptor?.Name == propertyName); if (item != null) @@ -312,10 +312,10 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid // Display if necessary, some properties if (_mBrowsableProperties != null && _mBrowsableProperties.Length > 0) { - var allproperties = TypeDescriptor.GetProperties(_mWrapper.SelectedObject); - foreach (var propertyname in _mBrowsableProperties) + PropertyDescriptorCollection allproperties = TypeDescriptor.GetProperties(_mWrapper.SelectedObject); + foreach (string propertyname in _mBrowsableProperties) { - var property = allproperties[propertyname]; + PropertyDescriptor property = allproperties[propertyname]; if (property == null) throw new InvalidOperationException($"Property '{propertyname}' not found on object '{_mWrapper.GetClassName()}'"); @@ -328,7 +328,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid (_mBrowsableProperties == null || _mBrowsableProperties.Length == 0)) { // Fill the collection with all the properties. - var originalPropertyDescriptors = TypeDescriptor + IEnumerable originalPropertyDescriptors = TypeDescriptor .GetProperties(_mWrapper.SelectedObject) .OfType() .Where(PropertyDoesntHaveBrowsableFalseAttribute); @@ -346,9 +346,9 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid if (_mHiddenProperties != null && _mHiddenProperties.Length > 0) { // Remove from the list the properties that mustn't be displayed. - foreach (var propertyname in _mHiddenProperties) + foreach (string propertyname in _mHiddenProperties) { - var property = _propertyDescriptors.FirstOrDefault(p => p.Name == propertyname); + PropertyDescriptor property = _propertyDescriptors.FirstOrDefault(p => p.Name == propertyname); // Remove from the list the property HideProperty(property); @@ -374,7 +374,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// For better performance, include the BrowsableAttribute with true value. private void HideAttribute(Attribute attribute) { - var filteredoriginalpropertydescriptors = + PropertyDescriptorCollection filteredoriginalpropertydescriptors = TypeDescriptor.GetProperties(_mWrapper.SelectedObject, new[] {attribute}); if (filteredoriginalpropertydescriptors == null || filteredoriginalpropertydescriptors.Count == 0) throw new ArgumentException("Attribute not found", attribute.ToString()); @@ -389,7 +389,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// The attribute to be added. private void ShowAttribute(Attribute attribute) { - var filteredoriginalpropertydescriptors = + PropertyDescriptorCollection filteredoriginalpropertydescriptors = TypeDescriptor.GetProperties(_mWrapper.SelectedObject, new[] {attribute}); if (filteredoriginalpropertydescriptors == null || filteredoriginalpropertydescriptors.Count == 0) throw new ArgumentException("Attribute not found", attribute.ToString()); diff --git a/mRemoteNG/UI/Controls/FilteredPropertyGrid/ObjectWrapper.cs b/mRemoteNG/UI/Controls/FilteredPropertyGrid/ObjectWrapper.cs index 221edec3..4f4f81c0 100644 --- a/mRemoteNG/UI/Controls/FilteredPropertyGrid/ObjectWrapper.cs +++ b/mRemoteNG/UI/Controls/FilteredPropertyGrid/ObjectWrapper.cs @@ -26,7 +26,7 @@ namespace mRemoteNG.UI.Controls.FilteredPropertyGrid /// /// Get or set a reference to the collection of properties to show in the parent PropertyGrid /// - public List PropertyDescriptors { get; set; } = new List(); + public List PropertyDescriptors { get; set; } = []; #region ICustomTypeDescriptor Members diff --git a/mRemoteNG/UI/Controls/MultiSshToolStrip.cs b/mRemoteNG/UI/Controls/MultiSshToolStrip.cs index 498c8ff9..1e029e21 100644 --- a/mRemoteNG/UI/Controls/MultiSshToolStrip.cs +++ b/mRemoteNG/UI/Controls/MultiSshToolStrip.cs @@ -19,9 +19,9 @@ namespace mRemoteNG.UI.Controls private ToolStripLabel lblMultiSsh; private ToolStripTextBox txtMultiSsh; private int previousCommandIndex = 0; - private readonly ArrayList processHandlers = new ArrayList(); - private readonly ArrayList quickConnectConnections = new ArrayList(); - private readonly ArrayList previousCommands = new ArrayList(); + private readonly ArrayList processHandlers = []; + private readonly ArrayList quickConnectConnections = []; + private readonly ArrayList previousCommands = []; private readonly ThemeManager _themeManager; private int CommandHistoryLength { get; set; } = 100; @@ -43,7 +43,7 @@ namespace mRemoteNG.UI.Controls private ArrayList ProcessOpenConnections(ConnectionInfo connection) { - var handlers = new ArrayList(); + ArrayList handlers = new(); foreach (ProtocolBase _base in connection.OpenConnections) { @@ -76,9 +76,9 @@ namespace mRemoteNG.UI.Controls processHandlers.AddRange(ProcessOpenConnections(connection)); } - var connectionTreeConnections = Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveChildList().Where(item => item.OpenConnections.Count > 0); + System.Collections.Generic.IEnumerable connectionTreeConnections = Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveChildList().Where(item => item.OpenConnections.Count > 0); - foreach (var connection in connectionTreeConnections) + foreach (ConnectionInfo connection in connectionTreeConnections) { processHandlers.AddRange(ProcessOpenConnections(connection)); } @@ -116,7 +116,7 @@ namespace mRemoteNG.UI.Controls if (e.KeyCode == Keys.Enter) { - foreach (var chr1 in txtMultiSsh.Text) + foreach (char chr1 in txtMultiSsh.Text) { SendAllKeystrokes(NativeMethods.WM_CHAR, Convert.ToByte(chr1)); } diff --git a/mRemoteNG/UI/Controls/NewPasswordWithVerification.cs b/mRemoteNG/UI/Controls/NewPasswordWithVerification.cs index 2a4ae999..c58ef721 100644 --- a/mRemoteNG/UI/Controls/NewPasswordWithVerification.cs +++ b/mRemoteNG/UI/Controls/NewPasswordWithVerification.cs @@ -50,7 +50,7 @@ namespace mRemoteNG.UI.Controls public void SetPassword(SecureString password) { - var text = password.ConvertToUnsecureString(); + string text = password.ConvertToUnsecureString(); secureTextBox1.Text = text; secureTextBox2.Text = text; } diff --git a/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs b/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs index ebf4874a..cfb6a739 100644 --- a/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs +++ b/mRemoteNG/UI/Controls/PageSequence/PageSequence.cs @@ -25,7 +25,7 @@ namespace mRemoteNG.UI.Controls.PageSequence throw new ArgumentNullException(nameof(pages)); _pageContainer = pageContainer ?? throw new ArgumentNullException(nameof(pageContainer)); - foreach (var page in pages) + foreach (SequencedControl page in pages) { SubscribeToPageEvents(page); _pages.Add(page); @@ -50,7 +50,7 @@ namespace mRemoteNG.UI.Controls.PageSequence public virtual void ReplacePage(SequencedControl newPage, RelativePagePosition pageToReplace) { - var indexModifier = 0; + int indexModifier = 0; // ReSharper disable once SwitchStatementMissingSomeCases switch (pageToReplace) { @@ -62,7 +62,7 @@ namespace mRemoteNG.UI.Controls.PageSequence break; } - var pageIndexToReplace = CurrentPageIndex + indexModifier; + int pageIndexToReplace = CurrentPageIndex + indexModifier; UnsubscribeFromPageEvents(_pages[pageIndexToReplace]); SubscribeToPageEvents(newPage); _pages[pageIndexToReplace] = newPage; @@ -113,7 +113,7 @@ namespace mRemoteNG.UI.Controls.PageSequence protected virtual void Dispose(bool disposing) { if (!disposing) return; - foreach (var page in _pages) + foreach (SequencedControl page in _pages) { UnsubscribeFromPageEvents(page); } diff --git a/mRemoteNG/UI/Controls/QuickConnectComboBox.cs b/mRemoteNG/UI/Controls/QuickConnectComboBox.cs index e3272296..d00de8fb 100644 --- a/mRemoteNG/UI/Controls/QuickConnectComboBox.cs +++ b/mRemoteNG/UI/Controls/QuickConnectComboBox.cs @@ -58,7 +58,7 @@ namespace mRemoteNG.UI.Controls // Items can't be removed from the ComboBox while it is dropped down without possibly causing // an exception so we must close it, delete the item, and then drop it down again. When we // close it programmatically, the SelectedItem may revert to Nothing, so we must save it first. - var item = _comboBox.SelectedItem; + object item = _comboBox.SelectedItem; _comboBox.DroppedDown = false; _comboBox.Items.Remove(item); _comboBox.SelectedIndex = -1; @@ -79,24 +79,24 @@ namespace mRemoteNG.UI.Controls return; } - var historyItem = (HistoryItem)_comboBox.SelectedItem; + HistoryItem historyItem = (HistoryItem)_comboBox.SelectedItem; OnProtocolChanged(new ProtocolChangedEventArgs(historyItem.ConnectionInfo.Protocol)); } private static void ComboBox_DrawItem(object sender, DrawItemEventArgs e) { - var comboBox = sender as ComboBox; + ComboBox comboBox = sender as ComboBox; if (comboBox == null) { return; } - var drawItem = comboBox.Items[e.Index]; + object drawItem = comboBox.Items[e.Index]; string drawString; if (drawItem is HistoryItem) { - var historyItem = (HistoryItem)drawItem; + HistoryItem historyItem = (HistoryItem)drawItem; drawString = historyItem.ToString(true); } else @@ -136,7 +136,7 @@ namespace mRemoteNG.UI.Controls public string ToString(bool includeProtocol) { - var port = string.Empty; + string port = string.Empty; if (ConnectionInfo.Port != ConnectionInfo.GetDefaultPort()) { port = $":{ConnectionInfo.Port}"; @@ -150,14 +150,14 @@ namespace mRemoteNG.UI.Controls private bool Exists(HistoryItem searchItem) { - foreach (var item in _comboBox.Items) + foreach (object item in _comboBox.Items) { if (!(item is HistoryItem)) { continue; } - var historyItem = (HistoryItem)item; + HistoryItem historyItem = (HistoryItem)item; if (historyItem.Equals(searchItem)) { return true; @@ -171,7 +171,7 @@ namespace mRemoteNG.UI.Controls { try { - var historyItem = new HistoryItem {ConnectionInfo = connectionInfo}; + HistoryItem historyItem = new() { ConnectionInfo = connectionInfo}; if (!Exists(historyItem)) { _comboBox.Items.Insert(0, historyItem); diff --git a/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs b/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs index ded6f5d9..290f65a7 100644 --- a/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs +++ b/mRemoteNG/UI/Controls/QuickConnectToolStrip.cs @@ -155,10 +155,10 @@ namespace mRemoteNG.UI.Controls try { _mnuQuickConnectProtocol.Items.Clear(); - foreach (var fieldInfo in typeof(ProtocolType).GetFields()) + foreach (System.Reflection.FieldInfo fieldInfo in typeof(ProtocolType).GetFields()) { if (fieldInfo.Name == "value__" || fieldInfo.Name == "IntApp") continue; - var menuItem = new ToolStripMenuItem(fieldInfo.Name); + ToolStripMenuItem menuItem = new(fieldInfo.Name); if (fieldInfo.Name == Settings.Default.QuickConnectProtocol) { menuItem.Checked = true; @@ -188,7 +188,7 @@ namespace mRemoteNG.UI.Controls { try { - var connectionInfo = Runtime.ConnectionsService.CreateQuickConnect(_cmbQuickConnect.Text.Trim(), + ConnectionInfo connectionInfo = Runtime.ConnectionsService.CreateQuickConnect(_cmbQuickConnect.Text.Trim(), Converter.StringToProtocol(Settings .Default .QuickConnectProtocol)); @@ -238,7 +238,7 @@ namespace mRemoteNG.UI.Controls private void btnConnections_DropDownOpening(object sender, EventArgs e) { _btnConnections.DropDownItems.Clear(); - var menuItemsConverter = new ConnectionsTreeToMenuItemsConverter + ConnectionsTreeToMenuItemsConverter menuItemsConverter = new() { MouseUpEventHandler = ConnectionsMenuItem_MouseUp }; @@ -249,15 +249,15 @@ namespace mRemoteNG.UI.Controls .ConnectionTreeModel).ToArray(); _btnConnections.DropDownItems.AddRange(rootMenuItems); - ToolStripMenuItem favorites = new ToolStripMenuItem(Language.Favorites, Properties.Resources.Favorite_16x); - var rootNodes = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes; - List favoritesList = new List(); + ToolStripMenuItem favorites = new(Language.Favorites, Properties.Resources.Favorite_16x); + List rootNodes = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes; + List favoritesList = []; - foreach (var node in rootNodes) + foreach (ContainerInfo node in rootNodes) { - foreach (var containerInfo in Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveFavoriteChildList(node)) + foreach (ConnectionInfo containerInfo in Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveFavoriteChildList(node)) { - var favoriteMenuItem = new ToolStripMenuItem + ToolStripMenuItem favoriteMenuItem = new() { Text = containerInfo.Name, Tag = containerInfo, @@ -274,7 +274,7 @@ namespace mRemoteNG.UI.Controls private void ConnectionsMenuItem_MouseUp(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; - var menuItem = (ToolStripMenuItem)sender; + ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; switch (menuItem.Tag) { diff --git a/mRemoteNG/UI/Controls/mrngAdTree.cs b/mRemoteNG/UI/Controls/mrngAdTree.cs index 54f93f3c..0211a8ec 100644 --- a/mRemoteNG/UI/Controls/mrngAdTree.cs +++ b/mRemoteNG/UI/Controls/mrngAdTree.cs @@ -52,14 +52,14 @@ namespace mRemoteNG.UI.Controls private void TvActiveDirectory_AfterSelect(object sender, TreeViewEventArgs e) { AdPath = e.Node.Tag.ToString(); - var pathChangedEvent = AdPathChanged; + AdPathChangedEventHandler pathChangedEvent = AdPathChanged; pathChangedEvent?.Invoke(this); } private void AdTree_Load(object sender, EventArgs e) { tvActiveDirectory.Nodes.Clear(); - var treeNode = new TreeNode(Domain) { Tag = "" }; + TreeNode treeNode = new(Domain) { Tag = "" }; tvActiveDirectory.Nodes.Add(treeNode); AddTreeNodes(treeNode); tvActiveDirectory.Nodes[0].Expand(); @@ -67,15 +67,15 @@ namespace mRemoteNG.UI.Controls private void AddTreeNodes(TreeNode tNode) { - var adhelper = new AdHelper(Domain); + AdHelper adhelper = new(Domain); adhelper.GetChildEntries(tNode.Tag.ToString()); - var enumerator = adhelper.Children.GetEnumerator(); + System.Collections.IDictionaryEnumerator enumerator = adhelper.Children.GetEnumerator(); tvActiveDirectory.BeginUpdate(); while (enumerator.MoveNext()) { - var flag1 = false; + bool flag1 = false; if (enumerator.Key == null) continue; - var node1 = new TreeNode(enumerator.Key.ToString().Substring(3)) + TreeNode node1 = new(enumerator.Key.ToString().Substring(3)) { Tag = RuntimeHelpers.GetObjectValue(enumerator.Value) }; @@ -86,7 +86,7 @@ namespace mRemoteNG.UI.Controls if (flag1) { - var flag2 = false; + bool flag2 = false; try { foreach (TreeNode node2 in tNode.Nodes) @@ -105,7 +105,7 @@ namespace mRemoteNG.UI.Controls tNode.Nodes.Add(node1); } - var imageIndex = GetImageIndex(enumerator.Key.ToString().Substring(0, 2)); + int imageIndex = GetImageIndex(enumerator.Key.ToString().Substring(0, 2)); node1.ImageIndex = imageIndex; node1.SelectedImageIndex = imageIndex; } diff --git a/mRemoteNG/UI/Controls/mrngCheckBox.cs b/mRemoteNG/UI/Controls/mrngCheckBox.cs index 35447ad4..b2cfe4ff 100644 --- a/mRemoteNG/UI/Controls/mrngCheckBox.cs +++ b/mRemoteNG/UI/Controls/mrngCheckBox.cs @@ -24,7 +24,7 @@ namespace mRemoteNG.UI.Controls { InitializeComponent(); ThemeManager.getInstance().ThemeChanged += OnCreateControl; - var display = new DisplayProperties(); + DisplayProperties display = new(); _checkboxSize = new Size(display.ScaleWidth(11), display.ScaleHeight(11)); _checkboxYCoord = (display.ScaleHeight(Height) - _checkboxSize.Height) / 2 - display.ScaleHeight(5); _textXCoord = _checkboxSize.Width + display.ScaleWidth(2); @@ -86,7 +86,7 @@ namespace mRemoteNG.UI.Controls Color glyph; Color checkBorder; - var back = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Background"); + Color back = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Background"); if (Enabled) { glyph = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Glyph"); @@ -114,9 +114,9 @@ namespace mRemoteNG.UI.Controls e.Graphics.Clear(Parent.BackColor); - using (var p = new Pen(checkBorder)) + using (Pen p = new(checkBorder)) { - var boxRect = new Rectangle(0, _checkboxYCoord, _checkboxSize.Width, _checkboxSize.Height); + Rectangle boxRect = new(0, _checkboxYCoord, _checkboxSize.Width, _checkboxSize.Height); e.Graphics.FillRectangle(new SolidBrush(back), boxRect); e.Graphics.DrawRectangle(p, boxRect); } @@ -127,7 +127,7 @@ namespace mRemoteNG.UI.Controls e.Graphics.DrawString("\uE001", new Font("Segoe UI Symbol", 7.75f), new SolidBrush(glyph), -4, 0); } - var textRect = new Rectangle(_textXCoord, 0, Width - 16, Height); + Rectangle textRect = new(_textXCoord, 0, Width - 16, Height); TextRenderer.DrawText(e.Graphics, Text, Font, textRect, fore, Parent.BackColor, TextFormatFlags.PathEllipsis); } diff --git a/mRemoteNG/UI/Controls/mrngComboBox.cs b/mRemoteNG/UI/Controls/mrngComboBox.cs index f90b523f..01f4f5b0 100644 --- a/mRemoteNG/UI/Controls/mrngComboBox.cs +++ b/mRemoteNG/UI/Controls/mrngComboBox.cs @@ -65,7 +65,7 @@ namespace mRemoteNG.UI.Controls private void NG_DrawItem(object sender, DrawItemEventArgs e) { - var index = e.Index >= 0 ? e.Index : 0; + int index = e.Index >= 0 ? e.Index : 0; Brush itemBrush = new SolidBrush(_themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Foreground")); if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) @@ -115,11 +115,11 @@ namespace mRemoteNG.UI.Controls } //Colors - var Border = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Border"); - var Back = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Background"); - var Fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Foreground"); - var ButtBack = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Button_Background"); - var ButtFore = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Button_Foreground"); + Color Border = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Border"); + Color Back = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Background"); + Color Fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Foreground"); + Color ButtBack = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Button_Background"); + Color ButtFore = _themeManager.ActiveTheme.ExtendedPalette.getColor("ComboBox_Button_Foreground"); if (_mice == MouseState.HOVER) { @@ -139,14 +139,14 @@ namespace mRemoteNG.UI.Controls e.Graphics.Clear(Back); //Border - using (var p = new Pen(Border)) + using (Pen p = new(Border)) { - var boxRect = new Rectangle(0, 0, Width - 1, Height - 1); + Rectangle boxRect = new(0, 0, Width - 1, Height - 1); e.Graphics.DrawRectangle(p, boxRect); } //Button - using (var b = new SolidBrush(ButtBack)) + using (SolidBrush b = new(ButtBack)) { e.Graphics.FillRectangle(b, Width - 18, 2, 16, Height - 4); } @@ -155,7 +155,7 @@ namespace mRemoteNG.UI.Controls e.Graphics.DrawString("\u25BC", Font, new SolidBrush(ButtFore), Width - 17, Height / 2 - 5); //Text - var textRect = new Rectangle(2, 2, Width - 20, Height - 4); + Rectangle textRect = new(2, 2, Width - 20, Height - 4); TextRenderer.DrawText(e.Graphics, Text, Font, textRect, Fore, Back, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); } diff --git a/mRemoteNG/UI/Controls/mrngGroupBox.cs b/mRemoteNG/UI/Controls/mrngGroupBox.cs index 5f3c5370..22a9197b 100644 --- a/mRemoteNG/UI/Controls/mrngGroupBox.cs +++ b/mRemoteNG/UI/Controls/mrngGroupBox.cs @@ -37,9 +37,9 @@ namespace mRemoteNG.UI.Controls } //Reusing the textbox colors - var titleColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("GroupBox_Foreground"); + Color titleColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("GroupBox_Foreground"); //var backColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("GroupBox_Backgorund"); - var lineColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("GroupBox_Line"); + Color lineColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("GroupBox_Line"); if (!Enabled) { @@ -50,7 +50,7 @@ namespace mRemoteNG.UI.Controls //var state = Enabled ? GroupBoxState.Normal : GroupBoxState.Disabled; - var flags = TextFormatFlags.PreserveGraphicsTranslateTransform | TextFormatFlags.PreserveGraphicsClipping | + TextFormatFlags flags = TextFormatFlags.PreserveGraphicsTranslateTransform | TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak; if (!ShowKeyboardCues) @@ -61,10 +61,10 @@ namespace mRemoteNG.UI.Controls //No clear backgorund, this control is transparently //e.Graphics.FillRectangle(new SolidBrush(backColor), 0, 0, Width, Height); - var bounds = new Rectangle(0, 0, Width, Height); - var rectangle = bounds; + Rectangle bounds = new(0, 0, Width, Height); + Rectangle rectangle = bounds; rectangle.Width -= 8; - var size = TextRenderer.MeasureText(e.Graphics, Text, Font, new Size(rectangle.Width, rectangle.Height), + Size size = TextRenderer.MeasureText(e.Graphics, Text, Font, new Size(rectangle.Width, rectangle.Height), flags); rectangle.Width = size.Width; rectangle.Height = size.Height; @@ -76,9 +76,9 @@ namespace mRemoteNG.UI.Controls if (rectangle.Width > 0) rectangle.Inflate(2, 0); - using (var pen = new Pen(lineColor)) + using (Pen pen = new(lineColor)) { - var num = bounds.Top + (Font.Height / 2); + int num = bounds.Top + (Font.Height / 2); //Left line e.Graphics.DrawLine(pen, bounds.Left + Padding.Left, num - Padding.Top, bounds.Left + Padding.Left, bounds.Height - Padding.Bottom); diff --git a/mRemoteNG/UI/Controls/mrngIpTextBox.cs b/mRemoteNG/UI/Controls/mrngIpTextBox.cs index 134314a1..445dd7e7 100644 --- a/mRemoteNG/UI/Controls/mrngIpTextBox.cs +++ b/mRemoteNG/UI/Controls/mrngIpTextBox.cs @@ -53,7 +53,7 @@ namespace mRemoteNG.UI.Controls { if (!string.IsNullOrEmpty(value)) { - var pieces = value.Split(@".".ToCharArray(), 4); + string[] pieces = value.Split(@".".ToCharArray(), 4); Octet1.Text = pieces[0]; Octet2.Text = pieces[1]; Octet3.Text = pieces[2]; @@ -256,7 +256,7 @@ namespace mRemoteNG.UI.Controls { try { - var theValue = int.Parse(inString); + int theValue = int.Parse(inString); if (theValue >= 0 && theValue <= 255) return true; @@ -431,7 +431,7 @@ namespace mRemoteNG.UI.Controls // Selects All text in a box for overwriting upon entering the box private void Box_Enter(object sender, EventArgs e) { - var tb = (TextBox)sender; + TextBox tb = (TextBox)sender; tb.SelectAll(); } } diff --git a/mRemoteNG/UI/Controls/mrngLabel.cs b/mRemoteNG/UI/Controls/mrngLabel.cs index 96b92e02..0dab1399 100644 --- a/mRemoteNG/UI/Controls/mrngLabel.cs +++ b/mRemoteNG/UI/Controls/mrngLabel.cs @@ -92,7 +92,7 @@ namespace mRemoteNG.UI.Controls } else { - var disabledtextLabel = + Color disabledtextLabel = _themeManager.ActiveTheme.ExtendedPalette.getColor("TextBox_Disabled_Foreground"); TextRenderer.DrawText(e.Graphics, Text, Font, ClientRectangle, disabledtextLabel, _textFormatFlags); } diff --git a/mRemoteNG/UI/Controls/mrngListView.cs b/mRemoteNG/UI/Controls/mrngListView.cs index 13a8580e..12ae31a8 100644 --- a/mRemoteNG/UI/Controls/mrngListView.cs +++ b/mRemoteNG/UI/Controls/mrngListView.cs @@ -25,7 +25,7 @@ namespace mRemoteNG.UI.Controls protected override void OnCreateControl() { base.OnCreateControl(); - var _themeManager = ThemeManager.getInstance(); + ThemeManager _themeManager = ThemeManager.getInstance(); if (!_themeManager.ActiveAndExtended) return; //List back color BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("List_Background"); @@ -36,7 +36,7 @@ namespace mRemoteNG.UI.Controls //Header style HeaderUsesThemes = false; - var headerStylo = new HeaderFormatStyle + HeaderFormatStyle headerStylo = new() { Normal = { diff --git a/mRemoteNG/UI/Controls/mrngNumericUpDown.cs b/mRemoteNG/UI/Controls/mrngNumericUpDown.cs index 9d6c0861..87b8f77a 100644 --- a/mRemoteNG/UI/Controls/mrngNumericUpDown.cs +++ b/mRemoteNG/UI/Controls/mrngNumericUpDown.cs @@ -33,7 +33,7 @@ namespace mRemoteNG.UI.Controls if (Controls.Count > 0) { - for (var i = 0; i < Controls.Count; i++) + for (int i = 0; i < Controls.Count; i++) { //Remove those non-themable buttons if (Controls[i].GetType().ToString().Equals("System.Windows.Forms.UpDownBase+UpDownButtons")) diff --git a/mRemoteNG/UI/Controls/mrngProgressBar.cs b/mRemoteNG/UI/Controls/mrngProgressBar.cs index aaff26a4..38fa1ca5 100644 --- a/mRemoteNG/UI/Controls/mrngProgressBar.cs +++ b/mRemoteNG/UI/Controls/mrngProgressBar.cs @@ -35,9 +35,9 @@ namespace mRemoteNG.UI.Controls return; } - var progressFill = _themeManager.ActiveTheme.ExtendedPalette.getColor("ProgressBar_Fill"); - var back = _themeManager.ActiveTheme.ExtendedPalette.getColor("ProgressBar_Background"); - var doneProgress = (int)(e.ClipRectangle.Width * ((double)Value / Maximum)); + Color progressFill = _themeManager.ActiveTheme.ExtendedPalette.getColor("ProgressBar_Fill"); + Color back = _themeManager.ActiveTheme.ExtendedPalette.getColor("ProgressBar_Background"); + int doneProgress = (int)(e.ClipRectangle.Width * ((double)Value / Maximum)); e.Graphics.FillRectangle(new SolidBrush(progressFill), 0, 0, doneProgress, e.ClipRectangle.Height); e.Graphics.FillRectangle(new SolidBrush(back), doneProgress, 0, e.ClipRectangle.Width, e.ClipRectangle.Height); diff --git a/mRemoteNG/UI/Controls/mrngRadioButton.cs b/mRemoteNG/UI/Controls/mrngRadioButton.cs index 988f1fb5..5325251e 100644 --- a/mRemoteNG/UI/Controls/mrngRadioButton.cs +++ b/mRemoteNG/UI/Controls/mrngRadioButton.cs @@ -19,7 +19,7 @@ namespace mRemoteNG.UI.Controls // Constructor public MrngRadioButton() { - var display = new DisplayProperties(); + DisplayProperties display = new(); _circleSmall = new Rectangle(display.ScaleWidth(4), display.ScaleHeight(4), display.ScaleWidth(6), display.ScaleHeight(6)); @@ -85,12 +85,12 @@ namespace mRemoteNG.UI.Controls } // Init - var g = e.Graphics; + Graphics g = e.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; - var fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Text"); - var outline = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Border"); - var centerBack = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Background"); + Color fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Text"); + Color outline = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Border"); + Color centerBack = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Background"); Color center; // Overlay Graphic @@ -116,7 +116,7 @@ namespace mRemoteNG.UI.Controls fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("CheckBox_Text_Disabled"); } - var textRect = new Rectangle(_textXCoord, Padding.Top, Width - 16, Height); + Rectangle textRect = new(_textXCoord, Padding.Top, Width - 16, Height); TextRenderer.DrawText(e.Graphics, Text, Font, textRect, fore, Parent.BackColor, TextFormatFlags.PathEllipsis); diff --git a/mRemoteNG/UI/Controls/mrngSearchBox.cs b/mRemoteNG/UI/Controls/mrngSearchBox.cs index eab3887d..8130d733 100644 --- a/mRemoteNG/UI/Controls/mrngSearchBox.cs +++ b/mRemoteNG/UI/Controls/mrngSearchBox.cs @@ -8,8 +8,8 @@ namespace mRemoteNG.UI.Controls { private bool _showDefaultText = true; private bool _settingDefaultText = true; - private readonly PictureBox _pbClear = new PictureBox(); - private readonly ToolTip _btClearToolTip = new ToolTip(); + private readonly PictureBox _pbClear = new(); + private readonly ToolTip _btClearToolTip = new(); public MrngSearchBox() { diff --git a/mRemoteNG/UI/DPI_Per_Monitor.cs b/mRemoteNG/UI/DPI_Per_Monitor.cs index e9a9c6b8..e438d9e9 100644 --- a/mRemoteNG/UI/DPI_Per_Monitor.cs +++ b/mRemoteNG/UI/DPI_Per_Monitor.cs @@ -91,7 +91,7 @@ static class DPI_Per_Monitor [DllImport("User32.dll")] private static extern IntPtr MonitorFromPoint([In]System.Drawing.Point pt, [In]uint dwFlags); - static List> ManResCtrl = new List>(); + static List> ManResCtrl = []; internal static void TryEnableDPIAware(Form form, VoidOfFloatFloatDelegate CallBackWithScale) { int handledLev = 0; @@ -110,7 +110,7 @@ static class DPI_Per_Monitor handledLev = 1; } catch { } try { - var mon = MonitorFromPoint(new System.Drawing.Point(1, 1), 2/*MONITOR_DEFAULTTONEAREST*/); //(0,0) always top left of primary + IntPtr mon = MonitorFromPoint(new System.Drawing.Point(1, 1), 2/*MONITOR_DEFAULTTONEAREST*/); //(0,0) always top left of primary uint dpiX; uint dpiY; GetDpiForMonitor(mon, DpiType.Effective, out dpiX, out dpiY); @@ -123,7 +123,7 @@ static class DPI_Per_Monitor [DllImport("user32.dll", SetLastError = true)] public static extern bool EnableNonClientDpiScaling(IntPtr hWnd); - private static SemaphoreSlim semaphoreScale = new SemaphoreSlim(1, 1); + private static SemaphoreSlim semaphoreScale = new(1, 1); internal delegate void VoidOfFloatFloatDelegate(float x, float y); static Int32 Oldscales = -1; static bool isCurrentlyScaling=false; diff --git a/mRemoteNG/UI/DialogFactory.cs b/mRemoteNG/UI/DialogFactory.cs index fe4864ed..50bd18e6 100644 --- a/mRemoteNG/UI/DialogFactory.cs +++ b/mRemoteNG/UI/DialogFactory.cs @@ -35,7 +35,7 @@ namespace mRemoteNG.UI /// public static void ShowLoadConnectionsFailedDialog(string connectionFileName, string messageText, bool showCancelButton) { - var commandButtons = new List + List commandButtons = new() { Language.ConfigurationCreateNew, Language.OpenADifferentFile, @@ -45,7 +45,7 @@ namespace mRemoteNG.UI if (showCancelButton) commandButtons.Add(Language._Cancel); - var answered = false; + bool answered = false; while (!answered) { try @@ -55,7 +55,7 @@ namespace mRemoteNG.UI switch (CTaskDialog.CommandButtonResult) { case 0: // New - var saveAsDialog = ConnectionsSaveAsDialog(); + SaveFileDialog saveAsDialog = ConnectionsSaveAsDialog(); saveAsDialog.ShowDialog(); Runtime.ConnectionsService.NewConnectionsFile(saveAsDialog.FileName); answered = true; diff --git a/mRemoteNG/UI/DisplayProperties.cs b/mRemoteNG/UI/DisplayProperties.cs index 9098c347..2487d1ef 100644 --- a/mRemoteNG/UI/DisplayProperties.cs +++ b/mRemoteNG/UI/DisplayProperties.cs @@ -76,14 +76,14 @@ namespace mRemoteNG.UI if (image == null) throw new ArgumentNullException(nameof(image)); - var width = ScaleWidth(image.Width); - var height = ScaleHeight(image.Height); - var destRect = new Rectangle(0, 0, width, height); - var destImage = new Bitmap(width, height); + int width = ScaleWidth(image.Width); + int height = ScaleHeight(image.Height); + Rectangle destRect = new(0, 0, width, height); + Bitmap destImage = new(width, height); destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - using (var graphics = Graphics.FromImage(destImage)) + using (Graphics graphics = Graphics.FromImage(destImage)) { graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality; @@ -91,7 +91,7 @@ namespace mRemoteNG.UI graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; - using (var wrapMode = new ImageAttributes()) + using (ImageAttributes wrapMode = new()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); diff --git a/mRemoteNG/UI/FontOverrider.cs b/mRemoteNG/UI/FontOverrider.cs index 08d7092e..610cb62b 100644 --- a/mRemoteNG/UI/FontOverrider.cs +++ b/mRemoteNG/UI/FontOverrider.cs @@ -12,7 +12,7 @@ namespace mRemoteNG.UI // Override the font of all controls in a container with the default font based on the OS version foreach (Control tempLoopVarCtlChild in ctlParent.Controls) { - var ctlChild = tempLoopVarCtlChild; + Control ctlChild = tempLoopVarCtlChild; ctlChild.Font = new Font(SystemFonts.MessageBoxFont.Name, ctlChild.Font.Size, ctlChild.Font.Style, ctlChild.Font.Unit, ctlChild.Font.GdiCharSet); if (ctlChild.Controls.Count > 0) diff --git a/mRemoteNG/UI/FormExtensions.cs b/mRemoteNG/UI/FormExtensions.cs index a3fcb6c5..92334a06 100644 --- a/mRemoteNG/UI/FormExtensions.cs +++ b/mRemoteNG/UI/FormExtensions.cs @@ -8,11 +8,11 @@ namespace mRemoteNG.UI { public static void CenterOnTarget(this Form formToMove, Form formToCenterOn) { - var targetFormCenterX = formToCenterOn.Location.X + formToCenterOn.Width / 2; - var targetFormCenterY = formToCenterOn.Location.Y + formToCenterOn.Height / 2; + int targetFormCenterX = formToCenterOn.Location.X + formToCenterOn.Width / 2; + int targetFormCenterY = formToCenterOn.Location.Y + formToCenterOn.Height / 2; - var thisFormCenterX = formToMove.Location.X + formToMove.Width / 2; - var thisFormCenterY = formToMove.Location.Y + formToMove.Height / 2; + int thisFormCenterX = formToMove.Location.X + formToMove.Width / 2; + int thisFormCenterY = formToMove.Location.Y + formToMove.Height / 2; formToMove.Location = new Point(targetFormCenterX - thisFormCenterX, targetFormCenterY - thisFormCenterY); } diff --git a/mRemoteNG/UI/Forms/FrmExport.cs b/mRemoteNG/UI/Forms/FrmExport.cs index 1376805d..fc5d284c 100644 --- a/mRemoteNG/UI/Forms/FrmExport.cs +++ b/mRemoteNG/UI/Forms/FrmExport.cs @@ -28,14 +28,14 @@ namespace mRemoteNG.UI.Forms { get { - var exportFormat = cboFileFormat.SelectedItem as ExportFormat; + ExportFormat exportFormat = cboFileFormat.SelectedItem as ExportFormat; return exportFormat?.Format ?? SaveFormat.mRXML; } set { - foreach (var item in cboFileFormat.Items) + foreach (object item in cboFileFormat.Items) { - var exportFormat = item as ExportFormat; + ExportFormat exportFormat = item as ExportFormat; if (exportFormat?.Format != value) continue; cboFileFormat.SelectedItem = item; break; @@ -164,13 +164,13 @@ namespace mRemoteNG.UI.Forms private void btnBrowse_Click(object sender, EventArgs e) { - using (var saveFileDialog = new SaveFileDialog()) + using (SaveFileDialog saveFileDialog = new()) { saveFileDialog.CheckPathExists = true; saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); saveFileDialog.OverwritePrompt = true; - var fileTypes = new List(); + List fileTypes = new(); fileTypes.AddRange(new[] {Language.FiltermRemoteXML, "*.xml"}); fileTypes.AddRange(new[] {Language.FiltermRemoteCSV, "*.csv"}); fileTypes.AddRange(new[] {Language.FilterAll, "*.*"}); diff --git a/mRemoteNG/UI/Forms/FrmInputBox.cs b/mRemoteNG/UI/Forms/FrmInputBox.cs index 59bb8fe2..73f4bc22 100644 --- a/mRemoteNG/UI/Forms/FrmInputBox.cs +++ b/mRemoteNG/UI/Forms/FrmInputBox.cs @@ -29,7 +29,7 @@ namespace mRemoteNG.UI.Forms private void ApplyTheme() { - var _themeManager = ThemeManager.getInstance(); + ThemeManager _themeManager = ThemeManager.getInstance(); if (!_themeManager.ActiveAndExtended) return; BackColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("Dialog_Background"); ForeColor = _themeManager.ActiveTheme.ExtendedPalette.getColor("Dialog_Foreground"); diff --git a/mRemoteNG/UI/Forms/FrmPassword.cs b/mRemoteNG/UI/Forms/FrmPassword.cs index b07de48d..329df7d2 100644 --- a/mRemoteNG/UI/Forms/FrmPassword.cs +++ b/mRemoteNG/UI/Forms/FrmPassword.cs @@ -13,7 +13,7 @@ namespace mRemoteNG.UI.Forms public partial class FrmPassword : IKeyProvider { private readonly string _passwordName; - private SecureString _password = new SecureString(); + private SecureString _password = new(); /// /// Puts the dialog into the New Password mode. An extra @@ -45,7 +45,7 @@ namespace mRemoteNG.UI.Forms /// public Optional GetKey() { - var dialog = ShowDialog(); + DialogResult dialog = ShowDialog(); return dialog == DialogResult.OK ? _password : Optional.Empty; @@ -57,7 +57,7 @@ namespace mRemoteNG.UI.Forms { ApplyLanguage(); ApplyTheme(); - var display = new DisplayProperties(); + DisplayProperties display = new(); pbLock.Image = display.ScaleImage(pbLock.Image); Height = tableLayoutPanel1.Height; @@ -113,7 +113,7 @@ namespace mRemoteNG.UI.Forms if (!ThemeManager.getInstance().ActiveAndExtended) return; - var activeTheme = ThemeManager.getInstance().ActiveTheme; + ThemeInfo activeTheme = ThemeManager.getInstance().ActiveTheme; BackColor = activeTheme.ExtendedPalette.getColor("Dialog_Background"); ForeColor = activeTheme.ExtendedPalette.getColor("Dialog_Foreground"); diff --git a/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs b/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs index 35bb1037..6da31e90 100644 --- a/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs +++ b/mRemoteNG/UI/Forms/FrmSplashScreenNew.xaml.cs @@ -19,10 +19,11 @@ namespace mRemoteNG.UI.Forms } public static FrmSplashScreenNew GetInstance() { - if (instance == null) - instance = new FrmSplashScreenNew(); + //instance == null + instance ??= new FrmSplashScreenNew(); return instance; } + void LoadFont() { lblLogoPartA.FontFamily = new System.Windows.Media.FontFamily(new Uri("pack://application:,,,/"), "./UI/Font/#HandelGotDBol"); diff --git a/mRemoteNG/UI/Forms/FrmUnhandledException.cs b/mRemoteNG/UI/Forms/FrmUnhandledException.cs index e45cb9e1..86865b11 100644 --- a/mRemoteNG/UI/Forms/FrmUnhandledException.cs +++ b/mRemoteNG/UI/Forms/FrmUnhandledException.cs @@ -65,7 +65,7 @@ namespace mRemoteNG.UI.Forms private void buttonCopyAll_Click(object sender, EventArgs e) { - var text = new StringBuilder() + string text = new StringBuilder() .AppendLine("```") .AppendLine(labelExceptionMessageHeader.Text) .AppendLine("\"" + textBoxExceptionMessage.Text + "\"") diff --git a/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs b/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs index cac5b478..1e27d451 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/AdvancedPage.cs @@ -20,8 +20,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages InitializeComponent(); ApplyTheme(); PageIcon = Resources.ImageConverter.GetImageAsIcon(Properties.Resources.Settings_16x); - var display = new DisplayProperties(); - var img = display.ScaleImage(Properties.Resources.PuttyConfig); + DisplayProperties display = new(); + System.Drawing.Bitmap img = display.ScaleImage(Properties.Resources.PuttyConfig); btnLaunchPutty.Image = img; } @@ -71,7 +71,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages Properties.OptionsAdvancedPage.Default.NoReconnect = chkNoReconnect.Checked; Properties.OptionsAdvancedPage.Default.RdpLoadBalanceInfoUseUtf8 = chkLoadBalanceInfoUseUtf8.Checked; - var puttyPathChanged = false; + bool puttyPathChanged = false; if (Properties.OptionsAdvancedPage.Default.CustomPuttyPath != txtCustomPuttyPath.Text) { puttyPathChanged = true; @@ -114,7 +114,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void btnBrowseCustomPuttyPath_Click(object sender, EventArgs e) { - using (var openFileDialog = new OpenFileDialog()) + using (OpenFileDialog openFileDialog = new()) { openFileDialog.Filter = $@"{Language.FilterApplication}|*.exe|{Language.FilterAll}|*.*"; openFileDialog.FileName = Path.GetFileName(GeneralAppInfo.PuttyPath); @@ -131,8 +131,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages { try { - var puttyProcess = new PuttyProcessController(); - var fileName = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath; + PuttyProcessController puttyProcess = new(); + string fileName = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath; puttyProcess.Start(fileName); puttyProcess.SetControlText("Button", "&Cancel", "&Close"); puttyProcess.SetControlVisible("Button", "&Open", false); @@ -150,9 +150,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void SetPuttyLaunchButtonEnabled() { - var puttyPath = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath; + string puttyPath = chkUseCustomPuttyPath.Checked ? txtCustomPuttyPath.Text : GeneralAppInfo.PuttyPath; - var exists = false; + bool exists = false; try { exists = File.Exists(puttyPath); diff --git a/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs b/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs index 98dba43d..81c8d2fb 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/AppearancePage.cs @@ -43,7 +43,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages cboLanguage.Items.Clear(); cboLanguage.Items.Add(Language.LanguageDefault); - foreach (var nativeName in SupportedCultures.CultureNativeNames) + foreach (string nativeName in SupportedCultures.CultureNativeNames) { cboLanguage.Items.Add(nativeName); } diff --git a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs index b60b3f7c..44b5d21d 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/BackupPage.cs @@ -241,7 +241,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void ButtonBrowsePath_Click(object sender, EventArgs e) { - var selectFolderDialog = DialogFactory.SelectFolder(Language.lblConnectionsBackupPath); + CommonOpenFileDialog selectFolderDialog = DialogFactory.SelectFolder(Language.lblConnectionsBackupPath); txtConnectionsBackupPath.Text = selectFolderDialog.ShowDialog() == CommonFileDialogResult.Ok ? selectFolderDialog.FileName : txtConnectionsBackupPath.Text; } diff --git a/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs index 465a3ad1..4f848521 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/CredentialsPage.cs @@ -62,7 +62,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages } txtCredentialsUsername.Text = Properties.OptionsCredentialsPage.Default.DefaultUsername; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); txtCredentialsPassword.Text = cryptographyProvider.Decrypt(Properties.OptionsCredentialsPage.Default.DefaultPassword, Runtime.EncryptionKey); txtCredentialsDomain.Text = Properties.OptionsCredentialsPage.Default.DefaultDomain; txtCredentialsUserViaAPI.Text = Properties.OptionsCredentialsPage.Default.UserViaAPIDefault; @@ -84,7 +84,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages } Properties.OptionsCredentialsPage.Default.DefaultUsername = txtCredentialsUsername.Text; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); Properties.OptionsCredentialsPage.Default.DefaultPassword = cryptographyProvider.Encrypt(txtCredentialsPassword.Text, Runtime.EncryptionKey); Properties.OptionsCredentialsPage.Default.DefaultDomain = txtCredentialsDomain.Text; Properties.OptionsCredentialsPage.Default.UserViaAPIDefault = txtCredentialsUserViaAPI.Text; diff --git a/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs b/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs index 9ac19ae7..159dee05 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/NotificationsPage.cs @@ -137,13 +137,13 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void buttonSelectLogPath_Click(object sender, System.EventArgs e) { - var currentFile = textBoxLogPath.Text; - var currentDirectory = Path.GetDirectoryName(currentFile); + string currentFile = textBoxLogPath.Text; + string currentDirectory = Path.GetDirectoryName(currentFile); saveFileDialogLogging.Title = Language.ChooseLogPath; saveFileDialogLogging.Filter = @"Log file|*.log"; saveFileDialogLogging.InitialDirectory = currentDirectory; saveFileDialogLogging.FileName = currentFile; - var dialogResult = saveFileDialogLogging.ShowDialog(); + DialogResult dialogResult = saveFileDialogLogging.ShowDialog(); if (dialogResult != DialogResult.OK) return; textBoxLogPath.Text = saveFileDialogLogging.FileName; } diff --git a/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs b/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs index 591f5f8c..502c6816 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/SecurityPage.cs @@ -76,21 +76,21 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void BtnTestSettings_Click(object sender, EventArgs e) { - var connectionTree = Runtime.ConnectionsService.ConnectionTreeModel; + Tree.ConnectionTreeModel connectionTree = Runtime.ConnectionsService.ConnectionTreeModel; if (!connectionTree.RootNodes.Any()) return; - var engine = (BlockCipherEngines)comboBoxEncryptionEngine.SelectedItem; - var mode = (BlockCipherModes)comboBoxBlockCipher.SelectedItem; - var cryptographyProvider = new CryptoProviderFactory(engine, mode).Build(); + BlockCipherEngines engine = (BlockCipherEngines)comboBoxEncryptionEngine.SelectedItem; + BlockCipherModes mode = (BlockCipherModes)comboBoxBlockCipher.SelectedItem; + ICryptographyProvider cryptographyProvider = new CryptoProviderFactory(engine, mode).Build(); cryptographyProvider.KeyDerivationIterations = (int)numberBoxKdfIterations.Value; - var serializerFactory = new XmlConnectionSerializerFactory(); - var serializer = serializerFactory.Build(cryptographyProvider, connectionTree, useFullEncryption: chkEncryptCompleteFile.Checked); - var nodeCount = connectionTree.GetRecursiveChildList().Count; + XmlConnectionSerializerFactory serializerFactory = new(); + Config.Serializers.ISerializer serializer = serializerFactory.Build(cryptographyProvider, connectionTree, useFullEncryption: chkEncryptCompleteFile.Checked); + int nodeCount = connectionTree.GetRecursiveChildList().Count; - var timer = Stopwatch.StartNew(); - var rootNode = connectionTree.RootNodes.First(); + Stopwatch timer = Stopwatch.StartNew(); + Container.ContainerInfo rootNode = connectionTree.RootNodes.First(); serializer.Serialize(rootNode); timer.Stop(); diff --git a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs index d283188f..fa04075a 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/SqlServerPage.cs @@ -51,7 +51,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages txtSQLServer.Text = Properties.OptionsDBsPage.Default.SQLHost; txtSQLDatabaseName.Text = Properties.OptionsDBsPage.Default.SQLDatabaseName; txtSQLUsername.Text = Properties.OptionsDBsPage.Default.SQLUser; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); txtSQLPassword.Text = cryptographyProvider.Decrypt(Properties.OptionsDBsPage.Default.SQLPass, Runtime.EncryptionKey); chkSQLReadOnly.Checked = Properties.OptionsDBsPage.Default.SQLReadOnly; lblTestConnectionResults.Text = ""; @@ -60,14 +60,14 @@ namespace mRemoteNG.UI.Forms.OptionsPages public override void SaveSettings() { base.SaveSettings(); - var sqlServerWasPreviouslyEnabled = Properties.OptionsDBsPage.Default.UseSQLServer; + bool sqlServerWasPreviouslyEnabled = Properties.OptionsDBsPage.Default.UseSQLServer; Properties.OptionsDBsPage.Default.UseSQLServer = chkUseSQLServer.Checked; Properties.OptionsDBsPage.Default.SQLServerType = txtSQLType.Text; Properties.OptionsDBsPage.Default.SQLHost = txtSQLServer.Text; Properties.OptionsDBsPage.Default.SQLDatabaseName = txtSQLDatabaseName.Text; Properties.OptionsDBsPage.Default.SQLUser = txtSQLUsername.Text; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); Properties.OptionsDBsPage.Default.SQLPass = cryptographyProvider.Encrypt(txtSQLPassword.Text, Runtime.EncryptionKey); Properties.OptionsDBsPage.Default.SQLReadOnly = chkSQLReadOnly.Checked; @@ -115,17 +115,17 @@ namespace mRemoteNG.UI.Forms.OptionsPages private async void btnTestConnection_Click(object sender, EventArgs e) { - var type = txtSQLType.Text; - var server = txtSQLServer.Text; - var database = txtSQLDatabaseName.Text; - var username = txtSQLUsername.Text; - var password = txtSQLPassword.Text; + string type = txtSQLType.Text; + string server = txtSQLServer.Text; + string database = txtSQLDatabaseName.Text; + string username = txtSQLUsername.Text; + string password = txtSQLPassword.Text; lblTestConnectionResults.Text = Language.TestingConnection; imgConnectionStatus.Image = Properties.Resources.Loading_Spinner; btnTestConnection.Enabled = false; - var connectionTestResult = + ConnectionTestResult connectionTestResult = await _databaseConnectionTester.TestConnectivity(type, server, database, username, password); btnTestConnection.Enabled = true; diff --git a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs index 2d534f1f..cadd833d 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/ThemePage.cs @@ -18,7 +18,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages private readonly ThemeManager _themeManager; private readonly bool _oriActiveTheming; - private readonly List modifiedThemes = new List(); + private readonly List modifiedThemes = []; #endregion @@ -74,7 +74,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void ListPalette_FormatCell(object sender, FormatCellEventArgs e) { if (e.ColumnIndex != ColorCol.Index) return; - var colorElem = (PseudoKeyColor)e.Model; + PseudoKeyColor colorElem = (PseudoKeyColor)e.Model; e.SubItem.BackColor = colorElem.Value; } @@ -97,7 +97,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages } } - foreach (var updatedTheme in modifiedThemes) + foreach (ThemeInfo updatedTheme in modifiedThemes) { _themeManager.updateTheme(updatedTheme); } @@ -127,7 +127,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages btnThemeNew.Enabled = true; - var selectedTheme = (ThemeInfo)cboTheme.SelectedItem; + ThemeInfo selectedTheme = (ThemeInfo)cboTheme.SelectedItem; if (selectedTheme != null && selectedTheme.IsExtendable) { @@ -152,9 +152,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages /// private void ListPalette_CellClick(object sender, CellClickEventArgs e) { - var colorElem = (PseudoKeyColor)e.Model; + PseudoKeyColor colorElem = (PseudoKeyColor)e.Model; - var colorDlg = new ColorDialog + ColorDialog colorDlg = new() { AllowFullOpen = true, FullOpen = true, @@ -173,19 +173,19 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void ColorMeList(ThemeInfo ti) { - foreach (var colorElem in ti.ExtendedPalette.ExtColorPalette) + foreach (KeyValuePair colorElem in ti.ExtendedPalette.ExtColorPalette) listPalette.AddObject(new PseudoKeyColor(colorElem.Key, colorElem.Value)); } private void btnThemeNew_Click(object sender, EventArgs e) { - using (var frmInputBox = new FrmInputBox(Language.OptionsThemeNewThemeCaption, Language.OptionsThemeNewThemeText, _themeManager.ActiveTheme.Name)) + using (FrmInputBox frmInputBox = new(Language.OptionsThemeNewThemeCaption, Language.OptionsThemeNewThemeText, _themeManager.ActiveTheme.Name)) { - var dr = frmInputBox.ShowDialog(); + DialogResult dr = frmInputBox.ShowDialog(); if (dr != DialogResult.OK) return; if (_themeManager.isThemeNameOk(frmInputBox.returnValue)) { - var addedTheme = _themeManager.addTheme(_themeManager.ActiveTheme, frmInputBox.returnValue); + ThemeInfo addedTheme = _themeManager.addTheme(_themeManager.ActiveTheme, frmInputBox.returnValue); _themeManager.ActiveTheme = addedTheme; LoadSettings(); } @@ -198,7 +198,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages private void btnThemeDelete_Click(object sender, EventArgs e) { - var res = CTaskDialog.ShowTaskDialogBox(this, Language.Warnings, + DialogResult res = CTaskDialog.ShowTaskDialogBox(this, Language.Warnings, Language.OptionsThemeDeleteConfirmation, "", "", "", "", "", "", ETaskDialogButtons.YesNo, ESysIcons.Question, ESysIcons.Information, 0); diff --git a/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs b/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs index 5cd9a0d4..9f1951c8 100644 --- a/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs +++ b/mRemoteNG/UI/Forms/OptionsPages/UpdatesPage.cs @@ -77,9 +77,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages if (CommonRegistrySettings.AllowCheckForUpdatesAutomatical) { cboUpdateCheckFrequency.Items.Clear(); - var nDaily = cboUpdateCheckFrequency.Items.Add(Language.Daily); - var nWeekly = cboUpdateCheckFrequency.Items.Add(Language.Weekly); - var nMonthly = cboUpdateCheckFrequency.Items.Add(Language.Monthly); + int nDaily = cboUpdateCheckFrequency.Items.Add(Language.Daily); + int nWeekly = cboUpdateCheckFrequency.Items.Add(Language.Weekly); + int nMonthly = cboUpdateCheckFrequency.Items.Add(Language.Monthly); if (Properties.OptionsUpdatesPage.Default.CheckForUpdatesFrequencyDays < 1) { chkCheckForUpdatesOnStartup.Checked = false; @@ -99,7 +99,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages cboUpdateCheckFrequency.SelectedIndex = nMonthly; break; default: - var nCustom = + int nCustom = cboUpdateCheckFrequency.Items.Add(string.Format(Language.UpdateFrequencyCustom, Properties.OptionsUpdatesPage.Default.CheckForUpdatesFrequencyDays)); cboUpdateCheckFrequency.SelectedIndex = nCustom; break; @@ -107,9 +107,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages } } - var stable = cboReleaseChannel.Items.Add(UpdateChannelInfo.STABLE); - var beta = cboReleaseChannel.Items.Add(UpdateChannelInfo.PREVIEW); - var dev = cboReleaseChannel.Items.Add(UpdateChannelInfo.NIGHTLY); + int stable = cboReleaseChannel.Items.Add(UpdateChannelInfo.STABLE); + int beta = cboReleaseChannel.Items.Add(UpdateChannelInfo.PREVIEW); + int dev = cboReleaseChannel.Items.Add(UpdateChannelInfo.NIGHTLY); switch (Properties.OptionsUpdatesPage.Default.UpdateChannel) { case UpdateChannelInfo.STABLE: @@ -134,7 +134,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages chkUseProxyAuthentication.Checked = Properties.OptionsUpdatesPage.Default.UpdateProxyUseAuthentication; tblProxyAuthentication.Enabled = Properties.OptionsUpdatesPage.Default.UpdateProxyUseAuthentication; txtProxyUsername.Text = Properties.OptionsUpdatesPage.Default.UpdateProxyAuthUser; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); txtProxyPassword.Text = cryptographyProvider.Decrypt(Properties.OptionsUpdatesPage.Default.UpdateProxyAuthPass, Runtime.EncryptionKey); @@ -170,7 +170,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages Properties.OptionsUpdatesPage.Default.UpdateProxyUseAuthentication = chkUseProxyAuthentication.Checked; Properties.OptionsUpdatesPage.Default.UpdateProxyAuthUser = txtProxyUsername.Text; - var cryptographyProvider = new LegacyRijndaelCryptographyProvider(); + LegacyRijndaelCryptographyProvider cryptographyProvider = new(); Properties.OptionsUpdatesPage.Default.UpdateProxyAuthPass = cryptographyProvider.Encrypt(txtProxyPassword.Text, Runtime.EncryptionKey); } diff --git a/mRemoteNG/UI/Forms/frmChoosePanel.cs b/mRemoteNG/UI/Forms/frmChoosePanel.cs index 05269d30..414b6368 100644 --- a/mRemoteNG/UI/Forms/frmChoosePanel.cs +++ b/mRemoteNG/UI/Forms/frmChoosePanel.cs @@ -55,7 +55,7 @@ namespace mRemoteNG.UI.Forms { cbPanels.Items.Clear(); - for (var i = 0; i <= Runtime.WindowList.Count - 1; i++) + for (int i = 0; i <= Runtime.WindowList.Count - 1; i++) { cbPanels.Items.Add(Runtime.WindowList[i].Text.Replace("&&", "&")); } @@ -75,10 +75,10 @@ namespace mRemoteNG.UI.Forms private void btnNew_Click(object sender, System.EventArgs e) { - using (var frmInputBox = - new FrmInputBox(Language.NewPanel, Language.PanelName + ":", Language.NewPanel)) + using (FrmInputBox frmInputBox = + new(Language.NewPanel, Language.PanelName + ":", Language.NewPanel)) { - var dr = frmInputBox.ShowDialog(); + DialogResult dr = frmInputBox.ShowDialog(); if (dr != DialogResult.OK || string.IsNullOrEmpty(frmInputBox.returnValue)) return; _panelAdder.AddPanel(frmInputBox.returnValue); AddAvailablePanels(); diff --git a/mRemoteNG/UI/Forms/frmMain.cs b/mRemoteNG/UI/Forms/frmMain.cs index 4ad65af5..9a58d803 100644 --- a/mRemoteNG/UI/Forms/frmMain.cs +++ b/mRemoteNG/UI/Forms/frmMain.cs @@ -54,7 +54,7 @@ namespace mRemoteNG.UI.Forms private bool _showFullPathInTitle; private readonly AdvancedWindowMenu _advancedWindowMenu; private ConnectionInfo _selectedConnection; - private readonly IList _messageWriters = new List(); + private readonly IList _messageWriters = []; private readonly ThemeManager _themeManager; private readonly FileBackupPruner _backupPruner = new(); public static FrmOptions OptionsForm; @@ -159,9 +159,9 @@ namespace mRemoteNG.UI.Forms private void FrmMain_Load(object sender, EventArgs e) { - var messageCollector = Runtime.MessageCollector; + MessageCollector messageCollector = Runtime.MessageCollector; - var settingsLoader = new SettingsLoader(this, messageCollector, _quickConnectToolStrip, _externalToolsToolStrip, _multiSshToolStrip, msMain); + SettingsLoader settingsLoader = new(this, messageCollector, _quickConnectToolStrip, _externalToolsToolStrip, _multiSshToolStrip, msMain); settingsLoader.LoadSettings(); MessageCollectorSetup.SetupMessageCollector(messageCollector, _messageWriters); @@ -171,7 +171,7 @@ namespace mRemoteNG.UI.Forms SetMenuDependencies(); - var uiLoader = new DockPanelLayoutLoader(this, messageCollector); + DockPanelLayoutLoader uiLoader = new(this, messageCollector); uiLoader.LoadPanelsFromXml(); LockToolbarPositions(Properties.Settings.Default.LockToolbars); @@ -181,7 +181,7 @@ namespace mRemoteNG.UI.Forms _fpChainedWindowHandle = NativeMethods.SetClipboardViewer(Handle); - Runtime.WindowList = new WindowList(); + Runtime.WindowList = []; if (Properties.App.Default.ResetPanels) SetDefaultLayout(); @@ -190,7 +190,7 @@ namespace mRemoteNG.UI.Forms Runtime.ConnectionsService.ConnectionsLoaded += ConnectionsServiceOnConnectionsLoaded; Runtime.ConnectionsService.ConnectionsSaved += ConnectionsServiceOnConnectionsSaved; - var credsAndConsSetup = new CredsAndConsSetup(); + CredsAndConsSetup credsAndConsSetup = new(); credsAndConsSetup.LoadCredsAndCons(); Windows.TreeForm.Focus(); @@ -224,9 +224,9 @@ namespace mRemoteNG.UI.Forms OptionsForm = new FrmOptions(); if (!Properties.OptionsTabsPanelsPage.Default.CreateEmptyPanelOnStartUp) return; - var panelName = !string.IsNullOrEmpty(Properties.OptionsTabsPanelsPage.Default.StartUpPanelName) ? Properties.OptionsTabsPanelsPage.Default.StartUpPanelName : Language.NewPanel; + string panelName = !string.IsNullOrEmpty(Properties.OptionsTabsPanelsPage.Default.StartUpPanelName) ? Properties.OptionsTabsPanelsPage.Default.StartUpPanelName : Language.NewPanel; - var panelAdder = new PanelAdder(); + PanelAdder panelAdder = new(); if (!panelAdder.DoesPanelExist(panelName)) panelAdder.AddPanel(panelName); } @@ -265,8 +265,8 @@ namespace mRemoteNG.UI.Forms private void LockToolbarPositions(bool shouldBeLocked) { - var toolbars = new ToolStrip[] {_quickConnectToolStrip, _multiSshToolStrip, _externalToolsToolStrip, msMain}; - foreach (var toolbar in toolbars) + ToolStrip[] toolbars = [_quickConnectToolStrip, _multiSshToolStrip, _externalToolsToolStrip, msMain]; + foreach (ToolStrip toolbar in toolbars) { toolbar.GripStyle = shouldBeLocked ? ToolStripGripStyle.Hidden : ToolStripGripStyle.Visible; } @@ -352,11 +352,11 @@ namespace mRemoteNG.UI.Forms if (Properties.OptionsUpdatesPage.Default.CheckForUpdatesAsked) return; string[] commandButtons = - { + [ Language.AskUpdatesCommandRecommended, Language.AskUpdatesCommandCustom, Language.AskUpdatesCommandAskLater - }; + ]; CTaskDialog.ShowTaskDialogBox(this, GeneralAppInfo.ProductName, Language.AskUpdatesMainInstruction, string.Format(Language.AskUpdatesContent, GeneralAppInfo.ProductName), "", "", "", "", string.Join(" | ", commandButtons), ETaskDialogButtons.None, ESysIcons.Question, ESysIcons.Question); @@ -378,7 +378,7 @@ namespace mRemoteNG.UI.Forms if (!Properties.OptionsUpdatesPage.Default.CheckForUpdatesOnStartup) return; - var nextUpdateCheck = + DateTime nextUpdateCheck = Convert.ToDateTime(Properties.OptionsUpdatesPage.Default.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(Convert.ToDouble(Properties.OptionsUpdatesPage.Default.CheckForUpdatesFrequencyDays)))); if (!Properties.OptionsUpdatesPage.Default.UpdatePending && DateTime.UtcNow <= nextUpdateCheck) return; @@ -417,10 +417,10 @@ namespace mRemoteNG.UI.Forms if (!(Runtime.WindowList == null || Runtime.WindowList.Count == 0)) { - var openConnections = 0; + int openConnections = 0; if (pnlDock.Contents.Count > 0) { - foreach (var dc in pnlDock.Contents) + foreach (IDockContent dc in pnlDock.Contents) { if (dc is not ConnectionWindow cw) continue; if (cw.Controls.Count < 1) continue; @@ -435,7 +435,7 @@ namespace mRemoteNG.UI.Forms (Properties.Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.Multiple & openConnections > 1) || Properties.Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.Exit)) { - var result = CTaskDialog.MessageBox(this, Application.ProductName, Language.ConfirmExitMainInstruction, "", "", "", Language.CheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.YesNo, ESysIcons.Question, ESysIcons.Question); + DialogResult result = CTaskDialog.MessageBox(this, Application.ProductName, Language.ConfirmExitMainInstruction, "", "", "", Language.CheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.YesNo, ESysIcons.Question, ESysIcons.Question); if (CTaskDialog.VerificationChecked) { Properties.Settings.Default.ConfirmCloseConnection--; //--? @@ -510,7 +510,7 @@ namespace mRemoteNG.UI.Forms _inMouseActivate = true; break; case NativeMethods.WM_ACTIVATEAPP: - var candidateTabToFocus = FromChildHandle(NativeMethods.WindowFromPoint(MousePosition)) + Control candidateTabToFocus = FromChildHandle(NativeMethods.WindowFromPoint(MousePosition)) ?? GetChildAtPoint(MousePosition); if (candidateTabToFocus is InterfaceControl) candidateTabToFocus.Parent.Focus(); _inMouseActivate = false; @@ -519,7 +519,7 @@ namespace mRemoteNG.UI.Forms // Only handle this msg if it was triggered by a click if (NativeMethods.LOWORD(m.WParam) == NativeMethods.WA_CLICKACTIVE) { - var controlThatWasClicked = FromChildHandle(NativeMethods.WindowFromPoint(MousePosition)) + Control controlThatWasClicked = FromChildHandle(NativeMethods.WindowFromPoint(MousePosition)) ?? GetChildAtPoint(MousePosition); if (controlThatWasClicked != null) { @@ -553,7 +553,7 @@ namespace mRemoteNG.UI.Forms break; case NativeMethods.WM_WINDOWPOSCHANGED: // Ignore this message if the window wasn't activated - var windowPos = + NativeMethods.WINDOWPOS windowPos = (NativeMethods.WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(NativeMethods.WINDOWPOS)); if ((windowPos.flags & NativeMethods.SWP_NOACTIVATE) == 0) { @@ -564,7 +564,7 @@ namespace mRemoteNG.UI.Forms case NativeMethods.WM_SYSCOMMAND: if (m.WParam == new IntPtr(0)) ShowHideMenu(); - var screen = _advancedWindowMenu.GetScreenById(m.WParam.ToInt32()); + Screen screen = _advancedWindowMenu.GetScreenById(m.WParam.ToInt32()); if (screen != null) { Screens.SendFormToScreen(screen); @@ -608,9 +608,9 @@ namespace mRemoteNG.UI.Forms private static void SimulateClick(Control control) { - var clientMousePosition = control.PointToClient(MousePosition); - var temp_wLow = clientMousePosition.X; - var temp_wHigh = clientMousePosition.Y; + Point clientMousePosition = control.PointToClient(MousePosition); + int temp_wLow = clientMousePosition.X; + int temp_wHigh = clientMousePosition.Y; NativeMethods.SendMessage(control.Handle, NativeMethods.WM_LBUTTONDOWN, (IntPtr)NativeMethods.MK_LBUTTON, (IntPtr)NativeMethods.MAKELPARAM(ref temp_wLow, ref temp_wHigh)); clientMousePosition.X = temp_wLow; @@ -619,15 +619,15 @@ namespace mRemoteNG.UI.Forms private void ActivateConnection() { - var cw = pnlDock.ActiveDocument as ConnectionWindow; - var dp = cw?.ActiveControl as DockPane; + ConnectionWindow cw = pnlDock.ActiveDocument as ConnectionWindow; + DockPane dp = cw?.ActiveControl as DockPane; if (dp?.ActiveContent is not ConnectionTab tab) return; - var ifc = InterfaceControl.FindInterfaceControl(tab); + InterfaceControl ifc = InterfaceControl.FindInterfaceControl(tab); if (ifc == null) return; ifc.Protocol.Focus(); - var conFormWindow = ifc.FindForm(); + Form conFormWindow = ifc.FindForm(); ((ConnectionTab)conFormWindow)?.RefreshInterfaceController(); } @@ -644,7 +644,7 @@ namespace mRemoteNG.UI.Forms return; } - var titleBuilder = new StringBuilder(Application.ProductName); + StringBuilder titleBuilder = new(Application.ProductName); const string separator = " - "; if (Runtime.ConnectionsService.IsConnectionsFileLoaded) @@ -686,10 +686,10 @@ namespace mRemoteNG.UI.Forms } else { - var nonConnectionPanelCount = 0; - foreach (var dockContent in pnlDock.Documents) + int nonConnectionPanelCount = 0; + foreach (IDockContent dockContent in pnlDock.Documents) { - var document = (DockContent)dockContent; + DockContent document = (DockContent)dockContent; if ((closingDocument == null || document != closingDocument) && document is not ConnectionWindow) { nonConnectionPanelCount++; diff --git a/mRemoteNG/UI/Forms/frmOptions.cs b/mRemoteNG/UI/Forms/frmOptions.cs index fc4e9789..267d3b7a 100644 --- a/mRemoteNG/UI/Forms/frmOptions.cs +++ b/mRemoteNG/UI/Forms/frmOptions.cs @@ -18,7 +18,7 @@ namespace mRemoteNG.UI.Forms public partial class FrmOptions : Form { private int _currentIndex = 0; - private readonly List _optionPages = new(); + private readonly List _optionPages = []; private string _pageName; private readonly DisplayProperties _display = new(); private readonly List _optionPageObjectNames; @@ -36,8 +36,8 @@ namespace mRemoteNG.UI.Forms _pageName = pageName; Cursor.Current = Cursors.Default; - _optionPageObjectNames = new List - { + _optionPageObjectNames = + [ nameof(StartupExitPage), nameof(AppearancePage), nameof(ConnectionsPage), @@ -50,7 +50,7 @@ namespace mRemoteNG.UI.Forms nameof(SecurityPage), nameof(AdvancedPage), nameof(BackupPage) - }; + ]; InitOptionsPagesToListView(); } @@ -222,8 +222,8 @@ namespace mRemoteNG.UI.Forms { _pageName = pageName ?? Language.StartupExit; - var isSet = false; - for (var i = 0; i < lstOptionPages.Items.Count; i++) + bool isSet = false; + for (int i = 0; i < lstOptionPages.Items.Count; i++) { if (!lstOptionPages.Items[i].Text.Equals(_pageName)) continue; lstOptionPages.Items[i].Selected = true; @@ -248,7 +248,7 @@ namespace mRemoteNG.UI.Forms private void SaveOptions() { - foreach (var page in _optionPages) + foreach (OptionsPage page in _optionPages) { Debug.WriteLine(page.PageName); page.SaveSettings(); @@ -262,7 +262,7 @@ namespace mRemoteNG.UI.Forms { pnlMain.Controls.Clear(); - var page = (OptionsPage)lstOptionPages.SelectedObject; + OptionsPage page = (OptionsPage)lstOptionPages.SelectedObject; if (page != null) pnlMain.Controls.Add(page); } diff --git a/mRemoteNG/UI/GraphicsUtilities/GdiPlusGraphicsProvider.cs b/mRemoteNG/UI/GraphicsUtilities/GdiPlusGraphicsProvider.cs index f3a39a16..27c115a1 100644 --- a/mRemoteNG/UI/GraphicsUtilities/GdiPlusGraphicsProvider.cs +++ b/mRemoteNG/UI/GraphicsUtilities/GdiPlusGraphicsProvider.cs @@ -18,9 +18,9 @@ namespace mRemoteNG.UI.GraphicsUtilities { //This method could be optimized, as it is called for every control / subcontrol //and causes overhead for 100s in the options page - using (var f = new Form()) + using (Form f = new()) { - var g = f.CreateGraphics(); + Graphics g = f.CreateGraphics(); return new SizeF(g.DpiX / BaselineDpi, g.DpiY / BaselineDpi); } } diff --git a/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs b/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs index 67fa2502..4c179d6c 100644 --- a/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs +++ b/mRemoteNG/UI/Menu/AdvancedWindowMenu.cs @@ -20,7 +20,7 @@ namespace mRemoteNG.UI.Menu public Screen GetScreenById(int id) { - for (var i = 0; i <= _sysMenSubItems.Length - 1; i++) + for (int i = 0; i <= _sysMenSubItems.Length - 1; i++) { if (_sysMenSubItems[i] != id) continue; return Screen.AllScreens[i]; @@ -43,8 +43,8 @@ namespace mRemoteNG.UI.Menu public void BuildAdditionalMenuItems() { // option to send main form to another screen - var popMen = _windowMenu.CreatePopupMenuItem(); - for (var i = 0; i <= Screen.AllScreens.Length - 1; i++) + IntPtr popMen = _windowMenu.CreatePopupMenuItem(); + for (int i = 0; i <= Screen.AllScreens.Length - 1; i++) { _sysMenSubItems[i] = 200 + i; _windowMenu.AppendMenuItem(popMen, WindowMenu.Flags.MF_STRING, new IntPtr(_sysMenSubItems[i]), diff --git a/mRemoteNG/UI/Menu/msMain/FileMenu.cs b/mRemoteNG/UI/Menu/msMain/FileMenu.cs index 24892411..d98608ff 100644 --- a/mRemoteNG/UI/Menu/msMain/FileMenu.cs +++ b/mRemoteNG/UI/Menu/msMain/FileMenu.cs @@ -137,7 +137,7 @@ namespace mRemoteNG.UI.Menu private void mMenFileNew_Click(object sender, EventArgs e) { - using (var saveFileDialog = DialogFactory.ConnectionsSaveAsDialog()) + using (SaveFileDialog saveFileDialog = DialogFactory.ConnectionsSaveAsDialog()) { if (saveFileDialog.ShowDialog() != DialogResult.OK) { @@ -152,7 +152,7 @@ namespace mRemoteNG.UI.Menu { if (Runtime.ConnectionsService.IsConnectionsFileLoaded) { - var msgBoxResult = MessageBox.Show(Language.SaveConnectionsFileBeforeOpeningAnother, + DialogResult msgBoxResult = MessageBox.Show(Language.SaveConnectionsFileBeforeOpeningAnother, Language.Save, MessageBoxButtons.YesNoCancel); // ReSharper disable once SwitchStatementMissingSomeCases switch (msgBoxResult) @@ -175,12 +175,12 @@ namespace mRemoteNG.UI.Menu private void mMenFileSaveAs_Click(object sender, EventArgs e) { - using (var saveFileDialog = DialogFactory.ConnectionsSaveAsDialog()) + using (SaveFileDialog saveFileDialog = DialogFactory.ConnectionsSaveAsDialog()) { if (saveFileDialog.ShowDialog(FrmMain.Default) != DialogResult.OK) return; - var newFileName = saveFileDialog.FileName; + string newFileName = saveFileDialog.FileName; Runtime.ConnectionsService.SaveConnections(Runtime.ConnectionsService.ConnectionTreeModel, false, new SaveFilter(), newFileName); diff --git a/mRemoteNG/UI/Menu/msMain/ViewMenu.cs b/mRemoteNG/UI/Menu/msMain/ViewMenu.cs index 6f1cd3ac..e2b63147 100644 --- a/mRemoteNG/UI/Menu/msMain/ViewMenu.cs +++ b/mRemoteNG/UI/Menu/msMain/ViewMenu.cs @@ -207,9 +207,9 @@ namespace mRemoteNG.UI.Menu _mMenViewConnectionPanels.DropDownItems.Clear(); - for (var i = 0; i <= Runtime.WindowList.Count - 1; i++) + for (int i = 0; i <= Runtime.WindowList.Count - 1; i++) { - var tItem = new ToolStripMenuItem(Runtime.WindowList[i].Text, Runtime.WindowList[i].Icon.ToBitmap(), ConnectionPanelMenuItem_Click) + ToolStripMenuItem tItem = new(Runtime.WindowList[i].Text, Runtime.WindowList[i].Icon.ToBitmap(), ConnectionPanelMenuItem_Click) { Tag = Runtime.WindowList[i] }; _mMenViewConnectionPanels.DropDownItems.Add(tItem); } @@ -251,7 +251,7 @@ namespace mRemoteNG.UI.Menu private void mMenViewResetLayout_Click(object sender, EventArgs e) { - var msgBoxResult = MessageBox.Show(Language.ConfirmResetLayout, string.Empty, MessageBoxButtons.YesNo, MessageBoxIcon.Question); + DialogResult msgBoxResult = MessageBox.Show(Language.ConfirmResetLayout, string.Empty, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (msgBoxResult == DialogResult.Yes) { MainForm.SetDefaultLayout(); diff --git a/mRemoteNG/UI/Panels/PanelAdder.cs b/mRemoteNG/UI/Panels/PanelAdder.cs index e33ddbe6..75d9afde 100644 --- a/mRemoteNG/UI/Panels/PanelAdder.cs +++ b/mRemoteNG/UI/Panels/PanelAdder.cs @@ -19,7 +19,7 @@ namespace mRemoteNG.UI.Panels { try { - var connectionForm = new ConnectionWindow(new DockContent()); + ConnectionWindow connectionForm = new(new DockContent()); BuildConnectionWindowContextMenu(connectionForm); SetConnectionWindowTitle(title, connectionForm); ShowConnectionWindow(connectionForm); @@ -58,17 +58,17 @@ namespace mRemoteNG.UI.Panels private static void BuildConnectionWindowContextMenu(DockContent pnlcForm) { - var cMen = new ContextMenuStrip(); - var cMenRen = CreateRenameMenuItem(pnlcForm); - var cMenScreens = CreateScreensMenuItem(pnlcForm); - var cMenClose = CreateCloseMenuItem(pnlcForm); + ContextMenuStrip cMen = new(); + ToolStripMenuItem cMenRen = CreateRenameMenuItem(pnlcForm); + ToolStripMenuItem cMenScreens = CreateScreensMenuItem(pnlcForm); + ToolStripMenuItem cMenClose = CreateCloseMenuItem(pnlcForm); cMen.Items.AddRange(new ToolStripItem[] {cMenRen, cMenScreens, cMenClose}); pnlcForm.TabPageContextMenuStrip = cMen; } private static ToolStripMenuItem CreateScreensMenuItem(DockContent pnlcForm) { - var cMenScreens = new ToolStripMenuItem + ToolStripMenuItem cMenScreens = new() { Text = Language.SendTo, Image = Properties.Resources.Monitor_16x, @@ -81,7 +81,7 @@ namespace mRemoteNG.UI.Panels private static ToolStripMenuItem CreateRenameMenuItem(DockContent pnlcForm) { - var cMenRen = new ToolStripMenuItem + ToolStripMenuItem cMenRen = new() { Text = Language.Rename, Image = Properties.Resources.Rename_16x, @@ -93,7 +93,7 @@ namespace mRemoteNG.UI.Panels private static ToolStripMenuItem CreateCloseMenuItem(DockContent pnlcForm) { - var cMenClose = new ToolStripMenuItem + ToolStripMenuItem cMenClose = new() { Text = Language._Close, Image = Properties.Resources.Close_16x, @@ -107,9 +107,9 @@ namespace mRemoteNG.UI.Panels { try { - var conW = (ConnectionWindow)((ToolStripMenuItem)sender).Tag; + ConnectionWindow conW = (ConnectionWindow)((ToolStripMenuItem)sender).Tag; - using (var newTitle = new FrmInputBox(Language.NewTitle, Language.NewTitle + ":", "")) + using (FrmInputBox newTitle = new(Language.NewTitle, Language.NewTitle + ":", "")) if (newTitle.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(newTitle.returnValue)) conW.SetFormText(newTitle.returnValue.Replace("&", "&&")); } @@ -123,7 +123,7 @@ namespace mRemoteNG.UI.Panels { try { - var conW = (ConnectionWindow)((ToolStripMenuItem)sender).Tag; + ConnectionWindow conW = (ConnectionWindow)((ToolStripMenuItem)sender).Tag; conW.Close(); } catch (Exception ex) @@ -136,12 +136,12 @@ namespace mRemoteNG.UI.Panels { try { - var cMenScreens = (ToolStripMenuItem)sender; + ToolStripMenuItem cMenScreens = (ToolStripMenuItem)sender; cMenScreens.DropDownItems.Clear(); - for (var i = 0; i <= Screen.AllScreens.Length - 1; i++) + for (int i = 0; i <= Screen.AllScreens.Length - 1; i++) { - var cMenScreen = new ToolStripMenuItem(Language.Screen + " " + Convert.ToString(i + 1)) + ToolStripMenuItem cMenScreen = new(Language.Screen + " " + Convert.ToString(i + 1)) { Tag = new ArrayList(), Image = Properties.Resources.Monitor_16x @@ -164,9 +164,9 @@ namespace mRemoteNG.UI.Panels DockContent panel = null; try { - var tagEnumeration = (IEnumerable)((ToolStripMenuItem)sender).Tag; + IEnumerable tagEnumeration = (IEnumerable)((ToolStripMenuItem)sender).Tag; if (tagEnumeration == null) return; - foreach (var obj in tagEnumeration) + foreach (object obj in tagEnumeration) { if (obj is Screen screen1) { diff --git a/mRemoteNG/UI/StatusImageList.cs b/mRemoteNG/UI/StatusImageList.cs index ca6b6b2f..92257ae2 100644 --- a/mRemoteNG/UI/StatusImageList.cs +++ b/mRemoteNG/UI/StatusImageList.cs @@ -16,14 +16,12 @@ namespace mRemoteNG.UI public StatusImageList() { - var display = new DisplayProperties(); + DisplayProperties display = new(); ImageList = new ImageList { ColorDepth = ColorDepth.Depth32Bit, - ImageSize = new Size( - (int)Math.Round(16 * display.ResolutionScalingFactor.Width), - (int)Math.Round(16 * display.ResolutionScalingFactor.Height)), + ImageSize = new Size((int)Math.Round(16 * display.ResolutionScalingFactor.Width), (int)Math.Round(16 * display.ResolutionScalingFactor.Height)), TransparentColor = Color.Transparent }; @@ -37,7 +35,7 @@ namespace mRemoteNG.UI public Image GetImage(ConnectionInfo connectionInfo) { - var key = GetKey(connectionInfo); + string key = GetKey(connectionInfo); return ImageList.Images.ContainsKey(key) ? ImageList.Images[key] : null; @@ -55,7 +53,7 @@ namespace mRemoteNG.UI private static string BuildConnectionIconName(string icon, bool connected) { - var status = connected ? "Play" : "Default"; + string status = connected ? "Play" : "Default"; return $"Connection_{icon}_{status}"; } @@ -68,25 +66,24 @@ namespace mRemoteNG.UI return DefaultConnectionIcon; } - var connected = connection.OpenConnections.Count > 0; - var name = BuildConnectionIconName(connection.Icon, connected); + bool connected = connection.OpenConnections.Count > 0; + string name = BuildConnectionIconName(connection.Icon, connected); if (ImageList.Images.ContainsKey(name)) return name; - var image = ConnectionIcon.FromString(connection.Icon); + Icon image = ConnectionIcon.FromString(connection.Icon); if (image == null) { return DefaultConnectionIcon; } ImageList.Images.Add(BuildConnectionIconName(connection.Icon, false), image); - ImageList.Images.Add(BuildConnectionIconName(connection.Icon, true), - Overlay(image, Properties.Resources.ConnectedOverlay)); + ImageList.Images.Add(BuildConnectionIconName(connection.Icon, true), Overlay(image, Properties.Resources.ConnectedOverlay)); return name; } private static Bitmap Overlay(Icon background, Image foreground) { - var result = new Bitmap(background.ToBitmap(), new Size(16, 16)); - using (var gr = Graphics.FromImage(result)) + Bitmap result = new(background.ToBitmap(), new Size(16, 16)); + using (Graphics gr = Graphics.FromImage(result)) { gr.DrawImage(foreground, new Rectangle(0, 0, foreground.Width, foreground.Height)); } @@ -104,9 +101,7 @@ namespace mRemoteNG.UI } catch (Exception ex) { - Runtime.MessageCollector.AddExceptionStackTrace( - $"Unable to fill the image list of type {nameof(StatusImageList)}", - ex); + Runtime.MessageCollector.AddExceptionStackTrace($"Unable to fill the image list of type {nameof(StatusImageList)}", ex); } } diff --git a/mRemoteNG/UI/Tabs/ConnectionTab.cs b/mRemoteNG/UI/Tabs/ConnectionTab.cs index 894f7ccc..82d2926f 100644 --- a/mRemoteNG/UI/Tabs/ConnectionTab.cs +++ b/mRemoteNG/UI/Tabs/ConnectionTab.cs @@ -46,7 +46,7 @@ namespace mRemoteNG.UI.Tabs { if (Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.All) { - var result = CTaskDialog.MessageBox(this, GeneralAppInfo.ProductName, + DialogResult result = CTaskDialog.MessageBox(this, GeneralAppInfo.ProductName, string .Format(Language.ConfirmCloseConnectionPanelMainInstruction, TabText), "", "", "", @@ -89,7 +89,7 @@ namespace mRemoteNG.UI.Tabs { try { - var interfaceControl = Tag as InterfaceControl; + InterfaceControl interfaceControl = Tag as InterfaceControl; if (interfaceControl?.Info.Protocol == ProtocolType.VNC) ((ProtocolVNC)interfaceControl.Protocol).RefreshScreen(); } diff --git a/mRemoteNG/UI/Tabs/DockPaneStripNG.cs b/mRemoteNG/UI/Tabs/DockPaneStripNG.cs index c798621d..485c651f 100644 --- a/mRemoteNG/UI/Tabs/DockPaneStripNG.cs +++ b/mRemoteNG/UI/Tabs/DockPaneStripNG.cs @@ -117,7 +117,7 @@ namespace mRemoteNG.UI.Tabs { get { - var rect = ClientRectangle; + Rectangle rect = ClientRectangle; return new Rectangle(rect.X, rect.Top + ToolWindowStripGapTop, rect.Width, rect.Height - ToolWindowStripGapTop - ToolWindowStripGapBottom); } @@ -127,7 +127,7 @@ namespace mRemoteNG.UI.Tabs { get { - var rect = ClientRectangle; + Rectangle rect = ClientRectangle; return new Rectangle(rect.X, rect.Top + DocumentStripGapTop, rect.Width, rect.Height + DocumentStripGapTop - DocumentStripGapBottom); } @@ -140,11 +140,11 @@ namespace mRemoteNG.UI.Tabs if (Appearance == DockPane.AppearanceStyle.ToolWindow) return TabStripRectangle; - var rectWindow = TabStripRectangle; - var x = rectWindow.X; - var y = rectWindow.Y; - var width = rectWindow.Width; - var height = rectWindow.Height; + Rectangle rectWindow = TabStripRectangle; + int x = rectWindow.X; + int y = rectWindow.Y; + int width = rectWindow.Width; + int height = rectWindow.Height; x += DocumentTabGapLeft; width -= DocumentTabGapLeft + @@ -393,7 +393,7 @@ namespace mRemoteNG.UI.Tabs if (DockPane.IsAutoHide || Tabs.Count <= 1) return 0; - var height = Math.Max(TextFont.Height + (PatchController.EnableHighDpi == true ? DocumentIconGapBottom : 0), + int height = Math.Max(TextFont.Height + (PatchController.EnableHighDpi == true ? DocumentIconGapBottom : 0), ToolWindowImageHeight + ToolWindowImageGapTop + ToolWindowImageGapBottom) + ToolWindowStripGapTop + ToolWindowStripGapBottom; @@ -402,7 +402,7 @@ namespace mRemoteNG.UI.Tabs private int MeasureHeight_Document() { - var height = + int height = Math.Max( TextFont.Height + DocumentTabGapTop + (PatchController.EnableHighDpi == true ? DocumentIconGapBottom : 0), @@ -440,16 +440,16 @@ namespace mRemoteNG.UI.Tabs private GraphicsPath GetOutline_Document(int index) { - var rectangle = Tabs[index].Rectangle; + Rectangle? rectangle = Tabs[index].Rectangle; if (rectangle == null) return null; - var rectTab = rectangle.Value; + Rectangle rectTab = rectangle.Value; rectTab.X -= rectTab.Height / 2; rectTab.Intersect(TabsRectangle); rectTab = RectangleToScreen(DrawHelper.RtlTransform(this, rectTab)); - var rectPaneClient = DockPane.RectangleToScreen(DockPane.ClientRectangle); + Rectangle rectPaneClient = DockPane.RectangleToScreen(DockPane.ClientRectangle); - var path = new GraphicsPath(); - var pathTab = GetTabOutline_Document(Tabs[index], true, true, true); + GraphicsPath path = new(); + GraphicsPath pathTab = GetTabOutline_Document(Tabs[index], true, true, true); path.AddPath(pathTab, true); if (DockPane.DockPanel.DocumentTabStripLocation == DocumentTabStripLocation.Bottom) @@ -474,15 +474,15 @@ namespace mRemoteNG.UI.Tabs private GraphicsPath GetOutline_ToolWindow(int index) { - var rectangle = Tabs[index].Rectangle; + Rectangle? rectangle = Tabs[index].Rectangle; if (rectangle == null) return null; - var rectTab = rectangle.Value; + Rectangle rectTab = rectangle.Value; rectTab.Intersect(TabsRectangle); rectTab = RectangleToScreen(DrawHelper.RtlTransform(this, rectTab)); - var rectPaneClient = DockPane.RectangleToScreen(DockPane.ClientRectangle); + Rectangle rectPaneClient = DockPane.RectangleToScreen(DockPane.ClientRectangle); - var path = new GraphicsPath(); - var pathTab = GetTabOutline(Tabs[index], true, true); + GraphicsPath path = new(); + GraphicsPath pathTab = GetTabOutline(Tabs[index], true, true); path.AddPath(pathTab, true); path.AddLine(rectTab.Left, rectTab.Top, rectPaneClient.Left, rectTab.Top); path.AddLine(rectPaneClient.Left, rectTab.Top, rectPaneClient.Left, rectPaneClient.Top); @@ -505,29 +505,29 @@ namespace mRemoteNG.UI.Tabs if (Tabs.Count <= 1 || DockPane.IsAutoHide) return; - var rectTabStrip = TabStripRectangle; + Rectangle rectTabStrip = TabStripRectangle; // Calculate tab widths - var countTabs = Tabs.Count; - foreach (var tab1 in Tabs) + int countTabs = Tabs.Count; + foreach (Tab tab1 in Tabs) { - var tab = (MremoteNGTab)tab1; + MremoteNGTab tab = (MremoteNGTab)tab1; tab.MaxWidth = GetMaxTabWidth(Tabs.IndexOf(tab)); tab.Flag = false; } // Set tab whose max width less than average width bool anyWidthWithinAverage; - var totalWidth = rectTabStrip.Width - ToolWindowStripGapLeft - ToolWindowStripGapRight; - var totalAllocatedWidth = 0; - var averageWidth = totalWidth / countTabs; - var remainedTabs = countTabs; + int totalWidth = rectTabStrip.Width - ToolWindowStripGapLeft - ToolWindowStripGapRight; + int totalAllocatedWidth = 0; + int averageWidth = totalWidth / countTabs; + int remainedTabs = countTabs; for (anyWidthWithinAverage = true; anyWidthWithinAverage && remainedTabs > 0;) { anyWidthWithinAverage = false; - foreach (var tab1 in Tabs) + foreach (Tab tab1 in Tabs) { - var tab = (MremoteNGTab)tab1; + MremoteNGTab tab = (MremoteNGTab)tab1; if (tab.Flag) continue; @@ -546,10 +546,10 @@ namespace mRemoteNG.UI.Tabs // If any tab width not set yet, set it to the average width if (remainedTabs > 0) { - var roundUpWidth = (totalWidth - totalAllocatedWidth) - (averageWidth * remainedTabs); - foreach (var tab1 in Tabs) + int roundUpWidth = (totalWidth - totalAllocatedWidth) - (averageWidth * remainedTabs); + foreach (Tab tab1 in Tabs) { - var tab = (MremoteNGTab)tab1; + MremoteNGTab tab = (MremoteNGTab)tab1; if (tab.Flag) continue; @@ -565,10 +565,10 @@ namespace mRemoteNG.UI.Tabs } // Set the X position of the tabs - var x = rectTabStrip.X + ToolWindowStripGapLeft; - foreach (var tab1 in Tabs) + int x = rectTabStrip.X + ToolWindowStripGapLeft; + foreach (Tab tab1 in Tabs) { - var tab = (MremoteNGTab)tab1; + MremoteNGTab tab = (MremoteNGTab)tab1; tab.TabX = x; x += tab.TabWidth; } @@ -576,11 +576,11 @@ namespace mRemoteNG.UI.Tabs private bool CalculateDocumentTab(Rectangle rectTabStrip, ref int x, int index) { - var overflow = false; + bool overflow = false; if (!(Tabs[index] is MremoteNGTab tab)) return false; tab.MaxWidth = GetMaxTabWidth(index); - var width = Math.Min(tab.MaxWidth, DocumentTabMaxWidth); + int width = Math.Min(tab.MaxWidth, DocumentTabMaxWidth); if (x + width < rectTabStrip.Right || index == StartDisplayingTab) { tab.TabX = x; @@ -607,10 +607,10 @@ namespace mRemoteNG.UI.Tabs if (m_startDisplayingTab >= Tabs.Count) m_startDisplayingTab = 0; - var rectTabStrip = TabsRectangle; + Rectangle rectTabStrip = TabsRectangle; - var x = rectTabStrip.X; //+ rectTabStrip.Height / 2; - var overflow = false; + int x = rectTabStrip.X; //+ rectTabStrip.Height / 2; + bool overflow = false; // Originally all new documents that were considered overflow // (not enough pane strip space to show all tabs) were added to @@ -619,12 +619,12 @@ namespace mRemoteNG.UI.Tabs // then we are dealing with making sure a specific tab is kept in focus. if (m_startDisplayingTab > 0) { - var tempX = x; + int tempX = x; if (Tabs[m_startDisplayingTab] is MremoteNGTab tab) tab.MaxWidth = GetMaxTabWidth(m_startDisplayingTab); // Add the active tab and tabs to the left - for (var i = StartDisplayingTab; i >= 0; i--) + for (int i = StartDisplayingTab; i >= 0; i--) CalculateDocumentTab(rectTabStrip, ref tempX, i); // Store which tab is the first one displayed so that it @@ -636,7 +636,7 @@ namespace mRemoteNG.UI.Tabs // Start with the first tab displayed - name is a little misleading. // Loop through each tab and set its location. If there is not enough // room for all of them overflow will be returned. - for (var i = EndDisplayingTab; i < Tabs.Count; i++) + for (int i = EndDisplayingTab; i < Tabs.Count; i++) overflow = CalculateDocumentTab(rectTabStrip, ref tempX, i); // If not all tabs are shown then we have an overflow. @@ -645,9 +645,9 @@ namespace mRemoteNG.UI.Tabs } else { - for (var i = StartDisplayingTab; i < Tabs.Count; i++) + for (int i = StartDisplayingTab; i < Tabs.Count; i++) overflow = CalculateDocumentTab(rectTabStrip, ref x, i); - for (var i = 0; i < StartDisplayingTab; i++) + for (int i = 0; i < StartDisplayingTab; i++) overflow = CalculateDocumentTab(rectTabStrip, ref x, i); FirstDisplayingTab = StartDisplayingTab; @@ -658,9 +658,9 @@ namespace mRemoteNG.UI.Tabs m_startDisplayingTab = 0; FirstDisplayingTab = 0; x = rectTabStrip.X; - foreach (var tab1 in Tabs) + foreach (Tab tab1 in Tabs) { - var tab = (MremoteNGTab)tab1; + MremoteNGTab tab = (MremoteNGTab)tab1; tab.TabX = x; x += tab.TabWidth; } @@ -680,7 +680,7 @@ namespace mRemoteNG.UI.Tabs private bool EnsureDocumentTabVisible(IDockContent content, bool repaint) { - var index = Tabs.IndexOf(content); + int index = Tabs.IndexOf(content); if (index == -1) // TODO: should prevent it from being -1; return false; @@ -703,8 +703,8 @@ namespace mRemoteNG.UI.Tabs private int GetMaxTabWidth_ToolWindow(int index) { - var content = Tabs[index].Content; - var sizeString = TextRenderer.MeasureText(content.DockHandler.TabText, TextFont); + IDockContent content = Tabs[index].Content; + Size sizeString = TextRenderer.MeasureText(content.DockHandler.TabText, TextFont); return ToolWindowImageWidth + sizeString.Width + ToolWindowImageGapLeft + ToolWindowImageGapRight + ToolWindowTextGapRight; } @@ -713,9 +713,9 @@ namespace mRemoteNG.UI.Tabs private int GetMaxTabWidth_Document(int index) { - var content = Tabs[index].Content; - var height = GetTabRectangle_Document(index).Height; - var sizeText = TextRenderer.MeasureText(content.DockHandler.TabText, BoldFont, + IDockContent content = Tabs[index].Content; + int height = GetTabRectangle_Document(index).Height; + Size sizeText = TextRenderer.MeasureText(content.DockHandler.TabText, BoldFont, new Size(DocumentTabMaxWidth, height), DocumentTextFormat); int width; @@ -732,7 +732,7 @@ namespace mRemoteNG.UI.Tabs private void DrawTabStrip(Graphics g) { // IMPORTANT: fill background. - var rectTabStrip = TabStripRectangle; + Rectangle rectTabStrip = TabStripRectangle; g.FillRectangle( DockPane.DockPanel.Theme.PaintingService.GetBrush(DockPane.DockPanel.Theme.ColorPalette .MainWindowActive @@ -746,19 +746,19 @@ namespace mRemoteNG.UI.Tabs private void DrawTabStrip_Document(Graphics g) { - var count = Tabs.Count; + int count = Tabs.Count; if (count == 0) return; - var rectTabStrip = new Rectangle(TabStripRectangle.Location, TabStripRectangle.Size); + Rectangle rectTabStrip = new(TabStripRectangle.Location, TabStripRectangle.Size); rectTabStrip.Height += 1; // Draw the tabs - var rectTabOnly = TabsRectangle; + Rectangle rectTabOnly = TabsRectangle; Rectangle rectTab; MremoteNGTab tabActive = null; g.SetClip(DrawHelper.RtlTransform(this, rectTabOnly)); - for (var i = 0; i < count; i++) + for (int i = 0; i < count; i++) { rectTab = GetTabRectangle(i); if (Tabs[i].Content == DockPane.ActiveContent) @@ -799,13 +799,13 @@ namespace mRemoteNG.UI.Tabs private void DrawTabStrip_ToolWindow(Graphics g) { - var rect = TabStripRectangle_ToolWindow; - var borderColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowBorder; + Rectangle rect = TabStripRectangle_ToolWindow; + Color borderColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowBorder; g.DrawLine(DockPane.DockPanel.Theme.PaintingService.GetPen(borderColor), rect.Left, rect.Top, rect.Right, rect.Top); - for (var i = 0; i < Tabs.Count; i++) + for (int i = 0; i < Tabs.Count; i++) { if (!(Tabs[i] is MremoteNGTab tab)) continue; tab.Rectangle = GetTabRectangle(i); @@ -822,18 +822,18 @@ namespace mRemoteNG.UI.Tabs private Rectangle GetTabRectangle_ToolWindow(int index) { - var rectTabStrip = TabStripRectangle; + Rectangle rectTabStrip = TabStripRectangle; - var tab = (MremoteNGTab)Tabs[index]; + MremoteNGTab tab = (MremoteNGTab)Tabs[index]; return new Rectangle(tab.TabX, rectTabStrip.Y, tab.TabWidth, rectTabStrip.Height); } private Rectangle GetTabRectangle_Document(int index) { - var rectTabStrip = TabStripRectangle; - var tab = (MremoteNGTab)Tabs[index]; + Rectangle rectTabStrip = TabStripRectangle; + MremoteNGTab tab = (MremoteNGTab)Tabs[index]; - var rect = new Rectangle + Rectangle rect = new() { X = tab.TabX, Width = tab.TabWidth, Height = rectTabStrip.Height - DocumentTabGapTop }; @@ -863,7 +863,7 @@ namespace mRemoteNG.UI.Tabs private GraphicsPath GetTabOutline_ToolWindow(Tab tab, bool rtlTransform, bool toScreen) { - var rect = GetTabRectangle(Tabs.IndexOf(tab)); + Rectangle rect = GetTabRectangle(Tabs.IndexOf(tab)); if (rtlTransform) rect = DrawHelper.RtlTransform(this, rect); if (toScreen) @@ -876,7 +876,7 @@ namespace mRemoteNG.UI.Tabs private GraphicsPath GetTabOutline_Document(Tab tab, bool rtlTransform, bool toScreen, bool full) { GraphicsPath.Reset(); - var rect = GetTabRectangle(Tabs.IndexOf(tab)); + Rectangle rect = GetTabRectangle(Tabs.IndexOf(tab)); // Shorten TabOutline so it doesn't get overdrawn by icons next to it rect.Intersect(TabsRectangle); @@ -894,12 +894,12 @@ namespace mRemoteNG.UI.Tabs private void DrawTab_ToolWindow(Graphics g, MremoteNGTab tab) { if (tab.Rectangle == null) return; - var rect = tab.Rectangle.Value; - var rectIcon = new Rectangle( + Rectangle rect = tab.Rectangle.Value; + Rectangle rectIcon = new( rect.X + ToolWindowImageGapLeft, rect.Y + rect.Height - ToolWindowImageGapBottom - ToolWindowImageHeight, ToolWindowImageWidth, ToolWindowImageHeight); - var rectText = PatchController.EnableHighDpi == true + Rectangle rectText = PatchController.EnableHighDpi == true ? new Rectangle( rect.X + ToolWindowImageGapLeft, rect.Y + rect.Height - ToolWindowImageGapBottom - TextFont.Height, @@ -909,12 +909,12 @@ namespace mRemoteNG.UI.Tabs rectText.Width = rect.Width - rectIcon.Width - ToolWindowImageGapLeft - ToolWindowImageGapRight - ToolWindowTextGapRight; - var rectTab = DrawHelper.RtlTransform(this, rect); + Rectangle rectTab = DrawHelper.RtlTransform(this, rect); rectText = DrawHelper.RtlTransform(this, rectText); rectIcon = DrawHelper.RtlTransform(this, rectIcon); - var borderColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowBorder; + Color borderColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowBorder; - var separatorColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowSeparator; + Color separatorColor = DockPane.DockPanel.Theme.ColorPalette.ToolWindowSeparator; if (DockPane.ActiveContent == tab.Content) { Color textColor; @@ -969,16 +969,16 @@ namespace mRemoteNG.UI.Tabs private void DrawTab_Document(Graphics g, MremoteNGTab tab) { if (tab.Rectangle == null) return; - var rect = tab.Rectangle.Value; + Rectangle rect = tab.Rectangle.Value; if (tab.TabWidth == 0) return; - var rectCloseButton = GetCloseButtonRect(rect); - var rectIcon = new Rectangle( + Rectangle rectCloseButton = GetCloseButtonRect(rect); + Rectangle rectIcon = new( rect.X + DocumentIconGapLeft, rect.Y + rect.Height - DocumentIconGapBottom - DocumentIconHeight, DocumentIconWidth, DocumentIconHeight); - var rectText = PatchController.EnableHighDpi == true + Rectangle rectText = PatchController.EnableHighDpi == true ? new Rectangle( rect.X + DocumentIconGapLeft, rect.Y + rect.Height - DocumentIconGapBottom - TextFont.Height, @@ -995,28 +995,28 @@ namespace mRemoteNG.UI.Tabs else rectText.Width = rect.Width - DocumentIconGapLeft - DocumentTextGapRight - rectCloseButton.Width; - var rectTab = DrawHelper.RtlTransform(this, rect); - var rectBack = DrawHelper.RtlTransform(this, rect); + Rectangle rectTab = DrawHelper.RtlTransform(this, rect); + Rectangle rectBack = DrawHelper.RtlTransform(this, rect); rectBack.Width += DocumentIconGapLeft; rectBack.X -= DocumentIconGapLeft; rectText = DrawHelper.RtlTransform(this, rectText); rectIcon = DrawHelper.RtlTransform(this, rectIcon); - var activeColor = DockPane.DockPanel.Theme.ColorPalette.TabSelectedActive.Background; - var lostFocusColor = DockPane.DockPanel.Theme.ColorPalette.TabSelectedInactive.Background; - var inactiveColor = DockPane.DockPanel.Theme.ColorPalette.MainWindowActive.Background; - var mouseHoverColor = DockPane.DockPanel.Theme.ColorPalette.TabUnselectedHovered.Background; + Color activeColor = DockPane.DockPanel.Theme.ColorPalette.TabSelectedActive.Background; + Color lostFocusColor = DockPane.DockPanel.Theme.ColorPalette.TabSelectedInactive.Background; + Color inactiveColor = DockPane.DockPanel.Theme.ColorPalette.MainWindowActive.Background; + Color mouseHoverColor = DockPane.DockPanel.Theme.ColorPalette.TabUnselectedHovered.Background; - var activeText = DockPane.DockPanel.Theme.ColorPalette.TabSelectedActive.Text; - var lostFocusText = DockPane.DockPanel.Theme.ColorPalette.TabSelectedInactive.Text; - var inactiveText = DockPane.DockPanel.Theme.ColorPalette.TabUnselected.Text; - var mouseHoverText = DockPane.DockPanel.Theme.ColorPalette.TabUnselectedHovered.Text; + Color activeText = DockPane.DockPanel.Theme.ColorPalette.TabSelectedActive.Text; + Color lostFocusText = DockPane.DockPanel.Theme.ColorPalette.TabSelectedInactive.Text; + Color inactiveText = DockPane.DockPanel.Theme.ColorPalette.TabUnselected.Text; + Color mouseHoverText = DockPane.DockPanel.Theme.ColorPalette.TabUnselectedHovered.Text; Color text; Image image = null; Color paint; - var imageService = DockPane.DockPanel.Theme.ImageService; + IImageService imageService = DockPane.DockPanel.Theme.ImageService; if (DockPane.ActiveContent == tab.Content) { if (DockPane.IsActiveDocumentPane) @@ -1104,11 +1104,11 @@ namespace mRemoteNG.UI.Tabs if (!m_suspendDrag) base.OnMouseMove(e); - var index = HitTest(PointToClient(MousePosition)); - var toolTip = string.Empty; + int index = HitTest(PointToClient(MousePosition)); + string toolTip = string.Empty; - var tabUpdate = false; - var buttonUpdate = false; + bool tabUpdate = false; + bool buttonUpdate = false; if (index != -1) { if (Tabs[index] is MremoteNGTab tab) @@ -1124,12 +1124,12 @@ namespace mRemoteNG.UI.Tabs else if (tab.MaxWidth > tab.TabWidth) toolTip = tab.Content.DockHandler.TabText; - var mousePos = PointToClient(MousePosition); + Point mousePos = PointToClient(MousePosition); if (tab.Rectangle != null) { - var tabRect = tab.Rectangle.Value; - var closeButtonRect = GetCloseButtonRect(tabRect); - var mouseRect = new Rectangle(mousePos, new Size(1, 1)); + Rectangle tabRect = tab.Rectangle.Value; + Rectangle closeButtonRect = GetCloseButtonRect(tabRect); + Rectangle mouseRect = new(mousePos, new Size(1, 1)); buttonUpdate = SetActiveClose(closeButtonRect.IntersectsWith(mouseRect) ? closeButtonRect : Rectangle.Empty); @@ -1157,15 +1157,15 @@ namespace mRemoteNG.UI.Tabs if (e.Button != MouseButtons.Left || Appearance != DockPane.AppearanceStyle.Document) return; - var indexHit = HitTest(); + int indexHit = HitTest(); if (indexHit > -1) TabCloseButtonHit(indexHit); } private void TabCloseButtonHit(int index) { - var mousePos = PointToClient(MousePosition); - var tabRect = GetTabBounds(Tabs[index]); + Point mousePos = PointToClient(MousePosition); + Rectangle tabRect = GetTabBounds(Tabs[index]); if (tabRect.Contains(ActiveClose) && ActiveCloseHitTest(mousePos)) TryCloseTab(index); } @@ -1178,7 +1178,7 @@ namespace mRemoteNG.UI.Tabs } const int gap = 3; - var imageSize = PatchController.EnableHighDpi == true ? rectTab.Height - gap * 2 : 15; + int imageSize = PatchController.EnableHighDpi == true ? rectTab.Height - gap * 2 : 15; return new Rectangle(rectTab.X + rectTab.Width - imageSize - gap - 1, rectTab.Y + gap, imageSize, imageSize); } @@ -1186,24 +1186,24 @@ namespace mRemoteNG.UI.Tabs private void WindowList_Click(object sender, EventArgs e) { SelectMenu.Items.Clear(); - foreach (var tab1 in Tabs) + foreach (Tab tab1 in Tabs) { - var tab = (MremoteNGTab)tab1; - var content = tab.Content; - var item = SelectMenu.Items.Add(content.DockHandler.TabText, content.DockHandler.Icon.ToBitmap()); + MremoteNGTab tab = (MremoteNGTab)tab1; + IDockContent content = tab.Content; + ToolStripItem item = SelectMenu.Items.Add(content.DockHandler.TabText, content.DockHandler.Icon.ToBitmap()); item.Tag = tab.Content; item.Click += ContextMenuItem_Click; } - var workingArea = + Rectangle workingArea = Screen.GetWorkingArea(ButtonWindowList.PointToScreen(new Point(ButtonWindowList.Width / 2, ButtonWindowList.Height / 2))); - var menu = new Rectangle( + Rectangle menu = new( ButtonWindowList.PointToScreen(new Point(0, ButtonWindowList.Location.Y + ButtonWindowList.Height)), SelectMenu.Size); - var menuMargined = new Rectangle(menu.X - SelectMenuMargin, menu.Y - SelectMenuMargin, + Rectangle menuMargined = new(menu.X - SelectMenuMargin, menu.Y - SelectMenuMargin, menu.Width + SelectMenuMargin, menu.Height + SelectMenuMargin); if (workingArea.Contains(menuMargined)) { @@ -1211,12 +1211,12 @@ namespace mRemoteNG.UI.Tabs } else { - var newPoint = menu.Location; + Point newPoint = menu.Location; newPoint.X = DrawHelper.Balance(SelectMenu.Width, SelectMenuMargin, newPoint.X, workingArea.Left, workingArea.Right); newPoint.Y = DrawHelper.Balance(SelectMenu.Size.Height, SelectMenuMargin, newPoint.Y, workingArea.Top, workingArea.Bottom); - var button = ButtonWindowList.PointToScreen(new Point(0, ButtonWindowList.Height)); + Point button = ButtonWindowList.PointToScreen(new Point(0, ButtonWindowList.Height)); if (newPoint.Y < button.Y) { // flip the menu up to be above the button. @@ -1233,7 +1233,7 @@ namespace mRemoteNG.UI.Tabs private void ContextMenuItem_Click(object sender, EventArgs e) { if (!(sender is ToolStripMenuItem item)) return; - var content = (IDockContent)item.Tag; + IDockContent content = (IDockContent)item.Tag; DockPane.ActiveContent = content; } @@ -1270,24 +1270,24 @@ namespace mRemoteNG.UI.Tabs private void LayoutButtons() { - var rectTabStrip = TabStripRectangle; + Rectangle rectTabStrip = TabStripRectangle; // Set position and size of the buttons - var buttonWidth = ButtonOverflow.Image.Width; - var buttonHeight = ButtonOverflow.Image.Height; - var height = rectTabStrip.Height - DocumentButtonGapTop - DocumentButtonGapBottom; + int buttonWidth = ButtonOverflow.Image.Width; + int buttonHeight = ButtonOverflow.Image.Height; + int height = rectTabStrip.Height - DocumentButtonGapTop - DocumentButtonGapBottom; if (buttonHeight < height) { buttonWidth = buttonWidth * height / buttonHeight; buttonHeight = height; } - var buttonSize = new Size(buttonWidth, buttonHeight); + Size buttonSize = new(buttonWidth, buttonHeight); - var x = rectTabStrip.X + rectTabStrip.Width - DocumentTabGapLeft + int x = rectTabStrip.X + rectTabStrip.Width - DocumentTabGapLeft - DocumentButtonGapRight - buttonWidth; - var y = rectTabStrip.Y + DocumentButtonGapTop; - var point = new Point(x, y); + int y = rectTabStrip.Y + DocumentButtonGapTop; + Point point = new(x, y); ButtonOverflow.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize)); // If the close button is not visible draw the window list button overtop. @@ -1310,9 +1310,9 @@ namespace mRemoteNG.UI.Tabs if (!TabsRectangle.Contains(point)) return -1; - foreach (var tab in Tabs) + foreach (Tab tab in Tabs) { - var path = GetTabOutline(tab, true, false); + GraphicsPath path = GetTabOutline(tab, true, false); if (path.IsVisible(point)) return Tabs.IndexOf(tab); } @@ -1322,7 +1322,7 @@ namespace mRemoteNG.UI.Tabs protected override bool MouseDownActivateTest(MouseEventArgs e) { - var result = base.MouseDownActivateTest(e); + bool result = base.MouseDownActivateTest(e); if (result && (e.Button == MouseButtons.Left) && (Appearance == DockPane.AppearanceStyle.Document)) { // don't activate if mouse is down on active close button @@ -1335,14 +1335,14 @@ namespace mRemoteNG.UI.Tabs private bool ActiveCloseHitTest(Point ptMouse) { if (ActiveClose.IsEmpty) return false; - var mouseRect = new Rectangle(ptMouse, new Size(1, 1)); + Rectangle mouseRect = new(ptMouse, new Size(1, 1)); return ActiveClose.IntersectsWith(mouseRect); } protected override Rectangle GetTabBounds(Tab tab) { - var path = GetTabOutline(tab, true, false); - var rectangle = path.GetBounds(); + GraphicsPath path = GetTabOutline(tab, true, false); + RectangleF rectangle = path.GetBounds(); return new Rectangle((int)rectangle.Left, (int)rectangle.Top, (int)rectangle.Width, (int)rectangle.Height); } @@ -1368,8 +1368,8 @@ namespace mRemoteNG.UI.Tabs protected override void OnMouseLeave(EventArgs e) { - var tabUpdate = SetMouseOverTab(null); - var buttonUpdate = SetActiveClose(Rectangle.Empty); + bool tabUpdate = SetMouseOverTab(null); + bool buttonUpdate = SetActiveClose(Rectangle.Empty); if (tabUpdate || buttonUpdate) Invalidate(); @@ -1384,7 +1384,7 @@ namespace mRemoteNG.UI.Tabs private void CloseProtocol() { - var ic = InterfaceControl.FindInterfaceControl(DockPane.DockPanel); + InterfaceControl ic = InterfaceControl.FindInterfaceControl(DockPane.DockPanel); ic?.Protocol.Close(); } diff --git a/mRemoteNG/UI/Tabs/MremoteNGAutoHideStrip.cs b/mRemoteNG/UI/Tabs/MremoteNGAutoHideStrip.cs index 86602854..41dc95c8 100644 --- a/mRemoteNG/UI/Tabs/MremoteNGAutoHideStrip.cs +++ b/mRemoteNG/UI/Tabs/MremoteNGAutoHideStrip.cs @@ -72,12 +72,14 @@ namespace mRemoteNG.UI.Tabs { if (_stringFormatTabVertical == null) { - _stringFormatTabVertical = new StringFormat(); - _stringFormatTabVertical.Alignment = StringAlignment.Near; - _stringFormatTabVertical.LineAlignment = StringAlignment.Center; - _stringFormatTabVertical.FormatFlags = - StringFormatFlags.NoWrap | StringFormatFlags.DirectionVertical; - _stringFormatTabVertical.Trimming = StringTrimming.None; + _stringFormatTabVertical = new StringFormat + { + Alignment = StringAlignment.Near, + LineAlignment = StringAlignment.Center, + FormatFlags = + StringFormatFlags.NoWrap | StringFormatFlags.DirectionVertical, + Trimming = StringTrimming.None + }; } if (RightToLeft == RightToLeft.Yes) @@ -162,12 +164,12 @@ namespace mRemoteNG.UI.Tabs protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); - var g = e.Graphics; + Graphics g = e.Graphics; - var startColor = DockPanel.Theme.Skin.AutoHideStripSkin.DockStripGradient.StartColor; - var endColor = DockPanel.Theme.Skin.AutoHideStripSkin.DockStripGradient.EndColor; - var gradientMode = DockPanel.Theme.Skin.AutoHideStripSkin.DockStripGradient.LinearGradientMode; - using (var brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode)) + Color startColor = DockPanel.Theme.Skin.AutoHideStripSkin.DockStripGradient.StartColor; + Color endColor = DockPanel.Theme.Skin.AutoHideStripSkin.DockStripGradient.EndColor; + LinearGradientMode gradientMode = DockPanel.Theme.Skin.AutoHideStripSkin.DockStripGradient.LinearGradientMode; + using (LinearGradientBrush brush = new(ClientRectangle, startColor, endColor, gradientMode)) { g.FillRectangle(brush, ClientRectangle); } @@ -191,21 +193,21 @@ namespace mRemoteNG.UI.Tabs private void DrawTabStrip(Graphics g, DockState dockState) { - var rectTabStrip = GetLogicalTabStripRectangle(dockState); + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); if (rectTabStrip.IsEmpty) return; - var matrixIdentity = g.Transform; + Matrix matrixIdentity = g.Transform; if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) { - var matrixRotated = new Matrix(); + Matrix matrixRotated = new(); matrixRotated.RotateAt(90, new PointF(rectTabStrip.X + (float)rectTabStrip.Height / 2, rectTabStrip.Y + (float)rectTabStrip.Height / 2)); g.Transform = matrixRotated; } - foreach (var pane in GetPanes(dockState)) + foreach (Pane pane in GetPanes(dockState)) { foreach (TabNG tab in pane.AutoHideTabs) DrawTab(g, tab); @@ -224,19 +226,19 @@ namespace mRemoteNG.UI.Tabs private void CalculateTabs(DockState dockState) { - var rectTabStrip = GetLogicalTabStripRectangle(dockState); + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); - var imageHeight = rectTabStrip.Height - ImageGapTop - ImageGapBottom; - var imageWidth = ImageWidth; + int imageHeight = rectTabStrip.Height - ImageGapTop - ImageGapBottom; + int imageWidth = ImageWidth; if (imageHeight > ImageHeight) imageWidth = ImageWidth * (imageHeight / ImageHeight); - var x = TabGapLeft + rectTabStrip.X; - foreach (var pane in GetPanes(dockState)) + int x = TabGapLeft + rectTabStrip.X; + foreach (Pane pane in GetPanes(dockState)) { foreach (TabNG tab in pane.AutoHideTabs) { - var width = imageWidth + ImageGapLeft + ImageGapRight + + int width = imageWidth + ImageGapLeft + ImageGapRight + TextRenderer.MeasureText(tab.Content.DockHandler.TabText, TextFont).Width + TextGapLeft + TextGapRight; tab.TabX = x; @@ -261,11 +263,11 @@ namespace mRemoteNG.UI.Tabs private GraphicsPath GetTabOutline(TabNG tab, bool transformed, bool rtlTransform) { - var dockState = tab.Content.DockHandler.DockState; - var rectTab = GetTabRectangle(tab, transformed); + DockState dockState = tab.Content.DockHandler.DockState; + Rectangle rectTab = GetTabRectangle(tab, transformed); if (rtlTransform) rectTab = RtlTransform(rectTab, dockState); - var upTab = (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockBottomAutoHide); + bool upTab = (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockBottomAutoHide); DrawHelper.GetRoundedCornerTab(GraphicsPath, rectTab, upTab); return GraphicsPath; @@ -273,31 +275,31 @@ namespace mRemoteNG.UI.Tabs private void DrawTab(Graphics g, TabNG tab) { - var rectTabOrigin = GetTabRectangle(tab); + Rectangle rectTabOrigin = GetTabRectangle(tab); if (rectTabOrigin.IsEmpty) return; - var dockState = tab.Content.DockHandler.DockState; - var content = tab.Content; + DockState dockState = tab.Content.DockHandler.DockState; + IDockContent content = tab.Content; - var path = GetTabOutline(tab, false, true); - var startColor = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.StartColor; - var endColor = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.EndColor; - var gradientMode = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.LinearGradientMode; + GraphicsPath path = GetTabOutline(tab, false, true); + Color startColor = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.StartColor; + Color endColor = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.EndColor; + LinearGradientMode gradientMode = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.LinearGradientMode; g.FillPath(new LinearGradientBrush(rectTabOrigin, startColor, endColor, gradientMode), path); g.DrawPath(PenTabBorder, path); // Set no rotate for drawing icon and text - using (var matrixRotate = g.Transform) + using (Matrix matrixRotate = g.Transform) { g.Transform = MatrixIdentity; // Draw the icon - var rectImage = rectTabOrigin; + Rectangle rectImage = rectTabOrigin; rectImage.X += ImageGapLeft; rectImage.Y += ImageGapTop; - var imageHeight = rectTabOrigin.Height - ImageGapTop - ImageGapBottom; - var imageWidth = ImageWidth; + int imageHeight = rectTabOrigin.Height - ImageGapTop - ImageGapBottom; + int imageWidth = ImageWidth; if (imageHeight > ImageHeight) imageWidth = ImageWidth * (imageHeight / ImageHeight); rectImage.Height = imageHeight; @@ -307,15 +309,15 @@ namespace mRemoteNG.UI.Tabs if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) { // The DockState is DockLeftAutoHide or DockRightAutoHide, so rotate the image 90 degrees to the right. - var rectTransform = RtlTransform(rectImage, dockState); + Rectangle rectTransform = RtlTransform(rectImage, dockState); Point[] rotationPoints = { - new Point(rectTransform.X + rectTransform.Width, rectTransform.Y), - new Point(rectTransform.X + rectTransform.Width, rectTransform.Y + rectTransform.Height), - new Point(rectTransform.X, rectTransform.Y) + new(rectTransform.X + rectTransform.Width, rectTransform.Y), + new(rectTransform.X + rectTransform.Width, rectTransform.Y + rectTransform.Height), + new(rectTransform.X, rectTransform.Y) }; - using (var rotatedIcon = new Icon(((Form)content).Icon, 16, 16)) + using (Icon rotatedIcon = new(((Form)content).Icon, 16, 16)) { g.DrawImage(rotatedIcon.ToBitmap(), rotationPoints); } @@ -327,12 +329,12 @@ namespace mRemoteNG.UI.Tabs } // Draw the text - var rectText = rectTabOrigin; + Rectangle rectText = rectTabOrigin; rectText.X += ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; rectText.Width -= ImageGapLeft + imageWidth + ImageGapRight + TextGapLeft; rectText = RtlTransform(GetTransformedRectangle(dockState, rectText), dockState); - var textColor = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.TextColor; + Color textColor = DockPanel.Theme.Skin.AutoHideStripSkin.TabGradient.TextColor; if (dockState == DockState.DockLeftAutoHide || dockState == DockState.DockRightAutoHide) g.DrawString(content.DockHandler.TabText, TextFont, new SolidBrush(textColor), rectText, @@ -356,10 +358,10 @@ namespace mRemoteNG.UI.Tabs if (!DockHelper.IsDockStateAutoHide(dockState)) return Rectangle.Empty; - var leftPanes = GetPanes(DockState.DockLeftAutoHide).Count; - var rightPanes = GetPanes(DockState.DockRightAutoHide).Count; - var topPanes = GetPanes(DockState.DockTopAutoHide).Count; - var bottomPanes = GetPanes(DockState.DockBottomAutoHide).Count; + int leftPanes = GetPanes(DockState.DockLeftAutoHide).Count; + int rightPanes = GetPanes(DockState.DockRightAutoHide).Count; + int topPanes = GetPanes(DockState.DockTopAutoHide).Count; + int bottomPanes = GetPanes(DockState.DockBottomAutoHide).Count; int x, y, width, height; @@ -400,7 +402,7 @@ namespace mRemoteNG.UI.Tabs return Rectangle.Empty; } - var rect = new Rectangle(x, y, width, height); + Rectangle rect = new(x, y, width, height); return transformed ? GetTransformedRectangle(dockState, rect) : rect; } @@ -411,19 +413,19 @@ namespace mRemoteNG.UI.Tabs private Rectangle GetTabRectangle(TabNG tab, bool transformed) { - var dockState = tab.Content.DockHandler.DockState; - var rectTabStrip = GetLogicalTabStripRectangle(dockState); + DockState dockState = tab.Content.DockHandler.DockState; + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); if (rectTabStrip.IsEmpty) return Rectangle.Empty; - var x = tab.TabX; - var y = rectTabStrip.Y + + int x = tab.TabX; + int y = rectTabStrip.Y + (dockState == DockState.DockTopAutoHide || dockState == DockState.DockRightAutoHide ? 0 : TabGapTop); - var width = tab.TabWidth; - var height = rectTabStrip.Height - TabGapTop; + int width = tab.TabWidth; + int height = rectTabStrip.Height - TabGapTop; if (!transformed) return new Rectangle(x, y, width, height); @@ -436,12 +438,12 @@ namespace mRemoteNG.UI.Tabs if (dockState != DockState.DockLeftAutoHide && dockState != DockState.DockRightAutoHide) return rect; - var pts = new PointF[1]; + PointF[] pts = new PointF[1]; // the center of the rectangle pts[0].X = rect.X + (float)rect.Width / 2; pts[0].Y = rect.Y + (float)rect.Height / 2; - var rectTabStrip = GetLogicalTabStripRectangle(dockState); - using (var matrix = new Matrix()) + Rectangle rectTabStrip = GetLogicalTabStripRectangle(dockState); + using (Matrix matrix = new()) { matrix.RotateAt(90, new PointF(rectTabStrip.X + (float)rectTabStrip.Height / 2, rectTabStrip.Y + (float)rectTabStrip.Height / 2)); @@ -455,17 +457,17 @@ namespace mRemoteNG.UI.Tabs protected override IDockContent HitTest(Point point) { - foreach (var state in DockStates) + foreach (DockState state in DockStates) { - var rectTabStrip = GetLogicalTabStripRectangle(state, true); + Rectangle rectTabStrip = GetLogicalTabStripRectangle(state, true); if (!rectTabStrip.Contains(point)) continue; - foreach (var pane in GetPanes(state)) + foreach (Pane pane in GetPanes(state)) { foreach (TabNG tab in pane.AutoHideTabs) { - var path = GetTabOutline(tab, true, true); + GraphicsPath path = GetTabOutline(tab, true, true); if (path.IsVisible(point)) return tab.Content; } @@ -477,8 +479,8 @@ namespace mRemoteNG.UI.Tabs protected override Rectangle GetTabBounds(Tab tab) { - var path = GetTabOutline((TabNG)tab, true, true); - var bounds = path.GetBounds(); + GraphicsPath path = GetTabOutline((TabNG)tab, true, true); + RectangleF bounds = path.GetBounds(); return new Rectangle((int)bounds.Left, (int)bounds.Top, (int)bounds.Width, (int)bounds.Height); } diff --git a/mRemoteNG/UI/Tabs/TabHelper.cs b/mRemoteNG/UI/Tabs/TabHelper.cs index 32abad7f..956556af 100644 --- a/mRemoteNG/UI/Tabs/TabHelper.cs +++ b/mRemoteNG/UI/Tabs/TabHelper.cs @@ -8,7 +8,7 @@ namespace mRemoteNG.UI.Tabs [SupportedOSPlatform("windows")] class TabHelper { - private static readonly Lazy lazyHelper = new Lazy(() => new TabHelper()); + private static readonly Lazy lazyHelper = new(() => new TabHelper()); public static TabHelper Instance => lazyHelper.Value; @@ -31,7 +31,7 @@ namespace mRemoteNG.UI.Tabs private void findCurrentPanel() { - var currentForm = currentTab.Parent; + System.Windows.Forms.Control currentForm = currentTab.Parent; while (currentForm != null && !(currentForm is ConnectionWindow)) { currentForm = currentForm.Parent; diff --git a/mRemoteNG/UI/TaskDialog/CommandButton.cs b/mRemoteNG/UI/TaskDialog/CommandButton.cs index 4123d37e..5ea7e9d4 100644 --- a/mRemoteNG/UI/TaskDialog/CommandButton.cs +++ b/mRemoteNG/UI/TaskDialog/CommandButton.cs @@ -107,7 +107,7 @@ namespace mRemoteNG.UI.TaskDialog //-------------------------------------------------------------------------------- string GetLargeText() { - var lines = Text.Split('\n'); + string[] lines = Text.Split('\n'); return lines[0]; } @@ -116,31 +116,31 @@ namespace mRemoteNG.UI.TaskDialog if (Text.IndexOf('\n') < 0) return ""; - var s = Text; - var lines = s.Split('\n'); + string s = Text; + string[] lines = s.Split('\n'); s = ""; - for (var i = 1; i < lines.Length; i++) + for (int i = 1; i < lines.Length; i++) s += lines[i] + "\n"; return s.Trim('\n'); } SizeF GetLargeTextSizeF() { - var x = LEFT_MARGIN + ARROW_WIDTH + 5; - var mzSize = new SizeF(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN - var g = Graphics.FromHwnd(Handle); - var textSize = g.MeasureString(GetLargeText(), Font, mzSize); + int x = LEFT_MARGIN + ARROW_WIDTH + 5; + SizeF mzSize = new(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN + Graphics g = Graphics.FromHwnd(Handle); + SizeF textSize = g.MeasureString(GetLargeText(), Font, mzSize); return textSize; } SizeF GetSmallTextSizeF() { - var s = GetSmallText(); + string s = GetSmallText(); if (s == "") return new SizeF(0, 0); - var x = LEFT_MARGIN + ARROW_WIDTH + 8; // <- indent small text slightly more - var mzSize = new SizeF(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN - var g = Graphics.FromHwnd(Handle); - var textSize = g.MeasureString(s, SmallFont, mzSize); + int x = LEFT_MARGIN + ARROW_WIDTH + 8; // <- indent small text slightly more + SizeF mzSize = new(Width - x - LEFT_MARGIN, 5000.0F); // presume RIGHT_MARGIN = LEFT_MARGIN + Graphics g = Graphics.FromHwnd(Handle); + SizeF textSize = g.MeasureString(s, SmallFont, mzSize); return textSize; } @@ -172,10 +172,10 @@ namespace mRemoteNG.UI.TaskDialog const LinearGradientMode mode = LinearGradientMode.Vertical; - var newRect = new Rectangle(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, + Rectangle newRect = new(ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width - 1, ClientRectangle.Height - 1); - var img = imgArrow1; + Image img = imgArrow1; Color back; @@ -216,15 +216,15 @@ namespace mRemoteNG.UI.TaskDialog } else { - var brush = new LinearGradientBrush(newRect, back, back, mode); + LinearGradientBrush brush = new(newRect, back, back, mode); e.Graphics.FillRectangle(brush, newRect); e.Graphics.DrawRectangle(new Pen(border, 1), newRect); } - var largetext = GetLargeText(); - var smalltext = GetSmallText(); + string largetext = GetLargeText(); + string smalltext = GetSmallText(); - var szL = GetLargeTextSizeF(); + SizeF szL = GetLargeTextSizeF(); //e.Graphics.DrawString(largetext, base.Font, new SolidBrush(text_color), new RectangleF(new PointF(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN), szL)); TextRenderer.DrawText(e.Graphics, largetext, Font, new Rectangle(LEFT_MARGIN + imgArrow1.Width + 5, TOP_MARGIN, (int)szL.Width, @@ -233,7 +233,7 @@ namespace mRemoteNG.UI.TaskDialog if (smalltext != "") { - var szS = GetSmallTextSizeF(); + SizeF szS = GetSmallTextSizeF(); e.Graphics.DrawString(smalltext, SmallFont, new SolidBrush(fore), new RectangleF(new PointF(LEFT_MARGIN + imgArrow1.Width + 8, TOP_MARGIN + (int)szL.Height), @@ -280,7 +280,7 @@ namespace mRemoteNG.UI.TaskDialog { if (m_autoHeight) { - var h = GetBestHeight(); + int h = GetBestHeight(); if (Height != h) { Height = h; diff --git a/mRemoteNG/UI/TaskDialog/cTaskDialog.cs b/mRemoteNG/UI/TaskDialog/cTaskDialog.cs index f356f31e..18dd7e60 100644 --- a/mRemoteNG/UI/TaskDialog/cTaskDialog.cs +++ b/mRemoteNG/UI/TaskDialog/cTaskDialog.cs @@ -47,9 +47,9 @@ namespace mRemoteNG.UI.TaskDialog DialogResult result; OnTaskDialogShown?.Invoke(null, EventArgs.Empty); - using (var td = new frmTaskDialog()) + using (frmTaskDialog td = new()) { - var display = new DisplayProperties(); + DisplayProperties display = new(); td.Title = title; td.MainInstruction = mainInstruction; td.Content = content; @@ -154,7 +154,7 @@ namespace mRemoteNG.UI.TaskDialog [SupportedOSPlatform("windows")] public static int ShowRadioBox(IWin32Window owner, string title, string mainInstruction, string content, string expandedInfo, string footer, string verificationText, string radioButtons, ESysIcons mainIcon, ESysIcons footerIcon, int defaultIndex) { - var res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex); + DialogResult res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex); if (res == DialogResult.OK) return RadioButtonResult; return -1; @@ -166,7 +166,7 @@ namespace mRemoteNG.UI.TaskDialog [SupportedOSPlatform("windows")] public static int ShowRadioBox(string title, string mainInstruction, string content, string expandedInfo, string footer, string verificationText, string radioButtons, ESysIcons mainIcon, ESysIcons footerIcon, int defaultIndex) { - var res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex); + DialogResult res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText, radioButtons, "", ETaskDialogButtons.OkCancel, mainIcon, footerIcon, defaultIndex); if (res == DialogResult.OK) return RadioButtonResult; return -1; @@ -206,7 +206,7 @@ namespace mRemoteNG.UI.TaskDialog [SupportedOSPlatform("windows")] public static int ShowCommandBox(IWin32Window owner, string title, string mainInstruction, string content, string expandedInfo, string footer, string verificationText,string commandButtons, bool showCancelButton, ESysIcons mainIcon, ESysIcons footerIcon) { - var res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, "", commandButtons, showCancelButton ? ETaskDialogButtons.Cancel : ETaskDialogButtons.None, mainIcon, footerIcon); + DialogResult res = ShowTaskDialogBox(owner, title, mainInstruction, content, expandedInfo, footer, verificationText, "", commandButtons, showCancelButton ? ETaskDialogButtons.Cancel : ETaskDialogButtons.None, mainIcon, footerIcon); if (res == DialogResult.OK) return CommandButtonResult; return -1; @@ -218,7 +218,7 @@ namespace mRemoteNG.UI.TaskDialog [SupportedOSPlatform("windows")] public static int ShowCommandBox(string title, string mainInstruction, string content, string expandedInfo, string footer, string verificationText, string commandButtons, bool showCancelButton, ESysIcons mainIcon, ESysIcons footerIcon) { - var res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText,"", commandButtons, showCancelButton ? ETaskDialogButtons.Cancel : ETaskDialogButtons.None, mainIcon, footerIcon); + DialogResult res = ShowTaskDialogBox(null, title, mainInstruction, content, expandedInfo, footer, verificationText,"", commandButtons, showCancelButton ? ETaskDialogButtons.Cancel : ETaskDialogButtons.None, mainIcon, footerIcon); if (res == DialogResult.OK) return CommandButtonResult; return -1; diff --git a/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs b/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs index 0a30e6cf..87f3891d 100644 --- a/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs +++ b/mRemoteNG/UI/TaskDialog/frmTaskDialog.cs @@ -21,10 +21,10 @@ namespace mRemoteNG.UI.TaskDialog private string _mainInstruction = "Main Instruction Text"; private readonly Font _mainInstructionFont = - new Font("Segoe UI", 11.75F, FontStyle.Regular, GraphicsUnit.Point, 0); + new("Segoe UI", 11.75F, FontStyle.Regular, GraphicsUnit.Point, 0); - private readonly List _radioButtonCtrls = new List(); - private readonly DisplayProperties _display = new DisplayProperties(); + private readonly List _radioButtonCtrls = []; + private readonly DisplayProperties _display = new(); private Control _focusControl; private bool _isVista = false; @@ -84,7 +84,7 @@ namespace mRemoteNG.UI.TaskDialog { get { - foreach (var rb in _radioButtonCtrls) + foreach (MrngRadioButton rb in _radioButtonCtrls) if (rb.Checked) return (int)rb.Tag; return -1; @@ -144,7 +144,7 @@ namespace mRemoteNG.UI.TaskDialog public void BuildForm() { - var formHeight = 0; + int formHeight = 0; imgMain.Width = _display.ScaleWidth(imgMain.Width); imgMain.Height = _display.ScaleHeight(imgMain.Height); @@ -185,7 +185,7 @@ namespace mRemoteNG.UI.TaskDialog formHeight += pnlContent.Height; } - var showVerifyCheckbox = cbVerify.Text != ""; + bool showVerifyCheckbox = cbVerify.Text != ""; cbVerify.Visible = showVerifyCheckbox; // Setup Expanded Info and Buttons panels @@ -213,11 +213,11 @@ namespace mRemoteNG.UI.TaskDialog pnlRadioButtons.Visible = RadioButtons != ""; if (RadioButtons != "") { - var arr = RadioButtons.Split('|'); - var pnlHeight = _display.ScaleHeight(12); - for (var i = 0; i < arr.Length; i++) + string[] arr = RadioButtons.Split('|'); + int pnlHeight = _display.ScaleHeight(12); + for (int i = 0; i < arr.Length; i++) { - var rb = new MrngRadioButton {Parent = pnlRadioButtons}; + MrngRadioButton rb = new() { Parent = pnlRadioButtons}; rb.Location = new Point(_display.ScaleWidth(60), _display.ScaleHeight(4) + i * rb.Height); rb.Text = arr[i]; rb.Tag = i; @@ -235,12 +235,12 @@ namespace mRemoteNG.UI.TaskDialog pnlCommandButtons.Visible = CommandButtons != ""; if (CommandButtons != "") { - var arr = CommandButtons.Split('|'); - var t = _display.ScaleHeight(8); - var pnlHeight = _display.ScaleHeight(16); - for (var i = 0; i < arr.Length; i++) + string[] arr = CommandButtons.Split('|'); + int t = _display.ScaleHeight(8); + int pnlHeight = _display.ScaleHeight(16); + for (int i = 0; i < arr.Length; i++) { - var btn = new CommandButton + CommandButton btn = new() { Parent = pnlCommandButtons, Location = new Point(_display.ScaleWidth(50), t) }; @@ -402,16 +402,16 @@ namespace mRemoteNG.UI.TaskDialog //-------------------------------------------------------------------------------- private Image ResizeBitmap(Image srcImg, int newWidth, int newHeight) { - var percentWidth = _display.ScaleWidth(newWidth) / (float)srcImg.Width; - var percentHeight = _display.ScaleHeight(newHeight) / (float)srcImg.Height; + float percentWidth = _display.ScaleWidth(newWidth) / (float)srcImg.Width; + float percentHeight = _display.ScaleHeight(newHeight) / (float)srcImg.Height; - var resizePercent = percentHeight < percentWidth ? percentHeight : percentWidth; + float resizePercent = percentHeight < percentWidth ? percentHeight : percentWidth; - var w = (int)(srcImg.Width * resizePercent); - var h = (int)(srcImg.Height * resizePercent); - var b = new Bitmap(w, h); + int w = (int)(srcImg.Width * resizePercent); + int h = (int)(srcImg.Height * resizePercent); + Bitmap b = new(w, h); - using (var g = Graphics.FromImage(b)) + using (Graphics g = Graphics.FromImage(b)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(srcImg, 0, 0, w, h); @@ -424,13 +424,13 @@ namespace mRemoteNG.UI.TaskDialog // utility function for setting a Label's height private static void AdjustLabelHeight(Control lb) { - var text = lb.Text; - var textFont = lb.Font; - var layoutSize = new SizeF(lb.ClientSize.Width, 5000.0F); + string text = lb.Text; + Font textFont = lb.Font; + SizeF layoutSize = new(lb.ClientSize.Width, 5000.0F); - using (var g = Graphics.FromHwnd(lb.Handle)) + using (Graphics g = Graphics.FromHwnd(lb.Handle)) { - var stringSize = g.MeasureString(text, textFont, layoutSize); + SizeF stringSize = g.MeasureString(text, textFont, layoutSize); lb.Height = (int)stringSize.Height + 4; } } diff --git a/mRemoteNG/UI/TextBoxExtensions.cs b/mRemoteNG/UI/TextBoxExtensions.cs index 2cca4acf..eca24f8c 100644 --- a/mRemoteNG/UI/TextBoxExtensions.cs +++ b/mRemoteNG/UI/TextBoxExtensions.cs @@ -12,15 +12,15 @@ namespace mRemoteNG.UI public static bool SetCueBannerText(this TextBox textBox, string cueText, bool showCueWhenFocused = false) { if (!textBox.IsHandleCreated || cueText == null) return false; - var result = NativeMethods.SendMessage(textBox.Handle, NativeMethods.EM_SETCUEBANNER, + IntPtr result = NativeMethods.SendMessage(textBox.Handle, NativeMethods.EM_SETCUEBANNER, (IntPtr)Convert.ToInt32(showCueWhenFocused), cueText); return result.ToInt64() == NativeMethods.TRUE; } public static string GetCueBannerText(this TextBox textBox) { - var cueBannerText = new StringBuilder(256); - var result = NativeMethods.SendMessage(textBox.Handle, NativeMethods.EM_GETCUEBANNER, cueBannerText, + StringBuilder cueBannerText = new(256); + IntPtr result = NativeMethods.SendMessage(textBox.Handle, NativeMethods.EM_GETCUEBANNER, cueBannerText, new IntPtr(cueBannerText.Capacity)); return result.ToInt64() != 0 ? cueBannerText.ToString() : null; } diff --git a/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs b/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs index bb459d73..890bb7da 100644 --- a/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs +++ b/mRemoteNG/UI/Window/ActiveDirectoryImportWindow.cs @@ -44,7 +44,7 @@ namespace mRemoteNG.UI.Window private void BtnImport_Click(object sender, EventArgs e) { - var selectedNode = Windows.TreeForm.SelectedNode; + Connection.ConnectionInfo selectedNode = Windows.TreeForm.SelectedNode; ContainerInfo importDestination; if (selectedNode != null) importDestination = selectedNode as ContainerInfo ?? selectedNode.Parent; diff --git a/mRemoteNG/UI/Window/ConfigWindow.cs b/mRemoteNG/UI/Window/ConfigWindow.cs index 2f06a7fb..e406a39a 100644 --- a/mRemoteNG/UI/Window/ConfigWindow.cs +++ b/mRemoteNG/UI/Window/ConfigWindow.cs @@ -59,28 +59,28 @@ namespace mRemoteNG.UI.Window Load += Config_Load; SystemColorsChanged += Config_SystemColorsChanged; _pGrid = new ConnectionInfoPropertyGrid(); - _pGrid.PropertyValueChanged += pGrid_PropertyValueChanged; - _pGrid.PropertySortChanged += pGrid_PropertySortChanged; + _pGrid.PropertyValueChanged += PGrid_PropertyValueChanged; + _pGrid.PropertySortChanged += PGrid_PropertySortChanged; PropertyGridContextMenu = new ContextMenuStrip(_components); - PropertyGridContextMenu.Opening += propertyGridContextMenu_Opening; + PropertyGridContextMenu.Opening += PropertyGridContextMenu_Opening; _propertyGridContextMenuReset = new ToolStripMenuItem(); - _propertyGridContextMenuReset.Click += propertyGridContextMenuReset_Click; + _propertyGridContextMenuReset.Click += PropertyGridContextMenuReset_Click; _toolStripSeparator1 = new ToolStripSeparator(); _propertyGridContextMenuShowHelpText = new ToolStripMenuItem(); - _propertyGridContextMenuShowHelpText.Click += propertyGridContextMenuShowHelpText_Click; - _propertyGridContextMenuShowHelpText.CheckedChanged += propertyGridContextMenuShowHelpText_CheckedChanged; + _propertyGridContextMenuShowHelpText.Click += PropertyGridContextMenuShowHelpText_Click; + _propertyGridContextMenuShowHelpText.CheckedChanged += PropertyGridContextMenuShowHelpText_CheckedChanged; _btnShowInheritance = new ToolStripButton(); - _btnShowInheritance.Click += btnShowInheritance_Click; + _btnShowInheritance.Click += BtnShowInheritance_Click; _btnShowDefaultInheritance = new ToolStripButton(); - _btnShowDefaultInheritance.Click += btnShowDefaultInheritance_Click; + _btnShowDefaultInheritance.Click += BtnShowDefaultInheritance_Click; _btnShowProperties = new ToolStripButton(); - _btnShowProperties.Click += btnShowProperties_Click; + _btnShowProperties.Click += BtnShowProperties_Click; _btnShowDefaultProperties = new ToolStripButton(); - _btnShowDefaultProperties.Click += btnShowDefaultProperties_Click; + _btnShowDefaultProperties.Click += BtnShowDefaultProperties_Click; _btnIcon = new ToolStripButton(); - _btnIcon.MouseUp += btnIcon_Click; + _btnIcon.MouseUp += BtnIcon_Click; _btnHostStatus = new ToolStripButton(); - _btnHostStatus.Click += btnHostStatus_Click; + _btnHostStatus.Click += BtnHostStatus_Click; CMenIcons = new ContextMenuStrip(_components); PropertyGridContextMenu.SuspendLayout(); SuspendLayout(); @@ -385,7 +385,7 @@ namespace mRemoteNG.UI.Window _btnHostStatus.Enabled = !_pGrid.RootNodeSelected && !_pGrid.IsShowingDefaultProperties && - !(_pGrid.SelectedConnectionInfo is ContainerInfo); + _pGrid.SelectedConnectionInfo is not ContainerInfo; SetHostStatus(_pGrid.SelectedObject); } @@ -408,7 +408,7 @@ namespace mRemoteNG.UI.Window { try { - var customToolStrip = new ToolStrip(); + ToolStrip customToolStrip = new(); customToolStrip.Items.Add(_btnShowProperties); customToolStrip.Items.Add(_btnShowInheritance); customToolStrip.Items.Add(_btnShowDefaultProperties); @@ -417,7 +417,7 @@ namespace mRemoteNG.UI.Window customToolStrip.Items.Add(_btnIcon); customToolStrip.Show(); - var propertyGridToolStrip = new ToolStrip(); + ToolStrip propertyGridToolStrip = new(); ToolStrip toolStrip = null; foreach (Control control in _pGrid.Controls) @@ -446,7 +446,7 @@ namespace mRemoteNG.UI.Window // Hide the "Property Pages" button propertyGridToolStrip.Items[_originalPropertyGridToolStripItemCount - 1].Visible = false; - var expectedToolStripItemCount = _originalPropertyGridToolStripItemCount + customToolStrip.Items.Count; + int expectedToolStripItemCount = _originalPropertyGridToolStripItemCount + customToolStrip.Items.Count; if (propertyGridToolStrip.Items.Count == expectedToolStripItemCount) return; propertyGridToolStrip.AllowMerge = true; ToolStripManager.Merge(customToolStrip, propertyGridToolStrip); @@ -473,13 +473,13 @@ namespace mRemoteNG.UI.Window AddToolStripItems(); } - private void pGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) + private void PGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { try { if (e.ChangedItem.Label == Language.Icon) { - var conIcon = ConnectionIcon.FromString(_pGrid.SelectedConnectionInfo.Icon); + Icon conIcon = ConnectionIcon.FromString(_pGrid.SelectedConnectionInfo.Icon); if (conIcon != null) _btnIcon.Image = conIcon.ToBitmap(); } @@ -496,47 +496,47 @@ namespace mRemoteNG.UI.Window } } - private void pGrid_PropertySortChanged(object sender, EventArgs e) + private void PGrid_PropertySortChanged(object sender, EventArgs e) { if (_pGrid.PropertySort == PropertySort.CategorizedAlphabetical) _pGrid.PropertySort = PropertySort.Categorized; } - private void btnShowProperties_Click(object sender, EventArgs e) + private void BtnShowProperties_Click(object sender, EventArgs e) { ShowConnectionProperties(); } - private void btnShowInheritance_Click(object sender, EventArgs e) + private void BtnShowInheritance_Click(object sender, EventArgs e) { ShowInheritanceProperties(); } - private void btnShowDefaultProperties_Click(object sender, EventArgs e) + private void BtnShowDefaultProperties_Click(object sender, EventArgs e) { ShowDefaultConnectionProperties(); } - private void btnShowDefaultInheritance_Click(object sender, EventArgs e) + private void BtnShowDefaultInheritance_Click(object sender, EventArgs e) { ShowDefaultInheritanceProperties(); } - private void btnHostStatus_Click(object sender, EventArgs e) + private void BtnHostStatus_Click(object sender, EventArgs e) { SetHostStatus(_pGrid.SelectedObject); } - private void btnIcon_Click(object sender, MouseEventArgs e) + private void BtnIcon_Click(object sender, MouseEventArgs e) { try { - if (!(_pGrid.SelectedObject is ConnectionInfo) || _pGrid.SelectedObject is PuttySessionInfo) return; + if (_pGrid.SelectedObject is not ConnectionInfo || _pGrid.SelectedObject is PuttySessionInfo) return; CMenIcons.Items.Clear(); - foreach (var iStr in ConnectionIcon.Icons) + foreach (string iStr in ConnectionIcon.Icons) { - var tI = new ToolStripMenuItem + ToolStripMenuItem tI = new() { Text = iStr, Image = ConnectionIcon.FromString(iStr).ToBitmap() @@ -546,16 +546,12 @@ namespace mRemoteNG.UI.Window CMenIcons.Items.Add(tI); } - var mPos = new Point( - new Size(PointToScreen(new Point(e.Location.X + _pGrid.Width - 100, - e.Location.Y)))); + Point mPos = new(new Size(PointToScreen(new Point(e.Location.X + _pGrid.Width - 100, e.Location.Y)))); CMenIcons.Show(mPos); } catch (Exception ex) { - Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, - Language.ConfigPropertyGridButtonIconClickFailed + - Environment.NewLine + ex.Message, true); + Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.ConfigPropertyGridButtonIconClickFailed + Environment.NewLine + ex.Message, true); } } @@ -563,15 +559,15 @@ namespace mRemoteNG.UI.Window { try { - var connectionInfo = (ConnectionInfo)_pGrid.SelectedObject; + ConnectionInfo connectionInfo = (ConnectionInfo)_pGrid.SelectedObject; if (connectionInfo == null) return; - var selectedMenuItem = (ToolStripMenuItem)sender; + ToolStripMenuItem selectedMenuItem = (ToolStripMenuItem)sender; - var iconName = selectedMenuItem?.Text; + string iconName = selectedMenuItem?.Text; if (string.IsNullOrEmpty(iconName)) return; - var connectionIcon = ConnectionIcon.FromString(iconName); + Icon connectionIcon = ConnectionIcon.FromString(iconName); if (connectionIcon == null) return; _btnIcon.Image = connectionIcon.ToBitmap(); @@ -583,9 +579,7 @@ namespace mRemoteNG.UI.Window } catch (Exception ex) { - Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, - Language.ConfigPropertyGridMenuClickFailed + - Environment.NewLine + ex.Message, true); + Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.ConfigPropertyGridMenuClickFailed + Environment.NewLine + ex.Message, true); } } @@ -603,26 +597,35 @@ namespace mRemoteNG.UI.Window return; } - var pingSender = new Ping(); + Ping pingSender = new(); try { - var pReply = pingSender.Send((string)hostName); + PingReply pReply = pingSender.Send((string)hostName); if (pReply?.Status == IPStatus.Success) { if ((string)_btnHostStatus.Tag == "checking") + { ShowStatusImage(Properties.Resources.HostStatus_On); + } + } else { if ((string)_btnHostStatus.Tag == "checking") + { ShowStatusImage(Properties.Resources.HostStatus_Off); + } + } } catch (Exception) { if ((string)_btnHostStatus.Tag == "checking") + { ShowStatusImage(Properties.Resources.HostStatus_Off); + } + } } @@ -648,7 +651,7 @@ namespace mRemoteNG.UI.Window { _btnHostStatus.Image = Properties.Resources.HostStatus_Check; // To check status, ConnectionInfo must be an mRemoteNG.Connection.Info that is not a container - if (!(connectionInfo is ConnectionInfo info)) return; + if (connectionInfo is not ConnectionInfo info) return; if (info.IsContainer) return; _btnHostStatus.Tag = "checking"; @@ -669,12 +672,12 @@ namespace mRemoteNG.UI.Window #region Event Handlers - private void propertyGridContextMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e) + private void PropertyGridContextMenu_Opening(object sender, System.ComponentModel.CancelEventArgs e) { try { _propertyGridContextMenuShowHelpText.Checked = Settings.Default.ShowConfigHelpText; - var gridItem = _pGrid.SelectedGridItem; + GridItem gridItem = _pGrid.SelectedGridItem; _propertyGridContextMenuReset.Enabled = Convert.ToBoolean(_pGrid.SelectedObject != null && gridItem?.PropertyDescriptor != null && gridItem.PropertyDescriptor.CanResetValue(_pGrid.SelectedObject)); @@ -685,11 +688,11 @@ namespace mRemoteNG.UI.Window } } - private void propertyGridContextMenuReset_Click(object sender, EventArgs e) + private void PropertyGridContextMenuReset_Click(object sender, EventArgs e) { try { - var gridItem = _pGrid.SelectedGridItem; + GridItem gridItem = _pGrid.SelectedGridItem; if (_pGrid.SelectedObject != null && gridItem?.PropertyDescriptor != null && gridItem.PropertyDescriptor.CanResetValue(_pGrid.SelectedObject)) { @@ -702,12 +705,12 @@ namespace mRemoteNG.UI.Window } } - private void propertyGridContextMenuShowHelpText_Click(object sender, EventArgs e) + private void PropertyGridContextMenuShowHelpText_Click(object sender, EventArgs e) { _propertyGridContextMenuShowHelpText.Checked = !_propertyGridContextMenuShowHelpText.Checked; } - private void propertyGridContextMenuShowHelpText_CheckedChanged(object sender, EventArgs e) + private void PropertyGridContextMenuShowHelpText_CheckedChanged(object sender, EventArgs e) { Settings.Default.ShowConfigHelpText = _propertyGridContextMenuShowHelpText.Checked; _pGrid.HelpVisible = _propertyGridContextMenuShowHelpText.Checked; diff --git a/mRemoteNG/UI/Window/ConnectionTreeWindow.Designer.cs b/mRemoteNG/UI/Window/ConnectionTreeWindow.Designer.cs index b293ffb2..74a64425 100644 --- a/mRemoteNG/UI/Window/ConnectionTreeWindow.Designer.cs +++ b/mRemoteNG/UI/Window/ConnectionTreeWindow.Designer.cs @@ -168,7 +168,7 @@ namespace mRemoteNG.UI.Window this.txtSearch.TabIndex = 30; this.txtSearch.TabStop = false; this.txtSearch.Text = "Search"; - this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged); + this.txtSearch.TextChanged += new System.EventHandler(this.TxtSearch_TextChanged); this.txtSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtSearch_KeyDown); // // tableLayoutPanel1 diff --git a/mRemoteNG/UI/Window/ConnectionTreeWindow.cs b/mRemoteNG/UI/Window/ConnectionTreeWindow.cs index 72f2ff3c..1f43923d 100644 --- a/mRemoteNG/UI/Window/ConnectionTreeWindow.cs +++ b/mRemoteNG/UI/Window/ConnectionTreeWindow.cs @@ -102,7 +102,7 @@ namespace mRemoteNG.UI.Window if (!_themeManager.ThemingActive) return; - var activeTheme = _themeManager.ActiveTheme; + ThemeInfo activeTheme = _themeManager.ActiveTheme; vsToolStripExtender.SetStyle(msMain, activeTheme.Version, activeTheme.Theme); vsToolStripExtender.SetStyle(ConnectionTree.ContextMenuStrip, activeTheme.Version, activeTheme.Theme); @@ -137,7 +137,7 @@ namespace mRemoteNG.UI.Window private void SetTreePostSetupActions() { - var actions = new List + List actions = new() { new PreviouslyOpenedFolderExpander(), new RootNodeExpander() @@ -151,8 +151,8 @@ namespace mRemoteNG.UI.Window private void SetConnectionTreeClickHandlers() { - var singleClickHandlers = new List>(); - var doubleClickHandlers = new List> + List> singleClickHandlers = new(); + List> doubleClickHandlers = new() { new ExpandNodeClickHandler(ConnectionTree) }; @@ -178,8 +178,7 @@ namespace mRemoteNG.UI.Window } ConnectionTree.ConnectionTreeModel = connectionsLoadedEventArgs.NewConnectionTreeModel; - ConnectionTree.SelectedObject = - connectionsLoadedEventArgs.NewConnectionTreeModel.RootNodes.OfType().FirstOrDefault(); + ConnectionTree.SelectedObject = connectionsLoadedEventArgs.NewConnectionTreeModel.RootNodes.OfType().FirstOrDefault(); } #endregion @@ -212,14 +211,14 @@ namespace mRemoteNG.UI.Window mMenFavorites.Click += (sender, args) => { mMenFavorites.DropDownItems.Clear(); - var rootNodes = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes; - var favoritesList = new List(); + List rootNodes = Runtime.ConnectionsService.ConnectionTreeModel.RootNodes; + List favoritesList = new(); - foreach (var node in rootNodes) + foreach (ContainerInfo node in rootNodes) { - foreach (var containerInfo in Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveFavoriteChildList(node)) + foreach (ConnectionInfo containerInfo in Runtime.ConnectionsService.ConnectionTreeModel.GetRecursiveFavoriteChildList(node)) { - var favoriteMenuItem = new ToolStripMenuItem + ToolStripMenuItem favoriteMenuItem = new() { Text = containerInfo.Name, Tag = containerInfo, @@ -271,14 +270,14 @@ namespace mRemoteNG.UI.Window break; case Keys.Up: { - var match = ConnectionTree.NodeSearcher.PreviousMatch(); + ConnectionInfo match = ConnectionTree.NodeSearcher.PreviousMatch(); JumpToNode(match); e.Handled = true; break; } case Keys.Down: { - var match = ConnectionTree.NodeSearcher.NextMatch(); + ConnectionInfo match = ConnectionTree.NodeSearcher.NextMatch(); JumpToNode(match); e.Handled = true; break; @@ -294,7 +293,7 @@ namespace mRemoteNG.UI.Window } } - private void txtSearch_TextChanged(object sender, EventArgs e) + private void TxtSearch_TextChanged(object sender, EventArgs e) { ApplyFiltering(); } diff --git a/mRemoteNG/UI/Window/ConnectionWindow.cs b/mRemoteNG/UI/Window/ConnectionWindow.cs index b9d52916..766bba6a 100644 --- a/mRemoteNG/UI/Window/ConnectionWindow.cs +++ b/mRemoteNG/UI/Window/ConnectionWindow.cs @@ -129,7 +129,7 @@ namespace mRemoteNG.UI.Window titleText = titleText.Replace("&", "&&"); - var conTab = new ConnectionTab + ConnectionTab conTab = new() { Tag = connectionInfo, DockAreas = DockAreas.Document | DockAreas.Float, @@ -160,16 +160,16 @@ namespace mRemoteNG.UI.Window public void ReconnectAll(IConnectionInitiator initiator) { - var controlList = new List(); + List controlList = new(); try { - foreach (var dockContent in connDock.DocumentsToArray()) + foreach (IDockContent dockContent in connDock.DocumentsToArray()) { - var tab = (ConnectionTab)dockContent; + ConnectionTab tab = (ConnectionTab)dockContent; controlList.Add((InterfaceControl)tab.Tag); } - foreach (var iControl in controlList) + foreach (InterfaceControl iControl in controlList) { iControl.Protocol.Close(); initiator.OpenConnection(iControl.Info, ConnectionInfo.Force.DoNotJump); @@ -287,7 +287,7 @@ namespace mRemoteNG.UI.Window Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.Multiple & connDock.Documents.Count() > 1)) { - var result = CTaskDialog.MessageBox(this, GeneralAppInfo.ProductName, + DialogResult result = CTaskDialog.MessageBox(this, GeneralAppInfo.ProductName, string .Format(Language.ConfirmCloseConnectionPanelMainInstruction, Text), "", "", "", @@ -308,9 +308,9 @@ namespace mRemoteNG.UI.Window try { - foreach (var dockContent in connDock.Documents.ToArray()) + foreach (IDockContent dockContent in connDock.Documents.ToArray()) { - var tabP = (ConnectionTab)dockContent; + ConnectionTab tabP = (ConnectionTab)dockContent; if (tabP.Tag == null) continue; tabP.silentClose = true; tabP.Close(); @@ -342,7 +342,7 @@ namespace mRemoteNG.UI.Window private void ConnDockOnActiveContentChanged(object sender, EventArgs e) { - var ic = GetInterfaceControl(); + InterfaceControl ic = GetInterfaceControl(); if (ic?.Info == null) return; FrmMain.Default.SelectedConnection = ic.Info; } @@ -355,7 +355,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); if (interfaceControl == null) return; if (interfaceControl.Protocol is ISupportsViewOnly viewOnly) @@ -370,7 +370,7 @@ namespace mRemoteNG.UI.Window if (interfaceControl.Info.Protocol == ProtocolType.RDP) { - var rdp = (RdpProtocol)interfaceControl.Protocol; + RdpProtocol rdp = (RdpProtocol)interfaceControl.Protocol; cmenTabFullscreen.Visible = true; cmenTabFullscreen.Checked = rdp.Fullscreen; cmenTabSmartSize.Visible = true; @@ -384,7 +384,7 @@ namespace mRemoteNG.UI.Window if (interfaceControl.Info.Protocol == ProtocolType.VNC) { - var vnc = (ProtocolVNC)interfaceControl.Protocol; + ProtocolVNC vnc = (ProtocolVNC)interfaceControl.Protocol; cmenTabSendSpecialKeys.Visible = true; cmenTabSmartSize.Visible = true; cmenTabStartChat.Visible = true; @@ -423,7 +423,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); switch (interfaceControl.Protocol) { @@ -442,7 +442,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); if (interfaceControl == null) return; if (interfaceControl.Info.Protocol == ProtocolType.SSH1 | @@ -461,11 +461,11 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); if (interfaceControl == null) return; Windows.Show(WindowType.SSHTransfer); - var connectionInfo = interfaceControl.Info; + ConnectionInfo connectionInfo = interfaceControl.Info; Windows.SshtransferForm.Hostname = connectionInfo.Hostname; Windows.SshtransferForm.Username = connectionInfo.Username; @@ -482,8 +482,8 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); - var vnc = interfaceControl?.Protocol as ProtocolVNC; + InterfaceControl interfaceControl = GetInterfaceControl(); + ProtocolVNC vnc = interfaceControl?.Protocol as ProtocolVNC; vnc?.StartFileTransfer(); } catch (Exception ex) @@ -496,7 +496,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); if (!(interfaceControl?.Protocol is ISupportsViewOnly viewOnly)) return; @@ -513,8 +513,8 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); - var vnc = interfaceControl?.Protocol as ProtocolVNC; + InterfaceControl interfaceControl = GetInterfaceControl(); + ProtocolVNC vnc = interfaceControl?.Protocol as ProtocolVNC; vnc?.StartChat(); } catch (Exception ex) @@ -527,8 +527,8 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); - var vnc = interfaceControl?.Protocol as ProtocolVNC; + InterfaceControl interfaceControl = GetInterfaceControl(); + ProtocolVNC vnc = interfaceControl?.Protocol as ProtocolVNC; vnc?.RefreshScreen(); } catch (Exception ex) @@ -541,8 +541,8 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); - var vnc = interfaceControl?.Protocol as ProtocolVNC; + InterfaceControl interfaceControl = GetInterfaceControl(); + ProtocolVNC vnc = interfaceControl?.Protocol as ProtocolVNC; vnc?.SendSpecialKeys(keys); } catch (Exception ex) @@ -555,8 +555,8 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); - var rdp = interfaceControl?.Protocol as RdpProtocol; + InterfaceControl interfaceControl = GetInterfaceControl(); + RdpProtocol rdp = interfaceControl?.Protocol as RdpProtocol; rdp?.ToggleFullscreen(); } catch (Exception ex) @@ -570,8 +570,8 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); - var puttyBase = interfaceControl?.Protocol as PuttyBase; + InterfaceControl interfaceControl = GetInterfaceControl(); + PuttyBase puttyBase = interfaceControl?.Protocol as PuttyBase; puttyBase?.ShowSettingsDialog(); } catch (Exception ex) @@ -589,15 +589,15 @@ namespace mRemoteNG.UI.Window //clean up. since new items are added below, we have to dispose of any previous items first if (cmenTabExternalApps.DropDownItems.Count > 0) { - for (var i = cmenTabExternalApps.DropDownItems.Count - 1; i >= 0; i--) + for (int i = cmenTabExternalApps.DropDownItems.Count - 1; i >= 0; i--) cmenTabExternalApps.DropDownItems[i].Dispose(); cmenTabExternalApps.DropDownItems.Clear(); } //add ext apps - foreach (var externalTool in Runtime.ExternalToolsService.ExternalTools) + foreach (ExternalTool externalTool in Runtime.ExternalToolsService.ExternalTools) { - var nItem = new ToolStripMenuItem + ToolStripMenuItem nItem = new() { Text = externalTool.DisplayName, Tag = externalTool, @@ -621,7 +621,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); externalTool.Start(interfaceControl?.Info); } catch (Exception ex) @@ -633,7 +633,7 @@ namespace mRemoteNG.UI.Window private void CloseTabMenu() { - var selectedTab = (ConnectionTab)GetInterfaceControl()?.Parent; + ConnectionTab selectedTab = (ConnectionTab)GetInterfaceControl()?.Parent; if (selectedTab == null) return; try @@ -648,11 +648,11 @@ namespace mRemoteNG.UI.Window private void CloseOtherTabs() { - var selectedTab = (ConnectionTab)GetInterfaceControl()?.Parent; + ConnectionTab selectedTab = (ConnectionTab)GetInterfaceControl()?.Parent; if (selectedTab == null) return; if (Settings.Default.ConfirmCloseConnection == (int)ConfirmCloseEnum.Multiple) { - var result = CTaskDialog.MessageBox(this, GeneralAppInfo.ProductName, + DialogResult result = CTaskDialog.MessageBox(this, GeneralAppInfo.ProductName, string.Format(Language.ConfirmCloseConnectionOthersInstruction, selectedTab.TabText), "", "", "", Language.CheckboxDoNotShowThisMessageAgain, @@ -669,9 +669,9 @@ namespace mRemoteNG.UI.Window } } - foreach (var dockContent in connDock.DocumentsToArray()) + foreach (IDockContent dockContent in connDock.DocumentsToArray()) { - var tab = (ConnectionTab)dockContent; + ConnectionTab tab = (ConnectionTab)dockContent; if (selectedTab != tab) { tab.Close(); @@ -683,15 +683,15 @@ namespace mRemoteNG.UI.Window { try { - var selectedTab = (ConnectionTab)GetInterfaceControl()?.Parent; + ConnectionTab selectedTab = (ConnectionTab)GetInterfaceControl()?.Parent; if (selectedTab == null) return; - var dockPane = selectedTab.Pane; + DockPane dockPane = selectedTab.Pane; - var pastTabToKeepAlive = false; - var connectionsToClose = new List(); - foreach (var dockContent in dockPane.Contents) + bool pastTabToKeepAlive = false; + List connectionsToClose = new(); + foreach (IDockContent dockContent in dockPane.Contents) { - var tab = (ConnectionTab)dockContent; + ConnectionTab tab = (ConnectionTab)dockContent; if (pastTabToKeepAlive) connectionsToClose.Add(tab); @@ -699,7 +699,7 @@ namespace mRemoteNG.UI.Window pastTabToKeepAlive = true; } - foreach (var tab in connectionsToClose) + foreach (ConnectionTab tab in connectionsToClose) { tab.Close(); } @@ -714,7 +714,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); if (interfaceControl == null) return; Runtime.ConnectionInitiator.OpenConnection(interfaceControl.Info, ConnectionInfo.Force.DoNotJump); } @@ -728,7 +728,7 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); if (interfaceControl == null) { Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, "Reconnect (UI.Window.ConnectionWindow) failed. Could not find InterfaceControl."); @@ -748,12 +748,12 @@ namespace mRemoteNG.UI.Window { try { - var interfaceControl = GetInterfaceControl(); + InterfaceControl interfaceControl = GetInterfaceControl(); if (interfaceControl == null) return; - using (var frmInputBox = new FrmInputBox(Language.NewTitle, Language.NewTitle, + using (FrmInputBox frmInputBox = new(Language.NewTitle, Language.NewTitle, ((ConnectionTab)interfaceControl.Parent).TabText)) { - var dr = frmInputBox.ShowDialog(); + DialogResult dr = frmInputBox.ShowDialog(); if (dr != DialogResult.OK) return; if (!string.IsNullOrEmpty(frmInputBox.returnValue)) ((ConnectionTab)interfaceControl.Parent).TabText = frmInputBox.returnValue.Replace("&", "&&"); @@ -771,7 +771,7 @@ namespace mRemoteNG.UI.Window public void Prot_Event_Closed(object sender) { - var protocolBase = sender as ProtocolBase; + ProtocolBase protocolBase = sender as ProtocolBase; if (!(protocolBase?.InterfaceControl.Parent is ConnectionTab tabPage)) return; if (tabPage.Disposing || tabPage.IsDisposed) return; tabPage.protocolClose = true; diff --git a/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs b/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs index 7e47784b..bf72c880 100644 --- a/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs +++ b/mRemoteNG/UI/Window/ErrorAndInfoWindow.cs @@ -217,8 +217,8 @@ namespace mRemoteNG.UI.Window return; } - var sItem = lvErrorCollector.SelectedItems[0]; - var eMsg = (Message)sItem.Tag; + ListViewItem sItem = lvErrorCollector.SelectedItems[0]; + Message eMsg = (Message)sItem.Tag; switch (eMsg.Class) { case MessageClass.DebugMsg: @@ -339,7 +339,7 @@ namespace mRemoteNG.UI.Window items = lvErrorCollector.Items; } - var stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = new(); stringBuilder.AppendLine("----------"); lvErrorCollector.BeginUpdate(); diff --git a/mRemoteNG/UI/Window/ExternalToolsWindow.cs b/mRemoteNG/UI/Window/ExternalToolsWindow.cs index 9a61cf02..717f73f1 100644 --- a/mRemoteNG/UI/Window/ExternalToolsWindow.cs +++ b/mRemoteNG/UI/Window/ExternalToolsWindow.cs @@ -30,7 +30,7 @@ namespace mRemoteNG.UI.Window _themeManager = ThemeManager.getInstance(); _themeManager.ThemeChanged += ApplyTheme; _externalAppsSaver = new ExternalAppsSaver(); - _currentlySelectedExternalTools = new FullyObservableCollection(); + _currentlySelectedExternalTools = []; _currentlySelectedExternalTools.CollectionUpdated += CurrentlySelectedExternalToolsOnCollectionUpdated; BrowseButton.Height = FilenameTextBox.Height; BrowseWorkingDir.Height = WorkingDirTextBox.Height; @@ -120,7 +120,7 @@ namespace mRemoteNG.UI.Window { try { - foreach (var externalTool in _currentlySelectedExternalTools) + foreach (ExternalTool externalTool in _currentlySelectedExternalTools) { externalTool.Start(); } @@ -133,7 +133,7 @@ namespace mRemoteNG.UI.Window private void UpdateEditorControls() { - var selectedTool = _currentlySelectedExternalTools.FirstOrDefault(); + ExternalTool selectedTool = _currentlySelectedExternalTools.FirstOrDefault(); DisplayNameTextBox.Text = selectedTool?.DisplayName; FilenameTextBox.Text = selectedTool?.FileName; @@ -152,7 +152,7 @@ namespace mRemoteNG.UI.Window _currentlySelectedExternalTools.AddRange(ToolsListObjView.SelectedObjects.OfType()); PropertiesGroupBox.Enabled = _currentlySelectedExternalTools.Count == 1; - var atleastOneToolSelected = _currentlySelectedExternalTools.Count > 0; + bool atleastOneToolSelected = _currentlySelectedExternalTools.Count > 0; DeleteToolMenuItem.Enabled = atleastOneToolSelected; DeleteToolToolstripButton.Enabled = atleastOneToolSelected; LaunchToolMenuItem.Enabled = atleastOneToolSelected; @@ -181,7 +181,7 @@ namespace mRemoteNG.UI.Window { try { - var externalTool = new ExternalTool(Language.ExternalToolDefaultName); + ExternalTool externalTool = new(Language.ExternalToolDefaultName); Runtime.ExternalToolsService.ExternalTools.Add(externalTool); UpdateToolsListObjView(); ToolsListObjView.SelectedObject = externalTool; @@ -211,17 +211,17 @@ namespace mRemoteNG.UI.Window MessageBoxIcon.Question) != DialogResult.Yes) return; - foreach (var externalTool in _currentlySelectedExternalTools) + foreach (ExternalTool externalTool in _currentlySelectedExternalTools) { Runtime.ExternalToolsService.ExternalTools.Remove(externalTool); } - var firstDeletedNode = _currentlySelectedExternalTools.FirstOrDefault(); - var oldSelectedIndex = ToolsListObjView.IndexOf(firstDeletedNode); + ExternalTool firstDeletedNode = _currentlySelectedExternalTools.FirstOrDefault(); + int oldSelectedIndex = ToolsListObjView.IndexOf(firstDeletedNode); _currentlySelectedExternalTools.Clear(); UpdateToolsListObjView(); - var maxIndex = ToolsListObjView.GetItemCount() - 1; + int maxIndex = ToolsListObjView.GetItemCount() - 1; ToolsListObjView.SelectedIndex = oldSelectedIndex <= maxIndex ? oldSelectedIndex : maxIndex; @@ -263,7 +263,7 @@ namespace mRemoteNG.UI.Window private void PropertyControl_ChangedOrLostFocus(object sender, EventArgs e) { - var selectedTool = _currentlySelectedExternalTools.FirstOrDefault(); + ExternalTool selectedTool = _currentlySelectedExternalTools.FirstOrDefault(); if (selectedTool == null) return; @@ -292,13 +292,13 @@ namespace mRemoteNG.UI.Window { try { - using (var browseDialog = new OpenFileDialog()) + using (OpenFileDialog browseDialog = new()) { browseDialog.Filter = string.Join("|", Language.FilterApplication, "*.exe", Language.FilterAll, "*.*"); if (browseDialog.ShowDialog() != DialogResult.OK) return; - var selectedItem = _currentlySelectedExternalTools.FirstOrDefault(); + ExternalTool selectedItem = _currentlySelectedExternalTools.FirstOrDefault(); if (selectedItem == null) return; selectedItem.FileName = browseDialog.FileName; @@ -315,11 +315,11 @@ namespace mRemoteNG.UI.Window { try { - using (var browseDialog = new FolderBrowserDialog()) + using (FolderBrowserDialog browseDialog = new()) { if (browseDialog.ShowDialog() != DialogResult.OK) return; - var selectedItem = _currentlySelectedExternalTools.FirstOrDefault(); + ExternalTool selectedItem = _currentlySelectedExternalTools.FirstOrDefault(); if (selectedItem == null) return; selectedItem.WorkingDir = browseDialog.SelectedPath; diff --git a/mRemoteNG/UI/Window/PortScanWindow.cs b/mRemoteNG/UI/Window/PortScanWindow.cs index d0b2cc81..7b2ab32b 100644 --- a/mRemoteNG/UI/Window/PortScanWindow.cs +++ b/mRemoteNG/UI/Window/PortScanWindow.cs @@ -28,7 +28,7 @@ namespace mRemoteNG.UI.Window WindowType = WindowType.PortScan; DockPnl = new DockContent(); ApplyTheme(); - var display = new DisplayProperties(); + DisplayProperties display = new(); btnScan.Image = display.ScaleImage(btnScan.Image); } @@ -154,7 +154,7 @@ namespace mRemoteNG.UI.Window private void btnImport_Click(object sender, EventArgs e) { - var protocol = + ProtocolType protocol = (ProtocolType)Enum.Parse(typeof(ProtocolType), Convert.ToString(cbProtocol.SelectedItem), true); importSelectedHosts(protocol); } @@ -195,8 +195,8 @@ namespace mRemoteNG.UI.Window SwitchButtonText(); olvHosts.Items.Clear(); - var ipAddressStart = IPAddress.Parse(ipStart.Text); - var ipAddressEnd = IPAddress.Parse(ipEnd.Text); + IPAddress ipAddressStart = IPAddress.Parse(ipStart.Text); + IPAddress ipAddressEnd = IPAddress.Parse(ipEnd.Text); if (!ngCheckFirstPort.Checked && !ngCheckLastPort.Checked) _portScanner = new PortScanner(ipAddressStart, ipAddressEnd, (int)portStart.Value, @@ -279,7 +279,7 @@ namespace mRemoteNG.UI.Window private void importSelectedHosts(ProtocolType protocol) { - var hosts = new List(); + List hosts = new(); foreach (ScanHost host in olvHosts.SelectedObjects) { hosts.Add(host); @@ -292,7 +292,7 @@ namespace mRemoteNG.UI.Window return; } - var destinationContainer = GetDestinationContainerForImportedHosts(); + ContainerInfo destinationContainer = GetDestinationContainerForImportedHosts(); Import.ImportFromPortScan(hosts, protocol, destinationContainer); } @@ -302,7 +302,7 @@ namespace mRemoteNG.UI.Window /// private ContainerInfo GetDestinationContainerForImportedHosts() { - var selectedNode = Windows.TreeForm.SelectedNode + ConnectionInfo selectedNode = Windows.TreeForm.SelectedNode ?? Windows.TreeForm.ConnectionTree.ConnectionTreeModel.RootNodes.OfType() .First(); @@ -312,7 +312,7 @@ namespace mRemoteNG.UI.Window .First(); // if the selected node is a connection, use its parent container - var selectedTreeNodeAsContainer = selectedNode as ContainerInfo ?? selectedNode.Parent; + ContainerInfo selectedTreeNodeAsContainer = selectedNode as ContainerInfo ?? selectedNode.Parent; return selectedTreeNodeAsContainer; } diff --git a/mRemoteNG/UI/Window/SSHTransferWindow.cs b/mRemoteNG/UI/Window/SSHTransferWindow.cs index 33c2f82e..db4761de 100644 --- a/mRemoteNG/UI/Window/SSHTransferWindow.cs +++ b/mRemoteNG/UI/Window/SSHTransferWindow.cs @@ -42,7 +42,7 @@ namespace mRemoteNG.UI.Window private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = - new System.ComponentModel.ComponentResourceManager(typeof(SSHTransferWindow)); + new(typeof(SSHTransferWindow)); grpFiles = new MrngGroupBox(); lblLocalFile = new MrngLabel(); txtLocalFile = new MrngTextBox(); @@ -352,7 +352,7 @@ namespace mRemoteNG.UI.Window ApplyTheme(); ApplyLanguage(); Icon = Resources.ImageConverter.GetImageAsIcon(Properties.Resources.SyncArrow_16x); - var display = new DisplayProperties(); + DisplayProperties display = new(); btnTransfer.Image = display.ScaleImage(btnTransfer.Image); } @@ -411,7 +411,7 @@ namespace mRemoteNG.UI.Window break; } - var t = new Thread(StartTransferBG); + Thread t = new(StartTransferBG); t.SetApartmentState(ApartmentState.STA); t.IsBackground = true; t.Start(); @@ -432,10 +432,10 @@ namespace mRemoteNG.UI.Window private void ScpClt_Uploading(object sender, Renci.SshNet.Common.ScpUploadEventArgs e) { // If the file size is over 2 gigs, convert to kb. This means we'll support a 2TB file. - var max = e.Size > int.MaxValue ? Convert.ToInt32(e.Size / 1024) : Convert.ToInt32(e.Size); + int max = e.Size > int.MaxValue ? Convert.ToInt32(e.Size / 1024) : Convert.ToInt32(e.Size); // yes, compare to size since that's the total/original file size - var cur = e.Size > int.MaxValue ? Convert.ToInt32(e.Uploaded / 1024) : Convert.ToInt32(e.Uploaded); + int cur = e.Size > int.MaxValue ? Convert.ToInt32(e.Uploaded / 1024) : Convert.ToInt32(e.Uploaded); SshTransfer_Progress(cur, max); } @@ -452,14 +452,14 @@ namespace mRemoteNG.UI.Window // SftpClient is Asynchronous, so we need to wait here after the upload and handle the status directly since no status events are raised. if (st.Protocol == SecureTransfer.SSHTransferProtocol.SFTP) { - var fi = new FileInfo(st.SrcFile); + FileInfo fi = new(st.SrcFile); while (!st.asyncResult.IsCompleted) { - var max = fi.Length > int.MaxValue + int max = fi.Length > int.MaxValue ? Convert.ToInt32(fi.Length / 1024) : Convert.ToInt32(fi.Length); - var cur = fi.Length > int.MaxValue + int cur = fi.Length > int.MaxValue ? Convert.ToInt32(st.asyncResult.UploadedBytes / 1024) : Convert.ToInt32(st.asyncResult.UploadedBytes); SshTransfer_Progress(cur, max); diff --git a/mRemoteNG/UI/Window/UltraVNCWindow.cs b/mRemoteNG/UI/Window/UltraVNCWindow.cs index 4cb51fd1..5afe1e81 100644 --- a/mRemoteNG/UI/Window/UltraVNCWindow.cs +++ b/mRemoteNG/UI/Window/UltraVNCWindow.cs @@ -19,7 +19,7 @@ namespace mRemoteNG.UI.Window private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = - new System.ComponentModel.ComponentResourceManager(typeof(UltraVNCWindow)); + new(typeof(UltraVNCWindow)); this.tsMain = new System.Windows.Forms.ToolStrip(); this.btnDisconnect = new System.Windows.Forms.ToolStripButton(); this.pnlContainer = new System.Windows.Forms.Panel(); diff --git a/mRemoteNG/UI/Window/UpdateWindow.cs b/mRemoteNG/UI/Window/UpdateWindow.cs index 25c52a39..397fdc2c 100644 --- a/mRemoteNG/UI/Window/UpdateWindow.cs +++ b/mRemoteNG/UI/Window/UpdateWindow.cs @@ -85,7 +85,7 @@ namespace mRemoteNG.UI.Window private void pbUpdateImage_Click(object sender, EventArgs e) { - var linkUri = pbUpdateImage.Tag as Uri; + Uri linkUri = pbUpdateImage.Tag as Uri; if (linkUri == null || linkUri.IsFile || linkUri.IsUnc || linkUri.IsLoopback) { return; @@ -135,7 +135,7 @@ namespace mRemoteNG.UI.Window lblStatus.ForeColor = Color.OrangeRed; SetVisibilityOfUpdateControls(true); - var updateInfo = _appUpdate.CurrentUpdateInfo; + UpdateInfo updateInfo = _appUpdate.CurrentUpdateInfo; lblLatestVersion.Text = updateInfo.Version.ToString(); lblLatestVersionLabel.Visible = true; lblLatestVersion.Visible = true; @@ -153,7 +153,7 @@ namespace mRemoteNG.UI.Window try { - var changeLog = await _appUpdate.GetChangeLogAsync(); + string changeLog = await _appUpdate.GetChangeLogAsync(); txtChangeLog.Text = changeLog.Replace("\n", Environment.NewLine); } catch (Exception ex) @@ -169,7 +169,7 @@ namespace mRemoteNG.UI.Window lblStatus.ForeColor = Color.ForestGreen; if (_appUpdate.CurrentUpdateInfo == null) return; - var updateInfo = _appUpdate.CurrentUpdateInfo; + UpdateInfo updateInfo = _appUpdate.CurrentUpdateInfo; if (!updateInfo.IsValid || updateInfo.Version == null) return; lblLatestVersion.Text = updateInfo.Version.ToString(); lblLatestVersionLabel.Visible = true; diff --git a/mRemoteNG/UI/WindowList.cs b/mRemoteNG/UI/WindowList.cs index bf254c6b..b66ad85f 100644 --- a/mRemoteNG/UI/WindowList.cs +++ b/mRemoteNG/UI/WindowList.cs @@ -43,7 +43,7 @@ namespace mRemoteNG.UI public void AddRange(BaseWindow[] uiWindow) { - foreach (var uW in uiWindow) + foreach (BaseWindow uW in uiWindow) { List.Add(uW); } @@ -57,7 +57,7 @@ namespace mRemoteNG.UI public BaseWindow FromString(string uiWindow) { CleanUp(); - for (var i = 0; i < List.Count; i++) + for (int i = 0; i < List.Count; i++) { if (this[i].Text == uiWindow.Replace("&", "&&")) { @@ -73,7 +73,7 @@ namespace mRemoteNG.UI private void CleanUp() { - for (var i = 0; i <= List.Count - 1; i++) + for (int i = 0; i <= List.Count - 1; i++) { if (i > List.Count - 1) { @@ -81,7 +81,7 @@ namespace mRemoteNG.UI return; } - var baseWindow = List[i] as BaseWindow; + BaseWindow baseWindow = List[i] as BaseWindow; if (baseWindow != null && !baseWindow.IsDisposed) continue; List.RemoveAt(i); CleanUp(); @@ -93,7 +93,7 @@ namespace mRemoteNG.UI { try { - var objectIndex = List.IndexOf(Index); + int objectIndex = List.IndexOf(Index); return IndexByNumber(objectIndex); } catch (ArgumentOutOfRangeException e) diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index ed72d159..b9a241f6 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -86,37 +86,37 @@ - + - + - - + + - + - + - - + + - + @@ -494,7 +494,7 @@ - + diff --git a/mRemoteNGInstaller/Installer/Filters/Harvest_Filter.xslt b/mRemoteNGInstaller/Installer/Filters/Harvest_Filter.xslt index 8f63dffb..c8540fac 100644 --- a/mRemoteNGInstaller/Installer/Filters/Harvest_Filter.xslt +++ b/mRemoteNGInstaller/Installer/Filters/Harvest_Filter.xslt @@ -14,7 +14,7 @@ xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"> - + \ No newline at end of file diff --git a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs index 974969e6..6bf37944 100644 --- a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs +++ b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs @@ -78,12 +78,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -105,6 +135,9 @@ + + + @@ -147,18 +180,30 @@ + + + + + + + + + + + + @@ -189,6 +234,9 @@ + + + @@ -357,6 +405,9 @@ + + + @@ -481,6 +532,16 @@ + + + + + + + + + + @@ -526,4 +587,9 @@ + + + + + \ No newline at end of file diff --git a/mRemoteNGSpecs/StepDefinitions/CredentialRepositoryListSteps.cs b/mRemoteNGSpecs/StepDefinitions/CredentialRepositoryListSteps.cs index 8f9c1f8e..a79485e9 100644 --- a/mRemoteNGSpecs/StepDefinitions/CredentialRepositoryListSteps.cs +++ b/mRemoteNGSpecs/StepDefinitions/CredentialRepositoryListSteps.cs @@ -10,7 +10,7 @@ namespace mRemoteNGSpecs.StepDefinitions public class CredentialRepositoryListSteps { private CredentialRepositoryList _credentialRepositoryList; - private readonly XmlCredentialRepoBuilder _credentialRepoUtilities = new XmlCredentialRepoBuilder(); + private readonly XmlCredentialRepoBuilder _credentialRepoUtilities = new(); [Given(@"I have a credential repository list")] public void GivenIHaveACredentialRepositoryList() diff --git a/mRemoteNGSpecs/mRemoteNGSpecs.csproj b/mRemoteNGSpecs/mRemoteNGSpecs.csproj index b7277a19..4f7f0c9b 100644 --- a/mRemoteNGSpecs/mRemoteNGSpecs.csproj +++ b/mRemoteNGSpecs/mRemoteNGSpecs.csproj @@ -2,7 +2,7 @@ WinExe - net6.0-windows + net6.0-windows10.0.22621.0 enable true x64 @@ -17,14 +17,14 @@ - - - - + + + + - - - + + + diff --git a/mRemoteNGTests/ListViewTester.cs b/mRemoteNGTests/ListViewTester.cs index e82265a8..ad5140e2 100644 --- a/mRemoteNGTests/ListViewTester.cs +++ b/mRemoteNGTests/ListViewTester.cs @@ -147,7 +147,7 @@ namespace mRemoteNGTests /// public bool SelectedItemsMatch(string[] matches) { - ArrayList matchList = new ArrayList(matches); + ArrayList matchList = new(matches); if (matchList.Count != Properties.SelectedItems.Count) { diff --git a/mRemoteNGTests/TestHelpers/Randomizer.cs b/mRemoteNGTests/TestHelpers/Randomizer.cs index d66f3f80..69bd7dd2 100644 --- a/mRemoteNGTests/TestHelpers/Randomizer.cs +++ b/mRemoteNGTests/TestHelpers/Randomizer.cs @@ -8,7 +8,7 @@ namespace mRemoteNGTests.TestHelpers { internal static class Randomizer { - private static readonly Random Random = new Random(); + private static readonly Random Random = new(); internal static string RandomString(params string[] excludedStrings) { diff --git a/mRemoteNGTests/Tools/Registry/WindowsRegistryKeyTests.cs b/mRemoteNGTests/Tools/Registry/WindowsRegistryKeyTests.cs index 717b8239..dad5b54d 100644 --- a/mRemoteNGTests/Tools/Registry/WindowsRegistryKeyTests.cs +++ b/mRemoteNGTests/Tools/Registry/WindowsRegistryKeyTests.cs @@ -257,8 +257,10 @@ namespace mRemoteNGTests.Tools.Registry Value = "Big Bang" }; - WindowsRegistryKeyString StrKey = new(); - StrKey.AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" }; + WindowsRegistryKeyString StrKey = new() + { + AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" } + }; StrKey.ConvertFromWindowsRegistryKey(TestKey); Assert.That(StrKey.IsKeyPresent, Is.EqualTo(true)); @@ -277,8 +279,10 @@ namespace mRemoteNGTests.Tools.Registry Value = "ig ang" }; - WindowsRegistryKeyString StrKey = new(); - StrKey.AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" }; + WindowsRegistryKeyString StrKey = new() + { + AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" } + }; StrKey.ConvertFromWindowsRegistryKey(TestKey); Assert.That(StrKey.IsKeyPresent, Is.EqualTo(true)); @@ -297,9 +301,11 @@ namespace mRemoteNGTests.Tools.Registry Value = "BiG BAng" }; - WindowsRegistryKeyString StrKey = new(); - StrKey.AllowedValues = new[] { "BiG BAng", "Big Bang Theory", "The Big Bang Theory" }; - StrKey.IsCaseSensitiveValidation = true; + WindowsRegistryKeyString StrKey = new() + { + AllowedValues = new[] { "BiG BAng", "Big Bang Theory", "The Big Bang Theory" }, + IsCaseSensitiveValidation = true + }; StrKey.ConvertFromWindowsRegistryKey(TestKey); Assert.That(StrKey.IsKeyPresent, Is.EqualTo(true)); @@ -318,9 +324,11 @@ namespace mRemoteNGTests.Tools.Registry Value = "BiG BAng" }; - WindowsRegistryKeyString StrKey = new(); - StrKey.AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" }; - StrKey.IsCaseSensitiveValidation = true; + WindowsRegistryKeyString StrKey = new() + { + AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" }, + IsCaseSensitiveValidation = true + }; StrKey.ConvertFromWindowsRegistryKey(TestKey); Assert.That(StrKey.IsKeyPresent, Is.EqualTo(true)); @@ -339,8 +347,10 @@ namespace mRemoteNGTests.Tools.Registry Value = "ig ang" }; - WindowsRegistryKeyString StrKey = new(); - StrKey.AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" }; + WindowsRegistryKeyString StrKey = new() + { + AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" } + }; StrKey.ConvertFromWindowsRegistryKey(TestKey); Assert.That(StrKey.IsKeyPresent, Is.EqualTo(true)); @@ -360,8 +370,10 @@ namespace mRemoteNGTests.Tools.Registry Value = "ig ang" }; - WindowsRegistryKeyString StrKey = new(); - StrKey.AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" }; + WindowsRegistryKeyString StrKey = new() + { + AllowedValues = new[] { "Big Bang", "Big Bang Theory", "The Big Bang Theory" } + }; StrKey.ConvertFromWindowsRegistryKey(TestKey, "Big Bang Theory"); Assert.That(StrKey.IsKeyPresent, Is.EqualTo(true)); diff --git a/mRemoteNGTests/UI/Forms/OptionsFormTests.cs b/mRemoteNGTests/UI/Forms/OptionsFormTests.cs index 297503ad..2b964cb4 100644 --- a/mRemoteNGTests/UI/Forms/OptionsFormTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsFormTests.cs @@ -30,7 +30,7 @@ namespace mRemoteNGTests.UI.Forms [Test] public void ListViewContainsOptionsPages() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items.Count, Is.EqualTo(12)); } } diff --git a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAdvancedPageTests.cs b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAdvancedPageTests.cs index 2ea55581..c779f847 100644 --- a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAdvancedPageTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAdvancedPageTests.cs @@ -12,21 +12,21 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages [Test] public void AdvancedPageLinkExistsInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[10].Text, Does.Match("Advanced")); } [Test] public void AdvancedIconShownInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[10].ImageList, Is.Not.Null); } [Test] public void SelectingAdvancedPageLoadsSettings() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); listViewTester.Select("Advanced"); CheckBox checkboxTester = _optionsForm.FindControl("chkAutomaticReconnect"); diff --git a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAppearancePageTests.cs b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAppearancePageTests.cs index 8fe8234e..4b4429c5 100644 --- a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAppearancePageTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsAppearancePageTests.cs @@ -12,21 +12,21 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages [Test] public void AppearancePageLinkExistsInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[1].Text, Does.Match("Appearance")); } [Test] public void IconShownInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[1].ImageList, Is.Not.Null); } [Test] public void SelectingAppearancePageLoadsSettings() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); listViewTester.Select("Appearance"); CheckBox checkboxTester = _optionsForm.FindControl("chkShowSystemTrayIcon"); Assert.That(checkboxTester.Text, Does.Match("show notification area icon")); diff --git a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsConnectionsPageTests.cs b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsConnectionsPageTests.cs index 5ce461c8..a06d8265 100644 --- a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsConnectionsPageTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsConnectionsPageTests.cs @@ -12,21 +12,21 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages [Test] public void ConnectionsPageLinkExistsInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[2].Text, Does.Match("Connections")); } [Test] public void ConnectionsIconShownInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[2].ImageList, Is.Not.Null); } [Test] public void SelectingConnectionsPageLoadsSettings() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); listViewTester.Select("Connections"); CheckBox checkboxTester = _optionsForm.FindControl("chkSingleClickOnConnectionOpensIt"); Assert.That(checkboxTester.Text, Does.Match("Single click on connection")); diff --git a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsSQLPageTests.cs b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsSQLPageTests.cs index 3cf1d64c..c084988b 100644 --- a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsSQLPageTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsSQLPageTests.cs @@ -12,21 +12,21 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages [Test] public void SQLPageLinkExistsInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[6].Text, Does.Match("SQL Server")); } [Test] public void SQLIconShownInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[6].ImageList, Is.Not.Null); } [Test] public void SelectingSQLPageLoadsSettings() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); listViewTester.Select("SQL Server"); CheckBox checkboxTester = _optionsForm.FindControl("chkUseSQLServer"); Assert.That(checkboxTester.Text, Does.Match("Use SQL")); diff --git a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsStartupExitPageTests.cs b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsStartupExitPageTests.cs index e62a3ffc..8e164843 100644 --- a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsStartupExitPageTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsStartupExitPageTests.cs @@ -12,21 +12,21 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages [Test] public void StartupExitPageLinkExistsInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[0].Text, Does.Match("Startup/Exit")); } [Test] public void IconShownInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[0].ImageList, Is.Not.Null); } [Test] public void SelectingStartupExitPageLoadsSettings() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); listViewTester.Select("Startup/Exit"); CheckBox checkboxTester = _optionsForm.FindControl("chkSaveConsOnExit"); Assert.That(checkboxTester.Text, Does.Match("Save connections")); diff --git a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsTabsPanelPageTests.cs b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsTabsPanelPageTests.cs index 67e13515..7d79e7d7 100644 --- a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsTabsPanelPageTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsTabsPanelPageTests.cs @@ -12,21 +12,21 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages [Test] public void TabsPanelPageLinkExistsInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[3].Text, Does.Match("Tabs & Panels")); } [Test] public void TabsPanelIconShownInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[3].ImageList, Is.Not.Null); } [Test] public void SelectingTabsPanelPageLoadsSettings() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); listViewTester.Select("Tabs & Panels"); CheckBox checkboxTester = _optionsForm.FindControl("chkAlwaysShowPanelTabs"); Assert.That(checkboxTester.Text, Does.Match("Always show panel tabs")); diff --git a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsThemePageTests.cs b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsThemePageTests.cs index 323af78e..c8fdf915 100644 --- a/mRemoteNGTests/UI/Forms/OptionsPages/OptionsThemePageTests.cs +++ b/mRemoteNGTests/UI/Forms/OptionsPages/OptionsThemePageTests.cs @@ -12,21 +12,21 @@ namespace mRemoteNGTests.UI.Forms.OptionsPages [Test] public void ThemePageLinkExistsInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[8].Text, Does.Match("Theme")); } [Test] public void ThemeIconShownInListView() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); Assert.That(listViewTester.Items[8].ImageList, Is.Not.Null); } [Test] public void SelectingThemePageLoadsSettings() { - ListViewTester listViewTester = new ListViewTester("lstOptionPages", _optionsForm); + ListViewTester listViewTester = new("lstOptionPages", _optionsForm); listViewTester.Select("Theme"); Button buttonTester = _optionsForm.FindControl

~TlAT!%95$xO~fXCW~#3xQ~fg$J3slJ_*cx} zy|s8U!oI>fWnnxrwU9w)pWkyk<16-e+J2_!nL7HFWOOky0@lY~be>D{32|&Ko~DaU zxKAdWVux%$)Lm!2|1(nDkVBgbh62{^nZq&3Ib;G)u5Psohft9AH`CrkEiXsoY=$0&V*wAQTEIC}EEWkgTV zd*&FKvlVkpYpH^h z)!0)Ms6c;0gYGj&X9uqWZjxZ~9YmS_H90^X39bg}BrY77r&)eV$ua$Ffg6xlK+Js+7GGdD0vP}ss^C_gW z;PPcG0<$9j`)pI}#{+3P@Gk!WFB)EyxzLTM<6F~Eqke^`_O|C4jkgepNN5=Z8Y;E} znA}N5%LvaPvLlCer3Nc@B{9kLZig{5!WW#DKHEtz3dnMBy8Pq-Av;RCYlQ#FN2~c; zsZ=j*$l&>4eFt|D^LgG=W$z?yM_7JduDQLR69X*Uq?j};_n(&jZYTZS8R^sI-*{U3 zDNgz+#I%}wrT7#ySDu!7fRlOvF{-6!^O9<5HXoK+D$#4`YFTfvI_PG?Np!W$1ALEB z8$xt0^`5+b|GBB=rv=`6+(fKHfMbMzMUsw4d7w-qgZILN3PMbE#4;slkxb;8!8R~?I%O_dt z%&jLM94}B^V*MKaR_`W9{F+pJyuZXet>V{7{2LN~ek%SY6)()I7EM2t02IU?B2OCXhHkuk5Ehb&=2jKD3U8aRSy3+OMP-h?kMq2SdprAMC`&2wf5;yYj(O;Ils)TRi8I! z*8Q%8gJOSw`1@*iYxp?G;1zeVnHeTD;)U9wMm{-?r_=Q+Z*SQr}f1qI&I zp+M|;|3c{<-9)gHbG_c{S3li{K~!>7?;}2mD8|ofd6;_9N7u}`I^=kdN-OLgO=@cZ z-EW?pKUVv4K8Ib<-USrQ;<778i};(0^7XD5hE<6W^&yw>nT2n^`7rC^xgP;B1> zIfo&|n#Y_JxmHx_)y#V^X#=5499wD;g4eJ`FPmv!JD;4- zN_Nx$?92I5M>}2?ZgpzYMcG8)qE*)3j#d#eG#A+ETIm7BSV|5e+1Oc1d4gR`54Cfq(=hCf6Nok3%KvKkwc0_}-i52C zXc>~VA8nyb-Hg9Z=WhPn2%Ztv{rzy!j=`RS?S`^vAIn_U; z(!_eX&uX9emR2pu5tBeg&LKprd6*O!h2F09KlyMqS#oj~wT|$&-0s75$x8e0qt!AJ zF@?2>O-j|_F~Vc{NGZJz=cB^jiuGubJ6yn*9y8|gYwnz2Y^XZ|Ujciuj~^@RVgtF1 zx!Z_j#joP)0`+wPUqk9HN>ER{pe@S{=<)ovEV+yu_nODYE$wL@FIm#HuBW6hk6&Sg zH$#4+EpqIvC{SCs0duZp2fAjAI)O1(gjH+QwzPD$sIL#4v2a!MBzN>)H{|`3g-?1J zt_vgGbQy`uqyFcs^9U-lfA&=-&aCI56xN5$T_(t4F!aqCTAnb;Ef=WU8Clj|oE{c_ z^na|qRBFDL^%1=1YF(JJ;K@0w@Qlmqqe?N*q3;>>=j-}oN6%)+EE_C?B&!gY)_6Nlb@MJl^{kOaYy)2@-r~UjGNF`A!8vQLZzaT8+%q@_OE^w_Om2jq zB1uQi;Tx0P@S~#tE&mknDR%?pUz;hH2lShg=czEc$|3(^Lx3j91Yel}^hzTW%*zE# zHSg0bkCvcm#>c2P&Iq<*l#>k45$=$81pBE;|0&qFvk)g&)7m$axQ1n#O@xNjrvxs> zgD_0Hq@~voGk%(y^=~j7je3i}!zU6T;={%Zh-S18`$18v;EO3ZB_3#1QUPbWy6?zU z(uV?9?5_-ZwX0?)e317fRQCS}R6>K@#{Iw`i`yNSg<3?mfVC?veAXVtp62SBtZ-&M zaqHZU{9y$jS8Qw5(g`Q*`xzB9Qh{~9RA8R)8s>bWP|AKk$2`={*wVBHlN>$wS`~$L z?<*Hx`y&;FsZD6{xQkUFyX|o?k%}aN9@(+Xo}W?X_V>DTahZK%&x~THAsw==6fcYy zt0*b_Gd64M4RFSei>=y{yCM~fV?QMz3BxmQ$du5Fm+bPmrqyK1o-e)K<1j0H8(A_p zd|&5#{EhTxVBGi{uaU`EstYZYzW#<3s`OT53XUWO!C}wphglBG>~XMN!ut-?8EA9| zDN#1TdPvE|nNf0aW}s3GIKm`qHRYNchn_OV+_B%Mf`oBbL9HrC-d(Zhc#lrl*J>)Q zU^3U^E{7wJQ9%r1*G-tvspC+inv9INl(Slx&g?ZXZ1j)>>1*x8cnCAr7IM>ZcR zoyDI@5eld?C>n-|q$MYHOOEiS2Q#)l#WR&8eUBKDMiD4J{(2E zp&6xKrb_)hMZ@8`)C|;J)QftOiiX?3UWTHf$h*IsYPJ!U)vKef;SxeR>KdXJa|T_* zy9rI}8cLdux`tzl&Y)|E0Dj-hN@pi?=aX`|=E7^_cqlKUZIf~ZXa55nOo@fyOzU4J zjk45N5agIiz+0$FY!^u4`d)nKg1Yk^JJpkfC#D7SHC5{pyhf`Vk{|sK73m9pEvaDP z4ql+sd4lH@wkc9fI{I6d*Vu1Ju8ZzQV8$SSM3vLSsQ>vs#`lR{M*S1&Wk7O9=16Tz zRH|-9{r};s?!;>T25(5(fEdxCfq@H8vjJh~1ffl9VM7wZoAhuV@1kfUnorS94=DZp zgc|0tu7uQ`*dcZNPqK~+JJxY_vX0+6b|wP9$UxkSRFj%N`(KsiJ@eARHA0cr6AZIa zPc10zeOZ0qd&qT$X?QEaOvAxHR0JiDpVZ)}e7 z8O!gY9%IXTi7`)|b4PylC2Y;~#leBF=KA8GYy$G0oeT?v%J6w4-FC>+#gr2WaNShj z`z|Cp#9WY!Dd2_RyLIq|$>2dc`1=G`wAP<1UdP?`t07r7NAnJP(Jkn-=z7VBE}LSlW2-4h)?EFyg0IwoABxU;N3t;)6@W|i{Qa`y zeR3LTO<`hRqmDC7fESLdHss&02uKb;DFX6SqB16c-d}xL`tfZtccdQ`gmfJLx14eO z-8d?|WXiZUjGCn=X0>ETTxM&Y(-D zROgIo$MNovjc3nk$g|dxQpPi%Gmdh{Q3=tMZqpg{VqQkZkgUfYe=u2-_Q2g>w>(D_5B-NkQiGWGA`e zVrPF_qLL~+Ec3)UIxevXlIhUj7@^a}LK3fZI$4fgvD^7f^Yb@K1{adw>y;?r7CKS* z`Dp~Vn%4+}(rms8Td#Lv^{f<6eTZ7fZT$I9(6MY~@-o#Axuy)e0HlQcOS<1U>Fy&;w;oOv{wMVbYwn8O zBss_vdkU!xSFCms=(gWnp^zUdA=U|W+1s7K%O#7rf(OOFyHRyTT8|*vU&5+MxsqtD zP84gGC3$M0i(O;vh`irem`HHEdx-Z|bqUZNlkK&Bcg1$A_cwru?kyApXUSctvo}tIGI z$T{>*#JK-OugDCKUUx{#t4Ain+caWfcF`roPhWTs%4Wut4;&4l6UMYQ-v_D7jK;K9 zJ-8htRoLH)YCQju0<_qh>pz`KC(czt@lLLhpHK(8*e|Tb_By49q;$@e-#46-PdRY@ z6xZBo;+EWO%aJH&xy8!@(>dLhP4?8q@$u}H$-Mpj?(ELrN%Y*8&WB_mnYF{AYQS*z z=oO2tVs7Q!7XInLP1JW^_bddzE~zawo=o1|8hOy8)hu&XDLM-{~U zNtG3=qo|Y#f%-*C*G+u;2JUiG7NTHnUFPq()!f)`nbvnVU$gdU{5Y>*BH^*EeStx#HIsxo+k8 zI?u6+BG=tK9}?b!-$6WgEiZDpdb+!0d9u59%jw=T{jbNW36({z2Y9xZ7rB1G!-&l4 zlGW*-d*Q0bW)-=ftSWLnG_T0DrKZSre^{6MaD9>M-B6Kh1Mz>qugEpLvB)*fDsugp zr=90Y>Q2^ignB-&j^E72j>gwX&r`*73(vDW{pJ+8KH&HAZxp$*Npl6y9X#LTTeZ#I zi+^3R1FLFh{S>*cew~AbE@s!+H-z{?ei@1$<7P*%43|)ks65^W( zZvh8GZUZ0S<}A`^TsYl4sC$o|xq}Av8Z_uEW6+>M-a){?7SBMQQQs?aE#UVs;n(o{2H!4sm;N#q`!g7O^mqRC%M$CmoZLji(Kz9-%jwH%li_Z%b9QA=Slxd7m@kq?yBm@s30@;-+T9bspQ$KegS;{ z;+b_Xv`4{sW_psO30K_r`7|M!?hf(({`WuhnrnLiZI?=NK51;NYRc4nIZk9BB zK5m9Zid<8f(+haY8<|%;yLe9VOe3ym6EuToJWmbJ^E`)n{)@O*c-A$OmglQhk?S0u z9z5;DcO&i-o^0asc+TUwf@c!XEj%HfFf=kt4Dn29x9Wzu*}WWC)-^gi5t*B3)eYf$j6Z)_S1k7Di@olAU%RpL5vD}t zD&J;_H85Wa55h^mXVWLHtl)6p>-T;yI_igb|MUGoimO>bX-TnYG|6|m46G{8WdoR*LlKzCTDVLzA9s@b!{5HryDeU9`n=erDH2sRoN%#Thzj* zeu{1WNgrUe*bh1sVEd>FQ^;Rea4m5%4kY89dobXrYtr}=!`XQIR5~FSS;`tP3K{(? zt#vZH(a-2*xhrRuGkFzXonaO&Bfr?v>I}ZvBgW{cxH7D?pFlRLN0;DNT@de8uXu0_ zXp@=k+`nx(+qRJLfzKpJs=xD;3!_DMwE7dcAyQfshee2t1JgSyn*68iH~Ct0yN;q; z?N;?o)JeOA*Xj_kBxC<&uT2J#;Dr5S`KrrE@TuLH3?f0heK%hwj=ucIuh@eb$I_3h z7A{Q5?<=aGN@cZI7Is6;PX&OYcKcqwaRrGD5eV!CM+wZoyO=WSK9w$AwoSWT({1un zkyVr1d_Vhpc|DY0BkFQy0ORywqnE|oyOKBi?(j&$6bj5wdF?~b1^ zQ8j3n(qJ`fY5X8*JTuR0z0}+MbB|{A+7?S-)V)UY%fS z9VuPPn`)FpV}jkWKaLz(WB@e@7w+xdmG*2{1X>i@A}w+Sz7pCJq6bjCs8qLrwc^Fd zi)3Kn@lz{a#JjgP>?V<$J0J~`JhVmKBn(_0+A>N&3JeKtQJ0&819UNozG6GE%>LUT zry#l2%!OhKYSRT(HZ@2N`(Z73Gq<4YK|w4~#qyG}oZTRDji$Lduys~WnN>7U**628 z0^o55dedWj`06~m=M7e)TN|fW3yRQVh;iD;bI$_N3llB}lq9KWdJQ5yT%s4>A(*wl z3D!{@tC{20xv|T*5EWp3ymGz8@rrh%tc)>RdF!wUewj8Q3O~9rUo>bo=JD6cNo@40 zuU!6OUbJXf0uB^MtOHB1X1}JBk2vawv(t7-hlzScKh`%ZBp9*af5ghZRWxF5;txp@Pj#Hnq*ZAjBuor$ezR z1UdLLw@4XX@cc2ldlD%RHztw7II666J%I8?gCvuG_D(e{PQ$oUUUGDePL8h2K4Ww( zFX%A3^oXJxQ-drOlHw;+|2tzJzsF}7`&TCm)ni`|cvWbJDIlXoQ@{(G~mO75?CQAR28`nF^B zeY)4;A{L^->y<*r3dKUBoMdHgqjSu*$wz+t!bd0=sZx z=Y>Y&wT6j$W$2D6uIha_NGY=~JYVIApQS_X540J4tG&wc6>>-iL_X792&}DIblpks zjE+AaTnLCuDaEB(56Wc3V{(=CSUqo1JC9{UmAA|+(TFSfKL>3)}eBRTx- z@vKNqyA1fkqg};`l+}()A$uerWErEfKsSDqlcXCq*w@4qx*;B%u@~Hh+sM(b6pnK@ z#`?{^_L}_ajj1f78ZxrXsG>5dVjES^TlSE#Vjc8=U2v{k32!aVbtR_fRRD=y`%fTh zcmOydzljD>mPs^JQ%$15BbCj~jR#q$2VxA=93Yt&;flW9zLR&D)X1bf7KNdlZ_YiM z)K9TyPEFM}J!kS5)dC|L_K5i3-a}#HZzLz2 z2=q?enP(5_FB`K#{3Xz$Ob4fvrQ~~G@NEbEZ>Mm1OC~M_q=*8^gF{Ht9ZaQrI5Qmv zwYj2u;m~&LU8|jWL~l=!HrY?-ORc$r02>7038^M4Qk$pfALUx(l^Nz;l%7|cSN-Qy z>4&8Bx5z0eyEzb)Syt2>3Op zH=iX%vNwOOQainQk?PGa(TkZ~hy!*yH8PsfaG~}3$UWSc$cj$MW4qWkG3Tg~_595p zjMIK`)xOQ6{Db@P5B@zm)vV2TMW^TEFFa5LW2xT8)O=h!O6d<+_^tG8g0Y55^+_zw zv*+{^2KuO7!7ts3%;)1}Z&R|)n7G^?O9a(erAHPq6$@mC63KBqGueMXre+?3ry z@>I`0p`FpREMk@9Mr(!s7IWXp?)~@lxE(CxcJVnfZWr-aMpUkSR7wy>I^jeRkrzWl zvfE$%MB2nP>yJ5%O>7YRW|3}b=ihdJT4FsY5;TTNq(S0GZsWf9^nJe9Yc8~QTnwQK z-Q8`nxtqSh+q)#-B0*DbmkGYtm%VE#vcLkI+os+GV8vXI=8;l9bMYwTC{Mcekv!?v`}xbJQB$O< zGMVN_V^HIgyh(`_nj+^WRw#N;YOR(#zi(d zddG7?$BmBr9Bel=ND;KR!$wE*psDJvq#>Am_H7x>OYp4L1{L5$H#dkPyX;PVTb2np z?3W}2eRrpG0+%2MxCnoNsBmZq7Uk(QZo8(hbd)#JAX$a$fPZS9r8o_>a|vyAv|YPU zwbdxT;!@hK|D+Og>)`?c4!^{V$9Saj}Ad~Ztu^^LNF9WR0RmIkgIFT2{nyzwqd zH^M(bm%>^puuuR)sCl_N7g=jBi49>oe#3slzhmys(1`-$zS~Gk1v^p|j2EkJM!1Ub z(20wJJ?78bR6{U`A7qe#&gM>82soBzv5itL}dZPs}u%fuaIY2GpT(70{E0>Cy8 zUC<_M43t?WylXxT)F!bdKToGSI_{8@&S>ijRFY19I;U$NchpJOt*tBLK+?%i=X58> zwL9su+PcCXNILoHobJ@PlSa5Z5GfelZC%j=leF>!h#*yf)G%%v7Ycaix50;UQ|Uqn zb_@4C8}@EL)YW|N+Mc_G3gW7PyGsaW3I?-FXFpt`E5xey`Cmf(4P_Q_^{Z)%z)mK%s-A{B}dYzFimiHQi)A zDCh26RroaLWWPN9Nf9Gnm~YzodT8r!0o4_KT(;`1%IB6VP+(;xHa<^yV&f+MDrv?v zB~or}RLRY)2MBlLe3XQTcx`Kx02u;_jj}mcSw^cYp{?5p5MQl>te(b(#_fD*?T<1o zAZb+b(TxH@XzLD195`Pk-I+={(MhUetv`mg?o!DHs$?&wl1+A!so2ogR!Ky~UlB0H zP;p|Tx>X?3nQ;oZ)<%^kS$Uf(b&w<%Ysra?%7(HeFLaWt6as)qb+E&!0NBI3Zc>2* zfQk)m-7ASAbD=&~R+)teWK?2bv{9p4#la9D8VPNESrP_DSS$DO5^WS)@Kztrl&mYT znPoM;LFiCkO0F-TDK+5pSLM*9x+TaXI&s27hPJ*$YFFR}e4=TeYA*ZMKWW|rpY-CT z?F??(9&d6}rRoD~rCKy6dCRSHvUZk5J^jn934<$Dy?UH*xHwn*>0HKktfzKhKXj6} z%<8Q@QNWjh)adSkhc{*4PPW1+Qr?GR96Yup#31;pq7?tH?9bpU3fK!Uzsp zxXLQ>T6cJ1c?YnZo*ngsqPcZZ&xUB;eWdRaICRA}dVxE_$JV)(j7H$$cv^&xIGhVV z0P#j-QDL_CH®I`Bfiy@3|cb;9z6{({ei(JjP8f+W~R_4u_&w^E&SHDLtiZzP1 zCrB)4TKNVzX;OE}=e0HpON3Z=PE(_Z!pPCws1!mQ_YeUi@=j>0BO|NIkPr9iCB2C| zZQ-@%t#hZdhqkuMRNzcn`OWg-ImGOf$r?M)0B+9eY zXDQ!*+FfDO<1Z3D@*rx8jca(5f0+JjYfK6)j2SPXxXg}Z<65G^uSGVB_@WA(&R>zIRQYxL} z_~Zm907vik4Q-V=#6V7!U8y0AcdxR28a54A@T@s)jbf}<{*iU$9%I8!4IJ2aE3lH) z3Rr1ik}|+F*y+~T4=HmAUWRj@(T^)M^%Qqz`{pV3RGJpc^NneZwiM zd~z;~a=drPAO^d&-6`)KM((-eU4LLGbjrw>?wm1)EuZxpsZFdO^nvU4mE;6_j@)J* zFPKM%%-yNk?V6s(*81z@jFMGkQ+w?c*K;9ozHk-xV6!oAS$nosMo;D9U+nLjWa^R3 zDm+a(@5rmY70nQHy_B~3Ps(_d6`KVZL6TMCMV`Zm?q|X82YQPv!dvYI__9RbvYQam z;gp_bcjUJEgPi;VMlYR}3kc(3T&?SfOhW#Huqs!4byg<&K5(NL(>datW|vi_-K_(c$h|-$M0}qR zasOd-4ls4{$g$&A&^xp>G9zaw9&t-gns(R7op~dFhmdyuJlnGzfyJ5hQ_Le1)9@ih z7yf_oi0THxQpEqf-Twmg4`g#viRgHlK2$)0P=Bx(A#&x0Yw&G_1}Ny`dI>Cxl=$K79fOa{mlAj<%XWyCRhs$fmbs&G{3+*o<03}yvwRD@A!n^IPkl=f&MrC)tub^B1-EhCin9J-!pZ z*QVOr-T~jm9&C@&-VyeSiAt!PYOXu*etdT(y7hVI=k)hGe@NGl0lp6Xz3wyWFXcQl zPqt&lp7QEn(^v-_hG{15-GTp!w|rsyGwSa=-kv;j{m>_BPSv@#W1VLhZ_0mVYu#?? zok*QE_zwCNRYj(@wk=p)4NsPM*@| zPpx_ksNO!}3Z0rFLuAVa@aq-ym(ltI4)S-}is3EjvE z#Nw|y_%e@7%Umze%wWHXh!&5frJL|z{(NNCZ)H>rWmK$k#zQ%iv+nIQ_HKq$msq8n z9BTS|pt<|Aq4^omSi#>`+J8hZC{kPiGaRb*xHjJa*j8oECS@t^D!575fpg0%t8XIQ zem@~2Avb=7hJR!H(eP`VLd0xs;*T+;UH|Q?QX&S-nc~{7U7?vyOszYwq)f zm1UTs>MJv<(*Eg5z+d95i?)YDnbe~A9geKnZ~Z@C6fe$L6#I8v6nixLj}3M=`FF;1 zTKzjkwtdEhF;ue?kzlKtTom<9spDp9T~y;gr&+CW2ALY=0kq?zGS$-v?{fKkb4P4@cJCzOCpQIqOfDR_p+ zG!8rCc{pCUH$}p>?G+Y!SL@iK`QDCW3j4 zjgzX~@=ecXa>W_z!5Q)Y{QsnzSJkO`&wp0)()h0jGVni@A7P2V2>q?nbAns*OzJ@<%$iBYksj5kiKJ_|T=Om^UR@n7o^ z{YCg%{ze*K!#cuaT`4r8Ix97)6jX1j5gYF%R69F(P$x3)8iA^XbR!n?7$m{G>g-gu z+0vLdg)-3J!Q4VYZ1pPIP=*)Xx6JlLARF0ZZO{4hFu)*uFuK24&owz+uz3-aEUa!6ph1$5A2k^} z>>aX$F9;q28x;oj#Gm;x;~_T#p3dXp!W2BSe{}kIXix}}@i3jY&mRxL_2%6`))xQ8 zY2#tG$I2x6%U%ON4#}6MmY5F7ADO6*q{e4{iodtIfg#*pEFM;SIqT9YD0yL4t6G+i zFdSHi`dHmce2a(GoE`rYiAQ${?2kV?-)fZ|Pjxg^;(}C(lxJ^v=ah273?PGvXmEtD<6gkk*UVo$PLZGhISX&-ZJ7j^`jGe?)^N4eUy zC%8x?1(DL6G1CXv&Z(%1&SM3g$WoOxGEtRS?6HfPSgdSpmxo!hY3^f9_M-ln%TQW6 z0={Lx9I|9hQfd1o(+1yQ=>y|vu;lnk1~2xc>KFmDjuD#eAFP%=#N~XwL()rT~zxN+_FvkpNYZuO+ zmV$Z}-FFR1%MdZ}qsm{^iz55*6grQ5%e(xJ=J_)7>G@aF<6#^%Wy%A-nwn3CQuB$% zGKEO!hy*(9&Tv^9-*a03JN(xe*snQNo%yeEQvYs2;hx}GNe=7}dPKQ}VqU_5O`)0} z(tc>6+d8_aC(;xVWg#JU@%jW?I+Z1p-;??#omSt=uY5s$eW*`KcY5kt72Qgokug5Z zBL$iJg~15Zkh>kS{6lCdcIOXU{$UZnz0j!L#+Vq>_beTUFQY{f3|pw2e}DUq~(^T`!c zT+Lm_y79%03;E^}=Wa^t8SbV8`&Oe4Lj_WJSsBWWeG4eUY7>4z3739*mu8~n3-(tm z5IpGwWppX+7g3{GJ2(e}Mzc`H&@1p-wi{_B(dmO3A(4qIJc*LQ>ewt*f|Eb7bclVS zQa>GL_t%=II-L_=9a30{mW*pF8O*Dz%+Ybyw;oW17%ib~=t%R=z9p=*8nq5YN-27X z#I-iaJlBVJK%x3C$Lb~BI#Mp2<|7@fq1R4wW@6OWfFrBlm{|jj@P2s>7DNy|cFn#A z;kh!sxml1nI9#y5$W<-dG?r#z?`Bpc_AhcP?NJUvbI_imi@rb2g#@$}tF|&uD-wOL zrxSJ6o5+I_8-?f1aZGAZzQP%!0@)a`dTw`ecNl@lOeuWSJ(@k!gWJLzHRQ7 zyP@&hl0D&k&$mGR#t$RGyy%@d9L)IUvv19h1lt1!=cc~1bn@V6beMzf+yCZW2%+z~ z5Y9e$v0{^i3lf~|he%*_D-oQm#iOZeu+I?~&iWhl)_z6qS3y6jg;Ug-xOV9Ib%{>w z3woEmXZbP4p%`kXW2&uGuaxFl`+PGz!S38g%*G84X9MU_<^=m;FU5DX#v3hhBlV^A z)npOWrduyvDBZAd)xlS=`S2>XHFyT|R8>FCq_+Q8RuIDj9*5rhPbNoOLofDG@2n;|L-; z58ELu;T~4U+3XFFzeQ>wY&rbR`cxN30TS$&U>!m?TeD8G8gw5s>tn@wUsr;I#5wr9qAD5j0Pt;via(;jz_vLAnNH^sVApSrNXQrmprTM(q*Yo2a3vS z+54qosH_%dH2Ga&_d_?6zIK+d4n3mi6&rl7RXUJc2W$qJJTA4QMn}CUClhc$%mo%Y zFJkS|g2-f#RXR8_87vDIRFVkhTT^qbZZl~LsmoCOj23mTu3n~&dLqTS)~-k?2QzZC z%r5m~ctEb``Rxih0y;}wRU0BV2E68}3u+nD??r;S${9T@SNyCtf9?e;pJc;z<0|Xg zO&5gYB(cU?I*IW9oy{-xPizW8KEpEvpmn{bIf2o)6PUt>5u)>YL$eT zyuKi7FAW{KSI(&Op^^Hi1*ZKDD@KmKSUIM6E2Rn)gyG_k6;xh|wx=w-B5%Zez< z)N+UwnPo>xkEYr(K@6-6dl)@dSSB6$kww81%ytp5ab&&m^s1?LR98Yf`#&zo!dKe~y2;wb*f^@jp@Jap{FeWKqhXl zkc++${xgq@Lg{%{R=v1J5e+KO1!5`1+NH|*%g1V5o5i_Cr#_JO7IbcJKYA>)y@i?l zH0QPYOc^$W?Oh&cw!58!)dP{a@7R0g*1@Z=*|^}t-oEy~H*_z{zeo0^_M*Qk+8*)m zlj{e4bG`}BRr-eT-JCkN1GmeXBFL0C=NOv%?8&p|j}`CFLAL*8W}u97mL(YFGV3Gf zK$jb95&r?B{;-sE-ouO#c4@(PtXDJPiTbw<-OGx%FX|VL{^fF!e0u;zIDS)dN^<0^ z4*XWo9=g}}!IGQdB?cH9JlB+oG}gn8u*Y;9P5hmBVR>v&bGXWE&8@Vve!+dO9+mdN z|L*F_s<9E*H+N$f&{w=qI(Y**cq0&R0&y#Ns6^ln9x}pZAm8#Ih!0aBr0`b`8+C%!D2A3p zrTpyVX5(cDtddqImKNA=qw-m4zrkN!=82uUOfPeO{TvE=ga9e)2mDf1+aysraJ9*# zW7pV80swr_7BpD>xt7bfeQ7o_wz)e8Y&&*9Csgt3i0DkQj{G18&u3CVna8)cMwh^~ zk-gB)PPL`dLyf#_Jbn9|9LNuwQ7->q{XeIek2&kO7uiWXDE$RK zgicZD<2w`vGaEsC-H|s~g)^rxm+}O>-*(|t`M_2L6Ame@!`Y79eAp6B? zX4X>@>uV46u1oZ0sNn-9G1LgRAbUUva}Pq8b-WrIUx^lbB2n?Z90@{>R@}o6GbC7nSrSeS@Uv28mN8!;53b$0T@!xXrZyu-aJq!#>L5@n7 zw{W1fIG>d?e3)_^dh)20X;lw z190)lTn_xn`5!*2G7k+em*23>-}0G?&&pCCWmfozicyuQ5}jB9OA61W#`&W7skifg zu6DNbV~vfi5nb#APvix`T_h}c6w5%@vx=Dim$!EhjH0%zpeghHtaZ+r1k~Q|_mAHX&6)jNd+oK?UVH7=+RH*5+q)9i)})+p z@YzKZwx;eT1=@a5@OCU4%9OYG&se29B2C2Y4uV>jv57Lq-uje}piL$;mwSuDI+bjq zmCX&SGf_e~XUaq@G4`JRc^T=7B`@oITO}LQ>i9su{=`sm_oaRBtX$f}a7{bbhf2hQ zsEwgmes=x{-Wu9&Yx5!^1Z1#{R`+fCJ3xb{RV&v zg?vYggnUN}`^fhzm=99R4EY2m$idW)$&+0t{3V;f2OxtkKe;7&1eKB&^(*P7|GlIM z$Cp(7DKIPg!4ygUzhHlmX~i+v??Y+}MOXvNQDi$|9z|Bt*vVz=x8>N%uWU6y*~;HX zm;Z1eOWMS_{|gJ=?55o){Uv{KF1eDtM@in(kK~s-$&n+i%c^|wso8ZR{u~UW*^%rh zOE(Y=BimALzV$cJg38j`)gI30rvH>2U%zH+D2-8(=OozwF1+tm_D$SEz^ycSexgj< zQ^w-s=(Cn&dQAPNI3%*5AMw7|4<0t6ka$u_k|)B)cIv@TJN4yNB|oo%Rtq?{bAJY@N^+U!GWH7t!=VBtHY1a&0ug2cX3e*dVU3mWfqinS!(JzS z@2Opk9NcP4uNi@_bs4+hse`!EnQFeBsWE(E1z%^X4j28DhukLMN}OuRg~bR*G;6rC zFmx~cKeB_j#6IdeL4FlTcHxN5)I?HCQfa5oRK$g6-bcd-J~5?gsv}H!^^BMtu9EaR zFX>NDm*vPZ)UjIx!NkQ5icZ z{{EXj4onsuxl=rU1kgmjaKTtA58t@(HgHHq;Qg1tbJ#eTx*LzjN_XJ?U)stl^BTHe zTTPRE-!6xh_0VH%0xND`W*AzHei+FvWL`CmN=6Uw!YD!NVJPDqava&wnR?u%Q)gw0PfBSvTHQP(@SGqq8jTT>h4x4O|EJ5wH!PI0{~yRxykJ@p)pOlk|?&Qyn_VU0I? z2~)QFQOI@6mG}Dyf67sg2YX9n&~ALZ-HM#1Lg8wD|`M8p*|4sH>%2O9^@Fkp8_836Ct z&7~jn6A3-0{YUV~u8tP1&*&H&Z2K`dbq=@|<){LeUGU&_I3JK*f(Pf|>Kt$r-&X#D zPuR~1{!b+3pyH-?0)x2tnUpELx;qEVBN08zX9=+MV2dw{AWpq1?-y^oCVxPjn@pfx z0o@_f7V^nt4 zKc_Kn_SZiH=~Oo>SE%4{46hNOAvY1Eu2QB@Y{-;G)9W54Af58d_ud}9W*K%QkPq}1 z=j@z}k8e_AtdRuUUcrG#sKE9_(OWXb2sU>hnVda`^sM6aEWdmA$?b#~whAR#QaI06 zB-r9JOMjx32ybONGnhfp>DD@(QM(ClLR9T({ZfWLEu|oDuhTk30T5ElioH+}o{z<*$s+aSUpj*Rp|7FeddyVGV)fAcbeT+_&Uu^uX~i_ zovFL|lAG-JxUOI*-yT<2=j<&jb6YFcYR^Y%W0fW`;xkleBv)wlxEMYiRZKcud z`4tYn$)lkKCDy83hEb~|gOhaWC7H~2(9A@cG1VaouV9VRL3~K<9-JazgF|W$*jlx8 zZEq6O7;kkAI!8>m+p`7uRnT#Y$XF9-~$&-B79ppQAm3@JI3p>>XcB%bJ@E0!@ z{7%=Sg1`8HHK>#%?_1R^c$KwjjXwN$Z&A2lv%PcpCR+g~JN{YFna)dYs$ix@PMN4V z5&t7)p$AE5BD4R`a>VUkX(?xIA|t|=E6(A!gLi%aVUj(8;ELzPG4>(EB`@tgfyXf` zF+j{p)XWXuyvg13As5DyxINLYijn=Sa1@y*JYejflaMC7r%`xKg4~H)t_Uy;Q zE_XT%D?FN3D!E*`{};TN$jdju)Q_M{>#YGF0_m4I2AbnB5LzfyW^3mw6%N~C>!)P& zJ?n0Q;Bk(rbT59t%g?vOdNP-Jm6sXRId&8bwWX@qJxyogfJ$ei4Z-4Ne(cOH@sMB) z3GBAiL`j!A;H22Y&;GMS%V1UU$?i=(q2QC-YSZfkK&Ir70}o@onK2h+iUrD0>5g{W zQ0bzmb0l+M*=;(%AKo@p6orDe%-#IBC`dM^2c)FDw0^^f=bxQXauvMh;20hloH(#S zD1UhI2Wdr{@mha{c+O}MY?}`;?R7#jx@61eEt#b`B7UtB#a<(I6Lr=Du}09O7YaF` zSK1+ML#GA+4YA^qPr;H>(3C(SS$egS%q~C<+v|FW=}c|mD;d-4Iy9vieGCL|UoW@3 zD^k~GF{yBC1%hoGu@D!r|0}+k)By%e78yj;>d}sjq7X4(`71=lgiy2jrNOmEnvAtu zJ0pnLJes^uM%s*I-}FvFW?TVJ1Z9kd2|`n43k~@jQ30J!X?ERJS+kc!ovA&1MN&)E zaLPqsx8%Ft7FFqE4u~|H59OH1I;mT7%ZUB$0JN17(Z1zrt2MyJjVw{8Q;!2lcU{t% zwOY!fZYiCq^|;*eKmz-fcNXO(6~Q2b14M{s*Gap$M`s<68RSPta4`w!LvzmY-1&Zo zrU-POx$Q5gsaI9l+mW53v}iN8PogR2@YW+_Z@pDkD`d{<)FYkh1sPjQ?@S$Zv1RIh zRn*(&aS7N%oK~$fts%~kqz5(^qP+Ck17bO{OU6dB#?1$3xdp;c{$^29~s3=~?jn)y=bVW&< z84X=G{07Sgh11mg-zKL+%t0b5HVRihHHX0A+nA8yakPM&a0y=Q69wHp69%Y^aHvCc z=IYWFbDJiqIryA?lbEmIeT%#f3sceIN7+bWqa>ZOBtP3JT2jBtzOmbb3;ojy%T7sQ z>2-orO?so`>`Vz-ZZk-Dq#rlu=bsg^iW&Nqvi)Go^V$8_RM9rCzueb9{QE5yHCu13 z@;&9-Rm;Qmat`5Yw^ywXy~(A^`c1kN<>_t zx?68O7g5teZ9zsacf$mINC%&|>YSXLOP?bqiM867+ zd$V7K(kaR8cCz$3Nt)g$IUO|II!JJTnN;vuGU?CqtTkj(1cUqkDz%fzZvi>L>!ulil6`CeDoxo}y9=ClY+)=&yRqC5g!TsT4Su%+a)_YCT=H_+^`8*yBWF>miZ#U3x@~r@oDFjwxl=Nq+P6 zR$T#fCD^0*JPGFCe>pVrB$#;({Rdg0eR!1iVZj4&;q+7?XE1fLbUoExoz^^FJy}H- zZO%JzNOQLHn`_S1c--cc@J}@7ee(3Rb{DwGDW;Y!C6bEDmd*%JhVYEP=7-5Y7Gy@{ zZ#tUK0zHV-b(!S7d05}GzyLLiKg*ybS zvg@QZ%mLXkchyh-{$;d=*M5DiWQs)n%d91R-ypOry{1G0HV^7dg>VQ~E3c@CvaZsn zpVQdFm1Htmz3kUfR0&%rUaZ@Fe4~qgA!ZYLll`ZLK?VOrEW{ zHOQ29y+c-~@}pH-NE8=n4Vhd}gXFE{km4kUYGyG)7yj8F*!POtx$mK<>zzqi5FPs? zs_R~#DYZDW;9~J8t(C(fyRg`siOC%RyNBzQr50xq+{EkqC(fjLDND|`uVP0G&2xyI z3NTkLNcs4NcLgWzvKN%Iww00txM{`Asn7BFam2;kdms35Kt*nNlv>;!_*DEjg6+-} z`{Bn$n@`8D3_SYq3$|?&8Y#7grz(jXo+{^St0Kf6Kjyby>v1$Qy8$&sgnD|-79ps< z7=tDJj^Le10rJ+|RT=*J)>5Tkl zht6?mcUo*HERFUnX|n4iPEPDPR|gb_hOmw@i*I*mXn&>LT`0o1&stW>x_I!QxE;ZAn?i|AMpFlJPHhM1DGusi}}<$V0ZS$2!X^_Pr02iPyAs zP1as>kNA}7!c8G}6>LRDRx5Tfrk=}Ev9oMuZ(`lXzH$%85GHL){yi`8cPFv^e45qd zj2|%RJZDMQuJOx~|E$$CVth@9mZ{uPz?vNXDn+0zjWMwa1rc z=d+z#A`qL3hco#vPj#f%i1=hQ64A-NB}POVl#`}YR=PkPTYJGd(=dHdEcxR8lIu?3v?K#~d00 zzMQv|b3V=4i_Ph)S-lZkvL!g!CkS)j1aWiRQ7%v1aIlE{txG~2A1lU&U_40wElAf^ za|9_}J8I_hSSd~n#NSz~_dcBT4{T?niiDrXDh@`a5<}RvtKwi$=KzV2f9LU5 zmGyxii?i-V~=^oQjKHo#|n zEZRC&SeO$_O9Cw35|tdQj2;c9wm{pt$*~<0pZKzF7Rwf0Y8sL_ld9tz;amhiqW!V; zjq83Y&ZG~QGz?Q(*Tn+)44j=Qi*K*q?ixd0T0|B(zw!DM=UP@OPQVP}GwPB<-r|d$mmS(m<7D(qD!sOsc6(6xfws%k@1gmu z;=Ac7X2E?&v)auOAxP-dT2LjuFi>XF9=lu5(zZ$kJl;v&M3KTiz!Cly4&p~RBUAsf zH~iYuUw$@3E;}`k)y}vM;?@xzz3yf&35|2wY82E2T|@~54{J%&C;0Jrq+$hwYGEqdu;WpiN3;? za}y^d$Bx38*K!(nPt1F(c%x9y1Q*WS-$o10+%Gz7pDYtF@C#M$jaYLaoLoDzN^o%8 zi(?TSyyPZHFI5r?t(Ef3O|LowI9*FxDi2Fr$L^vYzQjqEnC-R1BOUf88cR>_aw}=x zvl@DB)OSvV6a!o@zY|GN$wyQL3!9xDkn* z6uB1Ul3U8bZ%EV()Qx_>+(8tiAlVE#V;xjzrdQ4ucXQYkO2{o3p2Zv1WQN`Ck|usm z#GJs%CSsKe(>y9v^rONpCq>OePpYItjyc6Z3ZANiEZFJ=W|;eW*5iWgBb-2{xkSEp zN2l5+*jH3#UyGVKG8djO;)@kw z!ZOo)uD05MFBQXfEr>@9Iil^Yqr%z-mH#K)8XVl@ zZqanZg^#PP)o!u17|6}?Ji;hNQ>GkhF&WfJ<}qK?49(TTZ4a+Y2tR&Ce|YDI{rW>( zdcyvrSav+NKP1QQSs|Q!q17%#y!VG%$pg&oo6_SDD!U*6b`4fO95iek~hq^vHAN} zI3es{cb(zeI+|%-0v>rv7^&ZTf_6$U5`&XdHif%`8L=1UiqKVx zj?CIG$=wl0ANTIF)E2y@v~{RnT@Xw?z$j#EOH4I?`W3xiOUkSfcF}(2@I=Jx>e4(8 z%VgI{8fzlFu0#~Plt2Fk3tU3(XKx}062<(PMFh9?;-?&6L$@+iqo49N{KbZX_o@pM zoBCtvA()d!JG7;Rs~r@TY9br74|p_oK=kzsFWkYtujhOUD=(V=FUnsO?N6Tnx3Zm_ z{mK>=!zelz!wOg4D?Q%M2nTcjmD)~qnmZ#kCFBfln4PGh^46Re+Ap23(6KqC0sDtA z0(0NPVI#WN>ucRn%I{pc`AfBS0ar|)w2S8B>#u`A`FHC3?+_RcQ_r-0p!9_N(j z7M7k|ZXW-2p-)w(NV=iI+{We*kDP%I_xw3+D)RKNQd}8^PmU4jz+ZmgAiUWpYndF% zUB&6eJZ8-HhxC&Al5}Q-I3`u5?-kuPeQ%9;@0HkSIwLADf^E`>W{wSuJ8NH6nO-vr zXF4^8Z}NyAE6Yddb(bRwQA|$B9dW$l5{I<1Qm_h4Q#+n&|IaIY>lgE3Pc34t#?fTX zX2sN2U0YU4 zX*XE@qU4dhr%NbP&EkpOo~c$T-t0PQOoJ{79wDxtYX&)%BN>w$rNMoPbGS)bs6@Nf`a}b#CWc zC$hF!Ze{+h#+?%-PLB=7&STDdVzkM~1X3g^3sSuH{cn2_ld2fMY9C(tIaHBKdCMmt zulf|!cAdDgHm`Qf;CRoNf$@XCDsLagagLQk>~0j4UCm9PX-)xLv)TFIQgyikeZ0I> z`QK0}_pC4+=1)}0y!s~keAFyOxREKjRNHN-w%f&h?bc8}i$_fnuX(&_;nW%Vi@X(! zT{QF}%`hUDfs%1*ECiIX^&*kxF{;McQf5}_V|68P zO~gu5vSb_PfDl`111B8bby^1+U)SgChH{=o9m)dVf-=>U{Q49K8uMw4TyTIpaX0A; z96nY{-I1vIoK%hD9vAoeEm;h9JTUv^=cvHv0!EKV26_>&~DB{B+5CNE;x=KwTq&Q(onJuj1b zlp=V~?QL&B*oEI65DZQo5PEQAQW6ufrcok#GVYi+AUIx*KoQk!8nio?bR+u<%z(X$VeqYHOF?zQ4BgA;K-F76Nv`D_QSr?>M7*1w-z<}XN`_{=VR z>ksfrz0fuInO^Y);8FB_CFQZaEkn4~fu3uP0aR`ho|zqJGOreS%L)}u=JS7~koTip z@n26Cy766f+$Qsgrh!)zd*n(Py<(a6ic5060=96>DP4X3C&ZuXXBl(=5kae@8f-QN zP^4?U`M{7`dis&!+orOh88Bm|X!Dn!NDV@w8A*Rc$EvNAlezN1Nic)ivpk-iw|yh#dALR73D36Bbk`>@=i+5-ghMGG z?UADtMklennMWp8c~#(tz+?XTHXQm%$xCav++vjgMU-xR)h9qf(qUA79Am#-*W-~w z9cXn}UbUBW*oQNdx!qq!*@X>Uz&|qly{-|?qNXN~n1|A$ zc(9t&Rl2f%w;tTyTEFMqG3Uku?e)KZR(dj~0M57TxAQ81y=!GrW*OFTU&fSx`PsXL zKF8T)ejh9JO$H7&0`}N5x7ka!uN(vgAV%sC?9c7@XHWyhkn~p{foggw-`?uX5uUGd z*pW=x#Fq9+doqo*yA4EGux z7zxX>;R69aqTBV)ewso3nO8N88Y!Rw;!jiXGyIP-B{WPZv9 zO>9my-B@kz5$BCK$C$ftrWo%!~?(vL^E zmI^43_YA<9!O$#wNO}U#p>xxzv#}VS@nsg`k|k|)9PVz&PpR{x)2hzKa>rNU{8TzW zRnE@{=STO}IvcAUpWKZDN{#aaON(!U^TWy-$8w6)N(T?FHU`Ygm`KkwR;HI#b^3f~ zjPqH0H;qG38^73r4`vqDA)3<(vFvzCrg1{2Z;p^z-lu%*9u-&VLa}oZLTeCmK8tqm zlJhZfI^>)oly%5CNt_Nj$Km{!kXpD!GJI(Nj}MRbRwpOQIrTZg?henM9XmuJPhwLaj(jAPD| zm*FHu!x&)jdQZMs`8=*uBnr1;+^NgYmxOcy{_j;aWCDu>4K>osJK|@1nH}czdKCKh zf;zKISp_>%-fF(bpMgvRUHksGXoJb+h nzP=duZx$PHTU;LCAtLGyV$<83ngtw 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 q%;edXCKK?$4gl?5K5% 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≪hF>OKOh+JPk_01XI?j%QJNqB0?+$6J{6Bc#q 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⪚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