The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .gitattributes
├── .github
    ├── ISSUE_TEMPLATE
    │   ├── bug_report.yml
    │   ├── config.yml
    │   └── suggestion.yml
    └── workflows
    │   └── dispatch.yml
├── .gitignore
├── .gitmodules
├── BUILD.md
├── CMakeLists.txt
├── COPYING.md
├── README.md
├── branding
    ├── MultiMC.icns
    ├── MultiMC.ico
    ├── MultiMC.manifest
    ├── genicons.sh
    ├── logo-discord.svg
    ├── logo-macos.svg
    ├── logo.qrc
    ├── logo.svg
    └── multimc.rc
├── buildconfig
    ├── BuildConfig.cpp.in
    ├── BuildConfig.h
    └── CMakeLists.txt
├── changelog.md
├── cmake
    ├── BundleUtilities.cmake
    ├── GetGitRevisionDescription.cmake
    ├── GetGitRevisionDescription.cmake.in
    ├── GetPrerequisites.cmake
    ├── GitFunctions.cmake
    ├── MacOSXBundleInfo.plist.in
    ├── QMakeQuery.cmake
    ├── UnitTest.cmake
    ├── UnitTest
    │   ├── TestUtil.h
    │   ├── generate_test_data.cmake
    │   ├── test.manifest
    │   └── test.rc
    ├── UseJava.cmake
    ├── UseJavaClassFilelist.cmake
    └── UseJavaSymlinks.cmake
├── doc
    └── multimc.1.txt
├── launcher
    ├── Application.cpp
    ├── Application.h
    ├── ApplicationMessage.cpp
    ├── ApplicationMessage.h
    ├── BaseInstaller.cpp
    ├── BaseInstaller.h
    ├── BaseInstance.cpp
    ├── BaseInstance.h
    ├── BaseVersion.h
    ├── BaseVersionList.cpp
    ├── BaseVersionList.h
    ├── CMakeLists.txt
    ├── Commandline.cpp
    ├── Commandline.h
    ├── DefaultVariable.h
    ├── DesktopServices.cpp
    ├── DesktopServices.h
    ├── Exception.h
    ├── ExponentialSeries.h
    ├── FileSystem.cpp
    ├── FileSystem.h
    ├── FileSystem_test.cpp
    ├── Filter.cpp
    ├── Filter.h
    ├── GZip.cpp
    ├── GZip.h
    ├── GZip_test.cpp
    ├── HoeDown.h
    ├── InstanceCopyTask.cpp
    ├── InstanceCopyTask.h
    ├── InstanceCreationTask.cpp
    ├── InstanceCreationTask.h
    ├── InstanceImportTask.cpp
    ├── InstanceImportTask.h
    ├── InstanceList.cpp
    ├── InstanceList.h
    ├── InstancePageProvider.h
    ├── InstanceTask.cpp
    ├── InstanceTask.h
    ├── JavaCommon.cpp
    ├── JavaCommon.h
    ├── Json.cpp
    ├── Json.h
    ├── KonamiCode.cpp
    ├── KonamiCode.h
    ├── LaunchController.cpp
    ├── LaunchController.h
    ├── Launcher.in
    ├── LoggedProcess.cpp
    ├── LoggedProcess.h
    ├── MMCStrings.cpp
    ├── MMCStrings.h
    ├── MMCTime.cpp
    ├── MMCTime.h
    ├── MMCZip.cpp
    ├── MMCZip.h
    ├── MessageLevel.cpp
    ├── MessageLevel.h
    ├── NullInstance.h
    ├── ProblemProvider.h
    ├── QObjectPtr.h
    ├── RWStorage.h
    ├── RecursiveFileSystemWatcher.cpp
    ├── RecursiveFileSystemWatcher.h
    ├── SeparatorPrefixTree.h
    ├── UpdateController.cpp
    ├── UpdateController.h
    ├── Usable.h
    ├── Version.cpp
    ├── Version.h
    ├── VersionProxyModel.cpp
    ├── VersionProxyModel.h
    ├── Version_test.cpp
    ├── WatchLock.h
    ├── icons
    │   ├── IconList.cpp
    │   ├── IconList.h
    │   ├── IconUtils.cpp
    │   ├── IconUtils.h
    │   ├── MMCIcon.cpp
    │   └── MMCIcon.h
    ├── install_prereqs.cmake.in
    ├── java
    │   ├── JavaChecker.cpp
    │   ├── JavaChecker.h
    │   ├── JavaCheckerJob.cpp
    │   ├── JavaCheckerJob.h
    │   ├── JavaInstall.cpp
    │   ├── JavaInstall.h
    │   ├── JavaInstallList.cpp
    │   ├── JavaInstallList.h
    │   ├── JavaUtils.cpp
    │   ├── JavaUtils.h
    │   ├── JavaVersion.cpp
    │   ├── JavaVersion.h
    │   └── JavaVersion_test.cpp
    ├── launch
    │   ├── LaunchStep.cpp
    │   ├── LaunchStep.h
    │   ├── LaunchTask.cpp
    │   ├── LaunchTask.h
    │   ├── LogModel.cpp
    │   ├── LogModel.h
    │   └── steps
    │   │   ├── CheckJava.cpp
    │   │   ├── CheckJava.h
    │   │   ├── LookupServerAddress.cpp
    │   │   ├── LookupServerAddress.h
    │   │   ├── PostLaunchCommand.cpp
    │   │   ├── PostLaunchCommand.h
    │   │   ├── PreLaunchCommand.cpp
    │   │   ├── PreLaunchCommand.h
    │   │   ├── TextPrint.cpp
    │   │   ├── TextPrint.h
    │   │   ├── Update.cpp
    │   │   └── Update.h
    ├── main.cpp
    ├── meta
    │   ├── BaseEntity.cpp
    │   ├── BaseEntity.h
    │   ├── Index.cpp
    │   ├── Index.h
    │   ├── Index_test.cpp
    │   ├── JsonFormat.cpp
    │   ├── JsonFormat.h
    │   ├── Version.cpp
    │   ├── Version.h
    │   ├── VersionList.cpp
    │   └── VersionList.h
    ├── minecraft
    │   ├── AssetsUtils.cpp
    │   ├── AssetsUtils.h
    │   ├── Component.cpp
    │   ├── Component.h
    │   ├── ComponentUpdateTask.cpp
    │   ├── ComponentUpdateTask.h
    │   ├── ComponentUpdateTask_p.h
    │   ├── GradleSpecifier.h
    │   ├── GradleSpecifier_test.cpp
    │   ├── LaunchProfile.cpp
    │   ├── LaunchProfile.h
    │   ├── Library.cpp
    │   ├── Library.h
    │   ├── Library_test.cpp
    │   ├── MinecraftInstance.cpp
    │   ├── MinecraftInstance.h
    │   ├── MinecraftLoadAndCheck.cpp
    │   ├── MinecraftLoadAndCheck.h
    │   ├── MinecraftUpdate.cpp
    │   ├── MinecraftUpdate.h
    │   ├── MojangDownloadInfo.h
    │   ├── MojangVersionFormat.cpp
    │   ├── MojangVersionFormat.h
    │   ├── MojangVersionFormat_test.cpp
    │   ├── OneSixVersionFormat.cpp
    │   ├── OneSixVersionFormat.h
    │   ├── OpSys.cpp
    │   ├── OpSys.h
    │   ├── PackProfile.cpp
    │   ├── PackProfile.h
    │   ├── PackProfile_p.h
    │   ├── ParseUtils.cpp
    │   ├── ParseUtils.h
    │   ├── ParseUtils_test.cpp
    │   ├── ProfileUtils.cpp
    │   ├── ProfileUtils.h
    │   ├── Rule.cpp
    │   ├── Rule.h
    │   ├── VersionFile.cpp
    │   ├── VersionFile.h
    │   ├── VersionFilterData.cpp
    │   ├── VersionFilterData.h
    │   ├── World.cpp
    │   ├── World.h
    │   ├── WorldList.cpp
    │   ├── WorldList.h
    │   ├── auth
    │   │   ├── AccountData.cpp
    │   │   ├── AccountData.h
    │   │   ├── AccountList.cpp
    │   │   ├── AccountList.h
    │   │   ├── AccountTask.cpp
    │   │   ├── AccountTask.h
    │   │   ├── AuthRequest.cpp
    │   │   ├── AuthRequest.h
    │   │   ├── AuthSession.cpp
    │   │   ├── AuthSession.h
    │   │   ├── AuthStep.cpp
    │   │   ├── AuthStep.h
    │   │   ├── MinecraftAccount.cpp
    │   │   ├── MinecraftAccount.h
    │   │   ├── Parsers.cpp
    │   │   ├── Parsers.h
    │   │   ├── flows
    │   │   │   ├── AuthFlow.cpp
    │   │   │   ├── AuthFlow.h
    │   │   │   ├── MSA.cpp
    │   │   │   └── MSA.h
    │   │   └── steps
    │   │   │   ├── EntitlementsStep.cpp
    │   │   │   ├── EntitlementsStep.h
    │   │   │   ├── GetSkinStep.cpp
    │   │   │   ├── GetSkinStep.h
    │   │   │   ├── LauncherLoginStep.cpp
    │   │   │   ├── LauncherLoginStep.h
    │   │   │   ├── MSAStep.cpp
    │   │   │   ├── MSAStep.h
    │   │   │   ├── MinecraftProfileCreateStep.cpp
    │   │   │   ├── MinecraftProfileCreateStep.h
    │   │   │   ├── MinecraftProfileStep.cpp
    │   │   │   ├── MinecraftProfileStep.h
    │   │   │   ├── SetCapeStep.cpp
    │   │   │   ├── SetCapeStep.h
    │   │   │   ├── SetSkinStep.cpp
    │   │   │   ├── SetSkinStep.h
    │   │   │   ├── XboxAuthorizationStep.cpp
    │   │   │   ├── XboxAuthorizationStep.h
    │   │   │   ├── XboxProfileStep.cpp
    │   │   │   ├── XboxProfileStep.h
    │   │   │   ├── XboxUserStep.cpp
    │   │   │   └── XboxUserStep.h
    │   ├── gameoptions
    │   │   ├── GameOptions.cpp
    │   │   └── GameOptions.h
    │   ├── launch
    │   │   ├── ClaimAccount.cpp
    │   │   ├── ClaimAccount.h
    │   │   ├── CreateGameFolders.cpp
    │   │   ├── CreateGameFolders.h
    │   │   ├── DirectJavaLaunch.cpp
    │   │   ├── DirectJavaLaunch.h
    │   │   ├── ExtractNatives.cpp
    │   │   ├── ExtractNatives.h
    │   │   ├── LauncherPartLaunch.cpp
    │   │   ├── LauncherPartLaunch.h
    │   │   ├── ModMinecraftJar.cpp
    │   │   ├── ModMinecraftJar.h
    │   │   ├── PrintInstanceInfo.cpp
    │   │   ├── PrintInstanceInfo.h
    │   │   ├── QuickPlayTarget.cpp
    │   │   ├── QuickPlayTarget.h
    │   │   ├── ReconstructAssets.cpp
    │   │   ├── ReconstructAssets.h
    │   │   ├── ScanModFolders.cpp
    │   │   ├── ScanModFolders.h
    │   │   ├── VerifyJavaInstall.cpp
    │   │   └── VerifyJavaInstall.h
    │   ├── legacy
    │   │   ├── LegacyInstance.cpp
    │   │   ├── LegacyInstance.h
    │   │   ├── LegacyModList.cpp
    │   │   ├── LegacyModList.h
    │   │   ├── LegacyUpgradeTask.cpp
    │   │   └── LegacyUpgradeTask.h
    │   ├── mod
    │   │   ├── LocalModParseTask.cpp
    │   │   ├── LocalModParseTask.h
    │   │   ├── Mod.cpp
    │   │   ├── Mod.h
    │   │   ├── ModDetails.h
    │   │   ├── ModFolderLoadTask.cpp
    │   │   ├── ModFolderLoadTask.h
    │   │   ├── ModFolderModel.cpp
    │   │   ├── ModFolderModel.h
    │   │   ├── ModFolderModel_test.cpp
    │   │   ├── ResourcePackFolderModel.cpp
    │   │   ├── ResourcePackFolderModel.h
    │   │   ├── TexturePackFolderModel.cpp
    │   │   └── TexturePackFolderModel.h
    │   ├── testdata
    │   │   ├── 1.9-simple.json
    │   │   ├── 1.9.json
    │   │   ├── codecwav-20101023.jar
    │   │   ├── lib-native-arch.json
    │   │   ├── lib-native.json
    │   │   ├── lib-simple.json
    │   │   └── testname-testversion-linux-32.jar
    │   └── update
    │   │   ├── AssetUpdateTask.cpp
    │   │   ├── AssetUpdateTask.h
    │   │   ├── FMLLibrariesTask.cpp
    │   │   ├── FMLLibrariesTask.h
    │   │   ├── FoldersTask.cpp
    │   │   ├── FoldersTask.h
    │   │   ├── LibrariesTask.cpp
    │   │   └── LibrariesTask.h
    ├── modplatform
    │   ├── atlauncher
    │   │   ├── ATLPackIndex.cpp
    │   │   ├── ATLPackIndex.h
    │   │   ├── ATLPackInstallTask.cpp
    │   │   ├── ATLPackInstallTask.h
    │   │   ├── ATLPackManifest.cpp
    │   │   └── ATLPackManifest.h
    │   ├── legacy_ftb
    │   │   ├── PackFetchTask.cpp
    │   │   ├── PackFetchTask.h
    │   │   ├── PackHelpers.h
    │   │   ├── PackInstallTask.cpp
    │   │   ├── PackInstallTask.h
    │   │   ├── PrivatePackManager.cpp
    │   │   └── PrivatePackManager.h
    │   ├── modrinth
    │   │   ├── ModrinthHashLookupRequest.cpp
    │   │   ├── ModrinthHashLookupRequest.h
    │   │   ├── ModrinthInstanceExportTask.cpp
    │   │   ├── ModrinthInstanceExportTask.h
    │   │   ├── ModrinthPackManifest.cpp
    │   │   └── ModrinthPackManifest.h
    │   └── technic
    │   │   ├── SingleZipPackInstallTask.cpp
    │   │   ├── SingleZipPackInstallTask.h
    │   │   ├── SolderPackInstallTask.cpp
    │   │   ├── SolderPackInstallTask.h
    │   │   ├── SolderPackManifest.cpp
    │   │   ├── SolderPackManifest.h
    │   │   ├── TechnicPackProcessor.cpp
    │   │   └── TechnicPackProcessor.h
    ├── mojang
    │   ├── PackageManifest.cpp
    │   ├── PackageManifest.h
    │   ├── PackageManifest_test.cpp
    │   └── testdata
    │   │   ├── 1.8.0_202-x64.json
    │   │   ├── inspect
    │   │       └── a
    │   │       │   ├── b.txt
    │   │       │   └── b
    │   │       │       └── b.txt
    │   │   └── inspect_win
    │   │       └── a
    │   │           ├── b.txt
    │   │           └── b
    │   │               └── b.txt
    ├── net
    │   ├── ByteArraySink.h
    │   ├── ChecksumValidator.h
    │   ├── Download.cpp
    │   ├── Download.h
    │   ├── FileSink.cpp
    │   ├── FileSink.h
    │   ├── HttpMetaCache.cpp
    │   ├── HttpMetaCache.h
    │   ├── MetaCacheSink.cpp
    │   ├── MetaCacheSink.h
    │   ├── Mode.h
    │   ├── NetAction.h
    │   ├── NetJob.cpp
    │   ├── NetJob.h
    │   ├── PasteUpload.cpp
    │   ├── PasteUpload.h
    │   ├── Sink.h
    │   └── Validator.h
    ├── news
    │   ├── NewsChecker.cpp
    │   ├── NewsChecker.h
    │   ├── NewsEntry.cpp
    │   └── NewsEntry.h
    ├── notifications
    │   ├── NotificationChecker.cpp
    │   └── NotificationChecker.h
    ├── package
    │   ├── rpm
    │   │   ├── MultiMC5.spec
    │   │   └── README.md
    │   └── ubuntu
    │   │   ├── README.md
    │   │   └── multimc
    │   │       ├── DEBIAN
    │   │           ├── control
    │   │           └── postrm
    │   │       ├── opt
    │   │           └── multimc
    │   │           │   ├── icon.svg
    │   │           │   └── run.sh
    │   │       └── usr
    │   │           └── share
    │   │               ├── applications
    │   │                   └── multimc.desktop
    │   │               ├── man
    │   │                   └── man1
    │   │                   │   └── multimc.1
    │   │               └── metainfo
    │   │                   └── multimc.metainfo.xml
    ├── pathmatcher
    │   ├── FSTreeMatcher.h
    │   ├── IPathMatcher.h
    │   ├── MultiMatcher.h
    │   └── RegexpMatcher.h
    ├── resources
    │   ├── OSX
    │   │   ├── OSX.qrc
    │   │   ├── index.theme
    │   │   └── scalable
    │   │   │   ├── about.svg
    │   │   │   ├── accounts.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── copy.svg
    │   │   │   ├── coremods.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── externaltools.svg
    │   │   │   ├── help.svg
    │   │   │   ├── instance-settings.svg
    │   │   │   ├── jarmods.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── loadermods.svg
    │   │   │   ├── log.svg
    │   │   │   ├── minecraft.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── notes.svg
    │   │   │   ├── patreon.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── refresh.svg
    │   │   │   ├── resourcepacks.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── settings.svg
    │   │   │   ├── shaderpacks.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── viewfolder.svg
    │   │   │   └── worlds.svg
    │   ├── assets
    │   │   └── underconstruction.png
    │   ├── backgrounds
    │   │   ├── backgrounds.qrc
    │   │   ├── catbgrnd2.png
    │   │   ├── catmas.png
    │   │   └── cattiversary.png
    │   ├── documents
    │   │   └── documents.qrc
    │   ├── flat
    │   │   ├── flat.qrc
    │   │   ├── index.theme
    │   │   └── scalable
    │   │   │   ├── about.svg
    │   │   │   ├── accounts.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── cat.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── copy.svg
    │   │   │   ├── coremods.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── discord.svg
    │   │   │   ├── externaltools.svg
    │   │   │   ├── help.svg
    │   │   │   ├── instance-settings.svg
    │   │   │   ├── jarmods.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── loadermods.svg
    │   │   │   ├── log.svg
    │   │   │   ├── minecraft.svg
    │   │   │   ├── multimc.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── notes.svg
    │   │   │   ├── packages.svg
    │   │   │   ├── patreon.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── quickmods.svg
    │   │   │   ├── reddit-alien.svg
    │   │   │   ├── refresh.svg
    │   │   │   ├── resourcepacks.svg
    │   │   │   ├── screenshot-placeholder.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── settings.svg
    │   │   │   ├── shaderpacks.svg
    │   │   │   ├── star.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-running.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── viewfolder.svg
    │   │   │   └── worlds.svg
    │   ├── iOS
    │   │   ├── iOS.qrc
    │   │   ├── index.theme
    │   │   └── scalable
    │   │   │   ├── about.svg
    │   │   │   ├── accounts.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── copy.svg
    │   │   │   ├── coremods.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── externaltools.svg
    │   │   │   ├── help.svg
    │   │   │   ├── instance-settings.svg
    │   │   │   ├── jarmods.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── loadermods.svg
    │   │   │   ├── log.svg
    │   │   │   ├── minecraft.svg
    │   │   │   ├── multimc.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── notes.svg
    │   │   │   ├── patreon.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── refresh.svg
    │   │   │   ├── resourcepacks.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── settings.svg
    │   │   │   ├── shaderpacks.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── viewfolder.svg
    │   │   │   └── worlds.svg
    │   ├── multimc
    │   │   ├── 128x128
    │   │   │   ├── instances
    │   │   │   │   ├── chicken.png
    │   │   │   │   ├── creeper.png
    │   │   │   │   ├── enderpearl.png
    │   │   │   │   ├── flame.png
    │   │   │   │   ├── ftb_glow.png
    │   │   │   │   ├── ftb_logo.png
    │   │   │   │   ├── gear.png
    │   │   │   │   ├── herobrine.png
    │   │   │   │   ├── infinity.png
    │   │   │   │   ├── magitech.png
    │   │   │   │   ├── meat.png
    │   │   │   │   ├── netherstar.png
    │   │   │   │   ├── skeleton.png
    │   │   │   │   ├── squarecreeper.png
    │   │   │   │   └── steve.png
    │   │   │   ├── shaderpacks.png
    │   │   │   └── unknown_server.png
    │   │   ├── 16x16
    │   │   │   ├── about.png
    │   │   │   ├── bug.png
    │   │   │   ├── cat.png
    │   │   │   ├── centralmods.png
    │   │   │   ├── checkupdate.png
    │   │   │   ├── copy.png
    │   │   │   ├── coremods.png
    │   │   │   ├── help.png
    │   │   │   ├── instance-settings.png
    │   │   │   ├── jarmods.png
    │   │   │   ├── loadermods.png
    │   │   │   ├── log.png
    │   │   │   ├── minecraft.png
    │   │   │   ├── new.png
    │   │   │   ├── news.png
    │   │   │   ├── noaccount.png
    │   │   │   ├── patreon.png
    │   │   │   ├── refresh.png
    │   │   │   ├── resourcepacks.png
    │   │   │   ├── screenshots.png
    │   │   │   ├── settings.png
    │   │   │   ├── star.png
    │   │   │   ├── status-bad.png
    │   │   │   ├── status-good.png
    │   │   │   ├── status-running.png
    │   │   │   ├── status-yellow.png
    │   │   │   ├── viewfolder.png
    │   │   │   └── worlds.png
    │   │   ├── 22x22
    │   │   │   ├── about.png
    │   │   │   ├── bug.png
    │   │   │   ├── cat.png
    │   │   │   ├── centralmods.png
    │   │   │   ├── checkupdate.png
    │   │   │   ├── copy.png
    │   │   │   ├── help.png
    │   │   │   ├── instance-settings.png
    │   │   │   ├── new.png
    │   │   │   ├── news.png
    │   │   │   ├── patreon.png
    │   │   │   ├── refresh.png
    │   │   │   ├── screenshots.png
    │   │   │   ├── settings.png
    │   │   │   ├── status-bad.png
    │   │   │   ├── status-good.png
    │   │   │   ├── status-running.png
    │   │   │   ├── status-yellow.png
    │   │   │   ├── viewfolder.png
    │   │   │   └── worlds.png
    │   │   ├── 24x24
    │   │   │   ├── cat.png
    │   │   │   ├── coremods.png
    │   │   │   ├── jarmods.png
    │   │   │   ├── loadermods.png
    │   │   │   ├── log.png
    │   │   │   ├── minecraft.png
    │   │   │   ├── noaccount.png
    │   │   │   ├── patreon.png
    │   │   │   ├── resourcepacks.png
    │   │   │   ├── star.png
    │   │   │   ├── status-bad.png
    │   │   │   ├── status-good.png
    │   │   │   ├── status-running.png
    │   │   │   └── status-yellow.png
    │   │   ├── 256x256
    │   │   │   └── minecraft.png
    │   │   ├── 32x32
    │   │   │   ├── about.png
    │   │   │   ├── bug.png
    │   │   │   ├── cat.png
    │   │   │   ├── centralmods.png
    │   │   │   ├── checkupdate.png
    │   │   │   ├── copy.png
    │   │   │   ├── coremods.png
    │   │   │   ├── help.png
    │   │   │   ├── instance-settings.png
    │   │   │   ├── instances
    │   │   │   │   ├── brick.png
    │   │   │   │   ├── chicken.png
    │   │   │   │   ├── creeper.png
    │   │   │   │   ├── diamond.png
    │   │   │   │   ├── dirt.png
    │   │   │   │   ├── enderpearl.png
    │   │   │   │   ├── flame.png
    │   │   │   │   ├── ftb_glow.png
    │   │   │   │   ├── ftb_logo.png
    │   │   │   │   ├── gear.png
    │   │   │   │   ├── gold.png
    │   │   │   │   ├── grass.png
    │   │   │   │   ├── herobrine.png
    │   │   │   │   ├── infinity.png
    │   │   │   │   ├── iron.png
    │   │   │   │   ├── magitech.png
    │   │   │   │   ├── meat.png
    │   │   │   │   ├── netherstar.png
    │   │   │   │   ├── planks.png
    │   │   │   │   ├── skeleton.png
    │   │   │   │   ├── squarecreeper.png
    │   │   │   │   ├── steve.png
    │   │   │   │   ├── stone.png
    │   │   │   │   └── tnt.png
    │   │   │   ├── jarmods.png
    │   │   │   ├── loadermods.png
    │   │   │   ├── log.png
    │   │   │   ├── minecraft.png
    │   │   │   ├── new.png
    │   │   │   ├── news.png
    │   │   │   ├── noaccount.png
    │   │   │   ├── patreon.png
    │   │   │   ├── refresh.png
    │   │   │   ├── resourcepacks.png
    │   │   │   ├── screenshots.png
    │   │   │   ├── settings.png
    │   │   │   ├── star.png
    │   │   │   ├── status-bad.png
    │   │   │   ├── status-good.png
    │   │   │   ├── status-running.png
    │   │   │   ├── status-yellow.png
    │   │   │   ├── viewfolder.png
    │   │   │   └── worlds.png
    │   │   ├── 48x48
    │   │   │   ├── about.png
    │   │   │   ├── bug.png
    │   │   │   ├── cat.png
    │   │   │   ├── centralmods.png
    │   │   │   ├── checkupdate.png
    │   │   │   ├── copy.png
    │   │   │   ├── help.png
    │   │   │   ├── instance-settings.png
    │   │   │   ├── log.png
    │   │   │   ├── minecraft.png
    │   │   │   ├── new.png
    │   │   │   ├── news.png
    │   │   │   ├── noaccount.png
    │   │   │   ├── patreon.png
    │   │   │   ├── refresh.png
    │   │   │   ├── screenshots.png
    │   │   │   ├── settings.png
    │   │   │   ├── star.png
    │   │   │   ├── status-bad.png
    │   │   │   ├── status-good.png
    │   │   │   ├── status-running.png
    │   │   │   ├── status-yellow.png
    │   │   │   ├── viewfolder.png
    │   │   │   └── worlds.png
    │   │   ├── 50x50
    │   │   │   └── instances
    │   │   │   │   └── enderman.png
    │   │   ├── 64x64
    │   │   │   ├── about.png
    │   │   │   ├── bug.png
    │   │   │   ├── cat.png
    │   │   │   ├── centralmods.png
    │   │   │   ├── checkupdate.png
    │   │   │   ├── copy.png
    │   │   │   ├── coremods.png
    │   │   │   ├── help.png
    │   │   │   ├── instance-settings.png
    │   │   │   ├── jarmods.png
    │   │   │   ├── loadermods.png
    │   │   │   ├── log.png
    │   │   │   ├── new.png
    │   │   │   ├── news.png
    │   │   │   ├── patreon.png
    │   │   │   ├── refresh.png
    │   │   │   ├── resourcepacks.png
    │   │   │   ├── screenshots.png
    │   │   │   ├── settings.png
    │   │   │   ├── star.png
    │   │   │   ├── status-bad.png
    │   │   │   ├── status-good.png
    │   │   │   ├── status-running.png
    │   │   │   ├── status-yellow.png
    │   │   │   ├── viewfolder.png
    │   │   │   └── worlds.png
    │   │   ├── 8x8
    │   │   │   └── noaccount.png
    │   │   ├── index.theme
    │   │   ├── multimc.qrc
    │   │   └── scalable
    │   │   │   ├── atlauncher-placeholder.png
    │   │   │   ├── atlauncher.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── discord.svg
    │   │   │   ├── instances
    │   │   │       ├── bee.svg
    │   │   │       └── fox.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── modrinth.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── reddit-alien.svg
    │   │   │   ├── screenshot-placeholder.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-running.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── technic.svg
    │   │   │   └── viewfolder.svg
    │   ├── pe_blue
    │   │   ├── index.theme
    │   │   ├── pe_blue.qrc
    │   │   └── scalable
    │   │   │   ├── about.svg
    │   │   │   ├── accounts.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── copy.svg
    │   │   │   ├── coremods.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── externaltools.svg
    │   │   │   ├── help.svg
    │   │   │   ├── instance-settings.svg
    │   │   │   ├── jarmods.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── loadermods.svg
    │   │   │   ├── log.svg
    │   │   │   ├── minecraft.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── notes.svg
    │   │   │   ├── patreon.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── refresh.svg
    │   │   │   ├── resourcepacks.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── settings.svg
    │   │   │   ├── shaderpacks.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── viewfolder.svg
    │   │   │   └── worlds.svg
    │   ├── pe_colored
    │   │   ├── index.theme
    │   │   ├── pe_colored.qrc
    │   │   └── scalable
    │   │   │   ├── about.svg
    │   │   │   ├── accounts.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── copy.svg
    │   │   │   ├── coremods.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── externaltools.svg
    │   │   │   ├── help.svg
    │   │   │   ├── instance-settings.svg
    │   │   │   ├── jarmods.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── loadermods.svg
    │   │   │   ├── log.svg
    │   │   │   ├── minecraft.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── notes.svg
    │   │   │   ├── patreon.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── refresh.svg
    │   │   │   ├── resourcepacks.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── settings.svg
    │   │   │   ├── shaderpacks.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── viewfolder.svg
    │   │   │   └── worlds.svg
    │   ├── pe_dark
    │   │   ├── index.theme
    │   │   ├── pe_dark.qrc
    │   │   └── scalable
    │   │   │   ├── about.svg
    │   │   │   ├── accounts.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── copy.svg
    │   │   │   ├── coremods.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── externaltools.svg
    │   │   │   ├── help.svg
    │   │   │   ├── instance-settings.svg
    │   │   │   ├── jarmods.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── loadermods.svg
    │   │   │   ├── log.svg
    │   │   │   ├── minecraft.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── notes.svg
    │   │   │   ├── patreon.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── refresh.svg
    │   │   │   ├── resourcepacks.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── settings.svg
    │   │   │   ├── shaderpacks.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── viewfolder.svg
    │   │   │   └── worlds.svg
    │   ├── pe_light
    │   │   ├── index.theme
    │   │   ├── pe_light.qrc
    │   │   └── scalable
    │   │   │   ├── about.svg
    │   │   │   ├── accounts.svg
    │   │   │   ├── bug.svg
    │   │   │   ├── centralmods.svg
    │   │   │   ├── checkupdate.svg
    │   │   │   ├── copy.svg
    │   │   │   ├── coremods.svg
    │   │   │   ├── custom-commands.svg
    │   │   │   ├── externaltools.svg
    │   │   │   ├── help.svg
    │   │   │   ├── instance-settings.svg
    │   │   │   ├── jarmods.svg
    │   │   │   ├── java.svg
    │   │   │   ├── language.svg
    │   │   │   ├── launcher.svg
    │   │   │   ├── loadermods.svg
    │   │   │   ├── log.svg
    │   │   │   ├── minecraft.svg
    │   │   │   ├── new.svg
    │   │   │   ├── news.svg
    │   │   │   ├── notes.svg
    │   │   │   ├── patreon.svg
    │   │   │   ├── proxy.svg
    │   │   │   ├── refresh.svg
    │   │   │   ├── resourcepacks.svg
    │   │   │   ├── screenshots.svg
    │   │   │   ├── settings.svg
    │   │   │   ├── shaderpacks.svg
    │   │   │   ├── status-bad.svg
    │   │   │   ├── status-good.svg
    │   │   │   ├── status-yellow.svg
    │   │   │   ├── viewfolder.svg
    │   │   │   └── worlds.svg
    │   ├── skins
    │   │   ├── shaders
    │   │   │   ├── bg.frag
    │   │   │   ├── bg.vert
    │   │   │   ├── skin.frag
    │   │   │   └── skin.vert
    │   │   ├── skins.qrc
    │   │   └── textures
    │   │   │   ├── Alex_Classic.png
    │   │   │   ├── Alex_Slim.png
    │   │   │   ├── Ari_Classic.png
    │   │   │   ├── Ari_Slim.png
    │   │   │   ├── Efe_Classic.png
    │   │   │   ├── Efe_Slim.png
    │   │   │   ├── Kai_Classic.png
    │   │   │   ├── Kai_Slim.png
    │   │   │   ├── Makena_Classic.png
    │   │   │   ├── Makena_Slim.png
    │   │   │   ├── Noor_Classic.png
    │   │   │   ├── Noor_Slim.png
    │   │   │   ├── Steve_Classic.png
    │   │   │   ├── Steve_Slim.png
    │   │   │   ├── Sunny_Classic.png
    │   │   │   ├── Sunny_Slim.png
    │   │   │   ├── Zuri_Classic.png
    │   │   │   ├── Zuri_Slim.png
    │   │   │   ├── no_cape.png
    │   │   │   ├── placeholder_cape.png
    │   │   │   └── placeholder_skin.png
    │   └── sources
    │   │   ├── burfcat_hat.png
    │   │   ├── cattiversary.xcf
    │   │   ├── clucker.svg
    │   │   ├── creeper.svg
    │   │   ├── enderpearl.svg
    │   │   ├── flame.svg
    │   │   ├── ftb-glow.svg
    │   │   ├── ftb-logo.svg
    │   │   ├── gear.svg
    │   │   ├── herobrine.svg
    │   │   ├── magitech.svg
    │   │   ├── meat.svg
    │   │   ├── netherstar.svg
    │   │   ├── pskeleton.svg
    │   │   ├── skeleton.svg
    │   │   ├── squarecreeper.svg
    │   │   └── steve.svg
    ├── screenshots
    │   ├── ImgurAlbumCreation.cpp
    │   ├── ImgurAlbumCreation.h
    │   ├── ImgurUpload.cpp
    │   ├── ImgurUpload.h
    │   └── Screenshot.h
    ├── settings
    │   ├── INIFile.cpp
    │   ├── INIFile.h
    │   ├── INIFile_test.cpp
    │   ├── INISettingsObject.cpp
    │   ├── INISettingsObject.h
    │   ├── OverrideSetting.cpp
    │   ├── OverrideSetting.h
    │   ├── PassthroughSetting.cpp
    │   ├── PassthroughSetting.h
    │   ├── Setting.cpp
    │   ├── Setting.h
    │   ├── SettingsObject.cpp
    │   └── SettingsObject.h
    ├── skins
    │   ├── CapeCache.cpp
    │   ├── CapeCache.h
    │   ├── CapesModel.cpp
    │   ├── CapesModel.h
    │   ├── SkinRenderer.cpp
    │   ├── SkinRenderer.h
    │   ├── SkinTypes.cpp
    │   ├── SkinTypes.h
    │   ├── SkinUtils.cpp
    │   ├── SkinUtils.h
    │   ├── SkinWidget.cpp
    │   ├── SkinWidget.h
    │   ├── SkinsModel.cpp
    │   ├── SkinsModel.h
    │   ├── TextureMappings.cpp
    │   └── TextureMappings.h
    ├── tasks
    │   ├── SequentialTask.cpp
    │   ├── SequentialTask.h
    │   ├── Task.cpp
    │   └── Task.h
    ├── testdata
    │   ├── FileSystem-test_createShortcut-unix
    │   └── test_folder
    │   │   ├── assets
    │   │       └── minecraft
    │   │       │   └── textures
    │   │       │       └── blah.txt
    │   │   ├── pack.mcmeta
    │   │   └── pack.nfo
    ├── tools
    │   ├── BaseExternalTool.cpp
    │   ├── BaseExternalTool.h
    │   ├── BaseProfiler.cpp
    │   ├── BaseProfiler.h
    │   ├── JProfiler.cpp
    │   ├── JProfiler.h
    │   ├── JVisualVM.cpp
    │   ├── JVisualVM.h
    │   ├── MCEditTool.cpp
    │   └── MCEditTool.h
    ├── translations
    │   ├── POTranslator.cpp
    │   ├── POTranslator.h
    │   ├── TranslationsModel.cpp
    │   └── TranslationsModel.h
    ├── ui
    │   ├── ColorCache.cpp
    │   ├── ColorCache.h
    │   ├── GuiUtil.cpp
    │   ├── GuiUtil.h
    │   ├── InstanceWindow.cpp
    │   ├── InstanceWindow.h
    │   ├── MainWindow.cpp
    │   ├── MainWindow.h
    │   ├── dialogs
    │   │   ├── AboutDialog.cpp
    │   │   ├── AboutDialog.h
    │   │   ├── AboutDialog.ui
    │   │   ├── AccountsDialog.cpp
    │   │   ├── AccountsDialog.h
    │   │   ├── AccountsDialog.ui
    │   │   ├── CopyInstanceDialog.cpp
    │   │   ├── CopyInstanceDialog.h
    │   │   ├── CopyInstanceDialog.ui
    │   │   ├── CreateShortcutDialog.cpp
    │   │   ├── CreateShortcutDialog.h
    │   │   ├── CreateShortcutDialog.ui
    │   │   ├── CustomMessageBox.cpp
    │   │   ├── CustomMessageBox.h
    │   │   ├── ExportInstanceDialog.cpp
    │   │   ├── ExportInstanceDialog.h
    │   │   ├── ExportInstanceDialog.ui
    │   │   ├── IconPickerDialog.cpp
    │   │   ├── IconPickerDialog.h
    │   │   ├── IconPickerDialog.ui
    │   │   ├── ModrinthExportDialog.cpp
    │   │   ├── ModrinthExportDialog.h
    │   │   ├── ModrinthExportDialog.ui
    │   │   ├── NewComponentDialog.cpp
    │   │   ├── NewComponentDialog.h
    │   │   ├── NewComponentDialog.ui
    │   │   ├── NewInstanceDialog.cpp
    │   │   ├── NewInstanceDialog.h
    │   │   ├── NewInstanceDialog.ui
    │   │   ├── NotificationDialog.cpp
    │   │   ├── NotificationDialog.h
    │   │   ├── NotificationDialog.ui
    │   │   ├── OfflineNameDialog.cpp
    │   │   ├── OfflineNameDialog.h
    │   │   ├── ProfileSelectDialog.cpp
    │   │   ├── ProfileSelectDialog.h
    │   │   ├── ProfileSelectDialog.ui
    │   │   ├── ProgressDialog.cpp
    │   │   ├── ProgressDialog.h
    │   │   ├── ProgressDialog.ui
    │   │   ├── UpdateDialog.cpp
    │   │   ├── UpdateDialog.h
    │   │   ├── UpdateDialog.ui
    │   │   ├── VersionSelectDialog.cpp
    │   │   └── VersionSelectDialog.h
    │   ├── instanceview
    │   │   ├── AccessibleInstanceView.cpp
    │   │   ├── AccessibleInstanceView.h
    │   │   ├── AccessibleInstanceView_p.h
    │   │   ├── InstanceDelegate.cpp
    │   │   ├── InstanceDelegate.h
    │   │   ├── InstanceProxyModel.cpp
    │   │   ├── InstanceProxyModel.h
    │   │   ├── InstanceView.cpp
    │   │   ├── InstanceView.h
    │   │   ├── VisualGroup.cpp
    │   │   └── VisualGroup.h
    │   ├── pagedialog
    │   │   ├── PageDialog.cpp
    │   │   └── PageDialog.h
    │   ├── pages
    │   │   ├── BasePage.h
    │   │   ├── BasePageContainer.h
    │   │   ├── BasePageProvider.h
    │   │   ├── global
    │   │   │   ├── CustomCommandsPage.cpp
    │   │   │   ├── CustomCommandsPage.h
    │   │   │   ├── ExternalToolsPage.cpp
    │   │   │   ├── ExternalToolsPage.h
    │   │   │   ├── ExternalToolsPage.ui
    │   │   │   ├── JavaPage.cpp
    │   │   │   ├── JavaPage.h
    │   │   │   ├── JavaPage.ui
    │   │   │   ├── LanguagePage.cpp
    │   │   │   ├── LanguagePage.h
    │   │   │   ├── LauncherPage.cpp
    │   │   │   ├── LauncherPage.h
    │   │   │   ├── LauncherPage.ui
    │   │   │   ├── MinecraftPage.cpp
    │   │   │   ├── MinecraftPage.h
    │   │   │   ├── MinecraftPage.ui
    │   │   │   ├── PasteEEPage.cpp
    │   │   │   ├── PasteEEPage.h
    │   │   │   ├── PasteEEPage.ui
    │   │   │   ├── ProxyPage.cpp
    │   │   │   ├── ProxyPage.h
    │   │   │   └── ProxyPage.ui
    │   │   ├── instance
    │   │   │   ├── GameOptionsPage.cpp
    │   │   │   ├── GameOptionsPage.h
    │   │   │   ├── GameOptionsPage.ui
    │   │   │   ├── InstanceSettingsPage.cpp
    │   │   │   ├── InstanceSettingsPage.h
    │   │   │   ├── InstanceSettingsPage.ui
    │   │   │   ├── LegacyUpgradePage.cpp
    │   │   │   ├── LegacyUpgradePage.h
    │   │   │   ├── LegacyUpgradePage.ui
    │   │   │   ├── LogPage.cpp
    │   │   │   ├── LogPage.h
    │   │   │   ├── LogPage.ui
    │   │   │   ├── ModFolderPage.cpp
    │   │   │   ├── ModFolderPage.h
    │   │   │   ├── ModFolderPage.ui
    │   │   │   ├── NotesPage.cpp
    │   │   │   ├── NotesPage.h
    │   │   │   ├── NotesPage.ui
    │   │   │   ├── OtherLogsPage.cpp
    │   │   │   ├── OtherLogsPage.h
    │   │   │   ├── OtherLogsPage.ui
    │   │   │   ├── ResourcePackPage.h
    │   │   │   ├── ScreenshotsPage.cpp
    │   │   │   ├── ScreenshotsPage.h
    │   │   │   ├── ScreenshotsPage.ui
    │   │   │   ├── ServersPage.cpp
    │   │   │   ├── ServersPage.h
    │   │   │   ├── ServersPage.ui
    │   │   │   ├── ShaderPackPage.h
    │   │   │   ├── TexturePackPage.h
    │   │   │   ├── VersionPage.cpp
    │   │   │   ├── VersionPage.h
    │   │   │   ├── VersionPage.ui
    │   │   │   ├── WorldListPage.cpp
    │   │   │   ├── WorldListPage.h
    │   │   │   └── WorldListPage.ui
    │   │   └── modplatform
    │   │   │   ├── ImportPage.cpp
    │   │   │   ├── ImportPage.h
    │   │   │   ├── ImportPage.ui
    │   │   │   ├── VanillaPage.cpp
    │   │   │   ├── VanillaPage.h
    │   │   │   ├── VanillaPage.ui
    │   │   │   ├── atlauncher
    │   │   │       ├── AtlFilterModel.cpp
    │   │   │       ├── AtlFilterModel.h
    │   │   │       ├── AtlListModel.cpp
    │   │   │       ├── AtlListModel.h
    │   │   │       ├── AtlOptionalModDialog.cpp
    │   │   │       ├── AtlOptionalModDialog.h
    │   │   │       ├── AtlOptionalModDialog.ui
    │   │   │       ├── AtlPage.cpp
    │   │   │       ├── AtlPage.h
    │   │   │       └── AtlPage.ui
    │   │   │   ├── import_ftb
    │   │   │       ├── FTBAPage.cpp
    │   │   │       ├── FTBAPage.h
    │   │   │       ├── FTBAPage.ui
    │   │   │       ├── Model.cpp
    │   │   │       ├── Model.h
    │   │   │       ├── PackInstallTask.cpp
    │   │   │       └── PackInstallTask.h
    │   │   │   ├── legacy_ftb
    │   │   │       ├── ListModel.cpp
    │   │   │       ├── ListModel.h
    │   │   │       ├── Page.cpp
    │   │   │       ├── Page.h
    │   │   │       └── Page.ui
    │   │   │   ├── modrinth
    │   │   │       ├── ModrinthData.h
    │   │   │       ├── ModrinthDocument.cpp
    │   │   │       ├── ModrinthDocument.h
    │   │   │       ├── ModrinthModel.cpp
    │   │   │       ├── ModrinthModel.h
    │   │   │       ├── ModrinthPage.cpp
    │   │   │       ├── ModrinthPage.h
    │   │   │       └── ModrinthPage.ui
    │   │   │   └── technic
    │   │   │       ├── TechnicData.h
    │   │   │       ├── TechnicModel.cpp
    │   │   │       ├── TechnicModel.h
    │   │   │       ├── TechnicPage.cpp
    │   │   │       ├── TechnicPage.h
    │   │   │       └── TechnicPage.ui
    │   ├── setupwizard
    │   │   ├── BaseWizardPage.h
    │   │   ├── JavaWizardPage.cpp
    │   │   ├── JavaWizardPage.h
    │   │   ├── LanguageWizardPage.cpp
    │   │   ├── LanguageWizardPage.h
    │   │   ├── SetupWizard.cpp
    │   │   └── SetupWizard.h
    │   ├── themes
    │   │   ├── BrightTheme.cpp
    │   │   ├── BrightTheme.h
    │   │   ├── CustomTheme.cpp
    │   │   ├── CustomTheme.h
    │   │   ├── DarkTheme.cpp
    │   │   ├── DarkTheme.h
    │   │   ├── FusionTheme.cpp
    │   │   ├── FusionTheme.h
    │   │   ├── ITheme.cpp
    │   │   ├── ITheme.h
    │   │   ├── SystemTheme.cpp
    │   │   └── SystemTheme.h
    │   └── widgets
    │   │   ├── Common.cpp
    │   │   ├── Common.h
    │   │   ├── CustomCommands.cpp
    │   │   ├── CustomCommands.h
    │   │   ├── CustomCommands.ui
    │   │   ├── DropLabel.cpp
    │   │   ├── DropLabel.h
    │   │   ├── ErrorFrame.cpp
    │   │   ├── ErrorFrame.h
    │   │   ├── ErrorFrame.ui
    │   │   ├── FocusLineEdit.cpp
    │   │   ├── FocusLineEdit.h
    │   │   ├── IconLabel.cpp
    │   │   ├── IconLabel.h
    │   │   ├── InstanceCardWidget.ui
    │   │   ├── JavaSettingsWidget.cpp
    │   │   ├── JavaSettingsWidget.h
    │   │   ├── LabeledToolButton.cpp
    │   │   ├── LabeledToolButton.h
    │   │   ├── LanguageSelectionWidget.cpp
    │   │   ├── LanguageSelectionWidget.h
    │   │   ├── LineSeparator.cpp
    │   │   ├── LineSeparator.h
    │   │   ├── LogView.cpp
    │   │   ├── LogView.h
    │   │   ├── MCModInfoFrame.cpp
    │   │   ├── MCModInfoFrame.h
    │   │   ├── MCModInfoFrame.ui
    │   │   ├── ModListView.cpp
    │   │   ├── ModListView.h
    │   │   ├── PageContainer.cpp
    │   │   ├── PageContainer.h
    │   │   ├── PageContainer_p.h
    │   │   ├── ProgressWidget.cpp
    │   │   ├── ProgressWidget.h
    │   │   ├── VersionListView.cpp
    │   │   ├── VersionListView.h
    │   │   ├── VersionSelectWidget.cpp
    │   │   ├── VersionSelectWidget.h
    │   │   ├── WideBar.cpp
    │   │   ├── WideBar.h
    │   │   ├── WrapLabel.cpp
    │   │   └── WrapLabel.h
    └── updater
    │   ├── DownloadTask.cpp
    │   ├── DownloadTask.h
    │   ├── DownloadTask_test.cpp
    │   ├── GoUpdate.cpp
    │   ├── GoUpdate.h
    │   ├── UpdateChecker.cpp
    │   ├── UpdateChecker.h
    │   ├── UpdateChecker_test.cpp
    │   └── testdata
    │       ├── 1.json
    │       ├── 2.json
    │       ├── channels.json
    │       ├── errorChannels.json
    │       ├── fileOneA
    │       ├── fileOneB
    │       ├── fileThree
    │       ├── fileTwo
    │       ├── garbageChannels.json
    │       ├── index.json
    │       ├── noChannels.json
    │       ├── oneChannel.json
    │       └── tst_DownloadTask-test_writeInstallScript.xml
