diff --git a/.gitignore b/.gitignore index 0d160db..3e7d1b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,484 +1,484 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from `dotnet new gitignore` - -# dotenv files -.env - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -**/[Dd]ebug/ -**/[Dd]ebugPublic/ -**/[Rr]elease/ -**/[Rr]eleases/ -**/x64/ -**/x86/ -**/[Ww][Ii][Nn]32/ -**/[Aa][Rr][Mm]/ -**/[Aa][Rr][Mm]64/ -**/bld/ -**/[Bb]in/ -**/[Oo]bj/ -**/[Ll]og/ -**/[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -**/.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET -project.lock.json -project.fragment.lock.json -artifacts/ - -# Tye -.tye/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml -.idea/ - -## -## Visual studio for Mac -## - - -# globs -Makefile.in -*.userprefs -*.usertasks -config.make -config.status -aclocal.m4 -install-sh -autom4te.cache/ -*.tar.gz -tarballs/ -test-results/ - -# Mac bundle stuff -*.dmg -*.app - -# content below from: https://github.com/github/gitignore/blob/main/Global/macOS.gitignore -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# content below from: https://github.com/github/gitignore/blob/main/Global/Windows.gitignore -# Windows thumbnail cache files -Thumbs.db -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -# Vim temporary swap files -*.swp +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from `dotnet new gitignore` + +# dotenv files +.env + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +**/[Dd]ebug/ +**/[Dd]ebugPublic/ +**/[Rr]elease/ +**/[Rr]eleases/ +**/x64/ +**/x86/ +**/[Ww][Ii][Nn]32/ +**/[Aa][Rr][Mm]/ +**/[Aa][Rr][Mm]64/ +**/bld/ +**/[Bb]in/ +**/[Oo]bj/ +**/[Ll]og/ +**/[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +**/.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml +.idea/ + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/main/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/main/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Vim temporary swap files +*.swp diff --git a/PS5 NOR Modifier.sln b/PS5 NOR Modifier.sln index 1cfcbf0..098f886 100644 --- a/PS5 NOR Modifier.sln +++ b/PS5 NOR Modifier.sln @@ -1,31 +1,31 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32901.215 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PS5 NOR Modifier", "PS5 NOR Modifier\PS5 NOR Modifier.csproj", "{BBBF9E78-9480-436A-92F1-B5B8943BCDEF}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|x86.ActiveCfg = Debug|x86 - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|x86.Build.0 = Debug|x86 - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|Any CPU.Build.0 = Release|Any CPU - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|x86.ActiveCfg = Release|x86 - {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {406F6CF1-EBE8-4A32-86BA-26B4FEDF751B} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32901.215 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PS5 NOR Modifier", "PS5 NOR Modifier\PS5 NOR Modifier.csproj", "{BBBF9E78-9480-436A-92F1-B5B8943BCDEF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|x86.ActiveCfg = Debug|x86 + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Debug|x86.Build.0 = Debug|x86 + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|Any CPU.Build.0 = Release|Any CPU + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|x86.ActiveCfg = Release|x86 + {BBBF9E78-9480-436A-92F1-B5B8943BCDEF}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {406F6CF1-EBE8-4A32-86BA-26B4FEDF751B} + EndGlobalSection +EndGlobal diff --git a/PS5 NOR Modifier/App.config b/PS5 NOR Modifier/App.config index 9c3d200..49cc43e 100644 --- a/PS5 NOR Modifier/App.config +++ b/PS5 NOR Modifier/App.config @@ -1,3 +1,3 @@ - - + + \ No newline at end of file diff --git a/PS5 NOR Modifier/Form1.Designer.cs b/PS5 NOR Modifier/Form1.Designer.cs index 3889d30..c16c7d7 100644 --- a/PS5 NOR Modifier/Form1.Designer.cs +++ b/PS5 NOR Modifier/Form1.Designer.cs @@ -1,843 +1,843 @@ -namespace PS5_NOR_Modifier -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); - this.label1 = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.label2 = new System.Windows.Forms.Label(); - this.pictureBox2 = new System.Windows.Forms.PictureBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.fileLocationBox = new System.Windows.Forms.TextBox(); - this.browseFileButton = new System.Windows.Forms.Button(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.serialNumber = new System.Windows.Forms.Label(); - this.modelInfo = new System.Windows.Forms.Label(); - this.fileSizeInfo = new System.Windows.Forms.Label(); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); - this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.label8 = new System.Windows.Forms.Label(); - this.boardVariant = new System.Windows.Forms.Label(); - this.label11 = new System.Windows.Forms.Label(); - this.convertToDigitalEditionButton = new System.Windows.Forms.Button(); - this.boardVariantSelectionBox = new System.Windows.Forms.ComboBox(); - this.label12 = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.serialNumberTextbox = new System.Windows.Forms.TextBox(); - this.label14 = new System.Windows.Forms.Label(); - this.boardModelSelectionBox = new System.Windows.Forms.ComboBox(); - this.label15 = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.macAddressInfo = new System.Windows.Forms.Label(); - this.LANMacAddressInfo = new System.Windows.Forms.Label(); - this.label18 = new System.Windows.Forms.Label(); - this.moboSerialInfo = new System.Windows.Forms.Label(); - this.label19 = new System.Windows.Forms.Label(); - this.label17 = new System.Windows.Forms.Label(); - this.wifiMacAddressTextbox = new System.Windows.Forms.TextBox(); - this.lanMacAddressTextbox = new System.Windows.Forms.TextBox(); - this.label20 = new System.Windows.Forms.Label(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.btnSendCommand = new System.Windows.Forms.Button(); - this.txtCustomCommand = new System.Windows.Forms.TextBox(); - this.label24 = new System.Windows.Forms.Label(); - this.chkUseOffline = new System.Windows.Forms.CheckBox(); - this.btnDownloadDatabase = new System.Windows.Forms.Button(); - this.btnRefreshPorts = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.txtUARTOutput = new System.Windows.Forms.TextBox(); - this.label22 = new System.Windows.Forms.Label(); - this.btnClearErrorCodes = new System.Windows.Forms.Button(); - this.label21 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); - this.comboComPorts = new System.Windows.Forms.ComboBox(); - this.btnDisconnectCom = new System.Windows.Forms.Button(); - this.btnConnectCom = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); - this.label23 = new System.Windows.Forms.Label(); - this.label25 = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); - this.statusStrip1.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(8, 84); - this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(768, 45); - this.label1.TabIndex = 0; - this.label1.Text = resources.GetString("label1.Text"); - this.label1.Click += new System.EventHandler(this.label1_Click); - // - // pictureBox1 - // - this.pictureBox1.Image = global::PS5_NOR_Modifier.Properties.Resources.PS5_Nor_Logo; - this.pictureBox1.Location = new System.Drawing.Point(8, 7); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(2); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(117, 75); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureBox1.TabIndex = 1; - this.pictureBox1.TabStop = false; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Segoe UI", 22F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label2.Location = new System.Drawing.Point(140, 7); - this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(277, 41); - this.label2.TabIndex = 2; - this.label2.Text = "PS5 NOR Modifier"; - // - // pictureBox2 - // - this.pictureBox2.Image = global::PS5_NOR_Modifier.Properties.Resources.Paypal_128; - this.pictureBox2.Location = new System.Drawing.Point(8, 459); - this.pictureBox2.Margin = new System.Windows.Forms.Padding(2); - this.pictureBox2.Name = "pictureBox2"; - this.pictureBox2.Size = new System.Drawing.Size(45, 38); - this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.pictureBox2.TabIndex = 4; - this.pictureBox2.TabStop = false; - this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click); - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(65, 459); - this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(702, 30); - this.label4.TabIndex = 5; - this.label4.Text = resources.GetString("label4.Text"); - this.label4.Click += new System.EventHandler(this.label4_Click); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(5, 3); - this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(102, 15); - this.label5.TabIndex = 6; - this.label5.Text = "Select NOR Dump"; - // - // fileLocationBox - // - this.fileLocationBox.Location = new System.Drawing.Point(5, 20); - this.fileLocationBox.Margin = new System.Windows.Forms.Padding(2); - this.fileLocationBox.Name = "fileLocationBox"; - this.fileLocationBox.Size = new System.Drawing.Size(717, 23); - this.fileLocationBox.TabIndex = 7; - // - // browseFileButton - // - this.browseFileButton.Location = new System.Drawing.Point(727, 19); - this.browseFileButton.Margin = new System.Windows.Forms.Padding(2); - this.browseFileButton.Name = "browseFileButton"; - this.browseFileButton.Size = new System.Drawing.Size(78, 20); - this.browseFileButton.TabIndex = 8; - this.browseFileButton.Text = "Browse"; - this.browseFileButton.UseVisualStyleBackColor = true; - this.browseFileButton.Click += new System.EventHandler(this.browseFileButton_Click); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label6.Location = new System.Drawing.Point(5, 49); - this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(87, 15); - this.label6.TabIndex = 9; - this.label6.Text = "Dump Results:"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(5, 72); - this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(85, 15); - this.label7.TabIndex = 10; - this.label7.Text = "Serial Number:"; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(5, 159); - this.label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(66, 15); - this.label9.TabIndex = 12; - this.label9.Text = "PS5 Model:"; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(5, 189); - this.label10.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(51, 15); - this.label10.TabIndex = 13; - this.label10.Text = "File Size:"; - // - // serialNumber - // - this.serialNumber.AutoSize = true; - this.serialNumber.Location = new System.Drawing.Point(124, 72); - this.serialNumber.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.serialNumber.Name = "serialNumber"; - this.serialNumber.Size = new System.Drawing.Size(16, 15); - this.serialNumber.TabIndex = 14; - this.serialNumber.Text = "..."; - // - // modelInfo - // - this.modelInfo.AutoSize = true; - this.modelInfo.Location = new System.Drawing.Point(124, 159); - this.modelInfo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.modelInfo.Name = "modelInfo"; - this.modelInfo.Size = new System.Drawing.Size(16, 15); - this.modelInfo.TabIndex = 16; - this.modelInfo.Text = "..."; - // - // fileSizeInfo - // - this.fileSizeInfo.AutoSize = true; - this.fileSizeInfo.Location = new System.Drawing.Point(124, 189); - this.fileSizeInfo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.fileSizeInfo.Name = "fileSizeInfo"; - this.fileSizeInfo.Size = new System.Drawing.Size(16, 15); - this.fileSizeInfo.TabIndex = 17; - this.fileSizeInfo.Text = "..."; - // - // statusStrip1 - // - this.statusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); - this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripStatusLabel1}); - this.statusStrip1.Location = new System.Drawing.Point(0, 535); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 10, 0); - this.statusStrip1.Size = new System.Drawing.Size(847, 22); - this.statusStrip1.TabIndex = 18; - this.statusStrip1.Text = "statusStrip1"; - // - // toolStripStatusLabel1 - // - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(135, 17); - this.toolStripStatusLabel1.Text = "Status: Waiting for input"; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(5, 130); - this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(80, 15); - this.label8.TabIndex = 20; - this.label8.Text = "Board Variant:"; - // - // boardVariant - // - this.boardVariant.AutoSize = true; - this.boardVariant.Location = new System.Drawing.Point(124, 130); - this.boardVariant.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.boardVariant.Name = "boardVariant"; - this.boardVariant.Size = new System.Drawing.Size(16, 15); - this.boardVariant.TabIndex = 21; - this.boardVariant.Text = "..."; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label11.Location = new System.Drawing.Point(393, 49); - this.label11.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(84, 15); - this.label11.TabIndex = 22; - this.label11.Text = "Modify Values"; - // - // convertToDigitalEditionButton - // - this.convertToDigitalEditionButton.Location = new System.Drawing.Point(655, 221); - this.convertToDigitalEditionButton.Margin = new System.Windows.Forms.Padding(2); - this.convertToDigitalEditionButton.Name = "convertToDigitalEditionButton"; - this.convertToDigitalEditionButton.Size = new System.Drawing.Size(150, 46); - this.convertToDigitalEditionButton.TabIndex = 23; - this.convertToDigitalEditionButton.Text = "Save New\r\nBIOS Information"; - this.convertToDigitalEditionButton.UseVisualStyleBackColor = true; - this.convertToDigitalEditionButton.Click += new System.EventHandler(this.convertToDigitalEditionButton_Click); - // - // boardVariantSelectionBox - // - this.boardVariantSelectionBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.boardVariantSelectionBox.FormattingEnabled = true; - this.boardVariantSelectionBox.Items.AddRange(new object[] { - "CFI-1000A", - "CFI-1000A01", - "CFI-1000B", - "CFI-1002A", - "CFI-1008A", - "CFI-1014A", - "CFI-1015A", - "CFI-1015B", - "CFI-1016A", - "CFI-1018A", - "CFI-1100A01", - "CFI-1102A", - "CFI-1108A", - "CFI-1109A", - "CFI-1114A", - "CFI-1115A", - "CFI-1116A", - "CFI-1118A", - "CFI-1208A", - "CFI-1215A", - "CFI-1216A", - "DFI-T1000AA", - "DFI-D1000AA"}); - this.boardVariantSelectionBox.Location = new System.Drawing.Point(507, 98); - this.boardVariantSelectionBox.Margin = new System.Windows.Forms.Padding(2); - this.boardVariantSelectionBox.Name = "boardVariantSelectionBox"; - this.boardVariantSelectionBox.Size = new System.Drawing.Size(298, 23); - this.boardVariantSelectionBox.TabIndex = 29; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(393, 72); - this.label12.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(85, 15); - this.label12.TabIndex = 30; - this.label12.Text = "Serial Number:"; - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(393, 100); - this.label13.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(80, 15); - this.label13.TabIndex = 31; - this.label13.Text = "Board Variant:"; - // - // serialNumberTextbox - // - this.serialNumberTextbox.Location = new System.Drawing.Point(507, 70); - this.serialNumberTextbox.Margin = new System.Windows.Forms.Padding(2); - this.serialNumberTextbox.Name = "serialNumberTextbox"; - this.serialNumberTextbox.Size = new System.Drawing.Size(298, 23); - this.serialNumberTextbox.TabIndex = 32; - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(393, 129); - this.label14.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(66, 15); - this.label14.TabIndex = 33; - this.label14.Text = "PS5 Model:"; - // - // boardModelSelectionBox - // - this.boardModelSelectionBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.boardModelSelectionBox.FormattingEnabled = true; - this.boardModelSelectionBox.Items.AddRange(new object[] { - "Digital Edition", - "Disc Edition"}); - this.boardModelSelectionBox.Location = new System.Drawing.Point(507, 127); - this.boardModelSelectionBox.Margin = new System.Windows.Forms.Padding(2); - this.boardModelSelectionBox.Name = "boardModelSelectionBox"; - this.boardModelSelectionBox.Size = new System.Drawing.Size(298, 23); - this.boardModelSelectionBox.TabIndex = 34; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label15.Location = new System.Drawing.Point(65, 495); - this.label15.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(387, 21); - this.label15.TabIndex = 35; - this.label15.Text = "This project is sponsored by www.consolefix.shop"; - this.label15.Click += new System.EventHandler(this.label15_Click); - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(5, 221); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(104, 15); - this.label16.TabIndex = 36; - this.label16.Text = "WiFi Mac Address:"; - // - // macAddressInfo - // - this.macAddressInfo.AutoSize = true; - this.macAddressInfo.Location = new System.Drawing.Point(124, 221); - this.macAddressInfo.Name = "macAddressInfo"; - this.macAddressInfo.Size = new System.Drawing.Size(16, 15); - this.macAddressInfo.TabIndex = 37; - this.macAddressInfo.Text = "..."; - // - // LANMacAddressInfo - // - this.LANMacAddressInfo.AutoSize = true; - this.LANMacAddressInfo.Location = new System.Drawing.Point(124, 252); - this.LANMacAddressInfo.Name = "LANMacAddressInfo"; - this.LANMacAddressInfo.Size = new System.Drawing.Size(16, 15); - this.LANMacAddressInfo.TabIndex = 39; - this.LANMacAddressInfo.Text = "..."; - // - // label18 - // - this.label18.AutoSize = true; - this.label18.Location = new System.Drawing.Point(5, 252); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(104, 15); - this.label18.TabIndex = 38; - this.label18.Text = "LAN Mac Address:"; - // - // moboSerialInfo - // - this.moboSerialInfo.AutoSize = true; - this.moboSerialInfo.Location = new System.Drawing.Point(124, 101); - this.moboSerialInfo.Name = "moboSerialInfo"; - this.moboSerialInfo.Size = new System.Drawing.Size(16, 15); - this.moboSerialInfo.TabIndex = 41; - this.moboSerialInfo.Text = "..."; - // - // label19 - // - this.label19.AutoSize = true; - this.label19.Location = new System.Drawing.Point(5, 101); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(111, 15); - this.label19.TabIndex = 40; - this.label19.Text = "Motherboard Serial:"; - // - // label17 - // - this.label17.AutoSize = true; - this.label17.Location = new System.Drawing.Point(393, 159); - this.label17.Name = "label17"; - this.label17.Size = new System.Drawing.Size(108, 15); - this.label17.TabIndex = 42; - this.label17.Text = "WiFi MAC Address:"; - // - // wifiMacAddressTextbox - // - this.wifiMacAddressTextbox.Enabled = false; - this.wifiMacAddressTextbox.Location = new System.Drawing.Point(507, 156); - this.wifiMacAddressTextbox.Name = "wifiMacAddressTextbox"; - this.wifiMacAddressTextbox.Size = new System.Drawing.Size(298, 23); - this.wifiMacAddressTextbox.TabIndex = 43; - // - // lanMacAddressTextbox - // - this.lanMacAddressTextbox.Enabled = false; - this.lanMacAddressTextbox.Location = new System.Drawing.Point(507, 185); - this.lanMacAddressTextbox.Name = "lanMacAddressTextbox"; - this.lanMacAddressTextbox.Size = new System.Drawing.Size(298, 23); - this.lanMacAddressTextbox.TabIndex = 44; - // - // label20 - // - this.label20.AutoSize = true; - this.label20.Location = new System.Drawing.Point(393, 188); - this.label20.Name = "label20"; - this.label20.Size = new System.Drawing.Size(104, 15); - this.label20.TabIndex = 45; - this.label20.Text = "LAN Mac Address:"; - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Location = new System.Drawing.Point(12, 132); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(821, 311); - this.tabControl1.TabIndex = 46; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.label5); - this.tabPage1.Controls.Add(this.label20); - this.tabPage1.Controls.Add(this.fileLocationBox); - this.tabPage1.Controls.Add(this.lanMacAddressTextbox); - this.tabPage1.Controls.Add(this.browseFileButton); - this.tabPage1.Controls.Add(this.wifiMacAddressTextbox); - this.tabPage1.Controls.Add(this.label6); - this.tabPage1.Controls.Add(this.label17); - this.tabPage1.Controls.Add(this.label7); - this.tabPage1.Controls.Add(this.moboSerialInfo); - this.tabPage1.Controls.Add(this.label9); - this.tabPage1.Controls.Add(this.label19); - this.tabPage1.Controls.Add(this.label10); - this.tabPage1.Controls.Add(this.LANMacAddressInfo); - this.tabPage1.Controls.Add(this.serialNumber); - this.tabPage1.Controls.Add(this.label18); - this.tabPage1.Controls.Add(this.modelInfo); - this.tabPage1.Controls.Add(this.macAddressInfo); - this.tabPage1.Controls.Add(this.fileSizeInfo); - this.tabPage1.Controls.Add(this.label16); - this.tabPage1.Controls.Add(this.label8); - this.tabPage1.Controls.Add(this.boardVariant); - this.tabPage1.Controls.Add(this.boardModelSelectionBox); - this.tabPage1.Controls.Add(this.label11); - this.tabPage1.Controls.Add(this.label14); - this.tabPage1.Controls.Add(this.convertToDigitalEditionButton); - this.tabPage1.Controls.Add(this.serialNumberTextbox); - this.tabPage1.Controls.Add(this.boardVariantSelectionBox); - this.tabPage1.Controls.Add(this.label13); - this.tabPage1.Controls.Add(this.label12); - this.tabPage1.Location = new System.Drawing.Point(4, 24); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(813, 283); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "NOR Modifier"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.label25); - this.tabPage2.Controls.Add(this.btnSendCommand); - this.tabPage2.Controls.Add(this.txtCustomCommand); - this.tabPage2.Controls.Add(this.label24); - this.tabPage2.Controls.Add(this.chkUseOffline); - this.tabPage2.Controls.Add(this.btnDownloadDatabase); - this.tabPage2.Controls.Add(this.btnRefreshPorts); - this.tabPage2.Controls.Add(this.button3); - this.tabPage2.Controls.Add(this.txtUARTOutput); - this.tabPage2.Controls.Add(this.label22); - this.tabPage2.Controls.Add(this.btnClearErrorCodes); - this.tabPage2.Controls.Add(this.label21); - this.tabPage2.Controls.Add(this.button1); - this.tabPage2.Controls.Add(this.comboComPorts); - this.tabPage2.Controls.Add(this.btnDisconnectCom); - this.tabPage2.Controls.Add(this.btnConnectCom); - this.tabPage2.Controls.Add(this.label3); - this.tabPage2.Location = new System.Drawing.Point(4, 24); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(813, 283); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "UART Communication"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // btnSendCommand - // - this.btnSendCommand.Location = new System.Drawing.Point(732, 125); - this.btnSendCommand.Name = "btnSendCommand"; - this.btnSendCommand.Size = new System.Drawing.Size(75, 23); - this.btnSendCommand.TabIndex = 16; - this.btnSendCommand.Text = "Send"; - this.btnSendCommand.UseVisualStyleBackColor = true; - this.btnSendCommand.Click += new System.EventHandler(this.btnSendCommand_Click); - // - // txtCustomCommand - // - this.txtCustomCommand.Location = new System.Drawing.Point(610, 96); - this.txtCustomCommand.Name = "txtCustomCommand"; - this.txtCustomCommand.Size = new System.Drawing.Size(197, 23); - this.txtCustomCommand.TabIndex = 15; - this.txtCustomCommand.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtCustomCommand_KeyPress); - // - // label24 - // - this.label24.AutoSize = true; - this.label24.Location = new System.Drawing.Point(610, 78); - this.label24.Name = "label24"; - this.label24.Size = new System.Drawing.Size(186, 15); - this.label24.TabIndex = 14; - this.label24.Text = "Send custom command via UART:"; - // - // chkUseOffline - // - this.chkUseOffline.AutoSize = true; - this.chkUseOffline.Location = new System.Drawing.Point(472, 47); - this.chkUseOffline.Name = "chkUseOffline"; - this.chkUseOffline.Size = new System.Drawing.Size(132, 19); - this.chkUseOffline.TabIndex = 13; - this.chkUseOffline.Text = "Use offline database"; - this.chkUseOffline.UseVisualStyleBackColor = true; - // - // btnDownloadDatabase - // - this.btnDownloadDatabase.Location = new System.Drawing.Point(310, 44); - this.btnDownloadDatabase.Name = "btnDownloadDatabase"; - this.btnDownloadDatabase.Size = new System.Drawing.Size(156, 23); - this.btnDownloadDatabase.TabIndex = 12; - this.btnDownloadDatabase.Text = "Download Error Database"; - this.btnDownloadDatabase.UseVisualStyleBackColor = true; - this.btnDownloadDatabase.Click += new System.EventHandler(this.btnDownloadDatabase_Click); - // - // btnRefreshPorts - // - this.btnRefreshPorts.Location = new System.Drawing.Point(515, 13); - this.btnRefreshPorts.Name = "btnRefreshPorts"; - this.btnRefreshPorts.Size = new System.Drawing.Size(89, 23); - this.btnRefreshPorts.TabIndex = 11; - this.btnRefreshPorts.Text = "Refresh Ports"; - this.btnRefreshPorts.UseVisualStyleBackColor = true; - this.btnRefreshPorts.Click += new System.EventHandler(this.btnRefreshPorts_Click); - // - // button3 - // - this.button3.Location = new System.Drawing.Point(448, 254); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(156, 23); - this.button3.TabIndex = 10; - this.button3.Text = "Clear Output Window"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // txtUARTOutput - // - this.txtUARTOutput.Location = new System.Drawing.Point(73, 78); - this.txtUARTOutput.Multiline = true; - this.txtUARTOutput.Name = "txtUARTOutput"; - this.txtUARTOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.txtUARTOutput.Size = new System.Drawing.Size(531, 170); - this.txtUARTOutput.TabIndex = 9; - // - // label22 - // - this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(6, 78); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(48, 15); - this.label22.TabIndex = 8; - this.label22.Text = "Output:"; - // - // btnClearErrorCodes - // - this.btnClearErrorCodes.Location = new System.Drawing.Point(186, 44); - this.btnClearErrorCodes.Name = "btnClearErrorCodes"; - this.btnClearErrorCodes.Size = new System.Drawing.Size(118, 23); - this.btnClearErrorCodes.TabIndex = 7; - this.btnClearErrorCodes.Text = "Clear Error Codes"; - this.btnClearErrorCodes.UseVisualStyleBackColor = true; - this.btnClearErrorCodes.Click += new System.EventHandler(this.btnClearErrorCodes_Click); - // - // label21 - // - this.label21.AutoSize = true; - this.label21.Location = new System.Drawing.Point(6, 48); - this.label21.Name = "label21"; - this.label21.Size = new System.Drawing.Size(52, 15); - this.label21.TabIndex = 6; - this.label21.Text = "Options:"; - // - // button1 - // - this.button1.Location = new System.Drawing.Point(73, 44); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(107, 23); - this.button1.TabIndex = 5; - this.button1.Text = "Get Error Codes"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // comboComPorts - // - this.comboComPorts.FormattingEnabled = true; - this.comboComPorts.Location = new System.Drawing.Point(73, 13); - this.comboComPorts.Name = "comboComPorts"; - this.comboComPorts.Size = new System.Drawing.Size(274, 23); - this.comboComPorts.TabIndex = 4; - // - // btnDisconnectCom - // - this.btnDisconnectCom.Location = new System.Drawing.Point(434, 13); - this.btnDisconnectCom.Name = "btnDisconnectCom"; - this.btnDisconnectCom.Size = new System.Drawing.Size(75, 23); - this.btnDisconnectCom.TabIndex = 3; - this.btnDisconnectCom.Text = "Disconnect"; - this.btnDisconnectCom.UseVisualStyleBackColor = true; - this.btnDisconnectCom.Click += new System.EventHandler(this.btnDisconnectCom_Click); - // - // btnConnectCom - // - this.btnConnectCom.Location = new System.Drawing.Point(353, 12); - this.btnConnectCom.Name = "btnConnectCom"; - this.btnConnectCom.Size = new System.Drawing.Size(75, 23); - this.btnConnectCom.TabIndex = 2; - this.btnConnectCom.Text = "Connect"; - this.btnConnectCom.UseVisualStyleBackColor = true; - this.btnConnectCom.Click += new System.EventHandler(this.btnConnectCom_Click); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(6, 16); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(61, 15); - this.label3.TabIndex = 0; - this.label3.Text = "Com Port:"; - // - // label23 - // - this.label23.AutoSize = true; - this.label23.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point); - this.label23.Location = new System.Drawing.Point(193, 48); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(215, 15); - this.label23.TabIndex = 47; - this.label23.Text = "and UART stuff too... BwE can SUCK IT!"; - // - // label25 - // - this.label25.AutoSize = true; - this.label25.Location = new System.Drawing.Point(610, 151); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(198, 105); - this.label25.TabIndex = 17; - this.label25.Text = resources.GetString("label25.Text"); - // - // Form1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(847, 557); - this.Controls.Add(this.label23); - this.Controls.Add(this.tabControl1); - this.Controls.Add(this.label15); - this.Controls.Add(this.statusStrip1); - this.Controls.Add(this.label4); - this.Controls.Add(this.pictureBox2); - this.Controls.Add(this.label2); - this.Controls.Add(this.pictureBox1); - this.Controls.Add(this.label1); - this.Margin = new System.Windows.Forms.Padding(2); - this.Name = "Form1"; - this.Text = "PS5 NOR Modifier"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); - this.Load += new System.EventHandler(this.Form1_Load); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); - this.statusStrip1.ResumeLayout(false); - this.statusStrip1.PerformLayout(); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage1.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private Label label1; - private PictureBox pictureBox1; - private Label label2; - private PictureBox pictureBox2; - private Label label4; - private Label label5; - private TextBox fileLocationBox; - private Button browseFileButton; - private Label label6; - private Label label7; - private Label label9; - private Label label10; - private Label serialNumber; - private Label modelInfo; - private Label fileSizeInfo; - private StatusStrip statusStrip1; - private ToolStripStatusLabel toolStripStatusLabel1; - private Label label8; - private Label boardVariant; - private Label label11; - private Button convertToDigitalEditionButton; - private ComboBox boardVariantSelectionBox; - private Label label12; - private Label label13; - private TextBox serialNumberTextbox; - private Label label14; - private ComboBox boardModelSelectionBox; - private Label label15; - private Label label16; - private Label macAddressInfo; - private Label LANMacAddressInfo; - private Label label18; - private Label moboSerialInfo; - private Label label19; - private Label label17; - private TextBox wifiMacAddressTextbox; - private TextBox lanMacAddressTextbox; - private Label label20; - private TabControl tabControl1; - private TabPage tabPage1; - private TabPage tabPage2; - private Button button3; - private TextBox txtUARTOutput; - private Label label22; - private Button btnClearErrorCodes; - private Label label21; - private Button button1; - private ComboBox comboComPorts; - private Button btnDisconnectCom; - private Button btnConnectCom; - private Label label3; - private Button btnRefreshPorts; - private Label label23; - private Button btnDownloadDatabase; - private CheckBox chkUseOffline; - private Button btnSendCommand; - private TextBox txtCustomCommand; - private Label label24; - private Label label25; - } +namespace PS5_NOR_Modifier +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label2 = new System.Windows.Forms.Label(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.fileLocationBox = new System.Windows.Forms.TextBox(); + this.browseFileButton = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.serialNumber = new System.Windows.Forms.Label(); + this.modelInfo = new System.Windows.Forms.Label(); + this.fileSizeInfo = new System.Windows.Forms.Label(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.label8 = new System.Windows.Forms.Label(); + this.boardVariant = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.convertToDigitalEditionButton = new System.Windows.Forms.Button(); + this.boardVariantSelectionBox = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.serialNumberTextbox = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.boardModelSelectionBox = new System.Windows.Forms.ComboBox(); + this.label15 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.macAddressInfo = new System.Windows.Forms.Label(); + this.LANMacAddressInfo = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.moboSerialInfo = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.wifiMacAddressTextbox = new System.Windows.Forms.TextBox(); + this.lanMacAddressTextbox = new System.Windows.Forms.TextBox(); + this.label20 = new System.Windows.Forms.Label(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.btnSendCommand = new System.Windows.Forms.Button(); + this.txtCustomCommand = new System.Windows.Forms.TextBox(); + this.label24 = new System.Windows.Forms.Label(); + this.chkUseOffline = new System.Windows.Forms.CheckBox(); + this.btnDownloadDatabase = new System.Windows.Forms.Button(); + this.btnRefreshPorts = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.txtUARTOutput = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); + this.btnClearErrorCodes = new System.Windows.Forms.Button(); + this.label21 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.comboComPorts = new System.Windows.Forms.ComboBox(); + this.btnDisconnectCom = new System.Windows.Forms.Button(); + this.btnConnectCom = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.statusStrip1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 84); + this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(768, 45); + this.label1.TabIndex = 0; + this.label1.Text = resources.GetString("label1.Text"); + this.label1.Click += new System.EventHandler(this.label1_Click); + // + // pictureBox1 + // + this.pictureBox1.Image = global::PS5_NOR_Modifier.Properties.Resources.PS5_Nor_Logo; + this.pictureBox1.Location = new System.Drawing.Point(8, 7); + this.pictureBox1.Margin = new System.Windows.Forms.Padding(2); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(117, 75); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Segoe UI", 22F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + this.label2.Location = new System.Drawing.Point(140, 7); + this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(277, 41); + this.label2.TabIndex = 2; + this.label2.Text = "PS5 NOR Modifier"; + // + // pictureBox2 + // + this.pictureBox2.Image = global::PS5_NOR_Modifier.Properties.Resources.Paypal_128; + this.pictureBox2.Location = new System.Drawing.Point(8, 459); + this.pictureBox2.Margin = new System.Windows.Forms.Padding(2); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(45, 38); + this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox2.TabIndex = 4; + this.pictureBox2.TabStop = false; + this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(65, 459); + this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(702, 30); + this.label4.TabIndex = 5; + this.label4.Text = resources.GetString("label4.Text"); + this.label4.Click += new System.EventHandler(this.label4_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 3); + this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(102, 15); + this.label5.TabIndex = 6; + this.label5.Text = "Select NOR Dump"; + // + // fileLocationBox + // + this.fileLocationBox.Location = new System.Drawing.Point(5, 20); + this.fileLocationBox.Margin = new System.Windows.Forms.Padding(2); + this.fileLocationBox.Name = "fileLocationBox"; + this.fileLocationBox.Size = new System.Drawing.Size(717, 23); + this.fileLocationBox.TabIndex = 7; + // + // browseFileButton + // + this.browseFileButton.Location = new System.Drawing.Point(727, 19); + this.browseFileButton.Margin = new System.Windows.Forms.Padding(2); + this.browseFileButton.Name = "browseFileButton"; + this.browseFileButton.Size = new System.Drawing.Size(78, 20); + this.browseFileButton.TabIndex = 8; + this.browseFileButton.Text = "Browse"; + this.browseFileButton.UseVisualStyleBackColor = true; + this.browseFileButton.Click += new System.EventHandler(this.browseFileButton_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + this.label6.Location = new System.Drawing.Point(5, 49); + this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(87, 15); + this.label6.TabIndex = 9; + this.label6.Text = "Dump Results:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(5, 72); + this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(85, 15); + this.label7.TabIndex = 10; + this.label7.Text = "Serial Number:"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(5, 159); + this.label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(66, 15); + this.label9.TabIndex = 12; + this.label9.Text = "PS5 Model:"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(5, 189); + this.label10.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(51, 15); + this.label10.TabIndex = 13; + this.label10.Text = "File Size:"; + // + // serialNumber + // + this.serialNumber.AutoSize = true; + this.serialNumber.Location = new System.Drawing.Point(124, 72); + this.serialNumber.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.serialNumber.Name = "serialNumber"; + this.serialNumber.Size = new System.Drawing.Size(16, 15); + this.serialNumber.TabIndex = 14; + this.serialNumber.Text = "..."; + // + // modelInfo + // + this.modelInfo.AutoSize = true; + this.modelInfo.Location = new System.Drawing.Point(124, 159); + this.modelInfo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.modelInfo.Name = "modelInfo"; + this.modelInfo.Size = new System.Drawing.Size(16, 15); + this.modelInfo.TabIndex = 16; + this.modelInfo.Text = "..."; + // + // fileSizeInfo + // + this.fileSizeInfo.AutoSize = true; + this.fileSizeInfo.Location = new System.Drawing.Point(124, 189); + this.fileSizeInfo.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.fileSizeInfo.Name = "fileSizeInfo"; + this.fileSizeInfo.Size = new System.Drawing.Size(16, 15); + this.fileSizeInfo.TabIndex = 17; + this.fileSizeInfo.Text = "..."; + // + // statusStrip1 + // + this.statusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1}); + this.statusStrip1.Location = new System.Drawing.Point(0, 535); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 10, 0); + this.statusStrip1.Size = new System.Drawing.Size(847, 22); + this.statusStrip1.TabIndex = 18; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(135, 17); + this.toolStripStatusLabel1.Text = "Status: Waiting for input"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(5, 130); + this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(80, 15); + this.label8.TabIndex = 20; + this.label8.Text = "Board Variant:"; + // + // boardVariant + // + this.boardVariant.AutoSize = true; + this.boardVariant.Location = new System.Drawing.Point(124, 130); + this.boardVariant.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.boardVariant.Name = "boardVariant"; + this.boardVariant.Size = new System.Drawing.Size(16, 15); + this.boardVariant.TabIndex = 21; + this.boardVariant.Text = "..."; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + this.label11.Location = new System.Drawing.Point(393, 49); + this.label11.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(84, 15); + this.label11.TabIndex = 22; + this.label11.Text = "Modify Values"; + // + // convertToDigitalEditionButton + // + this.convertToDigitalEditionButton.Location = new System.Drawing.Point(655, 221); + this.convertToDigitalEditionButton.Margin = new System.Windows.Forms.Padding(2); + this.convertToDigitalEditionButton.Name = "convertToDigitalEditionButton"; + this.convertToDigitalEditionButton.Size = new System.Drawing.Size(150, 46); + this.convertToDigitalEditionButton.TabIndex = 23; + this.convertToDigitalEditionButton.Text = "Save New\r\nBIOS Information"; + this.convertToDigitalEditionButton.UseVisualStyleBackColor = true; + this.convertToDigitalEditionButton.Click += new System.EventHandler(this.convertToDigitalEditionButton_Click); + // + // boardVariantSelectionBox + // + this.boardVariantSelectionBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.boardVariantSelectionBox.FormattingEnabled = true; + this.boardVariantSelectionBox.Items.AddRange(new object[] { + "CFI-1000A", + "CFI-1000A01", + "CFI-1000B", + "CFI-1002A", + "CFI-1008A", + "CFI-1014A", + "CFI-1015A", + "CFI-1015B", + "CFI-1016A", + "CFI-1018A", + "CFI-1100A01", + "CFI-1102A", + "CFI-1108A", + "CFI-1109A", + "CFI-1114A", + "CFI-1115A", + "CFI-1116A", + "CFI-1118A", + "CFI-1208A", + "CFI-1215A", + "CFI-1216A", + "DFI-T1000AA", + "DFI-D1000AA"}); + this.boardVariantSelectionBox.Location = new System.Drawing.Point(507, 98); + this.boardVariantSelectionBox.Margin = new System.Windows.Forms.Padding(2); + this.boardVariantSelectionBox.Name = "boardVariantSelectionBox"; + this.boardVariantSelectionBox.Size = new System.Drawing.Size(298, 23); + this.boardVariantSelectionBox.TabIndex = 29; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(393, 72); + this.label12.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(85, 15); + this.label12.TabIndex = 30; + this.label12.Text = "Serial Number:"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(393, 100); + this.label13.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(80, 15); + this.label13.TabIndex = 31; + this.label13.Text = "Board Variant:"; + // + // serialNumberTextbox + // + this.serialNumberTextbox.Location = new System.Drawing.Point(507, 70); + this.serialNumberTextbox.Margin = new System.Windows.Forms.Padding(2); + this.serialNumberTextbox.Name = "serialNumberTextbox"; + this.serialNumberTextbox.Size = new System.Drawing.Size(298, 23); + this.serialNumberTextbox.TabIndex = 32; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(393, 129); + this.label14.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(66, 15); + this.label14.TabIndex = 33; + this.label14.Text = "PS5 Model:"; + // + // boardModelSelectionBox + // + this.boardModelSelectionBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.boardModelSelectionBox.FormattingEnabled = true; + this.boardModelSelectionBox.Items.AddRange(new object[] { + "Digital Edition", + "Disc Edition"}); + this.boardModelSelectionBox.Location = new System.Drawing.Point(507, 127); + this.boardModelSelectionBox.Margin = new System.Windows.Forms.Padding(2); + this.boardModelSelectionBox.Name = "boardModelSelectionBox"; + this.boardModelSelectionBox.Size = new System.Drawing.Size(298, 23); + this.boardModelSelectionBox.TabIndex = 34; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + this.label15.Location = new System.Drawing.Point(65, 495); + this.label15.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(387, 21); + this.label15.TabIndex = 35; + this.label15.Text = "This project is sponsored by www.consolefix.shop"; + this.label15.Click += new System.EventHandler(this.label15_Click); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(5, 221); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(104, 15); + this.label16.TabIndex = 36; + this.label16.Text = "WiFi Mac Address:"; + // + // macAddressInfo + // + this.macAddressInfo.AutoSize = true; + this.macAddressInfo.Location = new System.Drawing.Point(124, 221); + this.macAddressInfo.Name = "macAddressInfo"; + this.macAddressInfo.Size = new System.Drawing.Size(16, 15); + this.macAddressInfo.TabIndex = 37; + this.macAddressInfo.Text = "..."; + // + // LANMacAddressInfo + // + this.LANMacAddressInfo.AutoSize = true; + this.LANMacAddressInfo.Location = new System.Drawing.Point(124, 252); + this.LANMacAddressInfo.Name = "LANMacAddressInfo"; + this.LANMacAddressInfo.Size = new System.Drawing.Size(16, 15); + this.LANMacAddressInfo.TabIndex = 39; + this.LANMacAddressInfo.Text = "..."; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(5, 252); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(104, 15); + this.label18.TabIndex = 38; + this.label18.Text = "LAN Mac Address:"; + // + // moboSerialInfo + // + this.moboSerialInfo.AutoSize = true; + this.moboSerialInfo.Location = new System.Drawing.Point(124, 101); + this.moboSerialInfo.Name = "moboSerialInfo"; + this.moboSerialInfo.Size = new System.Drawing.Size(16, 15); + this.moboSerialInfo.TabIndex = 41; + this.moboSerialInfo.Text = "..."; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(5, 101); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(111, 15); + this.label19.TabIndex = 40; + this.label19.Text = "Motherboard Serial:"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(393, 159); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(108, 15); + this.label17.TabIndex = 42; + this.label17.Text = "WiFi MAC Address:"; + // + // wifiMacAddressTextbox + // + this.wifiMacAddressTextbox.Enabled = false; + this.wifiMacAddressTextbox.Location = new System.Drawing.Point(507, 156); + this.wifiMacAddressTextbox.Name = "wifiMacAddressTextbox"; + this.wifiMacAddressTextbox.Size = new System.Drawing.Size(298, 23); + this.wifiMacAddressTextbox.TabIndex = 43; + // + // lanMacAddressTextbox + // + this.lanMacAddressTextbox.Enabled = false; + this.lanMacAddressTextbox.Location = new System.Drawing.Point(507, 185); + this.lanMacAddressTextbox.Name = "lanMacAddressTextbox"; + this.lanMacAddressTextbox.Size = new System.Drawing.Size(298, 23); + this.lanMacAddressTextbox.TabIndex = 44; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(393, 188); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(104, 15); + this.label20.TabIndex = 45; + this.label20.Text = "LAN Mac Address:"; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Location = new System.Drawing.Point(12, 132); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(821, 311); + this.tabControl1.TabIndex = 46; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.label5); + this.tabPage1.Controls.Add(this.label20); + this.tabPage1.Controls.Add(this.fileLocationBox); + this.tabPage1.Controls.Add(this.lanMacAddressTextbox); + this.tabPage1.Controls.Add(this.browseFileButton); + this.tabPage1.Controls.Add(this.wifiMacAddressTextbox); + this.tabPage1.Controls.Add(this.label6); + this.tabPage1.Controls.Add(this.label17); + this.tabPage1.Controls.Add(this.label7); + this.tabPage1.Controls.Add(this.moboSerialInfo); + this.tabPage1.Controls.Add(this.label9); + this.tabPage1.Controls.Add(this.label19); + this.tabPage1.Controls.Add(this.label10); + this.tabPage1.Controls.Add(this.LANMacAddressInfo); + this.tabPage1.Controls.Add(this.serialNumber); + this.tabPage1.Controls.Add(this.label18); + this.tabPage1.Controls.Add(this.modelInfo); + this.tabPage1.Controls.Add(this.macAddressInfo); + this.tabPage1.Controls.Add(this.fileSizeInfo); + this.tabPage1.Controls.Add(this.label16); + this.tabPage1.Controls.Add(this.label8); + this.tabPage1.Controls.Add(this.boardVariant); + this.tabPage1.Controls.Add(this.boardModelSelectionBox); + this.tabPage1.Controls.Add(this.label11); + this.tabPage1.Controls.Add(this.label14); + this.tabPage1.Controls.Add(this.convertToDigitalEditionButton); + this.tabPage1.Controls.Add(this.serialNumberTextbox); + this.tabPage1.Controls.Add(this.boardVariantSelectionBox); + this.tabPage1.Controls.Add(this.label13); + this.tabPage1.Controls.Add(this.label12); + this.tabPage1.Location = new System.Drawing.Point(4, 24); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(813, 283); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "NOR Modifier"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.label25); + this.tabPage2.Controls.Add(this.btnSendCommand); + this.tabPage2.Controls.Add(this.txtCustomCommand); + this.tabPage2.Controls.Add(this.label24); + this.tabPage2.Controls.Add(this.chkUseOffline); + this.tabPage2.Controls.Add(this.btnDownloadDatabase); + this.tabPage2.Controls.Add(this.btnRefreshPorts); + this.tabPage2.Controls.Add(this.button3); + this.tabPage2.Controls.Add(this.txtUARTOutput); + this.tabPage2.Controls.Add(this.label22); + this.tabPage2.Controls.Add(this.btnClearErrorCodes); + this.tabPage2.Controls.Add(this.label21); + this.tabPage2.Controls.Add(this.button1); + this.tabPage2.Controls.Add(this.comboComPorts); + this.tabPage2.Controls.Add(this.btnDisconnectCom); + this.tabPage2.Controls.Add(this.btnConnectCom); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Location = new System.Drawing.Point(4, 24); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(813, 283); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "UART Communication"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // btnSendCommand + // + this.btnSendCommand.Location = new System.Drawing.Point(732, 125); + this.btnSendCommand.Name = "btnSendCommand"; + this.btnSendCommand.Size = new System.Drawing.Size(75, 23); + this.btnSendCommand.TabIndex = 16; + this.btnSendCommand.Text = "Send"; + this.btnSendCommand.UseVisualStyleBackColor = true; + this.btnSendCommand.Click += new System.EventHandler(this.btnSendCommand_Click); + // + // txtCustomCommand + // + this.txtCustomCommand.Location = new System.Drawing.Point(610, 96); + this.txtCustomCommand.Name = "txtCustomCommand"; + this.txtCustomCommand.Size = new System.Drawing.Size(197, 23); + this.txtCustomCommand.TabIndex = 15; + this.txtCustomCommand.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtCustomCommand_KeyPress); + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(610, 78); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(186, 15); + this.label24.TabIndex = 14; + this.label24.Text = "Send custom command via UART:"; + // + // chkUseOffline + // + this.chkUseOffline.AutoSize = true; + this.chkUseOffline.Location = new System.Drawing.Point(472, 47); + this.chkUseOffline.Name = "chkUseOffline"; + this.chkUseOffline.Size = new System.Drawing.Size(132, 19); + this.chkUseOffline.TabIndex = 13; + this.chkUseOffline.Text = "Use offline database"; + this.chkUseOffline.UseVisualStyleBackColor = true; + // + // btnDownloadDatabase + // + this.btnDownloadDatabase.Location = new System.Drawing.Point(310, 44); + this.btnDownloadDatabase.Name = "btnDownloadDatabase"; + this.btnDownloadDatabase.Size = new System.Drawing.Size(156, 23); + this.btnDownloadDatabase.TabIndex = 12; + this.btnDownloadDatabase.Text = "Download Error Database"; + this.btnDownloadDatabase.UseVisualStyleBackColor = true; + this.btnDownloadDatabase.Click += new System.EventHandler(this.btnDownloadDatabase_Click); + // + // btnRefreshPorts + // + this.btnRefreshPorts.Location = new System.Drawing.Point(515, 13); + this.btnRefreshPorts.Name = "btnRefreshPorts"; + this.btnRefreshPorts.Size = new System.Drawing.Size(89, 23); + this.btnRefreshPorts.TabIndex = 11; + this.btnRefreshPorts.Text = "Refresh Ports"; + this.btnRefreshPorts.UseVisualStyleBackColor = true; + this.btnRefreshPorts.Click += new System.EventHandler(this.btnRefreshPorts_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(448, 254); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(156, 23); + this.button3.TabIndex = 10; + this.button3.Text = "Clear Output Window"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // txtUARTOutput + // + this.txtUARTOutput.Location = new System.Drawing.Point(73, 78); + this.txtUARTOutput.Multiline = true; + this.txtUARTOutput.Name = "txtUARTOutput"; + this.txtUARTOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.txtUARTOutput.Size = new System.Drawing.Size(531, 170); + this.txtUARTOutput.TabIndex = 9; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(6, 78); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(48, 15); + this.label22.TabIndex = 8; + this.label22.Text = "Output:"; + // + // btnClearErrorCodes + // + this.btnClearErrorCodes.Location = new System.Drawing.Point(186, 44); + this.btnClearErrorCodes.Name = "btnClearErrorCodes"; + this.btnClearErrorCodes.Size = new System.Drawing.Size(118, 23); + this.btnClearErrorCodes.TabIndex = 7; + this.btnClearErrorCodes.Text = "Clear Error Codes"; + this.btnClearErrorCodes.UseVisualStyleBackColor = true; + this.btnClearErrorCodes.Click += new System.EventHandler(this.btnClearErrorCodes_Click); + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(6, 48); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(52, 15); + this.label21.TabIndex = 6; + this.label21.Text = "Options:"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(73, 44); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(107, 23); + this.button1.TabIndex = 5; + this.button1.Text = "Get Error Codes"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // comboComPorts + // + this.comboComPorts.FormattingEnabled = true; + this.comboComPorts.Location = new System.Drawing.Point(73, 13); + this.comboComPorts.Name = "comboComPorts"; + this.comboComPorts.Size = new System.Drawing.Size(274, 23); + this.comboComPorts.TabIndex = 4; + // + // btnDisconnectCom + // + this.btnDisconnectCom.Location = new System.Drawing.Point(434, 13); + this.btnDisconnectCom.Name = "btnDisconnectCom"; + this.btnDisconnectCom.Size = new System.Drawing.Size(75, 23); + this.btnDisconnectCom.TabIndex = 3; + this.btnDisconnectCom.Text = "Disconnect"; + this.btnDisconnectCom.UseVisualStyleBackColor = true; + this.btnDisconnectCom.Click += new System.EventHandler(this.btnDisconnectCom_Click); + // + // btnConnectCom + // + this.btnConnectCom.Location = new System.Drawing.Point(353, 12); + this.btnConnectCom.Name = "btnConnectCom"; + this.btnConnectCom.Size = new System.Drawing.Size(75, 23); + this.btnConnectCom.TabIndex = 2; + this.btnConnectCom.Text = "Connect"; + this.btnConnectCom.UseVisualStyleBackColor = true; + this.btnConnectCom.Click += new System.EventHandler(this.btnConnectCom_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 16); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(61, 15); + this.label3.TabIndex = 0; + this.label3.Text = "Com Port:"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point); + this.label23.Location = new System.Drawing.Point(193, 48); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(215, 15); + this.label23.TabIndex = 47; + this.label23.Text = "and UART stuff too... BwE can SUCK IT!"; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(610, 151); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(198, 105); + this.label25.TabIndex = 17; + this.label25.Text = resources.GetString("label25.Text"); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(847, 557); + this.Controls.Add(this.label23); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.label15); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.label4); + this.Controls.Add(this.pictureBox2); + this.Controls.Add(this.label2); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label1); + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "Form1"; + this.Text = "PS5 NOR Modifier"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Label label1; + private PictureBox pictureBox1; + private Label label2; + private PictureBox pictureBox2; + private Label label4; + private Label label5; + private TextBox fileLocationBox; + private Button browseFileButton; + private Label label6; + private Label label7; + private Label label9; + private Label label10; + private Label serialNumber; + private Label modelInfo; + private Label fileSizeInfo; + private StatusStrip statusStrip1; + private ToolStripStatusLabel toolStripStatusLabel1; + private Label label8; + private Label boardVariant; + private Label label11; + private Button convertToDigitalEditionButton; + private ComboBox boardVariantSelectionBox; + private Label label12; + private Label label13; + private TextBox serialNumberTextbox; + private Label label14; + private ComboBox boardModelSelectionBox; + private Label label15; + private Label label16; + private Label macAddressInfo; + private Label LANMacAddressInfo; + private Label label18; + private Label moboSerialInfo; + private Label label19; + private Label label17; + private TextBox wifiMacAddressTextbox; + private TextBox lanMacAddressTextbox; + private Label label20; + private TabControl tabControl1; + private TabPage tabPage1; + private TabPage tabPage2; + private Button button3; + private TextBox txtUARTOutput; + private Label label22; + private Button btnClearErrorCodes; + private Label label21; + private Button button1; + private ComboBox comboComPorts; + private Button btnDisconnectCom; + private Button btnConnectCom; + private Label label3; + private Button btnRefreshPorts; + private Label label23; + private Button btnDownloadDatabase; + private CheckBox chkUseOffline; + private Button btnSendCommand; + private TextBox txtCustomCommand; + private Label label24; + private Label label25; + } } \ No newline at end of file diff --git a/PS5 NOR Modifier/Form1.cs b/PS5 NOR Modifier/Form1.cs index 8f6dec8..43aefa1 100644 --- a/PS5 NOR Modifier/Form1.cs +++ b/PS5 NOR Modifier/Form1.cs @@ -1,1159 +1,1159 @@ -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Runtime.InteropServices; -using System.Text; -using System.Text.RegularExpressions; -using System.Windows.Forms; -using System.IO.Ports; -using System; -using System.Threading; -using System.Collections.Generic; -using static System.Windows.Forms.LinkLabel; -using static System.Windows.Forms.VisualStyles.VisualStyleElement; -using System.Net; -using System.Xml; -using System.Security.Policy; - -namespace PS5_NOR_Modifier -{ - public partial class Form1 : Form - { - - public Form1() - { - InitializeComponent(); - } - - static string CalculateChecksum(string str) - { - int sum = 0; - foreach (char c in str) - { - sum += (int)c; - } - return str + ":" + (sum & 0xFF).ToString("X2"); - } - - private void throwError(string errmsg) - { - MessageBox.Show(errmsg, "An Error Has Occurred", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - - // We want this app to work offline, so let's declare where the local "offline" database will be stored - string localDatabaseFile = "errorDB.xml"; - - static SerialPort UARTSerial = new SerialPort(); - - /// - /// With thanks to @jjxtra on Github. The code has already been created and there's no need to reinvent the wheel is there? - /// - #region Hex Code - - private static IEnumerable PatternAt(byte[] source, byte[] pattern) - { - for (int i = 0; i < source.Length; i++) - { - if (source.Skip(i).Take(pattern.Length).SequenceEqual(pattern)) - { - yield return i; - } - } - } - - private static byte[] ConvertHexStringToByteArray(string hexString) - { - if (hexString.Length % 2 != 0) - { - throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString)); - } - - byte[] data = new byte[hexString.Length / 2]; - for (int index = 0; index < data.Length; index++) - { - string byteValue = hexString.Substring(index * 2, 2); - data[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture); - } - - return data; - } - - #endregion - - private void Form1_Load(object sender, EventArgs e) - { - // Upon first launch, we need to get a list of COM ports available for UART - string[] ports = SerialPort.GetPortNames(); - comboComPorts.Items.Clear(); - comboComPorts.Items.AddRange(ports); - comboComPorts.SelectedIndex = 0; - btnConnectCom.Enabled = true; - btnDisconnectCom.Enabled = false; - } - - // Declare offsets to detect console version - long offsetOne = 0x1c7010; - long offsetTwo = 0x1c7030; - long WiFiMacOffset = 0x1C73C0; - string? WiFiMacValue = null; - long LANMacOffset = 0x1C4020; - string? LANMacValue = null; - string? offsetOneValue = null; - string? offsetTwoValue = null; - long serialOffset = 0x1c7210; - string? serialValue = null; - long variantOffset = 0x1c7226; - string? variantValue = null; - long moboSerialOffset = 0x1C7200; - string? moboSerialValue = null; - - private async Task DownloadDatabaseAsync() - { - // Define the URL - string url = "http://uartcodes.com/xml.php"; // Update with your URL - - // Define the file path to save the XML - - try - { - // Create a WebClient instance - using (HttpClient client = new()) - { - // Download the XML data from the URL - string xmlData = await client.GetStringAsync(url); - - // Create an XmlDocument instance and load the XML data - XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.LoadXml(xmlData); - - // Save the XML data to a file - xmlDoc.Save(localDatabaseFile); - - MessageBox.Show("The most recent offline database has been updated successfully.", "Offline Database Updated!", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - catch (Exception ex) - { - Console.WriteLine("Error: " + ex.Message); - } - } - - /// - /// We need to be able to send the error code we received from the console and fetch an XML result back from the server - /// Once we have a result from the server, parse the XML data and output it in an easy to understand format for the user - /// - /// - /// - async Task ParseErrorsAsync(string ErrorCode) - { - // If the user has opted to parse errors with an offline database, run the parse offline function - if (chkUseOffline.Checked == true) - { - return ParseErrorsOffline(ErrorCode); - } - else - { - // The user wants to use the online version. Proceed at will - - // Define the URL with the error code parameter - string url = "http://uartcodes.com/xml.php?errorCode=" + ErrorCode; - - string results = ""; - - try - { - string response = ""; - // Create a WebClient instance to send the request - using (HttpClient client = new()) - { - // Send the request and retrieve the response as a string - response = await client.GetStringAsync(url); - } - // Load the XML response into an XmlDocument - XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.LoadXml(response); - - - // Get the root node - XmlNode? root = xmlDoc.DocumentElement; - if (root is null) { - throw new Exception("Error reading the file"); - } - - // Check if the root node is - if (root.Name == "errorCodes") - { - // Loop through each errorCode node - foreach (XmlNode errorCodeNode in root.ChildNodes) - { - // Check if the node is - if (errorCodeNode.Name == "errorCode") - { - // Get ErrorCode and Description - string errorCode = errorCodeNode.SelectSingleNode("ErrorCode")?.InnerText ?? ""; - string description = errorCodeNode.SelectSingleNode("Description")?.InnerText??""; - - // Output the results - results = "Error code: " - + errorCode - + Environment.NewLine - + "Description: " - + description; - } - } - } - else - { - results = "Error code: " - + ErrorCode - + Environment.NewLine - + "An error occurred while fetching a result for this error. Please try again!"; - } - } - catch (Exception ex) - { - results = "Error code: " - + ErrorCode - + Environment.NewLine - + ex.Message; - } - return results; - } - } - - string ParseErrorsOffline(string errorCode) - { - string results = ""; - - try - { - // Check if the XML file exists - if (File.Exists(localDatabaseFile)) - { - // Load the XML file - XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.Load(localDatabaseFile); - - // Get the root node - XmlNode? root = xmlDoc.DocumentElement; - if (root is null) return results; - - // Check if the root node is - if (root.Name == "errorCodes") - { - // Loop through each errorCode node - foreach (XmlNode errorCodeNode in root.ChildNodes) - { - // Check if the node is - if (errorCodeNode.Name == "errorCode") - { - // Get ErrorCode and Description - string errorCodeValue = errorCodeNode.SelectSingleNode("ErrorCode")?.InnerText??""; - string description = errorCodeNode.SelectSingleNode("Description")?.InnerText??""; - - // Check if the current error code matches the requested error code - if (errorCodeValue == errorCode) - { - // Output the results - results = "Error code: " + errorCodeValue + Environment.NewLine + "Description: " + description; - break; // Exit the loop after finding the matching error code - } - } - } - } - else - { - results = "Error: Invalid XML database file. Please reconfigure the application, redownload the offline database, or uncheck the option to use the offline database."; - } - } - else - { - results = "Error: Local XML file not found."; - } - } - catch (Exception ex) - { - results = "Error: " + ex.Message; - } - - return results; - } - - string HexStringToString(string hexString) - { - if (hexString == null || (hexString.Length & 1) == 1) - { - throw new ArgumentException(); - } - var sb = new StringBuilder(); - for (var i = 0; i < hexString.Length; i += 2) - { - var hexChar = hexString.Substring(i, 2); - sb.Append((char)Convert.ToByte(hexChar, 16)); - } - return sb.ToString(); - } - - /// - /// Lauinches a URL in a new window using the default browser... - /// - /// The URL you want to launch - private void OpenUrl(string url) - { - try - { - Process.Start(url); - } - catch - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - url = url.Replace("&", "^&"); - Process.Start(new ProcessStartInfo(url) { UseShellExecute = true }); - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - Process.Start("xdg-open", url); - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - Process.Start("open", url); - } - else - { - throw; - } - } - } - - private void ResetAppFields() - { - fileLocationBox.Text = ""; - serialNumber.Text = "..."; - boardVariant.Text = "..."; - modelInfo.Text = "..."; - fileSizeInfo.Text = "..."; - serialNumberTextbox.Text = ""; - toolStripStatusLabel1.Text = "Status: Waiting for input"; - } - - #region Donations - - /// - /// If you modify this app, please leave my credits in, otherwise a little kitten will cry! - /// - /// - /// - private void label4_Click(object sender, EventArgs e) - { - OpenUrl("https://www.streamelements.com/thecod3r/tip"); - } - - private void pictureBox2_Click(object sender, EventArgs e) - { - OpenUrl("https://www.streamelements.com/thecod3r/tip"); - } - - - #endregion - - private void browseFileButton_Click(object sender, EventArgs e) - { - OpenFileDialog fileDialogBox = new OpenFileDialog(); - fileDialogBox.Title = "Open NOR BIN File"; - fileDialogBox.Filter = "PS5 BIN Files|*.bin"; - - if (fileDialogBox.ShowDialog() == DialogResult.OK) - { - if(fileDialogBox.CheckFileExists == false) - { - throwError("The file you selected could not be found. Please check the file exists and is a valid BIN file."); - } - else - { - if(!fileDialogBox.SafeFileName.EndsWith(".bin")) - { - throwError("The file you selected is not a valid. Please ensure the file you are choosing is a correct BIN file and try again."); - } - else - { - // Let's load simple information first, before loading BIN specific data - fileLocationBox.Text = ""; - // Get the path selected and print it into the path box - string selectedPath = fileDialogBox.FileName; - toolStripStatusLabel1.Text = "Status: Selected file " + selectedPath; - fileLocationBox.Text = selectedPath; - - // Get file length and show in bytes and MB - long length = new System.IO.FileInfo(selectedPath).Length; - fileSizeInfo.Text = length.ToString() + " bytes (" + length / 1024 / 1024 + "MB)"; - - #region Extract PS5 Version - - try - { - BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = offsetOne; - //Read the offset - offsetOneValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - offsetOneValue = null; - } - - try - { - BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = offsetOne; - //Read the offset - offsetTwoValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - offsetTwoValue = null; - } - - - if(offsetOneValue?.Contains("22020101")??false) - { - modelInfo.Text = "Disc Edition"; - } - else - { - if(offsetTwoValue?.Contains("22030101") ?? false) - { - modelInfo.Text = "Digital Edition"; - } - else - { - modelInfo.Text = "Unknown"; - } - } - - #endregion - - #region Extract Motherboard Serial Number - - try - { - BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = moboSerialOffset; - //Read the offset - moboSerialValue = BitConverter.ToString(reader.ReadBytes(16)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - moboSerialValue = null; - } - - - - if(moboSerialValue != null) - { - moboSerialInfo.Text = HexStringToString(moboSerialValue); - } - else - { - moboSerialInfo.Text = "Unknown"; - } - - #endregion - - #region Extract Board Serial Number - - try - { - BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = serialOffset; - //Read the offset - serialValue = BitConverter.ToString(reader.ReadBytes(17)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - serialValue = null; - } - - - - if (serialValue != null) - { - serialNumber.Text = HexStringToString(serialValue); - serialNumberTextbox.Text = HexStringToString(serialValue); - - } - else - { - serialNumber.Text = "Unknown"; - } - - #endregion - - #region Extract WiFi Mac Address - - try - { - BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = WiFiMacOffset; - //Read the offset - WiFiMacValue = BitConverter.ToString(reader.ReadBytes(6)); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - WiFiMacValue = null; - } - - if (WiFiMacValue != null) - { - macAddressInfo.Text = WiFiMacValue; - wifiMacAddressTextbox.Text = WiFiMacValue; - } - else - { - macAddressInfo.Text = "Unknown"; - wifiMacAddressTextbox.Text = ""; - } - - #endregion - - #region Extract LAN Mac Address - - try - { - BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = LANMacOffset; - //Read the offset - LANMacValue = BitConverter.ToString(reader.ReadBytes(6)); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - LANMacValue = null; - } - - if (LANMacValue != null) - { - LANMacAddressInfo.Text = LANMacValue; - lanMacAddressTextbox.Text = LANMacValue; - } - else - { - LANMacAddressInfo.Text = "Unknown"; - lanMacAddressTextbox.Text = ""; - } - - #endregion - - #region Extract Board Variant - - try - { - BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = variantOffset; - //Read the offset - variantValue = BitConverter.ToString(reader.ReadBytes(19)).Replace("-", null).Replace("FF", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - variantValue = null; - } - - - - if (variantValue != null) - { - boardVariant.Text = HexStringToString(variantValue); - } - else - { - boardVariant.Text = "Unknown"; - } - - boardVariant.Text += boardVariant.Text switch { - _ when boardVariant.Text.EndsWith("00A") || boardVariant.Text.EndsWith("00B") => " - Japan", - _ when boardVariant.Text.EndsWith("01A") || boardVariant.Text.EndsWith("01B") || - boardVariant.Text.EndsWith("15A") || boardVariant.Text.EndsWith("15B") => " - US, Canada, (North America)", - _ when boardVariant.Text.EndsWith("02A") || boardVariant.Text.EndsWith("02B") => " - Australia / New Zealand, (Oceania)", - _ when boardVariant.Text.EndsWith("03A") || boardVariant.Text.EndsWith("03B") => " - United Kingdom / Ireland", - _ when boardVariant.Text.EndsWith("04A") || boardVariant.Text.EndsWith("04B") => " - Europe / Middle East / Africa", - _ when boardVariant.Text.EndsWith("05A") || boardVariant.Text.EndsWith("05B") => " - South Korea", - _ when boardVariant.Text.EndsWith("06A") || boardVariant.Text.EndsWith("06B") => " - Southeast Asia / Hong Kong", - _ when boardVariant.Text.EndsWith("07A") || boardVariant.Text.EndsWith("07B") => " - Taiwan", - _ when boardVariant.Text.EndsWith("08A") || boardVariant.Text.EndsWith("08B") => " - Russia, Ukraine, India, Central Asia", - _ when boardVariant.Text.EndsWith("09A") || boardVariant.Text.EndsWith("09B") => " - Mainland China", - _ when boardVariant.Text.EndsWith("11A") || boardVariant.Text.EndsWith("11B") || - boardVariant.Text.EndsWith("14A") || boardVariant.Text.EndsWith("14B") - => " - Mexico, Central America, South America", - _ when boardVariant.Text.EndsWith("16A") || boardVariant.Text.EndsWith("16B") => " - Europe / Middle East / Africa", - _ when boardVariant.Text.EndsWith("18A") || boardVariant.Text.EndsWith("18B") => " - Singapore, Korea, Asia", - _=> " - Unknown Region" - }; - #endregion - } - } - } - } - - private void convertToDigitalEditionButton_Click(object sender, EventArgs e) - { - - string fileNameToLookFor = ""; - bool errorShownAlready = false; - - if (modelInfo.Text == "" || modelInfo.Text == "...") - { - // No valid BIN file seems to have been selected - throwError("Please select a valid BIOS file first..."); - errorShownAlready = true; - } - else - { - if(boardModelSelectionBox.Text == "") - { - throwError("Please select a valid board model before saving new BIOS information!"); - errorShownAlready = true; - } - else - { - if(boardVariantSelectionBox.Text == "") - { - throwError("Please select a valid board variant before saving new BIOS information!"); - errorShownAlready = true; - } - else - { - SaveFileDialog saveBox = new SaveFileDialog(); - saveBox.Title = "Save NOR BIN File"; - saveBox.Filter = "PS5 BIN Files|*.bin"; - - if (saveBox.ShowDialog() == DialogResult.OK) - { - // First create a copy of the old BIOS file - byte[] existingFile = File.ReadAllBytes(fileLocationBox.Text); - string newFile = saveBox.FileName; - - File.WriteAllBytes(newFile, existingFile); - - fileNameToLookFor = saveBox.FileName; - - #region Set the new model info - if (modelInfo.Text == "Disc Edition") - { - try - { - - if (boardModelSelectionBox.Text == "Digital Edition") - - { - - byte[] find = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); - if (find.Length != replace.Length) - { - throwError("The length of the old hex value does not match the length of the new hex value!"); - errorShownAlready = true; - } - byte[] bytes = File.ReadAllBytes(newFile); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(newFile, bytes); - } - } - - } - catch - { - throwError("An error occurred while saving your BIOS file"); - errorShownAlready = true; - } - } - else - { - if(modelInfo.Text == "Digital Edition") - { - try - { - - if (boardModelSelectionBox.Text == "Disc Edition") - - { - - byte[] find = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); - if (find.Length != replace.Length) - { - throwError("The length of the old hex value does not match the length of the new hex value!"); - errorShownAlready = true; - } - byte[] bytes = File.ReadAllBytes(newFile); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(newFile, bytes); - } - } - - } - catch - { - throwError("An error occurred while saving your BIOS file"); - errorShownAlready = true; - } - } - } - #endregion - - #region Set the new board variant - - try - { - byte[] oldVariant = Encoding.UTF8.GetBytes(boardVariant.Text); - string oldVariantHex = Convert.ToHexString(oldVariant); - - byte[] newVariantSelection = Encoding.UTF8.GetBytes(boardVariantSelectionBox.Text); - string newVariantHex = Convert.ToHexString(newVariantSelection); - - byte[] find = ConvertHexStringToByteArray(Regex.Replace(oldVariantHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace(newVariantHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - - byte[] bytes = File.ReadAllBytes(newFile); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(newFile, bytes); - } - - } - catch(System.ArgumentException ex) - { - throwError(ex.Message.ToString()); - errorShownAlready = true; - } - - #endregion - - #region Change Serial Number - - try - { - - byte[] oldSerial = Encoding.UTF8.GetBytes(serialNumber.Text); - string oldSerialHex = Convert.ToHexString(oldSerial); - - byte[] newSerial = Encoding.UTF8.GetBytes(serialNumberTextbox.Text); - string newSerialHex = Convert.ToHexString(newSerial); - - byte[] find = ConvertHexStringToByteArray(Regex.Replace(oldSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace(newSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - - byte[] bytes = File.ReadAllBytes(newFile); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(newFile, bytes); - } - - } - catch (System.ArgumentException ex) - { - throwError(ex.Message.ToString()); - errorShownAlready = true; - } - - #endregion - } - else - { - throwError("Save operation cancelled!"); - errorShownAlready = true; - } - } - } - } - - if(File.Exists(fileNameToLookFor) && errorShownAlready == false) - { - // Reset everything and show message - ResetAppFields(); - MessageBox.Show("A new BIOS file was successfully created. Please load the new BIOS file to verify the information you entered before installing onto your motherboard. Remember this software was created by TheCod3r with nothing but love. Why not show some love back by dropping me a small donation to say thanks ;).", "All done!", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - - } - - private void label15_Click(object sender, EventArgs e) - { - OpenUrl("https://www.consolefix.shop"); - } - - private void label1_Click(object sender, EventArgs e) - { - - } - - private void btnRefreshPorts_Click(object sender, EventArgs e) - { - // When the "refresh ports" button is pressed, we need to refresh the list of available COM ports for UART - string[] ports = SerialPort.GetPortNames(); - comboComPorts.Items.Clear(); - comboComPorts.Items.AddRange(ports); - comboComPorts.SelectedIndex = 0; - btnConnectCom.Enabled = true; - btnDisconnectCom.Enabled = false; - } - - private void btnConnectCom_Click(object sender, EventArgs e) - { - // Let's try and connect to the UART reader - btnConnectCom.Enabled = false; - - if (comboComPorts.Text != "") - { - - try - { - // Set port to selected port - UARTSerial.PortName = comboComPorts.Text; - // Set the BAUD rate to 115200 - UARTSerial.BaudRate = 115200; - // Enable RTS - UARTSerial.RtsEnable = true; - // Open the COM port - UARTSerial.Open(); - btnDisconnectCom.Enabled = true; - toolStripStatusLabel1.Text = "Connected to UART via COM port " + comboComPorts.Text + " at a BAUD rate of 115200."; - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); - btnConnectCom.Enabled = true; - btnDisconnectCom.Enabled = false; - toolStripStatusLabel1.Text = "Could not connect to UART. Please try again!"; - } - - } - else - { - MessageBox.Show("Please select a COM port from the ports list to establish a connection.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); - btnConnectCom.Enabled = true; - btnDisconnectCom.Enabled = false; - toolStripStatusLabel1.Text = "Could not connect to UART. Please try again!"; - } - } - - private void btnDisconnectCom_Click(object sender, EventArgs e) - { - // Let's close the COM port - try - { - if(UARTSerial.IsOpen == true) - { - UARTSerial.Close(); - btnConnectCom.Enabled = true; - btnDisconnectCom.Enabled = false; - toolStripStatusLabel1.Text = "Disconnected from UART..."; - } - } - catch(Exception ex) - { - MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); - toolStripStatusLabel1.Text = "An error occurred while disconnecting from UART. Please try again..."; - } - } - - /// - /// Read error codes from UART - /// - /// - /// - private async void button1_Click(object sender, EventArgs e) - { - // Let's read the error codes from UART - txtUARTOutput.Text = ""; - - if (UARTSerial.IsOpen == true) - { - try - { - - List UARTLines = new(); - - for (var i = 0; i <= 10; i++) - { - var command = $"errlog {i}"; - var checksum = CalculateChecksum(command); - UARTSerial.WriteLine(checksum); - do - { - var line = UARTSerial.ReadLine(); - if (!string.Equals($"{command}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) - { - UARTLines.Add(line); - } - } while (UARTSerial.BytesToRead != 0); - - foreach (var l in UARTLines) - { - var split = l.Split(' '); - if (!split.Any()) continue; - switch (split[0]) - { - case "NG": - break; - case "OK": - var errorCode = split[2]; - // Now that the error code has been isolated from the rest of the junk sent by the system - // let's check it against the database. The error server will need to return XML results - string errorResult = await ParseErrorsAsync(errorCode); - if (!txtUARTOutput.Text.Contains(errorResult)) - { - txtUARTOutput.AppendText(errorResult + Environment.NewLine); - } - break; - } - } - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); - toolStripStatusLabel1.Text = "An error occurred while reading error codes from UART. Please try again..."; - } - } - else - { - MessageBox.Show("Please connect to UART before attempting to read the error codes.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - - // If the app is closed before UART is terminated, we need to at least try to close the COM port gracefully first - private void Form1_FormClosing(object sender, FormClosingEventArgs e) - { - if(UARTSerial.IsOpen == true) - { - try - { - UARTSerial.Close(); - } - catch(Exception ex) - { - MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - } - - /// - /// Clear the UART output window - /// - /// - /// - private void button3_Click(object sender, EventArgs e) - { - txtUARTOutput.Text = ""; - } - - /// - /// When the user clicks on the download error database button, show a confirmation first and then if they click yes, - /// continue to download the latest database from the update server - /// - /// - /// - private async void btnDownloadDatabase_Click(object sender, EventArgs e) - { - DialogResult result = MessageBox.Show("Downloading the error database will overwrite any existing offline database you currently have. Are you sure you would like to do this?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - - // Check if user wants to proceed - if (result == DialogResult.Yes) - { - // Call the function to download and save the XML data - await DownloadDatabaseAsync(); - } - else - { - // Do nothing. The user cancelled the request// The user cancelled - } - } - - /// - /// The user can clear the error codes from the console if required but let's make sure they actually want to do - /// that by showing a confirmation dialog first. If the click yes, send the UART command and wipe the codes from - /// the console. This action cannot be undone! - /// - /// - /// - private void btnClearErrorCodes_Click(object sender, EventArgs e) - { - DialogResult result = MessageBox.Show("This will clear error codes from the console by sending the \"errlog clear\" command. Are you sure you would like to proceed? This action cannot be undone!", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - - if(result == DialogResult.Yes) - { - // Let's read the error codes from UART - txtUARTOutput.Text = ""; - - if (UARTSerial.IsOpen == true) - { - try - { - - List UARTLines = new(); - - var command = "errlog clear"; - var checksum = CalculateChecksum(command); - UARTSerial.WriteLine(checksum); - do - { - var line = UARTSerial.ReadLine(); - if (!string.Equals($"{command}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) - { - UARTLines.Add(line); - } - } while (UARTSerial.BytesToRead != 0); - - foreach (var l in UARTLines) - { - var split = l.Split(' '); - if (!split.Any()) continue; - switch (split[0]) - { - case "NG": - if (!txtUARTOutput.Text.Contains("FAIL")) - { - txtUARTOutput.AppendText("Response: FAIL" + Environment.NewLine + "Information: An error occurred while clearing the error logs from the system. Please try again..."); - } - break; - case "OK": - if (!txtUARTOutput.Text.Contains("SUCCESS")) - { - txtUARTOutput.AppendText("Response: SUCCESS" + Environment.NewLine + "Information: All error codes cleared successfully"); - } - break; - } - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); - toolStripStatusLabel1.Text = "An error occurred while attempting to send a UART command. Please try again..."; - } - } - else - { - MessageBox.Show("Please connect to UART before attempting to send commands.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - else - { - // Do nothing. The user cancelled the request - } - } - - /// - /// Sometimes the user might want to send a custom command. Let them do that here! - /// - /// - /// - private void btnSendCommand_Click(object sender, EventArgs e) - { - if (txtCustomCommand.Text != "") - { - // Let's read the error codes from UART - txtUARTOutput.Text = ""; - - if (UARTSerial.IsOpen == true) - { - try - { - - List UARTLines = new(); - - var checksum = CalculateChecksum(txtCustomCommand.Text); - UARTSerial.WriteLine(checksum); - do - { - var line = UARTSerial.ReadLine(); - if (!string.Equals($"{txtCustomCommand.Text}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) - { - UARTLines.Add(line); - } - } while (UARTSerial.BytesToRead != 0); - - foreach (var l in UARTLines) - { - var split = l.Split(' '); - if (!split.Any()) continue; - switch (split[0]) - { - case "NG": - txtUARTOutput.Text = "ERROR: " + l; - break; - case "OK": - txtUARTOutput.Text = "SUCCESS: " + l; - break; - } - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); - toolStripStatusLabel1.Text = "An error occurred while reading error codes from UART. Please try again..."; - } - } - else - { - MessageBox.Show("Please connect to UART before attempting to send commands.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - else - { - MessageBox.Show("Please enter a command to send via UART.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - - /// - /// If the user presses the enter key while using the custom command box, handle it by programmatically pressing the - /// send button. This is more of a convenience thing really! - /// - /// - /// - private void txtCustomCommand_KeyPress(object sender, KeyPressEventArgs e) - { - if(e.KeyChar == (char)Keys.Enter) - { - btnSendCommand.PerformClick(); - } - } - } +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using System.IO.Ports; +using System; +using System.Threading; +using System.Collections.Generic; +using static System.Windows.Forms.LinkLabel; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; +using System.Net; +using System.Xml; +using System.Security.Policy; + +namespace PS5_NOR_Modifier +{ + public partial class Form1 : Form + { + + public Form1() + { + InitializeComponent(); + } + + static string CalculateChecksum(string str) + { + int sum = 0; + foreach (char c in str) + { + sum += (int)c; + } + return str + ":" + (sum & 0xFF).ToString("X2"); + } + + private void throwError(string errmsg) + { + MessageBox.Show(errmsg, "An Error Has Occurred", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + // We want this app to work offline, so let's declare where the local "offline" database will be stored + string localDatabaseFile = "errorDB.xml"; + + static SerialPort UARTSerial = new SerialPort(); + + /// + /// With thanks to @jjxtra on Github. The code has already been created and there's no need to reinvent the wheel is there? + /// + #region Hex Code + + private static IEnumerable PatternAt(byte[] source, byte[] pattern) + { + for (int i = 0; i < source.Length; i++) + { + if (source.Skip(i).Take(pattern.Length).SequenceEqual(pattern)) + { + yield return i; + } + } + } + + private static byte[] ConvertHexStringToByteArray(string hexString) + { + if (hexString.Length % 2 != 0) + { + throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString)); + } + + byte[] data = new byte[hexString.Length / 2]; + for (int index = 0; index < data.Length; index++) + { + string byteValue = hexString.Substring(index * 2, 2); + data[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture); + } + + return data; + } + + #endregion + + private void Form1_Load(object sender, EventArgs e) + { + // Upon first launch, we need to get a list of COM ports available for UART + string[] ports = SerialPort.GetPortNames(); + comboComPorts.Items.Clear(); + comboComPorts.Items.AddRange(ports); + comboComPorts.SelectedIndex = 0; + btnConnectCom.Enabled = true; + btnDisconnectCom.Enabled = false; + } + + // Declare offsets to detect console version + long offsetOne = 0x1c7010; + long offsetTwo = 0x1c7030; + long WiFiMacOffset = 0x1C73C0; + string? WiFiMacValue = null; + long LANMacOffset = 0x1C4020; + string? LANMacValue = null; + string? offsetOneValue = null; + string? offsetTwoValue = null; + long serialOffset = 0x1c7210; + string? serialValue = null; + long variantOffset = 0x1c7226; + string? variantValue = null; + long moboSerialOffset = 0x1C7200; + string? moboSerialValue = null; + + private async Task DownloadDatabaseAsync() + { + // Define the URL + string url = "http://uartcodes.com/xml.php"; // Update with your URL + + // Define the file path to save the XML + + try + { + // Create a WebClient instance + using (HttpClient client = new()) + { + // Download the XML data from the URL + string xmlData = await client.GetStringAsync(url); + + // Create an XmlDocument instance and load the XML data + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(xmlData); + + // Save the XML data to a file + xmlDoc.Save(localDatabaseFile); + + MessageBox.Show("The most recent offline database has been updated successfully.", "Offline Database Updated!", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + catch (Exception ex) + { + Console.WriteLine("Error: " + ex.Message); + } + } + + /// + /// We need to be able to send the error code we received from the console and fetch an XML result back from the server + /// Once we have a result from the server, parse the XML data and output it in an easy to understand format for the user + /// + /// + /// + async Task ParseErrorsAsync(string ErrorCode) + { + // If the user has opted to parse errors with an offline database, run the parse offline function + if (chkUseOffline.Checked == true) + { + return ParseErrorsOffline(ErrorCode); + } + else + { + // The user wants to use the online version. Proceed at will + + // Define the URL with the error code parameter + string url = "http://uartcodes.com/xml.php?errorCode=" + ErrorCode; + + string results = ""; + + try + { + string response = ""; + // Create a WebClient instance to send the request + using (HttpClient client = new()) + { + // Send the request and retrieve the response as a string + response = await client.GetStringAsync(url); + } + // Load the XML response into an XmlDocument + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(response); + + + // Get the root node + XmlNode? root = xmlDoc.DocumentElement; + if (root is null) { + throw new Exception("Error reading the file"); + } + + // Check if the root node is + if (root.Name == "errorCodes") + { + // Loop through each errorCode node + foreach (XmlNode errorCodeNode in root.ChildNodes) + { + // Check if the node is + if (errorCodeNode.Name == "errorCode") + { + // Get ErrorCode and Description + string errorCode = errorCodeNode.SelectSingleNode("ErrorCode")?.InnerText ?? ""; + string description = errorCodeNode.SelectSingleNode("Description")?.InnerText??""; + + // Output the results + results = "Error code: " + + errorCode + + Environment.NewLine + + "Description: " + + description; + } + } + } + else + { + results = "Error code: " + + ErrorCode + + Environment.NewLine + + "An error occurred while fetching a result for this error. Please try again!"; + } + } + catch (Exception ex) + { + results = "Error code: " + + ErrorCode + + Environment.NewLine + + ex.Message; + } + return results; + } + } + + string ParseErrorsOffline(string errorCode) + { + string results = ""; + + try + { + // Check if the XML file exists + if (File.Exists(localDatabaseFile)) + { + // Load the XML file + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(localDatabaseFile); + + // Get the root node + XmlNode? root = xmlDoc.DocumentElement; + if (root is null) return results; + + // Check if the root node is + if (root.Name == "errorCodes") + { + // Loop through each errorCode node + foreach (XmlNode errorCodeNode in root.ChildNodes) + { + // Check if the node is + if (errorCodeNode.Name == "errorCode") + { + // Get ErrorCode and Description + string errorCodeValue = errorCodeNode.SelectSingleNode("ErrorCode")?.InnerText??""; + string description = errorCodeNode.SelectSingleNode("Description")?.InnerText??""; + + // Check if the current error code matches the requested error code + if (errorCodeValue == errorCode) + { + // Output the results + results = "Error code: " + errorCodeValue + Environment.NewLine + "Description: " + description; + break; // Exit the loop after finding the matching error code + } + } + } + } + else + { + results = "Error: Invalid XML database file. Please reconfigure the application, redownload the offline database, or uncheck the option to use the offline database."; + } + } + else + { + results = "Error: Local XML file not found."; + } + } + catch (Exception ex) + { + results = "Error: " + ex.Message; + } + + return results; + } + + string HexStringToString(string hexString) + { + if (hexString == null || (hexString.Length & 1) == 1) + { + throw new ArgumentException(); + } + var sb = new StringBuilder(); + for (var i = 0; i < hexString.Length; i += 2) + { + var hexChar = hexString.Substring(i, 2); + sb.Append((char)Convert.ToByte(hexChar, 16)); + } + return sb.ToString(); + } + + /// + /// Lauinches a URL in a new window using the default browser... + /// + /// The URL you want to launch + private void OpenUrl(string url) + { + try + { + Process.Start(url); + } + catch + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + url = url.Replace("&", "^&"); + Process.Start(new ProcessStartInfo(url) { UseShellExecute = true }); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + Process.Start("xdg-open", url); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + Process.Start("open", url); + } + else + { + throw; + } + } + } + + private void ResetAppFields() + { + fileLocationBox.Text = ""; + serialNumber.Text = "..."; + boardVariant.Text = "..."; + modelInfo.Text = "..."; + fileSizeInfo.Text = "..."; + serialNumberTextbox.Text = ""; + toolStripStatusLabel1.Text = "Status: Waiting for input"; + } + + #region Donations + + /// + /// If you modify this app, please leave my credits in, otherwise a little kitten will cry! + /// + /// + /// + private void label4_Click(object sender, EventArgs e) + { + OpenUrl("https://www.streamelements.com/thecod3r/tip"); + } + + private void pictureBox2_Click(object sender, EventArgs e) + { + OpenUrl("https://www.streamelements.com/thecod3r/tip"); + } + + + #endregion + + private void browseFileButton_Click(object sender, EventArgs e) + { + OpenFileDialog fileDialogBox = new OpenFileDialog(); + fileDialogBox.Title = "Open NOR BIN File"; + fileDialogBox.Filter = "PS5 BIN Files|*.bin"; + + if (fileDialogBox.ShowDialog() == DialogResult.OK) + { + if(fileDialogBox.CheckFileExists == false) + { + throwError("The file you selected could not be found. Please check the file exists and is a valid BIN file."); + } + else + { + if(!fileDialogBox.SafeFileName.EndsWith(".bin")) + { + throwError("The file you selected is not a valid. Please ensure the file you are choosing is a correct BIN file and try again."); + } + else + { + // Let's load simple information first, before loading BIN specific data + fileLocationBox.Text = ""; + // Get the path selected and print it into the path box + string selectedPath = fileDialogBox.FileName; + toolStripStatusLabel1.Text = "Status: Selected file " + selectedPath; + fileLocationBox.Text = selectedPath; + + // Get file length and show in bytes and MB + long length = new System.IO.FileInfo(selectedPath).Length; + fileSizeInfo.Text = length.ToString() + " bytes (" + length / 1024 / 1024 + "MB)"; + + #region Extract PS5 Version + + try + { + BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = offsetOne; + //Read the offset + offsetOneValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + offsetOneValue = null; + } + + try + { + BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = offsetOne; + //Read the offset + offsetTwoValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + offsetTwoValue = null; + } + + + if(offsetOneValue?.Contains("22020101")??false) + { + modelInfo.Text = "Disc Edition"; + } + else + { + if(offsetTwoValue?.Contains("22030101") ?? false) + { + modelInfo.Text = "Digital Edition"; + } + else + { + modelInfo.Text = "Unknown"; + } + } + + #endregion + + #region Extract Motherboard Serial Number + + try + { + BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = moboSerialOffset; + //Read the offset + moboSerialValue = BitConverter.ToString(reader.ReadBytes(16)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + moboSerialValue = null; + } + + + + if(moboSerialValue != null) + { + moboSerialInfo.Text = HexStringToString(moboSerialValue); + } + else + { + moboSerialInfo.Text = "Unknown"; + } + + #endregion + + #region Extract Board Serial Number + + try + { + BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = serialOffset; + //Read the offset + serialValue = BitConverter.ToString(reader.ReadBytes(17)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + serialValue = null; + } + + + + if (serialValue != null) + { + serialNumber.Text = HexStringToString(serialValue); + serialNumberTextbox.Text = HexStringToString(serialValue); + + } + else + { + serialNumber.Text = "Unknown"; + } + + #endregion + + #region Extract WiFi Mac Address + + try + { + BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = WiFiMacOffset; + //Read the offset + WiFiMacValue = BitConverter.ToString(reader.ReadBytes(6)); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + WiFiMacValue = null; + } + + if (WiFiMacValue != null) + { + macAddressInfo.Text = WiFiMacValue; + wifiMacAddressTextbox.Text = WiFiMacValue; + } + else + { + macAddressInfo.Text = "Unknown"; + wifiMacAddressTextbox.Text = ""; + } + + #endregion + + #region Extract LAN Mac Address + + try + { + BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = LANMacOffset; + //Read the offset + LANMacValue = BitConverter.ToString(reader.ReadBytes(6)); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + LANMacValue = null; + } + + if (LANMacValue != null) + { + LANMacAddressInfo.Text = LANMacValue; + lanMacAddressTextbox.Text = LANMacValue; + } + else + { + LANMacAddressInfo.Text = "Unknown"; + lanMacAddressTextbox.Text = ""; + } + + #endregion + + #region Extract Board Variant + + try + { + BinaryReader reader = new BinaryReader(new FileStream(fileDialogBox.FileName, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = variantOffset; + //Read the offset + variantValue = BitConverter.ToString(reader.ReadBytes(19)).Replace("-", null).Replace("FF", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + variantValue = null; + } + + + + if (variantValue != null) + { + boardVariant.Text = HexStringToString(variantValue); + } + else + { + boardVariant.Text = "Unknown"; + } + + boardVariant.Text += boardVariant.Text switch { + _ when boardVariant.Text.EndsWith("00A") || boardVariant.Text.EndsWith("00B") => " - Japan", + _ when boardVariant.Text.EndsWith("01A") || boardVariant.Text.EndsWith("01B") || + boardVariant.Text.EndsWith("15A") || boardVariant.Text.EndsWith("15B") => " - US, Canada, (North America)", + _ when boardVariant.Text.EndsWith("02A") || boardVariant.Text.EndsWith("02B") => " - Australia / New Zealand, (Oceania)", + _ when boardVariant.Text.EndsWith("03A") || boardVariant.Text.EndsWith("03B") => " - United Kingdom / Ireland", + _ when boardVariant.Text.EndsWith("04A") || boardVariant.Text.EndsWith("04B") => " - Europe / Middle East / Africa", + _ when boardVariant.Text.EndsWith("05A") || boardVariant.Text.EndsWith("05B") => " - South Korea", + _ when boardVariant.Text.EndsWith("06A") || boardVariant.Text.EndsWith("06B") => " - Southeast Asia / Hong Kong", + _ when boardVariant.Text.EndsWith("07A") || boardVariant.Text.EndsWith("07B") => " - Taiwan", + _ when boardVariant.Text.EndsWith("08A") || boardVariant.Text.EndsWith("08B") => " - Russia, Ukraine, India, Central Asia", + _ when boardVariant.Text.EndsWith("09A") || boardVariant.Text.EndsWith("09B") => " - Mainland China", + _ when boardVariant.Text.EndsWith("11A") || boardVariant.Text.EndsWith("11B") || + boardVariant.Text.EndsWith("14A") || boardVariant.Text.EndsWith("14B") + => " - Mexico, Central America, South America", + _ when boardVariant.Text.EndsWith("16A") || boardVariant.Text.EndsWith("16B") => " - Europe / Middle East / Africa", + _ when boardVariant.Text.EndsWith("18A") || boardVariant.Text.EndsWith("18B") => " - Singapore, Korea, Asia", + _=> " - Unknown Region" + }; + #endregion + } + } + } + } + + private void convertToDigitalEditionButton_Click(object sender, EventArgs e) + { + + string fileNameToLookFor = ""; + bool errorShownAlready = false; + + if (modelInfo.Text == "" || modelInfo.Text == "...") + { + // No valid BIN file seems to have been selected + throwError("Please select a valid BIOS file first..."); + errorShownAlready = true; + } + else + { + if(boardModelSelectionBox.Text == "") + { + throwError("Please select a valid board model before saving new BIOS information!"); + errorShownAlready = true; + } + else + { + if(boardVariantSelectionBox.Text == "") + { + throwError("Please select a valid board variant before saving new BIOS information!"); + errorShownAlready = true; + } + else + { + SaveFileDialog saveBox = new SaveFileDialog(); + saveBox.Title = "Save NOR BIN File"; + saveBox.Filter = "PS5 BIN Files|*.bin"; + + if (saveBox.ShowDialog() == DialogResult.OK) + { + // First create a copy of the old BIOS file + byte[] existingFile = File.ReadAllBytes(fileLocationBox.Text); + string newFile = saveBox.FileName; + + File.WriteAllBytes(newFile, existingFile); + + fileNameToLookFor = saveBox.FileName; + + #region Set the new model info + if (modelInfo.Text == "Disc Edition") + { + try + { + + if (boardModelSelectionBox.Text == "Digital Edition") + + { + + byte[] find = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); + byte[] replace = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); + if (find.Length != replace.Length) + { + throwError("The length of the old hex value does not match the length of the new hex value!"); + errorShownAlready = true; + } + byte[] bytes = File.ReadAllBytes(newFile); + foreach (int index in PatternAt(bytes, find)) + { + for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) + { + bytes[i] = replace[replaceIndex]; + } + File.WriteAllBytes(newFile, bytes); + } + } + + } + catch + { + throwError("An error occurred while saving your BIOS file"); + errorShownAlready = true; + } + } + else + { + if(modelInfo.Text == "Digital Edition") + { + try + { + + if (boardModelSelectionBox.Text == "Disc Edition") + + { + + byte[] find = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); + byte[] replace = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); + if (find.Length != replace.Length) + { + throwError("The length of the old hex value does not match the length of the new hex value!"); + errorShownAlready = true; + } + byte[] bytes = File.ReadAllBytes(newFile); + foreach (int index in PatternAt(bytes, find)) + { + for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) + { + bytes[i] = replace[replaceIndex]; + } + File.WriteAllBytes(newFile, bytes); + } + } + + } + catch + { + throwError("An error occurred while saving your BIOS file"); + errorShownAlready = true; + } + } + } + #endregion + + #region Set the new board variant + + try + { + byte[] oldVariant = Encoding.UTF8.GetBytes(boardVariant.Text); + string oldVariantHex = Convert.ToHexString(oldVariant); + + byte[] newVariantSelection = Encoding.UTF8.GetBytes(boardVariantSelectionBox.Text); + string newVariantHex = Convert.ToHexString(newVariantSelection); + + byte[] find = ConvertHexStringToByteArray(Regex.Replace(oldVariantHex, "0x|[ ,]", string.Empty).Normalize().Trim()); + byte[] replace = ConvertHexStringToByteArray(Regex.Replace(newVariantHex, "0x|[ ,]", string.Empty).Normalize().Trim()); + + byte[] bytes = File.ReadAllBytes(newFile); + foreach (int index in PatternAt(bytes, find)) + { + for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) + { + bytes[i] = replace[replaceIndex]; + } + File.WriteAllBytes(newFile, bytes); + } + + } + catch(System.ArgumentException ex) + { + throwError(ex.Message.ToString()); + errorShownAlready = true; + } + + #endregion + + #region Change Serial Number + + try + { + + byte[] oldSerial = Encoding.UTF8.GetBytes(serialNumber.Text); + string oldSerialHex = Convert.ToHexString(oldSerial); + + byte[] newSerial = Encoding.UTF8.GetBytes(serialNumberTextbox.Text); + string newSerialHex = Convert.ToHexString(newSerial); + + byte[] find = ConvertHexStringToByteArray(Regex.Replace(oldSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); + byte[] replace = ConvertHexStringToByteArray(Regex.Replace(newSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); + + byte[] bytes = File.ReadAllBytes(newFile); + foreach (int index in PatternAt(bytes, find)) + { + for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) + { + bytes[i] = replace[replaceIndex]; + } + File.WriteAllBytes(newFile, bytes); + } + + } + catch (System.ArgumentException ex) + { + throwError(ex.Message.ToString()); + errorShownAlready = true; + } + + #endregion + } + else + { + throwError("Save operation cancelled!"); + errorShownAlready = true; + } + } + } + } + + if(File.Exists(fileNameToLookFor) && errorShownAlready == false) + { + // Reset everything and show message + ResetAppFields(); + MessageBox.Show("A new BIOS file was successfully created. Please load the new BIOS file to verify the information you entered before installing onto your motherboard. Remember this software was created by TheCod3r with nothing but love. Why not show some love back by dropping me a small donation to say thanks ;).", "All done!", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + } + + private void label15_Click(object sender, EventArgs e) + { + OpenUrl("https://www.consolefix.shop"); + } + + private void label1_Click(object sender, EventArgs e) + { + + } + + private void btnRefreshPorts_Click(object sender, EventArgs e) + { + // When the "refresh ports" button is pressed, we need to refresh the list of available COM ports for UART + string[] ports = SerialPort.GetPortNames(); + comboComPorts.Items.Clear(); + comboComPorts.Items.AddRange(ports); + comboComPorts.SelectedIndex = 0; + btnConnectCom.Enabled = true; + btnDisconnectCom.Enabled = false; + } + + private void btnConnectCom_Click(object sender, EventArgs e) + { + // Let's try and connect to the UART reader + btnConnectCom.Enabled = false; + + if (comboComPorts.Text != "") + { + + try + { + // Set port to selected port + UARTSerial.PortName = comboComPorts.Text; + // Set the BAUD rate to 115200 + UARTSerial.BaudRate = 115200; + // Enable RTS + UARTSerial.RtsEnable = true; + // Open the COM port + UARTSerial.Open(); + btnDisconnectCom.Enabled = true; + toolStripStatusLabel1.Text = "Connected to UART via COM port " + comboComPorts.Text + " at a BAUD rate of 115200."; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); + btnConnectCom.Enabled = true; + btnDisconnectCom.Enabled = false; + toolStripStatusLabel1.Text = "Could not connect to UART. Please try again!"; + } + + } + else + { + MessageBox.Show("Please select a COM port from the ports list to establish a connection.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); + btnConnectCom.Enabled = true; + btnDisconnectCom.Enabled = false; + toolStripStatusLabel1.Text = "Could not connect to UART. Please try again!"; + } + } + + private void btnDisconnectCom_Click(object sender, EventArgs e) + { + // Let's close the COM port + try + { + if(UARTSerial.IsOpen == true) + { + UARTSerial.Close(); + btnConnectCom.Enabled = true; + btnDisconnectCom.Enabled = false; + toolStripStatusLabel1.Text = "Disconnected from UART..."; + } + } + catch(Exception ex) + { + MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); + toolStripStatusLabel1.Text = "An error occurred while disconnecting from UART. Please try again..."; + } + } + + /// + /// Read error codes from UART + /// + /// + /// + private async void button1_Click(object sender, EventArgs e) + { + // Let's read the error codes from UART + txtUARTOutput.Text = ""; + + if (UARTSerial.IsOpen == true) + { + try + { + + List UARTLines = new(); + + for (var i = 0; i <= 10; i++) + { + var command = $"errlog {i}"; + var checksum = CalculateChecksum(command); + UARTSerial.WriteLine(checksum); + do + { + var line = UARTSerial.ReadLine(); + if (!string.Equals($"{command}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) + { + UARTLines.Add(line); + } + } while (UARTSerial.BytesToRead != 0); + + foreach (var l in UARTLines) + { + var split = l.Split(' '); + if (!split.Any()) continue; + switch (split[0]) + { + case "NG": + break; + case "OK": + var errorCode = split[2]; + // Now that the error code has been isolated from the rest of the junk sent by the system + // let's check it against the database. The error server will need to return XML results + string errorResult = await ParseErrorsAsync(errorCode); + if (!txtUARTOutput.Text.Contains(errorResult)) + { + txtUARTOutput.AppendText(errorResult + Environment.NewLine); + } + break; + } + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); + toolStripStatusLabel1.Text = "An error occurred while reading error codes from UART. Please try again..."; + } + } + else + { + MessageBox.Show("Please connect to UART before attempting to read the error codes.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + // If the app is closed before UART is terminated, we need to at least try to close the COM port gracefully first + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + if(UARTSerial.IsOpen == true) + { + try + { + UARTSerial.Close(); + } + catch(Exception ex) + { + MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + } + + /// + /// Clear the UART output window + /// + /// + /// + private void button3_Click(object sender, EventArgs e) + { + txtUARTOutput.Text = ""; + } + + /// + /// When the user clicks on the download error database button, show a confirmation first and then if they click yes, + /// continue to download the latest database from the update server + /// + /// + /// + private async void btnDownloadDatabase_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show("Downloading the error database will overwrite any existing offline database you currently have. Are you sure you would like to do this?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + // Check if user wants to proceed + if (result == DialogResult.Yes) + { + // Call the function to download and save the XML data + await DownloadDatabaseAsync(); + } + else + { + // Do nothing. The user cancelled the request// The user cancelled + } + } + + /// + /// The user can clear the error codes from the console if required but let's make sure they actually want to do + /// that by showing a confirmation dialog first. If the click yes, send the UART command and wipe the codes from + /// the console. This action cannot be undone! + /// + /// + /// + private void btnClearErrorCodes_Click(object sender, EventArgs e) + { + DialogResult result = MessageBox.Show("This will clear error codes from the console by sending the \"errlog clear\" command. Are you sure you would like to proceed? This action cannot be undone!", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + + if(result == DialogResult.Yes) + { + // Let's read the error codes from UART + txtUARTOutput.Text = ""; + + if (UARTSerial.IsOpen == true) + { + try + { + + List UARTLines = new(); + + var command = "errlog clear"; + var checksum = CalculateChecksum(command); + UARTSerial.WriteLine(checksum); + do + { + var line = UARTSerial.ReadLine(); + if (!string.Equals($"{command}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) + { + UARTLines.Add(line); + } + } while (UARTSerial.BytesToRead != 0); + + foreach (var l in UARTLines) + { + var split = l.Split(' '); + if (!split.Any()) continue; + switch (split[0]) + { + case "NG": + if (!txtUARTOutput.Text.Contains("FAIL")) + { + txtUARTOutput.AppendText("Response: FAIL" + Environment.NewLine + "Information: An error occurred while clearing the error logs from the system. Please try again..."); + } + break; + case "OK": + if (!txtUARTOutput.Text.Contains("SUCCESS")) + { + txtUARTOutput.AppendText("Response: SUCCESS" + Environment.NewLine + "Information: All error codes cleared successfully"); + } + break; + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); + toolStripStatusLabel1.Text = "An error occurred while attempting to send a UART command. Please try again..."; + } + } + else + { + MessageBox.Show("Please connect to UART before attempting to send commands.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + else + { + // Do nothing. The user cancelled the request + } + } + + /// + /// Sometimes the user might want to send a custom command. Let them do that here! + /// + /// + /// + private void btnSendCommand_Click(object sender, EventArgs e) + { + if (txtCustomCommand.Text != "") + { + // Let's read the error codes from UART + txtUARTOutput.Text = ""; + + if (UARTSerial.IsOpen == true) + { + try + { + + List UARTLines = new(); + + var checksum = CalculateChecksum(txtCustomCommand.Text); + UARTSerial.WriteLine(checksum); + do + { + var line = UARTSerial.ReadLine(); + if (!string.Equals($"{txtCustomCommand.Text}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) + { + UARTLines.Add(line); + } + } while (UARTSerial.BytesToRead != 0); + + foreach (var l in UARTLines) + { + var split = l.Split(' '); + if (!split.Any()) continue; + switch (split[0]) + { + case "NG": + txtUARTOutput.Text = "ERROR: " + l; + break; + case "OK": + txtUARTOutput.Text = "SUCCESS: " + l; + break; + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Error); + toolStripStatusLabel1.Text = "An error occurred while reading error codes from UART. Please try again..."; + } + } + else + { + MessageBox.Show("Please connect to UART before attempting to send commands.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + else + { + MessageBox.Show("Please enter a command to send via UART.", "An error occurred...", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + /// + /// If the user presses the enter key while using the custom command box, handle it by programmatically pressing the + /// send button. This is more of a convenience thing really! + /// + /// + /// + private void txtCustomCommand_KeyPress(object sender, KeyPressEventArgs e) + { + if(e.KeyChar == (char)Keys.Enter) + { + btnSendCommand.PerformClick(); + } + } + } } \ No newline at end of file diff --git a/PS5 NOR Modifier/Form1.resx b/PS5 NOR Modifier/Form1.resx index 0184f73..9b1fde0 100644 --- a/PS5 NOR Modifier/Form1.resx +++ b/PS5 NOR Modifier/Form1.resx @@ -1,81 +1,81 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - The PS5 NOR modifier is a Windows GUI tool created by TheCod3r to make rewriting NOR flash rom files quickly and easily. -TheCod3r is a hardware technician and amatuer software developer who spends a lot of time on research and development for the PS5, -Xbox Series consoles etc. Remember that this takes time, so if you find any value in my software, please consider supporting me with a donation. - - - Please consider supporting my work and time with a small donation. Your contribution will make my wallet happy and help feed my -coffee addiction! Click here to donate to me. Even a dollar helps :) Don't forget to subscribe to me on YouTube too! - - - 17, 17 - - - You can send custom commands -with UART using this feature. Note -that any command entered here -will return unparsed results. Please -also be sure to know what you are -doing as sending unsafe commands -can damage your device. - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + The PS5 NOR modifier is a Windows GUI tool created by TheCod3r to make rewriting NOR flash rom files quickly and easily. +TheCod3r is a hardware technician and amatuer software developer who spends a lot of time on research and development for the PS5, +Xbox Series consoles etc. Remember that this takes time, so if you find any value in my software, please consider supporting me with a donation. + + + Please consider supporting my work and time with a small donation. Your contribution will make my wallet happy and help feed my +coffee addiction! Click here to donate to me. Even a dollar helps :) Don't forget to subscribe to me on YouTube too! + + + 17, 17 + + + You can send custom commands +with UART using this feature. Note +that any command entered here +will return unparsed results. Please +also be sure to know what you are +doing as sending unsafe commands +can damage your device. + \ No newline at end of file diff --git a/PS5 NOR Modifier/PS5 NOR Modifier.csproj b/PS5 NOR Modifier/PS5 NOR Modifier.csproj index 811a503..be7501e 100644 --- a/PS5 NOR Modifier/PS5 NOR Modifier.csproj +++ b/PS5 NOR Modifier/PS5 NOR Modifier.csproj @@ -1,67 +1,67 @@ - - - - WinExe - net6.0-windows - PS5_NOR_Modifier - enable - true - enable - HardwareChip.ico - x86 - PS5 NOR Modifier - AnyCPU;x86 - - - - none - - - - none - - - - none - - - - none - - - - - - - - - - - - - True - True - Resources.resx - - - True - True - Settings.settings - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - + + + + WinExe + net6.0-windows + PS5_NOR_Modifier + enable + true + enable + HardwareChip.ico + x86 + PS5 NOR Modifier + AnyCPU;x86 + + + + none + + + + none + + + + none + + + + none + + + + + + + + + + + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + \ No newline at end of file diff --git a/PS5 NOR Modifier/PS5 NOR Modifier.csproj.user b/PS5 NOR Modifier/PS5 NOR Modifier.csproj.user index 834d222..6c7fdef 100644 --- a/PS5 NOR Modifier/PS5 NOR Modifier.csproj.user +++ b/PS5 NOR Modifier/PS5 NOR Modifier.csproj.user @@ -1,11 +1,11 @@ - - - - <_LastSelectedProfileId>C:\Users\TheCod3r\source\repos\PS5 NOR Modifier\PS5 NOR Modifier\Properties\PublishProfiles\FolderProfile.pubxml - - - - Form - - + + + + <_LastSelectedProfileId>C:\Users\TheCod3r\source\repos\PS5 NOR Modifier\PS5 NOR Modifier\Properties\PublishProfiles\FolderProfile.pubxml + + + + Form + + \ No newline at end of file diff --git a/PS5 NOR Modifier/Program.cs b/PS5 NOR Modifier/Program.cs index 62a6e6b..90448ab 100644 --- a/PS5 NOR Modifier/Program.cs +++ b/PS5 NOR Modifier/Program.cs @@ -1,17 +1,17 @@ -namespace PS5_NOR_Modifier -{ - internal static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - // To customize application configuration such as set high DPI settings or default font, - // see https://aka.ms/applicationconfiguration. - ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); - } - } +namespace PS5_NOR_Modifier +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new Form1()); + } + } } \ No newline at end of file diff --git a/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml b/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml index 8c1dc20..e3132fb 100644 --- a/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml +++ b/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml @@ -1,18 +1,18 @@ - + - - - Release - Any CPU - C:\Users\TheCod3r\Desktop\PS5 NOR Modifier - FileSystem - <_TargetId>Folder - net6.0-windows - win-x86 - false - true - false - +--> + + + Release + Any CPU + C:\Users\TheCod3r\Desktop\PS5 NOR Modifier + FileSystem + <_TargetId>Folder + net6.0-windows + win-x86 + false + true + false + \ No newline at end of file diff --git a/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml.user b/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml.user index a40d0bc..b83f3ca 100644 --- a/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/PS5 NOR Modifier/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -1,10 +1,10 @@ - + - - - True|2023-05-10T11:19:20.3633657Z;False|2023-05-10T01:35:13.6002955+01:00;False|2023-05-10T01:35:01.1172801+01:00;False|2023-05-10T01:34:49.3492673+01:00;False|2023-05-10T01:34:40.0941220+01:00; - - +--> + + + True|2023-05-10T11:19:20.3633657Z;False|2023-05-10T01:35:13.6002955+01:00;False|2023-05-10T01:35:01.1172801+01:00;False|2023-05-10T01:34:49.3492673+01:00;False|2023-05-10T01:34:40.0941220+01:00; + + \ No newline at end of file diff --git a/PS5 NOR Modifier/Properties/Resources.Designer.cs b/PS5 NOR Modifier/Properties/Resources.Designer.cs index fa40e31..3e19120 100644 --- a/PS5 NOR Modifier/Properties/Resources.Designer.cs +++ b/PS5 NOR Modifier/Properties/Resources.Designer.cs @@ -1,93 +1,93 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace PS5_NOR_Modifier.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PS5_NOR_Modifier.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Paypal_128 { - get { - object obj = ResourceManager.GetObject("Paypal-128", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Paypal_32 { - get { - object obj = ResourceManager.GetObject("Paypal-32", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap PS5_Nor_Logo { - get { - object obj = ResourceManager.GetObject("PS5 Nor Logo", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace PS5_NOR_Modifier.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PS5_NOR_Modifier.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Paypal_128 { + get { + object obj = ResourceManager.GetObject("Paypal-128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Paypal_32 { + get { + object obj = ResourceManager.GetObject("Paypal-32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap PS5_Nor_Logo { + get { + object obj = ResourceManager.GetObject("PS5 Nor Logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/PS5 NOR Modifier/Properties/Resources.resx b/PS5 NOR Modifier/Properties/Resources.resx index bc90e9c..307bf61 100644 --- a/PS5 NOR Modifier/Properties/Resources.resx +++ b/PS5 NOR Modifier/Properties/Resources.resx @@ -1,130 +1,130 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\Paypal-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\PS5 Nor Logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Paypal-128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Paypal-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\PS5 Nor Logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Paypal-128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PS5 NOR Modifier/Properties/Settings.Designer.cs b/PS5 NOR Modifier/Properties/Settings.Designer.cs index d6493b3..44e1b73 100644 --- a/PS5 NOR Modifier/Properties/Settings.Designer.cs +++ b/PS5 NOR Modifier/Properties/Settings.Designer.cs @@ -1,26 +1,26 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace PS5_NOR_Modifier.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace PS5_NOR_Modifier.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/PS5 NOR Modifier/Properties/Settings.settings b/PS5 NOR Modifier/Properties/Settings.settings index 15034e7..049245f 100644 --- a/PS5 NOR Modifier/Properties/Settings.settings +++ b/PS5 NOR Modifier/Properties/Settings.settings @@ -1,6 +1,6 @@ - - - - - - + + + + + + diff --git a/UART-CL By TheCod3r/.vs/ProjectEvaluation/uart-cl by thecod3r.metadata.v5.1 b/UART-CL By TheCod3r/.vs/ProjectEvaluation/uart-cl by thecod3r.metadata.v5.1 new file mode 100644 index 0000000..e069217 Binary files /dev/null and b/UART-CL By TheCod3r/.vs/ProjectEvaluation/uart-cl by thecod3r.metadata.v5.1 differ diff --git a/UART-CL By TheCod3r/.vs/ProjectEvaluation/uart-cl by thecod3r.projects.v5.1 b/UART-CL By TheCod3r/.vs/ProjectEvaluation/uart-cl by thecod3r.projects.v5.1 new file mode 100644 index 0000000..894f3c4 Binary files /dev/null and b/UART-CL By TheCod3r/.vs/ProjectEvaluation/uart-cl by thecod3r.projects.v5.1 differ diff --git a/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/DesignTimeBuild/.dtbcache.v2 b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000..5f3025e Binary files /dev/null and b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/DesignTimeBuild/.dtbcache.v2 differ diff --git a/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/FileContentIndex/read.lock b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/FileContentIndex/read.lock new file mode 100644 index 0000000..e69de29 diff --git a/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/.futdcache.v2 b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/.futdcache.v2 new file mode 100644 index 0000000..b1fffb7 Binary files /dev/null and b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/.futdcache.v2 differ diff --git a/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/.suo b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/.suo new file mode 100644 index 0000000..6b289d3 Binary files /dev/null and b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/.suo differ diff --git a/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/TestStore/0/testlog.manifest b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/TestStore/0/testlog.manifest new file mode 100644 index 0000000..ff788ab Binary files /dev/null and b/UART-CL By TheCod3r/.vs/UART-CL By TheCod3r/v17/TestStore/0/testlog.manifest differ diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r.sln b/UART-CL By TheCod3r/UART-CL By TheCod3r.sln index 9ba637f..bd3325b 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r.sln +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r.sln @@ -1,25 +1,31 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32901.215 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UART-CL By TheCod3r", "UART-CL By TheCod3r\UART-CL By TheCod3r.csproj", "{8B5DA648-23A0-4C54-A0D2-F6B5E326F308}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {BAD6A308-3F90-4873-A39E-365E07239E9B} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32901.215 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UART-CL By TheCod3r", "UART-CL By TheCod3r\UART-CL By TheCod3r.csproj", "{8B5DA648-23A0-4C54-A0D2-F6B5E326F308}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UART-CL.UnitTests", "tests\UART-CL.UnitTests\UART-CL.UnitTests.csproj", "{16134BBC-A161-4463-9DE7-8B57F593D4A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B5DA648-23A0-4C54-A0D2-F6B5E326F308}.Release|Any CPU.Build.0 = Release|Any CPU + {16134BBC-A161-4463-9DE7-8B57F593D4A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16134BBC-A161-4463-9DE7-8B57F593D4A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16134BBC-A161-4463-9DE7-8B57F593D4A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16134BBC-A161-4463-9DE7-8B57F593D4A6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BAD6A308-3F90-4873-A39E-365E07239E9B} + EndGlobalSection +EndGlobal diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Program.cs b/UART-CL By TheCod3r/UART-CL By TheCod3r/Program.cs index aa87133..43acaa4 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Program.cs +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Program.cs @@ -1,1894 +1,93 @@ -using System; -using System.Diagnostics; -using System.Threading; -using System.Drawing; -using System.IO; -using System.IO.Ports; -using Colorful; -using System.Net; -using System.Management; -using System.Xml; -using System.Text; -using System.Text.RegularExpressions; -using System.Globalization; - -#region Reminders (remove before publishing) -// Add check inside sub menu to confirm that the selected .bin file is a valid PS5 dump -#endregion - -// Set the name of the application -string appTitle = "UART-CL by TheCod3r"; - -bool showMenu = false; - -// Set the application title -System.Console.Title = appTitle; - -#region Checksum generation -static string CalculateChecksum(string str) -{ - // Math stuff. I don't understand it either! - int sum = 0; - foreach (char c in str) - { - sum += (int)c; - } - return str + ":" + (sum & 0xFF).ToString("X2"); -} -#endregion - -#region Hex conversions -static string HexStringToString(string hexString) -{ - if (hexString == null || (hexString.Length & 1) == 1) - { - throw new ArgumentException(); - } - var sb = new StringBuilder(); - for (var i = 0; i < hexString.Length; i += 2) - { - var hexChar = hexString.Substring(i, 2); - sb.Append((char)Convert.ToByte(hexChar, 16)); - } - return sb.ToString(); -} - -static IEnumerable PatternAt(byte[] source, byte[] pattern) -{ - for (int i = 0; i < source.Length; i++) - { - if (source.Skip(i).Take(pattern.Length).SequenceEqual(pattern)) - { - yield return i; - } - } -} - -static byte[] ConvertHexStringToByteArray(string hexString) -{ - if (hexString.Length % 2 != 0) - { - throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString)); - } - - byte[] data = new byte[hexString.Length / 2]; - for (int index = 0; index < data.Length; index++) - { - string byteValue = hexString.Substring(index * 2, 2); - data[index] = Convert.ToByte(byteValue, 16); // Parse hex string directly - } - - return data; -} -#endregion - -#region Error parsing (via XML database) - -// When fetching errors from the PS5 we want to be able to convert the received codes into readable text to make it easier -// for the user to understand what the problem is. By the time this function is called we should have an up to date XML -// database to compare error codes with. -static string ParseErrors(string errorCode) -{ - string results = ""; - - try - { - // Check if the XML file exists - if (File.Exists("errorDB.xml")) - { - // Load the XML file - XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.Load("errorDB.xml"); - - // Get the root node - XmlNode root = xmlDoc.DocumentElement; - - // Check if the root node is - if (root.Name == "errorCodes") - { - // No error was found in the database - if (root.ChildNodes.Count == 0) - { - results = "No result found for error code " + errorCode; - } - else - { - // Loop through each errorCode node - foreach (XmlNode errorCodeNode in root.ChildNodes) - { - // Check if the node is - if (errorCodeNode.Name == "errorCode") - { - // Get ErrorCode and Description - string errorCodeValue = errorCodeNode.SelectSingleNode("ErrorCode").InnerText; - string description = errorCodeNode.SelectSingleNode("Description").InnerText; - - // Check if the current error code matches the requested error code - if (errorCodeValue == errorCode) - { - // Output the results - results = "Error code: " + errorCodeValue + Environment.NewLine + "Description: " + description; - break; // Exit the loop after finding the matching error code - } - } - } - } - } - else - { - results = "Error: Invalid XML database file. Please reconfigure the application, redownload the offline database, or uncheck the option to use the offline database."; - } - } - else - { - results = "Error: Local XML file not found."; - } - } - catch (Exception ex) - { - results = "Error: " + ex.Message; - } - - return results; -} - -#endregion - -#region Obtian the friendly name of the available COM ports -static string GetFriendlyName(string portName) -{ - // Declare the friendly name variable for later use - string friendlyName = portName; - // We'll wrap this in a try loop simply because this isn't available on all platforms - try - { - // This is basically an SQL query. Let's search for the details of the ports based on the port name - // Again, this is just for Windows based devices - using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%" + portName + "%'")) - { - // Loop through and output the friendly name - foreach (var port in searcher.Get()) - { - friendlyName = port["Name"].ToString(); - } - } - } - // Catch errors. This would probably only happen on Linux systems - catch(Exception ex) - { - // If there is an error, we'll just declare that we don't know the name of the port - friendlyName = "Unknown Port Name"; - } - // Send the friendly name (or unknown port name string) back to the main code for output - return friendlyName; -} -#endregion - -#region Console header -static void ShowHeader() -{ - // This is the header. - System.Console.Clear(); - Colorful.Console.WriteAscii("UART-CL v1.0.0.0"); - Colorful.Console.WriteAscii("by TheCod3r"); - System.Console.WriteLine(""); - System.Console.WriteLine(""); - System.Console.WriteLine("UART-CL is a command line UART tool to assist in the diagnosis and repair of PlayStation 5 consoles using UART."); - System.Console.WriteLine("For more information on how to connect to UART you can use the options below or read the ReadMe."); - System.Console.WriteLine(""); -} -#endregion - -#region Check if error database exists -// Let's check and see if the database exists. If not, download it! -if (!System.IO.File.Exists("errorDB.xml")) -{ - ShowHeader(); - System.Console.WriteLine("Downloading latest database file. Please wait..."); - - bool success = DownloadDatabase("http://uartcodes.com/xml.php", "errorDB.xml"); - - if (success) - { - System.Console.WriteLine("Database downloaded successfully..."); - showMenu = true; - } - else - { - System.Console.WriteLine("Could not download the latest database file. Please ensure you're connected to the internet!"); - Environment.Exit(0); - } -} -else -{ - // The database file exists. Continue to the main menu - showMenu = true; -} -#endregion - -#region URL Handling - -// Let's create a function that will allow us to download the latest version of the database if we have access to the internet. -static bool DownloadDatabase(string url, string savePath) -{ - using (WebClient client = new WebClient()) - { - try - { - client.DownloadFile(url, savePath); - return true; - } - catch (Exception ex) - { - return false; - } - } -} - -// Function to open a new URL in the default browser -static void OpenUrl(string url) -{ - // Let's wait two seconds first - Thread.Sleep(2000); - // Wrap this in a try loop so we don't get any unexpected crashes - try - { - Process.Start(new ProcessStartInfo - { - FileName = url, - UseShellExecute = true - }); - } - catch (Exception ex) - { - // Catch any errors and let the user know - System.Console.WriteLine($"Error opening URL: {ex.Message}"); - } -} - -#endregion - -#region Map suffixes to regions (for console variant) -// Define a dictionary to map suffixes to regions -Dictionary regionMap = new Dictionary -{ - { "00A", "Japan" }, - { "00B", "Japan" }, - { "01A", "US, Canada, (North America)" }, - { "01B", "US, Canada, (North America)" }, - { "15A", "US, Canada, (North America)" }, - { "15B", "US, Canada, (North America)" }, - { "02A", "Australia / New Zealand, (Oceania)" }, - { "02B", "Australia / New Zealand, (Oceania)" }, - { "03A", "United Kingdom / Ireland" }, - { "03B", "United Kingdom / Ireland" }, - { "04A", "Europe / Middle East / Africa" }, - { "04B", "Europe / Middle East / Africa" }, - { "05A", "South Korea" }, - { "05B", "South Korea" }, - { "06A", "Southeast Asia / Hong Kong" }, - { "06B", "Southeast Asia / Hong Kong" }, - { "07A", "Taiwan" }, - { "07B", "Taiwan" }, - { "08A", "Russia, Ukraine, India, Central Asia" }, - { "08B", "Russia, Ukraine, India, Central Asia" }, - { "09A", "Mainland China" }, - { "09B", "Mainland China" }, - { "11A", "Mexico, Central America, South America" }, - { "11B", "Mexico, Central America, South America" }, - { "14A", "Mexico, Central America, South America" }, - { "14B", "Mexico, Central America, South America" }, - { "16A", "Europe / Middle East / Africa" }, - { "16B", "Europe / Middle East / Africa" }, - { "18A", "Singapore, Korea, Asia" }, - { "18B", "Singapore, Korea, Asia" } -}; -#endregion - -#region Display main menu -// Show the menu if showMenu is set to true -while (showMenu) -{ - showMenu = MainMenu(appTitle, regionMap); -} -#endregion - -#region Display sub menu for working with BIOS files -static void RunSubMenu(string appTitle, Dictionary regionMap) -{ - string pathToDump = ""; - bool subMenuRunning = true; - - while (subMenuRunning) - { - // Check to see if we are working with a file. If so, add it to the app title so the user is aware... - if(!string.IsNullOrEmpty(pathToDump)) - { - System.Console.Title = appTitle + " - Working with file: " + pathToDump; - } - - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("In order to work with a BIOS dump file, you will need to load it into memory first."); - System.Console.WriteLine("Be sure to choose a file to work with by choosing option 1 before choosing any other option..."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("Choose an option:"); - System.Console.ResetColor(); - System.Console.ForegroundColor = ConsoleColor.Green; - System.Console.WriteLine("1. Load a BIOS dump (.bin)"); - System.Console.ResetColor(); - System.Console.WriteLine("2. View BIOS information"); - System.Console.WriteLine("3. Convert to Digital edition"); - System.Console.WriteLine("4. Convert to Disc edition"); - System.Console.WriteLine("5. Convert to Slim edition"); - System.Console.WriteLine("6. Change serial number"); - System.Console.WriteLine("7. Change motherboard serial number"); - System.Console.WriteLine("8. Change console model number"); - System.Console.WriteLine("X. Return to previous menu"); - System.Console.Write("\nEnter your choice: "); - switch (System.Console.ReadLine()) - { - #region Load a dump file - case "1": - System.Console.WriteLine("In order to work with a BIOS file, you must first choose a file to work with."); - System.Console.WriteLine("This needs to be a valid .bin file containing your BIOS dump file."); - System.Console.WriteLine("You will need to know the full file path of your .bin file in order to continue."); - System.Console.WriteLine(); - - string userInput; - do - { - System.Console.Write("Enter the full file path (type 'exit' to quit): "); - userInput = System.Console.ReadLine().Trim(); // Trim to remove any leading/trailing whitespace - - if (string.IsNullOrWhiteSpace(userInput)) - { - System.Console.WriteLine("Invalid input. File path cannot be blank."); - } - else if (userInput.Equals("exit", StringComparison.OrdinalIgnoreCase)) - { - // User wants to return to the sub-menu - break; // Exit the current method and return to the sub-menu - } - else if (!File.Exists(userInput)) - { - System.Console.WriteLine("The file path you entered does not exist. Please enter the path to a valid .bin file."); - } - else if (Path.GetExtension(userInput) != ".bin") - { - System.Console.WriteLine("The file you provided is not a .bin file. Please enter a valid .bin file path."); - } - else - { - // User provided a valid .bin file path, you can proceed with it - pathToDump = userInput; - long length = new System.IO.FileInfo(pathToDump).Length; - System.Console.WriteLine("Selected file: " + pathToDump + " - File Size: " + length.ToString() + " bytes (" + length / 1024 / 1024 + "MB)"); - Thread.Sleep(1000); - break; // Exit the loop - } - } while (true); - break; - #endregion - #region View BIOS information - case "2": - // First check to confirm that we've selected a file to work with - if(!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it - { - // Let's try and get some information from the .bin file - long lengthBytes = new System.IO.FileInfo(pathToDump).Length; // File size of the .bin file in bytes - long lengthMB = lengthBytes / 1024 / 1024; // File size of the .bin file in MB - - // First, declare some variables to store for later use - string PS5Version; - string ConsoleModelInfo; - string ModelInfo; - string ConsoleSerialNumber; - string MotherboardSerialNumber; - string ConsoleModel; - string WiFiMac; - string LANMac; - - // Set the offsets of the BIN file - long offsetOne = 0x1c7010; - long offsetTwo = 0x1c7030; - long serialOffset = 0x1c7210; - long variantOffset = 0x1c7226; - long moboSerialOffset = 0x1C7200; - long WiFiMacOffset = 0x1C73C0; - long LANMacOffset = 0x1C4020; - - // Declare the offset values (set them to null for now) - string offsetOneValue = null; - string offsetTwoValue = null; - string serialValue = null; - string variantValue = null; - string moboSerialValue = null; - string WiFiMacValue = null; - string LANMacValue = null; - - #region Get PS5 version - try - { - BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = offsetOne; - //Read the offset - offsetOneValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - offsetOneValue = null; - } - - try - { - BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = offsetOne; - //Read the offset - offsetTwoValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - offsetTwoValue = null; - } - - if (offsetOneValue.Contains("22020101")) - { - PS5Version = "Disc Edition"; - } - else if (offsetTwoValue.Contains("22030101")) - { - PS5Version = "Digital Edition"; - } - else if (offsetOneValue.Contains("22010101") || offsetTwoValue.Contains("22010101")) - { - PS5Version = "Slim Edition"; - } - else - { - PS5Version = "Unknown Model"; - } - #endregion - - #region Get console model and region - try - { - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - reader.BaseStream.Position = variantOffset; - variantValue = BitConverter.ToString(reader.ReadBytes(19)).Replace("-", null).Replace("FF", null); - } - } - catch - { - // Catch any exceptions and ignore, setting variantValue to null - } - - ConsoleModelInfo = HexStringToString(variantValue); - - string region = "Unknown Region"; - if (ConsoleModelInfo != null && ConsoleModelInfo.Length >= 3) - { - string suffix = ConsoleModelInfo.Substring(ConsoleModelInfo.Length - 3); - if (regionMap.ContainsKey(suffix)) - { - region = regionMap[suffix]; - } - } - - ModelInfo = HexStringToString(variantValue) + " - " + region; - #endregion - - #region Get Console Serial Number - - try - { - BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = serialOffset; - //Read the offset - serialValue = BitConverter.ToString(reader.ReadBytes(17)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - serialValue = null; - } - - - - if (serialValue != null) - { - ConsoleSerialNumber = HexStringToString(serialValue); - ConsoleSerialNumber = HexStringToString(serialValue); - - } - else - { - ConsoleSerialNumber = "Unknown S/N"; - } - - #endregion - - #region Get Motherboard Serial Number - - try - { - BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = moboSerialOffset; - //Read the offset - moboSerialValue = BitConverter.ToString(reader.ReadBytes(16)).Replace("-", null); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - moboSerialValue = null; - } - - - - if (moboSerialValue != null) - { - MotherboardSerialNumber = HexStringToString(moboSerialValue); - } - else - { - MotherboardSerialNumber = "Unknown S/N"; - } - - #endregion - - #region Extract WiFi Mac Address - - try - { - BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = WiFiMacOffset; - //Read the offset - WiFiMacValue = BitConverter.ToString(reader.ReadBytes(6)); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - WiFiMacValue = null; - } - - if (WiFiMacValue != null) - { - WiFiMac = WiFiMacValue; - } - else - { - WiFiMac = "Unknown Mac Address"; - } - - #endregion - - #region Extract LAN Mac Address - - try - { - BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); - //Set the position of the reader - reader.BaseStream.Position = LANMacOffset; - //Read the offset - LANMacValue = BitConverter.ToString(reader.ReadBytes(6)); - reader.Close(); - } - catch - { - // Obviously this value is invalid, so null the value and move on - LANMacValue = null; - } - - if (LANMacValue != null) - { - LANMac = LANMacValue; - } - else - { - LANMac = "Unknown Mac Address"; - } - - #endregion - - #region Start show data for the BIOS dump - // Start showing the data we've found to the user - System.Console.WriteLine("File size: " + lengthBytes + " bytes (" + lengthMB + "MB)"); // The file size of the .bin file - System.Console.WriteLine("PS5 Version: " + PS5Version); // Show the version info (disc/digital/slim) - System.Console.WriteLine("Console Model: " + ModelInfo); // Show the console variant (CFI-XXXX) - System.Console.WriteLine("Console Serial Number: " + ConsoleSerialNumber); // Show the serial number. This serial is the one the disc drive would use - System.Console.WriteLine("Motherboard Serial Number: " + MotherboardSerialNumber); // Show the serial number to the motherboard. This is different to the console serial - System.Console.WriteLine("WiFi Mac Address: " + WiFiMac); // WiFi mac address - System.Console.WriteLine("LAN Mac Address: " + LANMac); // LAN mac address - // Just a blank line - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - #endregion - break; - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - #endregion - #region Convert to "Digital" edition - case "3": - // First check to confirm that we've selected a file to work with - if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it - { - bool confirmed = false; - while (!confirmed) - { - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Are you sure you want to set the console as \"Digital\" edition?"); - System.Console.ResetColor(); - - System.Console.WriteLine("Type 'yes' to confirm or 'no' to cancel."); - - string changeConfirmation = System.Console.ReadLine().Trim().ToLower(); - - // Check user input - if (changeConfirmation == "yes") - { - string PS5Version; // String to store the PS5 version - - // Declare offsets to obtain current version info - long offsetOne = 0x1c7010; - long offsetTwo = 0x1c7030; - string offsetOneValue = null; - string offsetTwoValue = null; - - // Get PS5 version - try - { - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - reader.BaseStream.Position = offsetOne; - offsetOneValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); - - reader.BaseStream.Position = offsetTwo; - offsetTwoValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); - } - } - catch (Exception ex) - { - // Handle any exceptions that occur while reading the file - System.Console.WriteLine("Error reading the binary file: " + ex.Message); - System.Console.WriteLine("Please try again! Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - - if (offsetOneValue.Contains("22030101") || offsetTwoValue.Contains("22030101")) - { - // The BIOS file already contains digital edition flags - System.Console.WriteLine("The .bin file you're working with is already a digital edition. No changes are needed."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - - confirmed = true; - break; - } - else - { - // Modify the values to set the file as "Digital Edition" - try - { - byte[] find = ConvertHexStringToByteArray(Regex.Replace("22010101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); - - byte[] bytes = File.ReadAllBytes(pathToDump); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - byte[] find2 = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace2 = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); - - foreach (int index in PatternAt(bytes, find2)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace2[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - System.Console.WriteLine("Your BIOS file has been updated successfully. The new .bin file will now report to"); - System.Console.WriteLine("the PlayStation 5 as a 'digital edition' console."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - catch (Exception ex) - { - // Handle any exceptions that occur while writing to the file - System.Console.WriteLine("Error updating the binary file: " + ex.Message); - System.Console.WriteLine("Please try again! Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - } - } - else if (changeConfirmation == "no") - { - // User cancelled. Break the loop and go back to the menu! - confirmed = true; - break; - } - else - { - System.Console.WriteLine("Invalid input. Please type 'yes' to confirm or 'no' to cancel."); - } - } - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - break; - - #endregion - #region Convert to "Disc" edition - case "4": - // First check to confirm that we've selected a file to work with - if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it - { - bool confirmed = false; - while (!confirmed) - { - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Are you sure you want to set the console as \"Disc\" edition?"); - System.Console.ResetColor(); - - System.Console.WriteLine("Type 'yes' to confirm or 'no' to cancel."); - - string changeConfirmation = System.Console.ReadLine().Trim().ToLower(); - - // Check user input - if (changeConfirmation == "yes") - { - string PS5Version; // String to store the PS5 version - - // Declare offsets to obtain current version info - long offsetOne = 0x1c7010; - long offsetTwo = 0x1c7030; - string offsetOneValue = null; - string offsetTwoValue = null; - - // Get PS5 version - try - { - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - reader.BaseStream.Position = offsetOne; - offsetOneValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); - - reader.BaseStream.Position = offsetTwo; - offsetTwoValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); - } - } - catch (Exception ex) - { - // Handle any exceptions that occur while reading the file - System.Console.WriteLine("Error reading the binary file: " + ex.Message); - System.Console.WriteLine("Please try again! Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - - if (offsetOneValue.Contains("22020101") || offsetTwoValue.Contains("22020101")) - { - // The BIOS file already contains disc edition flags - System.Console.WriteLine("The .bin file you're working with is already a disc edition. No changes are needed."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - - confirmed = true; - break; - } - else - { - // Modify the values to set the file as "Disc Edition" - try - { - byte[] find = ConvertHexStringToByteArray(Regex.Replace("22010101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); - - byte[] bytes = File.ReadAllBytes(pathToDump); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - byte[] find2 = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace2 = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); - - foreach (int index in PatternAt(bytes, find2)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace2[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - System.Console.WriteLine("Your BIOS file has been updated successfully. The new .bin file will now report to"); - System.Console.WriteLine("the PlayStation 5 as a 'disc edition' console."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - catch (Exception ex) - { - // Handle any exceptions that occur while writing to the file - System.Console.WriteLine("Error updating the binary file: " + ex.Message); - System.Console.WriteLine("Please try again! Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - } - } - else if (changeConfirmation == "no") - { - // User cancelled. Break the loop and go back to the menu! - confirmed = true; - break; - } - else - { - System.Console.WriteLine("Invalid input. Please type 'yes' to confirm or 'no' to cancel."); - } - } - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - break; - #endregion - #region Convert to "Slim" edition - case "5": - // First check to confirm that we've selected a file to work with - if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it - { - bool confirmed = false; - while (!confirmed) - { - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Are you sure you want to set the console as \"Slim\" edition?"); - System.Console.ResetColor(); - - System.Console.WriteLine("Type 'yes' to confirm or 'no' to cancel."); - - string changeConfirmation = System.Console.ReadLine().Trim().ToLower(); - - // Check user input - if (changeConfirmation == "yes") - { - string PS5Version; // String to store the PS5 version - - // Declare offsets to obtain current version info - long offsetOne = 0x1c7010; - long offsetTwo = 0x1c7030; - string offsetOneValue = null; - string offsetTwoValue = null; - - // Get PS5 version - try - { - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - reader.BaseStream.Position = offsetOne; - offsetOneValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); - - reader.BaseStream.Position = offsetTwo; - offsetTwoValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); - } - } - catch (Exception ex) - { - // Handle any exceptions that occur while reading the file - System.Console.WriteLine("Error reading the binary file: " + ex.Message); - System.Console.WriteLine("Please try again! Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - - if (offsetOneValue.Contains("22010101") || offsetTwoValue.Contains("22010101")) - { - // The BIOS file already contains slim edition flags - System.Console.WriteLine("The .bin file you're working with is already a slim edition. No changes are needed."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - - confirmed = true; - break; - } - else - { - // Modify the values to set the file as "Slim Edition" - try - { - byte[] find = ConvertHexStringToByteArray(Regex.Replace("22020101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace("22010101", "0x|[ ,]", string.Empty).Normalize().Trim()); - - byte[] bytes = File.ReadAllBytes(pathToDump); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - byte[] find2 = ConvertHexStringToByteArray(Regex.Replace("22030101", "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace2 = ConvertHexStringToByteArray(Regex.Replace("22010101", "0x|[ ,]", string.Empty).Normalize().Trim()); - - foreach (int index in PatternAt(bytes, find2)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace2[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - System.Console.WriteLine("Your BIOS file has been updated successfully. The new .bin file will now report to"); - System.Console.WriteLine("the PlayStation 5 as a 'slim edition' console."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - catch (Exception ex) - { - // Handle any exceptions that occur while writing to the file - System.Console.WriteLine("Error updating the binary file: " + ex.Message); - System.Console.WriteLine("Please try again! Press Enter to continue..."); - System.Console.ReadLine(); - confirmed = true; - break; - } - } - } - else if (changeConfirmation == "no") - { - // User cancelled. Break the loop and go back to the menu! - confirmed = true; - break; - } - else - { - System.Console.WriteLine("Invalid input. Please type 'yes' to confirm or 'no' to cancel."); - } - } - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - break; - #endregion - #region Change serial number - case "6": - if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it - { - // Create a true false to allow us to loop until the user changes the serial or cancels the operation - bool jobDone = false; - - while (!jobDone) - { - // Set the serial number offset and value - long serialOffset = 0x1c7210; - string oldSerial = null; - try - { - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - //Set the position of the reader - reader.BaseStream.Position = serialOffset; - //Read the offset - oldSerial = Encoding.UTF8.GetString(reader.ReadBytes(17)); - } - } - catch - { - // Obviously this value is invalid, so null the value and move on - oldSerial = null; - } - - bool newSerialValid = false; - while (!newSerialValid) - { - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Enter the new serial number you would like to save (type 'exit' to exit): "); - System.Console.ResetColor(); - - string newSerial = System.Console.ReadLine().Trim(); - - if (newSerial == "") - { - // The serial number is blank - System.Console.WriteLine("Invalid serial number entered. The new serial should be characters and letters."); - } - else if (newSerial == oldSerial) - { - System.Console.WriteLine("The new serial number matches the old serial number. Please enter a different value and try again..."); - } - else if (newSerial == "exit") - { - jobDone = true; - break; - } - else - { - try - { - byte[] existingFile; - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - // Get the contents of the dump into memory - existingFile = reader.ReadBytes((int)reader.BaseStream.Length); - } - - byte[] oldSerialBytes = Encoding.UTF8.GetBytes(oldSerial); - byte[] newSerialBytes = Encoding.UTF8.GetBytes(newSerial); - - // Ensure the new serial number is either padded or truncated to fit 17 characters - byte[] newSerialBytesPadded = new byte[17]; - Array.Copy(newSerialBytes, newSerialBytesPadded, Math.Min(newSerialBytes.Length, 17)); - - // Find the index of the old serial number in the file - int index = PatternAt(existingFile, oldSerialBytes).FirstOrDefault(); - - if (index != -1) - { - // Replace the old serial number with the new one - for (int i = 0; i < newSerialBytesPadded.Length; i++) - { - existingFile[index + i] = newSerialBytesPadded[i]; - } - - // Write modified bytes back to the file - using (BinaryWriter writer = new BinaryWriter(new FileStream(pathToDump, FileMode.Create))) - { - writer.Write(existingFile); - } - - System.Console.WriteLine("SUCCESS: The new serial number has been updated successfully. Press enter to continue..."); - System.Console.ReadLine(); - jobDone = true; - break; - } - else - { - System.Console.WriteLine("Failed to find the old serial number in the file. Aborting..."); - jobDone = true; - } - } - catch (System.ArgumentException ex) - { - // Something went wrong. Notify the user - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("An error occurred while attempting to make changes to your dump file. Please try again."); - System.Console.ResetColor(); - } - } - } - } - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - break; - #endregion - #region Change motherboard serial number - case "7": - if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it - { - // Declare variables to store console serial - long moboOffset = 0x1C7200; - string moboValue = null; - string MotherboardSerial; - - try - { - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - reader.BaseStream.Position = moboOffset; - moboValue = BitConverter.ToString(reader.ReadBytes(16)).Replace("-", null); - } - } - catch - { - // Catch any exceptions and ignore, setting MotherboardSerial to null - } - - MotherboardSerial = HexStringToString(moboValue); - - if (!string.IsNullOrEmpty(moboValue) != null && !string.IsNullOrEmpty(MotherboardSerial)) - { - // Create a loop to prevent the app from returning to the main menu - bool isDone = false; - while (!isDone) - { - // Show the current motherboard serial to the user - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Current motherboard serial: " + MotherboardSerial); - System.Console.ResetColor(); - - // Ask the user to enter the new serial number - System.Console.WriteLine("Please enter a new motherboard serial number (type 'exit' to go back): "); - - string newSerial = System.Console.ReadLine(); - - if (string.IsNullOrEmpty(newSerial)) - { - // The user did not enter a valid string - System.Console.WriteLine("Please enter a valid model number to continue..."); - } - else if (newSerial.Length != 16) - { - // The entered serial number is an invalid length - System.Console.WriteLine("The new motherboard serial you entered is invalid. The motherboard serial should be exactly 16 characters in length."); - } - else if (newSerial == "exit") - { - // The user wants to exit this menu - isDone = true; - break; - } - else - { - // Everything seems OK. Now we can change the serial number - try - { - byte[] oldSerial = Encoding.UTF8.GetBytes(MotherboardSerial); - string oldSerialHex = Convert.ToHexString(oldSerial); - - byte[] newSerialBytes = Encoding.UTF8.GetBytes(newSerial); - string newSerialHex = Convert.ToHexString(newSerialBytes); - - byte[] find = ConvertHexStringToByteArray(Regex.Replace(oldSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace(newSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - - byte[] bytes = File.ReadAllBytes(pathToDump); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - System.Console.WriteLine("The new motherboard serial number you entered been saved successfully."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - isDone = true; - break; - - } - catch (System.ArgumentException ex) - { - System.Console.WriteLine("An error occurred while writing to the BIOS dump. Please try again..." + ex.Message); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - isDone = true; - break; - } - } - } - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("Could not parse your selected .bin file. Please ensure your selected file is a valid PlayStation 5 file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - break; - #endregion - #region Change console model - case "8": - - if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it - { - // Declare variables to store console model - long variantOffset = 0x1c7226; - string variantValue = null; - string ConsoleModel; - - try - { - using (BinaryReader reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open))) - { - reader.BaseStream.Position = variantOffset; - variantValue = BitConverter.ToString(reader.ReadBytes(19)).Replace("-", null).Replace("FF", null); - } - } - catch - { - // Catch any exceptions and ignore, setting variantValue to null - } - - ConsoleModel = HexStringToString(variantValue); - - if(!string.IsNullOrEmpty(variantValue) != null && !string.IsNullOrEmpty(ConsoleModel)) - { - // Create a loop to prevent the app from returning to the main menu - bool isDone = false; - while (!isDone) - { - // Show the current model to the user - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Current model: " + ConsoleModel); - System.Console.ResetColor(); - - // Ask the user to enter the new model - System.Console.WriteLine("Please enter the model you would like to set your dump file to (type 'exit' to go back): "); - - string newModel = System.Console.ReadLine(); - - if (string.IsNullOrEmpty(newModel)) - { - // The user did not enter a valid string - System.Console.WriteLine("Please enter a valid model number to continue..."); - } else if (newModel.Length < 9) - { - // The entered model is an invalid length - System.Console.WriteLine("The new model you entered is invalid. The model should be 9 characters long starting with 'CFI-', followed by 4 numbers and a letter."); - }else if (!newModel.StartsWith("CFI-")) - { - System.Console.WriteLine("The new model you entered is invalid. The model should be 9 characters long starting with 'CFI-', followed by 4 numbers and a letter."); - }else if (newModel == "exit") - { - // The user wants to exit this menu - isDone = true; - break; - } - else - { - // Everything seems OK. Now we can change the model - try - { - byte[] oldModel = Encoding.UTF8.GetBytes(ConsoleModel); - string oldModelHex = Convert.ToHexString(oldModel); - - byte[] newModelBytes = Encoding.UTF8.GetBytes(newModel); - string newModelHex = Convert.ToHexString(newModelBytes); - - byte[] find = ConvertHexStringToByteArray(Regex.Replace(oldModelHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - byte[] replace = ConvertHexStringToByteArray(Regex.Replace(newModelHex, "0x|[ ,]", string.Empty).Normalize().Trim()); - - byte[] bytes = File.ReadAllBytes(pathToDump); - foreach (int index in PatternAt(bytes, find)) - { - for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) - { - bytes[i] = replace[replaceIndex]; - } - File.WriteAllBytes(pathToDump, bytes); - } - - System.Console.WriteLine("The new console model you chose has been saved successfully."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - isDone = true; - break; - - } - catch (System.ArgumentException ex) - { - System.Console.WriteLine("An error occurred while writing to the BIOS dump. Please try again..." + ex.Message); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - isDone = true; - break; - } - } - } - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("Could not parse your selected .bin file. Please ensure your selected file is a valid PlayStation 5 file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - - } - else - { - // No file has been selected. Let the user know - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); - System.Console.ResetColor(); - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - break; - } - break; - #endregion - #region Exit sub menu - // I put two cases here for the exit option, one for capital "X" and one for lower case. - case "X": - // We should reset the app title first! - System.Console.Title = appTitle; - subMenuRunning = false; - break; - case "x": - // We should reset the app title first! - System.Console.Title = appTitle; - subMenuRunning = false; - break; - #endregion - } - } - -} - #endregion - -#region Main -static bool MainMenu(string appTitle, Dictionary regionMap) -{ - - System.Console.Clear(); - ShowHeader(); - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.WriteLine("Choose an option:"); - System.Console.ResetColor(); - System.Console.WriteLine("1. Get error codes from PS5"); - System.Console.WriteLine("2. Clear error codes on PS5"); - System.Console.WriteLine("3. Enter custom UART command"); - System.Console.WriteLine("4. BIOS Dump Tools"); - System.Console.WriteLine("5. View readme guide"); - // Thanks for leaving this here! - System.Console.ForegroundColor = ConsoleColor.Green; - System.Console.WriteLine("6. Buy TheCod3r a coffee"); - System.Console.ResetColor(); - System.Console.WriteLine("7. Update error database"); - System.Console.WriteLine("X. Exit application"); - System.Console.ForegroundColor = ConsoleColor.Red; - System.Console.Write("\nEnter your choice: "); - System.Console.ResetColor(); - - #region Menu Options - switch (System.Console.ReadLine()) - { - #region Get Error Codes From PS5 - case "1": - // Declare a variable to store the selected COM port - string selectedPort; - // Declare a string array for a list of available port names - string[] ports = SerialPort.GetPortNames(); - - // No COM ports found. Let the user know and go back to the main menu - if (ports.Length == 0) - { - System.Console.WriteLine("No communication devices were found on this system."); - System.Console.WriteLine("Please insert a UART compatible device and try again."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - return true; - } - - // Devices were found. Iterate through and present them in the form of a menu - System.Console.WriteLine("Available devices:"); - for (int i = 0; i < ports.Length; i++) - { - string friendlyName = GetFriendlyName(ports[i]); - System.Console.WriteLine($"{i + 1}. {ports[i]} - {friendlyName}"); - } - - // Declare an integer for the index of the selected port - int selectedPortIndex; - // Add each port to the ports array - do - { - System.Console.WriteLine(""); - System.Console.Write("Enter the number of the COM port you want to use: "); - } while (!int.TryParse(System.Console.ReadLine(), out selectedPortIndex) || selectedPortIndex < 1 || selectedPortIndex > ports.Length); - - // Get the selected port and store it inside the selectedPort string - selectedPort = ports[selectedPortIndex - 1]; - - // Select and lock the chosen device - SerialPort serialPort = new SerialPort(selectedPort); - // Configure settings for the selected device - serialPort.BaudRate = 115200; // The PS5 requires a BAUD rate of 115200 - serialPort.RtsEnable = true; // We need to enable ready to send (RTS) mode - // Now we can get a list of error codes. We're going to wrap this in a try loop to prevent unexpected crashes - try - { - // Open the selected port for use - serialPort.Open(); - // Let's display the selected port (change the color to blue) so the user is aware of what device is in use - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Selected port: " + GetFriendlyName(selectedPort)); - // Reset the foreground color to default before proceeding - System.Console.ResetColor(); - - // Let's start grabbing error codes from the PS5 - int loopLimit = 10; - // Create a list to store error codes in - List UARTLines = new(); - - // When grabbing error codes, we want to grab the first 10 errors from the system. Let's create a loop - for (var i = 0; i <= loopLimit; i++) - { - // Create a command variable depending on what number we're at in the loop (where "i" is the current number) - var command = $"errlog {i}"; - // Add the checksum to the command - var checksum = CalculateChecksum(command); - // Send the current command to the UART device - serialPort.WriteLine(checksum); - - // Read the UART response - var line = serialPort.ReadLine(); - - // Ensure we have a valid response, then add it to the errors list - if (!string.Equals($"{command}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) - { - if (!line.Contains("errlog")) - { - // Let's make sure we haven't already added the same error code to the error list - // This way we only show each error code once and keep the output window clean - if (!UARTLines.Contains(line)) - { - UARTLines.Add(line); - } - } - } - } - - // Now let's iterate through the lines and show them to the user - foreach (var l in UARTLines) - { - var split = l.Split(' '); - if (!split.Any()) continue; - switch (split[0]) - { - case "NG": - break; - case "OK": - var errorCode = split[2]; - if (errorCode.StartsWith("FFFFFF")) - { - // The returned code is blank - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("No error displayed"); - System.Console.ResetColor(); - } - else - { - // Now that the error code has been isolated from the rest of the junk sent by the system - // let's check it against the database. The error database will need to return XML results - System.Console.ForegroundColor = ConsoleColor.Green; - string errorResult = ParseErrors(errorCode); - System.Console.WriteLine(errorResult); - System.Console.ResetColor(); - } - break; - default: - break; - } - } - - // Wait for user input - System.Console.WriteLine(""); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - - // Before exiting, close and free up the selected device - serialPort.Close(); - } - catch (Exception ex) - { - System.Console.WriteLine("An error occurred while connecting to your selected device."); - System.Console.WriteLine("Error details:"); - System.Console.WriteLine(ex.Message); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - } - - return true; - #endregion - #region Clear UART codes - case "2": - // Declare a string array for a list of available port names - ports = SerialPort.GetPortNames(); - - // No COM ports found. Let the user know and go back to the main menu - if (ports.Length == 0) - { - System.Console.WriteLine("No communication devices were found on this system."); - System.Console.WriteLine("Please insert a UART compatible device and try again."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - return true; - } - - // Devices were found. Iterate through and present them in the form of a menu - System.Console.WriteLine("Available devices:"); - for (int i = 0; i < ports.Length; i++) - { - string friendlyName = GetFriendlyName(ports[i]); - System.Console.WriteLine($"{i + 1}. {ports[i]} - {friendlyName}"); - } - - // Add each port to the ports array - do - { - System.Console.WriteLine(""); - System.Console.Write("Enter the number of the COM port you want to use: "); - } while (!int.TryParse(System.Console.ReadLine(), out selectedPortIndex) || selectedPortIndex < 1 || selectedPortIndex > ports.Length); - - // Get the selected port and store it inside the selectedPort string - selectedPort = ports[selectedPortIndex - 1]; - - // Select and lock the chosen device - serialPort = new SerialPort(selectedPort); - // Configure settings for the selected device - serialPort.BaudRate = 115200; // The PS5 requires a BAUD rate of 115200 - serialPort.RtsEnable = true; // We need to enable ready to send (RTS) mode - // Now we can wipe the error codes. We're going to wrap this in a try loop to prevent unexpected crashes - try - { - // Open the selected port for use - serialPort.Open(); - // Let's display the selected port (change the color to blue) so the user is aware of what device is in use - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Selected port: " + GetFriendlyName(selectedPort)); - // Reset the foreground color to default before proceeding - System.Console.ResetColor(); - - var checksum = CalculateChecksum("errlog clear"); - serialPort.WriteLine(checksum); - - List UARTLines = new(); - - do - { - var line = serialPort.ReadLine(); - UARTLines.Add(line); - } while (serialPort.BytesToRead != 0); - - foreach (var l in UARTLines) - { - System.Console.WriteLine(l); - } - - System.Console.WriteLine("Press Enter to continue..."); - - // Job done. Continue - System.Console.ReadLine(); - - // Before exiting, close and free up the selected device - serialPort.Close(); - } - catch (Exception ex) - { - System.Console.WriteLine("An error occurred while connecting to your selected device."); - System.Console.WriteLine("Error details:"); - System.Console.WriteLine(ex.Message); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - } - return true; - #endregion - #region Custom UART command - case "3": - // Declare a string array for a list of available port names - ports = SerialPort.GetPortNames(); - - // No COM ports found. Let the user know and go back to the main menu - if (ports.Length == 0) - { - System.Console.WriteLine("No communication devices were found on this system."); - System.Console.WriteLine("Please insert a UART compatible device and try again."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - return true; - } - - // Devices were found. Iterate through and present them in the form of a menu - System.Console.WriteLine("Available devices:"); - for (int i = 0; i < ports.Length; i++) - { - string friendlyName = GetFriendlyName(ports[i]); - System.Console.WriteLine($"{i + 1}. {ports[i]} - {friendlyName}"); - } - - // Add each port to the ports array - do - { - System.Console.WriteLine(""); - System.Console.Write("Enter the number of the COM port you want to use: "); - } while (!int.TryParse(System.Console.ReadLine(), out selectedPortIndex) || selectedPortIndex < 1 || selectedPortIndex > ports.Length); - - // Get the selected port and store it inside the selectedPort string - selectedPort = ports[selectedPortIndex - 1]; - - // Select and lock the chosen device - serialPort = new SerialPort(selectedPort); - // Configure settings for the selected device - serialPort.BaudRate = 115200; // The PS5 requires a BAUD rate of 115200 - serialPort.RtsEnable = true; // We need to enable ready to send (RTS) mode - - // Now we can run the custom command. We're going to wrap this in a try loop to prevent unexpected crashes - try - { - // Open the selected port for use - serialPort.Open(); - // Let's display the selected port (change the color to blue) so the user is aware of what device is in use - System.Console.ForegroundColor = ConsoleColor.Blue; - System.Console.WriteLine("Selected port: " + GetFriendlyName(selectedPort)); - // Reset the foreground color to default before proceeding - System.Console.ResetColor(); - - while (true) // Loop until user provides a valid command or 'exit' - { - // Ask the user for their custom UART command - System.Console.Write("Please enter a custom command to send (type exit to quit): "); - // Get the command which the user entered - string UARTCommand = System.Console.ReadLine(); - - // If the user types exit, we want to return to the main menu - if (UARTCommand == "exit") - { - break; // Exit the while loop and return to the main menu - } - else if (!string.IsNullOrEmpty(UARTCommand)) // If the command is not empty or null - { - var checksum = CalculateChecksum(UARTCommand); - serialPort.WriteLine(checksum); - - List UARTLines = new(); - - do - { - var line = serialPort.ReadLine(); - UARTLines.Add(line); - } while (serialPort.BytesToRead != 0); - - foreach (var l in UARTLines) - { - System.Console.WriteLine(l); - } - - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - } - else - { - // The user didn't type anything. We need to ask them to type their command again! - System.Console.WriteLine("Please enter a valid command."); - } - } - - // Before exiting, close and free up the selected device - serialPort.Close(); - } - catch (Exception ex) - { - System.Console.WriteLine("An error occurred while connecting to your selected device."); - System.Console.WriteLine("Error details:"); - System.Console.WriteLine(ex.Message); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - } - return true; - #endregion - #region BIOS Dump Tools (Sub Menu) - case "4": - // This is a sub menu for working with BIOS files. IMO it's not very elegant to have sub menus but at least this way - // we don't have to use different apps for working with BIOS files... - - RunSubMenu(appTitle, regionMap); - return true; - #endregion - #region Launch readme - case "5": - System.Console.WriteLine("UARL-CL is designed with simplicity in mind. This command line application makes it quick and easy"); - System.Console.WriteLine("to obtain error codes from your PlayStation 5 console."); - System.Console.WriteLine("UART stands for Universal Asynchronous Receiver-Transmitter. UART allows you to send and receive commands"); - System.Console.WriteLine("to any compatible serial communications device."); - System.Console.WriteLine(); - System.Console.WriteLine("The PlayStation 5 has UART functionality built in. Unfortunately Sony don't make it easy to understand what"); - System.Console.WriteLine("is happening with the machine when you request error codes, which is why this application exists. UART-CL is"); - System.Console.WriteLine("a command-line spin off to the PS5 NOR and UART tool for Windows, which allows you to communicate via serial"); - System.Console.WriteLine("to your PlayStation 5. You can grab error codes from the system at the click of a button (well, a few clicks)"); - System.Console.WriteLine("and the software will automatically check the error codes received and attempt to convert them into plain text."); - System.Console.WriteLine("This is done by splitting the error codes up into useful sections and then comparing those error codes against a"); - System.Console.WriteLine("database of codes collected by the repair community. If the code exists in the database, the application will"); - System.Console.WriteLine("automatically grab the error details and output them for you on the screen so you can figure out your next move."); - System.Console.WriteLine(""); - System.Console.WriteLine("Where does the database come from?"); - System.Console.WriteLine("The database is downloaded on first launch from uartcodes.com/xml.php. The download page is hosted by \"TheCod3r\""); - System.Console.WriteLine("for free and is simply a PHP script which fetches all known error codes from the uartcodes.com database and converts"); - System.Console.WriteLine("them into an XML document. An XML document makes it quick and easy to work with and it's a more elegant solution to"); - System.Console.WriteLine("provide a database which doesn't rely on an internet connection. It can also be updated whenever you like, free of charge."); - System.Console.WriteLine(""); - System.Console.WriteLine("How do I use this to fix my PS5?"); - System.Console.WriteLine("You'll need a compatible serial communication (UART) device first of all. Most devices that have a transmit, receive, and"); - System.Console.WriteLine("ground pin and that can provide 3.3v instead of 5v should work, and you can buy one for a few bucks on eBay, Amazon or AliExpress."); - System.Console.WriteLine(""); - System.Console.WriteLine("Once you have a compatible device, you'll need to:"); - System.Console.WriteLine("Solder the transmit pin on the device to the receive pin on the PS5."); - System.Console.WriteLine("Solder the receive pin on the device to the transmit pin on the PS5."); - System.Console.WriteLine("Solder ground on the device to ground on the PS5."); - System.Console.WriteLine("Connect the PS5 power chord to the PS5 power supply (do not turn on the console)"); - System.Console.WriteLine("Use this software and select either option 1, 2 or 3 to run commands."); - System.Console.WriteLine("Choose your device from the list of available devices."); - System.Console.WriteLine("Let the software do the rest. Then working out a plan for the actual repair is up to you. We can't do everything ;)"); - System.Console.WriteLine(""); - System.Console.WriteLine("As a personal note from myself (TheCod3r). I want to thank you for trusting my software. I'm an electronics technician primarily"); - System.Console.WriteLine("and I write code for fun (ironic since my name is TheCod3r, I know!). I would also like to thank the following people for inspiring me:"); - System.Console.WriteLine(""); - System.Console.WriteLine("Louis Rossmann, FightToRepair.org, Jessa Jones (iPad Rehab), Andy-Man (PS5 Wee Tools), my YouTube viewers, my Patreon supporters and my mom!"); - System.Console.WriteLine(""); - System.Console.WriteLine("#FuckBwE"); - System.Console.WriteLine("Be sure to use the hashtag. It really pisses him off!"); - - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - return true; - #endregion - #region Buy me a coffee - case "6": - // Thanks for buying me a coffee :) - System.Console.WriteLine("Thanks for buying me a coffee. I'll redirect you in your default browser..."); - OpenUrl("https://www.streamelements.com/thecod3r/tip"); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - return true; - #endregion - #region Update XML database - case "7": - System.Console.WriteLine("Downloading latest database file. Please wait..."); - - bool success = DownloadDatabase("http://uartcodes.com/xml.php", "errorDB.xml"); - - if (success) - { - System.Console.WriteLine("Database downloaded successfully..."); - System.Console.WriteLine("Press Enter to continue..."); - } - else - { - System.Console.WriteLine("Could not download the latest database file. Please ensure you're connected to the internet!"); - System.Console.WriteLine("Press Enter to continue..."); - } - System.Console.ReadLine(); - return true; - default: - System.Console.WriteLine("Invalid choice. Please try again."); - System.Console.WriteLine("Press Enter to continue..."); - System.Console.ReadLine(); - return true; - #endregion - #region Exit Application - case "X": - // Run the exit environment command to close the application - Environment.Exit(0); - return true; - case "x": - // Run the exit environment command to close the application - Environment.Exit(0); - return true; - #endregion - } - #endregion -} +using UART_CL_By_TheCod3r.UARTMenu; +using UART_CL_By_TheCod3r.Utilities; + +#region Reminders (remove before publishing) +// Add check inside sub menu to confirm that the selected .bin file is a valid PS5 dump +#endregion + +// Set the name of the application +string appTitle = "UART-CL by TheCod3r"; + +var showMenu = false; + +// Set the application title +Console.Title = appTitle; + +#region Check if error database exists +// Let's check and see if the database exists. If not, download it! +if (!File.Exists("errorDB.xml")) +{ + PS5UARTUtilities.ShowHeader(); + Console.WriteLine("Downloading latest database file. Please wait..."); + + bool success = PS5UARTUtilities.DownloadDatabase("http://uartcodes.com/xml.php", "errorDB.xml"); + + if (success) + { + Console.WriteLine("Database downloaded successfully..."); + showMenu = true; + } + else + { + Console.WriteLine("Could not download the latest database file. Please ensure you're connected to the internet!"); + Environment.Exit(0); + } +} +else +{ + // The database file exists. Continue to the main menu + showMenu = true; +} +#endregion + +#region Map suffixes to regions (for console variant) +// Define a dictionary to map suffixes to regions +var regionMap = new Dictionary +{ + { "00A", "Japan" }, + { "00B", "Japan" }, + { "01A", "US, Canada, (North America)" }, + { "01B", "US, Canada, (North America)" }, + { "15A", "US, Canada, (North America)" }, + { "15B", "US, Canada, (North America)" }, + { "02A", "Australia / New Zealand, (Oceania)" }, + { "02B", "Australia / New Zealand, (Oceania)" }, + { "03A", "United Kingdom / Ireland" }, + { "03B", "United Kingdom / Ireland" }, + { "04A", "Europe / Middle East / Africa" }, + { "04B", "Europe / Middle East / Africa" }, + { "05A", "South Korea" }, + { "05B", "South Korea" }, + { "06A", "Southeast Asia / Hong Kong" }, + { "06B", "Southeast Asia / Hong Kong" }, + { "07A", "Taiwan" }, + { "07B", "Taiwan" }, + { "08A", "Russia, Ukraine, India, Central Asia" }, + { "08B", "Russia, Ukraine, India, Central Asia" }, + { "09A", "Mainland China" }, + { "09B", "Mainland China" }, + { "11A", "Mexico, Central America, South America" }, + { "11B", "Mexico, Central America, South America" }, + { "14A", "Mexico, Central America, South America" }, + { "14B", "Mexico, Central America, South America" }, + { "16A", "Europe / Middle East / Africa" }, + { "16B", "Europe / Middle East / Africa" }, + { "18A", "Singapore, Korea, Asia" }, + { "18B", "Singapore, Korea, Asia" } +}; +#endregion + +#region Display main menu +// Show the menu if showMenu is set to true +while (showMenu) +{ + showMenu = MainMenu(appTitle, regionMap); +} +#endregion + +#region Main +static bool MainMenu(string appTitle, Dictionary regionMap) +{ + return UARTMenuService.MainMenu(appTitle, regionMap); +} #endregion \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml index bd9b02b..21f09ec 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml @@ -1,39 +1,39 @@ - + - - - 2 - 1.1.0.* - True - Release - True - False - true - True - Disk - True - False - True - False - Any CPU - UART-CL - bin\Release\net6.0\publish\ - bin\Release\net6.0\publish\ - TheCod3r - ClickOnce - False - True - win-x64 - True - (none) - False - net6.0 - False - Foreground - False - Publish.html - True|2024-04-28T21:23:14.6592026Z; - +--> + + + 2 + 1.1.0.* + True + Release + True + False + true + True + Disk + True + False + True + False + Any CPU + UART-CL + bin\Release\net6.0\publish\ + bin\Release\net6.0\publish\ + TheCod3r + ClickOnce + False + True + win-x64 + True + (none) + False + net6.0 + False + Foreground + False + Publish.html + True|2024-04-28T21:23:14.6592026Z; + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml.user b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml.user index 06d5275..c76ec2a 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml.user +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/ClickOnceProfile.pubxml.user @@ -1,10 +1,10 @@ - + - - - True|2024-04-28T21:28:11.6019250Z;True|2024-04-28T22:23:14.6592026+01:00; - - +--> + + + True|2024-04-28T21:28:11.6019250Z;True|2024-04-28T22:23:14.6592026+01:00; + + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml index 6a06ec5..de94b23 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml @@ -1,18 +1,18 @@ - + - - - Release - Any CPU - bin\Release\net6.0\publish\linux-x64\ - FileSystem - <_TargetId>Folder - net6.0 - linux-x64 - true - true - false - +--> + + + Release + Any CPU + bin\Release\net6.0\publish\linux-x64\ + FileSystem + <_TargetId>Folder + net6.0 + linux-x64 + true + true + false + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml.user b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml.user index 49493e8..c09c61c 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -1,6 +1,6 @@ - + - +--> + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml index 6a06ec5..de94b23 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml @@ -1,18 +1,18 @@ - + - - - Release - Any CPU - bin\Release\net6.0\publish\linux-x64\ - FileSystem - <_TargetId>Folder - net6.0 - linux-x64 - true - true - false - +--> + + + Release + Any CPU + bin\Release\net6.0\publish\linux-x64\ + FileSystem + <_TargetId>Folder + net6.0 + linux-x64 + true + true + false + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml.user b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml.user index 95a4630..29cc499 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml.user +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile1.pubxml.user @@ -1,10 +1,10 @@ - + - - - True|2024-04-28T21:03:32.2559262Z;True|2024-04-27T00:21:15.8137671+01:00; - - +--> + + + True|2024-04-28T21:03:32.2559262Z;True|2024-04-27T00:21:15.8137671+01:00; + + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml index 34d5e59..154e035 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml @@ -1,13 +1,13 @@ - + - - - Release - Any CPU - bin\Release\net6.0\publish\ - FileSystem - <_TargetId>Folder - +--> + + + Release + Any CPU + bin\Release\net6.0\publish\ + FileSystem + <_TargetId>Folder + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml.user b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml.user index 2dd8787..e9ea52e 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml.user +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Properties/PublishProfiles/FolderProfile2.pubxml.user @@ -1,6 +1,6 @@ - + - +--> + diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/SubMenu/SubMenuHelper.cs b/UART-CL By TheCod3r/UART-CL By TheCod3r/SubMenu/SubMenuHelper.cs new file mode 100644 index 0000000..6046c3b --- /dev/null +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/SubMenu/SubMenuHelper.cs @@ -0,0 +1,913 @@ +using System.Text; +using System.Text.RegularExpressions; +using UART_CL_By_TheCod3r.Utilities; + +namespace UART_CL_By_TheCod3r.SubMenu; + +public class SubMenuHelper +{ + public static string LoadDumpFile(Func? readLine = null, + Action? writeLine = null, + Func? fileExists = null, + Func? getExtension = null, + Action? sleep = null) + { + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + fileExists ??= File.Exists; + getExtension ??= Path.GetExtension; + sleep ??= Thread.Sleep; + + writeLine("In order to work with a BIOS file, you must first choose a file to work with."); + writeLine("This needs to be a valid .bin file containing your BIOS dump file."); + writeLine("You will need to know the full file path of your .bin file in order to continue."); + writeLine(""); + + string? pathToDump; + do + { + writeLine("Enter the full file path (type 'exit' to quit): "); + pathToDump = readLine()?.Trim(); // Trim to remove any leading/trailing whitespace + + if (string.IsNullOrWhiteSpace(pathToDump)) + { + writeLine("Invalid input. File path cannot be blank."); + } + else if (pathToDump.Equals("exit", StringComparison.OrdinalIgnoreCase)) + { + // Reset the file path so the app does not think that "exit" is the path + pathToDump = null; + // User wants to return to the sub-menu + break; // Exit the current method and return to the sub-menu + } + else if (!fileExists(pathToDump)) + { + writeLine("The file path you entered does not exist. Please enter the path to a valid .bin file."); + } + else if (getExtension(pathToDump) != ".bin") + { + writeLine("The file you provided is not a .bin file. Please enter a valid .bin file path."); + } + else + { + // User provided a valid .bin file path, you can proceed with it + var length = new FileInfo(pathToDump).Length; + writeLine($"Selected file: {pathToDump} - File Size: {length} bytes ({length / 1024 / 1024}MB)"); + sleep(1000); + break; // Exit the loop + } + } while (true); + + return pathToDump!; + } + + public static void ViewBIOSInformaition(Dictionary regionMap, + string pathToDump, + Action? writeLine = null, + Func? readLine = null) + { + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + + // Let's try and get some information from the .bin file + var lengthBytes = new FileInfo(pathToDump).Length; // File size of the .bin file in bytes + var lengthMB = lengthBytes / 1024 / 1024; // File size of the .bin file in MB + + // First, declare some variables to store for later use + string? pS5Version; + string? consoleModelInfo; + string? modelInfo; + string? consoleSerialNumber; + string? motherboardSerialNumber; + + // Set the offsets of the BIN file + long offsetOne = 0x1c7010; + long serialOffset = 0x1c7210; + long variantOffset = 0x1c7226; + long moboSerialOffset = 0x1C7200; + long wiFiMacOffset = 0x1C73C0; + long lANMacOffset = 0x1C4020; + string? variantValue = null; + + // Declare the offset values (set them to null for now) + string? offsetOneValue; + string? offsetTwoValue; + string? serialValue; + string? moboSerialValue; + string? wiFiMacValue; + string? lANMacValue; + + #region Get PS5 version + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = offsetOne; + //Read the offset + offsetOneValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + offsetOneValue = null; + } + + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = offsetOne; + //Read the offset + offsetTwoValue = BitConverter.ToString(reader.ReadBytes(12)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + offsetTwoValue = null; + } + + if (offsetOneValue.Contains("22020101")) + { + pS5Version = "Disc Edition"; + } + else if (offsetTwoValue.Contains("22030101")) + { + pS5Version = "Digital Edition"; + } + else if (offsetOneValue.Contains("22010101") || offsetTwoValue.Contains("22010101")) + { + pS5Version = "Slim Edition"; + } + else + { + pS5Version = "Unknown Model"; + } + #endregion + + #region Get console model and region + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + reader.BaseStream.Position = variantOffset; + variantValue = BitConverter.ToString(reader.ReadBytes(19)).Replace("-", null).Replace("FF", null); + } + catch + { + // Catch any exceptions and ignore, setting variantValue to null + variantValue = null; + } + + consoleModelInfo = PS5UARTUtilities.HexStringToString(variantValue); + var region = "Unknown Region"; + + if (consoleModelInfo != null && consoleModelInfo.Length >= 3) + { + var suffix = consoleModelInfo[^3..]; + if (regionMap.ContainsKey(suffix)) + { + region = regionMap[suffix]; + } + } + + modelInfo = $"{PS5UARTUtilities.HexStringToString(variantValue)} - {region}"; + #endregion + + #region Get Console Serial Number + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = serialOffset; + //Read the offset + serialValue = BitConverter.ToString(reader.ReadBytes(17)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + serialValue = null; + } + + consoleSerialNumber = !string.IsNullOrEmpty(serialValue) ? PS5UARTUtilities.HexStringToString(serialValue) : "Unknown S/N"; + #endregion + + #region Get Motherboard Serial Number + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = moboSerialOffset; + //Read the offset + moboSerialValue = BitConverter.ToString(reader.ReadBytes(16)).Replace("-", null); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + moboSerialValue = null; + } + + motherboardSerialNumber = !string.IsNullOrEmpty(moboSerialValue) ? PS5UARTUtilities.HexStringToString(moboSerialValue) : "Unknown S/N"; + #endregion + + #region Extract WiFi Mac Address + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = wiFiMacOffset; + //Read the offset + wiFiMacValue = BitConverter.ToString(reader.ReadBytes(6)); + reader.Close(); + } + catch + { + // Obviously this value is invalid, so null the value and move on + wiFiMacValue = null; + } + + if (string.IsNullOrEmpty(wiFiMacValue)) + { + wiFiMacValue = "Unknown Mac Address"; + } + #endregion + + #region Extract LAN Mac Address + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = lANMacOffset; + //Read the offset + lANMacValue = BitConverter.ToString(reader.ReadBytes(6)); + reader.Close(); + } + catch + { + lANMacValue = null; + } + + if (string.IsNullOrEmpty(lANMacValue)) + { + lANMacValue = "Unknown Mac Address"; + } + #endregion + + #region Start show data for the BIOS dump + // Start showing the data we've found to the user + writeLine($"File size: {lengthBytes} bytes ({lengthMB}MB)"); // The file size of the .bin file + writeLine($"PS5 Version: {pS5Version}"); // Show the version info (disc/digital/slim) + writeLine($"Console Model: {modelInfo}"); // Show the console variant (CFI-XXXX) + writeLine($"Console Serial Number: {consoleSerialNumber}"); // Show the serial number. This serial is the one the disc drive would use + writeLine($"Motherboard Serial Number: {motherboardSerialNumber}"); // Show the serial number to the motherboard. This is different to the console serial + writeLine($"WiFi Mac Address: {wiFiMacValue}"); // WiFi mac address + writeLine($"LAN Mac Address: {lANMacValue}"); // LAN mac address + writeLine(""); // A blank line + writeLine("Press Enter to continue..."); + readLine(); + #endregion + } + + public static void ConvertToDigital(string pathToDump, + Func confirmPrompt = null, + Action writeLine = null, + Func readLine = null, + Action convertConsoleType = null) + { + confirmPrompt ??= ConfirmConsoleTypeChange; + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + convertConsoleType ??= ConvertConsoleType; + + var confirmed = false; + while (!confirmed) + { + var changeConfirmation = confirmPrompt("Digital"); + + // Check user input + if (changeConfirmation == "yes") + { + // Declare offsets to obtain current version info + long offsetOne = 0x1c7010; + long offsetTwo = 0x1c7030; + string offsetOneValue = null; + string offsetTwoValue = null; + + // Get PS5 version + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + reader.BaseStream.Position = offsetOne; + offsetOneValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); + + reader.BaseStream.Position = offsetTwo; + offsetTwoValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); + } + catch (Exception ex) + { + // Handle any exceptions that occur while reading the file + writeLine($"Error reading the binary file: {ex.Message}"); + writeLine("Please try again! Press Enter to continue..."); + readLine(); + break; + } + + if (offsetOneValue.Contains("22030101") || offsetTwoValue.Contains("22030101")) + { + // The BIOS file already contains digital edition flags + writeLine("The .bin file you're working with is already a digital edition. No changes are needed."); + writeLine("Press Enter to continue..."); + readLine(); + break; + } + else + { + // Modify the values to set the file as "Digital Edition" + try + { + convertConsoleType("22010101", "22030101", "22020101", "22030101", "digital edition", pathToDump); + confirmed = true; + break; + } + catch (Exception ex) + { + // Handle any exceptions that occur while writing to the file + writeLine($"Error updating the binary file: {ex.Message}"); + writeLine("Please try again! Press Enter to continue..."); + readLine(); + break; + } + } + } + else if (changeConfirmation == "no") + { + // User cancelled. Break the loop and go back to the menu! + break; + } + else + { + writeLine("Invalid input. Please type 'yes' to confirm or 'no' to cancel."); + } + } + } + + public static void ConvertToDisc(string pathToDump, + Func confirmPrompt = null, + Action writeLine = null, + Func readLine = null, + Action convertConsoleType = null) + { + confirmPrompt ??= ConfirmConsoleTypeChange; + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + convertConsoleType ??= ConvertConsoleType; + + var confirmed = false; + while (!confirmed) + { + var changeConfirmation = confirmPrompt("Disc"); + + // Check user input + if (changeConfirmation == "yes") + { + // Declare offsets to obtain current version info + long offsetOne = 0x1c7010; + long offsetTwo = 0x1c7030; + string offsetOneValue = null; + string offsetTwoValue = null; + + // Get PS5 version + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + reader.BaseStream.Position = offsetOne; + offsetOneValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); + + reader.BaseStream.Position = offsetTwo; + offsetTwoValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); + } + catch (Exception ex) + { + // Handle any exceptions that occur while reading the file + writeLine("Error reading the binary file: " + ex.Message); + writeLine("Please try again! Press Enter to continue..."); + readLine(); + break; + } + + if (offsetOneValue.Contains("22020101") || offsetTwoValue.Contains("22020101")) + { + // The BIOS file already contains disc edition flags + writeLine("The .bin file you're working with is already a disc edition. No changes are needed."); + writeLine("Press Enter to continue..."); + readLine(); + break; + } + else + { + // Modify the values to set the file as "Disc Edition" + try + { + convertConsoleType("22010101", "22020101", "22030101", "22020101", "disc edition", pathToDump); + confirmed = true; + break; + } + catch (Exception ex) + { + // Handle any exceptions that occur while writing to the file + writeLine("Error updating the binary file: " + ex.Message); + writeLine("Please try again! Press Enter to continue..."); + readLine(); + break; + } + } + } + else if (changeConfirmation == "no") + { + // User cancelled. Break the loop and go back to the menu! + break; + } + else + { + writeLine("Invalid input. Please type 'yes' to confirm or 'no' to cancel."); + } + } + } + + public static void ConvertToSlim(string pathToDump, + Func confirmPrompt = null, + Action writeLine = null, + Func readLine = null, + Action convertConsoleType = null) + { + confirmPrompt ??= ConfirmConsoleTypeChange; + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + convertConsoleType ??= ConvertConsoleType; + + var confirmed = false; + while (!confirmed) + { + var changeConfirmation = confirmPrompt("Slim"); + + // Check user input + if (changeConfirmation == "yes") + { + string PS5Version; // String to store the PS5 version + + // Declare offsets to obtain current version info + long offsetOne = 0x1c7010; + long offsetTwo = 0x1c7030; + string offsetOneValue = null; + string offsetTwoValue = null; + + // Get PS5 version + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + reader.BaseStream.Position = offsetOne; + offsetOneValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); + + reader.BaseStream.Position = offsetTwo; + offsetTwoValue = BitConverter.ToString(reader.ReadBytes(4)).Replace("-", string.Empty); + } + catch (Exception ex) + { + // Handle any exceptions that occur while reading the file + writeLine("Error reading the binary file: " + ex.Message); + writeLine("Please try again! Press Enter to continue..."); + readLine(); + break; + } + + if (offsetOneValue.Contains("22010101") || offsetTwoValue.Contains("22010101")) + { + // The BIOS file already contains slim edition flags + writeLine("The .bin file you're working with is already a slim edition. No changes are needed."); + writeLine("Press Enter to continue..."); + readLine(); + break; + } + else + { + // Modify the values to set the file as "Slim Edition" + try + { + convertConsoleType("22020101", "22010101", "22030101", "22010101", "slim edition", pathToDump); + confirmed = true; + break; + } + catch (Exception ex) + { + // Handle any exceptions that occur while writing to the file + writeLine("Error updating the binary file: " + ex.Message); + writeLine("Please try again! Press Enter to continue..."); + readLine(); + break; + } + } + } + else if (changeConfirmation == "no") + { + // User cancelled. Break the loop and go back to the menu! + break; + } + else + { + writeLine("Invalid input. Please type 'yes' to confirm or 'no' to cancel."); + } + } + } + + public static void ChangeSerialNumber(string pathToDump, + Func readLine = null, + Action writeLine = null, + Action waitForContinue = null, + Func?, Action?, bool> updateSerialNumber = null) + { + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + waitForContinue ??= _ => Console.ReadLine(); + updateSerialNumber ??= UpdateSerialNumber; + // Create a true false to allow us to loop until the user changes the serial or cancels the operation + var jobDone = false; + + while (!jobDone) + { + // Set the serial number offset and value + long serialOffset = 0x1c7210; + string oldSerial = null; + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + //Set the position of the reader + reader.BaseStream.Position = serialOffset; + //Read the offset + oldSerial = Encoding.UTF8.GetString(reader.ReadBytes(17)); + } + catch + { + // Obviously this value is invalid, so null the value and move on + oldSerial = null; + } + + jobDone = updateSerialNumber(pathToDump, jobDone, oldSerial, readLine, writeLine); + } + } + + public static void ChangeMotherboardSerialNumber(string pathToDump, + Action? writeLine = null, + Func? readLine = null, + Action?, Action?>? updateMotherboardSerialNumber = null) + { + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + updateMotherboardSerialNumber ??= UpdateMotherboardSerialNumber; + + // Declare variables to store console serial + long moboOffset = 0x1C7200; + string moboValue = null; + string motherboardSerial; + + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + reader.BaseStream.Position = moboOffset; + moboValue = BitConverter.ToString(reader.ReadBytes(16)).Replace("-", null); + } + catch + { + // Catch any exceptions and ignore, setting MotherboardSerial to null + } + + motherboardSerial = PS5UARTUtilities.HexStringToString(moboValue); + + if (!string.IsNullOrEmpty(moboValue) && !string.IsNullOrEmpty(motherboardSerial)) + { + updateMotherboardSerialNumber(pathToDump, motherboardSerial, readLine, writeLine); + } + else + { + // No file has been selected. Let the user know + Console.ForegroundColor = ConsoleColor.Red; + writeLine("Could not parse your selected .bin file. Please ensure your selected file is a valid PlayStation 5 file and try again."); + Console.ResetColor(); + writeLine(""); + writeLine("Press Enter to continue..."); + readLine(); + } + } + + public static void ChangeConsoleModel(string pathToDump, + Action? writeLine = null, + Func? readLine = null, + Action? updateModelOrSerial = null) + { + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + updateModelOrSerial ??= UpdateModelOrSerial; + + // Declare variables to store console model + long variantOffset = 0x1c7226; + string variantValue = null; + string consoleModel; + + try + { + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + reader.BaseStream.Position = variantOffset; + variantValue = BitConverter.ToString(reader.ReadBytes(19)).Replace("-", string.Empty).Replace("FF", string.Empty); + } + catch + { + // Catch any exceptions and ignore, setting variantValue to null + } + + consoleModel = PS5UARTUtilities.HexStringToString(variantValue); + + if (!string.IsNullOrEmpty(variantValue) && !string.IsNullOrEmpty(consoleModel)) + { + // Create a loop to prevent the app from returning to the main menu + bool isDone = false; + while (!isDone) + { + // Show the current model to the user + Console.ForegroundColor = ConsoleColor.Blue; + writeLine("Current model: " + consoleModel); + Console.ResetColor(); + + // Ask the user to enter the new model + writeLine("Please enter the model you would like to set your dump file to (type 'exit' to go back): "); + + var newModel = readLine(); + + if (string.IsNullOrEmpty(newModel)) + { + // The user did not enter a valid string + writeLine("Please enter a valid model number to continue..."); + } + else if (newModel.ToLower() == "exit") + { + // The user wants to exit this menu + break; + } + else if (newModel.Length < 9) + { + // The entered model is an invalid length + writeLine("The new model you entered is invalid. The model should be 9 characters long starting with 'CFI-', followed by 4 numbers and a letter."); + } + else if (!newModel.StartsWith("CFI-")) + { + writeLine("The new model you entered is invalid. The model should be 9 characters long starting with 'CFI-', followed by 4 numbers and a letter."); + } + else + { + // Everything seems OK. Now we can change the model + try + { + updateModelOrSerial(pathToDump, consoleModel, newModel); + + writeLine("The new console model you have chosen has been saved successfully."); + writeLine("Press Enter to continue..."); + readLine(); + isDone = true; + break; + } + catch (ArgumentException ex) + { + writeLine("An error occurred while writing to the BIOS dump. Please try again..." + ex.Message); + writeLine("Press Enter to continue..."); + readLine(); + break; + } + } + } + } + else + { + // No file has been selected. Let the user know + Console.ForegroundColor = ConsoleColor.Red; + writeLine("Could not parse your selected .bin file. Please ensure your selected file is a valid PlayStation 5 file and try again."); + Console.ResetColor(); + writeLine(""); + writeLine("Press Enter to continue..."); + readLine(); + } + } + + private static bool UpdateSerialNumber(string pathToDump, + bool jobDone, + string? oldSerial, + Func readLine = null, + Action writeLine = null) + { + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + + var newSerialValid = false; + while (!newSerialValid) + { + Console.ForegroundColor = ConsoleColor.Blue; + writeLine("Enter the new serial number you would like to save (type 'exit' to exit): "); + Console.ResetColor(); + + var newSerial = readLine().Trim(); + + if (newSerial == "") + { + // The serial number is blank + writeLine("Invalid serial number entered. The new serial should be characters and letters."); + } + else if (newSerial.ToLower() == "exit") + { + jobDone = true; + break; + } + else if (newSerial == oldSerial) + { + writeLine("The new serial number matches the old serial number. Please enter a different value and try again..."); + } + else + { + try + { + byte[] existingFile; + using var reader = new BinaryReader(new FileStream(pathToDump, FileMode.Open)); + existingFile = reader.ReadBytes((int)reader.BaseStream.Length); + + var oldSerialBytes = Encoding.UTF8.GetBytes(oldSerial); + var newSerialBytes = Encoding.UTF8.GetBytes(newSerial); + + // Ensure the new serial number is either padded or truncated to fit 17 characters + var newSerialBytesPadded = new byte[17]; + Array.Copy(newSerialBytes, newSerialBytesPadded, Math.Min(newSerialBytes.Length, 17)); + + // Find the index of the old serial number in the file + var index = PS5UARTUtilities.PatternAt(existingFile, oldSerialBytes).FirstOrDefault(); + + if (index != -1) + { + // Replace the old serial number with the new one + for (int i = 0; i < newSerialBytesPadded.Length; i++) + { + existingFile[index + i] = newSerialBytesPadded[i]; + } + + // Write modified bytes back to the file + using var writer = new BinaryWriter(new FileStream(pathToDump, FileMode.Create)); + writer.Write(existingFile); + + writeLine("SUCCESS: The new serial number has been updated successfully. Press enter to continue..."); + readLine(); + jobDone = true; + break; + } + else + { + writeLine("Failed to find the old serial number in the file. Aborting..."); + jobDone = true; + } + } + catch (Exception) + { + // Something went wrong. Notify the user + Console.ForegroundColor = ConsoleColor.Red; + writeLine("An error occurred while attempting to make changes to your dump file. Please try again."); + Console.ResetColor(); + } + } + } + + return jobDone; + } + + private static void UpdateMotherboardSerialNumber(string pathToDump, + string motherboardSerial, + Func? readLine = null, + Action? writeLine = null) + { + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + + // Create a loop to prevent the app from returning to the main menu + var isDone = false; + while (!isDone) + { + // Show the current motherboard serial to the user + Console.ForegroundColor = ConsoleColor.Blue; + writeLine("Current motherboard serial: " + motherboardSerial); + Console.ResetColor(); + + // Ask the user to enter the new serial number + writeLine("Please enter a new motherboard serial number (type 'exit' to go back): "); + + var newSerial = readLine(); + + if (string.IsNullOrEmpty(newSerial)) + { + // The user did not enter a valid string + writeLine("Please enter a valid model number to continue..."); + } + else if (newSerial.ToLower() == "exit") + { + // The user wants to exit this menu + break; + } + else if (newSerial.Length != 16) + { + // The entered serial number is an invalid length + writeLine("The new motherboard serial you entered is invalid. The motherboard serial should be exactly 16 characters in length."); + } + else + { + // Everything seems OK. Now we can change the serial number + try + { + UpdateModelOrSerial(pathToDump, motherboardSerial, newSerial); + + writeLine("The new motherboard serial number you entered has been saved successfully."); + writeLine("Press Enter to continue..."); + readLine(); + isDone = true; + break; + + } + catch (ArgumentException ex) + { + writeLine("An error occurred while writing to the BIOS dump. Please try again..." + ex.Message); + writeLine("Press Enter to continue..."); + readLine(); + break; + } + } + } + } + + private static void UpdateModelOrSerial(string pathToDump, string motherboardSerial, string? newSerial) + { + var oldSerial = Encoding.UTF8.GetBytes(motherboardSerial); + var oldSerialHex = Convert.ToHexString(oldSerial); + + var newSerialBytes = Encoding.UTF8.GetBytes(newSerial); + var newSerialHex = Convert.ToHexString(newSerialBytes); + + var find = PS5UARTUtilities.ConvertHexStringToByteArray(Regex.Replace(oldSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); + var replace = PS5UARTUtilities.ConvertHexStringToByteArray(Regex.Replace(newSerialHex, "0x|[ ,]", string.Empty).Normalize().Trim()); + + var bytes = File.ReadAllBytes(pathToDump); + foreach (var index in PS5UARTUtilities.PatternAt(bytes, find)) + { + for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) + { + bytes[i] = replace[replaceIndex]; + } + File.WriteAllBytes(pathToDump, bytes); + } + } + + private static void ConvertConsoleType(string findHex1, string replaceHex1, string findHex2, string replaceHex2, string consoleType, string pathToDump) + { + var find = PS5UARTUtilities.ConvertHexStringToByteArray(Regex.Replace(findHex1, "0x|[ ,]", string.Empty).Normalize().Trim()); + var replace = PS5UARTUtilities.ConvertHexStringToByteArray(Regex.Replace(replaceHex1, "0x|[ ,]", string.Empty).Normalize().Trim()); + + var bytes = File.ReadAllBytes(pathToDump); + foreach (int index in PS5UARTUtilities.PatternAt(bytes, find)) + { + for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace.Length; i++, replaceIndex++) + { + bytes[i] = replace[replaceIndex]; + } + File.WriteAllBytes(pathToDump, bytes); + } + + var find2 = PS5UARTUtilities.ConvertHexStringToByteArray(Regex.Replace(findHex2, "0x|[ ,]", string.Empty).Normalize().Trim()); + var replace2 = PS5UARTUtilities.ConvertHexStringToByteArray(Regex.Replace(replaceHex2, "0x|[ ,]", string.Empty).Normalize().Trim()); + + foreach (var index in PS5UARTUtilities.PatternAt(bytes, find2)) + { + for (int i = index, replaceIndex = 0; i < bytes.Length && replaceIndex < replace2.Length; i++, replaceIndex++) + { + bytes[i] = replace2[replaceIndex]; + } + File.WriteAllBytes(pathToDump, bytes); + } + + Console.WriteLine("Your BIOS file has been updated successfully. The new .bin file will now report to"); + Console.WriteLine($"the PlayStation 5 as a '{consoleType}' console."); + Console.WriteLine("Press Enter to continue..."); + Console.ReadLine(); + } + + private static string ConfirmConsoleTypeChange(string consoleType) + { + Console.ForegroundColor = ConsoleColor.Blue; + Console.WriteLine($"Are you sure you want to set the console as \"{consoleType}\" edition?"); + Console.ResetColor(); + + Console.WriteLine("Type 'yes' to confirm or 'no' to cancel."); + + return Console.ReadLine().Trim().ToLower(); + } +} diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/SubMenu/SubMenuService.cs b/UART-CL By TheCod3r/UART-CL By TheCod3r/SubMenu/SubMenuService.cs new file mode 100644 index 0000000..a5d2570 --- /dev/null +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/SubMenu/SubMenuService.cs @@ -0,0 +1,188 @@ +namespace UART_CL_By_TheCod3r.SubMenu; + +public static class SubMenuService +{ + public static void RunSubMenu(string appTitle, + Dictionary regionMap, + Func? readLine = null, + Action? writeLine = null, + Func?, Action?, Func?, Func?, Action?, string>? loadDumpFile = null, + Action? setConsoleTitle = null, + string pathToDump = "") + { + readLine ??= Console.ReadLine!; + writeLine ??= Console.WriteLine; + loadDumpFile ??= SubMenuHelper.LoadDumpFile; + setConsoleTitle ??= title => Console.Title = title; + + + var subMenuRunning = true; + + while (subMenuRunning) + { + // Check to see if we are working with a file. If so, add it to the app title so the user is aware... + if (!string.IsNullOrEmpty(pathToDump)) + { + Console.Title = $"{appTitle} - Working with file: {pathToDump}"; + } + + Console.ForegroundColor = ConsoleColor.Blue; + writeLine("In order to work with a BIOS dump file, you will need to load it into memory first."); + writeLine("Be sure to choose a file to work with by choosing option 1 before choosing any other option..."); + Console.ResetColor(); + writeLine(""); + Console.ForegroundColor = ConsoleColor.Red; + writeLine("Choose an option:"); + Console.ResetColor(); + Console.ForegroundColor = ConsoleColor.Green; + writeLine("1. Load a BIOS dump (.bin)"); + Console.ResetColor(); + writeLine("2. View BIOS information"); + writeLine("3. Convert to Digital edition"); + writeLine("4. Convert to Disc edition"); + writeLine("5. Convert to Slim edition"); + writeLine("6. Change serial number"); + writeLine("7. Change motherboard serial number"); + writeLine("8. Change console model number"); + writeLine("X. Return to previous menu"); + Console.Write("\nEnter your choice: "); + + switch (readLine()) + { + #region Load a dump file + case "1": + pathToDump = loadDumpFile(null, null, null, null, null); + break; + #endregion + #region View BIOS information + case "2": + // First check to confirm that we've selected a file to work with + if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it + { + SubMenuHelper.ViewBIOSInformaition(regionMap, pathToDump); + break; + } + else + { + // No file has been selected. Let the user know + NoPathError(readLine, writeLine); + break; + } + #endregion + #region Convert to "Digital" edition + case "3": + // First check to confirm that we've selected a file to work with + if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it + { + SubMenuHelper.ConvertToDigital(pathToDump); + break; + } + else + { + // No file has been selected. Let the user know + NoPathError(readLine, writeLine); + break; + } + #endregion + #region Convert to "Disc" edition + case "4": + // First check to confirm that we've selected a file to work with + if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it + { + SubMenuHelper.ConvertToDisc(pathToDump); + break; + } + else + { + // No file has been selected. Let the user know + NoPathError(readLine, writeLine); + break; + } + #endregion + #region Convert to "Slim" edition + case "5": + // First check to confirm that we've selected a file to work with + if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it + { + SubMenuHelper.ConvertToSlim(pathToDump); + break; + } + else + { + // No file has been selected. Let the user know + NoPathError(readLine, writeLine); + break; + } + #endregion + #region Change serial number + case "6": + if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it + { + SubMenuHelper.ChangeSerialNumber(pathToDump); + break; + } + else + { + // No file has been selected. Let the user know + NoPathError(readLine, writeLine); + break; + } + #endregion + #region Change motherboard serial number + case "7": + if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it + { + SubMenuHelper.ChangeMotherboardSerialNumber(pathToDump); + break; + } + else + { + // No file has been selected. Let the user know + NoPathError(readLine, writeLine); + break; + } + #endregion + #region Change console model + case "8": + + if (!string.IsNullOrEmpty(pathToDump)) // If the pathToDump string isn't empty or null, we can try and work with it + { + SubMenuHelper.ChangeConsoleModel(pathToDump); + break; + } + else + { + // No file has been selected. Let the user know + NoPathError(readLine, writeLine); + break; + } + #endregion + #region Exit sub menu + // I put two cases here for the exit option, one for capital "X" and one for lower case. + case "X": + // We should reset the app title first! + setConsoleTitle(appTitle); + subMenuRunning = false; + break; + case "x": + // We should reset the app title first! + setConsoleTitle(appTitle); + subMenuRunning = false; + break; + #endregion + } + } + } + + private static void NoPathError(Func? readLine = null, Action? writeLine = null) + { + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + Console.ForegroundColor = ConsoleColor.Red; + writeLine("You must select a .bin file to read before proceeding. Please select a valid .bin file and try again."); + Console.ResetColor(); + writeLine(""); + writeLine("Press Enter to continue..."); + readLine(); + } +} diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj b/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj index 8f54f13..e1bd389 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj @@ -1,32 +1,32 @@ - - - - Exe - net6.0 - UART_CL_By_TheCod3r - enable - enable - Terminal.ico - False - UART-CL - - - - embedded - - - - embedded - - - - - - - - - - - - - + + + + Exe + net6.0 + UART_CL_By_TheCod3r + enable + enable + Terminal.ico + False + UART-CL + + + + embedded + + + + embedded + + + + + + + + + + + + + diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj.user b/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj.user index 3ef4fb8..dd2ad5f 100644 --- a/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj.user +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/UART-CL By TheCod3r.csproj.user @@ -1,6 +1,6 @@ - - - - <_LastSelectedProfileId>C:\Users\TheCod3r\source\repos\UART-CL By TheCod3r\UART-CL By TheCod3r\Properties\PublishProfiles\ClickOnceProfile.pubxml - + + + + <_LastSelectedProfileId>C:\Users\TheCod3r\source\repos\UART-CL By TheCod3r\UART-CL By TheCod3r\Properties\PublishProfiles\ClickOnceProfile.pubxml + \ No newline at end of file diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/UARTMenu/UARTMenuHelper.cs b/UART-CL By TheCod3r/UART-CL By TheCod3r/UARTMenu/UARTMenuHelper.cs new file mode 100644 index 0000000..638fde7 --- /dev/null +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/UARTMenu/UARTMenuHelper.cs @@ -0,0 +1,442 @@ +using System.IO.Ports; +using UART_CL_By_TheCod3r.SubMenu; +using UART_CL_By_TheCod3r.Utilities; + +namespace UART_CL_By_TheCod3r.UARTMenu; + +public static class UARTMenuHelper +{ + public static bool GetErrorCodesFromPS5(Func? getAvailablePorts = null, + Func?, int>? promptPortSelection = null, + Func? configureSerialPorts = null, + Action?>? openSerialPort = null, + Func? parseErrors = null, + Func>? collectErrorLines = null, + Func? readLine = null, + Action? writeLine = null) + { + getAvailablePorts ??= GetAvailablePorts; + promptPortSelection ??= PromptPortSelection; + configureSerialPorts ??= ConfigureSerialPort; + openSerialPort ??= OpenSerialPort; + collectErrorLines ??= CollectErrorLines; + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + + var ports = getAvailablePorts(); + + if (ports.Length == 0) + { + ShowNoDevicesMessage(readLine, writeLine); + return true; + } + + PrintAvailableDevices(ports); + + var selectedPortIndex = promptPortSelection(ports.Length, readLine); + var selectedPort = ports[selectedPortIndex - 1]; + + try + { + var serialPort = configureSerialPorts(selectedPort); + + openSerialPort(serialPort, selectedPort, writeLine); + + var UARTLines = collectErrorLines(serialPort); + + foreach (var l in UARTLines) + { + var split = l.Split(' '); + if (!split.Any()) continue; + + switch (split[0]) + { + case "NG": + break; + case "OK": + var errorCode = split[2]; + if (errorCode.StartsWith("FFFFFF")) + { + Console.ForegroundColor = ConsoleColor.Blue; + writeLine("No error displayed"); + Console.ResetColor(); + } + else + { + Console.ForegroundColor = ConsoleColor.Green; + var result = (parseErrors ?? PS5UARTUtilities.ParseErrors).Invoke(errorCode); + writeLine(result); + Console.ResetColor(); + } + break; + } + } + + writeLine(""); + writeLine("Press Enter to continue..."); + readLine(); + + serialPort.Close(); + } + catch (Exception ex) + { + PrintErrorMessage(ex, writeLine); + readLine(); + } + + return true; + } + + public static bool ClearUARTCodes(Func? getAvailablePorts = null, + Func? configureSerialPort = null, + Action?>? openSerialPort = null, + Func?, int>? promptPortSelection = null, + Func>? readUARTLines = null, + Func? readLine = null, + Action? writeLine = null, + Action? writeLineToPort = null, + Action? closePort = null) + { + getAvailablePorts ??= GetAvailablePorts; + configureSerialPort ??= ConfigureSerialPort; + openSerialPort ??= OpenSerialPort; + promptPortSelection ??= PromptPortSelection; + readUARTLines ??= ReadUARTLines; + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + + // Declare a string array for a list of available port names + var ports = getAvailablePorts(); + + // No COM ports found. Let the user know and go back to the main menu + if (ports.Length == 0) + { + ShowNoDevicesMessage(readLine, writeLine); + return true; + } + + // Devices were found. Iterate through and present them in the form of a menu + PrintAvailableDevices(ports); + + var selectedPortIndex = promptPortSelection(ports.Length, readLine); + + // Get the selected port and store it inside the selectedPort string + var selectedPort = ports[selectedPortIndex - 1]; + + // Now we can wipe the error codes. We're going to wrap this in a try loop to prevent unexpected crashes + try + { + var serialPort = configureSerialPort(selectedPort); + + // Open the selected port for use + openSerialPort(serialPort, selectedPort, writeLine); + + var checksum = PS5UARTUtilities.CalculateChecksum("errlog clear"); + + if (writeLineToPort != null) + writeLineToPort(serialPort, checksum); + else + serialPort.WriteLine(checksum); + + var UARTLines = readUARTLines(serialPort); + + foreach (var l in UARTLines) + { + writeLine(l); + } + + writeLine("Press Enter to continue..."); + + // Job done. Continue + readLine(); + + // Before exiting, close and free up the selected device + if (closePort != null) + closePort(serialPort); + else + serialPort.Close(); + } + catch (Exception ex) + { + PrintErrorMessage(ex, writeLine); + readLine(); + } + return true; + } + + public static bool RunCustomUARTCommand(Func? getAvailablePorts = null, + Func? configureSerialPort = null, + Action?>? openSerialPort = null, + Func?, int>? promptPortSelection = null, + Func>? readUARTLines = null, + Func? readLine = null, + Action? writeLine = null, + Action? writeLineToPort = null, + Action? closePort = null) + { + getAvailablePorts ??= GetAvailablePorts; + configureSerialPort ??= ConfigureSerialPort; + openSerialPort ??= OpenSerialPort; + promptPortSelection ??= PromptPortSelection; + readUARTLines ??= ReadUARTLines; + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + + var ports = getAvailablePorts(); + + if (ports.Length == 0) + { + ShowNoDevicesMessage(readLine, writeLine); + return true; + } + + PrintAvailableDevices(ports); + + var selectedPortIndex = promptPortSelection(ports.Length, readLine); + var selectedPort = ports[selectedPortIndex - 1]; + + try + { + var serialPort = configureSerialPort(selectedPort); + openSerialPort(serialPort, selectedPort, writeLine); + + while (true) + { + Console.Write("Please enter a custom command to send (type exit to quit): "); + + var UARTCommand = readLine(); + + if (UARTCommand.ToLower() == "exit") + { + break; + } + else if (!string.IsNullOrEmpty(UARTCommand)) + { + var checksum = PS5UARTUtilities.CalculateChecksum(UARTCommand); + + if (writeLineToPort != null) + writeLineToPort(serialPort, checksum); + else + serialPort.WriteLine(checksum); + + var UARTLines = readUARTLines(serialPort); + + foreach (var line in UARTLines) + { + writeLine(line); + } + + readLine(); + } + else + { + writeLine("Please enter a valid command."); + } + } + + if (closePort != null) + closePort(serialPort); + else + serialPort.Close(); + } + catch (Exception ex) + { + PrintErrorMessage(ex, writeLine); + } + + return true; + } + + public static bool LaunchBIOSDumpSubMenu(string appTitle, Dictionary regionMap) + { + // This is a sub menu for working with BIOS files. IMO it's not very elegant to have sub menus but at least this way + // we don't have to use different apps for working with BIOS files... + + SubMenuService.RunSubMenu(appTitle, regionMap); + return true; + } + + public static bool ShowReadMe() + { + Console.WriteLine("UARL-CL is designed with simplicity in mind. This command line application makes it quick and easy"); + Console.WriteLine("to obtain error codes from your PlayStation 5 console."); + Console.WriteLine("UART stands for Universal Asynchronous Receiver-Transmitter. UART allows you to send and receive commands"); + Console.WriteLine("to any compatible serial communications device."); + Console.WriteLine(); + Console.WriteLine("The PlayStation 5 has UART functionality built in. Unfortunately Sony don't make it easy to understand what"); + Console.WriteLine("is happening with the machine when you request error codes, which is why this application exists. UART-CL is"); + Console.WriteLine("a command-line spin off to the PS5 NOR and UART tool for Windows, which allows you to communicate via serial"); + Console.WriteLine("to your PlayStation 5. You can grab error codes from the system at the click of a button (well, a few clicks)"); + Console.WriteLine("and the software will automatically check the error codes received and attempt to convert them into plain text."); + Console.WriteLine("This is done by splitting the error codes up into useful sections and then comparing those error codes against a"); + Console.WriteLine("database of codes collected by the repair community. If the code exists in the database, the application will"); + Console.WriteLine("automatically grab the error details and output them for you on the screen so you can figure out your next move."); + Console.WriteLine(""); + Console.WriteLine("Where does the database come from?"); + Console.WriteLine("The database is downloaded on first launch from uartcodes.com/xml.php. The download page is hosted by \"TheCod3r\""); + Console.WriteLine("for free and is simply a PHP script which fetches all known error codes from the uartcodes.com database and converts"); + Console.WriteLine("them into an XML document. An XML document makes it quick and easy to work with and it's a more elegant solution to"); + Console.WriteLine("provide a database which doesn't rely on an internet connection. It can also be updated whenever you like, free of charge."); + Console.WriteLine(""); + Console.WriteLine("How do I use this to fix my PS5?"); + Console.WriteLine("You'll need a compatible serial communication (UART) device first of all. Most devices that have a transmit, receive, and"); + Console.WriteLine("ground pin and that can provide 3.3v instead of 5v should work, and you can buy one for a few bucks on eBay, Amazon or AliExpress."); + Console.WriteLine(""); + Console.WriteLine("Once you have a compatible device, you'll need to:"); + Console.WriteLine("Solder the transmit pin on the device to the receive pin on the PS5."); + Console.WriteLine("Solder the receive pin on the device to the transmit pin on the PS5."); + Console.WriteLine("Solder ground on the device to ground on the PS5."); + Console.WriteLine("Connect the PS5 power chord to the PS5 power supply (do not turn on the console)"); + Console.WriteLine("Use this software and select either option 1, 2 or 3 to run commands."); + Console.WriteLine("Choose your device from the list of available devices."); + Console.WriteLine("Let the software do the rest. Then working out a plan for the actual repair is up to you. We can't do everything ;)"); + Console.WriteLine(""); + Console.WriteLine("As a personal note from myself (TheCod3r). I want to thank you for trusting my software. I'm an electronics technician primarily"); + Console.WriteLine("and I write code for fun (ironic since my name is TheCod3r, I know!). I would also like to thank the following people for inspiring me:"); + Console.WriteLine(""); + Console.WriteLine("Louis Rossmann, FightToRepair.org, Jessa Jones (iPad Rehab), Andy-Man (PS5 Wee Tools), my YouTube viewers, my Patreon supporters and my mom!"); + Console.WriteLine(""); + Console.WriteLine("#FuckBwE"); + Console.WriteLine("Be sure to use the hashtag. It really pisses him off!"); + + Console.WriteLine("Press Enter to continue..."); + Console.ReadLine(); + return true; + } + + public static bool BuyTheCod3erACoffee() + { + // Thanks for buying me a coffee :) + Console.WriteLine("Thanks for buying me a coffee. I'll redirect you in your default browser..."); + PS5UARTUtilities.OpenUrl("https://www.streamelements.com/thecod3r/tip"); + Console.WriteLine("Press Enter to continue..."); + Console.ReadLine(); + return true; + } + + public static bool UpdateXmlDatabase() + { + Console.WriteLine("Downloading latest database file. Please wait..."); + + var success = PS5UARTUtilities.DownloadDatabase("http://uartcodes.com/xml.php", "errorDB.xml"); + + if (success) + { + Console.WriteLine("Database downloaded successfully..."); + Console.WriteLine("Press Enter to continue..."); + } + else + { + Console.WriteLine("Could not download the latest database file. Please ensure you're connected to the internet!"); + Console.WriteLine("Press Enter to continue..."); + } + Console.ReadLine(); + return true; + } + + #region Private methods for repeated logic + private static string[] GetAvailablePorts() => SerialPort.GetPortNames(); + + private static void ShowNoDevicesMessage(Func? readLine = null, + Action? writeLine = null) + { + writeLine ??= Console.WriteLine; + readLine ??= Console.ReadLine; + writeLine("No communication devices were found on this system."); + writeLine("Please insert a UART compatible device and try again."); + writeLine("Press Enter to continue..."); + readLine(); + } + + private static void PrintAvailableDevices(string[] ports) + { + Console.WriteLine("Available devices:"); + for (int i = 0; i < ports.Length; i++) + { + var friendlyName = PS5UARTUtilities.GetFriendlyName(ports[i]); + Console.WriteLine($"{i + 1}. {ports[i]} - {friendlyName}"); + } + } + + private static int PromptPortSelection(int max, Func? readLine = null) + { + readLine ??= Console.ReadLine; + + int selectedPortIndex; + do + { + Console.WriteLine(); + Console.Write("Enter the number of the COM port you want to use: "); + } while (!int.TryParse(readLine(), out selectedPortIndex) || selectedPortIndex < 1 || selectedPortIndex > max); + + return selectedPortIndex; + } + + private static SerialPort ConfigureSerialPort(string portName) => + new(portName) + { + // Configure settings for the selected device + BaudRate = 115200,// The PS5 requires a BAUD rate of 115200 + RtsEnable = true // We need to enable ready to send (RTS) mode + }; + + private static void OpenSerialPort(SerialPort serialPort, string selectedPort, + Action? writeLine = null) + { + writeLine ??= Console.WriteLine; + // Open the selected port for use + serialPort.Open(); + // Let's display the selected port (change the color to blue) so the user is aware of what device is in use + Console.ForegroundColor = ConsoleColor.Blue; + writeLine("Selected port: " + PS5UARTUtilities.GetFriendlyName(selectedPort)); + // Reset the foreground color to default before proceeding + Console.ResetColor(); + } + + private static List CollectErrorLines(SerialPort serialPort) + { + List UARTLines = new(); + for (var i = 0; i <= 10; i++) + { + var command = $"errlog {i}"; + var checksum = PS5UARTUtilities.CalculateChecksum(command); + serialPort.WriteLine(checksum); + + var line = serialPort.ReadLine(); + + if (!string.Equals($"{command}:{checksum:X2}", line, StringComparison.InvariantCultureIgnoreCase)) + { + if (!line.Contains("errlog") && !UARTLines.Contains(line)) + { + UARTLines.Add(line); + } + } + } + + return UARTLines; + } + + private static List ReadUARTLines(SerialPort serialPort) + { + List lines = new(); + do + { + var line = serialPort.ReadLine(); + lines.Add(line); + } while (serialPort.BytesToRead != 0); + + return lines; + } + + private static void PrintErrorMessage(Exception ex, + Action? writeLine = null) + { + writeLine ??= Console.WriteLine; + writeLine("An error occurred while connecting to your selected device."); + writeLine("Error details:"); + writeLine(ex.Message); + writeLine("Press Enter to continue..."); + } + #endregion +} + diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/UARTMenu/UARTMenuService.cs b/UART-CL By TheCod3r/UART-CL By TheCod3r/UARTMenu/UARTMenuService.cs new file mode 100644 index 0000000..319e0cf --- /dev/null +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/UARTMenu/UARTMenuService.cs @@ -0,0 +1,82 @@ +using UART_CL_By_TheCod3r.Utilities; + +namespace UART_CL_By_TheCod3r.UARTMenu; + +public class UARTMenuService +{ + public static bool MainMenu(string appTitle, Dictionary regionMap, + Func? readLine = null, Action? writeLine = null) + { + readLine ??= Console.ReadLine; + writeLine ??= Console.WriteLine; + + Console.Clear(); + PS5UARTUtilities.ShowHeader(); + Console.ForegroundColor = ConsoleColor.Red; + writeLine("Choose an option:"); + Console.ResetColor(); + writeLine("1. Get error codes from PS5"); + writeLine("2. Clear error codes on PS5"); + writeLine("3. Enter custom UART command"); + writeLine("4. BIOS Dump Tools"); + writeLine("5. View readme guide"); + // Thanks for leaving this here! + Console.ForegroundColor = ConsoleColor.Green; + writeLine("6. Buy TheCod3r a coffee"); + Console.ResetColor(); + writeLine("7. Update error database"); + writeLine("X. Exit application"); + Console.ForegroundColor = ConsoleColor.Red; + Console.Write("\nEnter your choice: "); + Console.ResetColor(); + + #region Menu Options + switch (readLine()) + { + #region Get Error Codes From PS5 + case "1": + return UARTMenuHelper.GetErrorCodesFromPS5(); + #endregion + #region Clear UART codes + case "2": + return UARTMenuHelper.ClearUARTCodes(); + #endregion + #region Custom UART command + case "3": + return UARTMenuHelper.RunCustomUARTCommand(); + #endregion + #region Launch readme + case "5": + return UARTMenuHelper.ShowReadMe(); + #endregion + #region BIOS Dump Tools (Sub Menu) + case "4": + return UARTMenuHelper.LaunchBIOSDumpSubMenu(appTitle, regionMap); + #endregion + #region Buy me a coffee + case "6": + return UARTMenuHelper.BuyTheCod3erACoffee(); + #endregion + #region Update XML database + case "7": + return UARTMenuHelper.UpdateXmlDatabase(); + #endregion + #region Exit Application + case "X": + // Run the exit environment command to close the application + Environment.Exit(0); + return true; + case "x": + // Run the exit environment command to close the application + Environment.Exit(0); + return true; + #endregion + default: + writeLine("Invalid choice. Please try again."); + writeLine("Press Enter to continue..."); + readLine(); + return true; + } + #endregion + } +} diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/Utilities/PS5UARTUtilities.cs b/UART-CL By TheCod3r/UART-CL By TheCod3r/Utilities/PS5UARTUtilities.cs new file mode 100644 index 0000000..0c2b5b8 --- /dev/null +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/Utilities/PS5UARTUtilities.cs @@ -0,0 +1,239 @@ +using System.Diagnostics; +using System.Globalization; +using System.Management; +using System.Net; +using System.Text; +using System.Xml; + +namespace UART_CL_By_TheCod3r.Utilities; + +public static class PS5UARTUtilities +{ + #region Checksum generation + public static string CalculateChecksum(string str) + { + // Math stuff. I don't understand it either! + int sum = 0; + foreach (char c in str) + { + sum += c; + } + return str + ":" + (sum & 0xFF).ToString("X2"); + } + #endregion + + #region Hex conversions + public static string HexStringToString(string hexString) + { + if (hexString == null || (hexString.Length & 1) == 1) + { + throw new ArgumentException(); + } + var sb = new StringBuilder(); + for (var i = 0; i < hexString.Length; i += 2) + { + var hexChar = hexString.Substring(i, 2); + sb.Append((char)Convert.ToByte(hexChar, 16)); + } + return sb.ToString(); + } + + public static IEnumerable PatternAt(byte[] source, byte[] pattern) + { + if (pattern.Length == 0) + { + yield break; // Return an empty sequence + } + + for (var i = 0; i < source.Length; i++) + { + if (source.Skip(i).Take(pattern.Length).SequenceEqual(pattern)) + { + yield return i; + } + } + } + + public static byte[] ConvertHexStringToByteArray(string hexString) + { + if (hexString.Length % 2 != 0) + { + throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString)); + } + + byte[] data = new byte[hexString.Length / 2]; + for (int index = 0; index < data.Length; index++) + { + string byteValue = hexString.Substring(index * 2, 2); + data[index] = Convert.ToByte(byteValue, 16); // Parse hex string directly + } + + return data; + } + #endregion + + #region Error parsing (via XML database) + + // When fetching errors from the PS5 we want to be able to convert the received codes into readable text to make it easier + // for the user to understand what the problem is. By the time this function is called we should have an up to date XML + // database to compare error codes with. + public static string ParseErrors(string errorCode) + { + var results = ""; + + if (string.IsNullOrEmpty(errorCode)) + { + return "No error code given. " + errorCode; + } + + try + { + if (File.Exists("errorDB.xml")) + { + var xmlDoc = new XmlDocument(); + xmlDoc.Load("errorDB.xml"); + + var root = xmlDoc.DocumentElement; + + if (root.Name == "errorCodes") + { + if (root.ChildNodes.Count == 0) + { + results = "No result found for error code " + errorCode; + } + else + { + foreach (XmlNode errorCodeNode in root.ChildNodes) + { + if (errorCodeNode.Name == "errorCode") + { + var errorCodeValue = errorCodeNode.SelectSingleNode("ErrorCode")?.InnerText; + var description = errorCodeNode.SelectSingleNode("Description")?.InnerText; + + if (errorCodeValue == errorCode) + { + results = "Error code: " + errorCodeValue + Environment.NewLine + "Description: " + description; + break; + } + } + } + } + } + else + { + results = "Error: Invalid XML database file. Please reconfigure the application, redownload the offline database, or uncheck the option to use the offline database."; + } + } + else + { + results = "Error: Local XML file not found."; + } + } + catch (Exception ex) + { + results = "Error: " + ex.Message; + } + + return results; + } + + #endregion + + #region Obtian the friendly name of the available COM ports + public static string GetFriendlyName(string portName) + { + // Handle null port + if (string.IsNullOrWhiteSpace(portName)) + { + return "Unknown Port Name"; + } + + // Declare the friendly name variable for later use + var friendlyName = portName; + // We'll wrap this in a try loop simply because this isn't available on all platforms + try + { + // This is basically an SQL query. Let's search for the details of the ports based on the port name + // Again, this is just for Windows based devices + using var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%" + portName + "%'"); + var found = false; + // Loop through and output the friendly name + foreach (var port in searcher.Get()) + { + friendlyName = port["Name"]?.ToString(); + found = true; + break; + } + + // Handle if searcher returns nothing + if (!found) + { + friendlyName = "Unknown Port Name"; + } + } + // Catch any thrown exception + catch (Exception) + { + // If there is an error, we'll just declare that we don't know the name of the port + friendlyName = "Unknown Port Name"; + } + // Send the friendly name (or unknown port name string) back to the main code for output + return friendlyName; + } + #endregion + + #region Console header + public static void ShowHeader() + { + // This is the header. + Console.Clear(); + Colorful.Console.WriteAscii("UART-CL v1.0.0.0"); + Colorful.Console.WriteAscii("by TheCod3r"); + Console.WriteLine(""); + Console.WriteLine(""); + Console.WriteLine("UART-CL is a command line UART tool to assist in the diagnosis and repair of PlayStation 5 consoles using UART."); + Console.WriteLine("For more information on how to connect to UART you can use the options below or read the ReadMe."); + Console.WriteLine(""); + } + #endregion + + #region URL Handling + + // Let's create a function that will allow us to download the latest version of the database if we have access to the internet. + public static bool DownloadDatabase(string url, string savePath) + { + using var client = new WebClient(); + try + { + client.DownloadFile(url, savePath); + return true; + } + catch (Exception ex) + { + return false; + } + } + + // Function to open a new URL in the default browser + public static void OpenUrl(string url) + { + // Let's wait two seconds first + Thread.Sleep(2000); + // Wrap this in a try loop so we don't get any unexpected crashes + try + { + Process.Start(new ProcessStartInfo + { + FileName = url, + UseShellExecute = true + }); + } + catch (Exception ex) + { + // Catch any errors and let the user know + Console.WriteLine($"Error opening URL: {ex.Message}"); + } + } + + #endregion +} diff --git a/UART-CL By TheCod3r/UART-CL By TheCod3r/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/UART-CL By TheCod3r/UART-CL By TheCod3r/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..36203c7 --- /dev/null +++ b/UART-CL By TheCod3r/UART-CL By TheCod3r/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")] diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/SubMenu/SubMenuHelper_Tests.cs b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/SubMenu/SubMenuHelper_Tests.cs new file mode 100644 index 0000000..4357ea1 --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/SubMenu/SubMenuHelper_Tests.cs @@ -0,0 +1,797 @@ +using System.Text; +using FluentAssertions; +using NUnit.Framework; +using UART_CL_By_TheCod3r.SubMenu; + +namespace UART_CL.UnitTests.SubMenu; + +public class SubMenuHelper_Tests +{ + private Dictionary _regionMap = null!; + private List _output = null!; + private Action _writeLine = null!; + private Func _readLine = null!; + + [SetUp] + public void SetUp() + { + _regionMap = new Dictionary { { "US1", "United States" } }; + _output = new List(); + _writeLine = s => _output.Add(s); + _readLine = () => ""; // simulate Enter key + } + + [TearDown] + public void DeleteTempFile() + { + try + { + File.Delete(Path.GetTempFileName()); + } + catch + { + // Do nothing + } + } + + [Test] + public void ViewBIOSInformation_ShouldDisplayCorrectParsedValues() + { + var memory = new byte[0x1C8000]; + Array.Copy(new byte[] { 0x22, 0x02, 0x01, 0x01, 0xAB, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0, memory, 0x1C7010, 12); + Array.Copy(Encoding.ASCII.GetBytes("PS5-US1".PadLeft(19)), 0, memory, 0x1C7226, 19); + Array.Copy(Encoding.ASCII.GetBytes("C12345678901234"), 0, memory, 0x1C7210, 15); + Array.Copy(Encoding.ASCII.GetBytes("M98765432109876 "), 0, memory, 0x1C7200, 16); + Array.Copy(new byte[] { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }, 0, memory, 0x1C73C0, 6); + Array.Copy(new byte[] { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }, 0, memory, 0x1C4020, 6); + + var tmpPath = CreateTempFile(memory); + + SubMenuHelper.ViewBIOSInformaition(_regionMap, tmpPath, _writeLine, _readLine); + + _output.Should().Contain(s => s.Contains("Disc Edition")); + _output.Should().Contain(s => s.Contains("PS5-US1 - United States")); + _output.Should().Contain(s => s.Contains("C12345678901234")); + _output.Should().Contain(s => s.Contains("M98765432109876")); + _output.Should().Contain(s => s.Contains("AA-BB-CC-DD-EE-FF")); + _output.Should().Contain(s => s.Contains("11-22-33-44-55-66")); + } + + [Test] + public void ViewBIOSInformation_ShouldHandleMissingOffsetsGracefully() + { + var memory = new byte[0x100]; // too short + + // Create temp file with dummy content to avoid FileNotFoundException + var tmpPath = CreateTempFile(memory); + + var act = () => SubMenuHelper.ViewBIOSInformaition(_regionMap, tmpPath, _writeLine, _readLine); + + act.Should().NotThrow(); + _output.Should().Contain(s => s.Contains("Unknown Model")); + _output.Should().Contain(s => s.Contains("Unknown S/N")); + _output.Should().Contain(s => s.Contains("Unknown Mac Address")); + } + + [Test] + public void ViewBIOSInformation_ShouldDefaultToConsoleIO_WhenNoDelegatesProvided() + { + // Just ensure it doesn’t throw + var memory = new byte[0x1C8000]; + Array.Copy(Encoding.ASCII.GetBytes("22020101abcd"), 0, memory, 0x1C7010, 12); + var tmpPath = CreateTempFile(memory); + + var act = () => SubMenuHelper.ViewBIOSInformaition(_regionMap, tmpPath, _writeLine, _readLine); + + act.Should().NotThrow(); + _output.Should().Contain(s => s.Contains("Unknown Model")); + } + + [TestCase("22030101abcd", "Digital Edition")] + [TestCase("22010101abcd", "Slim Edition")] + public void ViewBIOSInformation_ShouldDetectDigitalAndSlimVariants(string consoleCode, string consoleType) + { + var memory = new byte[0x1C8000]; + + var consoleCodeBytes = HexStringToBytes(consoleCode); + Array.Copy(consoleCodeBytes, 0, memory, 0x1C7010, consoleCodeBytes.Length); + + var tmpPath = CreateTempFile(memory); + + SubMenuHelper.ViewBIOSInformaition(_regionMap, tmpPath, _writeLine, _readLine); + + _output.Should().Contain(s => s.Contains(consoleType)); + } + + [Test] + public void LoadDumpFile_ValidPath_ReturnsPath() + { + var memory = new byte[0x1C8000]; + + Array.Copy(Encoding.ASCII.GetBytes("C12345678901234"), 0, memory, 0x1C7210, 15); + + var tmpPath = CreateTempFile(memory); + var fileSize = new FileInfo(tmpPath).Length; + + var inputs = new Queue(new[] { tmpPath }); + + var path = SubMenuHelper.LoadDumpFile(readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + fileExists: _ => true, + getExtension: _ => ".bin", + sleep: _ => { }); + + path.Should().Be(tmpPath); + _output.Should().Contain($"Selected file: {tmpPath} - File Size: {fileSize} bytes (1MB)"); + } + + [Test] + public void LoadDumpFile_ExitTyped_ReturnsNullPath() + { + var inputs = new Queue(new[] { "exit" }); + + var path = SubMenuHelper.LoadDumpFile(readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + fileExists: _ => false, + getExtension: _ => "", + sleep: _ => { }); + + path.Should().BeNullOrEmpty(); + } + + [Test] + public void LoadDumpFile_BlankInput_ShowsError() + { + var inputs = new Queue(new[] { " ", "exit" }); + + SubMenuHelper.LoadDumpFile(readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + fileExists: _ => false, + getExtension: _ => "", + sleep: _ => { }); + + _output.Should().Contain("Invalid input. File path cannot be blank."); + } + + [Test] + public void LoadDumpFile_FileNotFound_ShowsError() + { + var inputs = new Queue(new[] { "/fake/path/file.bin", "exit" }); + + SubMenuHelper.LoadDumpFile(readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + fileExists: _ => false, + getExtension: _ => ".bin", + sleep: _ => { }); + + _output.Should().Contain("The file path you entered does not exist. Please enter the path to a valid .bin file."); + } + + [Test] + public void LoadDumpFile_InvalidExtension_ShowsError() + { + var inputs = new Queue(new[] { "/fake/path/file.txt", "exit" }); + + SubMenuHelper.LoadDumpFile(readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + fileExists: _ => true, + getExtension: _ => ".txt", + sleep: _ => { }); + + _output.Should().Contain("The file you provided is not a .bin file. Please enter a valid .bin file path."); + } + + [Test] + public void ConvertToDigital_ShouldConvert_IfNotAlreadyDigital() + { + var memory = new byte[0x1C8000]; + // Set original values that are NOT digital (22010101 at offsetOne, 22020101 at offsetTwo) + var offsetOneBytes = HexStringToBytes("22010101"); + var offsetTwoBytes = HexStringToBytes("22020101"); + + Array.Copy(offsetOneBytes, 0, memory, 0x1C7010, 4); + Array.Copy(offsetTwoBytes, 0, memory, 0x1C7030, 4); + + var tmpPath = CreateTempFile(memory); + + var confirmCalled = false; + var convertCalled = false; + + SubMenuHelper.ConvertToDigital(tmpPath, + confirmPrompt: type => { confirmCalled = true; return "yes"; }, + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (f1, r1, f2, r2, type, path) => + { + convertCalled = true; + type.Should().Be("digital edition"); + path.Should().Be(tmpPath); + }); + + confirmCalled.Should().BeTrue(); + convertCalled.Should().BeTrue(); + } + + [Test] + public void ConvertToDigital_ShouldSkipIfAlreadyDigital() + { + var memory = new byte[0x1C8000]; + // Set digital value at offsetOne + var offsetOneBytes = HexStringToBytes("22030101"); + Array.Copy(offsetOneBytes, 0, memory, 0x1C7010, 4); + + var tmpPath = CreateTempFile(memory); + + var convertCalled = false; + + SubMenuHelper.ConvertToDigital(tmpPath, + confirmPrompt: _ => "yes", + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => convertCalled = true); + + _output.Should().Contain(s => s.Contains("already a digital edition")); + convertCalled.Should().BeFalse(); + } + + [Test] + public void ConvertToDigital_ShouldNotConvert_WhenUserDeclines() + { + var memory = new byte[0x1C8000]; + var tmpPath = CreateTempFile(memory); + + var convertCalled = false; + + SubMenuHelper.ConvertToDigital(tmpPath, + confirmPrompt: _ => "no", + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => convertCalled = true); + + convertCalled.Should().BeFalse(); + _output.Should().BeEmpty(); + } + + [Test] + public void ConvertToDigital_ShouldRetryOnInvalidInput() + { + var memory = new byte[0x1C8000]; + var offsetOneBytes = HexStringToBytes("22010101"); + var offsetTwoBytes = HexStringToBytes("22020101"); + Array.Copy(offsetOneBytes, 0, memory, 0x1C7010, 4); + Array.Copy(offsetTwoBytes, 0, memory, 0x1C7030, 4); + + var tmpPath = CreateTempFile(memory); + + var promptResponses = new Queue(new[] { "maybe", "yes" }); + var convertCalled = false; + + SubMenuHelper.ConvertToDigital(tmpPath, + confirmPrompt: _ => promptResponses.Dequeue(), + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => convertCalled = true); + + _output.Should().Contain(o => o.Contains("Invalid input")); + convertCalled.Should().BeTrue(); + } + + [Test] + public void ConvertToDigital_ShouldHandleReadErrorGracefully() + { + var nonExistentPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".bin"); + + SubMenuHelper.ConvertToDigital(nonExistentPath, + confirmPrompt: _ => "yes", + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => throw new Exception("Should not be called")); + + _output.Should().Contain(s => s.Contains("Error reading the binary file")); + _output.Should().Contain(s => s.Contains("Press Enter to continue...")); + } + + [Test] + public void ConvertToDigital_ShouldHandleWriteErrorGracefully() + { + var memory = new byte[0x1C8000]; + var offsetOneBytes = HexStringToBytes("22010101"); + var offsetTwoBytes = HexStringToBytes("22020101"); + Array.Copy(offsetOneBytes, 0, memory, 0x1C7010, 4); + Array.Copy(offsetTwoBytes, 0, memory, 0x1C7030, 4); + + var tmpPath = CreateTempFile(memory); + + SubMenuHelper.ConvertToDigital(tmpPath, + confirmPrompt: _ => "yes", + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => throw new IOException("Disk full")); + + _output.Should().Contain(s => s.Contains("Error updating the binary file")); + _output.Should().Contain(s => s.Contains("Disk full")); + } + + [Test] + public void ConvertToDisc_ShouldDoNothing_IfAlreadyDiscEdition() + { + var memory = new byte[0x1C8000]; + Array.Copy(HexStringToBytes("22020101"), 0, memory, 0x1C7010, 4); + Array.Copy(HexStringToBytes("22030101"), 0, memory, 0x1C7030, 4); + + var tmpPath = CreateTempFile(memory); + + var confirmResponses = new Queue(new[] { "yes" }); + + SubMenuHelper.ConvertToDisc(tmpPath, + confirmPrompt: _ => confirmResponses.Dequeue(), + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => Assert.Fail("Should not be called") + ); + + _output.Should().Contain(s => s.Contains("already a disc edition")); + } + + [Test] + public void ConvertToDisc_ShouldRetryOnInvalidInput() + { + var memory = new byte[0x1C8000]; + Array.Copy(HexStringToBytes("22010101"), 0, memory, 0x1C7010, 4); + Array.Copy(HexStringToBytes("22030101"), 0, memory, 0x1C7030, 4); + + var tmpPath = CreateTempFile(memory); + + var promptResponses = new Queue(new[] { "maybe", "yes" }); + var convertCalled = false; + + SubMenuHelper.ConvertToDisc(tmpPath, + confirmPrompt: _ => promptResponses.Dequeue(), + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => convertCalled = true); + + _output.Should().Contain(s => s.Contains("Invalid input")); + convertCalled.Should().BeTrue(); + } + + [Test] + public void ConvertToDisc_ShouldCallConvert_WhenNotAlreadyDiscEdition() + { + var memory = new byte[0x1C8000]; + Array.Copy(HexStringToBytes("22010101"), 0, memory, 0x1C7010, 4); + Array.Copy(HexStringToBytes("22030101"), 0, memory, 0x1C7030, 4); + + var tmpPath = CreateTempFile(memory); + + var confirmResponses = new Queue(new[] { "yes" }); + var convertCalled = false; + + SubMenuHelper.ConvertToDisc(tmpPath, + confirmPrompt: _ => confirmResponses.Dequeue(), + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => convertCalled = true + ); + + convertCalled.Should().BeTrue(); + } + + [Test] + public void ConvertToDisc_ShouldExit_WhenUserCancels() + { + var memory = new byte[0x1C8000]; + var tmpPath = CreateTempFile(memory); + + var confirmResponses = new Queue(new[] { "no" }); + + SubMenuHelper.ConvertToDisc(tmpPath, + confirmPrompt: _ => confirmResponses.Dequeue(), + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => Assert.Fail("Should not be called") + ); + + _output.Should().NotContain(s => s.Contains("Invalid input")); + } + + [Test] + public void ConvertToDisc_ShouldHandleExceptionReadingFile() + { + var tmpPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".bin"); // invalid path (file doesn't exist) + var confirmResponses = new Queue(new[] { "yes" }); + + SubMenuHelper.ConvertToDisc(tmpPath, + confirmPrompt: _ => confirmResponses.Dequeue(), + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => Assert.Fail("Should not be called") + ); + + _output.Should().Contain(s => s.Contains("Error reading the binary file")); + } + + [Test] + public void ConvertToSlim_ShouldDoNothing_IfAlreadySlimEdition() + { + var memory = new byte[0x1C8000]; + Array.Copy(HexStringToBytes("22010101"), 0, memory, 0x1C7010, 4); + Array.Copy(HexStringToBytes("22010101"), 0, memory, 0x1C7030, 4); + var tmpPath = CreateTempFile(memory); + + SubMenuHelper.ConvertToSlim(tmpPath, + confirmPrompt: _ => "yes", + writeLine: _writeLine, + readLine: _readLine); + + _output.Should().Contain(s => s.Contains("already a slim edition")); + } + + [Test] + public void ConvertToSlim_ShouldConvert_WhenNotAlreadySlim() + { + var memory = new byte[0x1C8000]; + Array.Copy(HexStringToBytes("22020101"), 0, memory, 0x1C7010, 4); + Array.Copy(HexStringToBytes("22030101"), 0, memory, 0x1C7030, 4); + var tmpPath = CreateTempFile(memory); + + var convertCalled = false; + SubMenuHelper.ConvertToSlim(tmpPath, + confirmPrompt: _ => "yes", + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => convertCalled = true); + + convertCalled.Should().BeTrue(); + } + + [Test] + public void ConvertToSlim_ShouldRetryOnInvalidInput() + { + var memory = new byte[0x1C8000]; + Array.Copy(HexStringToBytes("22020101"), 0, memory, 0x1C7010, 4); + Array.Copy(HexStringToBytes("22030101"), 0, memory, 0x1C7030, 4); + var tmpPath = CreateTempFile(memory); + + var prompResponses = new Queue(new[] { "maybe", "yes" }); + var convertCalled = false; + + SubMenuHelper.ConvertToSlim(tmpPath, + confirmPrompt: _ => prompResponses.Dequeue(), + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => convertCalled = true); + + _output.Should().Contain(s => s.Contains("Invalid input")); + convertCalled.Should().BeTrue(); + } + + [Test] + public void ConvertToSlim_ShouldExit_WhenUserCancels() + { + var memory = new byte[0x1C8000]; + Array.Copy(HexStringToBytes("22020101"), 0, memory, 0x1C7010, 4); + Array.Copy(HexStringToBytes("22030101"), 0, memory, 0x1C7030, 4); + var tmpPath = CreateTempFile(memory); + + SubMenuHelper.ConvertToSlim(tmpPath, + confirmPrompt: _ => "no", + writeLine: _writeLine, + readLine: _readLine, + convertConsoleType: (_, _, _, _, _, _) => Assert.Fail("Should not have been called")); + + _output.Should().BeEmpty(); + } + + [Test] + public void ConvertToSlim_ShouldHandleExceptionReadingFile() + { + var invalidPath = "non_existent_file.bin"; + + SubMenuHelper.ConvertToSlim(invalidPath, + confirmPrompt: _ => "yes", + writeLine: _writeLine, + readLine: () => string.Empty, + convertConsoleType: (_, _, _, _, _, _) => Assert.Fail("Should not have been called")); + + _output.Should().Contain(s => s.StartsWith("Error reading the binary file")); + } + + [Test] + public void ChangeSerialNumber_ShouldExitImmediately_WhenUserTypesExit() + { + var inputs = new Queue(new[] { "exit" }); + var tempFile = TestFileWithSerialWithContent("OLD_SERIAL_1234567"); + + SubMenuHelper.ChangeSerialNumber(tempFile, + readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + updateSerialNumber: (path, jobDone, oldSerial, rl, wl) => + { + var newSerial = rl(); + if (newSerial == "exit") + return true; + return false; + }); + + _output.Should().BeEmpty(); + } + + [Test] + public void ChangeSerialNumber_ShouldInvokeUpdateSerialNumber_MultipleTimesUntilDone() + { + var inputs = new Queue(new[] { "wrong", "exit" }); + var tempFile = TestFileWithSerialWithContent("OLD_SERIAL_1234567"); + int callCount = 0; + + SubMenuHelper.ChangeSerialNumber(tempFile, + readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + updateSerialNumber: (path, jobDone, oldSerial, rl, wl) => + { + callCount++; + var input = rl(); + if (input == "exit") return true; + return false; + }); + + callCount.Should().Be(2); + } + + [Test] + public void ChangeSerialNumber_ShouldReadOldSerial_FromFile() + { + string oldSerialFromFile = null!; + var tmpFile = TestFileWithSerialWithContent("OLD_SERIAL_1234567"); + + SubMenuHelper.ChangeSerialNumber(tmpFile, + readLine: () => "exit", + writeLine: s => { }, + updateSerialNumber: (path, jobDone, oldSerial, rl, wl) => + { + oldSerialFromFile = oldSerial; + return true; + }); + + oldSerialFromFile.Should().StartWith("OLD_SERIAL_"); + } + + [Test] + public void ChangeSerialNumber_ShouldSetOldSerialToNull_IfFileReadFails() + { + var oldSerialFromFile = "not_null"; + var invalidFilePath = "Z:\\nonexistent_file.bin"; + + SubMenuHelper.ChangeSerialNumber(invalidFilePath, + readLine: () => "exit", + writeLine: s => { }, + updateSerialNumber: (path, jobDone, oldSerial, rl, wl) => + { + oldSerialFromFile = oldSerial; + return true; + }); + + oldSerialFromFile.Should().BeNull(); + } + + [Test] + public void ChangeMotherboardSerialNumber_ShouldCallUpdate_WhenSerialIsValid() + { + var tempFile = CreateTestFileWithMotherboardSerial("0011223344556677"); + string? receivedPath = null, receivedSerial = null; + var updateCalled = false; + + SubMenuHelper.ChangeMotherboardSerialNumber(pathToDump: tempFile, + readLine: () => "exit", + writeLine: _ => { }, + updateMotherboardSerialNumber: (p, s, _, _) => + { + updateCalled = true; + receivedPath = p; + receivedSerial = s; + }); + + updateCalled.Should().BeTrue(); + receivedPath.Should().Be(tempFile); + receivedSerial.Should().Be("0011223344556677"); + } + + [Test] + public void ChangeMotherboardSerialNumber_ShouldNotCallUpdate_WhenSerialIsNull() + { + var tmpPath = Path.GetTempFileName(); // empty file + var updateCalled = false; + + SubMenuHelper.ChangeMotherboardSerialNumber(pathToDump: tmpPath, + readLine: () => { return "ignored"; }, + writeLine: _ => { }, + updateMotherboardSerialNumber: (_, _, _, _) => updateCalled = true); + + updateCalled.Should().BeFalse(); + } + + [Test] + public void ChangeMotherboardSerialNumber_ShouldNotCallUpdate_WhenSerialIsEmpty() + { + var tmpPath = CreateTempFile(Array.Empty()); + var updateCalled = false; + + SubMenuHelper.ChangeMotherboardSerialNumber(pathToDump: tmpPath, + readLine: () => "ignored", + writeLine: _ => { }, + updateMotherboardSerialNumber: (_, _, _, _) => updateCalled = true); + + updateCalled.Should().BeFalse(); + } + + [Test] + public void ChangeMotherboardSerialNumber_ShouldShowError_WhenSerialIsInvalid() + { + var tmpPath = CreateTempFile(new byte[10]); // too short for offset + var readCalled = false; + + SubMenuHelper.ChangeMotherboardSerialNumber(pathToDump: tmpPath, + readLine: () => { readCalled = true; return "ignored"; }, + writeLine: _writeLine, + updateMotherboardSerialNumber: (_, _, _, _) => throw new Exception("Should not be called")); + + _output.Should().Contain(l => l.Contains("Could not parse")); + _output.Should().Contain("Press Enter to continue..."); + readCalled.Should().BeTrue(); + } + + [Test] + public void ChangeConsoleModel_ShouldNotCallUpdate_WhenVariantOrConsoleModelIsInvalid() + { + var tmpPath = CreateTempFile(Array.Empty()); // empty file + + var updateCalled = false; + + SubMenuHelper.ChangeConsoleModel(pathToDump: tmpPath, + readLine: () => "ignored", + writeLine: _ => { }, + updateModelOrSerial: (_, _, _) => updateCalled = true); + + updateCalled.Should().BeFalse(); + } + + [Test] + public void ChangeConsoleModel_ShouldCallUpdate_WhenValidModelEntered() + { + var memory = Enumerable.Repeat((byte)0x20, 0x1C7226 + 19).ToArray(); + Encoding.ASCII.GetBytes("CFI-1016A ").CopyTo(memory, 0x1C7226); + var tmpPath = CreateTempFile(memory); + + string? oldModel = null; + string? newModel = null; + + var inputs = new Queue(new[] { "CFI-2016B", "" }); // second "" is for "Press Enter to continue..." + + SubMenuHelper.ChangeConsoleModel(pathToDump: tmpPath, + readLine: () => inputs.Dequeue(), + writeLine: _ => { }, + updateModelOrSerial: (_, oldM, newM) => + { + oldModel = oldM; + newModel = newM; + }); + + oldModel.Should().StartWith("CFI-"); + newModel.Should().Be("CFI-2016B"); + } + + [Test] + public void ChangeConsoleModel_ShouldNotUpdate_WhenUserTypesExit() + { + var memory = Enumerable.Repeat((byte)0x20, 0x1C7226 + 19).ToArray(); + Encoding.ASCII.GetBytes("CFI-1016A ").CopyTo(memory, 0x1C7226); + var tmpPath = CreateTempFile(memory); + + var updateCalled = false; + + var callCount = 0; + var readLine = () => + { + callCount++; + return callCount == 1 ? "exit" : ""; + }; + + SubMenuHelper.ChangeConsoleModel(pathToDump: tmpPath, + readLine: readLine, + writeLine: _ => { }, + updateModelOrSerial: (_, _, _) => updateCalled = true); + + updateCalled.Should().BeFalse(); + } + + [Test] + public void ChangeConsoleModel_ShouldRejectInvalidModel_EmptyInput() + { + var memory = Enumerable.Repeat((byte)0x20, 0x1C7226 + 19).ToArray(); + Encoding.ASCII.GetBytes("CFI-1016A ").CopyTo(memory, 0x1C7226); + var tmpPath = CreateTempFile(memory); + + var inputs = new Queue(new[] { "", "exit" }); + + SubMenuHelper.ChangeConsoleModel(pathToDump: tmpPath, + readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + updateModelOrSerial: (_, _, _) => { }); + + _output.Should().Contain(m => m.Contains("valid model number")); + } + + [Test] + public void ChangeConsoleModel_ShouldRejectInvalidModel_TooShortOrNoCFI() + { + var memory = Enumerable.Repeat((byte)0x20, 0x1C7226 + 19).ToArray(); + Encoding.ASCII.GetBytes("CFI-1016A ").CopyTo(memory, 0x1C7226); + var tmpPath = CreateTempFile(memory); + + var inputs = new Queue(new[] { "12345678", "XYZ-0000Z", "exit" }); + + SubMenuHelper.ChangeConsoleModel(pathToDump: tmpPath, + readLine: () => inputs.Dequeue(), + writeLine: _writeLine, + updateModelOrSerial: (_, _, _) => { }); + + _output.Should().Contain(m => m.Contains("model you entered is invalid")); + } + + [Test] + public void ChangeConsoleModel_ShouldShowErrorMessage_WhenUpdateThrows() + { + var memory = Enumerable.Repeat((byte)0x20, 0x1C7226 + 19).ToArray(); + Encoding.ASCII.GetBytes("CFI-1016A ").CopyTo(memory, 0x1C7226); + var tmpPath = CreateTempFile(memory); + + SubMenuHelper.ChangeConsoleModel(pathToDump: tmpPath, + readLine: () => "CFI-9999Z", + writeLine: _writeLine, + updateModelOrSerial: (_, _, _) => throw new ArgumentException("Simulated failure")); + + _output.Should().Contain(m => m.Contains("error occurred")); + } + + private static string CreateTestFileWithMotherboardSerial(string serial) + { + var data = new byte[0x1C7200 + 16]; + Encoding.ASCII.GetBytes(serial).CopyTo(data, 0x1C7200); + return CreateTempFile(data); + } + + private static string CreateTempFile(byte[] memory) + { + var tmpPath = Path.GetTempFileName(); + File.WriteAllBytes(tmpPath, memory); + return tmpPath; + } + + private static byte[] HexStringToBytes(string hex) + { + if (hex.Length % 2 != 0) + throw new ArgumentException("Hex string must have even length"); + + var bytes = new byte[hex.Length / 2]; + for (int i = 0; i < bytes.Length; i++) + { + bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); + } + return bytes; + } + + private static string TestFileWithSerialWithContent(string serial) + { + var tempFile = Path.GetTempFileName(); + + var serialBytes = Encoding.UTF8.GetBytes(serial.PadRight(17, '\0')); + var requiredLength = 0x1c7210 + serialBytes.Length; + + var bytes = new byte[requiredLength]; // big enough buffer + + Array.Copy(serialBytes, 0, bytes, 0x1c7210, serialBytes.Length); + + File.WriteAllBytes(tempFile, bytes); + return tempFile; + } +} diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/SubMenu/SubMenuService_Tests.cs b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/SubMenu/SubMenuService_Tests.cs new file mode 100644 index 0000000..52476fa --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/SubMenu/SubMenuService_Tests.cs @@ -0,0 +1,65 @@ +using FluentAssertions; +using NUnit.Framework; +using UART_CL_By_TheCod3r.SubMenu; + +namespace UART_CL.UnitTests.SubMenu; + +public class SubMenuService_Tests +{ + private Dictionary _regionMap = null!; + private List _output = null!; + private Action _writeLine = null!; + private Func _readLine = null!; + + [SetUp] + public void SetUp() + { + _regionMap = new Dictionary { { "US1", "United States" } }; + _output = new List(); + _writeLine = s => _output.Add(s); + _readLine = () => ""; // simulate Enter key + } + + [Test] + public void RunSubMenu_ShouldShowNoPathErrorMessage_WhenViewBIOSWithoutFile() + { + var inputs = new Queue(new[] { "2", "", "X" }); + _readLine = () => inputs.Dequeue(); + + SubMenuService.RunSubMenu( + "AppTitle", + _regionMap, + _readLine, + _writeLine, + loadDumpFile: (r, w, f1, f2, a) => null!, + setConsoleTitle: _ => { }, + pathToDump: "" + ); + + _output.Should().Contain("You must select a .bin file to read before proceeding. " + + "Please select a valid .bin file and try again."); + _output.Should().Contain("Press Enter to continue..."); + } + + [Test] + public void RunSubMenu_ShouldExit_WhenUserChooses_X() + { + var inputs = new Queue(new[] { "X" }); + _readLine = () => inputs.Dequeue(); + + var titleSet = ""; + void SetTitle(string title) => titleSet = title; + + SubMenuService.RunSubMenu( + "AppTitle", + _regionMap, + _readLine, + _writeLine, + loadDumpFile: (r, w, f1, f2, a) => null!, + setConsoleTitle: SetTitle, + pathToDump: "" + ); + + titleSet.Should().Be("AppTitle"); + } +} diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/UART-CL.UnitTests.csproj b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/UART-CL.UnitTests.csproj new file mode 100644 index 0000000..ee0f0bc --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/UART-CL.UnitTests.csproj @@ -0,0 +1,25 @@ + + + + net6.0 + UART_CL.UnitTests + enable + enable + + false + + + + + + + + + + + + + + + + diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/UARTMenu/UARTMenuHelper_Tests.cs b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/UARTMenu/UARTMenuHelper_Tests.cs new file mode 100644 index 0000000..8b7d2ef --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/UARTMenu/UARTMenuHelper_Tests.cs @@ -0,0 +1,396 @@ +using System.IO.Ports; +using FluentAssertions; +using NUnit.Framework; +using UART_CL_By_TheCod3r; +using UART_CL_By_TheCod3r.UARTMenu; +using UART_CL_By_TheCod3r.Utilities; + +namespace UART_CL.UnitTests.UARTMenu; + +public class UARTMenuHelper_Tests +{ + private List _output = null!; + private Action _writeLine = null!; + private Func _readLine = null!; + private Queue _readLineInputs = null!; + + [SetUp] + public void SetUp() + { + _output = new List(); + _writeLine = s => _output.Add(s); + _readLineInputs = new Queue(); + _readLine = () => _readLineInputs.Count > 0 ? _readLineInputs.Dequeue() : ""; + } + + [Test] + public void ClearUARTCodes_ShouldWriteClearCommand_AndDisplayUARTOutput() + { + string? writtenCommand = null; + bool wasClosed = false; + var uartOutput = new List { "OK DEVICE XYZ123", "CLEARED ERRORS" }; + + var result = UARTMenuHelper.ClearUARTCodes( + getAvailablePorts: () => new[] { "COM3" }, + promptPortSelection: (_, _) => 1, + configureSerialPort: _ => new SerialPort(), + openSerialPort: (_, _, _) => { }, // skip real open + readUARTLines: _ => uartOutput, + writeLineToPort: (_, cmd) => writtenCommand = cmd, + closePort: _ => wasClosed = true, + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + writtenCommand.Should().Be(PS5UARTUtilities.CalculateChecksum("errlog clear")); + _output.Should().Contain("OK DEVICE XYZ123"); + _output.Should().Contain("CLEARED ERRORS"); + _output.Should().Contain("Press Enter to continue..."); + wasClosed.Should().BeTrue(); + } + + [Test] + public void ClearUARTCodes_ShouldContinue_WhenUserPressesEnter() + { + bool continuePressed = false; + + var result = UARTMenuHelper.ClearUARTCodes( + getAvailablePorts: () => new[] { "COM3" }, + promptPortSelection: (_, _) => 1, + configureSerialPort: _ => new SerialPort(), + openSerialPort: (_, _, _) => { }, + readUARTLines: _ => new List { "Test Line" }, + writeLineToPort: (_, _) => { }, // ignore writing command for this test + closePort: _ => { }, // ignore closing port for this test + readLine: () => + { + continuePressed = true; + return ""; + }, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + continuePressed.Should().BeTrue(); + _output.Should().Contain("Test Line"); + _output.Should().Contain("Press Enter to continue..."); + } + + [Test] + public void ClearUARTCodes_ShouldShowNoDevicesMessage_WhenNoPortsAvailable() + { + var result = UARTMenuHelper.ClearUARTCodes( + getAvailablePorts: () => Array.Empty(), + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("No communication devices were found on this system."); + } + + [Test] + public void ClearUARTCodes_ShouldHandleException_AndPrintErrorMessage() + { + bool readLineCalledAfterError = false; + var errorMessagePrinted = false; + + var result = UARTMenuHelper.ClearUARTCodes( + getAvailablePorts: () => new[] { "COM3" }, + promptPortSelection: (_, _) => 1, + configureSerialPort: _ => throw new InvalidOperationException("Test exception"), + readLine: () => + { + readLineCalledAfterError = true; + return ""; + }, + writeLine: s => + { + if (s.Contains("Error")) + errorMessagePrinted = true; + _output.Add(s); + } + ); + + result.Should().BeTrue(); + errorMessagePrinted.Should().BeTrue(); + readLineCalledAfterError.Should().BeTrue(); + } + + [Test] + public void GetErrorCodesFromPS5_ShouldPrintNoDevicesMessage_WhenNoPortsAvailable() + { + var result = UARTMenuHelper.GetErrorCodesFromPS5( + getAvailablePorts: () => Array.Empty(), + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("No communication devices were found on this system."); + _output.Should().Contain("Please insert a UART compatible device and try again."); + } + + [Test] + public void GetErrorCodesFromPS5_ShouldPrintNoError_WhenCodeStartsWithFFFFFF() + { + var result = UARTMenuHelper.GetErrorCodesFromPS5( + getAvailablePorts: () => new[] { "COM1" }, + promptPortSelection: (_, _) => 1, + configureSerialPorts: _ => new SerialPort(), // Will not be opened, just passed in + openSerialPort: (_, _, _) => { }, // stub to do nothing + collectErrorLines: _ => new List { "OK DEVICE FFFFFFF1" }, + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("No error displayed"); + _output.Should().Contain("Press Enter to continue..."); + } + + [Test] + public void GetErrorCodesFromPS5_ShouldParseError_WhenValidCodeProvided() + { + string? parsed = null; + + var result = UARTMenuHelper.GetErrorCodesFromPS5( + getAvailablePorts: () => new[] { "COM3" }, + promptPortSelection: (_, _) => 1, + configureSerialPorts: _ => new SerialPort(), // won't be opened + openSerialPort: (_, _, _) => { }, // stub to do nothing + collectErrorLines: _ => new List { "OK DEVICE ABCD1234" }, + parseErrors: code => + { + parsed = $"Error parsed: {code}"; + return parsed; + }, + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + parsed.Should().Be("Error parsed: ABCD1234"); + _output.Should().Contain("Error parsed: ABCD1234"); + _output.Should().Contain("Press Enter to continue..."); + } + + [Test] + public void GetErrorCodesFromPS5_ShouldIgnoreNGLine() + { + var result = UARTMenuHelper.GetErrorCodesFromPS5( + getAvailablePorts: () => new[] { "COM4" }, + promptPortSelection: (_, _) => 1, + configureSerialPorts: _ => new SerialPort(), + collectErrorLines: _ => new List { "NG DEVICE 00000001" }, + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("Press Enter to continue..."); + } + + [Test] + public void GetErrorCodesFromPS5_ShouldIgnoreEmptyLines() + { + var result = UARTMenuHelper.GetErrorCodesFromPS5( + getAvailablePorts: () => new[] { "COM2" }, + promptPortSelection: (_, _) => 1, + configureSerialPorts: _ => new SerialPort(), + collectErrorLines: _ => new List { "", " " }, + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("Press Enter to continue..."); + } + + [Test] + public void GetErrorCodesFromPS5_ShouldFallbackToDefaultParser_IfNoneProvided() + { + var result = UARTMenuHelper.GetErrorCodesFromPS5( + getAvailablePorts: () => new[] { "COM5" }, + promptPortSelection: (_, _) => 1, + configureSerialPorts: _ => new SerialPort(), + collectErrorLines: _ => new List { "OK DEVICE 12345678" }, + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("Press Enter to continue..."); + } + + [Test] + public void GetErrorCodesFromPS5_ShouldPrintErrorDetails_WhenExceptionOccurs() + { + var result = UARTMenuHelper.GetErrorCodesFromPS5( + getAvailablePorts: () => new[] { "COM6" }, + promptPortSelection: (_, _) => 1, + configureSerialPorts: _ => throw new InvalidOperationException("Port failed"), + readLine: _readLine, + writeLine: _writeLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("An error occurred while connecting to your selected device."); + _output.Should().Contain("Error details:"); + _output.Should().Contain("Port failed"); + } + + [Test] + public void RunCustomUARTCommand_ShouldReturnTrue_AndShowNoDevices_WhenNoPortsAvailable() + { + var result = UARTMenuHelper.RunCustomUARTCommand( + getAvailablePorts: () => Array.Empty(), + writeLine: _writeLine, + readLine: _readLine + ); + + result.Should().BeTrue(); + _output.Should().Contain("No communication devices were found on this system."); + } + + [Test] + public void RunCustomUARTCommand_ShouldPromptForCommands_AndSendThemUntilExit() + { + var fakeSerialPort = new SerialPort("COM3"); + var sentCommands = new List(); + var uartOutputs = new Queue>(); + var portClosed = false; + + // Simulate UART output lines for each command + uartOutputs.Enqueue(new List { "Response to CMD1" }); + uartOutputs.Enqueue(new List { "Response to CMD2" }); + + // Commands user will enter in sequence, ending with "exit" + _readLineInputs.Enqueue("CMD1"); + _readLineInputs.Enqueue(""); + _readLineInputs.Enqueue("CMD2"); + _readLineInputs.Enqueue(""); + _readLineInputs.Enqueue(""); // empty command triggers warning + _readLineInputs.Enqueue("exit"); + + var result = UARTMenuHelper.RunCustomUARTCommand( + getAvailablePorts: () => new[] { "COM3" }, + promptPortSelection: (count, rl) => 1, + configureSerialPort: portName => + { + portName.Should().Be("COM3"); + return fakeSerialPort; + }, + openSerialPort: (sp, portName, writeLine) => { /* skip real open */ }, + readUARTLines: sp => + { + uartOutputs.TryDequeue(out var lines); + return lines ?? new List(); + }, + readLine: _readLine, + writeLine: _writeLine, + writeLineToPort: (sp, command) => sentCommands.Add(command), + closePort: sp => portClosed = true + ); + + result.Should().BeTrue(); + sentCommands.Should().HaveCount(2); + sentCommands[0].Should().Be(PS5UARTUtilities.CalculateChecksum("CMD1")); + sentCommands[1].Should().Be(PS5UARTUtilities.CalculateChecksum("CMD2")); + + _output.Should().Contain("Please enter a valid command."); + _output.Should().Contain("Response to CMD1"); + _output.Should().Contain("Response to CMD2"); + portClosed.Should().BeTrue(); + } + + [Test] + public void RunCustomUARTCommand_ShouldSendChecksumCommand_AndDisplayUARTOutput() + { + var sentChecksums = new List(); + var uartOutput = new List { "OK DEVICE", "RESULT 123" }; + var portClosed = false; + + _readLineInputs.Enqueue("TESTCOMMAND"); + _readLineInputs.Enqueue(""); + _readLineInputs.Enqueue("exit"); + _readLineInputs.Enqueue(""); + + var result = UARTMenuHelper.RunCustomUARTCommand( + getAvailablePorts: () => new[] { "COM3" }, + promptPortSelection: (count, rl) => 1, + configureSerialPort: portName => new SerialPort(), + openSerialPort: (sp, portName, writeLine) => { }, + readUARTLines: sp => uartOutput, + readLine: _readLine, + writeLine: _writeLine, + writeLineToPort: (sp, command) => sentChecksums.Add(command), + closePort: sp => portClosed = true + ); + + result.Should().BeTrue(); + sentChecksums.Should().ContainSingle().Which.Should().Be(PS5UARTUtilities.CalculateChecksum("TESTCOMMAND")); + _output.Should().Contain("OK DEVICE"); + _output.Should().Contain("RESULT 123"); + portClosed.Should().BeTrue(); + } + + [Test] + public void RunCustomUARTCommand_ShouldHandleExceptions_AndPrintError() + { + var fakeSerialPort = new SerialPort("COM3"); + bool writeLineCalled = false; + + var result = UARTMenuHelper.RunCustomUARTCommand( + getAvailablePorts: () => new[] { "COM3" }, + promptPortSelection: (count, rl) => 1, + configureSerialPort: portName => fakeSerialPort, + openSerialPort: (sp, portName, writeLine) => throw new InvalidOperationException("Open failed"), + readLine: _readLine, + writeLine: s => + { + writeLineCalled = true; + _output.Add(s); + } + ); + + result.Should().BeTrue(); + writeLineCalled.Should().BeTrue(); + _output.Should().Contain("An error occurred while connecting to your selected device."); + _output.Should().Contain("Open failed"); + } + + [Test] + public void RunCustomUARTCommand_ShouldUsePromptPortSelection_Correctly() + { + var promptCalled = false; + var fakeSerialPort = new SerialPort("COM1"); + var ports = new[] { "COM1", "COM2" }; + + _readLineInputs.Enqueue("exit"); + + var result = UARTMenuHelper.RunCustomUARTCommand( + getAvailablePorts: () => ports, + promptPortSelection: (count, rl) => + { + promptCalled = true; + count.Should().Be(2); + return 2; // selects "COM2" + }, + configureSerialPort: portName => + { + portName.Should().Be("COM2"); + return fakeSerialPort; + }, + openSerialPort: (sp, portName, writeLine) => { }, + readUARTLines: sp => new List(), + readLine: _readLine, + writeLine: _writeLine, + closePort: sp => { } + ); + + result.Should().BeTrue(); + promptCalled.Should().BeTrue(); + } +} diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/Utilities/PS5UARTUtilities_Tests.cs b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/Utilities/PS5UARTUtilities_Tests.cs new file mode 100644 index 0000000..b1c3f4e --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/Utilities/PS5UARTUtilities_Tests.cs @@ -0,0 +1,289 @@ +using FluentAssertions; +using NUnit.Framework; +using UART_CL_By_TheCod3r.Utilities; + +namespace UART_CL.UnitTests.Utilities; + +public class PS5UARTUtilities_Tests +{ + [Test] + public void CalculateChecksum_ShouldReturnExpectedChecksum() + { + var result = PS5UARTUtilities.CalculateChecksum("ABC"); + result.Should().Be("ABC:C6"); + } + + [Test] + public void CalculateChecksum_EmptyString_ShouldReturn00() + { + var result = PS5UARTUtilities.CalculateChecksum(""); + result.Should().Be(":00"); + } + + [Test] + public void CalculateChecksum_ShouldHandleUnicodeCharacters() + { + var result = PS5UARTUtilities.CalculateChecksum("ÅÄÖ"); + result.Should().StartWith("ÅÄÖ:"); + } + + [Test] + public void CalculateChecksum_ShouldHandleVeryLongString() + { + var longStr = new string('A', 10000); + var result = PS5UARTUtilities.CalculateChecksum(longStr); + result.Should().StartWith(longStr + ":"); + } + + [Test] + public void HexStringToString_ValidHex_ShouldReturnExpectedString() + { + var result = PS5UARTUtilities.HexStringToString("48656C6C6F"); + result.Should().Be("Hello"); + } + + [Test] + public void HexStringToString_InvalidLength_ShouldThrow() + { + var act = () => PS5UARTUtilities.HexStringToString("ABC"); + act.Should().Throw(); + } + + [Test] + public void HexStringToString_ShouldReturnEmptyString_WhenInputIsEmpty() + { + var result = PS5UARTUtilities.HexStringToString(""); + result.Should().Be(""); + } + + [Test] + public void HexStringToString_ShouldParseLowercaseHex() + { + var result = PS5UARTUtilities.HexStringToString("6869"); + result.Should().Be("hi"); + } + + [Test] + public void ConvertHexStringToByteArray_ValidHex_ShouldReturnExpectedBytes() + { + var result = PS5UARTUtilities.ConvertHexStringToByteArray("4142"); + result.Should().Equal(0x41, 0x42); + } + + [Test] + public void ConvertHexStringToByteArray_OddLength_ShouldThrow() + { + var act = () => PS5UARTUtilities.ConvertHexStringToByteArray("123"); + act.Should().Throw(); + } + + [Test] + public void ConvertHexStringToByteArray_ShouldReturnEmptyArray_WhenInputIsEmpty() + { + var result = PS5UARTUtilities.ConvertHexStringToByteArray(""); + result.Should().BeEmpty(); + } + + [Test] + public void ConvertHexStringToByteArray_ShouldParseLowercase() + { + var result = PS5UARTUtilities.ConvertHexStringToByteArray("ff"); + result.Should().BeEquivalentTo(new byte[] { 255 }); + } + + [Test] + public void ConvertHexStringToByteArray_ShouldThrowFormatException_WhenHexIsInvalid() + { + var act = () => PS5UARTUtilities.ConvertHexStringToByteArray("ZZ"); + act.Should().Throw(); + } + + [Test] + public void ParseErrors_ValidCode_ShouldReturnDescription() + { + File.WriteAllText("errorDB.xml", @" + + 1234Test error + "); + var result = PS5UARTUtilities.ParseErrors("1234"); + result.Should().Contain("Description: Test error"); + File.Delete("errorDB.xml"); + } + + [Test] + public void ParseErrors_InvalidCode_ShouldReturnNoResult() + { + File.WriteAllText("errorDB.xml", @""); + var result = PS5UARTUtilities.ParseErrors("9999"); + result.Should().Contain("No result found"); + File.Delete("errorDB.xml"); + } + + [Test] + public void ParseErrors_MissingFile_ShouldReturnError() + { + if (File.Exists("errorDB.xml")) + File.Delete("errorDB.xml"); + + var result = PS5UARTUtilities.ParseErrors("1234"); + result.Should().Contain("Local XML file not found"); + } + + [Test] + public void ParseErrors_ShouldHandleMalformedXml() + { + File.WriteAllText("errorDB.xml", ""); + var result = PS5UARTUtilities.ParseErrors("123"); + result.Should().StartWith("Error:"); + + File.Delete("errorDB.xml"); + } + + [Test] + public void ParseErrors_ShouldHandleMissingRootElement() + { + File.WriteAllText("errorDB.xml", ""); + var result = PS5UARTUtilities.ParseErrors("123"); + result.Should().Contain("Invalid XML database file"); + + File.Delete("errorDB.xml"); + } + + [Test] + public void ParseErrors_ShouldReturnFirstMatchOnly_WhenMultipleMatchesExist() + { + var xml = @" + + 100First + 100Second + "; + File.WriteAllText("errorDB.xml", xml); + var result = PS5UARTUtilities.ParseErrors("100"); + result.Should().Contain("First").And.NotContain("Second"); + + File.Delete("errorDB.xml"); + } + + [Test] + public void ParseErrors_ShouldHandleNullErrorCode() + { + var xml = @" + + No code + "; + File.WriteAllText("errorDB.xml", xml); + var result = PS5UARTUtilities.ParseErrors(null); + result.Should().Contain("No error code given."); + + File.Delete("errorDB.xml"); + } + + [Test] + public void PatternAt_ShouldReturnEmpty_WhenPatternIsEmpty() + { + var result = PS5UARTUtilities.PatternAt(new byte[] { 1, 2, 3 }, + Array.Empty()); + result.Should().BeEmpty(); + } + + [Test] + public void PatternAt_ShouldReturnEmpty_WhenPatternIsLongerThanSource() + { + var result = PS5UARTUtilities.PatternAt(new byte[] { 1, 2 }, + new byte[] { 1, 2, 3 }); + result.Should().BeEmpty(); + } + + [Test] + public void PatternAt_ShouldReturnZero_WhenSourceEqualsPattern() + { + var result = PS5UARTUtilities.PatternAt(new byte[] { 1, 2, 3 }, + new byte[] { 1, 2, 3 }); + result.Should().ContainSingle().Which.Should().Be(0); + } + + [Test] + public void PatternAt_FindsPatternOnce() + { + var result = PS5UARTUtilities.PatternAt(new byte[] { 1, 2, 3, 4, 5 }, + new byte[] { 3, 4 } + ).ToList(); + + result.Should().Equal(2); + } + + [Test] + public void PatternAt_FindsPatternMultipleTimes() + { + var result = PS5UARTUtilities.PatternAt(new byte[] { 1, 2, 3, 4, 3, 4 }, + new byte[] { 3, 4 } + ).ToList(); + + result.Should().Equal(2, 4); + } + + [Test] + public void PatternAt_NoMatch_ShouldReturnEmpty() + { + var result = PS5UARTUtilities.PatternAt(new byte[] { 1, 2, 3 }, + new byte[] { 4, 5 } + ).ToList(); + + result.Should().BeEmpty(); + } + + [Test] + public void GetFriendlyName_ShouldHandleNullInput() + { + var name = PS5UARTUtilities.GetFriendlyName(null); + name.Should().Be("Unknown Port Name"); + } + + [Test] + public void GetFriendlyName_ShouldHandleSpecialCharacters() + { + var name = PS5UARTUtilities.GetFriendlyName("COM😊"); + name.Should().Be("Unknown Port Name"); + } + + [Test] + public void GetFriendlyName_ShouldReturnNonNullValue() + { + var result = PS5UARTUtilities.GetFriendlyName("COM1"); + result.Should().NotBeNullOrEmpty(); + } + + [Test] + public void DownloadDatabase_WithInvalidUrl_ShouldReturnFalse() + { + var invalidUrl = "http://invalid.url/fakefile.txt"; + var tempFile = Path.GetTempFileName(); + + var result = PS5UARTUtilities.DownloadDatabase(invalidUrl, tempFile); + + result.Should().BeFalse(); + + File.Delete(tempFile); + } + + [Test] + public void DownloadDatabase_WithFileUrl_ShouldReturnTrue() + { + var sourceFile = Path.GetTempFileName(); + File.WriteAllText(sourceFile, "test content"); + + var destinationFile = Path.GetTempFileName(); + File.Delete(destinationFile); // Ensure it's empty before test + + var fileUrl = new Uri(sourceFile).AbsoluteUri; + + var result = PS5UARTUtilities.DownloadDatabase(fileUrl, destinationFile); + + result.Should().BeTrue(); + File.Exists(destinationFile).Should().BeTrue(); + File.ReadAllText(destinationFile).Should().Be("test content"); + + File.Delete(sourceFile); + File.Delete(destinationFile); + } +} \ No newline at end of file diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/bin/Debug/net6.0/nunit_random_seed.tmp b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/bin/Debug/net6.0/nunit_random_seed.tmp new file mode 100644 index 0000000..6ce7b51 --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/bin/Debug/net6.0/nunit_random_seed.tmp @@ -0,0 +1 @@ +1039403791 \ No newline at end of file diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..36203c7 --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")] diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.assets.cache b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.assets.cache new file mode 100644 index 0000000..d90666e Binary files /dev/null and b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.assets.cache differ diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.csproj.BuildWithSkipAnalyzers b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.csproj.FileListAbsolute.txt b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..ebd31e5 --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/Debug/net6.0/UART-CL.UnitTests.csproj.FileListAbsolute.txt @@ -0,0 +1,128 @@ +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\CoverletSourceRootsMapping +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.csproj.AssemblyReference.cache +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.AssemblyInfoInputs.cache +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.AssemblyInfo.cs +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.csproj.CoreCompileInputs.cache +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\testhost.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL By TheCod3r.deps.json +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL By TheCod3r.runtimeconfig.json +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL By TheCod3r.exe +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\testhost.exe +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.TestPlatform.PlatformAbstractions.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\NUnit3.TestAdapter.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\NUnit3.TestAdapter.pdb +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\nunit.engine.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\nunit.engine.api.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\nunit.engine.core.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\testcentric.engine.metadata.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL.UnitTests.deps.json +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL.UnitTests.runtimeconfig.json +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL.UnitTests.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL.UnitTests.pdb +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Colorful.Console.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\FluentAssertions.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.VisualStudio.CodeCoverage.Shim.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.TestPlatform.CoreUtilities.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.TestPlatform.CommunicationUtilities.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.TestPlatform.CrossPlatEngine.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.TestPlatform.Utilities.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.VisualStudio.TestPlatform.Common.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Microsoft.Win32.SystemEvents.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\Newtonsoft.Json.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\NuGet.Frameworks.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\nunit.framework.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.CodeDom.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.Configuration.ConfigurationManager.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.Drawing.Common.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.IO.Ports.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.Management.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.Security.Cryptography.ProtectedData.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.Security.Permissions.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\System.Windows.Extensions.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\cs\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\cs\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\de\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\de\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\es\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\es\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\fr\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\fr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\it\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\it\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ja\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ja\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ko\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ko\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pl\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pl\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pt-BR\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pt-BR\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ru\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ru\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\tr\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\tr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hans\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hans\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hant\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hant\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\cs\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\cs\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\cs\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\de\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\de\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\de\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\es\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\es\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\es\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\fr\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\fr\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\fr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\it\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\it\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\it\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ja\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ja\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ja\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ko\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ko\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ko\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pl\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pl\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pl\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pt-BR\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pt-BR\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\pt-BR\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ru\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ru\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\ru\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\tr\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\tr\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\tr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hans\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hans\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hans\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hant\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hant\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\zh-Hant\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\win\lib\net6.0\Microsoft.Win32.SystemEvents.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\linux-arm\native\libSystem.IO.Ports.Native.so +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\linux-arm64\native\libSystem.IO.Ports.Native.so +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\linux-x64\native\libSystem.IO.Ports.Native.so +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\osx-arm64\native\libSystem.IO.Ports.Native.dylib +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\osx-x64\native\libSystem.IO.Ports.Native.dylib +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\unix\lib\net6.0\System.Drawing.Common.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\win\lib\net6.0\System.Drawing.Common.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\unix\lib\net6.0\System.IO.Ports.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\win\lib\net6.0\System.IO.Ports.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\win\lib\net6.0\System.Management.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\win\lib\net6.0\System.Security.Cryptography.ProtectedData.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\runtimes\win\lib\net6.0\System.Windows.Extensions.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\bin\Debug\net6.0\UART-CL By TheCod3r.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.csproj.CopyComplete +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\refint\UART-CL.UnitTests.dll +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.pdb +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\UART-CL.UnitTests.genruntimeconfig.cache +C:\Users\Rory B\Documents\PS5NorModifier\UART-CL By TheCod3r\tests\UART-CL.UnitTests\obj\Debug\net6.0\ref\UART-CL.UnitTests.dll diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.dgspec.json b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.dgspec.json new file mode 100644 index 0000000..4798e96 --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.dgspec.json @@ -0,0 +1,162 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\UART-CL.UnitTests.csproj": {} + }, + "projects": { + "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\UART-CL.UnitTests.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\UART-CL.UnitTests.csproj", + "projectName": "UART-CL.UnitTests", + "projectPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\UART-CL.UnitTests.csproj", + "packagesPath": "C:\\Users\\Rory B\\.nuget\\packages\\", + "outputPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Rory B\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": { + "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\UART-CL By TheCod3r.csproj": { + "projectPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\UART-CL By TheCod3r.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "FluentAssertions": { + "target": "Package", + "version": "[7.2.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.1.0, )" + }, + "NUnit": { + "target": "Package", + "version": "[3.13.3, )" + }, + "NUnit.Analyzers": { + "target": "Package", + "version": "[3.3.0, )" + }, + "NUnit3TestAdapter": { + "target": "Package", + "version": "[4.2.1, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[3.1.2, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.401\\RuntimeIdentifierGraph.json" + } + } + }, + "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\UART-CL By TheCod3r.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\UART-CL By TheCod3r.csproj", + "projectName": "UART-CL By TheCod3r", + "projectPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\UART-CL By TheCod3r.csproj", + "packagesPath": "C:\\Users\\Rory B\\.nuget\\packages\\", + "outputPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Rory B\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "Colorful.Console": { + "target": "Package", + "version": "[1.2.15, )" + }, + "System.IO.Ports": { + "target": "Package", + "version": "[8.0.0, )" + }, + "System.Management": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.401\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.g.props b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.g.props new file mode 100644 index 0000000..c179b7f --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.g.props @@ -0,0 +1,26 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\Rory B\.nuget\packages\ + PackageReference + 6.3.0 + + + + + + + + + + + + + C:\Users\Rory B\.nuget\packages\nunit.analyzers\3.3.0 + C:\Users\Rory B\.nuget\packages\newtonsoft.json\9.0.1 + + \ No newline at end of file diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.g.targets b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.g.targets new file mode 100644 index 0000000..2b11699 --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/UART-CL.UnitTests.csproj.nuget.g.targets @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/project.assets.json b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/project.assets.json new file mode 100644 index 0000000..ddd03d5 --- /dev/null +++ b/UART-CL By TheCod3r/tests/UART-CL.UnitTests/obj/project.assets.json @@ -0,0 +1,5099 @@ +{ + "version": 3, + "targets": { + "net6.0": { + "Colorful.Console/1.2.15": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.0.1", + "System.Collections": "4.0.11", + "System.Collections.Concurrent": "4.0.12", + "System.Console": "4.0.0", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO.FileSystem": "4.0.1", + "System.Linq": "4.1.0", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Text.RegularExpressions": "4.1.0" + }, + "compile": { + "lib/netstandard2.0/Colorful.Console.dll": {} + }, + "runtime": { + "lib/netstandard2.0/Colorful.Console.dll": {} + } + }, + "coverlet.collector/3.1.2": { + "type": "package", + "build": { + "build/netstandard1.0/coverlet.collector.targets": {} + } + }, + "FluentAssertions/7.2.0": { + "type": "package", + "dependencies": { + "System.Configuration.ConfigurationManager": "6.0.0" + }, + "compile": { + "lib/net6.0/FluentAssertions.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net6.0/FluentAssertions.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeCoverage/17.1.0": { + "type": "package", + "compile": { + "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "runtime": { + "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "build": { + "build/netstandard1.0/Microsoft.CodeCoverage.props": {}, + "build/netstandard1.0/Microsoft.CodeCoverage.targets": {} + } + }, + "Microsoft.CSharp/4.0.1": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Globalization": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.0/Microsoft.CSharp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.NET.Test.Sdk/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeCoverage": "17.1.0", + "Microsoft.TestPlatform.TestHost": "17.1.0" + }, + "compile": { + "lib/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + }, + "build": { + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.props": {}, + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.targets": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/Microsoft.NET.Test.Sdk.props": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.0.1": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.TestPlatform.ObjectModel/17.1.0": { + "type": "package", + "dependencies": { + "NuGet.Frameworks": "5.11.0", + "System.Reflection.Metadata": "1.6.0" + }, + "compile": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "resource": { + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.TestPlatform.TestHost/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.1.0", + "Newtonsoft.Json": "9.0.1" + }, + "compile": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/netcoreapp2.1/testhost.dll": { + "related": ".deps.json" + } + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/netcoreapp2.1/testhost.dll": { + "related": ".deps.json" + } + }, + "resource": { + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hant" + } + }, + "build": { + "build/netcoreapp2.1/Microsoft.TestPlatform.TestHost.props": {} + } + }, + "Microsoft.Win32.SystemEvents/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/Microsoft.Win32.SystemEvents.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Microsoft.Win32.SystemEvents.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "NETStandard.Library/2.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + }, + "build": { + "build/netstandard2.0/NETStandard.Library.targets": {} + } + }, + "Newtonsoft.Json/9.0.1": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Extensions": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Text.Encoding": "4.0.11", + "System.Text.Encoding.Extensions": "4.0.11", + "System.Text.RegularExpressions": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11", + "System.Xml.ReaderWriter": "4.0.11", + "System.Xml.XDocument": "4.0.11" + }, + "compile": { + "lib/netstandard1.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "NuGet.Frameworks/5.11.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/NuGet.Frameworks.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NuGet.Frameworks.dll": { + "related": ".xml" + } + } + }, + "NUnit/3.13.3": { + "type": "package", + "dependencies": { + "NETStandard.Library": "2.0.0" + }, + "compile": { + "lib/netstandard2.0/nunit.framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/nunit.framework.dll": { + "related": ".xml" + } + }, + "build": { + "build/NUnit.props": {} + } + }, + "NUnit.Analyzers/3.3.0": { + "type": "package" + }, + "NUnit3TestAdapter/4.2.1": { + "type": "package", + "build": { + "build/netcoreapp2.1/NUnit3TestAdapter.props": {} + } + }, + "runtime.linux-arm.runtime.native.System.IO.Ports/8.0.0": { + "type": "package", + "runtimeTargets": { + "runtimes/linux-arm/native/libSystem.IO.Ports.Native.so": { + "assetType": "native", + "rid": "linux-arm" + } + } + }, + "runtime.linux-arm64.runtime.native.System.IO.Ports/8.0.0": { + "type": "package", + "runtimeTargets": { + "runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so": { + "assetType": "native", + "rid": "linux-arm64" + } + } + }, + "runtime.linux-x64.runtime.native.System.IO.Ports/8.0.0": { + "type": "package", + "runtimeTargets": { + "runtimes/linux-x64/native/libSystem.IO.Ports.Native.so": { + "assetType": "native", + "rid": "linux-x64" + } + } + }, + "runtime.native.System.IO.Ports/8.0.0": { + "type": "package", + "dependencies": { + "runtime.linux-arm.runtime.native.System.IO.Ports": "8.0.0", + "runtime.linux-arm64.runtime.native.System.IO.Ports": "8.0.0", + "runtime.linux-x64.runtime.native.System.IO.Ports": "8.0.0", + "runtime.osx-arm64.runtime.native.System.IO.Ports": "8.0.0", + "runtime.osx-x64.runtime.native.System.IO.Ports": "8.0.0" + } + }, + "runtime.osx-arm64.runtime.native.System.IO.Ports/8.0.0": { + "type": "package", + "runtimeTargets": { + "runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib": { + "assetType": "native", + "rid": "osx-arm64" + } + } + }, + "runtime.osx-x64.runtime.native.System.IO.Ports/8.0.0": { + "type": "package", + "runtimeTargets": { + "runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib": { + "assetType": "native", + "rid": "osx-x64" + } + } + }, + "System.CodeDom/8.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.CodeDom.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Collections/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Collections.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Concurrent/4.0.12": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Collections.Concurrent.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Concurrent.dll": {} + } + }, + "System.Configuration.ConfigurationManager/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.Cryptography.ProtectedData": "6.0.0", + "System.Security.Permissions": "6.0.0" + }, + "compile": { + "lib/net6.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Console/4.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.Runtime": "4.1.0", + "System.Text.Encoding": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Console.dll": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Debug/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Diagnostics.Debug.dll": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Tools/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Tracing/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Drawing.Common/6.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Win32.SystemEvents": "6.0.0" + }, + "compile": { + "lib/net6.0/System.Drawing.Common.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Drawing.Common.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/net6.0/System.Drawing.Common.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/net6.0/System.Drawing.Common.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Dynamic.Runtime/4.0.11": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Dynamic.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Globalization.dll": { + "related": ".xml" + } + } + }, + "System.IO/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.5/System.IO.dll": { + "related": ".xml" + } + } + }, + "System.IO.FileSystem/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Text.Encoding": "4.0.11", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.IO.FileSystem.dll": { + "related": ".xml" + } + } + }, + "System.IO.FileSystem.Primitives/4.0.1": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.IO.Ports/8.0.0": { + "type": "package", + "dependencies": { + "runtime.native.System.IO.Ports": "8.0.0" + }, + "compile": { + "lib/net6.0/System.IO.Ports.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.IO.Ports.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/net6.0/System.IO.Ports.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/net6.0/System.IO.Ports.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Linq/4.1.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + }, + "compile": { + "ref/netstandard1.6/System.Linq.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.6/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.1.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Linq": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Emit.Lightweight": "4.0.1", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.6/System.Linq.Expressions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.6/System.Linq.Expressions.dll": {} + } + }, + "System.Management/8.0.0": { + "type": "package", + "dependencies": { + "System.CodeDom": "8.0.0" + }, + "compile": { + "lib/net6.0/System.Management.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Management.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Management.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.ObjectModel/4.0.12": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.ObjectModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.ObjectModel.dll": {} + } + }, + "System.Reflection/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.IO": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Reflection.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Emit/4.0.1": { + "type": "package", + "dependencies": { + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.1/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.0.1": { + "type": "package", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Emit.Lightweight/4.0.1": { + "type": "package", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {} + } + }, + "System.Reflection.Extensions/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Primitives/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.TypeExtensions/4.1.0": { + "type": "package", + "dependencies": { + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Globalization": "4.0.11", + "System.Reflection": "4.1.0", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.0/System.Resources.ResourceManager.dll": { + "related": ".xml" + } + } + }, + "System.Runtime/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Extensions/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Handles/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Handles.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.InteropServices/4.1.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Reflection": "4.1.0", + "System.Reflection.Primitives": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Handles": "4.0.1" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.InteropServices.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "type": "package", + "dependencies": { + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Security.AccessControl/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Security.AccessControl.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.ProtectedData/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Permissions/6.0.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Windows.Extensions": "6.0.0" + }, + "compile": { + "lib/net6.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + } + }, + "System.Text.Encoding/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encoding.Extensions/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0", + "System.Text.Encoding": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Text.RegularExpressions/4.1.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Globalization": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.6/System.Text.RegularExpressions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.6/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.0.11": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": {} + } + }, + "System.Threading.Tasks/4.0.11": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": { + "related": ".xml" + } + } + }, + "System.Threading.Tasks.Extensions/4.0.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "lib/netstandard1.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Windows.Extensions/6.0.0": { + "type": "package", + "dependencies": { + "System.Drawing.Common": "6.0.0" + }, + "compile": { + "lib/net6.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Windows.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Xml.ReaderWriter/4.0.11": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Text.Encoding.Extensions": "4.0.11", + "System.Text.RegularExpressions": "4.1.0", + "System.Threading.Tasks": "4.0.11", + "System.Threading.Tasks.Extensions": "4.0.0" + }, + "compile": { + "ref/netstandard1.3/System.Xml.ReaderWriter.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.0.11": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tools": "4.0.1", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "System.Xml.ReaderWriter": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Xml.XDocument.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Xml.XDocument.dll": {} + } + }, + "UART-CL By TheCod3r/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v6.0", + "dependencies": { + "Colorful.Console": "1.2.15", + "System.IO.Ports": "8.0.0", + "System.Management": "8.0.0" + }, + "compile": { + "bin/placeholder/UART-CL By TheCod3r.dll": {} + }, + "runtime": { + "bin/placeholder/UART-CL By TheCod3r.dll": {} + } + } + } + }, + "libraries": { + "Colorful.Console/1.2.15": { + "sha512": "iDBG+0MHkVzM/p74WsfSpcNP2hL7E3o+8Y5ZEEbWQuYmRtHh/YXdbfEnvusTS2Ds8+KX17NGvuNOgTfBxXLCEw==", + "type": "package", + "path": "colorful.console/1.2.15", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "colorful.console.1.2.15.nupkg.sha512", + "colorful.console.nuspec", + "lib/net40/Colorful.Console.dll", + "lib/net45/Colorful.Console.dll", + "lib/net451/Colorful.Console.dll", + "lib/net452/Colorful.Console.dll", + "lib/net46/Colorful.Console.dll", + "lib/net461/Colorful.Console.dll", + "lib/netstandard2.0/Colorful.Console.dll" + ] + }, + "coverlet.collector/3.1.2": { + "sha512": "wuLDIDKD5XMt0A7lE31JPenT7QQwZPFkP5rRpdJeblyXZ9MGLI8rYjvm5fvAKln+2/X+4IxxQDxBtwdrqKNLZw==", + "type": "package", + "path": "coverlet.collector/3.1.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/netstandard1.0/Microsoft.CSharp.dll", + "build/netstandard1.0/Microsoft.DotNet.PlatformAbstractions.dll", + "build/netstandard1.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "build/netstandard1.0/Microsoft.Extensions.DependencyInjection.dll", + "build/netstandard1.0/Microsoft.Extensions.DependencyModel.dll", + "build/netstandard1.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "build/netstandard1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "build/netstandard1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netstandard1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "build/netstandard1.0/Mono.Cecil.Mdb.dll", + "build/netstandard1.0/Mono.Cecil.Pdb.dll", + "build/netstandard1.0/Mono.Cecil.Rocks.dll", + "build/netstandard1.0/Mono.Cecil.dll", + "build/netstandard1.0/Newtonsoft.Json.dll", + "build/netstandard1.0/NuGet.Frameworks.dll", + "build/netstandard1.0/System.AppContext.dll", + "build/netstandard1.0/System.Collections.Immutable.dll", + "build/netstandard1.0/System.Dynamic.Runtime.dll", + "build/netstandard1.0/System.IO.FileSystem.Primitives.dll", + "build/netstandard1.0/System.Linq.Expressions.dll", + "build/netstandard1.0/System.Linq.dll", + "build/netstandard1.0/System.ObjectModel.dll", + "build/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", + "build/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "build/netstandard1.0/System.Reflection.Emit.dll", + "build/netstandard1.0/System.Reflection.Metadata.dll", + "build/netstandard1.0/System.Reflection.TypeExtensions.dll", + "build/netstandard1.0/System.Runtime.Serialization.Primitives.dll", + "build/netstandard1.0/System.Text.RegularExpressions.dll", + "build/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "build/netstandard1.0/System.Threading.dll", + "build/netstandard1.0/System.Xml.ReaderWriter.dll", + "build/netstandard1.0/System.Xml.XDocument.dll", + "build/netstandard1.0/coverlet.collector.deps.json", + "build/netstandard1.0/coverlet.collector.dll", + "build/netstandard1.0/coverlet.collector.pdb", + "build/netstandard1.0/coverlet.collector.targets", + "build/netstandard1.0/coverlet.core.dll", + "build/netstandard1.0/coverlet.core.pdb", + "coverlet-icon.png", + "coverlet.collector.3.1.2.nupkg.sha512", + "coverlet.collector.nuspec" + ] + }, + "FluentAssertions/7.2.0": { + "sha512": "k94gV49Otru4e9nKtj36KpA9UkjuAGKPmhfM0oqyI+rrtxhSrgaeEhILR0AbJ9iNaoagAeQtawPz6njQOC6WQA==", + "type": "package", + "path": "fluentassertions/7.2.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "FluentAssertions.png", + "fluentassertions.7.2.0.nupkg.sha512", + "fluentassertions.nuspec", + "lib/net47/FluentAssertions.dll", + "lib/net47/FluentAssertions.pdb", + "lib/net47/FluentAssertions.xml", + "lib/net6.0/FluentAssertions.dll", + "lib/net6.0/FluentAssertions.pdb", + "lib/net6.0/FluentAssertions.xml", + "lib/netstandard2.0/FluentAssertions.dll", + "lib/netstandard2.0/FluentAssertions.pdb", + "lib/netstandard2.0/FluentAssertions.xml", + "lib/netstandard2.1/FluentAssertions.dll", + "lib/netstandard2.1/FluentAssertions.pdb", + "lib/netstandard2.1/FluentAssertions.xml" + ] + }, + "Microsoft.CodeCoverage/17.1.0": { + "sha512": "0N/ZJ71ncCxQWhgtkEYKOgu2oMHa8h1tsOUbhmIKXF8UwtSUCe4vHAsJ3DVcNWRwNfQzSTy263ZE+QF6MdIhhQ==", + "type": "package", + "path": "microsoft.codecoverage/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "ThirdPartyNotices.txt", + "build/netstandard1.0/CodeCoverage/CodeCoverage.config", + "build/netstandard1.0/CodeCoverage/CodeCoverage.exe", + "build/netstandard1.0/CodeCoverage/VanguardInstrumentationProfiler_x86.config", + "build/netstandard1.0/CodeCoverage/amd64/CodeCoverage.exe", + "build/netstandard1.0/CodeCoverage/amd64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/CodeCoverage/amd64/covrun64.dll", + "build/netstandard1.0/CodeCoverage/amd64/msdia140.dll", + "build/netstandard1.0/CodeCoverage/amd64/msvcdis140.dll", + "build/netstandard1.0/CodeCoverage/amd64/msvcp140.dll", + "build/netstandard1.0/CodeCoverage/amd64/msvcp140_atomic_wait.dll", + "build/netstandard1.0/CodeCoverage/amd64/vcruntime140.dll", + "build/netstandard1.0/CodeCoverage/amd64/vcruntime140_1.dll", + "build/netstandard1.0/CodeCoverage/codecoveragemessages.dll", + "build/netstandard1.0/CodeCoverage/coreclr/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "build/netstandard1.0/CodeCoverage/covrun32.dll", + "build/netstandard1.0/CodeCoverage/msdia140.dll", + "build/netstandard1.0/CodeCoverage/msvcdis140.dll", + "build/netstandard1.0/CodeCoverage/msvcp140.dll", + "build/netstandard1.0/CodeCoverage/msvcp140_atomic_wait.dll", + "build/netstandard1.0/CodeCoverage/vcruntime140.dll", + "build/netstandard1.0/InstrumentationEngine/alpine/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/InstrumentationEngine/alpine/x64/libCoverageInstrumentationMethod.so", + "build/netstandard1.0/InstrumentationEngine/alpine/x64/libInstrumentationEngine.so", + "build/netstandard1.0/InstrumentationEngine/macos/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/InstrumentationEngine/macos/x64/libCoverageInstrumentationMethod.dylib", + "build/netstandard1.0/InstrumentationEngine/macos/x64/libInstrumentationEngine.dylib", + "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/libCoverageInstrumentationMethod.so", + "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/libInstrumentationEngine.so", + "build/netstandard1.0/InstrumentationEngine/x64/MicrosoftInstrumentationEngine_x64.dll", + "build/netstandard1.0/InstrumentationEngine/x86/MicrosoftInstrumentationEngine_x86.dll", + "build/netstandard1.0/Microsoft.CodeCoverage.props", + "build/netstandard1.0/Microsoft.CodeCoverage.targets", + "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Core.dll", + "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Instrumentation.dll", + "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Interprocess.dll", + "build/netstandard1.0/Microsoft.VisualStudio.TraceDataCollector.dll", + "build/netstandard1.0/Mono.Cecil.Pdb.dll", + "build/netstandard1.0/Mono.Cecil.dll", + "build/netstandard1.0/ThirdPartyNotices.txt", + "build/netstandard1.0/cs/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/de/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/es/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/fr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/it/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/ja/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/ko/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/pl/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/pt-BR/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/ru/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/tr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/zh-Hans/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/zh-Hant/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "lib/net45/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "microsoft.codecoverage.17.1.0.nupkg.sha512", + "microsoft.codecoverage.nuspec" + ] + }, + "Microsoft.CSharp/4.0.1": { + "sha512": "17h8b5mXa87XYKrrVqdgZ38JefSUqLChUQpXgSnpzsM0nDOhE40FTeNWOJ/YmySGV6tG6T8+hjz6vxbknHJr6A==", + "type": "package", + "path": "microsoft.csharp/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/Microsoft.CSharp.dll", + "lib/netstandard1.3/Microsoft.CSharp.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "microsoft.csharp.4.0.1.nupkg.sha512", + "microsoft.csharp.nuspec", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/Microsoft.CSharp.dll", + "ref/netcore50/Microsoft.CSharp.xml", + "ref/netcore50/de/Microsoft.CSharp.xml", + "ref/netcore50/es/Microsoft.CSharp.xml", + "ref/netcore50/fr/Microsoft.CSharp.xml", + "ref/netcore50/it/Microsoft.CSharp.xml", + "ref/netcore50/ja/Microsoft.CSharp.xml", + "ref/netcore50/ko/Microsoft.CSharp.xml", + "ref/netcore50/ru/Microsoft.CSharp.xml", + "ref/netcore50/zh-hans/Microsoft.CSharp.xml", + "ref/netcore50/zh-hant/Microsoft.CSharp.xml", + "ref/netstandard1.0/Microsoft.CSharp.dll", + "ref/netstandard1.0/Microsoft.CSharp.xml", + "ref/netstandard1.0/de/Microsoft.CSharp.xml", + "ref/netstandard1.0/es/Microsoft.CSharp.xml", + "ref/netstandard1.0/fr/Microsoft.CSharp.xml", + "ref/netstandard1.0/it/Microsoft.CSharp.xml", + "ref/netstandard1.0/ja/Microsoft.CSharp.xml", + "ref/netstandard1.0/ko/Microsoft.CSharp.xml", + "ref/netstandard1.0/ru/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "Microsoft.NET.Test.Sdk/17.1.0": { + "sha512": "MVKvOsHIfrZrvg+8aqOF5dknO/qWrR1sWZjMPQ1N42MKMlL/zQL30FQFZxPeWfmVKWUWAOmAHYsqB5OerTKziw==", + "type": "package", + "path": "microsoft.net.test.sdk/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "build/net40/Microsoft.NET.Test.Sdk.props", + "build/net40/Microsoft.NET.Test.Sdk.targets", + "build/net45/Microsoft.NET.Test.Sdk.props", + "build/net45/Microsoft.NET.Test.Sdk.targets", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.cs", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.fs", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.vb", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.props", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.targets", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.cs", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.fs", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.vb", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.props", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.targets", + "build/uap10.0/Microsoft.NET.Test.Sdk.props", + "buildMultiTargeting/Microsoft.NET.Test.Sdk.props", + "lib/net40/_._", + "lib/net45/_._", + "lib/netcoreapp1.0/_._", + "lib/netcoreapp2.1/_._", + "lib/uap10.0/_._", + "microsoft.net.test.sdk.17.1.0.nupkg.sha512", + "microsoft.net.test.sdk.nuspec" + ] + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.0.1": { + "sha512": "rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw==", + "type": "package", + "path": "microsoft.netcore.targets/1.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.0.1.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Microsoft.TestPlatform.ObjectModel/17.1.0": { + "sha512": "OMo/FYnKGy3lZEK0gfitskRM3ga/YBt6MyCyFPq0xNLeybGOQ6HnYNAAvzyePo5WPuMiw3LX+HiuRWNjnas1fA==", + "type": "package", + "path": "microsoft.testplatform.objectmodel/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "lib/net45/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net45/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net45/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net45/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net451/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net451/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net451/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard1.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard1.3/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard1.3/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard1.3/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard2.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/uap10.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/uap10.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "microsoft.testplatform.objectmodel.17.1.0.nupkg.sha512", + "microsoft.testplatform.objectmodel.nuspec" + ] + }, + "Microsoft.TestPlatform.TestHost/17.1.0": { + "sha512": "JS0JDLniDhIzkSPLHz7N/x1CG8ywJOtwInFDYA3KQvbz+ojGoT5MT2YDVReL1b86zmNRV8339vsTSm/zh0RcMg==", + "type": "package", + "path": "microsoft.testplatform.testhost/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "ThirdPartyNotices.txt", + "build/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp1.0/Microsoft.TestPlatform.TestHost.props", + "build/netcoreapp1.0/x64/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp1.0/x64/testhost.dll", + "build/netcoreapp1.0/x64/testhost.exe", + "build/netcoreapp1.0/x86/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp1.0/x86/testhost.x86.dll", + "build/netcoreapp1.0/x86/testhost.x86.exe", + "build/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp2.1/Microsoft.TestPlatform.TestHost.props", + "build/netcoreapp2.1/x64/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp2.1/x64/testhost.dll", + "build/netcoreapp2.1/x64/testhost.exe", + "build/netcoreapp2.1/x86/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp2.1/x86/testhost.x86.dll", + "build/netcoreapp2.1/x86/testhost.x86.exe", + "build/uap10.0/Microsoft.TestPlatform.TestHost.props", + "build/uap10.0/Microsoft.TestPlatform.TestHost.targets", + "build/uap10.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/cs/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/x64/msdia140.dll", + "build/uap10.0/x86/msdia140.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/_._", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.Utilities.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/testhost.deps.json", + "lib/netcoreapp1.0/testhost.dll", + "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/x64/msdia140.dll", + "lib/netcoreapp1.0/x86/msdia140.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll", + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/testhost.deps.json", + "lib/netcoreapp2.1/testhost.dll", + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/x64/msdia140.dll", + "lib/netcoreapp2.1/x86/msdia140.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/uap10.0/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/uap10.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/uap10.0/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/uap10.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/uap10.0/Microsoft.TestPlatform.Utilities.dll", + "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/uap10.0/testhost.dll", + "microsoft.testplatform.testhost.17.1.0.nupkg.sha512", + "microsoft.testplatform.testhost.nuspec" + ] + }, + "Microsoft.Win32.SystemEvents/6.0.0": { + "sha512": "hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==", + "type": "package", + "path": "microsoft.win32.systemevents/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/Microsoft.Win32.SystemEvents.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/Microsoft.Win32.SystemEvents.dll", + "lib/net461/Microsoft.Win32.SystemEvents.xml", + "lib/net6.0/Microsoft.Win32.SystemEvents.dll", + "lib/net6.0/Microsoft.Win32.SystemEvents.xml", + "lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.dll", + "lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.xml", + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll", + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.xml", + "microsoft.win32.systemevents.6.0.0.nupkg.sha512", + "microsoft.win32.systemevents.nuspec", + "runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll", + "runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.xml", + "runtimes/win/lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.dll", + "runtimes/win/lib/netcoreapp3.1/Microsoft.Win32.SystemEvents.xml", + "useSharedDesignerContext.txt" + ] + }, + "NETStandard.Library/2.0.0": { + "sha512": "7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==", + "type": "package", + "path": "netstandard.library/2.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "build/NETStandard.Library.targets", + "build/netstandard2.0/NETStandard.Library.targets", + "build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll", + "build/netstandard2.0/ref/System.AppContext.dll", + "build/netstandard2.0/ref/System.Collections.Concurrent.dll", + "build/netstandard2.0/ref/System.Collections.NonGeneric.dll", + "build/netstandard2.0/ref/System.Collections.Specialized.dll", + "build/netstandard2.0/ref/System.Collections.dll", + "build/netstandard2.0/ref/System.ComponentModel.Composition.dll", + "build/netstandard2.0/ref/System.ComponentModel.EventBasedAsync.dll", + "build/netstandard2.0/ref/System.ComponentModel.Primitives.dll", + "build/netstandard2.0/ref/System.ComponentModel.TypeConverter.dll", + "build/netstandard2.0/ref/System.ComponentModel.dll", + "build/netstandard2.0/ref/System.Console.dll", + "build/netstandard2.0/ref/System.Core.dll", + "build/netstandard2.0/ref/System.Data.Common.dll", + "build/netstandard2.0/ref/System.Data.dll", + "build/netstandard2.0/ref/System.Diagnostics.Contracts.dll", + "build/netstandard2.0/ref/System.Diagnostics.Debug.dll", + "build/netstandard2.0/ref/System.Diagnostics.FileVersionInfo.dll", + "build/netstandard2.0/ref/System.Diagnostics.Process.dll", + "build/netstandard2.0/ref/System.Diagnostics.StackTrace.dll", + "build/netstandard2.0/ref/System.Diagnostics.TextWriterTraceListener.dll", + "build/netstandard2.0/ref/System.Diagnostics.Tools.dll", + "build/netstandard2.0/ref/System.Diagnostics.TraceSource.dll", + "build/netstandard2.0/ref/System.Diagnostics.Tracing.dll", + "build/netstandard2.0/ref/System.Drawing.Primitives.dll", + "build/netstandard2.0/ref/System.Drawing.dll", + "build/netstandard2.0/ref/System.Dynamic.Runtime.dll", + "build/netstandard2.0/ref/System.Globalization.Calendars.dll", + "build/netstandard2.0/ref/System.Globalization.Extensions.dll", + "build/netstandard2.0/ref/System.Globalization.dll", + "build/netstandard2.0/ref/System.IO.Compression.FileSystem.dll", + "build/netstandard2.0/ref/System.IO.Compression.ZipFile.dll", + "build/netstandard2.0/ref/System.IO.Compression.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.DriveInfo.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.Primitives.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.Watcher.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.dll", + "build/netstandard2.0/ref/System.IO.IsolatedStorage.dll", + "build/netstandard2.0/ref/System.IO.MemoryMappedFiles.dll", + "build/netstandard2.0/ref/System.IO.Pipes.dll", + "build/netstandard2.0/ref/System.IO.UnmanagedMemoryStream.dll", + "build/netstandard2.0/ref/System.IO.dll", + "build/netstandard2.0/ref/System.Linq.Expressions.dll", + "build/netstandard2.0/ref/System.Linq.Parallel.dll", + "build/netstandard2.0/ref/System.Linq.Queryable.dll", + "build/netstandard2.0/ref/System.Linq.dll", + "build/netstandard2.0/ref/System.Net.Http.dll", + "build/netstandard2.0/ref/System.Net.NameResolution.dll", + "build/netstandard2.0/ref/System.Net.NetworkInformation.dll", + "build/netstandard2.0/ref/System.Net.Ping.dll", + "build/netstandard2.0/ref/System.Net.Primitives.dll", + "build/netstandard2.0/ref/System.Net.Requests.dll", + "build/netstandard2.0/ref/System.Net.Security.dll", + "build/netstandard2.0/ref/System.Net.Sockets.dll", + "build/netstandard2.0/ref/System.Net.WebHeaderCollection.dll", + "build/netstandard2.0/ref/System.Net.WebSockets.Client.dll", + "build/netstandard2.0/ref/System.Net.WebSockets.dll", + "build/netstandard2.0/ref/System.Net.dll", + "build/netstandard2.0/ref/System.Numerics.dll", + "build/netstandard2.0/ref/System.ObjectModel.dll", + "build/netstandard2.0/ref/System.Reflection.Extensions.dll", + "build/netstandard2.0/ref/System.Reflection.Primitives.dll", + "build/netstandard2.0/ref/System.Reflection.dll", + "build/netstandard2.0/ref/System.Resources.Reader.dll", + "build/netstandard2.0/ref/System.Resources.ResourceManager.dll", + "build/netstandard2.0/ref/System.Resources.Writer.dll", + "build/netstandard2.0/ref/System.Runtime.CompilerServices.VisualC.dll", + "build/netstandard2.0/ref/System.Runtime.Extensions.dll", + "build/netstandard2.0/ref/System.Runtime.Handles.dll", + "build/netstandard2.0/ref/System.Runtime.InteropServices.RuntimeInformation.dll", + "build/netstandard2.0/ref/System.Runtime.InteropServices.dll", + "build/netstandard2.0/ref/System.Runtime.Numerics.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Formatters.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Json.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Primitives.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Xml.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.dll", + "build/netstandard2.0/ref/System.Runtime.dll", + "build/netstandard2.0/ref/System.Security.Claims.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Algorithms.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Csp.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Encoding.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Primitives.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.X509Certificates.dll", + "build/netstandard2.0/ref/System.Security.Principal.dll", + "build/netstandard2.0/ref/System.Security.SecureString.dll", + "build/netstandard2.0/ref/System.ServiceModel.Web.dll", + "build/netstandard2.0/ref/System.Text.Encoding.Extensions.dll", + "build/netstandard2.0/ref/System.Text.Encoding.dll", + "build/netstandard2.0/ref/System.Text.RegularExpressions.dll", + "build/netstandard2.0/ref/System.Threading.Overlapped.dll", + "build/netstandard2.0/ref/System.Threading.Tasks.Parallel.dll", + "build/netstandard2.0/ref/System.Threading.Tasks.dll", + "build/netstandard2.0/ref/System.Threading.Thread.dll", + "build/netstandard2.0/ref/System.Threading.ThreadPool.dll", + "build/netstandard2.0/ref/System.Threading.Timer.dll", + "build/netstandard2.0/ref/System.Threading.dll", + "build/netstandard2.0/ref/System.Transactions.dll", + "build/netstandard2.0/ref/System.ValueTuple.dll", + "build/netstandard2.0/ref/System.Web.dll", + "build/netstandard2.0/ref/System.Windows.dll", + "build/netstandard2.0/ref/System.Xml.Linq.dll", + "build/netstandard2.0/ref/System.Xml.ReaderWriter.dll", + "build/netstandard2.0/ref/System.Xml.Serialization.dll", + "build/netstandard2.0/ref/System.Xml.XDocument.dll", + "build/netstandard2.0/ref/System.Xml.XPath.XDocument.dll", + "build/netstandard2.0/ref/System.Xml.XPath.dll", + "build/netstandard2.0/ref/System.Xml.XmlDocument.dll", + "build/netstandard2.0/ref/System.Xml.XmlSerializer.dll", + "build/netstandard2.0/ref/System.Xml.dll", + "build/netstandard2.0/ref/System.dll", + "build/netstandard2.0/ref/mscorlib.dll", + "build/netstandard2.0/ref/netstandard.dll", + "build/netstandard2.0/ref/netstandard.xml", + "lib/netstandard1.0/_._", + "netstandard.library.2.0.0.nupkg.sha512", + "netstandard.library.nuspec" + ] + }, + "Newtonsoft.Json/9.0.1": { + "sha512": "U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", + "type": "package", + "path": "newtonsoft.json/9.0.1", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml", + "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll", + "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.xml", + "newtonsoft.json.9.0.1.nupkg.sha512", + "newtonsoft.json.nuspec", + "tools/install.ps1" + ] + }, + "NuGet.Frameworks/5.11.0": { + "sha512": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==", + "type": "package", + "path": "nuget.frameworks/5.11.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "icon.png", + "lib/net40/NuGet.Frameworks.dll", + "lib/net40/NuGet.Frameworks.xml", + "lib/net472/NuGet.Frameworks.dll", + "lib/net472/NuGet.Frameworks.xml", + "lib/netstandard2.0/NuGet.Frameworks.dll", + "lib/netstandard2.0/NuGet.Frameworks.xml", + "nuget.frameworks.5.11.0.nupkg.sha512", + "nuget.frameworks.nuspec" + ] + }, + "NUnit/3.13.3": { + "sha512": "KNPDpls6EfHwC3+nnA67fh5wpxeLb3VLFAfLxrug6JMYDLHH6InaQIWR7Sc3y75d/9IKzMksH/gi08W7XWbmnQ==", + "type": "package", + "path": "nunit/3.13.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "CHANGES.md", + "LICENSE.txt", + "NOTICES.txt", + "build/NUnit.props", + "icon.png", + "lib/net35/nunit.framework.dll", + "lib/net35/nunit.framework.xml", + "lib/net40/nunit.framework.dll", + "lib/net40/nunit.framework.xml", + "lib/net45/nunit.framework.dll", + "lib/net45/nunit.framework.xml", + "lib/netstandard2.0/nunit.framework.dll", + "lib/netstandard2.0/nunit.framework.xml", + "nunit.3.13.3.nupkg.sha512", + "nunit.nuspec" + ] + }, + "NUnit.Analyzers/3.3.0": { + "sha512": "gyRc0qmXUIjHaTcHTWZDHK5ccOF6cLEOGQJ6Fj5JWKh8/W1XzPFC6zGXRu5sDNSxfKaNeQRmkdz3M73ArQkY1A==", + "type": "package", + "path": "nunit.analyzers/3.3.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "analyzers/dotnet/cs/nunit.analyzers.dll", + "images/nunit_256.png", + "license.txt", + "nunit.analyzers.3.3.0.nupkg.sha512", + "nunit.analyzers.nuspec", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "NUnit3TestAdapter/4.2.1": { + "sha512": "kgH8VKsrcZZgNGQXRpVCrM7TnNz9li3b/snH+YmnXUNqsaWa1Xw9EQWHpbzq4Li2FbTjTE/E5N5HdLNXzZ8BpQ==", + "type": "package", + "path": "nunit3testadapter/4.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/net35/NUnit3.TestAdapter.dll", + "build/net35/NUnit3.TestAdapter.pdb", + "build/net35/NUnit3TestAdapter.props", + "build/net35/nunit.engine.api.dll", + "build/net35/nunit.engine.core.dll", + "build/net35/nunit.engine.dll", + "build/net35/testcentric.engine.metadata.dll", + "build/netcoreapp2.1/NUnit3.TestAdapter.dll", + "build/netcoreapp2.1/NUnit3.TestAdapter.pdb", + "build/netcoreapp2.1/NUnit3TestAdapter.props", + "build/netcoreapp2.1/nunit.engine.api.dll", + "build/netcoreapp2.1/nunit.engine.core.dll", + "build/netcoreapp2.1/nunit.engine.dll", + "build/netcoreapp2.1/testcentric.engine.metadata.dll", + "nunit3testadapter.4.2.1.nupkg.sha512", + "nunit3testadapter.nuspec" + ] + }, + "runtime.linux-arm.runtime.native.System.IO.Ports/8.0.0": { + "sha512": "gK720fg6HemDg8sXcfy+xCMZ9+hF78Gc7BmREbmkS4noqlu1BAr9qZtuWGhLzFjBfgecmdtl4+SYVwJ1VneZBQ==", + "type": "package", + "path": "runtime.linux-arm.runtime.native.system.io.ports/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "runtime.linux-arm.runtime.native.system.io.ports.8.0.0.nupkg.sha512", + "runtime.linux-arm.runtime.native.system.io.ports.nuspec", + "runtimes/linux-arm/native/libSystem.IO.Ports.Native.so", + "useSharedDesignerContext.txt" + ] + }, + "runtime.linux-arm64.runtime.native.System.IO.Ports/8.0.0": { + "sha512": "KYG6/3ojhEWbb3FwQAKgGWPHrY+HKUXXdVjJlrtyCLn3EMcNTaNcPadb2c0ndQzixZSmAxZKopXJr0nLwhOrpQ==", + "type": "package", + "path": "runtime.linux-arm64.runtime.native.system.io.ports/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "runtime.linux-arm64.runtime.native.system.io.ports.8.0.0.nupkg.sha512", + "runtime.linux-arm64.runtime.native.system.io.ports.nuspec", + "runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so", + "useSharedDesignerContext.txt" + ] + }, + "runtime.linux-x64.runtime.native.System.IO.Ports/8.0.0": { + "sha512": "Wnw5vhA4mgGbIFoo6l9Fk3iEcwRSq49a1aKwJgXUCUtEQLCSUDjTGSxqy/oMUuOyyn7uLHsH8KgZzQ1y3lReiQ==", + "type": "package", + "path": "runtime.linux-x64.runtime.native.system.io.ports/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "runtime.linux-x64.runtime.native.system.io.ports.8.0.0.nupkg.sha512", + "runtime.linux-x64.runtime.native.system.io.ports.nuspec", + "runtimes/linux-x64/native/libSystem.IO.Ports.Native.so", + "useSharedDesignerContext.txt" + ] + }, + "runtime.native.System.IO.Ports/8.0.0": { + "sha512": "Ee7Sz5llLpTgyKIWzKI/GeuRSbFkOABgJRY00SqTY0OkTYtkB+9l5rFZfE7fxPA3c22RfytCBYkUdAkcmwMjQg==", + "type": "package", + "path": "runtime.native.system.io.ports/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "runtime.native.system.io.ports.8.0.0.nupkg.sha512", + "runtime.native.system.io.ports.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "runtime.osx-arm64.runtime.native.System.IO.Ports/8.0.0": { + "sha512": "rbUBLAaFW9oVkbsb0+XSrAo2QdhBeAyzLl5KQ6Oci9L/u626uXGKInsVJG6B9Z5EO8bmplC8tsMiaHK8wOBZ+w==", + "type": "package", + "path": "runtime.osx-arm64.runtime.native.system.io.ports/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "runtime.osx-arm64.runtime.native.system.io.ports.8.0.0.nupkg.sha512", + "runtime.osx-arm64.runtime.native.system.io.ports.nuspec", + "runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib", + "useSharedDesignerContext.txt" + ] + }, + "runtime.osx-x64.runtime.native.System.IO.Ports/8.0.0": { + "sha512": "IcfB4jKtM9pkzP9OpYelEcUX1MiDt0IJPBh3XYYdEISFF+6Mc+T8WWi0dr9wVh1gtcdVjubVEIBgB8BHESlGfQ==", + "type": "package", + "path": "runtime.osx-x64.runtime.native.system.io.ports/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "runtime.osx-x64.runtime.native.system.io.ports.8.0.0.nupkg.sha512", + "runtime.osx-x64.runtime.native.system.io.ports.nuspec", + "runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib", + "useSharedDesignerContext.txt" + ] + }, + "System.CodeDom/8.0.0": { + "sha512": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==", + "type": "package", + "path": "system.codedom/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.CodeDom.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.CodeDom.targets", + "lib/net462/System.CodeDom.dll", + "lib/net462/System.CodeDom.xml", + "lib/net6.0/System.CodeDom.dll", + "lib/net6.0/System.CodeDom.xml", + "lib/net7.0/System.CodeDom.dll", + "lib/net7.0/System.CodeDom.xml", + "lib/net8.0/System.CodeDom.dll", + "lib/net8.0/System.CodeDom.xml", + "lib/netstandard2.0/System.CodeDom.dll", + "lib/netstandard2.0/System.CodeDom.xml", + "system.codedom.8.0.0.nupkg.sha512", + "system.codedom.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Collections/4.0.11": { + "sha512": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==", + "type": "package", + "path": "system.collections/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.4.0.11.nupkg.sha512", + "system.collections.nuspec" + ] + }, + "System.Collections.Concurrent/4.0.12": { + "sha512": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==", + "type": "package", + "path": "system.collections.concurrent/4.0.12", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Collections.Concurrent.dll", + "lib/netstandard1.3/System.Collections.Concurrent.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.Concurrent.dll", + "ref/netcore50/System.Collections.Concurrent.xml", + "ref/netcore50/de/System.Collections.Concurrent.xml", + "ref/netcore50/es/System.Collections.Concurrent.xml", + "ref/netcore50/fr/System.Collections.Concurrent.xml", + "ref/netcore50/it/System.Collections.Concurrent.xml", + "ref/netcore50/ja/System.Collections.Concurrent.xml", + "ref/netcore50/ko/System.Collections.Concurrent.xml", + "ref/netcore50/ru/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hans/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.1/System.Collections.Concurrent.dll", + "ref/netstandard1.1/System.Collections.Concurrent.xml", + "ref/netstandard1.1/de/System.Collections.Concurrent.xml", + "ref/netstandard1.1/es/System.Collections.Concurrent.xml", + "ref/netstandard1.1/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.1/it/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.3/System.Collections.Concurrent.dll", + "ref/netstandard1.3/System.Collections.Concurrent.xml", + "ref/netstandard1.3/de/System.Collections.Concurrent.xml", + "ref/netstandard1.3/es/System.Collections.Concurrent.xml", + "ref/netstandard1.3/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.3/it/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.concurrent.4.0.12.nupkg.sha512", + "system.collections.concurrent.nuspec" + ] + }, + "System.Configuration.ConfigurationManager/6.0.0": { + "sha512": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", + "type": "package", + "path": "system.configuration.configurationmanager/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Configuration.ConfigurationManager.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Configuration.ConfigurationManager.dll", + "lib/net461/System.Configuration.ConfigurationManager.xml", + "lib/net6.0/System.Configuration.ConfigurationManager.dll", + "lib/net6.0/System.Configuration.ConfigurationManager.xml", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "runtimes/win/lib/net461/System.Configuration.ConfigurationManager.dll", + "runtimes/win/lib/net461/System.Configuration.ConfigurationManager.xml", + "system.configuration.configurationmanager.6.0.0.nupkg.sha512", + "system.configuration.configurationmanager.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Console/4.0.0": { + "sha512": "qSKUSOIiYA/a0g5XXdxFcUFmv1hNICBD7QZ0QhGYVipPIhvpiydY8VZqr1thmCXvmn8aipMg64zuanB4eotK9A==", + "type": "package", + "path": "system.console/4.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Console.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Console.dll", + "ref/netstandard1.3/System.Console.dll", + "ref/netstandard1.3/System.Console.xml", + "ref/netstandard1.3/de/System.Console.xml", + "ref/netstandard1.3/es/System.Console.xml", + "ref/netstandard1.3/fr/System.Console.xml", + "ref/netstandard1.3/it/System.Console.xml", + "ref/netstandard1.3/ja/System.Console.xml", + "ref/netstandard1.3/ko/System.Console.xml", + "ref/netstandard1.3/ru/System.Console.xml", + "ref/netstandard1.3/zh-hans/System.Console.xml", + "ref/netstandard1.3/zh-hant/System.Console.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.console.4.0.0.nupkg.sha512", + "system.console.nuspec" + ] + }, + "System.Diagnostics.Debug/4.0.11": { + "sha512": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==", + "type": "package", + "path": "system.diagnostics.debug/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Debug.dll", + "ref/netcore50/System.Diagnostics.Debug.xml", + "ref/netcore50/de/System.Diagnostics.Debug.xml", + "ref/netcore50/es/System.Diagnostics.Debug.xml", + "ref/netcore50/fr/System.Diagnostics.Debug.xml", + "ref/netcore50/it/System.Diagnostics.Debug.xml", + "ref/netcore50/ja/System.Diagnostics.Debug.xml", + "ref/netcore50/ko/System.Diagnostics.Debug.xml", + "ref/netcore50/ru/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/System.Diagnostics.Debug.dll", + "ref/netstandard1.0/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/System.Diagnostics.Debug.dll", + "ref/netstandard1.3/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.debug.4.0.11.nupkg.sha512", + "system.diagnostics.debug.nuspec" + ] + }, + "System.Diagnostics.Tools/4.0.1": { + "sha512": "xBfJ8pnd4C17dWaC9FM6aShzbJcRNMChUMD42I6772KGGrqaFdumwhn9OdM68erj1ueNo3xdQ1EwiFjK5k8p0g==", + "type": "package", + "path": "system.diagnostics.tools/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Tools.dll", + "ref/netcore50/System.Diagnostics.Tools.xml", + "ref/netcore50/de/System.Diagnostics.Tools.xml", + "ref/netcore50/es/System.Diagnostics.Tools.xml", + "ref/netcore50/fr/System.Diagnostics.Tools.xml", + "ref/netcore50/it/System.Diagnostics.Tools.xml", + "ref/netcore50/ja/System.Diagnostics.Tools.xml", + "ref/netcore50/ko/System.Diagnostics.Tools.xml", + "ref/netcore50/ru/System.Diagnostics.Tools.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tools.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/System.Diagnostics.Tools.dll", + "ref/netstandard1.0/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/de/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/es/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/it/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Tools.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.tools.4.0.1.nupkg.sha512", + "system.diagnostics.tools.nuspec" + ] + }, + "System.Diagnostics.Tracing/4.1.0": { + "sha512": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==", + "type": "package", + "path": "system.diagnostics.tracing/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Diagnostics.Tracing.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.xml", + "ref/netcore50/de/System.Diagnostics.Tracing.xml", + "ref/netcore50/es/System.Diagnostics.Tracing.xml", + "ref/netcore50/fr/System.Diagnostics.Tracing.xml", + "ref/netcore50/it/System.Diagnostics.Tracing.xml", + "ref/netcore50/ja/System.Diagnostics.Tracing.xml", + "ref/netcore50/ko/System.Diagnostics.Tracing.xml", + "ref/netcore50/ru/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/System.Diagnostics.Tracing.dll", + "ref/netstandard1.1/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/System.Diagnostics.Tracing.dll", + "ref/netstandard1.2/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/System.Diagnostics.Tracing.dll", + "ref/netstandard1.3/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/System.Diagnostics.Tracing.dll", + "ref/netstandard1.5/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.tracing.4.1.0.nupkg.sha512", + "system.diagnostics.tracing.nuspec" + ] + }, + "System.Drawing.Common/6.0.0": { + "sha512": "NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==", + "type": "package", + "path": "system.drawing.common/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Drawing.Common.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Drawing.Common.dll", + "lib/net461/System.Drawing.Common.xml", + "lib/net6.0/System.Drawing.Common.dll", + "lib/net6.0/System.Drawing.Common.xml", + "lib/netcoreapp3.1/System.Drawing.Common.dll", + "lib/netcoreapp3.1/System.Drawing.Common.xml", + "lib/netstandard2.0/System.Drawing.Common.dll", + "lib/netstandard2.0/System.Drawing.Common.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "runtimes/unix/lib/net6.0/System.Drawing.Common.dll", + "runtimes/unix/lib/net6.0/System.Drawing.Common.xml", + "runtimes/unix/lib/netcoreapp3.1/System.Drawing.Common.dll", + "runtimes/unix/lib/netcoreapp3.1/System.Drawing.Common.xml", + "runtimes/win/lib/net6.0/System.Drawing.Common.dll", + "runtimes/win/lib/net6.0/System.Drawing.Common.xml", + "runtimes/win/lib/netcoreapp3.1/System.Drawing.Common.dll", + "runtimes/win/lib/netcoreapp3.1/System.Drawing.Common.xml", + "system.drawing.common.6.0.0.nupkg.sha512", + "system.drawing.common.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Dynamic.Runtime/4.0.11": { + "sha512": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", + "type": "package", + "path": "system.dynamic.runtime/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Dynamic.Runtime.dll", + "lib/netstandard1.3/System.Dynamic.Runtime.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Dynamic.Runtime.dll", + "ref/netcore50/System.Dynamic.Runtime.xml", + "ref/netcore50/de/System.Dynamic.Runtime.xml", + "ref/netcore50/es/System.Dynamic.Runtime.xml", + "ref/netcore50/fr/System.Dynamic.Runtime.xml", + "ref/netcore50/it/System.Dynamic.Runtime.xml", + "ref/netcore50/ja/System.Dynamic.Runtime.xml", + "ref/netcore50/ko/System.Dynamic.Runtime.xml", + "ref/netcore50/ru/System.Dynamic.Runtime.xml", + "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml", + "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/System.Dynamic.Runtime.dll", + "ref/netstandard1.0/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/de/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/es/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/fr/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/it/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/ja/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/ko/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/ru/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/System.Dynamic.Runtime.dll", + "ref/netstandard1.3/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/de/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/es/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/fr/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/it/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/ja/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/ko/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/ru/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Dynamic.Runtime.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Dynamic.Runtime.dll", + "system.dynamic.runtime.4.0.11.nupkg.sha512", + "system.dynamic.runtime.nuspec" + ] + }, + "System.Globalization/4.0.11": { + "sha512": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==", + "type": "package", + "path": "system.globalization/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.4.0.11.nupkg.sha512", + "system.globalization.nuspec" + ] + }, + "System.IO/4.1.0": { + "sha512": "3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==", + "type": "package", + "path": "system.io/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.1.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.IO.FileSystem/4.0.1": { + "sha512": "IBErlVq5jOggAD69bg1t0pJcHaDbJbWNUZTPI96fkYWzwYbN6D9wRHMULLDd9dHsl7C2YsxXL31LMfPI1SWt8w==", + "type": "package", + "path": "system.io.filesystem/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.filesystem.4.0.1.nupkg.sha512", + "system.io.filesystem.nuspec" + ] + }, + "System.IO.FileSystem.Primitives/4.0.1": { + "sha512": "kWkKD203JJKxJeE74p8aF8y4Qc9r9WQx4C0cHzHPrY3fv/L/IhWnyCHaFJ3H1QPOH6A93whlQ2vG5nHlBDvzWQ==", + "type": "package", + "path": "system.io.filesystem.primitives/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.Primitives.dll", + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.filesystem.primitives.4.0.1.nupkg.sha512", + "system.io.filesystem.primitives.nuspec" + ] + }, + "System.IO.Ports/8.0.0": { + "sha512": "MaiPbx2/QXZc62gm/DrajRrGPG1lU4m08GWMoWiymPYM+ba4kfACp2PbiYpqJ4QiFGhHD00zX3RoVDTucjWe9g==", + "type": "package", + "path": "system.io.ports/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.IO.Ports.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.IO.Ports.targets", + "lib/net462/System.IO.Ports.dll", + "lib/net462/System.IO.Ports.xml", + "lib/net6.0/System.IO.Ports.dll", + "lib/net6.0/System.IO.Ports.xml", + "lib/net7.0/System.IO.Ports.dll", + "lib/net7.0/System.IO.Ports.xml", + "lib/net8.0/System.IO.Ports.dll", + "lib/net8.0/System.IO.Ports.xml", + "lib/netstandard2.0/System.IO.Ports.dll", + "lib/netstandard2.0/System.IO.Ports.xml", + "runtimes/unix/lib/net6.0/System.IO.Ports.dll", + "runtimes/unix/lib/net6.0/System.IO.Ports.xml", + "runtimes/unix/lib/net7.0/System.IO.Ports.dll", + "runtimes/unix/lib/net7.0/System.IO.Ports.xml", + "runtimes/unix/lib/net8.0/System.IO.Ports.dll", + "runtimes/unix/lib/net8.0/System.IO.Ports.xml", + "runtimes/win/lib/net6.0/System.IO.Ports.dll", + "runtimes/win/lib/net6.0/System.IO.Ports.xml", + "runtimes/win/lib/net7.0/System.IO.Ports.dll", + "runtimes/win/lib/net7.0/System.IO.Ports.xml", + "runtimes/win/lib/net8.0/System.IO.Ports.dll", + "runtimes/win/lib/net8.0/System.IO.Ports.xml", + "system.io.ports.8.0.0.nupkg.sha512", + "system.io.ports.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Linq/4.1.0": { + "sha512": "bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==", + "type": "package", + "path": "system.linq/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Linq.dll", + "lib/netcore50/System.Linq.dll", + "lib/netstandard1.6/System.Linq.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Linq.dll", + "ref/netcore50/System.Linq.dll", + "ref/netcore50/System.Linq.xml", + "ref/netcore50/de/System.Linq.xml", + "ref/netcore50/es/System.Linq.xml", + "ref/netcore50/fr/System.Linq.xml", + "ref/netcore50/it/System.Linq.xml", + "ref/netcore50/ja/System.Linq.xml", + "ref/netcore50/ko/System.Linq.xml", + "ref/netcore50/ru/System.Linq.xml", + "ref/netcore50/zh-hans/System.Linq.xml", + "ref/netcore50/zh-hant/System.Linq.xml", + "ref/netstandard1.0/System.Linq.dll", + "ref/netstandard1.0/System.Linq.xml", + "ref/netstandard1.0/de/System.Linq.xml", + "ref/netstandard1.0/es/System.Linq.xml", + "ref/netstandard1.0/fr/System.Linq.xml", + "ref/netstandard1.0/it/System.Linq.xml", + "ref/netstandard1.0/ja/System.Linq.xml", + "ref/netstandard1.0/ko/System.Linq.xml", + "ref/netstandard1.0/ru/System.Linq.xml", + "ref/netstandard1.0/zh-hans/System.Linq.xml", + "ref/netstandard1.0/zh-hant/System.Linq.xml", + "ref/netstandard1.6/System.Linq.dll", + "ref/netstandard1.6/System.Linq.xml", + "ref/netstandard1.6/de/System.Linq.xml", + "ref/netstandard1.6/es/System.Linq.xml", + "ref/netstandard1.6/fr/System.Linq.xml", + "ref/netstandard1.6/it/System.Linq.xml", + "ref/netstandard1.6/ja/System.Linq.xml", + "ref/netstandard1.6/ko/System.Linq.xml", + "ref/netstandard1.6/ru/System.Linq.xml", + "ref/netstandard1.6/zh-hans/System.Linq.xml", + "ref/netstandard1.6/zh-hant/System.Linq.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.linq.4.1.0.nupkg.sha512", + "system.linq.nuspec" + ] + }, + "System.Linq.Expressions/4.1.0": { + "sha512": "I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==", + "type": "package", + "path": "system.linq.expressions/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Linq.Expressions.dll", + "lib/netcore50/System.Linq.Expressions.dll", + "lib/netstandard1.6/System.Linq.Expressions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Linq.Expressions.dll", + "ref/netcore50/System.Linq.Expressions.dll", + "ref/netcore50/System.Linq.Expressions.xml", + "ref/netcore50/de/System.Linq.Expressions.xml", + "ref/netcore50/es/System.Linq.Expressions.xml", + "ref/netcore50/fr/System.Linq.Expressions.xml", + "ref/netcore50/it/System.Linq.Expressions.xml", + "ref/netcore50/ja/System.Linq.Expressions.xml", + "ref/netcore50/ko/System.Linq.Expressions.xml", + "ref/netcore50/ru/System.Linq.Expressions.xml", + "ref/netcore50/zh-hans/System.Linq.Expressions.xml", + "ref/netcore50/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.0/System.Linq.Expressions.dll", + "ref/netstandard1.0/System.Linq.Expressions.xml", + "ref/netstandard1.0/de/System.Linq.Expressions.xml", + "ref/netstandard1.0/es/System.Linq.Expressions.xml", + "ref/netstandard1.0/fr/System.Linq.Expressions.xml", + "ref/netstandard1.0/it/System.Linq.Expressions.xml", + "ref/netstandard1.0/ja/System.Linq.Expressions.xml", + "ref/netstandard1.0/ko/System.Linq.Expressions.xml", + "ref/netstandard1.0/ru/System.Linq.Expressions.xml", + "ref/netstandard1.0/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.0/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.3/System.Linq.Expressions.dll", + "ref/netstandard1.3/System.Linq.Expressions.xml", + "ref/netstandard1.3/de/System.Linq.Expressions.xml", + "ref/netstandard1.3/es/System.Linq.Expressions.xml", + "ref/netstandard1.3/fr/System.Linq.Expressions.xml", + "ref/netstandard1.3/it/System.Linq.Expressions.xml", + "ref/netstandard1.3/ja/System.Linq.Expressions.xml", + "ref/netstandard1.3/ko/System.Linq.Expressions.xml", + "ref/netstandard1.3/ru/System.Linq.Expressions.xml", + "ref/netstandard1.3/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.3/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.6/System.Linq.Expressions.dll", + "ref/netstandard1.6/System.Linq.Expressions.xml", + "ref/netstandard1.6/de/System.Linq.Expressions.xml", + "ref/netstandard1.6/es/System.Linq.Expressions.xml", + "ref/netstandard1.6/fr/System.Linq.Expressions.xml", + "ref/netstandard1.6/it/System.Linq.Expressions.xml", + "ref/netstandard1.6/ja/System.Linq.Expressions.xml", + "ref/netstandard1.6/ko/System.Linq.Expressions.xml", + "ref/netstandard1.6/ru/System.Linq.Expressions.xml", + "ref/netstandard1.6/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.6/zh-hant/System.Linq.Expressions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Linq.Expressions.dll", + "system.linq.expressions.4.1.0.nupkg.sha512", + "system.linq.expressions.nuspec" + ] + }, + "System.Management/8.0.0": { + "sha512": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", + "type": "package", + "path": "system.management/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Management.targets", + "lib/net462/_._", + "lib/net6.0/System.Management.dll", + "lib/net6.0/System.Management.xml", + "lib/net7.0/System.Management.dll", + "lib/net7.0/System.Management.xml", + "lib/net8.0/System.Management.dll", + "lib/net8.0/System.Management.xml", + "lib/netstandard2.0/System.Management.dll", + "lib/netstandard2.0/System.Management.xml", + "runtimes/win/lib/net6.0/System.Management.dll", + "runtimes/win/lib/net6.0/System.Management.xml", + "runtimes/win/lib/net7.0/System.Management.dll", + "runtimes/win/lib/net7.0/System.Management.xml", + "runtimes/win/lib/net8.0/System.Management.dll", + "runtimes/win/lib/net8.0/System.Management.xml", + "system.management.8.0.0.nupkg.sha512", + "system.management.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.ObjectModel/4.0.12": { + "sha512": "tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==", + "type": "package", + "path": "system.objectmodel/4.0.12", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.ObjectModel.dll", + "lib/netstandard1.3/System.ObjectModel.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.ObjectModel.dll", + "ref/netcore50/System.ObjectModel.xml", + "ref/netcore50/de/System.ObjectModel.xml", + "ref/netcore50/es/System.ObjectModel.xml", + "ref/netcore50/fr/System.ObjectModel.xml", + "ref/netcore50/it/System.ObjectModel.xml", + "ref/netcore50/ja/System.ObjectModel.xml", + "ref/netcore50/ko/System.ObjectModel.xml", + "ref/netcore50/ru/System.ObjectModel.xml", + "ref/netcore50/zh-hans/System.ObjectModel.xml", + "ref/netcore50/zh-hant/System.ObjectModel.xml", + "ref/netstandard1.0/System.ObjectModel.dll", + "ref/netstandard1.0/System.ObjectModel.xml", + "ref/netstandard1.0/de/System.ObjectModel.xml", + "ref/netstandard1.0/es/System.ObjectModel.xml", + "ref/netstandard1.0/fr/System.ObjectModel.xml", + "ref/netstandard1.0/it/System.ObjectModel.xml", + "ref/netstandard1.0/ja/System.ObjectModel.xml", + "ref/netstandard1.0/ko/System.ObjectModel.xml", + "ref/netstandard1.0/ru/System.ObjectModel.xml", + "ref/netstandard1.0/zh-hans/System.ObjectModel.xml", + "ref/netstandard1.0/zh-hant/System.ObjectModel.xml", + "ref/netstandard1.3/System.ObjectModel.dll", + "ref/netstandard1.3/System.ObjectModel.xml", + "ref/netstandard1.3/de/System.ObjectModel.xml", + "ref/netstandard1.3/es/System.ObjectModel.xml", + "ref/netstandard1.3/fr/System.ObjectModel.xml", + "ref/netstandard1.3/it/System.ObjectModel.xml", + "ref/netstandard1.3/ja/System.ObjectModel.xml", + "ref/netstandard1.3/ko/System.ObjectModel.xml", + "ref/netstandard1.3/ru/System.ObjectModel.xml", + "ref/netstandard1.3/zh-hans/System.ObjectModel.xml", + "ref/netstandard1.3/zh-hant/System.ObjectModel.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.objectmodel.4.0.12.nupkg.sha512", + "system.objectmodel.nuspec" + ] + }, + "System.Reflection/4.1.0": { + "sha512": "JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==", + "type": "package", + "path": "system.reflection/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.1.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Emit/4.0.1": { + "sha512": "P2wqAj72fFjpP6wb9nSfDqNBMab+2ovzSDzUZK7MVIm54tBJEPr9jWfSjjoTpPwj1LeKcmX3vr0ttyjSSFM47g==", + "type": "package", + "path": "system.reflection.emit/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.dll", + "lib/netstandard1.3/System.Reflection.Emit.dll", + "lib/xamarinmac20/_._", + "ref/MonoAndroid10/_._", + "ref/net45/_._", + "ref/netstandard1.1/System.Reflection.Emit.dll", + "ref/netstandard1.1/System.Reflection.Emit.xml", + "ref/netstandard1.1/de/System.Reflection.Emit.xml", + "ref/netstandard1.1/es/System.Reflection.Emit.xml", + "ref/netstandard1.1/fr/System.Reflection.Emit.xml", + "ref/netstandard1.1/it/System.Reflection.Emit.xml", + "ref/netstandard1.1/ja/System.Reflection.Emit.xml", + "ref/netstandard1.1/ko/System.Reflection.Emit.xml", + "ref/netstandard1.1/ru/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml", + "ref/xamarinmac20/_._", + "system.reflection.emit.4.0.1.nupkg.sha512", + "system.reflection.emit.nuspec" + ] + }, + "System.Reflection.Emit.ILGeneration/4.0.1": { + "sha512": "Ov6dU8Bu15Bc7zuqttgHF12J5lwSWyTf1S+FJouUXVMSqImLZzYaQ+vRr1rQ0OZ0HqsrwWl4dsKHELckQkVpgA==", + "type": "package", + "path": "system.reflection.emit.ilgeneration/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll", + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "ref/net45/_._", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "runtimes/aot/lib/netcore50/_._", + "system.reflection.emit.ilgeneration.4.0.1.nupkg.sha512", + "system.reflection.emit.ilgeneration.nuspec" + ] + }, + "System.Reflection.Emit.Lightweight/4.0.1": { + "sha512": "sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==", + "type": "package", + "path": "system.reflection.emit.lightweight/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "ref/net45/_._", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "runtimes/aot/lib/netcore50/_._", + "system.reflection.emit.lightweight.4.0.1.nupkg.sha512", + "system.reflection.emit.lightweight.nuspec" + ] + }, + "System.Reflection.Extensions/4.0.1": { + "sha512": "GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==", + "type": "package", + "path": "system.reflection.extensions/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Extensions.dll", + "ref/netcore50/System.Reflection.Extensions.xml", + "ref/netcore50/de/System.Reflection.Extensions.xml", + "ref/netcore50/es/System.Reflection.Extensions.xml", + "ref/netcore50/fr/System.Reflection.Extensions.xml", + "ref/netcore50/it/System.Reflection.Extensions.xml", + "ref/netcore50/ja/System.Reflection.Extensions.xml", + "ref/netcore50/ko/System.Reflection.Extensions.xml", + "ref/netcore50/ru/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hans/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hant/System.Reflection.Extensions.xml", + "ref/netstandard1.0/System.Reflection.Extensions.dll", + "ref/netstandard1.0/System.Reflection.Extensions.xml", + "ref/netstandard1.0/de/System.Reflection.Extensions.xml", + "ref/netstandard1.0/es/System.Reflection.Extensions.xml", + "ref/netstandard1.0/fr/System.Reflection.Extensions.xml", + "ref/netstandard1.0/it/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ja/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ko/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ru/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.extensions.4.0.1.nupkg.sha512", + "system.reflection.extensions.nuspec" + ] + }, + "System.Reflection.Metadata/1.6.0": { + "sha512": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==", + "type": "package", + "path": "system.reflection.metadata/1.6.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netstandard1.1/System.Reflection.Metadata.dll", + "lib/netstandard1.1/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "lib/portable-net45+win8/System.Reflection.Metadata.dll", + "lib/portable-net45+win8/System.Reflection.Metadata.xml", + "system.reflection.metadata.1.6.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection.Primitives/4.0.1": { + "sha512": "4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==", + "type": "package", + "path": "system.reflection.primitives/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.0.1.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Reflection.TypeExtensions/4.1.0": { + "sha512": "tsQ/ptQ3H5FYfON8lL4MxRk/8kFyE0A+tGPXmVP967cT/gzLHYxIejIYSxp4JmIeFHVP78g/F2FE1mUUTbDtrg==", + "type": "package", + "path": "system.reflection.typeextensions/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Reflection.TypeExtensions.dll", + "lib/net462/System.Reflection.TypeExtensions.dll", + "lib/netcore50/System.Reflection.TypeExtensions.dll", + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Reflection.TypeExtensions.dll", + "ref/net462/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.5/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll", + "system.reflection.typeextensions.4.1.0.nupkg.sha512", + "system.reflection.typeextensions.nuspec" + ] + }, + "System.Resources.ResourceManager/4.0.1": { + "sha512": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==", + "type": "package", + "path": "system.resources.resourcemanager/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/netcore50/de/System.Resources.ResourceManager.xml", + "ref/netcore50/es/System.Resources.ResourceManager.xml", + "ref/netcore50/fr/System.Resources.ResourceManager.xml", + "ref/netcore50/it/System.Resources.ResourceManager.xml", + "ref/netcore50/ja/System.Resources.ResourceManager.xml", + "ref/netcore50/ko/System.Resources.ResourceManager.xml", + "ref/netcore50/ru/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/System.Resources.ResourceManager.dll", + "ref/netstandard1.0/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.resources.resourcemanager.4.0.1.nupkg.sha512", + "system.resources.resourcemanager.nuspec" + ] + }, + "System.Runtime/4.1.0": { + "sha512": "v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==", + "type": "package", + "path": "system.runtime/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.1.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.Extensions/4.1.0": { + "sha512": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==", + "type": "package", + "path": "system.runtime.extensions/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.xml", + "ref/netcore50/de/System.Runtime.Extensions.xml", + "ref/netcore50/es/System.Runtime.Extensions.xml", + "ref/netcore50/fr/System.Runtime.Extensions.xml", + "ref/netcore50/it/System.Runtime.Extensions.xml", + "ref/netcore50/ja/System.Runtime.Extensions.xml", + "ref/netcore50/ko/System.Runtime.Extensions.xml", + "ref/netcore50/ru/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.0/System.Runtime.Extensions.dll", + "ref/netstandard1.0/System.Runtime.Extensions.xml", + "ref/netstandard1.0/de/System.Runtime.Extensions.xml", + "ref/netstandard1.0/es/System.Runtime.Extensions.xml", + "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.0/it/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.3/System.Runtime.Extensions.dll", + "ref/netstandard1.3/System.Runtime.Extensions.xml", + "ref/netstandard1.3/de/System.Runtime.Extensions.xml", + "ref/netstandard1.3/es/System.Runtime.Extensions.xml", + "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.3/it/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.5/System.Runtime.Extensions.dll", + "ref/netstandard1.5/System.Runtime.Extensions.xml", + "ref/netstandard1.5/de/System.Runtime.Extensions.xml", + "ref/netstandard1.5/es/System.Runtime.Extensions.xml", + "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.5/it/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.extensions.4.1.0.nupkg.sha512", + "system.runtime.extensions.nuspec" + ] + }, + "System.Runtime.Handles/4.0.1": { + "sha512": "nCJvEKguXEvk2ymk1gqj625vVnlK3/xdGzx0vOKicQkoquaTBJTP13AIYkocSUwHCLNBwUbXTqTWGDxBTWpt7g==", + "type": "package", + "path": "system.runtime.handles/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/netstandard1.3/System.Runtime.Handles.dll", + "ref/netstandard1.3/System.Runtime.Handles.xml", + "ref/netstandard1.3/de/System.Runtime.Handles.xml", + "ref/netstandard1.3/es/System.Runtime.Handles.xml", + "ref/netstandard1.3/fr/System.Runtime.Handles.xml", + "ref/netstandard1.3/it/System.Runtime.Handles.xml", + "ref/netstandard1.3/ja/System.Runtime.Handles.xml", + "ref/netstandard1.3/ko/System.Runtime.Handles.xml", + "ref/netstandard1.3/ru/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.handles.4.0.1.nupkg.sha512", + "system.runtime.handles.nuspec" + ] + }, + "System.Runtime.InteropServices/4.1.0": { + "sha512": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==", + "type": "package", + "path": "system.runtime.interopservices/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.InteropServices.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.xml", + "ref/netcore50/de/System.Runtime.InteropServices.xml", + "ref/netcore50/es/System.Runtime.InteropServices.xml", + "ref/netcore50/fr/System.Runtime.InteropServices.xml", + "ref/netcore50/it/System.Runtime.InteropServices.xml", + "ref/netcore50/ja/System.Runtime.InteropServices.xml", + "ref/netcore50/ko/System.Runtime.InteropServices.xml", + "ref/netcore50/ru/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/System.Runtime.InteropServices.dll", + "ref/netstandard1.2/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/System.Runtime.InteropServices.dll", + "ref/netstandard1.3/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/System.Runtime.InteropServices.dll", + "ref/netstandard1.5/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.interopservices.4.1.0.nupkg.sha512", + "system.runtime.interopservices.nuspec" + ] + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "sha512": "HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==", + "type": "package", + "path": "system.runtime.serialization.primitives/4.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net46/System.Runtime.Serialization.Primitives.dll", + "lib/netcore50/System.Runtime.Serialization.Primitives.dll", + "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net46/System.Runtime.Serialization.Primitives.dll", + "ref/netcore50/System.Runtime.Serialization.Primitives.dll", + "ref/netcore50/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/de/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/es/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/fr/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/it/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/ja/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/ko/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/ru/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/zh-hans/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/zh-hant/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/System.Runtime.Serialization.Primitives.dll", + "ref/netstandard1.0/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/de/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/es/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/fr/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/it/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/ja/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/ko/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/ru/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll", + "ref/netstandard1.3/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/de/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/es/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/fr/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/it/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/ja/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/ko/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/ru/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Serialization.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Runtime.Serialization.Primitives.dll", + "system.runtime.serialization.primitives.4.1.1.nupkg.sha512", + "system.runtime.serialization.primitives.nuspec" + ] + }, + "System.Security.AccessControl/6.0.0": { + "sha512": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==", + "type": "package", + "path": "system.security.accesscontrol/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Security.AccessControl.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.xml", + "lib/net6.0/System.Security.AccessControl.dll", + "lib/net6.0/System.Security.AccessControl.xml", + "lib/netstandard2.0/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.xml", + "runtimes/win/lib/net461/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.xml", + "runtimes/win/lib/net6.0/System.Security.AccessControl.dll", + "runtimes/win/lib/net6.0/System.Security.AccessControl.xml", + "runtimes/win/lib/netstandard2.0/System.Security.AccessControl.dll", + "runtimes/win/lib/netstandard2.0/System.Security.AccessControl.xml", + "system.security.accesscontrol.6.0.0.nupkg.sha512", + "system.security.accesscontrol.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Security.Cryptography.ProtectedData/6.0.0": { + "sha512": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==", + "type": "package", + "path": "system.security.cryptography.protecteddata/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Security.Cryptography.ProtectedData.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Security.Cryptography.ProtectedData.dll", + "lib/net461/System.Security.Cryptography.ProtectedData.xml", + "lib/net6.0/System.Security.Cryptography.ProtectedData.dll", + "lib/net6.0/System.Security.Cryptography.ProtectedData.xml", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.xml", + "runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.xml", + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "system.security.cryptography.protecteddata.6.0.0.nupkg.sha512", + "system.security.cryptography.protecteddata.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Security.Permissions/6.0.0": { + "sha512": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", + "type": "package", + "path": "system.security.permissions/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Security.Permissions.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Security.Permissions.dll", + "lib/net461/System.Security.Permissions.xml", + "lib/net5.0/System.Security.Permissions.dll", + "lib/net5.0/System.Security.Permissions.xml", + "lib/net6.0/System.Security.Permissions.dll", + "lib/net6.0/System.Security.Permissions.xml", + "lib/netcoreapp3.1/System.Security.Permissions.dll", + "lib/netcoreapp3.1/System.Security.Permissions.xml", + "lib/netstandard2.0/System.Security.Permissions.dll", + "lib/netstandard2.0/System.Security.Permissions.xml", + "runtimes/win/lib/net461/System.Security.Permissions.dll", + "runtimes/win/lib/net461/System.Security.Permissions.xml", + "system.security.permissions.6.0.0.nupkg.sha512", + "system.security.permissions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Encoding/4.0.11": { + "sha512": "U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==", + "type": "package", + "path": "system.text.encoding/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.0.11.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Text.Encoding.Extensions/4.0.11": { + "sha512": "jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==", + "type": "package", + "path": "system.text.encoding.extensions/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.Extensions.dll", + "ref/netcore50/System.Text.Encoding.Extensions.xml", + "ref/netcore50/de/System.Text.Encoding.Extensions.xml", + "ref/netcore50/es/System.Text.Encoding.Extensions.xml", + "ref/netcore50/fr/System.Text.Encoding.Extensions.xml", + "ref/netcore50/it/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ja/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ko/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ru/System.Text.Encoding.Extensions.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/System.Text.Encoding.Extensions.dll", + "ref/netstandard1.0/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/de/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/es/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/it/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/System.Text.Encoding.Extensions.dll", + "ref/netstandard1.3/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/de/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/es/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/it/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.extensions.4.0.11.nupkg.sha512", + "system.text.encoding.extensions.nuspec" + ] + }, + "System.Text.RegularExpressions/4.1.0": { + "sha512": "i88YCXpRTjCnoSQZtdlHkAOx4KNNik4hMy83n0+Ftlb7jvV6ZiZWMpnEZHhjBp6hQVh8gWd/iKNPzlPF7iyA2g==", + "type": "package", + "path": "system.text.regularexpressions/4.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Text.RegularExpressions.dll", + "lib/netcore50/System.Text.RegularExpressions.dll", + "lib/netstandard1.6/System.Text.RegularExpressions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Text.RegularExpressions.dll", + "ref/netcore50/System.Text.RegularExpressions.dll", + "ref/netcore50/System.Text.RegularExpressions.xml", + "ref/netcore50/de/System.Text.RegularExpressions.xml", + "ref/netcore50/es/System.Text.RegularExpressions.xml", + "ref/netcore50/fr/System.Text.RegularExpressions.xml", + "ref/netcore50/it/System.Text.RegularExpressions.xml", + "ref/netcore50/ja/System.Text.RegularExpressions.xml", + "ref/netcore50/ko/System.Text.RegularExpressions.xml", + "ref/netcore50/ru/System.Text.RegularExpressions.xml", + "ref/netcore50/zh-hans/System.Text.RegularExpressions.xml", + "ref/netcore50/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/System.Text.RegularExpressions.dll", + "ref/netstandard1.0/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/System.Text.RegularExpressions.dll", + "ref/netstandard1.3/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/System.Text.RegularExpressions.dll", + "ref/netstandard1.6/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/zh-hant/System.Text.RegularExpressions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.regularexpressions.4.1.0.nupkg.sha512", + "system.text.regularexpressions.nuspec" + ] + }, + "System.Threading/4.0.11": { + "sha512": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "type": "package", + "path": "system.threading/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll", + "system.threading.4.0.11.nupkg.sha512", + "system.threading.nuspec" + ] + }, + "System.Threading.Tasks/4.0.11": { + "sha512": "k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==", + "type": "package", + "path": "system.threading.tasks/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.0.11.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + }, + "System.Threading.Tasks.Extensions/4.0.0": { + "sha512": "pH4FZDsZQ/WmgJtN4LWYmRdJAEeVkyriSwrv2Teoe5FOU0Yxlb6II6GL8dBPOfRmutHGATduj3ooMt7dJ2+i+w==", + "type": "package", + "path": "system.threading.tasks.extensions/4.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", + "system.threading.tasks.extensions.4.0.0.nupkg.sha512", + "system.threading.tasks.extensions.nuspec" + ] + }, + "System.Windows.Extensions/6.0.0": { + "sha512": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", + "type": "package", + "path": "system.windows.extensions/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net6.0/System.Windows.Extensions.dll", + "lib/net6.0/System.Windows.Extensions.xml", + "lib/netcoreapp3.1/System.Windows.Extensions.dll", + "lib/netcoreapp3.1/System.Windows.Extensions.xml", + "runtimes/win/lib/net6.0/System.Windows.Extensions.dll", + "runtimes/win/lib/net6.0/System.Windows.Extensions.xml", + "runtimes/win/lib/netcoreapp3.1/System.Windows.Extensions.dll", + "runtimes/win/lib/netcoreapp3.1/System.Windows.Extensions.xml", + "system.windows.extensions.6.0.0.nupkg.sha512", + "system.windows.extensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Xml.ReaderWriter/4.0.11": { + "sha512": "ZIiLPsf67YZ9zgr31vzrFaYQqxRPX9cVHjtPSnmx4eN6lbS/yEyYNr2vs1doGDEscF0tjCZFsk9yUg1sC9e8tg==", + "type": "package", + "path": "system.xml.readerwriter/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Xml.ReaderWriter.dll", + "lib/netstandard1.3/System.Xml.ReaderWriter.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Xml.ReaderWriter.dll", + "ref/netcore50/System.Xml.ReaderWriter.xml", + "ref/netcore50/de/System.Xml.ReaderWriter.xml", + "ref/netcore50/es/System.Xml.ReaderWriter.xml", + "ref/netcore50/fr/System.Xml.ReaderWriter.xml", + "ref/netcore50/it/System.Xml.ReaderWriter.xml", + "ref/netcore50/ja/System.Xml.ReaderWriter.xml", + "ref/netcore50/ko/System.Xml.ReaderWriter.xml", + "ref/netcore50/ru/System.Xml.ReaderWriter.xml", + "ref/netcore50/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netcore50/zh-hant/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/System.Xml.ReaderWriter.dll", + "ref/netstandard1.0/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/de/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/es/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/fr/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/it/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ja/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ko/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ru/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/zh-hant/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/System.Xml.ReaderWriter.dll", + "ref/netstandard1.3/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/de/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/es/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/fr/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/it/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ja/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ko/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ru/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/zh-hant/System.Xml.ReaderWriter.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.xml.readerwriter.4.0.11.nupkg.sha512", + "system.xml.readerwriter.nuspec" + ] + }, + "System.Xml.XDocument/4.0.11": { + "sha512": "Mk2mKmPi0nWaoiYeotq1dgeNK1fqWh61+EK+w4Wu8SWuTYLzpUnschb59bJtGywaPq7SmTuPf44wrXRwbIrukg==", + "type": "package", + "path": "system.xml.xdocument/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Xml.XDocument.dll", + "lib/netstandard1.3/System.Xml.XDocument.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Xml.XDocument.dll", + "ref/netcore50/System.Xml.XDocument.xml", + "ref/netcore50/de/System.Xml.XDocument.xml", + "ref/netcore50/es/System.Xml.XDocument.xml", + "ref/netcore50/fr/System.Xml.XDocument.xml", + "ref/netcore50/it/System.Xml.XDocument.xml", + "ref/netcore50/ja/System.Xml.XDocument.xml", + "ref/netcore50/ko/System.Xml.XDocument.xml", + "ref/netcore50/ru/System.Xml.XDocument.xml", + "ref/netcore50/zh-hans/System.Xml.XDocument.xml", + "ref/netcore50/zh-hant/System.Xml.XDocument.xml", + "ref/netstandard1.0/System.Xml.XDocument.dll", + "ref/netstandard1.0/System.Xml.XDocument.xml", + "ref/netstandard1.0/de/System.Xml.XDocument.xml", + "ref/netstandard1.0/es/System.Xml.XDocument.xml", + "ref/netstandard1.0/fr/System.Xml.XDocument.xml", + "ref/netstandard1.0/it/System.Xml.XDocument.xml", + "ref/netstandard1.0/ja/System.Xml.XDocument.xml", + "ref/netstandard1.0/ko/System.Xml.XDocument.xml", + "ref/netstandard1.0/ru/System.Xml.XDocument.xml", + "ref/netstandard1.0/zh-hans/System.Xml.XDocument.xml", + "ref/netstandard1.0/zh-hant/System.Xml.XDocument.xml", + "ref/netstandard1.3/System.Xml.XDocument.dll", + "ref/netstandard1.3/System.Xml.XDocument.xml", + "ref/netstandard1.3/de/System.Xml.XDocument.xml", + "ref/netstandard1.3/es/System.Xml.XDocument.xml", + "ref/netstandard1.3/fr/System.Xml.XDocument.xml", + "ref/netstandard1.3/it/System.Xml.XDocument.xml", + "ref/netstandard1.3/ja/System.Xml.XDocument.xml", + "ref/netstandard1.3/ko/System.Xml.XDocument.xml", + "ref/netstandard1.3/ru/System.Xml.XDocument.xml", + "ref/netstandard1.3/zh-hans/System.Xml.XDocument.xml", + "ref/netstandard1.3/zh-hant/System.Xml.XDocument.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.xml.xdocument.4.0.11.nupkg.sha512", + "system.xml.xdocument.nuspec" + ] + }, + "UART-CL By TheCod3r/1.0.0": { + "type": "project", + "path": "../../UART-CL By TheCod3r/UART-CL By TheCod3r.csproj", + "msbuildProject": "../../UART-CL By TheCod3r/UART-CL By TheCod3r.csproj" + } + }, + "projectFileDependencyGroups": { + "net6.0": [ + "FluentAssertions >= 7.2.0", + "Microsoft.NET.Test.Sdk >= 17.1.0", + "NUnit >= 3.13.3", + "NUnit.Analyzers >= 3.3.0", + "NUnit3TestAdapter >= 4.2.1", + "UART-CL By TheCod3r >= 1.0.0", + "coverlet.collector >= 3.1.2" + ] + }, + "packageFolders": { + "C:\\Users\\Rory B\\.nuget\\packages\\": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\UART-CL.UnitTests.csproj", + "projectName": "UART-CL.UnitTests", + "projectPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\UART-CL.UnitTests.csproj", + "packagesPath": "C:\\Users\\Rory B\\.nuget\\packages\\", + "outputPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\tests\\UART-CL.UnitTests\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\Rory B\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": { + "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\UART-CL By TheCod3r.csproj": { + "projectPath": "C:\\Users\\Rory B\\Documents\\PS5NorModifier\\UART-CL By TheCod3r\\UART-CL By TheCod3r\\UART-CL By TheCod3r.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "FluentAssertions": { + "target": "Package", + "version": "[7.2.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.1.0, )" + }, + "NUnit": { + "target": "Package", + "version": "[3.13.3, )" + }, + "NUnit.Analyzers": { + "target": "Package", + "version": "[3.3.0, )" + }, + "NUnit3TestAdapter": { + "target": "Package", + "version": "[4.2.1, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[3.1.2, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.401\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file