newOption<uint>("--app","The AppID to download"){IsRequired=true,ArgumentHelpName="id",Name="AppId"},
newOption<uint[]>("--depot","The DepotID to download"){ArgumentHelpName="id",Name="Depots"},
newOption<ulong[]>("--manifest","Manifest id of content to download (requires --depot, default: current for branch)"){ArgumentHelpName="id",Name="Manifests"},
newOption<ulong?>("--ugc","The UGC ID to download"){ArgumentHelpName="id"},
newOption<ulong[]>("--pubfile","The PublishedFileId to download (will automatically resolve to UGC id)"){ArgumentHelpName="id",Name="PublishedFileIds"},
newOption<string?>(new[]{"--branch","--beta"},"Download from specified branch if available"),
newOption<string?>(new[]{"--branch-password","--betapassword"},"Branch password if applicable"),
newOption<string[]>("--os",()=>new[]{Util.GetSteamOS()},"The operating system for which to download the game"){Name="OperatingSystems"}.FromAmong("all","windows","macos","linux"),
newOption<string[]>("--arch",()=>new[]{Util.GetSteamArch()},"The architecture for which to download the game"){Name="Architectures"}.FromAmong("64","32"),
newOption<string[]>("--language",()=>new[]{"english"},"The language for which to download the game"){ArgumentHelpName="language",Name="Languages"},
newOption<string?>("--username","The username of the account to login to for restricted content"),
newOption<string?>("--password","The password of the account to login to for restricted content"),
newOption<bool>("--remember-password","If set, remember the password for subsequent logins of this user"),
newOption<bool>("--qr","If set, allows logging in with a QR code generate by the Steam Mobile App"),
DebugLog.Enabled=false;
newOption<DirectoryInfo>(new[]{"--directory","--dir"},"The directory in which to place downloaded files"),
newOption<FileInfo>("--filelist","A list of files to download (from the manifest). Prefix file path with 'regex:' if you want to match with regex").ExistingOnly(),
newOption<bool>(new[]{"--validate","--verify-all"},"Include checksum verification of files already downloaded"){Name="Validate"},
newOption<bool>("--manifest-only","Downloads a human readable manifest for any depots that would be downloaded"),
newOption<int?>("--cellid","The overridden CellID of the content server to download from"),
newOption<int>("--max-servers",()=>20,"Maximum number of content servers to use"),
newOption<int>("--max-downloads",()=>8,"Maximum number of chunks to download concurrently"),
newOption<uint?>("--loginid","A unique 32-bit integer Steam LogonID in decimal, required if running multiple instances of DepotDownloader concurrently"),
Console.WriteLine("\t-app <#>\t\t\t\t- the AppID to download.");
Console.WriteLine("\t-depot <#>\t\t\t\t- the DepotID to download.");
Console.WriteLine("\t-manifest <id>\t\t\t- manifest id of content to download (requires -depot, default: current for branch).");
Console.WriteLine($"\t-beta <branchname>\t\t\t- download from specified branch if available (default: {ContentDownloader.DEFAULT_BRANCH}).");
Console.WriteLine("\t-betapassword <pass>\t\t- branch password if applicable.");
Console.WriteLine("\t-all-platforms\t\t\t- downloads all platform-specific depots when -app is used.");
Console.WriteLine("\t-os <os>\t\t\t\t- the operating system for which to download the game (windows, macos or linux, default: OS the program is currently running on)");
Console.WriteLine("\t-osarch <arch>\t\t\t\t- the architecture for which to download the game (32 or 64, default: the host's architecture)");
Console.WriteLine("\t-all-languages\t\t\t\t- download all language-specific depots when -app is used.");
Console.WriteLine("\t-language <lang>\t\t\t\t- the language for which to download the game (default: english)");
Console.WriteLine("\t-lowviolence\t\t\t\t- download low violence depots when -app is used.");
Console.WriteLine();
Console.WriteLine("\t-ugc <#>\t\t\t\t- the UGC ID to download.");
Console.WriteLine("\t-pubfile <#>\t\t\t- the PublishedFileId to download. (Will automatically resolve to UGC id)");
Console.WriteLine();
Console.WriteLine("\t-username <user>\t\t- the username of the account to login to for restricted content.");
Console.WriteLine("\t-password <pass>\t\t- the password of the account to login to for restricted content.");
Console.WriteLine("\t-remember-password\t\t- if set, remember the password for subsequent logins of this user. (Use -username <username> -remember-password as login credentials)");
Console.WriteLine();
Console.WriteLine("\t-dir <installdir>\t\t- the directory in which to place downloaded files.");
Console.WriteLine("\t-filelist <file.txt>\t- a list of files to download (from the manifest). Prefix file path with 'regex:' if you want to match with regex.");
Console.WriteLine("\t-validate\t\t\t\t- Include checksum verification of files already downloaded");
Console.WriteLine();
Console.WriteLine("\t-manifest-only\t\t\t- downloads a human readable manifest for any depots that would be downloaded.");
Console.WriteLine("\t-cellid <#>\t\t\t\t- the overridden CellID of the content server to download from.");
Console.WriteLine("\t-max-servers <#>\t\t- maximum number of content servers to use. (default: 20).");
Console.WriteLine("\t-max-downloads <#>\t\t- maximum number of chunks to download concurrently. (default: 8).");
Console.WriteLine("\t-loginid <#>\t\t- a unique 32-bit integer Steam LogonID in decimal, required if running multiple instances of DepotDownloader concurrently.");
thrownewException($"EResult {(int)callback.Result} ({callback.Result}) while retrieving file details for pubfile {pubFile}.");
thrownewException($"EResult {(int)callback.Result} ({callback.Result}) while retrieving file details for pubfiles[{string.Join(",", publishedFileIds)}].");