└── libraries
    ├── LocalPeer
        ├── CMakeLists.txt
        ├── include
        │   └── LocalPeer.h
        └── src
        │   ├── LocalPeer.cpp
        │   ├── LockedFile.cpp
        │   ├── LockedFile.h
        │   ├── LockedFile_unix.cpp
        │   └── LockedFile_win.cpp
    ├── README.md
    ├── classparser
        ├── CMakeLists.txt
        ├── include
        │   ├── classparser.h
        │   └── classparser_config.h
        └── src
        │   ├── annotations.cpp
        │   ├── annotations.h
        │   ├── classfile.h
        │   ├── classparser.cpp
        │   ├── constants.h
        │   ├── errors.h
        │   ├── javaendian.h
        │   └── membuffer.h
    ├── hoedown
        ├── CMakeLists.txt
        ├── LICENSE
        ├── README.md
        ├── include
        │   └── hoedown
        │   │   ├── autolink.h
        │   │   ├── buffer.h
        │   │   ├── document.h
        │   │   ├── escape.h
        │   │   ├── html.h
        │   │   ├── stack.h
        │   │   └── version.h
        └── src
        │   ├── autolink.c
        │   ├── buffer.c
        │   ├── document.c
        │   ├── escape.c
        │   ├── html.c
        │   ├── html_blocks.c
        │   ├── html_smartypants.c
        │   ├── stack.c
        │   └── version.c
    ├── iconfix
        ├── CMakeLists.txt
        ├── internal
        │   ├── qhexstring_p.h
        │   ├── qiconloader.cpp
        │   └── qiconloader_p.h
        ├── xdgicon.cpp
        └── xdgicon.h
    ├── javacheck
        ├── .gitignore
        ├── CMakeLists.txt
        └── JavaCheck.java
    ├── katabasis
        ├── .gitignore
        ├── CMakeLists.txt
        ├── LICENSE
        ├── README.md
        ├── acknowledgements.md
        ├── include
        │   └── katabasis
        │   │   ├── Bits.h
        │   │   ├── DeviceFlow.h
        │   │   ├── Globals.h
        │   │   ├── PollServer.h
        │   │   ├── Reply.h
        │   │   └── RequestParameter.h
        └── src
        │   ├── DeviceFlow.cpp
        │   ├── JsonResponse.cpp
        │   ├── JsonResponse.h
        │   ├── PollServer.cpp
        │   └── Reply.cpp
    ├── launcher
        ├── .gitignore
        ├── CMakeLists.txt
        ├── net
        │   └── minecraft
        │   │   └── Launcher.java
        └── org
        │   └── multimc
        │       ├── EntryPoint.java
        │       ├── Launcher.java
        │       ├── LegacyFrame.java
        │       ├── NotFoundException.java
        │       ├── ParamBucket.java
        │       ├── ParseException.java
        │       ├── Utils.java
        │       └── onesix
        │           └── OneSixLauncher.java
    ├── optional-bare
        ├── CMakeLists.txt
        ├── LICENSE.txt
        ├── README.md
        └── include
        │   └── nonstd
        │       └── optional
    ├── qrcode
        ├── CMakeLists.txt
        ├── LICENSE
        ├── README.md
        ├── include
        │   └── qrcode
        │   │   └── QrCodeGenerator.h
        └── src
        │   ├── QrCodeGenerator.cpp
        │   ├── qrcodegen.cpp
        │   └── qrcodegen.h
    ├── rainbow
        ├── CMakeLists.txt
        ├── COPYING.LIB
        ├── include
        │   ├── rainbow.h
        │   └── rainbow_config.h
        └── src
        │   └── rainbow.cpp
    ├── systeminfo
        ├── CMakeLists.txt
        ├── include
        │   ├── distroutils.h
        │   ├── ntstatus
        │   │   ├── NtStatusNames.hpp
        │   │   └── README.md
        │   └── sys.h
        └── src
        │   ├── distroutils.cpp
        │   ├── ntstatus
        │       ├── NtStatusNames.cpp
        │       └── README.md
        │   ├── sys_apple.cpp
        │   ├── sys_test.cpp
        │   ├── sys_unix.cpp
        │   └── sys_win32.cpp
    ├── tomlc99
        ├── CMakeLists.txt
        ├── LICENSE
        ├── README.md
        ├── include
        │   └── toml.h
        └── src
        │   └── toml.c
    └── xz-embedded
        ├── CMakeLists.txt
        ├── include
            └── xz.h
        ├── src
            ├── xz_config.h
            ├── xz_crc32.c
            ├── xz_crc64.c
            ├── xz_dec_bcj.c
            ├── xz_dec_lzma2.c
            ├── xz_dec_stream.c
            ├── xz_lzma2.h
            ├── xz_private.h
            └── xz_stream.h
        └── xzminidec.c


/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pem -crlf
2 | **/testdata/** -text -diff
3 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: true
2 | contact_links:
3 |   - name: MultiMC Discord
4 |     url: https://discord.gg/multimc
5 |     about: Please ask for support here before opening an issue.
6 | 


--------------------------------------------------------------------------------
/.github/workflows/dispatch.yml:
--------------------------------------------------------------------------------
 1 | name: Dispatcher
 2 | on:
 3 |   push:
 4 |     branches: ['6']
 5 | jobs:
 6 |   dispatch:
 7 |     name: Dispatch
 8 |     runs-on: ubuntu-latest
 9 |     timeout-minutes: 5
10 |     steps:
11 |       - name: Extract branch name
12 |         shell: bash
13 |         run: echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >>$GITHUB_OUTPUT
14 |         id: extract_branch
15 |       - name: Dispatch to workflows
16 |         run: |
17 |             curl -H "Accept: application/vnd.github.everest-preview+json" \
18 |             -H "Authorization: token ${{ secrets.DISPATCH_TOKEN }}" \
19 |             --request POST \
20 |             --data '{"event_type": "push_to_main_repo", "client_payload": { "branch": "${{ steps.extract_branch.outputs.branch }}" }}' https://api.github.com/repos/MultiMC/Build/dispatches
21 | 


--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
 1 | Thumbs.db
 2 | *.kdev4
 3 | .user
 4 | .directory
 5 | resources/CMakeFiles
 6 | *~
 7 | *.swp
 8 | html/
 9 | 
10 | # Project Files
11 | *.pro.user
12 | CMakeLists.txt.user
13 | CMakeLists.txt.user.*
14 | /.project
15 | /.settings
16 | /.idea
17 | cmake-build-*/
18 | Debug
19 | .cache
20 | 
21 | # Build dirs
22 | build
23 | /build-*
24 | 
25 | # Install dirs
26 | install
27 | /install-*
28 | 
29 | # Ctags File
30 | tags
31 | 
32 | # YouCompleteMe config stuff.
33 | .ycm_extra_conf.*
34 | 
35 | #OSX Stuff
36 | .DS_Store
37 | 
38 | run/
39 | 


--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "depends/libnbtplusplus"]
2 |     path = libraries/libnbtplusplus
3 |     url = https://github.com/MultiMC/libnbtplusplus.git
4 |     pushurl = git@github.com:MultiMC/libnbtplusplus.git
5 | [submodule "libraries/quazip"]
6 |     path = libraries/quazip
7 |     url = https://github.com/MultiMC/quazip.git
8 |     pushurl = git@github.com:MultiMC/quazip.git
9 | 


--------------------------------------------------------------------------------
/branding/MultiMC.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/branding/MultiMC.icns


--------------------------------------------------------------------------------
/branding/MultiMC.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/branding/MultiMC.ico


--------------------------------------------------------------------------------
/branding/genicons.sh:
--------------------------------------------------------------------------------
 1 | #/bin/bash
 2 | 
 3 | inkscape -w 16 -h 16 -o logo_16.png logo.svg
 4 | inkscape -w 24 -h 24 -o logo_24.png logo.svg
 5 | inkscape -w 32 -h 32 -o logo_32.png logo.svg
 6 | inkscape -w 48 -h 48 -o logo_48.png logo.svg
 7 | inkscape -w 64 -h 64 -o logo_64.png logo.svg
 8 | inkscape -w 128 -h 128 -o logo_128.png logo.svg
 9 | 
10 | convert logo_128.png logo_64.png logo_48.png logo_32.png logo_24.png logo_16.png MultiMC.ico
11 | 
12 | rm -f logo_*.png
13 | 
14 | inkscape -w 16 -h 16 -o logo_16.png logo-macos.svg
15 | inkscape -w 32 -h 32 -o logo_32.png logo-macos.svg
16 | inkscape -w 128 -h 128 -o logo_128.png logo-macos.svg
17 | inkscape -w 256 -h 256 -o logo_256.png logo-macos.svg
18 | inkscape -w 512 -h 512 -o logo_512.png logo-macos.svg
19 | inkscape -w 1024 -h 1024 -o logo_1024.png logo-macos.svg
20 | 
21 | png2icns MultiMC.icns logo_1024.png logo_512.png logo_256.png logo_128.png logo_32.png logo_16.png
22 | 
23 | rm -f logo_*.png
24 | 


--------------------------------------------------------------------------------
/branding/logo.qrc:
--------------------------------------------------------------------------------
1 | <!DOCTYPE RCC>
2 | <RCC version="1.0">
3 |     <qresource prefix="/">
4 |         <file>logo.svg</file>
5 |     </qresource>
6 | </RCC>
7 | 


--------------------------------------------------------------------------------
/buildconfig/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | ######## Configure the file with build properties ########
 2 | 
 3 | configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BuildConfig.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/BuildConfig.cpp")
 4 | 
 5 | add_library(BuildConfig STATIC
 6 |     BuildConfig.h
 7 |     ${CMAKE_CURRENT_BINARY_DIR}/BuildConfig.cpp
 8 | )
 9 | 
10 | target_link_libraries(BuildConfig Qt5::Core)
11 | target_include_directories(BuildConfig PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
12 | 


--------------------------------------------------------------------------------
/cmake/QMakeQuery.cmake:
--------------------------------------------------------------------------------
 1 | if(__QMAKEQUERY_CMAKE__)
 2 |     return()
 3 | endif()
 4 | set(__QMAKEQUERY_CMAKE__ TRUE)
 5 | 
 6 | get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION)
 7 | 
 8 | function(QUERY_QMAKE VAR RESULT)
 9 |     exec_program(${QMAKE_EXECUTABLE} ARGS "-query ${VAR}" RETURN_VALUE return_code OUTPUT_VARIABLE output )
10 |     if(NOT return_code)
11 |         file(TO_CMAKE_PATH "${output}" output)
12 |         set(${RESULT} ${output} PARENT_SCOPE)
13 |     endif(NOT return_code)
14 | endfunction(QUERY_QMAKE)
15 | 


--------------------------------------------------------------------------------
/cmake/UnitTest/TestUtil.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QFile>
 4 | #include <QCoreApplication>
 5 | #include <QTest>
 6 | #include <QDir>
 7 | 
 8 | #define expandstr(s) expandstr2(s)
 9 | #define expandstr2(s) #s
10 | 
11 | class TestsInternal
12 | {
13 | public:
14 |     static QByteArray readFile(const QString &fileName)
15 |     {
16 |         QFile f(fileName);
17 |         f.open(QFile::ReadOnly);
18 |         return f.readAll();
19 |     }
20 |     static QString readFileUtf8(const QString &fileName)
21 |     {
22 |         return QString::fromUtf8(readFile(fileName));
23 |     }
24 | };
25 | 
26 | #define GET_TEST_FILE(file) TestsInternal::readFile(QFINDTESTDATA(file))
27 | #define GET_TEST_FILE_UTF8(file) TestsInternal::readFileUtf8(QFINDTESTDATA(file))
28 | 
29 | 


--------------------------------------------------------------------------------
/cmake/UnitTest/generate_test_data.cmake:
--------------------------------------------------------------------------------
 1 | # Copy files from source directory to destination directory, substituting any
 2 | # variables.  Create destination directory if it does not exist.
 3 | 
 4 | function(configure_files srcDir destDir)
 5 |     make_directory(${destDir})
 6 | 
 7 |     file(GLOB templateFiles RELATIVE ${srcDir} ${srcDir}/*)
 8 |     foreach(templateFile ${templateFiles})
 9 |         set(srcTemplatePath ${srcDir}/${templateFile})
10 |         if(NOT IS_DIRECTORY ${srcTemplatePath})
11 |             configure_file(
12 |                     ${srcTemplatePath}
13 |                     ${destDir}/${templateFile}
14 |                     @ONLY
15 |                     NEWLINE_STYLE LF
16 |             )
17 |         else()
18 |             configure_files("${srcTemplatePath}" "${destDir}/${templateFile}")
19 |         endif()
20 |     endforeach()
21 | endfunction()
22 | 
23 | configure_files(${SOURCE} ${DESTINATION})


--------------------------------------------------------------------------------
/cmake/UnitTest/test.rc:
--------------------------------------------------------------------------------
 1 | #ifndef WIN32_LEAN_AND_MEAN
 2 | #define WIN32_LEAN_AND_MEAN
 3 | #endif
 4 | #include <windows.h>
 5 | 
 6 | 1 RT_MANIFEST "test.manifest"
 7 | 
 8 | VS_VERSION_INFO VERSIONINFO
 9 | FILEVERSION     1,0,0,0
10 | FILEOS          VOS_NT_WINDOWS32
11 | FILETYPE        VFT_APP
12 | BEGIN
13 |         BLOCK "StringFileInfo"
14 |         BEGIN
15 |                 BLOCK "000004b0"
16 |                 BEGIN
17 |                         VALUE "CompanyName", "MultiMC Contributors"
18 |                         VALUE "FileDescription", "Testcase"
19 |                         VALUE "FileVersion", "1.0.0.0"
20 |                         VALUE "ProductName", "Launcher Testcase"
21 |                         VALUE "ProductVersion", "5"
22 |                 END
23 |         END
24 |         BLOCK "VarFileInfo"
25 |         BEGIN
26 |                 VALUE "Translation", 0x0000, 0x04b0 // Unicode
27 |         END
28 | END
29 | 


--------------------------------------------------------------------------------
/launcher/ApplicationMessage.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QString>
 4 | #include <QMap>
 5 | #include <QByteArray>
 6 | 
 7 | struct ApplicationMessage {
 8 |     QString command;
 9 |     QMap<QString, QString> args;
10 | 
11 |     QByteArray serialize();
12 |     void parse(const QByteArray & input);
13 | };
14 | 


--------------------------------------------------------------------------------
/launcher/DefaultVariable.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | template <typename T>
 4 | class DefaultVariable
 5 | {
 6 | public:
 7 |     DefaultVariable(const T & value)
 8 |     {
 9 |         defaultValue = value;
10 |     }
11 |     DefaultVariable<T> & operator =(const T & value)
12 |     {
13 |         currentValue = value;
14 |         is_default = currentValue == defaultValue;
15 |         is_explicit = true;
16 |         return *this;
17 |     }
18 |     operator const T &() const
19 |     {
20 |         return is_default ? defaultValue : currentValue;
21 |     }
22 |     bool isDefault() const
23 |     {
24 |         return is_default;
25 |     }
26 |     bool isExplicit() const
27 |     {
28 |         return is_explicit;
29 |     }
30 | private:
31 |     T currentValue;
32 |     T defaultValue;
33 |     bool is_default = true;
34 |     bool is_explicit = false;
35 | };
36 | 


--------------------------------------------------------------------------------
/launcher/Exception.h:
--------------------------------------------------------------------------------
 1 | // Licensed under the Apache-2.0 license. See README.md for details.
 2 | 
 3 | #pragma once
 4 | 
 5 | #include <QString>
 6 | #include <QDebug>
 7 | #include <exception>
 8 | 
 9 | class Exception : public std::exception
10 | {
11 | public:
12 |     Exception(const QString &message) : std::exception(), m_message(message)
13 |     {
14 |         qCritical() << "Exception:" << message;
15 |     }
16 |     Exception(const Exception &other)
17 |         : std::exception(), m_message(other.cause())
18 |     {
19 |     }
20 |     virtual ~Exception() noexcept {}
21 |     const char *what() const noexcept
22 |     {
23 |         return m_message.toLatin1().constData();
24 |     }
25 |     QString cause() const
26 |     {
27 |         return m_message;
28 |     }
29 | 
30 | private:
31 |     QString m_message;
32 | };
33 | 


--------------------------------------------------------------------------------
/launcher/Filter.cpp:
--------------------------------------------------------------------------------
 1 | #include "Filter.h"
 2 | 
 3 | Filter::~Filter(){}
 4 | 
 5 | ContainsFilter::ContainsFilter(const QString& pattern) : pattern(pattern){}
 6 | ContainsFilter::~ContainsFilter(){}
 7 | bool ContainsFilter::accepts(const QString& value)
 8 | {
 9 |     return value.contains(pattern);
10 | }
11 | 
12 | ExactFilter::ExactFilter(const QString& pattern) : pattern(pattern){}
13 | ExactFilter::~ExactFilter(){}
14 | bool ExactFilter::accepts(const QString& value)
15 | {
16 |     return value == pattern;
17 | }
18 | 
19 | RegexpFilter::RegexpFilter(const QString& regexp, bool invert)
20 |     :invert(invert)
21 | {
22 |     pattern.setPattern(regexp);
23 |     pattern.optimize();
24 | }
25 | RegexpFilter::~RegexpFilter(){}
26 | bool RegexpFilter::accepts(const QString& value)
27 | {
28 |     auto match = pattern.match(value);
29 |     bool matched = match.hasMatch();
30 |     return invert ? (!matched) : (matched);
31 | }
32 | 


--------------------------------------------------------------------------------
/launcher/GZip.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QByteArray>
 3 | 
 4 | class GZip
 5 | {
 6 | public:
 7 |     static bool unzip(const QByteArray &compressedBytes, QByteArray &uncompressedBytes);
 8 |     static bool zip(const QByteArray &uncompressedBytes, QByteArray &compressedBytes);
 9 | };
10 | 
11 | 


--------------------------------------------------------------------------------
/launcher/InstanceCopyTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "tasks/Task.h"
 4 | #include "net/NetJob.h"
 5 | #include <QUrl>
 6 | #include <QFuture>
 7 | #include <QFutureWatcher>
 8 | #include "settings/SettingsObject.h"
 9 | #include "BaseVersion.h"
10 | #include "BaseInstance.h"
11 | #include "InstanceTask.h"
12 | 
13 | class InstanceCopyTask : public InstanceTask
14 | {
15 |     Q_OBJECT
16 | public:
17 |     explicit InstanceCopyTask(InstancePtr origInstance, bool copySaves, bool keepPlaytime);
18 | 
19 | protected:
20 |     //! Entry point for tasks.
21 |     virtual void executeTask() override;
22 |     void copyFinished();
23 |     void copyAborted();
24 | 
25 | private: /* data */
26 |     InstancePtr m_origInstance;
27 |     QFuture<bool> m_copyFuture;
28 |     QFutureWatcher<bool> m_copyFutureWatcher;
29 |     std::unique_ptr<IPathMatcher> m_matcher;
30 |     bool m_keepPlaytime;
31 | };
32 | 


--------------------------------------------------------------------------------
/launcher/InstanceCreationTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "tasks/Task.h"
 4 | #include "net/NetJob.h"
 5 | #include <QUrl>
 6 | #include "settings/SettingsObject.h"
 7 | #include "BaseVersion.h"
 8 | #include "InstanceTask.h"
 9 | 
10 | class InstanceCreationTask : public InstanceTask
11 | {
12 |     Q_OBJECT
13 | public:
14 |     explicit InstanceCreationTask(BaseVersionPtr version);
15 | 
16 | protected:
17 |     //! Entry point for tasks.
18 |     virtual void executeTask() override;
19 | 
20 | private: /* data */
21 |     BaseVersionPtr m_version;
22 | };
23 | 


--------------------------------------------------------------------------------
/launcher/InstanceTask.cpp:
--------------------------------------------------------------------------------
 1 | #include "InstanceTask.h"
 2 | 
 3 | InstanceTask::InstanceTask()
 4 | {
 5 | }
 6 | 
 7 | InstanceTask::~InstanceTask()
 8 | {
 9 | }
10 | 


--------------------------------------------------------------------------------
/launcher/KonamiCode.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QKeyEvent>
 4 | 
 5 | class KonamiCode : public QObject
 6 | {
 7 |     Q_OBJECT
 8 | public:
 9 |     KonamiCode(QObject *parent = 0);
10 |     void input(QEvent *event);
11 | 
12 | signals:
13 |     void triggered();
14 | 
15 | private:
16 |     int m_progress = 0;
17 | };
18 | 


--------------------------------------------------------------------------------
/launcher/MMCStrings.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | 
3 | #include <QString>
4 | 
5 | namespace Strings
6 | {
7 |     int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs);
8 | }
9 | 


--------------------------------------------------------------------------------
/launcher/MMCTime.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2021 Jamie Mansfield <jmansfield@cadixdev.org>
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #pragma once
18 | 
19 | #include <QString>
20 | 
21 | namespace Time {
22 | 
23 | QString prettifyDuration(int64_t duration);
24 | QString prettifyDurationHours(int64_t duration);
25 | 
26 | }
27 | 


--------------------------------------------------------------------------------
/launcher/MessageLevel.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QString>
 4 | 
 5 | /**
 6 |  * @brief the MessageLevel Enum
 7 |  * defines what level a log message is
 8 |  */
 9 | namespace MessageLevel
10 | {
11 | enum Enum
12 | {
13 |     Unknown, /**< No idea what this is or where it came from */
14 |     StdOut,  /**< Undetermined stderr messages */
15 |     StdErr,  /**< Undetermined stdout messages */
16 |     Launcher, /**< Launcher Messages */
17 |     Debug,   /**< Debug Messages */
18 |     Info,    /**< Info Messages */
19 |     Message, /**< Standard Messages */
20 |     Warning, /**< Warnings */
21 |     Error,   /**< Errors */
22 |     Fatal,   /**< Fatal Errors */
23 | };
24 | MessageLevel::Enum getLevel(const QString &levelName);
25 | 
26 | /* Get message level from a line. Line is modified if it was successful. */
27 | MessageLevel::Enum fromLine(QString &line);
28 | }
29 | 


--------------------------------------------------------------------------------
/launcher/WatchLock.h:
--------------------------------------------------------------------------------
 1 | 
 2 | #pragma once
 3 | 
 4 | #include <QString>
 5 | #include <QFileSystemWatcher>
 6 | 
 7 | struct WatchLock
 8 | {
 9 |     WatchLock(QFileSystemWatcher * watcher, const QString& directory)
10 |         : m_watcher(watcher), m_directory(directory)
11 |     {
12 |         m_watcher->removePath(m_directory);
13 |     }
14 |     ~WatchLock()
15 |     {
16 |         m_watcher->addPath(m_directory);
17 |     }
18 |     QFileSystemWatcher * m_watcher;
19 |     QString m_directory;
20 | };
21 | 


--------------------------------------------------------------------------------
/launcher/icons/IconUtils.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QString>
 4 | 
 5 | namespace IconUtils {
 6 | 
 7 | // Given a folder and an icon key, find 'best' of the icons with the given key in there and return its path
 8 | QString findBestIconIn(const QString &folder, const QString & iconKey);
 9 | 
10 | // Get icon file type filter for file browser dialogs
11 | QString getIconFilter();
12 | 
13 | }
14 | 


--------------------------------------------------------------------------------
/launcher/java/JavaInstall.cpp:
--------------------------------------------------------------------------------
 1 | #include "JavaInstall.h"
 2 | #include <MMCStrings.h>
 3 | 
 4 | bool JavaInstall::operator<(const JavaInstall &rhs)
 5 | {
 6 |     if(arch < rhs.arch)
 7 |     {
 8 |         return true;
 9 |     }
10 |     if(arch > rhs.arch)
11 |     {
12 |         return false;
13 |     }
14 |     if(id < rhs.id)
15 |     {
16 |         return true;
17 |     }
18 |     if(id > rhs.id)
19 |     {
20 |         return false;
21 |     }
22 |     return Strings::naturalCompare(path, rhs.path, Qt::CaseInsensitive) < 0;
23 | }
24 | 
25 | bool JavaInstall::operator==(const JavaInstall &rhs)
26 | {
27 |     return arch == rhs.arch && id == rhs.id && path == rhs.path;
28 | }
29 | 
30 | bool JavaInstall::operator>(const JavaInstall &rhs)
31 | {
32 |     return (!operator<(rhs)) && (!operator==(rhs));
33 | }
34 | 


--------------------------------------------------------------------------------
/launcher/launch/steps/TextPrint.cpp:
--------------------------------------------------------------------------------
 1 | #include "TextPrint.h"
 2 | 
 3 | TextPrint::TextPrint(LaunchTask * parent, const QStringList &lines, MessageLevel::Enum level) : LaunchStep(parent)
 4 | {
 5 |     m_lines = lines;
 6 |     m_level = level;
 7 | }
 8 | TextPrint::TextPrint(LaunchTask *parent, const QString &line, MessageLevel::Enum level) : LaunchStep(parent)
 9 | {
10 |     m_lines.append(line);
11 |     m_level = level;
12 | }
13 | 
14 | void TextPrint::executeTask()
15 | {
16 |     emit logLines(m_lines, m_level);
17 |     emitSucceeded();
18 | }
19 | 
20 | bool TextPrint::canAbort() const
21 | {
22 |     return true;
23 | }
24 | 
25 | bool TextPrint::abort()
26 | {
27 |     emitFailed("Aborted.");
28 |     return true;
29 | }
30 | 


--------------------------------------------------------------------------------
/launcher/minecraft/ComponentUpdateTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "tasks/Task.h"
 4 | #include "net/Mode.h"
 5 | 
 6 | #include <memory>
 7 | class PackProfile;
 8 | struct ComponentUpdateTaskData;
 9 | 
10 | class ComponentUpdateTask : public Task
11 | {
12 |     Q_OBJECT
13 | public:
14 |     enum class Mode
15 |     {
16 |         Launch,
17 |         Resolution
18 |     };
19 | 
20 | public:
21 |     explicit ComponentUpdateTask(Mode mode, Net::Mode netmode, PackProfile * list, QObject *parent = 0);
22 |     virtual ~ComponentUpdateTask();
23 | 
24 | protected:
25 |     void executeTask();
26 | 
27 | private:
28 |     void loadComponents();
29 |     void resolveDependencies(bool checkOnly);
30 | 
31 |     void remoteLoadSucceeded(size_t index);
32 |     void remoteLoadFailed(size_t index, const QString &msg);
33 |     void checkIfAllFinished();
34 | 
35 | private:
36 |     std::unique_ptr<ComponentUpdateTaskData> d;
37 | };
38 | 


--------------------------------------------------------------------------------
/launcher/minecraft/ComponentUpdateTask_p.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <cstddef>
 4 | #include <QString>
 5 | #include <QList>
 6 | #include "net/Mode.h"
 7 | 
 8 | class PackProfile;
 9 | 
10 | struct RemoteLoadStatus
11 | {
12 |     enum class Type
13 |     {
14 |         Index,
15 |         List,
16 |         Version
17 |     } type = Type::Version;
18 |     size_t PackProfileIndex = 0;
19 |     bool finished = false;
20 |     bool succeeded = false;
21 |     QString error;
22 | };
23 | 
24 | struct ComponentUpdateTaskData
25 | {
26 |     PackProfile * m_list = nullptr;
27 |     QList<RemoteLoadStatus> remoteLoadStatusList;
28 |     bool remoteLoadSuccessful = true;
29 |     size_t remoteTasksInProgress = 0;
30 |     ComponentUpdateTask::Mode mode;
31 |     Net::Mode netmode;
32 | };
33 | 


--------------------------------------------------------------------------------
/launcher/minecraft/ParseUtils.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QString>
 3 | #include <QDateTime>
 4 | 
 5 | /// take the timestamp used by S3 and turn it into QDateTime
 6 | QDateTime timeFromS3Time(QString str);
 7 | 
 8 | /// take a timestamp and convert it into an S3 timestamp
 9 | QString timeToS3Time(QDateTime);
10 | 


--------------------------------------------------------------------------------
/launcher/minecraft/ProfileUtils.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include "Library.h"
 3 | #include "VersionFile.h"
 4 | 
 5 | namespace ProfileUtils
 6 | {
 7 | typedef QStringList PatchOrder;
 8 | 
 9 | /// Read and parse a OneSix format order file
10 | bool readOverrideOrders(QString path, PatchOrder &order);
11 | 
12 | /// Write a OneSix format order file
13 | bool writeOverrideOrders(QString path, const PatchOrder &order);
14 | 
15 | 
16 | /// Parse a version file in JSON format
17 | VersionFilePtr parseJsonFile(const QFileInfo &fileInfo, const bool requireOrder);
18 | 
19 | /// Save a JSON file (in any format)
20 | bool saveJsonFile(const QJsonDocument doc, const QString & filename);
21 | 
22 | /// Parse a version file in binary JSON format
23 | VersionFilePtr parseBinaryJsonFile(const QFileInfo &fileInfo);
24 | 
25 | /// Remove LWJGL from a patch file. This is applied to all Mojang-like profile files.
26 | void removeLwjglFromPatch(VersionFilePtr patch);
27 | 
28 | }
29 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/AuthStep.cpp:
--------------------------------------------------------------------------------
1 | #include "AuthStep.h"
2 | 
3 | AuthStep::AuthStep(AccountData *data) : QObject(nullptr), m_data(data) {
4 | }
5 | 
6 | AuthStep::~AuthStep() noexcept = default;
7 | 
8 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/AuthStep.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QObject>
 3 | #include <QList>
 4 | #include <QNetworkReply>
 5 | 
 6 | #include "QObjectPtr.h"
 7 | #include "minecraft/auth/AccountData.h"
 8 | #include "AccountTask.h"
 9 | 
10 | class AuthStep : public QObject {
11 |     Q_OBJECT
12 | 
13 | public:
14 |     using Ptr = shared_qobject_ptr<AuthStep>;
15 | 
16 | public:
17 |     explicit AuthStep(AccountData *data);
18 |     virtual ~AuthStep() noexcept;
19 | 
20 |     virtual QString describe() = 0;
21 | 
22 | public slots:
23 |     virtual void perform() = 0;
24 | 
25 | signals:
26 |     void finished(AccountTaskState resultingState, QString message);
27 |     void showVerificationUriAndCode(const QUrl &uri, const QString &code, int expiresIn);
28 |     void hideVerificationUriAndCode();
29 | 
30 | protected:
31 |     AccountData *m_data;
32 | };
33 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/Parsers.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "AccountData.h"
 4 | 
 5 | namespace Parsers
 6 | {
 7 |     bool getDateTime(QJsonValue value, QDateTime & out);
 8 |     bool getString(QJsonValue value, QString & out);
 9 |     bool getNumber(QJsonValue value, double & out);
10 |     bool getNumber(QJsonValue value, int64_t & out);
11 |     bool getBool(QJsonValue value, bool & out);
12 | 
13 |     bool parseXTokenResponse(QByteArray &data, Katabasis::Token &output, QString name);
14 |     bool parseMojangResponse(QByteArray &data, Katabasis::Token &output);
15 | 
16 |     bool parseMinecraftProfile(QByteArray &data, MinecraftProfile &output);
17 |     bool parseMinecraftEntitlements(QByteArray &data, MinecraftEntitlement &output);
18 |     bool parseRolloutResponse(QByteArray &data, bool& result);
19 |     bool parseForcedMigrationResponse(QByteArray & data, bool& result);
20 | }
21 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/EntitlementsStep.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QObject>
 3 | 
 4 | #include "QObjectPtr.h"
 5 | #include "minecraft/auth/AuthStep.h"
 6 | 
 7 | 
 8 | class EntitlementsStep : public AuthStep {
 9 |     Q_OBJECT
10 | 
11 | public:
12 |     explicit EntitlementsStep(AccountData *data);
13 |     virtual ~EntitlementsStep() noexcept;
14 | 
15 |     void perform() override;
16 | 
17 |     QString describe() override;
18 | 
19 | private slots:
20 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
21 | 
22 | private:
23 |     QString m_entitlementsRequestId;
24 | };
25 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/GetSkinStep.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QObject>
 3 | 
 4 | #include "QObjectPtr.h"
 5 | #include "minecraft/auth/AuthStep.h"
 6 | 
 7 | 
 8 | class GetSkinStep : public AuthStep {
 9 |     Q_OBJECT
10 | 
11 | public:
12 |     explicit GetSkinStep(AccountData *data);
13 |     virtual ~GetSkinStep() noexcept;
14 | 
15 |     void perform() override;
16 | 
17 |     QString describe() override;
18 | 
19 | private slots:
20 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
21 | };
22 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/LauncherLoginStep.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QObject>
 3 | 
 4 | #include "QObjectPtr.h"
 5 | #include "minecraft/auth/AuthStep.h"
 6 | 
 7 | 
 8 | class LauncherLoginStep : public AuthStep {
 9 |     Q_OBJECT
10 | 
11 | public:
12 |     explicit LauncherLoginStep(AccountData *data);
13 |     virtual ~LauncherLoginStep() noexcept;
14 | 
15 |     void perform() override;
16 | 
17 |     QString describe() override;
18 | 
19 | private slots:
20 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
21 | };
22 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/MSAStep.h:
--------------------------------------------------------------------------------
 1 | 
 2 | #pragma once
 3 | #include <QObject>
 4 | 
 5 | #include "QObjectPtr.h"
 6 | #include "minecraft/auth/AuthStep.h"
 7 | 
 8 | #include <katabasis/DeviceFlow.h>
 9 | 
10 | class MSAStep : public AuthStep {
11 |     Q_OBJECT
12 | public:
13 |     enum Action {
14 |         Refresh,
15 |         Login
16 |     };
17 | public:
18 |     explicit MSAStep(AccountData *data, Action action);
19 |     virtual ~MSAStep() noexcept;
20 | 
21 |     void perform() override;
22 | 
23 |     QString describe() override;
24 | 
25 | private slots:
26 |     void onOAuthActivityChanged(Katabasis::Activity activity);
27 | 
28 | private:
29 |     Katabasis::DeviceFlow *m_oauth2 = nullptr;
30 |     Action m_action;
31 | };
32 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/MinecraftProfileCreateStep.h:
--------------------------------------------------------------------------------
 1 | /* Copyright 2024 Petr Mrázek
 2 |  *
 3 |  * This source is subject to the Microsoft Permissive License (MS-PL).
 4 |  * Please see the COPYING.md file for more information.
 5 |  */
 6 | 
 7 | #pragma once
 8 | #include <QObject>
 9 | 
10 | #include "QObjectPtr.h"
11 | #include "minecraft/auth/AuthStep.h"
12 | 
13 | 
14 | class MinecraftProfileCreateStep : public AuthStep {
15 |     Q_OBJECT
16 | 
17 | public:
18 |     explicit MinecraftProfileCreateStep(AccountData *data, const QString& profileName);
19 |     virtual ~MinecraftProfileCreateStep() noexcept;
20 | 
21 |     void perform() override;
22 | 
23 |     QString describe() override;
24 | 
25 | signals:
26 |     void apiError(const MojangError& error);
27 | 
28 | private slots:
29 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
30 | 
31 | private:
32 |     QString m_profileName;
33 | };
34 | 
35 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/MinecraftProfileStep.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QObject>
 3 | 
 4 | #include "QObjectPtr.h"
 5 | #include "minecraft/auth/AuthStep.h"
 6 | 
 7 | 
 8 | class MinecraftProfileStep : public AuthStep {
 9 |     Q_OBJECT
10 | 
11 | public:
12 |     explicit MinecraftProfileStep(AccountData *data);
13 |     virtual ~MinecraftProfileStep() noexcept;
14 | 
15 |     void perform() override;
16 | 
17 |     QString describe() override;
18 | 
19 | private slots:
20 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
21 | };
22 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/SetCapeStep.h:
--------------------------------------------------------------------------------
 1 | /* Copyright 2025 Petr Mrázek
 2 |  *
 3 |  * This source is subject to the Microsoft Permissive License (MS-PL).
 4 |  * Please see the COPYING.md file for more information.
 5 |  */
 6 | 
 7 | #pragma once
 8 | #include <QObject>
 9 | 
10 | #include "QObjectPtr.h"
11 | #include "minecraft/auth/AuthStep.h"
12 | 
13 | 
14 | class SetCapeStep : public AuthStep {
15 |     Q_OBJECT
16 | 
17 | public:
18 |     explicit SetCapeStep(AccountData *data, const QString& capeId);
19 |     virtual ~SetCapeStep() noexcept;
20 | 
21 |     void perform() override;
22 | 
23 |     QString describe() override;
24 | 
25 | signals:
26 |     void apiError(const MojangError& error);
27 | 
28 | private slots:
29 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
30 | 
31 | private:
32 |     QString m_capeId;
33 | };
34 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/XboxProfileStep.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QObject>
 3 | 
 4 | #include "QObjectPtr.h"
 5 | #include "minecraft/auth/AuthStep.h"
 6 | 
 7 | 
 8 | class XboxProfileStep : public AuthStep {
 9 |     Q_OBJECT
10 | 
11 | public:
12 |     explicit XboxProfileStep(AccountData *data);
13 |     virtual ~XboxProfileStep() noexcept;
14 | 
15 |     void perform() override;
16 | 
17 |     QString describe() override;
18 | 
19 | private slots:
20 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
21 | };
22 | 


--------------------------------------------------------------------------------
/launcher/minecraft/auth/steps/XboxUserStep.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QObject>
 3 | 
 4 | #include "QObjectPtr.h"
 5 | #include "minecraft/auth/AuthStep.h"
 6 | 
 7 | 
 8 | class XboxUserStep : public AuthStep {
 9 |     Q_OBJECT
10 | 
11 | public:
12 |     explicit XboxUserStep(AccountData *data);
13 |     virtual ~XboxUserStep() noexcept;
14 | 
15 |     void perform() override;
16 | 
17 |     QString describe() override;
18 | 
19 | private slots:
20 |     void onRequestDone(QNetworkReply::NetworkError, QByteArray, QList<QNetworkReply::RawHeaderPair>);
21 | };
22 | 


--------------------------------------------------------------------------------
/launcher/minecraft/legacy/LegacyUpgradeTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "InstanceTask.h"
 4 | #include "net/NetJob.h"
 5 | #include <QUrl>
 6 | #include <QFuture>
 7 | #include <QFutureWatcher>
 8 | #include "settings/SettingsObject.h"
 9 | #include "BaseVersion.h"
10 | #include "BaseInstance.h"
11 | 
12 | 
13 | class LegacyUpgradeTask : public InstanceTask
14 | {
15 |     Q_OBJECT
16 | public:
17 |     explicit LegacyUpgradeTask(InstancePtr origInstance);
18 | 
19 | protected:
20 |     //! Entry point for tasks.
21 |     virtual void executeTask() override;
22 |     void copyFinished();
23 |     void copyAborted();
24 | 
25 | private: /* data */
26 |     InstancePtr m_origInstance;
27 |     QFuture<bool> m_copyFuture;
28 |     QFutureWatcher<bool> m_copyFutureWatcher;
29 | };
30 | 


--------------------------------------------------------------------------------
/launcher/minecraft/mod/LocalModParseTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QRunnable>
 3 | #include <QDebug>
 4 | #include <QObject>
 5 | #include "Mod.h"
 6 | #include "ModDetails.h"
 7 | 
 8 | class LocalModParseTask : public QObject, public QRunnable
 9 | {
10 |     Q_OBJECT
11 | public:
12 |     struct Result {
13 |         QString id;
14 |         std::shared_ptr<ModDetails> details;
15 |     };
16 |     using ResultPtr = std::shared_ptr<Result>;
17 |     ResultPtr result() const {
18 |         return m_result;
19 |     }
20 | 
21 |     LocalModParseTask(int token, Mod::ModType type, const QFileInfo & modFile);
22 |     void run();
23 | 
24 | signals:
25 |     void finished(int token);
26 | 
27 | private:
28 |     void processAsZip();
29 |     void processAsFolder();
30 |     void processAsLitemod();
31 | 
32 | private:
33 |     int m_token;
34 |     Mod::ModType m_type;
35 |     QFileInfo m_modFile;
36 |     ResultPtr m_result;
37 | };
38 | 


--------------------------------------------------------------------------------
/launcher/minecraft/mod/ModDetails.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QString>
 4 | #include <QStringList>
 5 | 
 6 | struct ModDetails
 7 | {
 8 |     QString mod_id;
 9 |     QString name;
10 |     QString version;
11 |     QString mcversion;
12 |     QString homeurl;
13 |     QString updateurl;
14 |     QString description;
15 |     QStringList authors;
16 |     QString credits;
17 | };
18 | 


--------------------------------------------------------------------------------
/launcher/minecraft/mod/ModFolderLoadTask.cpp:
--------------------------------------------------------------------------------
 1 | #include "ModFolderLoadTask.h"
 2 | #include <QDebug>
 3 | 
 4 | ModFolderLoadTask::ModFolderLoadTask(QDir dir) :
 5 |     m_dir(dir), m_result(new Result())
 6 | {
 7 | }
 8 | 
 9 | void ModFolderLoadTask::run()
10 | {
11 |     m_dir.refresh();
12 |     for (auto entry : m_dir.entryInfoList())
13 |     {
14 |         Mod m(entry);
15 |         m_result->mods[m.mmc_id()] = m;
16 |     }
17 |     emit succeeded();
18 | }
19 | 


--------------------------------------------------------------------------------
/launcher/minecraft/mod/ModFolderLoadTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QRunnable>
 3 | #include <QObject>
 4 | #include <QDir>
 5 | #include <QMap>
 6 | #include "Mod.h"
 7 | #include <memory>
 8 | 
 9 | class ModFolderLoadTask : public QObject, public QRunnable
10 | {
11 |     Q_OBJECT
12 | public:
13 |     struct Result {
14 |         QMap<QString, Mod> mods;
15 |     };
16 |     using ResultPtr = std::shared_ptr<Result>;
17 |     ResultPtr result() const {
18 |         return m_result;
19 |     }
20 | 
21 | public:
22 |     ModFolderLoadTask(QDir dir);
23 |     void run();
24 | signals:
25 |     void succeeded();
26 | private:
27 |     QDir m_dir;
28 |     ResultPtr m_result;
29 | };
30 | 


--------------------------------------------------------------------------------
/launcher/minecraft/mod/ResourcePackFolderModel.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ModFolderModel.h"
 4 | 
 5 | class ResourcePackFolderModel : public ModFolderModel
 6 | {
 7 |     Q_OBJECT
 8 | 
 9 | public:
10 |     explicit ResourcePackFolderModel(const QString &dir);
11 | 
12 |     QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
13 | };
14 | 


--------------------------------------------------------------------------------
/launcher/minecraft/mod/TexturePackFolderModel.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ModFolderModel.h"
 4 | 
 5 | class TexturePackFolderModel : public ModFolderModel
 6 | {
 7 |     Q_OBJECT
 8 | 
 9 | public:
10 |     explicit TexturePackFolderModel(const QString &dir);
11 | 
12 |     QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
13 | };
14 | 


--------------------------------------------------------------------------------
/launcher/minecraft/testdata/codecwav-20101023.jar:
--------------------------------------------------------------------------------
1 | dummy test file.
2 | 


--------------------------------------------------------------------------------
/launcher/minecraft/testdata/lib-simple.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "downloads": {
 3 |         "artifact": {
 4 |             "path": "com/paulscode/codecwav/20101023/codecwav-20101023.jar",
 5 |             "sha1": "12f031cfe88fef5c1dd36c563c0a3a69bd7261da",
 6 |             "size": 5618,
 7 |             "url": "https://libraries.minecraft.net/com/paulscode/codecwav/20101023/codecwav-20101023.jar"
 8 |         }
 9 |     },
10 |     "name": "com.paulscode:codecwav:20101023"
11 | }
12 | 


--------------------------------------------------------------------------------
/launcher/minecraft/testdata/testname-testversion-linux-32.jar:
--------------------------------------------------------------------------------
1 | dummy test file.
2 | 


--------------------------------------------------------------------------------
/launcher/minecraft/update/AssetUpdateTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include "tasks/Task.h"
 3 | #include "net/NetJob.h"
 4 | class MinecraftInstance;
 5 | 
 6 | class AssetUpdateTask : public Task
 7 | {
 8 |     Q_OBJECT
 9 | public:
10 |     AssetUpdateTask(MinecraftInstance * inst);
11 |     virtual ~AssetUpdateTask();
12 | 
13 |     void executeTask() override;
14 | 
15 |     bool canAbort() const override;
16 | 
17 | private slots:
18 |     void assetIndexFinished();
19 |     void assetIndexFailed(QString reason);
20 |     void assetsFailed(QString reason);
21 | 
22 | public slots:
23 |     bool abort() override;
24 | 
25 | private:
26 |     MinecraftInstance *m_inst;
27 |     NetJob::Ptr downloadJob;
28 | };
29 | 


--------------------------------------------------------------------------------
/launcher/minecraft/update/FMLLibrariesTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include "tasks/Task.h"
 3 | #include "net/NetJob.h"
 4 | #include "minecraft/VersionFilterData.h"
 5 | 
 6 | class MinecraftInstance;
 7 | 
 8 | class FMLLibrariesTask : public Task
 9 | {
10 |     Q_OBJECT
11 | public:
12 |     FMLLibrariesTask(MinecraftInstance * inst);
13 |     virtual ~FMLLibrariesTask() {};
14 | 
15 |     void executeTask() override;
16 | 
17 |     bool canAbort() const override;
18 | 
19 | private slots:
20 |     void fmllibsFinished();
21 |     void fmllibsFailed(QString reason);
22 | 
23 | public slots:
24 |     bool abort() override;
25 | 
26 | private:
27 |     MinecraftInstance *m_inst;
28 |     NetJob::Ptr downloadJob;
29 |     QList<FMLlib> fmlLibsToProcess;
30 | };
31 | 
32 | 


--------------------------------------------------------------------------------
/launcher/minecraft/update/FoldersTask.cpp:
--------------------------------------------------------------------------------
 1 | #include "FoldersTask.h"
 2 | #include "minecraft/MinecraftInstance.h"
 3 | #include <QDir>
 4 | 
 5 | FoldersTask::FoldersTask(MinecraftInstance * inst)
 6 |     :Task()
 7 | {
 8 |     m_inst = inst;
 9 | }
10 | 
11 | void FoldersTask::executeTask()
12 | {
13 |     // Make directories
14 |     QDir mcDir(m_inst->gameRoot());
15 |     if (!mcDir.exists() && !mcDir.mkpath("."))
16 |     {
17 |         emitFailed(tr("Failed to create folder for minecraft binaries."));
18 |         return;
19 |     }
20 |     emitSucceeded();
21 | }
22 | 


--------------------------------------------------------------------------------
/launcher/minecraft/update/FoldersTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "tasks/Task.h"
 4 | 
 5 | class MinecraftInstance;
 6 | class FoldersTask : public Task
 7 | {
 8 |     Q_OBJECT
 9 | public:
10 |     FoldersTask(MinecraftInstance * inst);
11 |     virtual ~FoldersTask() {};
12 | 
13 |     void executeTask() override;
14 | private:
15 |     MinecraftInstance *m_inst;
16 | };
17 | 
18 | 


--------------------------------------------------------------------------------
/launcher/minecraft/update/LibrariesTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include "tasks/Task.h"
 3 | #include "net/NetJob.h"
 4 | class MinecraftInstance;
 5 | 
 6 | class LibrariesTask : public Task
 7 | {
 8 |     Q_OBJECT
 9 | public:
10 |     LibrariesTask(MinecraftInstance * inst);
11 |     virtual ~LibrariesTask() {};
12 | 
13 |     void executeTask() override;
14 | 
15 |     bool canAbort() const override;
16 | 
17 | private slots:
18 |     void jarlibFailed(QString reason);
19 | 
20 | public slots:
21 |     bool abort() override;
22 | 
23 | private:
24 |     MinecraftInstance *m_inst;
25 |     NetJob::Ptr downloadJob;
26 | };
27 | 


--------------------------------------------------------------------------------
/launcher/modplatform/legacy_ftb/PrivatePackManager.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QSet>
 4 | #include <QString>
 5 | #include <QFile>
 6 | 
 7 | namespace LegacyFTB {
 8 | 
 9 | class PrivatePackManager
10 | {
11 | public:
12 |     ~PrivatePackManager()
13 |     {
14 |         save();
15 |     }
16 |     void load();
17 |     void save() const;
18 |     bool empty() const
19 |     {
20 |         return currentPacks.empty();
21 |     }
22 |     const QSet<QString> &getCurrentPackCodes() const
23 |     {
24 |         return currentPacks;
25 |     }
26 |     void add(const QString &code)
27 |     {
28 |         currentPacks.insert(code);
29 |         dirty = true;
30 |     }
31 |     void remove(const QString &code)
32 |     {
33 |         currentPacks.remove(code);
34 |         dirty = true;
35 |     }
36 | 
37 | private:
38 |     QSet<QString> currentPacks;
39 |     QString m_filename = "private_packs.txt";
40 |     mutable bool dirty = false;
41 | };
42 | 
43 | }
44 | 


--------------------------------------------------------------------------------
/launcher/modplatform/modrinth/ModrinthPackManifest.cpp:
--------------------------------------------------------------------------------
 1 | /* Copyright 2022 kb1000
 2 |  *
 3 |  * Licensed under the Apache License, Version 2.0 (the "License");
 4 |  * you may not use this file except in compliance with the License.
 5 |  * You may obtain a copy of the License at
 6 |  *
 7 |  *     http://www.apache.org/licenses/LICENSE-2.0
 8 |  *
 9 |  * Unless required by applicable law or agreed to in writing, software
10 |  * distributed under the License is distributed on an "AS IS" BASIS,
11 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 |  * See the License for the specific language governing permissions and
13 |  * limitations under the License.
14 |  */
15 | 
16 | #include "ModrinthPackManifest.h"
17 | 


--------------------------------------------------------------------------------
/launcher/mojang/testdata/inspect/a/b.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/mojang/testdata/inspect/a/b.txt


--------------------------------------------------------------------------------
/launcher/mojang/testdata/inspect/a/b/b.txt:
--------------------------------------------------------------------------------
1 | ../b.txt


--------------------------------------------------------------------------------
/launcher/mojang/testdata/inspect_win/a/b.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/mojang/testdata/inspect_win/a/b.txt


--------------------------------------------------------------------------------
/launcher/mojang/testdata/inspect_win/a/b/b.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/mojang/testdata/inspect_win/a/b/b.txt


--------------------------------------------------------------------------------
/launcher/net/FileSink.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include "Sink.h"
 3 | #include <QSaveFile>
 4 | 
 5 | namespace Net {
 6 | class FileSink : public Sink
 7 | {
 8 | public: /* con/des */
 9 |     FileSink(QString filename);
10 |     virtual ~FileSink();
11 | 
12 | public: /* methods */
13 |     JobStatus init(QNetworkRequest & request) override;
14 |     JobStatus write(QByteArray & data) override;
15 |     JobStatus abort() override;
16 |     JobStatus finalize(QNetworkReply & reply) override;
17 |     bool hasLocalData() override;
18 | 
19 | protected: /* methods */
20 |     virtual JobStatus initCache(QNetworkRequest &);
21 |     virtual JobStatus finalizeCache(QNetworkReply &reply);
22 | 
23 | protected: /* data */
24 |     QString m_filename;
25 |     bool wroteAnyData = false;
26 |     std::unique_ptr<QSaveFile> m_output_file;
27 | };
28 | }
29 | 


--------------------------------------------------------------------------------
/launcher/net/MetaCacheSink.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include "FileSink.h"
 3 | #include "ChecksumValidator.h"
 4 | #include "net/HttpMetaCache.h"
 5 | 
 6 | namespace Net {
 7 | class MetaCacheSink : public FileSink
 8 | {
 9 | public: /* con/des */
10 |     MetaCacheSink(MetaEntryPtr entry, ChecksumValidator * md5sum);
11 |     virtual ~MetaCacheSink();
12 |     bool hasLocalData() override;
13 | 
14 | protected: /* methods */
15 |     JobStatus initCache(QNetworkRequest & request) override;
16 |     JobStatus finalizeCache(QNetworkReply & reply) override;
17 | 
18 | private: /* data */
19 |     MetaEntryPtr m_entry;
20 |     ChecksumValidator * m_md5Node;
21 | };
22 | }
23 | 


--------------------------------------------------------------------------------
/launcher/net/Mode.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | namespace Net
 4 | {
 5 | enum class Mode
 6 | {
 7 |     Offline,
 8 |     Online
 9 | };
10 | }
11 | 


--------------------------------------------------------------------------------
/launcher/net/Validator.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "net/NetAction.h"
 4 | 
 5 | namespace Net {
 6 | class Validator
 7 | {
 8 | public: /* con/des */
 9 |     Validator() {};
10 |     virtual ~Validator() {};
11 | 
12 | public: /* methods */
13 |     virtual bool init(QNetworkRequest & request) = 0;
14 |     virtual bool write(QByteArray & data) = 0;
15 |     virtual bool abort() = 0;
16 |     virtual bool validate(QNetworkReply & reply) = 0;
17 | };
18 | }
19 | 


--------------------------------------------------------------------------------
/launcher/package/rpm/README.md:
--------------------------------------------------------------------------------
 1 | # What is this?
 2 | A simple RPM package for MultiMC that contains a script that downloads and installs real MultiMC on Red Hat based systems.
 3 | 
 4 | It contains a `.desktop` file, a `.metainfo.xml` file, an icon, and a simple script that does the heavy lifting.
 5 | 
 6 | # How to build this?
 7 | You need the `rpm-build` package. Switch into this directory, then run:
 8 | ```
 9 | rpmbuild --build-in-place -bb MultiMC5.spec
10 | ```
11 | 
12 | Replace the version with whatever is appropriate.
13 | 


--------------------------------------------------------------------------------
/launcher/package/ubuntu/README.md:
--------------------------------------------------------------------------------
 1 | # What is this?
 2 | A simple Ubuntu package for MultiMC that contains a script that downloads and installs real MultiMC on Ubuntu based systems.
 3 | 
 4 | It contains a `.desktop` file, an icon, and a simple script that does the heavy lifting.
 5 | 
 6 | This is also the source for the files in the [RPM package](../rpm). If you rename, create or delete files here, you'll likely also have to update the RPM spec file there.
 7 | 
 8 | # How to build this?
 9 | You need dpkg utils. Rename the `multimc` folder to `multimc_1.6-1` and then run:
10 | ```
11 | fakeroot dpkg-deb --build multimc_1.6-1
12 | ```
13 | 
14 | Replace the version with whatever is appropriate.
15 | 


--------------------------------------------------------------------------------
/launcher/package/ubuntu/multimc/DEBIAN/control:
--------------------------------------------------------------------------------
 1 | Package: multimc
 2 | Version: 1.6-2
 3 | Architecture: all
 4 | Maintainer: Petr Mrázek <peterix@gmail.com>
 5 | Section: games
 6 | Priority: optional
 7 | Installed-Size: 75
 8 | Depends: zenity, desktop-file-utils, libqt5widgets5, libqt5gui5, libqt5network5, libqt5core5a, libqt5xml5, libqt5concurrent5, wget
 9 | Recommends: openjdk-8-jre
10 | Homepage: http://multimc.org
11 | Description: A local install wrapper for MultiMC
12 | 
13 | 


--------------------------------------------------------------------------------
/launcher/package/ubuntu/multimc/DEBIAN/postrm:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | update-desktop-database
4 | 


--------------------------------------------------------------------------------
/launcher/package/ubuntu/multimc/opt/multimc/run.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/bash
 2 | 
 3 | INSTDIR="${XDG_DATA_HOME-$HOME/.local/share}/multimc"
 4 | 
 5 | if [ `getconf LONG_BIT` = "64" ]
 6 | then
 7 |     PACKAGE="mmc-stable-lin64.tar.gz"
 8 | else
 9 |     PACKAGE="mmc-stable-lin32.tar.gz"
10 | fi
11 | 
12 | deploy() {
13 |     mkdir -p $INSTDIR
14 |     cd ${INSTDIR}
15 | 
16 |     wget --progress=dot:force "https://files.multimc.org/downloads/${PACKAGE}" 2>&1 | sed -u 's/.* \([0-9]\+%\)\ \+\([0-9.]\+.\) \(.*\)/\1\n# Downloading at \2\/s, ETA \3/' | zenity --progress --auto-close --auto-kill --title="Downloading MultiMC..."
17 | 
18 |     tar -xzf ${PACKAGE} --transform='s,MultiMC/,,'
19 |     rm ${PACKAGE}
20 |     chmod +x MultiMC
21 | }
22 | 
23 | runmmc() {
24 |     cd ${INSTDIR}
25 |     exec ./MultiMC "$@"
26 | }
27 | 
28 | if [[ ! -f ${INSTDIR}/MultiMC ]]; then
29 |     deploy
30 |     runmmc "$@"
31 | else
32 |     runmmc "$@"
33 | fi
34 | 


--------------------------------------------------------------------------------
/launcher/package/ubuntu/multimc/usr/share/applications/multimc.desktop:
--------------------------------------------------------------------------------
 1 | [Desktop Entry]
 2 | Categories=Game;
 3 | Exec=/opt/multimc/run.sh
 4 | Icon=/opt/multimc/icon.svg
 5 | Keywords=game;Minecraft;
 6 | MimeType=
 7 | Name=MultiMC 5
 8 | Path=
 9 | StartupNotify=true
10 | Terminal=false
11 | TerminalOptions=
12 | Type=Application
13 | X-DBUS-ServiceName=
14 | X-DBUS-StartupType=
15 | X-KDE-SubstituteUID=false
16 | X-KDE-Username=
17 | 


--------------------------------------------------------------------------------
/launcher/pathmatcher/FSTreeMatcher.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "IPathMatcher.h"
 4 | #include <SeparatorPrefixTree.h>
 5 | #include <QRegularExpression>
 6 | 
 7 | class FSTreeMatcher : public IPathMatcher
 8 | {
 9 | public:
10 |     virtual ~FSTreeMatcher() {};
11 |     FSTreeMatcher(SeparatorPrefixTree<'/'> & tree) : m_fsTree(tree)
12 |     {
13 |     }
14 | 
15 |     bool matches(const QString &string) const override
16 |     {
17 |         return m_fsTree.covers(string);
18 |     }
19 | 
20 |     SeparatorPrefixTree<'/'> & m_fsTree;
21 | };
22 | 


--------------------------------------------------------------------------------
/launcher/pathmatcher/IPathMatcher.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <memory>
 3 | #include <QString>
 4 | 
 5 | class IPathMatcher
 6 | {
 7 | public:
 8 |     typedef std::shared_ptr<IPathMatcher> Ptr;
 9 | 
10 | public:
11 |     virtual ~IPathMatcher(){};
12 |     virtual bool matches(const QString &string) const = 0;
13 | };
14 | 


--------------------------------------------------------------------------------
/launcher/pathmatcher/MultiMatcher.h:
--------------------------------------------------------------------------------
 1 | #include "IPathMatcher.h"
 2 | #include <SeparatorPrefixTree.h>
 3 | #include <QRegularExpression>
 4 | 
 5 | class MultiMatcher : public IPathMatcher
 6 | {
 7 | public:
 8 |     virtual ~MultiMatcher() {};
 9 |     MultiMatcher()
10 |     {
11 |     }
12 |     MultiMatcher &add(Ptr add)
13 |     {
14 |         m_matchers.append(add);
15 |         return *this;
16 |     }
17 | 
18 |     virtual bool matches(const QString &string) const override
19 |     {
20 |         for(auto iter: m_matchers)
21 |         {
22 |             if(iter->matches(string))
23 |             {
24 |                 return true;
25 |             }
26 |         }
27 |         return false;
28 |     }
29 | 
30 |     QList<Ptr> m_matchers;
31 | };
32 | 


--------------------------------------------------------------------------------
/launcher/resources/OSX/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=OSX
 3 | Comment=OSX theme by pexner
 4 | Inherits=multimc
 5 | Directories=scalable
 6 | 
 7 | [scalable]
 8 | Size=48
 9 | Type=Scalable
10 | MinSize=16
11 | MaxSize=256
12 | 


--------------------------------------------------------------------------------
/launcher/resources/assets/underconstruction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/assets/underconstruction.png


--------------------------------------------------------------------------------
/launcher/resources/backgrounds/backgrounds.qrc:
--------------------------------------------------------------------------------
1 | <!DOCTYPE RCC>
2 | <RCC version="1.0">
3 |     <qresource prefix="/backgrounds">
4 |         <file alias="kitteh">catbgrnd2.png</file>
5 |         <file alias="catmas">catmas.png</file>
6 |         <file alias="cattiversary">cattiversary.png</file>
7 |     </qresource>
8 | </RCC>
9 | 


--------------------------------------------------------------------------------
/launcher/resources/backgrounds/catbgrnd2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/backgrounds/catbgrnd2.png


--------------------------------------------------------------------------------
/launcher/resources/backgrounds/catmas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/backgrounds/catmas.png


--------------------------------------------------------------------------------
/launcher/resources/backgrounds/cattiversary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/backgrounds/cattiversary.png


--------------------------------------------------------------------------------
/launcher/resources/documents/documents.qrc:
--------------------------------------------------------------------------------
1 | <!DOCTYPE RCC>
2 | <RCC version="1.0">
3 |     <qresource prefix="/documents">
4 |         <file>../../../COPYING.md</file>
5 |     </qresource>
6 | </RCC>
7 | 
8 | 


--------------------------------------------------------------------------------
/launcher/resources/flat/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=Flat
 3 | Comment=Flat icons
 4 | Inherits=multimc
 5 | Directories=scalable
 6 | 
 7 | [scalable]
 8 | Size=48
 9 | Type=Scalable
10 | MinSize=16
11 | MaxSize=256
12 | 


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/about.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/accounts.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M16,13C15.71,13 15.38,13 15.03,13.05C16.19,13.89 17,15 17,16.5V19H23V16.5C23,14.17 18.33,13 16,13M8,13C5.67,13 1,14.17 1,16.5V19H15V16.5C15,14.17 10.33,13 8,13M8,11A3,3 0 0,0 11,8A3,3 0 0,0 8,5A3,3 0 0,0 5,8A3,3 0 0,0 8,11M16,11A3,3 0 0,0 19,8A3,3 0 0,0 16,5A3,3 0 0,0 13,8A3,3 0 0,0 16,11Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/bug.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/cat.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M12,8L10.67,8.09C9.81,7.07 7.4,4.5 5,4.5C5,4.5 3.03,7.46 4.96,11.41C4.41,12.24 4.07,12.67 4,13.66L2.07,13.95L2.28,14.93L4.04,14.67L4.18,15.38L2.61,16.32L3.08,17.21L4.53,16.32C5.68,18.76 8.59,20 12,20C15.41,20 18.32,18.76 19.47,16.32L20.92,17.21L21.39,16.32L19.82,15.38L19.96,14.67L21.72,14.93L21.93,13.95L20,13.66C19.93,12.67 19.59,12.24 19.04,11.41C20.97,7.46 19,4.5 19,4.5C16.6,4.5 14.19,7.07 13.33,8.09L12,8M9,11A1,1 0 0,1 10,12A1,1 0 0,1 9,13A1,1 0 0,1 8,12A1,1 0 0,1 9,11M15,11A1,1 0 0,1 16,12A1,1 0 0,1 15,13A1,1 0 0,1 14,12A1,1 0 0,1 15,11M11,14H13L12.3,15.39C12.5,16.03 13.06,16.5 13.75,16.5A1.5,1.5 0 0,0 15.25,15H15.75A2,2 0 0,1 13.75,17C13,17 12.35,16.59 12,16V16H12C11.65,16.59 11,17 10.25,17A2,2 0 0,1 8.25,15H8.75A1.5,1.5 0 0,0 10.25,16.5C10.94,16.5 11.5,16.03 11.7,15.39L11,14Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/centralmods.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-2.06 11L15 15.28 12.06 17l.78-3.33-2.59-2.24 3.41-.29L15 8l1.34 3.14 3.41.29-2.59 2.24.78 3.33z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/checkupdate.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.73 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8h1.5z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/copy.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9h-4v4h-2v-4H9V9h4V5h2v4h4v2z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/coremods.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M22,12A10,10,0,1,1,12,2,10,10,0,0,1,22,12ZM12,4a8,8,0,1,0,8,8A8,8,0,0,0,12,4Zm4.23,14-1.12-4.82,3.73-3.23-4.92-.42L12,5,10.08,9.54,5.16,10l3.73,3.23L7.77,18,12,15.45,16.23,18"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/discord.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M10.14,11.63a1.15,1.15,0,1,0,1,1.14A1.1,1.1,0,0,0,10.14,11.63Zm3.75,0a1.15,1.15,0,1,0,1,1.14A1.1,1.1,0,0,0,13.89,11.63Z"/>
3 |     <path d="M18.89,3H5.11A2.11,2.11,0,0,0,3,5.12V19a2.11,2.11,0,0,0,2.11,2.12H16.77l-.55-1.9,1.32,1.22,1.24,1.15,2.21,2V5.12A2.11,2.11,0,0,0,18.89,3Zm-4,13.43s-.37-.44-.68-.83a3.25,3.25,0,0,0,1.86-1.22,5.89,5.89,0,0,1-1.18.61,6.77,6.77,0,0,1-1.49.44,7.21,7.21,0,0,1-2.66,0A8.63,8.63,0,0,1,9.25,15a6,6,0,0,1-.75-.35l-.09-.05,0,0-.29-.17a3.2,3.2,0,0,0,1.8,1.21l-.69.85a3.73,3.73,0,0,1-3.14-1.56,13.77,13.77,0,0,1,1.48-6,5.09,5.09,0,0,1,2.89-1.08l.1.12A6.94,6.94,0,0,0,7.82,9.26s.23-.12.61-.3a7.72,7.72,0,0,1,2.33-.65l.17,0a8.7,8.7,0,0,1,2.08,0,8.38,8.38,0,0,1,3.1,1A6.85,6.85,0,0,0,13.55,8l.14-.16a5.09,5.09,0,0,1,2.89,1.08,13.77,13.77,0,0,1,1.48,6A3.76,3.76,0,0,1,14.92,16.43Z"/>
4 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/externaltools.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M22.7,19L13.6,9.9C14.5,7.6 14,4.9 12.1,3C10.1,1 7.1,0.6 4.7,1.7L9,6L6,9L1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1C4.8,14 7.5,14.5 9.8,13.6L18.9,22.7C19.3,23.1 19.9,23.1 20.3,22.7L22.6,20.4C23.1,20 23.1,19.3 22.7,19Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/help.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 2 | <svg
 3 |    xmlns:dc="http://purl.org/dc/elements/1.1/"
 4 |    xmlns:cc="http://creativecommons.org/ns#"
 5 |    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 6 |    xmlns:svg="http://www.w3.org/2000/svg"
 7 |    xmlns="http://www.w3.org/2000/svg"
 8 |    id="svg4"
 9 |    version="1.1"
10 |    width="24"
11 |    viewBox="0 0 24 24"
12 |    height="24"
13 |    fill="#757575">
14 |   <path
15 |      d="m 15.07,11.25 -0.9,0.92 C 13.45,12.89 13,13.5 13,15 h -2 v -0.5 c 0,-1.11 0.45,-2.11 1.17,-2.83 l 1.24,-1.26 C 13.78,10.049999 14,9.549999 14,9 14,7.89 13.100001,7 12,7 A 2,2 0 0 0 10,9 H 7.9999995 A 4,4 0 0 1 12,5 4,4 0 0 1 16,9 c 0,0.879999 -0.36,1.67 -0.93,2.25 M 13,19 h -2 v -2 h 2 M 12,2 A 10,10 0 0 0 1.9999995,12 10,10 0 0 0 12,22 10,10 0 0 0 22,12 C 22,6.47 17.5,2 12,2 Z"
16 |      id="path817" />
17 | </svg>
18 | 


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/jarmods.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M2,21H20V19H2M20,8H18V5h2m0-2H4V13a4,4,0,0,0,4,4h6a4,4,0,0,0,4-4V10h2a2,2,0,0,0,2-2V5A2,2,0,0,0,20,3ZM11,4.43l1.62,3.29,3.63.53-2.63,2.56.62,3.62L11,12.72,7.75,14.43l.62-3.62L5.74,8.25l3.63-.53Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/java.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M2,21H20V19H2M20,8H18V5H20M20,3H4V13A4,4 0 0,0 8,17H14A4,4 0 0,0 18,13V10H20A2,2 0 0,0 22,8V5C22,3.89 21.1,3 20,3Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/launcher.svg:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="UTF-8"?>
2 | <svg width="24" height="24" fill="#757575" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m20 4h-16v16h16zm0 18h-16c-1.1046 0-2-0.89543-2-2v-16c0-1.1046 0.89543-2 2-2h16c1.1046 0 2 0.89543 2 2v16c0 1.1046-0.89543 2-2 2z"/><path d="m7.2 18c-0.225 0-0.45-0.075-0.6-0.15-0.375-0.225-0.6-0.6-0.6-1.05v-9.6c0-0.45 0.225-0.825 0.6-1.05 0.225-0.15 0.375-0.15 0.6-0.15 0.15 0 0.375 0.075 0.525 0.15l9.6 4.8c0.375 0.225 0.675 0.6 0.675 1.05 0 0.45-0.225 0.9-0.675 1.05l-9.6 4.8c-0.15 0.075-0.375 0.15-0.525 0.15z" clip-rule="evenodd" fill="#757575" fill-rule="evenodd" stroke-width=".99999"/></svg>
3 | 


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/loadermods.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M16.23,18l-1.12-4.82,3.73-3.23-4.92-.42L12,5,10.08,9.54,5.16,10l3.73,3.23L7.77,18,12,15.45,16.23,18M20,4H4V20H20Zm0,18H4a2,2,0,0,1-2-2V4A2,2,0,0,1,4,2H20a2,2,0,0,1,2,2V20A2,2,0,0,1,20,22Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/log.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/minecraft.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V9.21L13,12.58V19.29L19,15.91Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/multimc.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M0,2A2,2,0,0,1,2,0H22a2,2,0,0,1,2,2V8L22,8V6H20V8H18v2H16V8H14V6H12V8H10V6H8v4H6V8H4V6H2V8H0ZM0,22a2,2,0,0,0,2,2H22a2,2,0,0,0,2-2V10H22V22H2V10H0Zm18.71-3.29a3.83,3.83,0,0,0-5.41-5.41L12,14.59l-1.29-1.29a3.83,3.83,0,1,0,0,5.41L12,17.41l1.29,1.29a3.83,3.83,0,0,0,5.41,0Zm-4-4a1.83,1.83,0,1,1,0,2.59L13.41,16Zm-5.41,0L10.59,16,9.29,17.29a1.83,1.83,0,1,1,0-2.59Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/new.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/news.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/notes.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/packages.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M5.12,5l.81-1h12l.94,1m1.67.23L19.15,3.55A1.45,1.45,0,0,0,18,3H6a1.49,1.49,0,0,0-1.16.55L3.46,5.23A1.92,1.92,0,0,0,3,6.5V19a2,2,0,0,0,2,2H19a2,2,0,0,0,2-2V6.5A1.92,1.92,0,0,0,20.54,5.23Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/patreon.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M12,3h0a9,9,0,0,0-9,9v9H5.09V12a6.91,6.91,0,1,1,7.23,6.9,5.9,5.9,0,0,1-2.59-.47v-3A4.13,4.13,0,1,0,7.85,12v9H12A9,9,0,1,0,12,3Zm0,15.91h0Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/proxy.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M22 4v-.5C22 2.12 20.88 1 19.5 1S17 2.12 17 3.5V4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-.8 0h-3.4v-.5c0-.94.76-1.7 1.7-1.7s1.7.76 1.7 1.7V4zm-2.28 8c.04.33.08.66.08 1 0 2.08-.8 3.97-2.1 5.39-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H7v-2h2c.55 0 1-.45 1-1V8h2c1.1 0 2-.9 2-2V3.46c-.95-.3-1.95-.46-3-.46C5.48 3 1 7.48 1 13s4.48 10 10 10 10-4.48 10-10c0-.34-.02-.67-.05-1h-2.03zM10 20.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L8 16v1c0 1.1.9 2 2 2v1.93z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/quickmods.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M8.75,5.5v7.15H10.7V18.5l4.55-7.8h-2.6l2.6-5.2ZM20,4H4V20H20Zm0,18H4a2,2,0,0,1-2-2V4A2,2,0,0,1,4,2H20a2,2,0,0,1,2,2V20A2,2,0,0,1,20,22Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/reddit-alien.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M20,11.86a1.76,1.76,0,0,0-1.75-1.75,1.73,1.73,0,0,0-1.22.51,9,9,0,0,0-4.67-1.38l1-3.16L16,6.71s0,0,0,0a1.46,1.46,0,1,0,.1-.53l-2.89-.68a.25.25,0,0,0-.29.17L11.83,9.23a9.16,9.16,0,0,0-4.88,1.36,1.75,1.75,0,1,0-2.07,2.79,3,3,0,0,0-.06.58C4.82,16.58,8,18.7,12,18.7s7.14-2.13,7.14-4.74a2.94,2.94,0,0,0-.05-.55A1.74,1.74,0,0,0,20,11.86ZM8.51,13.08a1.06,1.06,0,1,1,1.06,1.06A1.06,1.06,0,0,1,8.51,13.08Zm6.06,3.14A3.48,3.48,0,0,1,12,17h0a3.48,3.48,0,0,1-2.56-.79.25.25,0,0,1,.35-.35,3,3,0,0,0,2.2.65h0a3,3,0,0,0,2.2-.65.25.25,0,1,1,.35.35Zm-.13-2.08a1.06,1.06,0,1,1,1.06-1.06A1.06,1.06,0,0,1,14.44,14.14Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/refresh.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/resourcepacks.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M19.51 3.08L3.08 19.51c.09.34.27.65.51.9.25.24.56.42.9.51L20.93 4.49c-.19-.69-.73-1.23-1.42-1.41zM11.88 3L3 11.88v2.83L14.71 3h-2.83zM5 3c-1.1 0-2 .9-2 2v2l4-4H5zm14 18c.55 0 1.05-.22 1.41-.59.37-.36.59-.86.59-1.41v-2l-4 4h2zm-9.71 0h2.83L21 12.12V9.29L9.29 21z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/screenshot-placeholder.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M21 15h2v2h-2v-2zm0-4h2v2h-2v-2zm2 8h-2v2c1 0 2-1 2-2zM13 3h2v2h-2V3zm8 4h2v2h-2V7zm0-4v2h2c0-1-1-2-2-2zM1 7h2v2H1V7zm16-4h2v2h-2V3zm0 16h2v2h-2v-2zM3 3C2 3 1 4 1 5h2V3zm6 0h2v2H9V3zM5 3h2v2H5V3zm-4 8v8c0 1.1.9 2 2 2h12V11H1zm2 8l2.5-3.21 1.79 2.15 2.5-3.22L13 19H3z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/screenshots.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M21 3H3C2 3 1 4 1 5v14c0 1.1.9 2 2 2h18c1 0 2-1 2-2V5c0-1-1-2-2-2zM5 17l3.5-4.5 2.5 3.01L14.5 11l4.5 6H5z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/star.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-bad.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M12,2A10,10,0,1,0,22,12,10,10,0,0,0,12,2Zm4.24,7.17L13.41,12l2.83,2.83-1.41,1.41L12,13.41,9.17,16.24,7.76,14.83,10.59,12,7.76,9.17,9.17,7.76,12,10.59l2.83-2.83Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-good.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-running.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/status-yellow.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/viewfolder.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/flat/scalable/worlds.svg:
--------------------------------------------------------------------------------
1 | <svg fill="#757575" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
2 |     <path d="M18.2,13a3.18,3.18,0,0,1-.84,2.16.8.8,0,0,0-.76-.56h-.4V13.4a.4.4,0,0,0-.4-.4H13.4v-.8h.8a.4.4,0,0,0,.4-.4V11h.8a.8.8,0,0,0,.8-.8V10A3.19,3.19,0,0,1,18.2,13Zm-4.4,1.6v-.4l-1.92-1.92a3.18,3.18,0,0,0,2.72,3.89V15.4A.8.8,0,0,1,13.8,14.6ZM22,8V18a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4h6l2,2h8A2,2,0,0,1,22,8Zm-3,5a4,4,0,1,0-4,4A4,4,0,0,0,19,13Z"/>
3 | </svg>


--------------------------------------------------------------------------------
/launcher/resources/iOS/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=iOS
 3 | Comment=iOS theme by pexner
 4 | Inherits=multimc
 5 | Directories=scalable
 6 | 
 7 | [scalable]
 8 | Size=48
 9 | Type=Scalable
10 | MinSize=16
11 | MaxSize=256
12 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/about.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g>
 7 | 	<polygon fill="#3366CC" points="18.5,22.5 18.5,12.5 12,12.5 12,15 14.5,15 14.5,22.5 12,22.5 12,25 21,25 21,22.5 	"/>
 8 | 	<g id="_x38__8_">
 9 | 		<g>
10 | 			<path fill="#3366CC" d="M16,0C7.2,0,0,7.2,0,16c0,8.8,7.2,16,16,16c8.8,0,16-7.2,16-16C32,7.2,24.8,0,16,0z M16,30
11 | 				C8.3,30,2,23.7,2,16C2,8.3,8.3,2,16,2c7.7,0,14,6.3,14,14C30,23.7,23.7,30,16,30z"/>
12 | 		</g>
13 | 	</g>
14 | 	<circle fill="#3366CC" cx="16.5" cy="8.5" r="2"/>
15 | </g>
16 | </svg>
17 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/copy.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g id="_x33__7_">
 7 | 	<g>
 8 | 		<path fill="#3366CC" d="M20,8H4c-2.2,0-4,1.8-4,4v16c0,2.2,1.8,4,4,4h16c2.2,0,4-1.8,4-4V12C24,9.8,22.2,8,20,8z M22,28
 9 | 			c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V12c0-1.1,0.9-2,2-2h16c1.1,0,2,0.9,2,2V28z M28,0H12C9.8,0,8,1.8,8,4v2h2V4c0-1.1,0.9-2,2-2
10 | 			h16c1.1,0,2,0.9,2,2v16c0,1.1-0.9,2-2,2h-2v2h2c2.2,0,4-1.8,4-4V4C32,1.8,30.2,0,28,0z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/externaltools.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g id="_x35__5_">
 7 | 	<g>
 8 | 		<path fill="#3366CC" d="M3,11c0.6,0,1-0.5,1-1l0-4.8l15.2,14.5c0.4,0.4,1,0.4,1.4,0c0.4-0.4,0.4-1,0-1.4L5.6,4L10,4
 9 | 			c0.6,0,1-0.5,1-1s-0.4-1-1-1H3C2.5,2,2,2.4,2,3v7C2,10.5,2.4,11,3,11z M26,2H15v2h11c1.1,0,2,0.9,2,2l0,20.1c0,1.1-0.9,2-2,2L6,28
10 | 			c-1.1,0-2-0.9-2-2V15H2v11c0,2.2,2.2,4,4.4,4h19.7c2.2,0,3.9-1.8,3.9-3.9V6.4C30,4.2,28.2,2,26,2z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/log.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g id="_x37__21_">
 7 | 	<g>
 8 | 		<path fill="#3366CC" d="M28,0c0,0-5.8,1.6-11,3c-0.7,0-1.3,0-2,0C10,1.7,4,0,4,0C1.8,0,0,1.8,0,4v21c0,2.2,1.9,3.3,4,4
 9 | 			c0,0,5.4,1.5,11,3h2c5.6-1.5,11-3,11-3c2.1-0.5,4-1.8,4-4V4C32,1.8,30.2,0,28,0z M15,30c-5.5-1.5-11-3-11-3c-1.1-0.3-2-0.9-2-2V4
10 | 			c0-1.1,0.9-2,2-2l11,3V30z M30,25c0,1.1-0.9,1.7-2,2c0,0-5.4,1.5-11,3V5l11-3c1.1,0,2,0.9,2,2V25z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/minecraft.svg:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
6 | <path fill="#3366CC" d="M16,0L2,7.1v17.8L16,32l14-7.1V7.1L16,0z M26.7,7.7L16,13.1L5.3,7.7L16,2.2L26.7,7.7z M4,9.2l11,5.6v14.4
7 | 	L4,23.7V9.2z M17,29.2V14.8l11-5.6v14.4L17,29.2z"/>
8 | </svg>
9 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/new.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g id="_x31__2_">
 7 | 	<g>
 8 | 		<path fill="#3366CC" d="M22,15h-5v-5c0-0.6-0.4-1-1-1s-1,0.4-1,1v5h-5c-0.6,0-1,0.4-1,1c0,0.6,0.4,1,1,1h5v5c0,0.6,0.4,1,1,1
 9 | 			s1-0.4,1-1v-5h5c0.6,0,1-0.4,1-1C23,15.4,22.6,15,22,15z M28,0H4C1.8,0,0,1.8,0,4v24c0,2.2,1.8,4,4,4h24c2.2,0,4-1.8,4-4V4
10 | 			C32,1.8,30.2,0,28,0z M30,28c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V4c0-1.1,0.9-2,2-2h24c1.1,0,2,0.9,2,2V28z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/patreon.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g>
 7 | 	<rect y="0" fill="none" width="32" height="32"/>
 8 | 	<path fill="#3366CC" d="M16,0C7.2,0,0,7.2,0,16v16h3.7v-3.7v-5V16C3.7,9.2,9.2,3.7,16,3.7c6.8,0,12.3,5.5,12.3,12.3
 9 | 		c0,6.6-5.2,12-11.7,12.3c-2.1,0-3.8-0.4-4.6-0.8v-5.3c1.2,0.8,2.5,1.2,4,1.2c4.1,0,7.3-3.3,7.3-7.3c0-4.1-3.3-7.3-7.3-7.3
10 | 		c-4.1,0-7.3,3.3-7.3,7.3v16h6.7c0.2,0,0.4,0,0.7,0c8.8,0,16-7.2,16-16S24.8,0,16,0z"/>
11 | </g>
12 | </svg>
13 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/refresh.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g id="_x32__8_">
 7 | 	<g>
 8 | 		<path fill="#3366CC" d="M23.7,2H31c0.6,0,1-0.4,1-1c0-0.6-0.4-1-1-1H21c-0.1,0-1,0-1,1v10c0,0.6,0.4,1,1,1c0.6,0,1-0.4,1-1V3.4
 9 | 			c4.7,2.2,8,7.1,8,12.6c0,7.7-6.3,14-14,14C8.3,30,2,23.7,2,16C2,8.9,7.2,3.1,14,2.2v-2C6.1,1.1,0,7.8,0,16c0,8.8,7.2,16,16,16
10 | 			c8.8,0,16-7.2,16-16C32,10,28.7,4.7,23.7,2z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/iOS/scalable/viewfolder.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g id="_x36__4_">
 7 | 	<g>
 8 | 		<path fill="#3366CC" d="M28,4H14c0-2.2-1.8-4-4-4H4C1.8,0,0,1.8,0,4v24c0,2.2,1.8,4,4,4h24c2.2,0,4-1.8,4-4V8C32,5.8,30.2,4,28,4z
 9 | 			 M30,28c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V12h28V28z M30,10H2V4c0-1.1,0.9-2,2-2h6c1.1,0,2,0.9,2,2v2h16c1.1,0,2,0.9,2,2V10z"/>
10 | 	</g>
11 | </g>
12 | </svg>
13 | 


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/chicken.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/chicken.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/creeper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/creeper.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/enderpearl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/enderpearl.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/flame.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/flame.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/ftb_glow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/ftb_glow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/ftb_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/ftb_logo.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/gear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/gear.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/herobrine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/herobrine.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/infinity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/infinity.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/magitech.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/magitech.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/meat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/meat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/netherstar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/netherstar.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/skeleton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/skeleton.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/squarecreeper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/squarecreeper.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/instances/steve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/instances/steve.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/shaderpacks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/shaderpacks.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/128x128/unknown_server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/128x128/unknown_server.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/about.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/bug.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/cat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/centralmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/centralmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/checkupdate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/checkupdate.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/copy.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/coremods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/coremods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/help.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/instance-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/instance-settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/jarmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/jarmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/loadermods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/loadermods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/log.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/minecraft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/minecraft.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/new.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/news.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/news.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/noaccount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/noaccount.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/patreon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/patreon.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/refresh.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/resourcepacks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/resourcepacks.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/screenshots.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/star.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/status-bad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-bad.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/status-good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-good.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/status-running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-running.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/status-yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/status-yellow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/viewfolder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/viewfolder.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/16x16/worlds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/16x16/worlds.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/about.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/bug.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/cat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/centralmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/centralmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/checkupdate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/checkupdate.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/copy.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/help.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/instance-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/instance-settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/new.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/news.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/news.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/patreon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/patreon.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/refresh.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/screenshots.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/status-bad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-bad.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/status-good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-good.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/status-running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-running.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/status-yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/status-yellow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/viewfolder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/viewfolder.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/22x22/worlds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/22x22/worlds.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/cat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/coremods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/coremods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/jarmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/jarmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/loadermods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/loadermods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/log.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/minecraft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/minecraft.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/noaccount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/noaccount.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/patreon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/patreon.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/resourcepacks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/resourcepacks.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/star.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/status-bad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-bad.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/status-good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-good.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/status-running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-running.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/24x24/status-yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/24x24/status-yellow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/256x256/minecraft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/256x256/minecraft.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/about.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/bug.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/cat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/centralmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/centralmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/checkupdate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/checkupdate.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/copy.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/coremods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/coremods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/help.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instance-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instance-settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/brick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/brick.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/chicken.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/chicken.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/creeper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/creeper.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/diamond.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/diamond.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/dirt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/dirt.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/enderpearl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/enderpearl.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/flame.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/flame.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/ftb_glow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/ftb_glow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/ftb_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/ftb_logo.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/gear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/gear.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/gold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/gold.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/grass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/grass.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/herobrine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/herobrine.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/infinity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/infinity.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/iron.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/iron.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/magitech.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/magitech.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/meat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/meat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/netherstar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/netherstar.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/planks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/planks.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/skeleton.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/skeleton.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/squarecreeper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/squarecreeper.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/steve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/steve.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/stone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/stone.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/instances/tnt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/instances/tnt.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/jarmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/jarmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/loadermods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/loadermods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/log.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/minecraft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/minecraft.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/new.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/news.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/news.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/noaccount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/noaccount.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/patreon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/patreon.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/refresh.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/resourcepacks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/resourcepacks.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/screenshots.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/star.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/status-bad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-bad.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/status-good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-good.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/status-running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-running.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/status-yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/status-yellow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/viewfolder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/viewfolder.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/32x32/worlds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/32x32/worlds.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/about.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/bug.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/cat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/centralmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/centralmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/checkupdate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/checkupdate.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/copy.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/help.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/instance-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/instance-settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/log.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/minecraft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/minecraft.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/new.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/news.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/news.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/noaccount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/noaccount.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/patreon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/patreon.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/refresh.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/screenshots.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/star.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/status-bad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-bad.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/status-good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-good.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/status-running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-running.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/status-yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/status-yellow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/viewfolder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/viewfolder.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/48x48/worlds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/48x48/worlds.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/50x50/instances/enderman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/50x50/instances/enderman.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/about.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/bug.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/cat.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/centralmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/centralmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/checkupdate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/checkupdate.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/copy.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/coremods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/coremods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/help.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/instance-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/instance-settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/jarmods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/jarmods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/loadermods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/loadermods.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/log.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/new.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/news.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/news.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/patreon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/patreon.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/refresh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/refresh.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/resourcepacks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/resourcepacks.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/screenshots.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/settings.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/star.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/status-bad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-bad.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/status-good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-good.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/status-running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-running.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/status-yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/status-yellow.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/viewfolder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/viewfolder.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/64x64/worlds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/64x64/worlds.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/8x8/noaccount.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/8x8/noaccount.png


--------------------------------------------------------------------------------
/launcher/resources/multimc/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=multimc
 3 | Comment=Default Icons
 4 | Inherits=default
 5 | Directories=8x8,16x16,22x22,24x24,32x32,32x32/instances,48x48,50x50/instances,64x64,128x128/instances,256x256,scalable,scalable/instances
 6 | 
 7 | [8x8]
 8 | Size=8
 9 | 
10 | [16x16]
11 | Size=16
12 | 
13 | [22x22]
14 | Size=22
15 | 
16 | [24x24]
17 | Size=24
18 | 
19 | [32x32]
20 | Size=32
21 | 
22 | [32x32/instances]
23 | Size=32
24 | MinSize=1
25 | MaxSize=32
26 | 
27 | [48x48]
28 | Size=48
29 | 
30 | [50x50/instances]
31 | Size=50
32 | 
33 | [64x64]
34 | Size=64
35 | 
36 | [128x128]
37 | Size=128
38 | MinSize=33
39 | MaxSize=128
40 | 
41 | [128x128/instances]
42 | Size=128
43 | MinSize=33
44 | MaxSize=128
45 | 
46 | [256x256]
47 | Size=256
48 | 
49 | [scalable]
50 | Size=48
51 | Type=Scalable
52 | MinSize=16
53 | MaxSize=256
54 | 
55 | [scalable/instances]
56 | Size=128
57 | MinSize=16
58 | MaxSize=256
59 | 


--------------------------------------------------------------------------------
/launcher/resources/multimc/scalable/atlauncher-placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/multimc/scalable/atlauncher-placeholder.png


--------------------------------------------------------------------------------
/launcher/resources/pe_blue/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=pe_blue
 3 | Comment=Icons by pexner (blue)
 4 | Inherits=multimc
 5 | Directories=scalable
 6 | 
 7 | [scalable]
 8 | Size=48
 9 | Type=Scalable
10 | MinSize=16
11 | MaxSize=256
12 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_blue/scalable/news.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <rect fill="none" width="32" height="32"/>
 7 | <g>
 8 | 	<g>
 9 | 		<path fill="#3366CC" d="M26,0H6C2.6,0,0,2.6,0,6v14c0,3.4,2.6,6,6,6l4,6l4-6h12c3.4,0,6-2.6,6-6V6C32,2.6,29.4,0,26,0z M16,20H6
10 | 			v-2h10V20z M26,16H6v-2h20V16z M26,12H6v-2h20V12z M26,8H6V6h20V8z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_blue/scalable/status-bad.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <path fill="#C1272D" d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.4,29.4,32,26,32z"/>
 7 | <path fill="#FFFFFF" d="M21.6,21.6c-0.8,0.8-2,0.8-2.8,0L16,18.8l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8
 8 | 	l-2.8-2.8c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0l2.8,2.8l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8L18.8,16l2.8,2.8
 9 | 	C22.4,19.6,22.4,20.8,21.6,21.6z"/>
10 | </svg>
11 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_colored/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=pe_colored
 3 | Comment=Icons by pexner (colored)
 4 | Inherits=multimc
 5 | Directories=scalable
 6 | 
 7 | [scalable]
 8 | Size=48
 9 | Type=Scalable
10 | MinSize=16
11 | MaxSize=256
12 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_colored/scalable/news.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
 6 | <rect fill="none" width="16" height="16"/>
 7 | <g>
 8 | 	<g>
 9 | 		<path fill="#39B54A" d="M13,0H3C1.3,0,0,1.3,0,3v7c0,1.7,1.3,3,3,3l2,3l2-3h6c1.7,0,3-1.3,3-3V3C16,1.3,14.7,0,13,0z M8,10H3V9h5
10 | 			V10z M13,8H3V7h10V8z M13,6H3V5h10V6z M13,4H3V3h10V4z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_colored/scalable/status-bad.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <path fill="#C1272D" d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.2,29.4,32,26,32z"/>
 7 | <path fill="#FFFFFF" d="M21.6,21.6c-0.8,0.8-2,0.8-2.8,0L16,18.8l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8
 8 | 	l-2.8-2.8c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0l2.8,2.8l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8L18.8,16l2.8,2.8
 9 | 	C22.4,19.6,22.4,20.8,21.6,21.6z"/>
10 | </svg>
11 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_dark/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=pe_dark
 3 | Comment=Icons by pexner (dark)
 4 | Inherits=multimc
 5 | Directories=scalable
 6 | 
 7 | [scalable]
 8 | Size=48
 9 | Type=Scalable
10 | MinSize=16
11 | MaxSize=256
12 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_dark/scalable/about.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g>
 7 | 	<g>
 8 | 		<polygon fill="#666666" points="17.8,21 17.8,11.9 11.9,11.9 11.9,14.2 14.2,14.2 14.2,21 11.9,21 11.9,23.3 20.1,23.3 20.1,21 		
 9 | 			"/>
10 | 		<circle fill="#666666" cx="16" cy="8.3" r="1.8"/>
11 | 	</g>
12 | 	<path d="M16,32C7.2,32,0,24.8,0,16C0,7.2,7.2,0,16,0c8.8,0,16,7.2,16,16C32,24.8,24.8,32,16,32L16,32z M16,4C9.4,4,4,9.4,4,16
13 | 		s5.4,12,12,12s12-5.4,12-12S22.6,4,16,4z"/>
14 | </g>
15 | </svg>
16 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_dark/scalable/news.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <rect fill="none" width="32" height="32"/>
 7 | <g>
 8 | 	<g>
 9 | 		<path d="M26,0H6C2.6,0,0,2.6,0,6v14c0,3.4,2.6,6,6,6l4,6l4-6h12c3.4,0,6-2.6,6-6V6C32,2.6,29.4,0,26,0z M16,20H6v-2h10V20z M26,16
10 | 			H6v-2h20V16z M26,12H6v-2h20V12z M26,8H6V6h20V8z"/>
11 | 	</g>
12 | </g>
13 | </svg>
14 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_dark/scalable/refresh.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <rect fill="none" width="32" height="32"/>
 7 | <path d="M31.8,17.4c-0.4-0.9-1.2-1.4-2.1-1.4h-2.3c0-7.6-6.1-13.7-13.7-13.7C6.1,2.3,0,8.4,0,16c0,7.6,6.1,13.7,13.7,13.7
 8 | 	c2.5,0,4.8-0.7,6.8-1.8l-3.4-3.4c-1,0.4-2.2,0.7-3.4,0.7c-5,0-9.1-4.1-9.1-9.1s4.1-9.1,9.1-9.1c5.1,0,9.1,4.1,9.1,9.1h-2.3
 9 | 	c-0.9,0-1.8,0.6-2.1,1.4c-0.4,0.9-0.2,1.8,0.5,2.5l4.6,4.6c0.4,0.4,1,0.7,1.6,0.7c0.6,0,1.2-0.2,1.6-0.7l4.6-4.6
10 | 	C32,19.2,32.2,18.3,31.8,17.4z"/>
11 | </svg>
12 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_dark/scalable/status-bad.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <path d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.4,29.4,32,26,32z"/>
 7 | <path fill="#FFFFFF" d="M21.6,21.4c-0.8,0.8-2,0.8-2.8,0L16,18.6l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8
 8 | 	L10.4,13c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0L16,13l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8l-2.8,2.8l2.8,2.8
 9 | 	C22.4,19.4,22.4,20.6,21.6,21.4z"/>
10 | </svg>
11 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_light/index.theme:
--------------------------------------------------------------------------------
 1 | [Icon Theme]
 2 | Name=pe_light
 3 | Comment=Icons by pexner (light)
 4 | Inherits=multimc
 5 | Directories=scalable
 6 | 
 7 | [scalable]
 8 | Size=48
 9 | Type=Scalable
10 | MinSize=16
11 | MaxSize=256
12 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_light/scalable/about.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g>
 7 | 	<g>
 8 | 		<polygon fill="#F2F2F2" points="17.8,21 17.8,11.9 11.9,11.9 11.9,14.2 14.2,14.2 14.2,21 11.9,21 11.9,23.3 20.1,23.3 20.1,21 		
 9 | 			"/>
10 | 		<circle fill="#F2F2F2" cx="16" cy="8.3" r="1.8"/>
11 | 	</g>
12 | 	<path fill="#F2F2F2" d="M16,32C7.2,32,0,24.8,0,16C0,7.2,7.2,0,16,0c8.8,0,16,7.2,16,16C32,24.8,24.8,32,16,32L16,32z M16,4
13 | 		C9.4,4,4,9.4,4,16s5.4,12,12,12s12-5.4,12-12S22.6,4,16,4z"/>
14 | </g>
15 | </svg>
16 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_light/scalable/news.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <g>
 7 | 	<g>
 8 | 		<path fill-rule="evenodd" clip-rule="evenodd" fill="#F2F2F2" d="M26,0H6C2.7,0,0,2.7,0,6v14c0,3.3,2.7,6,6,6l4,6l4-6h12
 9 | 			c3.3,0,6-2.7,6-6V6C32,2.7,29.3,0,26,0z M16,20H6v-2h10V20z M26,16H6v-2h20V16z M26,12H6v-2h20V12z M26,8H6V6h20V8z"/>
10 | 	</g>
11 | </g>
12 | </svg>
13 | 


--------------------------------------------------------------------------------
/launcher/resources/pe_light/scalable/status-bad.svg:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 4 | <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 5 | 	 viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
 6 | <path fill="#F2F2F2" d="M26,32H6c-3.4,0-6-2.6-6-6V6c0-3.4,2.6-6,6-6h20c3.4,0,6,2.6,6,6v20C32,29.4,29.4,32,26,32z"/>
 7 | <path fill="#4D4D4D" d="M21.6,21.6c-0.8,0.8-2,0.8-2.8,0L16,18.8l-2.8,2.8c-0.8,0.8-2,0.8-2.8,0c-0.8-0.8-0.8-2,0-2.8l2.8-2.8
 8 | 	l-2.8-2.8c-0.8-0.8-0.8-2,0-2.8c0.8-0.8,2-0.8,2.8,0l2.8,2.8l2.8-2.8c0.8-0.8,2-0.8,2.8,0s0.8,2,0,2.8L18.8,16l2.8,2.8
 9 | 	C22.4,19.6,22.4,20.8,21.6,21.6z"/>
10 | </svg>
11 | 


--------------------------------------------------------------------------------
/launcher/resources/skins/shaders/bg.frag:
--------------------------------------------------------------------------------
 1 | #version 150 core
 2 | 
 3 | /* Copyright 2025 Petr Mrázek
 4 |  *
 5 |  * This source is subject to the Microsoft Permissive License (MS-PL).
 6 |  * Please see the COPYING.md file for more information.
 7 |  */
 8 | 
 9 | out vec4 finalColor;
10 | in vec4 gl_FragCoord;
11 | 
12 | uniform vec3 baseColor;
13 | uniform vec3 alternateColor;
14 | uniform float fDevicePixelSize;
15 | 
16 | void main() {
17 |     float fieldSize = fDevicePixelSize * 25.0;
18 |     if ((int(floor(gl_FragCoord.x / fieldSize) + floor(gl_FragCoord.y / fieldSize)) & 1) == 0)
19 |         finalColor = vec4(baseColor, 1.0);
20 |     else
21 |         finalColor = vec4(alternateColor, 1.0);
22 | }
23 | 


--------------------------------------------------------------------------------
/launcher/resources/skins/shaders/bg.vert:
--------------------------------------------------------------------------------
 1 | #version 150 core
 2 | 
 3 | /* Copyright 2025 Petr Mrázek
 4 |  *
 5 |  * This source is subject to the Microsoft Permissive License (MS-PL).
 6 |  * Please see the COPYING.md file for more information.
 7 |  */
 8 | 
 9 | in vec2 position;
10 | 
11 | void main() {
12 |     gl_Position = vec4(position, 0.0, 1.0);
13 | }
14 | 
15 | 


--------------------------------------------------------------------------------
/launcher/resources/skins/shaders/skin.vert:
--------------------------------------------------------------------------------
 1 | #version 150 core
 2 | 
 3 | /* Copyright 2025 Petr Mrázek
 4 |  *
 5 |  * This source is subject to the Microsoft Permissive License (MS-PL).
 6 |  * Please see the COPYING.md file for more information.
 7 |  */
 8 | 
 9 | // vertex shader
10 | 
11 | in vec3 position;
12 | in vec2 texcoords;
13 | in int texnr;
14 | in int transparency;
15 | 
16 | out vec2 texCoord;
17 | flat out int texID;
18 | flat out int texTransparency;
19 | 
20 | uniform mat4 worldToView;
21 | 
22 | void main() {
23 |     gl_Position = worldToView * vec4(position, 1.0);
24 |     texCoord = texcoords;
25 |     texID = texnr;
26 |     texTransparency = transparency;
27 | }
28 | 


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Alex_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Alex_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Alex_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Alex_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Ari_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Ari_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Ari_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Ari_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Efe_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Efe_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Efe_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Efe_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Kai_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Kai_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Kai_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Kai_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Makena_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Makena_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Makena_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Makena_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Noor_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Noor_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Noor_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Noor_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Steve_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Steve_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Steve_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Steve_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Sunny_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Sunny_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Sunny_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Sunny_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Zuri_Classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Zuri_Classic.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/Zuri_Slim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/Zuri_Slim.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/no_cape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/no_cape.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/placeholder_cape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/placeholder_cape.png


--------------------------------------------------------------------------------
/launcher/resources/skins/textures/placeholder_skin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/skins/textures/placeholder_skin.png


--------------------------------------------------------------------------------
/launcher/resources/sources/burfcat_hat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/sources/burfcat_hat.png


--------------------------------------------------------------------------------
/launcher/resources/sources/cattiversary.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/launcher/resources/sources/cattiversary.xcf


--------------------------------------------------------------------------------
/launcher/screenshots/ImgurUpload.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include "QObjectPtr.h"
 3 | #include "net/NetAction.h"
 4 | #include "Screenshot.h"
 5 | 
 6 | class ImgurUpload : public NetAction {
 7 | public:
 8 |     using Ptr = shared_qobject_ptr<ImgurUpload>;
 9 | 
10 |     explicit ImgurUpload(ScreenShot::Ptr shot);
11 |     static Ptr make(ScreenShot::Ptr shot) {
12 |         return Ptr(new ImgurUpload(shot));
13 |     }
14 | 
15 | protected
16 | slots:
17 |     void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) override;
18 |     void downloadError(QNetworkReply::NetworkError error) override;
19 |     void downloadFinished() override;
20 |     void downloadReadyRead() override {}
21 | 
22 | public
23 | slots:
24 |     void startImpl() override;
25 | 
26 | private:
27 |     ScreenShot::Ptr m_shot;
28 |     bool finished = true;
29 | };
30 | 


--------------------------------------------------------------------------------
/launcher/screenshots/Screenshot.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QDateTime>
 4 | #include <QString>
 5 | #include <QFileInfo>
 6 | #include <memory>
 7 | 
 8 | struct ScreenShot {
 9 |     using Ptr = std::shared_ptr<ScreenShot>;
10 | 
11 |     ScreenShot(QFileInfo file) {
12 |         m_file = file;
13 |     }
14 |     QFileInfo m_file;
15 |     QString m_url;
16 |     QString m_imgurId;
17 |     QString m_imgurDeleteHash;
18 | };
19 | 


--------------------------------------------------------------------------------
/launcher/skins/SkinUtils.h:
--------------------------------------------------------------------------------
 1 | /* Copyright 2025 Petr Mrázek
 2 |  *
 3 |  * This source is subject to the Microsoft Permissive License (MS-PL).
 4 |  * Please see the COPYING.md file for more information.
 5 |  */
 6 | 
 7 | #pragma once
 8 | 
 9 | #include <QString>
10 | #include <QByteArray>
11 | #include <QImage>
12 | 
13 | namespace Skins {
14 | bool readSkinFromFile(const QString& path, QByteArray& dataOut, QImage& imageOut, QString& keyOut, QString& textureIDOut);
15 | bool readSkinFromData(const QByteArray& data, QImage& imageOut, QString& textureIDOut);
16 | 
17 | QString hashSkin(const QImage& image);
18 | }
19 | 


--------------------------------------------------------------------------------
/launcher/tasks/SequentialTask.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "Task.h"
 4 | #include "QObjectPtr.h"
 5 | 
 6 | #include <QQueue>
 7 | 
 8 | class SequentialTask : public Task
 9 | {
10 |     Q_OBJECT
11 | public:
12 |     explicit SequentialTask(QObject *parent = 0);
13 |     virtual ~SequentialTask() {};
14 | 
15 |     void addTask(Task::Ptr task);
16 | 
17 | protected:
18 |     void executeTask();
19 | 
20 | private
21 | slots:
22 |     void startNext();
23 |     void subTaskFailed(const QString &msg);
24 |     void subTaskStatus(const QString &msg);
25 |     void subTaskProgress(qint64 current, qint64 total);
26 | 
27 | private:
28 |     QQueue<Task::Ptr > m_queue;
29 |     int m_currentIndex;
30 | };
31 | 


--------------------------------------------------------------------------------
/launcher/testdata/FileSystem-test_createShortcut-unix:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Type=Application
3 | TryExec=asdfDest
4 | Exec=asdfDest 'arg1' 'arg2'
5 | Name=asdf
6 | Icon=
7 | 


--------------------------------------------------------------------------------
/launcher/testdata/test_folder/assets/minecraft/textures/blah.txt:
--------------------------------------------------------------------------------
1 |  
2 | 


--------------------------------------------------------------------------------
/launcher/testdata/test_folder/pack.mcmeta:
--------------------------------------------------------------------------------
1 | {
2 |   "pack": {
3 |     "pack_format": 1,
4 |     "description": "Some resource pack maybe"
5 |   }
6 | }
7 | 


--------------------------------------------------------------------------------
/launcher/testdata/test_folder/pack.nfo:
--------------------------------------------------------------------------------
1 |  
2 | 


--------------------------------------------------------------------------------
/launcher/tools/JProfiler.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "BaseProfiler.h"
 4 | 
 5 | class JProfilerFactory : public BaseProfilerFactory
 6 | {
 7 | public:
 8 |     QString name() const override { return "JProfiler"; }
 9 |     void registerSettings(SettingsObjectPtr settings) override;
10 |     BaseExternalTool *createTool(InstancePtr instance, QObject *parent = 0) override;
11 |     bool check(QString *error) override;
12 |     bool check(const QString &path, QString *error) override;
13 | };
14 | 


--------------------------------------------------------------------------------
/launcher/tools/JVisualVM.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "BaseProfiler.h"
 4 | 
 5 | class JVisualVMFactory : public BaseProfilerFactory
 6 | {
 7 | public:
 8 |     QString name() const override { return "JVisualVM"; }
 9 |     void registerSettings(SettingsObjectPtr settings) override;
10 |     BaseExternalTool *createTool(InstancePtr instance, QObject *parent = 0) override;
11 |     bool check(QString *error) override;
12 |     bool check(const QString &path, QString *error) override;
13 | };
14 | 


--------------------------------------------------------------------------------
/launcher/tools/MCEditTool.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QString>
 4 | #include "settings/SettingsObject.h"
 5 | 
 6 | class MCEditTool
 7 | {
 8 | public:
 9 |     MCEditTool(SettingsObjectPtr settings);
10 |     void setPath(QString & path);
11 |     QString path() const;
12 |     bool check(const QString &toolPath, QString &error);
13 |     QString getProgramPath();
14 | private:
15 |     SettingsObjectPtr m_settings;
16 | };
17 | 


--------------------------------------------------------------------------------
/launcher/translations/POTranslator.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QTranslator>
 4 | 
 5 | struct POTranslatorPrivate;
 6 | 
 7 | class POTranslator : public QTranslator
 8 | {
 9 |     Q_OBJECT
10 | public:
11 |     explicit POTranslator(const QString& filename, QObject * parent = nullptr);
12 |     QString translate(const char * context, const char * sourceText, const char * disambiguation, int n) const override;
13 |     bool isEmpty() const override;
14 | private:
15 |     POTranslatorPrivate * d;
16 | };
17 | 


--------------------------------------------------------------------------------
/launcher/ui/ColorCache.cpp:
--------------------------------------------------------------------------------
 1 | #include "ColorCache.h"
 2 | 
 3 | 
 4 | /**
 5 |  * Blend the color with the front color, adapting to the back color
 6 |  */
 7 | QColor ColorCache::blend(QColor color)
 8 | {
 9 |     if (Rainbow::luma(m_front) > Rainbow::luma(m_back))
10 |     {
11 |         // for dark color schemes, produce a fitting color first
12 |         color = Rainbow::tint(m_front, color, 0.5);
13 |     }
14 |     // adapt contrast
15 |     return Rainbow::mix(m_front, color, m_bias);
16 | }
17 | 
18 | /**
19 |  * Blend the color with the back color
20 |  */
21 | QColor ColorCache::blendBackground(QColor color)
22 | {
23 |     // adapt contrast
24 |     return Rainbow::mix(m_back, color, m_bias);
25 | }
26 | 
27 | void ColorCache::recolorAll()
28 | {
29 |     auto iter = m_colors.begin();
30 |     while(iter != m_colors.end())
31 |     {
32 |         iter->front = blend(iter->original);
33 |         iter->back = blendBackground(iter->original);
34 |     }
35 | }
36 | 


--------------------------------------------------------------------------------
/launcher/ui/GuiUtil.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QWidget>
 4 | 
 5 | namespace GuiUtil
 6 | {
 7 | QString uploadPaste(const QString &text, QWidget *parentWidget);
 8 | void setClipboardText(const QString &text);
 9 | QStringList BrowseForFiles(QString context, QString caption, QString filter, QString defaultPath, QWidget *parentWidget);
10 | QString BrowseForFile(QString context, QString caption, QString filter, QString defaultPath, QWidget *parentWidget);
11 | }
12 | 


--------------------------------------------------------------------------------
/launcher/ui/dialogs/ModrinthExportDialog.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2023 arthomnix
 3 |  *
 4 |  * This source is subject to the Microsoft Public License (MS-PL).
 5 |  * Please see the COPYING.md file for more information.
 6 |  */
 7 | 
 8 | #pragma once
 9 | 
10 | #include <QDialog>
11 | #include "ExportInstanceDialog.h"
12 | 
13 | QT_BEGIN_NAMESPACE
14 | namespace Ui
15 | {
16 |     class ModrinthExportDialog;
17 | }
18 | QT_END_NAMESPACE
19 | 
20 | class ModrinthExportDialog : public QDialog
21 | {
22 | Q_OBJECT
23 | 
24 | public:
25 |     explicit ModrinthExportDialog(InstancePtr instance, QWidget *parent = nullptr);
26 | 
27 |     ~ModrinthExportDialog() override;
28 | 
29 | private slots:
30 |     void on_fileBrowseButton_clicked();
31 |     void on_datapackPathBrowse_clicked();
32 |     void accept() override;
33 |     void updateDialogState();
34 | 
35 | private:
36 |     Ui::ModrinthExportDialog *ui;
37 |     InstancePtr m_instance;
38 | };


--------------------------------------------------------------------------------
/launcher/ui/instanceview/AccessibleInstanceView.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | 
3 | #include <QString>
4 | class QAccessibleInterface;
5 | 
6 | QAccessibleInterface *groupViewAccessibleFactory(const QString &classname, QObject *object);
7 | 


--------------------------------------------------------------------------------
/launcher/ui/pages/BasePageContainer.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | class BasePageContainer
 4 | {
 5 | public:
 6 |     virtual ~BasePageContainer(){};
 7 |     virtual bool selectPage(QString pageId) = 0;
 8 |     virtual void refreshContainer() = 0;
 9 |     virtual bool requestClose() = 0;
10 | };
11 | 


--------------------------------------------------------------------------------
/launcher/ui/pages/instance/NotesPage.cpp:
--------------------------------------------------------------------------------
 1 | #include "NotesPage.h"
 2 | #include "ui_NotesPage.h"
 3 | #include <QTabBar>
 4 | 
 5 | NotesPage::NotesPage(BaseInstance *inst, QWidget *parent)
 6 |     : QWidget(parent), ui(new Ui::NotesPage), m_inst(inst)
 7 | {
 8 |     ui->setupUi(this);
 9 |     ui->noteEditor->setText(m_inst->notes());
10 | }
11 | 
12 | NotesPage::~NotesPage()
13 | {
14 |     delete ui;
15 | }
16 | 
17 | bool NotesPage::apply()
18 | {
19 |     m_inst->setNotes(ui->noteEditor->toPlainText());
20 |     return true;
21 | }
22 | 


--------------------------------------------------------------------------------
/launcher/ui/pages/instance/ResourcePackPage.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ModFolderPage.h"
 4 | #include "ui_ModFolderPage.h"
 5 | 
 6 | class ResourcePackPage : public ModFolderPage
 7 | {
 8 |     Q_OBJECT
 9 | public:
10 |     explicit ResourcePackPage(MinecraftInstance *instance, QWidget *parent = 0)
11 |         : ModFolderPage(instance, instance->resourcePackList(), "resourcepacks",
12 |                         "resourcepacks", tr("Resource packs"), "Resource-packs", parent)
13 |     {
14 |         ui->actionView_configs->setVisible(false);
15 |     }
16 |     virtual ~ResourcePackPage() {}
17 | 
18 |     virtual bool shouldDisplay() const override
19 |     {
20 |         return !m_inst->traits().contains("no-texturepacks") &&
21 |                !m_inst->traits().contains("texturepacks");
22 |     }
23 | };
24 | 


--------------------------------------------------------------------------------
/launcher/ui/pages/instance/ShaderPackPage.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ModFolderPage.h"
 4 | #include "ui_ModFolderPage.h"
 5 | 
 6 | class ShaderPackPage : public ModFolderPage
 7 | {
 8 |     Q_OBJECT
 9 | public:
10 |     explicit ShaderPackPage(MinecraftInstance *instance, QWidget *parent = 0)
11 |         : ModFolderPage(instance, instance->shaderPackList(), "shaderpacks",
12 |                         "shaderpacks", tr("Shader packs"), "Resource-packs", parent)
13 |     {
14 |         ui->actionView_configs->setVisible(false);
15 |     }
16 |     virtual ~ShaderPackPage() {}
17 | 
18 |     virtual bool shouldDisplay() const override
19 |     {
20 |         return true;
21 |     }
22 | };
23 | 


--------------------------------------------------------------------------------
/launcher/ui/pages/instance/TexturePackPage.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ModFolderPage.h"
 4 | #include "ui_ModFolderPage.h"
 5 | 
 6 | class TexturePackPage : public ModFolderPage
 7 | {
 8 |     Q_OBJECT
 9 | public:
10 |     explicit TexturePackPage(MinecraftInstance *instance, QWidget *parent = 0)
11 |         : ModFolderPage(instance, instance->texturePackList(), "texturepacks", "resourcepacks",
12 |                         tr("Texture packs"), "Texture-packs", parent)
13 |     {
14 |         ui->actionView_configs->setVisible(false);
15 |     }
16 |     virtual ~TexturePackPage() {}
17 | 
18 |     virtual bool shouldDisplay() const override
19 |     {
20 |         return m_inst->traits().contains("texturepacks");
21 |     }
22 | };
23 | 


--------------------------------------------------------------------------------
/launcher/ui/setupwizard/BaseWizardPage.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QWizardPage>
 4 | #include <QEvent>
 5 | 
 6 | class BaseWizardPage : public QWizardPage
 7 | {
 8 | public:
 9 |     explicit BaseWizardPage(QWidget *parent = Q_NULLPTR)
10 |         : QWizardPage(parent)
11 |     {
12 |     }
13 |     virtual ~BaseWizardPage() {};
14 | 
15 |     virtual bool wantsRefreshButton()
16 |     {
17 |         return false;
18 |     }
19 |     virtual void refresh()
20 |     {
21 |     }
22 | 
23 | protected:
24 |     virtual void retranslate() = 0;
25 |     void changeEvent(QEvent * event) override
26 |     {
27 |         if (event->type() == QEvent::LanguageChange)
28 |         {
29 |             retranslate();
30 |         }
31 |         QWizardPage::changeEvent(event);
32 |     }
33 | };
34 | 


--------------------------------------------------------------------------------
/launcher/ui/setupwizard/JavaWizardPage.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "BaseWizardPage.h"
 4 | 
 5 | class JavaSettingsWidget;
 6 | 
 7 | class JavaWizardPage : public BaseWizardPage
 8 | {
 9 |     Q_OBJECT
10 | public:
11 |     explicit JavaWizardPage(QWidget *parent = Q_NULLPTR);
12 | 
13 |     virtual ~JavaWizardPage()
14 |     {
15 |     };
16 | 
17 |     bool wantsRefreshButton() override;
18 |     void refresh() override;
19 |     void initializePage() override;
20 |     bool validatePage() override;
21 | 
22 | protected: /* methods */
23 |     void setupUi();
24 |     void retranslate() override;
25 | 
26 | private: /* data */
27 |     JavaSettingsWidget *m_java_widget = nullptr;
28 | };
29 | 
30 | 


--------------------------------------------------------------------------------
/launcher/ui/setupwizard/LanguageWizardPage.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "BaseWizardPage.h"
 4 | 
 5 | class LanguageSelectionWidget;
 6 | 
 7 | class LanguageWizardPage : public BaseWizardPage
 8 | {
 9 |     Q_OBJECT
10 | public:
11 |     explicit LanguageWizardPage(QWidget *parent = Q_NULLPTR);
12 | 
13 |     virtual ~LanguageWizardPage();
14 | 
15 |     bool wantsRefreshButton() override;
16 | 
17 |     void refresh() override;
18 | 
19 |     bool validatePage() override;
20 | 
21 | protected:
22 |     void retranslate() override;
23 | 
24 | private:
25 |     LanguageSelectionWidget *mainWidget = nullptr;
26 | };
27 | 


--------------------------------------------------------------------------------
/launcher/ui/themes/BrightTheme.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "FusionTheme.h"
 4 | 
 5 | class BrightTheme: public FusionTheme
 6 | {
 7 | public:
 8 |     virtual ~BrightTheme() {}
 9 | 
10 |     QString id() override;
11 |     QString name() override;
12 |     bool hasStyleSheet() override;
13 |     QString appStyleSheet() override;
14 |     bool hasColorScheme() override;
15 |     QPalette colorScheme() override;
16 |     double fadeAmount() override;
17 |     QColor fadeColor() override;
18 | };
19 | 
20 | 


--------------------------------------------------------------------------------
/launcher/ui/themes/CustomTheme.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ITheme.h"
 4 | 
 5 | class CustomTheme: public ITheme
 6 | {
 7 | public:
 8 |     CustomTheme(ITheme * baseTheme, QString folder);
 9 |     virtual ~CustomTheme() {}
10 | 
11 |     QString id() override;
12 |     QString name() override;
13 |     bool hasStyleSheet() override;
14 |     QString appStyleSheet() override;
15 |     bool hasColorScheme() override;
16 |     QPalette colorScheme() override;
17 |     double fadeAmount() override;
18 |     QColor fadeColor() override;
19 |     QString qtTheme() override;
20 |     QStringList searchPaths() override;
21 | 
22 | private: /* data */
23 |     QPalette m_palette;
24 |     QColor m_fadeColor;
25 |     double m_fadeAmount;
26 |     QString m_styleSheet;
27 |     QString m_name;
28 |     QString m_id;
29 |     QString m_widgets;
30 | };
31 | 
32 | 


--------------------------------------------------------------------------------
/launcher/ui/themes/DarkTheme.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "FusionTheme.h"
 4 | 
 5 | class DarkTheme: public FusionTheme
 6 | {
 7 | public:
 8 |     virtual ~DarkTheme() {}
 9 | 
10 |     QString id() override;
11 |     QString name() override;
12 |     bool hasStyleSheet() override;
13 |     QString appStyleSheet() override;
14 |     bool hasColorScheme() override;
15 |     QPalette colorScheme() override;
16 |     double fadeAmount() override;
17 |     QColor fadeColor() override;
18 | };
19 | 


--------------------------------------------------------------------------------
/launcher/ui/themes/FusionTheme.cpp:
--------------------------------------------------------------------------------
1 | #include "FusionTheme.h"
2 | 
3 | QString FusionTheme::qtTheme()
4 | {
5 |     return "Fusion";
6 | }
7 | 


--------------------------------------------------------------------------------
/launcher/ui/themes/FusionTheme.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ITheme.h"
 4 | 
 5 | class FusionTheme: public ITheme
 6 | {
 7 | public:
 8 |     virtual ~FusionTheme() {}
 9 | 
10 |     QString qtTheme() override;
11 | };
12 | 


--------------------------------------------------------------------------------
/launcher/ui/themes/ITheme.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QString>
 3 | #include <QPalette>
 4 | 
 5 | class QStyle;
 6 | 
 7 | class ITheme
 8 | {
 9 | public:
10 |     virtual ~ITheme() {}
11 |     virtual void apply(bool initial);
12 |     virtual QString id() = 0;
13 |     virtual QString name() = 0;
14 |     virtual bool hasStyleSheet() = 0;
15 |     virtual QString appStyleSheet() = 0;
16 |     virtual QString qtTheme() = 0;
17 |     virtual bool hasColorScheme() = 0;
18 |     virtual QPalette colorScheme() = 0;
19 |     virtual QColor fadeColor() = 0;
20 |     virtual double fadeAmount() = 0;
21 |     virtual QStringList searchPaths()
22 |     {
23 |         return {};
24 |     }
25 | 
26 |     static QPalette fadeInactive(QPalette in, qreal bias, QColor color);
27 | };
28 | 


--------------------------------------------------------------------------------
/launcher/ui/themes/SystemTheme.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include "ITheme.h"
 4 | 
 5 | class SystemTheme: public ITheme
 6 | {
 7 | public:
 8 |     SystemTheme();
 9 |     virtual ~SystemTheme() {}
10 |     void apply(bool initial) override;
11 | 
12 |     QString id() override;
13 |     QString name() override;
14 |     QString qtTheme() override;
15 |     bool hasStyleSheet() override;
16 |     QString appStyleSheet() override;
17 |     bool hasColorScheme() override;
18 |     QPalette colorScheme() override;
19 |     double fadeAmount() override;
20 |     QColor fadeColor() override;
21 | private:
22 |     QPalette systemPalette;
23 |     QString systemTheme;
24 | };
25 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/Common.cpp:
--------------------------------------------------------------------------------
 1 | #include "Common.h"
 2 | 
 3 | // Origin: Qt
 4 | QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
 5 |                                qreal &widthUsed)
 6 | {
 7 |     QStringList lines;
 8 |     height = 0;
 9 |     widthUsed = 0;
10 |     textLayout.beginLayout();
11 |     QString str = textLayout.text();
12 |     while (true)
13 |     {
14 |         QTextLine line = textLayout.createLine();
15 |         if (!line.isValid())
16 |             break;
17 |         if (line.textLength() == 0)
18 |             break;
19 |         line.setLineWidth(lineWidth);
20 |         line.setPosition(QPointF(0, height));
21 |         height += line.height();
22 |         lines.append(str.mid(line.textStart(), line.textLength()));
23 |         widthUsed = qMax(widthUsed, line.naturalTextWidth());
24 |     }
25 |     textLayout.endLayout();
26 |     return lines;
27 | }
28 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/Common.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include <QStringList>
3 | #include <QTextLayout>
4 | 
5 | QStringList viewItemTextLayout(QTextLayout &textLayout, int lineWidth, qreal &height,
6 |                         qreal &widthUsed);


--------------------------------------------------------------------------------
/launcher/ui/widgets/DropLabel.cpp:
--------------------------------------------------------------------------------
 1 | #include "DropLabel.h"
 2 | 
 3 | #include <QMimeData>
 4 | #include <QDropEvent>
 5 | 
 6 | DropLabel::DropLabel(QWidget *parent) : QLabel(parent)
 7 | {
 8 |     setAcceptDrops(true);
 9 | }
10 | 
11 | void DropLabel::dragEnterEvent(QDragEnterEvent *event)
12 | {
13 |     event->acceptProposedAction();
14 | }
15 | 
16 | void DropLabel::dragMoveEvent(QDragMoveEvent *event)
17 | {
18 |     event->acceptProposedAction();
19 | }
20 | 
21 | void DropLabel::dragLeaveEvent(QDragLeaveEvent *event)
22 | {
23 |     event->accept();
24 | }
25 | 
26 | void DropLabel::dropEvent(QDropEvent *event)
27 | {
28 |     const QMimeData *mimeData = event->mimeData();
29 | 
30 |     if (!mimeData)
31 |     {
32 |         return;
33 |     }
34 | 
35 |     if (mimeData->hasUrls()) {
36 |         auto urls = mimeData->urls();
37 |         emit droppedURLs(urls);
38 |     }
39 | 
40 |     event->acceptProposedAction();
41 | }
42 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/DropLabel.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QLabel>
 4 | 
 5 | class DropLabel : public QLabel
 6 | {
 7 |     Q_OBJECT
 8 | 
 9 | public:
10 |     explicit DropLabel(QWidget *parent = nullptr);
11 | 
12 | signals:
13 |     void droppedURLs(QList<QUrl> urls);
14 | 
15 | protected:
16 |     void dropEvent(QDropEvent *event) override;
17 |     void dragEnterEvent(QDragEnterEvent *event) override;
18 |     void dragMoveEvent(QDragMoveEvent *event) override;
19 |     void dragLeaveEvent(QDragLeaveEvent *event) override;
20 | };
21 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/FocusLineEdit.cpp:
--------------------------------------------------------------------------------
 1 | #include "FocusLineEdit.h"
 2 | #include <QDebug>
 3 | 
 4 | FocusLineEdit::FocusLineEdit(QWidget *parent) : QLineEdit(parent)
 5 | {
 6 |     _selectOnMousePress = false;
 7 | }
 8 | 
 9 | void FocusLineEdit::focusInEvent(QFocusEvent *e)
10 | {
11 |     QLineEdit::focusInEvent(e);
12 |     selectAll();
13 |     _selectOnMousePress = true;
14 | }
15 | 
16 | void FocusLineEdit::mousePressEvent(QMouseEvent *me)
17 | {
18 |     QLineEdit::mousePressEvent(me);
19 |     if (_selectOnMousePress)
20 |     {
21 |         selectAll();
22 |         _selectOnMousePress = false;
23 |     }
24 |     qDebug() << selectedText();
25 | }
26 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/FocusLineEdit.h:
--------------------------------------------------------------------------------
 1 | #include <QLineEdit>
 2 | 
 3 | class FocusLineEdit : public QLineEdit
 4 | {
 5 |     Q_OBJECT
 6 | public:
 7 |     FocusLineEdit(QWidget *parent);
 8 |     virtual ~FocusLineEdit()
 9 |     {
10 |     }
11 | 
12 | protected:
13 |     void focusInEvent(QFocusEvent *e);
14 |     void mousePressEvent(QMouseEvent *me);
15 | 
16 |     bool _selectOnMousePress;
17 | };
18 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/LineSeparator.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | #include <QWidget>
 3 | 
 4 | class QStyleOption;
 5 | 
 6 | class LineSeparator : public QWidget
 7 | {
 8 |     Q_OBJECT
 9 | 
10 | public:
11 |     /// Create a line separator. orientation is the orientation of the line.
12 |     explicit LineSeparator(QWidget *parent, Qt::Orientation orientation = Qt::Horizontal);
13 |     QSize sizeHint() const;
14 |     void paintEvent(QPaintEvent *);
15 |     void initStyleOption(QStyleOption *option) const;
16 | private:
17 |     Qt::Orientation m_orientation = Qt::Horizontal;
18 | };
19 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/ModListView.h:
--------------------------------------------------------------------------------
 1 | /* Copyright 2013-2021 MultiMC Contributors
 2 |  *
 3 |  * Licensed under the Apache License, Version 2.0 (the "License");
 4 |  * you may not use this file except in compliance with the License.
 5 |  * You may obtain a copy of the License at
 6 |  *
 7 |  *     http://www.apache.org/licenses/LICENSE-2.0
 8 |  *
 9 |  * Unless required by applicable law or agreed to in writing, software
10 |  * distributed under the License is distributed on an "AS IS" BASIS,
11 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 |  * See the License for the specific language governing permissions and
13 |  * limitations under the License.
14 |  */
15 | 
16 | #pragma once
17 | #include <QTreeView>
18 | 
19 | class ModListView: public QTreeView
20 | {
21 |     Q_OBJECT
22 | public:
23 |     explicit ModListView ( QWidget* parent = 0 );
24 |     virtual void setModel ( QAbstractItemModel* model );
25 | };
26 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/ProgressWidget.h:
--------------------------------------------------------------------------------
 1 | // Licensed under the Apache-2.0 license. See README.md for details.
 2 | 
 3 | #pragma once
 4 | 
 5 | #include <QWidget>
 6 | #include <memory>
 7 | 
 8 | class Task;
 9 | class QProgressBar;
10 | class QLabel;
11 | 
12 | class ProgressWidget : public QWidget
13 | {
14 |     Q_OBJECT
15 | public:
16 |     explicit ProgressWidget(QWidget *parent = nullptr);
17 | 
18 | public slots:
19 |     void start(std::shared_ptr<Task> task);
20 |     bool exec(std::shared_ptr<Task> task);
21 | 
22 | private slots:
23 |     void handleTaskFinish();
24 |     void handleTaskStatus(const QString &status);
25 |     void handleTaskProgress(qint64 current, qint64 total);
26 |     void taskDestroyed();
27 | 
28 | private:
29 |     QLabel *m_label;
30 |     QProgressBar *m_bar;
31 |     std::shared_ptr<Task> m_task;
32 | };
33 | 


--------------------------------------------------------------------------------
/launcher/ui/widgets/WideBar.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QToolBar>
 4 | #include <QAction>
 5 | #include <QMap>
 6 | 
 7 | class QMenu;
 8 | 
 9 | class WideBar : public QToolBar
10 | {
11 |     Q_OBJECT
12 | 
13 | public:
14 |     explicit WideBar(const QString &title, QWidget * parent = nullptr);
15 |     explicit WideBar(QWidget * parent = nullptr);
16 |     virtual ~WideBar();
17 | 
18 |     void addAction(QAction *action);
19 |     void addSeparator();
20 |     void insertSpacer(QAction *action);
21 |     QMenu *createContextMenu(QWidget *parent = nullptr, const QString & title = QString());
22 | 
23 | private:
24 |     struct BarEntry;
25 |     QList<BarEntry *> m_entries;
26 | };
27 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/2.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "ApiVersion": 0,
 3 |     "Id": 1,
 4 |     "Name": "1.0.1",
 5 |     "Files": [
 6 |         {
 7 |             "Path": "fileOne",
 8 |             "Sources": [
 9 |                 {
10 |                     "SourceType": "http",
11 |                     "Url": "@TEST_DATA_URL@/fileOneB"
12 |                 }
13 |             ],
14 |             "Executable": true,
15 |             "Perms": 493,
16 |             "MD5": "42915a71277c9016668cce7b82c6b577"
17 |         },
18 |         {
19 |             "Path": "fileTwo",
20 |             "Sources": [
21 |                 {
22 |                     "SourceType": "http",
23 |                     "Url": "@TEST_DATA_URL@/fileTwo"
24 |                 }
25 |             ],
26 |             "Executable": false,
27 |             "Perms": 644,
28 |             "MD5": "38f94f54fa3eb72b0ea836538c10b043"
29 |         }
30 |     ]
31 | }
32 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/channels.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "format_version": 0,
 3 |     "channels": [
 4 |         {
 5 |             "id": "develop",
 6 |             "name": "Develop",
 7 |             "description": "The channel called \"develop\"",
 8 |             "url": "@TEST_DATA_URL@"
 9 |         },
10 |         {
11 |             "id": "stable",
12 |             "name": "Stable",
13 |             "description": "It's stable at least",
14 |             "url": "@TEST_DATA_URL@"
15 |         },
16 |         {
17 |             "id": "42",
18 |             "name": "The Channel",
19 |             "description": "This is the channel that is going to answer all of your questions",
20 |             "url": "https://dent.me/tea"
21 |         }
22 |     ]
23 | }
24 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/errorChannels.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "format_version": 0,
 3 |     "channels": [
 4 |         {
 5 |             "id": "",
 6 |             "name": "Develop",
 7 |             "description": "The channel called \"develop\"",
 8 |             "url": "http://example.org/stuff"
 9 |         },
10 |         {
11 |             "id": "stable",
12 |             "name": "",
13 |             "description": "It's stable at least",
14 |             "url": "ftp://username@host/path/to/stuff"
15 |         },
16 |         {
17 |             "id": "42",
18 |             "name": "The Channel",
19 |             "description": "This is the channel that is going to answer all of your questions",
20 |             "url": ""
21 |         }
22 |     ]
23 | }
24 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/fileOneA:
--------------------------------------------------------------------------------
1 | stuff
2 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/fileOneB:
--------------------------------------------------------------------------------
1 | stuff
2 | 
3 | more stuff that came in the new version
4 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/fileThree:
--------------------------------------------------------------------------------
1 | this is yet another file
2 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/fileTwo:
--------------------------------------------------------------------------------
1 | some other stuff
2 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/garbageChannels.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "format_version": 0,
 3 |     "channels": [
 4 |         {
 5 |             "id": "develop",
 6 |             "name": "Develop",
 7 |             "description": "The channel called \"develop\"",
 8 | aa            "url": "http://example.org/stuff"
 9 |         },
10 | a            "id": "stable",
11 |             "name": "Stable",
12 |             "description": "It's stable at least",
13 |             "url": "ftp://username@host/path/to/stuff"
14 |         },
15 |         {
16 |             "id": "42"f
17 |             "name": "The Channel",
18 |             "description": "This is the channel that is going to answer all of your questions",
19 |             "url": "https://dent.me/tea"
20 |         }
21 |     ]
22 | }
23 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/index.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "ApiVersion": 0,
 3 |     "Versions": [
 4 |         { "Id": 0, "Name": "1.0.0" },
 5 |         { "Id": 1, "Name": "1.0.1" },
 6 |         { "Id": 2, "Name": "1.0.2" },
 7 |         { "Id": 3, "Name": "1.0.3" }
 8 |     ]
 9 | }
10 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/noChannels.json:
--------------------------------------------------------------------------------
1 | {
2 |     "format_version": 0,
3 |     "channels": [
4 |     ]
5 | }
6 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/oneChannel.json:
--------------------------------------------------------------------------------
 1 | {
 2 |     "format_version": 0,
 3 |     "channels": [
 4 |         {
 5 |             "id": "develop",
 6 |             "name": "Develop",
 7 |             "description": "The channel called \"develop\"",
 8 |             "url": "http://example.org/stuff"
 9 |         }
10 |     ]
11 | }
12 | 


--------------------------------------------------------------------------------
/launcher/updater/testdata/tst_DownloadTask-test_writeInstallScript.xml:
--------------------------------------------------------------------------------
 1 | <update version="3">
 2 |  <install>
 3 |   <file>
 4 |    <source>sourceOne</source>
 5 |    <dest>destOne</dest>
 6 |    <mode>0777</mode>
 7 |   </file>
 8 |   <file>
 9 |    <source>MultiMC.exe</source>
10 |    <dest>M/u/l/t/i/M/C/e/x/e</dest>
11 |    <mode>0644</mode>
12 |   </file>
13 |  </install>
14 |  <uninstall>
15 |   <file>toDelete.abc</file>
16 |  </uninstall>
17 | </update>
18 | 


--------------------------------------------------------------------------------
/libraries/LocalPeer/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.1)
 2 | project(LocalPeer)
 3 | 
 4 | find_package(Qt5 COMPONENTS Core Network REQUIRED)
 5 | 
 6 | set(SINGLE_SOURCES
 7 | src/LocalPeer.cpp
 8 | src/LockedFile.cpp
 9 | src/LockedFile.h
10 | include/LocalPeer.h
11 | )
12 | 
13 | if(UNIX)
14 |     list(APPEND SINGLE_SOURCES
15 |         src/LockedFile_unix.cpp
16 |     )
17 | endif()
18 | 
19 | if(WIN32)
20 |     list(APPEND SINGLE_SOURCES
21 |         src/LockedFile_win.cpp
22 |     )
23 | endif()
24 | 
25 | add_library(LocalPeer STATIC ${SINGLE_SOURCES})
26 | target_include_directories(LocalPeer PUBLIC include)
27 | 
28 | target_link_libraries(LocalPeer Qt5::Core Qt5::Network)
29 | 


--------------------------------------------------------------------------------
/libraries/classparser/include/classparser_config.h:
--------------------------------------------------------------------------------
 1 | /* Copyright 2013-2021 MultiMC Contributors
 2 |  *
 3 |  * Licensed under the Apache License, Version 2.0 (the "License");
 4 |  * you may not use this file except in compliance with the License.
 5 |  * You may obtain a copy of the License at
 6 |  *
 7 |  *     http://www.apache.org/licenses/LICENSE-2.0
 8 |  *
 9 |  * Unless required by applicable law or agreed to in writing, software
10 |  * distributed under the License is distributed on an "AS IS" BASIS,
11 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 |  * See the License for the specific language governing permissions and
13 |  * limitations under the License.
14 |  */
15 | 
16 | #include <QtCore/QtGlobal>
17 | 
18 | #ifdef CLASSPARSER_LIBRARY
19 | #define CLASSPARSER_EXPORT Q_DECL_EXPORT
20 | #else
21 | #define CLASSPARSER_EXPORT Q_DECL_IMPORT
22 | #endif
23 | 


--------------------------------------------------------------------------------
/libraries/classparser/src/errors.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include <exception>
3 | namespace java
4 | {
5 | class classfile_exception : public std::exception
6 | {
7 | };
8 | }
9 | 


--------------------------------------------------------------------------------
/libraries/hoedown/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | # hoedown 3.0.2 - https://github.com/hoedown/hoedown/archive/3.0.2.tar.gz
 2 | project(hoedown LANGUAGES C VERSION 3.0.2)
 3 | 
 4 | set(HOEDOWN_SOURCES
 5 | include/hoedown/autolink.h
 6 | include/hoedown/buffer.h
 7 | include/hoedown/document.h
 8 | include/hoedown/escape.h
 9 | include/hoedown/html.h
10 | include/hoedown/stack.h
11 | include/hoedown/version.h
12 | src/autolink.c
13 | src/buffer.c
14 | src/document.c
15 | src/escape.c
16 | src/html.c
17 | src/html_blocks.c
18 | src/html_smartypants.c
19 | src/stack.c
20 | src/version.c
21 | )
22 | 
23 | # Include self.
24 | add_library(hoedown STATIC ${HOEDOWN_SOURCES})
25 | 
26 | target_include_directories(hoedown PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
27 | 


--------------------------------------------------------------------------------
/libraries/hoedown/LICENSE:
--------------------------------------------------------------------------------
 1 | Copyright (c) 2008, Natacha Porté
 2 | Copyright (c) 2011, Vicent Martí
 3 | Copyright (c) 2014, Xavier Mendez, Devin Torres and the Hoedown authors
 4 | 
 5 | Permission to use, copy, modify, and distribute this software for any
 6 | purpose with or without fee is hereby granted, provided that the above
 7 | copyright notice and this permission notice appear in all copies.
 8 | 
 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 | 


--------------------------------------------------------------------------------
/libraries/hoedown/README.md:
--------------------------------------------------------------------------------
 1 | Hoedown
 2 | =======
 3 | 
 4 | This is Hoedown 3.0.2, taken from [the hoedown github repo](https://github.com/hoedown/hoedown).
 5 | 
 6 | `Hoedown` is a revived fork of [Sundown](https://github.com/vmg/sundown),
 7 | the Markdown parser based on the original code of the
 8 | [Upskirt library](http://fossil.instinctive.eu/libupskirt/index)
 9 | by Natacha Porté.
10 | 


--------------------------------------------------------------------------------
/libraries/hoedown/include/hoedown/escape.h:
--------------------------------------------------------------------------------
 1 | /* escape.h - escape utilities */
 2 | 
 3 | #ifndef HOEDOWN_ESCAPE_H
 4 | #define HOEDOWN_ESCAPE_H
 5 | 
 6 | #include "buffer.h"
 7 | 
 8 | #ifdef __cplusplus
 9 | extern "C" {
10 | #endif
11 | 
12 | 
13 | /*************
14 |  * FUNCTIONS *
15 |  *************/
16 | 
17 | /* hoedown_escape_href: escape (part of) a URL inside HTML */
18 | void hoedown_escape_href(hoedown_buffer *ob, const uint8_t *data, size_t size);
19 | 
20 | /* hoedown_escape_html: escape HTML */
21 | void hoedown_escape_html(hoedown_buffer *ob, const uint8_t *data, size_t size, int secure);
22 | 
23 | 
24 | #ifdef __cplusplus
25 | }
26 | #endif
27 | 
28 | #endif /** HOEDOWN_ESCAPE_H **/
29 | 


--------------------------------------------------------------------------------
/libraries/hoedown/include/hoedown/version.h:
--------------------------------------------------------------------------------
 1 | /* version.h - holds Hoedown's version */
 2 | 
 3 | #ifndef HOEDOWN_VERSION_H
 4 | #define HOEDOWN_VERSION_H
 5 | 
 6 | #ifdef __cplusplus
 7 | extern "C" {
 8 | #endif
 9 | 
10 | 
11 | /*************
12 |  * CONSTANTS *
13 |  *************/
14 | 
15 | #define HOEDOWN_VERSION "3.0.2"
16 | #define HOEDOWN_VERSION_MAJOR 3
17 | #define HOEDOWN_VERSION_MINOR 0
18 | #define HOEDOWN_VERSION_REVISION 2
19 | 
20 | 
21 | /*************
22 |  * FUNCTIONS *
23 |  *************/
24 | 
25 | /* hoedown_version: retrieve Hoedown's version numbers */
26 | void hoedown_version(int *major, int *minor, int *revision);
27 | 
28 | 
29 | #ifdef __cplusplus
30 | }
31 | #endif
32 | 
33 | #endif /** HOEDOWN_VERSION_H **/
34 | 


--------------------------------------------------------------------------------
/libraries/hoedown/src/version.c:
--------------------------------------------------------------------------------
 1 | #include "hoedown/version.h"
 2 | 
 3 | void
 4 | hoedown_version(int *major, int *minor, int *revision)
 5 | {
 6 |     *major = HOEDOWN_VERSION_MAJOR;
 7 |     *minor = HOEDOWN_VERSION_MINOR;
 8 |     *revision = HOEDOWN_VERSION_REVISION;
 9 | }
10 | 


--------------------------------------------------------------------------------
/libraries/iconfix/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.1)
 2 | project(iconfix)
 3 | 
 4 | find_package(Qt5Core REQUIRED QUIET)
 5 | find_package(Qt5Widgets REQUIRED QUIET)
 6 | 
 7 | set(ICONFIX_SOURCES
 8 | xdgicon.h
 9 | xdgicon.cpp
10 | internal/qhexstring_p.h
11 | internal/qiconloader.cpp
12 | internal/qiconloader_p.h
13 | )
14 | 
15 | add_library(Launcher_iconfix SHARED ${ICONFIX_SOURCES})
16 | target_include_directories(Launcher_iconfix PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}" )
17 | 
18 | target_link_libraries(Launcher_iconfix Qt5::Core Qt5::Widgets)
19 | 
20 | set_target_properties(Launcher_iconfix PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1)
21 | generate_export_header(Launcher_iconfix)
22 | 
23 | # Install it
24 | install(
25 |     TARGETS Launcher_iconfix
26 |     RUNTIME DESTINATION ${LIBRARY_DEST_DIR}
27 |     LIBRARY DESTINATION ${LIBRARY_DEST_DIR}
28 | )


--------------------------------------------------------------------------------
/libraries/javacheck/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | *.iml
3 | out
4 | .classpath
5 | .idea
6 | .project
7 | 


--------------------------------------------------------------------------------
/libraries/javacheck/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.1)
 2 | project(launcher Java)
 3 | find_package(Java 1.7 REQUIRED COMPONENTS Development)
 4 | 
 5 | include(UseJava)
 6 | set(CMAKE_JAVA_JAR_ENTRY_POINT JavaCheck)
 7 | set(CMAKE_JAVA_COMPILE_FLAGS -target 7 -source 7 -Xlint:deprecation -Xlint:unchecked)
 8 | 
 9 | set(SRC
10 |     JavaCheck.java
11 | )
12 | 
13 | add_jar(JavaCheck ${SRC})
14 | install_jar(JavaCheck "${JARS_DEST_DIR}")
15 | 


--------------------------------------------------------------------------------
/libraries/javacheck/JavaCheck.java:
--------------------------------------------------------------------------------
 1 | import java.lang.Integer;
 2 | 
 3 | public class JavaCheck
 4 | {
 5 |     private static final String[] keys = {"os.arch", "java.version", "java.vendor"};
 6 |     public static void main (String [] args)
 7 |     {
 8 |         int ret = 0;
 9 |         for(String key : keys)
10 |         {
11 |             String property = System.getProperty(key);
12 |             if(property != null)
13 |             {
14 |                 System.out.println(key + "=" + property);
15 |             }
16 |             else
17 |             {
18 |                 ret = 1;
19 |             }
20 |         }
21 |         
22 |         System.exit(ret);
23 |     }
24 | }
25 | 


--------------------------------------------------------------------------------
/libraries/katabasis/.gitignore:
--------------------------------------------------------------------------------
1 | build/
2 | *.kdev4
3 | 


--------------------------------------------------------------------------------
/libraries/katabasis/include/katabasis/Bits.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QString>
 4 | #include <QDateTime>
 5 | #include <QMap>
 6 | #include <QVariantMap>
 7 | 
 8 | namespace Katabasis {
 9 | enum class Activity {
10 |     Idle,
11 |     LoggingIn,
12 |     LoggingOut,
13 |     Refreshing,
14 |     FailedSoft, //!< soft failure. this generally means the user auth details haven't been invalidated
15 |     FailedHard, //!< hard failure. auth is invalid
16 |     FailedGone, //!< hard failure. auth is invalid, and the account no longer exists
17 |     Succeeded
18 | };
19 | 
20 | enum class Validity {
21 |     None,
22 |     Assumed,
23 |     Certain
24 | };
25 | 
26 | struct Token {
27 |     QDateTime issueInstant;
28 |     QDateTime notAfter;
29 |     QString token;
30 |     QString refresh_token;
31 |     QVariantMap extra;
32 | 
33 |     Validity validity = Validity::None;
34 |     bool persistent = true;
35 | };
36 | 
37 | }
38 | 


--------------------------------------------------------------------------------
/libraries/katabasis/include/katabasis/RequestParameter.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | namespace Katabasis {
 4 | 
 5 | /// Request parameter (name-value pair) participating in authentication.
 6 | struct RequestParameter {
 7 |     RequestParameter(const QByteArray &n, const QByteArray &v): name(n), value(v) {}
 8 |     bool operator <(const RequestParameter &other) const {
 9 |         return (name == other.name)? (value < other.value): (name < other.name);
10 |     }
11 |     QByteArray name;
12 |     QByteArray value;
13 | };
14 | 
15 | }
16 | 


--------------------------------------------------------------------------------
/libraries/katabasis/src/JsonResponse.cpp:
--------------------------------------------------------------------------------
 1 | #include "JsonResponse.h"
 2 | 
 3 | #include <QByteArray>
 4 | #include <QDebug>
 5 | #include <QJsonDocument>
 6 | #include <QJsonObject>
 7 | 
 8 | namespace Katabasis {
 9 | 
10 | QVariantMap parseJsonResponse(const QByteArray &data) {
11 |     QJsonParseError err;
12 |     QJsonDocument doc = QJsonDocument::fromJson(data, &err);
13 |     if (err.error != QJsonParseError::NoError) {
14 |         qWarning() << "parseTokenResponse: Failed to parse token response due to err:" << err.errorString();
15 |         return QVariantMap();
16 |     }
17 | 
18 |     if (!doc.isObject()) {
19 |         qWarning() << "parseTokenResponse: Token response is not an object";
20 |         return QVariantMap();
21 |     }
22 | 
23 |     return doc.object().toVariantMap();
24 | }
25 | 
26 | }
27 | 


--------------------------------------------------------------------------------
/libraries/katabasis/src/JsonResponse.h:
--------------------------------------------------------------------------------
 1 | #pragma once
 2 | 
 3 | #include <QVariantMap>
 4 | 
 5 | class QByteArray;
 6 | 
 7 | namespace Katabasis {
 8 | 
 9 |     /// Parse JSON data into a QVariantMap
10 | QVariantMap parseJsonResponse(const QByteArray &data);
11 | 
12 | }
13 | 


--------------------------------------------------------------------------------
/libraries/launcher/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | *.iml
3 | out
4 | .classpath
5 | .idea
6 | .project
7 | 


--------------------------------------------------------------------------------
/libraries/launcher/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.1)
 2 | project(launcher Java)
 3 | find_package(Java 1.7 REQUIRED COMPONENTS Development)
 4 | 
 5 | include(UseJava)
 6 | set(CMAKE_JAVA_JAR_ENTRY_POINT org.multimc.EntryPoint)
 7 | set(CMAKE_JAVA_COMPILE_FLAGS -target 7 -source 7 -Xlint:deprecation -Xlint:unchecked)
 8 | 
 9 | set(SRC
10 |     org/multimc/EntryPoint.java
11 |     org/multimc/Launcher.java
12 |     org/multimc/LegacyFrame.java
13 |     org/multimc/NotFoundException.java
14 |     org/multimc/ParamBucket.java
15 |     org/multimc/ParseException.java
16 |     org/multimc/Utils.java
17 |     org/multimc/onesix/OneSixLauncher.java
18 |     net/minecraft/Launcher.java
19 | )
20 | add_jar(NewLaunch ${SRC})
21 | install_jar(NewLaunch "${JARS_DEST_DIR}")
22 | 


--------------------------------------------------------------------------------
/libraries/launcher/org/multimc/Launcher.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2012-2021 MultiMC Contributors
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package org.multimc;
18 | 
19 | public interface Launcher
20 | {
21 |     abstract int launch(ParamBucket params);
22 | }
23 | 


--------------------------------------------------------------------------------
/libraries/launcher/org/multimc/NotFoundException.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2012-2021 MultiMC Contributors
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package org.multimc;
18 | 
19 | public class NotFoundException extends Exception
20 | {
21 | }
22 | 


--------------------------------------------------------------------------------
/libraries/launcher/org/multimc/ParseException.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2012-2021 MultiMC Contributors
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package org.multimc;
18 | 
19 | public class ParseException extends java.lang.Exception
20 | {
21 |     public ParseException() { super(); }
22 |     public ParseException(String message) {
23 |         super(message);
24 |     }
25 | }
26 | 


--------------------------------------------------------------------------------
/libraries/optional-bare/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.1)
2 | project(optional-bare)
3 | 
4 | add_library(optional-bare INTERFACE)
5 | target_include_directories(optional-bare INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
6 | 


--------------------------------------------------------------------------------
/libraries/optional-bare/README.md:
--------------------------------------------------------------------------------
1 | # optional bare
2 | 
3 | A simple single-file header-only version of a C++17-like optional for default-constructible, copyable types, for C++98 and later.
4 | 
5 | Imported from: https://github.com/martinmoene/optional-bare/commit/0bb1d183bcee1e854c4ea196b533252c51f98b81
6 | 


--------------------------------------------------------------------------------
/libraries/rainbow/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.1)
 2 | project(rainbow)
 3 | 
 4 | find_package(Qt5Core REQUIRED QUIET)
 5 | find_package(Qt5Gui REQUIRED QUIET)
 6 | 
 7 | set(RAINBOW_SOURCES
 8 | src/rainbow.cpp
 9 | )
10 | 
11 | add_definitions(-DRAINBOW_LIBRARY)
12 | add_library(Launcher_rainbow SHARED ${RAINBOW_SOURCES})
13 | target_include_directories(Launcher_rainbow PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
14 | 
15 | target_link_libraries(Launcher_rainbow Qt5::Core Qt5::Gui)
16 | 
17 | # Install it
18 | install(
19 |     TARGETS Launcher_rainbow
20 |     RUNTIME DESTINATION ${LIBRARY_DEST_DIR}
21 |     LIBRARY DESTINATION ${LIBRARY_DEST_DIR}
22 | )
23 | 


--------------------------------------------------------------------------------
/libraries/rainbow/COPYING.LIB:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MultiMC/Launcher/abc582466ee7a88a398604c11b8ccb6be424c1fe/libraries/rainbow/COPYING.LIB


--------------------------------------------------------------------------------
/libraries/systeminfo/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | project(systeminfo)
 2 | 
 3 | find_package(Qt5Core)
 4 | 
 5 | set(systeminfo_SOURCES
 6 |     include/sys.h
 7 |     include/distroutils.h
 8 |     src/distroutils.cpp
 9 | )
10 | 
11 | set(systeminfo_INCLUDE_DIRS
12 |         ${CMAKE_CURRENT_LIST_DIR}/include)
13 | 
14 | if (WIN32)
15 |     list(APPEND systeminfo_SOURCES src/sys_win32.cpp src/ntstatus/NtStatusNames.cpp)
16 | elseif (UNIX)
17 |     if(APPLE)
18 |         list(APPEND systeminfo_SOURCES src/sys_apple.cpp)
19 |     else()
20 |         list(APPEND systeminfo_SOURCES src/sys_unix.cpp)
21 |     endif()
22 | endif()
23 | 
24 | add_library(systeminfo STATIC ${systeminfo_SOURCES})
25 | target_link_libraries(systeminfo Qt5::Core Qt5::Gui Qt5::Network)
26 | target_include_directories(systeminfo PUBLIC ${systeminfo_INCLUDE_DIRS})
27 | 
28 | include (UnitTest)
29 | add_unit_test(sys
30 |     SOURCES src/sys_test.cpp
31 |     LIBS systeminfo
32 | )
33 | 


--------------------------------------------------------------------------------
/libraries/systeminfo/include/distroutils.h:
--------------------------------------------------------------------------------
 1 | #include "sys.h"
 2 | #include <QString>
 3 | 
 4 | namespace Sys {
 5 | struct LsbInfo
 6 | {
 7 |     QString distributor;
 8 |     QString version;
 9 |     QString description;
10 |     QString codename;
11 | };
12 | 
13 | bool main_lsb_info(LsbInfo & out);
14 | bool fallback_lsb_info(Sys::LsbInfo & out);
15 | void lsb_postprocess(Sys::LsbInfo & lsb, Sys::DistributionInfo & out);
16 | Sys::DistributionInfo read_lsb_release();
17 | 
18 | QString _extract_distribution(const QString & x);
19 | QString _extract_version(const QString & x);
20 | Sys::DistributionInfo read_legacy_release();
21 | 
22 | Sys::DistributionInfo read_os_release();
23 | }
24 | 


--------------------------------------------------------------------------------
/libraries/systeminfo/include/ntstatus/NtStatusNames.hpp:
--------------------------------------------------------------------------------
 1 | // AUTO GENERATED FILE, DO NOT EDIT!
 2 | // This file has been generated by nt-status-gen from https://github.com/Janrupf/nt-status-gen
 3 | //
 4 | // Used compiler: MSVC version 19.28.29337.0
 5 | // Targeted OS: Windows version 10.0.19044
 6 | 
 7 | #pragma once
 8 | 
 9 | #include <cstdint>
10 | #include <string>
11 | 
12 | namespace NtStatus {
13 |    bool lookupNtStatusCodeName(uint64_t code, std::string &nameOut);
14 | }
15 | 


--------------------------------------------------------------------------------
/libraries/systeminfo/include/ntstatus/README.md:
--------------------------------------------------------------------------------
1 | Source files in this directory have been generated using
2 | https://github.com/Janrupf/nt-status-gen
3 | 


--------------------------------------------------------------------------------
/libraries/systeminfo/src/ntstatus/README.md:
--------------------------------------------------------------------------------
1 | Source files in this directory have been generated using
2 | https://github.com/Janrupf/nt-status-gen
3 | 


--------------------------------------------------------------------------------
/libraries/systeminfo/src/sys_test.cpp:
--------------------------------------------------------------------------------
 1 | #include <QTest>
 2 | #include "TestUtil.h"
 3 | 
 4 | #include <sys.h>
 5 | 
 6 | class SysTest : public QObject
 7 | {
 8 |     Q_OBJECT
 9 | private
10 | slots:
11 | 
12 |     void test_kernelNotNull()
13 |     {
14 |         auto kinfo = Sys::getKernelInfo();
15 |         QVERIFY(!kinfo.kernelName.isEmpty());
16 |         QVERIFY(kinfo.kernelVersion != "0.0");
17 |     }
18 | /*
19 |     void test_systemDistroNotNull()
20 |     {
21 |         auto kinfo = Sys::getDistributionInfo();
22 |         QVERIFY(!kinfo.distributionName.isEmpty());
23 |         QVERIFY(!kinfo.distributionVersion.isEmpty());
24 |         qDebug() << "Distro: " << kinfo.distributionName << "version" << kinfo.distributionVersion;
25 |     }
26 | */
27 | };
28 | 
29 | QTEST_GUILESS_MAIN(SysTest)
30 | 
31 | #include "sys_test.moc"
32 | 


--------------------------------------------------------------------------------
/libraries/tomlc99/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | project(tomlc99)
 2 | 
 3 | set(tomlc99_SOURCES
 4 | include/toml.h
 5 | src/toml.c
 6 | )
 7 | 
 8 | add_library(tomlc99 STATIC ${tomlc99_SOURCES})
 9 | 
10 | target_include_directories(tomlc99 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
11 | 


--------------------------------------------------------------------------------